New docs for the styled mode
parent
5fd88c2fc3
commit
c3b6af0140
|
@ -3,7 +3,7 @@
|
||||||
<p>
|
<p>
|
||||||
PrimeVue is a design agnostic library so unlike some other UI libraries it does not enforce a certain styling such as material design. Styling is decoupled from the components using the themes instead. A theme consists of two parts;
|
PrimeVue is a design agnostic library so unlike some other UI libraries it does not enforce a certain styling such as material design. Styling is decoupled from the components using the themes instead. A theme consists of two parts;
|
||||||
<i>base</i> and <i>preset</i>. The base is the style rules with CSS variables as placeholders whereas the preset is a set of design tokens to feed a base by mapping the tokens to CSS variables. A base may be configured with different
|
<i>base</i> and <i>preset</i>. The base is the style rules with CSS variables as placeholders whereas the preset is a set of design tokens to feed a base by mapping the tokens to CSS variables. A base may be configured with different
|
||||||
presets, currently Aura, Lara and Nora are the available presets and in upcoming version more presets will be available such as Material Design.
|
presets, currently Aura, Material, Lara and Nora are the available built-in options.
|
||||||
</p>
|
</p>
|
||||||
<img alt="Architecture" src="https://primefaces.org/cdn/primevue/images/primevue-v4-styled-architecture.png" class="w-full mb-4" />
|
<img alt="Architecture" src="https://primefaces.org/cdn/primevue/images/primevue-v4-styled-architecture.png" class="w-full mb-4" />
|
||||||
<p>The core of the styled mode architecture is based on a concept named <i>design token</i>, a preset defines the token configuration in 3 tiers; <i>primitive</i>, <i>semantic</i> and <i>component</i>.</p>
|
<p>The core of the styled mode architecture is based on a concept named <i>design token</i>, a preset defines the token configuration in 3 tiers; <i>primitive</i>, <i>semantic</i> and <i>component</i>.</p>
|
||||||
|
@ -33,9 +33,9 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3>Video Tutorial</h3>
|
<h3>Video Tutorial</h3>
|
||||||
<p>Watch the <b>PrimeVue Theming Demystified</b> video to learn more about the architecture with examples.</p>
|
<p>Watch the <b>PrimeVue Theming Demystified</b> series to learn more about the architecture with examples.</p>
|
||||||
<div class="video-container">
|
<div class="video-container">
|
||||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/J3KFw5sih98" frameborder="0" allowfullscreen></iframe>
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?si=nlVVyxrwgiJCL9U7&list=PLC9bp-OHi-Wm2LqlXk1i-haW-1kESMIqh" frameborder="0" allowfullscreen></iframe>
|
||||||
</div>
|
</div>
|
||||||
</DocSectionText>
|
</DocSectionText>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<DocSectionText v-bind="$attrs">
|
<DocSectionText v-bind="$attrs">
|
||||||
<p>
|
<p>Color palette of a preset is defined by the <i>primitive</i> design token group. You can access colors using CSS variables or the <i>$dt</i> utility.</p>
|
||||||
Color palette of a preset is defined by the <i>primitive</i> design token group. The default colors are derived from the Tailwind colors with some extensions to make it consistent with the Tailwind Presets projects of the unstyled mode.
|
|
||||||
</p>
|
|
||||||
<p>Colors can be accessed at CSS as a variable and programmatically using the <i>$dt</i> utility.</p>
|
|
||||||
</DocSectionText>
|
</DocSectionText>
|
||||||
<DocSectionCode :code="code1" importCode hideToggleCode hideStackBlitz />
|
<DocSectionCode :code="code1" importCode hideToggleCode hideStackBlitz />
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
<template>
|
<template>
|
||||||
<DocSectionText v-bind="$attrs">
|
<DocSectionText v-bind="$attrs">
|
||||||
<p>Currently Aura, Lara and Nora are the available presets, a new preset based on Material Design is planned by the end of 2024.</p>
|
<p>currently Aura, Material, Lara and Nora are the available built-in options.</p>
|
||||||
</DocSectionText>
|
</DocSectionText>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<Tabs value="aura">
|
<Tabs value="aura">
|
||||||
<TabList>
|
<TabList>
|
||||||
<Tab value="aura">Aura</Tab>
|
<Tab value="aura">Aura</Tab>
|
||||||
|
<Tab value="material">Material</Tab>
|
||||||
<Tab value="lara">Lara</Tab>
|
<Tab value="lara">Lara</Tab>
|
||||||
<Tab value="nora">Nora</Tab>
|
<Tab value="nora">Nora</Tab>
|
||||||
<Tab value="material">Material</Tab>
|
|
||||||
</TabList>
|
</TabList>
|
||||||
<TabPanels>
|
<TabPanels>
|
||||||
<TabPanel value="aura"><DocSectionCode :code="aura" hideToggleCode importCode hideStackBlitz /></TabPanel>
|
<TabPanel value="aura"><DocSectionCode :code="aura" hideToggleCode importCode hideStackBlitz /></TabPanel>
|
||||||
|
<TabPanel value="material"><DocSectionCode :code="material" hideToggleCode importCode hideStackBlitz /></TabPanel>
|
||||||
<TabPanel value="lara"><DocSectionCode :code="lara" hideToggleCode importCode hideStackBlitz /></TabPanel>
|
<TabPanel value="lara"><DocSectionCode :code="lara" hideToggleCode importCode hideStackBlitz /></TabPanel>
|
||||||
<TabPanel value="nora"><DocSectionCode :code="nora" hideToggleCode importCode hideStackBlitz /></TabPanel>
|
<TabPanel value="nora"><DocSectionCode :code="nora" hideToggleCode importCode hideStackBlitz /></TabPanel>
|
||||||
<TabPanel value="material">Coming soon with a future update.</TabPanel>
|
|
||||||
</TabPanels>
|
</TabPanels>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
</div>
|
</div>
|
||||||
|
@ -410,6 +410,403 @@ export default {
|
||||||
// ... other components
|
// ... other components
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
`
|
||||||
|
},
|
||||||
|
material: {
|
||||||
|
basic: `
|
||||||
|
import accordion from '@primevue/themes/aura/accordion';
|
||||||
|
// ... imports of other component tokens
|
||||||
|
|
||||||
|
export default {
|
||||||
|
primitive: {
|
||||||
|
borderRadius: {
|
||||||
|
none: '0',
|
||||||
|
xs: '2px',
|
||||||
|
sm: '4px',
|
||||||
|
md: '6px',
|
||||||
|
lg: '8px',
|
||||||
|
xl: '12px'
|
||||||
|
},
|
||||||
|
emerald: { 50: '#E8F6F1', 100: '#C5EBE1', 200: '#9EDFCF', 300: '#76D3BD', 400: '#58C9AF', 500: '#3BBFA1', 600: '#35AF94', 700: '#2D9B83', 800: '#268873', 900: '#1A6657', 950: '#0d3329' },
|
||||||
|
green: { 50: '#E8F5E9', 100: '#C8E6C9', 200: '#A5D6A7', 300: '#81C784', 400: '#66BB6A', 500: '#4CAF50', 600: '#43A047', 700: '#388E3C', 800: '#2E7D32', 900: '#1B5E20', 950: '#0e2f10' },
|
||||||
|
lime: { 50: '#F9FBE7', 100: '#F0F4C3', 200: '#E6EE9C', 300: '#DCE775', 400: '#D4E157', 500: '#CDDC39', 600: '#C0CA33', 700: '#AFB42B', 800: '#9E9D24', 900: '#827717', 950: '#413c0c' },
|
||||||
|
red: { 50: '#FFEBEE', 100: '#FFCDD2', 200: '#EF9A9A', 300: '#E57373', 400: '#EF5350', 500: '#F44336', 600: '#E53935', 700: '#D32F2F', 800: '#C62828', 900: '#B71C1C', 950: '#5c0e0e' },
|
||||||
|
orange: { 50: '#FFF3E0', 100: '#FFE0B2', 200: '#FFCC80', 300: '#FFB74D', 400: '#FFA726', 500: '#FF9800', 600: '#FB8C00', 700: '#F57C00', 800: '#EF6C00', 900: '#E65100', 950: '#732900' },
|
||||||
|
amber: { 50: '#FFF8E1', 100: '#FFECB3', 200: '#FFE082', 300: '#FFD54F', 400: '#FFCA28', 500: '#FFC107', 600: '#FFB300', 700: '#FFA000', 800: '#FF8F00', 900: '#FF6F00', 950: '#803800' },
|
||||||
|
yellow: { 50: '#FFFDE7', 100: '#FFF9C4', 200: '#FFF59D', 300: '#FFF176', 400: '#FFEE58', 500: '#FFEB3B', 600: '#FDD835', 700: '#FBC02D', 800: '#F9A825', 900: '#F57F17', 950: '#7b400c' },
|
||||||
|
teal: { 50: '#E0F2F1', 100: '#B2DFDB', 200: '#80CBC4', 300: '#4DB6AC', 400: '#26A69A', 500: '#009688', 600: '#00897B', 700: '#00796B', 800: '#00695C', 900: '#004D40', 950: '#002720' },
|
||||||
|
cyan: { 50: '#E0F7FA', 100: '#B2EBF2', 200: '#80DEEA', 300: '#4DD0E1', 400: '#26C6DA', 500: '#00BCD4', 600: '#00ACC1', 700: '#0097A7', 800: '#00838F', 900: '#006064', 950: '#003032' },
|
||||||
|
sky: { 50: '#E1F5FE', 100: '#B3E5FC', 200: '#81D4FA', 300: '#4FC3F7', 400: '#29B6F6', 500: '#03A9F4', 600: '#039BE5', 700: '#0288D1', 800: '#0277BD', 900: '#01579B', 950: '#012c4e' },
|
||||||
|
blue: { 50: '#E3F2FD', 100: '#BBDEFB', 200: '#90CAF9', 300: '#64B5F6', 400: '#42A5F5', 500: '#2196F3', 600: '#1E88E5', 700: '#1976D2', 800: '#1565C0', 900: '#0D47A1', 950: '#072451' },
|
||||||
|
indigo: { 50: '#E8EAF6', 100: '#C5CAE9', 200: '#9FA8DA', 300: '#7986CB', 400: '#5C6BC0', 500: '#3F51B5', 600: '#3949AB', 700: '#303F9F', 800: '#283593', 900: '#1A237E', 950: '#0d123f' },
|
||||||
|
violet: { 50: '#EDE7F6', 100: '#D1C4E9', 200: '#B39DDB', 300: '#9575CD', 400: '#7E57C2', 500: '#673AB7', 600: '#5E35B1', 700: '#512DA8', 800: '#4527A0', 900: '#311B92', 950: '#190e49' },
|
||||||
|
purple: { 50: '#F3E5F5', 100: '#E1BEE7', 200: '#CE93D8', 300: '#BA68C8', 400: '#AB47BC', 500: '#9C27B0', 600: '#8E24AA', 700: '#7B1FA2', 800: '#6A1B9A', 900: '#4A148C', 950: '#250a46' },
|
||||||
|
fuchsia: { 50: '#FDE6F3', 100: '#FBC1E3', 200: '#F897D1', 300: '#F56DBF', 400: '#F34DB2', 500: '#F12DA5', 600: '#E0289D', 700: '#CC2392', 800: '#B81E88', 900: '#951777', 950: '#4b0c3c' },
|
||||||
|
pink: { 50: '#FCE4EC', 100: '#F8BBD0', 200: '#F48FB1', 300: '#F06292', 400: '#EC407A', 500: '#E91E63', 600: '#D81B60', 700: '#C2185B', 800: '#AD1457', 900: '#880E4F', 950: '#440728' },
|
||||||
|
rose: { 50: '#FFF0F0', 100: '#FFD9D9', 200: '#FFC0C0', 300: '#FFA7A7', 400: '#FF8E8E', 500: '#FF7575', 600: '#FF5252', 700: '#FF3838', 800: '#F71C1C', 900: '#D50000', 950: '#3E0000' },
|
||||||
|
slate: { 50: '#f8fafc', 100: '#f1f5f9', 200: '#e2e8f0', 300: '#cbd5e1', 400: '#94a3b8', 500: '#64748b', 600: '#475569', 700: '#334155', 800: '#1e293b', 900: '#0f172a', 950: '#020617' },
|
||||||
|
gray: { 50: '#f9fafb', 100: '#f3f4f6', 200: '#e5e7eb', 300: '#d1d5db', 400: '#9ca3af', 500: '#6b7280', 600: '#4b5563', 700: '#374151', 800: '#1f2937', 900: '#111827', 950: '#030712' },
|
||||||
|
zinc: { 50: '#fafafa', 100: '#f4f4f5', 200: '#e4e4e7', 300: '#d4d4d8', 400: '#a1a1aa', 500: '#71717a', 600: '#52525b', 700: '#3f3f46', 800: '#27272a', 900: '#18181b', 950: '#09090b' },
|
||||||
|
neutral: { 50: '#fafafa', 100: '#f5f5f5', 200: '#e5e5e5', 300: '#d4d4d4', 400: '#a3a3a3', 500: '#737373', 600: '#525252', 700: '#404040', 800: '#262626', 900: '#171717', 950: '#0a0a0a' },
|
||||||
|
stone: { 50: '#fafaf9', 100: '#f5f5f4', 200: '#e7e5e4', 300: '#d6d3d1', 400: '#a8a29e', 500: '#78716c', 600: '#57534e', 700: '#44403c', 800: '#292524', 900: '#1c1917', 950: '#0c0a09' }
|
||||||
|
},
|
||||||
|
semantic: {
|
||||||
|
transitionDuration: '0.2s',
|
||||||
|
focusRing: {
|
||||||
|
width: '0',
|
||||||
|
style: 'none',
|
||||||
|
color: 'unset',
|
||||||
|
offset: '0'
|
||||||
|
},
|
||||||
|
disabledOpacity: '0.38',
|
||||||
|
iconSize: '1rem',
|
||||||
|
anchorGutter: '0',
|
||||||
|
primary: {
|
||||||
|
50: '{emerald.50}',
|
||||||
|
100: '{emerald.100}',
|
||||||
|
200: '{emerald.200}',
|
||||||
|
300: '{emerald.300}',
|
||||||
|
400: '{emerald.400}',
|
||||||
|
500: '{emerald.500}',
|
||||||
|
600: '{emerald.600}',
|
||||||
|
700: '{emerald.700}',
|
||||||
|
800: '{emerald.800}',
|
||||||
|
900: '{emerald.900}',
|
||||||
|
950: '{emerald.950}'
|
||||||
|
},
|
||||||
|
formField: {
|
||||||
|
paddingX: '0.75rem',
|
||||||
|
paddingY: '0.75rem',
|
||||||
|
borderRadius: '{border.radius.sm}',
|
||||||
|
focusRing: {
|
||||||
|
width: '2px',
|
||||||
|
style: 'solid',
|
||||||
|
color: '{primary.color}',
|
||||||
|
offset: '-2px',
|
||||||
|
shadow: 'none'
|
||||||
|
},
|
||||||
|
transitionDuration: '{transition.duration}'
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
padding: '0.5rem 0',
|
||||||
|
gap: '0',
|
||||||
|
header: {
|
||||||
|
padding: '0.75rem 1rem'
|
||||||
|
},
|
||||||
|
option: {
|
||||||
|
padding: '0.75rem 1rem',
|
||||||
|
borderRadius: '{border.radius.none}'
|
||||||
|
},
|
||||||
|
optionGroup: {
|
||||||
|
padding: '0.75rem 1rem',
|
||||||
|
fontWeight: '700'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
borderRadius: '{border.radius.sm}'
|
||||||
|
},
|
||||||
|
mask: {
|
||||||
|
transitionDuration: '0.15s'
|
||||||
|
},
|
||||||
|
navigation: {
|
||||||
|
list: {
|
||||||
|
padding: '0.5rem 0',
|
||||||
|
gap: '0'
|
||||||
|
},
|
||||||
|
item: {
|
||||||
|
padding: '0.75rem 1rem',
|
||||||
|
borderRadius: '{border.radius.none}',
|
||||||
|
gap: '0.5rem'
|
||||||
|
},
|
||||||
|
submenuLabel: {
|
||||||
|
padding: '0.75rem 1rem',
|
||||||
|
fontWeight: '700'
|
||||||
|
},
|
||||||
|
submenuIcon: {
|
||||||
|
size: '0.875rem'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
overlay: {
|
||||||
|
select: {
|
||||||
|
borderRadius: '{border.radius.sm}',
|
||||||
|
shadow: '0 5px 5px -3px rgba(0,0,0,.2), 0 8px 10px 1px rgba(0,0,0,.14), 0 3px 14px 2px rgba(0,0,0,.12)'
|
||||||
|
},
|
||||||
|
popover: {
|
||||||
|
borderRadius: '{border.radius.sm}',
|
||||||
|
padding: '1rem',
|
||||||
|
shadow: '0 11px 15px -7px rgba(0,0,0,.2), 0 24px 38px 3px rgba(0,0,0,.14), 0 9px 46px 8px rgba(0,0,0,.12)'
|
||||||
|
},
|
||||||
|
modal: {
|
||||||
|
borderRadius: '{border.radius.sm}',
|
||||||
|
padding: '1.5rem',
|
||||||
|
shadow: '0 11px 15px -7px rgba(0,0,0,.2), 0 24px 38px 3px rgba(0,0,0,.14), 0 9px 46px 8px rgba(0,0,0,.12)'
|
||||||
|
},
|
||||||
|
navigation: {
|
||||||
|
shadow: '0 2px 4px -1px rgba(0,0,0,.2), 0 4px 5px 0 rgba(0,0,0,.14), 0 1px 10px 0 rgba(0,0,0,.12)'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
colorScheme: {
|
||||||
|
light: {
|
||||||
|
focusRing: {
|
||||||
|
shadow: '0 0 1px 4px {surface.200}'
|
||||||
|
},
|
||||||
|
surface: {
|
||||||
|
0: '#ffffff',
|
||||||
|
50: '{slate.50}',
|
||||||
|
100: '{slate.100}',
|
||||||
|
200: '{slate.200}',
|
||||||
|
300: '{slate.300}',
|
||||||
|
400: '{slate.400}',
|
||||||
|
500: '{slate.500}',
|
||||||
|
600: '{slate.600}',
|
||||||
|
700: '{slate.700}',
|
||||||
|
800: '{slate.800}',
|
||||||
|
900: '{slate.900}',
|
||||||
|
950: '{slate.950}'
|
||||||
|
},
|
||||||
|
primary: {
|
||||||
|
color: '{primary.500}',
|
||||||
|
contrastColor: '#ffffff',
|
||||||
|
hoverColor: '{primary.400}',
|
||||||
|
activeColor: '{primary.300}'
|
||||||
|
},
|
||||||
|
highlight: {
|
||||||
|
background: 'color-mix(in srgb, {primary.color}, transparent 88%)',
|
||||||
|
focusBackground: 'color-mix(in srgb, {primary.color}, transparent 76%)',
|
||||||
|
color: '{primary.700}',
|
||||||
|
focusColor: '{primary.800}'
|
||||||
|
},
|
||||||
|
mask: {
|
||||||
|
background: 'rgba(0,0,0,0.32)',
|
||||||
|
color: '{surface.200}'
|
||||||
|
},
|
||||||
|
formField: {
|
||||||
|
background: '{surface.0}',
|
||||||
|
disabledBackground: '{surface.300}',
|
||||||
|
filledBackground: '{surface.100}',
|
||||||
|
filledHoverBackground: '{surface.200}',
|
||||||
|
filledFocusBackground: '{surface.100}',
|
||||||
|
borderColor: '{surface.400}',
|
||||||
|
hoverBorderColor: '{surface.900}',
|
||||||
|
focusBorderColor: '{primary.color}',
|
||||||
|
invalidBorderColor: '{red.800}',
|
||||||
|
color: '{surface.900}',
|
||||||
|
disabledColor: '{surface.600}',
|
||||||
|
placeholderColor: '{surface.600}',
|
||||||
|
floatLabelColor: '{surface.600}',
|
||||||
|
floatLabelFocusColor: '{primary.600}',
|
||||||
|
floatLabelActiveColor: '{surface.600}',
|
||||||
|
floatLabelInvalidColor: '{red.800}',
|
||||||
|
iconColor: '{surface.600}',
|
||||||
|
shadow: 'none'
|
||||||
|
},
|
||||||
|
text: {
|
||||||
|
color: '{surface.900}',
|
||||||
|
hoverColor: '{surface.900}',
|
||||||
|
mutedColor: '{surface.600}',
|
||||||
|
hoverMutedColor: '{surface.600}'
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
background: '{surface.0}',
|
||||||
|
hoverBackground: '{surface.100}',
|
||||||
|
borderColor: '{surface.300}',
|
||||||
|
color: '{text.color}',
|
||||||
|
hoverColor: '{text.hover.color}'
|
||||||
|
},
|
||||||
|
overlay: {
|
||||||
|
select: {
|
||||||
|
background: '{surface.0}',
|
||||||
|
borderColor: '{surface.0}',
|
||||||
|
color: '{text.color}'
|
||||||
|
},
|
||||||
|
popover: {
|
||||||
|
background: '{surface.0}',
|
||||||
|
borderColor: '{surface.0}',
|
||||||
|
color: '{text.color}'
|
||||||
|
},
|
||||||
|
modal: {
|
||||||
|
background: '{surface.0}',
|
||||||
|
borderColor: '{surface.0}',
|
||||||
|
color: '{text.color}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
option: {
|
||||||
|
focusBackground: '{surface.100}',
|
||||||
|
selectedBackground: '{highlight.background}',
|
||||||
|
selectedFocusBackground: '{highlight.focus.background}',
|
||||||
|
color: '{text.color}',
|
||||||
|
focusColor: '{text.hover.color}',
|
||||||
|
selectedColor: '{highlight.color}',
|
||||||
|
selectedFocusColor: '{highlight.focus.color}',
|
||||||
|
icon: {
|
||||||
|
color: '{surface.600}',
|
||||||
|
focusColor: '{surface.600}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
optionGroup: {
|
||||||
|
background: 'transparent',
|
||||||
|
color: '{text.color}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
navigation: {
|
||||||
|
item: {
|
||||||
|
focusBackground: '{surface.100}',
|
||||||
|
activeBackground: '{surface.200}',
|
||||||
|
color: '{text.color}',
|
||||||
|
focusColor: '{text.hover.color}',
|
||||||
|
activeColor: '{text.hover.color}',
|
||||||
|
icon: {
|
||||||
|
color: '{surface.600}',
|
||||||
|
focusColor: '{surface.600}',
|
||||||
|
activeColor: '{surface.600}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
submenuLabel: {
|
||||||
|
background: 'transparent',
|
||||||
|
color: '{text.color}'
|
||||||
|
},
|
||||||
|
submenuIcon: {
|
||||||
|
color: '{surface.600}',
|
||||||
|
focusColor: '{surface.600}',
|
||||||
|
activeColor: '{surface.600}'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dark: {
|
||||||
|
focusRing: {
|
||||||
|
shadow: '0 0 1px 4px {surface.700}'
|
||||||
|
},
|
||||||
|
surface: {
|
||||||
|
0: '#ffffff',
|
||||||
|
50: '{zinc.50}',
|
||||||
|
100: '{zinc.100}',
|
||||||
|
200: '{zinc.200}',
|
||||||
|
300: '{zinc.300}',
|
||||||
|
400: '{zinc.400}',
|
||||||
|
500: '{zinc.500}',
|
||||||
|
600: '{zinc.600}',
|
||||||
|
700: '{zinc.700}',
|
||||||
|
800: '{zinc.800}',
|
||||||
|
900: '{zinc.900}',
|
||||||
|
950: '{zinc.950}'
|
||||||
|
},
|
||||||
|
primary: {
|
||||||
|
color: '{primary.400}',
|
||||||
|
contrastColor: '{surface.900}',
|
||||||
|
hoverColor: '{primary.300}',
|
||||||
|
activeColor: '{primary.200}'
|
||||||
|
},
|
||||||
|
highlight: {
|
||||||
|
background: 'color-mix(in srgb, {primary.400}, transparent 84%)',
|
||||||
|
focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',
|
||||||
|
color: 'rgba(255,255,255,.87)',
|
||||||
|
focusColor: 'rgba(255,255,255,.87)'
|
||||||
|
},
|
||||||
|
mask: {
|
||||||
|
background: 'rgba(0,0,0,0.6)',
|
||||||
|
color: '{surface.200}'
|
||||||
|
},
|
||||||
|
formField: {
|
||||||
|
background: '{surface.950}',
|
||||||
|
disabledBackground: '{surface.700}',
|
||||||
|
filledBackground: '{surface.800}',
|
||||||
|
filledHoverBackground: '{surface.700}',
|
||||||
|
filledFocusBackground: '{surface.800}',
|
||||||
|
borderColor: '{surface.600}',
|
||||||
|
hoverBorderColor: '{surface.400}',
|
||||||
|
focusBorderColor: '{primary.color}',
|
||||||
|
invalidBorderColor: '{red.300}',
|
||||||
|
color: '{surface.0}',
|
||||||
|
disabledColor: '{surface.400}',
|
||||||
|
placeholderColor: '{surface.400}',
|
||||||
|
floatLabelColor: '{surface.400}',
|
||||||
|
floatLabelFocusColor: '{primary.color}',
|
||||||
|
floatLabelActiveColor: '{surface.400}',
|
||||||
|
floatLabelInvalidColor: '{red.300}',
|
||||||
|
iconColor: '{surface.400}',
|
||||||
|
shadow: 'none'
|
||||||
|
},
|
||||||
|
text: {
|
||||||
|
color: '{surface.0}',
|
||||||
|
hoverColor: '{surface.0}',
|
||||||
|
mutedColor: '{surface.400}',
|
||||||
|
hoverMutedColor: '{surface.400}'
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
background: '{surface.900}',
|
||||||
|
hoverBackground: '{surface.800}',
|
||||||
|
borderColor: '{surface.700}',
|
||||||
|
color: '{text.color}',
|
||||||
|
hoverColor: '{text.hover.color}'
|
||||||
|
},
|
||||||
|
overlay: {
|
||||||
|
select: {
|
||||||
|
background: '{surface.900}',
|
||||||
|
borderColor: '{surface.900}',
|
||||||
|
color: '{text.color}'
|
||||||
|
},
|
||||||
|
popover: {
|
||||||
|
background: '{surface.900}',
|
||||||
|
borderColor: '{surface.900}',
|
||||||
|
color: '{text.color}'
|
||||||
|
},
|
||||||
|
modal: {
|
||||||
|
background: '{surface.900}',
|
||||||
|
borderColor: '{surface.900}',
|
||||||
|
color: '{text.color}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
option: {
|
||||||
|
focusBackground: '{surface.800}',
|
||||||
|
selectedBackground: '{highlight.background}',
|
||||||
|
selectedFocusBackground: '{highlight.focus.background}',
|
||||||
|
color: '{text.color}',
|
||||||
|
focusColor: '{text.hover.color}',
|
||||||
|
selectedColor: '{highlight.color}',
|
||||||
|
selectedFocusColor: '{highlight.focus.color}',
|
||||||
|
icon: {
|
||||||
|
color: '{surface.400}',
|
||||||
|
focusColor: '{surface.400}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
optionGroup: {
|
||||||
|
background: 'transparent',
|
||||||
|
color: '{text.muted.color}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
navigation: {
|
||||||
|
item: {
|
||||||
|
focusBackground: '{surface.800}',
|
||||||
|
activeBackground: '{surface.700}',
|
||||||
|
color: '{text.color}',
|
||||||
|
focusColor: '{text.hover.color}',
|
||||||
|
activeColor: '{text.hover.color}',
|
||||||
|
icon: {
|
||||||
|
color: '{surface.400}',
|
||||||
|
focusColor: '{surface.400}',
|
||||||
|
activeColor: '{surface.400}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
submenuLabel: {
|
||||||
|
background: 'transparent',
|
||||||
|
color: '{text.muted.color}'
|
||||||
|
},
|
||||||
|
submenuIcon: {
|
||||||
|
color: '{surface.400}',
|
||||||
|
focusColor: '{surface.400}',
|
||||||
|
activeColor: '{surface.400}'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
accordion,
|
||||||
|
// ... other components
|
||||||
|
}
|
||||||
|
};
|
||||||
`
|
`
|
||||||
},
|
},
|
||||||
lara: {
|
lara: {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<DocSectionText v-bind="$attrs">
|
<DocSectionText v-bind="$attrs">
|
||||||
<p>
|
<p>
|
||||||
Following keys are reserved in the preset scheme and cannot be used as a token name; <i>primitive</i>, <i>semantic</i>, <i>components</i>, <i>directives</i>, <i>colorscheme</i>, <i>light</i>, <i>dark</i>, <i>common</i>, <i>root</i>,
|
Following keys are reserved in the preset scheme and cannot be used as a token name; <i>primitive</i>, <i>semantic</i>, <i>components</i>, <i>directives</i>, <i>colorscheme</i>, <i>light</i>, <i>dark</i>, <i>common</i>, <i>root</i>,
|
||||||
<i>states</i>.
|
<i>states</i>, and <i>extend</i>.
|
||||||
</p>
|
</p>
|
||||||
</DocSectionText>
|
</DocSectionText>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
<DocSectionCode :code="code2" importCode hideToggleCode hideStackBlitz />
|
<DocSectionCode :code="code2" importCode hideToggleCode hideStackBlitz />
|
||||||
<h4>cssLayer</h4>
|
<h4>cssLayer</h4>
|
||||||
<p>
|
<p>
|
||||||
Defines whether the styles should be defined inside a <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer" target="_blank" rel="noopener noreferrer">CSS layer</a> named <i>primeui</i> by default or not. A CSS layer would be
|
Defines whether the styles should be defined inside a <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer" target="_blank" rel="noopener noreferrer">CSS layer</a> by default or not. A CSS layer would be handy to declare a
|
||||||
handy to declare a custom cascade layer for easier customization. The default is <i>false</i>.
|
custom cascade layer for easier customization if necessary. The default is <i>false</i>.
|
||||||
</p>
|
</p>
|
||||||
<DocSectionCode :code="code3" importCode hideToggleCode hideStackBlitz />
|
<DocSectionCode :code="code3" importCode hideToggleCode hideStackBlitz />
|
||||||
</DocSectionText>
|
</DocSectionText>
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
<template>
|
||||||
|
<DocSectionText v-bind="$attrs">
|
||||||
|
<p>
|
||||||
|
The theming system can be extended by adding custom design tokens and additional styles. This feature provides a high degree of customization, allowing you to adjust styles according to your needs, as you are not limited to the default
|
||||||
|
tokens.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Use the <i>extend</i> property to add custom tokens along with the <i>css</i> property to utilize them. As an example, let's customize the disabled state of the ToggleSwitch component to add an opacity token, and use the primary color for
|
||||||
|
the handle. By default, there is no opacity option available, and the disabled switch uses a gray handle by design.
|
||||||
|
</p>
|
||||||
|
</DocSectionText>
|
||||||
|
<DocSectionCode :code="code" hideToggleCode importCode hideStackBlitz />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
code: {
|
||||||
|
basic: `
|
||||||
|
const MyPreset = definePreset(Aura, {
|
||||||
|
components: {
|
||||||
|
toggleswitch: {
|
||||||
|
extend: {
|
||||||
|
root: {
|
||||||
|
myDisabledOpacity: '0.7'
|
||||||
|
},
|
||||||
|
handle: {
|
||||||
|
myCheckedDisabledBackground: '{primary.color}'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
css: ({ dt }) => \`
|
||||||
|
.p-toggleswitch.p-disabled .p-toggleswitch-slider {
|
||||||
|
opacity: \${dt('toggleswitch.my.disabled.opacity')};
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-toggleswitch.p-disabled .p-toggleswitch-handle {
|
||||||
|
background: \${dt('toggleswitch.my.checked.disabled.background')};
|
||||||
|
}
|
||||||
|
\`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
`
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -35,6 +35,7 @@ import ResetDoc from '@/doc/theming/styled/csslayer/ResetDoc.vue';
|
||||||
import SpecificityDoc from '@/doc/theming/styled/csslayer/SpecificityDoc.vue';
|
import SpecificityDoc from '@/doc/theming/styled/csslayer/SpecificityDoc.vue';
|
||||||
import ComponentDoc from '@/doc/theming/styled/customization/ComponentDoc.vue';
|
import ComponentDoc from '@/doc/theming/styled/customization/ComponentDoc.vue';
|
||||||
import DefinePresetDoc from '@/doc/theming/styled/customization/DefinePresetDoc.vue';
|
import DefinePresetDoc from '@/doc/theming/styled/customization/DefinePresetDoc.vue';
|
||||||
|
import ExtendDoc from '@/doc/theming/styled/customization/ExtendDoc.vue';
|
||||||
import FocusRingDoc from '@/doc/theming/styled/customization/FocusRingDoc.vue';
|
import FocusRingDoc from '@/doc/theming/styled/customization/FocusRingDoc.vue';
|
||||||
import FontDoc from '@/doc/theming/styled/customization/FontDoc.vue';
|
import FontDoc from '@/doc/theming/styled/customization/FontDoc.vue';
|
||||||
import FormsDoc from '@/doc/theming/styled/customization/FormsDoc.vue';
|
import FormsDoc from '@/doc/theming/styled/customization/FormsDoc.vue';
|
||||||
|
@ -88,6 +89,16 @@ export default {
|
||||||
label: 'Reserved Keys',
|
label: 'Reserved Keys',
|
||||||
component: ReservedKeysDoc
|
component: ReservedKeysDoc
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'colors',
|
||||||
|
label: 'Colors',
|
||||||
|
component: ColorsDoc
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'darkmode',
|
||||||
|
label: 'Dark Mode',
|
||||||
|
component: DarkModeDoc
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'customization',
|
id: 'customization',
|
||||||
label: 'Customization',
|
label: 'Customization',
|
||||||
|
@ -131,6 +142,11 @@ export default {
|
||||||
id: 'component',
|
id: 'component',
|
||||||
label: 'Component',
|
label: 'Component',
|
||||||
component: ComponentDoc
|
component: ComponentDoc
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'extend',
|
||||||
|
label: 'Extend',
|
||||||
|
component: ExtendDoc
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -175,16 +191,6 @@ export default {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'colors',
|
|
||||||
label: 'Colors',
|
|
||||||
component: ColorsDoc
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'darkmode',
|
|
||||||
label: 'Dark Mode',
|
|
||||||
component: DarkModeDoc
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'csslayer',
|
id: 'csslayer',
|
||||||
label: 'CSS Layer',
|
label: 'CSS Layer',
|
||||||
|
|
Loading…
Reference in New Issue