@bitrix24/b24ui-nuxt 0.5.9 → 0.5.10

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 (196) hide show
  1. package/.nuxt/b24ui/navigation-menu.ts +0 -2
  2. package/.nuxt/b24ui/popover.ts +1 -1
  3. package/dist/meta.d.mts +4789 -4897
  4. package/dist/meta.mjs +4789 -4897
  5. package/dist/module.json +5 -5
  6. package/dist/module.mjs +11 -7
  7. package/dist/runtime/components/Advice.vue +47 -54
  8. package/dist/runtime/components/Advice.vue.d.ts +170 -0
  9. package/dist/runtime/components/Alert.vue +71 -96
  10. package/dist/runtime/components/Alert.vue.d.ts +464 -0
  11. package/dist/runtime/components/App.vue +37 -34
  12. package/dist/runtime/components/App.vue.d.ts +23 -0
  13. package/dist/runtime/components/Avatar.vue +69 -81
  14. package/dist/runtime/components/Avatar.vue.d.ts +281 -0
  15. package/dist/runtime/components/AvatarGroup.vue +53 -76
  16. package/dist/runtime/components/AvatarGroup.vue.d.ts +204 -0
  17. package/dist/runtime/components/Badge.vue +83 -83
  18. package/dist/runtime/components/Badge.vue.d.ts +517 -0
  19. package/dist/runtime/components/Button.vue +219 -149
  20. package/dist/runtime/components/Button.vue.d.ts +640 -0
  21. package/dist/runtime/components/ButtonGroup.vue +35 -51
  22. package/dist/runtime/components/ButtonGroup.vue.d.ts +116 -0
  23. package/dist/runtime/components/Calendar.vue +186 -152
  24. package/dist/runtime/components/Calendar.vue.d.ts +437 -0
  25. package/dist/runtime/components/Checkbox.vue +84 -73
  26. package/dist/runtime/components/Checkbox.vue.d.ts +354 -0
  27. package/dist/runtime/components/Chip.vue +59 -74
  28. package/dist/runtime/components/Chip.vue.d.ts +271 -0
  29. package/dist/runtime/components/Collapsible.vue +44 -41
  30. package/dist/runtime/components/Collapsible.vue.d.ts +118 -0
  31. package/dist/runtime/components/Container.vue +18 -27
  32. package/dist/runtime/components/Container.vue.d.ts +27 -0
  33. package/dist/runtime/components/Countdown.vue +198 -378
  34. package/dist/runtime/components/Countdown.vue.d.ts +356 -0
  35. package/dist/runtime/components/DescriptionList.vue +102 -149
  36. package/dist/runtime/components/DescriptionList.vue.d.ts +379 -0
  37. package/dist/runtime/components/DropdownMenu.vue +83 -139
  38. package/dist/runtime/components/DropdownMenu.vue.d.ts +533 -0
  39. package/dist/runtime/components/DropdownMenuContent.vue +137 -81
  40. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +228 -0
  41. package/dist/runtime/components/Form.vue +162 -216
  42. package/dist/runtime/components/Form.vue.d.ts +55 -0
  43. package/dist/runtime/components/FormField.vue +76 -80
  44. package/dist/runtime/components/FormField.vue.d.ts +282 -0
  45. package/dist/runtime/components/Input.vue +160 -179
  46. package/dist/runtime/components/Input.vue.d.ts +755 -0
  47. package/dist/runtime/components/InputMenu.vue +300 -381
  48. package/dist/runtime/components/InputMenu.vue.d.ts +1504 -0
  49. package/dist/runtime/components/InputNumber.vue +178 -175
  50. package/dist/runtime/components/InputNumber.vue.d.ts +658 -0
  51. package/dist/runtime/components/Kbd.vue +33 -45
  52. package/dist/runtime/components/Kbd.vue.d.ts +109 -0
  53. package/dist/runtime/components/Link.vue +179 -173
  54. package/dist/runtime/components/Link.vue.d.ts +129 -0
  55. package/dist/runtime/components/LinkBase.vue +64 -42
  56. package/dist/runtime/components/LinkBase.vue.d.ts +48 -0
  57. package/dist/runtime/components/Modal.vue +105 -127
  58. package/dist/runtime/components/Modal.vue.d.ts +327 -0
  59. package/dist/runtime/components/ModalDialogClose.vue +4 -8
  60. package/dist/runtime/components/ModalDialogClose.vue.d.ts +10 -0
  61. package/dist/runtime/components/Navbar.vue +24 -33
  62. package/dist/runtime/components/Navbar.vue.d.ts +101 -0
  63. package/dist/runtime/components/NavbarDivider.vue +24 -33
  64. package/dist/runtime/components/NavbarDivider.vue.d.ts +101 -0
  65. package/dist/runtime/components/NavbarSection.vue +24 -33
  66. package/dist/runtime/components/NavbarSection.vue.d.ts +101 -0
  67. package/dist/runtime/components/NavbarSpacer.vue +24 -33
  68. package/dist/runtime/components/NavbarSpacer.vue.d.ts +101 -0
  69. package/dist/runtime/components/NavigationMenu.vue +152 -216
  70. package/dist/runtime/components/NavigationMenu.vue.d.ts +824 -0
  71. package/dist/runtime/components/OverlayProvider.vue +13 -17
  72. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -0
  73. package/dist/runtime/components/Popover.vue +81 -81
  74. package/dist/runtime/components/Popover.vue.d.ts +147 -0
  75. package/dist/runtime/components/Progress.vue +109 -136
  76. package/dist/runtime/components/Progress.vue.d.ts +592 -0
  77. package/dist/runtime/components/RadioGroup.vue +120 -134
  78. package/dist/runtime/components/RadioGroup.vue.d.ts +723 -0
  79. package/dist/runtime/components/Range.vue +94 -85
  80. package/dist/runtime/components/Range.vue.d.ts +417 -0
  81. package/dist/runtime/components/Select.vue +212 -260
  82. package/dist/runtime/components/Select.vue.d.ts +1200 -0
  83. package/dist/runtime/components/SelectMenu.vue +272 -366
  84. package/dist/runtime/components/SelectMenu.vue.d.ts +1298 -0
  85. package/dist/runtime/components/Separator.vue +61 -71
  86. package/dist/runtime/components/Separator.vue.d.ts +400 -0
  87. package/dist/runtime/components/Sidebar.vue +24 -33
  88. package/dist/runtime/components/Sidebar.vue.d.ts +101 -0
  89. package/dist/runtime/components/SidebarBody.vue +30 -38
  90. package/dist/runtime/components/SidebarBody.vue.d.ts +90 -0
  91. package/dist/runtime/components/SidebarFooter.vue +24 -33
  92. package/dist/runtime/components/SidebarFooter.vue.d.ts +101 -0
  93. package/dist/runtime/components/SidebarHeader.vue +24 -33
  94. package/dist/runtime/components/SidebarHeader.vue.d.ts +101 -0
  95. package/dist/runtime/components/SidebarHeading.vue +24 -33
  96. package/dist/runtime/components/SidebarHeading.vue.d.ts +101 -0
  97. package/dist/runtime/components/SidebarLayout.vue +40 -70
  98. package/dist/runtime/components/SidebarLayout.vue.d.ts +222 -0
  99. package/dist/runtime/components/SidebarSection.vue +24 -33
  100. package/dist/runtime/components/SidebarSection.vue.d.ts +101 -0
  101. package/dist/runtime/components/SidebarSpacer.vue +24 -33
  102. package/dist/runtime/components/SidebarSpacer.vue.d.ts +101 -0
  103. package/dist/runtime/components/Skeleton.vue +17 -22
  104. package/dist/runtime/components/Skeleton.vue.d.ts +26 -0
  105. package/dist/runtime/components/Slideover.vue +108 -131
  106. package/dist/runtime/components/Slideover.vue.d.ts +360 -0
  107. package/dist/runtime/components/StackedLayout.vue +40 -73
  108. package/dist/runtime/components/StackedLayout.vue.d.ts +192 -0
  109. package/dist/runtime/components/Switch.vue +100 -95
  110. package/dist/runtime/components/Switch.vue.d.ts +587 -0
  111. package/dist/runtime/components/Tabs.vue +83 -105
  112. package/dist/runtime/components/Tabs.vue.d.ts +453 -0
  113. package/dist/runtime/components/Textarea.vue +177 -201
  114. package/dist/runtime/components/Textarea.vue.d.ts +601 -0
  115. package/dist/runtime/components/Toast.vue +94 -105
  116. package/dist/runtime/components/Toast.vue.d.ts +438 -0
  117. package/dist/runtime/components/Toaster.vue +94 -111
  118. package/dist/runtime/components/Toaster.vue.d.ts +219 -0
  119. package/dist/runtime/components/Tooltip.vue +78 -64
  120. package/dist/runtime/components/Tooltip.vue.d.ts +186 -0
  121. package/dist/runtime/components/content/TableWrapper.vue +58 -70
  122. package/dist/runtime/components/content/TableWrapper.vue.d.ts +237 -0
  123. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  124. package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
  125. package/dist/runtime/composables/useComponentIcons.d.ts +1 -1
  126. package/dist/runtime/composables/useFormField.d.ts +1 -1
  127. package/dist/runtime/prose/A.vue +18 -23
  128. package/dist/runtime/prose/A.vue.d.ts +84 -0
  129. package/dist/runtime/prose/Blockquote.vue +18 -23
  130. package/dist/runtime/prose/Blockquote.vue.d.ts +84 -0
  131. package/dist/runtime/prose/Code.vue +23 -31
  132. package/dist/runtime/prose/Code.vue.d.ts +97 -0
  133. package/dist/runtime/prose/Em.vue +18 -23
  134. package/dist/runtime/prose/Em.vue.d.ts +84 -0
  135. package/dist/runtime/prose/H1.vue +18 -23
  136. package/dist/runtime/prose/H1.vue.d.ts +97 -0
  137. package/dist/runtime/prose/H2.vue +18 -23
  138. package/dist/runtime/prose/H2.vue.d.ts +123 -0
  139. package/dist/runtime/prose/H3.vue +18 -23
  140. package/dist/runtime/prose/H3.vue.d.ts +123 -0
  141. package/dist/runtime/prose/H4.vue +18 -23
  142. package/dist/runtime/prose/H4.vue.d.ts +123 -0
  143. package/dist/runtime/prose/H5.vue +18 -23
  144. package/dist/runtime/prose/H5.vue.d.ts +123 -0
  145. package/dist/runtime/prose/H6.vue +18 -23
  146. package/dist/runtime/prose/H6.vue.d.ts +123 -0
  147. package/dist/runtime/prose/Hr.vue +18 -19
  148. package/dist/runtime/prose/Hr.vue.d.ts +74 -0
  149. package/dist/runtime/prose/Img.vue +18 -23
  150. package/dist/runtime/prose/Img.vue.d.ts +77 -0
  151. package/dist/runtime/prose/Li.vue +18 -23
  152. package/dist/runtime/prose/Li.vue.d.ts +84 -0
  153. package/dist/runtime/prose/Ol.vue +18 -23
  154. package/dist/runtime/prose/Ol.vue.d.ts +84 -0
  155. package/dist/runtime/prose/P.vue +18 -23
  156. package/dist/runtime/prose/P.vue.d.ts +84 -0
  157. package/dist/runtime/prose/Pre.vue +28 -33
  158. package/dist/runtime/prose/Pre.vue.d.ts +117 -0
  159. package/dist/runtime/prose/Strong.vue +18 -23
  160. package/dist/runtime/prose/Strong.vue.d.ts +84 -0
  161. package/dist/runtime/prose/Table.vue +44 -54
  162. package/dist/runtime/prose/Table.vue.d.ts +144 -0
  163. package/dist/runtime/prose/Tbody.vue +18 -23
  164. package/dist/runtime/prose/Tbody.vue.d.ts +84 -0
  165. package/dist/runtime/prose/Td.vue +18 -23
  166. package/dist/runtime/prose/Td.vue.d.ts +84 -0
  167. package/dist/runtime/prose/Th.vue +18 -23
  168. package/dist/runtime/prose/Th.vue.d.ts +84 -0
  169. package/dist/runtime/prose/Thead.vue +18 -23
  170. package/dist/runtime/prose/Thead.vue.d.ts +84 -0
  171. package/dist/runtime/prose/Tr.vue +18 -23
  172. package/dist/runtime/prose/Tr.vue.d.ts +84 -0
  173. package/dist/runtime/prose/Ul.vue +18 -23
  174. package/dist/runtime/prose/Ul.vue.d.ts +84 -0
  175. package/dist/runtime/vue/components/Link.vue +201 -202
  176. package/dist/runtime/vue/components/Link.vue.d.ts +129 -0
  177. package/dist/runtime/vue/stubs.d.ts +3 -3
  178. package/dist/shared/{b24ui-nuxt.C1lGF53R.mjs → b24ui-nuxt.CS9Lf0os.mjs} +4 -3
  179. package/dist/types.d.mts +3 -5
  180. package/dist/unplugin.mjs +1 -1
  181. package/dist/vite.mjs +1 -1
  182. package/package.json +59 -32
  183. package/dist/meta.cjs +0 -72220
  184. package/dist/meta.d.cts +0 -72218
  185. package/dist/meta.d.ts +0 -72218
  186. package/dist/module.cjs +0 -59
  187. package/dist/module.d.cts +0 -15
  188. package/dist/module.d.ts +0 -15
  189. package/dist/shared/b24ui-nuxt.BVg3rkkG.cjs +0 -7720
  190. package/dist/types.d.ts +0 -7
  191. package/dist/unplugin.cjs +0 -236
  192. package/dist/unplugin.d.cts +0 -33
  193. package/dist/unplugin.d.ts +0 -33
  194. package/dist/vite.cjs +0 -21
  195. package/dist/vite.d.cts +0 -14
  196. package/dist/vite.d.ts +0 -14
@@ -1,212 +1,178 @@
1
- <script lang="ts">
2
- import type { VariantProps } from 'tailwind-variants'
3
- import type { SelectRootProps, SelectRootEmits, SelectContentProps, SelectContentEmits, SelectArrowProps } from 'reka-ui'
4
- import type { AppConfig } from '@nuxt/schema'
5
- import _appConfig from '#build/app.config'
6
- import theme from '#build/b24ui/select'
7
- import type { UseComponentIconsProps } from '../composables/useComponentIcons'
8
- import { tv } from '../utils/tv'
9
- import type { AvatarProps, ChipProps, InputProps, IconComponent } from '../types'
10
- import type {
11
- AcceptableValue,
12
- ArrayOrNested,
13
- GetItemKeys,
14
- GetItemValue,
15
- GetModelValue,
16
- GetModelValueEmits,
17
- NestedItem,
18
- PartialString,
19
- EmitsToProps
20
- } from '../types/utils'
21
-
22
- const appConfigSelect = _appConfig as AppConfig & { b24ui: { select: Partial<typeof theme> } }
23
-
24
- const select = tv({ extend: tv(theme), ...(appConfigSelect.b24ui?.select || {}) })
25
-
26
- type SelectVariants = VariantProps<typeof select>
27
-
28
- interface SelectItemBase {
29
- label?: string
30
- /**
31
- * Display an icon on the left side.
32
- * @IconComponent
33
- */
34
- icon?: IconComponent
35
- avatar?: AvatarProps
36
- color?: SelectVariants['color']
37
- chip?: ChipProps
38
- /**
39
- * The item type.
40
- * @defaultValue 'item'
41
- */
42
- type?: 'label' | 'separator' | 'item'
43
- value?: string | number
44
- disabled?: boolean
45
- [key: string]: any
46
- }
47
- export type SelectItem = SelectItemBase | AcceptableValue | boolean
48
-
49
- export interface SelectProps<T extends ArrayOrNested<SelectItem> = ArrayOrNested<SelectItem>, VK extends GetItemKeys<T> = 'value', M extends boolean = false> extends Omit<SelectRootProps<T>, 'dir' | 'multiple' | 'modelValue' | 'defaultValue' | 'by'>, UseComponentIconsProps {
50
- id?: string
51
- /** The placeholder text when the select is empty. */
52
- placeholder?: string
53
- /**
54
- * @defaultValue 'primary'
55
- */
56
- color?: SelectVariants['color']
57
- /**
58
- * @defaultValue 'md'
59
- */
60
- size?: SelectVariants['size']
61
- /**
62
- * Removes padding from input
63
- * @defaultValue false
64
- */
65
- noPadding?: boolean
66
- /**
67
- * Removes all borders (rings)
68
- * @defaultValue false
69
- */
70
- noBorder?: boolean
71
- /**
72
- * Removes all borders (rings) except the bottom one
73
- * @defaultValue false
74
- */
75
- underline?: boolean
76
- /**
77
- * Rounds the corners of the button
78
- * @defaultValue false
79
- */
80
- rounded?: boolean
81
- tag?: string
82
- /**
83
- * @defaultValue 'primary'
84
- */
85
- tagColor?: SelectVariants['tagColor']
86
- /**
87
- * The icon displayed to open the menu.
88
- * @defaultValue icons.chevronDown
89
- * @IconComponent
90
- */
91
- trailingIcon?: IconComponent
92
- /**
93
- * The icon displayed when an item is selected.
94
- * @defaultValue icons.check
95
- * @IconComponent
96
- */
97
- selectedIcon?: IconComponent
98
- /**
99
- * The content of the menu.
100
- * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }
101
- */
102
- content?: Omit<SelectContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<SelectContentEmits>>
103
- /**
104
- * Display an arrow alongside the menu.
105
- * @defaultValue false
106
- */
107
- arrow?: boolean | Omit<SelectArrowProps, 'as' | 'asChild'>
108
- /**
109
- * Render the menu in a portal.
110
- * @defaultValue true
111
- */
112
- portal?: boolean
113
- /**
114
- * When `items` is an array of objects, select the field to use as the value.
115
- * @defaultValue 'value'
116
- */
117
- valueKey?: VK
118
- /**
119
- * When `items` is an array of objects, select the field to use as the label.
120
- * @defaultValue 'label'
121
- */
122
- labelKey?: keyof NestedItem<T>
123
- items?: T
124
- /**
125
- * The value of the Select when initially rendered. Use when you do not need to control the state of the Select
126
- */
127
- defaultValue?: GetModelValue<T, VK, M>
128
- /**
129
- * The controlled value of the Select. Can be bind as `v-model`
130
- */
131
- modelValue?: GetModelValue<T, VK, M>
132
- /**
133
- * Whether multiple options can be selected or not
134
- * @defaultValue false
135
- */
136
- multiple?: M & boolean
137
- /**
138
- * Highlight the ring color like a focus state
139
- * @defaultValue false
140
- */
141
- highlight?: boolean
142
- class?: any
143
- b24ui?: PartialString<typeof select.slots>
144
- }
145
-
146
- export type SelectEmits<A extends ArrayOrNested<SelectItem>, VK extends GetItemKeys<A> | undefined, M extends boolean> = Omit<SelectRootEmits, 'update:modelValue'> & {
147
- change: [payload: Event]
148
- blur: [payload: FocusEvent]
149
- focus: [payload: FocusEvent]
150
- } & GetModelValueEmits<A, VK, M>
151
-
152
- type SlotProps<T extends SelectItem> = (props: { item: T, index: number }) => any
153
-
154
- export interface SelectSlots<
155
- A extends ArrayOrNested<SelectItem> = ArrayOrNested<SelectItem>,
156
- VK extends GetItemKeys<A> | undefined = undefined,
157
- M extends boolean = false,
158
- T extends NestedItem<A> = NestedItem<A>
159
- > {
160
- 'leading'(props: { modelValue?: GetModelValue<A, VK, M>, open: boolean, b24ui: ReturnType<typeof select> }): any
161
- 'default'(props: { modelValue?: GetModelValue<A, VK, M>, open: boolean }): any
162
- 'trailing'(props: { modelValue?: GetModelValue<A, VK, M>, open: boolean, b24ui: ReturnType<typeof select> }): any
163
- 'item': SlotProps<T>
164
- 'item-leading': SlotProps<T>
165
- 'item-label': SlotProps<T>
166
- 'item-trailing': SlotProps<T>
167
- }
1
+ <script>
2
+ import _appConfig from "#build/app.config";
3
+ import theme from "#build/b24ui/select";
4
+ import { tv } from "../utils/tv";
5
+ const appConfigSelect = _appConfig;
6
+ const select = tv({ extend: tv(theme), ...appConfigSelect.b24ui?.select || {} });
168
7
  </script>
169
8
 
170
- <script setup lang="ts" generic="T extends ArrayOrNested<SelectItem>, VK extends GetItemKeys<T> = 'value', M extends boolean = false">
171
- import { computed, toRef } from 'vue'
172
- import { Primitive, SelectRoot, SelectArrow, SelectTrigger, SelectPortal, SelectContent, SelectViewport, SelectScrollUpButton, SelectScrollDownButton, SelectLabel, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectSeparator, useForwardPropsEmits } from 'reka-ui'
173
- import { defu } from 'defu'
174
- import { reactivePick } from '@vueuse/core'
175
- import { useButtonGroup } from '../composables/useButtonGroup'
176
- import { useComponentIcons } from '../composables/useComponentIcons'
177
- import { useFormField } from '../composables/useFormField'
178
- import { compare, get, isArrayOfArray } from '../utils'
179
- import icons from '../dictionary/icons'
180
- import B24Avatar from './Avatar.vue'
181
- import B24Chip from './Chip.vue'
182
-
183
- defineOptions({ inheritAttrs: false })
184
-
185
- const props = withDefaults(defineProps<SelectProps<T, VK, M>>(), {
186
- valueKey: 'value' as never,
187
- labelKey: 'label' as never,
188
- portal: true
189
- })
190
- const emits = defineEmits<SelectEmits<T, VK, M>>()
191
- const slots = defineSlots<SelectSlots<T, VK, M>>()
192
-
193
- const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'disabled', 'autocomplete', 'required', 'multiple'), emits)
194
- const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as SelectContentProps)
195
- const arrowProps = toRef(() => props.arrow as SelectArrowProps)
196
-
197
- const { emitFormChange, emitFormInput, emitFormBlur, emitFormFocus, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField<InputProps>(props)
198
- const { orientation, size: buttonGroupSize } = useButtonGroup<InputProps>(props)
9
+ <script setup>
10
+ import { computed, toRef } from "vue";
11
+ import { useForwardPropsEmits } from "reka-ui";
12
+ import { defu } from "defu";
13
+ import { reactivePick } from "@vueuse/core";
14
+ import { useButtonGroup } from "../composables/useButtonGroup";
15
+ import { useComponentIcons } from "../composables/useComponentIcons";
16
+ import { useFormField } from "../composables/useFormField";
17
+ import { compare, get, isArrayOfArray } from "../utils";
18
+ import icons from "../dictionary/icons";
19
+ defineOptions({ inheritAttrs: false });
20
+ const props = defineProps({
21
+ id: {
22
+ type: String,
23
+ required: false
24
+ },
25
+ placeholder: {
26
+ type: String,
27
+ required: false
28
+ },
29
+ color: {
30
+ type: null,
31
+ required: false
32
+ },
33
+ size: {
34
+ type: null,
35
+ required: false
36
+ },
37
+ noPadding: {
38
+ type: Boolean,
39
+ required: false
40
+ },
41
+ noBorder: {
42
+ type: Boolean,
43
+ required: false
44
+ },
45
+ underline: {
46
+ type: Boolean,
47
+ required: false
48
+ },
49
+ rounded: {
50
+ type: Boolean,
51
+ required: false
52
+ },
53
+ tag: {
54
+ type: String,
55
+ required: false
56
+ },
57
+ tagColor: {
58
+ type: null,
59
+ required: false
60
+ },
61
+ trailingIcon: {
62
+ type: [Function, Object],
63
+ required: false
64
+ },
65
+ selectedIcon: {
66
+ type: [Function, Object],
67
+ required: false
68
+ },
69
+ content: {
70
+ type: Object,
71
+ required: false
72
+ },
73
+ arrow: {
74
+ type: [Boolean, Object],
75
+ required: false
76
+ },
77
+ portal: {
78
+ type: Boolean,
79
+ required: false,
80
+ default: true
81
+ },
82
+ valueKey: {
83
+ type: null,
84
+ required: false,
85
+ default: "value"
86
+ },
87
+ labelKey: {
88
+ type: null,
89
+ required: false,
90
+ default: "label"
91
+ },
92
+ items: {
93
+ type: null,
94
+ required: false
95
+ },
96
+ defaultValue: {
97
+ type: null,
98
+ required: false
99
+ },
100
+ modelValue: {
101
+ type: null,
102
+ required: false
103
+ },
104
+ multiple: {
105
+ type: Boolean,
106
+ required: false
107
+ },
108
+ highlight: {
109
+ type: Boolean,
110
+ required: false
111
+ },
112
+ class: {
113
+ type: null,
114
+ required: false
115
+ },
116
+ b24ui: {
117
+ type: null,
118
+ required: false
119
+ },
120
+ open: {
121
+ type: Boolean,
122
+ required: false
123
+ },
124
+ defaultOpen: {
125
+ type: Boolean,
126
+ required: false
127
+ },
128
+ autocomplete: {
129
+ type: String,
130
+ required: false
131
+ },
132
+ disabled: {
133
+ type: Boolean,
134
+ required: false
135
+ },
136
+ name: {
137
+ type: String,
138
+ required: false
139
+ },
140
+ required: {
141
+ type: Boolean,
142
+ required: false
143
+ },
144
+ icon: {
145
+ type: [Function, Object],
146
+ required: false
147
+ },
148
+ avatar: {
149
+ type: Object,
150
+ required: false
151
+ },
152
+ loading: {
153
+ type: Boolean,
154
+ required: false
155
+ },
156
+ trailing: {
157
+ type: Boolean,
158
+ required: false
159
+ }
160
+ });
161
+ const emits = defineEmits(["update:open", "change", "blur", "focus", "update:modelValue"]);
162
+ const slots = defineSlots();
163
+ const rootProps = useForwardPropsEmits(reactivePick(props, "open", "defaultOpen", "disabled", "autocomplete", "required", "multiple"), emits);
164
+ const contentProps = toRef(() => defu(props.content, { side: "bottom", sideOffset: 8, collisionPadding: 8, position: "popper" }));
165
+ const arrowProps = toRef(() => props.arrow);
166
+ const { emitFormChange, emitFormInput, emitFormBlur, emitFormFocus, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props);
167
+ const { orientation, size: buttonGroupSize } = useButtonGroup(props);
199
168
  const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(
200
169
  props,
201
170
  { trailingIcon: icons.chevronDown }
202
- )))
203
-
204
- const selectSize = computed(() => buttonGroupSize.value || formGroupSize.value)
205
-
171
+ )));
172
+ const selectSize = computed(() => buttonGroupSize.value || formGroupSize.value);
206
173
  const isTag = computed(() => {
207
- return props.tag
208
- })
209
-
174
+ return props.tag;
175
+ });
210
176
  const b24ui = computed(() => select({
211
177
  color: color.value,
212
178
  size: selectSize?.value,
@@ -220,54 +186,40 @@ const b24ui = computed(() => select({
220
186
  leading: Boolean(isLeading.value || !!props.avatar || !!slots.leading),
221
187
  trailing: Boolean(isTrailing.value || !!slots.trailing),
222
188
  buttonGroup: orientation.value
223
- }))
224
-
225
- const groups = computed<SelectItem[][]>(() =>
226
- props.items?.length
227
- ? isArrayOfArray(props.items)
228
- ? props.items
229
- : [props.items]
230
- : []
231
- )
232
- // eslint-disable-next-line vue/no-dupe-keys
233
- const items = computed(() => groups.value.flatMap(group => group) as T[])
234
-
235
- function displayValue(value?: GetItemValue<T, VK> | GetItemValue<T, VK>[]): string {
189
+ }));
190
+ const groups = computed(
191
+ () => props.items?.length ? isArrayOfArray(props.items) ? props.items : [props.items] : []
192
+ );
193
+ const items = computed(() => groups.value.flatMap((group) => group));
194
+ function displayValue(value) {
236
195
  if (props.multiple && Array.isArray(value)) {
237
- return value.map(v => displayValue(v)).filter(Boolean).join(', ')
196
+ return value.map((v) => displayValue(v)).filter(Boolean).join(", ");
238
197
  }
239
-
240
- const item = items.value.find(item => compare(typeof item === 'object' ? get(item as Record<string, any>, props.valueKey as string) : item, value))
241
- return item && (typeof item === 'object' ? get(item, props.labelKey as string) : item)
198
+ const item = items.value.find((item2) => compare(typeof item2 === "object" ? get(item2, props.valueKey) : item2, value));
199
+ return item && (typeof item === "object" ? get(item, props.labelKey) : item);
242
200
  }
243
-
244
- function onUpdate(value: any) {
245
- // @ts-expect-error - 'target' does not exist in type 'EventInit'
246
- const event = new Event('change', { target: { value } })
247
- emits('change', event)
248
-
249
- emitFormChange()
250
- emitFormInput()
201
+ function onUpdate(value) {
202
+ const event = new Event("change", { target: { value } });
203
+ emits("change", event);
204
+ emitFormChange();
205
+ emitFormInput();
251
206
  }
252
-
253
- function onUpdateOpen(value: boolean) {
207
+ function onUpdateOpen(value) {
254
208
  if (!value) {
255
- const event = new FocusEvent('blur')
256
- emits('blur', event)
257
- emitFormBlur()
209
+ const event = new FocusEvent("blur");
210
+ emits("blur", event);
211
+ emitFormBlur();
258
212
  } else {
259
- const event = new FocusEvent('focus')
260
- emits('focus', event)
261
- emitFormFocus()
213
+ const event = new FocusEvent("focus");
214
+ emits("focus", event);
215
+ emitFormFocus();
262
216
  }
263
217
  }
264
-
265
- function isSelectItem(item: SelectItem): item is SelectItemBase {
266
- return typeof item === 'object' && item !== null
218
+ function isSelectItem(item) {
219
+ return typeof item === "object" && item !== null;
267
220
  }
268
221
  </script>
269
222
 
270
- <!-- eslint-disable vue/no-template-shadow -->
271
223
  <template>
272
224
  <Primitive as="div" :class="b24ui.root({ class: [props.b24ui?.root] })">
273
225
  <SelectRoot
@@ -276,8 +228,8 @@ function isSelectItem(item: SelectItem): item is SelectItemBase {
276
228
  v-bind="rootProps"
277
229
  :autocomplete="autocomplete"
278
230
  :disabled="disabled"
279
- :default-value="(defaultValue as (AcceptableValue | AcceptableValue[]))"
280
- :model-value="(modelValue as (AcceptableValue | AcceptableValue[]))"
231
+ :default-value="defaultValue"
232
+ :model-value="modelValue"
281
233
  @update:model-value="onUpdate"
282
234
  @update:open="onUpdateOpen"
283
235
  >
@@ -287,29 +239,29 @@ function isSelectItem(item: SelectItem): item is SelectItemBase {
287
239
  </div>
288
240
 
289
241
  <span v-if="isLeading || !!avatar || !!slots.leading" :class="b24ui.leading({ class: props.b24ui?.leading })">
290
- <slot name="leading" :model-value="(modelValue as GetModelValue<T, VK, M>)" :open="open" :b24ui="b24ui">
242
+ <slot name="leading" :model-value="modelValue" :open="open" :b24ui="b24ui">
291
243
  <Component
292
244
  :is="leadingIconName"
293
245
  v-if="isLeading && leadingIconName"
294
246
  :class="b24ui.leadingIcon({ class: props.b24ui?.leadingIcon })"
295
247
  />
296
- <B24Avatar v-else-if="!!avatar" :size="((props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="b24ui.itemLeadingAvatar({ class: props.b24ui?.itemLeadingAvatar })" />
248
+ <B24Avatar v-else-if="!!avatar" :size="props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()" v-bind="avatar" :class="b24ui.itemLeadingAvatar({ class: props.b24ui?.itemLeadingAvatar })" />
297
249
  </slot>
298
250
  </span>
299
251
 
300
- <slot :model-value="(modelValue as GetModelValue<T, VK, M>)" :open="open">
301
- <template v-for="displayedModelValue in [displayValue(modelValue as GetModelValue<T, VK, M>)]" :key="displayedModelValue">
252
+ <slot :model-value="modelValue" :open="open">
253
+ <template v-for="displayedModelValue in [displayValue(modelValue)]" :key="displayedModelValue">
302
254
  <span v-if="displayedModelValue" :class="b24ui.value({ class: props.b24ui?.value })">
303
255
  {{ displayedModelValue }}
304
256
  </span>
305
257
  <span v-else :class="b24ui.placeholder({ class: props.b24ui?.placeholder })">
306
- {{ placeholder ?? '&nbsp;' }}
258
+ {{ placeholder ?? "\xA0" }}
307
259
  </span>
308
260
  </template>
309
261
  </slot>
310
262
 
311
263
  <span v-if="isTrailing || !!slots.trailing" :class="b24ui.trailing({ class: props.b24ui?.trailing })">
312
- <slot name="trailing" :model-value="(modelValue as GetModelValue<T, VK, M>)" :open="open" :b24ui="b24ui">
264
+ <slot name="trailing" :model-value="modelValue" :open="open" :b24ui="b24ui">
313
265
  <Component
314
266
  :is="trailingIconName"
315
267
  v-if="trailingIconName"
@@ -331,28 +283,28 @@ function isSelectItem(item: SelectItem): item is SelectItemBase {
331
283
  <SelectGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="b24ui.group({ class: props.b24ui?.group })">
332
284
  <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
333
285
  <SelectLabel v-if="isSelectItem(item) && item.type === 'label'" :class="b24ui.label({ class: props.b24ui?.label })">
334
- {{ get(item, props.labelKey as string) }}
286
+ {{ get(item, props.labelKey) }}
335
287
  </SelectLabel>
336
288
 
337
289
  <SelectSeparator v-else-if="isSelectItem(item) && item.type === 'separator'" :class="b24ui.separator({ class: props.b24ui?.separator })" />
338
290
 
339
291
  <SelectItem
340
292
  v-else
341
- :class="b24ui.item({ class: props.b24ui?.item, colorItem: isSelectItem(item) ? item?.color : undefined })"
293
+ :class="b24ui.item({ class: props.b24ui?.item, colorItem: isSelectItem(item) ? item?.color : void 0 })"
342
294
  :disabled="isSelectItem(item) && item.disabled"
343
- :value="isSelectItem(item) ? get(item, props.valueKey as string) : item"
295
+ :value="isSelectItem(item) ? get(item, props.valueKey) : item"
344
296
  >
345
- <slot name="item" :item="(item as NestedItem<T>)" :index="index">
346
- <slot name="item-leading" :item="(item as NestedItem<T>)" :index="index">
297
+ <slot name="item" :item="item" :index="index">
298
+ <slot name="item-leading" :item="item" :index="index">
347
299
  <Component
348
300
  :is="item.icon"
349
301
  v-if="isSelectItem(item) && item.icon"
350
302
  :class="b24ui.itemLeadingIcon({ class: props.b24ui?.itemLeadingIcon, colorItem: item?.color })"
351
303
  />
352
- <B24Avatar v-else-if="isSelectItem(item) && item.avatar" :size="((props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="b24ui.itemLeadingAvatar({ class: props.b24ui?.itemLeadingAvatar, colorItem: item?.color })" />
304
+ <B24Avatar v-else-if="isSelectItem(item) && item.avatar" :size="props.b24ui?.itemLeadingAvatarSize || b24ui.itemLeadingAvatarSize()" v-bind="item.avatar" :class="b24ui.itemLeadingAvatar({ class: props.b24ui?.itemLeadingAvatar, colorItem: item?.color })" />
353
305
  <B24Chip
354
306
  v-else-if="isSelectItem(item) && item.chip"
355
- :size="((props.b24ui?.itemLeadingChipSize || b24ui.itemLeadingChipSize()) as ChipProps['size'])"
307
+ :size="props.b24ui?.itemLeadingChipSize || b24ui.itemLeadingChipSize()"
356
308
  inset
357
309
  standalone
358
310
  v-bind="item.chip"
@@ -361,18 +313,18 @@ function isSelectItem(item: SelectItem): item is SelectItemBase {
361
313
  </slot>
362
314
 
363
315
  <SelectItemText :class="b24ui.itemLabel({ class: props.b24ui?.itemLabel })">
364
- <slot name="item-label" :item="(item as NestedItem<T>)" :index="index">
365
- {{ isSelectItem(item) ? get(item, props.labelKey as string) : item }}
316
+ <slot name="item-label" :item="item" :index="index">
317
+ {{ isSelectItem(item) ? get(item, props.labelKey) : item }}
366
318
  </slot>
367
319
  </SelectItemText>
368
320
 
369
- <span :class="b24ui.itemTrailing({ class: props.b24ui?.itemTrailing, colorItem: isSelectItem(item) ? item?.color : undefined })">
370
- <slot name="item-trailing" :item="(item as NestedItem<T>)" :index="index" />
321
+ <span :class="b24ui.itemTrailing({ class: props.b24ui?.itemTrailing, colorItem: isSelectItem(item) ? item?.color : void 0 })">
322
+ <slot name="item-trailing" :item="item" :index="index" />
371
323
 
372
324
  <SelectItemIndicator as-child>
373
325
  <Component
374
326
  :is="selectedIcon || icons.check"
375
- :class="b24ui.itemTrailingIcon({ class: props.b24ui?.itemTrailingIcon, colorItem: isSelectItem(item) ? item?.color : undefined })"
327
+ :class="b24ui.itemTrailingIcon({ class: props.b24ui?.itemTrailingIcon, colorItem: isSelectItem(item) ? item?.color : void 0 })"
376
328
  />
377
329
  </SelectItemIndicator>
378
330
  </span>