<template> <section class="landing-hero py-8 px-5 lg:px-8"> <div class="flex flex-wrap"> <div class="w-full xl:w-6 flex flex-column justify-content-center lg:pr-8 align-items-center xl:align-items-stretch"> <h1 class="text-6xl font-bold text-center xl:text-left">The Most Complete UI Suite for <span class="font-bold text-primary">Vue.js</span></h1> <p class="section-detail xl:text-left text-center px-0 mt-0 mb-5"> Elevate your web applications with PrimeVue's comprehensive suite of customizable, feature-rich UI components. With PrimeVue, turning your development vision into reality has never been easier. </p> <div class="flex align-items-center gap-3"> <PrimeVueNuxtLink to="/installation" class="linkbox active font-semibold py-3 px-4"> <span>Get Started</span> <i class="pi pi-arrow-right ml-3"></i> </PrimeVueNuxtLink> <a href="https://github.com/primefaces/primevue" target="_blank" rel="noopener noreferrer" class="linkbox font-semibold py-3 px-4"> <span>Give a Star</span> <i class="pi pi-star-fill ml-3 text-yellow-500"></i> </a> </div> </div> <div class="w-full xl:w-6 pt-7 xl:pt-0 hidden md:block"> <div class="flex"> <div class="flex flex-column w-6 gap-5 pt-8 pr-3"> <div class="box p-4 fadein animation-duration-500"> <span class="text-secondary font-medium block mb-3">Balance</span> <div class="flex flex-wrap lg:flex-nowrap justify-content-start gap-3"> <InputNumber v-model="value1" mode="currency" currency="USD" locale="en-US" class="w-full" inputClass="lg:w-6" /> <InputNumber v-model="value2" mode="currency" currency="USD" locale="en-US" class="w-full" inputClass="lg:w-6" /> </div> <span class="text-secondary font-medium block mt-5 mb-3">Category</span> <div class="flex flex-wrap gap-3"> <div class="flex align-items-center"> <RadioButton id="category1" v-model="radioValue" value="C" name="radiovalue" @change="setCategory('C')" /> <label for="category1" class="ml-2 font-medium">Clothing</label> </div> <div class="flex align-items-center"> <RadioButton id="category2" v-model="radioValue" value="E" name="radiovalue" @change="setCategory('E')" /> <label for="category2" class="ml-2 font-medium">Electronics</label> </div> </div> <span class="text-secondary font-medium block mt-5 mb-3">Order Date</span> <Calendar v-model="dateValue" :showWeek="true" class="w-full" /> </div> <div class="box p-4 fadein animation-duration-500"> <Chart type="line" :data="chartData" :options="chartOptions" /> </div> <div class="box p-4 fadein animation-duration-500"> <div class="flex align-items-center"> <Chip label="Vue" class="mr-2 font-medium" /> <Chip label="Typescript" class="mr-2 font-medium" /> <InputSwitch v-model="switchValue" class="ml-auto"></InputSwitch> </div> <div class="mt-5 flex justify-content-center"> <SelectButton v-model="selectButtonValue" :options="selectButtonOptions" optionLabel="name" /> </div> <div class="mt-5"> <Slider v-model="rangeValues" range class="w-full" /> </div> </div> </div> <div class="flex flex-column w-6 gap-5 pl-3"> <div class="box p-4 fadein animation-duration-500"> <div class="surface-card mb-4 w-full text-center p-5" style="border-radius: '10px'"> <img src="https://primefaces.org/cdn/primevue/images/landing/air-jordan.png" alt="Watch" class="w-14rem" /> </div> <div class="flex align-items-center mb-4"> <div class="flex flex-column"> <span class="block font-semibold mb-1">Sneaker</span> <span class="text-secondary text-sm">Premium Quality</span> </div> <span class="font-medium text-xl ml-auto">$990</span> </div> <Button label="Add to Cart" icon="pi pi-shopping-cart" outlined class="w-full"></Button> </div> <div class="box p-4 fadein animation-duration-500"> <ul class="list-none p-0 m-0"> <li class="flex align-items-center mb-3"> <span class="mr-3"> <img src="https://primefaces.org/cdn/primevue/images/landing/avatar.png" alt="Avatar" class="w-3rem h-3rem" /> </span> <div class="flex flex-column"> <span class="font-bold mb-1">Amanda Williams</span> <span class="text-secondary">Administrator</span> </div> </li> <li class="flex"> <a class="flex align-items-center p-3 border-round w-full hover:surface-hover transition-colors transition-duration-150 cursor-pointer" style="border-radius: '10px'"> <i class="pi pi-home text-xl mr-3"></i> <span class="flex flex-column"> <span class="font-bold mb-1">Dashboard</span> <span class="m-0 text-secondary">Control Panel</span> </span> </a> </li> <li class="flex"> <a class="flex align-items-center p-3 border-round w-full hover:surface-hover transition-colors transition-duration-150 cursor-pointer" style="border-radius: '10px'"> <i class="pi pi-envelope text-xl mr-3"></i> <span class="flex flex-column"> <span class="font-bold mb-1">Inbox</span> <span class="m-0 text-secondary">View Messages</span> </span> <Badge value="3" class="ml-auto"></Badge> </a> </li> </ul> </div> <div class="box p-4 fadein animation-duration-500"> <TabMenu v-model:activeIndex="activeTabIndex" :model="items" /> </div> </div> </div> </div> </div> </section> </template> <script> import EventBus from '@/layouts/AppEventBus'; import { NodeService } from '@/service/NodeService'; export default { themeChangeListener: null, data() { return { value1: 240, value2: 356, category: 'C', chartData: {}, chartOptions: {}, pbValue1: 15, pbValue2: 85, pbValue3: 50, pbValue4: 75, pbValue5: 60, activeTabIndex: 0, radioValue: 'C', nodes: null, switchValue: true, selectButtonValue: { name: 'Styled', value: 1 }, dateValue: null, rangeValues: [20, 80], items: [ { label: 'Home', icon: 'pi pi-fw pi-home' }, { label: 'Calendar', icon: 'pi pi-fw pi-calendar' } ], selectButtonOptions: [ { name: 'Styled', value: 1 }, { name: 'Unstyled', value: 2 } ] }; }, beforeUnmount() { EventBus.off('theme-change-complete', this.themeChangeListener); }, mounted() { this.chartData = this.setChartData(); this.chartOptions = this.setChartOptions(); this.themeChangeListener = () => { this.chartOptions = this.setChartOptions(); }; EventBus.on('theme-change-complete', this.themeChangeListener); NodeService.getTreeNodes().then((data) => (this.nodes = data)); }, methods: { setCategory(category) { this.category = category; }, setChartData() { return { labels: ['Q1', 'Q2', 'Q3', 'Q4'], datasets: [ { label: 'Annual Income', data: [40, 59, 40, 50, 56], fill: true, borderColor: '#10b981', tension: 0.4, backgroundColor: 'rgba(16, 185, 129, .2)' } ] }; }, setChartOptions() { const documentStyle = getComputedStyle(document.documentElement); const textColor = documentStyle.getPropertyValue('--text-color'); const textColorSecondary = documentStyle.getPropertyValue('--text-color-secondary'); const surfaceBorder = documentStyle.getPropertyValue('--surface-border'); return { plugins: { legend: { display: false } }, scales: { x: { ticks: { color: textColorSecondary }, grid: { color: surfaceBorder } }, y: { beginAtZero: true, ticks: { color: textColorSecondary }, min: 0, max: 100, grid: { color: surfaceBorder } } } }; } } }; </script>