2025-02-28 11:49:42 +00:00
import pkg from '@/package.json' ;
//import Aura from '@/presets/aura';
//import Lara from '@/presets/lara';
import { isArray , isDate , isFunction , isObject } from '@primeuix/utils/object' ;
import { services } from './services' ;
const PrimeVue = {
version : '^4.0.1' ,
description :
'PrimeVue is an open source UI library for Vue featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBlock, which has 400+ ready to use UI blocks to build spectacular applications in no time.'
} ;
const app _dependencies = pkg ? pkg . devDependencies : { } ;
const core _dependencies = {
vue : '^3.2.45' ,
'vue-router' : '^4.1.6' ,
'@vitejs/plugin-vue' : '^4.0.0' ,
vite : '^4.0.0' ,
primevue : PrimeVue . version || 'latest' ,
primeicons : app _dependencies [ 'primeicons' ] || 'latest' ,
tailwindcss : app _dependencies [ 'tailwindcss' ] || 'latest' ,
autoprefixer : app _dependencies [ 'autoprefixer' ] || 'latest' ,
postcss : app _dependencies [ 'postcss' ] || 'latest' ,
'tailwindcss-primeui' : app _dependencies [ 'tailwindcss-primeui' ] || 'latest'
} ;
// create-vue -> https://github.com/vuejs/create-vue
const getVueApp = ( props = { } , sourceType ) => {
const path = 'src/' ;
const { code : sources , title = 'primevue_demo' , description = '' , service , extPages , dependencies : deps , component , extFiles , embedded } = props ;
const dependencies = { ... core _dependencies , ... deps } ;
const fileExtension = '.vue' ;
const mainFileName = 'App' ;
const sourceFileName = ` ${ path } ${ mainFileName } ${ fileExtension } ` ;
let element = '' ,
imports = '' ,
unstyled = '' ,
themeSwitchCode = '' ,
routeFiles = { } ;
sources . routeFiles &&
Object . entries ( sources . routeFiles ) . forEach ( ( [ key , value ] ) => {
routeFiles [ ` ${ path + key } ` ] = {
content : value
} ;
} ) ;
let extFilesSource = extFiles
? embedded
? extFiles [ 'composition' ]
: extFiles [ sourceType . language ]
2025-03-04 07:05:22 +00:00
? { ... extFiles [ sourceType . language ] }
: Object . keys ( extFiles )
. filter ( ( k ) => ! sourceTypes . includes ( k ) )
. reduce ( ( result , current ) => ( result [ current ] = extFiles [ current ] ) && result , { } )
2025-02-28 11:49:42 +00:00
: { } ;
if ( deps !== null && component !== null ) {
imports += ` import ${ component } from 'primevue/ ${ component . toLowerCase ( ) } ';
` ;
element += ` app.component(' ${ component } ', ${ component } );
` ;
}
// main.js
unstyled += ` , unstyled: true, pt: Aura ` ;
imports += ` import ThemeSwitcher from './components/ThemeSwitcher.vue';
import Configurator from './components/Configurator.vue' ;
import Lara from './presets/lara' ;
import Aura from './presets/aura' ;
import appState from './plugins/appState.js' ; ` ;
element += ` app.component('ThemeSwitcher', ThemeSwitcher);
app . component ( 'Configurator' , Configurator ) ;
app . use ( appState ) ; ` ;
// App.vue
themeSwitchCode = '' . concat (
` <template>
< ThemeSwitcher / > ` ,
sources . split ( '<template>' ) [ 1 ]
) ;
const files = {
'package.json' : {
content : {
name : title . toLowerCase ( ) . replaceAll ( ' ' , '_' ) ,
description : ` ** ${ description } ** ${ PrimeVue . description } ` ,
keywords : [ ] ,
scripts : {
dev : 'vite' ,
build : 'vite build' ,
preview : 'vite preview'
} ,
dependencies ,
main : 'src/App.vue'
}
} ,
'vite.config.js' : {
content : ` import { fileURLToPath, URL } from 'node:url';
import { defineConfig } from 'vite' ;
import vue from '@vitejs/plugin-vue' ;
// https://vitejs.dev/config/
export default defineConfig ( {
plugins : [ vue ( ) ] ,
resolve : {
alias : {
'@' : fileURLToPath ( new URL ( './src' , import . meta . url ) )
}
}
} ) ; `
} ,
'index.html' : {
content : ` <!DOCTYPE html>
< html lang = "en" data - preset = "noir" >
< head >
< meta charset = "utf-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< meta name = "theme-color" content = "#000000" / >
< meta name = "description" content = "**${description}** ${PrimeVue.description}" / >
<!-- Added to show icons in the editor -- >
< link rel = "stylesheet" href = "https://unpkg.com/primeicons@${dependencies['primeicons'].replace(/[\^|~]/gi, '')}/primeicons.css" >
< title > PrimeVue Preset App < / t i t l e >
< / h e a d >
< body >
< div id = "app" > < / d i v >
< script type = "module" src = "/src/main.js" > < / s c r i p t >
< / b o d y >
< / h t m l > `
} ,
[ ` ${ path } main.js ` ] : {
content : `
import "primeicons/primeicons.css" ;
import "./style.css" ;
import "./flags.css" ;
import { createApp } from "vue" ;
import App from "./App.vue" ;
import { router } from "./router" ;
import PrimeVue from "primevue/config" ;
import AutoComplete from 'primevue/autocomplete' ;
import Accordion from 'primevue/accordion' ;
import AccordionPanel from 'primevue/accordionpanel' ;
import AccordionHeader from 'primevue/accordionheader' ;
import AccordionContent from 'primevue/accordioncontent' ;
import AccordionTab from 'primevue/accordiontab' ;
import AnimateOnScroll from 'primevue/animateonscroll' ;
import Avatar from 'primevue/avatar' ;
import AvatarGroup from 'primevue/avatargroup' ;
import Badge from 'primevue/badge' ;
import BadgeDirective from "primevue/badgedirective" ;
import BlockUI from 'primevue/blockui' ;
import Button from 'primevue/button' ;
import ButtonGroup from 'primevue/buttongroup' ;
import Breadcrumb from 'primevue/breadcrumb' ;
import Calendar from 'primevue/calendar' ;
import Card from 'primevue/card' ;
import CascadeSelect from 'primevue/cascadeselect' ;
import Carousel from 'primevue/carousel' ;
import Checkbox from 'primevue/checkbox' ;
import Chip from 'primevue/chip' ;
import Chips from 'primevue/chips' ;
import ColorPicker from 'primevue/colorpicker' ;
import Column from 'primevue/column' ;
import ColumnGroup from 'primevue/columngroup' ;
import ConfirmDialog from 'primevue/confirmdialog' ;
import ConfirmPopup from 'primevue/confirmpopup' ;
import ConfirmationService from 'primevue/confirmationservice' ;
import ContextMenu from 'primevue/contextmenu' ;
import DataTable from 'primevue/datatable' ;
import DataView from 'primevue/dataview' ;
import DatePicker from 'primevue/datepicker' ;
import DeferredContent from 'primevue/deferredcontent' ;
import Dialog from 'primevue/dialog' ;
import DialogService from 'primevue/dialogservice'
import Divider from 'primevue/divider' ;
import Dock from 'primevue/dock' ;
import Drawer from 'primevue/drawer' ;
import Dropdown from 'primevue/dropdown' ;
import DynamicDialog from 'primevue/dynamicdialog' ;
import Fieldset from 'primevue/fieldset' ;
import FileUpload from 'primevue/fileupload' ;
import FloatLabel from 'primevue/floatlabel' ;
import FocusTrap from 'primevue/focustrap' ;
import Galleria from 'primevue/galleria' ;
import IconField from 'primevue/iconfield' ;
import InputIcon from 'primevue/inputicon' ;
import Image from 'primevue/image' ;
import InlineMessage from 'primevue/inlinemessage' ;
import Inplace from 'primevue/inplace' ;
import InputChips from 'primevue/inputchips' ;
import InputGroup from 'primevue/inputgroup' ;
import InputGroupAddon from 'primevue/inputgroupaddon' ;
import InputMask from 'primevue/inputmask' ;
import InputNumber from 'primevue/inputnumber' ;
import InputOtp from 'primevue/inputotp' ;
import InputSwitch from 'primevue/inputswitch' ;
import InputText from 'primevue/inputtext' ;
import Knob from 'primevue/knob' ;
import Listbox from 'primevue/listbox' ;
import MegaMenu from 'primevue/megamenu' ;
import Menu from 'primevue/menu' ;
import Menubar from 'primevue/menubar' ;
import Message from 'primevue/message' ;
import MeterGroup from 'primevue/metergroup' ;
import MultiSelect from 'primevue/multiselect' ;
import OrderList from 'primevue/orderlist' ;
import OrganizationChart from 'primevue/organizationchart' ;
import OverlayBadge from 'primevue/overlaybadge' ;
import OverlayPanel from 'primevue/overlaypanel' ;
import Paginator from 'primevue/paginator' ;
import Panel from 'primevue/panel' ;
import PanelMenu from 'primevue/panelmenu' ;
import Password from 'primevue/password' ;
import PickList from 'primevue/picklist' ;
import Popover from 'primevue/popover' ;
import ProgressBar from 'primevue/progressbar' ;
import ProgressSpinner from 'primevue/progressspinner' ;
import Rating from 'primevue/rating' ;
import RadioButton from 'primevue/radiobutton' ;
import Ripple from 'primevue/ripple' ;
import Row from 'primevue/row' ;
import ScrollPanel from 'primevue/scrollpanel' ;
import ScrollTop from 'primevue/scrolltop' ;
import Select from 'primevue/select' ;
import SelectButton from 'primevue/selectbutton' ;
import Skeleton from 'primevue/skeleton' ;
import Slider from 'primevue/slider' ;
import Sidebar from 'primevue/sidebar' ;
import SpeedDial from 'primevue/speeddial' ;
import SplitButton from 'primevue/splitbutton' ;
import Splitter from 'primevue/splitter' ;
import SplitterPanel from 'primevue/splitterpanel' ;
import Stepper from 'primevue/stepper' ;
import StepList from 'primevue/steplist' ;
import StepPanels from 'primevue/steppanels' ;
import StepItem from 'primevue/stepitem' ;
import Step from 'primevue/step' ;
import StepPanel from 'primevue/steppanel' ;
import StyleClass from 'primevue/styleclass' ;
import TabMenu from 'primevue/tabmenu' ;
import Tabs from 'primevue/tabs' ;
import TabList from 'primevue/tablist' ;
import Tab from 'primevue/tab' ;
import TabPanels from 'primevue/tabpanels' ;
import TabPanel from 'primevue/tabpanel' ;
import Tag from 'primevue/tag' ;
import Terminal from 'primevue/terminal' ;
import Textarea from 'primevue/textarea' ;
import TieredMenu from 'primevue/tieredmenu' ;
import Timeline from 'primevue/timeline' ;
import ToggleButton from 'primevue/togglebutton' ;
import ToggleSwitch from 'primevue/toggleswitch' ;
import Tooltip from 'primevue/tooltip' ;
import Toast from 'primevue/toast' ;
import ToastService from 'primevue/toastservice' ;
import Toolbar from 'primevue/toolbar' ;
import Tree from 'primevue/tree' ;
import TreeSelect from 'primevue/treeselect' ;
import TreeTable from 'primevue/treetable' ;
import VirtualScroller from 'primevue/virtualscroller' ;
$ { imports }
const app = createApp ( App ) ;
app . use ( PrimeVue , { ripple : true $ { unstyled } } ) ;
app . use ( ConfirmationService ) ;
app . use ( ToastService ) ;
app . use ( DialogService ) ;
app . use ( router ) ;
app . directive ( 'tooltip' , Tooltip ) ;
app . directive ( 'badge' , BadgeDirective ) ;
app . directive ( 'ripple' , Ripple ) ;
app . directive ( 'styleclass' , StyleClass ) ;
app . directive ( 'focustrap' , FocusTrap ) ;
app . directive ( 'animateonscroll' , AnimateOnScroll ) ;
app . component ( 'Accordion' , Accordion ) ;
app . component ( 'AccordionPanel' , AccordionPanel ) ;
app . component ( 'AccordionHeader' , AccordionHeader ) ;
app . component ( 'AccordionContent' , AccordionContent ) ;
app . component ( 'AccordionTab' , AccordionTab ) ;
app . component ( 'AutoComplete' , AutoComplete ) ;
app . component ( 'Avatar' , Avatar ) ;
app . component ( 'AvatarGroup' , AvatarGroup ) ;
app . component ( 'Badge' , Badge ) ;
app . component ( 'BlockUI' , BlockUI ) ;
app . component ( 'Breadcrumb' , Breadcrumb ) ;
app . component ( 'Button' , Button ) ;
app . component ( 'ButtonGroup' , ButtonGroup ) ;
app . component ( 'Calendar' , Calendar ) ;
app . component ( 'Card' , Card ) ;
app . component ( 'Carousel' , Carousel ) ;
app . component ( 'CascadeSelect' , CascadeSelect ) ;
app . component ( 'Checkbox' , Checkbox ) ;
app . component ( 'Chip' , Chip ) ;
app . component ( 'Chips' , Chips ) ;
app . component ( 'ColorPicker' , ColorPicker ) ;
app . component ( 'Column' , Column ) ;
app . component ( 'ColumnGroup' , ColumnGroup ) ;
app . component ( 'ConfirmDialog' , ConfirmDialog ) ;
app . component ( 'ConfirmPopup' , ConfirmPopup ) ;
app . component ( 'ContextMenu' , ContextMenu ) ;
app . component ( 'DataTable' , DataTable ) ;
app . component ( 'DataView' , DataView ) ;
app . component ( 'DatePicker' , DatePicker ) ;
app . component ( 'DeferredContent' , DeferredContent ) ;
app . component ( 'Dialog' , Dialog ) ;
app . component ( 'Divider' , Divider ) ;
app . component ( 'Dock' , Dock ) ;
app . component ( 'Drawer' , Drawer ) ;
app . component ( 'Dropdown' , Dropdown ) ;
app . component ( 'DynamicDialog' , DynamicDialog ) ;
app . component ( 'Fieldset' , Fieldset ) ;
app . component ( 'FileUpload' , FileUpload ) ;
app . component ( 'FloatLabel' , FloatLabel ) ;
app . component ( 'Galleria' , Galleria ) ;
app . component ( 'IconField' , IconField ) ;
app . component ( 'Image' , Image ) ;
app . component ( 'InlineMessage' , InlineMessage ) ;
app . component ( 'Inplace' , Inplace ) ;
app . component ( 'InputChips' , InputChips ) ;
app . component ( 'InputGroup' , InputGroup ) ;
app . component ( 'InputGroupAddon' , InputGroupAddon ) ;
app . component ( 'InputIcon' , InputIcon ) ;
app . component ( 'InputMask' , InputMask ) ;
app . component ( 'InputNumber' , InputNumber ) ;
app . component ( 'InputOtp' , InputOtp ) ;
app . component ( 'InputSwitch' , InputSwitch ) ;
app . component ( 'InputText' , InputText ) ;
app . component ( 'Knob' , Knob ) ;
app . component ( 'Listbox' , Listbox ) ;
app . component ( 'MegaMenu' , MegaMenu ) ;
app . component ( 'Menu' , Menu ) ;
app . component ( 'Menubar' , Menubar ) ;
app . component ( 'Message' , Message ) ;
app . component ( 'MeterGroup' , MeterGroup ) ;
app . component ( 'MultiSelect' , MultiSelect ) ;
app . component ( 'OrderList' , OrderList ) ;
app . component ( 'OrganizationChart' , OrganizationChart ) ;
app . component ( 'OverlayBadge' , OverlayBadge ) ;
app . component ( 'OverlayPanel' , OverlayPanel ) ;
app . component ( 'Paginator' , Paginator ) ;
app . component ( 'Panel' , Panel ) ;
app . component ( 'PanelMenu' , PanelMenu ) ;
app . component ( 'Password' , Password ) ;
app . component ( 'PickList' , PickList ) ;
app . component ( 'Popover' , Popover ) ;
app . component ( 'ProgressBar' , ProgressBar ) ;
app . component ( 'ProgressSpinner' , ProgressSpinner ) ;
app . component ( 'RadioButton' , RadioButton ) ;
app . component ( 'Rating' , Rating ) ;
app . component ( 'Row' , Row ) ;
app . component ( 'ScrollPanel' , ScrollPanel ) ;
app . component ( 'ScrollTop' , ScrollTop ) ;
app . component ( 'Select' , Select ) ;
app . component ( 'SelectButton' , SelectButton ) ;
app . component ( 'Slider' , Slider ) ;
app . component ( 'Sidebar' , Sidebar ) ;
app . component ( 'Skeleton' , Skeleton ) ;
app . component ( 'SpeedDial' , SpeedDial ) ;
app . component ( 'SplitButton' , SplitButton ) ;
app . component ( 'Splitter' , Splitter ) ;
app . component ( 'SplitterPanel' , SplitterPanel ) ;
app . component ( 'Stepper' , Stepper ) ;
app . component ( 'StepList' , StepList ) ;
app . component ( 'StepPanels' , StepPanels ) ;
app . component ( 'StepItem' , StepItem ) ;
app . component ( 'Step' , Step ) ;
app . component ( 'StepPanel' , StepPanel ) ;
app . component ( 'TabMenu' , TabMenu ) ;
app . component ( 'Tabs' , Tabs ) ;
app . component ( 'TabList' , TabList ) ;
app . component ( 'Tab' , Tab ) ;
app . component ( 'TabPanels' , TabPanels ) ;
app . component ( 'TabPanel' , TabPanel ) ;
app . component ( 'Tag' , Tag ) ;
app . component ( 'Textarea' , Textarea ) ;
app . component ( 'Terminal' , Terminal ) ;
app . component ( 'TieredMenu' , TieredMenu ) ;
app . component ( 'Timeline' , Timeline ) ;
app . component ( 'Toast' , Toast ) ;
app . component ( 'Toolbar' , Toolbar ) ;
app . component ( 'ToggleButton' , ToggleButton ) ;
app . component ( 'ToggleSwitch' , ToggleSwitch ) ;
app . component ( 'Tree' , Tree ) ;
app . component ( 'TreeSelect' , TreeSelect ) ;
app . component ( 'TreeTable' , TreeTable ) ;
app . component ( 'VirtualScroller' , VirtualScroller ) ;
$ { element }
app . mount ( "#app" ) ;
`
} ,
[ ` ${ path } style.css ` ] : {
content : tailwindConfig
} ,
[ ` ${ path } flags.css ` ] : {
content : staticStyles . flags
} ,
[ ` ${ path } router.js ` ] : {
content : ` import { createRouter, createWebHistory } from "vue-router";
import $ { mainFileName } from "./${mainFileName}${fileExtension}" ;
export const router = createRouter ( {
history : createWebHistory ( ) ,
routes : [ { path : "/" , component : $ { mainFileName } } ]
} ) ; `
} ,
[ ` ${ sourceFileName } ` ] : {
content : themeSwitchCode
} ,
'public/logo.svg' : {
content : `
< ? xml version = "1.0" encoding = "UTF-8" ? >
< svg width = "139px" height = "158px" viewBox = "0 0 139 158" version = "1.1" xmlns = "http://www.w3.org/2000/svg" xmlns : xlink = "http://www.w3.org/1999/xlink" >
<!-- Generator : Sketch 59.1 ( 86144 ) - https : //sketch.com -->
< title > head < / t i t l e >
< desc > Created with Sketch . < / d e s c >
< g id = "Page-1" stroke = "none" stroke - width = "1" fill = "none" fill - rule = "evenodd" >
< g id = "Artboard" transform = "translate(-3.000000, -7.000000)" >
< g id = "head" transform = "translate(3.000000, 7.000000)" >
< polygon id = "chick-right" fill = "#41B883" fill - rule = "nonzero" points = "102.295646 72.1832018 91.4643424 69.7770951 99.8886897 81.8076287 99.8886897 119.102283 128.772166 95.0412157 128.772166 54.1374014 115.533906 58.9496148" > < / p o l y g o n >
< polygon id = "chick-left" fill = "#41B883" fill - rule = "nonzero" transform = "translate(27.078259, 86.619842) scale(-1, 1) translate(-27.078259, -86.619842) " points = "19.255651 72.1832018 8.42434732 69.7770951 16.8486946 81.8076287 16.8486946 119.102283 45.7321712 95.0412157 45.7321712 54.1374014 32.4939111 58.9496148" > < / p o l y g o n >
< polygon id = "mask" fill = "#41B883" points = "40.9182584 84.2137354 50.5460839 69.7770951 56.5634749 73.3862552 80.6330387 73.3862552 86.6504296 69.7770951 96.2782551 84.2137354 96.2782551 138.351137 89.057386 149.178617 80.6330387 157.599991 56.5634749 157.599991 48.1391276 149.178617 40.9182584 138.351137" > < / p o l y g o n >
< polygon id = "bottom-chick-right" fill = "#41B883" fill - rule = "nonzero" points = "99.8886897 141.960297 115.533906 126.320603 115.533906 110.680909 99.8886897 123.914496" > < / p o l y g o n >
< polygon id = "bottom-chick-left" fill = "#41B883" fill - rule = "nonzero" transform = "translate(29.485216, 126.320603) scale(-1, 1) translate(-29.485216, -126.320603) " points = "21.6626074 141.960297 37.3078239 126.320603 37.3078239 110.680909 21.6626074 123.914496" > < / p o l y g o n >
< path d = "M89.4422148,12.342 L93.8712988,22.8580139 L79.4295605,68.5740417 L71.0052132,68.5740417 L71.0042148,56.994 L89.4422148,12.342 Z M48.1982148,11.287 L66.1912148,57.769 L66.1913004,68.5740417 L58.9704313,68.5740417 L43.3252148,22.8580139 L48.1982148,11.287 Z M66.1913004,0 L66.1912148,46.688 L59.3732148,29.074 L61.3773876,30.0763341 L61.3773876,0 L66.1913004,0 Z M75.8191259,1.91846539e-13 L75.8191259,30.0763341 L78.3042148,28.833 L71.0042148,46.513 L71.0052132,0 L75.8191259,1.91846539e-13 Z M84.2434732,0 L87.2562148,7.154 L80.6322148,23.196 L80.6330387,1.91846539e-13 L84.2434732,0 Z M56.5634749,0 L56.5632148,21.816 L50.4332148,5.981 L52.9530403,0 L56.5634749,0 Z" fill = "#455C71" > < / p a t h >
< path d = "M138.399992,19.2488538 L131.179123,49.3251879 L79.4295605,68.5740417 L78.2260823,68.5740417 L92.6678206,22.8580139 L138.399992,19.2488538 Z M0,19.2488538 L44.528693,22.8580139 L60.1739095,68.5740417 L58.9704313,68.5740417 L7.22086913,49.3251879 L0,19.2488538 Z" id = "head-right-2" fill = "#41B883" fill - rule = "nonzero" > < / p a t h >
< polygon id = "ear-right" fill = "#455C71" fill - rule = "nonzero" points = "96.2782551 19.2488538 121.551297 16.8427471 104.702602 0 87.8539078 0" > < / p o l y g o n >
< polygon id = "ear-left" fill = "#455C71" fill - rule = "nonzero" transform = "translate(32.493911, 9.624427) scale(-1, 1) translate(-32.493911, -9.624427) " points = "24.0695638 19.2488538 49.3426058 16.8427471 32.4939111 0 15.6452165 0" > < / p o l y g o n >
< polygon id = "Path-2" fill = "#455C71" fill - rule = "nonzero" points = "18.7999989 20.7999988 44.7999973 22.7999986 60.3999964 68.5999959 58.7999965 68.5999959 41.9999975 62.3999963" > < / p o l y g o n >
< polygon id = "Path-3" fill = "#455C71" fill - rule = "nonzero" points = "119.199993 20.7999988 92.3999945 22.7999986 77.5999954 68.5999959 79.5999953 68.5599959 95.1999943 62.7999963" > < / p o l y g o n >
< polygon id = "Path-4" fill = "#455C71" fill - rule = "nonzero" points = "48.3999971 72.7999957 50.399997 69.5999959 57.1999966 72.7999957 81.1999952 72.7999957 86.3999949 69.5999959 88.7999947 72.7999957 68.5999959 107.199994" > < / p o l y g o n >
< path d = "M90.2104053,-1.0658141e-14 L68.485709,52.6144989 L48.1188062,-1.0658141e-14 L90.2104053,-1.0658141e-14 Z" id = "Path-6" fill = "#41B883" fill - rule = "nonzero" > < / p a t h >
< / g >
< / g >
< / g >
< / s v g > `
} ,
... routeFiles ,
... extFilesSource
} ;
if ( extPages && extPages . length >= 1 ) {
let routePaths = '' ;
let viewImports = '' ;
extPages . forEach ( ( page , index ) => {
let compPath = page . tabName . replace ( 'Demo' , '' ) . toLowerCase ( ) ;
routePaths += ` { path: "/ ${ index === 0 ? '' : compPath } ", component: ${ page . tabName } }, \n ` ;
viewImports += ` import ${ page . tabName } from "./components/ ${ page . tabName } ${ fileExtension } "; \n ` ;
files [ ` ${ path } components/ ${ page . tabName } ${ fileExtension } ` ] = {
content : page . content
} ;
} ) ;
files [ ` ${ path } router.js ` ] = {
content : ` import { createRouter, createWebHistory } from "vue-router";
$ { viewImports }
export const router = createRouter ( {
history : createWebHistory ( ) ,
routes : [ $ { routePaths } ]
} ) ; `
} ;
}
if ( service ) {
service . forEach ( ( name ) => {
files [ ` ${ path } service/ ${ name } .js ` ] = {
content : services [ name ]
} ;
} ) ;
}
files [ 'tailwind.config.js' ] = {
content : ` /** @type {import('tailwindcss').Config} */
const primeui = require ( 'tailwindcss-primeui' ) ;
export default {
darkMode : [ 'selector' , '[class="p-dark"]' ] ,
content : [
"./index.html" ,
"./src/**/*.{vue,js,ts,jsx,tsx}" ,
"./src/*/.{vue,js,ts,jsx,tsx}" ,
] ,
plugins : [ primeui ] ,
theme : {
screens : {
sm : '576px' ,
md : '768px' ,
lg : '992px' ,
xl : '1200px' ,
'2xl' : '1920px'
}
}
} `
} ;
files [ 'postcss.config.js' ] = {
content : ` module.exports = {
plugins : {
tailwindcss : { } ,
autoprefixer : { }
}
} `
} ;
files [ ` ${ path } components/ThemeSwitcher.vue ` ] = {
content : ` <template>
< div class = "card flex justify-end p-2 mb-4" >
< ul class = "flex list-none m-0 p-0 gap-2 items-center" >
< li >
< button
type = "button"
class = "inline-flex border w-8 h-8 p-0 items-center justify-center surface-0 dark:surface-800 border border-surface-200 dark:border-surface-600 rounded"
@ click = "onThemeToggler"
>
< i : class = "\`dark:text-white pi \${iconClass}\`" / >
< / b u t t o n >
< / l i >
< li class = "relative" >
< button
v - styleclass = "{ selector: '@next', enterFromClass: 'hidden', enterActiveClass: 'animate-scalein', leaveToClass: 'hidden', leaveActiveClass: 'animate-fadeout', hideOnOutsideClick: true }"
type = "button"
class = "inline-flex border w-8 h-8 p-0 items-center justify-center surface-0 dark:surface-800 border border-surface-200 dark:border-surface-600 rounded"
>
< i class = "pi pi-palette dark:text-white" > < / i >
< / b u t t o n >
< Configurator / >
< / l i >
< / u l >
< / d i v >
< / t e m p l a t e >
< script >
export default {
data ( ) {
return {
iconClass : 'pi-moon'
}
} ,
methods : {
onThemeToggler ( ) {
const root = document . getElementsByTagName ( 'html' ) [ 0 ] ;
root . classList . toggle ( 'p-dark' ) ;
this . iconClass = this . iconClass === 'pi-moon' ? 'pi-sun' : 'pi-moon' ;
this . $appState . darkTheme = ! this . $appState . darkTheme ;
}
} ,
} ;
< \ / script >
`
} ;
files [ ` ${ path } components/Configurator.vue ` ] = {
content : ` <template>
< div class = "absolute top-[2.5rem] right-0 hidden w-[16rem] p-3 bg-white dark:bg-surface-800 rounded-md shadow border border-surface-200 dark:border-surface-700 flex-col justify-start items-start gap-3.5 inline-flex origin-top z-10" >
< div class = "flex-col justify-start items-start gap-2 inline-flex w-full" >
< span class = "text-black dark:text-surface-0 text-sm font-medium" > Preset < / s p a n >
< div class = "inline-flex items-start" >
< SelectButton v - model = "$appState.preset" @ update : modelValue = "onPresetChange" : options = "presets" : allowEmpty = "false" / >
< / d i v >
< / d i v >
< div class = "flex-col justify-start items-start gap-2 inline-flex pr-4" >
< span class = "text-black dark:text-surface-0 text-sm font-medium" > Primary Colors < / s p a n >
< div class = "self-stretch justify-start items-start gap-2 inline-flex flex-wrap" >
< button
v - for = "primaryColor of primaryColors"
: key = "primaryColor.name"
type = "button"
@ click = "updateColors('primary', primaryColor.name)"
class = "w-4 h-4 rounded-full cursor-pointer config-button"
: class = "{ 'active-color': selectedPrimaryColor === primaryColor.name }"
: style = "{ backgroundColor: \`\${primaryColor.name === 'noir' ? 'var(--text-color)' : primaryColor.palette[5]}\` }"
> < / b u t t o n >
< / d i v >
< / d i v >
< div class = "flex-col justify-start items-start gap-2 inline-flex pr-2" >
< span class = "text-black dark:text-surface-0 text-sm font-medium" > Surface Colors < / s p a n >
< div class = "self-stretch justify-start items-start gap-2 inline-flex" >
< button
v - for = "surface of surfaces"
: key = "surface.name"
type = "button"
@ click = "updateColors('surface', surface.name)"
class = "w-4 h-4 rounded-full cursor-pointer config-button"
: class = "{ 'active-color': selectedSurfaceColor ? selectedSurfaceColor === surface.name : $appState.darkTheme ? surface.name === 'zinc' : surface.name === 'slate' }"
: style = "{ backgroundColor: \`\${surface.palette[6]}\` }"
> < / b u t t o n >
< / d i v >
< / d i v >
< div class = "flex justify-between items-center gap-2 flex w-full pt-4 pb-2 border-t border-surface-200 dark:border-surface-700" >
< span class = "text-black dark:text-surface-0 text-sm font-medium m-0" > Ripple Effect < / s p a n >
< ToggleSwitch : modelValue = "rippleActive" @ update : modelValue = "onRippleChange" / >
< / d i v >
< / d i v >
< / t e m p l a t e >
< script >
export default {
data ( ) {
return {
presets : [ 'Aura' , 'Lara' ] ,
selectedPrimaryColor : 'noir' ,
selectedSurfaceColor : 'slate' ,
primaryColors : [
{
name : 'noir' ,
palette : { }
} ,
{ name : 'emerald' , palette : [ '#ecfdf5' , '#d1fae5' , '#a7f3d0' , '#6ee7b7' , '#34d399' , '#10b981' , '#059669' , '#047857' , '#065f46' , '#064e3b' , '#022c22' ] } ,
{ name : 'green' , palette : [ '#f0fdf4' , '#dcfce7' , '#bbf7d0' , '#86efac' , '#4ade80' , '#22c55e' , '#16a34a' , '#15803d' , '#166534' , '#14532d' , '#052e16' ] } ,
{ name : 'lime' , palette : [ '#f7fee7' , '#ecfccb' , '#d9f99d' , '#bef264' , '#a3e635' , '#84cc16' , '#65a30d' , '#4d7c0f' , '#3f6212' , '#365314' , '#1a2e05' ] } ,
{ name : 'orange' , palette : [ '#fff7ed' , '#ffedd5' , '#fed7aa' , '#fdba74' , '#fb923c' , '#f97316' , '#ea580c' , '#c2410c' , '#9a3412' , '#7c2d12' , '#431407' ] } ,
{ name : 'amber' , palette : [ '#fffbeb' , '#fef3c7' , '#fde68a' , '#fcd34d' , '#fbbf24' , '#f59e0b' , '#d97706' , '#b45309' , '#92400e' , '#78350f' , '#451a03' ] } ,
{ name : 'yellow' , palette : [ '#fefce8' , '#fef9c3' , '#fef08a' , '#fde047' , '#facc15' , '#eab308' , '#ca8a04' , '#a16207' , '#854d0e' , '#713f12' , '#422006' ] } ,
{ name : 'teal' , palette : [ '#f0fdfa' , '#ccfbf1' , '#99f6e4' , '#5eead4' , '#2dd4bf' , '#14b8a6' , '#0d9488' , '#0f766e' , '#115e59' , '#134e4a' , '#042f2e' ] } ,
{ name : 'cyan' , palette : [ '#ecfeff' , '#cffafe' , '#a5f3fc' , '#67e8f9' , '#22d3ee' , '#06b6d4' , '#0891b2' , '#0e7490' , '#155e75' , '#164e63' , '#083344' ] } ,
{ name : 'sky' , palette : [ '#f0f9ff' , '#e0f2fe' , '#bae6fd' , '#7dd3fc' , '#38bdf8' , '#0ea5e9' , '#0284c7' , '#0369a1' , '#075985' , '#0c4a6e' , '#082f49' ] } ,
{ name : 'blue' , palette : [ '#eff6ff' , '#dbeafe' , '#bfdbfe' , '#93c5fd' , '#60a5fa' , '#3b82f6' , '#2563eb' , '#1d4ed8' , '#1e40af' , '#1e3a8a' , '#172554' ] } ,
{ name : 'indigo' , palette : [ '#eef2ff' , '#e0e7ff' , '#c7d2fe' , '#a5b4fc' , '#818cf8' , '#6366f1' , '#4f46e5' , '#4338ca' , '#3730a3' , '#312e81' , '#1e1b4b' ] } ,
{ name : 'violet' , palette : [ '#f5f3ff' , '#ede9fe' , '#ddd6fe' , '#c4b5fd' , '#a78bfa' , '#8b5cf6' , '#7c3aed' , '#6d28d9' , '#5b21b6' , '#4c1d95' , '#2e1065' ] } ,
{ name : 'purple' , palette : [ '#faf5ff' , '#f3e8ff' , '#e9d5ff' , '#d8b4fe' , '#c084fc' , '#a855f7' , '#9333ea' , '#7e22ce' , '#6b21a8' , '#581c87' , '#3b0764' ] } ,
{ name : 'fuchsia' , palette : [ '#fdf4ff' , '#fae8ff' , '#f5d0fe' , '#f0abfc' , '#e879f9' , '#d946ef' , '#c026d3' , '#a21caf' , '#86198f' , '#701a75' , '#4a044e' ] } ,
{ name : 'pink' , palette : [ '#fdf2f8' , '#fce7f3' , '#fbcfe8' , '#f9a8d4' , '#f472b6' , '#ec4899' , '#db2777' , '#be185d' , '#9d174d' , '#831843' , '#500724' ] } ,
{ name : 'rose' , palette : [ '#fff1f2' , '#ffe4e6' , '#fecdd3' , '#fda4af' , '#fb7185' , '#f43f5e' , '#e11d48' , '#be123c' , '#9f1239' , '#881337' , '#4c0519' ] }
] ,
surfaces : [
{
name : 'slate' ,
palette : [ '#ffffff' , '#f8fafc' , '#f1f5f9' , '#e2e8f0' , '#cbd5e1' , '#94a3b8' , '#64748b' , '#475569' , '#334155' , '#1e293b' , '#0f172a' , '#020617' ]
} ,
{
name : 'gray' ,
palette : [ '#ffffff' , '#f9fafb' , '#f3f4f6' , '#e5e7eb' , '#d1d5db' , '#9ca3af' , '#6b7280' , '#4b5563' , '#374151' , '#1f2937' , '#111827' , '#030712' ]
} ,
{
name : 'zinc' ,
palette : [ '#ffffff' , '#fafafa' , '#f4f4f5' , '#e4e4e7' , '#d4d4d8' , '#a1a1aa' , '#71717a' , '#52525b' , '#3f3f46' , '#27272a' , '#18181b' , '#09090b' ]
} ,
{
name : 'neutral' ,
palette : [ '#ffffff' , '#fafafa' , '#f5f5f5' , '#e5e5e5' , '#d4d4d4' , '#a3a3a3' , '#737373' , '#525252' , '#404040' , '#262626' , '#171717' , '#0a0a0a' ]
} ,
{
name : 'stone' ,
palette : [ '#ffffff' , '#fafaf9' , '#f5f5f4' , '#e7e5e4' , '#d6d3d1' , '#a8a29e' , '#78716c' , '#57534e' , '#44403c' , '#292524' , '#1c1917' , '#0c0a09' ]
} ,
{
name : 'soho' ,
palette : [ '#ffffff' , '#f4f4f4' , '#e8e9e9' , '#d2d2d4' , '#bbbcbe' , '#a5a5a9' , '#8e8f93' , '#77787d' , '#616268' , '#4a4b52' , '#34343d' , '#1d1e27' ]
} ,
{
name : 'viva' ,
palette : [ '#ffffff' , '#f3f3f3' , '#e7e7e8' , '#cfd0d0' , '#b7b8b9' , '#9fa1a1' , '#87898a' , '#6e7173' , '#565a5b' , '#3e4244' , '#262b2c' , '#0e1315' ]
} ,
{
name : 'ocean' ,
palette : [ '#ffffff' , '#fbfcfc' , '#F7F9F8' , '#EFF3F2' , '#DADEDD' , '#B1B7B6' , '#828787' , '#5F7274' , '#415B61' , '#29444E' , '#183240' , '#0c1920' ]
}
]
} ;
} ,
methods : {
updateColors ( type , colorName ) {
let selectedColor ;
const root = document . documentElement ;
if ( type === 'primary' ) {
selectedColor = this . primaryColors . find ( ( color ) => color . name === colorName ) ;
this . selectedPrimaryColor = colorName ;
if ( colorName === 'noir' ) {
root . setAttribute ( 'data-preset' , 'noir' ) ;
} else {
root . removeAttribute ( 'data-preset' ) ;
}
} else if ( type === 'surface' ) {
selectedColor = this . surfaces . find ( ( color ) => color . name === colorName ) ;
this . selectedSurfaceColor = colorName ;
}
if ( ! document . startViewTransition ) {
this . applyTheme ( type , selectedColor . palette , colorName ) ;
return ;
}
document . startViewTransition ( ( ) => this . applyTheme ( type , selectedColor . palette , colorName ) ) ;
} ,
applyTheme ( type , colors , colorName ) {
let increments ;
if ( type === 'primary' ) {
increments = [ 50 , 100 , 200 , 300 , 400 , 500 , 600 , 700 , 800 , 900 , 950 ] ;
} else if ( type === 'surface' ) {
increments = [ 0 , 50 , 100 , 200 , 300 , 400 , 500 , 600 , 700 , 800 , 900 , 950 ] ;
}
if ( colorName === 'noir' ) {
increments . forEach ( ( inc , index ) => {
document . documentElement . style . setProperty ( \ ` --p- \$ {type}- \$ {increments[index]} \` , \` var(--p-surface- \$ {inc}) \` );
} ) ;
} else {
colors . forEach ( ( color , index ) => {
document . documentElement . style . setProperty ( \ ` --p- \$ {type}- \$ {increments[index]} \` , color);
} ) ;
}
} ,
onPresetChange ( preset ) {
this . $appState . preset = preset ;
} ,
onRippleChange ( value ) {
this . $primevue . config . ripple = value ;
}
} ,
computed : {
rippleActive ( ) {
return this . $primevue . config . ripple ;
}
}
} ;
< \ / script >
`
} ;
files [ ` ${ path } plugins/appState.js ` ] = {
content : ` import Lara from '@/presets/lara';
import Aura from '@/presets/aura' ;
import { reactive , watch } from 'vue' ;
export default {
install : ( app ) => {
const _appState = reactive ( { preset : 'Aura' , darkMode : false } ) ;
watch (
( ) => _appState . preset ,
( newValue ) => {
if ( newValue === 'Lara' )
app . config . globalProperties . $primevue . config . pt = Lara ;
else if ( newValue === 'Aura' )
app . config . globalProperties . $primevue . config . pt = Aura ;
}
) ;
app . config . globalProperties . $appState = _appState ;
}
} ;
`
} ;
// @todo - Refactor
const stringify = ( value , indent = 2 , currentIndent = 0 ) => {
const currentIndentStr = ' ' . repeat ( currentIndent ) ;
const nextIndentStr = ' ' . repeat ( currentIndent + indent ) ;
if ( isArray ( value ) ) {
return '[' + value . map ( ( v ) => stringify ( v , indent , currentIndent + indent ) ) . join ( ', ' ) + ']' ;
} else if ( isDate ( value ) ) {
return value . toISOString ( ) ;
} else if ( isFunction ( value ) ) {
return value
. toString ( )
. split ( '\n' )
. map ( ( line , i , arr ) => {
try {
return process ? . dev ? line : i === 0 ? line : arr . length - 1 === i ? ' ' . repeat ( 2 ) + line : currentIndentStr + line ;
} catch {
return i === 0 ? line : arr . length - 1 === i ? ' ' . repeat ( 2 ) + line : currentIndentStr + line ;
}
} )
. join ( '\n' ) ;
} else if ( isObject ( value ) ) {
return (
'{\n' +
Object . entries ( value )
. map ( ( [ k , v ] ) => ` ${ nextIndentStr } ${ k } : ${ stringify ( v , indent , currentIndent + indent ) } ` )
. join ( ',\n' ) +
` \n ${ currentIndentStr } ` +
'}'
) ;
} else {
return JSON . stringify ( value ) ;
}
} ;
const createPresetFiles = ( presetName , stringPresetName ) => {
const presetPath = ` ${ path } presets/ ${ stringPresetName } ` ;
const imports = [ ] ;
const keys = [ ] ;
const directivesKeys = [ ] ;
Object . entries ( presetName ) . forEach ( ( [ name , value ] ) => {
if ( name === 'global' ) {
imports . push ( ` import ${ name } from './ ${ name } ' ` ) ;
keys . push ( name ) ;
files [ ` ${ presetPath } / ${ name } .js ` ] = {
content : ` export default {
css : \ ` ${ value ? . css } \`
} `
} ;
} else if ( name === 'directives' ) {
Object . entries ( value ) . forEach ( ( [ dname , dvalue ] ) => {
const _name = dname === 'badge' ? 'badgedirective' : dname ;
imports . push ( ` import ${ _name } from './ ${ _name } ' ` ) ;
directivesKeys . push ( dname === 'badge' ? ` badge: badgedirective ` : dname ) ;
files [ ` ${ presetPath } / ${ _name } /index.js ` ] = {
content : ` export default ${ stringify ( dvalue ) } `
} ;
} ) ;
} else {
imports . push ( ` import ${ name } from './ ${ name } ' ` ) ;
keys . push ( name ) ;
files [ ` ${ presetPath } / ${ name } /index.js ` ] = {
content : ` export default ${ stringify ( value ) } `
} ;
}
} ) ;
files [ ` ${ path } presets/ ${ stringPresetName } /index.js ` ] = {
content : ` ${ imports . join ( ';\n' ) }
export default {
directives : {
$ { directivesKeys . join ( ',\n\t\t' ) }
} ,
$ { keys . join ( ',\n\t' ) }
}
`
} ;
} ;
createPresetFiles ( Lara , 'lara' ) ;
createPresetFiles ( Aura , 'aura' ) ;
return { files , dependencies , sourceFileName } ;
} ;
const staticStyles = {
flags : ` span.flag{width:44px;height:30px;display:inline-block;}img.flag{width:30px}.flag{background:url(https://primefaces.org/cdn/primevue/images/flag/flags_responsive.png) no-repeat;background-size:100%;vertical-align: middle;}.flag-ad{background-position:0 .413223%}.flag-ae{background-position:0 .826446%}.flag-af{background-position:0 1.239669%}.flag-ag{background-position:0 1.652893%}.flag-ai{background-position:0 2.066116%}.flag-al{background-position:0 2.479339%}.flag-am{background-position:0 2.892562%}.flag-an{background-position:0 3.305785%}.flag-ao{background-position:0 3.719008%}.flag-aq{background-position:0 4.132231%}.flag-ar{background-position:0 4.545455%}.flag-as{background-position:0 4.958678%}.flag-at{background-position:0 5.371901%}.flag-au{background-position:0 5.785124%}.flag-aw{background-position:0 6.198347%}.flag-az{background-position:0 6.61157%}.flag-ba{background-position:0 7.024793%}.flag-bb{background-position:0 7.438017%}.flag-bd{background-position:0 7.85124%}.flag-be{background-position:0 8.264463%}.flag-bf{background-position:0 8.677686%}.flag-bg{background-position:0 9.090909%}.flag-bh{background-position:0 9.504132%}.flag-bi{background-position:0 9.917355%}.flag-bj{background-position:0 10.330579%}.flag-bm{background-position:0 10.743802%}.flag-bn{background-position:0 11.157025%}.flag-bo{background-position:0 11.570248%}.flag-br{background-position:0 11.983471%}.flag-bs{background-position:0 12.396694%}.flag-bt{background-position:0 12.809917%}.flag-bv{background-position:0 13.22314%}.flag-bw{background-position:0 13.636364%}.flag-by{background-position:0 14.049587%}.flag-bz{background-position:0 14.46281%}.flag-ca{background-position:0 14.876033%}.flag-cc{background-position:0 15.289256%}.flag-cd{background-position:0 15.702479%}.flag-cf{background-position:0 16.115702%}.flag-cg{background-position:0 16.528926%}.flag-ch{background-position:0 16.942149%}.flag-ci{background-position:0 17.355372%}.flag-ck{background-position:0 17.768595%}.flag-cl{background-position:0 18.181818%}.flag-cm{background-position:0 18.595041%}.flag-cn{background-position:0 19.008264%}.flag-co{background-position:0 19.421488%}.flag-cr{background-position:0 19.834711%}.flag-cu{background-position:0 20.247934%}.flag-cv{background-position:0 20.661157%}.flag-cx{background-position:0 21.07438%}.flag-cy{background-position:0 21.487603%}.flag-cz{background-position:0 21.900826%}.flag-de{background-position:0 22.31405%}.flag-dj{background-position:0 22.727273%}.flag-dk{background-position:0 23.140496%}.flag-dm{background-position:0 23.553719%}.flag-do{background-position:0 23.966942%}.flag-dz{background-position:0 24.380165%}.flag-ec{background-position:0 24.793388%}.flag-ee{background-position:0 25.206612%}.flag-eg{background-position:0 25.619835%}.flag-eh{background-position:0 26.033058%}.flag-er{background-position:0 26.446281%}.flag-es{background-position:0 26.859504%}.flag-et{background-position:0 27.272727%}.flag-fi{background-position:0 27.68595%}.flag-fj{background-position:0 28.099174%}.flag-fk{background-position:0 28.512397%}.flag-fm{background-position:0 28.92562%}.flag-fo{background-position:0 29.338843%}.flag-fr{background-position:0 29.752066%}.flag-ga{background-position:0 30.165289%}.flag-gd{background-position:0 30.578512%}.flag-ge{background-position:0 30.991736%}.flag-gf{background-position:0 31.404959%}.flag-gh{background-position:0 31.818182%}.flag-gi{background-position:0 32.231405%}.flag-gl{background-position:0 32.644628%}.flag-gm{background-position:0 33.057851%}.flag-gn{background-position:0 33.471074%}.flag-gp{background-position:0 33.884298%}.flag-gq{background-position:0 34.297521%}.flag-gr{background-position:0 34.710744%}.flag-gs{background-position:0 35.123967%}.flag-gt{background-position:0 35.53719%}.flag-gu{background-position:0 35.950413%}.flag-gw{background-position:0 36.363636%}.flag-gy{background-position:0 36.77686%}.flag-hk{background-position:0 37.190083%}.flag-hm{background-position:0 37.603306%}.flag-hn{background-position:0 38.016529%}.flag-hr{background-position:0 38.
} ;
const tailwindConfig = ` @tailwind base;
@ tailwind components ;
@ tailwind utilities ;
: root {
-- p - primary - 50 : var ( -- p - surface - 50 ) ;
-- p - primary - 100 : var ( -- p - surface - 100 ) ;
-- p - primary - 200 : var ( -- p - surface - 200 ) ;
-- p - primary - 300 : var ( -- p - surface - 300 ) ;
-- p - primary - 400 : var ( -- p - surface - 400 ) ;
-- p - primary - 500 : var ( -- p - surface - 500 ) ;
-- p - primary - 600 : var ( -- p - surface - 600 ) ;
-- p - primary - 700 : var ( -- p - surface - 700 ) ;
-- p - primary - 800 : var ( -- p - surface - 800 ) ;
-- p - primary - 900 : var ( -- p - surface - 900 ) ;
-- p - primary - 950 : var ( -- p - surface - 950 ) ;
-- p - surface - 0 : # ffffff ;
-- p - surface - 50 : # f8fafc ;
-- p - surface - 100 : # f1f5f9 ;
-- p - surface - 200 : # e2e8f0 ;
-- p - surface - 300 : # cbd5e1 ;
-- p - surface - 400 : # 94 a3b8 ;
-- p - surface - 500 : # 64748 b ;
-- p - surface - 600 : # 475569 ;
-- p - surface - 700 : # 334155 ;
-- p - surface - 800 : # 1e293 b ;
-- p - surface - 900 : # 0 f172a ;
-- p - surface - 950 : # 020617 ;
-- p - content - border - radius : 6 px ;
}
: root {
-- p - primary - color : var ( -- p - primary - 500 ) ;
-- p - primary - contrast - color : var ( -- p - surface - 0 ) ;
-- p - primary - hover - color : var ( -- p - primary - 600 ) ;
-- p - primary - active - color : var ( -- p - primary - 700 ) ;
-- p - content - border - color : var ( -- p - surface - 200 ) ;
-- p - content - hover - background : var ( -- p - surface - 100 ) ;
-- p - content - hover - color : var ( -- p - surface - 800 ) ;
-- p - highlight - background : var ( -- p - primary - 50 ) ;
-- p - highlight - color : var ( -- p - primary - 700 ) ;
-- p - highlight - focus - background : var ( -- p - primary - 100 ) ;
-- p - highlight - focus - color : var ( -- p - primary - 800 ) ;
-- p - text - color : var ( -- p - surface - 700 ) ;
-- p - text - hover - color : var ( -- p - surface - 800 ) ;
-- p - text - muted - color : var ( -- p - surface - 500 ) ;
-- p - text - hover - muted - color : var ( -- p - surface - 600 ) ;
}
: root [ data - preset = "noir" ] {
-- p - primary - color : var ( -- p - primary - 950 ) ;
-- p - primary - contrast - color : # ffffff ;
-- p - primary - hover - color : var ( -- p - primary - 800 ) ;
-- p - primary - active - color : var ( -- p - primary - 700 ) ;
-- p - highlight - background : var ( -- p - surface - 950 ) ;
-- p - highlight - color : # ffffff ;
-- p - highlight - focus - background : var ( -- p - surface - 700 ) ;
-- p - highlight - focus - color : # ffffff ;
}
: root . p - dark {
-- p - primary - color : var ( -- p - primary - 400 ) ;
-- p - primary - contrast - color : var ( -- p - surface - 900 ) ;
-- p - primary - hover - color : var ( -- p - primary - 300 ) ;
-- p - primary - active - color : var ( -- p - primary - 200 ) ;
-- p - content - border - color : var ( -- p - surface - 700 ) ;
-- p - content - hover - background : var ( -- p - surface - 800 ) ;
-- p - content - hover - color : var ( -- p - surface - 0 ) ;
-- p - highlight - background : color - mix ( in srgb , var ( -- p - primary - 400 ) , transparent 84 % ) ;
-- p - highlight - color : rgba ( 255 , 255 , 255 , . 87 ) ;
-- p - highlight - focus - background : color - mix ( in srgb , var ( -- p - primary - 400 ) , transparent 76 % ) ;
-- p - highlight - focus - color : rgba ( 255 , 255 , 255 , . 87 ) ;
-- p - text - color : var ( -- p - surface - 0 ) ;
-- p - text - hover - color : var ( -- p - surface - 0 ) ;
-- p - text - muted - color : var ( -- p - surface - 400 ) ;
-- p - text - hover - muted - color : var ( -- p - surface - 300 ) ;
}
: root . p - dark [ data - preset = "noir" ] {
-- p - primary - color : var ( -- p - primary - 50 ) ;
-- p - primary - contrast - color : var ( -- p - surface - 950 ) ;
-- p - primary - hover - color : var ( -- p - primary - 200 ) ;
-- p - primary - active - color : var ( -- p - primary - 300 ) ;
-- p - highlight - background : var ( -- p - surface - 50 ) ;
-- p - highlight - color : var ( -- p - surface - 950 ) ;
-- p - highlight - focus - background : var ( -- p - surface - 300 ) ;
-- p - highlight - focus - color : var ( -- p - surface - 950 ) ;
}
@ keyframes fadein {
0 % {
opacity : 0 ;
}
100 % {
opacity : 1 ;
}
}
@ keyframes fadeout {
0 % {
opacity : 1 ;
}
100 % {
opacity : 0 ;
}
}
@ keyframes scalein {
0 % {
opacity : 0 ;
transform : scaleY ( 0.8 ) ;
transition : transform 0.12 s cubic - bezier ( 0 , 0 , 0.2 , 1 ) ,
opacity 0.12 s cubic - bezier ( 0 , 0 , 0.2 , 1 ) ;
}
100 % {
opacity : 1 ;
transform : scaleY ( 1 ) ;
}
}
@ keyframes slidedown {
0 % {
max - height : 0 ;
}
100 % {
max - height : auto ;
}
}
@ keyframes slideup {
0 % {
max - height : 1000 px ;
}
100 % {
max - height : 0 ;
}
}
. scalein {
animation : scalein 150 ms linear ;
}
. fadein {
animation : fadein 150 ms linear ;
}
. fadeout {
animation : fadeout 150 ms linear ;
}
. slidedown {
animation : slidedown 0.45 s ease - in - out ;
}
. slideup {
animation : slideup 0.45 s cubic - bezier ( 0 , 1 , 0 , 1 ) ;
}
: root {
-- card - border : 1 px solid var ( -- p - surface - 200 ) ;
-- card - background : # ffffff ;
-- ground - background : var ( -- p - surface - 50 ) ;
-- text - color : var ( -- p - surface - 700 ) ;
}
: root . p - dark {
-- card - border : 1 px solid transparent ;
-- card - background : var ( -- p - surface - 900 ) ;
-- ground - background : var ( -- p - surface - 950 ) ;
-- text - color : var ( -- p - surface - 0 ) ;
}
html {
font - size : 14 px ;
font - family : "Inter var" , - apple - system , BlinkMacSystemFont , "Segoe UI" , Roboto , Helvetica , Arial , sans - serif , "Apple Color Emoji" , "Segoe UI Emoji" , "Segoe UI Symbol" ;
font - feature - settings : "cv02" , "cv03" , "cv04" , "cv11" ;
line - height : normal ;
}
body {
margin : 0 px ;
min - height : 100 % ;
overflow - x : hidden ;
overflow - y : auto ;
background - color : var ( -- ground - background ) ;
font - weight : normal ;
color : var ( -- text - color ) ;
- webkit - font - smoothing : antialiased ;
- moz - osx - font - smoothing : grayscale ;
padding : 1 rem ;
}
a {
text - decoration : none ;
}
p {
line - height : 1.625 ;
margin : 0 0 1 rem 0 ;
}
. card {
background : var ( -- card - background ) ;
border : var ( -- card - border ) ;
padding : 2 rem ;
border - radius : 10 px ;
margin - bottom : 1 rem ;
}
. layout - ripple - disabled [ data - pc - name = 'ripple' ] {
display : none ! important ;
}
button . config - button {
border : none ;
width : 1.25 rem ;
height : 1.25 rem ;
border - radius : 50 % ;
padding : 0 ;
cursor : pointer ;
outline - color : transparent ;
outline - width : 2 px ;
outline - style : solid ;
outline - offset : 1 px ;
}
button . config - button . active - color {
outline - color : var ( -- p - primary - color ) ;
}
` ;
export { getVueApp } ;