@livestorm/ui-vue 1.1.2 → 2.0.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 +164 -32
- package/components-vite.js +5 -5
- package/components.d.ts +3 -3
- package/dist/UiTimelineItem.vue_vue_type_style_index_0_lang-DOLFRKcb.mjs +5565 -0
- package/dist/a11y-DIdrv5Mn.mjs +66 -0
- package/dist/breakpoints.mjs +9 -0
- package/dist/bus.mjs +5 -0
- package/dist/components.mjs +213 -1550
- package/dist/index.mjs +84 -166
- package/dist/integrations.mjs +8 -0
- package/dist/layouts.mjs +236 -0
- package/dist/responsive.mjs +25 -0
- package/dist/slot.mjs +21 -0
- package/dist/toastDSV2-wMh-UMzW.mjs +74 -0
- package/dist/types/index.d.ts +84 -0
- package/dist/types/src/components/Toast/LayoutToasts.vue.d.ts +3 -0
- package/dist/types/src/components/Toast/ToastMessage.vue.d.ts +21 -0
- package/dist/types/src/components/Toast/toastDSV2.d.ts +102 -0
- package/dist/types/src/components/UiActionBar/UiActionBar.vue.d.ts +44 -0
- package/dist/types/src/components/UiActionBar/UiActionBarItem.vue.d.ts +47 -0
- package/dist/types/src/components/UiActionBar/UiActionBarSeparator.vue.d.ts +3 -0
- package/dist/types/src/components/UiActionBar/index.d.ts +4 -0
- package/dist/types/src/components/UiActionBar/types.d.ts +14 -0
- package/dist/types/src/components/UiAnimatedLogo/UiAnimatedLogo.vue.d.ts +10 -0
- package/dist/types/src/components/UiAnimatedLogo/animations-links.d.ts +3 -0
- package/dist/types/src/components/UiAvatar/UiAvatar.vue.d.ts +55 -0
- package/dist/types/src/components/UiAvatar/index.d.ts +1 -0
- package/dist/types/src/components/UiAvatarList/UiAvatarList.vue.d.ts +28 -0
- package/dist/types/src/components/UiAvatarList/index.d.ts +1 -0
- package/dist/types/src/components/UiBadge/UiBadge.vue.d.ts +47 -0
- package/dist/types/src/components/UiBadge/index.d.ts +1 -0
- package/dist/types/src/components/UiBanner/UiBanner.vue.d.ts +96 -0
- package/dist/types/src/components/UiBanner/index.d.ts +2 -0
- package/dist/types/src/components/UiBreadcrumb/UiBreadcrumb.vue.d.ts +15 -0
- package/dist/types/src/components/UiBreadcrumb/index.d.ts +2 -0
- package/dist/types/src/components/UiButton/UiButton.vue.d.ts +249 -0
- package/dist/types/src/components/UiButtonGroup/UiButtonGroup.vue.d.ts +42 -0
- package/dist/types/src/components/UiButtonGroup/UiButtonGroupItem.vue.d.ts +21 -0
- package/dist/types/src/components/UiButtonGroup/index.d.ts +3 -0
- package/dist/types/src/components/UiButtonGroup/types.d.ts +10 -0
- package/dist/types/src/components/UiCard/UiCard.vue.d.ts +31 -0
- package/dist/types/src/components/UiCarousel/UiCarousel.vue.d.ts +63 -0
- package/dist/types/src/components/UiCarousel/index.d.ts +2 -0
- package/dist/types/src/components/UiColorField/UiColorField.vue.d.ts +19 -0
- package/dist/types/src/components/UiColorField/index.d.ts +2 -0
- package/dist/types/src/components/UiColorField/types.d.ts +29 -0
- package/dist/types/src/components/UiColorPicker/UiColorPicker.vue.d.ts +35 -0
- package/dist/types/src/components/UiColorPicker/index.d.ts +2 -0
- package/dist/types/src/components/UiColorPicker/types.d.ts +97 -0
- package/dist/types/src/components/UiDialog/MarketplaceHeaderExample.vue.d.ts +28 -0
- package/dist/types/src/components/UiDialog/UiDialog.vue.d.ts +18 -0
- package/dist/types/src/components/UiDialog/UiDialogClose.vue.d.ts +10 -0
- package/dist/types/src/components/UiDialog/UiDialogContent.vue.d.ts +54 -0
- package/dist/types/src/components/UiDialog/UiDialogFooter.vue.d.ts +13 -0
- package/dist/types/src/components/UiDialog/UiDialogTrigger.vue.d.ts +14 -0
- package/dist/types/src/components/UiDialog/index.d.ts +7 -0
- package/dist/types/src/components/UiDropdown/UiDropdown.vue.d.ts +42 -0
- package/dist/types/src/components/UiDropdown/UiDropdownContent.vue.d.ts +32 -0
- package/dist/types/src/components/UiDropdown/UiDropdownItem.vue.d.ts +27 -0
- package/dist/types/src/components/UiDropdown/UiDropdownSeparator.vue.d.ts +3 -0
- package/dist/types/src/components/UiDropdown/UiDropdownTrigger.vue.d.ts +45 -0
- package/dist/types/src/components/UiDropdown/context.d.ts +7 -0
- package/dist/types/src/components/UiDropdown/index.d.ts +6 -0
- package/dist/types/src/components/UiEmptyState/UiEmptyState.vue.d.ts +29 -0
- package/dist/types/src/components/UiFieldWrapper/UiFieldWrapper.vue.d.ts +36 -0
- package/dist/types/src/components/UiFieldWrapper/index.d.ts +1 -0
- package/dist/types/src/components/UiForm/UiFormField.types.d.ts +22 -0
- package/dist/types/src/components/UiForm/UiFormField.vue.d.ts +34 -0
- package/dist/types/src/components/UiForm/index.d.ts +3 -0
- package/dist/types/src/components/UiHorizontalSeparator/UiHorizontalSeparator.vue.d.ts +6 -0
- package/dist/types/src/components/UiInputCheckbox/UiInputCheckbox.vue.d.ts +108 -0
- package/dist/types/src/components/UiInputCheckbox/index.d.ts +2 -0
- package/dist/types/src/components/UiInputCheckbox/types.d.ts +1 -0
- package/dist/types/src/components/UiInputSelect/UiInputSelect.vue.d.ts +66 -0
- package/dist/types/src/components/UiInputSelect/index.d.ts +2 -0
- package/dist/types/src/components/UiInputSelect/types.d.ts +1 -0
- package/dist/types/src/components/UiInputTextarea/UiInputTextarea.vue.d.ts +49 -0
- package/dist/types/src/components/UiInputTextarea/index.d.ts +2 -0
- package/dist/types/src/components/UiInputTextarea/types.d.ts +1 -0
- package/dist/types/src/components/UiLabel/UiLabel.vue.d.ts +17 -0
- package/dist/types/src/components/UiList/UiList.vue.d.ts +27 -0
- package/dist/types/src/components/UiListItem/UiListItem.vue.d.ts +35 -0
- package/dist/types/src/components/UiLoader/UiLoader.vue.d.ts +17 -0
- package/dist/types/src/components/UiLogo/UiLogo.vue.d.ts +20 -0
- package/dist/types/src/components/UiLogo/variants/PulseVariant.vue.d.ts +3 -0
- package/dist/types/src/components/UiLogo/variants/TornadoVariant.vue.d.ts +3 -0
- package/dist/types/src/components/UiMenu/UiMenu.vue.d.ts +18 -0
- package/dist/types/src/components/UiMenu/UiMenuContent.vue.d.ts +30 -0
- package/dist/types/src/components/UiMenu/UiMenuGroup.vue.d.ts +16 -0
- package/dist/types/src/components/UiMenu/UiMenuItem.vue.d.ts +18 -0
- package/dist/types/src/components/UiMenu/UiMenuLabel.vue.d.ts +13 -0
- package/dist/types/src/components/UiMenu/UiMenuSeparator.vue.d.ts +13 -0
- package/dist/types/src/components/UiMenu/UiMenuSub.vue.d.ts +18 -0
- package/dist/types/src/components/UiMenu/UiMenuSubContent.vue.d.ts +32 -0
- package/dist/types/src/components/UiMenu/UiMenuSubTrigger.vue.d.ts +14 -0
- package/dist/types/src/components/UiMenu/UiMenuTrigger.vue.d.ts +14 -0
- package/dist/types/src/components/UiMenu/index.d.ts +10 -0
- package/dist/types/src/components/UiPage/UiPage.vue.d.ts +37 -0
- package/dist/types/src/components/UiPageHeader/UiPageHeader.vue.d.ts +33 -0
- package/dist/types/src/components/UiPopover/UiPopover.vue.d.ts +18 -0
- package/dist/types/src/components/UiPopover/UiPopoverAnchor.vue.d.ts +14 -0
- package/dist/types/src/components/UiPopover/UiPopoverContent.vue.d.ts +28 -0
- package/dist/types/src/components/UiPopover/UiPopoverTrigger.vue.d.ts +14 -0
- package/dist/types/src/components/UiProgress/UiProgress.vue.d.ts +15 -0
- package/dist/types/src/components/UiProgress/index.d.ts +2 -0
- package/dist/types/src/components/UiProgress/types.d.ts +4 -0
- package/dist/types/src/components/UiRoomButton/UiRoomButton.vue.d.ts +29 -0
- package/dist/types/src/components/UiShell/UiShell.vue.d.ts +24 -0
- package/dist/types/src/components/UiSideMenu/UiSideMenu.vue.d.ts +64 -0
- package/dist/types/src/components/UiSideMenu/UiSideMenuBottom.vue.d.ts +7 -0
- package/dist/types/src/components/UiSideMenu/UiSideMenuItem.vue.d.ts +53 -0
- package/dist/types/src/components/UiSideMenu/UiSideMenuItemContent.vue.d.ts +43 -0
- package/dist/types/src/components/UiSideMenu/UiSideMenuTop.vue.d.ts +7 -0
- package/dist/types/src/components/UiSideMenu/injection.d.ts +7 -0
- package/dist/types/src/components/UiSideMenu/types.d.ts +39 -0
- package/dist/types/src/components/UiSideMenu/useLabelHidden.d.ts +2 -0
- package/dist/types/src/components/UiSideMenu/useSideMenuLayout.d.ts +7 -0
- package/dist/types/src/components/UiStepper/UiStepper.vue.d.ts +18 -0
- package/dist/types/src/components/UiStepper/UiStepperDescription.vue.d.ts +14 -0
- package/dist/types/src/components/UiStepper/UiStepperIndicator.vue.d.ts +20 -0
- package/dist/types/src/components/UiStepper/UiStepperItem.vue.d.ts +19 -0
- package/dist/types/src/components/UiStepper/UiStepperSeparator.vue.d.ts +10 -0
- package/dist/types/src/components/UiStepper/UiStepperTitle.vue.d.ts +14 -0
- package/dist/types/src/components/UiStepper/index.d.ts +7 -0
- package/dist/types/src/components/UiTable/UiTable.vue.d.ts +20 -0
- package/dist/types/src/components/UiTable/UiTableBody.vue.d.ts +13 -0
- package/dist/types/src/components/UiTable/UiTableCell.vue.d.ts +13 -0
- package/dist/types/src/components/UiTable/UiTableHeader.vue.d.ts +13 -0
- package/dist/types/src/components/UiTable/UiTableHeaderCell.vue.d.ts +13 -0
- package/dist/types/src/components/UiTable/UiTableRow.vue.d.ts +16 -0
- package/dist/types/src/components/UiTable/index.d.ts +6 -0
- package/dist/types/src/components/UiTabs/UiTabs.vue.d.ts +37 -0
- package/dist/types/src/components/UiTabs/index.d.ts +2 -0
- package/dist/types/src/components/UiTag/UiTag.vue.d.ts +43 -0
- package/dist/types/src/components/UiTag/index.d.ts +1 -0
- package/dist/types/src/components/UiTextField/UiTextField.vue.d.ts +65 -0
- package/dist/types/src/components/UiTextField/index.d.ts +2 -0
- package/dist/types/src/components/UiTextField/types.d.ts +2 -0
- package/dist/types/src/components/UiTimeline/UiTimeline.vue.d.ts +19 -0
- package/dist/types/src/components/UiTimeline/UiTimelineItem.vue.d.ts +28 -0
- package/dist/types/src/components/UiTimeline/index.d.ts +2 -0
- package/dist/types/src/components/UiTooltip/UiTooltip.vue.d.ts +18 -0
- package/dist/types/src/components/UiTooltip/UiTooltipContent.vue.d.ts +54 -0
- package/dist/types/src/components/UiTooltip/UiTooltipProvider.vue.d.ts +17 -0
- package/dist/types/src/components/UiTooltip/UiTooltipTrigger.vue.d.ts +14 -0
- package/dist/types/src/components/UiTooltip/index.d.ts +4 -0
- package/dist/types/src/composables/useButtonStyles.d.ts +20 -0
- package/dist/types/src/composables/useMobileMenu.d.ts +11 -0
- package/dist/types/src/composables/useThemeAndModes.d.ts +34 -0
- package/dist/types/src/constants/index.d.ts +2 -0
- package/dist/types/src/constants/sizes.d.ts +2 -0
- package/dist/types/src/constants/themes.d.ts +22 -0
- package/dist/types/src/integrations/index.d.ts +1 -0
- package/dist/types/src/layouts/index.d.ts +2 -0
- package/dist/types/src/mixins/DynamicAction.d.ts +30 -0
- package/dist/types/src/primitives.d.ts +6 -0
- package/dist/types/src/theme.d.ts +1 -0
- package/dist/types/src/utils/a11y.d.ts +2 -0
- package/dist/types/src/utils/breakpoints.d.ts +9 -0
- package/dist/types/src/utils/bus.d.ts +2 -0
- package/dist/types/src/utils/clipboard.d.ts +4 -0
- package/dist/types/src/utils/devices.d.ts +19 -0
- package/dist/types/src/utils/elements.d.ts +1 -0
- package/dist/types/src/utils/index.d.ts +9 -0
- package/dist/types/src/utils/numbers.d.ts +30 -0
- package/dist/types/src/utils/responsive.d.ts +5 -0
- package/dist/types/src/utils/responsive.types.d.ts +12 -0
- package/dist/types/src/utils/router.d.ts +1 -0
- package/dist/types/src/utils/slot.d.ts +8 -0
- package/dist/types/src/utils/stack-view.d.ts +10 -0
- package/dist/types/src/utils/uid.d.ts +1 -0
- package/dist/types/style.d.ts +1 -0
- package/dist/ui-vue.css +1 -0
- package/dist/useThemeAndModes-DY5SDC0a.mjs +109 -0
- package/dist/utils.mjs +111 -0
- package/index.d.ts +88 -2
- package/index.js +169 -16
- package/integrations.d.ts +10 -0
- package/package.json +127 -58
- package/src/components/Toast/LayoutToasts.vue +63 -0
- package/src/components/Toast/ToastMessage.vue +208 -0
- package/src/components/Toast/toastDSV2.ts +151 -0
- package/src/components/UiActionBar/UiActionBar.vue +86 -0
- package/src/components/UiActionBar/UiActionBarItem.vue +179 -0
- package/src/components/UiActionBar/UiActionBarSeparator.vue +18 -0
- package/src/components/UiActionBar/index.ts +4 -0
- package/src/components/UiActionBar/types.ts +24 -0
- package/src/components/UiAnimatedLogo/UiAnimatedLogo.vue +47 -0
- package/src/components/UiAnimatedLogo/animations-links.ts +6 -0
- package/src/components/UiAvatar/UiAvatar.vue +186 -0
- package/src/components/UiAvatar/index.js +1 -0
- package/src/components/UiAvatarList/UiAvatarList.vue +109 -0
- package/src/components/UiAvatarList/index.js +1 -0
- package/src/components/UiBadge/UiBadge.vue +161 -0
- package/src/components/UiBadge/index.ts +2 -0
- package/src/components/UiBanner/UiBanner.vue +363 -0
- package/src/components/UiBanner/index.ts +2 -0
- package/src/components/UiBreadcrumb/UiBreadcrumb.vue +93 -0
- package/src/components/UiBreadcrumb/index.ts +2 -0
- package/src/components/UiButton/UiButton.vue +319 -0
- package/src/components/UiButtonGroup/UiButtonGroup.vue +198 -0
- package/src/components/UiButtonGroup/UiButtonGroupItem.vue +123 -0
- package/src/components/UiButtonGroup/index.ts +3 -0
- package/src/components/UiButtonGroup/types.ts +24 -0
- package/src/components/UiCard/UiCard.vue +112 -0
- package/src/components/UiCarousel/UiCarousel.vue +215 -0
- package/src/components/UiCarousel/index.ts +2 -0
- package/src/components/UiColorField/UiColorField.vue +158 -0
- package/src/components/UiColorField/index.ts +2 -0
- package/src/components/UiColorField/types.ts +30 -0
- package/src/components/UiColorPicker/UiColorPicker.vue +487 -0
- package/src/components/UiColorPicker/index.ts +2 -0
- package/src/components/UiColorPicker/types.ts +103 -0
- package/src/components/UiDialog/MarketplaceHeaderExample.vue +217 -0
- package/src/components/UiDialog/UiDialog.md +97 -0
- package/src/components/UiDialog/UiDialog.vue +16 -0
- package/src/components/UiDialog/UiDialogClose.vue +29 -0
- package/src/components/UiDialog/UiDialogContent.vue +238 -0
- package/src/components/UiDialog/UiDialogFooter.vue +9 -0
- package/src/components/UiDialog/UiDialogTrigger.vue +12 -0
- package/src/components/UiDialog/index.ts +18 -0
- package/src/components/UiDropdown/UiDropdown.vue +48 -0
- package/src/components/UiDropdown/UiDropdownContent.vue +72 -0
- package/src/components/UiDropdown/UiDropdownItem.vue +75 -0
- package/src/components/UiDropdown/UiDropdownSeparator.vue +7 -0
- package/src/components/UiDropdown/UiDropdownTrigger.vue +239 -0
- package/src/components/UiDropdown/context.ts +9 -0
- package/src/components/UiDropdown/index.ts +21 -0
- package/src/components/UiEmptyState/UiEmptyState.vue +80 -0
- package/src/components/UiFieldWrapper/UiFieldWrapper.vue +79 -0
- package/src/components/UiFieldWrapper/index.ts +1 -0
- package/src/components/UiForm/UiFormField.types.ts +24 -0
- package/src/components/UiForm/UiFormField.vue +66 -0
- package/src/components/UiForm/index.ts +3 -0
- package/src/components/UiHorizontalSeparator/UiHorizontalSeparator.vue +28 -0
- package/src/components/UiInputCheckbox/UiInputCheckbox.vue +477 -0
- package/src/components/UiInputCheckbox/index.ts +2 -0
- package/src/components/UiInputCheckbox/types.ts +1 -0
- package/src/components/UiInputSelect/UiInputSelect.vue +166 -0
- package/src/components/UiInputSelect/index.ts +2 -0
- package/src/components/UiInputSelect/types.ts +1 -0
- package/src/components/UiInputTextarea/UiInputTextarea.vue +219 -0
- package/src/components/UiInputTextarea/index.ts +2 -0
- package/src/components/UiInputTextarea/types.ts +1 -0
- package/src/components/UiLabel/UiLabel.vue +34 -0
- package/src/components/UiList/UiList.vue +45 -0
- package/src/components/UiListItem/UiListItem.vue +108 -0
- package/src/components/UiLoader/UiLoader.vue +45 -0
- package/src/components/UiLogo/UiLogo.vue +99 -0
- package/src/components/UiLogo/variants/PulseVariant.vue +51 -0
- package/src/components/UiLogo/variants/TornadoVariant.vue +147 -0
- package/src/components/UiMenu/UiMenu.vue +15 -0
- package/src/components/UiMenu/UiMenuContent.vue +25 -0
- package/src/components/UiMenu/UiMenuGroup.vue +19 -0
- package/src/components/UiMenu/UiMenuItem.vue +18 -0
- package/src/components/UiMenu/UiMenuLabel.vue +9 -0
- package/src/components/UiMenu/UiMenuSeparator.vue +9 -0
- package/src/components/UiMenu/UiMenuSub.vue +15 -0
- package/src/components/UiMenu/UiMenuSubContent.vue +23 -0
- package/src/components/UiMenu/UiMenuSubTrigger.vue +17 -0
- package/src/components/UiMenu/UiMenuTrigger.vue +13 -0
- package/src/components/UiMenu/index.ts +10 -0
- package/src/components/UiPage/UiPage.vue +201 -0
- package/src/components/UiPageHeader/UiPageHeader.vue +128 -0
- package/src/components/UiPopover/UiPopover.vue +16 -0
- package/src/components/UiPopover/UiPopoverAnchor.vue +12 -0
- package/src/components/UiPopover/UiPopoverContent.vue +26 -0
- package/src/components/UiPopover/UiPopoverTrigger.vue +19 -0
- package/src/components/UiProgress/UiProgress.vue +92 -0
- package/src/components/UiProgress/index.ts +2 -0
- package/src/components/UiProgress/types.ts +5 -0
- package/src/components/UiRoomButton/UiRoomButton.vue +240 -0
- package/src/components/UiShell/UiShell.vue +88 -0
- package/src/components/UiSideMenu/UiSideMenu.vue +513 -0
- package/src/components/UiSideMenu/UiSideMenuBottom.vue +27 -0
- package/src/components/UiSideMenu/UiSideMenuItem.vue +102 -0
- package/src/components/UiSideMenu/UiSideMenuItemContent.vue +172 -0
- package/src/components/UiSideMenu/UiSideMenuTop.vue +29 -0
- package/src/components/UiSideMenu/injection.ts +9 -0
- package/src/components/UiSideMenu/types.ts +41 -0
- package/src/components/UiSideMenu/useLabelHidden.ts +33 -0
- package/src/components/UiSideMenu/useSideMenuLayout.ts +12 -0
- package/src/components/UiStepper/UiStepper.vue +40 -0
- package/src/components/UiStepper/UiStepperDescription.vue +27 -0
- package/src/components/UiStepper/UiStepperIndicator.vue +93 -0
- package/src/components/UiStepper/UiStepperItem.vue +30 -0
- package/src/components/UiStepper/UiStepperSeparator.vue +49 -0
- package/src/components/UiStepper/UiStepperTitle.vue +24 -0
- package/src/components/UiStepper/index.ts +17 -0
- package/src/components/UiTable/UiTable.vue +24 -0
- package/src/components/UiTable/UiTableBody.vue +5 -0
- package/src/components/UiTable/UiTableCell.vue +26 -0
- package/src/components/UiTable/UiTableHeader.vue +17 -0
- package/src/components/UiTable/UiTableHeaderCell.vue +19 -0
- package/src/components/UiTable/UiTableRow.vue +27 -0
- package/src/components/UiTable/index.ts +6 -0
- package/src/components/UiTabs/UiTabs.vue +218 -0
- package/src/components/UiTabs/index.ts +5 -0
- package/src/components/UiTag/UiTag.vue +187 -0
- package/src/components/UiTag/index.js +1 -0
- package/src/components/UiTextField/UiTextField.vue +370 -0
- package/src/components/UiTextField/index.ts +2 -0
- package/src/components/UiTextField/types.ts +2 -0
- package/src/components/UiTimeline/README.md +169 -0
- package/src/components/UiTimeline/UiTimeline.vue +58 -0
- package/src/components/UiTimeline/UiTimelineItem.vue +141 -0
- package/src/components/UiTimeline/index.ts +2 -0
- package/src/components/UiTooltip/UiTooltip.vue +16 -0
- package/src/components/UiTooltip/UiTooltipContent.vue +86 -0
- package/src/components/UiTooltip/UiTooltipProvider.vue +15 -0
- package/src/components/UiTooltip/UiTooltipTrigger.vue +19 -0
- package/src/components/UiTooltip/index.js +4 -0
- package/src/composables/useButtonStyles.ts +242 -0
- package/src/composables/useMobileMenu.ts +57 -0
- package/src/composables/useThemeAndModes.ts +225 -0
- package/src/constants/index.ts +2 -0
- package/src/constants/sizes.ts +2 -0
- package/src/constants/themes.ts +34 -0
- package/src/css/{body.postcss → body.css} +3 -2
- package/src/css/reka-animations.css +209 -0
- package/src/css/{transitions.postcss → transitions.css} +12 -5
- package/src/global.d.ts +181 -0
- package/src/integrations/index.js +1 -0
- package/src/layouts/index.js +5 -0
- package/src/mixins/DynamicAction.js +5 -3
- package/src/primitives.ts +6 -0
- package/src/theme.ts +1 -0
- package/src/utils/a11y.ts +8 -0
- package/src/utils/{breakpoints.js → breakpoints.ts} +1 -0
- package/src/utils/clipboard.js +2 -2
- package/src/utils/devices.js +0 -3
- package/src/utils/index.js +2 -1
- package/src/utils/numbers.ts +61 -0
- package/src/utils/responsive.types.ts +12 -0
- package/src/utils/{slot.js → slot.ts} +18 -1
- package/style.js +3 -12
- package/theme.d.ts +1 -0
- package/.env +0 -1
- package/.eslintignore +0 -4
- package/.eslintrc.js +0 -47
- package/.pkg +0 -11
- package/babel.config.js +0 -5
- package/build/Dockerfile +0 -31
- package/ci/ci.yml +0 -54
- package/components-webpack.js +0 -29
- package/dist/environment-e70e5768.mjs +0 -1664
- package/dist/style.css +0 -1
- package/plugins.js +0 -17
- package/postcss.config.js +0 -1
- package/src/components/BaseAutocomplete/BaseAutocomplete.spec.js +0 -506
- package/src/components/BaseAutocomplete/BaseAutocomplete.stories.js +0 -184
- package/src/components/BaseAutocomplete/BaseAutocomplete.vue +0 -431
- package/src/components/BaseBanner/BaseBanner.spec.js +0 -32
- package/src/components/BaseBanner/BaseBanner.stories.js +0 -133
- package/src/components/BaseBanner/BaseBanner.vue +0 -229
- package/src/components/BaseButton/BaseButton.spec.js +0 -98
- package/src/components/BaseButton/BaseButton.stories.js +0 -291
- package/src/components/BaseButton/BaseButton.vue +0 -193
- package/src/components/BaseButton/__snapshots__/BaseButton.spec.js.snap +0 -37
- package/src/components/BaseButton/__snapshots__/BaseButton.spec.js.snap.old +0 -31
- package/src/components/BaseCheckbox/BaseCheckbox.stories.js +0 -82
- package/src/components/BaseCheckbox/BaseCheckbox.vue +0 -161
- package/src/components/BaseDropdownMenu/BaseDropdownMenu.stories.js +0 -84
- package/src/components/BaseDropdownMenu/BaseDropdownMenu.vue +0 -251
- package/src/components/BaseDropdownMenu/BaseDropdownMenuButton.vue +0 -26
- package/src/components/BaseDropdownMenu/BaseDropdownMenuDivider.vue +0 -10
- package/src/components/BaseDropdownMenu/BaseDropdownMenuItem.vue +0 -206
- package/src/components/BaseDropdownMenu/BaseDropdownMenuSearch.vue +0 -49
- package/src/components/BaseDropdownMenu/BaseDropdownMenuTitle.vue +0 -26
- package/src/components/BaseModal/BaseModal.stories.js +0 -143
- package/src/components/BaseModal/BaseModal.vue +0 -187
- package/src/components/BaseModal/BaseModalContent.vue +0 -164
- package/src/components/BaseModal/BaseModalContentOld.vue +0 -242
- package/src/components/BaseRating/BaseRating.spec.js +0 -46
- package/src/components/BaseRating/BaseRating.stories.js +0 -46
- package/src/components/BaseRating/BaseRating.vue +0 -119
- package/src/components/BaseSelect/BaseSelect.stories.js +0 -177
- package/src/components/BaseSelect/BaseSelect.vue +0 -443
- package/src/components/BaseSelect/BaseSelectGroup.vue +0 -34
- package/src/components/BaseSelect/BaseSelectOption.vue +0 -219
- package/src/components/BaseSwitch/BaseSwitch.stories.js +0 -44
- package/src/components/BaseSwitch/BaseSwitch.vue +0 -114
- package/src/components/BaseTag/BaseTag.stories.js +0 -123
- package/src/components/BaseTag/BaseTag.vue +0 -244
- package/src/css/button.postcss +0 -354
- package/src/css/checkbox-radio.postcss +0 -152
- package/src/css/icon.postcss +0 -9
- package/src/css/loader.postcss +0 -120
- package/src/css/popper.postcss +0 -143
- package/src/css/tailwind-utilities.postcss +0 -1
- package/src/css/tailwind.postcss +0 -2
- package/style-postcss.d.ts +0 -3
- package/style-postcss.js +0 -2
- package/tailwind.config.base.cjs +0 -88
- package/tailwind.config.js +0 -9
- package/tsconfig.check.json +0 -13
- package/tsconfig.json +0 -66
- package/vite.config.js +0 -43
- package/vitest.setup.js +0 -26
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { SideMenuItemProps } from './types'
|
|
3
|
+
import { computed, useSlots } from 'vue'
|
|
4
|
+
import { useForwardExpose } from 'reka-ui'
|
|
5
|
+
|
|
6
|
+
// Visual body of a side menu item (icon, label, badge, interactive overlay).
|
|
7
|
+
// Extracted from UiSideMenuItem so the latter can optionally wrap this in a
|
|
8
|
+
// tooltip. `useForwardExpose` exposes the root element so reka-ui's
|
|
9
|
+
// `TooltipTrigger as-child` merges its props/listeners onto this <div> instead
|
|
10
|
+
// of rendering its own wrapping <button> (which would intercept clicks).
|
|
11
|
+
const { forwardRef } = useForwardExpose()
|
|
12
|
+
|
|
13
|
+
const slots = useSlots()
|
|
14
|
+
const hasAvatarSlot = computed(() => !!slots.avatar)
|
|
15
|
+
|
|
16
|
+
const props = withDefaults(defineProps<SideMenuItemProps & {
|
|
17
|
+
navigateToLabel?: string
|
|
18
|
+
/**
|
|
19
|
+
* When true, removes the interactive overlay (router-link/button) from
|
|
20
|
+
* the tab order. Use when wrapped by an interactive ancestor (e.g.
|
|
21
|
+
* UiPopoverTrigger) that already owns focus and click semantics —
|
|
22
|
+
* otherwise the component contributes a second tab stop.
|
|
23
|
+
*/
|
|
24
|
+
insideInteractive?: boolean
|
|
25
|
+
/**
|
|
26
|
+
* Notification indicator shown at the top-right of the icon. A number
|
|
27
|
+
* renders a count pill (values > 99 display as "99+"); `true` renders a
|
|
28
|
+
* plain dot. Omit / 0 / false to hide.
|
|
29
|
+
*/
|
|
30
|
+
badge?: number | boolean
|
|
31
|
+
/**
|
|
32
|
+
* Keep the text label visible even on short-height screens (where item
|
|
33
|
+
* labels are normally hidden). Use for the account/avatar item so the user
|
|
34
|
+
* name stays shown.
|
|
35
|
+
*/
|
|
36
|
+
alwaysShowLabel?: boolean
|
|
37
|
+
}>(), {
|
|
38
|
+
textAlign: undefined,
|
|
39
|
+
insideInteractive: false,
|
|
40
|
+
badge: undefined,
|
|
41
|
+
alwaysShowLabel: false,
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
// Normalise the badge into either a display string (count pill) or null (dot)
|
|
45
|
+
// when shown. `showBadge` gates rendering so 0/false stay hidden.
|
|
46
|
+
const showBadge = computed(() => props.badge === true || (typeof props.badge === 'number' && props.badge > 0))
|
|
47
|
+
const badgeCount = computed(() => {
|
|
48
|
+
if (typeof props.badge !== 'number') return null
|
|
49
|
+
return props.badge > 99 ? '99+' : String(props.badge)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
const textAlignClass = computed(() => {
|
|
53
|
+
if (props.textAlign) {
|
|
54
|
+
return `text-${props.textAlign}`
|
|
55
|
+
}
|
|
56
|
+
return hasAvatarSlot.value ? 'text-left' : 'text-center'
|
|
57
|
+
})
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
<template>
|
|
61
|
+
<div
|
|
62
|
+
:ref="forwardRef"
|
|
63
|
+
class="md:w-18 relative flex md:flex-col md:items-center gap-1 p-1 group/side-menu-item"
|
|
64
|
+
>
|
|
65
|
+
<router-link
|
|
66
|
+
v-if="to"
|
|
67
|
+
:to="to"
|
|
68
|
+
class="block w-full h-full absolute inset-0 z-20 transition-all duration-150"
|
|
69
|
+
:class="{ 'pointer-events-none': insideInteractive }"
|
|
70
|
+
:tabindex="insideInteractive ? -1 : undefined"
|
|
71
|
+
:aria-hidden="insideInteractive ? 'true' : undefined"
|
|
72
|
+
:aria-label="navigateToLabel || `Navigate to ${label}`"
|
|
73
|
+
:aria-current="isActive ? 'page' : undefined"
|
|
74
|
+
>
|
|
75
|
+
<span class="sr-only">{{ label }}</span>
|
|
76
|
+
</router-link>
|
|
77
|
+
<a
|
|
78
|
+
v-else-if="href"
|
|
79
|
+
:href="href"
|
|
80
|
+
class="block w-full h-full absolute inset-0 z-20 transition-all duration-150"
|
|
81
|
+
:class="{ 'pointer-events-none': insideInteractive }"
|
|
82
|
+
:tabindex="insideInteractive ? -1 : undefined"
|
|
83
|
+
:aria-hidden="insideInteractive ? 'true' : undefined"
|
|
84
|
+
:aria-label="navigateToLabel || `Navigate to ${label}`"
|
|
85
|
+
>
|
|
86
|
+
<span class="sr-only">{{ label }}</span>
|
|
87
|
+
</a>
|
|
88
|
+
<button
|
|
89
|
+
v-else
|
|
90
|
+
type="button"
|
|
91
|
+
class="block w-full h-full absolute inset-0 z-20 transition-all duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-actions-primary-idle rounded-xl"
|
|
92
|
+
:class="{ 'pointer-events-none': insideInteractive }"
|
|
93
|
+
:tabindex="insideInteractive ? -1 : undefined"
|
|
94
|
+
:aria-hidden="insideInteractive ? 'true' : undefined"
|
|
95
|
+
:aria-label="label"
|
|
96
|
+
:aria-current="isActive ? 'true' : undefined"
|
|
97
|
+
>
|
|
98
|
+
<span class="sr-only">{{ label }}</span>
|
|
99
|
+
</button>
|
|
100
|
+
<div
|
|
101
|
+
:class="[
|
|
102
|
+
'flex justify-center w-full md:w-10 group-hover/side-menu-item:bg-actions-neutral-hover-overlay group-active/side-menu-item:bg-actions-neutral-active-overlay rounded-xl transition-all duration-150 ease-in-out',
|
|
103
|
+
isActive ? 'bg-actions-neutral-active-overlay text-actions-neutral-idle' : 'text-actions-neutral-idle-alpha-strong',
|
|
104
|
+
// Avatar box is 40px; on mobile `p-1` makes its total height (48px)
|
|
105
|
+
// match icon items (`p-3` + 24px icon). Both are 40px on desktop.
|
|
106
|
+
hasAvatarSlot ? 'p-1 md:p-0' : 'p-3',
|
|
107
|
+
]"
|
|
108
|
+
>
|
|
109
|
+
<!-- Icon/avatar wrapper: anchors the notification badge to the icon's
|
|
110
|
+
top-right corner so it stays correct in both the icon-centered
|
|
111
|
+
(desktop) and icon-left (mobile row) layouts. -->
|
|
112
|
+
<div class="relative shrink-0">
|
|
113
|
+
<div
|
|
114
|
+
v-if="hasAvatarSlot"
|
|
115
|
+
class="flex items-center justify-center w-10 h-10"
|
|
116
|
+
>
|
|
117
|
+
<slot name="avatar" />
|
|
118
|
+
</div>
|
|
119
|
+
<div
|
|
120
|
+
v-if="icon"
|
|
121
|
+
:class="[
|
|
122
|
+
'w-6 h-6 md:w-4 md:h-4',
|
|
123
|
+
icon
|
|
124
|
+
]"
|
|
125
|
+
aria-hidden="true"
|
|
126
|
+
/>
|
|
127
|
+
<!-- Notification badge, pushed out toward the button's top-right
|
|
128
|
+
corner (past the icon's p-3 padding). -->
|
|
129
|
+
<div
|
|
130
|
+
v-if="showBadge"
|
|
131
|
+
class="absolute z-30 pointer-events-none flex items-center justify-center bg-surface-danger-bg-alpha text-text-neutral-invert-base rounded-2xl"
|
|
132
|
+
:class="badgeCount
|
|
133
|
+
? '-top-3.5 -right-3.5 min-w-4 px-1 py-0.5 text-content-badges-bold-md'
|
|
134
|
+
: '-top-2.5 -right-2.5 w-2 h-2'"
|
|
135
|
+
aria-hidden="true"
|
|
136
|
+
>
|
|
137
|
+
<span v-if="badgeCount">{{ badgeCount }}</span>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
<div
|
|
141
|
+
class="pl-4 flex md:hidden text-content-text-md-regular font-bold truncate w-full items-center md:justify-center md:text-center"
|
|
142
|
+
aria-hidden="true"
|
|
143
|
+
>
|
|
144
|
+
{{ label }}
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
<div
|
|
148
|
+
class="hidden md:block text-content-legends-bold-md truncate w-[75px]"
|
|
149
|
+
:class="[
|
|
150
|
+
textAlignClass,
|
|
151
|
+
isActive ? 'text-actions-neutral-idle' : 'text-actions-neutral-idle-alpha-strong',
|
|
152
|
+
{ 'hidden-on-short-height': !alwaysShowLabel },
|
|
153
|
+
]"
|
|
154
|
+
aria-hidden="true"
|
|
155
|
+
>
|
|
156
|
+
{{ label }}
|
|
157
|
+
</div>
|
|
158
|
+
<slot />
|
|
159
|
+
</div>
|
|
160
|
+
</template>
|
|
161
|
+
|
|
162
|
+
<style scoped>
|
|
163
|
+
.hidden-on-short-height {
|
|
164
|
+
display: none;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@media (min-height: 600px) and (min-width: 768px) {
|
|
168
|
+
.hidden-on-short-height {
|
|
169
|
+
display: block;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
</style>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import LivestormLogo from '@livestorm/ui-tokens/output/vectors/logos/livestorm-white.svg'
|
|
3
|
+
import UiSideMenuItem from './UiSideMenuItem.vue'
|
|
4
|
+
import type { SideMenuItemProps } from './types'
|
|
5
|
+
|
|
6
|
+
defineProps<{
|
|
7
|
+
menuItems: SideMenuItemProps[]
|
|
8
|
+
}>()
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<div class="flex flex-col items-center gap-8">
|
|
13
|
+
<img
|
|
14
|
+
:src="LivestormLogo"
|
|
15
|
+
alt="Livestorm logo"
|
|
16
|
+
class="w-10 h-10"
|
|
17
|
+
>
|
|
18
|
+
<div class="flex flex-col gap-2">
|
|
19
|
+
<UiSideMenuItem
|
|
20
|
+
v-for="item in menuItems"
|
|
21
|
+
:key="item.label"
|
|
22
|
+
:label="item.label"
|
|
23
|
+
:icon="item.icon"
|
|
24
|
+
:to="item.to"
|
|
25
|
+
:is-active="item.isActive"
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InjectionKey, Ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
export interface SideMenuLayoutContext {
|
|
4
|
+
isShortHeight: Ref<boolean>
|
|
5
|
+
moreButtonEl: Ref<HTMLElement | null>
|
|
6
|
+
closeMoreMenu: () => void
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const SIDE_MENU_LAYOUT_KEY: InjectionKey<SideMenuLayoutContext> = Symbol('UiSideMenuLayout')
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { RouteLocationRaw } from 'vue-router'
|
|
2
|
+
export interface SideMenuItemProps {
|
|
3
|
+
label: string
|
|
4
|
+
icon?: string
|
|
5
|
+
to?: string | RouteLocationRaw
|
|
6
|
+
href?: string
|
|
7
|
+
isActive?: boolean
|
|
8
|
+
textAlign?: 'left' | 'center' | 'right'
|
|
9
|
+
/** Notification indicator: a count pill (number) or a dot (`true`). */
|
|
10
|
+
badge?: number | boolean
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Proxy entry rendered inside the More popover on short-height screens.
|
|
15
|
+
* Used to surface buttons that live in the #bottom slot (e.g. Help, Updates)
|
|
16
|
+
* which are hidden in that layout. The click handler should toggle the
|
|
17
|
+
* underlying component's popover; that component should register a
|
|
18
|
+
* UiPopoverAnchor pointing to the More button so its popover visually
|
|
19
|
+
* emerges from there.
|
|
20
|
+
*/
|
|
21
|
+
export interface SideMenuMoreItem {
|
|
22
|
+
label: string
|
|
23
|
+
icon?: string
|
|
24
|
+
onClick: () => void
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Entry rendered inside the persistent "More" popover (the collapsed menu
|
|
29
|
+
* shown at every height). Unlike SideMenuMoreItem, these are first-class menu
|
|
30
|
+
* entries — they can navigate (`to`/`href`) or run a handler (`onClick`).
|
|
31
|
+
*/
|
|
32
|
+
export interface SideMenuCollapsedItem {
|
|
33
|
+
label: string
|
|
34
|
+
icon?: string
|
|
35
|
+
to?: string | RouteLocationRaw
|
|
36
|
+
href?: string
|
|
37
|
+
isActive?: boolean
|
|
38
|
+
onClick?: () => void
|
|
39
|
+
/** Notification indicator: a count pill (number) or a dot (`true`). */
|
|
40
|
+
badge?: number | boolean
|
|
41
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { onBeforeUnmount, onMounted, ref, type Ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
// When is a side menu item's text label hidden? (see UiSideMenuItemContent)
|
|
4
|
+
// - mobile width (< 768px): the inline `md:hidden` label IS shown
|
|
5
|
+
// - desktop, tall (>= 600px height): the bottom `.hidden-on-short-height`
|
|
6
|
+
// label IS shown
|
|
7
|
+
// - desktop, short (< 600px height): BOTH labels hidden
|
|
8
|
+
// So the label is hidden only on short-height desktop. We also require a
|
|
9
|
+
// hover-capable, fine pointer so touch/mobile never get a hover tooltip.
|
|
10
|
+
const LABEL_HIDDEN_QUERY =
|
|
11
|
+
'(min-width: 768px) and (max-height: 599.98px) and (hover: hover) and (pointer: fine)'
|
|
12
|
+
|
|
13
|
+
export function useLabelHidden (): Ref<boolean> {
|
|
14
|
+
const labelHidden = ref(false)
|
|
15
|
+
let mql: MediaQueryList | null = null
|
|
16
|
+
|
|
17
|
+
const update = (e: MediaQueryListEvent | MediaQueryList) => {
|
|
18
|
+
labelHidden.value = e.matches
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
onMounted(() => {
|
|
22
|
+
if (typeof window === 'undefined') return
|
|
23
|
+
mql = window.matchMedia(LABEL_HIDDEN_QUERY)
|
|
24
|
+
labelHidden.value = mql.matches
|
|
25
|
+
mql.addEventListener('change', update)
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
onBeforeUnmount(() => {
|
|
29
|
+
mql?.removeEventListener('change', update)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
return labelHidden
|
|
33
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { inject } from 'vue'
|
|
2
|
+
import { SIDE_MENU_LAYOUT_KEY } from './injection'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Read the parent UiSideMenu's layout context. Returns `undefined` when
|
|
6
|
+
* used outside a UiSideMenu (e.g. in isolation). Consumers typically use
|
|
7
|
+
* this to anchor their own popovers to the More button on short-height
|
|
8
|
+
* screens, where the #bottom slot is visually hidden.
|
|
9
|
+
*/
|
|
10
|
+
export function useSideMenuLayout () {
|
|
11
|
+
return inject(SIDE_MENU_LAYOUT_KEY, undefined)
|
|
12
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { StepperRootEmits, StepperRootProps } from 'reka-ui'
|
|
3
|
+
import { StepperRoot, useForwardPropsEmits } from 'reka-ui'
|
|
4
|
+
import { computed, provide, toRef } from 'vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<StepperRootProps>()
|
|
7
|
+
const emits = defineEmits<StepperRootEmits>()
|
|
8
|
+
|
|
9
|
+
const forwarded = useForwardPropsEmits(props, emits)
|
|
10
|
+
|
|
11
|
+
const isHorizontal = computed(() => props.orientation === 'horizontal')
|
|
12
|
+
|
|
13
|
+
// Provide orientation to child components
|
|
14
|
+
provide('stepperOrientation', toRef(props, 'orientation'))
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<StepperRoot
|
|
19
|
+
v-bind="{ ...forwarded, ...$attrs }"
|
|
20
|
+
class="ui-stepper"
|
|
21
|
+
:class="{
|
|
22
|
+
'ui-stepper--horizontal': isHorizontal,
|
|
23
|
+
'ui-stepper--vertical': !isHorizontal,
|
|
24
|
+
}"
|
|
25
|
+
>
|
|
26
|
+
<slot />
|
|
27
|
+
</StepperRoot>
|
|
28
|
+
</template>
|
|
29
|
+
|
|
30
|
+
<style>
|
|
31
|
+
@reference '@livestorm/ui-tokens/output/supernova/index.css';
|
|
32
|
+
|
|
33
|
+
.ui-stepper--horizontal {
|
|
34
|
+
@apply flex items-start gap-8;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.ui-stepper--vertical > *:not(:last-child) {
|
|
38
|
+
@apply mb-2;
|
|
39
|
+
}
|
|
40
|
+
</style>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { StepperDescriptionProps } from 'reka-ui'
|
|
3
|
+
import { StepperDescription } from 'reka-ui'
|
|
4
|
+
|
|
5
|
+
defineProps<StepperDescriptionProps>()
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<template>
|
|
9
|
+
<StepperDescription
|
|
10
|
+
v-bind="$attrs"
|
|
11
|
+
:class="[
|
|
12
|
+
'ui-stepper-description',
|
|
13
|
+
'transition-all duration-200',
|
|
14
|
+
]"
|
|
15
|
+
>
|
|
16
|
+
<slot />
|
|
17
|
+
</StepperDescription>
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
<style scoped>
|
|
21
|
+
@reference '@livestorm/ui-tokens/output/supernova/index.css';
|
|
22
|
+
|
|
23
|
+
.ui-stepper-description {
|
|
24
|
+
@apply max-w-60 truncate;
|
|
25
|
+
@apply text-content-text-md-regular text-text-neutral-tertiary block;
|
|
26
|
+
}
|
|
27
|
+
</style>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { StepperIndicatorProps } from 'reka-ui'
|
|
3
|
+
import { StepperIndicator } from 'reka-ui'
|
|
4
|
+
|
|
5
|
+
type Size = 'sm' | 'md' | 'lg'
|
|
6
|
+
|
|
7
|
+
interface UiStepperIndicatorProps extends StepperIndicatorProps {
|
|
8
|
+
size?: Size
|
|
9
|
+
showCheckmark?: boolean
|
|
10
|
+
icon?: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const { size = 'md', showCheckmark = true, icon } = defineProps<UiStepperIndicatorProps>()
|
|
14
|
+
|
|
15
|
+
const sizeClasses = {
|
|
16
|
+
sm: 'size-6 text-content-text-md-regular',
|
|
17
|
+
md: 'size-8 text-content-text-md-regular',
|
|
18
|
+
lg: 'size-10 text-content-text-lg-regular',
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const iconSizeClasses = {
|
|
22
|
+
sm: 'size-3',
|
|
23
|
+
md: 'size-4',
|
|
24
|
+
lg: 'size-5',
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<StepperIndicator
|
|
30
|
+
v-bind="$attrs"
|
|
31
|
+
class="stepper-indicator"
|
|
32
|
+
:class="sizeClasses[size]"
|
|
33
|
+
>
|
|
34
|
+
<span
|
|
35
|
+
v-if="icon"
|
|
36
|
+
class="stepper-custom-icon"
|
|
37
|
+
:class="[iconSizeClasses[size], icon]"
|
|
38
|
+
/>
|
|
39
|
+
|
|
40
|
+
<span
|
|
41
|
+
v-if="showCheckmark"
|
|
42
|
+
class="stepper-checkmark i-ls-check"
|
|
43
|
+
:class="iconSizeClasses[size]"
|
|
44
|
+
/>
|
|
45
|
+
|
|
46
|
+
<span class="stepper-number">
|
|
47
|
+
<slot />
|
|
48
|
+
</span>
|
|
49
|
+
</StepperIndicator>
|
|
50
|
+
</template>
|
|
51
|
+
|
|
52
|
+
<style>
|
|
53
|
+
@reference '@livestorm/ui-tokens/output/supernova/index.css';
|
|
54
|
+
|
|
55
|
+
.stepper-indicator {
|
|
56
|
+
@apply flex items-center justify-center shrink-0;
|
|
57
|
+
@apply rounded-full;
|
|
58
|
+
@apply transition-all duration-200 font-semibold;
|
|
59
|
+
@apply bg-surface-neutral-alpha-200 text-text-neutral-base;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
[data-state="active"] .stepper-indicator {
|
|
63
|
+
@apply bg-surface-primary-bg-alpha text-text-neutral-invert-base;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.stepper-custom-icon {
|
|
67
|
+
@apply block;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
[data-state="completed"] .stepper-custom-icon {
|
|
71
|
+
@apply hidden;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.stepper-custom-icon ~ .stepper-number {
|
|
75
|
+
@apply hidden;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
[data-state="completed"] .stepper-custom-icon ~ .stepper-number {
|
|
79
|
+
@apply block;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.stepper-checkmark {
|
|
83
|
+
@apply hidden;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[data-state="completed"] .stepper-checkmark {
|
|
87
|
+
@apply block;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
[data-state="completed"] .stepper-number {
|
|
91
|
+
@apply hidden;
|
|
92
|
+
}
|
|
93
|
+
</style>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { StepperItemProps } from 'reka-ui'
|
|
3
|
+
import { StepperItem } from 'reka-ui'
|
|
4
|
+
|
|
5
|
+
interface UiStepperItemProps extends StepperItemProps {
|
|
6
|
+
showSeparator?: boolean
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
withDefaults(defineProps<UiStepperItemProps>(), {
|
|
10
|
+
showSeparator: true,
|
|
11
|
+
})
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<template>
|
|
15
|
+
<StepperItem
|
|
16
|
+
v-bind="$attrs"
|
|
17
|
+
:step="step"
|
|
18
|
+
:disabled="disabled"
|
|
19
|
+
class="ui-stepper-item"
|
|
20
|
+
>
|
|
21
|
+
<slot />
|
|
22
|
+
</StepperItem>
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<style>
|
|
26
|
+
@reference '@livestorm/ui-tokens/output/supernova/index.css';
|
|
27
|
+
.ui-stepper-item {
|
|
28
|
+
@apply relative;
|
|
29
|
+
}
|
|
30
|
+
</style>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { StepperSeparatorProps } from 'reka-ui'
|
|
3
|
+
import { StepperSeparator } from 'reka-ui'
|
|
4
|
+
import { inject, computed, unref, type Ref } from 'vue'
|
|
5
|
+
|
|
6
|
+
type Orientation = 'horizontal' | 'vertical'
|
|
7
|
+
|
|
8
|
+
interface UiStepperSeparatorProps extends StepperSeparatorProps {
|
|
9
|
+
orientation?: Orientation
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const props = withDefaults(defineProps<UiStepperSeparatorProps>(), {
|
|
13
|
+
orientation: undefined,
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
// Inject orientation from parent Stepper, fallback to prop, then default to 'vertical'
|
|
17
|
+
const injectedOrientation = inject<Ref<Orientation>>('stepperOrientation')
|
|
18
|
+
const orientation = computed(() => props.orientation || unref(injectedOrientation) || 'vertical')
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<div
|
|
23
|
+
class="flex justify-center h-full"
|
|
24
|
+
:class="{
|
|
25
|
+
'w-full': orientation === 'horizontal',
|
|
26
|
+
'size-8': orientation === 'vertical',
|
|
27
|
+
}"
|
|
28
|
+
>
|
|
29
|
+
<StepperSeparator
|
|
30
|
+
v-bind="$attrs"
|
|
31
|
+
:class="[
|
|
32
|
+
'ui-stepper-separator',
|
|
33
|
+
'transition-colors duration-200',
|
|
34
|
+
{
|
|
35
|
+
'h-px w-full min-w-8': orientation === 'horizontal',
|
|
36
|
+
'w-px min-h-8': orientation === 'vertical',
|
|
37
|
+
}
|
|
38
|
+
]"
|
|
39
|
+
/>
|
|
40
|
+
</div>
|
|
41
|
+
</template>
|
|
42
|
+
|
|
43
|
+
<style scoped>
|
|
44
|
+
@reference '@livestorm/ui-tokens/output/supernova/index.css';
|
|
45
|
+
|
|
46
|
+
.ui-stepper-separator {
|
|
47
|
+
@apply bg-surface-neutral-alpha-400;
|
|
48
|
+
}
|
|
49
|
+
</style>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { StepperTitleProps } from 'reka-ui'
|
|
3
|
+
import { StepperTitle } from 'reka-ui'
|
|
4
|
+
|
|
5
|
+
defineProps<StepperTitleProps>()
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<template>
|
|
9
|
+
<StepperTitle
|
|
10
|
+
v-bind="$attrs"
|
|
11
|
+
:class="[
|
|
12
|
+
'ui-stepper-title',
|
|
13
|
+
]"
|
|
14
|
+
>
|
|
15
|
+
<slot />
|
|
16
|
+
</StepperTitle>
|
|
17
|
+
</template>
|
|
18
|
+
|
|
19
|
+
<style scoped>
|
|
20
|
+
@reference '@livestorm/ui-tokens/output/supernova/index.css';
|
|
21
|
+
.ui-stepper-title {
|
|
22
|
+
@apply text-content-text-lg-bold text-content-text-lg-bold text-text-neutral-secondary;
|
|
23
|
+
}
|
|
24
|
+
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { default as UiStepper } from './UiStepper.vue'
|
|
2
|
+
export { default as UiStepperItem } from './UiStepperItem.vue'
|
|
3
|
+
export { default as UiStepperIndicator } from './UiStepperIndicator.vue'
|
|
4
|
+
export { default as UiStepperTitle } from './UiStepperTitle.vue'
|
|
5
|
+
export { default as UiStepperDescription } from './UiStepperDescription.vue'
|
|
6
|
+
export { default as UiStepperSeparator } from './UiStepperSeparator.vue'
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
StepperTrigger,
|
|
10
|
+
type StepperRootProps,
|
|
11
|
+
type StepperRootEmits,
|
|
12
|
+
type StepperItemProps,
|
|
13
|
+
type StepperIndicatorProps,
|
|
14
|
+
type StepperTitleProps,
|
|
15
|
+
type StepperDescriptionProps,
|
|
16
|
+
type StepperSeparatorProps,
|
|
17
|
+
} from 'reka-ui'
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { provide, toRef } from 'vue'
|
|
3
|
+
|
|
4
|
+
export interface UiTableProps {
|
|
5
|
+
variant?: 'condensed' | 'large'
|
|
6
|
+
hoverEffect?: boolean
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const props = withDefaults(defineProps<UiTableProps>(), {
|
|
10
|
+
variant: 'condensed',
|
|
11
|
+
hoverEffect: false,
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
provide('tableVariant', toRef(props, 'variant'))
|
|
15
|
+
provide('hoverEffect', toRef(props, 'hoverEffect'))
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<div class="w-full">
|
|
20
|
+
<table class="w-full border-separate border-spacing-0">
|
|
21
|
+
<slot />
|
|
22
|
+
</table>
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { inject, computed, unref, type Ref } from 'vue'
|
|
3
|
+
|
|
4
|
+
const variant = inject<Ref<'condensed' | 'large'>>('tableVariant')
|
|
5
|
+
const isEven = inject<boolean>('rowIsEven', false)
|
|
6
|
+
const hoverEffect = inject<Ref<boolean>>('hoverEffect')
|
|
7
|
+
|
|
8
|
+
const cellClasses = computed(() => ({
|
|
9
|
+
'h-10': unref(variant) === 'condensed',
|
|
10
|
+
'h-20': unref(variant) === 'large',
|
|
11
|
+
'bg-surface-neutral-alpha-100': isEven,
|
|
12
|
+
'group-hover:bg-surface-neutral-alpha-200': unref(hoverEffect) && isEven,
|
|
13
|
+
'group-hover:bg-surface-neutral-alpha-100': unref(hoverEffect) && !isEven,
|
|
14
|
+
'first:rounded-l-md': true,
|
|
15
|
+
'last:rounded-r-md': true,
|
|
16
|
+
}))
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<td
|
|
21
|
+
:class="cellClasses"
|
|
22
|
+
class="px-3 overflow-hidden text-ellipsis transition-colors"
|
|
23
|
+
>
|
|
24
|
+
<slot />
|
|
25
|
+
</td>
|
|
26
|
+
</template>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { inject, computed, unref, type Ref } from 'vue'
|
|
3
|
+
|
|
4
|
+
const variant = inject<Ref<'condensed' | 'large'>>('tableVariant')
|
|
5
|
+
|
|
6
|
+
const headerClasses = computed(() => ({
|
|
7
|
+
'h-10': unref(variant) === 'condensed',
|
|
8
|
+
'h-12': unref(variant) === 'large',
|
|
9
|
+
'sticky top-0 z-20': true,
|
|
10
|
+
}))
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<thead :class="headerClasses">
|
|
15
|
+
<slot />
|
|
16
|
+
</thead>
|
|
17
|
+
</template>
|