@nuxt/ui 3.0.0-alpha.1 → 3.0.0-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nuxt/ui/accordion.ts +20 -0
- package/.nuxt/ui/alert.ts +259 -0
- package/.nuxt/ui/avatar-group.ts +52 -0
- package/.nuxt/ui/avatar.ts +54 -0
- package/.nuxt/ui/badge.ts +231 -0
- package/.nuxt/ui/breadcrumb.ts +45 -0
- package/.nuxt/ui/button-group.ts +29 -0
- package/.nuxt/ui/button.ts +376 -0
- package/.nuxt/ui/calendar.ts +103 -0
- package/.nuxt/ui/card.ts +8 -0
- package/.nuxt/ui/carousel.ts +43 -0
- package/.nuxt/ui/checkbox.ts +123 -0
- package/.nuxt/ui/chip.ts +96 -0
- package/.nuxt/ui/collapsible.ts +6 -0
- package/.nuxt/ui/color-picker.ts +47 -0
- package/.nuxt/ui/command-palette.ts +50 -0
- package/.nuxt/ui/container.ts +3 -0
- package/.nuxt/ui/context-menu.ts +216 -0
- package/.nuxt/ui/drawer.ts +62 -0
- package/.nuxt/ui/dropdown-menu.ts +217 -0
- package/.nuxt/ui/form-field.ts +48 -0
- package/.nuxt/ui/form.ts +3 -0
- package/.nuxt/ui/index.ts +48 -0
- package/.nuxt/ui/input-menu.ts +445 -0
- package/.nuxt/ui/input-number.ts +235 -0
- package/.nuxt/ui/input.ts +298 -0
- package/.nuxt/ui/kbd.ts +31 -0
- package/.nuxt/ui/link.ts +15 -0
- package/.nuxt/ui/modal.ts +28 -0
- package/.nuxt/ui/navigation-menu.ts +436 -0
- package/.nuxt/ui/pagination.ts +8 -0
- package/.nuxt/ui/pin-input.ts +171 -0
- package/.nuxt/ui/popover.ts +6 -0
- package/.nuxt/ui/progress.ts +297 -0
- package/.nuxt/ui/radio-group.ts +135 -0
- package/.nuxt/ui/select-menu.ts +351 -0
- package/.nuxt/ui/select.ts +350 -0
- package/.nuxt/ui/separator.ts +172 -0
- package/.nuxt/ui/skeleton.ts +3 -0
- package/.nuxt/ui/slideover.ts +70 -0
- package/.nuxt/ui/slider.ts +171 -0
- package/.nuxt/ui/stepper.ts +202 -0
- package/.nuxt/ui/switch.ts +131 -0
- package/.nuxt/ui/table.ts +146 -0
- package/.nuxt/ui/tabs.ts +255 -0
- package/.nuxt/ui/textarea.ts +298 -0
- package/.nuxt/ui/toast.ts +76 -0
- package/.nuxt/ui/toaster.ts +91 -0
- package/.nuxt/ui/tooltip.ts +9 -0
- package/README.md +82 -54
- package/cli/commands/{init.mjs → make/component.mjs} +17 -5
- package/cli/commands/make/index.mjs +14 -0
- package/cli/commands/make/locale.mjs +64 -0
- package/cli/index.mjs +2 -2
- package/cli/package.json +2 -2
- package/cli/templates.mjs +60 -10
- package/cli/utils.mjs +14 -0
- package/dist/chunks/component-meta.cjs +82802 -0
- package/dist/chunks/component-meta.mjs +82800 -0
- package/dist/client/devtools/200.html +1 -0
- package/dist/client/devtools/404.html +1 -0
- package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
- package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
- package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
- package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
- package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
- package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
- package/dist/client/devtools/_nuxt/CQ-XZFu7.js +54 -0
- package/dist/client/devtools/_nuxt/DNZFyo26.js +1 -0
- package/dist/client/devtools/_nuxt/Dtz-o9GB.js +1 -0
- package/dist/client/devtools/_nuxt/builds/latest.json +1 -0
- package/dist/client/devtools/_nuxt/builds/meta/1f5fbd7b-9d97-480e-9ae4-e02b4ff7018b.json +1 -0
- package/dist/client/devtools/_nuxt/entry.qOdop8tq.css +1 -0
- package/dist/client/devtools/_nuxt/error-404.D-rS9BDk.css +1 -0
- package/dist/client/devtools/_nuxt/error-500.CfcCHs91.css +1 -0
- package/dist/client/devtools/favicon.svg +1 -0
- package/dist/client/devtools/index.html +1 -0
- package/dist/devtools/runtime/DevtoolsRenderer.vue +54 -0
- package/dist/devtools/runtime/examples/AvatarGroupExample.vue +7 -0
- package/dist/devtools/runtime/examples/ButtonGroupExample.vue +8 -0
- package/dist/devtools/runtime/examples/CardExample.vue +13 -0
- package/dist/devtools/runtime/examples/CarouselExample.vue +13 -0
- package/dist/devtools/runtime/examples/ChipExample.vue +5 -0
- package/dist/devtools/runtime/examples/CollapsibleExample.vue +8 -0
- package/dist/devtools/runtime/examples/CommandPaletteExample.vue +29 -0
- package/dist/devtools/runtime/examples/ContainerExample.vue +5 -0
- package/dist/devtools/runtime/examples/ContextMenuExample.vue +5 -0
- package/dist/devtools/runtime/examples/DrawerExample.vue +8 -0
- package/dist/devtools/runtime/examples/DropdownMenuExample.vue +5 -0
- package/dist/devtools/runtime/examples/FormExample.vue +30 -0
- package/dist/devtools/runtime/examples/FormFieldExample.vue +5 -0
- package/dist/devtools/runtime/examples/LinkExample.vue +5 -0
- package/dist/devtools/runtime/examples/ModalExample.vue +8 -0
- package/dist/devtools/runtime/examples/PopoverExample.vue +8 -0
- package/dist/devtools/runtime/examples/SkeletonExample.vue +3 -0
- package/dist/devtools/runtime/examples/SlideoverExample.vue +8 -0
- package/dist/devtools/runtime/examples/StepperExample.vue +44 -0
- package/dist/devtools/runtime/examples/ToasterExample.vue +11 -0
- package/dist/devtools/runtime/examples/TooltipExample.vue +5 -0
- package/dist/module.cjs +223 -4
- package/dist/module.d.cts +54 -0
- package/dist/module.d.mts +38 -7
- package/dist/module.d.ts +38 -7
- package/dist/module.json +2 -1
- package/dist/module.mjs +179 -2568
- package/dist/runtime/components/Accordion.vue +51 -9
- package/dist/runtime/components/Alert.vue +16 -8
- package/dist/runtime/components/App.vue +20 -7
- package/dist/runtime/components/Avatar.vue +36 -11
- package/dist/runtime/components/AvatarGroup.vue +6 -2
- package/dist/runtime/components/Badge.vue +36 -5
- package/dist/runtime/components/Breadcrumb.vue +53 -14
- package/dist/runtime/components/Button.vue +47 -7
- package/dist/runtime/components/ButtonGroup.vue +7 -3
- package/dist/runtime/components/Calendar.vue +191 -0
- package/dist/runtime/components/Card.vue +5 -2
- package/dist/runtime/components/Carousel.vue +323 -0
- package/dist/runtime/components/Checkbox.vue +30 -34
- package/dist/runtime/components/Chip.vue +12 -4
- package/dist/runtime/components/Collapsible.vue +11 -6
- package/dist/runtime/components/ColorPicker.vue +266 -0
- package/dist/runtime/components/CommandPalette.vue +132 -99
- package/dist/runtime/components/Container.vue +5 -2
- package/dist/runtime/components/ContextMenu.vue +103 -15
- package/dist/runtime/components/ContextMenuContent.vue +49 -19
- package/dist/runtime/components/Drawer.vue +28 -12
- package/dist/runtime/components/DropdownMenu.vue +93 -17
- package/dist/runtime/components/DropdownMenuContent.vue +51 -19
- package/dist/runtime/components/Form.vue +59 -41
- package/dist/runtime/components/FormField.vue +20 -7
- package/dist/runtime/components/Icon.vue +1 -1
- package/dist/runtime/components/Input.vue +18 -8
- package/dist/runtime/components/InputMenu.vue +164 -66
- package/dist/runtime/components/InputNumber.vue +193 -0
- package/dist/runtime/components/Kbd.vue +5 -2
- package/dist/runtime/components/Link.vue +72 -9
- package/dist/runtime/components/LinkBase.vue +10 -7
- package/dist/runtime/components/Modal.vue +23 -16
- package/dist/runtime/components/NavigationMenu.vue +178 -78
- package/dist/runtime/components/Pagination.vue +32 -16
- package/dist/runtime/components/PinInput.vue +97 -0
- package/dist/runtime/components/Popover.vue +29 -9
- package/dist/runtime/components/Progress.vue +29 -11
- package/dist/runtime/components/RadioGroup.vue +30 -8
- package/dist/runtime/components/Select.vue +81 -33
- package/dist/runtime/components/SelectMenu.vue +181 -81
- package/dist/runtime/components/Separator.vue +5 -4
- package/dist/runtime/components/Skeleton.vue +5 -2
- package/dist/runtime/components/Slideover.vue +23 -15
- package/dist/runtime/components/Slider.vue +5 -4
- package/dist/runtime/components/Stepper.vue +173 -0
- package/dist/runtime/components/Switch.vue +18 -17
- package/dist/runtime/components/Table.vue +263 -0
- package/dist/runtime/components/Tabs.vue +45 -16
- package/dist/runtime/components/Textarea.vue +12 -5
- package/dist/runtime/components/Toast.vue +15 -6
- package/dist/runtime/components/Toaster.vue +33 -17
- package/dist/runtime/components/Tooltip.vue +10 -7
- package/dist/runtime/composables/defineLocale.d.ts +9 -0
- package/dist/runtime/composables/defineLocale.js +4 -0
- package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
- package/dist/runtime/composables/defineShortcuts.js +3 -9
- package/dist/runtime/composables/extendDevtoolsMeta.d.ts +7 -0
- package/dist/runtime/composables/extendDevtoolsMeta.js +2 -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 -0
- package/dist/runtime/composables/useFormField.d.ts +9 -5
- package/dist/runtime/composables/useFormField.js +8 -4
- package/dist/runtime/composables/useKbd.d.ts +10 -3
- package/dist/runtime/composables/useKbd.js +14 -8
- package/dist/runtime/composables/useLocale.d.ts +4 -0
- package/dist/runtime/composables/useLocale.js +10 -0
- package/dist/runtime/composables/useModal.d.ts +2 -2
- package/dist/runtime/composables/useSlideover.d.ts +2 -2
- package/dist/runtime/composables/useToast.d.ts +2 -2
- package/dist/runtime/index.css +1 -1
- package/dist/runtime/keyframes.css +1 -0
- package/dist/runtime/locale/ar.d.ts +2 -0
- package/dist/runtime/locale/ar.js +55 -0
- package/dist/runtime/locale/cs.d.ts +2 -0
- package/dist/runtime/locale/cs.js +54 -0
- package/dist/runtime/locale/da.d.ts +2 -0
- package/dist/runtime/locale/da.js +54 -0
- package/dist/runtime/locale/de.d.ts +2 -0
- package/dist/runtime/locale/de.js +54 -0
- package/dist/runtime/locale/el.d.ts +2 -0
- package/dist/runtime/locale/el.js +54 -0
- package/dist/runtime/locale/en.d.ts +2 -0
- package/dist/runtime/locale/en.js +54 -0
- package/dist/runtime/locale/es.d.ts +2 -0
- package/dist/runtime/locale/es.js +54 -0
- package/dist/runtime/locale/et.d.ts +2 -0
- package/dist/runtime/locale/et.js +54 -0
- package/dist/runtime/locale/fa_ir.d.ts +2 -0
- package/dist/runtime/locale/fa_ir.js +55 -0
- package/dist/runtime/locale/fi.d.ts +2 -0
- package/dist/runtime/locale/fi.js +54 -0
- package/dist/runtime/locale/fr.d.ts +2 -0
- package/dist/runtime/locale/fr.js +54 -0
- package/dist/runtime/locale/id.d.ts +2 -0
- package/dist/runtime/locale/id.js +54 -0
- package/dist/runtime/locale/index.d.ts +28 -0
- package/dist/runtime/locale/index.js +28 -0
- package/dist/runtime/locale/it.d.ts +2 -0
- package/dist/runtime/locale/it.js +54 -0
- package/dist/runtime/locale/ja.d.ts +2 -0
- package/dist/runtime/locale/ja.js +54 -0
- package/dist/runtime/locale/ko.d.ts +2 -0
- package/dist/runtime/locale/ko.js +54 -0
- package/dist/runtime/locale/nl.d.ts +2 -0
- package/dist/runtime/locale/nl.js +54 -0
- package/dist/runtime/locale/pl.d.ts +2 -0
- package/dist/runtime/locale/pl.js +54 -0
- package/dist/runtime/locale/pt.d.ts +2 -0
- package/dist/runtime/locale/pt.js +54 -0
- package/dist/runtime/locale/pt_br.d.ts +2 -0
- package/dist/runtime/locale/pt_br.js +54 -0
- package/dist/runtime/locale/ru.d.ts +2 -0
- package/dist/runtime/locale/ru.js +54 -0
- package/dist/runtime/locale/sk.d.ts +2 -0
- package/dist/runtime/locale/sk.js +54 -0
- package/dist/runtime/locale/sv.d.ts +2 -0
- package/dist/runtime/locale/sv.js +54 -0
- package/dist/runtime/locale/th.d.ts +2 -0
- package/dist/runtime/locale/th.js +54 -0
- package/dist/runtime/locale/tr.d.ts +2 -0
- package/dist/runtime/locale/tr.js +54 -0
- package/dist/runtime/locale/uk.d.ts +2 -0
- package/dist/runtime/locale/uk.js +54 -0
- package/dist/runtime/locale/vi.d.ts +2 -0
- package/dist/runtime/locale/vi.js +54 -0
- package/dist/runtime/locale/zh_hans.d.ts +2 -0
- package/dist/runtime/locale/zh_hans.js +54 -0
- package/dist/runtime/locale/zh_hant.d.ts +2 -0
- package/dist/runtime/locale/zh_hant.js +54 -0
- package/dist/runtime/plugins/colors.js +12 -8
- package/dist/runtime/types/form.d.ts +11 -4
- package/dist/runtime/types/form.js +2 -2
- package/dist/runtime/types/index.d.ts +50 -42
- package/dist/runtime/types/index.js +8 -0
- package/dist/runtime/types/locale.d.ts +56 -0
- package/dist/runtime/types/utils.d.ts +8 -3
- package/dist/runtime/utils/form.d.ts +7 -5
- package/dist/runtime/utils/form.js +117 -28
- package/dist/runtime/utils/index.d.ts +2 -1
- package/dist/runtime/utils/index.js +16 -0
- package/dist/runtime/utils/link.d.ts +5 -3
- package/dist/runtime/utils/link.js +1 -1
- package/dist/runtime/utils/locale.d.ts +15 -0
- package/dist/runtime/utils/locale.js +25 -0
- package/dist/runtime/utils/tv.d.ts +1 -0
- package/dist/runtime/utils/tv.js +4 -0
- package/dist/runtime/vue/components/Icon.vue +15 -0
- package/dist/runtime/vue/components/Link.vue +208 -0
- package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
- package/dist/runtime/vue/plugins/color-mode.js +6 -0
- package/dist/runtime/vue/plugins/head.d.ts +4 -0
- package/dist/runtime/vue/plugins/head.js +6 -0
- package/dist/runtime/vue/stubs.d.ts +15 -0
- package/dist/runtime/vue/stubs.js +27 -0
- package/dist/shared/ui.BKsd22-Q.mjs +3289 -0
- package/dist/shared/ui.DCjJwb6l.cjs +3296 -0
- package/dist/unplugin.cjs +192 -0
- package/dist/unplugin.d.cts +49 -0
- package/dist/unplugin.d.mts +49 -0
- package/dist/unplugin.d.ts +49 -0
- package/dist/unplugin.mjs +181 -0
- package/dist/vite.cjs +22 -0
- package/dist/vite.d.cts +13 -0
- package/dist/vite.d.mts +13 -0
- package/dist/vite.d.ts +13 -0
- package/dist/vite.mjs +20 -0
- package/package.json +107 -35
- package/vue-plugin.d.ts +5 -0
- package/cli/node_modules/.ignored/citty/LICENSE +0 -36
- package/cli/node_modules/.ignored/citty/README.md +0 -134
- package/cli/node_modules/.ignored/citty/dist/index.cjs +0 -475
- package/cli/node_modules/.ignored/citty/dist/index.d.cts +0 -80
- package/cli/node_modules/.ignored/citty/dist/index.d.mts +0 -80
- package/cli/node_modules/.ignored/citty/dist/index.d.ts +0 -80
- package/cli/node_modules/.ignored/citty/dist/index.mjs +0 -463
- package/cli/node_modules/.ignored/citty/package.json +0 -49
- package/cli/node_modules/.ignored/consola/LICENSE +0 -47
- package/cli/node_modules/.ignored/consola/README.md +0 -318
- package/cli/node_modules/.ignored/consola/core.d.ts +0 -1
- package/cli/node_modules/.ignored/consola/dist/basic.cjs +0 -32
- package/cli/node_modules/.ignored/consola/dist/basic.d.ts +0 -9
- package/cli/node_modules/.ignored/consola/dist/basic.mjs +0 -24
- package/cli/node_modules/.ignored/consola/dist/browser.cjs +0 -80
- package/cli/node_modules/.ignored/consola/dist/browser.d.ts +0 -7
- package/cli/node_modules/.ignored/consola/dist/browser.mjs +0 -72
- package/cli/node_modules/.ignored/consola/dist/chunks/prompt.cjs +0 -436
- package/cli/node_modules/.ignored/consola/dist/chunks/prompt.mjs +0 -429
- package/cli/node_modules/.ignored/consola/dist/core.cjs +0 -415
- package/cli/node_modules/.ignored/consola/dist/core.d.ts +0 -124
- package/cli/node_modules/.ignored/consola/dist/core.mjs +0 -410
- package/cli/node_modules/.ignored/consola/dist/index.cjs +0 -21
- package/cli/node_modules/.ignored/consola/dist/index.d.ts +0 -9
- package/cli/node_modules/.ignored/consola/dist/index.mjs +0 -8
- package/cli/node_modules/.ignored/consola/dist/shared/consola.06ad8a64.mjs +0 -62
- package/cli/node_modules/.ignored/consola/dist/shared/consola.36c0034f.mjs +0 -636
- package/cli/node_modules/.ignored/consola/dist/shared/consola.4bbae468.cjs +0 -645
- package/cli/node_modules/.ignored/consola/dist/shared/consola.deac7d5a.cjs +0 -65
- package/cli/node_modules/.ignored/consola/dist/utils.cjs +0 -308
- package/cli/node_modules/.ignored/consola/dist/utils.d.ts +0 -169
- package/cli/node_modules/.ignored/consola/dist/utils.mjs +0 -284
- package/cli/node_modules/.ignored/consola/lib/index.cjs +0 -9
- package/cli/node_modules/.ignored/consola/package.json +0 -101
- package/cli/node_modules/.ignored/consola/utils.d.ts +0 -1
- package/cli/node_modules/.ignored/pathe/LICENSE +0 -44
- package/cli/node_modules/.ignored/pathe/README.md +0 -69
- package/cli/node_modules/.ignored/pathe/dist/index.cjs +0 -23
- package/cli/node_modules/.ignored/pathe/dist/index.d.cts +0 -36
- package/cli/node_modules/.ignored/pathe/dist/index.d.mts +0 -36
- package/cli/node_modules/.ignored/pathe/dist/index.d.ts +0 -36
- package/cli/node_modules/.ignored/pathe/dist/index.mjs +0 -1
- package/cli/node_modules/.ignored/pathe/dist/shared/pathe.1f0a373c.cjs +0 -238
- package/cli/node_modules/.ignored/pathe/dist/shared/pathe.ff20891b.mjs +0 -221
- package/cli/node_modules/.ignored/pathe/dist/utils.cjs +0 -58
- package/cli/node_modules/.ignored/pathe/dist/utils.d.cts +0 -5
- package/cli/node_modules/.ignored/pathe/dist/utils.d.mts +0 -5
- package/cli/node_modules/.ignored/pathe/dist/utils.d.ts +0 -5
- package/cli/node_modules/.ignored/pathe/dist/utils.mjs +0 -54
- package/cli/node_modules/.ignored/pathe/package.json +0 -48
- package/cli/node_modules/.ignored/pathe/utils.d.ts +0 -1
- package/cli/node_modules/.ignored/scule/LICENSE +0 -21
- package/cli/node_modules/.ignored/scule/README.md +0 -149
- package/cli/node_modules/.ignored/scule/dist/index.cjs +0 -92
- package/cli/node_modules/.ignored/scule/dist/index.d.cts +0 -57
- package/cli/node_modules/.ignored/scule/dist/index.d.mts +0 -57
- package/cli/node_modules/.ignored/scule/dist/index.d.ts +0 -57
- package/cli/node_modules/.ignored/scule/dist/index.mjs +0 -80
- package/cli/node_modules/.ignored/scule/package.json +0 -43
- package/cli/node_modules/.package-lock.json +0 -33
- package/dist/runtime/types/component.d.ts +0 -17
- /package/dist/runtime/types/{component.js → locale.js} +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type { PopoverRootProps, HoverCardRootProps, PopoverRootEmits, PopoverContentProps, PopoverArrowProps } from 'radix-vue'
|
|
2
|
+
import type { PopoverRootProps, HoverCardRootProps, PopoverRootEmits, PopoverContentProps, PopoverArrowProps } from 'reka-ui'
|
|
4
3
|
import type { AppConfig } from '@nuxt/schema'
|
|
5
4
|
import _appConfig from '#build/app.config'
|
|
6
5
|
import theme from '#build/ui/popover'
|
|
6
|
+
import { tv } from '../utils/tv'
|
|
7
|
+
import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
|
|
7
8
|
|
|
8
9
|
const appConfig = _appConfig as AppConfig & { ui: { popover: Partial<typeof theme> } }
|
|
9
10
|
|
|
@@ -17,7 +18,7 @@ export interface PopoverProps extends PopoverRootProps, Pick<HoverCardRootProps,
|
|
|
17
18
|
mode?: 'click' | 'hover'
|
|
18
19
|
/**
|
|
19
20
|
* The content of the popover.
|
|
20
|
-
* @defaultValue { side: 'bottom', sideOffset: 8 }
|
|
21
|
+
* @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
|
|
21
22
|
*/
|
|
22
23
|
content?: Omit<PopoverContentProps, 'as' | 'asChild' | 'forceMount'>
|
|
23
24
|
/**
|
|
@@ -30,6 +31,11 @@ export interface PopoverProps extends PopoverRootProps, Pick<HoverCardRootProps,
|
|
|
30
31
|
* @defaultValue true
|
|
31
32
|
*/
|
|
32
33
|
portal?: boolean
|
|
34
|
+
/**
|
|
35
|
+
* When `false`, the popover will not close when clicking outside or pressing escape.
|
|
36
|
+
* @defaultValue true
|
|
37
|
+
*/
|
|
38
|
+
dismissible?: boolean
|
|
33
39
|
class?: any
|
|
34
40
|
ui?: Partial<typeof popover.slots>
|
|
35
41
|
}
|
|
@@ -40,27 +46,41 @@ export interface PopoverSlots {
|
|
|
40
46
|
default(props: { open: boolean }): any
|
|
41
47
|
content(props?: {}): any
|
|
42
48
|
}
|
|
49
|
+
|
|
50
|
+
extendDevtoolsMeta({ example: 'PopoverExample' })
|
|
43
51
|
</script>
|
|
44
52
|
|
|
45
53
|
<script setup lang="ts">
|
|
46
54
|
import { computed, toRef } from 'vue'
|
|
47
55
|
import { defu } from 'defu'
|
|
48
|
-
import { useForwardPropsEmits } from '
|
|
49
|
-
import { Popover, HoverCard } from '
|
|
56
|
+
import { useForwardPropsEmits } from 'reka-ui'
|
|
57
|
+
import { Popover, HoverCard } from 'reka-ui/namespaced'
|
|
50
58
|
import { reactivePick } from '@vueuse/core'
|
|
51
59
|
|
|
52
60
|
const props = withDefaults(defineProps<PopoverProps>(), {
|
|
53
61
|
portal: true,
|
|
54
62
|
mode: 'click',
|
|
55
63
|
openDelay: 0,
|
|
56
|
-
closeDelay: 0
|
|
64
|
+
closeDelay: 0,
|
|
65
|
+
dismissible: true
|
|
57
66
|
})
|
|
58
67
|
const emits = defineEmits<PopoverEmits>()
|
|
59
68
|
const slots = defineSlots<PopoverSlots>()
|
|
60
69
|
|
|
61
70
|
const pick = props.mode === 'hover' ? reactivePick(props, 'defaultOpen', 'open', 'openDelay', 'closeDelay') : reactivePick(props, 'defaultOpen', 'open', 'modal')
|
|
62
71
|
const rootProps = useForwardPropsEmits(pick, emits)
|
|
63
|
-
const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8 }) as PopoverContentProps)
|
|
72
|
+
const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8 }) as PopoverContentProps)
|
|
73
|
+
const contentEvents = computed(() => {
|
|
74
|
+
if (!props.dismissible) {
|
|
75
|
+
return {
|
|
76
|
+
pointerDownOutside: (e: Event) => e.preventDefault(),
|
|
77
|
+
interactOutside: (e: Event) => e.preventDefault(),
|
|
78
|
+
escapeKeyDown: (e: Event) => e.preventDefault()
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return {}
|
|
83
|
+
})
|
|
64
84
|
const arrowProps = toRef(() => props.arrow as PopoverArrowProps)
|
|
65
85
|
|
|
66
86
|
// eslint-disable-next-line vue/no-dupe-keys
|
|
@@ -73,12 +93,12 @@ const Component = computed(() => props.mode === 'hover' ? HoverCard : Popover)
|
|
|
73
93
|
|
|
74
94
|
<template>
|
|
75
95
|
<Component.Root v-slot="{ open }" v-bind="rootProps">
|
|
76
|
-
<Component.Trigger v-if="!!slots.default" as-child>
|
|
96
|
+
<Component.Trigger v-if="!!slots.default" as-child :class="props.class">
|
|
77
97
|
<slot :open="open" />
|
|
78
98
|
</Component.Trigger>
|
|
79
99
|
|
|
80
100
|
<Component.Portal :disabled="!portal">
|
|
81
|
-
<Component.Content v-bind="contentProps" :class="ui.content({ class: [props.class, props.ui?.content] })">
|
|
101
|
+
<Component.Content v-bind="contentProps" :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-on="contentEvents">
|
|
82
102
|
<slot name="content" />
|
|
83
103
|
|
|
84
104
|
<Component.Arrow v-if="!!arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" />
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
<!-- eslint-disable vue/block-tag-newline -->
|
|
1
2
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type { ProgressRootProps, ProgressRootEmits } from '
|
|
3
|
+
import type { VariantProps } from 'tailwind-variants'
|
|
4
|
+
import type { ProgressRootProps, ProgressRootEmits } from 'reka-ui'
|
|
4
5
|
import type { AppConfig } from '@nuxt/schema'
|
|
5
6
|
import _appConfig from '#build/app.config'
|
|
6
7
|
import theme from '#build/ui/progress'
|
|
8
|
+
import { tv } from '../utils/tv'
|
|
7
9
|
|
|
8
10
|
const appConfig = _appConfig as AppConfig & { ui: { progress: Partial<typeof theme> } }
|
|
9
11
|
|
|
@@ -14,7 +16,7 @@ type ProgressVariants = VariantProps<typeof progress>
|
|
|
14
16
|
export interface ProgressProps extends Pick<ProgressRootProps, 'getValueLabel' | 'modelValue'> {
|
|
15
17
|
/**
|
|
16
18
|
* The element or component this component should render as.
|
|
17
|
-
* @defaultValue
|
|
19
|
+
* @defaultValue 'div'
|
|
18
20
|
*/
|
|
19
21
|
as?: any
|
|
20
22
|
/** The maximum progress value. */
|
|
@@ -42,12 +44,14 @@ export type ProgressSlots = {
|
|
|
42
44
|
} & {
|
|
43
45
|
[key: string]: (props: { step: number }) => any
|
|
44
46
|
}
|
|
47
|
+
|
|
45
48
|
</script>
|
|
46
49
|
|
|
47
50
|
<script setup lang="ts">
|
|
48
51
|
import { computed } from 'vue'
|
|
49
|
-
import {
|
|
52
|
+
import { Primitive, ProgressRoot, ProgressIndicator, useForwardPropsEmits } from 'reka-ui'
|
|
50
53
|
import { reactivePick } from '@vueuse/core'
|
|
54
|
+
import { useLocale } from '../composables/useLocale'
|
|
51
55
|
|
|
52
56
|
const props = withDefaults(defineProps<ProgressProps>(), {
|
|
53
57
|
inverted: false,
|
|
@@ -55,9 +59,11 @@ const props = withDefaults(defineProps<ProgressProps>(), {
|
|
|
55
59
|
orientation: 'horizontal'
|
|
56
60
|
})
|
|
57
61
|
const emits = defineEmits<ProgressEmits>()
|
|
58
|
-
defineSlots<ProgressSlots>()
|
|
62
|
+
const slots = defineSlots<ProgressSlots>()
|
|
63
|
+
|
|
64
|
+
const { dir } = useLocale()
|
|
59
65
|
|
|
60
|
-
const rootProps = useForwardPropsEmits(reactivePick(props, '
|
|
66
|
+
const rootProps = useForwardPropsEmits(reactivePick(props, 'getValueLabel', 'modelValue'), emits)
|
|
61
67
|
|
|
62
68
|
const isIndeterminate = computed(() => rootProps.value.modelValue === null)
|
|
63
69
|
const hasSteps = computed(() => Array.isArray(props.max))
|
|
@@ -91,8 +97,20 @@ const indicatorStyle = computed(() => {
|
|
|
91
97
|
return
|
|
92
98
|
}
|
|
93
99
|
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
if (props.orientation === 'vertical') {
|
|
101
|
+
return {
|
|
102
|
+
transform: `translateY(${props.inverted ? '' : '-'}${100 - percent.value}%)`
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
if (dir.value === 'rtl') {
|
|
106
|
+
return {
|
|
107
|
+
transform: `translateX(${props.inverted ? '-' : ''}${100 - percent.value}%)`
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
return {
|
|
111
|
+
transform: `translateX(${props.inverted ? '' : '-'}${100 - percent.value}%)`
|
|
112
|
+
}
|
|
113
|
+
}
|
|
96
114
|
}
|
|
97
115
|
})
|
|
98
116
|
|
|
@@ -142,8 +160,8 @@ const ui = computed(() => progress({
|
|
|
142
160
|
</script>
|
|
143
161
|
|
|
144
162
|
<template>
|
|
145
|
-
<
|
|
146
|
-
<div v-if="!isIndeterminate && (status ||
|
|
163
|
+
<Primitive :as="as" :class="ui.root({ class: [props.class, props.ui?.root] })">
|
|
164
|
+
<div v-if="!isIndeterminate && (status || !!slots.status)" :class="ui.status({ class: props.ui?.status })" :style="statusStyle">
|
|
147
165
|
<slot name="status" :percent="percent">
|
|
148
166
|
{{ percent }}%
|
|
149
167
|
</slot>
|
|
@@ -160,5 +178,5 @@ const ui = computed(() => progress({
|
|
|
160
178
|
</slot>
|
|
161
179
|
</div>
|
|
162
180
|
</div>
|
|
163
|
-
</
|
|
181
|
+
</Primitive>
|
|
164
182
|
</template>
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type { RadioGroupRootProps, RadioGroupRootEmits,
|
|
2
|
+
import type { VariantProps } from 'tailwind-variants'
|
|
3
|
+
import type { RadioGroupRootProps, RadioGroupRootEmits, AcceptableValue } from 'reka-ui'
|
|
4
4
|
import type { AppConfig } from '@nuxt/schema'
|
|
5
5
|
import _appConfig from '#build/app.config'
|
|
6
6
|
import theme from '#build/ui/radio-group'
|
|
7
|
-
import
|
|
7
|
+
import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
|
|
8
|
+
import { tv } from '../utils/tv'
|
|
8
9
|
|
|
9
10
|
const appConfig = _appConfig as AppConfig & { ui: { radioGroup: Partial<typeof theme> } }
|
|
10
11
|
|
|
@@ -12,15 +13,17 @@ const radioGroup = tv({ extend: tv(theme), ...(appConfig.ui?.radioGroup || {}) }
|
|
|
12
13
|
|
|
13
14
|
type RadioGroupVariants = VariantProps<typeof radioGroup>
|
|
14
15
|
|
|
15
|
-
export interface RadioGroupItem
|
|
16
|
+
export interface RadioGroupItem {
|
|
16
17
|
label?: string
|
|
17
18
|
description?: string
|
|
19
|
+
disabled?: boolean
|
|
20
|
+
value?: string
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
export interface RadioGroupProps<T> extends Pick<RadioGroupRootProps, 'defaultValue' | 'disabled' | 'loop' | 'modelValue' | 'name' | 'required'> {
|
|
21
24
|
/**
|
|
22
25
|
* The element or component this component should render as.
|
|
23
|
-
* @defaultValue
|
|
26
|
+
* @defaultValue 'div'
|
|
24
27
|
*/
|
|
25
28
|
as?: any
|
|
26
29
|
legend?: string
|
|
@@ -29,6 +32,16 @@ export interface RadioGroupProps<T> extends Pick<RadioGroupRootProps, 'defaultVa
|
|
|
29
32
|
* @defaultValue 'value'
|
|
30
33
|
*/
|
|
31
34
|
valueKey?: string
|
|
35
|
+
/**
|
|
36
|
+
* When `items` is an array of objects, select the field to use as the label.
|
|
37
|
+
* @defaultValue 'label'
|
|
38
|
+
*/
|
|
39
|
+
labelKey?: string
|
|
40
|
+
/**
|
|
41
|
+
* When `items` is an array of objects, select the field to use as the description.
|
|
42
|
+
* @defaultValue 'description'
|
|
43
|
+
*/
|
|
44
|
+
descriptionKey?: string
|
|
32
45
|
items?: T[]
|
|
33
46
|
size?: RadioGroupVariants['size']
|
|
34
47
|
color?: RadioGroupVariants['color']
|
|
@@ -45,23 +58,28 @@ export type RadioGroupEmits = RadioGroupRootEmits & {
|
|
|
45
58
|
change: [payload: Event]
|
|
46
59
|
}
|
|
47
60
|
|
|
48
|
-
type SlotProps<T> = (props: { item: T, modelValue?:
|
|
61
|
+
type SlotProps<T> = (props: { item: T, modelValue?: AcceptableValue }) => any
|
|
49
62
|
|
|
50
63
|
export interface RadioGroupSlots<T> {
|
|
51
64
|
legend(props?: {}): any
|
|
52
65
|
label: SlotProps<T>
|
|
53
66
|
description: SlotProps<T>
|
|
54
67
|
}
|
|
68
|
+
|
|
69
|
+
extendDevtoolsMeta({ defaultProps: { items: ['Option 1', 'Option 2', 'Option 3'] } })
|
|
55
70
|
</script>
|
|
56
71
|
|
|
57
72
|
<script setup lang="ts" generic="T extends RadioGroupItem | AcceptableValue">
|
|
58
73
|
import { computed, useId } from 'vue'
|
|
59
|
-
import { RadioGroupRoot, RadioGroupItem, RadioGroupIndicator, Label, useForwardPropsEmits } from '
|
|
74
|
+
import { RadioGroupRoot, RadioGroupItem, RadioGroupIndicator, Label, useForwardPropsEmits } from 'reka-ui'
|
|
60
75
|
import { reactivePick } from '@vueuse/core'
|
|
61
76
|
import { useFormField } from '../composables/useFormField'
|
|
77
|
+
import { get } from '../utils'
|
|
62
78
|
|
|
63
79
|
const props = withDefaults(defineProps<RadioGroupProps<T>>(), {
|
|
64
80
|
valueKey: 'value',
|
|
81
|
+
labelKey: 'label',
|
|
82
|
+
descriptionKey: 'description',
|
|
65
83
|
orientation: 'vertical'
|
|
66
84
|
})
|
|
67
85
|
const emits = defineEmits<RadioGroupEmits>()
|
|
@@ -89,11 +107,15 @@ function normalizeItem(item: any) {
|
|
|
89
107
|
}
|
|
90
108
|
}
|
|
91
109
|
|
|
92
|
-
const value = item
|
|
110
|
+
const value = get(item, props.valueKey as string)
|
|
111
|
+
const label = get(item, props.labelKey as string)
|
|
112
|
+
const description = get(item, props.descriptionKey as string)
|
|
93
113
|
|
|
94
114
|
return {
|
|
95
115
|
...item,
|
|
96
116
|
value,
|
|
117
|
+
label,
|
|
118
|
+
description,
|
|
97
119
|
id: `${id}:${value}`
|
|
98
120
|
}
|
|
99
121
|
}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type { SelectRootProps, SelectRootEmits, SelectContentProps, SelectArrowProps,
|
|
2
|
+
import type { VariantProps } from 'tailwind-variants'
|
|
3
|
+
import type { SelectRootProps, SelectRootEmits, SelectContentProps, SelectArrowProps, AcceptableValue } from 'reka-ui'
|
|
4
4
|
import type { AppConfig } from '@nuxt/schema'
|
|
5
5
|
import _appConfig from '#build/app.config'
|
|
6
6
|
import theme from '#build/ui/select'
|
|
7
7
|
import type { UseComponentIconsProps } from '../composables/useComponentIcons'
|
|
8
|
+
import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
|
|
9
|
+
import { tv } from '../utils/tv'
|
|
8
10
|
import type { AvatarProps, ChipProps, InputProps } from '../types'
|
|
9
|
-
import type {
|
|
11
|
+
import type { PartialString, MaybeArrayOfArray, MaybeArrayOfArrayItem, SelectModelValue, SelectModelValueEmits, SelectItemKey } from '../types/utils'
|
|
10
12
|
|
|
11
13
|
const appConfig = _appConfig as AppConfig & { ui: { select: Partial<typeof theme> } }
|
|
12
14
|
|
|
13
15
|
const select = tv({ extend: tv(theme), ...(appConfig.ui?.select || {}) })
|
|
14
16
|
|
|
15
|
-
export interface SelectItem
|
|
17
|
+
export interface SelectItem {
|
|
16
18
|
label?: string
|
|
17
19
|
icon?: string
|
|
18
20
|
avatar?: AvatarProps
|
|
@@ -22,11 +24,13 @@ export interface SelectItem extends Pick<SelectItemProps, 'disabled' | 'value'>
|
|
|
22
24
|
* @defaultValue 'item'
|
|
23
25
|
*/
|
|
24
26
|
type?: 'label' | 'separator' | 'item'
|
|
27
|
+
value?: string
|
|
28
|
+
disabled?: boolean
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
type SelectVariants = VariantProps<typeof select>
|
|
28
32
|
|
|
29
|
-
export interface SelectProps<T> extends Omit<SelectRootProps
|
|
33
|
+
export interface SelectProps<T extends MaybeArrayOfArrayItem<I>, I extends MaybeArrayOfArray<SelectItem | AcceptableValue | boolean> = MaybeArrayOfArray<SelectItem | AcceptableValue | boolean>, V extends SelectItemKey<T> | undefined = undefined, M extends boolean = false> extends Omit<SelectRootProps<T>, 'dir' | 'multiple' | 'modelValue' | 'defaultValue' | 'by'>, UseComponentIconsProps {
|
|
30
34
|
id?: string
|
|
31
35
|
/** The placeholder text when the select is empty. */
|
|
32
36
|
placeholder?: string
|
|
@@ -45,7 +49,7 @@ export interface SelectProps<T> extends Omit<SelectRootProps, 'dir'>, UseCompone
|
|
|
45
49
|
selectedIcon?: string
|
|
46
50
|
/**
|
|
47
51
|
* The content of the menu.
|
|
48
|
-
* @defaultValue { side: 'bottom', sideOffset: 8, position: 'popper' }
|
|
52
|
+
* @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }
|
|
49
53
|
*/
|
|
50
54
|
content?: Omit<SelectContentProps, 'as' | 'asChild' | 'forceMount'>
|
|
51
55
|
/**
|
|
@@ -62,55 +66,72 @@ export interface SelectProps<T> extends Omit<SelectRootProps, 'dir'>, UseCompone
|
|
|
62
66
|
* When `items` is an array of objects, select the field to use as the value.
|
|
63
67
|
* @defaultValue 'value'
|
|
64
68
|
*/
|
|
65
|
-
valueKey?:
|
|
66
|
-
|
|
69
|
+
valueKey?: V
|
|
70
|
+
/**
|
|
71
|
+
* When `items` is an array of objects, select the field to use as the label.
|
|
72
|
+
* @defaultValue 'label'
|
|
73
|
+
*/
|
|
74
|
+
labelKey?: V
|
|
75
|
+
items?: I
|
|
76
|
+
/** The value of the Select when initially rendered. Use when you do not need to control the state of the Select. */
|
|
77
|
+
defaultValue?: SelectModelValue<T, V, M, T extends { value: infer U } ? U : never>
|
|
78
|
+
/** The controlled value of the Select. Can be bind as `v-model`. */
|
|
79
|
+
modelValue?: SelectModelValue<T, V, M, T extends { value: infer U } ? U : never>
|
|
80
|
+
/** Whether multiple options can be selected or not. */
|
|
81
|
+
multiple?: M & boolean
|
|
67
82
|
/** Highlight the ring color like a focus state. */
|
|
68
83
|
highlight?: boolean
|
|
69
84
|
class?: any
|
|
70
85
|
ui?: PartialString<typeof select.slots>
|
|
71
86
|
}
|
|
72
87
|
|
|
73
|
-
export type SelectEmits = SelectRootEmits & {
|
|
88
|
+
export type SelectEmits<T, V, M extends boolean> = Omit<SelectRootEmits<T>, 'update:modelValue'> & {
|
|
74
89
|
change: [payload: Event]
|
|
75
90
|
blur: [payload: FocusEvent]
|
|
76
91
|
focus: [payload: FocusEvent]
|
|
77
|
-
}
|
|
92
|
+
} & SelectModelValueEmits<T, V, M, T extends { value: infer U } ? U : never>
|
|
78
93
|
|
|
79
94
|
type SlotProps<T> = (props: { item: T, index: number }) => any
|
|
80
95
|
|
|
81
|
-
export interface SelectSlots<T> {
|
|
82
|
-
'leading'(props: { modelValue:
|
|
83
|
-
'
|
|
96
|
+
export interface SelectSlots<T, M extends boolean> {
|
|
97
|
+
'leading'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean, ui: any }): any
|
|
98
|
+
'default'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean }): any
|
|
99
|
+
'trailing'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean, ui: any }): any
|
|
84
100
|
'item': SlotProps<T>
|
|
85
101
|
'item-leading': SlotProps<T>
|
|
86
102
|
'item-label': SlotProps<T>
|
|
87
103
|
'item-trailing': SlotProps<T>
|
|
88
104
|
}
|
|
105
|
+
|
|
106
|
+
extendDevtoolsMeta({ defaultProps: { items: ['Option 1', 'Option 2', 'Option 3'] } })
|
|
89
107
|
</script>
|
|
90
108
|
|
|
91
|
-
<script setup lang="ts" generic="T extends SelectItem | AcceptableValue">
|
|
109
|
+
<script setup lang="ts" generic="T extends MaybeArrayOfArrayItem<I>, I extends MaybeArrayOfArray<SelectItem | AcceptableValue | boolean> = MaybeArrayOfArray<SelectItem | AcceptableValue | boolean>, V extends SelectItemKey<T> | undefined = undefined, M extends boolean = false">
|
|
92
110
|
import { computed, toRef } from 'vue'
|
|
93
|
-
import { SelectRoot,
|
|
111
|
+
import { SelectRoot, SelectArrow, SelectTrigger, SelectPortal, SelectContent, SelectViewport, SelectLabel, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectSeparator, useForwardPropsEmits } from 'reka-ui'
|
|
94
112
|
import { defu } from 'defu'
|
|
95
113
|
import { reactivePick } from '@vueuse/core'
|
|
96
114
|
import { useAppConfig } from '#imports'
|
|
97
115
|
import { useButtonGroup } from '../composables/useButtonGroup'
|
|
98
116
|
import { useComponentIcons } from '../composables/useComponentIcons'
|
|
99
117
|
import { useFormField } from '../composables/useFormField'
|
|
118
|
+
import { get, compare } from '../utils'
|
|
100
119
|
import UIcon from './Icon.vue'
|
|
101
120
|
import UAvatar from './Avatar.vue'
|
|
102
121
|
import UChip from './Chip.vue'
|
|
103
122
|
|
|
104
|
-
const props = withDefaults(defineProps<SelectProps<T>>(), {
|
|
105
|
-
valueKey: 'value',
|
|
123
|
+
const props = withDefaults(defineProps<SelectProps<T, I, V, M>>(), {
|
|
124
|
+
valueKey: 'value' as never,
|
|
125
|
+
labelKey: 'label' as never,
|
|
106
126
|
portal: true
|
|
107
127
|
})
|
|
108
|
-
const emits = defineEmits<SelectEmits
|
|
109
|
-
const slots = defineSlots<SelectSlots<T>>()
|
|
128
|
+
const emits = defineEmits<SelectEmits<T, V, M>>()
|
|
129
|
+
const slots = defineSlots<SelectSlots<T, M>>()
|
|
110
130
|
|
|
111
131
|
const appConfig = useAppConfig()
|
|
112
|
-
const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'disabled', 'autocomplete', 'required'), emits)
|
|
113
|
-
const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, position: 'popper' }) as SelectContentProps)
|
|
132
|
+
const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'disabled', 'autocomplete', 'required', 'multiple'), emits)
|
|
133
|
+
const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as SelectContentProps)
|
|
134
|
+
const arrowProps = toRef(() => props.arrow as SelectArrowProps)
|
|
114
135
|
|
|
115
136
|
const { emitFormChange, emitFormInput, emitFormBlur, size: formGroupSize, color, id, name, highlight, disabled } = useFormField<InputProps>(props)
|
|
116
137
|
const { orientation, size: buttonGroupSize } = useButtonGroup<InputProps>(props)
|
|
@@ -124,12 +145,23 @@ const ui = computed(() => select({
|
|
|
124
145
|
size: selectSize?.value,
|
|
125
146
|
loading: props.loading,
|
|
126
147
|
highlight: highlight.value,
|
|
127
|
-
leading: isLeading.value || !!slots.leading,
|
|
148
|
+
leading: isLeading.value || !!props.avatar || !!slots.leading,
|
|
128
149
|
trailing: isTrailing.value || !!slots.trailing,
|
|
129
150
|
buttonGroup: orientation.value
|
|
130
151
|
}))
|
|
131
152
|
|
|
132
153
|
const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0]) ? props.items : [props.items]) as SelectItem[][] : [])
|
|
154
|
+
// eslint-disable-next-line vue/no-dupe-keys
|
|
155
|
+
const items = computed(() => groups.value.flatMap(group => group) as T[])
|
|
156
|
+
|
|
157
|
+
function displayValue(value?: AcceptableValue | AcceptableValue[]): string | undefined {
|
|
158
|
+
if (props.multiple && Array.isArray(value)) {
|
|
159
|
+
return value.map(v => displayValue(v)).filter(Boolean).join(', ')
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const item = items.value.find(item => compare(typeof item === 'object' ? get(item as Record<string, any>, props.valueKey as string) : item, value))
|
|
163
|
+
return item && (typeof item === 'object' ? get(item, props.labelKey as string) : item)
|
|
164
|
+
}
|
|
133
165
|
|
|
134
166
|
function onUpdate(value: any) {
|
|
135
167
|
// @ts-expect-error - 'target' does not exist in type 'EventInit'
|
|
@@ -151,27 +183,39 @@ function onUpdateOpen(value: boolean) {
|
|
|
151
183
|
}
|
|
152
184
|
</script>
|
|
153
185
|
|
|
186
|
+
<!-- eslint-disable vue/no-template-shadow -->
|
|
154
187
|
<template>
|
|
155
188
|
<SelectRoot
|
|
156
189
|
:id="id"
|
|
157
190
|
v-slot="{ modelValue, open }"
|
|
158
191
|
v-bind="rootProps"
|
|
159
192
|
:name="name"
|
|
193
|
+
:autocomplete="autocomplete"
|
|
160
194
|
:disabled="disabled"
|
|
161
195
|
@update:model-value="onUpdate"
|
|
162
196
|
@update:open="onUpdateOpen"
|
|
163
197
|
>
|
|
164
|
-
<SelectTrigger :class="ui.base({ class: props.class })">
|
|
165
|
-
<span v-if="isLeading || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
|
|
166
|
-
<slot name="leading" :model-value="modelValue" :open="open" :ui="ui">
|
|
167
|
-
<UIcon v-if="leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
|
|
198
|
+
<SelectTrigger :class="ui.base({ class: [props.class, props.ui?.base] })">
|
|
199
|
+
<span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
|
|
200
|
+
<slot name="leading" :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open" :ui="ui">
|
|
201
|
+
<UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
|
|
202
|
+
<UAvatar v-else-if="!!avatar" :size="((props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
|
|
168
203
|
</slot>
|
|
169
204
|
</span>
|
|
170
205
|
|
|
171
|
-
<
|
|
206
|
+
<slot :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open">
|
|
207
|
+
<template v-for="displayedModelValue in [displayValue(modelValue)]" :key="displayedModelValue">
|
|
208
|
+
<span v-if="displayedModelValue" :class="ui.value({ class: props.ui?.value })">
|
|
209
|
+
{{ displayedModelValue }}
|
|
210
|
+
</span>
|
|
211
|
+
<span v-else :class="ui.placeholder({ class: props.ui?.placeholder })">
|
|
212
|
+
{{ placeholder ?? ' ' }}
|
|
213
|
+
</span>
|
|
214
|
+
</template>
|
|
215
|
+
</slot>
|
|
172
216
|
|
|
173
217
|
<span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })">
|
|
174
|
-
<slot name="trailing" :model-value="modelValue" :open="open" :ui="ui">
|
|
218
|
+
<slot name="trailing" :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open" :ui="ui">
|
|
175
219
|
<UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
|
|
176
220
|
</slot>
|
|
177
221
|
</span>
|
|
@@ -183,19 +227,21 @@ function onUpdateOpen(value: boolean) {
|
|
|
183
227
|
<SelectGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
|
|
184
228
|
<template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
|
|
185
229
|
<SelectLabel v-if="item?.type === 'label'" :class="ui.label({ class: props.ui?.label })">
|
|
186
|
-
{{ item.
|
|
230
|
+
{{ get(item, props.labelKey as string) }}
|
|
187
231
|
</SelectLabel>
|
|
232
|
+
|
|
188
233
|
<SelectSeparator v-else-if="item?.type === 'separator'" :class="ui.separator({ class: props.ui?.separator })" />
|
|
234
|
+
|
|
189
235
|
<SelectItem
|
|
190
236
|
v-else
|
|
191
237
|
:class="ui.item({ class: props.ui?.item })"
|
|
192
238
|
:disabled="item.disabled"
|
|
193
|
-
:value="typeof item === 'object' ? (item
|
|
239
|
+
:value="typeof item === 'object' ? get(item, props.valueKey as string) : item"
|
|
194
240
|
>
|
|
195
241
|
<slot name="item" :item="(item as T)" :index="index">
|
|
196
242
|
<slot name="item-leading" :item="(item as T)" :index="index">
|
|
197
|
-
<
|
|
198
|
-
<
|
|
243
|
+
<UIcon v-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
|
|
244
|
+
<UAvatar v-else-if="item.avatar" :size="((props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
|
|
199
245
|
<UChip
|
|
200
246
|
v-else-if="item.chip"
|
|
201
247
|
:size="((props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()) as ChipProps['size'])"
|
|
@@ -208,7 +254,7 @@ function onUpdateOpen(value: boolean) {
|
|
|
208
254
|
|
|
209
255
|
<SelectItemText :class="ui.itemLabel({ class: props.ui?.itemLabel })">
|
|
210
256
|
<slot name="item-label" :item="(item as T)" :index="index">
|
|
211
|
-
{{ typeof item === 'object' ? item.
|
|
257
|
+
{{ typeof item === 'object' ? get(item, props.labelKey as string) : item }}
|
|
212
258
|
</slot>
|
|
213
259
|
</SelectItemText>
|
|
214
260
|
|
|
@@ -224,6 +270,8 @@ function onUpdateOpen(value: boolean) {
|
|
|
224
270
|
</template>
|
|
225
271
|
</SelectGroup>
|
|
226
272
|
</SelectViewport>
|
|
273
|
+
|
|
274
|
+
<SelectArrow v-if="!!arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" />
|
|
227
275
|
</SelectContent>
|
|
228
276
|
</SelectPortal>
|
|
229
277
|
</SelectRoot>
|