yuyeon 0.0.14 → 0.0.16
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 +191 -0
- package/README.md +15 -0
- package/dist/style.css +1 -1
- package/dist/yuyeon.mjs +3224 -2342
- package/dist/yuyeon.umd.js +29 -1
- package/lib/abstract/items.mjs +20 -0
- package/lib/abstract/items.mjs.map +1 -0
- package/lib/components/button/YButton.mjs +2 -2
- package/lib/components/button/YButton.mjs.map +1 -1
- package/lib/components/button/YButton.scss +1 -1
- package/lib/components/card/YCard.mjs.map +1 -1
- package/lib/components/card/YCard.scss +3 -2
- package/lib/components/checkbox/YInputCheckbox.scss +1 -1
- package/lib/components/chip/YChip.mjs +2 -2
- package/lib/components/chip/YChip.mjs.map +1 -1
- package/lib/components/dialog/YDialog.mjs +2 -2
- package/lib/components/dialog/YDialog.mjs.map +1 -1
- package/lib/components/dropdown/YDropdown.mjs +83 -2
- package/lib/components/dropdown/YDropdown.mjs.map +1 -1
- package/lib/components/dropdown/YDropdown.scss +33 -0
- package/lib/components/field-input/YFieldInput.mjs +57 -49
- package/lib/components/field-input/YFieldInput.mjs.map +1 -1
- package/lib/components/icons/YIconCheckbox.scss +1 -1
- package/lib/components/icons/YIconDropdown.mjs +16 -0
- package/lib/components/icons/YIconDropdown.mjs.map +1 -0
- package/lib/components/index.mjs +2 -0
- package/lib/components/index.mjs.map +1 -1
- package/lib/components/input/YInput.mjs +83 -49
- package/lib/components/input/YInput.mjs.map +1 -1
- package/lib/components/input/YInput.scss +50 -23
- package/lib/components/layer/YLayer.mjs +21 -9
- package/lib/components/layer/YLayer.mjs.map +1 -1
- package/lib/components/layer/YLayer.scss +1 -0
- package/lib/components/layer/scroll-strategies.mjs +1 -1
- package/lib/components/layer/scroll-strategies.mjs.map +1 -1
- package/lib/components/list/YList.mjs +40 -2
- package/lib/components/list/YList.mjs.map +1 -1
- package/lib/components/list/YListItem.mjs +31 -11
- package/lib/components/list/YListItem.mjs.map +1 -1
- package/lib/components/list/YListItem.scss +5 -2
- package/lib/components/menu/YMenu.mjs +29 -18
- package/lib/components/menu/YMenu.mjs.map +1 -1
- package/lib/components/menu/YMenu.scss +22 -7
- package/lib/components/pagination/YPagination.mjs +8 -8
- package/lib/components/pagination/YPagination.mjs.map +1 -1
- package/lib/components/panel/YDividePanel.scss +4 -4
- package/lib/components/progress-bar/YProgressBar.mjs +20 -3
- package/lib/components/progress-bar/YProgressBar.mjs.map +1 -1
- package/lib/components/progress-bar/YProgressBar.scss +109 -40
- package/lib/components/select/YSelect.mjs +196 -0
- package/lib/components/select/YSelect.mjs.map +1 -0
- package/lib/components/select/YSelect.scss +43 -0
- package/lib/components/select/index.mjs +2 -0
- package/lib/components/select/index.mjs.map +1 -0
- package/lib/components/switch/YSwitch.scss +1 -1
- package/lib/components/table/YTable.scss +2 -2
- package/lib/components/tree-view/YTreeView.mjs +76 -18
- package/lib/components/tree-view/YTreeView.mjs.map +1 -1
- package/lib/components/tree-view/YTreeViewNode.mjs +21 -18
- package/lib/components/tree-view/YTreeViewNode.mjs.map +1 -1
- package/lib/components/tree-view/types.mjs.map +1 -1
- package/lib/components/tree-view/util.mjs +24 -0
- package/lib/components/tree-view/util.mjs.map +1 -1
- package/lib/composables/coordinate/arrangement.mjs.map +1 -1
- package/lib/composables/coordinate/index.mjs.map +1 -1
- package/lib/composables/coordinate/levitation.mjs +1 -1
- package/lib/composables/coordinate/levitation.mjs.map +1 -1
- package/lib/composables/coordinate/utils/point.mjs.map +1 -1
- package/lib/composables/dimension.mjs +26 -0
- package/lib/composables/dimension.mjs.map +1 -0
- package/lib/composables/focus.mjs +29 -0
- package/lib/composables/focus.mjs.map +1 -0
- package/lib/composables/list-items.mjs +58 -0
- package/lib/composables/list-items.mjs.map +1 -0
- package/lib/composables/theme/factory.mjs +45 -0
- package/lib/composables/theme/factory.mjs.map +1 -0
- package/lib/composables/theme/helper.mjs +14 -0
- package/lib/composables/theme/helper.mjs.map +1 -0
- package/lib/composables/theme/index.mjs +144 -10
- package/lib/composables/theme/index.mjs.map +1 -1
- package/lib/composables/theme/setting.mjs +58 -9
- package/lib/composables/theme/setting.mjs.map +1 -1
- package/lib/composables/theme/types.mjs +2 -0
- package/lib/composables/theme/types.mjs.map +1 -0
- package/lib/directives/complement-click/index.mjs.map +1 -1
- package/lib/directives/theme-class.mjs +4 -4
- package/lib/directives/theme-class.mjs.map +1 -1
- package/lib/index.mjs +7 -5
- package/lib/index.mjs.map +1 -1
- package/lib/mixins/di.mjs +0 -3
- package/lib/mixins/di.mjs.map +1 -1
- package/lib/styles/_elevation.scss +15 -0
- package/lib/styles/base.scss +11 -5
- package/lib/styles/settings/_elevation.scss +20 -0
- package/lib/styles/theme/light.scss +1 -1
- package/lib/styles/util/_helper.scss +12 -0
- package/lib/styles/util/_var.scss +18 -0
- package/lib/util/color/apca.mjs +201 -0
- package/lib/util/color/apca.mjs.map +1 -0
- package/lib/util/color/const.mjs +6 -0
- package/lib/util/color/const.mjs.map +1 -0
- package/lib/util/color/contrast/contrast.mjs +149 -0
- package/lib/util/color/contrast/contrast.mjs.map +1 -0
- package/lib/util/color/conversion.mjs +310 -0
- package/lib/util/color/conversion.mjs.map +1 -0
- package/lib/util/color/hct/cam16.mjs +349 -0
- package/lib/util/color/hct/cam16.mjs.map +1 -0
- package/lib/util/color/hct/hct-solver.mjs +389 -0
- package/lib/util/color/hct/hct-solver.mjs.map +1 -0
- package/lib/util/color/hct/hct.mjs +153 -0
- package/lib/util/color/hct/hct.mjs.map +1 -0
- package/lib/util/color/hct/viewing-conditions.mjs +110 -0
- package/lib/util/color/hct/viewing-conditions.mjs.map +1 -0
- package/lib/util/color/index.mjs +24 -0
- package/lib/util/color/index.mjs.map +1 -0
- package/lib/util/color/palettes/core-palette.mjs +99 -0
- package/lib/util/color/palettes/core-palette.mjs.map +1 -0
- package/lib/util/color/palettes/tonal-palette.mjs +112 -0
- package/lib/util/color/palettes/tonal-palette.mjs.map +1 -0
- package/lib/util/color/types.mjs +2 -0
- package/lib/util/color/types.mjs.map +1 -0
- package/lib/util/color/utils/math-utils.mjs +139 -0
- package/lib/util/color/utils/math-utils.mjs.map +1 -0
- package/lib/util/common.mjs +11 -6
- package/lib/util/common.mjs.map +1 -1
- package/lib/util/debounce.mjs +114 -0
- package/lib/util/debounce.mjs.map +1 -0
- package/lib/util/{FrameScheduler.mjs → frame-scheduler.mjs} +1 -1
- package/lib/util/frame-scheduler.mjs.map +1 -0
- package/lib/util/{Rect.mjs → rect.mjs} +1 -1
- package/lib/util/{Rect.mjs.map → rect.mjs.map} +1 -1
- package/lib/util/string.mjs +6 -0
- package/lib/util/string.mjs.map +1 -1
- package/lib/util/ui.mjs +11 -36
- package/lib/util/ui.mjs.map +1 -1
- package/package.json +12 -1
- package/types/abstract/items.d.ts +48 -0
- package/types/components/card/YCard.d.ts +1 -1
- package/types/components/checkbox/YInputCheckbox.d.ts +2 -2
- package/types/components/dialog/YDialog.d.ts +23 -8
- package/types/components/dropdown/YDropdown.d.ts +219 -0
- package/types/components/dropdown/index.d.ts +1 -0
- package/types/components/field-input/YFieldInput.d.ts +238 -25
- package/types/components/icons/YIconCheckbox.d.ts +1 -1
- package/types/components/icons/YIconDropdown.d.ts +1 -0
- package/types/components/index.d.ts +2 -0
- package/types/components/input/YInput.d.ts +156 -42
- package/types/components/layer/YLayer.d.ts +67 -17
- package/types/components/list/YList.d.ts +22 -1
- package/types/components/list/YListItem.d.ts +28 -2
- package/types/components/menu/YMenu.d.ts +132 -16
- package/types/components/pagination/YPagination.d.ts +10 -10
- package/types/components/progress-bar/YProgressBar.d.ts +18 -1
- package/types/components/select/YSelect.d.ts +701 -0
- package/types/components/select/index.d.ts +1 -0
- package/types/components/table/YDataTable.d.ts +1 -1
- package/types/components/table/YDataTableServer.d.ts +1 -1
- package/types/components/text-highlighter/YTextHighlighter.d.ts +40 -0
- package/types/components/tooltip/YTooltip.d.ts +20 -5
- package/types/components/tree-view/YTreeView.d.ts +47 -22
- package/types/components/tree-view/YTreeViewNode.d.ts +72 -26
- package/types/components/tree-view/types.d.ts +1 -0
- package/types/components/tree-view/util.d.ts +4 -1
- package/types/composables/coordinate/arrangement.d.ts +1 -1
- package/types/composables/coordinate/index.d.ts +3 -3
- package/types/composables/coordinate/levitation.d.ts +1 -1
- package/types/composables/coordinate/utils/point.d.ts +1 -1
- package/types/composables/dimension.d.ts +53 -0
- package/types/composables/focus.d.ts +27 -0
- package/types/composables/list-items.d.ts +117 -0
- package/types/composables/theme/factory.d.ts +3 -0
- package/types/composables/theme/helper.d.ts +3 -0
- package/types/composables/theme/index.d.ts +45 -5
- package/types/composables/theme/setting.d.ts +3 -6
- package/types/composables/theme/types.d.ts +28 -0
- package/types/directives/complement-click/index.d.ts +1 -1
- package/types/directives/theme-class.d.ts +1 -1
- package/types/index.d.ts +2 -0
- package/types/shims.d.ts +4 -0
- package/types/util/color/apca.d.ts +29 -0
- package/types/util/color/const.d.ts +5 -0
- package/types/util/color/conversion.d.ts +130 -0
- package/types/util/color/hct/cam16.d.ts +131 -0
- package/types/util/color/hct/hct.d.ts +86 -0
- package/types/util/color/hct/hct_solver.d.ts +146 -0
- package/types/util/color/hct/viewing_conditions.d.ts +74 -0
- package/types/util/color/index.d.ts +4 -0
- package/types/util/color/palettes/tonal_palette.d.ts +55 -0
- package/types/util/color/types.d.ts +14 -0
- package/types/util/color/utils/math-utils.d.ts +82 -0
- package/types/util/color/utils/math_utils.d.ts +82 -0
- package/types/util/common.d.ts +2 -1
- package/types/util/debounce.d.ts +11 -0
- package/types/util/string.d.ts +1 -0
- package/types/util/ui.d.ts +1 -6
- package/lib/components/input/index.scss +0 -2
- package/lib/components/table/pagination.mjs +0 -80
- package/lib/components/table/pagination.mjs.map +0 -1
- package/lib/composables/collections.mjs +0 -2
- package/lib/composables/collections.mjs.map +0 -1
- package/lib/composables/levitation.mjs +0 -135
- package/lib/composables/levitation.mjs.map +0 -1
- package/lib/styles/util/helper.scss +0 -6
- package/lib/util/FrameScheduler.mjs.map +0 -1
- /package/lib/styles/settings/{provided.scss → _provided.scss} +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function cssClass(selector, content) {
|
|
2
|
+
return [`${selector} {\n`, ...content.map(c => ` ${c}\n`), `}\n`];
|
|
3
|
+
}
|
|
4
|
+
export function cssVariables(variables) {
|
|
5
|
+
let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
6
|
+
return Object.entries(variables).map(_ref => {
|
|
7
|
+
let [property, value] = _ref;
|
|
8
|
+
return cssVariable(`${prefix}-${property}`, value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export function cssVariable(property, value) {
|
|
12
|
+
return `--y-${property}: ${value};`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=helper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.mjs","names":["cssClass","selector","content","map","c","cssVariables","variables","prefix","arguments","length","undefined","Object","entries","_ref","property","value","cssVariable"],"sources":["../../../src/composables/theme/helper.ts"],"sourcesContent":["export function cssClass(selector: string, content: string[]) {\n return [`${selector} {\\n`, ...content.map((c) => ` ${c}\\n`), `}\\n`];\n}\n\nexport function cssVariables(\n variables: Record<string, string>,\n prefix: string = '',\n) {\n return Object.entries(variables).map(([property, value]) => {\n return cssVariable(`${prefix}-${property}`, value);\n });\n}\n\nexport function cssVariable(property: string, value: string) {\n return `--y-${property}: ${value};`;\n}\n"],"mappings":"AAAA,OAAO,SAASA,QAAQA,CAACC,QAAgB,EAAEC,OAAiB,EAAE;EAC5D,OAAO,CAAE,GAAED,QAAS,MAAK,EAAE,GAAGC,OAAO,CAACC,GAAG,CAAEC,CAAC,IAAM,KAAIA,CAAE,IAAG,CAAC,EAAG,KAAI,CAAC;AACtE;AAEA,OAAO,SAASC,YAAYA,CAC1BC,SAAiC,EAEjC;EAAA,IADAC,MAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAEnB,OAAOG,MAAM,CAACC,OAAO,CAACN,SAAS,CAAC,CAACH,GAAG,CAACU,IAAA,IAAuB;IAAA,IAAtB,CAACC,QAAQ,EAAEC,KAAK,CAAC,GAAAF,IAAA;IACrD,OAAOG,WAAW,CAAE,GAAET,MAAO,IAAGO,QAAS,EAAC,EAAEC,KAAK,CAAC;EACpD,CAAC,CAAC;AACJ;AAEA,OAAO,SAASC,WAAWA,CAACF,QAAgB,EAAEC,KAAa,EAAE;EAC3D,OAAQ,OAAMD,QAAS,KAAIC,KAAM,GAAE;AACrC"}
|
|
@@ -1,26 +1,111 @@
|
|
|
1
|
-
import { effectScope, reactive, ref,
|
|
1
|
+
import { computed, effectScope, getCurrentInstance, inject, provide, reactive, readonly, ref, unref, watch } from 'vue';
|
|
2
2
|
import bindThemeClass from "../../directives/theme-class.mjs";
|
|
3
|
+
import { propsFactory } from "../../util/vue-component.mjs";
|
|
4
|
+
import { createPalette, createThemes } from "./factory.mjs";
|
|
5
|
+
import { cssClass, cssVariables } from "./helper.mjs";
|
|
3
6
|
import { configureOptions } from "./setting.mjs";
|
|
4
7
|
export const Y_THEME_PREFIX = 'y-theme';
|
|
5
8
|
export const YUYEON_THEME_KEY = Symbol.for('yuyeon.theme');
|
|
9
|
+
export const pressThemePropsOptions = propsFactory({
|
|
10
|
+
theme: String
|
|
11
|
+
}, 'theme');
|
|
12
|
+
export function isDarkMode() {
|
|
13
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
14
|
+
}
|
|
15
|
+
export function isSupportAutoScheme() {
|
|
16
|
+
return window.matchMedia('(prefers-color-scheme)').media !== 'not all';
|
|
17
|
+
}
|
|
6
18
|
export function createThemeModule(options) {
|
|
7
19
|
const appMountedScope = effectScope();
|
|
8
20
|
const config = reactive(configureOptions(options));
|
|
9
21
|
const scheme = ref(config.scheme);
|
|
10
|
-
const mode = ref(config.mode);
|
|
11
22
|
const theme = ref(config.theme);
|
|
12
23
|
const themes = ref(config.themes);
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
24
|
+
const palette = ref(config.palette);
|
|
25
|
+
const supportedAutoMode = ref(true);
|
|
26
|
+
const preferColorScheme = ref('');
|
|
27
|
+
function darkModeWatcher(mediaQueryList) {
|
|
28
|
+
preferColorScheme.value = mediaQueryList.matches ? 'dark' : 'light';
|
|
29
|
+
}
|
|
30
|
+
const currentColorScheme = computed(() => {
|
|
31
|
+
if (scheme.value === 'auto') {
|
|
32
|
+
return preferColorScheme.value;
|
|
33
|
+
}
|
|
34
|
+
if (scheme.value === 'dark') {
|
|
35
|
+
return 'dark';
|
|
36
|
+
}
|
|
37
|
+
return 'light';
|
|
38
|
+
});
|
|
39
|
+
const currentThemeKey = computed(() => {
|
|
40
|
+
if (typeof theme.value === 'string') {
|
|
41
|
+
if (theme.value in computedThemes) {
|
|
42
|
+
return theme.value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (Array.isArray(theme.value)) {
|
|
46
|
+
return currentColorScheme.value === 'dark' ? theme.value?.[1] ?? 'dark' : theme.value?.[0] ?? 'light';
|
|
47
|
+
}
|
|
48
|
+
return currentColorScheme.value;
|
|
49
|
+
});
|
|
50
|
+
const computedPalette = computed(() => {
|
|
51
|
+
return createPalette(palette.value);
|
|
52
|
+
});
|
|
53
|
+
const computedThemes = computed(() => {
|
|
54
|
+
return createThemes(themes.value);
|
|
55
|
+
});
|
|
56
|
+
const styles = computed(() => {
|
|
57
|
+
const lines = [];
|
|
58
|
+
lines.push(...cssClass(':root', cssVariables(computedPalette.value, 'palette')));
|
|
59
|
+
for (const [themeKey, themeDefs] of Object.entries(computedThemes.value)) {
|
|
60
|
+
const {
|
|
61
|
+
colors,
|
|
62
|
+
variables,
|
|
63
|
+
isDark
|
|
64
|
+
} = themeDefs;
|
|
65
|
+
const records = {
|
|
66
|
+
...colors,
|
|
67
|
+
...variables
|
|
68
|
+
};
|
|
69
|
+
// if (currentThemeKey.value === themeKey) {
|
|
70
|
+
// lines.push(...cssClass(':root', cssVariables(records, 'theme')));
|
|
71
|
+
// }
|
|
72
|
+
const themeScheme = isDark ? 'dark' : 'light';
|
|
73
|
+
if (scheme.value === 'auto') {
|
|
74
|
+
lines.push(...cssClass(`@media (prefers-color-scheme: ${themeScheme})`, cssClass(`[data-theme-scheme='auto'][data-${themeScheme}-theme='${themeKey}']`, cssVariables(records, 'theme'))));
|
|
75
|
+
} else {
|
|
76
|
+
lines.push(...cssClass(`[data-theme-scheme='${themeScheme}'][data-${themeScheme}-theme='${themeKey}']`, cssVariables(records, 'theme')));
|
|
77
|
+
}
|
|
78
|
+
lines.push(...cssClass(`.y-theme--${themeKey}`, cssVariables(records, 'theme')));
|
|
79
|
+
}
|
|
80
|
+
return lines.join('');
|
|
18
81
|
});
|
|
19
82
|
function install(app) {
|
|
20
83
|
app.directive('theme', bindThemeClass);
|
|
84
|
+
let styleEl = document.getElementById('yuyeon-theme-palette');
|
|
85
|
+
watch(styles, updateStyleEl, {
|
|
86
|
+
immediate: true
|
|
87
|
+
});
|
|
88
|
+
function updateStyleEl() {
|
|
89
|
+
if (typeof document !== 'undefined' && !styleEl) {
|
|
90
|
+
const el = document.createElement('style');
|
|
91
|
+
el.type = 'text/css';
|
|
92
|
+
el.id = 'yuyeon-theme-palette';
|
|
93
|
+
if (options?.cspNonce) el.setAttribute('nonce', options.cspNonce);
|
|
94
|
+
styleEl = el;
|
|
95
|
+
document.head.appendChild(styleEl);
|
|
96
|
+
}
|
|
97
|
+
if (styleEl) {
|
|
98
|
+
styleEl.innerHTML = styles.value;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
21
101
|
}
|
|
22
102
|
function bindTheme(yuyeon) {
|
|
23
|
-
|
|
103
|
+
supportedAutoMode.value = isSupportAutoScheme();
|
|
104
|
+
if (supportedAutoMode.value) {
|
|
105
|
+
const mql = window.matchMedia('(prefers-color-scheme: dark)');
|
|
106
|
+
darkModeWatcher(mql);
|
|
107
|
+
mql.addEventListener('change', darkModeWatcher);
|
|
108
|
+
}
|
|
24
109
|
watch(theme, neo => {
|
|
25
110
|
const [lightTheme, darkTheme] = neo;
|
|
26
111
|
yuyeon.root.dataset.lightTheme = lightTheme;
|
|
@@ -29,7 +114,7 @@ export function createThemeModule(options) {
|
|
|
29
114
|
immediate: true
|
|
30
115
|
});
|
|
31
116
|
watch(scheme, neo => {
|
|
32
|
-
yuyeon.root.setAttribute('data-theme-scheme', neo);
|
|
117
|
+
yuyeon.root.setAttribute('data-theme-scheme', neo === 'auto' ? 'auto' : currentColorScheme.value);
|
|
33
118
|
}, {
|
|
34
119
|
immediate: true
|
|
35
120
|
});
|
|
@@ -39,11 +124,60 @@ export function createThemeModule(options) {
|
|
|
39
124
|
bindTheme(yuyeon);
|
|
40
125
|
});
|
|
41
126
|
}
|
|
127
|
+
const themeClasses = computed(() => `y-theme--${currentThemeKey.value}`);
|
|
42
128
|
return {
|
|
43
129
|
install,
|
|
44
130
|
init,
|
|
45
131
|
scope: appMountedScope,
|
|
46
|
-
instance:
|
|
132
|
+
instance: {
|
|
133
|
+
global: {
|
|
134
|
+
scheme,
|
|
135
|
+
theme
|
|
136
|
+
},
|
|
137
|
+
themes,
|
|
138
|
+
scheme,
|
|
139
|
+
theme,
|
|
140
|
+
currentThemeKey,
|
|
141
|
+
themeClasses,
|
|
142
|
+
computedThemes,
|
|
143
|
+
computedPalette,
|
|
144
|
+
supportedAutoMode: readonly(supportedAutoMode),
|
|
145
|
+
preferColorScheme: readonly(preferColorScheme)
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export function useLocalTheme(props) {
|
|
150
|
+
getCurrentInstance();
|
|
151
|
+
const themeModule = inject(YUYEON_THEME_KEY, null);
|
|
152
|
+
if (!themeModule) throw new Error('Not found provided "ThemeModule"');
|
|
153
|
+
const palette = themeModule.computedPalette;
|
|
154
|
+
const currentThemeKey = computed(() => {
|
|
155
|
+
if (props.theme) {
|
|
156
|
+
switch (props.theme) {
|
|
157
|
+
case 'light':
|
|
158
|
+
return themeModule.theme.value?.[0] ?? 'light';
|
|
159
|
+
case 'dark':
|
|
160
|
+
return themeModule.theme.value?.[1] ?? 'dark';
|
|
161
|
+
// TODO: props.theme(themeKey) validation in themes
|
|
162
|
+
default:
|
|
163
|
+
return props.theme;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return unref(themeModule.currentThemeKey);
|
|
167
|
+
});
|
|
168
|
+
const themeClasses = computed(() => `y-theme--${currentThemeKey.value}`);
|
|
169
|
+
const newTheme = {
|
|
170
|
+
...themeModule,
|
|
171
|
+
currentThemeKey,
|
|
172
|
+
themeClasses
|
|
47
173
|
};
|
|
174
|
+
provide(YUYEON_THEME_KEY, newTheme);
|
|
175
|
+
return newTheme;
|
|
176
|
+
}
|
|
177
|
+
export function useTheme() {
|
|
178
|
+
getCurrentInstance();
|
|
179
|
+
const theme = inject(YUYEON_THEME_KEY, null);
|
|
180
|
+
if (!theme) throw new Error('Not found provided "ThemeModule"');
|
|
181
|
+
return theme;
|
|
48
182
|
}
|
|
49
183
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["effectScope","reactive","ref","toRaw","watch","bindThemeClass","configureOptions","Y_THEME_PREFIX","YUYEON_THEME_KEY","Symbol","for","createThemeModule","options","appMountedScope","config","scheme","mode","theme","themes","themeState","install","app","directive","bindTheme","yuyeon","console","log","neo","lightTheme","darkTheme","root","dataset","immediate","setAttribute","init","run","scope","instance"],"sources":["../../../src/composables/theme/index.ts"],"sourcesContent":["import type { App } from 'vue';\r\nimport { effectScope, reactive, ref, toRaw, watch } from \"vue\";\r\n\r\nimport bindThemeClass from '../../directives/theme-class';\r\nimport { configureOptions, ThemeScheme } from \"./setting\";\r\nimport type { ThemeOptions } from \"./setting\";\r\n\r\nexport const Y_THEME_PREFIX = 'y-theme';\r\n\r\ninterface ThemeProvide {\r\n //\r\n}\r\n\r\nexport const YUYEON_THEME_KEY = Symbol.for('yuyeon.theme');\r\n\r\nexport function createThemeModule(options: ThemeOptions) {\r\n const appMountedScope = effectScope();\r\n const config = reactive(configureOptions(options));\r\n const scheme = ref(config.scheme);\r\n const mode = ref(config.mode);\r\n const theme = ref<[string, string]>(config.theme);\r\n const themes = ref(config.themes);\r\n const themeState = reactive({\r\n scheme: scheme,\r\n theme: theme,\r\n themes: themes,\r\n mode: mode,\r\n });\r\n\r\n function install(app: App) {\r\n app.directive('theme', bindThemeClass);\r\n }\r\n\r\n function bindTheme(yuyeon: any) {\r\n console.log(toRaw(yuyeon.theme))\r\n watch(\r\n theme,\r\n (neo) => {\r\n const [lightTheme, darkTheme] = neo;\r\n yuyeon.root.dataset.lightTheme = lightTheme;\r\n yuyeon.root.dataset.darkTheme = darkTheme;\r\n },\r\n { immediate: true },\r\n );\r\n watch(\r\n scheme,\r\n (neo: string) => {\r\n yuyeon.root.setAttribute('data-theme-scheme', neo);\r\n },\r\n { immediate: true },\r\n );\r\n }\r\n\r\n function init(yuyeon: any) {\r\n appMountedScope.run(() => {\r\n bindTheme(yuyeon);\r\n });\r\n }\r\n\r\n return {\r\n install,\r\n init,\r\n scope: appMountedScope,\r\n instance: themeState,\r\n };\r\n}\r\n"],"mappings":"AACA,SAASA,WAAW,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,KAAK,EAAEC,KAAK,QAAQ,KAAK;AAAC,OAExDC,cAAc;AAAA,SACZC,gBAAgB;AAGzB,OAAO,MAAMC,cAAc,GAAG,SAAS;AAMvC,OAAO,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,GAAG,CAAC,cAAc,CAAC;AAE1D,OAAO,SAASC,iBAAiBA,CAACC,OAAqB,EAAE;EACvD,MAAMC,eAAe,GAAGb,WAAW,CAAC,CAAC;EACrC,MAAMc,MAAM,GAAGb,QAAQ,CAACK,gBAAgB,CAACM,OAAO,CAAC,CAAC;EAClD,MAAMG,MAAM,GAAGb,GAAG,CAACY,MAAM,CAACC,MAAM,CAAC;EACjC,MAAMC,IAAI,GAAGd,GAAG,CAACY,MAAM,CAACE,IAAI,CAAC;EAC7B,MAAMC,KAAK,GAAGf,GAAG,CAAmBY,MAAM,CAACG,KAAK,CAAC;EACjD,MAAMC,MAAM,GAAGhB,GAAG,CAACY,MAAM,CAACI,MAAM,CAAC;EACjC,MAAMC,UAAU,GAAGlB,QAAQ,CAAC;IAC1Bc,MAAM,EAAEA,MAAM;IACdE,KAAK,EAAEA,KAAK;IACZC,MAAM,EAAEA,MAAM;IACdF,IAAI,EAAEA;EACR,CAAC,CAAC;EAEF,SAASI,OAAOA,CAACC,GAAQ,EAAE;IACzBA,GAAG,CAACC,SAAS,CAAC,OAAO,EAAEjB,cAAc,CAAC;EACxC;EAEA,SAASkB,SAASA,CAACC,MAAW,EAAE;IAC9BC,OAAO,CAACC,GAAG,CAACvB,KAAK,CAACqB,MAAM,CAACP,KAAK,CAAC,CAAC;IAChCb,KAAK,CACHa,KAAK,EACJU,GAAG,IAAK;MACP,MAAM,CAACC,UAAU,EAAEC,SAAS,CAAC,GAAGF,GAAG;MACnCH,MAAM,CAACM,IAAI,CAACC,OAAO,CAACH,UAAU,GAAGA,UAAU;MAC3CJ,MAAM,CAACM,IAAI,CAACC,OAAO,CAACF,SAAS,GAAGA,SAAS;IAC3C,CAAC,EACD;MAAEG,SAAS,EAAE;IAAK,CACpB,CAAC;IACD5B,KAAK,CACHW,MAAM,EACLY,GAAW,IAAK;MACfH,MAAM,CAACM,IAAI,CAACG,YAAY,CAAC,mBAAmB,EAAEN,GAAG,CAAC;IACpD,CAAC,EACD;MAAEK,SAAS,EAAE;IAAK,CACpB,CAAC;EACH;EAEA,SAASE,IAAIA,CAACV,MAAW,EAAE;IACzBX,eAAe,CAACsB,GAAG,CAAC,MAAM;MACxBZ,SAAS,CAACC,MAAM,CAAC;IACnB,CAAC,CAAC;EACJ;EAEA,OAAO;IACLJ,OAAO;IACPc,IAAI;IACJE,KAAK,EAAEvB,eAAe;IACtBwB,QAAQ,EAAElB;EACZ,CAAC;AACH"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["computed","effectScope","getCurrentInstance","inject","provide","reactive","readonly","ref","unref","watch","bindThemeClass","propsFactory","createPalette","createThemes","cssClass","cssVariables","configureOptions","Y_THEME_PREFIX","YUYEON_THEME_KEY","Symbol","for","pressThemePropsOptions","theme","String","isDarkMode","window","matchMedia","matches","isSupportAutoScheme","media","createThemeModule","options","appMountedScope","config","scheme","themes","palette","supportedAutoMode","preferColorScheme","darkModeWatcher","mediaQueryList","value","currentColorScheme","currentThemeKey","computedThemes","Array","isArray","computedPalette","styles","lines","push","themeKey","themeDefs","Object","entries","colors","variables","isDark","records","themeScheme","join","install","app","directive","styleEl","document","getElementById","updateStyleEl","immediate","el","createElement","type","id","cspNonce","setAttribute","head","appendChild","innerHTML","bindTheme","yuyeon","mql","addEventListener","neo","lightTheme","darkTheme","root","dataset","init","run","themeClasses","scope","instance","global","useLocalTheme","props","themeModule","Error","newTheme","useTheme"],"sources":["../../../src/composables/theme/index.ts"],"sourcesContent":["import type { App, ComputedRef, Ref } from 'vue';\nimport {\n computed,\n effectScope,\n getCurrentInstance,\n inject,\n provide,\n reactive,\n readonly,\n ref,\n unref,\n watch,\n} from 'vue';\n\nimport bindThemeClass from '../../directives/theme-class';\nimport { propsFactory } from '../../util/vue-component';\nimport { createPalette, createThemes } from './factory';\nimport { cssClass, cssVariables } from './helper';\nimport { ThemeScheme, configureOptions } from './setting';\nimport type { ThemeOptions } from './types';\n\nexport type { ThemeOptions };\n\nexport const Y_THEME_PREFIX = 'y-theme';\n\nexport interface ThemeModuleInstance {\n scheme: keyof typeof ThemeScheme | 'auto';\n theme: Ref<[string, string?]>;\n // theme values(schemes) for colors & variables\n readonly themes: any;\n readonly global: {\n // currentThemeKeys: [lightThemeKey, darkThemeKey]\n // If used manually, fix the scheme to 'light' and have a [lightThemeKey] value.\n // Use the appropriate default theme scheme if it does not match the themeKey\n scheme: keyof typeof ThemeScheme | 'auto';\n theme: Ref<[string, string?]>;\n };\n /* computed */\n readonly currentThemeKey: Readonly<ComputedRef<string>>;\n readonly themeClasses: Readonly<ComputedRef<string | undefined>>;\n readonly computedThemes: Readonly<ComputedRef<any>>;\n readonly computedPalette: Readonly<ComputedRef<any>>;\n /* */\n readonly supportedAutoMode: Readonly<Ref<boolean>>;\n readonly preferColorScheme: Readonly<Ref<'light' | 'dark'>>;\n}\n\nexport const YUYEON_THEME_KEY = Symbol.for('yuyeon.theme');\n\nexport const pressThemePropsOptions = propsFactory(\n {\n theme: String,\n },\n 'theme',\n);\n\nexport function isDarkMode() {\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n}\n\nexport function isSupportAutoScheme() {\n return window.matchMedia('(prefers-color-scheme)').media !== 'not all';\n}\n\nexport function createThemeModule(options: ThemeOptions) {\n const appMountedScope = effectScope();\n const config = reactive(configureOptions(options));\n const scheme = ref<string>(config.scheme);\n const theme = ref<[string, string]>(config.theme);\n const themes = ref(config.themes);\n const palette = ref(config.palette);\n const supportedAutoMode = ref(true);\n const preferColorScheme = ref('');\n\n function darkModeWatcher(\n mediaQueryList: MediaQueryListEvent | MediaQueryList,\n ) {\n preferColorScheme.value = mediaQueryList.matches ? 'dark' : 'light';\n }\n\n const currentColorScheme = computed<'light' | 'dark'>(() => {\n if (scheme.value === 'auto') {\n return preferColorScheme.value as 'light' | 'dark';\n }\n if (scheme.value === 'dark') {\n return 'dark';\n }\n return 'light';\n });\n\n const currentThemeKey = computed(() => {\n if (typeof theme.value === 'string') {\n if (theme.value in computedThemes) {\n return theme.value;\n }\n }\n if (Array.isArray(theme.value)) {\n return currentColorScheme.value === 'dark'\n ? theme.value?.[1] ?? 'dark'\n : theme.value?.[0] ?? 'light';\n }\n return currentColorScheme.value;\n });\n\n const computedPalette = computed(() => {\n return createPalette(palette.value);\n });\n\n const computedThemes = computed(() => {\n return createThemes(themes.value);\n });\n\n const styles = computed(() => {\n const lines = [];\n lines.push(\n ...cssClass(':root', cssVariables(computedPalette.value, 'palette')),\n );\n for (const [themeKey, themeDefs] of Object.entries(computedThemes.value)) {\n const { colors, variables, isDark } = themeDefs;\n const records: Record<string, string> = {\n ...colors,\n ...variables,\n };\n // if (currentThemeKey.value === themeKey) {\n // lines.push(...cssClass(':root', cssVariables(records, 'theme')));\n // }\n const themeScheme = isDark ? 'dark' : 'light';\n if (scheme.value === 'auto') {\n lines.push(\n ...cssClass(\n `@media (prefers-color-scheme: ${themeScheme})`,\n cssClass(\n `[data-theme-scheme='auto'][data-${themeScheme}-theme='${themeKey}']`,\n cssVariables(records, 'theme'),\n ),\n ),\n );\n } else {\n lines.push(\n ...cssClass(\n `[data-theme-scheme='${themeScheme}'][data-${themeScheme}-theme='${themeKey}']`,\n cssVariables(records, 'theme'),\n ),\n );\n }\n\n lines.push(\n ...cssClass(`.y-theme--${themeKey}`, cssVariables(records, 'theme')),\n );\n }\n return lines.join('');\n });\n\n function install(app: App) {\n app.directive('theme', bindThemeClass);\n\n let styleEl = document.getElementById('yuyeon-theme-palette');\n\n watch(styles, updateStyleEl, { immediate: true });\n\n function updateStyleEl() {\n if (typeof document !== 'undefined' && !styleEl) {\n const el = document.createElement('style');\n el.type = 'text/css';\n el.id = 'yuyeon-theme-palette';\n if (options?.cspNonce) el.setAttribute('nonce', options.cspNonce);\n styleEl = el;\n document.head.appendChild(styleEl);\n }\n if (styleEl) {\n styleEl.innerHTML = styles.value;\n }\n }\n }\n\n function bindTheme(yuyeon: any) {\n supportedAutoMode.value = isSupportAutoScheme();\n if (supportedAutoMode.value) {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n darkModeWatcher(mql);\n mql.addEventListener('change' as 'change', darkModeWatcher);\n }\n watch(\n theme,\n (neo) => {\n const [lightTheme, darkTheme] = neo;\n yuyeon.root.dataset.lightTheme = lightTheme;\n yuyeon.root.dataset.darkTheme = darkTheme;\n },\n { immediate: true },\n );\n watch(\n scheme,\n (neo) => {\n yuyeon.root.setAttribute(\n 'data-theme-scheme',\n neo === 'auto' ? 'auto' : currentColorScheme.value,\n );\n },\n { immediate: true },\n );\n }\n\n function init(yuyeon: any) {\n appMountedScope.run(() => {\n bindTheme(yuyeon);\n });\n }\n\n const themeClasses = computed(() => `y-theme--${currentThemeKey.value}`);\n\n return {\n install,\n init,\n scope: appMountedScope,\n instance: {\n global: {\n scheme,\n theme,\n },\n themes,\n scheme,\n theme,\n currentThemeKey,\n themeClasses,\n computedThemes,\n computedPalette,\n supportedAutoMode: readonly(supportedAutoMode),\n preferColorScheme: readonly(preferColorScheme),\n },\n };\n}\n\nexport function useLocalTheme(props: { theme?: string }) {\n getCurrentInstance();\n\n const themeModule = inject<ThemeModuleInstance | null>(\n YUYEON_THEME_KEY,\n null,\n );\n\n if (!themeModule) throw new Error('Not found provided \"ThemeModule\"');\n\n const palette = themeModule.computedPalette;\n\n const currentThemeKey = computed<string>(() => {\n if (props.theme) {\n switch (props.theme) {\n case 'light':\n return themeModule.theme.value?.[0] ?? 'light';\n case 'dark':\n return themeModule.theme.value?.[1] ?? 'dark';\n // TODO: props.theme(themeKey) validation in themes\n default:\n return props.theme;\n }\n }\n return unref(themeModule.currentThemeKey);\n });\n\n const themeClasses = computed(() => `y-theme--${currentThemeKey.value}`);\n\n const newTheme: ThemeModuleInstance = {\n ...themeModule,\n currentThemeKey,\n themeClasses,\n };\n\n provide(YUYEON_THEME_KEY, newTheme);\n\n return newTheme;\n}\n\nexport function useTheme() {\n getCurrentInstance();\n\n const theme = inject<ThemeModuleInstance | null>(YUYEON_THEME_KEY, null);\n\n if (!theme) throw new Error('Not found provided \"ThemeModule\"');\n\n return theme;\n}\n"],"mappings":"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"}
|
|
@@ -3,35 +3,81 @@ export const ThemeScheme = {
|
|
|
3
3
|
light: 'light',
|
|
4
4
|
dark: 'dark'
|
|
5
5
|
};
|
|
6
|
+
export const defaultTonalLuminance = [0, 10, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 95, 98, 99, 100];
|
|
7
|
+
export const defaultPalette = {
|
|
8
|
+
scaleMethod: 'tonal',
|
|
9
|
+
colors: {
|
|
10
|
+
primary: '#0062a1',
|
|
11
|
+
secondary: '#6251a6',
|
|
12
|
+
tertiary: '#3c691b',
|
|
13
|
+
neutral: '#5d5e61',
|
|
14
|
+
positive: '#3da919',
|
|
15
|
+
negative: '#ba1a1a',
|
|
16
|
+
warning: '#d09220'
|
|
17
|
+
}
|
|
18
|
+
};
|
|
6
19
|
export const defaultThemesValues = {
|
|
7
20
|
light: {
|
|
8
|
-
|
|
21
|
+
isDark: false,
|
|
9
22
|
colors: {
|
|
10
|
-
|
|
11
|
-
|
|
23
|
+
primary: '#0062a1',
|
|
24
|
+
secondary: '#6251a6',
|
|
25
|
+
tertiary: '#3c691b',
|
|
26
|
+
background: '#fdfbff',
|
|
27
|
+
'on-background': '#1a1c1e',
|
|
28
|
+
surface: '#fdfbff',
|
|
29
|
+
'on-surface': '#1a1c1e',
|
|
30
|
+
'surface-variant': '#dfe3eb',
|
|
31
|
+
'on-surface-variant': '#42474e',
|
|
32
|
+
outline: '#73777f',
|
|
33
|
+
'outline-variant': '#c2c7cf',
|
|
34
|
+
error: '#ba1a1a',
|
|
35
|
+
shadow: '#000000'
|
|
12
36
|
},
|
|
13
37
|
variables: {
|
|
14
|
-
'
|
|
38
|
+
'outline-opacity': 0.14,
|
|
39
|
+
'base-shadow-opacity': 0.14,
|
|
40
|
+
'base-font': '#141414'
|
|
15
41
|
}
|
|
16
42
|
},
|
|
17
43
|
dark: {
|
|
18
|
-
|
|
44
|
+
isDark: true,
|
|
19
45
|
colors: {
|
|
20
|
-
|
|
21
|
-
'
|
|
46
|
+
primary: '#9ccaff',
|
|
47
|
+
'on-primary': '#003257',
|
|
48
|
+
secondary: '#cbbeff',
|
|
49
|
+
'on-secondary': '#332074',
|
|
50
|
+
tertiary: '#a1d57a',
|
|
51
|
+
'on-tertiary': '#173800',
|
|
52
|
+
background: '#1a1c1e',
|
|
53
|
+
'on-background': '#e2e2e6',
|
|
54
|
+
surface: '#1a1c1e',
|
|
55
|
+
'on-surface': '#e2e2e6',
|
|
56
|
+
'surface-variant': '#42474e',
|
|
57
|
+
'on-surface-variant': '#c2c7cf',
|
|
58
|
+
outline: '#8c9199',
|
|
59
|
+
'outline-variant': '#42474e',
|
|
60
|
+
error: '#ffb4ab',
|
|
61
|
+
'on-error': '#690005',
|
|
62
|
+
shadow: '#000000'
|
|
22
63
|
},
|
|
23
64
|
variables: {
|
|
24
|
-
'
|
|
65
|
+
'outline-opacity': 0.14,
|
|
66
|
+
'base-shadow-opacity': 0.14,
|
|
67
|
+
'base-font': '#f5f5f5'
|
|
25
68
|
}
|
|
26
69
|
}
|
|
27
70
|
};
|
|
28
71
|
export function configureOptions(options) {
|
|
29
72
|
if (!options) {
|
|
30
73
|
return {
|
|
31
|
-
scheme:
|
|
74
|
+
scheme: ThemeScheme.light,
|
|
32
75
|
theme: ['light', 'dark'],
|
|
33
76
|
themes: {
|
|
34
77
|
...mergeDeep(defaultThemesValues)
|
|
78
|
+
},
|
|
79
|
+
palette: {
|
|
80
|
+
...mergeDeep(defaultPalette)
|
|
35
81
|
}
|
|
36
82
|
};
|
|
37
83
|
}
|
|
@@ -40,6 +86,9 @@ export function configureOptions(options) {
|
|
|
40
86
|
theme: ['light', 'dark'],
|
|
41
87
|
themes: {
|
|
42
88
|
...mergeDeep(defaultThemesValues, options.themes)
|
|
89
|
+
},
|
|
90
|
+
palette: {
|
|
91
|
+
...mergeDeep(defaultPalette, options.palette)
|
|
43
92
|
}
|
|
44
93
|
};
|
|
45
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setting.mjs","names":["mergeDeep","ThemeScheme","light","dark","
|
|
1
|
+
{"version":3,"file":"setting.mjs","names":["mergeDeep","ThemeScheme","light","dark","defaultTonalLuminance","defaultPalette","scaleMethod","colors","primary","secondary","tertiary","neutral","positive","negative","warning","defaultThemesValues","isDark","background","surface","outline","error","shadow","variables","configureOptions","options","scheme","theme","themes","palette"],"sources":["../../../src/composables/theme/setting.ts"],"sourcesContent":["import { mergeDeep } from '../../util/common';\nimport { PaletteOption, ThemeOptions } from './types';\n\nexport const ThemeScheme = {\n light: 'light',\n dark: 'dark',\n} as const;\n\nexport const defaultTonalLuminance = [\n 0, 10, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 95, 98, 99, 100,\n];\n\nexport const defaultPalette: PaletteOption = {\n scaleMethod: 'tonal',\n colors: {\n primary: '#0062a1',\n secondary: '#6251a6',\n tertiary: '#3c691b',\n neutral: '#5d5e61',\n positive: '#3da919',\n negative: '#ba1a1a',\n warning: '#d09220',\n },\n};\n\nexport const defaultThemesValues: any = {\n light: {\n isDark: false,\n colors: {\n primary: '#0062a1',\n secondary: '#6251a6',\n tertiary: '#3c691b',\n background: '#fdfbff',\n 'on-background': '#1a1c1e',\n surface: '#fdfbff',\n 'on-surface': '#1a1c1e',\n 'surface-variant': '#dfe3eb',\n 'on-surface-variant': '#42474e',\n outline: '#73777f',\n 'outline-variant': '#c2c7cf',\n error: '#ba1a1a',\n shadow: '#000000',\n },\n variables: {\n 'outline-opacity': 0.14,\n 'base-shadow-opacity': 0.14,\n 'base-font': '#141414',\n },\n },\n dark: {\n isDark: true,\n colors: {\n primary: '#9ccaff',\n 'on-primary': '#003257',\n secondary: '#cbbeff',\n 'on-secondary': '#332074',\n tertiary: '#a1d57a',\n 'on-tertiary': '#173800',\n background: '#1a1c1e',\n 'on-background': '#e2e2e6',\n surface: '#1a1c1e',\n 'on-surface': '#e2e2e6',\n 'surface-variant': '#42474e',\n 'on-surface-variant': '#c2c7cf',\n outline: '#8c9199',\n 'outline-variant': '#42474e',\n error: '#ffb4ab',\n 'on-error': '#690005',\n shadow: '#000000',\n },\n variables: {\n 'outline-opacity': 0.14,\n 'base-shadow-opacity': 0.14,\n 'base-font': '#f5f5f5',\n },\n },\n};\n\nexport function configureOptions(options?: ThemeOptions): any {\n if (!options) {\n return {\n scheme: ThemeScheme.light,\n theme: ['light', 'dark'],\n themes: { ...mergeDeep(defaultThemesValues) },\n palette: { ...mergeDeep(defaultPalette) },\n };\n }\n return {\n scheme: ThemeScheme.light,\n theme: ['light', 'dark'],\n themes: { ...mergeDeep(defaultThemesValues, options.themes) },\n palette: { ...mergeDeep(defaultPalette, options.palette) },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","names":[],"sources":["../../../src/composables/theme/types.ts"],"sourcesContent":["import { ThemeScheme } from \"./setting\";\r\n\r\nexport interface ThemeOptions {\r\n scheme: 'light' | 'dark' | 'auto';\r\n theme: [string, string?];\r\n themes: Record<string, ThemeDefinition>;\r\n palette?: PaletteOption;\r\n cspNonce?: string;\r\n}\r\n\r\nexport interface PaletteOption {\r\n scaleMethod: 'manual' | 'luma' | 'tonal';\r\n colors: Record<string, string | PaletteLevelColorOption | PaletteLumaColorOption>;\r\n defaultLamaScale?: {\r\n darken?: 0 | 1 | 2 | 3 | 4;\r\n lighten?: 0 | 1 | 2 | 3 | 4 | 5;\r\n }\r\n}\r\n\r\ntype ScaleLevel = number;\r\nexport type PaletteLevelColorOption = Record<ScaleLevel, string>\r\n\r\nexport type PaletteLumaColorOption = {\r\n value: string,\r\n darken?: 0 | 1 | 2 | 3 | 4;\r\n lighten?: 0 | 1 | 2 | 3 | 4 | 5;\r\n}\r\n\r\nexport interface ThemeDefinition {\r\n isDark: boolean;\r\n colors: Record<string, string>;\r\n variables: Record<string, string>;\r\n}\r\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["documentRoot","defaultDetermine","directive","mouseEvent","element","binding","value","handler","_complementClick","lastMousedownWasOutside","checkEvent","setTimeout","determine","root","ShadowRoot","host","target","elements","include","push","some","el","contains","event","determineFn","implant","callback","document","ComplementClick","mounted","onClick","onMousedown","app","addEventListener","_uid","instance","$","uid","unmounted","old","removeEventListener"],"sources":["../../../src/directives/complement-click/index.ts"],"sourcesContent":["import { DirectiveBinding } from 'vue';\n\nimport { documentRoot } from '../../util/dom';\n\ninterface ComplementClickDirectiveElementImplanted {\n onClick: EventListener;\n onMousedown: EventListener;\n}\n\ndeclare global {\n interface Element {\n _complementClick?: Record<\n number,\n ComplementClickDirectiveElementImplanted | undefined\n > & { lastMousedownWasOutside: boolean };\n }\n}\n\nexport interface ComplementClickBindingOptions {\n handler: (mouseEvent: MouseEvent) => void;\n determine?: (event: Event) => boolean;\n include?: () => HTMLElement[];\n}\n\nexport interface ComplementClickBinding extends DirectiveBinding {\n value: ((mouseEvent: MouseEvent) => void) | ComplementClickBindingOptions;\n}\n\nfunction defaultDetermine() {\n return true;\n}\n\nfunction directive(\n mouseEvent: MouseEvent,\n element: HTMLElement,\n binding: ComplementClickBinding,\n) {\n const { value } = binding;\n const handler = typeof value === 'function' ? value : value.handler;\n element._complementClick!.lastMousedownWasOutside &&\n checkEvent(mouseEvent, element, binding) &&\n setTimeout(() => {\n determine(mouseEvent, binding) && handler && handler(mouseEvent);\n }, 0);\n}\n\nfunction checkEvent(\n mouseEvent: MouseEvent,\n element: HTMLElement,\n binding: ComplementClickBinding,\n): boolean {\n if (!mouseEvent || determine(mouseEvent, binding) === false) {\n return false;\n }\n const root = documentRoot(element);\n if (\n typeof ShadowRoot !== 'undefined' &&\n root instanceof ShadowRoot &&\n root.host === mouseEvent.target\n ) {\n return false;\n }\n const elements = (\n (typeof binding.value === 'object' && binding.value.include) ||\n (() => [])\n )();\n elements.push(element);\n return !elements.some((el) => el?.contains(mouseEvent.target as Node));\n}\n\nfunction determine(\n event: MouseEvent,\n binding: ComplementClickBinding,\n): boolean {\n const { value } = binding;\n const determineFn =\n (typeof value === 'object' && value.determine) || defaultDetermine;\n return determineFn && determineFn?.(event);\n}\n\nfunction implant(\n element: HTMLElement,\n callback: (app: HTMLDocument | ShadowRoot | null) => void,\n) {\n const root = documentRoot(element);\n callback(document);\n if (typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot) {\n callback(root);\n }\n}\n\nexport const ComplementClick = {\n mounted(element: HTMLElement, binding: ComplementClickBinding) {\n const onClick = (event: Event) =>\n directive(event as MouseEvent, element, binding);\n const onMousedown = (event: Event) => {\n element._complementClick!.lastMousedownWasOutside = checkEvent(\n event as MouseEvent,\n element,\n binding,\n );\n };\n implant(element, (app) => {\n app?.addEventListener('click', onClick, true);\n app?.addEventListener('mousedown', onMousedown, true);\n });\n if (!element._complementClick) {\n element._complementClick = {\n lastMousedownWasOutside: true,\n };\n }\n const _uid = binding.instance!.$.uid;\n element._complementClick[_uid] = {\n onClick,\n onMousedown,\n };\n },\n unmounted(element: HTMLElement, binding: ComplementClickBinding) {\n if (!element._complementClick) return;\n const _uid = binding.instance!.$.uid;\n implant(element, (app) => {\n const old = element._complementClick?.[_uid];\n if (old) {\n const { onClick, onMousedown } = old;\n app?.removeEventListener('click', onClick, true);\n app?.removeEventListener('mousedown', onMousedown, true);\n }\n });\n delete element._complementClick[_uid];\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["documentRoot","defaultDetermine","directive","mouseEvent","element","binding","value","handler","_complementClick","lastMousedownWasOutside","checkEvent","setTimeout","determine","root","ShadowRoot","host","target","elements","include","push","some","el","contains","event","determineFn","implant","callback","document","ComplementClick","mounted","onClick","onMousedown","app","addEventListener","_uid","instance","$","uid","unmounted","old","removeEventListener"],"sources":["../../../src/directives/complement-click/index.ts"],"sourcesContent":["import { DirectiveBinding } from 'vue';\n\nimport { documentRoot } from '../../util/dom';\n\ninterface ComplementClickDirectiveElementImplanted {\n onClick: EventListener;\n onMousedown: EventListener;\n}\n\ndeclare global {\n interface Element {\n _complementClick?: Record<\n number,\n ComplementClickDirectiveElementImplanted | undefined\n > & { lastMousedownWasOutside: boolean };\n }\n}\n\nexport interface ComplementClickBindingOptions {\n handler: (mouseEvent: MouseEvent) => void;\n determine?: (event: Event) => boolean;\n include?: () => (HTMLElement | undefined)[];\n}\n\nexport interface ComplementClickBinding extends DirectiveBinding {\n value: ((mouseEvent: MouseEvent) => void) | ComplementClickBindingOptions;\n}\n\nfunction defaultDetermine() {\n return true;\n}\n\nfunction directive(\n mouseEvent: MouseEvent,\n element: HTMLElement,\n binding: ComplementClickBinding,\n) {\n const { value } = binding;\n const handler = typeof value === 'function' ? value : value.handler;\n element._complementClick!.lastMousedownWasOutside &&\n checkEvent(mouseEvent, element, binding) &&\n setTimeout(() => {\n determine(mouseEvent, binding) && handler && handler(mouseEvent);\n }, 0);\n}\n\nfunction checkEvent(\n mouseEvent: MouseEvent,\n element: HTMLElement,\n binding: ComplementClickBinding,\n): boolean {\n if (!mouseEvent || determine(mouseEvent, binding) === false) {\n return false;\n }\n const root = documentRoot(element);\n if (\n typeof ShadowRoot !== 'undefined' &&\n root instanceof ShadowRoot &&\n root.host === mouseEvent.target\n ) {\n return false;\n }\n const elements = (\n (typeof binding.value === 'object' && binding.value.include) ||\n (() => [])\n )();\n elements.push(element);\n return !elements.some((el) => el?.contains(mouseEvent.target as Node));\n}\n\nfunction determine(\n event: MouseEvent,\n binding: ComplementClickBinding,\n): boolean {\n const { value } = binding;\n const determineFn =\n (typeof value === 'object' && value.determine) || defaultDetermine;\n return determineFn && determineFn?.(event);\n}\n\nfunction implant(\n element: HTMLElement,\n callback: (app: HTMLDocument | ShadowRoot | null) => void,\n) {\n const root = documentRoot(element);\n callback(document);\n if (typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot) {\n callback(root);\n }\n}\n\nexport const ComplementClick = {\n mounted(element: HTMLElement, binding: ComplementClickBinding) {\n const onClick = (event: Event) =>\n directive(event as MouseEvent, element, binding);\n const onMousedown = (event: Event) => {\n element._complementClick!.lastMousedownWasOutside = checkEvent(\n event as MouseEvent,\n element,\n binding,\n );\n };\n implant(element, (app) => {\n app?.addEventListener('click', onClick, true);\n app?.addEventListener('mousedown', onMousedown, true);\n });\n if (!element._complementClick) {\n element._complementClick = {\n lastMousedownWasOutside: true,\n };\n }\n const _uid = binding.instance!.$.uid;\n element._complementClick[_uid] = {\n onClick,\n onMousedown,\n };\n },\n unmounted(element: HTMLElement, binding: ComplementClickBinding) {\n if (!element._complementClick) return;\n const _uid = binding.instance!.$.uid;\n implant(element, (app) => {\n const old = element._complementClick?.[_uid];\n if (old) {\n const { onClick, onMousedown } = old;\n app?.removeEventListener('click', onClick, true);\n app?.removeEventListener('mousedown', onMousedown, true);\n }\n });\n delete element._complementClick[_uid];\n },\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { watchEffect } from
|
|
1
|
+
import { unref, watchEffect } from 'vue';
|
|
2
2
|
const bindThemeClass = (el, binding, vnode) => {
|
|
3
3
|
function bindingClass(themeClass) {
|
|
4
4
|
el.classList.forEach(classToken => {
|
|
5
|
-
if (classToken.startsWith('theme--') && classToken !== themeClass) {
|
|
5
|
+
if (classToken.startsWith('y-theme--') && classToken !== themeClass) {
|
|
6
6
|
el.classList.remove(classToken);
|
|
7
7
|
}
|
|
8
8
|
});
|
|
@@ -10,11 +10,11 @@ const bindThemeClass = (el, binding, vnode) => {
|
|
|
10
10
|
}
|
|
11
11
|
watchEffect(() => {
|
|
12
12
|
const theme = binding.instance?.$yuyeon?.theme ?? vnode?.ctx?.root.appContext.config.globalProperties?.$yuyeon?.theme;
|
|
13
|
-
const themeName = binding.value ?? theme.
|
|
13
|
+
const themeName = binding.value ?? unref(theme.currentThemeKey) ?? '';
|
|
14
14
|
if (!themeName) {
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
|
-
const themeClass = `theme--${themeName}`;
|
|
17
|
+
const themeClass = `y-theme--${themeName}`;
|
|
18
18
|
bindingClass(themeClass);
|
|
19
19
|
}, {
|
|
20
20
|
flush: 'post'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-class.mjs","names":["watchEffect","bindThemeClass","el","binding","vnode","bindingClass","themeClass","classList","forEach","classToken","startsWith","remove","add","theme","instance","$yuyeon","ctx","root","appContext","config","globalProperties","themeName","value","
|
|
1
|
+
{"version":3,"file":"theme-class.mjs","names":["unref","watchEffect","bindThemeClass","el","binding","vnode","bindingClass","themeClass","classList","forEach","classToken","startsWith","remove","add","theme","instance","$yuyeon","ctx","root","appContext","config","globalProperties","themeName","value","currentThemeKey","flush"],"sources":["../../src/directives/theme-class.ts"],"sourcesContent":["import { FunctionDirective, unref, watchEffect } from 'vue';\n\nconst bindThemeClass: FunctionDirective = (el, binding, vnode) => {\n function bindingClass(themeClass: string) {\n el.classList.forEach((classToken: string) => {\n if (classToken.startsWith('y-theme--') && classToken !== themeClass) {\n el.classList.remove(classToken);\n }\n });\n el.classList.add(themeClass);\n }\n\n watchEffect(\n () => {\n const theme =\n (binding.instance as any)?.$yuyeon?.theme ??\n (vnode as any)?.ctx?.root.appContext.config.globalProperties?.$yuyeon\n ?.theme;\n const themeName = binding.value ?? unref(theme.currentThemeKey) ?? '';\n if (!themeName) {\n return;\n }\n const themeClass = `y-theme--${themeName}`;\n bindingClass(themeClass);\n },\n { flush: 'post' },\n );\n};\n\nexport default bindThemeClass;\n"],"mappings":"AAAA,SAA4BA,KAAK,EAAEC,WAAW,QAAQ,KAAK;AAE3D,MAAMC,cAAiC,GAAGA,CAACC,EAAE,EAAEC,OAAO,EAAEC,KAAK,KAAK;EAChE,SAASC,YAAYA,CAACC,UAAkB,EAAE;IACxCJ,EAAE,CAACK,SAAS,CAACC,OAAO,CAAEC,UAAkB,IAAK;MAC3C,IAAIA,UAAU,CAACC,UAAU,CAAC,WAAW,CAAC,IAAID,UAAU,KAAKH,UAAU,EAAE;QACnEJ,EAAE,CAACK,SAAS,CAACI,MAAM,CAACF,UAAU,CAAC;MACjC;IACF,CAAC,CAAC;IACFP,EAAE,CAACK,SAAS,CAACK,GAAG,CAACN,UAAU,CAAC;EAC9B;EAEAN,WAAW,CACT,MAAM;IACJ,MAAMa,KAAK,GACRV,OAAO,CAACW,QAAQ,EAAUC,OAAO,EAAEF,KAAK,IACxCT,KAAK,EAAUY,GAAG,EAAEC,IAAI,CAACC,UAAU,CAACC,MAAM,CAACC,gBAAgB,EAAEL,OAAO,EACjEF,KAAK;IACX,MAAMQ,SAAS,GAAGlB,OAAO,CAACmB,KAAK,IAAIvB,KAAK,CAACc,KAAK,CAACU,eAAe,CAAC,IAAI,EAAE;IACrE,IAAI,CAACF,SAAS,EAAE;MACd;IACF;IACA,MAAMf,UAAU,GAAI,YAAWe,SAAU,EAAC;IAC1ChB,YAAY,CAACC,UAAU,CAAC;EAC1B,CAAC,EACD;IAAEkB,KAAK,EAAE;EAAO,CAClB,CAAC;AACH,CAAC;AAED,eAAevB,cAAc"}
|
package/lib/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { nextTick, reactive } from "vue";
|
|
2
1
|
import * as components from "./components/index.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
2
|
+
import { YUYEON_LOGO } from "./etc/index.mjs";
|
|
3
|
+
import { nextTick, reactive } from 'vue';
|
|
4
|
+
import { YUYEON_THEME_KEY, createThemeModule, useTheme } from "./composables/theme/index.mjs";
|
|
5
|
+
import PlateWave from "./directives/plate-wave/index.mjs"; //
|
|
6
6
|
import "./styles/base.scss";
|
|
7
7
|
const defaultOptions = {
|
|
8
8
|
credit: true
|
|
@@ -22,7 +22,7 @@ export function init() {
|
|
|
22
22
|
app.component(componentName, comp);
|
|
23
23
|
});
|
|
24
24
|
app.directive('plate-wave', PlateWave);
|
|
25
|
-
app.provide(
|
|
25
|
+
app.provide(YUYEON_THEME_KEY, yuyeon.theme);
|
|
26
26
|
app.config.globalProperties.$yuyeon = yuyeon;
|
|
27
27
|
nextTick(() => {
|
|
28
28
|
yuyeon.app = app._instance;
|
|
@@ -52,4 +52,6 @@ export function init() {
|
|
|
52
52
|
// theme: themeModule,
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
+
|
|
56
|
+
export { useTheme };
|
|
55
57
|
//# sourceMappingURL=index.mjs.map
|
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["nextTick","reactive","
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["components","YUYEON_LOGO","nextTick","reactive","YUYEON_THEME_KEY","createThemeModule","useTheme","PlateWave","defaultOptions","credit","init","options","arguments","length","undefined","themeModule","theme","install","app","yuyeon","root","instance","Object","keys","forEach","componentName","comp","component","directive","provide","config","globalProperties","$yuyeon","_instance","_container","Error","$el","classList","add","setAttribute","console","log","unmount","scope","stop"],"sources":["../src/index.ts"],"sourcesContent":["import * as components from './components';\nimport { YUYEON_LOGO } from './etc';\nimport { Component, ComponentInternalInstance } from '@vue/runtime-core';\nimport type { App } from 'vue';\nimport { nextTick, reactive } from 'vue';\n\nimport {\n YUYEON_THEME_KEY,\n createThemeModule,\n useTheme,\n} from './composables/theme';\nimport PlateWave from './directives/plate-wave';\n\n//\nimport './styles/base.scss';\n\nconst defaultOptions = {\n credit: true,\n};\n\ndeclare module 'vue' {\n interface ComponentCustomProperties {\n $yuyeon: any;\n }\n}\n\nexport function init(options: any = defaultOptions) {\n const themeModule = createThemeModule(options?.theme);\n\n const install = (app: App): any => {\n themeModule.install(app);\n\n const yuyeon = reactive({\n app: null as ComponentInternalInstance | null,\n root: null as HTMLElement | null,\n theme: themeModule.instance,\n });\n\n Object.keys(components).forEach((componentName) => {\n const comp = components[componentName as keyof typeof components];\n app.component(componentName, comp as Component);\n });\n\n app.directive('plate-wave', PlateWave);\n\n app.provide(YUYEON_THEME_KEY, yuyeon.theme);\n\n app.config.globalProperties.$yuyeon = yuyeon;\n\n nextTick(() => {\n yuyeon.app = app._instance as any;\n yuyeon.root = app._container;\n if (!yuyeon.root) {\n throw new Error(`yuyeon: Can't found instance`);\n }\n const $el = yuyeon.root;\n $el.classList.add('y-root');\n $el.setAttribute('data-y-root', '');\n themeModule.init(yuyeon);\n });\n if (options?.credit) {\n console.log(YUYEON_LOGO);\n }\n const { unmount } = app;\n app.unmount = () => {\n unmount();\n themeModule.scope.stop();\n app.unmount = unmount;\n };\n };\n\n return {\n install,\n // theme: themeModule,\n };\n}\n\nexport { useTheme };\n"],"mappings":"OAAO,KAAKA,UAAU;AAAA,SACbC,WAAW;AAGpB,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,KAAK;AAAC,SAGvCC,gBAAgB,EAChBC,iBAAiB,EACjBC,QAAQ;AAAA,OAEHC,SAAS,2CAEhB;AACA;AAEA,MAAMC,cAAc,GAAG;EACrBC,MAAM,EAAE;AACV,CAAC;AAQD,OAAO,SAASC,IAAIA,CAAA,EAAgC;EAAA,IAA/BC,OAAY,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGJ,cAAc;EAChD,MAAMO,WAAW,GAAGV,iBAAiB,CAACM,OAAO,EAAEK,KAAK,CAAC;EAErD,MAAMC,OAAO,GAAIC,GAAQ,IAAU;IACjCH,WAAW,CAACE,OAAO,CAACC,GAAG,CAAC;IAExB,MAAMC,MAAM,GAAGhB,QAAQ,CAAC;MACtBe,GAAG,EAAE,IAAwC;MAC7CE,IAAI,EAAE,IAA0B;MAChCJ,KAAK,EAAED,WAAW,CAACM;IACrB,CAAC,CAAC;IAEFC,MAAM,CAACC,IAAI,CAACvB,UAAU,CAAC,CAACwB,OAAO,CAAEC,aAAa,IAAK;MACjD,MAAMC,IAAI,GAAG1B,UAAU,CAACyB,aAAa,CAA4B;MACjEP,GAAG,CAACS,SAAS,CAACF,aAAa,EAAEC,IAAiB,CAAC;IACjD,CAAC,CAAC;IAEFR,GAAG,CAACU,SAAS,CAAC,YAAY,EAAErB,SAAS,CAAC;IAEtCW,GAAG,CAACW,OAAO,CAACzB,gBAAgB,EAAEe,MAAM,CAACH,KAAK,CAAC;IAE3CE,GAAG,CAACY,MAAM,CAACC,gBAAgB,CAACC,OAAO,GAAGb,MAAM;IAE5CjB,QAAQ,CAAC,MAAM;MACbiB,MAAM,CAACD,GAAG,GAAGA,GAAG,CAACe,SAAgB;MACjCd,MAAM,CAACC,IAAI,GAAGF,GAAG,CAACgB,UAAU;MAC5B,IAAI,CAACf,MAAM,CAACC,IAAI,EAAE;QAChB,MAAM,IAAIe,KAAK,CAAE,8BAA6B,CAAC;MACjD;MACA,MAAMC,GAAG,GAAGjB,MAAM,CAACC,IAAI;MACvBgB,GAAG,CAACC,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;MAC3BF,GAAG,CAACG,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;MACnCxB,WAAW,CAACL,IAAI,CAACS,MAAM,CAAC;IAC1B,CAAC,CAAC;IACF,IAAIR,OAAO,EAAEF,MAAM,EAAE;MACnB+B,OAAO,CAACC,GAAG,CAACxC,WAAW,CAAC;IAC1B;IACA,MAAM;MAAEyC;IAAQ,CAAC,GAAGxB,GAAG;IACvBA,GAAG,CAACwB,OAAO,GAAG,MAAM;MAClBA,OAAO,CAAC,CAAC;MACT3B,WAAW,CAAC4B,KAAK,CAACC,IAAI,CAAC,CAAC;MACxB1B,GAAG,CAACwB,OAAO,GAAGA,OAAO;IACvB,CAAC;EACH,CAAC;EAED,OAAO;IACLzB;IACA;EACF,CAAC;AACH;;AAEA,SAASX,QAAQ"}
|
package/lib/mixins/di.mjs
CHANGED
package/lib/mixins/di.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"di.mjs","names":["defineComponent","name","inject","
|
|
1
|
+
{"version":3,"file":"di.mjs","names":["defineComponent","name","inject","form$","default","mounted","register","beforeUnmount","unregister"],"sources":["../../src/mixins/di.ts"],"sourcesContent":["/*\n * Created by yuyeon-ui 2022.\n */\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'DiMixin',\n inject: {\n form$: {\n default: null,\n },\n },\n mounted() {\n ((this as any).form$ as any)?.register(this);\n },\n beforeUnmount() {\n ((this as any).form$ as any)?.unregister(this);\n },\n});\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,eAAe,QAAQ,KAAK;AAErC,eAAeA,eAAe,CAAC;EAC7BC,IAAI,EAAE,SAAS;EACfC,MAAM,EAAE;IACNC,KAAK,EAAE;MACLC,OAAO,EAAE;IACX;EACF,CAAC;EACDC,OAAOA,CAAA,EAAG;IACN,IAAI,CAASF,KAAK,EAAUG,QAAQ,CAAC,IAAI,CAAC;EAC9C,CAAC;EACDC,aAAaA,CAAA,EAAG;IACZ,IAAI,CAASJ,KAAK,EAAUK,UAAU,CAAC,IAAI,CAAC;EAChD;AACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
@use 'sass:map';
|
|
3
|
+
@use './util/var';
|
|
4
|
+
@use './settings/elevation' as *;
|
|
5
|
+
|
|
6
|
+
@mixin styles() {
|
|
7
|
+
@each $level, $core-dimension in $core-shadow-dimension {
|
|
8
|
+
$ambient-dimension: map.get($ambient-shadow-dimension, $level);
|
|
9
|
+
$var: --y-elevation--level#{$level};
|
|
10
|
+
#{$var}: #{$core-dimension} rgba(var(--y-elevation-color), #{$core-shadow-opacity}), #{$ambient-dimension} rgba(var(--y-elevation-color), #{$ambient-shadow-opacity});
|
|
11
|
+
.elevation-#{$level} {
|
|
12
|
+
box-shadow: var(#{$var});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
package/lib/styles/base.scss
CHANGED
|
@@ -3,16 +3,22 @@
|
|
|
3
3
|
@use 'settings/variables';
|
|
4
4
|
@use 'palette';
|
|
5
5
|
|
|
6
|
+
@use 'elevation';
|
|
7
|
+
|
|
6
8
|
:root {
|
|
7
9
|
box-sizing: border-box;
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
:root {
|
|
11
|
-
--
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
--default-shadow: 0, 0, 0;
|
|
14
|
+
--y-elevation-color: var(--y-theme-shadow, var(--default-shadow));
|
|
15
|
+
|
|
16
|
+
@include elevation.styles();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.y-root {
|
|
20
|
+
background: rgba(var(--y-theme-background), 1);
|
|
21
|
+
color: rgba(var(--y-theme-on-background), 1);
|
|
16
22
|
}
|
|
17
23
|
|
|
18
24
|
.fade-enter-active,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
$core-shadow-opacity: 0.3;
|
|
2
|
+
$ambient-shadow-opacity: 0.15;
|
|
3
|
+
|
|
4
|
+
$core-shadow-dimension: (
|
|
5
|
+
0: (0px 0px 0px 0px),
|
|
6
|
+
1: (0px 1px 2px 0px),
|
|
7
|
+
2: (0px 1px 2px 0px),
|
|
8
|
+
3: (0px 1px 3px 0px),
|
|
9
|
+
4: (0px 2px 3px 0px),
|
|
10
|
+
5: (0px 4px 4px 0px),
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
$ambient-shadow-dimension: (
|
|
14
|
+
0: (0px 0px 0px 0px),
|
|
15
|
+
1: (0px 1px 3px 1px),
|
|
16
|
+
2: (0px 2px 6px 2px),
|
|
17
|
+
3: (0px 4px 8px 3px),
|
|
18
|
+
4: (0px 6px 10px 4px),
|
|
19
|
+
5: (0px 8px 12px 6px),
|
|
20
|
+
)
|