<template> <section class="landing-designer py-8"> <div class="section-header">Theme Designer</div> <p class="section-detail">Designer is the ultimate tool to create your own PrimeVue experience powered by a SASS based theme engine with 500+ variables and a Visual Designer.</p> <div class="designer-main mt-7 justify-content-center px-5 lg:px-8" :style="{ backgroundImage: `url('https://primefaces.org/cdn/primevue/images/landing/wave-${$appState.darkTheme ? 'dark' : 'light'}.svg')`, backgroundSize: 'cover' }"> <div class="box p-4 flex flex-column md:flex-row z-1 designer-editor"> <div class="mr-0 md:mr-4 p-4 designer-controls box border-bottom-1 border-left-none border-right-none border-top-none md:border-bottom-none md:border-right-1" style="border-radius: '10px'"> <div class="text-center mb-4"> <img :src="'https://primefaces.org/cdn/primevue/images/landing/' + `${$appState.darkTheme ? 'designer-light.svg' : 'designer-dark.svg'}`" /> </div> <div class="p-fluid"> <span class="font-semibold block mb-3">Primary</span> <div> <button type="button" class="border-circle w-2rem h-2rem p-link mr-3" style="background-color: #4f8ff7" @click="changeTheme('#4f8ff7', '#3575dd')"></button> <button type="button" class="border-circle w-2rem h-2rem p-link mr-3" style="background-color: #03e8bf" @click="changeTheme('#03E8BF', '#02ba99')"></button> <button type="button" class="border-circle w-2rem h-2rem p-link mr-3" style="background-color: #916aff" @click="changeTheme('#916AFF', '#7455cc')"></button> <button type="button" class="border-circle w-2rem h-2rem p-link" style="background-color: #ffbd80" @click="changeTheme('#FFBD80', '#cc9766')"></button> </div> <span class="font-semibold block mt-4 mb-3">Font</span> <Dropdown v-model="font" :options="fonts" optionLabel="label" @change="changeFont"></Dropdown> <span class="font-semibold block mt-4 mb-3">Size</span> <div class="flex flex-wrap gap-4 align-items-center"> <div class="flex align-items-center"> <RadioButton id="size-small" v-model="size" value="small" name="sizevalue" /> <label for="size-small" class="ml-2 font-medium">Small</label> </div> <div class="flex align-items-center"> <RadioButton id="size-normal" v-model="size" value="normal" name="sizevalue" /> <label for="size-normal" class="ml-2 font-medium">Normal</label> </div> <div class="flex align-items-center"> <RadioButton id="size-large" v-model="size" value="large" name="sizevalue" /> <label for="size-large" class="ml-2 font-medium">Large</label> </div> </div> <span class="font-semibold block mt-4 mb-3">Input Style</span> <div class="flex align-items-center mb-6"> <div class="flex align-items-center"> <RadioButton id="inputStyle1" value="outlined" name="inputstylevalue" :modelValue="inputstyle" @update:modelValue="onChange" /> <label for="inputStyle1" class="ml-2 font-medium">Outlined</label> </div> <div class="flex align-items-center ml-4"> <RadioButton id="inputStyle2" value="filled" name="inputstylevalue" :modelValue="inputstyle" @update:modelValue="onChange" /> <label for="inputStyle2" class="ml-2 font-medium">Filled</label> </div> </div> <a href="https://designer.primevue.org" class="font-semibold p-3 border-round flex align-items-center linkbox active"> <span>View Full Version</span> <i class="pi pi-arrow-right ml-auto"></i> </a> </div> </div> <div :ref="editorRef" :class="editorclass" style="border-radius: '10px'"> <div class="p-fluid formgrid grid pt-3"> <div class="field col-12 xl:col-6"> <label for="username" class="font-semibold mb-3 p-component">Username</label> <InputText id="username" type="text" /> </div> <div class="field col-12 xl:col-6"> <label for="email" class="font-semibold mb-3 p-component">Email</label> <InputText id="email" type="text" /> </div> <div class="field col-12 xl:col-6"> <label for="price" class="font-semibold mb-3 p-component">Price</label> <div class="p-inputgroup"> <span class="p-inputgroup-addon">$</span> <InputNumber id="price" placeholder="Price" /> <span class="p-inputgroup-addon">.00</span> </div> </div> <div class="field col-12 xl:col-6"> <label for="date" class="font-semibold mb-3 p-component">Date</label> <div class="p-inputgroup"> <span class="p-inputgroup-addon"> <i class="pi pi-calendar"></i> </span> <InputMask id="date" placeholder="mm/dd/yyyy" mask="99/99/9999" slotChar="mm/dd/yyyy" /> </div> </div> <div class="field col-12 xl:col-6"> <span class="font-semibold mb-2 block mb-3 mt-3 p-component">City</span> <Listbox v-model="selectedCity" :options="cities" optionLabel="name" /> </div> <div class="field col-12 xl:col-6"> <label for="email" class="font-semibold mb-3 mt-3 p-component">Range</label> <Slider v-model="range" range /> <span class="font-semibold mb-2 block mb-3 mt-5 p-component">Checkboxes</span> <div class="flex flex-column xl:flex-row xl:align-items-center"> <div class="flex align-items-center"> <Checkbox id="cb1" v-model="values" :value="value1" name="cbvalue" /> <label for="cb1" class="ml-2 font-medium p-component white-space-nowrap">Option 1</label> </div> <div class="flex align-items-center mt-3 xl:mt-0 xl:ml-4"> <Checkbox id="cb2" v-model="values" :value="value2" name="cbvalue" /> <label for="cb2" class="ml-2 font-medium p-component white-space-nowrap">Option 2</label> </div> </div> <span class="font-semibold mb-2 block mb-3 mt-5 p-component">Buttons</span> <div class="flex align-items-center"> <Button type="button" label="Save" icon="pi pi-check" class="mr-1"></Button> <Button type="button" label="Clear" icon="pi pi-times" outlined class="ml-1"></Button> </div> </div> </div> </div> </div> </div> </section> </template> <script> export default { data() { return { size: 'normal', font: { label: 'System', value: '-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol' }, fonts: [ { label: 'Arial', value: 'Arial,Helvetica Neue,Helvetica,sans-serif' }, { label: 'System', value: '-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol' }, { label: 'Trebuchet MS', value: 'Trebuchet MS,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Tahoma,sans-serif' }, { label: 'Verdana', value: 'Verdana,Geneva,sans-serif' } ], selectedCity: null, cities: [ { name: 'New York', code: 'NY' }, { name: 'Rome', code: 'RM' }, { name: 'London', code: 'LDN' }, { name: 'Paris', code: 'PRS' } ], range: [20, 80], value1: 1, value2: 2, values: [] }; }, editor: null, methods: { changeTheme(color, darker) { this.editor.style.setProperty('--dd-primary', color); this.editor.style.setProperty('--dd-primary-darker', darker); }, changeFont(event) { this.editor.style.setProperty('--dd-font', event.value.value); this.font = event.value; }, onChange(value) { this.$primevue.config.inputStyle = value; }, editorRef(el) { this.editor = el; } }, computed: { editorclass() { return [ 'designer-demo', { 'p-input-filled': this.$primevue.config.inputStyle === 'filled', 'demo-size-small': this.size === 'small', 'demo-size-large': this.size === 'large' } ]; }, inputstyle() { return this.$primevue.config.inputStyle; } } }; </script>