@byyuurin/ui 0.1.0 → 0.3.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 (140) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +5 -3
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +2 -2
  5. package/dist/runtime/components/Accordion.vue +41 -41
  6. package/dist/runtime/components/Accordion.vue.d.ts +11 -7
  7. package/dist/runtime/components/Alert.vue +63 -63
  8. package/dist/runtime/components/Alert.vue.d.ts +4 -4
  9. package/dist/runtime/components/App.vue +11 -10
  10. package/dist/runtime/components/App.vue.d.ts +11 -7
  11. package/dist/runtime/components/Avatar.vue +29 -29
  12. package/dist/runtime/components/Avatar.vue.d.ts +4 -3
  13. package/dist/runtime/components/AvatarGroup.vue +4 -4
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +1 -1
  15. package/dist/runtime/components/Badge.vue +32 -32
  16. package/dist/runtime/components/Badge.vue.d.ts +2 -2
  17. package/dist/runtime/components/Breadcrumb.vue +49 -49
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +10 -6
  19. package/dist/runtime/components/Button.vue +52 -51
  20. package/dist/runtime/components/Button.vue.d.ts +1 -1
  21. package/dist/runtime/components/Calendar.vue +75 -77
  22. package/dist/runtime/components/Calendar.vue.d.ts +16 -12
  23. package/dist/runtime/components/Card.vue +41 -41
  24. package/dist/runtime/components/Card.vue.d.ts +1 -1
  25. package/dist/runtime/components/Carousel.vue +85 -66
  26. package/dist/runtime/components/Carousel.vue.d.ts +14 -10
  27. package/dist/runtime/components/Checkbox.vue +46 -46
  28. package/dist/runtime/components/Checkbox.vue.d.ts +4 -3
  29. package/dist/runtime/components/CheckboxGroup.vue +131 -0
  30. package/dist/runtime/components/CheckboxGroup.vue.d.ts +93 -0
  31. package/dist/runtime/components/Chip.vue +15 -15
  32. package/dist/runtime/components/Chip.vue.d.ts +2 -2
  33. package/dist/runtime/components/Collapsible.vue +14 -14
  34. package/dist/runtime/components/Collapsible.vue.d.ts +2 -2
  35. package/dist/runtime/components/Drawer.vue +76 -76
  36. package/dist/runtime/components/Drawer.vue.d.ts +6 -6
  37. package/dist/runtime/components/DropdownMenu.vue +28 -28
  38. package/dist/runtime/components/DropdownMenu.vue.d.ts +17 -9
  39. package/dist/runtime/components/DropdownMenuContent.vue +152 -153
  40. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +11 -7
  41. package/dist/runtime/components/FieldGroup.vue +3 -3
  42. package/dist/runtime/components/FieldGroup.vue.d.ts +2 -2
  43. package/dist/runtime/components/Form.vue +9 -9
  44. package/dist/runtime/components/Form.vue.d.ts +13 -8
  45. package/dist/runtime/components/FormField.vue +39 -38
  46. package/dist/runtime/components/FormField.vue.d.ts +7 -2
  47. package/dist/runtime/components/Icon.vue +2 -2
  48. package/dist/runtime/components/Icon.vue.d.ts +1 -1
  49. package/dist/runtime/components/Input.vue +48 -48
  50. package/dist/runtime/components/Input.vue.d.ts +16 -12
  51. package/dist/runtime/components/InputNumber.vue +48 -50
  52. package/dist/runtime/components/InputNumber.vue.d.ts +128 -129
  53. package/dist/runtime/components/InputTags.vue +156 -0
  54. package/dist/runtime/components/InputTags.vue.d.ts +90 -0
  55. package/dist/runtime/components/Kbd.vue +3 -3
  56. package/dist/runtime/components/Kbd.vue.d.ts +2 -2
  57. package/dist/runtime/components/Link.vue +26 -25
  58. package/dist/runtime/components/Link.vue.d.ts +16 -6
  59. package/dist/runtime/components/LinkBase.vue +3 -3
  60. package/dist/runtime/components/LinkBase.vue.d.ts +2 -2
  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 +74 -74
  64. package/dist/runtime/components/Modal.vue.d.ts +6 -6
  65. package/dist/runtime/components/NavigationMenu.vue +243 -234
  66. package/dist/runtime/components/NavigationMenu.vue.d.ts +53 -14
  67. package/dist/runtime/components/OverlayProvider.vue +9 -9
  68. package/dist/runtime/components/Pagination.vue +47 -47
  69. package/dist/runtime/components/Pagination.vue.d.ts +4 -4
  70. package/dist/runtime/components/PinInput.vue +23 -23
  71. package/dist/runtime/components/PinInput.vue.d.ts +14 -10
  72. package/dist/runtime/components/Popover.vue +22 -22
  73. package/dist/runtime/components/Popover.vue.d.ts +11 -7
  74. package/dist/runtime/components/Progress.vue +25 -25
  75. package/dist/runtime/components/Progress.vue.d.ts +2 -2
  76. package/dist/runtime/components/RadioGroup.vue +50 -50
  77. package/dist/runtime/components/RadioGroup.vue.d.ts +13 -9
  78. package/dist/runtime/components/ScrollArea.vue +32 -32
  79. package/dist/runtime/components/ScrollArea.vue.d.ts +2 -2
  80. package/dist/runtime/components/Select.vue +299 -148
  81. package/dist/runtime/components/Select.vue.d.ts +103 -123
  82. package/dist/runtime/components/Separator.vue +30 -30
  83. package/dist/runtime/components/Separator.vue.d.ts +2 -2
  84. package/dist/runtime/components/Skeleton.vue +11 -11
  85. package/dist/runtime/components/Skeleton.vue.d.ts +2 -2
  86. package/dist/runtime/components/Slider.vue +25 -25
  87. package/dist/runtime/components/Slider.vue.d.ts +11 -7
  88. package/dist/runtime/components/Stepper.vue +116 -0
  89. package/dist/runtime/components/Stepper.vue.d.ts +83 -0
  90. package/dist/runtime/components/Switch.vue +30 -30
  91. package/dist/runtime/components/Switch.vue.d.ts +4 -3
  92. package/dist/runtime/components/Table.vue +188 -166
  93. package/dist/runtime/components/Table.vue.d.ts +27 -22
  94. package/dist/runtime/components/Tabs.vue +74 -74
  95. package/dist/runtime/components/Tabs.vue.d.ts +12 -8
  96. package/dist/runtime/components/Textarea.vue +47 -47
  97. package/dist/runtime/components/Textarea.vue.d.ts +16 -11
  98. package/dist/runtime/components/Timeline.vue +102 -0
  99. package/dist/runtime/components/Timeline.vue.d.ts +78 -0
  100. package/dist/runtime/components/Toast.vue +93 -93
  101. package/dist/runtime/components/Toast.vue.d.ts +5 -5
  102. package/dist/runtime/components/ToastProvider.vue +29 -29
  103. package/dist/runtime/components/ToastProvider.vue.d.ts +3 -3
  104. package/dist/runtime/components/Tooltip.vue +24 -25
  105. package/dist/runtime/components/Tooltip.vue.d.ts +2 -2
  106. package/dist/runtime/components/Tree.vue +241 -0
  107. package/dist/runtime/components/Tree.vue.d.ts +121 -0
  108. package/dist/runtime/composables/defineShortcuts.d.ts +1 -0
  109. package/dist/runtime/composables/defineShortcuts.js +44 -8
  110. package/dist/runtime/composables/useLocale.d.ts +12 -0
  111. package/dist/runtime/locale/en.d.ts +6 -0
  112. package/dist/runtime/locale/en.js +6 -0
  113. package/dist/runtime/locale/zh_tw.d.ts +6 -0
  114. package/dist/runtime/locale/zh_tw.js +6 -0
  115. package/dist/runtime/types/html.d.ts +8 -0
  116. package/dist/runtime/types/html.js +0 -0
  117. package/dist/runtime/types/index.d.ts +7 -0
  118. package/dist/runtime/types/index.js +7 -0
  119. package/dist/runtime/types/input.d.ts +5 -5
  120. package/dist/runtime/types/locale.d.ts +6 -0
  121. package/dist/runtime/types/unocss.d.ts +4 -4
  122. package/dist/runtime/types/utils.d.ts +9 -6
  123. package/dist/runtime/utils/index.d.ts +3 -3
  124. package/dist/runtime/utils/link.d.ts +2 -1
  125. package/dist/runtime/utils/link.js +40 -29
  126. package/dist/runtime/vue/components/Icon.vue +2 -2
  127. package/dist/runtime/vue/components/Icon.vue.d.ts +1 -1
  128. package/dist/runtime/vue/components/Link.vue +7 -12
  129. package/dist/runtime/vue/components/Link.vue.d.ts +11 -40
  130. package/dist/setup.d.mts +1 -1
  131. package/dist/shared/{ui.CzIlLITK.mjs → ui.9kQouwss.mjs} +5 -3
  132. package/dist/shared/{ui.DpbffTXs.d.mts → ui.D8Bg1HWt.d.mts} +2 -0
  133. package/dist/shared/{ui.DSyJHSTk.mjs → ui.DpkP12cX.mjs} +784 -84
  134. package/dist/unocss.mjs +1 -1
  135. package/dist/unplugin.d.mts +1 -1
  136. package/dist/unplugin.mjs +2 -2
  137. package/dist/vite.d.mts +1 -1
  138. package/dist/vite.mjs +2 -2
  139. package/package.json +29 -29
  140. package/vue-plugin.d.ts +5 -5
@@ -66,157 +66,156 @@ const groups = computed(
66
66
  </script>
67
67
 
68
68
  <template>
69
- <DefineItemTemplate v-slot="{ item, active, index }">
70
- <slot :name="item.slot || 'item'" :item="item" :index="index" :ui="ui">
71
- <slot :name="`${item.slot || 'item'}-leading`" :item="item" :active="active" :index="index" :ui="ui">
72
- <Icon
73
- v-if="item.loading"
74
- :name="loadingIcon || appConfig.ui.icons.loading"
75
- :class="props.ui.itemLeadingIcon({ class: [props.uiOverride?.itemLeadingIcon, item.ui?.itemLeadingIcon], color: item.color, loading: true })"
76
- data-part="item-leading-icon"
77
- />
78
- <Icon
79
- v-else-if="item.icon"
80
- :name="item.icon"
81
- :class="props.ui.itemLeadingIcon({ class: [props.uiOverride?.itemLeadingIcon, item.ui?.itemLeadingIcon], color: item.color, active })"
82
- data-part="item-leading-icon"
83
- />
84
- <Avatar
85
- v-else-if="item.avatar"
86
- v-bind="item.avatar"
87
- :size="item.avatar.size || props.size"
88
- :class="props.ui.itemLeadingAvatar({ class: [props.uiOverride?.itemLeadingAvatar, item.ui?.itemLeadingAvatar], active })"
89
- data-part="item-leading-avatar"
90
- />
91
- </slot>
92
-
93
- <span
94
- v-if="get(item, props.labelKey) || !!slots[`${item.slot || 'item'}-label`] || (get(item, props.descriptionKey) || !!slots[`${item.slot || 'item'}-description`])"
95
- :class="props.ui.itemWrapper({ class: [props.uiOverride?.itemWrapper, item.ui?.itemWrapper] })"
96
- data-part="item-wrapper"
97
- >
98
- <span
99
- v-if="get(item, props.labelKey) || !!slots[`${item.slot || 'item'}-label`]"
100
- :class="props.ui.itemLabel({ class: [props.uiOverride?.itemLabel, item.ui?.itemLabel], active })"
101
- data-part="item-label"
102
- >
103
- <slot :name="`${item.slot || 'item'}-label`" :item="item" :active="active" :index="index">
104
- {{ get(item, props.labelKey) }}
105
- </slot>
106
-
107
- <Icon
108
- v-if="item.target === '_blank' && props.externalIcon !== false"
109
- :name="typeof props.externalIcon === 'string' ? props.externalIcon : appConfig.ui.icons.external"
110
- :class="props.ui.itemLabelExternalIcon({ class: [props.uiOverride?.itemLabelExternalIcon, item.ui?.itemLabelExternalIcon], color: item.color, active })"
111
- data-part="item-label-external-icon"
112
- />
113
- </span>
114
-
115
- <span v-if="get(item, props.descriptionKey)" :class="props.ui.itemDescription({ class: [props.uiOverride?.itemDescription, item.ui?.itemDescription] })" data-part="item-description">
116
- <slot :name="`${item.slot || 'item'}-description`" :item="item" :active="active" :index="index">
117
- {{ get(item, props.descriptionKey) }}
118
- </slot>
119
- </span>
120
- </span>
121
-
122
- <span :class="props.ui.itemTrailing({ class: [props.uiOverride?.itemTrailing, item.ui?.itemTrailing] })" data-part="item-trailing">
123
- <slot :name="`${item.slot || 'item'}-trailing`" :item="item" :active="active" :index="index" :ui="ui">
124
- <Icon v-if="item.children?.length" :name="childrenIcon" :class="props.ui.itemTrailingIcon({ class: [props.uiOverride?.itemTrailingIcon, item.ui?.itemTrailingIcon], color: item.color, active })" data-part="item-trailing-icon" />
125
- <span v-else-if="item.kbds?.length" :class="props.ui.itemTrailingKbds({ class: [props.uiOverride?.itemTrailingKbds, item.ui?.itemTrailingKbds] })" data-part="item-trailing-kbds">
126
- <Kbd
127
- v-for="(kbd, kbdIndex) in item.kbds"
128
- :key="kbdIndex"
129
- :size="item.ui?.itemTrailingKbdsSize || props.uiOverride?.itemTrailingKbdsSize || ui.itemTrailingKbdsSize()"
130
- v-bind="typeof kbd === 'string' ? { value: kbd } : kbd"
131
- />
132
- </span>
133
- </slot>
134
-
135
- <DropdownMenu.ItemIndicator as-child>
136
- <Icon :name="props.checkedIcon || appConfig.ui.icons.check" :class="props.ui.itemTrailingIcon({ class: [props.uiOverride?.itemTrailingIcon, item.ui?.itemTrailingIcon], color: item.color })" data-part="item-trailing-icon" />
137
- </DropdownMenu.ItemIndicator>
138
- </span>
139
- </slot>
140
- </DefineItemTemplate>
141
-
142
- <DropdownMenu.Portal v-bind="portalProps">
143
- <component :is="props.sub ? DropdownMenu.SubContent : DropdownMenu.Content" v-bind="{ ...contentProps, ...$attrs }" :class="props.class">
144
- <slot name="content-top"></slot>
145
-
146
- <div role="presentation" :class="props.ui.viewport({ class: props.uiOverride?.viewport })" data-part="viewport">
147
- <DropdownMenu.Group v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="props.ui.group({ class: props.uiOverride?.group })" data-part="group">
148
- <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
149
- <DropdownMenu.Label v-if="item.type === 'label'" :class="props.ui.label({ class: [props.uiOverride?.label, item.ui?.label, item.class] })" data-part="label">
150
- <ReuseItemTemplate :item="item" :index="index" />
151
- </DropdownMenu.Label>
152
- <DropdownMenu.Separator v-else-if="item.type === 'separator'" :class="props.ui.separator({ class: [props.uiOverride?.separator, item.ui?.separator, item.class] })" data-part="separator" />
153
- <DropdownMenu.Sub v-else-if="item?.children?.length" :open="item.open" :default-open="item.defaultOpen">
154
- <DropdownMenu.SubTrigger
155
- as="button"
156
- type="button"
157
- :disabled="item.disabled"
158
- :text-value="get(item, props.labelKey)"
159
- :class="props.ui.item({ class: [props.uiOverride?.item, item.ui?.item, item.class], color: item.color })"
160
- data-part="item"
161
- >
162
- <ReuseItemTemplate :item="item" :index="index" />
163
- </DropdownMenu.SubTrigger>
164
-
165
- <DropdownMenuContent
166
- sub
167
- :class="props.class"
168
- :ui="props.ui"
169
- :ui-override="props.uiOverride"
170
- :portal="props.portal"
171
- :items="item.children"
172
- side="right"
173
- align="start"
174
- :align-offset="-4"
175
- :side-offset="3"
176
- :label-key="props.labelKey"
177
- :description-key="props.descriptionKey"
178
- :checked-icon="props.checkedIcon"
179
- :loading-icon="props.loadingIcon"
180
- :external-icon="props.externalIcon"
181
- v-bind="item.content"
182
- >
183
- <template v-for="(_, name) in getProxySlots()" #[name]="slotProps">
184
- <slot :name="name" v-bind="slotProps"></slot>
185
- </template>
186
- </DropdownMenuContent>
187
- </DropdownMenu.Sub>
188
- <DropdownMenu.CheckboxItem
189
- v-else-if="item.type === 'checkbox'"
190
- :model-value="item.checked"
191
- :disabled="item.disabled"
192
- :text-value="get(item, props.labelKey)"
193
- :class="props.ui.item({ class: [props.uiOverride?.item, item.ui?.item, item.class], color: item.color })"
194
- data-part="item"
195
- @update:model-value="item.onUpdateChecked"
196
- @select="item.onSelect"
197
- >
198
- <ReuseItemTemplate :item="item" :index="index" />
199
- </DropdownMenu.CheckboxItem>
200
- <DropdownMenu.Item
201
- v-else
202
- as-child
203
- :disabled="item.disabled"
204
- :text-value="get(item, props.labelKey)"
205
- @select="item.onSelect"
206
- >
207
- <Link v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item)" custom>
208
- <LinkBase v-bind="slotProps" :class="props.ui.item({ class: [props.uiOverride?.item, item.ui?.item, item.class], color: item.color, active })" data-part="item">
209
- <ReuseItemTemplate :item="item" :active="active" :index="index" />
210
- </LinkBase>
211
- </Link>
212
- </DropdownMenu.Item>
213
- </template>
214
- </DropdownMenu.Group>
215
- </div>
216
-
217
- <slot></slot>
218
-
219
- <slot name="content-bottom"></slot>
220
- </component>
221
- </DropdownMenu.Portal>
69
+ <DefineItemTemplate v-slot="{ item, active, index }">
70
+ <slot :name="item.slot || 'item'" :item="item" :index="index" :ui="ui">
71
+ <slot :name="`${item.slot || 'item'}-leading`" :item="item" :active="active" :index="index" :ui="ui">
72
+ <Icon
73
+ v-if="item.loading"
74
+ :name="loadingIcon || appConfig.ui.icons.loading"
75
+ :class="props.ui.itemLeadingIcon({ class: [props.uiOverride?.itemLeadingIcon, item.ui?.itemLeadingIcon], color: item.color, loading: true })"
76
+ data-part="itemLeadingIcon"
77
+ />
78
+ <Icon
79
+ v-else-if="item.icon"
80
+ :name="item.icon"
81
+ :class="props.ui.itemLeadingIcon({ class: [props.uiOverride?.itemLeadingIcon, item.ui?.itemLeadingIcon], color: item.color, active })"
82
+ data-part="itemLeadingIcon"
83
+ />
84
+ <Avatar
85
+ v-else-if="item.avatar"
86
+ v-bind="item.avatar"
87
+ :size="item.avatar.size || props.size"
88
+ :class="props.ui.itemLeadingAvatar({ class: [props.uiOverride?.itemLeadingAvatar, item.ui?.itemLeadingAvatar], active })"
89
+ data-part="itemLeadingAvatar"
90
+ />
91
+ </slot>
92
+
93
+ <span
94
+ v-if="get(item, props.labelKey) || !!slots[`${item.slot || 'item'}-label`] || (get(item, props.descriptionKey) || !!slots[`${item.slot || 'item'}-description`])"
95
+ :class="props.ui.itemWrapper({ class: [props.uiOverride?.itemWrapper, item.ui?.itemWrapper] })"
96
+ data-part="itemWrapper"
97
+ >
98
+ <span
99
+ v-if="get(item, props.labelKey) || !!slots[`${item.slot || 'item'}-label`]"
100
+ :class="props.ui.itemLabel({ class: [props.uiOverride?.itemLabel, item.ui?.itemLabel], active })"
101
+ data-part="itemLabel"
102
+ >
103
+ <slot :name="`${item.slot || 'item'}-label`" :item="item" :active="active" :index="index">
104
+ {{ get(item, props.labelKey) }}
105
+ </slot>
106
+
107
+ <Icon
108
+ v-if="item.target === '_blank' && props.externalIcon !== false"
109
+ :name="typeof props.externalIcon === 'string' ? props.externalIcon : appConfig.ui.icons.external"
110
+ :class="props.ui.itemLabelExternalIcon({ class: [props.uiOverride?.itemLabelExternalIcon, item.ui?.itemLabelExternalIcon], color: item.color, active })"
111
+ data-part="itemLabelExternalIcon"
112
+ />
113
+ </span>
114
+
115
+ <span v-if="get(item, props.descriptionKey)" :class="props.ui.itemDescription({ class: [props.uiOverride?.itemDescription, item.ui?.itemDescription] })" data-part="itemDescription">
116
+ <slot :name="`${item.slot || 'item'}-description`" :item="item" :active="active" :index="index">
117
+ {{ get(item, props.descriptionKey) }}
118
+ </slot>
119
+ </span>
120
+ </span>
121
+
122
+ <span :class="props.ui.itemTrailing({ class: [props.uiOverride?.itemTrailing, item.ui?.itemTrailing] })" data-part="itemTrailing">
123
+ <slot :name="`${item.slot || 'item'}-trailing`" :item="item" :active="active" :index="index" :ui="ui">
124
+ <Icon v-if="item.children?.length" :name="childrenIcon" :class="props.ui.itemTrailingIcon({ class: [props.uiOverride?.itemTrailingIcon, item.ui?.itemTrailingIcon], color: item.color, active })" data-part="itemTrailingIcon" />
125
+ <span v-else-if="item.kbds?.length" :class="props.ui.itemTrailingKbds({ class: [props.uiOverride?.itemTrailingKbds, item.ui?.itemTrailingKbds] })" data-part="itemTrailingKbds">
126
+ <Kbd
127
+ v-for="(kbd, kbdIndex) in item.kbds"
128
+ :key="kbdIndex"
129
+ :size="item.ui?.itemTrailingKbdsSize || props.uiOverride?.itemTrailingKbdsSize || ui.itemTrailingKbdsSize()"
130
+ v-bind="typeof kbd === 'string' ? { value: kbd } : kbd"
131
+ />
132
+ </span>
133
+ </slot>
134
+
135
+ <DropdownMenu.ItemIndicator as-child>
136
+ <Icon :name="props.checkedIcon || appConfig.ui.icons.check" :class="props.ui.itemTrailingIcon({ class: [props.uiOverride?.itemTrailingIcon, item.ui?.itemTrailingIcon], color: item.color })" data-part="itemTrailingIcon" />
137
+ </DropdownMenu.ItemIndicator>
138
+ </span>
139
+ </slot>
140
+ </DefineItemTemplate>
141
+
142
+ <DropdownMenu.Portal v-bind="portalProps">
143
+ <component :is="props.sub ? DropdownMenu.SubContent : DropdownMenu.Content" v-bind="{ ...contentProps, ...$attrs }" :class="props.class">
144
+ <slot name="content-top" :sub="props.sub ?? false"></slot>
145
+
146
+ <div role="presentation" :class="props.ui.viewport({ class: props.uiOverride?.viewport })" data-part="viewport">
147
+ <DropdownMenu.Group v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="props.ui.group({ class: props.uiOverride?.group })" data-part="group">
148
+ <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
149
+ <DropdownMenu.Label v-if="item.type === 'label'" :class="props.ui.label({ class: [props.uiOverride?.label, item.ui?.label, item.class] })" data-part="label">
150
+ <ReuseItemTemplate :item="item" :index="index" />
151
+ </DropdownMenu.Label>
152
+ <DropdownMenu.Separator v-else-if="item.type === 'separator'" :class="props.ui.separator({ class: [props.uiOverride?.separator, item.ui?.separator, item.class] })" data-part="separator" />
153
+ <DropdownMenu.Sub v-else-if="item?.children?.length" :open="item.open" :default-open="item.defaultOpen">
154
+ <DropdownMenu.SubTrigger
155
+ as="button"
156
+ type="button"
157
+ :disabled="item.disabled"
158
+ :text-value="get(item, props.labelKey)"
159
+ :class="props.ui.item({ class: [props.uiOverride?.item, item.ui?.item, item.class], color: item.color })"
160
+ data-part="item"
161
+ >
162
+ <ReuseItemTemplate :item="item" :index="index" />
163
+ </DropdownMenu.SubTrigger>
164
+
165
+ <DropdownMenuContent
166
+ sub
167
+ :class="props.class"
168
+ :ui="props.ui"
169
+ :ui-override="props.uiOverride"
170
+ :portal="props.portal"
171
+ :items="item.children"
172
+ side="right"
173
+ align="start"
174
+ :align-offset="-4"
175
+ :side-offset="3"
176
+ :label-key="props.labelKey"
177
+ :description-key="props.descriptionKey"
178
+ :checked-icon="props.checkedIcon"
179
+ :loading-icon="props.loadingIcon"
180
+ :external-icon="props.externalIcon"
181
+ v-bind="item.content"
182
+ >
183
+ <template v-for="(_, name) in getProxySlots()" #[name]="slotProps">
184
+ <slot :name="name" v-bind="slotProps"></slot>
185
+ </template>
186
+ </DropdownMenuContent>
187
+ </DropdownMenu.Sub>
188
+ <DropdownMenu.CheckboxItem
189
+ v-else-if="item.type === 'checkbox'"
190
+ :model-value="item.checked"
191
+ :disabled="item.disabled"
192
+ :text-value="get(item, props.labelKey)"
193
+ :class="props.ui.item({ class: [props.uiOverride?.item, item.ui?.item, item.class], color: item.color })"
194
+ data-part="item"
195
+ @update:model-value="item.onUpdateChecked"
196
+ @select="item.onSelect"
197
+ >
198
+ <ReuseItemTemplate :item="item" :index="index" />
199
+ </DropdownMenu.CheckboxItem>
200
+ <Link v-else v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item)" custom>
201
+ <DropdownMenu.Item
202
+ as-child
203
+ :disabled="item.disabled"
204
+ :text-value="get(item, props.labelKey)"
205
+ @select="item.onSelect"
206
+ >
207
+ <LinkBase v-bind="slotProps" :class="props.ui.item({ class: [props.uiOverride?.item, item.ui?.item, item.class], color: item.color, active })" data-part="item">
208
+ <ReuseItemTemplate :item="item" :active="active" :index="index" />
209
+ </LinkBase>
210
+ </DropdownMenu.Item>
211
+ </Link>
212
+ </template>
213
+ </DropdownMenu.Group>
214
+ </div>
215
+
216
+ <slot></slot>
217
+
218
+ <slot name="content-bottom" :sub="props.sub ?? false"></slot>
219
+ </component>
220
+ </DropdownMenu.Portal>
222
221
  </template>
@@ -29,14 +29,18 @@ export type DropdownMenuContentSlots<A extends ArrayOrNested<DropdownMenuItem> =
29
29
  index: number;
30
30
  ui: ComponentStyler<typeof theme>;
31
31
  }>;
32
- declare const __VLS_export: <T extends ArrayOrNested<DropdownMenuItem>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
33
- props: __VLS_PrettifyLocal<DropdownMenuContentProps<T> & {
32
+ declare const _default: typeof __VLS_export;
33
+ export default _default;
34
+ declare const __VLS_export: <T extends ArrayOrNested<DropdownMenuItem>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
35
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<DropdownMenuContentProps<T> & {
34
36
  onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
35
37
  onPointerDownOutside?: ((event: import("reka-ui").PointerDownOutsideEvent) => any) | undefined;
36
38
  onFocusOutside?: ((event: import("reka-ui").FocusOutsideEvent) => any) | undefined;
37
39
  onInteractOutside?: ((event: import("reka-ui").PointerDownOutsideEvent | import("reka-ui").FocusOutsideEvent) => any) | undefined;
38
40
  onCloseAutoFocus?: ((event: Event) => any) | undefined;
39
- }> & import("vue").PublicProps;
41
+ }> & (typeof globalThis extends {
42
+ __VLS_PROPS_FALLBACK: infer P;
43
+ } ? P : {});
40
44
  expose: (exposed: {}) => void;
41
45
  attrs: any;
42
46
  slots: DropdownMenuContentSlots<T, NestedItem<T>>;
@@ -44,8 +48,8 @@ declare const __VLS_export: <T extends ArrayOrNested<DropdownMenuItem>>(__VLS_pr
44
48
  }>) => import("vue").VNode & {
45
49
  __ctx?: Awaited<typeof __VLS_setup>;
46
50
  };
47
- declare const _default: typeof __VLS_export;
48
- export default _default;
49
- type __VLS_PrettifyLocal<T> = {
51
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
52
+ [K in keyof T]: T[K];
53
+ } : {
50
54
  [K in keyof T as K]: T[K];
51
- } & {};
55
+ }) & {};
@@ -27,7 +27,7 @@ provideFieldGroup(computed(() => ({
27
27
  </script>
28
28
 
29
29
  <template>
30
- <Primitive :as="props.as" :class="ui.base({ class: props.class })" :data-orientation="props.orientation" data-part="base">
31
- <slot></slot>
32
- </Primitive>
30
+ <Primitive :as="props.as" :class="ui.base({ class: props.class })" :data-orientation="props.orientation" data-part="base">
31
+ <slot></slot>
32
+ </Primitive>
33
33
  </template>
@@ -21,11 +21,11 @@ export interface FieldGroupProps extends ComponentBaseProps {
21
21
  export interface FieldGroupSlots {
22
22
  default: StaticSlot;
23
23
  }
24
+ declare const _default: typeof __VLS_export;
25
+ export default _default;
24
26
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<FieldGroupProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<FieldGroupProps> & Readonly<{}>, {
25
27
  orientation: "horizontal" | "vertical";
26
28
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, FieldGroupSlots>;
27
- declare const _default: typeof __VLS_export;
28
- export default _default;
29
29
  type __VLS_WithSlots<T, S> = T & {
30
30
  new (): {
31
31
  $slots: S;
@@ -269,13 +269,13 @@ const ui = computed(() => {
269
269
  </script>
270
270
 
271
271
  <template>
272
- <component
273
- :is="parentBus ? 'div' : 'form'"
274
- :id="formId"
275
- :class="ui.base({ class: props.class })"
276
- data-part="base"
277
- @submit.prevent="onSubmitWrapper"
278
- >
279
- <slot :errors="errors" :loading="loading"></slot>
280
- </component>
272
+ <component
273
+ :is="parentBus ? 'div' : 'form'"
274
+ :id="formId"
275
+ :class="ui.base({ class: props.class })"
276
+ data-part="base"
277
+ @submit.prevent="onSubmitWrapper"
278
+ >
279
+ <slot :errors="errors" :loading="loading"></slot>
280
+ </component>
281
281
  </template>
@@ -1,6 +1,7 @@
1
1
  import type { ComponentBaseProps, FormData, FormError, FormErrorEvent, FormErrorWithId, FormInputEvents, FormSchema, FormSubmitEvent, InferInput } from '../types';
2
+ import type { FormHTMLAttributes } from '../types/html';
2
3
  import type { StaticSlot } from '../types/utils';
3
- export interface FormProps<S extends FormSchema, T extends boolean = true, N extends boolean = false> extends ComponentBaseProps {
4
+ export interface FormProps<S extends FormSchema, T extends boolean = true, N extends boolean = false> extends ComponentBaseProps, /** @vue-ignore */ Omit<FormHTMLAttributes, 'name'> {
4
5
  id?: string | number;
5
6
  /** Schema to validate the form state. Supports Standard Schema objects, Yup, Joi, and Superstructs. */
6
7
  schema?: S;
@@ -59,11 +60,15 @@ export interface FormSlots {
59
60
  loading: boolean;
60
61
  }>;
61
62
  }
62
- declare const __VLS_export: <S extends FormSchema, T extends boolean = true, N extends boolean = false>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
63
- props: __VLS_PrettifyLocal<FormProps<S, T, N> & {
63
+ declare const _default: typeof __VLS_export;
64
+ export default _default;
65
+ declare const __VLS_export: <S extends FormSchema, T extends boolean = true, N extends boolean = false>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
66
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<FormProps<S, T, N> & {
64
67
  onError?: ((event: FormErrorEvent) => any) | undefined;
65
68
  onSubmit?: ((event: FormSubmitEvent<FormData<S, T>>) => any) | undefined;
66
- }> & import("vue").PublicProps;
69
+ }> & (typeof globalThis extends {
70
+ __VLS_PROPS_FALLBACK: infer P;
71
+ } ? P : {});
67
72
  expose: (exposed: import("vue").ShallowUnwrapRef<{
68
73
  validate: any;
69
74
  errors: import("vue").Ref<{
@@ -96,8 +101,8 @@ declare const __VLS_export: <S extends FormSchema, T extends boolean = true, N e
96
101
  }>) => import("vue").VNode & {
97
102
  __ctx?: Awaited<typeof __VLS_setup>;
98
103
  };
99
- declare const _default: typeof __VLS_export;
100
- export default _default;
101
- type __VLS_PrettifyLocal<T> = {
104
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
105
+ [K in keyof T]: T[K];
106
+ } : {
102
107
  [K in keyof T as K]: T[K];
103
- } & {};
108
+ }) & {};
@@ -15,8 +15,9 @@ const props = defineProps({
15
15
  label: { type: String, required: false },
16
16
  description: { type: String, required: false },
17
17
  help: { type: String, required: false },
18
- error: { type: [String, Boolean], required: false },
18
+ error: { type: [String, Boolean], required: false, default: void 0 },
19
19
  hint: { type: String, required: false },
20
+ orientation: { type: null, required: false },
20
21
  size: { type: null, required: false },
21
22
  required: { type: Boolean, required: false },
22
23
  eagerValidation: { type: Boolean, required: false },
@@ -68,41 +69,41 @@ const ui = computed(() => {
68
69
  </script>
69
70
 
70
71
  <template>
71
- <Primitive :as="props.as" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
72
- <div :class="ui.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
73
- <div v-if="props.label || !!slots.label" :class="ui.labelWrapper({ class: props.ui?.labelWrapper })" data-part="label-wrapper">
74
- <Label :for="id" :class="ui.label({ class: props.ui?.label })" data-part="label">
75
- <slot name="label" :label="props.label">
76
- {{ props.label }}
77
- </slot>
78
- </Label>
79
- <span v-if="props.hint || !!slots.hint" :id="`${ariaId}-hint`" :class="ui.hint({ class: props.ui?.hint })" data-part="hint">
80
- <slot name="hint" :hint="props.hint">
81
- {{ props.hint }}
82
- </slot>
83
- </span>
84
- </div>
85
-
86
- <p v-if="props.description || !!slots.description" :id="`${ariaId}-description`" :class="ui.description({ class: props.ui?.description })" data-part="description">
87
- <slot name="description" :description="props.description">
88
- {{ props.description }}
89
- </slot>
90
- </p>
91
- </div>
92
-
93
- <div :class="(props.label || !!slots.label || props.description || !!slots.description) && ui.container({ class: props.ui?.container })" data-part="container">
94
- <slot :error="error"></slot>
95
-
96
- <div v-if="typeof error === 'string' && error || !!slots.error" :id="`${ariaId}-error`" :class="ui.error({ class: props.ui?.error })" data-part="error">
97
- <slot name="error" :error="error">
98
- {{ error }}
99
- </slot>
100
- </div>
101
- <div v-else-if="props.help || !!slots.help" :class="ui.help({ class: props.ui?.help })" data-part="help">
102
- <slot name="help" :help="props.help">
103
- {{ props.help }}
104
- </slot>
105
- </div>
106
- </div>
107
- </Primitive>
72
+ <Primitive :as="props.as" :class="ui.root({ class: [props.ui?.root, props.class] })" :data-orientation="props.orientation" data-part="root">
73
+ <div :class="ui.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
74
+ <div v-if="props.label || !!slots.label" :class="ui.labelWrapper({ class: props.ui?.labelWrapper })" data-part="labelWrapper">
75
+ <Label :for="id" :class="ui.label({ class: props.ui?.label })" data-part="label">
76
+ <slot name="label" :label="props.label">
77
+ {{ props.label }}
78
+ </slot>
79
+ </Label>
80
+ <span v-if="props.hint || !!slots.hint" :id="`${ariaId}-hint`" :class="ui.hint({ class: props.ui?.hint })" data-part="hint">
81
+ <slot name="hint" :hint="props.hint">
82
+ {{ props.hint }}
83
+ </slot>
84
+ </span>
85
+ </div>
86
+
87
+ <p v-if="props.description || !!slots.description" :id="`${ariaId}-description`" :class="ui.description({ class: props.ui?.description })" data-part="description">
88
+ <slot name="description" :description="props.description">
89
+ {{ props.description }}
90
+ </slot>
91
+ </p>
92
+ </div>
93
+
94
+ <div :class="(props.label || !!slots.label || props.description || !!slots.description) && ui.container({ class: props.ui?.container })" data-part="container">
95
+ <slot :error="error"></slot>
96
+
97
+ <div v-if="props.error !== false && (typeof error === 'string' && error || !!slots.error)" :id="`${ariaId}-error`" :class="ui.error({ class: props.ui?.error })" data-part="error">
98
+ <slot name="error" :error="error">
99
+ {{ error }}
100
+ </slot>
101
+ </div>
102
+ <div v-else-if="props.help || !!slots.help" :class="ui.help({ class: props.ui?.help })" data-part="help">
103
+ <slot name="help" :help="props.help">
104
+ {{ props.help }}
105
+ </slot>
106
+ </div>
107
+ </div>
108
+ </Primitive>
108
109
  </template>
@@ -20,8 +20,11 @@ export interface FormFieldProps extends ComponentBaseProps {
20
20
  error?: string | boolean;
21
21
  hint?: string;
22
22
  /**
23
- * @default "md"
23
+ * The orientation of the form field.
24
+ * @default "vertical"
24
25
  */
26
+ orientation?: ThemeVariants['orientation'];
27
+ /** @default "md" */
25
28
  size?: ThemeVariants['size'];
26
29
  required?: boolean;
27
30
  /** If true, validation on input will be active immediately instead of waiting for a blur event. */
@@ -53,9 +56,11 @@ export interface FormFieldSlots {
53
56
  error?: boolean | string;
54
57
  }>;
55
58
  }
56
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<FormFieldProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<FormFieldProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, FormFieldSlots>;
57
59
  declare const _default: typeof __VLS_export;
58
60
  export default _default;
61
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<FormFieldProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<FormFieldProps> & Readonly<{}>, {
62
+ error: string | boolean;
63
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, FormFieldSlots>;
59
64
  type __VLS_WithSlots<T, S> = T & {
60
65
  new (): {
61
66
  $slots: S;
@@ -15,6 +15,6 @@ const iconProps = useForwardProps(reactivePick(props, "name", "mode", "size", "c
15
15
  </script>
16
16
 
17
17
  <template>
18
- <Icon v-if="typeof props.name === 'string'" v-bind="iconProps" />
19
- <component :is="props.name" v-else />
18
+ <Icon v-if="typeof props.name === 'string'" v-bind="iconProps" />
19
+ <component :is="props.name" v-else />
20
20
  </template>
@@ -4,6 +4,6 @@ export interface IconProps {
4
4
  size?: string | number;
5
5
  customize?: (content: string, name?: string, prefix?: string, provider?: string) => string;
6
6
  }
7
- declare const __VLS_export: import("vue").DefineComponent<IconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IconProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
7
  declare const _default: typeof __VLS_export;
9
8
  export default _default;
9
+ declare const __VLS_export: import("vue").DefineComponent<IconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IconProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;