@byyuurin/ui 0.0.11 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/README.md +170 -58
  2. package/dist/module.d.mts +4 -13
  3. package/dist/module.json +4 -4
  4. package/dist/module.mjs +54 -20
  5. package/dist/runtime/components/Accordion.vue +28 -23
  6. package/dist/runtime/components/Accordion.vue.d.ts +51 -29
  7. package/dist/runtime/components/Alert.vue +47 -27
  8. package/dist/runtime/components/Alert.vue.d.ts +37 -25
  9. package/dist/runtime/components/App.vue +9 -8
  10. package/dist/runtime/components/App.vue.d.ts +22 -20
  11. package/dist/runtime/components/Avatar.vue +65 -21
  12. package/dist/runtime/components/Avatar.vue.d.ts +27 -13
  13. package/dist/runtime/components/AvatarGroup.vue +14 -10
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +12 -9
  15. package/dist/runtime/components/Badge.vue +64 -32
  16. package/dist/runtime/components/Badge.vue.d.ts +30 -29
  17. package/dist/runtime/components/Breadcrumb.vue +40 -22
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +48 -21
  19. package/dist/runtime/components/Button.vue +113 -52
  20. package/dist/runtime/components/Button.vue.d.ts +36 -20
  21. package/dist/runtime/components/Calendar.vue +50 -43
  22. package/dist/runtime/components/Calendar.vue.d.ts +58 -31
  23. package/dist/runtime/components/Card.vue +18 -14
  24. package/dist/runtime/components/Card.vue.d.ts +18 -14
  25. package/dist/runtime/components/Carousel.vue +99 -46
  26. package/dist/runtime/components/Carousel.vue.d.ts +46 -25
  27. package/dist/runtime/components/Checkbox.vue +60 -35
  28. package/dist/runtime/components/Checkbox.vue.d.ts +35 -28
  29. package/dist/runtime/components/CheckboxGroup.vue +131 -0
  30. package/dist/runtime/components/CheckboxGroup.vue.d.ts +89 -0
  31. package/dist/runtime/components/Chip.vue +35 -32
  32. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  33. package/dist/runtime/components/Collapsible.vue +13 -9
  34. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  35. package/dist/runtime/components/Drawer.vue +80 -70
  36. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  37. package/dist/runtime/components/DropdownMenu.vue +23 -16
  38. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  39. package/dist/runtime/components/DropdownMenuContent.vue +136 -106
  40. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  41. package/dist/runtime/components/FieldGroup.vue +33 -0
  42. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  43. package/dist/runtime/components/Form.vue +172 -88
  44. package/dist/runtime/components/Form.vue.d.ts +69 -44
  45. package/dist/runtime/components/FormField.vue +108 -0
  46. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  47. package/dist/runtime/components/Icon.vue +20 -0
  48. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  49. package/dist/runtime/components/Input.vue +84 -79
  50. package/dist/runtime/components/Input.vue.d.ts +55 -43
  51. package/dist/runtime/components/InputNumber.vue +66 -52
  52. package/dist/runtime/components/InputNumber.vue.d.ts +50 -109
  53. package/dist/runtime/components/InputTags.vue +155 -0
  54. package/dist/runtime/components/InputTags.vue.d.ts +85 -0
  55. package/dist/runtime/components/Kbd.vue +11 -5
  56. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  57. package/dist/runtime/components/Link.vue +54 -197
  58. package/dist/runtime/components/Link.vue.d.ts +17 -17
  59. package/dist/runtime/components/LinkBase.vue +11 -33
  60. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  61. package/dist/runtime/components/Marquee.vue +38 -0
  62. package/dist/runtime/components/Marquee.vue.d.ts +54 -0
  63. package/dist/runtime/components/Modal.vue +53 -39
  64. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  65. package/dist/runtime/components/NavigationMenu.vue +345 -0
  66. package/dist/runtime/components/NavigationMenu.vue.d.ts +216 -0
  67. package/dist/runtime/components/OverlayProvider.vue +3 -3
  68. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  69. package/dist/runtime/components/Pagination.vue +39 -47
  70. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  71. package/dist/runtime/components/PinInput.vue +46 -32
  72. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  73. package/dist/runtime/components/Popover.vue +33 -19
  74. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  75. package/dist/runtime/components/Progress.vue +31 -26
  76. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  77. package/dist/runtime/components/RadioGroup.vue +75 -48
  78. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  79. package/dist/runtime/components/ScrollArea.vue +33 -31
  80. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  81. package/dist/runtime/components/Select.vue +166 -76
  82. package/dist/runtime/components/Select.vue.d.ts +206 -65
  83. package/dist/runtime/components/Separator.vue +42 -16
  84. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  85. package/dist/runtime/components/Skeleton.vue +18 -6
  86. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  87. package/dist/runtime/components/Slider.vue +42 -24
  88. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  89. package/dist/runtime/components/Switch.vue +40 -31
  90. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  91. package/dist/runtime/components/Table.vue +329 -79
  92. package/dist/runtime/components/Table.vue.d.ts +152 -66
  93. package/dist/runtime/components/Tabs.vue +70 -23
  94. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  95. package/dist/runtime/components/Textarea.vue +102 -54
  96. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  97. package/dist/runtime/components/Timeline.vue +102 -0
  98. package/dist/runtime/components/Timeline.vue.d.ts +74 -0
  99. package/dist/runtime/components/Toast.vue +84 -38
  100. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  101. package/dist/runtime/components/ToastProvider.vue +31 -22
  102. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  103. package/dist/runtime/components/Tooltip.vue +33 -21
  104. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  105. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  106. package/dist/runtime/composables/defineShortcuts.js +129 -0
  107. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  108. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  109. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  110. package/dist/runtime/composables/useComponentIcons.js +4 -4
  111. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  112. package/dist/runtime/composables/useFieldGroup.js +14 -0
  113. package/dist/runtime/composables/useFormField.d.ts +62 -0
  114. package/dist/runtime/composables/useFormField.js +99 -0
  115. package/dist/runtime/composables/useKbd.d.ts +3 -2
  116. package/dist/runtime/composables/useKbd.js +3 -2
  117. package/dist/runtime/composables/useLocale.d.ts +68 -5
  118. package/dist/runtime/composables/useLocale.js +11 -11
  119. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  120. package/dist/runtime/composables/useOverlay.js +44 -30
  121. package/dist/runtime/composables/usePortal.d.ts +6 -0
  122. package/dist/runtime/composables/usePortal.js +17 -0
  123. package/dist/runtime/composables/useToast.d.ts +12 -5
  124. package/dist/runtime/composables/useToast.js +12 -7
  125. package/dist/runtime/locale/en.d.ts +30 -1
  126. package/dist/runtime/locale/en.js +2 -1
  127. package/dist/runtime/locale/index.d.ts +2 -2
  128. package/dist/runtime/locale/index.js +1 -1
  129. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  130. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  131. package/dist/runtime/plugins/colors.d.ts +2 -0
  132. package/dist/runtime/plugins/colors.js +50 -0
  133. package/dist/runtime/types/app.config.d.ts +6 -0
  134. package/dist/runtime/types/form.d.ts +58 -17
  135. package/dist/runtime/types/form.js +11 -0
  136. package/dist/runtime/types/index.d.ts +56 -8
  137. package/dist/runtime/types/index.js +49 -1
  138. package/dist/runtime/types/input.d.ts +8 -0
  139. package/dist/runtime/types/locale.d.ts +5 -0
  140. package/dist/runtime/types/style.d.ts +33 -0
  141. package/dist/runtime/types/style.js +0 -0
  142. package/dist/runtime/types/unocss.d.ts +4 -0
  143. package/dist/runtime/types/utils.d.ts +41 -37
  144. package/dist/runtime/utils/form.d.ts +5 -1
  145. package/dist/runtime/utils/form.js +49 -0
  146. package/dist/runtime/utils/index.d.ts +10 -13
  147. package/dist/runtime/utils/index.js +41 -48
  148. package/dist/runtime/utils/link.d.ts +3 -2
  149. package/dist/runtime/utils/link.js +16 -2
  150. package/dist/runtime/utils/locale.d.ts +5 -0
  151. package/dist/runtime/utils/locale.js +10 -0
  152. package/dist/runtime/utils/style.d.ts +94 -0
  153. package/dist/runtime/utils/style.js +37 -0
  154. package/dist/runtime/vue/components/Icon.vue +15 -0
  155. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  156. package/dist/runtime/vue/components/Link.vue +163 -0
  157. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  158. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  159. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  160. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  161. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  162. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  163. package/dist/runtime/vue/plugins/head.js +9 -0
  164. package/dist/runtime/vue/stubs.d.ts +16 -1
  165. package/dist/runtime/vue/stubs.js +32 -1
  166. package/dist/setup.d.mts +13 -0
  167. package/dist/setup.mjs +12 -0
  168. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  169. package/dist/shared/ui.DLOxhmP0.mjs +4242 -0
  170. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  171. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  172. package/dist/types.d.mts +3 -1
  173. package/dist/unocss.d.mts +12 -52
  174. package/dist/unocss.mjs +144 -254
  175. package/dist/unplugin.d.mts +13 -26
  176. package/dist/unplugin.mjs +193 -18
  177. package/dist/vite.d.mts +10 -1
  178. package/dist/vite.mjs +12 -3
  179. package/package.json +154 -87
  180. package/vue-plugin.d.ts +5 -0
  181. package/dist/module.d.ts +0 -13
  182. package/dist/module.mjs.map +0 -1
  183. package/dist/runtime/app/injections.d.ts +0 -9331
  184. package/dist/runtime/app/injections.js +0 -61
  185. package/dist/runtime/components/ButtonGroup.vue +0 -26
  186. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  187. package/dist/runtime/components/FormItem.vue +0 -90
  188. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  189. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  190. package/dist/runtime/composables/useButtonGroup.js +0 -9
  191. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  192. package/dist/runtime/composables/useFormItem.js +0 -64
  193. package/dist/runtime/composables/useTheme.d.ts +0 -9
  194. package/dist/runtime/composables/useTheme.js +0 -23
  195. package/dist/runtime/index.d.ts +0 -44
  196. package/dist/runtime/index.js +0 -44
  197. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  198. package/dist/runtime/theme/accordion.d.ts +0 -50
  199. package/dist/runtime/theme/accordion.js +0 -28
  200. package/dist/runtime/theme/alert.d.ts +0 -119
  201. package/dist/runtime/theme/alert.js +0 -47
  202. package/dist/runtime/theme/app.d.ts +0 -19
  203. package/dist/runtime/theme/app.js +0 -19
  204. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  205. package/dist/runtime/theme/avatar-group.js +0 -32
  206. package/dist/runtime/theme/avatar.d.ts +0 -50
  207. package/dist/runtime/theme/avatar.js +0 -34
  208. package/dist/runtime/theme/badge.d.ts +0 -76
  209. package/dist/runtime/theme/badge.js +0 -92
  210. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  211. package/dist/runtime/theme/breadcrumb.js +0 -44
  212. package/dist/runtime/theme/button-group.d.ts +0 -60
  213. package/dist/runtime/theme/button-group.js +0 -42
  214. package/dist/runtime/theme/button.d.ts +0 -184
  215. package/dist/runtime/theme/button.js +0 -164
  216. package/dist/runtime/theme/calendar.d.ts +0 -58
  217. package/dist/runtime/theme/calendar.js +0 -86
  218. package/dist/runtime/theme/card.d.ts +0 -56
  219. package/dist/runtime/theme/card.js +0 -37
  220. package/dist/runtime/theme/carousel.d.ts +0 -107
  221. package/dist/runtime/theme/carousel.js +0 -43
  222. package/dist/runtime/theme/checkbox.d.ts +0 -82
  223. package/dist/runtime/theme/checkbox.js +0 -54
  224. package/dist/runtime/theme/chip.d.ts +0 -61
  225. package/dist/runtime/theme/chip.js +0 -66
  226. package/dist/runtime/theme/collapsible.d.ts +0 -32
  227. package/dist/runtime/theme/collapsible.js +0 -10
  228. package/dist/runtime/theme/drawer.d.ts +0 -142
  229. package/dist/runtime/theme/drawer.js +0 -113
  230. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  231. package/dist/runtime/theme/dropdown-menu.js +0 -83
  232. package/dist/runtime/theme/form-item.d.ts +0 -70
  233. package/dist/runtime/theme/form-item.js +0 -34
  234. package/dist/runtime/theme/form.d.ts +0 -2
  235. package/dist/runtime/theme/form.js +0 -7
  236. package/dist/runtime/theme/index.d.ts +0 -41
  237. package/dist/runtime/theme/index.js +0 -41
  238. package/dist/runtime/theme/input-number.d.ts +0 -115
  239. package/dist/runtime/theme/input-number.js +0 -95
  240. package/dist/runtime/theme/input.d.ts +0 -172
  241. package/dist/runtime/theme/input.js +0 -151
  242. package/dist/runtime/theme/kbd.d.ts +0 -33
  243. package/dist/runtime/theme/kbd.js +0 -26
  244. package/dist/runtime/theme/link.d.ts +0 -38
  245. package/dist/runtime/theme/link.js +0 -26
  246. package/dist/runtime/theme/modal.d.ts +0 -42
  247. package/dist/runtime/theme/modal.js +0 -55
  248. package/dist/runtime/theme/pagination.d.ts +0 -74
  249. package/dist/runtime/theme/pagination.js +0 -17
  250. package/dist/runtime/theme/pinInput.d.ts +0 -94
  251. package/dist/runtime/theme/pinInput.js +0 -111
  252. package/dist/runtime/theme/popover.d.ts +0 -32
  253. package/dist/runtime/theme/popover.js +0 -13
  254. package/dist/runtime/theme/progress.d.ts +0 -180
  255. package/dist/runtime/theme/progress.js +0 -95
  256. package/dist/runtime/theme/radio-group.d.ts +0 -104
  257. package/dist/runtime/theme/radio-group.js +0 -61
  258. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  259. package/dist/runtime/theme/scroll-area.js +0 -33
  260. package/dist/runtime/theme/select.d.ts +0 -186
  261. package/dist/runtime/theme/select.js +0 -173
  262. package/dist/runtime/theme/separator.d.ts +0 -74
  263. package/dist/runtime/theme/separator.js +0 -53
  264. package/dist/runtime/theme/skeleton.d.ts +0 -2
  265. package/dist/runtime/theme/skeleton.js +0 -7
  266. package/dist/runtime/theme/slider.d.ts +0 -70
  267. package/dist/runtime/theme/slider.js +0 -52
  268. package/dist/runtime/theme/switch.d.ts +0 -116
  269. package/dist/runtime/theme/switch.js +0 -78
  270. package/dist/runtime/theme/table.d.ts +0 -86
  271. package/dist/runtime/theme/table.js +0 -36
  272. package/dist/runtime/theme/tabs.d.ts +0 -129
  273. package/dist/runtime/theme/tabs.js +0 -146
  274. package/dist/runtime/theme/textarea.d.ts +0 -90
  275. package/dist/runtime/theme/textarea.js +0 -116
  276. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  277. package/dist/runtime/theme/toast-provider.js +0 -97
  278. package/dist/runtime/theme/toast.d.ts +0 -83
  279. package/dist/runtime/theme/toast.js +0 -35
  280. package/dist/runtime/theme/tooltip.d.ts +0 -38
  281. package/dist/runtime/theme/tooltip.js +0 -11
  282. package/dist/runtime/types/components.d.ts +0 -42
  283. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  284. package/dist/runtime/utils/extend-theme.js +0 -27
  285. package/dist/runtime/utils/styler.d.ts +0 -4
  286. package/dist/runtime/utils/styler.js +0 -10
  287. package/dist/runtime/utils/translator.d.ts +0 -18
  288. package/dist/runtime/utils/translator.js +0 -8
  289. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  290. package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
  291. package/dist/unocss.d.ts +0 -52
  292. package/dist/unocss.mjs.map +0 -1
  293. package/dist/unplugin.d.ts +0 -26
  294. package/dist/unplugin.mjs.map +0 -1
  295. package/dist/vite.d.ts +0 -9
  296. package/dist/vite.mjs.map +0 -1
  297. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -3,13 +3,14 @@
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { reactiveOmit } from "@vueuse/core";
7
- import { diff, isEqual } from "ohash/utils";
6
+ import { reactiveOmit, reactivePick } from "@vueuse/core";
7
+ import { isEqual } from "ohash/utils";
8
8
  import { useForwardProps } from "reka-ui";
9
- import { hasProtocol } from "ufo";
10
- import { computed, getCurrentInstance, resolveComponent } from "vue";
11
- import { useNuxtApp, useRoute } from "#imports";
12
- import { useTheme } from "../composables/useTheme";
9
+ import { computed } from "vue";
10
+ import theme from "#build/ui/link";
11
+ import { useAppConfig, useRoute } from "#imports";
12
+ import { isPartiallyEqual } from "../utils/link";
13
+ import { cv, merge } from "../utils/style";
13
14
  import LinkBase from "./LinkBase.vue";
14
15
  defineOptions({ inheritAttrs: false });
15
16
  const props = defineProps({
@@ -17,21 +18,19 @@ const props = defineProps({
17
18
  type: { type: null, required: false, default: "button" },
18
19
  label: { type: String, required: false },
19
20
  disabled: { type: Boolean, required: false },
20
- active: { type: Boolean, required: false },
21
+ active: { type: Boolean, required: false, default: void 0 },
21
22
  exact: { type: Boolean, required: false },
22
23
  exactQuery: { type: [Boolean, String], required: false },
23
24
  exactHash: { type: Boolean, required: false },
24
25
  inactiveClass: { type: String, required: false },
25
- disableClass: { type: String, required: false },
26
26
  custom: { type: Boolean, required: false },
27
- underline: { type: Boolean, required: false },
28
27
  raw: { type: Boolean, required: false },
29
- class: { type: null, required: false },
28
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
30
29
  to: { type: null, required: false },
31
30
  href: { type: null, required: false },
32
31
  external: { type: Boolean, required: false },
33
- target: { type: [String, Object, null], required: false },
34
- rel: { type: [String, Object, null], required: false },
32
+ target: { type: [String, Object], required: false },
33
+ rel: { type: [String, Object], required: false },
35
34
  noRel: { type: Boolean, required: false },
36
35
  prefetchedClass: { type: String, required: false },
37
36
  prefetch: { type: Boolean, required: false },
@@ -39,75 +38,25 @@ const props = defineProps({
39
38
  noPrefetch: { type: Boolean, required: false },
40
39
  activeClass: { type: String, required: false },
41
40
  exactActiveClass: { type: String, required: false },
42
- ariaCurrentValue: { type: String, required: false },
41
+ ariaCurrentValue: { type: String, required: false, default: "page" },
43
42
  viewTransition: { type: Boolean, required: false },
44
43
  replace: { type: Boolean, required: false }
45
44
  });
46
45
  defineSlots();
47
- const hasRouter = computed(() => {
48
- const app = getCurrentInstance()?.appContext.app;
49
- return !!app?.config?.globalProperties?.$router;
50
- });
51
- const nuxtApp = useNuxtApp();
52
- const hasNuxtLink = !!nuxtApp.$router;
53
- const linkComponent = computed(() => ({
54
- NuxtLink: nuxtApp.$router ? resolveComponent("NuxtLink") : null,
55
- RouterLink: hasRouter.value ? resolveComponent("RouterLink") : null
56
- }));
57
- const route = computed(() => {
58
- if (!hasRouter.value)
59
- return null;
60
- try {
61
- return useRoute();
62
- } catch {
63
- return null;
64
- }
65
- });
66
- const linkProps = useForwardProps(reactiveOmit(
67
- props,
68
- "as",
69
- "type",
70
- "disabled",
71
- "active",
72
- "exact",
73
- "exactQuery",
74
- "exactHash",
75
- "activeClass",
76
- "inactiveClass",
77
- "raw",
78
- "class",
79
- ...hasNuxtLink ? [] : ["to"]
80
- ));
81
- function isPartiallyEqual(item1, item2) {
82
- const diffedKeys = diff(item1, item2).reduce((filtered, q) => {
83
- if (q.type === "added")
84
- filtered.add(q.key);
85
- return filtered;
86
- }, /* @__PURE__ */ new Set());
87
- const item1Filtered = Object.fromEntries(Object.entries(item1).filter(([key]) => !diffedKeys.has(key)));
88
- const item2Filtered = Object.fromEntries(Object.entries(item2).filter(([key]) => !diffedKeys.has(key)));
89
- return isEqual(item1Filtered, item2Filtered);
90
- }
91
- const isExternalLink = computed(() => {
92
- const to = props.to || props.href;
93
- if (!to)
94
- return false;
95
- if (props.target === "_blank")
96
- return true;
97
- return typeof to === "string" && hasProtocol(to, { acceptRelative: true });
98
- });
46
+ const route = useRoute();
47
+ const inheritProps = useForwardProps(reactivePick(props, "as", "type", "disabled"));
48
+ const nuxtLinkProps = useForwardProps(reactiveOmit(props, "as", "type", "disabled", "active", "exact", "exactQuery", "exactHash", "activeClass", "inactiveClass", "to", "href", "raw", "custom", "class"));
49
+ const to = computed(() => props.to ?? props.href);
99
50
  function isLinkActive({ route: linkRoute, isActive, isExactActive }) {
100
51
  if (props.active !== void 0)
101
52
  return props.active;
102
- if (isExternalLink.value || !props.to)
103
- return false;
104
53
  if (props.exactQuery === "partial") {
105
- if (!isPartiallyEqual(linkRoute?.query, route.value?.query))
54
+ if (!isPartiallyEqual(linkRoute.query, route.query))
106
55
  return false;
107
- } else if (props.exactQuery === true && !isEqual(linkRoute?.query, route.value?.query)) {
56
+ } else if (props.exactQuery === true && !isEqual(linkRoute.query, route.query)) {
108
57
  return false;
109
58
  }
110
- if (props.exactHash && linkRoute?.hash !== route.value?.hash)
59
+ if (props.exactHash && linkRoute.hash !== route.hash)
111
60
  return false;
112
61
  if (props.exact && isExactActive)
113
62
  return true;
@@ -115,139 +64,47 @@ function isLinkActive({ route: linkRoute, isActive, isExactActive }) {
115
64
  return true;
116
65
  return false;
117
66
  }
118
- const { theme, createStyler } = useTheme();
119
- function resolveLinkClass({ route: route2, isActive, isExactActive } = {}) {
120
- const { link } = theme.value;
121
- const active = isLinkActive({ route: route2, isActive, isExactActive });
122
- if (props.raw)
123
- return [props.class, active ? props.activeClass : props.inactiveClass];
124
- const styler = createStyler({
125
- ...link,
67
+ const appConfig = useAppConfig();
68
+ const ui = computed(() => {
69
+ const link = merge(theme, {
70
+ ...appConfig.ui.link,
126
71
  variants: {
127
- ...link.variants,
72
+ ...appConfig.ui.link?.variants,
128
73
  active: {
129
- true: [link.variants.active.true, props.activeClass],
130
- false: [link.variants.active.false, props.inactiveClass]
131
- },
132
- disabled: {
133
- true: [link.variants.disabled.true, props.disableClass]
74
+ true: [appConfig.ui.link?.variants?.active?.true, props.activeClass].filter(Boolean).join(" "),
75
+ false: [appConfig.ui.link?.variants?.active?.false, props.inactiveClass].filter(Boolean).join(" ")
134
76
  }
135
77
  }
136
78
  });
137
- return styler({ ...props, active }).base();
79
+ return cv(link)();
80
+ });
81
+ function resolveLinkClass({ route: route2, isActive, isExactActive }) {
82
+ const active = isLinkActive({ route: route2, isActive, isExactActive });
83
+ if (props.raw)
84
+ return [props.class, active ? props.activeClass : props.inactiveClass];
85
+ return ui.value.base({ ...props, active });
138
86
  }
139
87
  </script>
140
88
 
141
89
  <template>
142
- <template v-if="hasRouter">
143
- <component
144
- :is="linkComponent.NuxtLink"
145
- v-if="hasNuxtLink"
146
- v-slot="{ href, navigate, route: linkRoute, rel, target, isExternal, isActive, isExactActive }"
147
- v-bind="linkProps"
148
- :href="to ? void 0 : href"
149
- custom
150
- >
151
- <template v-if="custom">
152
- <slot
153
- v-bind="{
90
+ <NuxtLink
91
+ v-slot="{ href, navigate, route: linkRoute, rel, target, isExternal, isActive, isExactActive }"
92
+ v-bind="nuxtLinkProps"
93
+ :to="to"
94
+ custom
95
+ >
96
+ <template v-if="custom">
97
+ <slot
98
+ v-bind="{
154
99
  ...$attrs,
155
- as,
156
- type,
157
- disabled,
100
+ ...props.exact && isExactActive ? { 'aria-current': props.ariaCurrentValue } : {},
101
+ ...inheritProps,
158
102
  href,
159
103
  navigate,
160
104
  rel,
161
105
  target,
162
106
  isExternal,
163
107
  active: isLinkActive({ route: linkRoute, isActive, isExactActive })
164
- }"
165
- >
166
- {{ props.label }}
167
- </slot>
168
- </template>
169
- <LinkBase
170
- v-else
171
- v-bind="{
172
- ...$attrs,
173
- as,
174
- type,
175
- disabled,
176
- href,
177
- navigate,
178
- rel,
179
- target,
180
- isExternal
181
- }"
182
- :class="resolveLinkClass({ route: linkRoute, isActive, isExactActive })"
183
- :data-part="$attrs['data-part'] ?? 'base'"
184
- >
185
- <slot :active="isLinkActive({ route: linkRoute, isActive, isExactActive })">
186
- {{ props.label }}
187
- </slot>
188
- </LinkBase>
189
- </component>
190
- <component
191
- :is="linkComponent.RouterLink"
192
- v-else
193
- v-slot="{ href, navigate, route: linkRoute, isActive, isExactActive }"
194
- v-bind="linkProps"
195
- :to="isExternalLink ? '#' : to || '#'"
196
- custom
197
- >
198
- <template v-if="custom">
199
- <slot
200
- v-bind="{
201
- ...$attrs,
202
- ...isExternalLink ? {
203
- href: to || props.href,
204
- target: props.target
205
- } : {
206
- href: to ? href : void 0,
207
- target: void 0
208
- },
209
- as,
210
- type,
211
- disabled,
212
- navigate,
213
- active: isLinkActive({ route: linkRoute, isActive, isExactActive }),
214
- isExternal: isExternalLink
215
- }"
216
- >
217
- {{ props.label }}
218
- </slot>
219
- </template>
220
- <LinkBase
221
- v-else
222
- v-bind="{
223
- ...$attrs,
224
- as,
225
- type,
226
- disabled,
227
- href: to ? href : void 0,
228
- navigate
229
- }"
230
- :is-external="isExternalLink"
231
- :class="resolveLinkClass({ route: linkRoute, isActive, isExactActive })"
232
- :data-part="$attrs['data-part'] ?? 'base'"
233
- >
234
- <slot :active="isLinkActive({ route: linkRoute, isActive, isExactActive })">
235
- {{ props.label }}
236
- </slot>
237
- </LinkBase>
238
- </component>
239
- </template>
240
- <template v-else>
241
- <template v-if="props.custom">
242
- <slot
243
- v-bind="{
244
- ...$attrs,
245
- as,
246
- type,
247
- disabled,
248
- href: to || href,
249
- target: target || (isExternalLink ? '_blank' : void 0),
250
- active: false
251
108
  }"
252
109
  >
253
110
  {{ props.label }}
@@ -257,19 +114,19 @@ function resolveLinkClass({ route: route2, isActive, isExactActive } = {}) {
257
114
  v-else
258
115
  v-bind="{
259
116
  ...$attrs,
260
- as,
261
- type,
262
- disabled,
263
- href: typeof to === 'string' ? to : href,
264
- target: target || (isExternalLink ? '_blank' : void 0)
117
+ ...props.exact && isExactActive ? { 'aria-current': props.ariaCurrentValue } : {},
118
+ ...inheritProps,
119
+ href,
120
+ navigate,
121
+ rel,
122
+ target,
123
+ isExternal
265
124
  }"
266
- :is-external="isExternalLink"
267
- :class="resolveLinkClass()"
268
- :data-part="$attrs['data-part'] ?? 'base'"
125
+ :class="resolveLinkClass({ route: linkRoute, isActive, isExactActive })"
269
126
  >
270
- <slot :active="false">
127
+ <slot :active="isLinkActive({ route: linkRoute, isActive, isExactActive })">
271
128
  {{ props.label }}
272
129
  </slot>
273
130
  </LinkBase>
274
- </template>
131
+ </NuxtLink>
275
132
  </template>
@@ -1,13 +1,8 @@
1
1
  import type { PrimitiveProps } from 'reka-ui';
2
2
  import type { ButtonHTMLAttributes } from 'vue';
3
3
  import type { RouteLocationRaw, RouterLinkProps } from 'vue-router';
4
- import type { link } from '../theme/index.js';
5
- import type { ComponentAttrs } from '../types/index.js';
6
- export interface LinkSlots {
7
- default?: (props: {
8
- active: boolean;
9
- }) => any;
10
- }
4
+ import type { ComponentBaseProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
11
6
  interface NuxtLinkProps extends Omit<RouterLinkProps, 'to'> {
12
7
  /**
13
8
  * Route Location the link should navigate to when clicked on.
@@ -24,11 +19,11 @@ interface NuxtLinkProps extends Omit<RouterLinkProps, 'to'> {
24
19
  /**
25
20
  * Where to display the linked URL, as the name for a browsing context.
26
21
  */
27
- target?: '_blank' | '_parent' | '_self' | '_top' | (string & {}) | null;
22
+ target?: '_blank' | '_parent' | '_self' | '_top' | (string & {});
28
23
  /**
29
24
  * A rel attribute value to apply on the link. Defaults to "noopener noreferrer" for external links.
30
25
  */
31
- rel?: 'noopener' | 'noreferrer' | 'nofollow' | 'sponsored' | 'ugc' | (string & {}) | null;
26
+ rel?: 'noopener' | 'noreferrer' | 'nofollow' | 'sponsored' | 'ugc' | (string & {});
32
27
  /**
33
28
  * If set to true, no rel attribute will be added to the link
34
29
  */
@@ -53,7 +48,7 @@ interface NuxtLinkProps extends Omit<RouterLinkProps, 'to'> {
53
48
  */
54
49
  noPrefetch?: boolean;
55
50
  }
56
- export interface LinkProps extends Omit<ComponentAttrs<typeof link>, 'ui'>, NuxtLinkProps {
51
+ export interface LinkProps extends ComponentBaseProps, NuxtLinkProps {
57
52
  /**
58
53
  * The element or component this component should render as when not a link.
59
54
  * @default "button"
@@ -70,23 +65,28 @@ export interface LinkProps extends Omit<ComponentAttrs<typeof link>, 'ui'>, Nuxt
70
65
  active?: boolean;
71
66
  /** Will only be active if the current route is an exact match. */
72
67
  exact?: boolean;
73
- /** Will only be active if the current route query is an exact match. */
68
+ /** Allows controlling how the current route query sets the link as active. */
74
69
  exactQuery?: boolean | 'partial';
75
70
  /** Will only be active if the current route hash is an exact match. */
76
71
  exactHash?: boolean;
77
72
  /** The class to apply when the link is inactive. */
78
73
  inactiveClass?: string;
79
- /** The class to apply when the link is disabled. */
80
- disableClass?: string;
81
74
  custom?: boolean;
82
- underline?: boolean;
83
- /** When `true`, only styles from `class`, `ui.active`, and `ui.inactive` will be applied. */
75
+ /** When `true`, only styles from `class`, `activeClass`, and `inactiveClass` will be applied. */
84
76
  raw?: boolean;
85
77
  }
86
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<LinkProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkProps> & Readonly<{}>, {
87
- type: "button" | "submit" | "reset";
78
+ export interface LinkSlots {
79
+ default: StaticSlot<{
80
+ active: boolean;
81
+ }>;
82
+ }
83
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<LinkProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkProps> & Readonly<{}>, {
84
+ active: boolean;
85
+ type: "reset" | "submit" | "button";
86
+ ariaCurrentValue: "page" | "step" | "location" | "date" | "time" | "true" | "false";
88
87
  as: import("reka-ui").AsTag | import("vue").Component;
89
88
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, LinkSlots>;
89
+ declare const _default: typeof __VLS_export;
90
90
  export default _default;
91
91
  type __VLS_WithSlots<T, S> = T & {
92
92
  new (): {
@@ -12,38 +12,19 @@ const props = defineProps({
12
12
  onClick: { type: [Function, Array], required: false },
13
13
  href: { type: String, required: false },
14
14
  navigate: { type: Function, required: false },
15
- rel: { type: String, required: false },
16
- target: { type: String, required: false },
15
+ target: { type: null, required: false },
16
+ rel: { type: null, required: false },
17
+ active: { type: Boolean, required: false },
17
18
  isExternal: { type: Boolean, required: false }
18
19
  });
19
- const wrapperProps = computed(() => {
20
- const { href, rel, target, disabled } = props;
21
- const baseProps = {
22
- rel,
23
- target
24
- };
25
- if (props.href) {
26
- return {
27
- ...baseProps,
28
- "as": "a",
29
- "href": disabled ? void 0 : href,
30
- "aria-disabled": disabled ? "true" : void 0,
31
- "role": disabled ? "link" : void 0,
32
- "tabindex": disabled ? -1 : void 0
33
- };
20
+ const linkProps = computed(() => {
21
+ const { as, type, href, rel, target, disabled } = props;
22
+ if (href) {
23
+ return disabled ? { as: "a", ariaDisabled: "true", role: "link", tabindex: -1, rel, target } : { as: "a", href, rel, target };
34
24
  }
35
- if (props.as === "button") {
36
- return {
37
- ...baseProps,
38
- as: props.as,
39
- type: props.type,
40
- disabled
41
- };
42
- }
43
- return {
44
- ...baseProps,
45
- as: props.as
46
- };
25
+ if (as === "button")
26
+ return { as, type, disabled, rel, target };
27
+ return { as, rel, target };
47
28
  });
48
29
  function onClickWrapper(e) {
49
30
  if (props.disabled) {
@@ -61,10 +42,7 @@ function onClickWrapper(e) {
61
42
  </script>
62
43
 
63
44
  <template>
64
- <Primitive
65
- v-bind="wrapperProps"
66
- @click="onClickWrapper"
67
- >
45
+ <Primitive v-bind="linkProps" @click="onClickWrapper">
68
46
  <slot></slot>
69
47
  </Primitive>
70
48
  </template>
@@ -1,25 +1,30 @@
1
1
  import type { PrimitiveProps } from 'reka-ui';
2
+ import type { LinkProps } from '../types';
3
+ import type { MaybeNull } from '../types/utils';
2
4
  export interface LinkBaseProps {
3
5
  /**
4
6
  * The element or component this component should render as.
5
7
  * @default "button"
6
8
  */
7
9
  as?: PrimitiveProps['as'];
10
+ /** @default "button" */
8
11
  type?: string;
9
12
  disabled?: boolean;
10
13
  onClick?: ((e: MouseEvent) => void | Promise<void>) | Array<((e: MouseEvent) => void | Promise<void>)>;
11
14
  href?: string;
12
15
  navigate?: (e: MouseEvent) => void;
13
- rel?: string;
14
- target?: string;
16
+ target?: MaybeNull<LinkProps['target']>;
17
+ rel?: MaybeNull<LinkProps['rel']>;
18
+ active?: boolean;
15
19
  isExternal?: boolean;
16
20
  }
17
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<LinkBaseProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkBaseProps> & Readonly<{}>, {
21
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<LinkBaseProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LinkBaseProps> & Readonly<{}>, {
18
22
  type: string;
19
23
  as: import("reka-ui").AsTag | import("vue").Component;
20
24
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
21
25
  default?: (props: {}) => any;
22
26
  }>;
27
+ declare const _default: typeof __VLS_export;
23
28
  export default _default;
24
29
  type __VLS_WithSlots<T, S> = T & {
25
30
  new (): {
@@ -0,0 +1,38 @@
1
+ <script>
2
+ import theme from "#build/ui/marquee";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { Primitive } from "reka-ui";
7
+ import { computed } from "vue";
8
+ import { useAppConfig } from "#imports";
9
+ import { cv, merge } from "../utils/style";
10
+ const props = defineProps({
11
+ as: { type: null, required: false },
12
+ pauseOnHover: { type: Boolean, required: false },
13
+ reverse: { type: Boolean, required: false },
14
+ orientation: { type: null, required: false, default: "horizontal" },
15
+ repeat: { type: Number, required: false, default: 4 },
16
+ overlay: { type: Boolean, required: false, default: true },
17
+ ui: { type: null, required: false },
18
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
19
+ });
20
+ defineSlots();
21
+ const appConfig = useAppConfig();
22
+ const ui = computed(() => {
23
+ const styler = cv(merge(theme, appConfig.ui.marquee));
24
+ return styler(props);
25
+ });
26
+ </script>
27
+
28
+ <template>
29
+ <Primitive :as="props.as" :data-orientation="props.orientation" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
30
+ <div v-for="i in props.repeat" :key="i" :class="ui.content({ class: props.ui?.content })" data-part="content">
31
+ <slot></slot>
32
+ </div>
33
+ </Primitive>
34
+ </template>
35
+
36
+ <style>
37
+ @keyframes marquee{0%{transform:translateZ(0)}to{transform:translate3d(calc(-100% - var(--gap)),0,0)}}@keyframes marquee-rtl{0%{transform:translateZ(0)}to{transform:translate3d(calc(100% + var(--gap)),0,0)}}@keyframes marquee-vertical{0%{transform:translateZ(0)}to{transform:translate3d(0,calc(-100% - var(--gap)),0)}}@keyframes marquee-vertical-rtl{0%{transform:translate3d(0,calc(-100% - var(--gap)),0)}to{transform:translate3d(0,calc(-100%*var(--gap)),0)}}
38
+ </style>
@@ -0,0 +1,54 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { PrimitiveProps } from 'reka-ui';
3
+ import theme from '#build/ui/marquee';
4
+ import type { ComponentBaseProps, ComponentStyler } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface MarqueeProps extends ComponentBaseProps {
8
+ /**
9
+ * The element or component this component should render as.
10
+ * @default "div"
11
+ */
12
+ as?: PrimitiveProps['as'];
13
+ /**
14
+ * Pause the marquee on hover.
15
+ * @default false
16
+ */
17
+ pauseOnHover?: boolean;
18
+ /**
19
+ * Reverse the direction of the marquee.
20
+ * @default false
21
+ */
22
+ reverse?: boolean;
23
+ /**
24
+ * The orientation of the marquee.
25
+ * @default "horizontal"
26
+ */
27
+ orientation?: ThemeVariants['orientation'];
28
+ /**
29
+ * The number of times the marquee should repeat.
30
+ * @default 4
31
+ */
32
+ repeat?: number;
33
+ /**
34
+ * Display an overlay on the marquee.
35
+ * @default true
36
+ */
37
+ overlay?: boolean;
38
+ ui?: ComponentStyler<typeof theme>;
39
+ }
40
+ export interface MarqueeSlots {
41
+ default: StaticSlot;
42
+ }
43
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<MarqueeProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MarqueeProps> & Readonly<{}>, {
44
+ overlay: boolean;
45
+ repeat: number;
46
+ orientation: "horizontal" | "vertical";
47
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, MarqueeSlots>;
48
+ declare const _default: typeof __VLS_export;
49
+ export default _default;
50
+ type __VLS_WithSlots<T, S> = T & {
51
+ new (): {
52
+ $slots: S;
53
+ };
54
+ };