<template> <div :class="containerClass"> <div class="layout-config-content-wrapper"> <a href="#" class="layout-config-button" @click="toggleConfigurator"> <i class="pi pi-cog"></i> </a> <a href="#" class="layout-config-close" @click="hideConfigurator"> <i class="pi pi-times"></i> </a> <div class="layout-config-content"> <div> <h4>Component Scale</h4> <div class="config-scale"> <Button icon="pi pi-minus" @click="decrementScale()" class="p-button-text" :disabled="scale === scales[0]" /> <i v-for="s of scales" :key="s" class="pi pi-circle-fill" :class="{ 'scale-active': s === scale }" /> <Button icon="pi pi-plus" @click="incrementScale()" class="p-button-text" :disabled="scale === scales[scales.length - 1]" /> </div> <AppInputStyleSwitch /> <h4>Ripple Effect</h4> <InputSwitch :modelValue="rippleActive" @update:modelValue="onRippleChange" /> <h4>Free Themes</h4> <p>Built-in component themes created by the <a href="https://www.primefaces.org/designer/primevue">PrimeVue Theme Designer</a>.</p> <h5>Bootstrap</h5> <div class="grid free-themes"> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'bootstrap4-light-blue')"> <img src="/demo/images/themes/bootstrap4-light-blue.svg" alt="Bootstrap Light Blue" /> </button> <span>Blue</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'bootstrap4-light-purple')"> <img src="/demo/images/themes/bootstrap4-light-purple.svg" alt="Bootstrap Light Blue" /> </button> <span>Purple</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'bootstrap4-dark-blue', true)"> <img src="/demo/images/themes/bootstrap4-dark-blue.svg" alt="Bootstrap Dark Blue" /> </button> <span>Blue</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'bootstrap4-dark-purple', true)"> <img src="/demo/images/themes/bootstrap4-dark-purple.svg" alt="Bootstrap Dark Blue" /> </button> <span>Purple</span> </div> </div> <h5>Material Design</h5> <div class="grid free-themes"> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'md-light-indigo')"> <img src="/demo/images/themes/md-light-indigo.svg" alt="Material Light Indigo" /> </button> <span>Indigo</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'md-light-deeppurple')"> <img src="/demo/images/themes/md-light-deeppurple.svg" alt="Material Light Deep Purple" /> </button> <span>Deep Purple</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'md-dark-indigo', true)"> <img src="/demo/images/themes/md-dark-indigo.svg" alt="Material Dark Indigo" /> </button> <span>Indigo</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'md-dark-deeppurple', true)"> <img src="/demo/images/themes/md-dark-deeppurple.svg" alt="Material Dark Deep Purple" /> </button> <span>Deep Purple</span> </div> </div> <h5>Material Design Compact</h5> <div class="grid free-themes"> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'mdc-light-indigo')"> <img src="/demo/images/themes/md-light-indigo.svg" alt="Material Compact Light Indigo" /> </button> <span>Indigo</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'mdc-light-deeppurple')"> <img src="/demo/images/themes/md-light-deeppurple.svg" alt="Material Compact Deep Purple" /> </button> <span>Deep Purple</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'mdc-dark-indigo', true)"> <img src="/demo/images/themes/md-dark-indigo.svg" alt="Material Compact Dark Indigo" /> </button> <span>Indigo</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'mdc-dark-deeppurple', true)"> <img src="/demo/images/themes/md-dark-deeppurple.svg" alt="Material Compact Dark Deep Purple" /> </button> <span>Deep Purple</span> </div> </div> <h5>Tailwind</h5> <div class="grid free-themes"> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'tailwind-light')"> <img src="/demo/images/themes/tailwind-light.png" alt="Tailwind Light" /> </button> <span>Tailwind Light</span> </div> </div> <h5>Fluent UI</h5> <div class="grid free-themes"> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'fluent-light')"> <img src="/demo/images/themes/fluent-light.png" alt="Fluent Light" /> </button> <span>Fluent Light</span> </div> </div> <h5 class="flex align-items-center">PrimeOne Design <Tag class="ml-3" value="NEW" rounded severity="success"></Tag></h5> <div class="grid free-themes"> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'lara-light-indigo')"> <img src="/demo/images/themes/lara-light-indigo.png" alt="Lara Light Indigo" /> </button> <span>Lara Light Indigo</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'lara-light-blue')"> <img src="/demo/images/themes/lara-light-blue.png" alt="Lara Light Blue" /> </button> <span>Lara Light Blue</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'lara-light-purple')"> <img src="/demo/images/themes/lara-light-purple.png" alt="Lara Light Purple" /> </button> <span>Lara Light Purple</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'lara-light-teal')"> <img src="/demo/images/themes/lara-light-teal.png" alt="Lara Light Teal" /> </button> <span>Lara Light Teal</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'lara-dark-indigo', true)"> <img src="/demo/images/themes/lara-dark-indigo.png" alt="Lara Dark Indigo" /> </button> <span>Lara Dark Indigo</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'lara-dark-blue', true)"> <img src="/demo/images/themes/lara-dark-blue.png" alt="Lara Dark Blue" /> </button> <span>Lara Dark Blue</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'lara-dark-purple', true)"> <img src="/demo/images/themes/lara-dark-purple.png" alt="Lara Dark Purple" /> </button> <span>Lara Dark Purple</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'lara-dark-teal', true)"> <img src="/demo/images/themes/lara-dark-teal.png" alt="Lara Dark Teal" /> </button> <span>Lara Dark Teal</span> </div> </div> <h5>PrimeOne Design - Legacy</h5> <div class="grid free-themes"> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'saga-blue')"> <img src="/demo/images/themes/saga-blue.png" alt="Saga Blue" /> </button> <span>Saga Blue</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'saga-green')"> <img src="/demo/images/themes/saga-green.png" alt="Saga Green" /> </button> <span>Saga Green</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'saga-orange')"> <img src="/demo/images/themes/saga-orange.png" alt="Saga Orange" /> </button> <span>Saga Orange</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'saga-purple')"> <img src="/demo/images/themes/saga-purple.png" alt="Saga Purple" /> </button> <span>Saga Purple</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'vela-blue', true)"> <img src="/demo/images/themes/vela-blue.png" alt="Vela Blue" /> </button> <span>Vela Blue</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'vela-green', true)"> <img src="/demo/images/themes/vela-green.png" alt="Vela Green" /> </button> <span>Vela Green</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'vela-orange', true)"> <img src="/demo/images/themes/vela-orange.png" alt="Vela Orange" /> </button> <span>Vela Orange</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'vela-purple', true)"> <img src="/demo/images/themes/vela-purple.png" alt="Vela Purple" /> </button> <span>Vela Purple</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'arya-blue', true)"> <img src="/demo/images/themes/arya-blue.png" alt="Arya Blue" /> </button> <span>Arya Blue</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'arya-green', true)"> <img src="/demo/images/themes/arya-green.png" alt="Arya Green" /> </button> <span>Arya Green</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'arya-orange', true)"> <img src="/demo/images/themes/arya-orange.png" alt="Arya Orange" /> </button> <span>Arya Orange</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'arya-purple', true)"> <img src="/demo/images/themes/arya-purple.png" alt="Arya Purple" /> </button> <span>Arya Purple</span> </div> </div> <h4>Premium Themes</h4> <p>Premium themes are only available exclusively for <a href="https://www.primefaces.org/designer/primevue">PrimeVue Theme Designer</a> subscribers and therefore not included in PrimeVue core.</p> <div class="grid free-themes"> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'soho-light')"> <img src="/demo/images/themes/soho-light.png" alt="Soho Light" /> </button> <span>Soho Light</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'soho-dark', true)"> <img src="/demo/images/themes/soho-dark.png" alt="Soho Dark" /> </button> <span>Soho Dark</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'viva-light')"> <img src="/demo/images/themes/viva-light.svg" alt="Viva Light" /> </button> <span>Viva Light</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'viva-dark', true)"> <img src="/demo/images/themes/viva-dark.svg" alt="Viva Dark" /> </button> <span>Viva Dark</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'mira')"> <img src="/demo/images/themes/mira.jpg" alt="Mira" /> </button> <span>Mira</span> </div> <div class="col-3"> <button class="p-link" type="button" @click="changeTheme($event, 'nano')"> <img src="/demo/images/themes/nano.jpg" alt="Mira" /> </button> <span>Nano</span> </div> </div> <h4>Admin Templates</h4> <p>Beautifully crafted application templates by PrimeTek.</p> <div class="grid premium-themes"> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/sakai-vue"> <img alt="Ultima" src="@/assets/images/layouts/sakai-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/apollo-vue"> <img alt="Apollo" src="@/assets/images/layouts/apollo-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/atlantis-vue"> <img alt="Atlantis" src="@/assets/images/layouts/atlantis-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/freya-vue"> <img alt="Freya" src="@/assets/images/layouts/freya-vue.png" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/ultima-vue"> <img alt="Ultima" src="@/assets/images/layouts/ultima-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/diamond-vue"> <img alt="Diamond" src="@/assets/images/layouts/diamond-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/verona-vue"> <img alt="Verona" src="@/assets/images/layouts/verona-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/poseidon-vue"> <img alt="Poseidon" src="@/assets/images/layouts/poseidon-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/sapphire-vue"> <img alt="Sapphire" src="@/assets/images/layouts/sapphire-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/serenity-vue"> <img alt="Serenity" src="@/assets/images/layouts/serenity-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/babylon-vue"> <img alt="Babylon" src="@/assets/images/layouts/babylon-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/avalon-vue"> <img alt="Avalon" src="@/assets/images/layouts/avalon-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/roma-vue"> <img alt="Roma" src="@/assets/images/layouts/roma-vue.jpg" /> </a> </div> <div class="col-12 md:col-6"> <a href="https://www.primefaces.org/layouts/prestige-vue"> <img alt="Prestige" src="@/assets/images/layouts/prestige-vue.jpg" /> </a> </div> </div> </div> </div> </div> </div> </template> <script> import EventBus from '@/layouts/AppEventBus'; export default { props: { inputStyle: String }, data() { return { active: false, scale: 14, scales: [12, 13, 14, 15, 16] }; }, outsideClickListener: null, themeChangeListener: null, watch: { $route() { if (this.active) { this.active = false; this.unbindOutsideClickListener(); } } }, beforeUnmount() { EventBus.off('theme-change', this.themeChangeListener); }, mounted() { this.themeChangeListener = (event) => { if (event.theme === 'nano') this.scale = 12; else this.scale = 14; this.applyScale(); }; EventBus.on('theme-change', this.themeChangeListener); }, methods: { toggleConfigurator(event) { this.active = !this.active; event.preventDefault(); if (this.active) this.bindOutsideClickListener(); else this.unbindOutsideClickListener(); }, hideConfigurator(event) { this.active = false; this.unbindOutsideClickListener(); event.preventDefault(); }, changeTheme(event, theme, dark) { EventBus.emit('theme-change', { theme: theme, dark: dark }); event.preventDefault(); }, bindOutsideClickListener() { if (!this.outsideClickListener) { this.outsideClickListener = (event) => { if (this.active && this.isOutsideClicked(event)) { this.active = false; } }; document.addEventListener('click', this.outsideClickListener); } }, unbindOutsideClickListener() { if (this.outsideClickListener) { document.removeEventListener('click', this.outsideClickListener); this.outsideClickListener = null; } }, isOutsideClicked(event) { return !(this.$el.isSameNode(event.target) || this.$el.contains(event.target)); }, decrementScale() { this.scale--; this.applyScale(); }, incrementScale() { this.scale++; this.applyScale(); }, applyScale() { document.documentElement.style.fontSize = this.scale + 'px'; }, onRippleChange(value) { this.$primevue.config.ripple = value; } }, computed: { containerClass() { return ['layout-config', { 'layout-config-active': this.active }]; }, rippleActive() { return this.$primevue.config.ripple; } } }; </script>