@aleph-alpha/ui-library 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/dist/system/index-CkH7HQaa.js +7 -0
- package/dist/system/index-CuHwEAQ_.js +7 -0
- package/dist/system/index.d.ts +1322 -318
- package/dist/system/lib.js +8839 -6993
- package/package.json +2 -1
- package/src/@types/shims-vue.d.ts +5 -0
- package/src/__tests__/placeholder.test.ts +7 -0
- package/src/compositions/UiCompositionPlaceholder/UiCompositionPlaceholder.vue +9 -0
- package/src/compositions/UiCompositionPlaceholder/index.ts +1 -0
- package/src/compositions/UiCompositionPlaceholder/types.ts +8 -0
- package/src/compositions/UiDataTable/UiDataTable.mock.ts +104 -0
- package/src/compositions/UiDataTable/UiDataTable.stories.ts +1575 -0
- package/src/compositions/UiDataTable/UiDataTable.vue +129 -0
- package/src/compositions/UiDataTable/UiDataTableColumnHeader.vue +97 -0
- package/src/compositions/UiDataTable/UiDataTablePagination.vue +147 -0
- package/src/compositions/UiDataTable/UiDataTableToolbar.vue +85 -0
- package/src/compositions/UiDataTable/__tests__/UiDataTable.test.ts +372 -0
- package/src/compositions/UiDataTable/__tests__/UiDataTableColumnHeader.test.ts +217 -0
- package/src/compositions/UiDataTable/__tests__/UiDataTablePagination.test.ts +274 -0
- package/src/compositions/UiDataTable/__tests__/UiDataTableToolbar.test.ts +198 -0
- package/src/compositions/UiDataTable/constants.ts +77 -0
- package/src/compositions/UiDataTable/index.ts +6 -0
- package/src/compositions/UiDataTable/types.ts +39 -0
- package/src/compositions/UiDatePicker/UiDatePicker.stories.ts +976 -0
- package/src/compositions/UiDatePicker/UiDatePicker.vue +193 -0
- package/src/compositions/UiDatePicker/__tests__/UiDatePicker.test.ts +325 -0
- package/src/compositions/UiDatePicker/index.ts +14 -0
- package/src/compositions/UiDatePicker/types.ts +220 -0
- package/src/compositions/index.ts +8 -0
- package/src/foundations/UiPlaceholder/UiPlaceholder.vue +9 -0
- package/src/foundations/UiPlaceholder/index.ts +1 -0
- package/src/foundations/UiPlaceholder/types.ts +8 -0
- package/src/foundations/index.ts +6 -0
- package/src/index.ts +27 -0
- package/src/lib/utils.ts +6 -0
- package/src/primitives/UiAccordion/UiAccordion.stories.ts +476 -0
- package/src/primitives/UiAccordion/UiAccordion.vue +31 -0
- package/src/primitives/UiAccordion/UiAccordionContent.vue +16 -0
- package/src/primitives/UiAccordion/UiAccordionItem.vue +16 -0
- package/src/primitives/UiAccordion/UiAccordionTrigger.vue +23 -0
- package/src/primitives/UiAccordion/__tests__/UiAccordion.test.ts +198 -0
- package/src/primitives/UiAccordion/index.ts +6 -0
- package/src/primitives/UiAccordion/types.ts +95 -0
- package/src/primitives/UiAlert/UiAlert.stories.ts +199 -0
- package/src/primitives/UiAlert/UiAlert.vue +27 -0
- package/src/primitives/UiAlert/UiAlertDescription.vue +13 -0
- package/src/primitives/UiAlert/UiAlertTitle.vue +13 -0
- package/src/primitives/UiAlert/__tests__/UiAlert.test.ts +20 -0
- package/src/primitives/UiAlert/constants.ts +3 -0
- package/src/primitives/UiAlert/index.ts +5 -0
- package/src/primitives/UiAlert/types.ts +14 -0
- package/src/primitives/UiAlertDialog/UiAlertDialog.stories.ts +186 -0
- package/src/primitives/UiAlertDialog/UiAlertDialog.vue +18 -0
- package/src/primitives/UiAlertDialog/UiAlertDialogAction.vue +16 -0
- package/src/primitives/UiAlertDialog/UiAlertDialogCancel.vue +16 -0
- package/src/primitives/UiAlertDialog/UiAlertDialogContent.vue +26 -0
- package/src/primitives/UiAlertDialog/UiAlertDialogDescription.vue +16 -0
- package/src/primitives/UiAlertDialog/UiAlertDialogFooter.vue +13 -0
- package/src/primitives/UiAlertDialog/UiAlertDialogHeader.vue +16 -0
- package/src/primitives/UiAlertDialog/UiAlertDialogTitle.vue +16 -0
- package/src/primitives/UiAlertDialog/UiAlertDialogTrigger.vue +17 -0
- package/src/primitives/UiAlertDialog/__tests__/UiAlertDialog.test.ts +184 -0
- package/src/primitives/UiAlertDialog/index.ts +9 -0
- package/src/primitives/UiAlertDialog/types.ts +83 -0
- package/src/primitives/UiAvatar/UiAvatar.stories.ts +194 -0
- package/src/primitives/UiAvatar/UiAvatar.vue +13 -0
- package/src/primitives/UiAvatar/UiAvatarFallback.vue +13 -0
- package/src/primitives/UiAvatar/UiAvatarImage.vue +14 -0
- package/src/primitives/UiAvatar/__tests__/UiAvatar.test.ts +36 -0
- package/src/primitives/UiAvatar/index.ts +3 -0
- package/src/primitives/UiAvatar/types.ts +17 -0
- package/src/primitives/UiBadge/UiBadge.stories.ts +373 -0
- package/src/primitives/UiBadge/UiBadge.vue +21 -0
- package/src/primitives/UiBadge/__tests__/UiBadge.test.ts +44 -0
- package/src/primitives/UiBadge/constants.ts +3 -0
- package/src/primitives/UiBadge/index.ts +2 -0
- package/src/primitives/UiBadge/types.ts +48 -0
- package/src/primitives/UiButton/UiButton.stories.ts +537 -0
- package/src/primitives/UiButton/UiButton.vue +72 -0
- package/src/primitives/UiButton/__tests__/UiButton.test.ts +133 -0
- package/src/primitives/UiButton/index.ts +2 -0
- package/src/primitives/UiButton/types.ts +87 -0
- package/src/primitives/UiCalendar/UiCalendar.stories.ts +797 -0
- package/src/primitives/UiCalendar/UiCalendar.vue +67 -0
- package/src/primitives/UiCalendar/__tests__/UiCalendar.test.ts +45 -0
- package/src/primitives/UiCalendar/index.ts +15 -0
- package/src/primitives/UiCalendar/types.ts +236 -0
- package/src/primitives/UiCard/UiCard.stories.ts +197 -0
- package/src/primitives/UiCard/UiCard.vue +13 -0
- package/src/primitives/UiCard/UiCardAction.vue +13 -0
- package/src/primitives/UiCard/UiCardContent.vue +13 -0
- package/src/primitives/UiCard/UiCardDescription.vue +13 -0
- package/src/primitives/UiCard/UiCardFooter.vue +13 -0
- package/src/primitives/UiCard/UiCardHeader.vue +13 -0
- package/src/primitives/UiCard/UiCardTitle.vue +13 -0
- package/src/primitives/UiCard/__tests__/UiCard.test.ts +19 -0
- package/src/primitives/UiCard/__tests__/UiCardAction.test.ts +19 -0
- package/src/primitives/UiCard/__tests__/UiCardContent.test.ts +19 -0
- package/src/primitives/UiCard/__tests__/UiCardDescription.test.ts +19 -0
- package/src/primitives/UiCard/__tests__/UiCardFooter.test.ts +19 -0
- package/src/primitives/UiCard/__tests__/UiCardHeader.test.ts +19 -0
- package/src/primitives/UiCard/__tests__/UiCardTitle.test.ts +19 -0
- package/src/primitives/UiCard/index.ts +7 -0
- package/src/primitives/UiCard/types.ts +10 -0
- package/src/primitives/UiCheckbox/UiCheckbox.stories.ts +231 -0
- package/src/primitives/UiCheckbox/UiCheckbox.vue +19 -0
- package/src/primitives/UiCheckbox/__tests__/UiCheckbox.test.ts +29 -0
- package/src/primitives/UiCheckbox/index.ts +2 -0
- package/src/primitives/UiCheckbox/types.ts +30 -0
- package/src/primitives/UiDrawer/UiDrawer.stories.ts +602 -0
- package/src/primitives/UiDrawer/UiDrawer.vue +19 -0
- package/src/primitives/UiDrawer/UiDrawerClose.vue +16 -0
- package/src/primitives/UiDrawer/UiDrawerContent.vue +29 -0
- package/src/primitives/UiDrawer/UiDrawerDescription.vue +16 -0
- package/src/primitives/UiDrawer/UiDrawerFooter.vue +16 -0
- package/src/primitives/UiDrawer/UiDrawerHeader.vue +16 -0
- package/src/primitives/UiDrawer/UiDrawerTitle.vue +16 -0
- package/src/primitives/UiDrawer/UiDrawerTrigger.vue +16 -0
- package/src/primitives/UiDrawer/__tests__/UiDrawer.test.ts +229 -0
- package/src/primitives/UiDrawer/index.ts +8 -0
- package/src/primitives/UiDrawer/types.ts +96 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenu.stories.ts +760 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenu.vue +25 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuCheckboxItem.vue +29 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuContent.vue +27 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuGroup.vue +13 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuItem.vue +26 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuLabel.vue +18 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuRadioGroup.vue +20 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuRadioItem.vue +26 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuSeparator.vue +11 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuShortcut.vue +13 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuSub.vue +26 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuSubContent.vue +23 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuSubTrigger.vue +24 -0
- package/src/primitives/UiDropdownMenu/UiDropdownMenuTrigger.vue +24 -0
- package/src/primitives/UiDropdownMenu/__tests__/UiDropdownMenu.test.ts +557 -0
- package/src/primitives/UiDropdownMenu/index.ts +16 -0
- package/src/primitives/UiDropdownMenu/types.ts +219 -0
- package/src/primitives/UiField/UiField.stories.ts +1496 -0
- package/src/primitives/UiField/UiField.vue +18 -0
- package/src/primitives/UiField/UiFieldContent.vue +13 -0
- package/src/primitives/UiField/UiFieldDescription.vue +13 -0
- package/src/primitives/UiField/UiFieldError.vue +20 -0
- package/src/primitives/UiField/UiFieldGroup.vue +13 -0
- package/src/primitives/UiField/UiFieldLabel.vue +16 -0
- package/src/primitives/UiField/UiFieldLegend.vue +13 -0
- package/src/primitives/UiField/UiFieldSeparator.vue +13 -0
- package/src/primitives/UiField/UiFieldSet.vue +13 -0
- package/src/primitives/UiField/UiFieldTitle.vue +13 -0
- package/src/primitives/UiField/__tests__/UiFieldError.test.ts +35 -0
- package/src/primitives/UiField/index.ts +10 -0
- package/src/primitives/UiField/types.ts +47 -0
- package/src/primitives/UiIcon/UiIcon.stories.ts +95 -0
- package/src/primitives/UiIcon/UiIcon.vue +14 -0
- package/src/primitives/UiIcon/__tests__/UiIcon.test.ts +24 -0
- package/src/primitives/UiIcon/index.ts +1 -0
- package/src/primitives/UiIcon/types.ts +23 -0
- package/src/primitives/UiIconButton/UiIconButton.stories.ts +446 -0
- package/src/primitives/UiIconButton/UiIconButton.vue +63 -0
- package/src/primitives/UiIconButton/__tests__/UiIconButton.test.ts +102 -0
- package/src/primitives/UiIconButton/index.ts +2 -0
- package/src/primitives/UiIconButton/types.ts +67 -0
- package/src/primitives/UiInput/UiInput.stories.ts +193 -0
- package/src/primitives/UiInput/UiInput.vue +19 -0
- package/src/primitives/UiInput/__tests__/UiInput.test.ts +38 -0
- package/src/primitives/UiInput/index.ts +2 -0
- package/src/primitives/UiInput/types.ts +31 -0
- package/src/primitives/UiPopover/UiPopover.stories.ts +394 -0
- package/src/primitives/UiPopover/UiPopover.vue +17 -0
- package/src/primitives/UiPopover/UiPopoverContent.vue +27 -0
- package/src/primitives/UiPopover/UiPopoverTrigger.vue +16 -0
- package/src/primitives/UiPopover/__tests__/UiPopover.test.ts +87 -0
- package/src/primitives/UiPopover/index.ts +5 -0
- package/src/primitives/UiPopover/types.ts +86 -0
- package/src/primitives/UiProgress/UiProgress.stories.ts +92 -0
- package/src/primitives/UiProgress/UiProgress.vue +25 -0
- package/src/primitives/UiProgress/__tests__/UiProgress.test.ts +46 -0
- package/src/primitives/UiProgress/index.ts +2 -0
- package/src/primitives/UiProgress/types.ts +16 -0
- package/src/primitives/UiRadioGroup/UiRadioGroup.stories.ts +291 -0
- package/src/primitives/UiRadioGroup/UiRadioGroup.vue +43 -0
- package/src/primitives/UiRadioGroup/UiRadioGroupItem.vue +18 -0
- package/src/primitives/UiRadioGroup/__tests__/UiRadioGroup.test.ts +404 -0
- package/src/primitives/UiRadioGroup/index.ts +4 -0
- package/src/primitives/UiRadioGroup/types.ts +66 -0
- package/src/primitives/UiRangeCalendar/UiRangeCalendar.stories.ts +609 -0
- package/src/primitives/UiRangeCalendar/UiRangeCalendar.vue +50 -0
- package/src/primitives/UiRangeCalendar/__tests__/UiRangeCalendar.test.ts +35 -0
- package/src/primitives/UiRangeCalendar/index.ts +13 -0
- package/src/primitives/UiRangeCalendar/types.ts +184 -0
- package/src/primitives/UiSelect/UiSelect.stories.ts +425 -0
- package/src/primitives/UiSelect/UiSelect.vue +47 -0
- package/src/primitives/UiSelect/UiSelectContent.vue +30 -0
- package/src/primitives/UiSelect/UiSelectGroup.vue +13 -0
- package/src/primitives/UiSelect/UiSelectItem.vue +19 -0
- package/src/primitives/UiSelect/UiSelectLabel.vue +13 -0
- package/src/primitives/UiSelect/UiSelectSeparator.vue +11 -0
- package/src/primitives/UiSelect/UiSelectTrigger.vue +30 -0
- package/src/primitives/UiSelect/UiSelectValue.vue +18 -0
- package/src/primitives/UiSelect/__tests__/UiSelect.test.ts +211 -0
- package/src/primitives/UiSelect/__tests__/UiSelectContent.test.ts +30 -0
- package/src/primitives/UiSelect/__tests__/UiSelectGroup.test.ts +85 -0
- package/src/primitives/UiSelect/__tests__/UiSelectItem.test.ts +79 -0
- package/src/primitives/UiSelect/__tests__/UiSelectLabel.test.ts +83 -0
- package/src/primitives/UiSelect/__tests__/UiSelectSeparator.test.ts +82 -0
- package/src/primitives/UiSelect/__tests__/UiSelectTrigger.test.ts +54 -0
- package/src/primitives/UiSelect/__tests__/UiSelectValue.test.ts +39 -0
- package/src/primitives/UiSelect/index.ts +10 -0
- package/src/primitives/UiSelect/types.ts +93 -0
- package/src/primitives/UiSlider/UiSlider.stories.ts +226 -0
- package/src/primitives/UiSlider/UiSlider.vue +44 -0
- package/src/primitives/UiSlider/__tests__/UiSlider.test.ts +76 -0
- package/src/primitives/UiSlider/index.ts +1 -0
- package/src/primitives/UiSlider/types.ts +101 -0
- package/src/primitives/UiSpinner/UiSpinner.stories.ts +143 -0
- package/src/primitives/UiSpinner/UiSpinner.vue +16 -0
- package/src/primitives/UiSpinner/__tests__/UiSpinner.test.ts +19 -0
- package/src/primitives/UiSpinner/index.ts +2 -0
- package/src/primitives/UiSpinner/types.ts +16 -0
- package/src/primitives/UiSwitch/UiSwitch.stories.ts +120 -0
- package/src/primitives/UiSwitch/UiSwitch.vue +21 -0
- package/src/primitives/UiSwitch/__tests__/UiSwitch.test.ts +47 -0
- package/src/primitives/UiSwitch/index.ts +2 -0
- package/src/primitives/UiSwitch/types.ts +25 -0
- package/src/primitives/UiTable/UiTable.stories.ts +505 -0
- package/src/primitives/UiTable/UiTable.vue +13 -0
- package/src/primitives/UiTable/UiTableBody.vue +13 -0
- package/src/primitives/UiTable/UiTableCaption.vue +13 -0
- package/src/primitives/UiTable/UiTableCell.vue +16 -0
- package/src/primitives/UiTable/UiTableEmpty.vue +18 -0
- package/src/primitives/UiTable/UiTableFooter.vue +13 -0
- package/src/primitives/UiTable/UiTableHead.vue +18 -0
- package/src/primitives/UiTable/UiTableHeader.vue +13 -0
- package/src/primitives/UiTable/UiTableRow.vue +18 -0
- package/src/primitives/UiTable/__tests__/UiTable.test.ts +19 -0
- package/src/primitives/UiTable/__tests__/UiTableBody.test.ts +19 -0
- package/src/primitives/UiTable/__tests__/UiTableCaption.test.ts +19 -0
- package/src/primitives/UiTable/__tests__/UiTableCell.test.ts +26 -0
- package/src/primitives/UiTable/__tests__/UiTableEmpty.test.ts +32 -0
- package/src/primitives/UiTable/__tests__/UiTableFooter.test.ts +19 -0
- package/src/primitives/UiTable/__tests__/UiTableHead.test.ts +43 -0
- package/src/primitives/UiTable/__tests__/UiTableHeader.test.ts +19 -0
- package/src/primitives/UiTable/__tests__/UiTableRow.test.ts +32 -0
- package/src/primitives/UiTable/index.ts +16 -0
- package/src/primitives/UiTable/types.ts +68 -0
- package/src/primitives/UiTabs/UiTabs.stories.ts +456 -0
- package/src/primitives/UiTabs/UiTabs.vue +31 -0
- package/src/primitives/UiTabs/UiTabsContent.vue +16 -0
- package/src/primitives/UiTabs/UiTabsList.vue +16 -0
- package/src/primitives/UiTabs/UiTabsTrigger.vue +16 -0
- package/src/primitives/UiTabs/__tests__/UiTabs.test.ts +122 -0
- package/src/primitives/UiTabs/index.ts +6 -0
- package/src/primitives/UiTabs/types.ts +68 -0
- package/src/primitives/UiTextarea/UiTextarea.stories.ts +107 -0
- package/src/primitives/UiTextarea/UiTextarea.vue +19 -0
- package/src/primitives/UiTextarea/__tests__/UiTextarea.test.ts +40 -0
- package/src/primitives/UiTextarea/index.ts +2 -0
- package/src/primitives/UiTextarea/types.ts +30 -0
- package/src/primitives/UiTooltip/UiTooltip.stories.ts +550 -0
- package/src/primitives/UiTooltip/UiTooltip.vue +42 -0
- package/src/primitives/UiTooltip/__tests__/UiTooltip.test.ts +78 -0
- package/src/primitives/UiTooltip/index.ts +2 -0
- package/src/primitives/UiTooltip/types.ts +53 -0
- package/src/primitives/index.ts +33 -0
- package/src/primitives/shadcn/accordion/Accordion.vue +15 -0
- package/src/primitives/shadcn/accordion/AccordionContent.vue +23 -0
- package/src/primitives/shadcn/accordion/AccordionItem.vue +24 -0
- package/src/primitives/shadcn/accordion/AccordionTrigger.vue +35 -0
- package/src/primitives/shadcn/accordion/index.ts +4 -0
- package/src/primitives/shadcn/alert/Alert.vue +17 -0
- package/src/primitives/shadcn/alert/AlertDescription.vue +22 -0
- package/src/primitives/shadcn/alert/AlertTitle.vue +17 -0
- package/src/primitives/shadcn/alert/index.ts +24 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialog.vue +15 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialogAction.vue +18 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialogCancel.vue +21 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialogContent.vue +44 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialogDescription.vue +21 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialogFooter.vue +17 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialogHeader.vue +17 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialogTitle.vue +21 -0
- package/src/primitives/shadcn/alert-dialog/AlertDialogTrigger.vue +12 -0
- package/src/primitives/shadcn/alert-dialog/index.ts +9 -0
- package/src/primitives/shadcn/avatar/Avatar.vue +18 -0
- package/src/primitives/shadcn/avatar/AvatarFallback.vue +21 -0
- package/src/primitives/shadcn/avatar/AvatarImage.vue +12 -0
- package/src/primitives/shadcn/avatar/index.ts +3 -0
- package/src/primitives/shadcn/badge/Badge.vue +28 -0
- package/src/primitives/shadcn/badge/index.ts +24 -0
- package/src/primitives/shadcn/button/Button.vue +29 -0
- package/src/primitives/shadcn/button/index.ts +36 -0
- package/src/primitives/shadcn/calendar/Calendar.vue +206 -0
- package/src/primitives/shadcn/calendar/CalendarCell.vue +28 -0
- package/src/primitives/shadcn/calendar/CalendarCellTrigger.vue +44 -0
- package/src/primitives/shadcn/calendar/CalendarGrid.vue +23 -0
- package/src/primitives/shadcn/calendar/CalendarGridBody.vue +12 -0
- package/src/primitives/shadcn/calendar/CalendarGridHead.vue +13 -0
- package/src/primitives/shadcn/calendar/CalendarGridRow.vue +23 -0
- package/src/primitives/shadcn/calendar/CalendarHeadCell.vue +23 -0
- package/src/primitives/shadcn/calendar/CalendarHeader.vue +23 -0
- package/src/primitives/shadcn/calendar/CalendarHeading.vue +30 -0
- package/src/primitives/shadcn/calendar/CalendarNextButton.vue +33 -0
- package/src/primitives/shadcn/calendar/CalendarPrevButton.vue +33 -0
- package/src/primitives/shadcn/calendar/index.ts +14 -0
- package/src/primitives/shadcn/card/Card.vue +22 -0
- package/src/primitives/shadcn/card/CardAction.vue +17 -0
- package/src/primitives/shadcn/card/CardContent.vue +14 -0
- package/src/primitives/shadcn/card/CardDescription.vue +14 -0
- package/src/primitives/shadcn/card/CardFooter.vue +14 -0
- package/src/primitives/shadcn/card/CardHeader.vue +22 -0
- package/src/primitives/shadcn/card/CardTitle.vue +14 -0
- package/src/primitives/shadcn/card/index.ts +7 -0
- package/src/primitives/shadcn/checkbox/Checkbox.vue +38 -0
- package/src/primitives/shadcn/checkbox/index.ts +1 -0
- package/src/primitives/shadcn/drawer/Drawer.vue +15 -0
- package/src/primitives/shadcn/drawer/DrawerClose.vue +12 -0
- package/src/primitives/shadcn/drawer/DrawerContent.vue +52 -0
- package/src/primitives/shadcn/drawer/DrawerDescription.vue +20 -0
- package/src/primitives/shadcn/drawer/DrawerFooter.vue +17 -0
- package/src/primitives/shadcn/drawer/DrawerHeader.vue +17 -0
- package/src/primitives/shadcn/drawer/DrawerTitle.vue +20 -0
- package/src/primitives/shadcn/drawer/DrawerTrigger.vue +12 -0
- package/src/primitives/shadcn/drawer/index.ts +8 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenu.vue +15 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuCheckboxItem.vue +41 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuContent.vue +40 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuGroup.vue +12 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuItem.vue +41 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuLabel.vue +25 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuRadioGroup.vue +15 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuRadioItem.vue +38 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuSeparator.vue +23 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuShortcut.vue +17 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuSub.vue +15 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuSubContent.vue +29 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
- package/src/primitives/shadcn/dropdown-menu/DropdownMenuTrigger.vue +14 -0
- package/src/primitives/shadcn/dropdown-menu/index.ts +16 -0
- package/src/primitives/shadcn/field/Field.vue +22 -0
- package/src/primitives/shadcn/field/FieldContent.vue +17 -0
- package/src/primitives/shadcn/field/FieldDescription.vue +24 -0
- package/src/primitives/shadcn/field/FieldError.vue +69 -0
- package/src/primitives/shadcn/field/FieldGroup.vue +22 -0
- package/src/primitives/shadcn/field/FieldLabel.vue +28 -0
- package/src/primitives/shadcn/field/FieldLegend.vue +26 -0
- package/src/primitives/shadcn/field/FieldSeparator.vue +28 -0
- package/src/primitives/shadcn/field/FieldSet.vue +23 -0
- package/src/primitives/shadcn/field/FieldTitle.vue +22 -0
- package/src/primitives/shadcn/field/index.ts +39 -0
- package/src/primitives/shadcn/icon/Icon.vue +38 -0
- package/src/primitives/shadcn/icon/index.ts +1 -0
- package/src/primitives/shadcn/index.ts +3 -0
- package/src/primitives/shadcn/input/Input.vue +35 -0
- package/src/primitives/shadcn/input/index.ts +1 -0
- package/src/primitives/shadcn/label/Label.vue +28 -0
- package/src/primitives/shadcn/label/index.ts +1 -0
- package/src/primitives/shadcn/native-select/NativeSelect.vue +56 -0
- package/src/primitives/shadcn/native-select/NativeSelectOptGroup.vue +18 -0
- package/src/primitives/shadcn/native-select/NativeSelectOption.vue +18 -0
- package/src/primitives/shadcn/native-select/index.ts +3 -0
- package/src/primitives/shadcn/popover/Popover.vue +19 -0
- package/src/primitives/shadcn/popover/PopoverContent.vue +41 -0
- package/src/primitives/shadcn/popover/PopoverTrigger.vue +11 -0
- package/src/primitives/shadcn/popover/index.ts +4 -0
- package/src/primitives/shadcn/progress/Progress.vue +30 -0
- package/src/primitives/shadcn/progress/index.ts +1 -0
- package/src/primitives/shadcn/radio-group/RadioGroup.vue +25 -0
- package/src/primitives/shadcn/radio-group/RadioGroupItem.vue +38 -0
- package/src/primitives/shadcn/radio-group/index.ts +2 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendar.vue +73 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarCell.vue +28 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarCellTrigger.vue +46 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarGrid.vue +23 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarGridBody.vue +12 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarGridHead.vue +12 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarGridRow.vue +23 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarHeadCell.vue +23 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarHeader.vue +23 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarHeading.vue +30 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarNextButton.vue +34 -0
- package/src/primitives/shadcn/range-calendar/RangeCalendarPrevButton.vue +34 -0
- package/src/primitives/shadcn/range-calendar/index.ts +12 -0
- package/src/primitives/shadcn/select/Select.vue +15 -0
- package/src/primitives/shadcn/select/SelectContent.vue +55 -0
- package/src/primitives/shadcn/select/SelectGroup.vue +12 -0
- package/src/primitives/shadcn/select/SelectItem.vue +39 -0
- package/src/primitives/shadcn/select/SelectItemText.vue +12 -0
- package/src/primitives/shadcn/select/SelectLabel.vue +17 -0
- package/src/primitives/shadcn/select/SelectScrollDownButton.vue +26 -0
- package/src/primitives/shadcn/select/SelectScrollUpButton.vue +26 -0
- package/src/primitives/shadcn/select/SelectSeparator.vue +19 -0
- package/src/primitives/shadcn/select/SelectTrigger.vue +37 -0
- package/src/primitives/shadcn/select/SelectValue.vue +12 -0
- package/src/primitives/shadcn/select/index.ts +11 -0
- package/src/primitives/shadcn/separator/Separator.vue +27 -0
- package/src/primitives/shadcn/separator/index.ts +1 -0
- package/src/primitives/shadcn/slider/Slider.vue +45 -0
- package/src/primitives/shadcn/slider/index.ts +1 -0
- package/src/primitives/shadcn/spinner/Spinner.vue +18 -0
- package/src/primitives/shadcn/spinner/index.ts +1 -0
- package/src/primitives/shadcn/switch/Switch.vue +40 -0
- package/src/primitives/shadcn/switch/index.ts +1 -0
- package/src/primitives/shadcn/table/Table.vue +16 -0
- package/src/primitives/shadcn/table/TableBody.vue +14 -0
- package/src/primitives/shadcn/table/TableCaption.vue +14 -0
- package/src/primitives/shadcn/table/TableCell.vue +26 -0
- package/src/primitives/shadcn/table/TableEmpty.vue +29 -0
- package/src/primitives/shadcn/table/TableFooter.vue +17 -0
- package/src/primitives/shadcn/table/TableHead.vue +28 -0
- package/src/primitives/shadcn/table/TableHeader.vue +14 -0
- package/src/primitives/shadcn/table/TableRow.vue +21 -0
- package/src/primitives/shadcn/table/index.ts +9 -0
- package/src/primitives/shadcn/table/utils.ts +8 -0
- package/src/primitives/shadcn/tabs/Tabs.vue +24 -0
- package/src/primitives/shadcn/tabs/TabsContent.vue +21 -0
- package/src/primitives/shadcn/tabs/TabsList.vue +26 -0
- package/src/primitives/shadcn/tabs/TabsTrigger.vue +28 -0
- package/src/primitives/shadcn/tabs/index.ts +4 -0
- package/src/primitives/shadcn/textarea/Textarea.vue +33 -0
- package/src/primitives/shadcn/textarea/index.ts +1 -0
- package/src/primitives/shadcn/tooltip/Tooltip.vue +15 -0
- package/src/primitives/shadcn/tooltip/TooltipContent.vue +40 -0
- package/src/primitives/shadcn/tooltip/TooltipProvider.vue +12 -0
- package/src/primitives/shadcn/tooltip/TooltipTrigger.vue +12 -0
- package/src/primitives/shadcn/tooltip/index.ts +4 -0
- package/src/styles/global.css +1 -0
- package/src/templates/UiTemplatePlaceholder/UiTemplatePlaceholder.vue +9 -0
- package/src/templates/UiTemplatePlaceholder/index.ts +1 -0
- package/src/templates/UiTemplatePlaceholder/types.ts +8 -0
- package/src/templates/index.ts +6 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type { DateRange, DateValue } from 'reka-ui';
|
|
2
|
+
import type { Matcher } from 'reka-ui/date';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Format options for weekday labels displayed in the calendar header.
|
|
6
|
+
*
|
|
7
|
+
* - `'narrow'` - Single letter (e.g., "M", "T", "W")
|
|
8
|
+
* - `'short'` - Abbreviated (e.g., "Mon", "Tue", "Wed")
|
|
9
|
+
* - `'long'` - Full name (e.g., "Monday", "Tuesday", "Wednesday")
|
|
10
|
+
*/
|
|
11
|
+
export type UiRangeCalendarWeekdayFormat = 'narrow' | 'short' | 'long';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Day of the week to start the calendar on.
|
|
15
|
+
*
|
|
16
|
+
* - `0` - Sunday
|
|
17
|
+
* - `1` - Monday
|
|
18
|
+
* - `2` - Tuesday
|
|
19
|
+
* - `3` - Wednesday
|
|
20
|
+
* - `4` - Thursday
|
|
21
|
+
* - `5` - Friday
|
|
22
|
+
* - `6` - Saturday
|
|
23
|
+
*/
|
|
24
|
+
export type UiRangeCalendarWeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A calendar for selecting date ranges (start and end dates). Use for
|
|
28
|
+
* booking periods, vacation dates, or any range-based date selection.
|
|
29
|
+
*
|
|
30
|
+
* @category Form Inputs
|
|
31
|
+
* @useCases date range, booking period, vacation dates, filter by dates
|
|
32
|
+
* @keywords calendar, range, daterange, period, booking, from, to, start, end
|
|
33
|
+
* @related UiCalendar, UiPopover
|
|
34
|
+
*/
|
|
35
|
+
export interface UiRangeCalendarProps {
|
|
36
|
+
/**
|
|
37
|
+
* The controlled selected date range value.
|
|
38
|
+
* Use with v-model for two-way binding.
|
|
39
|
+
*/
|
|
40
|
+
modelValue?: DateRange;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The default selected date range when first rendered.
|
|
44
|
+
* Use when you don't need controlled state.
|
|
45
|
+
*/
|
|
46
|
+
defaultValue?: DateRange;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The placeholder date used to determine which month/year to display.
|
|
50
|
+
* Defaults to today's date if not provided.
|
|
51
|
+
* Use with `v-model:placeholder` for two-way binding.
|
|
52
|
+
*/
|
|
53
|
+
placeholder?: DateValue;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The default placeholder date when first rendered.
|
|
57
|
+
*/
|
|
58
|
+
defaultPlaceholder?: DateValue;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The minimum selectable date.
|
|
62
|
+
* Dates before this will be disabled.
|
|
63
|
+
*/
|
|
64
|
+
minValue?: DateValue;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The maximum selectable date.
|
|
68
|
+
* Dates after this will be disabled.
|
|
69
|
+
*/
|
|
70
|
+
maxValue?: DateValue;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Whether the calendar is disabled.
|
|
74
|
+
* @default false
|
|
75
|
+
*/
|
|
76
|
+
disabled?: boolean;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Whether the calendar is read-only.
|
|
80
|
+
* Users can navigate but not select dates.
|
|
81
|
+
* @default false
|
|
82
|
+
*/
|
|
83
|
+
readonly?: boolean;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The locale to use for formatting dates and weekday names.
|
|
87
|
+
* @default 'en'
|
|
88
|
+
* @example 'de', 'fr', 'es'
|
|
89
|
+
*/
|
|
90
|
+
locale?: string;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The day of the week to start on.
|
|
94
|
+
* @default 0 (Sunday)
|
|
95
|
+
*/
|
|
96
|
+
weekStartsOn?: UiRangeCalendarWeekStartsOn;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The number of months to display at once.
|
|
100
|
+
* @default 1
|
|
101
|
+
*/
|
|
102
|
+
numberOfMonths?: number;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Whether to navigate by page (all visible months) or by single month.
|
|
106
|
+
* @default false
|
|
107
|
+
*/
|
|
108
|
+
pagedNavigation?: boolean;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The format to use for weekday labels.
|
|
112
|
+
* @default 'narrow'
|
|
113
|
+
*/
|
|
114
|
+
weekdayFormat?: UiRangeCalendarWeekdayFormat;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Whether to always show 6 weeks in the calendar.
|
|
118
|
+
* Useful for consistent height.
|
|
119
|
+
* @default false
|
|
120
|
+
*/
|
|
121
|
+
fixedWeeks?: boolean;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Whether to prevent the user from deselecting a date without selecting another date first.
|
|
125
|
+
* @default false
|
|
126
|
+
*/
|
|
127
|
+
preventDeselect?: boolean;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The accessible label for the calendar.
|
|
131
|
+
* Used for screen readers.
|
|
132
|
+
*/
|
|
133
|
+
calendarLabel?: string;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* If true, the calendar will focus the selected day, today, or the first day
|
|
137
|
+
* of the month depending on what is visible when the calendar is mounted.
|
|
138
|
+
* @default false
|
|
139
|
+
*/
|
|
140
|
+
initialFocus?: boolean;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* A function that returns whether or not a date is disabled.
|
|
144
|
+
* Disabled dates cannot be selected.
|
|
145
|
+
* @example (date) => date.dayOfWeek === 0 // Disable Sundays
|
|
146
|
+
*/
|
|
147
|
+
isDateDisabled?: Matcher;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* A function that returns whether or not a date is unavailable.
|
|
151
|
+
* Unavailable dates are styled differently but may still be selectable.
|
|
152
|
+
* @example (date) => isHoliday(date)
|
|
153
|
+
*/
|
|
154
|
+
isDateUnavailable?: Matcher;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* A function that returns the next page of the calendar.
|
|
158
|
+
* Receives the current placeholder as an argument.
|
|
159
|
+
*/
|
|
160
|
+
nextPage?: (placeholder: DateValue) => DateValue;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* A function that returns the previous page of the calendar.
|
|
164
|
+
* Receives the current placeholder as an argument.
|
|
165
|
+
*/
|
|
166
|
+
prevPage?: (placeholder: DateValue) => DateValue;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Emits for UiRangeCalendar component.
|
|
171
|
+
*/
|
|
172
|
+
export interface UiRangeCalendarEmits {
|
|
173
|
+
/**
|
|
174
|
+
* Emitted when the selected date range changes.
|
|
175
|
+
*/
|
|
176
|
+
(e: 'update:modelValue', value: DateRange): void;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Emitted when the placeholder (displayed month/year) changes.
|
|
180
|
+
*/
|
|
181
|
+
(e: 'update:placeholder', value: DateValue): void;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export type { DateRange, DateValue, Matcher };
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/vue3-vite';
|
|
2
|
+
import { ref } from 'vue';
|
|
3
|
+
import {
|
|
4
|
+
UiSelect,
|
|
5
|
+
UiSelectTrigger,
|
|
6
|
+
UiSelectContent,
|
|
7
|
+
UiSelectItem,
|
|
8
|
+
UiSelectValue,
|
|
9
|
+
UiSelectLabel,
|
|
10
|
+
UiSelectGroup,
|
|
11
|
+
UiSelectSeparator,
|
|
12
|
+
} from './index';
|
|
13
|
+
|
|
14
|
+
const meta: Meta<typeof UiSelect> = {
|
|
15
|
+
title: 'Primitives/UiSelect',
|
|
16
|
+
component: UiSelect,
|
|
17
|
+
tags: ['autodocs'],
|
|
18
|
+
argTypes: {
|
|
19
|
+
modelValue: {
|
|
20
|
+
control: 'text',
|
|
21
|
+
description: 'The controlled value of the select (use with v-model)',
|
|
22
|
+
},
|
|
23
|
+
disabled: {
|
|
24
|
+
control: 'boolean',
|
|
25
|
+
description: 'Whether the select is disabled',
|
|
26
|
+
},
|
|
27
|
+
required: {
|
|
28
|
+
control: 'boolean',
|
|
29
|
+
description: 'Whether the select is required in a form',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
args: {
|
|
33
|
+
disabled: false,
|
|
34
|
+
required: false,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export default meta;
|
|
39
|
+
|
|
40
|
+
type Story = StoryObj<typeof UiSelect>;
|
|
41
|
+
|
|
42
|
+
const defaultTemplateSource = `<script setup lang="ts">
|
|
43
|
+
import { ref } from 'vue'
|
|
44
|
+
import {
|
|
45
|
+
UiSelect,
|
|
46
|
+
UiSelectTrigger,
|
|
47
|
+
UiSelectContent,
|
|
48
|
+
UiSelectItem,
|
|
49
|
+
UiSelectValue,
|
|
50
|
+
} from '@aleph-alpha/ui-library'
|
|
51
|
+
|
|
52
|
+
const value = ref('')
|
|
53
|
+
</script>
|
|
54
|
+
|
|
55
|
+
<template>
|
|
56
|
+
<UiSelect v-model="value">
|
|
57
|
+
<UiSelectTrigger>
|
|
58
|
+
<UiSelectValue placeholder="Select a fruit" />
|
|
59
|
+
</UiSelectTrigger>
|
|
60
|
+
<UiSelectContent>
|
|
61
|
+
<UiSelectItem value="apple">Apple</UiSelectItem>
|
|
62
|
+
<UiSelectItem value="banana">Banana</UiSelectItem>
|
|
63
|
+
<UiSelectItem value="orange">Orange</UiSelectItem>
|
|
64
|
+
</UiSelectContent>
|
|
65
|
+
</UiSelect>
|
|
66
|
+
</template>`;
|
|
67
|
+
|
|
68
|
+
export const Default: Story = {
|
|
69
|
+
render: (args) => ({
|
|
70
|
+
components: { UiSelect, UiSelectTrigger, UiSelectContent, UiSelectItem, UiSelectValue },
|
|
71
|
+
setup() {
|
|
72
|
+
const value = ref('');
|
|
73
|
+
return { args, value };
|
|
74
|
+
},
|
|
75
|
+
template: `
|
|
76
|
+
<UiSelect v-model="value" v-bind="args">
|
|
77
|
+
<UiSelectTrigger>
|
|
78
|
+
<UiSelectValue placeholder="Select a fruit" />
|
|
79
|
+
</UiSelectTrigger>
|
|
80
|
+
<UiSelectContent>
|
|
81
|
+
<UiSelectItem value="apple">Apple</UiSelectItem>
|
|
82
|
+
<UiSelectItem value="banana">Banana</UiSelectItem>
|
|
83
|
+
<UiSelectItem value="orange">Orange</UiSelectItem>
|
|
84
|
+
<UiSelectItem value="grape">Grape</UiSelectItem>
|
|
85
|
+
<UiSelectItem value="mango">Mango</UiSelectItem>
|
|
86
|
+
</UiSelectContent>
|
|
87
|
+
</UiSelect>
|
|
88
|
+
`,
|
|
89
|
+
}),
|
|
90
|
+
parameters: {
|
|
91
|
+
docs: {
|
|
92
|
+
source: {
|
|
93
|
+
code: defaultTemplateSource,
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const withGroupsTemplateSource = `<script setup lang="ts">
|
|
100
|
+
import { ref } from 'vue'
|
|
101
|
+
import {
|
|
102
|
+
UiSelect,
|
|
103
|
+
UiSelectTrigger,
|
|
104
|
+
UiSelectContent,
|
|
105
|
+
UiSelectItem,
|
|
106
|
+
UiSelectValue,
|
|
107
|
+
UiSelectLabel,
|
|
108
|
+
UiSelectGroup,
|
|
109
|
+
UiSelectSeparator,
|
|
110
|
+
} from '@aleph-alpha/ui-library'
|
|
111
|
+
|
|
112
|
+
const value = ref('')
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<template>
|
|
116
|
+
<UiSelect v-model="value">
|
|
117
|
+
<UiSelectTrigger>
|
|
118
|
+
<UiSelectValue placeholder="Select a food" />
|
|
119
|
+
</UiSelectTrigger>
|
|
120
|
+
<UiSelectContent>
|
|
121
|
+
<UiSelectGroup>
|
|
122
|
+
<UiSelectLabel>Fruits</UiSelectLabel>
|
|
123
|
+
<UiSelectItem value="apple">Apple</UiSelectItem>
|
|
124
|
+
<UiSelectItem value="banana">Banana</UiSelectItem>
|
|
125
|
+
<UiSelectItem value="orange">Orange</UiSelectItem>
|
|
126
|
+
</UiSelectGroup>
|
|
127
|
+
<UiSelectSeparator />
|
|
128
|
+
<UiSelectGroup>
|
|
129
|
+
<UiSelectLabel>Vegetables</UiSelectLabel>
|
|
130
|
+
<UiSelectItem value="carrot">Carrot</UiSelectItem>
|
|
131
|
+
<UiSelectItem value="broccoli">Broccoli</UiSelectItem>
|
|
132
|
+
<UiSelectItem value="spinach">Spinach</UiSelectItem>
|
|
133
|
+
</UiSelectGroup>
|
|
134
|
+
</UiSelectContent>
|
|
135
|
+
</UiSelect>
|
|
136
|
+
</template>`;
|
|
137
|
+
|
|
138
|
+
export const WithGroups: Story = {
|
|
139
|
+
render: (args) => ({
|
|
140
|
+
components: {
|
|
141
|
+
UiSelect,
|
|
142
|
+
UiSelectTrigger,
|
|
143
|
+
UiSelectContent,
|
|
144
|
+
UiSelectItem,
|
|
145
|
+
UiSelectValue,
|
|
146
|
+
UiSelectLabel,
|
|
147
|
+
UiSelectGroup,
|
|
148
|
+
UiSelectSeparator,
|
|
149
|
+
},
|
|
150
|
+
setup() {
|
|
151
|
+
const value = ref('');
|
|
152
|
+
return { args, value };
|
|
153
|
+
},
|
|
154
|
+
template: `
|
|
155
|
+
<UiSelect v-model="value" v-bind="args">
|
|
156
|
+
<UiSelectTrigger>
|
|
157
|
+
<UiSelectValue placeholder="Select a food" />
|
|
158
|
+
</UiSelectTrigger>
|
|
159
|
+
<UiSelectContent>
|
|
160
|
+
<UiSelectGroup>
|
|
161
|
+
<UiSelectLabel>Fruits</UiSelectLabel>
|
|
162
|
+
<UiSelectItem value="apple">Apple</UiSelectItem>
|
|
163
|
+
<UiSelectItem value="banana">Banana</UiSelectItem>
|
|
164
|
+
<UiSelectItem value="orange">Orange</UiSelectItem>
|
|
165
|
+
</UiSelectGroup>
|
|
166
|
+
<UiSelectSeparator />
|
|
167
|
+
<UiSelectGroup>
|
|
168
|
+
<UiSelectLabel>Vegetables</UiSelectLabel>
|
|
169
|
+
<UiSelectItem value="carrot">Carrot</UiSelectItem>
|
|
170
|
+
<UiSelectItem value="broccoli">Broccoli</UiSelectItem>
|
|
171
|
+
<UiSelectItem value="spinach">Spinach</UiSelectItem>
|
|
172
|
+
</UiSelectGroup>
|
|
173
|
+
</UiSelectContent>
|
|
174
|
+
</UiSelect>
|
|
175
|
+
`,
|
|
176
|
+
}),
|
|
177
|
+
parameters: {
|
|
178
|
+
docs: {
|
|
179
|
+
source: {
|
|
180
|
+
code: withGroupsTemplateSource,
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const withDisabledItemsTemplateSource = `<script setup lang="ts">
|
|
187
|
+
import { ref } from 'vue'
|
|
188
|
+
import {
|
|
189
|
+
UiSelect,
|
|
190
|
+
UiSelectTrigger,
|
|
191
|
+
UiSelectContent,
|
|
192
|
+
UiSelectItem,
|
|
193
|
+
UiSelectValue,
|
|
194
|
+
} from '@aleph-alpha/ui-library'
|
|
195
|
+
|
|
196
|
+
const value = ref('')
|
|
197
|
+
</script>
|
|
198
|
+
|
|
199
|
+
<template>
|
|
200
|
+
<UiSelect v-model="value">
|
|
201
|
+
<UiSelectTrigger>
|
|
202
|
+
<UiSelectValue placeholder="Select a plan" />
|
|
203
|
+
</UiSelectTrigger>
|
|
204
|
+
<UiSelectContent>
|
|
205
|
+
<UiSelectItem value="free">Free Plan</UiSelectItem>
|
|
206
|
+
<UiSelectItem value="pro">Pro Plan</UiSelectItem>
|
|
207
|
+
<UiSelectItem value="enterprise" :disabled="true">Enterprise (Contact Sales)</UiSelectItem>
|
|
208
|
+
</UiSelectContent>
|
|
209
|
+
</UiSelect>
|
|
210
|
+
</template>`;
|
|
211
|
+
|
|
212
|
+
export const WithDisabledItems: Story = {
|
|
213
|
+
render: (args) => ({
|
|
214
|
+
components: { UiSelect, UiSelectTrigger, UiSelectContent, UiSelectItem, UiSelectValue },
|
|
215
|
+
setup() {
|
|
216
|
+
const value = ref('');
|
|
217
|
+
return { args, value };
|
|
218
|
+
},
|
|
219
|
+
template: `
|
|
220
|
+
<UiSelect v-model="value" v-bind="args">
|
|
221
|
+
<UiSelectTrigger>
|
|
222
|
+
<UiSelectValue placeholder="Select a plan" />
|
|
223
|
+
</UiSelectTrigger>
|
|
224
|
+
<UiSelectContent>
|
|
225
|
+
<UiSelectItem value="free">Free Plan</UiSelectItem>
|
|
226
|
+
<UiSelectItem value="pro">Pro Plan</UiSelectItem>
|
|
227
|
+
<UiSelectItem value="enterprise" :disabled="true">Enterprise (Contact Sales)</UiSelectItem>
|
|
228
|
+
</UiSelectContent>
|
|
229
|
+
</UiSelect>
|
|
230
|
+
`,
|
|
231
|
+
}),
|
|
232
|
+
parameters: {
|
|
233
|
+
docs: {
|
|
234
|
+
source: {
|
|
235
|
+
code: withDisabledItemsTemplateSource,
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
const disabledTemplateSource = `<script setup lang="ts">
|
|
242
|
+
import { ref } from 'vue'
|
|
243
|
+
import {
|
|
244
|
+
UiSelect,
|
|
245
|
+
UiSelectTrigger,
|
|
246
|
+
UiSelectContent,
|
|
247
|
+
UiSelectItem,
|
|
248
|
+
UiSelectValue,
|
|
249
|
+
} from '@aleph-alpha/ui-library'
|
|
250
|
+
|
|
251
|
+
const value = ref('')
|
|
252
|
+
</script>
|
|
253
|
+
|
|
254
|
+
<template>
|
|
255
|
+
<UiSelect v-model="value" :disabled="true">
|
|
256
|
+
<UiSelectTrigger>
|
|
257
|
+
<UiSelectValue placeholder="Select an option" />
|
|
258
|
+
</UiSelectTrigger>
|
|
259
|
+
<UiSelectContent>
|
|
260
|
+
<UiSelectItem value="option1">Option 1</UiSelectItem>
|
|
261
|
+
<UiSelectItem value="option2">Option 2</UiSelectItem>
|
|
262
|
+
</UiSelectContent>
|
|
263
|
+
</UiSelect>
|
|
264
|
+
</template>`;
|
|
265
|
+
|
|
266
|
+
export const Disabled: Story = {
|
|
267
|
+
render: () => ({
|
|
268
|
+
components: { UiSelect, UiSelectTrigger, UiSelectContent, UiSelectItem, UiSelectValue },
|
|
269
|
+
setup() {
|
|
270
|
+
const value = ref('');
|
|
271
|
+
return { value };
|
|
272
|
+
},
|
|
273
|
+
template: `
|
|
274
|
+
<UiSelect v-model="value" :disabled="true">
|
|
275
|
+
<UiSelectTrigger>
|
|
276
|
+
<UiSelectValue placeholder="Select an option" />
|
|
277
|
+
</UiSelectTrigger>
|
|
278
|
+
<UiSelectContent>
|
|
279
|
+
<UiSelectItem value="option1">Option 1</UiSelectItem>
|
|
280
|
+
<UiSelectItem value="option2">Option 2</UiSelectItem>
|
|
281
|
+
</UiSelectContent>
|
|
282
|
+
</UiSelect>
|
|
283
|
+
`,
|
|
284
|
+
}),
|
|
285
|
+
args: { disabled: true },
|
|
286
|
+
parameters: {
|
|
287
|
+
docs: {
|
|
288
|
+
source: {
|
|
289
|
+
code: disabledTemplateSource,
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
const sizesTemplateSource = `<script setup lang="ts">
|
|
296
|
+
import { ref } from 'vue'
|
|
297
|
+
import {
|
|
298
|
+
UiSelect,
|
|
299
|
+
UiSelectTrigger,
|
|
300
|
+
UiSelectContent,
|
|
301
|
+
UiSelectItem,
|
|
302
|
+
UiSelectValue,
|
|
303
|
+
} from '@aleph-alpha/ui-library'
|
|
304
|
+
|
|
305
|
+
const value = ref('')
|
|
306
|
+
const value2 = ref('')
|
|
307
|
+
</script>
|
|
308
|
+
|
|
309
|
+
<template>
|
|
310
|
+
<div class="flex items-center gap-4">
|
|
311
|
+
<UiSelect v-model="value">
|
|
312
|
+
<UiSelectTrigger size="sm">
|
|
313
|
+
<UiSelectValue placeholder="Small" />
|
|
314
|
+
</UiSelectTrigger>
|
|
315
|
+
<UiSelectContent>
|
|
316
|
+
<UiSelectItem value="a">Option A</UiSelectItem>
|
|
317
|
+
<UiSelectItem value="b">Option B</UiSelectItem>
|
|
318
|
+
</UiSelectContent>
|
|
319
|
+
</UiSelect>
|
|
320
|
+
<UiSelect v-model="value2">
|
|
321
|
+
<UiSelectTrigger size="default">
|
|
322
|
+
<UiSelectValue placeholder="Default" />
|
|
323
|
+
</UiSelectTrigger>
|
|
324
|
+
<UiSelectContent>
|
|
325
|
+
<UiSelectItem value="a">Option A</UiSelectItem>
|
|
326
|
+
<UiSelectItem value="b">Option B</UiSelectItem>
|
|
327
|
+
</UiSelectContent>
|
|
328
|
+
</UiSelect>
|
|
329
|
+
</div>
|
|
330
|
+
</template>`;
|
|
331
|
+
|
|
332
|
+
export const Sizes: Story = {
|
|
333
|
+
render: () => ({
|
|
334
|
+
components: { UiSelect, UiSelectTrigger, UiSelectContent, UiSelectItem, UiSelectValue },
|
|
335
|
+
setup() {
|
|
336
|
+
const value = ref('');
|
|
337
|
+
const value2 = ref('');
|
|
338
|
+
return { value, value2 };
|
|
339
|
+
},
|
|
340
|
+
template: `
|
|
341
|
+
<div class="flex items-center gap-4">
|
|
342
|
+
<UiSelect v-model="value">
|
|
343
|
+
<UiSelectTrigger size="sm">
|
|
344
|
+
<UiSelectValue placeholder="Small" />
|
|
345
|
+
</UiSelectTrigger>
|
|
346
|
+
<UiSelectContent>
|
|
347
|
+
<UiSelectItem value="a">Option A</UiSelectItem>
|
|
348
|
+
<UiSelectItem value="b">Option B</UiSelectItem>
|
|
349
|
+
</UiSelectContent>
|
|
350
|
+
</UiSelect>
|
|
351
|
+
<UiSelect v-model="value2">
|
|
352
|
+
<UiSelectTrigger size="default">
|
|
353
|
+
<UiSelectValue placeholder="Default" />
|
|
354
|
+
</UiSelectTrigger>
|
|
355
|
+
<UiSelectContent>
|
|
356
|
+
<UiSelectItem value="a">Option A</UiSelectItem>
|
|
357
|
+
<UiSelectItem value="b">Option B</UiSelectItem>
|
|
358
|
+
</UiSelectContent>
|
|
359
|
+
</UiSelect>
|
|
360
|
+
</div>
|
|
361
|
+
`,
|
|
362
|
+
}),
|
|
363
|
+
parameters: {
|
|
364
|
+
docs: {
|
|
365
|
+
source: {
|
|
366
|
+
code: sizesTemplateSource,
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
const withDefaultValueTemplateSource = `<script setup lang="ts">
|
|
373
|
+
import { ref } from 'vue'
|
|
374
|
+
import {
|
|
375
|
+
UiSelect,
|
|
376
|
+
UiSelectTrigger,
|
|
377
|
+
UiSelectContent,
|
|
378
|
+
UiSelectItem,
|
|
379
|
+
UiSelectValue,
|
|
380
|
+
} from '@aleph-alpha/ui-library'
|
|
381
|
+
|
|
382
|
+
const value = ref('banana')
|
|
383
|
+
</script>
|
|
384
|
+
|
|
385
|
+
<template>
|
|
386
|
+
<UiSelect v-model="value">
|
|
387
|
+
<UiSelectTrigger>
|
|
388
|
+
<UiSelectValue placeholder="Select a fruit" />
|
|
389
|
+
</UiSelectTrigger>
|
|
390
|
+
<UiSelectContent>
|
|
391
|
+
<UiSelectItem value="apple">Apple</UiSelectItem>
|
|
392
|
+
<UiSelectItem value="banana">Banana</UiSelectItem>
|
|
393
|
+
<UiSelectItem value="orange">Orange</UiSelectItem>
|
|
394
|
+
</UiSelectContent>
|
|
395
|
+
</UiSelect>
|
|
396
|
+
</template>`;
|
|
397
|
+
|
|
398
|
+
export const WithDefaultValue: Story = {
|
|
399
|
+
render: () => ({
|
|
400
|
+
components: { UiSelect, UiSelectTrigger, UiSelectContent, UiSelectItem, UiSelectValue },
|
|
401
|
+
setup() {
|
|
402
|
+
const value = ref('banana');
|
|
403
|
+
return { value };
|
|
404
|
+
},
|
|
405
|
+
template: `
|
|
406
|
+
<UiSelect v-model="value">
|
|
407
|
+
<UiSelectTrigger>
|
|
408
|
+
<UiSelectValue placeholder="Select a fruit" />
|
|
409
|
+
</UiSelectTrigger>
|
|
410
|
+
<UiSelectContent>
|
|
411
|
+
<UiSelectItem value="apple">Apple</UiSelectItem>
|
|
412
|
+
<UiSelectItem value="banana">Banana</UiSelectItem>
|
|
413
|
+
<UiSelectItem value="orange">Orange</UiSelectItem>
|
|
414
|
+
</UiSelectContent>
|
|
415
|
+
</UiSelect>
|
|
416
|
+
`,
|
|
417
|
+
}),
|
|
418
|
+
parameters: {
|
|
419
|
+
docs: {
|
|
420
|
+
source: {
|
|
421
|
+
code: withDefaultValueTemplateSource,
|
|
422
|
+
},
|
|
423
|
+
},
|
|
424
|
+
},
|
|
425
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { AcceptableValue } from 'reka-ui';
|
|
3
|
+
import { Select as ShadcnSelect } from '@/primitives/shadcn/select';
|
|
4
|
+
import type { UiSelectProps, UiSelectEmits } from './types';
|
|
5
|
+
|
|
6
|
+
defineOptions({
|
|
7
|
+
name: 'UiSelect',
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const props = withDefaults(defineProps<UiSelectProps>(), {
|
|
11
|
+
modelValue: undefined,
|
|
12
|
+
defaultValue: undefined,
|
|
13
|
+
defaultOpen: false,
|
|
14
|
+
open: undefined,
|
|
15
|
+
disabled: false,
|
|
16
|
+
required: false,
|
|
17
|
+
name: undefined,
|
|
18
|
+
dir: 'ltr',
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const emit = defineEmits<UiSelectEmits>();
|
|
22
|
+
|
|
23
|
+
// reka-ui's AcceptableValue can be string | number | boolean | Record
|
|
24
|
+
// Our API restricts to string only for type safety
|
|
25
|
+
function handleModelValueUpdate(value: AcceptableValue) {
|
|
26
|
+
if (typeof value === 'string') {
|
|
27
|
+
emit('update:modelValue', value);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<template>
|
|
33
|
+
<ShadcnSelect
|
|
34
|
+
:model-value="props.modelValue"
|
|
35
|
+
:default-value="props.defaultValue"
|
|
36
|
+
:default-open="props.defaultOpen"
|
|
37
|
+
:open="props.open"
|
|
38
|
+
:disabled="props.disabled"
|
|
39
|
+
:required="props.required"
|
|
40
|
+
:name="props.name"
|
|
41
|
+
:dir="props.dir"
|
|
42
|
+
@update:model-value="handleModelValueUpdate"
|
|
43
|
+
@update:open="emit('update:open', $event)"
|
|
44
|
+
>
|
|
45
|
+
<slot />
|
|
46
|
+
</ShadcnSelect>
|
|
47
|
+
</template>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { SelectContent as ShadcnSelectContent } from '@/primitives/shadcn/select';
|
|
3
|
+
import type { UiSelectContentProps, UiSelectContentEmits } from './types';
|
|
4
|
+
|
|
5
|
+
defineOptions({
|
|
6
|
+
name: 'UiSelectContent',
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
const props = withDefaults(defineProps<UiSelectContentProps>(), {
|
|
10
|
+
side: 'bottom',
|
|
11
|
+
sideOffset: 4,
|
|
12
|
+
align: 'start',
|
|
13
|
+
position: 'popper',
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const emit = defineEmits<UiSelectContentEmits>();
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<ShadcnSelectContent
|
|
21
|
+
:side="props.side"
|
|
22
|
+
:side-offset="props.sideOffset"
|
|
23
|
+
:align="props.align"
|
|
24
|
+
:position="props.position"
|
|
25
|
+
@escape-key-down="emit('escapeKeyDown', $event)"
|
|
26
|
+
@pointer-down-outside="emit('pointerDownOutside', $event)"
|
|
27
|
+
>
|
|
28
|
+
<slot />
|
|
29
|
+
</ShadcnSelectContent>
|
|
30
|
+
</template>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { SelectGroup as ShadcnSelectGroup } from '@/primitives/shadcn/select';
|
|
3
|
+
|
|
4
|
+
defineOptions({
|
|
5
|
+
name: 'UiSelectGroup',
|
|
6
|
+
});
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<ShadcnSelectGroup>
|
|
11
|
+
<slot />
|
|
12
|
+
</ShadcnSelectGroup>
|
|
13
|
+
</template>
|