@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,18 +1,20 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type { ComboboxRootProps, ComboboxRootEmits, ComboboxContentProps,
|
|
2
|
+
import type { VariantProps } from 'tailwind-variants'
|
|
3
|
+
import type { ComboboxRootProps, ComboboxRootEmits, ComboboxContentProps, ComboboxArrowProps, 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-menu'
|
|
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: { selectMenu: Partial<typeof theme> } }
|
|
12
14
|
|
|
13
15
|
const selectMenu = tv({ extend: tv(theme), ...(appConfig.ui?.selectMenu || {}) })
|
|
14
16
|
|
|
15
|
-
export interface SelectMenuItem
|
|
17
|
+
export interface SelectMenuItem {
|
|
16
18
|
label?: string
|
|
17
19
|
icon?: string
|
|
18
20
|
avatar?: AvatarProps
|
|
@@ -22,21 +24,23 @@ export interface SelectMenuItem extends Pick<ComboboxItemProps, 'disabled'> {
|
|
|
22
24
|
* @defaultValue 'item'
|
|
23
25
|
*/
|
|
24
26
|
type?: 'label' | 'separator' | 'item'
|
|
27
|
+
disabled?: boolean
|
|
28
|
+
onSelect?(e?: Event): void
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
type SelectMenuVariants = VariantProps<typeof selectMenu>
|
|
28
32
|
|
|
29
|
-
export interface SelectMenuProps<T
|
|
33
|
+
export interface SelectMenuProps<T extends MaybeArrayOfArrayItem<I>, I extends MaybeArrayOfArray<SelectMenuItem | AcceptableValue | boolean> = MaybeArrayOfArray<SelectMenuItem | AcceptableValue | boolean>, V extends SelectItemKey<T> | undefined = undefined, M extends boolean = false> extends Pick<ComboboxRootProps<T>, 'open' | 'defaultOpen' | 'disabled' | 'name' | 'resetSearchTermOnBlur' | 'highlightOnHover'>, UseComponentIconsProps {
|
|
30
34
|
id?: string
|
|
31
35
|
/** The placeholder text when the select is empty. */
|
|
32
36
|
placeholder?: string
|
|
33
37
|
/**
|
|
34
|
-
*
|
|
38
|
+
* Whether to display the search input or not.
|
|
39
|
+
* Can be an object to pass additional props to the input.
|
|
40
|
+
* `{ placeholder: 'Search...', variant: 'none' }`{lang="ts-type"}
|
|
35
41
|
* @defaultValue true
|
|
36
42
|
*/
|
|
37
|
-
|
|
38
|
-
/** The placeholder text when the search input is empty. */
|
|
39
|
-
searchPlaceholder?: string
|
|
43
|
+
searchInput?: boolean | InputProps
|
|
40
44
|
color?: SelectMenuVariants['color']
|
|
41
45
|
variant?: SelectMenuVariants['variant']
|
|
42
46
|
size?: SelectMenuVariants['size']
|
|
@@ -53,7 +57,7 @@ export interface SelectMenuProps<T> extends Pick<ComboboxRootProps<T>, 'modelVal
|
|
|
53
57
|
selectedIcon?: string
|
|
54
58
|
/**
|
|
55
59
|
* The content of the menu.
|
|
56
|
-
* @defaultValue { side: 'bottom', sideOffset: 8, position: 'popper' }
|
|
60
|
+
* @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }
|
|
57
61
|
*/
|
|
58
62
|
content?: Omit<ComboboxContentProps, 'as' | 'asChild' | 'forceMount'>
|
|
59
63
|
/**
|
|
@@ -66,125 +70,180 @@ export interface SelectMenuProps<T> extends Pick<ComboboxRootProps<T>, 'modelVal
|
|
|
66
70
|
* @defaultValue true
|
|
67
71
|
*/
|
|
68
72
|
portal?: boolean
|
|
69
|
-
/**
|
|
70
|
-
* Whether to filter items or not, can be an array of fields to filter.
|
|
71
|
-
* When `false`, items will not be filtered which is useful for custom filtering (useAsyncData, useFetch, etc.).
|
|
72
|
-
* @defaultValue ['label']
|
|
73
|
-
*/
|
|
74
|
-
filter?: boolean | string[]
|
|
75
73
|
/**
|
|
76
74
|
* When `items` is an array of objects, select the field to use as the value instead of the object itself.
|
|
77
75
|
* @defaultValue undefined
|
|
78
76
|
*/
|
|
79
|
-
valueKey?:
|
|
80
|
-
|
|
77
|
+
valueKey?: V
|
|
78
|
+
/**
|
|
79
|
+
* When `items` is an array of objects, select the field to use as the label.
|
|
80
|
+
* @defaultValue 'label'
|
|
81
|
+
*/
|
|
82
|
+
labelKey?: V
|
|
83
|
+
items?: I
|
|
84
|
+
/** The value of the SelectMenu when initially rendered. Use when you do not need to control the state of the SelectMenu. */
|
|
85
|
+
defaultValue?: SelectModelValue<T, V, M>
|
|
86
|
+
/** The controlled value of the SelectMenu. Can be binded-with with `v-model`. */
|
|
87
|
+
modelValue?: SelectModelValue<T, V, M>
|
|
88
|
+
/** Whether multiple options can be selected or not. */
|
|
89
|
+
multiple?: M & boolean
|
|
81
90
|
/** Highlight the ring color like a focus state. */
|
|
82
91
|
highlight?: boolean
|
|
92
|
+
/**
|
|
93
|
+
* Determines if custom user input that does not exist in options can be added.
|
|
94
|
+
* @defaultValue false
|
|
95
|
+
*/
|
|
96
|
+
createItem?: boolean | 'always' | { position?: 'top' | 'bottom', when?: 'empty' | 'always' }
|
|
97
|
+
/**
|
|
98
|
+
* Fields to filter items by.
|
|
99
|
+
* @defaultValue [labelKey]
|
|
100
|
+
*/
|
|
101
|
+
filterFields?: string[]
|
|
102
|
+
/**
|
|
103
|
+
* When `true`, disable the default filters, useful for custom filtering (useAsyncData, useFetch, etc.).
|
|
104
|
+
* @defaultValue false
|
|
105
|
+
*/
|
|
106
|
+
ignoreFilter?: boolean
|
|
83
107
|
class?: any
|
|
84
108
|
ui?: PartialString<typeof selectMenu.slots>
|
|
85
109
|
}
|
|
86
110
|
|
|
87
|
-
export type SelectMenuEmits<T> = ComboboxRootEmits<T> & {
|
|
111
|
+
export type SelectMenuEmits<T, V, M extends boolean> = Omit<ComboboxRootEmits<T>, 'update:modelValue'> & {
|
|
88
112
|
change: [payload: Event]
|
|
89
113
|
blur: [payload: FocusEvent]
|
|
90
114
|
focus: [payload: FocusEvent]
|
|
91
|
-
|
|
115
|
+
create: [item: string]
|
|
116
|
+
} & SelectModelValueEmits<T, V, M>
|
|
92
117
|
|
|
93
118
|
type SlotProps<T> = (props: { item: T, index: number }) => any
|
|
94
119
|
|
|
95
|
-
export
|
|
96
|
-
'leading'(props: { modelValue: T, open: boolean, ui: any }): any
|
|
97
|
-
'default'(props: { modelValue: T, open: boolean }): any
|
|
98
|
-
'trailing'(props: { modelValue: T, open: boolean, ui: any }): any
|
|
120
|
+
export interface SelectMenuSlots<T, M extends boolean> {
|
|
121
|
+
'leading'(props: { modelValue?: M extends true ? T[] : T, open: boolean, ui: any }): any
|
|
122
|
+
'default'(props: { modelValue?: M extends true ? T[] : T, open: boolean }): any
|
|
123
|
+
'trailing'(props: { modelValue?: M extends true ? T[] : T, open: boolean, ui: any }): any
|
|
99
124
|
'empty'(props: { searchTerm?: string }): any
|
|
100
125
|
'item': SlotProps<T>
|
|
101
126
|
'item-leading': SlotProps<T>
|
|
102
127
|
'item-label': SlotProps<T>
|
|
103
128
|
'item-trailing': SlotProps<T>
|
|
129
|
+
'create-item-label'(props: { item: string }): any
|
|
104
130
|
}
|
|
131
|
+
|
|
132
|
+
extendDevtoolsMeta({ defaultProps: { items: ['Option 1', 'Option 2', 'Option 3'] } })
|
|
105
133
|
</script>
|
|
106
134
|
|
|
107
|
-
<script setup lang="ts" generic="T extends SelectMenuItem | AcceptableValue">
|
|
108
|
-
import { computed, toRef } from 'vue'
|
|
109
|
-
import { ComboboxRoot, ComboboxAnchor, ComboboxInput, ComboboxTrigger, ComboboxPortal, ComboboxContent, ComboboxViewport, ComboboxEmpty, ComboboxGroup, ComboboxLabel, ComboboxSeparator, ComboboxItem, ComboboxItemIndicator, useForwardPropsEmits } from '
|
|
135
|
+
<script setup lang="ts" generic="T extends MaybeArrayOfArrayItem<I>, I extends MaybeArrayOfArray<SelectMenuItem | AcceptableValue | boolean> = MaybeArrayOfArray<SelectMenuItem | AcceptableValue | boolean>, V extends SelectItemKey<T> | undefined = undefined, M extends boolean = false">
|
|
136
|
+
import { computed, toRef, toRaw } from 'vue'
|
|
137
|
+
import { ComboboxRoot, ComboboxArrow, ComboboxAnchor, ComboboxInput, ComboboxTrigger, ComboboxPortal, ComboboxContent, ComboboxViewport, ComboboxEmpty, ComboboxGroup, ComboboxLabel, ComboboxSeparator, ComboboxItem, ComboboxItemIndicator, useForwardPropsEmits, useFilter } from 'reka-ui'
|
|
110
138
|
import { defu } from 'defu'
|
|
111
|
-
import { reactivePick } from '@vueuse/core'
|
|
139
|
+
import { reactivePick, createReusableTemplate } from '@vueuse/core'
|
|
112
140
|
import { useAppConfig } from '#imports'
|
|
113
141
|
import { useButtonGroup } from '../composables/useButtonGroup'
|
|
114
142
|
import { useComponentIcons } from '../composables/useComponentIcons'
|
|
115
143
|
import { useFormField } from '../composables/useFormField'
|
|
144
|
+
import { useLocale } from '../composables/useLocale'
|
|
145
|
+
import { get, compare } from '../utils'
|
|
116
146
|
import UIcon from './Icon.vue'
|
|
117
147
|
import UAvatar from './Avatar.vue'
|
|
118
148
|
import UChip from './Chip.vue'
|
|
119
|
-
import
|
|
149
|
+
import UInput from './Input.vue'
|
|
120
150
|
|
|
121
|
-
const props = withDefaults(defineProps<SelectMenuProps<T>>(), {
|
|
122
|
-
search: true,
|
|
151
|
+
const props = withDefaults(defineProps<SelectMenuProps<T, I, V, M>>(), {
|
|
123
152
|
portal: true,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
153
|
+
searchInput: true,
|
|
154
|
+
labelKey: 'label' as never,
|
|
155
|
+
resetSearchTermOnBlur: true
|
|
127
156
|
})
|
|
128
|
-
const emits = defineEmits<SelectMenuEmits<T>>()
|
|
129
|
-
const slots = defineSlots<SelectMenuSlots<T>>()
|
|
157
|
+
const emits = defineEmits<SelectMenuEmits<T, V, M>>()
|
|
158
|
+
const slots = defineSlots<SelectMenuSlots<T, M>>()
|
|
130
159
|
|
|
131
160
|
const searchTerm = defineModel<string>('searchTerm', { default: '' })
|
|
132
161
|
|
|
162
|
+
const { t } = useLocale()
|
|
133
163
|
const appConfig = useAppConfig()
|
|
134
|
-
const
|
|
135
|
-
|
|
164
|
+
const { contains } = useFilter({ sensitivity: 'base' })
|
|
165
|
+
|
|
166
|
+
const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'multiple', 'resetSearchTermOnBlur', 'highlightOnHover'), emits)
|
|
167
|
+
const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as ComboboxContentProps)
|
|
168
|
+
const arrowProps = toRef(() => props.arrow as ComboboxArrowProps)
|
|
169
|
+
const searchInputProps = toRef(() => defu(props.searchInput, { placeholder: t('selectMenu.search'), variant: 'none' }) as InputProps)
|
|
170
|
+
|
|
136
171
|
const { emitFormBlur, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled } = useFormField<InputProps>(props)
|
|
137
172
|
const { orientation, size: buttonGroupSize } = useButtonGroup<InputProps>(props)
|
|
138
173
|
const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(props, { trailingIcon: appConfig.ui.icons.chevronDown })))
|
|
139
174
|
|
|
140
175
|
const selectSize = computed(() => buttonGroupSize.value || formGroupSize.value)
|
|
141
176
|
|
|
177
|
+
const [DefineCreateItemTemplate, ReuseCreateItemTemplate] = createReusableTemplate()
|
|
178
|
+
|
|
142
179
|
const ui = computed(() => selectMenu({
|
|
143
180
|
color: color.value,
|
|
144
181
|
variant: props.variant,
|
|
145
182
|
size: selectSize?.value,
|
|
146
183
|
loading: props.loading,
|
|
147
184
|
highlight: highlight.value,
|
|
148
|
-
leading: isLeading.value || !!slots.leading,
|
|
185
|
+
leading: isLeading.value || !!props.avatar || !!slots.leading,
|
|
149
186
|
trailing: isTrailing.value || !!slots.trailing,
|
|
150
187
|
buttonGroup: orientation.value
|
|
151
188
|
}))
|
|
152
189
|
|
|
153
|
-
function displayValue(
|
|
154
|
-
if (multiple && Array.isArray(
|
|
155
|
-
return
|
|
190
|
+
function displayValue(value: T | T[]): string {
|
|
191
|
+
if (props.multiple && Array.isArray(value)) {
|
|
192
|
+
return value.map(v => displayValue(v)).filter(Boolean).join(', ')
|
|
156
193
|
}
|
|
157
194
|
|
|
158
|
-
if (
|
|
159
|
-
return
|
|
195
|
+
if (!props.valueKey) {
|
|
196
|
+
return value && (typeof value === 'object' ? get(value, props.labelKey as string) : value)
|
|
160
197
|
}
|
|
161
198
|
|
|
162
|
-
|
|
199
|
+
const item = items.value.find(item => compare(typeof item === 'object' ? get(item as Record<string, any>, props.valueKey as string) : item, value))
|
|
200
|
+
return item && (typeof item === 'object' ? get(item, props.labelKey as string) : item)
|
|
163
201
|
}
|
|
164
202
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
203
|
+
const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0]) ? props.items : [props.items]) as SelectMenuItem[][] : [])
|
|
204
|
+
// eslint-disable-next-line vue/no-dupe-keys
|
|
205
|
+
const items = computed(() => groups.value.flatMap(group => group) as T[])
|
|
206
|
+
|
|
207
|
+
const filteredGroups = computed(() => {
|
|
208
|
+
if (props.ignoreFilter || !searchTerm.value) {
|
|
209
|
+
return groups.value
|
|
168
210
|
}
|
|
169
211
|
|
|
170
|
-
const fields = Array.isArray(props.
|
|
212
|
+
const fields = Array.isArray(props.filterFields) ? props.filterFields : [props.labelKey] as string[]
|
|
171
213
|
|
|
172
|
-
return items.filter((item) => {
|
|
214
|
+
return groups.value.map(items => items.filter((item) => {
|
|
173
215
|
if (typeof item !== 'object') {
|
|
174
|
-
return
|
|
216
|
+
return contains(item, searchTerm.value)
|
|
175
217
|
}
|
|
176
218
|
|
|
177
|
-
|
|
178
|
-
|
|
219
|
+
if (item.type && ['label', 'separator'].includes(item.type)) {
|
|
220
|
+
return true
|
|
221
|
+
}
|
|
179
222
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
223
|
+
return fields.some(field => contains(get(item, field), searchTerm.value))
|
|
224
|
+
})).filter(group => group.filter(item => !item.type || !['label', 'separator'].includes(item.type)).length > 0)
|
|
225
|
+
})
|
|
226
|
+
const filteredItems = computed(() => filteredGroups.value.flatMap(group => group) as T[])
|
|
184
227
|
|
|
185
|
-
const
|
|
228
|
+
const createItem = computed(() => {
|
|
229
|
+
if (!props.createItem || !searchTerm.value) {
|
|
230
|
+
return false
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const newItem = props.valueKey ? { [props.valueKey]: searchTerm.value } as T : searchTerm.value
|
|
234
|
+
|
|
235
|
+
if ((typeof props.createItem === 'object' && props.createItem.when === 'always') || props.createItem === 'always') {
|
|
236
|
+
return !filteredItems.value.find(item => compare(item, newItem, props.valueKey))
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return !filteredItems.value.length
|
|
240
|
+
})
|
|
241
|
+
const createItemPosition = computed(() => typeof props.createItem === 'object' ? props.createItem.position : 'bottom')
|
|
186
242
|
|
|
187
243
|
function onUpdate(value: any) {
|
|
244
|
+
if (toRaw(props.modelValue) === value) {
|
|
245
|
+
return
|
|
246
|
+
}
|
|
188
247
|
// @ts-expect-error - 'target' does not exist in type 'EventInit'
|
|
189
248
|
const event = new Event('change', { target: { value } })
|
|
190
249
|
emits('change', event)
|
|
@@ -193,50 +252,82 @@ function onUpdate(value: any) {
|
|
|
193
252
|
}
|
|
194
253
|
|
|
195
254
|
function onUpdateOpen(value: boolean) {
|
|
255
|
+
let timeoutId
|
|
256
|
+
|
|
196
257
|
if (!value) {
|
|
197
258
|
const event = new FocusEvent('blur')
|
|
259
|
+
|
|
198
260
|
emits('blur', event)
|
|
199
261
|
emitFormBlur()
|
|
262
|
+
|
|
263
|
+
// Since we use `displayValue` prop inside ComboboxInput we should reset searchTerm manually
|
|
264
|
+
// https://reka-ui.com/docs/components/combobox#api-reference
|
|
265
|
+
if (props.resetSearchTermOnBlur) {
|
|
266
|
+
const STATE_ANIMATION_DELAY_MS = 100
|
|
267
|
+
|
|
268
|
+
timeoutId = setTimeout(() => {
|
|
269
|
+
searchTerm.value = ''
|
|
270
|
+
}, STATE_ANIMATION_DELAY_MS)
|
|
271
|
+
}
|
|
200
272
|
} else {
|
|
201
273
|
const event = new FocusEvent('focus')
|
|
202
274
|
emits('focus', event)
|
|
275
|
+
clearTimeout(timeoutId)
|
|
203
276
|
}
|
|
204
277
|
}
|
|
205
278
|
</script>
|
|
206
279
|
|
|
280
|
+
<!-- eslint-disable vue/no-template-shadow -->
|
|
207
281
|
<template>
|
|
282
|
+
<DefineCreateItemTemplate>
|
|
283
|
+
<ComboboxGroup :class="ui.group({ class: props.ui?.group })">
|
|
284
|
+
<ComboboxItem
|
|
285
|
+
:class="ui.item({ class: props.ui?.item })"
|
|
286
|
+
:value="searchTerm"
|
|
287
|
+
@select.prevent="emits('create', searchTerm)"
|
|
288
|
+
>
|
|
289
|
+
<span :class="ui.itemLabel({ class: props.ui?.itemLabel })">
|
|
290
|
+
<slot name="create-item-label" :item="searchTerm">
|
|
291
|
+
{{ t('selectMenu.create', { label: searchTerm }) }}
|
|
292
|
+
</slot>
|
|
293
|
+
</span>
|
|
294
|
+
</ComboboxItem>
|
|
295
|
+
</ComboboxGroup>
|
|
296
|
+
</DefineCreateItemTemplate>
|
|
297
|
+
|
|
208
298
|
<ComboboxRoot
|
|
209
299
|
:id="id"
|
|
210
300
|
v-slot="{ modelValue, open }"
|
|
211
301
|
v-bind="rootProps"
|
|
212
|
-
|
|
302
|
+
ignore-filter
|
|
213
303
|
as-child
|
|
214
304
|
:name="name"
|
|
215
305
|
:disabled="disabled"
|
|
216
|
-
:display-value="() => searchTerm"
|
|
217
|
-
:filter-function="filterFunction"
|
|
218
306
|
@update:model-value="onUpdate"
|
|
219
307
|
@update:open="onUpdateOpen"
|
|
220
308
|
>
|
|
221
309
|
<ComboboxAnchor as-child>
|
|
222
|
-
<ComboboxTrigger :class="ui.base({ class: props.class })" tabindex="0">
|
|
223
|
-
<span v-if="isLeading || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
|
|
224
|
-
<slot name="leading" :model-value="(modelValue as T)" :open="open" :ui="ui">
|
|
225
|
-
<UIcon v-if="leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
|
|
310
|
+
<ComboboxTrigger :class="ui.base({ class: [props.class, props.ui?.base] })" tabindex="0">
|
|
311
|
+
<span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
|
|
312
|
+
<slot name="leading" :model-value="(modelValue as M extends true ? T[] : T)" :open="open" :ui="ui">
|
|
313
|
+
<UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
|
|
314
|
+
<UAvatar v-else-if="!!avatar" :size="((props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
|
|
226
315
|
</slot>
|
|
227
316
|
</span>
|
|
228
317
|
|
|
229
|
-
<slot :model-value="(modelValue as T)" :open="open">
|
|
230
|
-
<
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
318
|
+
<slot :model-value="(modelValue as M extends true ? T[] : T)" :open="open">
|
|
319
|
+
<template v-for="displayedModelValue in [displayValue(modelValue as M extends true ? T[] : T)]" :key="displayedModelValue">
|
|
320
|
+
<span v-if="displayedModelValue" :class="ui.value({ class: props.ui?.value })">
|
|
321
|
+
{{ displayedModelValue }}
|
|
322
|
+
</span>
|
|
323
|
+
<span v-else :class="ui.placeholder({ class: props.ui?.placeholder })">
|
|
324
|
+
{{ placeholder ?? ' ' }}
|
|
325
|
+
</span>
|
|
326
|
+
</template>
|
|
236
327
|
</slot>
|
|
237
328
|
|
|
238
329
|
<span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })">
|
|
239
|
-
<slot name="trailing" :model-value="(modelValue as T)" :open="open" :ui="ui">
|
|
330
|
+
<slot name="trailing" :model-value="(modelValue as M extends true ? T[] : T)" :open="open" :ui="ui">
|
|
240
331
|
<UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
|
|
241
332
|
</slot>
|
|
242
333
|
</span>
|
|
@@ -245,19 +336,23 @@ function onUpdateOpen(value: boolean) {
|
|
|
245
336
|
|
|
246
337
|
<ComboboxPortal :disabled="!portal">
|
|
247
338
|
<ComboboxContent :class="ui.content({ class: props.ui?.content })" v-bind="contentProps">
|
|
248
|
-
<ComboboxInput v-if="
|
|
339
|
+
<ComboboxInput v-if="!!searchInput" v-model="searchTerm" :display-value="() => searchTerm" as-child>
|
|
340
|
+
<UInput autofocus autocomplete="off" v-bind="searchInputProps" :class="ui.input({ class: props.ui?.input })" />
|
|
341
|
+
</ComboboxInput>
|
|
249
342
|
|
|
250
343
|
<ComboboxEmpty :class="ui.empty({ class: props.ui?.empty })">
|
|
251
344
|
<slot name="empty" :search-term="searchTerm">
|
|
252
|
-
{{ searchTerm ?
|
|
345
|
+
{{ searchTerm ? t('selectMenu.noMatch', { searchTerm }) : t('selectMenu.noData') }}
|
|
253
346
|
</slot>
|
|
254
347
|
</ComboboxEmpty>
|
|
255
348
|
|
|
256
349
|
<ComboboxViewport :class="ui.viewport({ class: props.ui?.viewport })">
|
|
257
|
-
<
|
|
350
|
+
<ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'top'" />
|
|
351
|
+
|
|
352
|
+
<ComboboxGroup v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
|
|
258
353
|
<template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
|
|
259
354
|
<ComboboxLabel v-if="item?.type === 'label'" :class="ui.label({ class: props.ui?.label })">
|
|
260
|
-
{{ item.
|
|
355
|
+
{{ get(item, props.labelKey as string) }}
|
|
261
356
|
</ComboboxLabel>
|
|
262
357
|
|
|
263
358
|
<ComboboxSeparator v-else-if="item?.type === 'separator'" :class="ui.separator({ class: props.ui?.separator })" />
|
|
@@ -266,12 +361,13 @@ function onUpdateOpen(value: boolean) {
|
|
|
266
361
|
v-else
|
|
267
362
|
:class="ui.item({ class: props.ui?.item })"
|
|
268
363
|
:disabled="item.disabled"
|
|
269
|
-
:value="valueKey && typeof item === 'object' ? (item
|
|
364
|
+
:value="valueKey && typeof item === 'object' ? get(item, props.valueKey as string) : item"
|
|
365
|
+
@select="item.onSelect"
|
|
270
366
|
>
|
|
271
367
|
<slot name="item" :item="(item as T)" :index="index">
|
|
272
368
|
<slot name="item-leading" :item="(item as T)" :index="index">
|
|
273
|
-
<
|
|
274
|
-
<
|
|
369
|
+
<UIcon v-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
|
|
370
|
+
<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 })" />
|
|
275
371
|
<UChip
|
|
276
372
|
v-else-if="item.chip"
|
|
277
373
|
:size="((props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()) as ChipProps['size'])"
|
|
@@ -284,7 +380,7 @@ function onUpdateOpen(value: boolean) {
|
|
|
284
380
|
|
|
285
381
|
<span :class="ui.itemLabel({ class: props.ui?.itemLabel })">
|
|
286
382
|
<slot name="item-label" :item="(item as T)" :index="index">
|
|
287
|
-
{{
|
|
383
|
+
{{ typeof item === 'object' ? get(item, props.labelKey as string) : item }}
|
|
288
384
|
</slot>
|
|
289
385
|
</span>
|
|
290
386
|
|
|
@@ -299,7 +395,11 @@ function onUpdateOpen(value: boolean) {
|
|
|
299
395
|
</ComboboxItem>
|
|
300
396
|
</template>
|
|
301
397
|
</ComboboxGroup>
|
|
398
|
+
|
|
399
|
+
<ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'bottom'" />
|
|
302
400
|
</ComboboxViewport>
|
|
401
|
+
|
|
402
|
+
<ComboboxArrow v-if="!!arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" />
|
|
303
403
|
</ComboboxContent>
|
|
304
404
|
</ComboboxPortal>
|
|
305
405
|
</ComboboxRoot>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type { SeparatorProps as _SeparatorProps } from '
|
|
2
|
+
import type { VariantProps } from 'tailwind-variants'
|
|
3
|
+
import type { SeparatorProps as _SeparatorProps } 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/separator'
|
|
7
|
+
import { tv } from '../utils/tv'
|
|
7
8
|
import type { AvatarProps } from '../types'
|
|
8
9
|
|
|
9
10
|
const appConfig = _appConfig as AppConfig & { ui: { separator: Partial<typeof theme> } }
|
|
@@ -15,7 +16,7 @@ type SeparatorVariants = VariantProps<typeof separator>
|
|
|
15
16
|
export interface SeparatorProps extends Pick<_SeparatorProps, 'decorative'> {
|
|
16
17
|
/**
|
|
17
18
|
* The element or component this component should render as.
|
|
18
|
-
* @defaultValue
|
|
19
|
+
* @defaultValue 'div'
|
|
19
20
|
*/
|
|
20
21
|
as?: any
|
|
21
22
|
/** Display a label in the middle. */
|
|
@@ -43,7 +44,7 @@ export interface SeparatorSlots {
|
|
|
43
44
|
|
|
44
45
|
<script setup lang="ts">
|
|
45
46
|
import { computed } from 'vue'
|
|
46
|
-
import { Separator, useForwardProps } from '
|
|
47
|
+
import { Separator, useForwardProps } from 'reka-ui'
|
|
47
48
|
import { reactivePick } from '@vueuse/core'
|
|
48
49
|
import UIcon from './Icon.vue'
|
|
49
50
|
import UAvatar from './Avatar.vue'
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { tv } from 'tailwind-variants'
|
|
3
2
|
import type { AppConfig } from '@nuxt/schema'
|
|
4
3
|
import _appConfig from '#build/app.config'
|
|
5
4
|
import theme from '#build/ui/skeleton'
|
|
5
|
+
import { tv } from '../utils/tv'
|
|
6
|
+
import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
|
|
6
7
|
|
|
7
8
|
const appConfig = _appConfig as AppConfig & { ui: { skeleton: Partial<typeof theme> } }
|
|
8
9
|
|
|
@@ -16,10 +17,12 @@ export interface SkeletonProps {
|
|
|
16
17
|
as?: any
|
|
17
18
|
class?: any
|
|
18
19
|
}
|
|
20
|
+
|
|
21
|
+
extendDevtoolsMeta({ example: 'SkeletonExample' })
|
|
19
22
|
</script>
|
|
20
23
|
|
|
21
24
|
<script setup lang="ts">
|
|
22
|
-
import { Primitive } from '
|
|
25
|
+
import { Primitive } from 'reka-ui'
|
|
23
26
|
|
|
24
27
|
const props = defineProps<SkeletonProps>()
|
|
25
28
|
</script>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import type { DialogRootProps, DialogRootEmits, DialogContentProps } from '
|
|
2
|
+
import type { VariantProps } from 'tailwind-variants'
|
|
3
|
+
import type { DialogRootProps, DialogRootEmits, DialogContentProps } 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/slideover'
|
|
7
|
+
import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
|
|
8
|
+
import { tv } from '../utils/tv'
|
|
7
9
|
import type { ButtonProps } from '../types'
|
|
8
10
|
|
|
9
11
|
const appConfig = _appConfig as AppConfig & { ui: { slideover: Partial<typeof theme> } }
|
|
@@ -35,7 +37,7 @@ export interface SlideoverProps extends DialogRootProps {
|
|
|
35
37
|
portal?: boolean
|
|
36
38
|
/**
|
|
37
39
|
* Display a close button to dismiss the slideover.
|
|
38
|
-
* `{ size: 'md', color: '
|
|
40
|
+
* `{ size: 'md', color: 'neutral', variant: 'ghost' }`{lang="ts-type"}
|
|
39
41
|
* @defaultValue true
|
|
40
42
|
*/
|
|
41
43
|
close?: ButtonProps | boolean
|
|
@@ -45,10 +47,10 @@ export interface SlideoverProps extends DialogRootProps {
|
|
|
45
47
|
*/
|
|
46
48
|
closeIcon?: string
|
|
47
49
|
/**
|
|
48
|
-
* When `
|
|
49
|
-
* @defaultValue
|
|
50
|
+
* When `false`, the slideover will not close when clicking outside or pressing escape.
|
|
51
|
+
* @defaultValue true
|
|
50
52
|
*/
|
|
51
|
-
|
|
53
|
+
dismissible?: boolean
|
|
52
54
|
class?: any
|
|
53
55
|
ui?: Partial<typeof slideover.slots>
|
|
54
56
|
}
|
|
@@ -65,13 +67,16 @@ export interface SlideoverSlots {
|
|
|
65
67
|
body(props?: {}): any
|
|
66
68
|
footer(props?: {}): any
|
|
67
69
|
}
|
|
70
|
+
|
|
71
|
+
extendDevtoolsMeta({ example: 'SlideoverExample' })
|
|
68
72
|
</script>
|
|
69
73
|
|
|
70
74
|
<script setup lang="ts">
|
|
71
75
|
import { computed, toRef } from 'vue'
|
|
72
|
-
import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, useForwardPropsEmits } from '
|
|
76
|
+
import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, useForwardPropsEmits } from 'reka-ui'
|
|
73
77
|
import { reactivePick } from '@vueuse/core'
|
|
74
78
|
import { useAppConfig } from '#imports'
|
|
79
|
+
import { useLocale } from '../composables/useLocale'
|
|
75
80
|
import UButton from './Button.vue'
|
|
76
81
|
|
|
77
82
|
const props = withDefaults(defineProps<SlideoverProps>(), {
|
|
@@ -80,26 +85,29 @@ const props = withDefaults(defineProps<SlideoverProps>(), {
|
|
|
80
85
|
overlay: true,
|
|
81
86
|
transition: true,
|
|
82
87
|
modal: true,
|
|
88
|
+
dismissible: true,
|
|
83
89
|
side: 'right'
|
|
84
90
|
})
|
|
85
91
|
const emits = defineEmits<SlideoverEmits>()
|
|
86
92
|
const slots = defineSlots<SlideoverSlots>()
|
|
87
93
|
|
|
94
|
+
const { t } = useLocale()
|
|
95
|
+
const appConfig = useAppConfig()
|
|
96
|
+
|
|
88
97
|
const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'modal'), emits)
|
|
89
98
|
const contentProps = toRef(() => props.content)
|
|
90
99
|
const contentEvents = computed(() => {
|
|
91
|
-
if (props.
|
|
100
|
+
if (!props.dismissible) {
|
|
92
101
|
return {
|
|
93
102
|
pointerDownOutside: (e: Event) => e.preventDefault(),
|
|
94
|
-
interactOutside: (e: Event) => e.preventDefault()
|
|
103
|
+
interactOutside: (e: Event) => e.preventDefault(),
|
|
104
|
+
escapeKeyDown: (e: Event) => e.preventDefault()
|
|
95
105
|
}
|
|
96
106
|
}
|
|
97
107
|
|
|
98
108
|
return {}
|
|
99
109
|
})
|
|
100
110
|
|
|
101
|
-
const appConfig = useAppConfig()
|
|
102
|
-
|
|
103
111
|
const ui = computed(() => slideover({
|
|
104
112
|
transition: props.transition,
|
|
105
113
|
side: props.side
|
|
@@ -108,14 +116,14 @@ const ui = computed(() => slideover({
|
|
|
108
116
|
|
|
109
117
|
<template>
|
|
110
118
|
<DialogRoot v-slot="{ open }" v-bind="rootProps">
|
|
111
|
-
<DialogTrigger v-if="!!slots.default" as-child>
|
|
119
|
+
<DialogTrigger v-if="!!slots.default" as-child :class="props.class">
|
|
112
120
|
<slot :open="open" />
|
|
113
121
|
</DialogTrigger>
|
|
114
122
|
|
|
115
123
|
<DialogPortal :disabled="!portal">
|
|
116
124
|
<DialogOverlay v-if="overlay" :class="ui.overlay({ class: props.ui?.overlay })" />
|
|
117
125
|
|
|
118
|
-
<DialogContent :data-side="side" :class="ui.content({ class: [props.class, props.ui?.content] })" v-bind="contentProps" v-on="contentEvents">
|
|
126
|
+
<DialogContent :data-side="side" :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-bind="contentProps" v-on="contentEvents">
|
|
119
127
|
<slot name="content">
|
|
120
128
|
<div v-if="!!slots.header || (title || !!slots.title) || (description || !!slots.description) || (close || !!slots.close)" :class="ui.header({ class: props.ui?.header })">
|
|
121
129
|
<slot name="header">
|
|
@@ -137,9 +145,9 @@ const ui = computed(() => slideover({
|
|
|
137
145
|
v-if="close"
|
|
138
146
|
:icon="closeIcon || appConfig.ui.icons.close"
|
|
139
147
|
size="md"
|
|
140
|
-
color="
|
|
148
|
+
color="neutral"
|
|
141
149
|
variant="ghost"
|
|
142
|
-
aria-label="
|
|
150
|
+
:aria-label="t('slideover.close')"
|
|
143
151
|
v-bind="typeof close === 'object' ? close : undefined"
|
|
144
152
|
:class="ui.close({ class: props.ui?.close })"
|
|
145
153
|
/>
|