@bitrix24/b24ui-nuxt 0.5.8 → 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.
- package/.nuxt/b24ui/navigation-menu.ts +0 -2
- package/.nuxt/b24ui/popover.ts +1 -1
- package/.nuxt/b24ui/textarea.ts +43 -0
- package/dist/meta.d.mts +5090 -4900
- package/dist/meta.mjs +5090 -4900
- package/dist/module.json +5 -5
- package/dist/module.mjs +11 -7
- package/dist/runtime/components/Advice.vue +47 -54
- package/dist/runtime/components/Advice.vue.d.ts +170 -0
- package/dist/runtime/components/Alert.vue +71 -96
- package/dist/runtime/components/Alert.vue.d.ts +464 -0
- package/dist/runtime/components/App.vue +37 -34
- package/dist/runtime/components/App.vue.d.ts +23 -0
- package/dist/runtime/components/Avatar.vue +69 -81
- package/dist/runtime/components/Avatar.vue.d.ts +281 -0
- package/dist/runtime/components/AvatarGroup.vue +53 -76
- package/dist/runtime/components/AvatarGroup.vue.d.ts +204 -0
- package/dist/runtime/components/Badge.vue +83 -83
- package/dist/runtime/components/Badge.vue.d.ts +517 -0
- package/dist/runtime/components/Button.vue +219 -149
- package/dist/runtime/components/Button.vue.d.ts +640 -0
- package/dist/runtime/components/ButtonGroup.vue +35 -51
- package/dist/runtime/components/ButtonGroup.vue.d.ts +116 -0
- package/dist/runtime/components/Calendar.vue +186 -152
- package/dist/runtime/components/Calendar.vue.d.ts +437 -0
- package/dist/runtime/components/Checkbox.vue +84 -73
- package/dist/runtime/components/Checkbox.vue.d.ts +354 -0
- package/dist/runtime/components/Chip.vue +59 -74
- package/dist/runtime/components/Chip.vue.d.ts +271 -0
- package/dist/runtime/components/Collapsible.vue +44 -41
- package/dist/runtime/components/Collapsible.vue.d.ts +118 -0
- package/dist/runtime/components/Container.vue +18 -27
- package/dist/runtime/components/Container.vue.d.ts +27 -0
- package/dist/runtime/components/Countdown.vue +198 -378
- package/dist/runtime/components/Countdown.vue.d.ts +356 -0
- package/dist/runtime/components/DescriptionList.vue +102 -149
- package/dist/runtime/components/DescriptionList.vue.d.ts +379 -0
- package/dist/runtime/components/DropdownMenu.vue +83 -139
- package/dist/runtime/components/DropdownMenu.vue.d.ts +533 -0
- package/dist/runtime/components/DropdownMenuContent.vue +137 -81
- package/dist/runtime/components/DropdownMenuContent.vue.d.ts +228 -0
- package/dist/runtime/components/Form.vue +162 -216
- package/dist/runtime/components/Form.vue.d.ts +55 -0
- package/dist/runtime/components/FormField.vue +76 -80
- package/dist/runtime/components/FormField.vue.d.ts +282 -0
- package/dist/runtime/components/Input.vue +166 -185
- package/dist/runtime/components/Input.vue.d.ts +755 -0
- package/dist/runtime/components/InputMenu.vue +300 -381
- package/dist/runtime/components/InputMenu.vue.d.ts +1504 -0
- package/dist/runtime/components/InputNumber.vue +180 -177
- package/dist/runtime/components/InputNumber.vue.d.ts +658 -0
- package/dist/runtime/components/Kbd.vue +33 -45
- package/dist/runtime/components/Kbd.vue.d.ts +109 -0
- package/dist/runtime/components/Link.vue +179 -173
- package/dist/runtime/components/Link.vue.d.ts +129 -0
- package/dist/runtime/components/LinkBase.vue +64 -42
- package/dist/runtime/components/LinkBase.vue.d.ts +48 -0
- package/dist/runtime/components/Modal.vue +105 -127
- package/dist/runtime/components/Modal.vue.d.ts +327 -0
- package/dist/runtime/components/ModalDialogClose.vue +4 -8
- package/dist/runtime/components/ModalDialogClose.vue.d.ts +10 -0
- package/dist/runtime/components/Navbar.vue +24 -33
- package/dist/runtime/components/Navbar.vue.d.ts +101 -0
- package/dist/runtime/components/NavbarDivider.vue +24 -33
- package/dist/runtime/components/NavbarDivider.vue.d.ts +101 -0
- package/dist/runtime/components/NavbarSection.vue +24 -33
- package/dist/runtime/components/NavbarSection.vue.d.ts +101 -0
- package/dist/runtime/components/NavbarSpacer.vue +24 -33
- package/dist/runtime/components/NavbarSpacer.vue.d.ts +101 -0
- package/dist/runtime/components/NavigationMenu.vue +152 -216
- package/dist/runtime/components/NavigationMenu.vue.d.ts +824 -0
- package/dist/runtime/components/OverlayProvider.vue +13 -17
- package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -0
- package/dist/runtime/components/Popover.vue +81 -81
- package/dist/runtime/components/Popover.vue.d.ts +147 -0
- package/dist/runtime/components/Progress.vue +109 -136
- package/dist/runtime/components/Progress.vue.d.ts +592 -0
- package/dist/runtime/components/RadioGroup.vue +120 -134
- package/dist/runtime/components/RadioGroup.vue.d.ts +723 -0
- package/dist/runtime/components/Range.vue +94 -85
- package/dist/runtime/components/Range.vue.d.ts +417 -0
- package/dist/runtime/components/Select.vue +212 -260
- package/dist/runtime/components/Select.vue.d.ts +1200 -0
- package/dist/runtime/components/SelectMenu.vue +272 -366
- package/dist/runtime/components/SelectMenu.vue.d.ts +1298 -0
- package/dist/runtime/components/Separator.vue +61 -71
- package/dist/runtime/components/Separator.vue.d.ts +400 -0
- package/dist/runtime/components/Sidebar.vue +24 -33
- package/dist/runtime/components/Sidebar.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarBody.vue +30 -38
- package/dist/runtime/components/SidebarBody.vue.d.ts +90 -0
- package/dist/runtime/components/SidebarFooter.vue +24 -33
- package/dist/runtime/components/SidebarFooter.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarHeader.vue +24 -33
- package/dist/runtime/components/SidebarHeader.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarHeading.vue +24 -33
- package/dist/runtime/components/SidebarHeading.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarLayout.vue +40 -70
- package/dist/runtime/components/SidebarLayout.vue.d.ts +222 -0
- package/dist/runtime/components/SidebarSection.vue +24 -33
- package/dist/runtime/components/SidebarSection.vue.d.ts +101 -0
- package/dist/runtime/components/SidebarSpacer.vue +24 -33
- package/dist/runtime/components/SidebarSpacer.vue.d.ts +101 -0
- package/dist/runtime/components/Skeleton.vue +17 -22
- package/dist/runtime/components/Skeleton.vue.d.ts +26 -0
- package/dist/runtime/components/Slideover.vue +108 -131
- package/dist/runtime/components/Slideover.vue.d.ts +360 -0
- package/dist/runtime/components/StackedLayout.vue +40 -73
- package/dist/runtime/components/StackedLayout.vue.d.ts +192 -0
- package/dist/runtime/components/Switch.vue +100 -95
- package/dist/runtime/components/Switch.vue.d.ts +587 -0
- package/dist/runtime/components/Tabs.vue +83 -105
- package/dist/runtime/components/Tabs.vue.d.ts +453 -0
- package/dist/runtime/components/Textarea.vue +215 -203
- package/dist/runtime/components/Textarea.vue.d.ts +601 -0
- package/dist/runtime/components/Toast.vue +94 -105
- package/dist/runtime/components/Toast.vue.d.ts +438 -0
- package/dist/runtime/components/Toaster.vue +94 -111
- package/dist/runtime/components/Toaster.vue.d.ts +219 -0
- package/dist/runtime/components/Tooltip.vue +78 -64
- package/dist/runtime/components/Tooltip.vue.d.ts +186 -0
- package/dist/runtime/components/content/TableWrapper.vue +58 -70
- package/dist/runtime/components/content/TableWrapper.vue.d.ts +237 -0
- package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
- package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
- package/dist/runtime/composables/useComponentIcons.d.ts +3 -3
- package/dist/runtime/composables/useFormField.d.ts +1 -1
- package/dist/runtime/prose/A.vue +18 -23
- package/dist/runtime/prose/A.vue.d.ts +84 -0
- package/dist/runtime/prose/Blockquote.vue +18 -23
- package/dist/runtime/prose/Blockquote.vue.d.ts +84 -0
- package/dist/runtime/prose/Code.vue +23 -31
- package/dist/runtime/prose/Code.vue.d.ts +97 -0
- package/dist/runtime/prose/Em.vue +18 -23
- package/dist/runtime/prose/Em.vue.d.ts +84 -0
- package/dist/runtime/prose/H1.vue +18 -23
- package/dist/runtime/prose/H1.vue.d.ts +97 -0
- package/dist/runtime/prose/H2.vue +18 -23
- package/dist/runtime/prose/H2.vue.d.ts +123 -0
- package/dist/runtime/prose/H3.vue +18 -23
- package/dist/runtime/prose/H3.vue.d.ts +123 -0
- package/dist/runtime/prose/H4.vue +18 -23
- package/dist/runtime/prose/H4.vue.d.ts +123 -0
- package/dist/runtime/prose/H5.vue +18 -23
- package/dist/runtime/prose/H5.vue.d.ts +123 -0
- package/dist/runtime/prose/H6.vue +18 -23
- package/dist/runtime/prose/H6.vue.d.ts +123 -0
- package/dist/runtime/prose/Hr.vue +18 -19
- package/dist/runtime/prose/Hr.vue.d.ts +74 -0
- package/dist/runtime/prose/Img.vue +18 -23
- package/dist/runtime/prose/Img.vue.d.ts +77 -0
- package/dist/runtime/prose/Li.vue +18 -23
- package/dist/runtime/prose/Li.vue.d.ts +84 -0
- package/dist/runtime/prose/Ol.vue +18 -23
- package/dist/runtime/prose/Ol.vue.d.ts +84 -0
- package/dist/runtime/prose/P.vue +18 -23
- package/dist/runtime/prose/P.vue.d.ts +84 -0
- package/dist/runtime/prose/Pre.vue +28 -33
- package/dist/runtime/prose/Pre.vue.d.ts +117 -0
- package/dist/runtime/prose/Strong.vue +18 -23
- package/dist/runtime/prose/Strong.vue.d.ts +84 -0
- package/dist/runtime/prose/Table.vue +44 -54
- package/dist/runtime/prose/Table.vue.d.ts +144 -0
- package/dist/runtime/prose/Tbody.vue +18 -23
- package/dist/runtime/prose/Tbody.vue.d.ts +84 -0
- package/dist/runtime/prose/Td.vue +18 -23
- package/dist/runtime/prose/Td.vue.d.ts +84 -0
- package/dist/runtime/prose/Th.vue +18 -23
- package/dist/runtime/prose/Th.vue.d.ts +84 -0
- package/dist/runtime/prose/Thead.vue +18 -23
- package/dist/runtime/prose/Thead.vue.d.ts +84 -0
- package/dist/runtime/prose/Tr.vue +18 -23
- package/dist/runtime/prose/Tr.vue.d.ts +84 -0
- package/dist/runtime/prose/Ul.vue +18 -23
- package/dist/runtime/prose/Ul.vue.d.ts +84 -0
- package/dist/runtime/vue/components/Link.vue +201 -202
- package/dist/runtime/vue/components/Link.vue.d.ts +129 -0
- package/dist/runtime/vue/stubs.d.ts +2 -2
- package/dist/shared/{b24ui-nuxt.DBFS6LH7.mjs → b24ui-nuxt.CS9Lf0os.mjs} +54 -4
- package/dist/types.d.mts +3 -5
- package/dist/unplugin.mjs +1 -1
- package/dist/vite.mjs +1 -1
- package/package.json +62 -35
- package/dist/meta.cjs +0 -71922
- package/dist/meta.d.cts +0 -71920
- package/dist/meta.d.ts +0 -71920
- package/dist/module.cjs +0 -59
- package/dist/module.d.cts +0 -15
- package/dist/module.d.ts +0 -15
- package/dist/shared/b24ui-nuxt.B9fPD5yO.cjs +0 -7671
- package/dist/types.d.ts +0 -7
- package/dist/unplugin.cjs +0 -236
- package/dist/unplugin.d.cts +0 -33
- package/dist/unplugin.d.ts +0 -33
- package/dist/vite.cjs +0 -21
- package/dist/vite.d.cts +0 -14
- package/dist/vite.d.ts +0 -14
|
@@ -1,212 +1,178 @@
|
|
|
1
|
-
<script
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
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
|
|
171
|
-
import { computed, toRef } from
|
|
172
|
-
import {
|
|
173
|
-
import { defu } from
|
|
174
|
-
import { reactivePick } from
|
|
175
|
-
import { useButtonGroup } from
|
|
176
|
-
import { useComponentIcons } from
|
|
177
|
-
import { useFormField } from
|
|
178
|
-
import { compare, get, isArrayOfArray } from
|
|
179
|
-
import icons from
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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(
|
|
256
|
-
emits(
|
|
257
|
-
emitFormBlur()
|
|
209
|
+
const event = new FocusEvent("blur");
|
|
210
|
+
emits("blur", event);
|
|
211
|
+
emitFormBlur();
|
|
258
212
|
} else {
|
|
259
|
-
const event = new FocusEvent(
|
|
260
|
-
emits(
|
|
261
|
-
emitFormFocus()
|
|
213
|
+
const event = new FocusEvent("focus");
|
|
214
|
+
emits("focus", event);
|
|
215
|
+
emitFormFocus();
|
|
262
216
|
}
|
|
263
217
|
}
|
|
264
|
-
|
|
265
|
-
|
|
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="
|
|
280
|
-
:model-value="
|
|
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="
|
|
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="
|
|
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="
|
|
301
|
-
<template v-for="displayedModelValue in [displayValue(modelValue
|
|
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 ??
|
|
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="
|
|
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
|
|
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 :
|
|
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
|
|
295
|
+
:value="isSelectItem(item) ? get(item, props.valueKey) : item"
|
|
344
296
|
>
|
|
345
|
-
<slot name="item" :item="
|
|
346
|
-
<slot name="item-leading" :item="
|
|
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="
|
|
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="
|
|
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="
|
|
365
|
-
{{ isSelectItem(item) ? get(item, props.labelKey
|
|
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 :
|
|
370
|
-
<slot name="item-trailing" :item="
|
|
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 :
|
|
327
|
+
:class="b24ui.itemTrailingIcon({ class: props.b24ui?.itemTrailingIcon, colorItem: isSelectItem(item) ? item?.color : void 0 })"
|
|
376
328
|
/>
|
|
377
329
|
</SelectItemIndicator>
|
|
378
330
|
</span>
|