<template> <DocSectionText v-bind="$attrs"> <p>Each StepperPanel content can easily be customized with the default slot instead of using the built-in modes. Additionally, header, content, and separator sections of the StepperPanel are customizable via templating.</p> </DocSectionText> <div class="card flex flex-column justify-content-center"> <Stepper v-model:activeStep="active" :pt="{ stepperpanel: { separator: ({ context }) => ({ style: { background: context.highlighted ? '#b9deb9' : '#ece9fc' } }) } }" > <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.active ? 'pi pi-user' : 'pi pi-check'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : '#b9deb9' }" size="large" shape="circle" /> <span class="text-lg ml-2">Account</span> </div> </template> <div class="flex flex-column justify-content-center gap-2 mx-auto" style="max-width: 20rem"> <h3 class="text-center mt-3">Personal Details</h3> <div class="field p-fluid"> <IconField> <InputIcon> <i class="pi pi-user" /> </InputIcon> <InputText id="input" v-model="name" type="text" placeholder="Name" /> </IconField> </div> <div class="field p-fluid"> <IconField> <InputIcon> <i class="pi pi-envelope" /> </InputIcon> <InputText id="email" v-model="email" type="email" placeholder="Email" /> </IconField> </div> <div class="field p-fluid"> <InputText v-model="password" type="text" placeholder="Password" /> </div> <div class="field p-fluid"> <InputText v-model="cpassword" type="text" placeholder="Confirm Password" /> </div> </div> </StepperPanel> <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.highlighted || completed ? 'pi pi-check' : 'pi pi-shopping-cart'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : slotProps.highlighted || completed ? '#b9deb9' : null }" size="large" shape="circle" /> <span class="text-lg ml-2">Cart</span> </div> </template> <DataView :value="products"> <template #header> <h3 class="text-center">Cart Details</h3> </template> <template #list="slotProps"> <div class="grid grid-nogutter"> <div v-for="(item, index) in slotProps.items" :key="index" class="col-12"> <div class="flex flex-column sm:flex-row sm:align-items-center p-4 gap-3" :class="{ 'border-top-1 surface-border': index !== 0 }"> <div class="md:w-10rem relative"> <img class="block xl:block mx-auto border-round w-full" :src="`https://primefaces.org/cdn/primevue/images/product/${item.image}`" :alt="item.name" /> </div> <div class="flex flex-column md:flex-row justify-content-between md:align-items-center flex-1 gap-4"> <div class="flex flex-row md:flex-column justify-content-between align-items-start gap-2"> <div> <span class="font-medium text-secondary text-sm">{{ item.category }}</span> <div class="text-lg font-medium text-900 mt-2">{{ item.name }}</div> </div> <div class="surface-100 p-1" style="border-radius: 30px"> <div class="surface-0 flex align-items-center gap-2 justify-content-center py-1 px-2" style="border-radius: 30px; box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.04), 0px 1px 2px 0px rgba(0, 0, 0, 0.06)"> <span class="text-900 font-medium text-sm">{{ item.rating }}</span> <i class="pi pi-star-fill text-yellow-500"></i> </div> </div> </div> <div class="flex flex-column md:align-items-end gap-5"> <span class="text-xl font-semibold text-900">${{ item.price }}</span> <div class="flex flex-row-reverse md:flex-row gap-2"> <InputNumber v-model="quantity[index]" showButtons buttonLayout="horizontal" inputClass="w-3rem text-center" :min="0"> <template #incrementbuttonicon> <span class="pi pi-plus" /> </template> <template #decrementbuttonicon> <span class="pi pi-minus" /> </template> </InputNumber> </div> </div> </div> </div> </div> </div> </template> </DataView> </StepperPanel> <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.highlighted || completed ? 'pi pi-check' : 'pi pi-money-bill'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : slotProps.highlighted || completed ? '#b9deb9' : null }" size="large" shape="circle" /> <span class="text-lg ml-2">Billing</span> </div> </template> <h3 class="text-center mt-3">Payment</h3> <div class="grid formgrid p-fluid"> <div class="col-12 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">Card Number</label> <InputMask v-model="cc" mask="9999-9999-9999-9999" placeholder="9999-9999-9999-9999" /> </div> <div class="col-12 lg:col-6 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">Expiry Date</label> <InputMask v-model="exp" mask="99/99" placeholder="99/99" slotChar="MM/YY" /> </div> <div class="col-12 lg:col-6 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">CVC</label> <InputMask v-model="cvc" mask="999" placeholder="999" /> </div> <div class="col-12 field mb-0"> <label for="holderName" class="text-900 font-medium mb-3 ml-1">Cardholder Name</label> <InputText id="holderName" type="text" class="w-full mb-3" /> </div> </div> </StepperPanel> <template #end> <div v-if="!completed" class="flex justify-content-end gap-2"> <Button v-if="active !== 0" label="Back" severity="secondary" @click="active -= 1" /> <Button v-if="active !== 2" label="Continue" @click="active += 1" /> <Button v-if="active === 2" label="Complete" @click=" () => { active = null; completed = true; } " /> </div> <div v-else class="flex flex-column justify-content-center mx-auto"> <Message severity="success">The order was submitted successfully.</Message> <Button label="New Order" class="w-10rem mx-auto" @click=" () => { active = 0; completed = false; } " /> </div> </template> </Stepper> </div> <DocSectionCode :code="code" /> </template> <script> import { ProductService } from '@/service/ProductService'; export default { data() { return { active: 0, completed: false, products: null, name: null, email: null, password: null, cpassword: null, quantity: [1, 2], cc: null, cvc: null, exp: null, code: { basic: ` <Stepper v-model:activeStep="active" :pt="{ stepperpanel: { separator: ({ context }) => ({ style: { background: context.highlighted ? '#b9deb9' : '#ece9fc' } }) } }" > <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.active ? 'pi pi-user' : 'pi pi-check'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : '#b9deb9' }" size="large" shape="circle" /> <span class="text-lg ml-2">Account</span> </div> </template> <div class="flex flex-column justify-content-center gap-2 mx-auto" style="max-width: 20rem"> <h3 class="text-center mt-3">Personal Details</h3> <div class="field p-fluid"> <IconField> <InputIcon> <i class="pi pi-user" /> </InputIcon> <InputText id="input" v-model="name" type="text" placeholder="Name" /> </IconField> </div> <div class="field p-fluid"> <IconField> <InputIcon> <i class="pi pi-envelope" /> </InputIcon> <InputText id="email" v-model="email" type="email" placeholder="Email" /> </IconField> </div> <div class="field p-fluid"> <InputText v-model="password" type="text" placeholder="Password" /> </div> <div class="field p-fluid"> <InputText v-model="cpassword" type="text" placeholder="Confirm Password" /> </div> </div> </StepperPanel> <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.highlighted || completed ? 'pi pi-check' : 'pi pi-shopping-cart'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : slotProps.highlighted || completed ? '#b9deb9' : null }" size="large" shape="circle" /> <span class="text-lg ml-2">Cart</span> </div> </template> <DataView :value="products"> <template #header> <h3 class="text-center">Cart Details</h3> </template> <template #list="slotProps"> <div class="grid grid-nogutter"> <div v-for="(item, index) in slotProps.items" :key="index" class="col-12"> <div class="flex flex-column sm:flex-row sm:align-items-center p-4 gap-3" :class="{ 'border-top-1 surface-border': index !== 0 }"> <div class="md:w-10rem relative"> <img class="block xl:block mx-auto border-round w-full" :src="\`https://primefaces.org/cdn/primevue/images/product/\${item.image}\`" :alt="item.name" /> </div> <div class="flex flex-column md:flex-row justify-content-between md:align-items-center flex-1 gap-4"> <div class="flex flex-row md:flex-column justify-content-between align-items-start gap-2"> <div> <span class="font-medium text-secondary text-sm">{{ item.category }}</span> <div class="text-lg font-medium text-900 mt-2">{{ item.name }}</div> </div> <div class="surface-100 p-1" style="border-radius: 30px"> <div class="surface-0 flex align-items-center gap-2 justify-content-center py-1 px-2" style="border-radius: 30px; box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.04), 0px 1px 2px 0px rgba(0, 0, 0, 0.06)"> <span class="text-900 font-medium text-sm">{{ item.rating }}</span> <i class="pi pi-star-fill text-yellow-500"></i> </div> </div> </div> <div class="flex flex-column md:align-items-end gap-5"> <span class="text-xl font-semibold text-900">\${{ item.price }}</span> <div class="flex flex-row-reverse md:flex-row gap-2"> <InputNumber v-model="quantity[index]" showButtons buttonLayout="horizontal" inputClass="w-3rem text-center" :min="0"> <template #incrementbuttonicon> <span class="pi pi-plus" /> </template> <template #decrementbuttonicon> <span class="pi pi-minus" /> </template> </InputNumber> </div> </div> </div> </div> </div> </div> </template> </DataView> </StepperPanel> <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.highlighted || completed ? 'pi pi-check' : 'pi pi-money-bill'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : slotProps.highlighted || completed ? '#b9deb9' : null }" size="large" shape="circle" /> <span class="text-lg ml-2">Billing</span> </div> </template> <h3 class="text-center mt-3">Payment</h3> <div class="grid formgrid p-fluid"> <div class="col-12 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">Card Number</label> <InputMask v-model="cc" mask="9999-9999-9999-9999" placeholder="9999-9999-9999-9999" /> </div> <div class="col-12 lg:col-6 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">Expiry Date</label> <InputMask v-model="exp" mask="99/99" placeholder="99/99" slotChar="MM/YY" /> </div> <div class="col-12 lg:col-6 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">CVC</label> <InputMask v-model="cvc" mask="999" placeholder="999" /> </div> <div class="col-12 field mb-0"> <label for="holderName" class="text-900 font-medium mb-3 ml-1">Cardholder Name</label> <InputText id="holderName" type="text" class="w-full mb-3" /> </div> </div> </StepperPanel> <template #end> <div v-if="!completed" class="flex justify-content-end gap-2"> <Button v-if="active !== 0" label="Back" severity="secondary" @click="active -= 1" /> <Button v-if="active !== 2" label="Continue" @click="active += 1" /> <Button v-if="active === 2" label="Complete" @click=" () => { active = null; completed = true; } " /> </div> <div v-else class="flex flex-column justify-content-center mx-auto"> <Message severity="success">The order was submitted successfully.</Message> <Button label="New Order" class="w-10rem mx-auto" @click=" () => { active = 0; completed = false; } " /> </div> </template> </Stepper> `, options: ` <template> <div class="card flex flex-column justify-content-center"> <Stepper v-model:activeStep="active" :pt="{ stepperpanel: { separator: ({ context }) => ({ style: { background: context.highlighted ? '#b9deb9' : '#ece9fc' } }) } }" > <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.active ? 'pi pi-user' : 'pi pi-check'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : '#b9deb9' }" size="large" shape="circle" /> <span class="text-lg ml-2">Account</span> </div> </template> <div class="flex flex-column justify-content-center gap-2 mx-auto" style="max-width: 20rem"> <h3 class="text-center mt-3">Personal Details</h3> <div class="field p-fluid"> <IconField> <InputIcon> <i class="pi pi-user" /> </InputIcon> <InputText id="input" v-model="name" type="text" placeholder="Name" /> </IconField> </div> <div class="field p-fluid"> <IconField> <InputIcon> <i class="pi pi-envelope" /> </InputIcon> <InputText id="email" v-model="email" type="email" placeholder="Email" /> </IconField> </div> <div class="field p-fluid"> <InputText v-model="password" type="text" placeholder="Password" /> </div> <div class="field p-fluid"> <InputText v-model="cpassword" type="text" placeholder="Confirm Password" /> </div> </div> </StepperPanel> <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.highlighted || completed ? 'pi pi-check' : 'pi pi-shopping-cart'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : slotProps.highlighted || completed ? '#b9deb9' : null }" size="large" shape="circle" /> <span class="text-lg ml-2">Cart</span> </div> </template> <DataView :value="products"> <template #header> <h3 class="text-center">Cart Details</h3> </template> <template #list="slotProps"> <div class="grid grid-nogutter"> <div v-for="(item, index) in slotProps.items" :key="index" class="col-12"> <div class="flex flex-column sm:flex-row sm:align-items-center p-4 gap-3" :class="{ 'border-top-1 surface-border': index !== 0 }"> <div class="md:w-10rem relative"> <img class="block xl:block mx-auto border-round w-full" :src="\`https://primefaces.org/cdn/primevue/images/product/\${item.image}\`" :alt="item.name" /> </div> <div class="flex flex-column md:flex-row justify-content-between md:align-items-center flex-1 gap-4"> <div class="flex flex-row md:flex-column justify-content-between align-items-start gap-2"> <div> <span class="font-medium text-secondary text-sm">{{ item.category }}</span> <div class="text-lg font-medium text-900 mt-2">{{ item.name }}</div> </div> <div class="surface-100 p-1" style="border-radius: 30px"> <div class="surface-0 flex align-items-center gap-2 justify-content-center py-1 px-2" style="border-radius: 30px; box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.04), 0px 1px 2px 0px rgba(0, 0, 0, 0.06)"> <span class="text-900 font-medium text-sm">{{ item.rating }}</span> <i class="pi pi-star-fill text-yellow-500"></i> </div> </div> </div> <div class="flex flex-column md:align-items-end gap-5"> <span class="text-xl font-semibold text-900">\${{ item.price }}</span> <div class="flex flex-row-reverse md:flex-row gap-2"> <InputNumber v-model="quantity[index]" showButtons buttonLayout="horizontal" inputClass="w-3rem text-center" :min="0"> <template #incrementbuttonicon> <span class="pi pi-plus" /> </template> <template #decrementbuttonicon> <span class="pi pi-minus" /> </template> </InputNumber> </div> </div> </div> </div> </div> </div> </template> </DataView> </StepperPanel> <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.highlighted || completed ? 'pi pi-check' : 'pi pi-money-bill'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : slotProps.highlighted || completed ? '#b9deb9' : null }" size="large" shape="circle" /> <span class="text-lg ml-2">Billing</span> </div> </template> <h3 class="text-center mt-3">Payment</h3> <div class="grid formgrid p-fluid"> <div class="col-12 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">Card Number</label> <InputMask v-model="cc" mask="9999-9999-9999-9999" placeholder="9999-9999-9999-9999" /> </div> <div class="col-12 lg:col-6 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">Expiry Date</label> <InputMask v-model="exp" mask="99/99" placeholder="99/99" slotChar="MM/YY" /> </div> <div class="col-12 lg:col-6 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">CVC</label> <InputMask v-model="cvc" mask="999" placeholder="999" /> </div> <div class="col-12 field mb-0"> <label for="holderName" class="text-900 font-medium mb-3 ml-1">Cardholder Name</label> <InputText id="holderName" type="text" class="w-full mb-3" /> </div> </div> </StepperPanel> <template #end> <div v-if="!completed" class="flex justify-content-end gap-2"> <Button v-if="active !== 0" label="Back" severity="secondary" @click="active -= 1" /> <Button v-if="active !== 2" label="Continue" @click="active += 1" /> <Button v-if="active === 2" label="Complete" @click=" () => { active = null; completed = true; } " /> </div> <div v-else class="flex flex-column justify-content-center mx-auto"> <Message severity="success">The order was submitted successfully.</Message> <Button label="New Order" class="w-10rem mx-auto" @click=" () => { active = 0; completed = false; } " /> </div> </template> </Stepper> </div> </template> <script> import { ProductService } from '@/service/ProductService'; export default { data() { return { active: 0, completed: false, products: null, name: null, email: null, password: null, cpassword: null, quantity: [1, 2], cc: null, cvc: null, exp: null } }, mounted() { ProductService.getProductsSmall().then((data) => (this.products = data.slice(0, 2))); } } <\/script> `, composition: ` <template> <div class="card flex flex-column justify-content-center"> <Stepper v-model:activeStep="active" :pt="{ stepperpanel: { separator: ({ context }) => ({ style: { background: context.highlighted ? '#b9deb9' : '#ece9fc' } }) } }" > <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.active ? 'pi pi-user' : 'pi pi-check'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : '#b9deb9' }" size="large" shape="circle" /> <span class="text-lg ml-2">Account</span> </div> </template> <div class="flex flex-column justify-content-center gap-2 mx-auto" style="max-width: 20rem"> <h3 class="text-center mt-3">Personal Details</h3> <div class="field p-fluid"> <IconField> <InputIcon> <i class="pi pi-user" /> </InputIcon> <InputText id="input" v-model="name" type="text" placeholder="Name" /> </IconField> </div> <div class="field p-fluid"> <IconField> <InputIcon> <i class="pi pi-envelope" /> </InputIcon> <InputText id="email" v-model="email" type="email" placeholder="Email" /> </IconField> </div> <div class="field p-fluid"> <InputText v-model="password" type="text" placeholder="Password" /> </div> <div class="field p-fluid"> <InputText v-model="cpassword" type="text" placeholder="Confirm Password" /> </div> </div> </StepperPanel> <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.highlighted || completed ? 'pi pi-check' : 'pi pi-shopping-cart'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : slotProps.highlighted || completed ? '#b9deb9' : null }" size="large" shape="circle" /> <span class="text-lg ml-2">Cart</span> </div> </template> <DataView :value="products"> <template #header> <h3 class="text-center">Cart Details</h3> </template> <template #list="slotProps"> <div class="grid grid-nogutter"> <div v-for="(item, index) in slotProps.items" :key="index" class="col-12"> <div class="flex flex-column sm:flex-row sm:align-items-center p-4 gap-3" :class="{ 'border-top-1 surface-border': index !== 0 }"> <div class="md:w-10rem relative"> <img class="block xl:block mx-auto border-round w-full" :src="\`https://primefaces.org/cdn/primevue/images/product/\${item.image}\`" :alt="item.name" /> </div> <div class="flex flex-column md:flex-row justify-content-between md:align-items-center flex-1 gap-4"> <div class="flex flex-row md:flex-column justify-content-between align-items-start gap-2"> <div> <span class="font-medium text-secondary text-sm">{{ item.category }}</span> <div class="text-lg font-medium text-900 mt-2">{{ item.name }}</div> </div> <div class="surface-100 p-1" style="border-radius: 30px"> <div class="surface-0 flex align-items-center gap-2 justify-content-center py-1 px-2" style="border-radius: 30px; box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.04), 0px 1px 2px 0px rgba(0, 0, 0, 0.06)"> <span class="text-900 font-medium text-sm">{{ item.rating }}</span> <i class="pi pi-star-fill text-yellow-500"></i> </div> </div> </div> <div class="flex flex-column md:align-items-end gap-5"> <span class="text-xl font-semibold text-900">\${{ item.price }}</span> <div class="flex flex-row-reverse md:flex-row gap-2"> <InputNumber v-model="quantity[index]" showButtons buttonLayout="horizontal" inputClass="w-3rem text-center" :min="0"> <template #incrementbuttonicon> <span class="pi pi-plus" /> </template> <template #decrementbuttonicon> <span class="pi pi-minus" /> </template> </InputNumber> </div> </div> </div> </div> </div> </div> </template> </DataView> </StepperPanel> <StepperPanel> <template #header="slotProps"> <div :class="slotProps.class" @click="() => slotProps.clickCallback(event)"> <Avatar :icon="slotProps.highlighted || completed ? 'pi pi-check' : 'pi pi-money-bill'" :style="{ backgroundColor: slotProps.active ? '#ece9fc' : slotProps.highlighted || completed ? '#b9deb9' : null }" size="large" shape="circle" /> <span class="text-lg ml-2">Billing</span> </div> </template> <h3 class="text-center mt-3">Payment</h3> <div class="grid formgrid p-fluid"> <div class="col-12 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">Card Number</label> <InputMask v-model="cc" mask="9999-9999-9999-9999" placeholder="9999-9999-9999-9999" /> </div> <div class="col-12 lg:col-6 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">Expiry Date</label> <InputMask v-model="exp" mask="99/99" placeholder="99/99" slotChar="MM/YY" /> </div> <div class="col-12 lg:col-6 field mb-4"> <label class="text-900 font-medium mb-3 ml-1">CVC</label> <InputMask v-model="cvc" mask="999" placeholder="999" /> </div> <div class="col-12 field mb-0"> <label for="holderName" class="text-900 font-medium mb-3 ml-1">Cardholder Name</label> <InputText id="holderName" type="text" class="w-full mb-3" /> </div> </div> </StepperPanel> <template #end> <div v-if="!completed" class="flex justify-content-end gap-2"> <Button v-if="active !== 0" label="Back" severity="secondary" @click="active -= 1" /> <Button v-if="active !== 2" label="Continue" @click="active += 1" /> <Button v-if="active === 2" label="Complete" @click=" () => { active = null; completed = true; } " /> </div> <div v-else class="flex flex-column justify-content-center mx-auto"> <Message severity="success">The order was submitted successfully.</Message> <Button label="New Order" class="w-10rem mx-auto" @click=" () => { active = 0; completed = false; } " /> </div> </template> </Stepper> </div> </template> <script setup> import { ref, onMounted } from 'vue'; import { ProductService } from '@/service/ProductService'; onMounted(() => { ProductService.getProductsSmall().then((data) => (products.value = data.slice(0, 9))); }); const active = ref(0); const completed = ref(false); const products = ref(); const name = ref(); const email = ref(); const password = ref(); const cpassword = ref(); const quantity = ref([1, 2]); const cc = ref(); const cvc = ref(); const exp = ref(); <\/script> ` } }; }, mounted() { ProductService.getProductsSmall().then((data) => (this.products = data.slice(0, 2))); } }; </script>