vueless 0.0.478 → 0.0.480

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 (297) hide show
  1. package/adatper.locale/vue-i18n.ts +14 -0
  2. package/adatper.locale/{vueless.js → vueless.ts} +67 -19
  3. package/composables/useAutoPosition.ts +113 -0
  4. package/composables/useBreakpoint.ts +109 -0
  5. package/composables/useLocale.ts +22 -0
  6. package/composables/useMutationObserver.ts +53 -0
  7. package/composables/{useUI.js → useUI.ts} +109 -105
  8. package/constants.js +124 -2
  9. package/directives/clickOutside/storybook/Docs.mdx +1 -1
  10. package/directives/clickOutside/storybook/{stories.js → stories.ts} +7 -9
  11. package/directives/clickOutside/types.ts +22 -0
  12. package/directives/clickOutside/vClickOutside.ts +96 -0
  13. package/directives/index.js +7 -2
  14. package/directives/tooltip/storybook/Docs.mdx +1 -1
  15. package/directives/tooltip/storybook/{stories.js → stories.ts} +22 -10
  16. package/directives/tooltip/types.ts +14 -0
  17. package/directives/tooltip/vTooltip.ts +82 -0
  18. package/{index.js → index.ts} +12 -9
  19. package/package.json +38 -25
  20. package/plugin-vite.d.ts +10 -0
  21. package/plugin-vite.js +97 -0
  22. package/{preset.tailwind.js → preset-tailwind.js} +21 -7
  23. package/types.ts +322 -0
  24. package/ui.button/UButton.vue +1 -1
  25. package/ui.button/storybook/Docs.mdx +1 -1
  26. package/ui.button/storybook/stories.js +11 -6
  27. package/ui.button/useAttrs.js +1 -1
  28. package/ui.button-link/ULink.vue +2 -2
  29. package/ui.button-link/storybook/Docs.mdx +1 -1
  30. package/ui.button-link/storybook/stories.js +2 -2
  31. package/ui.button-link/useAttrs.js +1 -1
  32. package/ui.button-toggle/UToggle.vue +1 -1
  33. package/ui.button-toggle/storybook/Docs.mdx +1 -1
  34. package/ui.button-toggle/storybook/stories.js +2 -2
  35. package/ui.button-toggle/useAttrs.js +1 -1
  36. package/ui.button-toggle-item/UToggleItem.vue +1 -1
  37. package/ui.button-toggle-item/storybook/Docs.mdx +1 -1
  38. package/ui.button-toggle-item/storybook/stories.js +1 -1
  39. package/ui.button-toggle-item/useAttrs.js +1 -1
  40. package/ui.container-accordion/UAccordion.vue +1 -1
  41. package/ui.container-accordion/storybook/Docs.mdx +1 -1
  42. package/ui.container-accordion/storybook/stories.js +1 -1
  43. package/ui.container-accordion/useAttrs.js +1 -1
  44. package/ui.container-card/storybook/Docs.mdx +1 -1
  45. package/ui.container-card/storybook/stories.js +1 -1
  46. package/ui.container-card/useAttrs.js +1 -1
  47. package/ui.container-col/UCol.vue +1 -1
  48. package/ui.container-col/storybook/Docs.mdx +1 -1
  49. package/ui.container-col/storybook/stories.js +1 -1
  50. package/ui.container-col/useAttrs.js +1 -1
  51. package/ui.container-divider/UDivider.vue +1 -1
  52. package/ui.container-divider/storybook/Docs.mdx +1 -1
  53. package/ui.container-divider/storybook/stories.js +2 -2
  54. package/ui.container-divider/useAttrs.js +1 -1
  55. package/ui.container-group/UGroup.vue +1 -1
  56. package/ui.container-group/storybook/Docs.mdx +1 -1
  57. package/ui.container-group/storybook/stories.js +1 -1
  58. package/ui.container-group/useAttrs.js +1 -1
  59. package/ui.container-modal/UModal.vue +1 -1
  60. package/ui.container-modal/storybook/Docs.mdx +1 -1
  61. package/ui.container-modal/storybook/stories.js +2 -2
  62. package/ui.container-modal/useAttrs.js +1 -1
  63. package/ui.container-modal-confirm/UModalConfirm.vue +2 -2
  64. package/ui.container-modal-confirm/storybook/Docs.mdx +1 -1
  65. package/ui.container-modal-confirm/storybook/stories.js +2 -2
  66. package/ui.container-modal-confirm/useAttrs.js +1 -1
  67. package/ui.container-page/UPage.vue +2 -2
  68. package/ui.container-page/storybook/Docs.mdx +1 -1
  69. package/ui.container-page/storybook/stories.js +1 -1
  70. package/ui.container-page/useAttrs.js +2 -2
  71. package/ui.container-row/URow.vue +1 -1
  72. package/ui.container-row/storybook/Docs.mdx +1 -1
  73. package/ui.container-row/storybook/stories.js +2 -2
  74. package/ui.container-row/useAttrs.js +1 -1
  75. package/ui.data-list/UDataList.vue +6 -6
  76. package/ui.data-list/storybook/Docs.mdx +1 -1
  77. package/ui.data-list/storybook/stories.js +1 -1
  78. package/ui.data-list/useAttrs.js +1 -1
  79. package/ui.data-table/UTable.vue +3 -3
  80. package/ui.data-table/UTableRow.vue +7 -6
  81. package/ui.data-table/config.js +10 -3
  82. package/ui.data-table/storybook/Docs.mdx +1 -1
  83. package/ui.data-table/storybook/stories.js +5 -3
  84. package/ui.data-table/useAttrs.js +1 -1
  85. package/ui.data-table/utilTable.js +1 -1
  86. package/ui.dropdown-badge/UDropdownBadge.vue +1 -1
  87. package/ui.dropdown-badge/storybook/Docs.mdx +1 -1
  88. package/ui.dropdown-badge/storybook/stories.js +2 -2
  89. package/ui.dropdown-badge/useAttrs.js +1 -1
  90. package/ui.dropdown-button/UDropdownButton.vue +1 -1
  91. package/ui.dropdown-button/storybook/Docs.mdx +1 -1
  92. package/ui.dropdown-button/storybook/stories.js +3 -3
  93. package/ui.dropdown-button/useAttrs.js +1 -1
  94. package/ui.dropdown-link/UDropdownLink.vue +1 -1
  95. package/ui.dropdown-link/config.js +1 -1
  96. package/ui.dropdown-link/storybook/Docs.mdx +1 -1
  97. package/ui.dropdown-link/storybook/stories.js +2 -2
  98. package/ui.dropdown-link/useAttrs.js +4 -6
  99. package/ui.dropdown-list/UDropdownList.vue +3 -3
  100. package/ui.dropdown-list/storybook/Docs.mdx +1 -1
  101. package/ui.dropdown-list/storybook/stories.js +2 -2
  102. package/ui.dropdown-list/useAttrs.js +1 -1
  103. package/ui.form-calendar/UCalendar.vue +2 -2
  104. package/ui.form-calendar/storybook/Docs.mdx +1 -1
  105. package/ui.form-calendar/storybook/stories.js +1 -1
  106. package/ui.form-calendar/useAttrs.js +1 -1
  107. package/ui.form-checkbox/UCheckbox.vue +1 -1
  108. package/ui.form-checkbox/storybook/Docs.mdx +1 -1
  109. package/ui.form-checkbox/storybook/stories.js +2 -2
  110. package/ui.form-checkbox/useAttrs.js +1 -1
  111. package/ui.form-checkbox-group/UCheckboxGroup.vue +1 -1
  112. package/ui.form-checkbox-group/storybook/Docs.mdx +1 -1
  113. package/ui.form-checkbox-group/storybook/stories.js +2 -2
  114. package/ui.form-checkbox-group/useAttrs.js +1 -1
  115. package/ui.form-checkbox-multi-state/UCheckboxMultiState.vue +1 -1
  116. package/ui.form-checkbox-multi-state/storybook/Docs.mdx +1 -1
  117. package/ui.form-checkbox-multi-state/storybook/stories.js +2 -2
  118. package/ui.form-checkbox-multi-state/useAttrs.js +1 -1
  119. package/ui.form-color-picker/UColorPicker.vue +1 -1
  120. package/ui.form-color-picker/storybook/Docs.mdx +1 -1
  121. package/ui.form-color-picker/storybook/stories.js +2 -2
  122. package/ui.form-color-picker/useAttrs.js +1 -1
  123. package/ui.form-date-picker/UDatePicker.vue +4 -7
  124. package/ui.form-date-picker/storybook/Docs.mdx +1 -1
  125. package/ui.form-date-picker/storybook/stories.js +3 -3
  126. package/ui.form-date-picker/useAttrs.js +2 -2
  127. package/ui.form-date-picker-range/UDatePickerRange.vue +2 -2
  128. package/ui.form-date-picker-range/storybook/Docs.mdx +1 -1
  129. package/ui.form-date-picker-range/storybook/stories.js +2 -2
  130. package/ui.form-date-picker-range/useAttrs.js +2 -2
  131. package/ui.form-date-picker-range/useLocale.js +1 -1
  132. package/ui.form-input/UInput.vue +3 -3
  133. package/ui.form-input/storybook/Docs.mdx +1 -1
  134. package/ui.form-input/storybook/stories.js +2 -2
  135. package/ui.form-input/useAttrs.js +1 -1
  136. package/ui.form-input-file/UInputFile.vue +2 -2
  137. package/ui.form-input-file/storybook/Docs.mdx +1 -1
  138. package/ui.form-input-file/storybook/stories.js +2 -2
  139. package/ui.form-input-file/useAttrs.js +1 -1
  140. package/ui.form-input-money/UInputMoney.vue +1 -1
  141. package/ui.form-input-money/storybook/Docs.mdx +1 -1
  142. package/ui.form-input-money/storybook/stories.js +2 -2
  143. package/ui.form-input-money/useAttrs.js +1 -1
  144. package/ui.form-input-money/useFormatCurrency.js +1 -1
  145. package/ui.form-input-number/UInputNumber.vue +5 -4
  146. package/ui.form-input-number/storybook/Docs.mdx +1 -1
  147. package/ui.form-input-number/storybook/stories.js +2 -2
  148. package/ui.form-input-number/useAttrs.js +1 -1
  149. package/ui.form-input-rating/UInputRating.vue +1 -1
  150. package/ui.form-input-rating/storybook/Docs.mdx +1 -1
  151. package/ui.form-input-rating/storybook/stories.js +2 -2
  152. package/ui.form-input-rating/useAttrs.js +1 -1
  153. package/ui.form-input-search/UInputSearch.vue +2 -2
  154. package/ui.form-input-search/storybook/Docs.mdx +1 -1
  155. package/ui.form-input-search/storybook/stories.js +2 -2
  156. package/ui.form-input-search/useAttrs.js +1 -1
  157. package/ui.form-label/ULabel.vue +1 -1
  158. package/ui.form-label/config.js +2 -2
  159. package/ui.form-label/storybook/Docs.mdx +1 -1
  160. package/ui.form-label/storybook/stories.js +2 -2
  161. package/ui.form-label/useAttrs.js +1 -1
  162. package/ui.form-radio/URadio.vue +1 -1
  163. package/ui.form-radio/storybook/Docs.mdx +1 -1
  164. package/ui.form-radio/storybook/stories.js +1 -1
  165. package/ui.form-radio/useAttrs.js +1 -1
  166. package/ui.form-radio-group/URadioGroup.vue +1 -1
  167. package/ui.form-radio-group/storybook/Docs.mdx +1 -1
  168. package/ui.form-radio-group/storybook/stories.js +2 -2
  169. package/ui.form-radio-group/useAttrs.js +1 -1
  170. package/ui.form-select/USelect.vue +4 -4
  171. package/ui.form-select/storybook/Docs.mdx +1 -1
  172. package/ui.form-select/storybook/stories.js +2 -2
  173. package/ui.form-select/useAttrs.js +1 -1
  174. package/ui.form-switch/USwitch.vue +2 -2
  175. package/ui.form-switch/storybook/Docs.mdx +1 -1
  176. package/ui.form-switch/storybook/stories.js +2 -2
  177. package/ui.form-switch/useAttrs.js +1 -1
  178. package/ui.form-switch/utilVariant.js +1 -1
  179. package/ui.form-textarea/UTextarea.vue +1 -1
  180. package/ui.form-textarea/storybook/Docs.mdx +1 -1
  181. package/ui.form-textarea/storybook/stories.js +2 -2
  182. package/ui.form-textarea/useAttrs.js +1 -1
  183. package/ui.image-avatar/UAvatar.vue +1 -1
  184. package/ui.image-avatar/storybook/Docs.mdx +1 -1
  185. package/ui.image-avatar/storybook/stories.js +2 -2
  186. package/ui.image-avatar/useAttrs.js +1 -1
  187. package/ui.image-icon/UIcon.vue +23 -8
  188. package/ui.image-icon/storybook/Docs.mdx +2 -2
  189. package/ui.image-icon/storybook/stories.js +2 -2
  190. package/ui.image-icon/useAttrs.js +2 -2
  191. package/ui.loader/ULoader.vue +1 -1
  192. package/ui.loader/storybook/Docs.mdx +1 -1
  193. package/ui.loader/storybook/stories.js +2 -2
  194. package/ui.loader/useAttrs.js +1 -1
  195. package/ui.loader-overlay/ULoaderOverlay.vue +1 -1
  196. package/ui.loader-overlay/storybook/Docs.mdx +1 -1
  197. package/ui.loader-overlay/storybook/stories.js +1 -1
  198. package/ui.loader-overlay/useAttrs.js +1 -1
  199. package/ui.loader-progress/ULoaderProgress.vue +33 -48
  200. package/ui.loader-progress/constants.js +1 -0
  201. package/ui.loader-progress/storybook/Docs.mdx +1 -1
  202. package/ui.loader-progress/storybook/stories.js +3 -4
  203. package/ui.loader-progress/useAttrs.js +1 -1
  204. package/ui.loader-progress/useLoaderProgress.js +13 -8
  205. package/ui.loader-progress/utilLoaderProgress.js +1 -1
  206. package/ui.navigation-pagination/UPagination.vue +1 -1
  207. package/ui.navigation-pagination/storybook/Docs.mdx +1 -1
  208. package/ui.navigation-pagination/storybook/stories.js +1 -1
  209. package/ui.navigation-pagination/useAttrs.js +1 -1
  210. package/ui.navigation-progress/UProgress.vue +1 -1
  211. package/ui.navigation-progress/storybook/Docs.mdx +1 -1
  212. package/ui.navigation-progress/storybook/stories.js +2 -2
  213. package/ui.navigation-progress/useAttrs.js +1 -1
  214. package/ui.navigation-tab/UTab.vue +1 -1
  215. package/ui.navigation-tab/storybook/Docs.mdx +1 -1
  216. package/ui.navigation-tab/storybook/stories.js +1 -1
  217. package/ui.navigation-tab/useAttrs.js +1 -1
  218. package/ui.navigation-tabs/UTabs.vue +1 -1
  219. package/ui.navigation-tabs/storybook/Docs.mdx +1 -1
  220. package/ui.navigation-tabs/storybook/stories.js +2 -2
  221. package/ui.navigation-tabs/useAttrs.js +1 -1
  222. package/ui.other-dot/UDot.vue +1 -1
  223. package/ui.other-dot/storybook/Docs.mdx +1 -1
  224. package/ui.other-dot/storybook/stories.js +2 -2
  225. package/ui.other-dot/useAttrs.js +1 -1
  226. package/ui.text-alert/UAlert.vue +1 -1
  227. package/ui.text-alert/storybook/Docs.mdx +1 -1
  228. package/ui.text-alert/storybook/stories.js +2 -2
  229. package/ui.text-alert/useAttrs.js +1 -1
  230. package/ui.text-badge/UBadge.vue +89 -179
  231. package/ui.text-badge/storybook/Docs.mdx +3 -3
  232. package/ui.text-badge/storybook/{stories.js → stories.ts} +33 -37
  233. package/ui.text-badge/types.ts +84 -0
  234. package/ui.text-badge/useAttrs.ts +28 -0
  235. package/ui.text-block/UText.vue +18 -62
  236. package/ui.text-block/storybook/Docs.mdx +3 -3
  237. package/ui.text-block/storybook/{stories.js → stories.ts} +13 -8
  238. package/ui.text-block/types.ts +33 -0
  239. package/ui.text-block/useAttrs.ts +20 -0
  240. package/ui.text-empty/UEmpty.vue +1 -1
  241. package/ui.text-empty/storybook/Docs.mdx +1 -1
  242. package/ui.text-empty/storybook/stories.js +2 -2
  243. package/ui.text-empty/useAttrs.js +1 -1
  244. package/ui.text-file/UFile.vue +13 -16
  245. package/ui.text-file/config.js +12 -2
  246. package/ui.text-file/storybook/Docs.mdx +1 -1
  247. package/ui.text-file/storybook/stories.js +1 -1
  248. package/ui.text-file/useAttrs.js +1 -1
  249. package/ui.text-files/UFiles.vue +1 -1
  250. package/ui.text-files/config.js +1 -1
  251. package/ui.text-files/storybook/Docs.mdx +1 -1
  252. package/ui.text-files/storybook/stories.js +1 -1
  253. package/ui.text-files/useAttrs.js +1 -1
  254. package/ui.text-header/UHeader.vue +1 -1
  255. package/ui.text-header/storybook/Docs.mdx +1 -1
  256. package/ui.text-header/storybook/stories.js +2 -2
  257. package/ui.text-header/useAttrs.js +1 -1
  258. package/ui.text-money/UMoney.vue +1 -1
  259. package/ui.text-money/storybook/Docs.mdx +1 -1
  260. package/ui.text-money/storybook/stories.js +2 -2
  261. package/ui.text-money/useAttrs.js +1 -1
  262. package/ui.text-money/utilMoney.js +2 -2
  263. package/ui.text-notify/UNotify.vue +2 -2
  264. package/ui.text-notify/storybook/Docs.mdx +1 -1
  265. package/ui.text-notify/storybook/stories.js +1 -1
  266. package/ui.text-notify/useAttrs.js +1 -1
  267. package/ui.text-notify/utilNotify.js +1 -1
  268. package/utils/{utilHelper.js → helper.ts} +14 -27
  269. package/utils/node/helper.js +78 -0
  270. package/utils/node/loaderIcon.js +232 -0
  271. package/utils/node/loaderSvg.js +71 -0
  272. package/utils/node/mergeConfigs.js +199 -0
  273. package/utils/node/tailwindSafelist.js +366 -0
  274. package/utils/node/vuelessConfig.js +42 -0
  275. package/utils/node/vuelessResolver.js +28 -0
  276. package/utils/{utilPlatform.js → platform.ts} +10 -3
  277. package/utils/{utilStorybook.js → storybook.ts} +102 -36
  278. package/utils/tailwindConfig.ts +33 -0
  279. package/utils/{utilTheme.js → theme.ts} +65 -30
  280. package/utils/ui.ts +129 -0
  281. package/web-types.json +1362 -157
  282. package/adatper.locale/vue-i18n.js +0 -11
  283. package/composables/useAutoPosition.js +0 -94
  284. package/composables/useBreakpoint.js +0 -104
  285. package/composables/useLocale.js +0 -25
  286. package/composables/useMutationObserver.js +0 -48
  287. package/directives/clickOutside/vClickOutside.js +0 -64
  288. package/directives/tooltip/vTooltip.js +0 -56
  289. package/ui.text-badge/useAttrs.js +0 -23
  290. package/ui.text-block/useAttrs.js +0 -15
  291. package/utils/utilUI.js +0 -360
  292. /package/adatper.locale/locales/{en.js → en.ts} +0 -0
  293. /package/ui.image-icon/{config.js → config.ts} +0 -0
  294. /package/ui.text-badge/{config.js → config.ts} +0 -0
  295. /package/ui.text-badge/{constants.js → constants.ts} +0 -0
  296. /package/ui.text-block/{config.js → config.ts} +0 -0
  297. /package/ui.text-block/{constants.js → constants.ts} +0 -0
package/utils/utilUI.js DELETED
@@ -1,360 +0,0 @@
1
- import { merge } from "lodash-es";
2
- import { defineConfig } from "cva";
3
- import { extendTailwindMerge } from "tailwind-merge";
4
- import { cloneDeep, isCSR, isSSR } from "./utilHelper.js";
5
- import {
6
- BRAND_COLOR,
7
- GRAYSCALE_COLOR,
8
- DEFAULT_BRAND_COLOR,
9
- NESTED_COMPONENT_REG_EXP,
10
- SYSTEM_CONFIG_KEY,
11
- } from "../constants.js";
12
-
13
- /**
14
- * Load Vueless config from the project root.
15
- * Both for server and client side renderings.
16
- * IIFE for SSR is used to prevent top level await issue.
17
- */
18
- export let vuelessConfig = {};
19
-
20
- if (isSSR) {
21
- /* Load Vueless config from the project root in IIFE (no top-level await). */
22
- (async () => {
23
- try {
24
- const filePath = `${process.cwd()}/vueless.config`;
25
-
26
- vuelessConfig = (await import(/* @vite-ignore */ `${filePath}.js`)).default;
27
-
28
- if (!vuelessConfig) {
29
- vuelessConfig = (await import(/* @vite-ignore */ `${filePath}.ts`)).default;
30
- }
31
- } catch (error) {
32
- vuelessConfig = {};
33
- }
34
- })();
35
- }
36
-
37
- if (isCSR) {
38
- vuelessConfig =
39
- Object.values(
40
- import.meta.glob("/vueless.config.{js,ts}", { eager: true, import: "default" }),
41
- )[0] || {};
42
- }
43
-
44
- /**
45
- * Recursively merge config objects with removing tailwind classes duplicates.
46
- * @param {Object} defaultConfig
47
- * @param {Object} globalConfig
48
- * @param {Object} propsConfig
49
- * @param {Object} config - final merged config.
50
- * @param {boolean} isReplace - enables class replacement instead of merge.
51
- * @param {boolean} isVarinants - if true, prevents adding a "base" key into nested objects.
52
- *
53
- * @returns {Object}
54
- */
55
- export function mergeConfigs({
56
- defaultConfig,
57
- globalConfig,
58
- propsConfig,
59
- config = {},
60
- isReplace = false,
61
- isVariants = false,
62
- }) {
63
- globalConfig = cloneDeep(globalConfig || {});
64
- propsConfig = cloneDeep(propsConfig || {});
65
-
66
- const isGlobalConfig = Object.keys(globalConfig).length;
67
- const isPropsConfig = Object.keys(propsConfig).length;
68
-
69
- // Add unique keys from defaultConfig to composedConfig
70
- let composedConfig = cloneDeep(defaultConfig);
71
-
72
- // Add unique keys from globalConfig to composedConfig
73
- for (let key in globalConfig) {
74
- if (!Object.keys(composedConfig).includes(key)) {
75
- composedConfig[key] = globalConfig[key];
76
- }
77
- }
78
-
79
- // Add unique keys from propsConfig to composedConfig
80
- for (let key in propsConfig) {
81
- if (!Object.keys(composedConfig).includes(key)) {
82
- composedConfig[key] = propsConfig[key];
83
- }
84
- }
85
-
86
- const {
87
- i18n,
88
- defaults,
89
- strategy,
90
- safelist,
91
- component,
92
- safelistColors,
93
- defaultVariants,
94
- compoundVariants,
95
- } = SYSTEM_CONFIG_KEY;
96
-
97
- for (let key in composedConfig) {
98
- if (isGlobalConfig || isPropsConfig) {
99
- if (key === safelist || key === safelistColors) {
100
- if (propsConfig[key]) {
101
- // eslint-disable-next-line no-console
102
- console.warn(`Passing '${key}' key in 'config' prop is not allowed.`);
103
- }
104
- } else if (key === component) {
105
- config[key] = propsConfig[key] || defaultConfig[key];
106
-
107
- if (globalConfig[key]) {
108
- // eslint-disable-next-line no-console
109
- console.warn(`Passing '${key}' key in 'config' prop or by global config is not allowed.`);
110
- }
111
- } else if (key === strategy) {
112
- config[key] = propsConfig[key] || globalConfig[key] || defaultConfig[key];
113
- } else if (key === defaults || key === defaultVariants) {
114
- config[key] = { ...defaultConfig[key], ...globalConfig[key], ...propsConfig[key] };
115
- } else if (key === compoundVariants) {
116
- config[key] = mergeCompoundVariants({
117
- defaultConfig: composedConfig,
118
- globalConfig,
119
- propsConfig,
120
- isReplace,
121
- key,
122
- });
123
- } else {
124
- const isObjectComposedConfig = typeof composedConfig[key] === "object";
125
- const isObjectGlobalConfig = typeof globalConfig[key] === "object";
126
- const isObjectPropsConfig = typeof propsConfig[key] === "object";
127
-
128
- const isObject = isObjectComposedConfig || isObjectGlobalConfig || isObjectPropsConfig;
129
- const isEmpty = composedConfig[key] === null;
130
- const isI18n = key === i18n;
131
-
132
- if (key === "variants" && !isVariants) {
133
- isVariants = true;
134
- }
135
-
136
- config[key] =
137
- isObject && !isEmpty && !isI18n
138
- ? mergeConfigs({
139
- defaultConfig: stringToObject(composedConfig[key], { addBase: !isVariants }),
140
- globalConfig: stringToObject(globalConfig[key], { addBase: !isVariants }),
141
- propsConfig: stringToObject(propsConfig[key], { addBase: !isVariants }),
142
- config: stringToObject(composedConfig[key], { addBase: !isVariants }),
143
- isReplace,
144
- isVariants,
145
- })
146
- : isReplace || isI18n
147
- ? propsConfig[key] || globalConfig[key] || defaultConfig[key]
148
- : cx([defaultConfig[key], globalConfig[key], propsConfig[key]]);
149
- }
150
- } else {
151
- config[key] = composedConfig[key];
152
- }
153
- }
154
-
155
- return config;
156
- }
157
-
158
- /**
159
- Turn simplified nested component config to regular config.
160
- @param {Object | String} value
161
- @param {Boolean} addBase
162
- @returns {Object}
163
- */
164
- function stringToObject(value, { addBase = false }) {
165
- if (value === undefined) value = "";
166
-
167
- return typeof value !== "object" ? addBase && { base: value } : value;
168
- }
169
-
170
- /**
171
- * Merge CVA compound variants arrays.
172
- * @param {Object} defaultConfig
173
- * @param {Object} globalConfig
174
- * @param {Object} propsConfig
175
- * @param {string} key
176
- * @param {boolean} isReplace - enables class replacement instead of merge.
177
- *
178
- * @returns {Array}
179
- */
180
- function mergeCompoundVariants({ defaultConfig, globalConfig, propsConfig, key, isReplace }) {
181
- if (
182
- (globalConfig[key] && !Array.isArray(globalConfig[key])) ||
183
- (propsConfig[key] && !Array.isArray(propsConfig[key])) ||
184
- (defaultConfig[key] && !Array.isArray(defaultConfig[key]))
185
- ) {
186
- // eslint-disable-next-line no-console
187
- console.error("CompoundVariants should be an array.");
188
- }
189
-
190
- let globalConfigUniqueItems = cloneDeep(globalConfig[key] || []);
191
- let propsConfigUniqueItems = cloneDeep(propsConfig[key] || []);
192
-
193
- const config = defaultConfig[key].map((defaultConfigItem) => {
194
- /**
195
- * Compare two objects by keys for match.
196
- * @param {Object} configItem
197
- * @returns {Boolean}
198
- */
199
- function isSameItem(configItem) {
200
- const hasConfigItemKeys = Object.keys(defaultConfigItem)
201
- .map((key) => defaultConfigItem[key] === configItem[key] || key === "class")
202
- .every((item) => !!item);
203
-
204
- const hasDefaultConfigItemKeys = Object.keys(configItem)
205
- .map((key) => defaultConfigItem[key] === configItem[key] || key === "class")
206
- .every((item) => !!item);
207
-
208
- return hasConfigItemKeys && hasDefaultConfigItemKeys;
209
- }
210
-
211
- /**
212
- * Find the same compound variant item in custom config if exist.
213
- * @param {Object} config
214
- * @returns {Object|undefined}
215
- */
216
- function findItem(config = []) {
217
- const globalConfigUniqueItemIndex = globalConfigUniqueItems.findIndex(isSameItem);
218
- const propsConfigUniqueItemIndex = propsConfigUniqueItems.findIndex(isSameItem);
219
-
220
- if (~globalConfigUniqueItemIndex) {
221
- globalConfigUniqueItems.splice(globalConfigUniqueItemIndex, 1);
222
- }
223
-
224
- if (~propsConfigUniqueItemIndex) {
225
- propsConfigUniqueItems.splice(propsConfigUniqueItemIndex, 1);
226
- }
227
-
228
- return config.find(isSameItem);
229
- }
230
-
231
- const globalConfigItem = findItem(globalConfig[key]);
232
- const propsConfigItem = findItem(propsConfig[key]);
233
-
234
- return globalConfigItem || propsConfigItem
235
- ? {
236
- ...defaultConfigItem,
237
- class: isReplace
238
- ? propsConfigItem?.class || globalConfigItem?.class || defaultConfigItem.class
239
- : cx([defaultConfigItem.class, globalConfigItem?.class, propsConfigItem?.class]),
240
- }
241
- : defaultConfigItem;
242
- });
243
-
244
- return [...config, ...globalConfigUniqueItems, ...propsConfigUniqueItems];
245
- }
246
-
247
- /**
248
- * Extend twMerge (tailwind merge) by vueless and user config:
249
- * All list of rules available here:
250
- * https://github.com/dcastil/tailwind-merge/blob/v2.3.0/src/lib/default-config.ts
251
- */
252
- const twMerge = extendTailwindMerge(
253
- merge(
254
- {
255
- extend: {
256
- theme: {
257
- spacing: ["safe-top", "safe-bottom", "safe-left", "safe-right"],
258
- },
259
- classGroups: {
260
- "ring-w": [{ ring: ["dynamic"] }],
261
- "ring-offset-w": [{ "ring-offset": ["dynamic"] }],
262
- "ring-offset-color": [{ "ring-offset": ["dynamic"] }],
263
- "font-size": [{ text: ["2xs"] }],
264
- rounded: [{ rounded: ["dynamic"] }],
265
- },
266
- },
267
- },
268
- vuelessConfig.tailwindMerge,
269
- ),
270
- );
271
-
272
- /**
273
- * Export cva (class variance authority) methods:
274
- * – extended with tailwind-merge
275
- * – remove all Vueless nested component names ({U...} strings) from class list string.
276
- * Learn more here: https://beta.cva.style
277
- */
278
- export const {
279
- cx,
280
- compose,
281
- cva: classVarianceAuthority,
282
- } = defineConfig({
283
- hooks: {
284
- onComplete: (classNames) => twMerge(classNames).replace(NESTED_COMPONENT_REG_EXP, ""),
285
- },
286
- });
287
-
288
- /* This allows skipping some CVA config keys in vueless config. */
289
- export const cva = ({ base = "", variants = {}, compoundVariants = [], defaultVariants = {} }) =>
290
- classVarianceAuthority({
291
- base,
292
- variants,
293
- compoundVariants,
294
- defaultVariants,
295
- });
296
-
297
- /**
298
- * Return default values for component props, icons, etc..
299
- * @param { Object } defaultConfig
300
- * @param { String } name
301
- *
302
- * @returns { Object }
303
- */
304
- export function getDefault(defaultConfig, name) {
305
- const defaults = merge(
306
- cloneDeep(defaultConfig.defaults),
307
- vuelessConfig.component ? vuelessConfig.component[name]?.defaults : {},
308
- );
309
-
310
- defaults.color = getColor(defaults.color);
311
-
312
- return defaults;
313
- }
314
-
315
- /**
316
- * Return `grayscale` color if in component config it `brand` but in vueless config it `grayscale`
317
- * Otherwise return given color.
318
- * @param { String } color
319
- *
320
- * @returns { String }
321
- */
322
- export function getColor(color) {
323
- return (vuelessConfig.brand ?? DEFAULT_BRAND_COLOR) === GRAYSCALE_COLOR && color === BRAND_COLOR
324
- ? GRAYSCALE_COLOR
325
- : color;
326
- }
327
-
328
- /**
329
- * Replace in tailwind classes `{color}` variable into given color.
330
- * @param { String } classes
331
- * @param { String } color
332
- *
333
- * @returns { String }
334
- */
335
- export function setColor(classes, color) {
336
- if (typeof classes !== "string") {
337
- return "";
338
- }
339
-
340
- return classes?.replaceAll("{color}", color);
341
- }
342
-
343
- /**
344
- * Generates simple unique identifier.
345
- * @param { Number } length
346
- *
347
- * @returns { String }
348
- */
349
- export function getRandomId(length = 15) {
350
- const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
351
- const charactersLength = characters.length;
352
-
353
- let id = "";
354
-
355
- while (id.length < length) {
356
- id += characters.charAt(Math.floor(Math.random() * charactersLength));
357
- }
358
-
359
- return id;
360
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes