vueless 0.0.579 → 0.0.580

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 (240) hide show
  1. package/composables/useUI.ts +46 -60
  2. package/constants.js +3 -0
  3. package/package.json +1 -1
  4. package/types.ts +39 -48
  5. package/ui.button/UButton.vue +2 -3
  6. package/ui.button/types.ts +2 -2
  7. package/ui.button-link/ULink.vue +23 -24
  8. package/ui.button-link/storybook/stories.ts +2 -2
  9. package/ui.button-link/types.ts +7 -6
  10. package/ui.button-toggle/UToggle.vue +15 -16
  11. package/ui.button-toggle/storybook/stories.ts +2 -2
  12. package/ui.button-toggle/types.ts +6 -4
  13. package/ui.button-toggle-item/UToggleItem.vue +29 -20
  14. package/ui.button-toggle-item/storybook/stories.ts +2 -2
  15. package/ui.button-toggle-item/types.ts +5 -4
  16. package/ui.container-accordion/UAccordion.vue +22 -17
  17. package/ui.container-accordion/storybook/stories.ts +2 -2
  18. package/ui.container-accordion/types.ts +5 -4
  19. package/ui.container-card/UCard.vue +12 -5
  20. package/ui.container-card/storybook/stories.ts +2 -2
  21. package/ui.container-card/types.ts +4 -3
  22. package/ui.container-col/UCol.vue +11 -12
  23. package/ui.container-col/storybook/stories.ts +2 -2
  24. package/ui.container-col/types.ts +5 -3
  25. package/ui.container-divider/UDivider.vue +13 -13
  26. package/ui.container-divider/storybook/stories.ts +2 -2
  27. package/ui.container-divider/types.ts +5 -3
  28. package/ui.container-group/UGroup.vue +10 -8
  29. package/ui.container-group/storybook/stories.ts +2 -2
  30. package/ui.container-group/types.ts +5 -3
  31. package/ui.container-groups/UGroups.vue +10 -7
  32. package/ui.container-groups/storybook/stories.ts +2 -2
  33. package/ui.container-groups/types.ts +5 -3
  34. package/ui.container-modal/UModal.vue +43 -43
  35. package/ui.container-modal/storybook/stories.ts +2 -3
  36. package/ui.container-modal/types.ts +5 -3
  37. package/ui.container-modal-confirm/UModalConfirm.vue +14 -17
  38. package/ui.container-modal-confirm/storybook/stories.ts +8 -6
  39. package/ui.container-modal-confirm/types.ts +5 -3
  40. package/ui.container-page/UPage.vue +32 -31
  41. package/ui.container-page/storybook/stories.ts +2 -2
  42. package/ui.container-page/types.ts +4 -3
  43. package/ui.container-row/URow.vue +10 -13
  44. package/ui.container-row/storybook/stories.ts +2 -2
  45. package/ui.container-row/types.ts +5 -3
  46. package/ui.data-list/UDataList.vue +40 -51
  47. package/ui.data-list/storybook/stories.ts +2 -2
  48. package/ui.data-list/types.ts +4 -4
  49. package/ui.data-table/UTable.vue +61 -60
  50. package/ui.data-table/types.ts +4 -3
  51. package/ui.dropdown-badge/UDropdownBadge.vue +21 -25
  52. package/ui.dropdown-badge/storybook/stories.ts +3 -3
  53. package/ui.dropdown-badge/types.ts +4 -3
  54. package/ui.dropdown-button/UDropdownButton.vue +20 -23
  55. package/ui.dropdown-button/storybook/stories.ts +3 -3
  56. package/ui.dropdown-button/types.ts +4 -3
  57. package/ui.dropdown-link/UDropdownLink.vue +20 -23
  58. package/ui.dropdown-link/storybook/stories.ts +3 -3
  59. package/ui.dropdown-link/types.ts +4 -3
  60. package/ui.dropdown-list/UDropdownList.vue +28 -32
  61. package/ui.dropdown-list/storybook/stories.ts +4 -4
  62. package/ui.dropdown-list/types.ts +4 -4
  63. package/ui.form-calendar/UCalendar.vue +36 -34
  64. package/ui.form-calendar/UCalendarDayView.vue +28 -23
  65. package/ui.form-calendar/UCalendarMonthView.vue +24 -19
  66. package/ui.form-calendar/UCalendarYearView.vue +24 -19
  67. package/ui.form-calendar/config.ts +2 -2
  68. package/ui.form-calendar/storybook/stories.ts +2 -2
  69. package/ui.form-calendar/types.ts +8 -7
  70. package/ui.form-checkbox/UCheckbox.vue +23 -21
  71. package/ui.form-checkbox/storybook/stories.ts +2 -2
  72. package/ui.form-checkbox/types.ts +7 -5
  73. package/ui.form-checkbox-group/UCheckboxGroup.vue +17 -14
  74. package/ui.form-checkbox-group/storybook/stories.ts +2 -2
  75. package/ui.form-checkbox-group/types.ts +6 -6
  76. package/ui.form-checkbox-multi-state/UCheckboxMultiState.vue +33 -14
  77. package/ui.form-checkbox-multi-state/storybook/stories.ts +2 -2
  78. package/ui.form-checkbox-multi-state/types.ts +4 -4
  79. package/ui.form-color-picker/UColorPicker.vue +23 -21
  80. package/ui.form-color-picker/storybook/stories.ts +2 -2
  81. package/ui.form-color-picker/types.ts +5 -5
  82. package/ui.form-date-picker/UDatePicker.vue +42 -27
  83. package/ui.form-date-picker/config.ts +5 -5
  84. package/ui.form-date-picker/types.ts +5 -2
  85. package/ui.form-date-picker-range/UDatePickerRange.vue +80 -53
  86. package/ui.form-date-picker-range/types.ts +7 -4
  87. package/ui.form-input/UInput.vue +32 -28
  88. package/ui.form-input/storybook/stories.ts +2 -2
  89. package/ui.form-input/types.ts +5 -3
  90. package/ui.form-input-file/UInputFile.vue +37 -32
  91. package/ui.form-input-file/storybook/stories.ts +2 -2
  92. package/ui.form-input-file/types.ts +6 -4
  93. package/ui.form-input-money/UInputMoney.vue +13 -18
  94. package/ui.form-input-money/storybook/stories.ts +2 -2
  95. package/ui.form-input-money/types.ts +5 -3
  96. package/ui.form-input-number/UInputNumber.vue +23 -24
  97. package/ui.form-input-number/types.ts +4 -2
  98. package/ui.form-input-rating/UInputRating.vue +24 -19
  99. package/ui.form-input-rating/storybook/stories.ts +2 -2
  100. package/ui.form-input-rating/types.ts +5 -3
  101. package/ui.form-input-search/UInputSearch.vue +22 -20
  102. package/ui.form-input-search/storybook/stories.ts +2 -2
  103. package/ui.form-input-search/types.ts +5 -3
  104. package/ui.form-label/ULabel.vue +19 -11
  105. package/ui.form-label/config.ts +0 -1
  106. package/ui.form-label/storybook/stories.ts +2 -2
  107. package/ui.form-label/types.ts +10 -8
  108. package/ui.form-radio/URadio.vue +22 -12
  109. package/ui.form-radio/storybook/stories.ts +2 -2
  110. package/ui.form-radio/types.ts +5 -5
  111. package/ui.form-radio-group/URadioGroup.vue +16 -12
  112. package/ui.form-radio-group/storybook/stories.ts +2 -2
  113. package/ui.form-radio-group/types.ts +7 -7
  114. package/ui.form-select/USelect.vue +53 -39
  115. package/ui.form-switch/USwitch.vue +30 -23
  116. package/ui.form-switch/storybook/stories.ts +2 -2
  117. package/ui.form-switch/types.ts +5 -3
  118. package/ui.form-textarea/UTextarea.vue +19 -15
  119. package/ui.form-textarea/storybook/stories.ts +2 -2
  120. package/ui.form-textarea/types.ts +5 -3
  121. package/ui.image-avatar/UAvatar.vue +12 -11
  122. package/ui.image-avatar/types.ts +4 -2
  123. package/ui.image-icon/UIcon.vue +31 -18
  124. package/ui.image-icon/storybook/stories.ts +2 -2
  125. package/ui.image-icon/types.ts +12 -5
  126. package/ui.loader/ULoader.vue +11 -9
  127. package/ui.loader/storybook/stories.ts +2 -2
  128. package/ui.loader/types.ts +10 -3
  129. package/ui.loader-overlay/ULoaderOverlay.vue +11 -7
  130. package/ui.loader-overlay/storybook/stories.ts +2 -2
  131. package/ui.loader-overlay/types.ts +4 -3
  132. package/ui.loader-progress/ULoaderProgress.vue +14 -10
  133. package/ui.loader-progress/storybook/stories.ts +2 -2
  134. package/ui.loader-progress/types.ts +4 -3
  135. package/ui.navigation-pagination/UPagination.vue +34 -33
  136. package/ui.navigation-pagination/storybook/stories.ts +2 -2
  137. package/ui.navigation-pagination/types.ts +4 -3
  138. package/ui.navigation-progress/StepperProgress.vue +25 -12
  139. package/ui.navigation-progress/UProgress.vue +12 -12
  140. package/ui.navigation-progress/types.ts +4 -3
  141. package/ui.navigation-tab/UTab.vue +18 -9
  142. package/ui.navigation-tab/storybook/stories.ts +2 -2
  143. package/ui.navigation-tab/types.ts +4 -3
  144. package/ui.navigation-tabs/UTabs.vue +13 -8
  145. package/ui.navigation-tabs/storybook/stories.ts +2 -2
  146. package/ui.navigation-tabs/types.ts +5 -5
  147. package/ui.other-dot/UDot.vue +10 -8
  148. package/ui.other-dot/storybook/stories.ts +2 -2
  149. package/ui.other-dot/types.ts +4 -3
  150. package/ui.text-alert/UAlert.vue +24 -27
  151. package/ui.text-alert/storybook/stories.ts +2 -2
  152. package/ui.text-alert/types.ts +4 -3
  153. package/ui.text-badge/UBadge.vue +25 -13
  154. package/ui.text-badge/storybook/stories.ts +2 -2
  155. package/ui.text-badge/types.ts +4 -3
  156. package/ui.text-block/UText.vue +10 -9
  157. package/ui.text-block/storybook/stories.ts +2 -2
  158. package/ui.text-block/types.ts +4 -3
  159. package/ui.text-empty/UEmpty.vue +22 -19
  160. package/ui.text-empty/storybook/stories.ts +2 -2
  161. package/ui.text-empty/types.ts +4 -3
  162. package/ui.text-file/UFile.vue +23 -20
  163. package/ui.text-file/storybook/stories.ts +2 -2
  164. package/ui.text-file/types.ts +4 -3
  165. package/ui.text-files/UFiles.vue +16 -10
  166. package/ui.text-files/storybook/stories.ts +2 -2
  167. package/ui.text-files/types.ts +4 -3
  168. package/ui.text-header/UHeader.vue +11 -11
  169. package/ui.text-header/storybook/stories.ts +2 -2
  170. package/ui.text-header/types.ts +4 -3
  171. package/ui.text-money/UMoney.vue +20 -27
  172. package/ui.text-money/storybook/stories.ts +2 -2
  173. package/ui.text-money/types.ts +4 -3
  174. package/ui.text-notify/UNotify.vue +58 -41
  175. package/ui.text-notify/config.ts +3 -3
  176. package/ui.text-notify/constants.ts +18 -20
  177. package/ui.text-notify/storybook/stories.ts +2 -2
  178. package/ui.text-notify/types.ts +10 -5
  179. package/ui.text-notify/utilNotify.ts +17 -11
  180. package/utils/helper.ts +5 -5
  181. package/utils/storybook.ts +11 -1
  182. package/utils/ui.ts +19 -9
  183. package/web-types.json +521 -368
  184. package/ui.button-link/useAttrs.ts +0 -20
  185. package/ui.button-toggle/useAttrs.ts +0 -12
  186. package/ui.button-toggle-item/useAttrs.ts +0 -29
  187. package/ui.container-accordion/useAttrs.ts +0 -26
  188. package/ui.container-card/useAttrs.ts +0 -12
  189. package/ui.container-col/useAttrs.ts +0 -12
  190. package/ui.container-divider/useAttrs.ts +0 -17
  191. package/ui.container-group/useAttrs.ts +0 -12
  192. package/ui.container-groups/useAttrs.ts +0 -12
  193. package/ui.container-modal/useAttrs.ts +0 -12
  194. package/ui.container-modal-confirm/useAttrs.ts +0 -12
  195. package/ui.container-page/useAttrs.ts +0 -12
  196. package/ui.container-row/useAttrs.ts +0 -12
  197. package/ui.data-list/useAttrs.ts +0 -12
  198. package/ui.data-table/useAttrs.ts +0 -31
  199. package/ui.dropdown-badge/useAttrs.ts +0 -26
  200. package/ui.dropdown-button/useAttrs.ts +0 -26
  201. package/ui.dropdown-link/useAttrs.ts +0 -26
  202. package/ui.dropdown-list/useAttrs.ts +0 -12
  203. package/ui.form-calendar/useAttrs.ts +0 -12
  204. package/ui.form-checkbox/useAttrs.ts +0 -29
  205. package/ui.form-checkbox-group/useAttrs.ts +0 -12
  206. package/ui.form-checkbox-multi-state/useAttrs.ts +0 -37
  207. package/ui.form-color-picker/useAttrs.ts +0 -15
  208. package/ui.form-date-picker/useAttrs.ts +0 -43
  209. package/ui.form-date-picker-range/useAttrs.ts +0 -53
  210. package/ui.form-input/useAttrs.ts +0 -31
  211. package/ui.form-input-file/useAttrs.ts +0 -21
  212. package/ui.form-input-money/useAttrs.ts +0 -15
  213. package/ui.form-input-number/useAttrs.ts +0 -15
  214. package/ui.form-input-rating/useAttrs.ts +0 -14
  215. package/ui.form-input-search/useAttrs.ts +0 -15
  216. package/ui.form-label/useAttrs.ts +0 -20
  217. package/ui.form-radio/useAttrs.ts +0 -29
  218. package/ui.form-radio-group/useAttrs.ts +0 -12
  219. package/ui.form-select/useAttrs.js +0 -19
  220. package/ui.form-switch/useAttrs.ts +0 -28
  221. package/ui.form-textarea/useAttrs.ts +0 -21
  222. package/ui.image-avatar/useAttrs.ts +0 -12
  223. package/ui.image-icon/useAttrs.ts +0 -12
  224. package/ui.loader/useAttrs.ts +0 -12
  225. package/ui.loader-overlay/useAttrs.ts +0 -12
  226. package/ui.loader-progress/useAttrs.ts +0 -12
  227. package/ui.navigation-pagination/useAttrs.ts +0 -12
  228. package/ui.navigation-progress/useAttrs.ts +0 -17
  229. package/ui.navigation-tab/useAttrs.ts +0 -28
  230. package/ui.navigation-tabs/useAttrs.ts +0 -12
  231. package/ui.other-dot/useAttrs.ts +0 -12
  232. package/ui.text-alert/useAttrs.ts +0 -12
  233. package/ui.text-badge/useAttrs.ts +0 -21
  234. package/ui.text-block/useAttrs.ts +0 -12
  235. package/ui.text-empty/useAttrs.ts +0 -12
  236. package/ui.text-file/useAttrs.ts +0 -12
  237. package/ui.text-files/useAttrs.ts +0 -12
  238. package/ui.text-header/useAttrs.ts +0 -12
  239. package/ui.text-money/useAttrs.ts +0 -12
  240. package/ui.text-notify/useAttrs.ts +0 -12
@@ -1,8 +1,9 @@
1
1
  import defaultConfig from "./config.ts";
2
+ import type { ComponentConfig } from "../types.ts";
2
3
 
3
- export type Config = Partial<typeof defaultConfig>;
4
+ export type Config = typeof defaultConfig;
4
5
 
5
- export interface UTextProps {
6
+ export interface Props {
6
7
  /**
7
8
  * HTML markdown or plain text.
8
9
  */
@@ -26,7 +27,7 @@ export interface UTextProps {
26
27
  /**
27
28
  * Component config object.
28
29
  */
29
- config?: Config;
30
+ config?: ComponentConfig<Config>;
30
31
 
31
32
  /**
32
33
  * Data-test attribute for automated testing.
@@ -1,35 +1,23 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from "vue";
3
3
 
4
+ import useUI from "../composables/useUI.ts";
5
+ import { getDefaults } from "../utils/ui.ts";
6
+
4
7
  import UIcon from "../ui.image-icon/UIcon.vue";
5
8
  import UHeader from "../ui.text-header/UHeader.vue";
6
- import { getDefault } from "../utils/ui.ts";
7
9
 
8
10
  import { UEmpty } from "./constants.ts";
9
11
  import defaultConfig from "./config.ts";
10
- import useAttrs from "./useAttrs.ts";
11
12
 
12
- import type { UEmptyProps, IconSize, TitleSize } from "./types.ts";
13
+ import type { Props, IconSize, TitleSize, Config } from "./types.ts";
13
14
 
14
15
  defineOptions({ inheritAttrs: false });
15
16
 
16
- const props = withDefaults(defineProps<UEmptyProps>(), {
17
- size: getDefault<UEmptyProps>(defaultConfig, UEmpty).size,
18
- dataTest: "",
19
- config: () => ({}),
17
+ const props = withDefaults(defineProps<Props>(), {
18
+ ...getDefaults<Props, Config>(defaultConfig, UEmpty),
20
19
  });
21
20
 
22
- const {
23
- config,
24
- titleAttrs,
25
- descriptionAttrs,
26
- wrapperAttrs,
27
- headerAttrs,
28
- footerAttrs,
29
- emptyIconWrapperAttrs,
30
- emptyIconAttrs,
31
- } = useAttrs(props);
32
-
33
21
  const iconSize = computed(() => {
34
22
  const sizes = {
35
23
  sm: "2xl",
@@ -49,6 +37,21 @@ const titleSize = computed(() => {
49
37
 
50
38
  return sizes[props.size] as TitleSize;
51
39
  });
40
+
41
+ /**
42
+ * Get element / nested component attributes for each config token ✨
43
+ * Applies: `class`, `config`, redefined default `props` and dev `vl-...` attributes.
44
+ */
45
+ const {
46
+ config,
47
+ titleAttrs,
48
+ descriptionAttrs,
49
+ wrapperAttrs,
50
+ headerAttrs,
51
+ footerAttrs,
52
+ emptyIconWrapperAttrs,
53
+ emptyIconAttrs,
54
+ } = useUI<Config>(defaultConfig);
52
55
  </script>
53
56
 
54
57
  <template>
@@ -59,7 +62,7 @@ const titleSize = computed(() => {
59
62
  <div v-bind="emptyIconWrapperAttrs">
60
63
  <UIcon
61
64
  internal
62
- :name="config.defaults?.emptyIcon"
65
+ :name="config.defaults.emptyIcon"
63
66
  color="gray"
64
67
  :size="iconSize"
65
68
  v-bind="emptyIconAttrs"
@@ -11,9 +11,9 @@ import UIcon from "../../ui.image-icon/UIcon.vue";
11
11
  import URow from "../../ui.container-row/URow.vue";
12
12
 
13
13
  import type { Meta, StoryFn } from "@storybook/vue3";
14
- import type { UEmptyProps } from "../types.ts";
14
+ import type { Props } from "../types.ts";
15
15
 
16
- interface UEmptyArgs extends UEmptyProps {
16
+ interface UEmptyArgs extends Props {
17
17
  slotTemplate?: string;
18
18
  enum: "size";
19
19
  }
@@ -1,11 +1,12 @@
1
1
  import defaultConfig from "./config.ts";
2
+ import type { ComponentConfig } from "../types.ts";
2
3
 
3
- export type Config = Partial<typeof defaultConfig>;
4
+ export type Config = typeof defaultConfig;
4
5
 
5
6
  export type IconSize = "2xl" | "3xl" | "4xl";
6
7
  export type TitleSize = "xs" | "sm" | "md";
7
8
 
8
- export interface UEmptyProps {
9
+ export interface Props {
9
10
  /**
10
11
  * Empty state title.
11
12
  */
@@ -24,7 +25,7 @@ export interface UEmptyProps {
24
25
  /**
25
26
  * Component config object.
26
27
  */
27
- config?: Config;
28
+ config?: ComponentConfig<Config>;
28
29
 
29
30
  /**
30
31
  * Data-test attribute for automated testing.
@@ -1,23 +1,22 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, ref, useId } from "vue";
3
3
 
4
+ import useUI from "../composables/useUI.ts";
5
+ import { getDefaults } from "../utils/ui.ts";
6
+
4
7
  import ULink from "../ui.button-link/ULink.vue";
5
8
  import UIcon from "../ui.image-icon/UIcon.vue";
6
9
 
7
- import { getDefault } from "../utils/ui.ts";
8
-
9
- import useAttrs from "./useAttrs.ts";
10
10
  import { UFile } from "./constants.ts";
11
11
  import defaultConfig from "./config.ts";
12
12
 
13
- import type { UFileProps, IconSize, RemoveIconSize } from "./types.ts";
13
+ import type { Props, IconSize, RemoveIconSize, Config } from "./types.ts";
14
14
 
15
15
  defineOptions({ inheritAttrs: false });
16
16
 
17
- const props = withDefaults(defineProps<UFileProps>(), {
18
- size: getDefault<UFileProps>(defaultConfig, UFile).size,
19
- dataTest: "",
20
- config: () => ({}),
17
+ const props = withDefaults(defineProps<Props>(), {
18
+ ...getDefaults<Props, Config>(defaultConfig, UFile),
19
+ label: "",
21
20
  });
22
21
 
23
22
  const emit = defineEmits([
@@ -32,16 +31,6 @@ const focus = ref(false);
32
31
 
33
32
  const elementId = props.id || useId();
34
33
 
35
- const {
36
- config,
37
- fileAttrs,
38
- bodyAttrs,
39
- fileIconAttrs,
40
- fileLabelAttrs,
41
- fileImageAttrs,
42
- removeIconAttrs,
43
- } = useAttrs(props);
44
-
45
34
  const iconSize = computed(() => {
46
35
  const sizes = {
47
36
  sm: "xs",
@@ -73,6 +62,20 @@ function onFocus() {
73
62
  function onBlur() {
74
63
  focus.value = false;
75
64
  }
65
+
66
+ /**
67
+ * Get element / nested component attributes for each config token ✨
68
+ * Applies: `class`, `config`, redefined default `props` and dev `vl-...` attributes.
69
+ */
70
+ const {
71
+ config,
72
+ fileAttrs,
73
+ bodyAttrs,
74
+ fileIconAttrs,
75
+ fileLabelAttrs,
76
+ fileImageAttrs,
77
+ removeIconAttrs,
78
+ } = useUI<Config>(defaultConfig);
76
79
  </script>
77
80
 
78
81
  <template>
@@ -89,7 +92,7 @@ function onBlur() {
89
92
  interactive
90
93
  color="gray"
91
94
  :size="iconSize"
92
- :name="config.defaults?.fileIcon"
95
+ :name="config.defaults.fileIcon"
93
96
  v-bind="fileIconAttrs"
94
97
  @focus="onFocus"
95
98
  @blur="onBlur"
@@ -106,7 +109,7 @@ function onBlur() {
106
109
  interactive
107
110
  color="gray"
108
111
  :size="removeIconSize"
109
- :name="config.defaults?.removeIcon"
112
+ :name="config.defaults.removeIcon"
110
113
  v-bind="removeIconAttrs"
111
114
  :data-test="`${dataTest}-remove-item`"
112
115
  @click.stop.prevent="onRemove"
@@ -8,9 +8,9 @@ import {
8
8
  import UFile from "../../ui.text-file/UFile.vue";
9
9
 
10
10
  import type { Meta, StoryFn } from "@storybook/vue3";
11
- import type { UFileProps } from "../types.ts";
11
+ import type { Props } from "../types.ts";
12
12
 
13
- interface UFileArgs extends UFileProps {
13
+ interface UFileArgs extends Props {
14
14
  slotTemplate?: string;
15
15
  }
16
16
 
@@ -1,11 +1,12 @@
1
1
  import defaultConfig from "./config.ts";
2
+ import type { ComponentConfig } from "../types.ts";
2
3
 
3
- export type Config = Partial<typeof defaultConfig>;
4
+ export type Config = typeof defaultConfig;
4
5
 
5
6
  export type IconSize = "xs" | "sm" | "md";
6
7
  export type RemoveIconSize = "2xs" | "xs" | "sm";
7
8
 
8
- export interface UFileProps {
9
+ export interface Props {
9
10
  /**
10
11
  * File url.
11
12
  */
@@ -39,7 +40,7 @@ export interface UFileProps {
39
40
  /**
40
41
  * Component config object.
41
42
  */
42
- config?: Config;
43
+ config?: ComponentConfig<Config>;
43
44
 
44
45
  /**
45
46
  * Data-test attribute for automated testing.
@@ -1,23 +1,25 @@
1
1
  <script setup lang="ts">
2
+ import { computed } from "vue";
3
+
4
+ import useUI from "../composables/useUI.ts";
5
+ import { getDefaults } from "../utils/ui.ts";
6
+
2
7
  import UFile from "../ui.text-file/UFile.vue";
3
8
  import ULabel from "../ui.form-label/ULabel.vue";
4
- import { getDefault } from "../utils/ui.ts";
5
9
 
6
10
  import { UFiles } from "./constants.ts";
7
11
  import defaultConfig from "./config.ts";
8
- import useAttrs from "./useAttrs.ts";
9
- import { computed } from "vue";
12
+
10
13
  import { getRandomId } from "../utils/helper.ts";
11
14
 
12
- import type { UFilesProps } from "./types.ts";
15
+ import type { Props, Config } from "./types.ts";
13
16
 
14
17
  defineOptions({ inheritAttrs: false });
15
18
 
16
- const props = withDefaults(defineProps<UFilesProps>(), {
17
- labelAlign: getDefault<UFilesProps>(defaultConfig, UFiles).labelAlign,
18
- size: getDefault<UFilesProps>(defaultConfig, UFiles).size,
19
+ const props = withDefaults(defineProps<Props>(), {
20
+ ...getDefaults<Props, Config>(defaultConfig, UFiles),
19
21
  fileList: () => [],
20
- dataTest: "",
22
+ label: "",
21
23
  });
22
24
 
23
25
  const emit = defineEmits([
@@ -28,8 +30,6 @@ const emit = defineEmits([
28
30
  "remove",
29
31
  ]);
30
32
 
31
- const { filesLabelAttrs, itemsAttrs, itemAttrs } = useAttrs(props);
32
-
33
33
  const formattedFileList = computed(() => {
34
34
  return props.fileList.map((file) => {
35
35
  if (file instanceof File) {
@@ -46,6 +46,12 @@ const formattedFileList = computed(() => {
46
46
  function onRemoveFile(fileId: string | number) {
47
47
  emit("remove", fileId);
48
48
  }
49
+
50
+ /**
51
+ * Get element / nested component attributes for each config token ✨
52
+ * Applies: `class`, `config`, redefined default `props` and dev `vl-...` attributes.
53
+ */
54
+ const { filesLabelAttrs, itemsAttrs, itemAttrs } = useUI<Config>(defaultConfig);
49
55
  </script>
50
56
 
51
57
  <template>
@@ -8,9 +8,9 @@ import {
8
8
  import UFiles from "../../ui.text-files/UFiles.vue";
9
9
 
10
10
  import type { Meta, StoryFn } from "@storybook/vue3";
11
- import type { UFilesProps } from "../types.ts";
11
+ import type { Props } from "../types.ts";
12
12
 
13
- interface UFilesArgs extends UFilesProps {
13
+ interface UFilesArgs extends Props {
14
14
  slotTemplate?: string;
15
15
  }
16
16
 
@@ -1,8 +1,9 @@
1
1
  import defaultConfig from "./config.ts";
2
+ import type { ComponentConfig } from "../types.ts";
2
3
 
3
- export type Config = Partial<typeof defaultConfig>;
4
+ export type Config = typeof defaultConfig;
4
5
 
5
- export interface UFilesProps {
6
+ export interface Props {
6
7
  /**
7
8
  * List of file objects.
8
9
  */
@@ -36,7 +37,7 @@ export interface UFilesProps {
36
37
  /**
37
38
  * Component config object.
38
39
  */
39
- config?: Config;
40
+ config?: ComponentConfig<Config>;
40
41
 
41
42
  /**
42
43
  * Data-test attribute for automated testing.
@@ -1,24 +1,24 @@
1
1
  <script setup lang="ts">
2
- import { getDefault } from "../utils/ui.ts";
2
+ import useUI from "../composables/useUI.ts";
3
+ import { getDefaults } from "../utils/ui.ts";
3
4
 
4
5
  import { UHeader } from "./constants.ts";
5
6
  import defaultConfig from "./config.ts";
6
- import useAttrs from "./useAttrs.ts";
7
7
 
8
- import type { UHeaderProps } from "./types.ts";
8
+ import type { Props, Config } from "./types.ts";
9
9
 
10
10
  defineOptions({ inheritAttrs: false });
11
11
 
12
- const props = withDefaults(defineProps<UHeaderProps>(), {
13
- size: getDefault<UHeaderProps>(defaultConfig, UHeader).size,
14
- color: getDefault<UHeaderProps>(defaultConfig, UHeader).color,
15
- tag: getDefault<UHeaderProps>(defaultConfig, UHeader).tag,
16
- line: getDefault<UHeaderProps>(defaultConfig, UHeader).line,
17
- underlined: getDefault<UHeaderProps>(defaultConfig, UHeader).underlined,
18
- dataTest: "",
12
+ withDefaults(defineProps<Props>(), {
13
+ ...getDefaults<Props, Config>(defaultConfig, UHeader),
14
+ label: "",
19
15
  });
20
16
 
21
- const { headerAttrs } = useAttrs(props);
17
+ /**
18
+ * Get element / nested component attributes for each config token ✨
19
+ * Applies: `class`, `config`, redefined default `props` and dev `vl-...` attributes.
20
+ */
21
+ const { headerAttrs } = useUI<Config>(defaultConfig);
22
22
  </script>
23
23
 
24
24
  <template>
@@ -9,9 +9,9 @@ import UHeader from "../../ui.text-header/UHeader.vue";
9
9
  import UCol from "../../ui.container-col/UCol.vue";
10
10
 
11
11
  import type { Meta, StoryFn } from "@storybook/vue3";
12
- import type { UHeaderProps } from "../types.ts";
12
+ import type { Props } from "../types.ts";
13
13
 
14
- interface UHeaderArgs extends UHeaderProps {
14
+ interface UHeaderArgs extends Props {
15
15
  slotTemplate?: string;
16
16
  enum: "size" | "color";
17
17
  }
@@ -1,8 +1,9 @@
1
1
  import defaultConfig from "./config.ts";
2
+ import type { ComponentConfig } from "../types.ts";
2
3
 
3
- export type Config = Partial<typeof defaultConfig>;
4
+ export type Config = typeof defaultConfig;
4
5
 
5
- export interface UHeaderProps {
6
+ export interface Props {
6
7
  /**
7
8
  * Header label.
8
9
  */
@@ -57,7 +58,7 @@ export interface UHeaderProps {
57
58
  /**
58
59
  * Component config object.
59
60
  */
60
- config?: Config;
61
+ config?: ComponentConfig<Config>;
61
62
 
62
63
  /**
63
64
  * Data-test attribute for automated testing.
@@ -1,44 +1,22 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from "vue";
3
3
 
4
- import { getDefault } from "../utils/ui.ts";
4
+ import useUI from "../composables/useUI.ts";
5
+ import { getDefaults } from "../utils/ui.ts";
5
6
  import { hasSlotContent } from "../utils/helper.ts";
6
7
 
7
8
  import { UMoney } from "./constants.ts";
8
9
  import defaultConfig from "./config.ts";
9
- import { useAttrs } from "./useAttrs.ts";
10
10
  import { separatedMoney, MONEY_SIGN_TYPE } from "./utilMoney.ts";
11
11
 
12
- import type { UMoneyProps } from "./types.ts";
12
+ import type { Props, Config } from "./types.ts";
13
13
 
14
14
  defineOptions({ inheritAttrs: false });
15
15
 
16
- const props = withDefaults(defineProps<UMoneyProps>(), {
17
- size: getDefault<UMoneyProps>(defaultConfig, UMoney).size,
18
- color: getDefault<UMoneyProps>(defaultConfig, UMoney).color,
19
- symbolAlign: getDefault<UMoneyProps>(defaultConfig, UMoney).symbolAlign,
20
- symbolDivided: getDefault<UMoneyProps>(defaultConfig, UMoney).symbolDivided,
21
- sign: getDefault<UMoneyProps>(defaultConfig, UMoney).sign,
22
- minFractionDigits: getDefault<UMoneyProps>(defaultConfig, UMoney).minFractionDigits,
23
- maxFractionDigits: getDefault<UMoneyProps>(defaultConfig, UMoney).maxFractionDigits,
24
- decimalSeparator: getDefault<UMoneyProps>(defaultConfig, UMoney).decimalSeparator,
25
- thousandsSeparator: getDefault<UMoneyProps>(defaultConfig, UMoney).thousandsSeparator,
26
- align: getDefault<UMoneyProps>(defaultConfig, UMoney).align,
27
- planned: getDefault<UMoneyProps>(defaultConfig, UMoney).planned,
28
- dataTest: "",
16
+ const props = withDefaults(defineProps<Props>(), {
17
+ ...getDefaults<Props, Config>(defaultConfig, UMoney),
29
18
  });
30
19
 
31
- const {
32
- moneyAttrs,
33
- sumAttrs,
34
- mathSignAttrs,
35
- integerAttrs,
36
- pennyAttrs,
37
- slotLeftAttrs,
38
- symbolAttrs,
39
- slotRightAttrs,
40
- } = useAttrs(props);
41
-
42
20
  const currencySymbolPosition = computed(() => {
43
21
  return {
44
22
  left: props.symbolAlign === "left",
@@ -68,6 +46,21 @@ const preparedMoney = computed(() => {
68
46
  props.thousandsSeparator,
69
47
  );
70
48
  });
49
+
50
+ /**
51
+ * Get element / nested component attributes for each config token ✨
52
+ * Applies: `class`, `config`, redefined default `props` and dev `vl-...` attributes.
53
+ */
54
+ const {
55
+ moneyAttrs,
56
+ sumAttrs,
57
+ mathSignAttrs,
58
+ integerAttrs,
59
+ pennyAttrs,
60
+ slotLeftAttrs,
61
+ symbolAttrs,
62
+ slotRightAttrs,
63
+ } = useUI<Config>(defaultConfig);
71
64
  </script>
72
65
 
73
66
  <template>
@@ -12,9 +12,9 @@ import DebitIcon from "../../ui.text-money/assets/debit.svg?component";
12
12
  import CreditIcon from "../../ui.text-money/assets/credit.svg?component";
13
13
 
14
14
  import type { Meta, StoryFn } from "@storybook/vue3";
15
- import type { UMoneyProps } from "../types.ts";
15
+ import type { Props } from "../types.ts";
16
16
 
17
- interface UMoneyArgs extends UMoneyProps {
17
+ interface UMoneyArgs extends Props {
18
18
  slotTemplate?: string;
19
19
  enum: "color" | "size" | "sign" | "symbolAlign" | "align";
20
20
  }
@@ -1,8 +1,9 @@
1
1
  import defaultConfig from "./config.ts";
2
+ import type { ComponentConfig } from "../types.ts";
2
3
 
3
- export type Config = Partial<typeof defaultConfig>;
4
+ export type Config = typeof defaultConfig;
4
5
 
5
- export interface UMoneyProps {
6
+ export interface Props {
6
7
  /**
7
8
  * Money value.
8
9
  */
@@ -92,7 +93,7 @@ export interface UMoneyProps {
92
93
  /**
93
94
  * Component config object.
94
95
  */
95
- config?: Config;
96
+ config?: ComponentConfig<Config>;
96
97
 
97
98
  /**
98
99
  * Data-test attribute for automated testing.