yuyeon 0.0.14 → 0.0.15

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.
Files changed (205) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +15 -0
  3. package/dist/style.css +1 -1
  4. package/dist/yuyeon.mjs +3134 -2276
  5. package/dist/yuyeon.umd.js +29 -1
  6. package/lib/abstract/items.mjs +20 -0
  7. package/lib/abstract/items.mjs.map +1 -0
  8. package/lib/components/button/YButton.mjs +2 -2
  9. package/lib/components/button/YButton.mjs.map +1 -1
  10. package/lib/components/button/YButton.scss +1 -1
  11. package/lib/components/card/YCard.mjs.map +1 -1
  12. package/lib/components/card/YCard.scss +3 -2
  13. package/lib/components/checkbox/YInputCheckbox.scss +1 -1
  14. package/lib/components/chip/YChip.mjs +2 -2
  15. package/lib/components/chip/YChip.mjs.map +1 -1
  16. package/lib/components/dialog/YDialog.mjs +2 -2
  17. package/lib/components/dialog/YDialog.mjs.map +1 -1
  18. package/lib/components/dropdown/YDropdown.mjs +83 -2
  19. package/lib/components/dropdown/YDropdown.mjs.map +1 -1
  20. package/lib/components/dropdown/YDropdown.scss +33 -0
  21. package/lib/components/field-input/YFieldInput.mjs +55 -47
  22. package/lib/components/field-input/YFieldInput.mjs.map +1 -1
  23. package/lib/components/icons/YIconCheckbox.scss +1 -1
  24. package/lib/components/icons/YIconDropdown.mjs +16 -0
  25. package/lib/components/icons/YIconDropdown.mjs.map +1 -0
  26. package/lib/components/index.mjs +2 -0
  27. package/lib/components/index.mjs.map +1 -1
  28. package/lib/components/input/YInput.mjs +83 -49
  29. package/lib/components/input/YInput.mjs.map +1 -1
  30. package/lib/components/input/YInput.scss +8 -8
  31. package/lib/components/layer/YLayer.mjs +21 -9
  32. package/lib/components/layer/YLayer.mjs.map +1 -1
  33. package/lib/components/layer/YLayer.scss +1 -0
  34. package/lib/components/layer/scroll-strategies.mjs +1 -1
  35. package/lib/components/layer/scroll-strategies.mjs.map +1 -1
  36. package/lib/components/list/YList.mjs +40 -2
  37. package/lib/components/list/YList.mjs.map +1 -1
  38. package/lib/components/list/YListItem.mjs +31 -11
  39. package/lib/components/list/YListItem.mjs.map +1 -1
  40. package/lib/components/list/YListItem.scss +5 -2
  41. package/lib/components/menu/YMenu.mjs +29 -18
  42. package/lib/components/menu/YMenu.mjs.map +1 -1
  43. package/lib/components/menu/YMenu.scss +20 -7
  44. package/lib/components/pagination/YPagination.mjs +8 -8
  45. package/lib/components/pagination/YPagination.mjs.map +1 -1
  46. package/lib/components/panel/YDividePanel.scss +4 -4
  47. package/lib/components/progress-bar/YProgressBar.mjs +20 -3
  48. package/lib/components/progress-bar/YProgressBar.mjs.map +1 -1
  49. package/lib/components/progress-bar/YProgressBar.scss +109 -40
  50. package/lib/components/select/YSelect.mjs +185 -0
  51. package/lib/components/select/YSelect.mjs.map +1 -0
  52. package/lib/components/select/YSelect.scss +43 -0
  53. package/lib/components/select/index.mjs +2 -0
  54. package/lib/components/select/index.mjs.map +1 -0
  55. package/lib/components/switch/YSwitch.scss +1 -1
  56. package/lib/components/table/YTable.scss +2 -2
  57. package/lib/components/tree-view/YTreeView.mjs +76 -18
  58. package/lib/components/tree-view/YTreeView.mjs.map +1 -1
  59. package/lib/components/tree-view/YTreeViewNode.mjs +21 -18
  60. package/lib/components/tree-view/YTreeViewNode.mjs.map +1 -1
  61. package/lib/components/tree-view/types.mjs.map +1 -1
  62. package/lib/components/tree-view/util.mjs +24 -0
  63. package/lib/components/tree-view/util.mjs.map +1 -1
  64. package/lib/composables/coordinate/arrangement.mjs.map +1 -1
  65. package/lib/composables/coordinate/index.mjs.map +1 -1
  66. package/lib/composables/coordinate/levitation.mjs +1 -1
  67. package/lib/composables/coordinate/levitation.mjs.map +1 -1
  68. package/lib/composables/coordinate/utils/point.mjs.map +1 -1
  69. package/lib/composables/dimension.mjs +26 -0
  70. package/lib/composables/dimension.mjs.map +1 -0
  71. package/lib/composables/focus.mjs +29 -0
  72. package/lib/composables/focus.mjs.map +1 -0
  73. package/lib/composables/list-items.mjs +58 -0
  74. package/lib/composables/list-items.mjs.map +1 -0
  75. package/lib/composables/theme/factory.mjs +45 -0
  76. package/lib/composables/theme/factory.mjs.map +1 -0
  77. package/lib/composables/theme/helper.mjs +14 -0
  78. package/lib/composables/theme/helper.mjs.map +1 -0
  79. package/lib/composables/theme/index.mjs +144 -10
  80. package/lib/composables/theme/index.mjs.map +1 -1
  81. package/lib/composables/theme/setting.mjs +46 -9
  82. package/lib/composables/theme/setting.mjs.map +1 -1
  83. package/lib/composables/theme/types.mjs +2 -0
  84. package/lib/composables/theme/types.mjs.map +1 -0
  85. package/lib/directives/complement-click/index.mjs.map +1 -1
  86. package/lib/directives/theme-class.mjs +4 -4
  87. package/lib/directives/theme-class.mjs.map +1 -1
  88. package/lib/index.mjs +7 -5
  89. package/lib/index.mjs.map +1 -1
  90. package/lib/mixins/di.mjs +0 -3
  91. package/lib/mixins/di.mjs.map +1 -1
  92. package/lib/styles/_elevation.scss +15 -0
  93. package/lib/styles/base.scss +11 -5
  94. package/lib/styles/settings/_elevation.scss +20 -0
  95. package/lib/styles/theme/light.scss +1 -1
  96. package/lib/styles/util/_helper.scss +12 -0
  97. package/lib/styles/util/_var.scss +18 -0
  98. package/lib/util/color/apca.mjs +201 -0
  99. package/lib/util/color/apca.mjs.map +1 -0
  100. package/lib/util/color/const.mjs +6 -0
  101. package/lib/util/color/const.mjs.map +1 -0
  102. package/lib/util/color/contrast/contrast.mjs +149 -0
  103. package/lib/util/color/contrast/contrast.mjs.map +1 -0
  104. package/lib/util/color/conversion.mjs +310 -0
  105. package/lib/util/color/conversion.mjs.map +1 -0
  106. package/lib/util/color/hct/cam16.mjs +349 -0
  107. package/lib/util/color/hct/cam16.mjs.map +1 -0
  108. package/lib/util/color/hct/hct-solver.mjs +389 -0
  109. package/lib/util/color/hct/hct-solver.mjs.map +1 -0
  110. package/lib/util/color/hct/hct.mjs +153 -0
  111. package/lib/util/color/hct/hct.mjs.map +1 -0
  112. package/lib/util/color/hct/viewing-conditions.mjs +110 -0
  113. package/lib/util/color/hct/viewing-conditions.mjs.map +1 -0
  114. package/lib/util/color/index.mjs +24 -0
  115. package/lib/util/color/index.mjs.map +1 -0
  116. package/lib/util/color/palettes/core-palette.mjs +99 -0
  117. package/lib/util/color/palettes/core-palette.mjs.map +1 -0
  118. package/lib/util/color/palettes/tonal-palette.mjs +112 -0
  119. package/lib/util/color/palettes/tonal-palette.mjs.map +1 -0
  120. package/lib/util/color/types.mjs +2 -0
  121. package/lib/util/color/types.mjs.map +1 -0
  122. package/lib/util/color/utils/math-utils.mjs +139 -0
  123. package/lib/util/color/utils/math-utils.mjs.map +1 -0
  124. package/lib/util/common.mjs +11 -6
  125. package/lib/util/common.mjs.map +1 -1
  126. package/lib/util/debounce.mjs +114 -0
  127. package/lib/util/debounce.mjs.map +1 -0
  128. package/lib/util/{FrameScheduler.mjs → frame-scheduler.mjs} +1 -1
  129. package/lib/util/frame-scheduler.mjs.map +1 -0
  130. package/lib/util/{Rect.mjs → rect.mjs} +1 -1
  131. package/lib/util/{Rect.mjs.map → rect.mjs.map} +1 -1
  132. package/lib/util/string.mjs +6 -0
  133. package/lib/util/string.mjs.map +1 -1
  134. package/lib/util/ui.mjs +11 -36
  135. package/lib/util/ui.mjs.map +1 -1
  136. package/package.json +12 -1
  137. package/types/abstract/items.d.ts +48 -0
  138. package/types/components/card/YCard.d.ts +1 -1
  139. package/types/components/checkbox/YInputCheckbox.d.ts +2 -2
  140. package/types/components/dialog/YDialog.d.ts +23 -8
  141. package/types/components/dropdown/YDropdown.d.ts +219 -0
  142. package/types/components/dropdown/index.d.ts +1 -0
  143. package/types/components/field-input/YFieldInput.d.ts +238 -25
  144. package/types/components/icons/YIconCheckbox.d.ts +1 -1
  145. package/types/components/icons/YIconDropdown.d.ts +1 -0
  146. package/types/components/index.d.ts +2 -0
  147. package/types/components/input/YInput.d.ts +156 -42
  148. package/types/components/layer/YLayer.d.ts +67 -17
  149. package/types/components/list/YList.d.ts +22 -1
  150. package/types/components/list/YListItem.d.ts +28 -2
  151. package/types/components/menu/YMenu.d.ts +132 -16
  152. package/types/components/pagination/YPagination.d.ts +10 -10
  153. package/types/components/progress-bar/YProgressBar.d.ts +18 -1
  154. package/types/components/select/YSelect.d.ts +701 -0
  155. package/types/components/select/index.d.ts +1 -0
  156. package/types/components/table/YDataTable.d.ts +1 -1
  157. package/types/components/table/YDataTableServer.d.ts +1 -1
  158. package/types/components/text-highlighter/YTextHighlighter.d.ts +40 -0
  159. package/types/components/tooltip/YTooltip.d.ts +20 -5
  160. package/types/components/tree-view/YTreeView.d.ts +47 -22
  161. package/types/components/tree-view/YTreeViewNode.d.ts +72 -26
  162. package/types/components/tree-view/types.d.ts +1 -0
  163. package/types/components/tree-view/util.d.ts +4 -1
  164. package/types/composables/coordinate/arrangement.d.ts +1 -1
  165. package/types/composables/coordinate/index.d.ts +3 -3
  166. package/types/composables/coordinate/levitation.d.ts +1 -1
  167. package/types/composables/coordinate/utils/point.d.ts +1 -1
  168. package/types/composables/dimension.d.ts +53 -0
  169. package/types/composables/focus.d.ts +27 -0
  170. package/types/composables/list-items.d.ts +117 -0
  171. package/types/composables/theme/factory.d.ts +3 -0
  172. package/types/composables/theme/helper.d.ts +3 -0
  173. package/types/composables/theme/index.d.ts +45 -5
  174. package/types/composables/theme/setting.d.ts +3 -6
  175. package/types/composables/theme/types.d.ts +28 -0
  176. package/types/directives/complement-click/index.d.ts +1 -1
  177. package/types/directives/theme-class.d.ts +1 -1
  178. package/types/index.d.ts +2 -0
  179. package/types/shims.d.ts +4 -0
  180. package/types/util/color/apca.d.ts +29 -0
  181. package/types/util/color/const.d.ts +5 -0
  182. package/types/util/color/conversion.d.ts +130 -0
  183. package/types/util/color/hct/cam16.d.ts +131 -0
  184. package/types/util/color/hct/hct.d.ts +86 -0
  185. package/types/util/color/hct/hct_solver.d.ts +146 -0
  186. package/types/util/color/hct/viewing_conditions.d.ts +74 -0
  187. package/types/util/color/index.d.ts +4 -0
  188. package/types/util/color/palettes/tonal_palette.d.ts +55 -0
  189. package/types/util/color/types.d.ts +14 -0
  190. package/types/util/color/utils/math-utils.d.ts +82 -0
  191. package/types/util/color/utils/math_utils.d.ts +82 -0
  192. package/types/util/common.d.ts +2 -1
  193. package/types/util/debounce.d.ts +11 -0
  194. package/types/util/string.d.ts +1 -0
  195. package/types/util/ui.d.ts +1 -6
  196. package/lib/components/input/index.scss +0 -2
  197. package/lib/components/table/pagination.mjs +0 -80
  198. package/lib/components/table/pagination.mjs.map +0 -1
  199. package/lib/composables/collections.mjs +0 -2
  200. package/lib/composables/collections.mjs.map +0 -1
  201. package/lib/composables/levitation.mjs +0 -135
  202. package/lib/composables/levitation.mjs.map +0 -1
  203. package/lib/styles/util/helper.scss +0 -6
  204. package/lib/util/FrameScheduler.mjs.map +0 -1
  205. /package/lib/styles/settings/{provided.scss → _provided.scss} +0 -0
@@ -1,26 +1,111 @@
1
- import { effectScope, reactive, ref, toRaw, watch } from "vue";
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 themeState = reactive({
14
- scheme: scheme,
15
- theme: theme,
16
- themes: themes,
17
- mode: mode
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
- console.log(toRaw(yuyeon.theme));
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: themeState
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":"AACA,SACEA,QAAQ,EACRC,WAAW,EACXC,kBAAkB,EAClBC,MAAM,EACNC,OAAO,EACPC,QAAQ,EACRC,QAAQ,EACRC,GAAG,EACHC,KAAK,EACLC,KAAK,QACA,KAAK;AAAC,OAENC,cAAc;AAAA,SACZC,YAAY;AAAA,SACZC,aAAa,EAAEC,YAAY;AAAA,SAC3BC,QAAQ,EAAEC,YAAY;AAAA,SACTC,gBAAgB;AAKtC,OAAO,MAAMC,cAAc,GAAG,SAAS;AAwBvC,OAAO,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,GAAG,CAAC,cAAc,CAAC;AAE1D,OAAO,MAAMC,sBAAsB,GAAGV,YAAY,CAChD;EACEW,KAAK,EAAEC;AACT,CAAC,EACD,OACF,CAAC;AAED,OAAO,SAASC,UAAUA,CAAA,EAAG;EAC3B,OAAOC,MAAM,CAACC,UAAU,CAAC,8BAA8B,CAAC,CAACC,OAAO;AAClE;AAEA,OAAO,SAASC,mBAAmBA,CAAA,EAAG;EACpC,OAAOH,MAAM,CAACC,UAAU,CAAC,wBAAwB,CAAC,CAACG,KAAK,KAAK,SAAS;AACxE;AAEA,OAAO,SAASC,iBAAiBA,CAACC,OAAqB,EAAE;EACvD,MAAMC,eAAe,GAAG/B,WAAW,CAAC,CAAC;EACrC,MAAMgC,MAAM,GAAG5B,QAAQ,CAACW,gBAAgB,CAACe,OAAO,CAAC,CAAC;EAClD,MAAMG,MAAM,GAAG3B,GAAG,CAAS0B,MAAM,CAACC,MAAM,CAAC;EACzC,MAAMZ,KAAK,GAAGf,GAAG,CAAmB0B,MAAM,CAACX,KAAK,CAAC;EACjD,MAAMa,MAAM,GAAG5B,GAAG,CAAC0B,MAAM,CAACE,MAAM,CAAC;EACjC,MAAMC,OAAO,GAAG7B,GAAG,CAAC0B,MAAM,CAACG,OAAO,CAAC;EACnC,MAAMC,iBAAiB,GAAG9B,GAAG,CAAC,IAAI,CAAC;EACnC,MAAM+B,iBAAiB,GAAG/B,GAAG,CAAC,EAAE,CAAC;EAEjC,SAASgC,eAAeA,CACtBC,cAAoD,EACpD;IACAF,iBAAiB,CAACG,KAAK,GAAGD,cAAc,CAACb,OAAO,GAAG,MAAM,GAAG,OAAO;EACrE;EAEA,MAAMe,kBAAkB,GAAG1C,QAAQ,CAAmB,MAAM;IAC1D,IAAIkC,MAAM,CAACO,KAAK,KAAK,MAAM,EAAE;MAC3B,OAAOH,iBAAiB,CAACG,KAAK;IAChC;IACA,IAAIP,MAAM,CAACO,KAAK,KAAK,MAAM,EAAE;MAC3B,OAAO,MAAM;IACf;IACA,OAAO,OAAO;EAChB,CAAC,CAAC;EAEF,MAAME,eAAe,GAAG3C,QAAQ,CAAC,MAAM;IACrC,IAAI,OAAOsB,KAAK,CAACmB,KAAK,KAAK,QAAQ,EAAE;MACnC,IAAInB,KAAK,CAACmB,KAAK,IAAIG,cAAc,EAAE;QACjC,OAAOtB,KAAK,CAACmB,KAAK;MACpB;IACF;IACA,IAAII,KAAK,CAACC,OAAO,CAACxB,KAAK,CAACmB,KAAK,CAAC,EAAE;MAC9B,OAAOC,kBAAkB,CAACD,KAAK,KAAK,MAAM,GACtCnB,KAAK,CAACmB,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,GAC1BnB,KAAK,CAACmB,KAAK,GAAG,CAAC,CAAC,IAAI,OAAO;IACjC;IACA,OAAOC,kBAAkB,CAACD,KAAK;EACjC,CAAC,CAAC;EAEF,MAAMM,eAAe,GAAG/C,QAAQ,CAAC,MAAM;IACrC,OAAOY,aAAa,CAACwB,OAAO,CAACK,KAAK,CAAC;EACrC,CAAC,CAAC;EAEF,MAAMG,cAAc,GAAG5C,QAAQ,CAAC,MAAM;IACpC,OAAOa,YAAY,CAACsB,MAAM,CAACM,KAAK,CAAC;EACnC,CAAC,CAAC;EAEF,MAAMO,MAAM,GAAGhD,QAAQ,CAAC,MAAM;IAC5B,MAAMiD,KAAK,GAAG,EAAE;IAChBA,KAAK,CAACC,IAAI,CACR,GAAGpC,QAAQ,CAAC,OAAO,EAAEC,YAAY,CAACgC,eAAe,CAACN,KAAK,EAAE,SAAS,CAAC,CACrE,CAAC;IACD,KAAK,MAAM,CAACU,QAAQ,EAAEC,SAAS,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACV,cAAc,CAACH,KAAK,CAAC,EAAE;MACxE,MAAM;QAAEc,MAAM;QAAEC,SAAS;QAAEC;MAAO,CAAC,GAAGL,SAAS;MAC/C,MAAMM,OAA+B,GAAG;QACtC,GAAGH,MAAM;QACT,GAAGC;MACL,CAAC;MACD;MACA;MACA;MACA,MAAMG,WAAW,GAAGF,MAAM,GAAG,MAAM,GAAG,OAAO;MAC7C,IAAIvB,MAAM,CAACO,KAAK,KAAK,MAAM,EAAE;QAC3BQ,KAAK,CAACC,IAAI,CACR,GAAGpC,QAAQ,CACR,iCAAgC6C,WAAY,GAAE,EAC/C7C,QAAQ,CACL,mCAAkC6C,WAAY,WAAUR,QAAS,IAAG,EACrEpC,YAAY,CAAC2C,OAAO,EAAE,OAAO,CAC/B,CACF,CACF,CAAC;MACH,CAAC,MAAM;QACLT,KAAK,CAACC,IAAI,CACR,GAAGpC,QAAQ,CACR,uBAAsB6C,WAAY,WAAUA,WAAY,WAAUR,QAAS,IAAG,EAC/EpC,YAAY,CAAC2C,OAAO,EAAE,OAAO,CAC/B,CACF,CAAC;MACH;MAEAT,KAAK,CAACC,IAAI,CACR,GAAGpC,QAAQ,CAAE,aAAYqC,QAAS,EAAC,EAAEpC,YAAY,CAAC2C,OAAO,EAAE,OAAO,CAAC,CACrE,CAAC;IACH;IACA,OAAOT,KAAK,CAACW,IAAI,CAAC,EAAE,CAAC;EACvB,CAAC,CAAC;EAEF,SAASC,OAAOA,CAACC,GAAQ,EAAE;IACzBA,GAAG,CAACC,SAAS,CAAC,OAAO,EAAErD,cAAc,CAAC;IAEtC,IAAIsD,OAAO,GAAGC,QAAQ,CAACC,cAAc,CAAC,sBAAsB,CAAC;IAE7DzD,KAAK,CAACuC,MAAM,EAAEmB,aAAa,EAAE;MAAEC,SAAS,EAAE;IAAK,CAAC,CAAC;IAEjD,SAASD,aAAaA,CAAA,EAAG;MACvB,IAAI,OAAOF,QAAQ,KAAK,WAAW,IAAI,CAACD,OAAO,EAAE;QAC/C,MAAMK,EAAE,GAAGJ,QAAQ,CAACK,aAAa,CAAC,OAAO,CAAC;QAC1CD,EAAE,CAACE,IAAI,GAAG,UAAU;QACpBF,EAAE,CAACG,EAAE,GAAG,sBAAsB;QAC9B,IAAIzC,OAAO,CAAC0C,QAAQ,EAAEJ,EAAE,CAACK,YAAY,CAAC,OAAO,EAAE3C,OAAO,CAAC0C,QAAQ,CAAC;QAChET,OAAO,GAAGK,EAAE;QACZJ,QAAQ,CAACU,IAAI,CAACC,WAAW,CAACZ,OAAO,CAAC;MACpC;MACA,IAAIA,OAAO,EAAE;QACXA,OAAO,CAACa,SAAS,GAAG7B,MAAM,CAACP,KAAK;MAClC;IACF;EACF;EAEA,SAASqC,SAASA,CAACC,MAAW,EAAE;IAC9B1C,iBAAiB,CAACI,KAAK,GAAGb,mBAAmB,CAAC,CAAC;IAC/C,IAAIS,iBAAiB,CAACI,KAAK,EAAE;MAC3B,MAAMuC,GAAG,GAAGvD,MAAM,CAACC,UAAU,CAAC,8BAA8B,CAAC;MAC7Da,eAAe,CAACyC,GAAG,CAAC;MACpBA,GAAG,CAACC,gBAAgB,CAAC,QAAQ,EAAc1C,eAAe,CAAC;IAC7D;IACA9B,KAAK,CACHa,KAAK,EACJ4D,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;MAAEhB,SAAS,EAAE;IAAK,CACpB,CAAC;IACD3D,KAAK,CACHyB,MAAM,EACLgD,GAAG,IAAK;MACPH,MAAM,CAACM,IAAI,CAACX,YAAY,CACtB,mBAAmB,EACnBQ,GAAG,KAAK,MAAM,GAAG,MAAM,GAAGxC,kBAAkB,CAACD,KAC/C,CAAC;IACH,CAAC,EACD;MAAE2B,SAAS,EAAE;IAAK,CACpB,CAAC;EACH;EAEA,SAASmB,IAAIA,CAACR,MAAW,EAAE;IACzB/C,eAAe,CAACwD,GAAG,CAAC,MAAM;MACxBV,SAAS,CAACC,MAAM,CAAC;IACnB,CAAC,CAAC;EACJ;EAEA,MAAMU,YAAY,GAAGzF,QAAQ,CAAC,MAAO,YAAW2C,eAAe,CAACF,KAAM,EAAC,CAAC;EAExE,OAAO;IACLoB,OAAO;IACP0B,IAAI;IACJG,KAAK,EAAE1D,eAAe;IACtB2D,QAAQ,EAAE;MACRC,MAAM,EAAE;QACN1D,MAAM;QACNZ;MACF,CAAC;MACDa,MAAM;MACND,MAAM;MACNZ,KAAK;MACLqB,eAAe;MACf8C,YAAY;MACZ7C,cAAc;MACdG,eAAe;MACfV,iBAAiB,EAAE/B,QAAQ,CAAC+B,iBAAiB,CAAC;MAC9CC,iBAAiB,EAAEhC,QAAQ,CAACgC,iBAAiB;IAC/C;EACF,CAAC;AACH;AAEA,OAAO,SAASuD,aAAaA,CAACC,KAAyB,EAAE;EACvD5F,kBAAkB,CAAC,CAAC;EAEpB,MAAM6F,WAAW,GAAG5F,MAAM,CACxBe,gBAAgB,EAChB,IACF,CAAC;EAED,IAAI,CAAC6E,WAAW,EAAE,MAAM,IAAIC,KAAK,CAAC,kCAAkC,CAAC;EAErE,MAAM5D,OAAO,GAAG2D,WAAW,CAAChD,eAAe;EAE3C,MAAMJ,eAAe,GAAG3C,QAAQ,CAAS,MAAM;IAC7C,IAAI8F,KAAK,CAACxE,KAAK,EAAE;MACf,QAAQwE,KAAK,CAACxE,KAAK;QACjB,KAAK,OAAO;UACV,OAAOyE,WAAW,CAACzE,KAAK,CAACmB,KAAK,GAAG,CAAC,CAAC,IAAI,OAAO;QAChD,KAAK,MAAM;UACT,OAAOsD,WAAW,CAACzE,KAAK,CAACmB,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM;QAC/C;QACA;UACE,OAAOqD,KAAK,CAACxE,KAAK;MACtB;IACF;IACA,OAAOd,KAAK,CAACuF,WAAW,CAACpD,eAAe,CAAC;EAC3C,CAAC,CAAC;EAEF,MAAM8C,YAAY,GAAGzF,QAAQ,CAAC,MAAO,YAAW2C,eAAe,CAACF,KAAM,EAAC,CAAC;EAExE,MAAMwD,QAA6B,GAAG;IACpC,GAAGF,WAAW;IACdpD,eAAe;IACf8C;EACF,CAAC;EAEDrF,OAAO,CAACc,gBAAgB,EAAE+E,QAAQ,CAAC;EAEnC,OAAOA,QAAQ;AACjB;AAEA,OAAO,SAASC,QAAQA,CAAA,EAAG;EACzBhG,kBAAkB,CAAC,CAAC;EAEpB,MAAMoB,KAAK,GAAGnB,MAAM,CAA6Be,gBAAgB,EAAE,IAAI,CAAC;EAExE,IAAI,CAACI,KAAK,EAAE,MAAM,IAAI0E,KAAK,CAAC,kCAAkC,CAAC;EAE/D,OAAO1E,KAAK;AACd"}
@@ -3,35 +3,69 @@ 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
- scheme: ThemeScheme.light,
21
+ isDark: false,
9
22
  colors: {
10
- 'app-background': '#ffffff',
11
- 'base-font': '#141414'
23
+ primary: '#0062a1',
24
+ secondary: '#6251a6',
25
+ tertiary: '#3c691b',
26
+ background: '#fdfbff',
27
+ surface: '#fdfbff',
28
+ 'surface-variant': '#dfe3eb',
29
+ outline: '#73777f',
30
+ error: '#ba1a1a',
31
+ shadow: '#000000'
12
32
  },
13
33
  variables: {
14
- 'base-shadow-opacity': 0.14
34
+ 'outline-opacity': 0.14,
35
+ 'base-shadow-opacity': 0.14,
36
+ 'base-font': '#141414'
15
37
  }
16
38
  },
17
39
  dark: {
18
- scheme: ThemeScheme.dark,
40
+ isDark: true,
19
41
  colors: {
20
- 'app-background': '#1e1e1e',
21
- 'base-font': '#fff'
42
+ primary: '#9ccaff',
43
+ secondary: '#cbbeff',
44
+ tertiary: '#a1d57a',
45
+ background: '#001b3d',
46
+ surface: '#001b3d',
47
+ 'surface-variant': '#42474e',
48
+ outline: '#8c9199',
49
+ error: '#ffb4ab',
50
+ shadow: '#000000'
22
51
  },
23
52
  variables: {
24
- 'base-shadow-opacity': 0.14
53
+ 'outline-opacity': 0.14,
54
+ 'base-shadow-opacity': 0.14,
55
+ 'base-font': '#fff'
25
56
  }
26
57
  }
27
58
  };
28
59
  export function configureOptions(options) {
29
60
  if (!options) {
30
61
  return {
31
- scheme: 'normal',
62
+ scheme: ThemeScheme.light,
32
63
  theme: ['light', 'dark'],
33
64
  themes: {
34
65
  ...mergeDeep(defaultThemesValues)
66
+ },
67
+ palette: {
68
+ ...mergeDeep(defaultPalette)
35
69
  }
36
70
  };
37
71
  }
@@ -40,6 +74,9 @@ export function configureOptions(options) {
40
74
  theme: ['light', 'dark'],
41
75
  themes: {
42
76
  ...mergeDeep(defaultThemesValues, options.themes)
77
+ },
78
+ palette: {
79
+ ...mergeDeep(defaultPalette, options.palette)
43
80
  }
44
81
  };
45
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setting.mjs","names":["mergeDeep","ThemeScheme","light","dark","defaultThemesValues","scheme","colors","variables","configureOptions","options","theme","themes"],"sources":["../../../src/composables/theme/setting.ts"],"sourcesContent":["import { mergeDeep } from \"../../util/common\";\r\n\r\nexport const ThemeScheme = {\r\n light: 'light',\r\n dark: 'dark',\r\n} as const;\r\n\r\nexport interface ThemeOptions {\r\n mode: 'manual';\r\n scheme: keyof typeof ThemeScheme | 'normal';\r\n theme: string | [string, string];\r\n themes: any;\r\n}\r\n\r\nexport const defaultThemesValues: any = {\r\n light: {\r\n scheme: ThemeScheme.light,\r\n colors: {\r\n 'app-background': '#ffffff',\r\n 'base-font': '#141414',\r\n },\r\n variables: {\r\n 'base-shadow-opacity': 0.14\r\n },\r\n },\r\n dark: {\r\n scheme: ThemeScheme.dark,\r\n colors: {\r\n 'app-background': '#1e1e1e',\r\n 'base-font': '#fff',\r\n },\r\n variables: {\r\n 'base-shadow-opacity': 0.14\r\n },\r\n },\r\n};\r\n\r\nexport function configureOptions (options?: ThemeOptions): any {\r\n if (!options) {\r\n return {\r\n scheme: 'normal',\r\n theme: ['light', 'dark'],\r\n themes: {...mergeDeep(defaultThemesValues)},\r\n }\r\n }\r\n return {\r\n scheme: ThemeScheme.light,\r\n theme: ['light', 'dark'],\r\n themes: {...mergeDeep(defaultThemesValues, options.themes)},\r\n }\r\n}\r\n"],"mappings":"SAASA,SAAS;AAElB,OAAO,MAAMC,WAAW,GAAG;EACzBC,KAAK,EAAE,OAAO;EACdC,IAAI,EAAE;AACR,CAAU;AASV,OAAO,MAAMC,mBAAwB,GAAG;EACtCF,KAAK,EAAE;IACLG,MAAM,EAAEJ,WAAW,CAACC,KAAK;IACzBI,MAAM,EAAE;MACN,gBAAgB,EAAE,SAAS;MAC3B,WAAW,EAAE;IACf,CAAC;IACDC,SAAS,EAAE;MACT,qBAAqB,EAAE;IACzB;EACF,CAAC;EACDJ,IAAI,EAAE;IACJE,MAAM,EAAEJ,WAAW,CAACE,IAAI;IACxBG,MAAM,EAAE;MACN,gBAAgB,EAAE,SAAS;MAC3B,WAAW,EAAE;IACf,CAAC;IACDC,SAAS,EAAE;MACT,qBAAqB,EAAE;IACzB;EACF;AACF,CAAC;AAED,OAAO,SAASC,gBAAgBA,CAAEC,OAAsB,EAAO;EAC7D,IAAI,CAACA,OAAO,EAAE;IACZ,OAAO;MACLJ,MAAM,EAAE,QAAQ;MAChBK,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;MACxBC,MAAM,EAAE;QAAC,GAAGX,SAAS,CAACI,mBAAmB;MAAC;IAC5C,CAAC;EACH;EACA,OAAO;IACLC,MAAM,EAAEJ,WAAW,CAACC,KAAK;IACzBQ,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;IACxBC,MAAM,EAAE;MAAC,GAAGX,SAAS,CAACI,mBAAmB,EAAEK,OAAO,CAACE,MAAM;IAAC;EAC5D,CAAC;AACH"}
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 { PaletteOption, ThemeOptions } from './types';\n\nimport { mergeDeep } from '../../util/common';\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 surface: '#fdfbff',\n 'surface-variant': '#dfe3eb',\n outline: '#73777f',\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 secondary: '#cbbeff',\n tertiary: '#a1d57a',\n background: '#001b3d',\n surface: '#001b3d',\n 'surface-variant': '#42474e',\n outline: '#8c9199',\n error: '#ffb4ab',\n shadow: '#000000',\n },\n variables: {\n 'outline-opacity': 0.14,\n 'base-shadow-opacity': 0.14,\n 'base-font': '#fff',\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":"SAESA,SAAS;AAElB,OAAO,MAAMC,WAAW,GAAG;EACzBC,KAAK,EAAE,OAAO;EACdC,IAAI,EAAE;AACR,CAAU;AAEV,OAAO,MAAMC,qBAAqB,GAAG,CACnC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAC/D;AAED,OAAO,MAAMC,cAA6B,GAAG;EAC3CC,WAAW,EAAE,OAAO;EACpBC,MAAM,EAAE;IACNC,OAAO,EAAE,SAAS;IAClBC,SAAS,EAAE,SAAS;IACpBC,QAAQ,EAAE,SAAS;IACnBC,OAAO,EAAE,SAAS;IAClBC,QAAQ,EAAE,SAAS;IACnBC,QAAQ,EAAE,SAAS;IACnBC,OAAO,EAAE;EACX;AACF,CAAC;AAED,OAAO,MAAMC,mBAAwB,GAAG;EACtCb,KAAK,EAAE;IACLc,MAAM,EAAE,KAAK;IACbT,MAAM,EAAE;MACNC,OAAO,EAAE,SAAS;MAClBC,SAAS,EAAE,SAAS;MACpBC,QAAQ,EAAE,SAAS;MACnBO,UAAU,EAAE,SAAS;MACrBC,OAAO,EAAE,SAAS;MAClB,iBAAiB,EAAE,SAAS;MAC5BC,OAAO,EAAE,SAAS;MAClBC,KAAK,EAAE,SAAS;MAChBC,MAAM,EAAE;IACV,CAAC;IACDC,SAAS,EAAE;MACT,iBAAiB,EAAE,IAAI;MACvB,qBAAqB,EAAE,IAAI;MAC3B,WAAW,EAAE;IACf;EACF,CAAC;EACDnB,IAAI,EAAE;IACJa,MAAM,EAAE,IAAI;IACZT,MAAM,EAAE;MACNC,OAAO,EAAE,SAAS;MAClBC,SAAS,EAAE,SAAS;MACpBC,QAAQ,EAAE,SAAS;MACnBO,UAAU,EAAE,SAAS;MACrBC,OAAO,EAAE,SAAS;MAClB,iBAAiB,EAAE,SAAS;MAC5BC,OAAO,EAAE,SAAS;MAClBC,KAAK,EAAE,SAAS;MAChBC,MAAM,EAAE;IACV,CAAC;IACDC,SAAS,EAAE;MACT,iBAAiB,EAAE,IAAI;MACvB,qBAAqB,EAAE,IAAI;MAC3B,WAAW,EAAE;IACf;EACF;AACF,CAAC;AAED,OAAO,SAASC,gBAAgBA,CAACC,OAAsB,EAAO;EAC5D,IAAI,CAACA,OAAO,EAAE;IACZ,OAAO;MACLC,MAAM,EAAExB,WAAW,CAACC,KAAK;MACzBwB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;MACxBC,MAAM,EAAE;QAAE,GAAG3B,SAAS,CAACe,mBAAmB;MAAE,CAAC;MAC7Ca,OAAO,EAAE;QAAE,GAAG5B,SAAS,CAACK,cAAc;MAAE;IAC1C,CAAC;EACH;EACA,OAAO;IACLoB,MAAM,EAAExB,WAAW,CAACC,KAAK;IACzBwB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;IACxBC,MAAM,EAAE;MAAE,GAAG3B,SAAS,CAACe,mBAAmB,EAAES,OAAO,CAACG,MAAM;IAAE,CAAC;IAC7DC,OAAO,EAAE;MAAE,GAAG5B,SAAS,CAACK,cAAc,EAAEmB,OAAO,CAACI,OAAO;IAAE;EAC3D,CAAC;AACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.mjs.map
@@ -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 "vue";
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.name ?? '';
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","name","flush"],"sources":["../../src/directives/theme-class.ts"],"sourcesContent":["import { FunctionDirective, watchEffect } from \"vue\";\r\n\r\nconst bindThemeClass: FunctionDirective = (el, binding, vnode) => {\r\n function bindingClass(themeClass: string) {\r\n el.classList.forEach((classToken: string) => {\r\n if (classToken.startsWith('theme--') && classToken !== themeClass) {\r\n el.classList.remove(classToken);\r\n }\r\n });\r\n el.classList.add(themeClass);\r\n }\r\n\r\n watchEffect(() => {\r\n const theme = (binding.instance as any)?.$yuyeon?.theme ?? (vnode as any)?.ctx?.root.appContext.config.globalProperties?.$yuyeon?.theme;\r\n const themeName = binding.value ?? theme.name ?? '';\r\n if (!themeName) { return; }\r\n const themeClass = `theme--${themeName}`;\r\n bindingClass(themeClass);\r\n }, { flush: 'post' });\r\n};\r\n\r\nexport default bindThemeClass;\r\n"],"mappings":"AAAA,SAA4BA,WAAW,QAAQ,KAAK;AAEpD,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,SAAS,CAAC,IAAID,UAAU,KAAKH,UAAU,EAAE;QACjEJ,EAAE,CAACK,SAAS,CAACI,MAAM,CAACF,UAAU,CAAC;MACjC;IACF,CAAC,CAAC;IACFP,EAAE,CAACK,SAAS,CAACK,GAAG,CAACN,UAAU,CAAC;EAC9B;EAEAN,WAAW,CAAC,MAAM;IAChB,MAAMa,KAAK,GAAIV,OAAO,CAACW,QAAQ,EAAUC,OAAO,EAAEF,KAAK,IAAKT,KAAK,EAAUY,GAAG,EAAEC,IAAI,CAACC,UAAU,CAACC,MAAM,CAACC,gBAAgB,EAAEL,OAAO,EAAEF,KAAK;IACvI,MAAMQ,SAAS,GAAGlB,OAAO,CAACmB,KAAK,IAAIT,KAAK,CAACU,IAAI,IAAI,EAAE;IACnD,IAAI,CAACF,SAAS,EAAE;MAAE;IAAQ;IAC1B,MAAMf,UAAU,GAAI,UAASe,SAAU,EAAC;IACxChB,YAAY,CAACC,UAAU,CAAC;EAC1B,CAAC,EAAE;IAAEkB,KAAK,EAAE;EAAO,CAAC,CAAC;AACvB,CAAC;AAED,eAAevB,cAAc"}
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 { createThemeModule } from "./composables/theme/index.mjs";
4
- import PlateWave from "./directives/plate-wave/index.mjs";
5
- import { YUYEON_LOGO } from "./etc/index.mjs"; //
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('theme', yuyeon.theme);
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","components","createThemeModule","PlateWave","YUYEON_LOGO","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 { Component, ComponentInternalInstance } from \"@vue/runtime-core\";\r\nimport type { App } from 'vue';\r\nimport { nextTick, reactive } from \"vue\";\r\n\r\nimport * as components from './components';\r\nimport { createThemeModule } from './composables/theme';\r\nimport PlateWave from './directives/plate-wave';\r\nimport { YUYEON_LOGO } from './etc';\r\n//\r\nimport './styles/base.scss';\r\n\r\n\r\nconst defaultOptions = {\r\n credit: true,\r\n};\r\n\r\ndeclare module 'vue' {\r\n interface ComponentCustomProperties {\r\n $yuyeon: any;\r\n }\r\n}\r\n\r\nexport function init(options: any = defaultOptions) {\r\n const themeModule = createThemeModule(options?.theme);\r\n\r\n const install = (app: App): any => {\r\n themeModule.install(app);\r\n\r\n const yuyeon = reactive({\r\n app: null as ComponentInternalInstance | null,\r\n root: null as HTMLElement | null,\r\n theme: themeModule.instance,\r\n });\r\n\r\n Object.keys(components).forEach((componentName) => {\r\n const comp = components[componentName as keyof typeof components];\r\n app.component(componentName, comp as Component);\r\n });\r\n\r\n app.directive('plate-wave', PlateWave);\r\n\r\n app.provide('theme', yuyeon.theme);\r\n\r\n app.config.globalProperties.$yuyeon = yuyeon;\r\n\r\n nextTick(() => {\r\n yuyeon.app = app._instance as any;\r\n yuyeon.root = app._container;\r\n if (!yuyeon.root) {\r\n throw new Error(`yuyeon: Can't found instance`);\r\n }\r\n const $el = yuyeon.root;\r\n $el.classList.add('y-root');\r\n $el.setAttribute('data-y-root', '');\r\n themeModule.init(yuyeon);\r\n });\r\n if (options?.credit) {\r\n console.log(YUYEON_LOGO);\r\n }\r\n const { unmount } = app;\r\n app.unmount = () => {\r\n unmount();\r\n themeModule.scope.stop();\r\n app.unmount = unmount;\r\n }\r\n };\r\n\r\n return {\r\n install,\r\n // theme: themeModule,\r\n };\r\n}\r\n"],"mappings":"AAEA,SAASA,QAAQ,EAAEC,QAAQ,QAAQ,KAAK;AAAC,OAElC,KAAKC,UAAU;AAAA,SACbC,iBAAiB;AAAA,OACnBC,SAAS;AAAA,SACPC,WAAW,2BACpB;AACA;AAGA,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,CAACnB,UAAU,CAAC,CAACoB,OAAO,CAAEC,aAAa,IAAK;MACjD,MAAMC,IAAI,GAAGtB,UAAU,CAACqB,aAAa,CAA4B;MACjEP,GAAG,CAACS,SAAS,CAACF,aAAa,EAAEC,IAAiB,CAAC;IACjD,CAAC,CAAC;IAEFR,GAAG,CAACU,SAAS,CAAC,YAAY,EAAEtB,SAAS,CAAC;IAEtCY,GAAG,CAACW,OAAO,CAAC,OAAO,EAAEV,MAAM,CAACH,KAAK,CAAC;IAElCE,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,CAAClC,WAAW,CAAC;IAC1B;IACA,MAAM;MAAEmC;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"}
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
@@ -5,9 +5,6 @@ import { defineComponent } from 'vue';
5
5
  export default defineComponent({
6
6
  name: 'DiMixin',
7
7
  inject: {
8
- theme: {
9
- from: 'theme'
10
- },
11
8
  form$: {
12
9
  default: null
13
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"di.mjs","names":["defineComponent","name","inject","theme","from","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 theme: {\n from: 'theme',\n },\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,IAAI,EAAE;IACR,CAAC;IACDC,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"}
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
+ }
@@ -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
- --y-palette--primary: #{palette.$primary};
12
- //--y-theme--primary: 79, 151, 220;
13
- //--y-theme--base-bg: 255, 255, 255;
14
- //--y-line-color: 0, 0, 0;
15
- //--y-line-opacity: 0.14;
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
+ )
@@ -15,7 +15,7 @@ $theme--light: map.deep-merge(
15
15
  'select': (
16
16
  'selected': palette.$basic-black,
17
17
  'selected-background': palette.$basic-gray-700,
18
- ),
18
+ )
19
19
  ),
20
20
  $theme--light
21
21
  );
@@ -0,0 +1,12 @@
1
+ @use 'sass:string';
2
+
3
+ @function deepGet($map, $keys...) {
4
+ @each $key in $keys {
5
+ $map: map-get($map, $key);
6
+ }
7
+ @return $map;
8
+ }
9
+
10
+ @function hasPrefix($string, $prefix) {
11
+ @return string.slice($string, 1, string.length($prefix)) == $prefix;
12
+ }
@@ -0,0 +1,18 @@
1
+ @use 'sass:string';
2
+ @use './helper';
3
+
4
+ @function create($name, $fallback: null) {
5
+ $name: createName($name);
6
+ @if fallback == null {
7
+ @return var(#{$name});
8
+ }
9
+
10
+ @return var(#{$name}, $fallback);
11
+ }
12
+
13
+ @function createName($name) {
14
+ @if helper.hasPrefix($name, '--') {
15
+ @return $name;
16
+ }
17
+ @return string.unquote('--y-#{$name}');
18
+ }