@nuxt/ui 3.0.0-alpha.1 → 3.0.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nuxt/ui/accordion.ts +20 -0
- package/.nuxt/ui/alert.ts +242 -0
- package/.nuxt/ui/avatar-group.ts +40 -0
- package/.nuxt/ui/avatar.ts +42 -0
- package/.nuxt/ui/badge.ts +194 -0
- package/.nuxt/ui/breadcrumb.ts +45 -0
- package/.nuxt/ui/button-group.ts +16 -0
- package/.nuxt/ui/button.ts +344 -0
- package/.nuxt/ui/calendar.ts +85 -0
- package/.nuxt/ui/card.ts +8 -0
- package/.nuxt/ui/carousel.ts +41 -0
- package/.nuxt/ui/checkbox.ts +105 -0
- package/.nuxt/ui/chip.ts +67 -0
- package/.nuxt/ui/collapsible.ts +6 -0
- package/.nuxt/ui/color-picker.ts +39 -0
- package/.nuxt/ui/command-palette.ts +50 -0
- package/.nuxt/ui/container.ts +3 -0
- package/.nuxt/ui/context-menu.ts +198 -0
- package/.nuxt/ui/drawer.ts +55 -0
- package/.nuxt/ui/dropdown-menu.ts +199 -0
- package/.nuxt/ui/form-field.ts +40 -0
- package/.nuxt/ui/form.ts +3 -0
- package/.nuxt/ui/index.ts +48 -0
- package/.nuxt/ui/input-menu.ts +410 -0
- package/.nuxt/ui/input-number.ts +204 -0
- package/.nuxt/ui/input.ts +263 -0
- package/.nuxt/ui/kbd.ts +19 -0
- package/.nuxt/ui/link.ts +15 -0
- package/.nuxt/ui/modal.ts +28 -0
- package/.nuxt/ui/navigation-menu.ts +390 -0
- package/.nuxt/ui/pagination.ts +8 -0
- package/.nuxt/ui/pin-input.ts +145 -0
- package/.nuxt/ui/popover.ts +6 -0
- package/.nuxt/ui/progress.ts +258 -0
- package/.nuxt/ui/radio-group.ts +112 -0
- package/.nuxt/ui/select-menu.ts +316 -0
- package/.nuxt/ui/select.ts +315 -0
- package/.nuxt/ui/separator.ts +143 -0
- package/.nuxt/ui/skeleton.ts +3 -0
- package/.nuxt/ui/slideover.ts +63 -0
- package/.nuxt/ui/slider.ts +148 -0
- package/.nuxt/ui/stepper.ts +180 -0
- package/.nuxt/ui/switch.ts +113 -0
- package/.nuxt/ui/table.ts +129 -0
- package/.nuxt/ui/tabs.ts +227 -0
- package/.nuxt/ui/textarea.ts +263 -0
- package/.nuxt/ui/toast.ts +66 -0
- package/.nuxt/ui/toaster.ts +75 -0
- package/.nuxt/ui/tooltip.ts +9 -0
- package/README.md +75 -54
- package/cli/commands/{init.mjs → make/component.mjs} +5 -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/templates.mjs +52 -7
- 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/B1fTd_Rf.js +1 -0
- package/dist/client/devtools/_nuxt/CSUxkedg.js +1 -0
- package/dist/client/devtools/_nuxt/CbRTGpb7.js +1 -0
- package/dist/client/devtools/_nuxt/YQTlxbcT.js +53 -0
- package/dist/client/devtools/_nuxt/builds/latest.json +1 -0
- package/dist/client/devtools/_nuxt/builds/meta/b3465abc-0a92-4ee7-ba6b-e5174891fcc0.json +1 -0
- package/dist/client/devtools/_nuxt/entry.DXXceQev.css +1 -0
- package/dist/client/devtools/_nuxt/error-404.BJpkZFyY.css +1 -0
- package/dist/client/devtools/_nuxt/error-500.D3i9VDlt.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 +49 -8
- package/dist/runtime/components/Alert.vue +13 -6
- package/dist/runtime/components/App.vue +20 -7
- package/dist/runtime/components/Avatar.vue +33 -9
- package/dist/runtime/components/AvatarGroup.vue +4 -1
- package/dist/runtime/components/Badge.vue +34 -4
- package/dist/runtime/components/Breadcrumb.vue +52 -13
- package/dist/runtime/components/Button.vue +45 -6
- package/dist/runtime/components/ButtonGroup.vue +5 -2
- package/dist/runtime/components/Calendar.vue +190 -0
- package/dist/runtime/components/Card.vue +4 -1
- package/dist/runtime/components/Carousel.vue +322 -0
- package/dist/runtime/components/Checkbox.vue +28 -33
- package/dist/runtime/components/Chip.vue +9 -2
- package/dist/runtime/components/Collapsible.vue +7 -4
- package/dist/runtime/components/ColorPicker.vue +265 -0
- package/dist/runtime/components/CommandPalette.vue +122 -96
- package/dist/runtime/components/Container.vue +4 -1
- package/dist/runtime/components/ContextMenu.vue +101 -14
- package/dist/runtime/components/ContextMenuContent.vue +48 -18
- package/dist/runtime/components/Drawer.vue +22 -11
- package/dist/runtime/components/DropdownMenu.vue +91 -16
- package/dist/runtime/components/DropdownMenuContent.vue +50 -18
- package/dist/runtime/components/Form.vue +49 -32
- package/dist/runtime/components/FormField.vue +18 -6
- package/dist/runtime/components/Icon.vue +1 -1
- package/dist/runtime/components/Input.vue +15 -6
- package/dist/runtime/components/InputMenu.vue +152 -65
- package/dist/runtime/components/InputNumber.vue +192 -0
- package/dist/runtime/components/Kbd.vue +3 -1
- package/dist/runtime/components/Link.vue +71 -8
- package/dist/runtime/components/LinkBase.vue +10 -7
- package/dist/runtime/components/Modal.vue +23 -11
- package/dist/runtime/components/NavigationMenu.vue +170 -75
- package/dist/runtime/components/Pagination.vue +31 -15
- package/dist/runtime/components/PinInput.vue +96 -0
- package/dist/runtime/components/Popover.vue +26 -7
- package/dist/runtime/components/Progress.vue +25 -8
- package/dist/runtime/components/RadioGroup.vue +28 -7
- package/dist/runtime/components/Select.vue +79 -32
- package/dist/runtime/components/SelectMenu.vue +164 -80
- package/dist/runtime/components/Separator.vue +3 -3
- package/dist/runtime/components/Skeleton.vue +4 -1
- package/dist/runtime/components/Slideover.vue +23 -11
- package/dist/runtime/components/Slider.vue +3 -3
- package/dist/runtime/components/Stepper.vue +171 -0
- package/dist/runtime/components/Switch.vue +16 -16
- package/dist/runtime/components/Table.vue +262 -0
- package/dist/runtime/components/Tabs.vue +42 -15
- package/dist/runtime/components/Textarea.vue +9 -3
- package/dist/runtime/components/Toast.vue +13 -5
- package/dist/runtime/components/Toaster.vue +31 -16
- package/dist/runtime/components/Tooltip.vue +9 -6
- 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 +2 -8
- 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 +8 -4
- package/dist/runtime/composables/useFormField.js +2 -1
- 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 +53 -0
- package/dist/runtime/locale/cs.d.ts +2 -0
- package/dist/runtime/locale/cs.js +52 -0
- package/dist/runtime/locale/de.d.ts +2 -0
- package/dist/runtime/locale/de.js +52 -0
- package/dist/runtime/locale/en.d.ts +2 -0
- package/dist/runtime/locale/en.js +52 -0
- package/dist/runtime/locale/es.d.ts +2 -0
- package/dist/runtime/locale/es.js +52 -0
- package/dist/runtime/locale/fa_ir.d.ts +2 -0
- package/dist/runtime/locale/fa_ir.js +53 -0
- package/dist/runtime/locale/fr.d.ts +2 -0
- package/dist/runtime/locale/fr.js +52 -0
- package/dist/runtime/locale/index.d.ts +19 -0
- package/dist/runtime/locale/index.js +19 -0
- package/dist/runtime/locale/it.d.ts +2 -0
- package/dist/runtime/locale/it.js +52 -0
- package/dist/runtime/locale/ja.d.ts +2 -0
- package/dist/runtime/locale/ja.js +52 -0
- package/dist/runtime/locale/ko.d.ts +2 -0
- package/dist/runtime/locale/ko.js +52 -0
- package/dist/runtime/locale/nl.d.ts +2 -0
- package/dist/runtime/locale/nl.js +52 -0
- package/dist/runtime/locale/pl.d.ts +2 -0
- package/dist/runtime/locale/pl.js +52 -0
- package/dist/runtime/locale/pt.d.ts +2 -0
- package/dist/runtime/locale/pt.js +52 -0
- package/dist/runtime/locale/pt_br.d.ts +2 -0
- package/dist/runtime/locale/pt_br.js +52 -0
- package/dist/runtime/locale/ru.d.ts +2 -0
- package/dist/runtime/locale/ru.js +52 -0
- package/dist/runtime/locale/sk.d.ts +2 -0
- package/dist/runtime/locale/sk.js +52 -0
- package/dist/runtime/locale/tr.d.ts +2 -0
- package/dist/runtime/locale/tr.js +52 -0
- package/dist/runtime/locale/zh_hans.d.ts +2 -0
- package/dist/runtime/locale/zh_hans.js +52 -0
- package/dist/runtime/locale/zh_hant.d.ts +2 -0
- package/dist/runtime/locale/zh_hant.js +52 -0
- package/dist/runtime/plugins/colors.js +12 -8
- package/dist/runtime/types/form.d.ts +9 -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 +54 -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/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.CwmIkD_Y.cjs +3269 -0
- package/dist/shared/ui.D_93iuwH.mjs +3262 -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 +98 -31
- 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,19 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { tv, type VariantProps } from 'tailwind-variants'
|
|
3
|
-
import type { ComboboxRootProps, ComboboxRootEmits, ComboboxContentProps,
|
|
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'
|
|
8
9
|
import type { AvatarProps, ChipProps, InputProps } from '../types'
|
|
9
|
-
import type {
|
|
10
|
+
import type { PartialString, MaybeArrayOfArray, MaybeArrayOfArrayItem, SelectModelValue, SelectModelValueEmits, SelectItemKey } from '../types/utils'
|
|
10
11
|
|
|
11
12
|
const appConfig = _appConfig as AppConfig & { ui: { selectMenu: Partial<typeof theme> } }
|
|
12
13
|
|
|
13
14
|
const selectMenu = tv({ extend: tv(theme), ...(appConfig.ui?.selectMenu || {}) })
|
|
14
15
|
|
|
15
|
-
export interface SelectMenuItem
|
|
16
|
+
export interface SelectMenuItem {
|
|
16
17
|
label?: string
|
|
17
18
|
icon?: string
|
|
18
19
|
avatar?: AvatarProps
|
|
@@ -22,21 +23,23 @@ export interface SelectMenuItem extends Pick<ComboboxItemProps, 'disabled'> {
|
|
|
22
23
|
* @defaultValue 'item'
|
|
23
24
|
*/
|
|
24
25
|
type?: 'label' | 'separator' | 'item'
|
|
26
|
+
disabled?: boolean
|
|
27
|
+
onSelect?(e?: Event): void
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
type SelectMenuVariants = VariantProps<typeof selectMenu>
|
|
28
31
|
|
|
29
|
-
export interface SelectMenuProps<T
|
|
32
|
+
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
33
|
id?: string
|
|
31
34
|
/** The placeholder text when the select is empty. */
|
|
32
35
|
placeholder?: string
|
|
33
36
|
/**
|
|
34
|
-
*
|
|
37
|
+
* Whether to display the search input or not.
|
|
38
|
+
* Can be an object to pass additional props to the input.
|
|
39
|
+
* `{ placeholder: 'Search...', variant: 'none' }`{lang="ts-type"}
|
|
35
40
|
* @defaultValue true
|
|
36
41
|
*/
|
|
37
|
-
|
|
38
|
-
/** The placeholder text when the search input is empty. */
|
|
39
|
-
searchPlaceholder?: string
|
|
42
|
+
searchInput?: boolean | InputProps
|
|
40
43
|
color?: SelectMenuVariants['color']
|
|
41
44
|
variant?: SelectMenuVariants['variant']
|
|
42
45
|
size?: SelectMenuVariants['size']
|
|
@@ -53,7 +56,7 @@ export interface SelectMenuProps<T> extends Pick<ComboboxRootProps<T>, 'modelVal
|
|
|
53
56
|
selectedIcon?: string
|
|
54
57
|
/**
|
|
55
58
|
* The content of the menu.
|
|
56
|
-
* @defaultValue { side: 'bottom', sideOffset: 8, position: 'popper' }
|
|
59
|
+
* @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }
|
|
57
60
|
*/
|
|
58
61
|
content?: Omit<ComboboxContentProps, 'as' | 'asChild' | 'forceMount'>
|
|
59
62
|
/**
|
|
@@ -66,125 +69,179 @@ export interface SelectMenuProps<T> extends Pick<ComboboxRootProps<T>, 'modelVal
|
|
|
66
69
|
* @defaultValue true
|
|
67
70
|
*/
|
|
68
71
|
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
72
|
/**
|
|
76
73
|
* When `items` is an array of objects, select the field to use as the value instead of the object itself.
|
|
77
74
|
* @defaultValue undefined
|
|
78
75
|
*/
|
|
79
|
-
valueKey?:
|
|
80
|
-
|
|
76
|
+
valueKey?: V
|
|
77
|
+
/**
|
|
78
|
+
* When `items` is an array of objects, select the field to use as the label.
|
|
79
|
+
* @defaultValue 'label'
|
|
80
|
+
*/
|
|
81
|
+
labelKey?: V
|
|
82
|
+
items?: I
|
|
83
|
+
/** The value of the SelectMenu when initially rendered. Use when you do not need to control the state of the SelectMenu. */
|
|
84
|
+
defaultValue?: SelectModelValue<T, V, M>
|
|
85
|
+
/** The controlled value of the SelectMenu. Can be binded-with with `v-model`. */
|
|
86
|
+
modelValue?: SelectModelValue<T, V, M>
|
|
87
|
+
/** Whether multiple options can be selected or not. */
|
|
88
|
+
multiple?: M & boolean
|
|
81
89
|
/** Highlight the ring color like a focus state. */
|
|
82
90
|
highlight?: boolean
|
|
91
|
+
/**
|
|
92
|
+
* Determines if custom user input that does not exist in options can be added.
|
|
93
|
+
* @defaultValue false
|
|
94
|
+
*/
|
|
95
|
+
createItem?: boolean | 'always' | { position?: 'top' | 'bottom', when?: 'empty' | 'always' }
|
|
96
|
+
/**
|
|
97
|
+
* Fields to filter items by.
|
|
98
|
+
* @defaultValue [labelKey]
|
|
99
|
+
*/
|
|
100
|
+
filterFields?: string[]
|
|
101
|
+
/**
|
|
102
|
+
* When `true`, disable the default filters, useful for custom filtering (useAsyncData, useFetch, etc.).
|
|
103
|
+
* @defaultValue false
|
|
104
|
+
*/
|
|
105
|
+
ignoreFilter?: boolean
|
|
83
106
|
class?: any
|
|
84
107
|
ui?: PartialString<typeof selectMenu.slots>
|
|
85
108
|
}
|
|
86
109
|
|
|
87
|
-
export type SelectMenuEmits<T> = ComboboxRootEmits<T> & {
|
|
110
|
+
export type SelectMenuEmits<T, V, M extends boolean> = Omit<ComboboxRootEmits<T>, 'update:modelValue'> & {
|
|
88
111
|
change: [payload: Event]
|
|
89
112
|
blur: [payload: FocusEvent]
|
|
90
113
|
focus: [payload: FocusEvent]
|
|
91
|
-
|
|
114
|
+
create: [item: string]
|
|
115
|
+
} & SelectModelValueEmits<T, V, M>
|
|
92
116
|
|
|
93
117
|
type SlotProps<T> = (props: { item: T, index: number }) => any
|
|
94
118
|
|
|
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
|
|
119
|
+
export interface SelectMenuSlots<T, M extends boolean> {
|
|
120
|
+
'leading'(props: { modelValue?: M extends true ? T[] : T, open: boolean, ui: any }): any
|
|
121
|
+
'default'(props: { modelValue?: M extends true ? T[] : T, open: boolean }): any
|
|
122
|
+
'trailing'(props: { modelValue?: M extends true ? T[] : T, open: boolean, ui: any }): any
|
|
99
123
|
'empty'(props: { searchTerm?: string }): any
|
|
100
124
|
'item': SlotProps<T>
|
|
101
125
|
'item-leading': SlotProps<T>
|
|
102
126
|
'item-label': SlotProps<T>
|
|
103
127
|
'item-trailing': SlotProps<T>
|
|
128
|
+
'create-item-label'(props: { item: string }): any
|
|
104
129
|
}
|
|
130
|
+
|
|
131
|
+
extendDevtoolsMeta({ defaultProps: { items: ['Option 1', 'Option 2', 'Option 3'] } })
|
|
105
132
|
</script>
|
|
106
133
|
|
|
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 '
|
|
134
|
+
<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">
|
|
135
|
+
import { computed, toRef, toRaw } from 'vue'
|
|
136
|
+
import { ComboboxRoot, ComboboxArrow, ComboboxAnchor, ComboboxInput, ComboboxTrigger, ComboboxPortal, ComboboxContent, ComboboxViewport, ComboboxEmpty, ComboboxGroup, ComboboxLabel, ComboboxSeparator, ComboboxItem, ComboboxItemIndicator, useForwardPropsEmits, useFilter } from 'reka-ui'
|
|
110
137
|
import { defu } from 'defu'
|
|
111
|
-
import { reactivePick } from '@vueuse/core'
|
|
138
|
+
import { reactivePick, createReusableTemplate } from '@vueuse/core'
|
|
112
139
|
import { useAppConfig } from '#imports'
|
|
113
140
|
import { useButtonGroup } from '../composables/useButtonGroup'
|
|
114
141
|
import { useComponentIcons } from '../composables/useComponentIcons'
|
|
115
142
|
import { useFormField } from '../composables/useFormField'
|
|
143
|
+
import { useLocale } from '../composables/useLocale'
|
|
144
|
+
import { get, compare } from '../utils'
|
|
116
145
|
import UIcon from './Icon.vue'
|
|
117
146
|
import UAvatar from './Avatar.vue'
|
|
118
147
|
import UChip from './Chip.vue'
|
|
119
|
-
import
|
|
148
|
+
import UInput from './Input.vue'
|
|
120
149
|
|
|
121
|
-
const props = withDefaults(defineProps<SelectMenuProps<T>>(), {
|
|
122
|
-
search: true,
|
|
150
|
+
const props = withDefaults(defineProps<SelectMenuProps<T, I, V, M>>(), {
|
|
123
151
|
portal: true,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
filter: () => ['label']
|
|
152
|
+
searchInput: true,
|
|
153
|
+
labelKey: 'label' as never
|
|
127
154
|
})
|
|
128
|
-
const emits = defineEmits<SelectMenuEmits<T>>()
|
|
129
|
-
const slots = defineSlots<SelectMenuSlots<T>>()
|
|
155
|
+
const emits = defineEmits<SelectMenuEmits<T, V, M>>()
|
|
156
|
+
const slots = defineSlots<SelectMenuSlots<T, M>>()
|
|
130
157
|
|
|
131
158
|
const searchTerm = defineModel<string>('searchTerm', { default: '' })
|
|
132
159
|
|
|
160
|
+
const { t } = useLocale()
|
|
133
161
|
const appConfig = useAppConfig()
|
|
134
|
-
const
|
|
135
|
-
|
|
162
|
+
const { contains } = useFilter({ sensitivity: 'base' })
|
|
163
|
+
|
|
164
|
+
const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'multiple', 'resetSearchTermOnBlur', 'highlightOnHover'), emits)
|
|
165
|
+
const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as ComboboxContentProps)
|
|
166
|
+
const arrowProps = toRef(() => props.arrow as ComboboxArrowProps)
|
|
167
|
+
const searchInputProps = toRef(() => defu(props.searchInput, { placeholder: 'Search...', variant: 'none' }) as InputProps)
|
|
168
|
+
|
|
136
169
|
const { emitFormBlur, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled } = useFormField<InputProps>(props)
|
|
137
170
|
const { orientation, size: buttonGroupSize } = useButtonGroup<InputProps>(props)
|
|
138
171
|
const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(props, { trailingIcon: appConfig.ui.icons.chevronDown })))
|
|
139
172
|
|
|
140
173
|
const selectSize = computed(() => buttonGroupSize.value || formGroupSize.value)
|
|
141
174
|
|
|
175
|
+
const [DefineCreateItemTemplate, ReuseCreateItemTemplate] = createReusableTemplate()
|
|
176
|
+
|
|
142
177
|
const ui = computed(() => selectMenu({
|
|
143
178
|
color: color.value,
|
|
144
179
|
variant: props.variant,
|
|
145
180
|
size: selectSize?.value,
|
|
146
181
|
loading: props.loading,
|
|
147
182
|
highlight: highlight.value,
|
|
148
|
-
leading: isLeading.value || !!slots.leading,
|
|
183
|
+
leading: isLeading.value || !!props.avatar || !!slots.leading,
|
|
149
184
|
trailing: isTrailing.value || !!slots.trailing,
|
|
150
185
|
buttonGroup: orientation.value
|
|
151
186
|
}))
|
|
152
187
|
|
|
153
|
-
function displayValue(
|
|
154
|
-
if (multiple && Array.isArray(
|
|
155
|
-
return
|
|
188
|
+
function displayValue(value: T | T[]): string {
|
|
189
|
+
if (props.multiple && Array.isArray(value)) {
|
|
190
|
+
return value.map(v => displayValue(v)).filter(Boolean).join(', ')
|
|
156
191
|
}
|
|
157
192
|
|
|
158
|
-
if (
|
|
159
|
-
return
|
|
193
|
+
if (!props.valueKey) {
|
|
194
|
+
return value && (typeof value === 'object' ? get(value, props.labelKey as string) : value)
|
|
160
195
|
}
|
|
161
196
|
|
|
162
|
-
|
|
197
|
+
const item = items.value.find(item => compare(typeof item === 'object' ? get(item, props.valueKey as string) : item, value))
|
|
198
|
+
return item && (typeof item === 'object' ? get(item, props.labelKey as string) : item)
|
|
163
199
|
}
|
|
164
200
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
201
|
+
const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0]) ? props.items : [props.items]) as SelectMenuItem[][] : [])
|
|
202
|
+
// eslint-disable-next-line vue/no-dupe-keys
|
|
203
|
+
const items = computed(() => groups.value.flatMap(group => group) as T[])
|
|
204
|
+
|
|
205
|
+
const filteredGroups = computed(() => {
|
|
206
|
+
if (props.ignoreFilter || !searchTerm.value) {
|
|
207
|
+
return groups.value
|
|
168
208
|
}
|
|
169
209
|
|
|
170
|
-
const fields = Array.isArray(props.
|
|
210
|
+
const fields = Array.isArray(props.filterFields) ? props.filterFields : [props.labelKey] as string[]
|
|
171
211
|
|
|
172
|
-
return items.filter((item) => {
|
|
212
|
+
return groups.value.map(items => items.filter((item) => {
|
|
173
213
|
if (typeof item !== 'object') {
|
|
174
|
-
return
|
|
214
|
+
return contains(item, searchTerm.value)
|
|
175
215
|
}
|
|
176
216
|
|
|
177
|
-
|
|
178
|
-
|
|
217
|
+
if (item.type && ['label', 'separator'].includes(item.type)) {
|
|
218
|
+
return true
|
|
219
|
+
}
|
|
179
220
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
221
|
+
return fields.some(field => contains(get(item, field), searchTerm.value))
|
|
222
|
+
})).filter(group => group.filter(item => !item.type || !['label', 'separator'].includes(item.type)).length > 0)
|
|
223
|
+
})
|
|
224
|
+
const filteredItems = computed(() => filteredGroups.value.flatMap(group => group) as T[])
|
|
184
225
|
|
|
185
|
-
const
|
|
226
|
+
const createItem = computed(() => {
|
|
227
|
+
if (!props.createItem || !searchTerm.value) {
|
|
228
|
+
return false
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const newItem = props.valueKey ? { [props.valueKey]: searchTerm.value } as T : searchTerm.value
|
|
232
|
+
|
|
233
|
+
if ((typeof props.createItem === 'object' && props.createItem.when === 'always') || props.createItem === 'always') {
|
|
234
|
+
return !filteredItems.value.find(item => compare(item, newItem, props.valueKey))
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return !filteredItems.value.length
|
|
238
|
+
})
|
|
239
|
+
const createItemPosition = computed(() => typeof props.createItem === 'object' ? props.createItem.position : 'bottom')
|
|
186
240
|
|
|
187
241
|
function onUpdate(value: any) {
|
|
242
|
+
if (toRaw(props.modelValue) === value) {
|
|
243
|
+
return
|
|
244
|
+
}
|
|
188
245
|
// @ts-expect-error - 'target' does not exist in type 'EventInit'
|
|
189
246
|
const event = new Event('change', { target: { value } })
|
|
190
247
|
emits('change', event)
|
|
@@ -204,39 +261,57 @@ function onUpdateOpen(value: boolean) {
|
|
|
204
261
|
}
|
|
205
262
|
</script>
|
|
206
263
|
|
|
264
|
+
<!-- eslint-disable vue/no-template-shadow -->
|
|
207
265
|
<template>
|
|
266
|
+
<DefineCreateItemTemplate>
|
|
267
|
+
<ComboboxGroup :class="ui.group({ class: props.ui?.group })">
|
|
268
|
+
<ComboboxItem
|
|
269
|
+
:class="ui.item({ class: props.ui?.item })"
|
|
270
|
+
:value="searchTerm"
|
|
271
|
+
@select.prevent="emits('create', searchTerm)"
|
|
272
|
+
>
|
|
273
|
+
<span :class="ui.itemLabel({ class: props.ui?.itemLabel })">
|
|
274
|
+
<slot name="create-item-label" :item="searchTerm">
|
|
275
|
+
{{ t('selectMenu.create', { label: searchTerm }) }}
|
|
276
|
+
</slot>
|
|
277
|
+
</span>
|
|
278
|
+
</ComboboxItem>
|
|
279
|
+
</ComboboxGroup>
|
|
280
|
+
</DefineCreateItemTemplate>
|
|
281
|
+
|
|
208
282
|
<ComboboxRoot
|
|
209
283
|
:id="id"
|
|
210
284
|
v-slot="{ modelValue, open }"
|
|
211
285
|
v-bind="rootProps"
|
|
212
|
-
|
|
286
|
+
ignore-filter
|
|
213
287
|
as-child
|
|
214
288
|
:name="name"
|
|
215
289
|
:disabled="disabled"
|
|
216
|
-
:display-value="() => searchTerm"
|
|
217
|
-
:filter-function="filterFunction"
|
|
218
290
|
@update:model-value="onUpdate"
|
|
219
291
|
@update:open="onUpdateOpen"
|
|
220
292
|
>
|
|
221
293
|
<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 })" />
|
|
294
|
+
<ComboboxTrigger :class="ui.base({ class: [props.class, props.ui?.base] })" tabindex="0">
|
|
295
|
+
<span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
|
|
296
|
+
<slot name="leading" :model-value="(modelValue as M extends true ? T[] : T)" :open="open" :ui="ui">
|
|
297
|
+
<UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
|
|
298
|
+
<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
299
|
</slot>
|
|
227
300
|
</span>
|
|
228
301
|
|
|
229
|
-
<slot :model-value="(modelValue as T)" :open="open">
|
|
230
|
-
<
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
302
|
+
<slot :model-value="(modelValue as M extends true ? T[] : T)" :open="open">
|
|
303
|
+
<template v-for="displayedModelValue in [displayValue(modelValue as M extends true ? T[] : T)]" :key="displayedModelValue">
|
|
304
|
+
<span v-if="displayedModelValue" :class="ui.value({ class: props.ui?.value })">
|
|
305
|
+
{{ displayedModelValue }}
|
|
306
|
+
</span>
|
|
307
|
+
<span v-else :class="ui.placeholder({ class: props.ui?.placeholder })">
|
|
308
|
+
{{ placeholder ?? ' ' }}
|
|
309
|
+
</span>
|
|
310
|
+
</template>
|
|
236
311
|
</slot>
|
|
237
312
|
|
|
238
313
|
<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">
|
|
314
|
+
<slot name="trailing" :model-value="(modelValue as M extends true ? T[] : T)" :open="open" :ui="ui">
|
|
240
315
|
<UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
|
|
241
316
|
</slot>
|
|
242
317
|
</span>
|
|
@@ -245,19 +320,23 @@ function onUpdateOpen(value: boolean) {
|
|
|
245
320
|
|
|
246
321
|
<ComboboxPortal :disabled="!portal">
|
|
247
322
|
<ComboboxContent :class="ui.content({ class: props.ui?.content })" v-bind="contentProps">
|
|
248
|
-
<ComboboxInput v-if="
|
|
323
|
+
<ComboboxInput v-if="!!searchInput" v-model="searchTerm" :display-value="() => searchTerm" as-child>
|
|
324
|
+
<UInput autofocus autocomplete="off" v-bind="searchInputProps" :class="ui.input({ class: props.ui?.input })" />
|
|
325
|
+
</ComboboxInput>
|
|
249
326
|
|
|
250
327
|
<ComboboxEmpty :class="ui.empty({ class: props.ui?.empty })">
|
|
251
328
|
<slot name="empty" :search-term="searchTerm">
|
|
252
|
-
{{ searchTerm ?
|
|
329
|
+
{{ searchTerm ? t('selectMenu.noMatch', { searchTerm }) : t('selectMenu.noData') }}
|
|
253
330
|
</slot>
|
|
254
331
|
</ComboboxEmpty>
|
|
255
332
|
|
|
256
333
|
<ComboboxViewport :class="ui.viewport({ class: props.ui?.viewport })">
|
|
257
|
-
<
|
|
334
|
+
<ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'top'" />
|
|
335
|
+
|
|
336
|
+
<ComboboxGroup v-for="(group, groupIndex) in filteredGroups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
|
|
258
337
|
<template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
|
|
259
338
|
<ComboboxLabel v-if="item?.type === 'label'" :class="ui.label({ class: props.ui?.label })">
|
|
260
|
-
{{ item.
|
|
339
|
+
{{ get(item, props.labelKey as string) }}
|
|
261
340
|
</ComboboxLabel>
|
|
262
341
|
|
|
263
342
|
<ComboboxSeparator v-else-if="item?.type === 'separator'" :class="ui.separator({ class: props.ui?.separator })" />
|
|
@@ -266,12 +345,13 @@ function onUpdateOpen(value: boolean) {
|
|
|
266
345
|
v-else
|
|
267
346
|
:class="ui.item({ class: props.ui?.item })"
|
|
268
347
|
:disabled="item.disabled"
|
|
269
|
-
:value="valueKey && typeof item === 'object' ? (item
|
|
348
|
+
:value="valueKey && typeof item === 'object' ? get(item, props.valueKey as string) : item"
|
|
349
|
+
@select="item.onSelect"
|
|
270
350
|
>
|
|
271
351
|
<slot name="item" :item="(item as T)" :index="index">
|
|
272
352
|
<slot name="item-leading" :item="(item as T)" :index="index">
|
|
273
|
-
<
|
|
274
|
-
<
|
|
353
|
+
<UIcon v-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
|
|
354
|
+
<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
355
|
<UChip
|
|
276
356
|
v-else-if="item.chip"
|
|
277
357
|
:size="((props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()) as ChipProps['size'])"
|
|
@@ -284,7 +364,7 @@ function onUpdateOpen(value: boolean) {
|
|
|
284
364
|
|
|
285
365
|
<span :class="ui.itemLabel({ class: props.ui?.itemLabel })">
|
|
286
366
|
<slot name="item-label" :item="(item as T)" :index="index">
|
|
287
|
-
{{
|
|
367
|
+
{{ typeof item === 'object' ? get(item, props.labelKey as string) : item }}
|
|
288
368
|
</slot>
|
|
289
369
|
</span>
|
|
290
370
|
|
|
@@ -299,7 +379,11 @@ function onUpdateOpen(value: boolean) {
|
|
|
299
379
|
</ComboboxItem>
|
|
300
380
|
</template>
|
|
301
381
|
</ComboboxGroup>
|
|
382
|
+
|
|
383
|
+
<ReuseCreateItemTemplate v-if="createItem && createItemPosition === 'bottom'" />
|
|
302
384
|
</ComboboxViewport>
|
|
385
|
+
|
|
386
|
+
<ComboboxArrow v-if="!!arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" />
|
|
303
387
|
</ComboboxContent>
|
|
304
388
|
</ComboboxPortal>
|
|
305
389
|
</ComboboxRoot>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { tv, type VariantProps } from 'tailwind-variants'
|
|
3
|
-
import type { SeparatorProps as _SeparatorProps } from '
|
|
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'
|
|
@@ -15,7 +15,7 @@ type SeparatorVariants = VariantProps<typeof separator>
|
|
|
15
15
|
export interface SeparatorProps extends Pick<_SeparatorProps, 'decorative'> {
|
|
16
16
|
/**
|
|
17
17
|
* The element or component this component should render as.
|
|
18
|
-
* @defaultValue
|
|
18
|
+
* @defaultValue 'div'
|
|
19
19
|
*/
|
|
20
20
|
as?: any
|
|
21
21
|
/** Display a label in the middle. */
|
|
@@ -43,7 +43,7 @@ export interface SeparatorSlots {
|
|
|
43
43
|
|
|
44
44
|
<script setup lang="ts">
|
|
45
45
|
import { computed } from 'vue'
|
|
46
|
-
import { Separator, useForwardProps } from '
|
|
46
|
+
import { Separator, useForwardProps } from 'reka-ui'
|
|
47
47
|
import { reactivePick } from '@vueuse/core'
|
|
48
48
|
import UIcon from './Icon.vue'
|
|
49
49
|
import UAvatar from './Avatar.vue'
|
|
@@ -3,6 +3,7 @@ import { tv } from 'tailwind-variants'
|
|
|
3
3
|
import type { AppConfig } from '@nuxt/schema'
|
|
4
4
|
import _appConfig from '#build/app.config'
|
|
5
5
|
import theme from '#build/ui/skeleton'
|
|
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,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { tv, type VariantProps } from 'tailwind-variants'
|
|
3
|
-
import type { DialogRootProps, DialogRootEmits, DialogContentProps } from '
|
|
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'
|
|
7
8
|
import type { ButtonProps } from '../types'
|
|
8
9
|
|
|
9
10
|
const appConfig = _appConfig as AppConfig & { ui: { slideover: Partial<typeof theme> } }
|
|
@@ -35,7 +36,7 @@ export interface SlideoverProps extends DialogRootProps {
|
|
|
35
36
|
portal?: boolean
|
|
36
37
|
/**
|
|
37
38
|
* Display a close button to dismiss the slideover.
|
|
38
|
-
* `{ size: 'md', color: '
|
|
39
|
+
* `{ size: 'md', color: 'neutral', variant: 'ghost' }`{lang="ts-type"}
|
|
39
40
|
* @defaultValue true
|
|
40
41
|
*/
|
|
41
42
|
close?: ButtonProps | boolean
|
|
@@ -65,13 +66,16 @@ export interface SlideoverSlots {
|
|
|
65
66
|
body(props?: {}): any
|
|
66
67
|
footer(props?: {}): any
|
|
67
68
|
}
|
|
69
|
+
|
|
70
|
+
extendDevtoolsMeta({ example: 'SlideoverExample' })
|
|
68
71
|
</script>
|
|
69
72
|
|
|
70
73
|
<script setup lang="ts">
|
|
71
74
|
import { computed, toRef } from 'vue'
|
|
72
|
-
import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, useForwardPropsEmits } from '
|
|
75
|
+
import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, useForwardPropsEmits } from 'reka-ui'
|
|
73
76
|
import { reactivePick } from '@vueuse/core'
|
|
74
77
|
import { useAppConfig } from '#imports'
|
|
78
|
+
import { useLocale } from '../composables/useLocale'
|
|
75
79
|
import UButton from './Button.vue'
|
|
76
80
|
|
|
77
81
|
const props = withDefaults(defineProps<SlideoverProps>(), {
|
|
@@ -85,21 +89,29 @@ const props = withDefaults(defineProps<SlideoverProps>(), {
|
|
|
85
89
|
const emits = defineEmits<SlideoverEmits>()
|
|
86
90
|
const slots = defineSlots<SlideoverSlots>()
|
|
87
91
|
|
|
92
|
+
const { t } = useLocale()
|
|
93
|
+
const appConfig = useAppConfig()
|
|
94
|
+
|
|
88
95
|
const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'modal'), emits)
|
|
89
96
|
const contentProps = toRef(() => props.content)
|
|
90
97
|
const contentEvents = computed(() => {
|
|
91
98
|
if (props.preventClose) {
|
|
92
99
|
return {
|
|
93
100
|
pointerDownOutside: (e: Event) => e.preventDefault(),
|
|
94
|
-
interactOutside: (e: Event) => e.preventDefault()
|
|
101
|
+
interactOutside: (e: Event) => e.preventDefault(),
|
|
102
|
+
escapeKeyDown: (e: Event) => e.preventDefault()
|
|
95
103
|
}
|
|
96
104
|
}
|
|
97
105
|
|
|
98
|
-
return {
|
|
106
|
+
return {
|
|
107
|
+
interactOutside: (e: Event) => {
|
|
108
|
+
if (e.target instanceof Element && e.target.closest('[data-sonner-toaster]')) {
|
|
109
|
+
return e.preventDefault()
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
99
113
|
})
|
|
100
114
|
|
|
101
|
-
const appConfig = useAppConfig()
|
|
102
|
-
|
|
103
115
|
const ui = computed(() => slideover({
|
|
104
116
|
transition: props.transition,
|
|
105
117
|
side: props.side
|
|
@@ -108,14 +120,14 @@ const ui = computed(() => slideover({
|
|
|
108
120
|
|
|
109
121
|
<template>
|
|
110
122
|
<DialogRoot v-slot="{ open }" v-bind="rootProps">
|
|
111
|
-
<DialogTrigger v-if="!!slots.default" as-child>
|
|
123
|
+
<DialogTrigger v-if="!!slots.default" as-child :class="props.class">
|
|
112
124
|
<slot :open="open" />
|
|
113
125
|
</DialogTrigger>
|
|
114
126
|
|
|
115
127
|
<DialogPortal :disabled="!portal">
|
|
116
128
|
<DialogOverlay v-if="overlay" :class="ui.overlay({ class: props.ui?.overlay })" />
|
|
117
129
|
|
|
118
|
-
<DialogContent :data-side="side" :class="ui.content({ class: [props.class, props.ui?.content] })" v-bind="contentProps" v-on="contentEvents">
|
|
130
|
+
<DialogContent :data-side="side" :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-bind="contentProps" v-on="contentEvents">
|
|
119
131
|
<slot name="content">
|
|
120
132
|
<div v-if="!!slots.header || (title || !!slots.title) || (description || !!slots.description) || (close || !!slots.close)" :class="ui.header({ class: props.ui?.header })">
|
|
121
133
|
<slot name="header">
|
|
@@ -137,9 +149,9 @@ const ui = computed(() => slideover({
|
|
|
137
149
|
v-if="close"
|
|
138
150
|
:icon="closeIcon || appConfig.ui.icons.close"
|
|
139
151
|
size="md"
|
|
140
|
-
color="
|
|
152
|
+
color="neutral"
|
|
141
153
|
variant="ghost"
|
|
142
|
-
aria-label="
|
|
154
|
+
:aria-label="t('slideover.close')"
|
|
143
155
|
v-bind="typeof close === 'object' ? close : undefined"
|
|
144
156
|
:class="ui.close({ class: props.ui?.close })"
|
|
145
157
|
/>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { tv, type VariantProps } from 'tailwind-variants'
|
|
3
|
-
import type { SliderRootProps } from '
|
|
3
|
+
import type { SliderRootProps } 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/slider'
|
|
@@ -14,7 +14,7 @@ type SliderVariants = VariantProps<typeof slider>
|
|
|
14
14
|
export interface SliderProps extends Pick<SliderRootProps, 'name' | 'disabled' | 'inverted' | 'min' | 'max' | 'step' | 'minStepsBetweenThumbs'> {
|
|
15
15
|
/**
|
|
16
16
|
* The element or component this component should render as.
|
|
17
|
-
* @defaultValue
|
|
17
|
+
* @defaultValue 'div'
|
|
18
18
|
*/
|
|
19
19
|
as?: any
|
|
20
20
|
size?: SliderVariants['size']
|
|
@@ -38,7 +38,7 @@ export interface SliderEmits {
|
|
|
38
38
|
|
|
39
39
|
<script setup lang="ts">
|
|
40
40
|
import { computed } from 'vue'
|
|
41
|
-
import { SliderRoot, SliderRange, SliderTrack, SliderThumb, useForwardPropsEmits } from '
|
|
41
|
+
import { SliderRoot, SliderRange, SliderTrack, SliderThumb, useForwardPropsEmits } from 'reka-ui'
|
|
42
42
|
import { reactivePick } from '@vueuse/core'
|
|
43
43
|
import { useFormField } from '../composables/useFormField'
|
|
44
44
|
|