1+ import { ref , Ref } from 'vue' ;
2+ import { usePreset } from '@primeuix/themes' ;
3+ import { Preset } from '@primeuix/themes/types' ;
4+ import { useStorage } from '@vueuse/core' ;
5+ import bootstrap from '@/theme/bootstrap-preset' ;
6+ import breeze from '@/theme/breeze-preset' ;
7+ import enterprise from '@/theme/enterprise-preset' ;
8+ import noir from '@/theme/noir-preset' ;
9+ import warm from '@/theme/warm-preset' ;
10+
11+ interface ThemePreset {
12+ label : string ,
13+ value : string ,
14+ preset : Preset ,
15+ }
16+
17+ const presets = ref < ThemePreset [ ] > ( [
18+ { label : 'Bootstrap' , value : 'bootstrap' , preset : bootstrap } ,
19+ { label : 'Breeze' , value : 'breeze' , preset : breeze } ,
20+ { label : 'Enterprise' , value : 'enterprise' , preset : enterprise } ,
21+ { label : 'Noir' , value : 'noir' , preset : noir } ,
22+ { label : 'Warm' , value : 'warm' , preset : warm } ,
23+ ] ) ;
24+
25+ const selectedPreset : Ref < string > = useStorage ( 'theme-preset' , 'noir' ) ;
26+
27+ function getCurrentPreset ( ) : Preset {
28+ return (
29+ presets . value . find ( ( p ) => p . value === selectedPreset . value ) ?. preset ||
30+ presets . value [ 3 ] . preset
31+ ) ;
32+ }
33+
34+ function setPreset ( presetValue : string ) : void {
35+ const themePreset = presets . value . find ( ( p ) => p . value === presetValue ) ;
36+ if ( themePreset ) {
37+ usePreset ( themePreset . preset ) ;
38+ }
39+ }
40+
41+ setPreset ( selectedPreset . value ) ;
42+
43+ export function useThemePreset ( ) {
44+ return {
45+ presets,
46+ selectedPreset,
47+ getCurrentPreset,
48+ setPreset,
49+ } ;
50+ }
0 commit comments