@bitrix24/b24ui-nuxt 0.5.10 → 0.5.11

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 (190) hide show
  1. package/dist/meta.cjs +72112 -0
  2. package/dist/meta.d.cts +72110 -0
  3. package/dist/meta.d.mts +5060 -5060
  4. package/dist/meta.d.ts +72110 -0
  5. package/dist/meta.mjs +5060 -5060
  6. package/dist/module.cjs +63 -0
  7. package/dist/module.d.cts +15 -0
  8. package/dist/module.d.ts +15 -0
  9. package/dist/module.json +3 -3
  10. package/dist/module.mjs +1 -1
  11. package/dist/runtime/components/Advice.vue +54 -47
  12. package/dist/runtime/components/Alert.vue +96 -71
  13. package/dist/runtime/components/App.vue +34 -37
  14. package/dist/runtime/components/Avatar.vue +81 -69
  15. package/dist/runtime/components/AvatarGroup.vue +76 -53
  16. package/dist/runtime/components/Badge.vue +83 -83
  17. package/dist/runtime/components/Button.vue +157 -220
  18. package/dist/runtime/components/ButtonGroup.vue +51 -35
  19. package/dist/runtime/components/Calendar.vue +152 -186
  20. package/dist/runtime/components/Checkbox.vue +73 -84
  21. package/dist/runtime/components/Chip.vue +74 -59
  22. package/dist/runtime/components/Collapsible.vue +41 -44
  23. package/dist/runtime/components/Container.vue +27 -18
  24. package/dist/runtime/components/Countdown.vue +378 -198
  25. package/dist/runtime/components/DescriptionList.vue +149 -102
  26. package/dist/runtime/components/DropdownMenu.vue +139 -83
  27. package/dist/runtime/components/DropdownMenuContent.vue +84 -137
  28. package/dist/runtime/components/Form.vue +216 -162
  29. package/dist/runtime/components/FormField.vue +80 -76
  30. package/dist/runtime/components/Input.vue +179 -160
  31. package/dist/runtime/components/InputMenu.vue +380 -300
  32. package/dist/runtime/components/InputNumber.vue +175 -178
  33. package/dist/runtime/components/Kbd.vue +45 -33
  34. package/dist/runtime/components/Link.vue +173 -179
  35. package/dist/runtime/components/LinkBase.vue +42 -64
  36. package/dist/runtime/components/Modal.vue +127 -105
  37. package/dist/runtime/components/ModalDialogClose.vue +8 -4
  38. package/dist/runtime/components/Navbar.vue +33 -24
  39. package/dist/runtime/components/NavbarDivider.vue +33 -24
  40. package/dist/runtime/components/NavbarSection.vue +33 -24
  41. package/dist/runtime/components/NavbarSpacer.vue +33 -24
  42. package/dist/runtime/components/NavigationMenu.vue +210 -144
  43. package/dist/runtime/components/OverlayProvider.vue +17 -13
  44. package/dist/runtime/components/Popover.vue +81 -81
  45. package/dist/runtime/components/Progress.vue +136 -109
  46. package/dist/runtime/components/RadioGroup.vue +134 -120
  47. package/dist/runtime/components/Range.vue +85 -94
  48. package/dist/runtime/components/Select.vue +260 -212
  49. package/dist/runtime/components/SelectMenu.vue +365 -272
  50. package/dist/runtime/components/Separator.vue +71 -61
  51. package/dist/runtime/components/Sidebar.vue +33 -24
  52. package/dist/runtime/components/SidebarBody.vue +38 -30
  53. package/dist/runtime/components/SidebarFooter.vue +33 -24
  54. package/dist/runtime/components/SidebarHeader.vue +33 -24
  55. package/dist/runtime/components/SidebarHeading.vue +33 -24
  56. package/dist/runtime/components/SidebarLayout.vue +70 -40
  57. package/dist/runtime/components/SidebarSection.vue +33 -24
  58. package/dist/runtime/components/SidebarSpacer.vue +33 -24
  59. package/dist/runtime/components/Skeleton.vue +22 -17
  60. package/dist/runtime/components/Slideover.vue +131 -108
  61. package/dist/runtime/components/StackedLayout.vue +73 -40
  62. package/dist/runtime/components/Switch.vue +95 -100
  63. package/dist/runtime/components/Tabs.vue +107 -81
  64. package/dist/runtime/components/Textarea.vue +201 -177
  65. package/dist/runtime/components/Toast.vue +105 -94
  66. package/dist/runtime/components/Toaster.vue +116 -94
  67. package/dist/runtime/components/Tooltip.vue +64 -78
  68. package/dist/runtime/components/content/TableWrapper.vue +70 -58
  69. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  70. package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
  71. package/dist/runtime/composables/useComponentIcons.d.ts +3 -3
  72. package/dist/runtime/composables/useFormField.d.ts +1 -1
  73. package/dist/runtime/prose/A.vue +23 -18
  74. package/dist/runtime/prose/Blockquote.vue +23 -18
  75. package/dist/runtime/prose/Code.vue +31 -23
  76. package/dist/runtime/prose/Em.vue +23 -18
  77. package/dist/runtime/prose/H1.vue +23 -18
  78. package/dist/runtime/prose/H2.vue +23 -18
  79. package/dist/runtime/prose/H3.vue +23 -18
  80. package/dist/runtime/prose/H4.vue +23 -18
  81. package/dist/runtime/prose/H5.vue +23 -18
  82. package/dist/runtime/prose/H6.vue +23 -18
  83. package/dist/runtime/prose/Hr.vue +19 -18
  84. package/dist/runtime/prose/Img.vue +23 -18
  85. package/dist/runtime/prose/Li.vue +23 -18
  86. package/dist/runtime/prose/Ol.vue +23 -18
  87. package/dist/runtime/prose/P.vue +23 -18
  88. package/dist/runtime/prose/Pre.vue +33 -28
  89. package/dist/runtime/prose/Strong.vue +23 -18
  90. package/dist/runtime/prose/Table.vue +54 -44
  91. package/dist/runtime/prose/Tbody.vue +23 -18
  92. package/dist/runtime/prose/Td.vue +23 -18
  93. package/dist/runtime/prose/Th.vue +23 -18
  94. package/dist/runtime/prose/Thead.vue +23 -18
  95. package/dist/runtime/prose/Tr.vue +23 -18
  96. package/dist/runtime/prose/Ul.vue +23 -18
  97. package/dist/runtime/vue/components/Link.vue +202 -201
  98. package/dist/shared/b24ui-nuxt.DrKwIWoc.cjs +7721 -0
  99. package/dist/types.d.mts +5 -3
  100. package/dist/types.d.ts +7 -0
  101. package/dist/unplugin.cjs +236 -0
  102. package/dist/unplugin.d.cts +33 -0
  103. package/dist/unplugin.d.ts +33 -0
  104. package/dist/vite.cjs +21 -0
  105. package/dist/vite.d.cts +14 -0
  106. package/dist/vite.d.ts +14 -0
  107. package/package.json +25 -13
  108. package/dist/runtime/components/Advice.vue.d.ts +0 -170
  109. package/dist/runtime/components/Alert.vue.d.ts +0 -464
  110. package/dist/runtime/components/App.vue.d.ts +0 -23
  111. package/dist/runtime/components/Avatar.vue.d.ts +0 -281
  112. package/dist/runtime/components/AvatarGroup.vue.d.ts +0 -204
  113. package/dist/runtime/components/Badge.vue.d.ts +0 -517
  114. package/dist/runtime/components/Button.vue.d.ts +0 -640
  115. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -116
  116. package/dist/runtime/components/Calendar.vue.d.ts +0 -437
  117. package/dist/runtime/components/Checkbox.vue.d.ts +0 -354
  118. package/dist/runtime/components/Chip.vue.d.ts +0 -271
  119. package/dist/runtime/components/Collapsible.vue.d.ts +0 -118
  120. package/dist/runtime/components/Container.vue.d.ts +0 -27
  121. package/dist/runtime/components/Countdown.vue.d.ts +0 -356
  122. package/dist/runtime/components/DescriptionList.vue.d.ts +0 -379
  123. package/dist/runtime/components/DropdownMenu.vue.d.ts +0 -533
  124. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +0 -228
  125. package/dist/runtime/components/Form.vue.d.ts +0 -55
  126. package/dist/runtime/components/FormField.vue.d.ts +0 -282
  127. package/dist/runtime/components/Input.vue.d.ts +0 -755
  128. package/dist/runtime/components/InputMenu.vue.d.ts +0 -1504
  129. package/dist/runtime/components/InputNumber.vue.d.ts +0 -658
  130. package/dist/runtime/components/Kbd.vue.d.ts +0 -109
  131. package/dist/runtime/components/Link.vue.d.ts +0 -129
  132. package/dist/runtime/components/LinkBase.vue.d.ts +0 -48
  133. package/dist/runtime/components/Modal.vue.d.ts +0 -327
  134. package/dist/runtime/components/ModalDialogClose.vue.d.ts +0 -10
  135. package/dist/runtime/components/Navbar.vue.d.ts +0 -101
  136. package/dist/runtime/components/NavbarDivider.vue.d.ts +0 -101
  137. package/dist/runtime/components/NavbarSection.vue.d.ts +0 -101
  138. package/dist/runtime/components/NavbarSpacer.vue.d.ts +0 -101
  139. package/dist/runtime/components/NavigationMenu.vue.d.ts +0 -824
  140. package/dist/runtime/components/OverlayProvider.vue.d.ts +0 -2
  141. package/dist/runtime/components/Popover.vue.d.ts +0 -147
  142. package/dist/runtime/components/Progress.vue.d.ts +0 -592
  143. package/dist/runtime/components/RadioGroup.vue.d.ts +0 -723
  144. package/dist/runtime/components/Range.vue.d.ts +0 -417
  145. package/dist/runtime/components/Select.vue.d.ts +0 -1200
  146. package/dist/runtime/components/SelectMenu.vue.d.ts +0 -1298
  147. package/dist/runtime/components/Separator.vue.d.ts +0 -400
  148. package/dist/runtime/components/Sidebar.vue.d.ts +0 -101
  149. package/dist/runtime/components/SidebarBody.vue.d.ts +0 -90
  150. package/dist/runtime/components/SidebarFooter.vue.d.ts +0 -101
  151. package/dist/runtime/components/SidebarHeader.vue.d.ts +0 -101
  152. package/dist/runtime/components/SidebarHeading.vue.d.ts +0 -101
  153. package/dist/runtime/components/SidebarLayout.vue.d.ts +0 -222
  154. package/dist/runtime/components/SidebarSection.vue.d.ts +0 -101
  155. package/dist/runtime/components/SidebarSpacer.vue.d.ts +0 -101
  156. package/dist/runtime/components/Skeleton.vue.d.ts +0 -26
  157. package/dist/runtime/components/Slideover.vue.d.ts +0 -360
  158. package/dist/runtime/components/StackedLayout.vue.d.ts +0 -192
  159. package/dist/runtime/components/Switch.vue.d.ts +0 -587
  160. package/dist/runtime/components/Tabs.vue.d.ts +0 -453
  161. package/dist/runtime/components/Textarea.vue.d.ts +0 -601
  162. package/dist/runtime/components/Toast.vue.d.ts +0 -438
  163. package/dist/runtime/components/Toaster.vue.d.ts +0 -219
  164. package/dist/runtime/components/Tooltip.vue.d.ts +0 -186
  165. package/dist/runtime/components/content/TableWrapper.vue.d.ts +0 -237
  166. package/dist/runtime/prose/A.vue.d.ts +0 -84
  167. package/dist/runtime/prose/Blockquote.vue.d.ts +0 -84
  168. package/dist/runtime/prose/Code.vue.d.ts +0 -97
  169. package/dist/runtime/prose/Em.vue.d.ts +0 -84
  170. package/dist/runtime/prose/H1.vue.d.ts +0 -97
  171. package/dist/runtime/prose/H2.vue.d.ts +0 -123
  172. package/dist/runtime/prose/H3.vue.d.ts +0 -123
  173. package/dist/runtime/prose/H4.vue.d.ts +0 -123
  174. package/dist/runtime/prose/H5.vue.d.ts +0 -123
  175. package/dist/runtime/prose/H6.vue.d.ts +0 -123
  176. package/dist/runtime/prose/Hr.vue.d.ts +0 -74
  177. package/dist/runtime/prose/Img.vue.d.ts +0 -77
  178. package/dist/runtime/prose/Li.vue.d.ts +0 -84
  179. package/dist/runtime/prose/Ol.vue.d.ts +0 -84
  180. package/dist/runtime/prose/P.vue.d.ts +0 -84
  181. package/dist/runtime/prose/Pre.vue.d.ts +0 -117
  182. package/dist/runtime/prose/Strong.vue.d.ts +0 -84
  183. package/dist/runtime/prose/Table.vue.d.ts +0 -144
  184. package/dist/runtime/prose/Tbody.vue.d.ts +0 -84
  185. package/dist/runtime/prose/Td.vue.d.ts +0 -84
  186. package/dist/runtime/prose/Th.vue.d.ts +0 -84
  187. package/dist/runtime/prose/Thead.vue.d.ts +0 -84
  188. package/dist/runtime/prose/Tr.vue.d.ts +0 -84
  189. package/dist/runtime/prose/Ul.vue.d.ts +0 -84
  190. package/dist/runtime/vue/components/Link.vue.d.ts +0 -129
@@ -1,138 +1,120 @@
1
- <script>
2
- import _appConfig from "#build/app.config";
3
- import theme from "#build/b24ui/link";
4
- import { tv } from "../utils/tv";
5
- const appConfigLink = _appConfig;
6
- const link = tv({ extend: tv(theme), ...appConfigLink.b24ui?.link || {} });
1
+ <script lang="ts">
2
+ import type { ButtonHTMLAttributes } from 'vue'
3
+ import type { AppConfig } from '@nuxt/schema'
4
+ import _appConfig from '#build/app.config'
5
+ import type { RouterLinkProps, RouteLocationRaw } from 'vue-router'
6
+ import theme from '#build/b24ui/link'
7
+ import { tv } from '../utils/tv'
8
+
9
+ interface NuxtLinkProps extends Omit<RouterLinkProps, 'to'> {
10
+ /**
11
+ * Route Location the link should navigate to when clicked on.
12
+ */
13
+ to?: RouteLocationRaw // need to manually type to avoid breaking typedPages
14
+ /**
15
+ * An alias for `to`. If used with `to`, `href` will be ignored
16
+ */
17
+ href?: NuxtLinkProps['to']
18
+ /**
19
+ * Forces the link to be considered as external (true) or internal (false). This is helpful to handle edge-cases
20
+ */
21
+ external?: boolean
22
+ /**
23
+ * Where to display the linked URL as the name for a browsing context.
24
+ */
25
+ target?: '_blank' | '_parent' | '_self' | '_top' | (string & {}) | null
26
+ /**
27
+ * A rel attribute value to apply on the link. Defaults to "noopener noreferrer" for external links.
28
+ */
29
+ rel?: 'noopener' | 'noreferrer' | 'nofollow' | 'sponsored' | 'ugc' | (string & {}) | null
30
+ /**
31
+ * If set to true, no rel attribute will be added to the link
32
+ */
33
+ noRel?: boolean
34
+ /**
35
+ * A class to apply to links that have been prefetched.
36
+ */
37
+ prefetchedClass?: string
38
+ /**
39
+ * When enabled will prefetch middleware, layouts and payloads of links in the viewport.
40
+ */
41
+ prefetch?: boolean
42
+ /**
43
+ * Allows controlling when to prefetch links. By default, prefetch is triggered only on visibility.
44
+ */
45
+ prefetchOn?: 'visibility' | 'interaction' | Partial<{
46
+ visibility: boolean
47
+ interaction: boolean
48
+ }>
49
+ /**
50
+ * Escape hatch to disable `prefetch` attribute.
51
+ */
52
+ noPrefetch?: boolean
53
+ }
54
+
55
+ const appConfigLink = _appConfig as AppConfig & { b24ui: { link: Partial<typeof theme> } }
56
+
57
+ const link = tv({ extend: tv(theme), ...(appConfigLink.b24ui?.link || {}) })
58
+
59
+ export interface LinkProps extends NuxtLinkProps {
60
+ /**
61
+ * The element or component this component should render as when not a link.
62
+ * @defaultValue 'button'
63
+ */
64
+ as?: any
65
+ /**
66
+ * The type of the button when not a link.
67
+ * @defaultValue 'button'
68
+ */
69
+ type?: ButtonHTMLAttributes['type']
70
+ disabled?: boolean
71
+ /** Force the link to be active independent of the current route. */
72
+ active?: boolean
73
+ /** Will only be active if the current route is an exact match. */
74
+ exact?: boolean
75
+ /** Allows controlling how the current route query sets the link as active. */
76
+ exactQuery?: boolean | 'partial'
77
+ /** Will only be active if the current route hash is an exact match. */
78
+ exactHash?: boolean
79
+ /** The class to apply when the link is inactive. */
80
+ inactiveClass?: string
81
+ custom?: boolean
82
+ /** When `true`, uses special underlined styling. */
83
+ isAction?: boolean
84
+ /** When `true`, only styles from `class`, `activeClass`, and `inactiveClass` will be applied. */
85
+ raw?: boolean
86
+ class?: any
87
+ }
88
+
89
+ export interface LinkSlots {
90
+ default(props: { active: boolean }): any
91
+ }
7
92
  </script>
8
93
 
9
- <script setup>
10
- import { computed } from "vue";
11
- import { isEqual, diff } from "ohash/utils";
12
- import { useForwardProps } from "reka-ui";
13
- import { reactiveOmit } from "@vueuse/core";
14
- import { useRoute } from "#imports";
15
- defineOptions({ inheritAttrs: false });
16
- const props = defineProps({
17
- as: {
18
- type: null,
19
- required: false,
20
- default: "button"
21
- },
22
- type: {
23
- type: null,
24
- required: false,
25
- default: "button"
26
- },
27
- disabled: {
28
- type: Boolean,
29
- required: false
30
- },
31
- active: {
32
- type: Boolean,
33
- required: false,
34
- default: void 0
35
- },
36
- exact: {
37
- type: Boolean,
38
- required: false
39
- },
40
- exactQuery: {
41
- type: [Boolean, String],
42
- required: false
43
- },
44
- exactHash: {
45
- type: Boolean,
46
- required: false
47
- },
48
- inactiveClass: {
49
- type: String,
50
- required: false,
51
- default: ""
52
- },
53
- custom: {
54
- type: Boolean,
55
- required: false
56
- },
57
- isAction: {
58
- type: Boolean,
59
- required: false,
60
- default: false
61
- },
62
- raw: {
63
- type: Boolean,
64
- required: false
65
- },
66
- class: {
67
- type: null,
68
- required: false
69
- },
70
- to: {
71
- type: null,
72
- required: false
73
- },
74
- href: {
75
- type: null,
76
- required: false
77
- },
78
- external: {
79
- type: Boolean,
80
- required: false
81
- },
82
- target: {
83
- type: [String, Object, null],
84
- required: false
85
- },
86
- rel: {
87
- type: [String, Object, null],
88
- required: false
89
- },
90
- noRel: {
91
- type: Boolean,
92
- required: false
93
- },
94
- prefetchedClass: {
95
- type: String,
96
- required: false
97
- },
98
- prefetch: {
99
- type: Boolean,
100
- required: false
101
- },
102
- prefetchOn: {
103
- type: [String, Object],
104
- required: false
105
- },
106
- noPrefetch: {
107
- type: Boolean,
108
- required: false
109
- },
110
- activeClass: {
111
- type: String,
112
- required: false,
113
- default: ""
114
- },
115
- exactActiveClass: {
116
- type: String,
117
- required: false
118
- },
119
- ariaCurrentValue: {
120
- type: String,
121
- required: false,
122
- default: "page"
123
- },
124
- viewTransition: {
125
- type: Boolean,
126
- required: false
127
- },
128
- replace: {
129
- type: Boolean,
130
- required: false
131
- }
132
- });
133
- defineSlots();
134
- const route = useRoute();
135
- const nuxtLinkProps = useForwardProps(reactiveOmit(props, "as", "type", "disabled", "active", "exact", "exactQuery", "exactHash", "activeClass", "inactiveClass", "raw", "class"));
94
+ <script setup lang="ts">
95
+ import { computed } from 'vue'
96
+ import { isEqual, diff } from 'ohash/utils'
97
+ import { useForwardProps } from 'reka-ui'
98
+ import { reactiveOmit } from '@vueuse/core'
99
+ import { useRoute } from '#imports'
100
+ import B24LinkBase from './LinkBase.vue'
101
+
102
+ defineOptions({ inheritAttrs: false })
103
+
104
+ const props = withDefaults(defineProps<LinkProps>(), {
105
+ as: 'button',
106
+ type: 'button',
107
+ ariaCurrentValue: 'page',
108
+ active: undefined,
109
+ isAction: false,
110
+ activeClass: '',
111
+ inactiveClass: ''
112
+ })
113
+ defineSlots<LinkSlots>()
114
+
115
+ const route = useRoute()
116
+ const nuxtLinkProps = useForwardProps(reactiveOmit(props, 'as', 'type', 'disabled', 'active', 'exact', 'exactQuery', 'exactHash', 'activeClass', 'inactiveClass', 'raw', 'class'))
117
+
136
118
  const b24ui = computed(() => tv({
137
119
  extend: link,
138
120
  variants: {
@@ -141,49 +123,61 @@ const b24ui = computed(() => tv({
141
123
  false: props.inactiveClass
142
124
  }
143
125
  }
144
- }));
145
- function isPartiallyEqual(item1, item2) {
126
+ }))
127
+
128
+ function isPartiallyEqual(item1: any, item2: any) {
146
129
  const diffedKeys = diff(item1, item2).reduce((filtered, q) => {
147
- if (q.type === "added") {
148
- filtered.add(q.key);
130
+ if (q.type === 'added') {
131
+ filtered.add(q.key)
149
132
  }
150
- return filtered;
151
- }, /* @__PURE__ */ new Set());
152
- const item1Filtered = Object.fromEntries(Object.entries(item1).filter(([key]) => !diffedKeys.has(key)));
153
- const item2Filtered = Object.fromEntries(Object.entries(item2).filter(([key]) => !diffedKeys.has(key)));
154
- return isEqual(item1Filtered, item2Filtered);
133
+ return filtered
134
+ }, new Set<string>())
135
+
136
+ const item1Filtered = Object.fromEntries(Object.entries(item1).filter(([key]) => !diffedKeys.has(key)))
137
+ const item2Filtered = Object.fromEntries(Object.entries(item2).filter(([key]) => !diffedKeys.has(key)))
138
+
139
+ return isEqual(item1Filtered, item2Filtered)
155
140
  }
156
- function isLinkActive({ route: linkRoute, isActive, isExactActive }) {
157
- if (props.active !== void 0) {
158
- return props.active;
141
+
142
+ function isLinkActive({ route: linkRoute, isActive, isExactActive }: any) {
143
+ if (props.active !== undefined) {
144
+ return props.active
159
145
  }
160
- if (props.exactQuery === "partial") {
161
- if (!isPartiallyEqual(linkRoute.query, route.query)) return false;
146
+
147
+ if (props.exactQuery === 'partial') {
148
+ if (!isPartiallyEqual(linkRoute.query, route.query)) return false
162
149
  } else if (props.exactQuery === true) {
163
- if (!isEqual(linkRoute.query, route.query)) return false;
150
+ if (!isEqual(linkRoute.query, route.query)) return false
164
151
  }
152
+
165
153
  if (props.exactHash && linkRoute.hash !== route.hash) {
166
- return false;
154
+ return false
167
155
  }
156
+
168
157
  if (props.exact && isExactActive) {
169
- return true;
158
+ return true
170
159
  }
160
+
171
161
  if (!props.exact && isActive) {
172
- return true;
162
+ return true
173
163
  }
174
- return false;
164
+
165
+ return false
175
166
  }
176
- function resolveLinkClass({ route: route2, isActive, isExactActive }) {
177
- const active = isLinkActive({ route: route2, isActive, isExactActive });
167
+
168
+ function resolveLinkClass({ route, isActive, isExactActive }: any) {
169
+ const active = isLinkActive({ route, isActive, isExactActive })
170
+
178
171
  if (props.raw) {
179
- return [props.class, active ? props.activeClass : props.inactiveClass];
172
+ return [props.class, active ? props.activeClass : props.inactiveClass]
180
173
  }
174
+
181
175
  return b24ui.value({
182
176
  class: props.class,
183
177
  active,
184
178
  disabled: props.disabled,
185
179
  isAction: Boolean(props.isAction)
186
- });
180
+ })
187
181
  }
188
182
  </script>
189
183
 
@@ -196,34 +190,34 @@ function resolveLinkClass({ route: route2, isActive, isExactActive }) {
196
190
  <template v-if="custom">
197
191
  <slot
198
192
  v-bind="{
199
- ...$attrs,
200
- ...exact && isExactActive ? { 'aria-current': props.ariaCurrentValue } : {},
201
- as,
202
- type,
203
- disabled,
204
- href,
205
- navigate,
206
- rel,
207
- target,
208
- isExternal,
209
- active: isLinkActive({ route: linkRoute, isActive, isExactActive })
210
- }"
193
+ ...$attrs,
194
+ ...(exact && isExactActive ? { 'aria-current': props.ariaCurrentValue } : {}),
195
+ as,
196
+ type,
197
+ disabled,
198
+ href,
199
+ navigate,
200
+ rel,
201
+ target,
202
+ isExternal,
203
+ active: isLinkActive({ route: linkRoute, isActive, isExactActive })
204
+ }"
211
205
  />
212
206
  </template>
213
207
  <B24LinkBase
214
208
  v-else
215
209
  v-bind="{
216
- ...$attrs,
217
- ...exact && isExactActive ? { 'aria-current': props.ariaCurrentValue } : {},
218
- as,
219
- type,
220
- disabled,
221
- href,
222
- navigate,
223
- rel,
224
- target,
225
- isExternal
226
- }"
210
+ ...$attrs,
211
+ ...(exact && isExactActive ? { 'aria-current': props.ariaCurrentValue } : {}),
212
+ as,
213
+ type,
214
+ disabled,
215
+ href,
216
+ navigate,
217
+ rel,
218
+ target,
219
+ isExternal
220
+ }"
227
221
  :class="resolveLinkClass({ route: linkRoute, isActive, isExactActive })"
228
222
  >
229
223
  <slot :active="isLinkActive({ route: linkRoute, isActive, isExactActive })" />
@@ -1,65 +1,43 @@
1
- <script>
1
+ <script lang="ts">
2
+ import type { LinkProps } from '../types'
2
3
 
4
+ export interface LinkBaseProps {
5
+ as?: string
6
+ type?: string
7
+ disabled?: boolean
8
+ onClick?: ((e: MouseEvent) => void | Promise<void>) | Array<((e: MouseEvent) => void | Promise<void>)>
9
+ href?: string
10
+ navigate?: (e: MouseEvent) => void
11
+ target?: LinkProps['target']
12
+ rel?: LinkProps['rel']
13
+ active?: boolean
14
+ isExternal?: boolean
15
+ }
3
16
  </script>
4
17
 
5
- <script setup>
6
- const props = defineProps({
7
- as: {
8
- type: String,
9
- required: false,
10
- default: "button"
11
- },
12
- type: {
13
- type: String,
14
- required: false,
15
- default: "button"
16
- },
17
- disabled: {
18
- type: Boolean,
19
- required: false
20
- },
21
- onClick: {
22
- type: [Function, Array],
23
- required: false
24
- },
25
- href: {
26
- type: String,
27
- required: false
28
- },
29
- navigate: {
30
- type: Function,
31
- required: false
32
- },
33
- target: {
34
- type: [String, Object, null],
35
- required: false
36
- },
37
- rel: {
38
- type: [String, Object, null],
39
- required: false
40
- },
41
- active: {
42
- type: Boolean,
43
- required: false
44
- },
45
- isExternal: {
46
- type: Boolean,
47
- required: false
48
- }
49
- });
50
- function onClickWrapper(e) {
18
+ <script setup lang="ts">
19
+ import { Primitive } from 'reka-ui'
20
+
21
+ const props = withDefaults(defineProps<LinkBaseProps>(), {
22
+ as: 'button',
23
+ type: 'button'
24
+ })
25
+
26
+ function onClickWrapper(e: MouseEvent) {
51
27
  if (props.disabled) {
52
- e.stopPropagation();
53
- e.preventDefault();
54
- return;
28
+ e.stopPropagation()
29
+ e.preventDefault()
30
+ return
55
31
  }
32
+
56
33
  if (props.onClick) {
57
34
  for (const onClick of Array.isArray(props.onClick) ? props.onClick : [props.onClick]) {
58
- onClick(e);
35
+ onClick(e)
59
36
  }
60
37
  }
38
+
61
39
  if (props.href && props.navigate && !props.isExternal) {
62
- props.navigate(e);
40
+ props.navigate(e)
63
41
  }
64
42
  }
65
43
  </script>
@@ -67,18 +45,18 @@ function onClickWrapper(e) {
67
45
  <template>
68
46
  <Primitive
69
47
  v-bind="href ? {
70
- 'as': 'a',
71
- 'href': disabled ? void 0 : href,
72
- 'aria-disabled': disabled ? 'true' : void 0,
73
- 'role': disabled ? 'link' : void 0,
74
- 'tabindex': disabled ? -1 : void 0
75
- } : as === 'button' ? {
76
- as,
77
- type,
78
- disabled
79
- } : {
80
- as
81
- }"
48
+ 'as': 'a',
49
+ 'href': disabled ? undefined : href,
50
+ 'aria-disabled': disabled ? 'true' : undefined,
51
+ 'role': disabled ? 'link' : undefined,
52
+ 'tabindex': disabled ? -1 : undefined
53
+ } : as === 'button' ? {
54
+ as,
55
+ type,
56
+ disabled
57
+ } : {
58
+ as
59
+ }"
82
60
  :rel="rel"
83
61
  :target="target"
84
62
  @click="onClickWrapper"