vuetiwatch 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +232 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +41 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +58 -0
- package/dist/plugin.js.map +1 -0
- package/dist/registry.d.ts +17 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +37 -0
- package/dist/registry.js.map +1 -0
- package/dist/styles/aurora.css +74 -0
- package/dist/styles/aurora.min.css +1 -0
- package/dist/styles/brutalist.css +48 -0
- package/dist/styles/brutalist.min.css +1 -0
- package/dist/styles/calm.css +21 -0
- package/dist/styles/calm.min.css +1 -0
- package/dist/styles/clay.css +44 -0
- package/dist/styles/clay.min.css +1 -0
- package/dist/styles/core.css +140 -0
- package/dist/styles/core.min.css +1 -0
- package/dist/styles/darkGlass.css +43 -0
- package/dist/styles/darkGlass.min.css +1 -0
- package/dist/styles/liquidGlass.css +100 -0
- package/dist/styles/liquidGlass.min.css +1 -0
- package/dist/styles/lux.css +21 -0
- package/dist/styles/lux.min.css +1 -0
- package/dist/styles/morph.css +37 -0
- package/dist/styles/morph.min.css +1 -0
- package/dist/styles/neon.css +41 -0
- package/dist/styles/neon.min.css +1 -0
- package/dist/styles/paper.css +17 -0
- package/dist/styles/paper.min.css +1 -0
- package/dist/styles/sketchy.css +25 -0
- package/dist/styles/sketchy.min.css +1 -0
- package/dist/styles/slate.css +16 -0
- package/dist/styles/slate.min.css +1 -0
- package/dist/styles/soft.css +46 -0
- package/dist/styles/soft.min.css +1 -0
- package/dist/styles.css +686 -0
- package/dist/styles.min.css +1 -0
- package/dist/themes/aurora.d.ts +10 -0
- package/dist/themes/aurora.d.ts.map +1 -0
- package/dist/themes/aurora.js +86 -0
- package/dist/themes/aurora.js.map +1 -0
- package/dist/themes/brutalist.d.ts +10 -0
- package/dist/themes/brutalist.d.ts.map +1 -0
- package/dist/themes/brutalist.js +103 -0
- package/dist/themes/brutalist.js.map +1 -0
- package/dist/themes/calm.d.ts +11 -0
- package/dist/themes/calm.d.ts.map +1 -0
- package/dist/themes/calm.js +88 -0
- package/dist/themes/calm.js.map +1 -0
- package/dist/themes/classic.d.ts +6 -0
- package/dist/themes/classic.d.ts.map +1 -0
- package/dist/themes/classic.js +23 -0
- package/dist/themes/classic.js.map +1 -0
- package/dist/themes/clay.d.ts +8 -0
- package/dist/themes/clay.d.ts.map +1 -0
- package/dist/themes/clay.js +80 -0
- package/dist/themes/clay.js.map +1 -0
- package/dist/themes/darkGlass.d.ts +7 -0
- package/dist/themes/darkGlass.d.ts.map +1 -0
- package/dist/themes/darkGlass.js +77 -0
- package/dist/themes/darkGlass.js.map +1 -0
- package/dist/themes/index.d.ts +15 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +15 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/liquidGlass.d.ts +19 -0
- package/dist/themes/liquidGlass.d.ts.map +1 -0
- package/dist/themes/liquidGlass.js +111 -0
- package/dist/themes/liquidGlass.js.map +1 -0
- package/dist/themes/lux.d.ts +8 -0
- package/dist/themes/lux.d.ts.map +1 -0
- package/dist/themes/lux.js +91 -0
- package/dist/themes/lux.js.map +1 -0
- package/dist/themes/morph.d.ts +10 -0
- package/dist/themes/morph.d.ts.map +1 -0
- package/dist/themes/morph.js +82 -0
- package/dist/themes/morph.js.map +1 -0
- package/dist/themes/neon.d.ts +7 -0
- package/dist/themes/neon.d.ts.map +1 -0
- package/dist/themes/neon.js +96 -0
- package/dist/themes/neon.js.map +1 -0
- package/dist/themes/paper.d.ts +7 -0
- package/dist/themes/paper.d.ts.map +1 -0
- package/dist/themes/paper.js +88 -0
- package/dist/themes/paper.js.map +1 -0
- package/dist/themes/sketchy.d.ts +11 -0
- package/dist/themes/sketchy.d.ts.map +1 -0
- package/dist/themes/sketchy.js +88 -0
- package/dist/themes/sketchy.js.map +1 -0
- package/dist/themes/slate.d.ts +7 -0
- package/dist/themes/slate.d.ts.map +1 -0
- package/dist/themes/slate.js +89 -0
- package/dist/themes/slate.js.map +1 -0
- package/dist/themes/soft.d.ts +7 -0
- package/dist/themes/soft.d.ts.map +1 -0
- package/dist/themes/soft.js +84 -0
- package/dist/themes/soft.js.map +1 -0
- package/dist/types.d.ts +40 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/util/defaults.d.ts +62 -0
- package/dist/util/defaults.d.ts.map +1 -0
- package/dist/util/defaults.js +100 -0
- package/dist/util/defaults.js.map +1 -0
- package/dist/util/defineTheme.d.ts +21 -0
- package/dist/util/defineTheme.d.ts.map +1 -0
- package/dist/util/defineTheme.js +25 -0
- package/dist/util/defineTheme.js.map +1 -0
- package/dist/util/merge.d.ts +8 -0
- package/dist/util/merge.d.ts.map +1 -0
- package/dist/util/merge.js +17 -0
- package/dist/util/merge.js.map +1 -0
- package/package.json +75 -0
- package/src/index.ts +35 -0
- package/src/plugin.ts +116 -0
- package/src/registry.ts +64 -0
- package/src/styles/core.css +311 -0
- package/src/styles/index.css +30 -0
- package/src/styles/themes/aurora.css +86 -0
- package/src/styles/themes/brutalist.css +59 -0
- package/src/styles/themes/calm.css +31 -0
- package/src/styles/themes/clay.css +60 -0
- package/src/styles/themes/darkGlass.css +69 -0
- package/src/styles/themes/liquidGlass.css +172 -0
- package/src/styles/themes/lux.css +31 -0
- package/src/styles/themes/morph.css +53 -0
- package/src/styles/themes/neon.css +56 -0
- package/src/styles/themes/paper.css +32 -0
- package/src/styles/themes/sketchy.css +34 -0
- package/src/styles/themes/slate.css +26 -0
- package/src/styles/themes/soft.css +63 -0
- package/src/themes/aurora.ts +86 -0
- package/src/themes/brutalist.ts +103 -0
- package/src/themes/calm.ts +88 -0
- package/src/themes/classic.ts +23 -0
- package/src/themes/clay.ts +80 -0
- package/src/themes/darkGlass.ts +77 -0
- package/src/themes/index.ts +14 -0
- package/src/themes/liquidGlass.ts +111 -0
- package/src/themes/lux.ts +91 -0
- package/src/themes/morph.ts +82 -0
- package/src/themes/neon.ts +96 -0
- package/src/themes/paper.ts +88 -0
- package/src/themes/sketchy.ts +88 -0
- package/src/themes/slate.ts +89 -0
- package/src/themes/soft.ts +84 -0
- package/src/types.ts +44 -0
- package/src/util/defaults.ts +164 -0
- package/src/util/defineTheme.ts +49 -0
- package/src/util/merge.ts +23 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { bars, fields, icons, surfaces } from '../util/defaults.js';
|
|
2
|
+
import { defineTheme } from '../util/defineTheme.js';
|
|
3
|
+
/**
|
|
4
|
+
* A hand-drawn look for mockups and wireframes, after Bootswatch's Sketchy.
|
|
5
|
+
*
|
|
6
|
+
* The whole effect rests on one trick: an asymmetric `border-radius` with
|
|
7
|
+
* wildly different horizontal and vertical radii reads as a wobbly pen
|
|
8
|
+
* stroke. Vuetify passes `variables` through verbatim, so the full
|
|
9
|
+
* multi-value syntax rides in on the same `--v-vw-radius` every other theme
|
|
10
|
+
* uses — no new plumbing.
|
|
11
|
+
*/
|
|
12
|
+
export const sketchy = defineTheme({
|
|
13
|
+
name: 'sketchy',
|
|
14
|
+
meta: {
|
|
15
|
+
title: 'Sketchy',
|
|
16
|
+
description: 'Hand-drawn wobble and pencil greys — for mockups, wireframes and mirth.',
|
|
17
|
+
dark: false,
|
|
18
|
+
iconStyle: 'outline',
|
|
19
|
+
swatch: ['#FFFEF7', '#FFFFFF', '#333333', '#7A6A55'],
|
|
20
|
+
fonts: ['Neucha', 'Cabin Sketch'],
|
|
21
|
+
},
|
|
22
|
+
theme: {
|
|
23
|
+
dark: false,
|
|
24
|
+
colors: {
|
|
25
|
+
background: '#FFFEF7',
|
|
26
|
+
surface: '#FFFFFF',
|
|
27
|
+
'surface-bright': '#FFFFFF',
|
|
28
|
+
'surface-light': '#F5F2E8',
|
|
29
|
+
'surface-variant': '#333333',
|
|
30
|
+
'on-surface-variant': '#FFFEF7',
|
|
31
|
+
primary: '#333333',
|
|
32
|
+
'primary-darken-1': '#111111',
|
|
33
|
+
secondary: '#7A6A55',
|
|
34
|
+
'secondary-darken-1': '#5C4F3E',
|
|
35
|
+
error: '#C0392B',
|
|
36
|
+
info: '#2E6DA4',
|
|
37
|
+
success: '#3D8B54',
|
|
38
|
+
warning: '#C98A15',
|
|
39
|
+
'on-surface': '#2B2B2B',
|
|
40
|
+
'on-background': '#2B2B2B',
|
|
41
|
+
},
|
|
42
|
+
variables: {
|
|
43
|
+
'border-color': '#2B2B2B',
|
|
44
|
+
'border-opacity': 0.85,
|
|
45
|
+
'high-emphasis-opacity': 0.95,
|
|
46
|
+
'medium-emphasis-opacity': 0.7,
|
|
47
|
+
'hover-opacity': 0.06,
|
|
48
|
+
'font-body': "'Neucha', 'Comic Sans MS', cursive, sans-serif",
|
|
49
|
+
'font-heading': "'Cabin Sketch', 'Neucha', cursive",
|
|
50
|
+
// Two wobbles, each scaled to its element: a 255px radius on a 36px
|
|
51
|
+
// button gets clamped back into a pill, so buttons get a smaller one
|
|
52
|
+
// and only cards are big enough to carry the full stroke.
|
|
53
|
+
'vw-radius': '22px 5px 20px 6px / 6px 20px 5px 22px',
|
|
54
|
+
'vw-radius-lg': '255px 15px 225px 15px / 15px 225px 15px 255px',
|
|
55
|
+
'vw-radius-thumb': '7px 2px 6px 3px / 3px 6px 2px 7px',
|
|
56
|
+
'vw-radius-chip': '18px 42px 18px 42px / 42px 18px 42px 18px',
|
|
57
|
+
'vw-border-width': '2px',
|
|
58
|
+
'vw-btn-transform': 'none',
|
|
59
|
+
'vw-btn-tracking': '0.02em',
|
|
60
|
+
'vw-btn-weight': '400',
|
|
61
|
+
'vw-tab-slider-height': '3px',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
defaults: [
|
|
65
|
+
{
|
|
66
|
+
VBtn: { variant: 'outlined' },
|
|
67
|
+
VSheet: { border: true },
|
|
68
|
+
VNavigationDrawer: { border: 'e' },
|
|
69
|
+
VSwitch: { inset: 'square' },
|
|
70
|
+
VSlider: { thumbSize: 18, trackSize: 4 },
|
|
71
|
+
},
|
|
72
|
+
surfaces({ variant: 'outlined' }),
|
|
73
|
+
fields({ variant: 'outlined' }),
|
|
74
|
+
bars({ flat: true, border: 'b' }),
|
|
75
|
+
icons({
|
|
76
|
+
// A drawn box with a marker tick scrawled over it, rather than the
|
|
77
|
+
// tidy printed checkbox.
|
|
78
|
+
dropdown: 'mdi-chevron-down',
|
|
79
|
+
collapse: 'mdi-chevron-up',
|
|
80
|
+
checkboxOn: 'mdi-check-bold',
|
|
81
|
+
checkboxOff: 'mdi-square-outline',
|
|
82
|
+
ratingFull: 'mdi-star',
|
|
83
|
+
ratingEmpty: 'mdi-star-outline',
|
|
84
|
+
close: 'mdi-close-thick',
|
|
85
|
+
}),
|
|
86
|
+
],
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=sketchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sketchy.js","sourceRoot":"","sources":["../../src/themes/sketchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC;IACjC,IAAI,EAAE,SAAS;IACf,IAAI,EAAE;QACJ,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,yEAAyE;QACtF,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QACpD,KAAK,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;KAClC;IACD,KAAK,EAAE;QACL,IAAI,EAAE,KAAK;QACX,MAAM,EAAE;YACN,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,SAAS;YAClB,gBAAgB,EAAE,SAAS;YAC3B,eAAe,EAAE,SAAS;YAC1B,iBAAiB,EAAE,SAAS;YAC5B,oBAAoB,EAAE,SAAS;YAC/B,OAAO,EAAE,SAAS;YAClB,kBAAkB,EAAE,SAAS;YAC7B,SAAS,EAAE,SAAS;YACpB,oBAAoB,EAAE,SAAS;YAC/B,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,SAAS;YAClB,YAAY,EAAE,SAAS;YACvB,eAAe,EAAE,SAAS;SAC3B;QACD,SAAS,EAAE;YACT,cAAc,EAAE,SAAS;YACzB,gBAAgB,EAAE,IAAI;YACtB,uBAAuB,EAAE,IAAI;YAC7B,yBAAyB,EAAE,GAAG;YAC9B,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,gDAAgD;YAC7D,cAAc,EAAE,mCAAmC;YACnD,oEAAoE;YACpE,qEAAqE;YACrE,0DAA0D;YAC1D,WAAW,EAAE,uCAAuC;YACpD,cAAc,EAAE,+CAA+C;YAC/D,iBAAiB,EAAE,mCAAmC;YACtD,gBAAgB,EAAE,2CAA2C;YAC7D,iBAAiB,EAAE,KAAK;YACxB,kBAAkB,EAAE,MAAM;YAC1B,iBAAiB,EAAE,QAAQ;YAC3B,eAAe,EAAE,KAAK;YACtB,sBAAsB,EAAE,KAAK;SAC9B;KACF;IACD,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;YAC7B,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YACxB,iBAAiB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YAClC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC5B,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;SACzC;QACD,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QACjC,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACjC,KAAK,CAAC;YACJ,mEAAmE;YACnE,yBAAyB;YACzB,QAAQ,EAAE,kBAAkB;YAC5B,QAAQ,EAAE,gBAAgB;YAC1B,UAAU,EAAE,gBAAgB;YAC5B,WAAW,EAAE,oBAAoB;YACjC,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,kBAAkB;YAC/B,KAAK,EAAE,iBAAiB;SACzB,CAAC;KACH;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The admin-panel theme: muted slate blues, tight radii, compact density
|
|
3
|
+
* everywhere, cards outlined rather than raised. Built for tables and
|
|
4
|
+
* forms that need to fit a lot on one screen.
|
|
5
|
+
*/
|
|
6
|
+
export declare const slate: import("../types.js").VuetiwatchTheme<"slate">;
|
|
7
|
+
//# sourceMappingURL=slate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate.d.ts","sourceRoot":"","sources":["../../src/themes/slate.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,KAAK,gDAgFhB,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { bars, controls, fields, icons, tables } from '../util/defaults.js';
|
|
2
|
+
import { defineTheme } from '../util/defineTheme.js';
|
|
3
|
+
/**
|
|
4
|
+
* The admin-panel theme: muted slate blues, tight radii, compact density
|
|
5
|
+
* everywhere, cards outlined rather than raised. Built for tables and
|
|
6
|
+
* forms that need to fit a lot on one screen.
|
|
7
|
+
*/
|
|
8
|
+
export const slate = defineTheme({
|
|
9
|
+
name: 'slate',
|
|
10
|
+
meta: {
|
|
11
|
+
title: 'Slate',
|
|
12
|
+
description: 'Dense corporate dashboard — muted slate blue, compact density, tight radii.',
|
|
13
|
+
dark: false,
|
|
14
|
+
iconStyle: 'filled',
|
|
15
|
+
swatch: ['#F4F6F8', '#FFFFFF', '#2C5282', '#4A6FA5'],
|
|
16
|
+
fonts: ['Inter'],
|
|
17
|
+
},
|
|
18
|
+
theme: {
|
|
19
|
+
dark: false,
|
|
20
|
+
colors: {
|
|
21
|
+
background: '#F4F6F8',
|
|
22
|
+
surface: '#FFFFFF',
|
|
23
|
+
'surface-bright': '#FFFFFF',
|
|
24
|
+
'surface-light': '#EAEEF3',
|
|
25
|
+
'surface-variant': '#33415C',
|
|
26
|
+
'on-surface-variant': '#EAEEF3',
|
|
27
|
+
primary: '#2C5282',
|
|
28
|
+
'primary-darken-1': '#1F3C63',
|
|
29
|
+
secondary: '#4A6FA5',
|
|
30
|
+
'secondary-darken-1': '#375684',
|
|
31
|
+
error: '#C53030',
|
|
32
|
+
info: '#2B6CB0',
|
|
33
|
+
success: '#2F855A',
|
|
34
|
+
warning: '#B7791F',
|
|
35
|
+
'on-surface': '#1A202C',
|
|
36
|
+
'on-background': '#1A202C',
|
|
37
|
+
},
|
|
38
|
+
variables: {
|
|
39
|
+
'border-color': '#1A202C',
|
|
40
|
+
'border-opacity': 0.14,
|
|
41
|
+
'shadow-color': '#1A202C',
|
|
42
|
+
'high-emphasis-opacity': 0.9,
|
|
43
|
+
'medium-emphasis-opacity': 0.62,
|
|
44
|
+
'hover-opacity': 0.05,
|
|
45
|
+
'font-body': "'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif",
|
|
46
|
+
'vw-radius': '3px',
|
|
47
|
+
'vw-radius-lg': '4px',
|
|
48
|
+
'vw-radius-thumb': '3px',
|
|
49
|
+
'vw-radius-chip': '3px',
|
|
50
|
+
'vw-border-width': '1px',
|
|
51
|
+
'vw-btn-transform': 'none',
|
|
52
|
+
'vw-btn-tracking': '0.01em',
|
|
53
|
+
'vw-btn-weight': '600',
|
|
54
|
+
'vw-list-bar': '3px',
|
|
55
|
+
'vw-list-bar-color': 'rgb(var(--v-theme-primary))',
|
|
56
|
+
'vw-tab-slider-height': '3px',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
defaults: [
|
|
60
|
+
{
|
|
61
|
+
VBtn: { variant: 'flat', density: 'comfortable' },
|
|
62
|
+
VCard: { variant: 'outlined' },
|
|
63
|
+
VAlert: { variant: 'tonal', density: 'compact' },
|
|
64
|
+
VChip: { variant: 'tonal', size: 'small' },
|
|
65
|
+
VNavigationDrawer: { border: 'e' },
|
|
66
|
+
},
|
|
67
|
+
fields({ variant: 'outlined', density: 'compact' }),
|
|
68
|
+
controls({ density: 'compact' }),
|
|
69
|
+
tables('compact'),
|
|
70
|
+
bars({ flat: true, border: 'b' }),
|
|
71
|
+
{
|
|
72
|
+
// Small, square and out of the way — controls should not outweigh the
|
|
73
|
+
// data they sit next to.
|
|
74
|
+
VSwitch: { inset: 'square' },
|
|
75
|
+
VSlider: { thumbSize: 14, trackSize: 2 },
|
|
76
|
+
},
|
|
77
|
+
icons({
|
|
78
|
+
// Solid triangles: they read at a glance and take less room than a
|
|
79
|
+
// chevron, which matters in a dense table.
|
|
80
|
+
dropdown: 'mdi-menu-down',
|
|
81
|
+
collapse: 'mdi-menu-up',
|
|
82
|
+
checkboxOn: 'mdi-checkbox-marked',
|
|
83
|
+
checkboxOff: 'mdi-checkbox-blank-outline',
|
|
84
|
+
sortAsc: 'mdi-menu-up',
|
|
85
|
+
sortDesc: 'mdi-menu-down',
|
|
86
|
+
}),
|
|
87
|
+
],
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=slate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate.js","sourceRoot":"","sources":["../../src/themes/slate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pastel and generous: large radii, diffuse coloured shadows, a rounded
|
|
3
|
+
* grotesque. Reads friendly rather than corporate — consumer apps,
|
|
4
|
+
* onboarding, anything that should not feel like a dashboard.
|
|
5
|
+
*/
|
|
6
|
+
export declare const soft: import("../types.js").VuetiwatchTheme<"soft">;
|
|
7
|
+
//# sourceMappingURL=soft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soft.d.ts","sourceRoot":"","sources":["../../src/themes/soft.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,IAAI,+CA2Ef,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { bars, fields, icons } from '../util/defaults.js';
|
|
2
|
+
import { defineTheme } from '../util/defineTheme.js';
|
|
3
|
+
/**
|
|
4
|
+
* Pastel and generous: large radii, diffuse coloured shadows, a rounded
|
|
5
|
+
* grotesque. Reads friendly rather than corporate — consumer apps,
|
|
6
|
+
* onboarding, anything that should not feel like a dashboard.
|
|
7
|
+
*/
|
|
8
|
+
export const soft = defineTheme({
|
|
9
|
+
name: 'soft',
|
|
10
|
+
meta: {
|
|
11
|
+
title: 'Soft',
|
|
12
|
+
description: 'Pastel palette, large radii and diffuse shadows. Friendly and unhurried.',
|
|
13
|
+
dark: false,
|
|
14
|
+
iconStyle: 'filled',
|
|
15
|
+
swatch: ['#F7F5FF', '#FFFFFF', '#7C6CF0', '#F08CA8'],
|
|
16
|
+
fonts: ['Nunito'],
|
|
17
|
+
},
|
|
18
|
+
theme: {
|
|
19
|
+
dark: false,
|
|
20
|
+
colors: {
|
|
21
|
+
background: '#F7F5FF',
|
|
22
|
+
surface: '#FFFFFF',
|
|
23
|
+
'surface-bright': '#FFFFFF',
|
|
24
|
+
'surface-light': '#EAE3FF',
|
|
25
|
+
'surface-variant': '#4A4458',
|
|
26
|
+
'on-surface-variant': '#F7F5FF',
|
|
27
|
+
primary: '#7C6CF0',
|
|
28
|
+
'primary-darken-1': '#5F4DE0',
|
|
29
|
+
secondary: '#F08CA8',
|
|
30
|
+
'secondary-darken-1': '#DB6C8B',
|
|
31
|
+
error: '#F0736E',
|
|
32
|
+
info: '#58B7E8',
|
|
33
|
+
success: '#4FC38A',
|
|
34
|
+
warning: '#F5B851',
|
|
35
|
+
'on-surface': '#2E2A3B',
|
|
36
|
+
'on-background': '#2E2A3B',
|
|
37
|
+
},
|
|
38
|
+
variables: {
|
|
39
|
+
'border-color': '#5F4DE0',
|
|
40
|
+
'border-opacity': 0.1,
|
|
41
|
+
'shadow-color': '#4A3F8C',
|
|
42
|
+
'high-emphasis-opacity': 0.88,
|
|
43
|
+
'medium-emphasis-opacity': 0.62,
|
|
44
|
+
'hover-opacity': 0.06,
|
|
45
|
+
'font-body': "'Nunito', 'Quicksand', system-ui, sans-serif",
|
|
46
|
+
'vw-radius': '14px',
|
|
47
|
+
'vw-radius-lg': '22px',
|
|
48
|
+
'vw-radius-chip': '999px',
|
|
49
|
+
'vw-btn-transform': 'none',
|
|
50
|
+
'vw-btn-tracking': '0',
|
|
51
|
+
'vw-btn-weight': '700',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
defaults: [
|
|
55
|
+
{
|
|
56
|
+
VBtn: { variant: 'flat' },
|
|
57
|
+
VCard: { variant: 'elevated', elevation: 0 },
|
|
58
|
+
VAlert: { variant: 'tonal' },
|
|
59
|
+
VChip: { variant: 'tonal' },
|
|
60
|
+
},
|
|
61
|
+
fields({ variant: 'solo-filled' }),
|
|
62
|
+
bars({ flat: true }),
|
|
63
|
+
{
|
|
64
|
+
// Everything here rounds off: an inset pill switch, a fat slider, a
|
|
65
|
+
// pill behind the active tab instead of an underline, round tick boxes.
|
|
66
|
+
VSwitch: { inset: true },
|
|
67
|
+
VSlider: { thumbSize: 22, trackSize: 8 },
|
|
68
|
+
// `VTabs` owns its own inset radius, so the theme sets it here
|
|
69
|
+
// rather than through the shared `--v-vw-radius`.
|
|
70
|
+
VTabs: { inset: true, insetRadius: 12 },
|
|
71
|
+
},
|
|
72
|
+
icons({
|
|
73
|
+
// Round and filled, down to hearts instead of stars.
|
|
74
|
+
dropdown: 'mdi-chevron-down',
|
|
75
|
+
collapse: 'mdi-chevron-up',
|
|
76
|
+
checkboxOn: 'mdi-check-circle',
|
|
77
|
+
checkboxOff: 'mdi-circle-outline',
|
|
78
|
+
ratingFull: 'mdi-heart',
|
|
79
|
+
ratingEmpty: 'mdi-heart-outline',
|
|
80
|
+
close: 'mdi-close-circle',
|
|
81
|
+
}),
|
|
82
|
+
],
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=soft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soft.js","sourceRoot":"","sources":["../../src/themes/soft.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;IAC9B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,0EAA0E;QACvF,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QACpD,KAAK,EAAE,CAAC,QAAQ,CAAC;KAClB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,KAAK;QACX,MAAM,EAAE;YACN,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,SAAS;YAClB,gBAAgB,EAAE,SAAS;YAC3B,eAAe,EAAE,SAAS;YAC1B,iBAAiB,EAAE,SAAS;YAC5B,oBAAoB,EAAE,SAAS;YAC/B,OAAO,EAAE,SAAS;YAClB,kBAAkB,EAAE,SAAS;YAC7B,SAAS,EAAE,SAAS;YACpB,oBAAoB,EAAE,SAAS;YAC/B,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,SAAS;YAClB,YAAY,EAAE,SAAS;YACvB,eAAe,EAAE,SAAS;SAC3B;QACD,SAAS,EAAE;YACT,cAAc,EAAE,SAAS;YACzB,gBAAgB,EAAE,GAAG;YACrB,cAAc,EAAE,SAAS;YACzB,uBAAuB,EAAE,IAAI;YAC7B,yBAAyB,EAAE,IAAI;YAC/B,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,8CAA8C;YAC3D,WAAW,EAAE,MAAM;YACnB,cAAc,EAAE,MAAM;YACtB,gBAAgB,EAAE,OAAO;YACzB,kBAAkB,EAAE,MAAM;YAC1B,iBAAiB,EAAE,GAAG;YACtB,eAAe,EAAE,KAAK;SACvB;KACF;IACD,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;YACzB,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE;YAC5C,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;YAC5B,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;SAC5B;QACD,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpB;YACE,oEAAoE;YACpE,wEAAwE;YACxE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;YACxB,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YACxC,+DAA+D;YAC/D,kDAAkD;YAClD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;SACxC;QACD,KAAK,CAAC;YACJ,qDAAqD;YACrD,QAAQ,EAAE,kBAAkB;YAC5B,QAAQ,EAAE,gBAAgB;YAC1B,UAAU,EAAE,kBAAkB;YAC9B,WAAW,EAAE,oBAAoB;YACjC,UAAU,EAAE,WAAW;YACvB,WAAW,EAAE,mBAAmB;YAChC,KAAK,EAAE,kBAAkB;SAC1B,CAAC;KACH;CACF,CAAC,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { createVuetify, ThemeDefinition } from 'vuetify';
|
|
2
|
+
/** Global component defaults, same shape as `createVuetify({ defaults })`. */
|
|
3
|
+
export type VuetiwatchDefaults = NonNullable<NonNullable<Parameters<typeof createVuetify>[0]>['defaults']>;
|
|
4
|
+
export interface VuetiwatchMeta {
|
|
5
|
+
/** Human readable name, for theme pickers. */
|
|
6
|
+
title: string;
|
|
7
|
+
/** One line pitch — what the theme feels like. */
|
|
8
|
+
description: string;
|
|
9
|
+
/** `true` when the theme is a dark variant. */
|
|
10
|
+
dark: boolean;
|
|
11
|
+
/** Preview swatch: background, surface, primary, secondary. */
|
|
12
|
+
swatch: [string, string, string, string];
|
|
13
|
+
/**
|
|
14
|
+
* How the theme would like *content* icons drawn — the ones an app passes
|
|
15
|
+
* itself, like a mailbox or a dashboard.
|
|
16
|
+
*
|
|
17
|
+
* Vuetify only lets a theme choose the glyphs of controls it renders
|
|
18
|
+
* (a checkbox tick, a sort arrow); anything an app passes as a literal
|
|
19
|
+
* name is its own content, and a theme has no business overriding it.
|
|
20
|
+
* So the theme states a preference here and an app may follow it — see
|
|
21
|
+
* the playground's navigation demo.
|
|
22
|
+
*/
|
|
23
|
+
iconStyle: 'outline' | 'filled';
|
|
24
|
+
/**
|
|
25
|
+
* Web fonts the theme expects. The package never loads them for you —
|
|
26
|
+
* add them yourself (Google Fonts, Fontsource, self-hosted) for the full
|
|
27
|
+
* look, or skip it and fall back to the system stack.
|
|
28
|
+
*/
|
|
29
|
+
fonts: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface VuetiwatchTheme<Name extends string = string> {
|
|
32
|
+
/** Key used in `createVuetify({ theme: { themes } })`. */
|
|
33
|
+
name: Name;
|
|
34
|
+
meta: VuetiwatchMeta;
|
|
35
|
+
/** Colors and CSS variables, passed straight to Vuetify. */
|
|
36
|
+
theme: ThemeDefinition;
|
|
37
|
+
/** Component defaults applied while this theme is active. */
|
|
38
|
+
defaults: VuetiwatchDefaults;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE7D,8EAA8E;AAC9E,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAC1C,WAAW,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAC7D,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAA;IACb,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAA;IACnB,+CAA+C;IAC/C,IAAI,EAAE,OAAO,CAAA;IACb,+DAA+D;IAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC;;;;;;;;;OASG;IACH,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC/B;;;;OAIG;IACH,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,eAAe,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAC3D,0DAA0D;IAC1D,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,cAAc,CAAA;IACpB,4DAA4D;IAC5D,KAAK,EAAE,eAAe,CAAA;IACtB,6DAA6D;IAC7D,QAAQ,EAAE,kBAAkB,CAAA;CAC7B"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { VuetiwatchDefaults } from '../types.js';
|
|
2
|
+
type Props = Record<string, unknown>;
|
|
3
|
+
/**
|
|
4
|
+
* Applies the same props to every field-based input, so a theme states its
|
|
5
|
+
* input style once instead of six times.
|
|
6
|
+
*/
|
|
7
|
+
export declare const fields: (props: Props) => VuetiwatchDefaults;
|
|
8
|
+
/** Applies the same props to checkboxes, radio groups and switches. */
|
|
9
|
+
export declare const controls: (props: Props) => VuetiwatchDefaults;
|
|
10
|
+
/** Applies the same props to app bars and toolbars. */
|
|
11
|
+
export declare const bars: (props: Props) => VuetiwatchDefaults;
|
|
12
|
+
/** Applies the same props to cards, alerts and chips. */
|
|
13
|
+
export declare const surfaces: (props: Props) => VuetiwatchDefaults;
|
|
14
|
+
/** Applies the same `density` to lists and both table components. */
|
|
15
|
+
export declare const tables: (density: 'default' | 'comfortable' | 'compact') => VuetiwatchDefaults;
|
|
16
|
+
/**
|
|
17
|
+
* Layers default sets over each other so helpers compose without a later
|
|
18
|
+
* component key wiping an earlier one — `{ VSwitch: { density } }` followed
|
|
19
|
+
* by `{ VSwitch: { inset } }` keeps both.
|
|
20
|
+
*/
|
|
21
|
+
export declare const combine: (...parts: VuetiwatchDefaults[]) => VuetiwatchDefaults;
|
|
22
|
+
/**
|
|
23
|
+
* Glyphs a theme can swap.
|
|
24
|
+
*
|
|
25
|
+
* Vuetify's icon *set* (`mdi`, `fa`, a custom SVG set) is global
|
|
26
|
+
* configuration and is not reactive, so it cannot vary per theme. Which
|
|
27
|
+
* glyph a component reaches for is an ordinary prop, though, and props go
|
|
28
|
+
* through defaults like everything else — so a theme can pick outlines
|
|
29
|
+
* where it is thin, solids where it is loud, and circles where it is round.
|
|
30
|
+
*
|
|
31
|
+
* Names must exist in whatever set the app installed; a missing one renders
|
|
32
|
+
* as blank. Everything here is left undefined by default, so a theme states
|
|
33
|
+
* only what it changes.
|
|
34
|
+
*/
|
|
35
|
+
export interface VuetiwatchIcons {
|
|
36
|
+
/** Opens a select menu, an expansion panel or a list group. */
|
|
37
|
+
dropdown?: string;
|
|
38
|
+
/** Closes the same. */
|
|
39
|
+
collapse?: string;
|
|
40
|
+
next?: string;
|
|
41
|
+
prev?: string;
|
|
42
|
+
first?: string;
|
|
43
|
+
last?: string;
|
|
44
|
+
checkboxOn?: string;
|
|
45
|
+
checkboxOff?: string;
|
|
46
|
+
radioOn?: string;
|
|
47
|
+
radioOff?: string;
|
|
48
|
+
ratingFull?: string;
|
|
49
|
+
ratingEmpty?: string;
|
|
50
|
+
/** The clear affordance inside a field. */
|
|
51
|
+
clear?: string;
|
|
52
|
+
/** Dismisses a chip or an alert. */
|
|
53
|
+
close?: string;
|
|
54
|
+
sortAsc?: string;
|
|
55
|
+
sortDesc?: string;
|
|
56
|
+
/** Separates breadcrumb items; a plain string, not an icon name. */
|
|
57
|
+
breadcrumbDivider?: string;
|
|
58
|
+
}
|
|
59
|
+
/** Spreads one semantic icon set across every component that draws it. */
|
|
60
|
+
export declare function icons(set: VuetiwatchIcons): VuetiwatchDefaults;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/util/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGrD,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AA0CpC;;;GAGG;AACH,eAAO,MAAM,MAAM,UAAW,KAAK,KAAG,kBACL,CAAA;AAEjC,uEAAuE;AACvE,eAAO,MAAM,QAAQ,UAAW,KAAK,KAAG,kBACL,CAAA;AAEnC,uDAAuD;AACvD,eAAO,MAAM,IAAI,UAAW,KAAK,KAAG,kBACL,CAAA;AAE/B,yDAAyD;AACzD,eAAO,MAAM,QAAQ,UAAW,KAAK,KAAG,kBACL,CAAA;AAEnC,qEAAqE;AACrE,eAAO,MAAM,MAAM,YAAa,SAAS,GAAG,aAAa,GAAG,SAAS,KAAG,kBAItE,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,aAAc,kBAAkB,EAAE,KAAG,kBACkB,CAAA;AAE3E;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,0EAA0E;AAC1E,wBAAgB,KAAK,CAAE,GAAG,EAAE,eAAe,GAAG,kBAAkB,CA6C/D"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { mergeDeep } from './merge.js';
|
|
2
|
+
/** Every component that renders a `v-field` and shares its `variant` prop. */
|
|
3
|
+
const FIELD_COMPONENTS = [
|
|
4
|
+
'VTextField',
|
|
5
|
+
'VTextarea',
|
|
6
|
+
'VSelect',
|
|
7
|
+
'VAutocomplete',
|
|
8
|
+
'VCombobox',
|
|
9
|
+
'VFileInput',
|
|
10
|
+
];
|
|
11
|
+
/** The subset of those that opens a menu, and so draws a dropdown glyph. */
|
|
12
|
+
const MENU_COMPONENTS = [
|
|
13
|
+
'VSelect',
|
|
14
|
+
'VAutocomplete',
|
|
15
|
+
'VCombobox',
|
|
16
|
+
];
|
|
17
|
+
/** Selection controls that share the `density` prop. */
|
|
18
|
+
const CONTROL_COMPONENTS = [
|
|
19
|
+
'VCheckbox',
|
|
20
|
+
'VRadioGroup',
|
|
21
|
+
'VSwitch',
|
|
22
|
+
];
|
|
23
|
+
/** Containers that share the `flat` / `border` props. */
|
|
24
|
+
const BAR_COMPONENTS = [
|
|
25
|
+
'VAppBar',
|
|
26
|
+
'VToolbar',
|
|
27
|
+
];
|
|
28
|
+
/** Surfaces that share the `variant` prop with cards. */
|
|
29
|
+
const SURFACE_COMPONENTS = [
|
|
30
|
+
'VCard',
|
|
31
|
+
'VAlert',
|
|
32
|
+
'VChip',
|
|
33
|
+
];
|
|
34
|
+
const spread = (names, props) => Object.fromEntries(names.map(name => [name, props]));
|
|
35
|
+
/**
|
|
36
|
+
* Applies the same props to every field-based input, so a theme states its
|
|
37
|
+
* input style once instead of six times.
|
|
38
|
+
*/
|
|
39
|
+
export const fields = (props) => spread(FIELD_COMPONENTS, props);
|
|
40
|
+
/** Applies the same props to checkboxes, radio groups and switches. */
|
|
41
|
+
export const controls = (props) => spread(CONTROL_COMPONENTS, props);
|
|
42
|
+
/** Applies the same props to app bars and toolbars. */
|
|
43
|
+
export const bars = (props) => spread(BAR_COMPONENTS, props);
|
|
44
|
+
/** Applies the same props to cards, alerts and chips. */
|
|
45
|
+
export const surfaces = (props) => spread(SURFACE_COMPONENTS, props);
|
|
46
|
+
/** Applies the same `density` to lists and both table components. */
|
|
47
|
+
export const tables = (density) => ({
|
|
48
|
+
VList: { density },
|
|
49
|
+
VTable: { density },
|
|
50
|
+
VDataTable: { density },
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* Layers default sets over each other so helpers compose without a later
|
|
54
|
+
* component key wiping an earlier one — `{ VSwitch: { density } }` followed
|
|
55
|
+
* by `{ VSwitch: { inset } }` keeps both.
|
|
56
|
+
*/
|
|
57
|
+
export const combine = (...parts) => parts.reduce((acc, part) => mergeDeep(acc, part), {});
|
|
58
|
+
/** Spreads one semantic icon set across every component that draws it. */
|
|
59
|
+
export function icons(set) {
|
|
60
|
+
const out = {};
|
|
61
|
+
/**
|
|
62
|
+
* Merges rather than assigns, because a component can draw more than one
|
|
63
|
+
* of these glyphs — a select carries both `menuIcon` and `clearIcon`, and
|
|
64
|
+
* assigning would drop whichever came first. Props the theme left unset
|
|
65
|
+
* are skipped so they fall through to Vuetify's own.
|
|
66
|
+
*/
|
|
67
|
+
const put = (names, props) => {
|
|
68
|
+
const given = Object.entries(props).filter(([, value]) => value !== undefined);
|
|
69
|
+
if (!given.length)
|
|
70
|
+
return;
|
|
71
|
+
for (const name of names) {
|
|
72
|
+
out[name] = { ...out[name], ...Object.fromEntries(given) };
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const paging = {
|
|
76
|
+
nextIcon: set.next,
|
|
77
|
+
prevIcon: set.prev,
|
|
78
|
+
firstIcon: set.first,
|
|
79
|
+
lastIcon: set.last,
|
|
80
|
+
};
|
|
81
|
+
put(FIELD_COMPONENTS, { clearIcon: set.clear });
|
|
82
|
+
put(MENU_COMPONENTS, { menuIcon: set.dropdown });
|
|
83
|
+
put(['VExpansionPanelTitle', 'VList'], {
|
|
84
|
+
expandIcon: set.dropdown,
|
|
85
|
+
collapseIcon: set.collapse,
|
|
86
|
+
});
|
|
87
|
+
put(['VPagination', 'VDataTable'], paging);
|
|
88
|
+
put(['VDataTable'], { sortAscIcon: set.sortAsc, sortDescIcon: set.sortDesc });
|
|
89
|
+
put(['VSlideGroup'], { nextIcon: set.next, prevIcon: set.prev });
|
|
90
|
+
put(['VCheckbox', 'VCheckboxBtn'], {
|
|
91
|
+
trueIcon: set.checkboxOn,
|
|
92
|
+
falseIcon: set.checkboxOff,
|
|
93
|
+
});
|
|
94
|
+
put(['VRadio'], { trueIcon: set.radioOn, falseIcon: set.radioOff });
|
|
95
|
+
put(['VRating'], { fullIcon: set.ratingFull, emptyIcon: set.ratingEmpty });
|
|
96
|
+
put(['VChip', 'VAlert'], { closeIcon: set.close });
|
|
97
|
+
put(['VBreadcrumbs'], { divider: set.breadcrumbDivider });
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/util/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ThemeDefinition } from 'vuetify';
|
|
2
|
+
import type { VuetiwatchDefaults, VuetiwatchMeta, VuetiwatchTheme } from '../types.js';
|
|
3
|
+
export interface DefineThemeOptions<Name extends string = string> {
|
|
4
|
+
name: Name;
|
|
5
|
+
meta: VuetiwatchMeta;
|
|
6
|
+
/**
|
|
7
|
+
* Colors and CSS variables. Only what the theme actually changes: Vuetify
|
|
8
|
+
* merges every theme over its own `light` or `dark` before use, picking
|
|
9
|
+
* the one matching `dark`, so anything left out is inherited rather than
|
|
10
|
+
* missing.
|
|
11
|
+
*/
|
|
12
|
+
theme: ThemeDefinition;
|
|
13
|
+
/**
|
|
14
|
+
* Component defaults, as one object or as layers to fold together —
|
|
15
|
+
* `combine()` is applied for you, so helpers compose without a later
|
|
16
|
+
* component key wiping an earlier one.
|
|
17
|
+
*/
|
|
18
|
+
defaults?: VuetiwatchDefaults | VuetiwatchDefaults[];
|
|
19
|
+
}
|
|
20
|
+
export declare function defineTheme<const Name extends string>(options: DefineThemeOptions<Name>): VuetiwatchTheme<Name>;
|
|
21
|
+
//# sourceMappingURL=defineTheme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineTheme.d.ts","sourceRoot":"","sources":["../../src/util/defineTheme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAgBtF,MAAM,WAAW,kBAAkB,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAC9D,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,cAAc,CAAA;IACpB;;;;;OAKG;IACH,KAAK,EAAE,eAAe,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,CAAA;CACrD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EACnD,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAChC,eAAe,CAAC,IAAI,CAAC,CAWvB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { combine } from './defaults.js';
|
|
2
|
+
/**
|
|
3
|
+
* Applied under every theme's own defaults.
|
|
4
|
+
*
|
|
5
|
+
* A slider with no `color` falls back to `surface-variant`, which reads as
|
|
6
|
+
* dead grey whatever the palette — so the controls whose whole job is to
|
|
7
|
+
* show a value are coloured here once. A theme overrides this the way it
|
|
8
|
+
* overrides anything else.
|
|
9
|
+
*/
|
|
10
|
+
const baseDefaults = {
|
|
11
|
+
VSlider: { color: 'primary' },
|
|
12
|
+
VRangeSlider: { color: 'primary' },
|
|
13
|
+
};
|
|
14
|
+
export function defineTheme(options) {
|
|
15
|
+
const layers = options.defaults
|
|
16
|
+
? [options.defaults].flat()
|
|
17
|
+
: [];
|
|
18
|
+
return {
|
|
19
|
+
name: options.name,
|
|
20
|
+
meta: options.meta,
|
|
21
|
+
theme: options.theme,
|
|
22
|
+
defaults: combine(baseDefaults, ...layers),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=defineTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineTheme.js","sourceRoot":"","sources":["../../src/util/defineTheme.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC;;;;;;;GAOG;AACH,MAAM,YAAY,GAAuB;IACvC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;CACnC,CAAA;AAoBD,MAAM,UAAU,WAAW,CACzB,OAAiC;IAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ;QAC7B,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;QAC3B,CAAC,CAAC,EAAE,CAAA;IAEN,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC;KAC3C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type Plain = Record<string, any>;
|
|
2
|
+
/**
|
|
3
|
+
* Recursively merges `source` onto `target` without mutating either.
|
|
4
|
+
* Arrays and primitives from `source` replace the target value outright.
|
|
5
|
+
*/
|
|
6
|
+
export declare function mergeDeep<T extends Plain>(target: T, source?: Plain): T;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/util/merge.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAKhC;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,KAAK,EAAG,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,CAaxE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const isPlainObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
2
|
+
/**
|
|
3
|
+
* Recursively merges `source` onto `target` without mutating either.
|
|
4
|
+
* Arrays and primitives from `source` replace the target value outright.
|
|
5
|
+
*/
|
|
6
|
+
export function mergeDeep(target, source) {
|
|
7
|
+
if (!source)
|
|
8
|
+
return { ...target };
|
|
9
|
+
const out = { ...target };
|
|
10
|
+
for (const key of Object.keys(source)) {
|
|
11
|
+
const a = out[key];
|
|
12
|
+
const b = source[key];
|
|
13
|
+
out[key] = isPlainObject(a) && isPlainObject(b) ? mergeDeep(a, b) : b;
|
|
14
|
+
}
|
|
15
|
+
return out;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/util/merge.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,CAAC,KAAc,EAAkB,EAAE,CACvD,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAEtE;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAmB,MAAS,EAAE,MAAc;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAA;IAEjC,MAAM,GAAG,GAAU,EAAE,GAAG,MAAM,EAAE,CAAA;IAEhC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QAClB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAErB,GAAG,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvE,CAAC;IAED,OAAO,GAAQ,CAAA;AACjB,CAAC"}
|