zabi-components 8.0.0 → 9.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/CHANGELOG.md +2935 -0
- package/README.md +243 -10
- package/THEME.md +162 -332
- package/THEMING.md +1419 -259
- package/dist/atoms/ActionPanel.svelte +15 -5
- package/dist/atoms/Avatar.svelte +120 -0
- package/dist/atoms/Avatar.svelte.d.ts +46 -0
- package/dist/atoms/Badge.svelte +71 -13
- package/dist/atoms/Badge.svelte.d.ts +8 -2
- package/dist/atoms/Block.svelte +74 -0
- package/dist/atoms/Block.svelte.d.ts +29 -0
- package/dist/atoms/Button.svelte +217 -30
- package/dist/atoms/Button.svelte.d.ts +33 -4
- package/dist/atoms/Card.svelte +182 -26
- package/dist/atoms/Card.svelte.d.ts +55 -3
- package/dist/atoms/CardHeader.svelte +16 -4
- package/dist/atoms/Checkbox.svelte +81 -21
- package/dist/atoms/Checkbox.svelte.d.ts +31 -2
- package/dist/atoms/Chip.svelte +351 -0
- package/dist/atoms/Chip.svelte.d.ts +57 -0
- package/dist/atoms/CodeBlock.svelte +20 -2
- package/dist/atoms/CodeBlock.svelte.d.ts +4 -0
- package/dist/atoms/CodeField.svelte +385 -0
- package/dist/atoms/CodeField.svelte.d.ts +61 -0
- package/dist/atoms/ColorPicker.svelte +260 -49
- package/dist/atoms/ColorPicker.svelte.d.ts +3 -0
- package/dist/atoms/Container.svelte +16 -8
- package/dist/atoms/DateField.svelte +145 -0
- package/dist/atoms/DateField.svelte.d.ts +81 -0
- package/dist/atoms/FieldMessages.svelte +69 -0
- package/dist/atoms/FieldMessages.svelte.d.ts +23 -0
- package/dist/atoms/FloatingActionButton.svelte +176 -0
- package/dist/atoms/FloatingActionButton.svelte.d.ts +51 -0
- package/dist/atoms/Heading.svelte +63 -5
- package/dist/atoms/Heading.svelte.d.ts +14 -0
- package/dist/atoms/IconButton.svelte +294 -26
- package/dist/atoms/IconButton.svelte.d.ts +62 -4
- package/dist/atoms/Input.svelte +259 -53
- package/dist/atoms/Input.svelte.d.ts +33 -2
- package/dist/atoms/List.svelte +5 -1
- package/dist/atoms/ListItem.svelte +70 -13
- package/dist/atoms/ListItem.svelte.d.ts +11 -0
- package/dist/atoms/PickerField.svelte +239 -0
- package/dist/atoms/PickerField.svelte.d.ts +67 -0
- package/dist/atoms/Progress.svelte +99 -19
- package/dist/atoms/Progress.svelte.d.ts +15 -1
- package/dist/atoms/Radio.svelte +51 -3
- package/dist/atoms/Radio.svelte.d.ts +30 -2
- package/dist/atoms/Rating.svelte +620 -0
- package/dist/atoms/Rating.svelte.d.ts +77 -0
- package/dist/atoms/Select.svelte +438 -98
- package/dist/atoms/Select.svelte.d.ts +61 -3
- package/dist/atoms/SelectionControl.svelte +193 -23
- package/dist/atoms/SelectionControl.svelte.d.ts +29 -3
- package/dist/atoms/Skeleton.svelte +114 -18
- package/dist/atoms/Skeleton.svelte.d.ts +30 -3
- package/dist/atoms/SkeletonGroup.svelte +43 -0
- package/dist/atoms/SkeletonGroup.svelte.d.ts +20 -0
- package/dist/atoms/Slider.svelte +344 -0
- package/dist/atoms/Slider.svelte.d.ts +40 -0
- package/dist/atoms/Sparkline.svelte +109 -0
- package/dist/atoms/Sparkline.svelte.d.ts +27 -0
- package/dist/atoms/SpeechBubble.svelte +187 -0
- package/dist/atoms/SpeechBubble.svelte.d.ts +33 -0
- package/dist/atoms/Spinner.svelte +57 -0
- package/dist/atoms/Spinner.svelte.d.ts +19 -0
- package/dist/atoms/Stat.svelte +72 -0
- package/dist/atoms/Stat.svelte.d.ts +19 -0
- package/dist/atoms/Table.svelte +151 -6
- package/dist/atoms/Table.svelte.d.ts +15 -3
- package/dist/atoms/TemporalField.svelte +472 -0
- package/dist/atoms/TemporalField.svelte.d.ts +48 -0
- package/dist/atoms/Text.svelte +23 -11
- package/dist/atoms/Text.svelte.d.ts +6 -3
- package/dist/atoms/Textarea.svelte +150 -44
- package/dist/atoms/Textarea.svelte.d.ts +35 -2
- package/dist/atoms/ThemeToggle.svelte +223 -44
- package/dist/atoms/ThemeToggle.svelte.d.ts +26 -3
- package/dist/atoms/TimeColumn.svelte +150 -0
- package/dist/atoms/TimeColumn.svelte.d.ts +25 -0
- package/dist/atoms/TimeField.svelte +151 -0
- package/dist/atoms/TimeField.svelte.d.ts +85 -0
- package/dist/atoms/Toast.svelte +22 -8
- package/dist/atoms/Toast.svelte.d.ts +2 -0
- package/dist/atoms/Toggle.svelte +98 -14
- package/dist/atoms/Toggle.svelte.d.ts +26 -2
- package/dist/atoms/Tooltip.svelte +528 -24
- package/dist/atoms/Tooltip.svelte.d.ts +18 -0
- package/dist/atoms/ZabiStringsProvider.svelte +45 -0
- package/dist/atoms/ZabiStringsProvider.svelte.d.ts +27 -0
- package/dist/atoms/index.d.ts +38 -0
- package/dist/atoms/index.js +29 -0
- package/dist/atoms/selection-control.styles.d.ts +47 -5
- package/dist/atoms/selection-control.styles.js +52 -10
- package/dist/components/atoms/index.d.ts +38 -0
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/selection-control.styles.d.ts +47 -5
- package/dist/components/atoms/selection-control.styles.d.ts.map +1 -1
- package/dist/components/index.d.ts +104 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/map.d.ts +11 -0
- package/dist/components/map.d.ts.map +1 -0
- package/dist/components/molecules/index.d.ts +51 -0
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/toast-store.d.ts +83 -7
- package/dist/components/molecules/toast-store.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +10 -0
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/types/variants.d.ts +24 -1
- package/dist/components/types/variants.d.ts.map +1 -1
- package/dist/components/util/app-shell.d.ts +79 -0
- package/dist/components/util/app-shell.d.ts.map +1 -0
- package/dist/components/util/avatar.d.ts +39 -0
- package/dist/components/util/avatar.d.ts.map +1 -0
- package/dist/components/util/bottom-sheet.d.ts +30 -0
- package/dist/components/util/bottom-sheet.d.ts.map +1 -0
- package/dist/components/util/bottom-tab-bar.d.ts +41 -0
- package/dist/components/util/bottom-tab-bar.d.ts.map +1 -0
- package/dist/components/util/calendar.d.ts +56 -0
- package/dist/components/util/calendar.d.ts.map +1 -0
- package/dist/components/util/chart.d.ts +140 -0
- package/dist/components/util/chart.d.ts.map +1 -0
- package/dist/components/util/chip.d.ts +66 -0
- package/dist/components/util/chip.d.ts.map +1 -0
- package/dist/components/util/cn.d.ts.map +1 -1
- package/dist/components/util/code-field.d.ts +63 -0
- package/dist/components/util/code-field.d.ts.map +1 -0
- package/dist/components/util/collapsible.d.ts +64 -0
- package/dist/components/util/collapsible.d.ts.map +1 -0
- package/dist/components/util/confirm-dialog.d.ts +12 -0
- package/dist/components/util/confirm-dialog.d.ts.map +1 -0
- package/dist/components/util/date.d.ts +96 -0
- package/dist/components/util/date.d.ts.map +1 -0
- package/dist/components/util/display-voice.d.ts +10 -0
- package/dist/components/util/display-voice.d.ts.map +1 -0
- package/dist/components/util/drawer.d.ts +13 -0
- package/dist/components/util/drawer.d.ts.map +1 -0
- package/dist/components/util/dropdown.d.ts +47 -0
- package/dist/components/util/dropdown.d.ts.map +1 -0
- package/dist/components/util/field-control.d.ts +30 -0
- package/dist/components/util/field-control.d.ts.map +1 -0
- package/dist/components/util/field.d.ts +45 -0
- package/dist/components/util/field.d.ts.map +1 -0
- package/dist/components/util/fit-in-viewport.d.ts +201 -0
- package/dist/components/util/fit-in-viewport.d.ts.map +1 -0
- package/dist/components/util/focus-utils.d.ts +77 -2
- package/dist/components/util/focus-utils.d.ts.map +1 -1
- package/dist/components/util/hydration.d.ts +45 -0
- package/dist/components/util/hydration.d.ts.map +1 -0
- package/dist/components/util/keyboard-inset.d.ts +18 -0
- package/dist/components/util/keyboard-inset.d.ts.map +1 -0
- package/dist/components/util/map-view.d.ts +144 -0
- package/dist/components/util/map-view.d.ts.map +1 -0
- package/dist/components/util/media-grid.d.ts +51 -0
- package/dist/components/util/media-grid.d.ts.map +1 -0
- package/dist/components/util/media.d.ts +6 -0
- package/dist/components/util/media.d.ts.map +1 -0
- package/dist/components/util/overlay-chrome.d.ts +53 -0
- package/dist/components/util/overlay-chrome.d.ts.map +1 -0
- package/dist/components/util/overlay.d.ts +72 -0
- package/dist/components/util/overlay.d.ts.map +1 -0
- package/dist/components/util/photo.d.ts +234 -0
- package/dist/components/util/photo.d.ts.map +1 -0
- package/dist/components/util/portal.d.ts +23 -0
- package/dist/components/util/portal.d.ts.map +1 -0
- package/dist/components/util/progress.d.ts +19 -0
- package/dist/components/util/progress.d.ts.map +1 -0
- package/dist/components/util/pull-to-refresh.d.ts +27 -0
- package/dist/components/util/pull-to-refresh.d.ts.map +1 -0
- package/dist/components/util/radio-keys.d.ts +25 -0
- package/dist/components/util/radio-keys.d.ts.map +1 -0
- package/dist/components/util/rating.d.ts +23 -0
- package/dist/components/util/rating.d.ts.map +1 -0
- package/dist/components/util/ready-made-strings.d.ts +77 -0
- package/dist/components/util/ready-made-strings.d.ts.map +1 -0
- package/dist/components/util/scroll-edge.d.ts +33 -0
- package/dist/components/util/scroll-edge.d.ts.map +1 -0
- package/dist/components/util/scroll-padding.d.ts +20 -0
- package/dist/components/util/scroll-padding.d.ts.map +1 -0
- package/dist/components/util/segmented-control.d.ts +16 -0
- package/dist/components/util/segmented-control.d.ts.map +1 -0
- package/dist/components/util/select.d.ts +41 -0
- package/dist/components/util/select.d.ts.map +1 -0
- package/dist/components/util/sheet-drag.d.ts +84 -0
- package/dist/components/util/sheet-drag.d.ts.map +1 -0
- package/dist/components/util/sidebar.d.ts +63 -0
- package/dist/components/util/sidebar.d.ts.map +1 -0
- package/dist/components/util/skeleton.d.ts +15 -0
- package/dist/components/util/skeleton.d.ts.map +1 -0
- package/dist/components/util/sliding-indicator.d.ts +25 -0
- package/dist/components/util/sliding-indicator.d.ts.map +1 -0
- package/dist/components/util/sortable-list.d.ts +65 -0
- package/dist/components/util/sortable-list.d.ts.map +1 -0
- package/dist/components/util/stepper.d.ts +40 -0
- package/dist/components/util/stepper.d.ts.map +1 -0
- package/dist/components/util/swipeable-list-item.d.ts +36 -0
- package/dist/components/util/swipeable-list-item.d.ts.map +1 -0
- package/dist/components/util/temporal-field.d.ts +89 -0
- package/dist/components/util/temporal-field.d.ts.map +1 -0
- package/dist/components/util/theme-mode.d.ts +80 -0
- package/dist/components/util/theme-mode.d.ts.map +1 -0
- package/dist/components/util/toaster.d.ts +133 -0
- package/dist/components/util/toaster.d.ts.map +1 -0
- package/dist/components/util/tone-surface.d.ts +34 -0
- package/dist/components/util/tone-surface.d.ts.map +1 -0
- package/dist/components/util/tooltip.d.ts +10 -0
- package/dist/components/util/tooltip.d.ts.map +1 -0
- package/dist/components/util/top-navbar.d.ts +35 -0
- package/dist/components/util/top-navbar.d.ts.map +1 -0
- package/dist/components/util/touch-target.d.ts +31 -0
- package/dist/components/util/touch-target.d.ts.map +1 -0
- package/dist/components/util/zabi-strings.d.ts +142 -0
- package/dist/components/util/zabi-strings.d.ts.map +1 -0
- package/dist/create-theme/cli.js +173 -0
- package/dist/create-theme/index.d.ts +190 -0
- package/dist/create-theme/index.js +1034 -0
- package/dist/create-theme/lib/ramp-math.js +128 -0
- package/dist/create-theme/lib/resolve.js +238 -0
- package/dist/create-theme/theme-data.js +2644 -0
- package/dist/index.d.ts +104 -2
- package/dist/index.js +75 -2
- package/dist/map.d.ts +10 -0
- package/dist/map.js +9 -0
- package/dist/molecules/Alert.svelte +63 -16
- package/dist/molecules/Alert.svelte.d.ts +14 -1
- package/dist/molecules/AppBar.svelte +674 -0
- package/dist/molecules/AppBar.svelte.d.ts +131 -0
- package/dist/molecules/AvatarGroup.svelte +116 -0
- package/dist/molecules/AvatarGroup.svelte.d.ts +40 -0
- package/dist/molecules/BarChart.svelte +381 -0
- package/dist/molecules/BarChart.svelte.d.ts +45 -0
- package/dist/molecules/BottomSheet.svelte +608 -0
- package/dist/molecules/BottomSheet.svelte.d.ts +109 -0
- package/dist/molecules/BottomTabBar.svelte +403 -0
- package/dist/molecules/BottomTabBar.svelte.d.ts +98 -0
- package/dist/molecules/Calendar.svelte +597 -0
- package/dist/molecules/Calendar.svelte.d.ts +72 -0
- package/dist/molecules/ChipGroup.svelte +325 -0
- package/dist/molecules/ChipGroup.svelte.d.ts +41 -0
- package/dist/molecules/Collapsible.svelte +347 -0
- package/dist/molecules/Collapsible.svelte.d.ts +61 -0
- package/dist/molecules/CollapsibleGroup.svelte +136 -0
- package/dist/molecules/CollapsibleGroup.svelte.d.ts +14 -0
- package/dist/molecules/ComponentDemo.svelte +16 -4
- package/dist/molecules/ComponentDemo.svelte.d.ts +3 -0
- package/dist/molecules/ConfirmDialog.svelte +257 -0
- package/dist/molecules/ConfirmDialog.svelte.d.ts +58 -0
- package/dist/molecules/ContactForm.svelte +34 -17
- package/dist/molecules/ContactForm.svelte.d.ts +8 -0
- package/dist/molecules/Drawer.svelte +415 -0
- package/dist/molecules/Drawer.svelte.d.ts +55 -0
- package/dist/molecules/Dropdown.svelte +517 -48
- package/dist/molecules/Dropdown.svelte.d.ts +47 -6
- package/dist/molecules/DropdownItem.svelte +122 -0
- package/dist/molecules/DropdownItem.svelte.d.ts +28 -0
- package/dist/molecules/EmptyState.svelte +55 -10
- package/dist/molecules/EmptyState.svelte.d.ts +8 -0
- package/dist/molecules/FormField.svelte +9 -1
- package/dist/molecules/FormField.svelte.d.ts +2 -0
- package/dist/molecules/Header.svelte +1 -1
- package/dist/molecules/ImageUpload.svelte +492 -69
- package/dist/molecules/ImageUpload.svelte.d.ts +82 -2
- package/dist/molecules/LineChart.svelte +459 -0
- package/dist/molecules/LineChart.svelte.d.ts +53 -0
- package/dist/molecules/MapView.svelte +565 -0
- package/dist/molecules/MapView.svelte.d.ts +88 -0
- package/dist/molecules/MediaGrid.svelte +527 -0
- package/dist/molecules/MediaGrid.svelte.d.ts +77 -0
- package/dist/molecules/Modal.svelte +293 -72
- package/dist/molecules/Modal.svelte.d.ts +51 -2
- package/dist/molecules/NavigationMenuContent.svelte +58 -1
- package/dist/molecules/NavigationMenuItem.svelte +0 -1
- package/dist/molecules/NavigationMenuLink.svelte +1 -1
- package/dist/molecules/NavigationMenuList.svelte +10 -3
- package/dist/molecules/NavigationMenuTrigger.svelte +2 -2
- package/dist/molecules/Page.svelte +32 -2
- package/dist/molecules/Page.svelte.d.ts +11 -0
- package/dist/molecules/PhotoGrid.svelte +523 -0
- package/dist/molecules/PhotoGrid.svelte.d.ts +73 -0
- package/dist/molecules/PhotoViewer.svelte +1213 -0
- package/dist/molecules/PhotoViewer.svelte.d.ts +74 -0
- package/dist/molecules/PieChart.svelte +421 -0
- package/dist/molecules/PieChart.svelte.d.ts +51 -0
- package/dist/molecules/PropsTable.svelte +22 -10
- package/dist/molecules/PropsTable.svelte.d.ts +3 -0
- package/dist/molecules/PullToRefresh.svelte +263 -0
- package/dist/molecules/PullToRefresh.svelte.d.ts +52 -0
- package/dist/molecules/RadioGroup.svelte +72 -18
- package/dist/molecules/RadioGroup.svelte.d.ts +19 -3
- package/dist/molecules/Section.svelte +1 -1
- package/dist/molecules/SegmentedControl.svelte +456 -0
- package/dist/molecules/SegmentedControl.svelte.d.ts +40 -0
- package/dist/molecules/SidebarBrandHeader.svelte +11 -1
- package/dist/molecules/SidebarBrandHeader.svelte.d.ts +3 -0
- package/dist/molecules/SidebarFooter.svelte +30 -7
- package/dist/molecules/SidebarFooter.svelte.d.ts +3 -0
- package/dist/molecules/SidebarNavSection.svelte +1 -1
- package/dist/molecules/SlideUp.svelte +220 -61
- package/dist/molecules/SlideUp.svelte.d.ts +26 -0
- package/dist/molecules/SortableList.svelte +633 -0
- package/dist/molecules/SortableList.svelte.d.ts +69 -0
- package/dist/molecules/Stepper.svelte +562 -0
- package/dist/molecules/Stepper.svelte.d.ts +39 -0
- package/dist/molecules/StickyActionBar.svelte +250 -0
- package/dist/molecules/StickyActionBar.svelte.d.ts +78 -0
- package/dist/molecules/SwipeableListItem.svelte +334 -0
- package/dist/molecules/SwipeableListItem.svelte.d.ts +54 -0
- package/dist/molecules/Tabs.svelte +310 -9
- package/dist/molecules/Tabs.svelte.d.ts +7 -0
- package/dist/molecules/Toaster.svelte +514 -5
- package/dist/molecules/Toaster.svelte.d.ts +153 -2
- package/dist/molecules/ToasterToast.svelte +495 -77
- package/dist/molecules/ToasterToast.svelte.d.ts +15 -0
- package/dist/molecules/UnsavedChangesBar.svelte +223 -0
- package/dist/molecules/UnsavedChangesBar.svelte.d.ts +43 -0
- package/dist/molecules/index.d.ts +51 -0
- package/dist/molecules/index.js +31 -0
- package/dist/molecules/toast-store.d.ts +83 -7
- package/dist/molecules/toast-store.js +25 -1
- package/dist/organisms/AppNavigation.svelte +440 -0
- package/dist/organisms/AppNavigation.svelte.d.ts +72 -0
- package/dist/organisms/AppShell.svelte +696 -0
- package/dist/organisms/AppShell.svelte.d.ts +157 -0
- package/dist/organisms/AppShellHeaderPart.svelte +163 -0
- package/dist/organisms/AppShellHeaderPart.svelte.d.ts +57 -0
- package/dist/organisms/SidebarAccountPanel.svelte +107 -12
- package/dist/organisms/SidebarAccountPanel.svelte.d.ts +19 -0
- package/dist/organisms/SidebarNavigation.svelte +111 -43
- package/dist/organisms/SidebarNavigation.svelte.d.ts +29 -1
- package/dist/organisms/SidebarPanel.svelte +34 -17
- package/dist/organisms/SidebarPanel.svelte.d.ts +1 -0
- package/dist/organisms/SidebarShell.svelte +164 -14
- package/dist/organisms/SidebarShell.svelte.d.ts +56 -2
- package/dist/organisms/TopNavbar.svelte +353 -39
- package/dist/organisms/TopNavbar.svelte.d.ts +47 -0
- package/dist/organisms/TopNavbarSheetContent.svelte +145 -0
- package/dist/organisms/TopNavbarSheetContent.svelte.d.ts +24 -0
- package/dist/organisms/index.d.ts +10 -0
- package/dist/organisms/index.js +7 -0
- package/dist/types/components.d.ts +21 -1
- package/dist/types/components.d.ts.map +1 -1
- package/dist/types/index.d.ts +1093 -26
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/variants.ts +28 -1
- package/dist/util/app-shell.d.ts +78 -0
- package/dist/util/app-shell.js +97 -0
- package/dist/util/avatar.d.ts +38 -0
- package/dist/util/avatar.js +52 -0
- package/dist/util/bottom-sheet.d.ts +29 -0
- package/dist/util/bottom-sheet.js +43 -0
- package/dist/util/bottom-tab-bar.d.ts +40 -0
- package/dist/util/bottom-tab-bar.js +54 -0
- package/dist/util/calendar.d.ts +55 -0
- package/dist/util/calendar.js +74 -0
- package/dist/util/chart.d.ts +139 -0
- package/dist/util/chart.js +305 -0
- package/dist/util/chip.d.ts +65 -0
- package/dist/util/chip.js +58 -0
- package/dist/util/cn.js +28 -2
- package/dist/util/code-field.d.ts +62 -0
- package/dist/util/code-field.js +112 -0
- package/dist/util/collapsible.d.ts +63 -0
- package/dist/util/collapsible.js +23 -0
- package/dist/util/confirm-dialog.d.ts +11 -0
- package/dist/util/confirm-dialog.js +2 -0
- package/dist/util/date.d.ts +95 -0
- package/dist/util/date.js +237 -0
- package/dist/util/display-voice.d.ts +9 -0
- package/dist/util/display-voice.js +9 -0
- package/dist/util/drawer.d.ts +12 -0
- package/dist/util/drawer.js +7 -0
- package/dist/util/dropdown.d.ts +46 -0
- package/dist/util/dropdown.js +21 -0
- package/dist/util/field-control.d.ts +29 -0
- package/dist/util/field-control.js +32 -0
- package/dist/util/field.d.ts +44 -0
- package/dist/util/field.js +38 -0
- package/dist/util/fit-in-viewport.d.ts +200 -0
- package/dist/util/fit-in-viewport.js +399 -0
- package/dist/util/focus-utils.d.ts +77 -2
- package/dist/util/focus-utils.js +186 -9
- package/dist/util/hydration.d.ts +44 -0
- package/dist/util/hydration.js +58 -0
- package/dist/util/keyboard-inset.d.ts +17 -0
- package/dist/util/keyboard-inset.js +53 -0
- package/dist/util/map-view.d.ts +143 -0
- package/dist/util/map-view.js +121 -0
- package/dist/util/media-grid.d.ts +50 -0
- package/dist/util/media-grid.js +81 -0
- package/dist/util/media.d.ts +5 -0
- package/dist/util/media.js +10 -0
- package/dist/util/overlay-chrome.d.ts +52 -0
- package/dist/util/overlay-chrome.js +56 -0
- package/dist/util/overlay.d.ts +71 -0
- package/dist/util/overlay.js +240 -0
- package/dist/util/photo.d.ts +233 -0
- package/dist/util/photo.js +209 -0
- package/dist/util/portal.d.ts +22 -0
- package/dist/util/portal.js +50 -0
- package/dist/util/progress.d.ts +18 -0
- package/dist/util/progress.js +17 -0
- package/dist/util/pull-to-refresh.d.ts +26 -0
- package/dist/util/pull-to-refresh.js +30 -0
- package/dist/util/radio-keys.d.ts +24 -0
- package/dist/util/radio-keys.js +49 -0
- package/dist/util/rating.d.ts +22 -0
- package/dist/util/rating.js +26 -0
- package/dist/util/ready-made-strings.d.ts +76 -0
- package/dist/util/ready-made-strings.js +67 -0
- package/dist/util/scroll-edge.d.ts +32 -0
- package/dist/util/scroll-edge.js +87 -0
- package/dist/util/scroll-padding.d.ts +19 -0
- package/dist/util/scroll-padding.js +44 -0
- package/dist/util/segmented-control.d.ts +15 -0
- package/dist/util/segmented-control.js +1 -0
- package/dist/util/select.d.ts +40 -0
- package/dist/util/select.js +63 -0
- package/dist/util/sheet-drag.d.ts +83 -0
- package/dist/util/sheet-drag.js +311 -0
- package/dist/util/sidebar.d.ts +62 -0
- package/dist/util/sidebar.js +38 -0
- package/dist/util/skeleton.d.ts +14 -0
- package/dist/util/skeleton.js +22 -0
- package/dist/util/sliding-indicator.d.ts +24 -0
- package/dist/util/sliding-indicator.js +44 -0
- package/dist/util/sortable-list.d.ts +64 -0
- package/dist/util/sortable-list.js +53 -0
- package/dist/util/stepper.d.ts +39 -0
- package/dist/util/stepper.js +38 -0
- package/dist/util/swipeable-list-item.d.ts +35 -0
- package/dist/util/swipeable-list-item.js +32 -0
- package/dist/util/temporal-field.d.ts +88 -0
- package/dist/util/temporal-field.js +136 -0
- package/dist/util/theme-mode.d.ts +79 -0
- package/dist/util/theme-mode.js +121 -0
- package/dist/util/toaster.d.ts +132 -0
- package/dist/util/toaster.js +130 -0
- package/dist/util/tone-surface.d.ts +33 -0
- package/dist/util/tone-surface.js +35 -0
- package/dist/util/tooltip.d.ts +9 -0
- package/dist/util/tooltip.js +18 -0
- package/dist/util/top-navbar.d.ts +34 -0
- package/dist/util/top-navbar.js +28 -0
- package/dist/util/touch-target.d.ts +30 -0
- package/dist/util/touch-target.js +30 -0
- package/dist/util/zabi-strings.d.ts +141 -0
- package/dist/util/zabi-strings.js +105 -0
- package/dist/zabi-components-colors.css +11 -2
- package/dist/zabi-components-theme-dark-only.css +870 -258
- package/dist/zabi-components-theme-dark.css +870 -258
- package/dist/zabi-components-theme-only.css +2419 -368
- package/dist/zabi-components-theme.css +2419 -368
- package/dist/zabi-components.css +6032 -711
- package/docs/lucide-icons.md +40 -17
- package/docs/theme-imports.md +81 -11
- package/package.json +45 -8
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { zabiCommonStrings } from "../util/zabi-strings.js";
|
|
2
3
|
import type { Snippet } from "svelte";
|
|
3
4
|
import type { HTMLAttributes } from "svelte/elements";
|
|
5
|
+
import Drawer from "../molecules/Drawer.svelte";
|
|
4
6
|
import { cn } from "../util/cn.js";
|
|
7
|
+
import type { DrawerCloseReason } from "../util/drawer.js";
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
10
|
* The chrome of a sidebar and nothing else: width, surface, collapse
|
|
@@ -28,8 +31,37 @@
|
|
|
28
31
|
* {/snippet}
|
|
29
32
|
* </SidebarShell>
|
|
30
33
|
* ```
|
|
34
|
+
*
|
|
35
|
+
* A sidebar is 266px wide, which a phone does not have beside its
|
|
36
|
+
* content. With `mobile="drawer"` the rail is only there from the `lg`
|
|
37
|
+
* breakpoint (1024px) up; below it the same regions open in a Drawer from
|
|
38
|
+
* the start edge, with the Drawer's focus trap, Escape and backdrop:
|
|
39
|
+
*
|
|
40
|
+
* ```svelte
|
|
41
|
+
* <SidebarShell mobile="drawer" bind:isOpen drawerTitle="Menu">
|
|
42
|
+
* {#snippet trigger({ props, toggle })}
|
|
43
|
+
* <IconButton label="Menu" onclick={toggle} {...props}><Menu /></IconButton>
|
|
44
|
+
* {/snippet}
|
|
45
|
+
* …
|
|
46
|
+
* </SidebarShell>
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* `trigger` is rendered where the rail would be, below `lg` only; leave
|
|
50
|
+
* it out and open the drawer from a button of your own by setting
|
|
51
|
+
* `isOpen`. The drawer closes when a link in it is followed.
|
|
31
52
|
*/
|
|
32
53
|
|
|
54
|
+
/** What the `trigger` snippet gets. */
|
|
55
|
+
export interface SidebarTriggerContext {
|
|
56
|
+
isOpen: boolean;
|
|
57
|
+
toggle: () => void;
|
|
58
|
+
/** Spread on the button: it says what the button opens, and whether it is open. */
|
|
59
|
+
props: { "aria-haspopup": "dialog"; "aria-expanded": boolean };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** What closed the drawer: the user, a link that was followed, or the screen reaching `lg`. */
|
|
63
|
+
export type SidebarDrawerCloseReason = DrawerCloseReason | "navigate" | "resize";
|
|
64
|
+
|
|
33
65
|
/** Passed to every region so it can match the shell's collapse and inset. */
|
|
34
66
|
export interface SidebarRegionContext {
|
|
35
67
|
collapsed: boolean;
|
|
@@ -37,11 +69,34 @@
|
|
|
37
69
|
insetX: string;
|
|
38
70
|
}
|
|
39
71
|
|
|
40
|
-
|
|
72
|
+
// `children` here is a snippet that takes the region context; the one in
|
|
73
|
+
// `HTMLAttributes` takes nothing, and the two together accepted neither.
|
|
74
|
+
type Props = Omit<HTMLAttributes<HTMLElement>, "class" | "onclose" | "children"> & {
|
|
41
75
|
mode?: "expanded" | "collapsed";
|
|
42
76
|
/** `rail` attaches to the viewport edge; `card` is a floating panel. */
|
|
43
77
|
layout?: "rail" | "card";
|
|
44
78
|
ariaLabel?: string;
|
|
79
|
+
/** Accessible name of the scrolling region between header and footer. */
|
|
80
|
+
label?: string;
|
|
81
|
+
/**
|
|
82
|
+
* What the sidebar is below the `lg` breakpoint. `none`: the rail, as
|
|
83
|
+
* everywhere. `drawer`: the rail is hidden there and its regions open
|
|
84
|
+
* in a Drawer from the start edge instead.
|
|
85
|
+
*/
|
|
86
|
+
mobile?: "none" | "drawer";
|
|
87
|
+
/** Whether the drawer is open. Bindable. Only used with `mobile="drawer"`. */
|
|
88
|
+
isOpen?: boolean;
|
|
89
|
+
/** Heading of the drawer, and its accessible name. Without it, `ariaLabel` is. */
|
|
90
|
+
drawerTitle?: string;
|
|
91
|
+
/** Accessible name of the drawer's close button. */
|
|
92
|
+
closeLabel?: string;
|
|
93
|
+
/** Fired when the drawer closes itself, with why. */
|
|
94
|
+
onclose?: (detail: { reason: SidebarDrawerCloseReason }) => void;
|
|
95
|
+
/**
|
|
96
|
+
* The button that opens the drawer, rendered in the rail's place below
|
|
97
|
+
* `lg`. Optional: a button anywhere that sets `isOpen` does the same.
|
|
98
|
+
*/
|
|
99
|
+
trigger?: Snippet<[SidebarTriggerContext]>;
|
|
45
100
|
class?: string;
|
|
46
101
|
/** @deprecated use `class`. */
|
|
47
102
|
className?: string;
|
|
@@ -57,6 +112,13 @@
|
|
|
57
112
|
mode = "expanded",
|
|
58
113
|
layout = "rail",
|
|
59
114
|
ariaLabel = "Sidebar navigation",
|
|
115
|
+
label = "Navigation links",
|
|
116
|
+
mobile = "none",
|
|
117
|
+
isOpen = $bindable<Exclude<Props["isOpen"], undefined>>(),
|
|
118
|
+
drawerTitle = undefined,
|
|
119
|
+
closeLabel: closeLabelGiven,
|
|
120
|
+
onclose,
|
|
121
|
+
trigger,
|
|
60
122
|
class: classAttr = "",
|
|
61
123
|
className: legacyClass = "",
|
|
62
124
|
header,
|
|
@@ -65,6 +127,21 @@
|
|
|
65
127
|
...restProps
|
|
66
128
|
}: Props = $props();
|
|
67
129
|
|
|
130
|
+
// No fallback on a bindable prop: Svelte refuses `bind:…={undefined}` on
|
|
131
|
+
// one that has a fallback (`props_invalid_value`), and a page that throws
|
|
132
|
+
// while it hydrates never becomes interactive. The default is applied
|
|
133
|
+
// here instead: at once, for the server and the first render, and again
|
|
134
|
+
// whenever a parent hands back `undefined`.
|
|
135
|
+
const applyDefaults = () => {
|
|
136
|
+
if (isOpen === undefined) isOpen = false;
|
|
137
|
+
};
|
|
138
|
+
applyDefaults();
|
|
139
|
+
$effect.pre(applyDefaults);
|
|
140
|
+
|
|
141
|
+
/** Words many components share: a `ZabiStringsProvider` above this one may give them; else English. */
|
|
142
|
+
const common = zabiCommonStrings();
|
|
143
|
+
const closeLabel = $derived(closeLabelGiven ?? common().close);
|
|
144
|
+
|
|
68
145
|
const className = $derived(cn(classAttr, legacyClass));
|
|
69
146
|
const isCollapsed = $derived(mode === "collapsed");
|
|
70
147
|
const isCard = $derived(layout === "card");
|
|
@@ -73,40 +150,113 @@
|
|
|
73
150
|
|
|
74
151
|
const containerClasses = $derived.by(() => {
|
|
75
152
|
const widthClass = isCollapsed ? "w-[72px]" : "w-[266px]";
|
|
76
|
-
const railSurface = "border-r border-border bg-
|
|
77
|
-
const cardSurface =
|
|
78
|
-
"border-r border-border bg-background text-headline shadow-sm";
|
|
153
|
+
const railSurface = "border-r border-border-weak bg-surface-chrome text-headline";
|
|
154
|
+
const cardSurface = "border-r border-border-weak bg-surface-chrome text-headline";
|
|
79
155
|
const surfaceClasses = isCard ? cardSurface : railSurface;
|
|
80
156
|
const verticalPad = isCard ? "py-4" : "py-5";
|
|
81
|
-
|
|
157
|
+
// `flex` and `max-lg:hidden` must not both apply below `lg`: with
|
|
158
|
+
// the drawer mode the rail is a flex box from `lg` up only.
|
|
159
|
+
const display = asDrawer ? "hidden lg:flex" : "flex";
|
|
160
|
+
const baseClasses = `${display} h-full min-h-0 max-h-full flex-col overflow-visible ${verticalPad}`;
|
|
82
161
|
|
|
83
162
|
return cn(`${baseClasses} ${widthClass} ${surfaceClasses} ${className}`);
|
|
84
163
|
});
|
|
85
164
|
|
|
86
165
|
const region = $derived({ collapsed: isCollapsed, insetX });
|
|
166
|
+
|
|
167
|
+
const asDrawer = $derived(mobile === "drawer");
|
|
168
|
+
/** In the drawer the sidebar is always spelled out, and the drawer's own padding is the inset. */
|
|
169
|
+
const drawerRegion: SidebarRegionContext = { collapsed: false, insetX: "px-0" };
|
|
170
|
+
|
|
171
|
+
function closeDrawer(reason: SidebarDrawerCloseReason) {
|
|
172
|
+
if (!isOpen) return;
|
|
173
|
+
isOpen = false;
|
|
174
|
+
onclose?.({ reason });
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// From `lg` up the rail is there: a drawer left open would cover it.
|
|
178
|
+
$effect(() => {
|
|
179
|
+
if (!asDrawer || typeof window.matchMedia !== "function") return;
|
|
180
|
+
const wide = window.matchMedia("(min-width: 1024px)");
|
|
181
|
+
const onChange = () => {
|
|
182
|
+
if (wide.matches) closeDrawer("resize");
|
|
183
|
+
};
|
|
184
|
+
onChange();
|
|
185
|
+
wide.addEventListener("change", onChange);
|
|
186
|
+
return () => wide.removeEventListener("change", onChange);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
/** A link in the drawer was followed: the page it leads to is behind the drawer. */
|
|
190
|
+
function handleDrawerClick(event: MouseEvent) {
|
|
191
|
+
if (!(event.target instanceof Element)) return;
|
|
192
|
+
if (event.target.closest("a[href]")) closeDrawer("navigate");
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const triggerContext = $derived<SidebarTriggerContext>({
|
|
196
|
+
isOpen,
|
|
197
|
+
toggle: () => (isOpen ? closeDrawer("close-button") : (isOpen = true)),
|
|
198
|
+
props: { "aria-haspopup": "dialog", "aria-expanded": isOpen },
|
|
199
|
+
});
|
|
87
200
|
</script>
|
|
88
201
|
|
|
89
|
-
|
|
90
|
-
<div class="flex min-
|
|
202
|
+
{#snippet regions(context: SidebarRegionContext, inDrawer: boolean)}
|
|
203
|
+
<div class={cn("flex w-full min-w-0 flex-col", !inDrawer && "min-h-0 flex-1")}>
|
|
91
204
|
{#if header}
|
|
92
|
-
<div class={cn("flex w-full shrink-0 flex-col gap-5 pb-3", insetX)}>
|
|
93
|
-
{@render header(
|
|
205
|
+
<div class={cn("flex w-full shrink-0 flex-col gap-5 pb-3", context.insetX)}>
|
|
206
|
+
{@render header(context)}
|
|
94
207
|
</div>
|
|
95
208
|
{/if}
|
|
96
209
|
|
|
210
|
+
<!-- In the drawer the drawer's body scrolls, so this region does not. -->
|
|
97
211
|
<div
|
|
98
212
|
class={cn(
|
|
99
|
-
"flex min-
|
|
100
|
-
|
|
213
|
+
"flex min-w-0 flex-col gap-3 pt-4 pb-2",
|
|
214
|
+
!inDrawer &&
|
|
215
|
+
"min-h-0 flex-1 overflow-y-auto overflow-x-hidden overscroll-y-contain",
|
|
216
|
+
context.insetX,
|
|
101
217
|
)}
|
|
102
218
|
role="region"
|
|
103
|
-
aria-label=
|
|
219
|
+
aria-label={label}
|
|
104
220
|
>
|
|
105
|
-
{@render children?.(
|
|
221
|
+
{@render children?.(context)}
|
|
106
222
|
</div>
|
|
107
223
|
</div>
|
|
108
224
|
|
|
109
225
|
{#if footer}
|
|
110
|
-
{@render footer(
|
|
226
|
+
{@render footer(context)}
|
|
111
227
|
{/if}
|
|
228
|
+
{/snippet}
|
|
229
|
+
|
|
230
|
+
<nav class={containerClasses} aria-label={ariaLabel} {...restProps}>
|
|
231
|
+
{@render regions(region, false)}
|
|
112
232
|
</nav>
|
|
233
|
+
|
|
234
|
+
{#if asDrawer}
|
|
235
|
+
{#if trigger}
|
|
236
|
+
<div class="lg:hidden" data-sidebar-trigger>
|
|
237
|
+
{@render trigger(triggerContext)}
|
|
238
|
+
</div>
|
|
239
|
+
{/if}
|
|
240
|
+
<!-- The same regions, in a Drawer. Rendered only while it is open, so
|
|
241
|
+
nothing of the sidebar is in the page twice until then, and the server
|
|
242
|
+
renders the rail alone. -->
|
|
243
|
+
<Drawer
|
|
244
|
+
bind:isOpen
|
|
245
|
+
side="start"
|
|
246
|
+
size="sm"
|
|
247
|
+
title={drawerTitle || ariaLabel}
|
|
248
|
+
{closeLabel}
|
|
249
|
+
onclose={(detail) => onclose?.(detail)}
|
|
250
|
+
class="lg:hidden"
|
|
251
|
+
>
|
|
252
|
+
<!-- svelte-ignore a11y_click_events_have_key_events, a11y_no_noninteractive_element_interactions -->
|
|
253
|
+
<nav
|
|
254
|
+
class="flex w-full min-w-0 flex-col text-headline"
|
|
255
|
+
aria-label={ariaLabel}
|
|
256
|
+
data-sidebar-drawer
|
|
257
|
+
onclick={handleDrawerClick}
|
|
258
|
+
>
|
|
259
|
+
{@render regions(drawerRegion, true)}
|
|
260
|
+
</nav>
|
|
261
|
+
</Drawer>
|
|
262
|
+
{/if}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
2
|
import type { HTMLAttributes } from "svelte/elements";
|
|
3
|
+
import type { DrawerCloseReason } from "../util/drawer.js";
|
|
3
4
|
/**
|
|
4
5
|
* The chrome of a sidebar and nothing else: width, surface, collapse
|
|
5
6
|
* behaviour, the inset its regions share, and a scroll container for the
|
|
@@ -25,18 +26,71 @@ import type { HTMLAttributes } from "svelte/elements";
|
|
|
25
26
|
* {/snippet}
|
|
26
27
|
* </SidebarShell>
|
|
27
28
|
* ```
|
|
29
|
+
*
|
|
30
|
+
* A sidebar is 266px wide, which a phone does not have beside its
|
|
31
|
+
* content. With `mobile="drawer"` the rail is only there from the `lg`
|
|
32
|
+
* breakpoint (1024px) up; below it the same regions open in a Drawer from
|
|
33
|
+
* the start edge, with the Drawer's focus trap, Escape and backdrop:
|
|
34
|
+
*
|
|
35
|
+
* ```svelte
|
|
36
|
+
* <SidebarShell mobile="drawer" bind:isOpen drawerTitle="Menu">
|
|
37
|
+
* {#snippet trigger({ props, toggle })}
|
|
38
|
+
* <IconButton label="Menu" onclick={toggle} {...props}><Menu /></IconButton>
|
|
39
|
+
* {/snippet}
|
|
40
|
+
* …
|
|
41
|
+
* </SidebarShell>
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* `trigger` is rendered where the rail would be, below `lg` only; leave
|
|
45
|
+
* it out and open the drawer from a button of your own by setting
|
|
46
|
+
* `isOpen`. The drawer closes when a link in it is followed.
|
|
28
47
|
*/
|
|
48
|
+
/** What the `trigger` snippet gets. */
|
|
49
|
+
export interface SidebarTriggerContext {
|
|
50
|
+
isOpen: boolean;
|
|
51
|
+
toggle: () => void;
|
|
52
|
+
/** Spread on the button: it says what the button opens, and whether it is open. */
|
|
53
|
+
props: {
|
|
54
|
+
"aria-haspopup": "dialog";
|
|
55
|
+
"aria-expanded": boolean;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** What closed the drawer: the user, a link that was followed, or the screen reaching `lg`. */
|
|
59
|
+
export type SidebarDrawerCloseReason = DrawerCloseReason | "navigate" | "resize";
|
|
29
60
|
/** Passed to every region so it can match the shell's collapse and inset. */
|
|
30
61
|
export interface SidebarRegionContext {
|
|
31
62
|
collapsed: boolean;
|
|
32
63
|
/** Horizontal padding utility the shell's own regions use. */
|
|
33
64
|
insetX: string;
|
|
34
65
|
}
|
|
35
|
-
type Props = Omit<HTMLAttributes<HTMLElement>, "class"> & {
|
|
66
|
+
type Props = Omit<HTMLAttributes<HTMLElement>, "class" | "onclose" | "children"> & {
|
|
36
67
|
mode?: "expanded" | "collapsed";
|
|
37
68
|
/** `rail` attaches to the viewport edge; `card` is a floating panel. */
|
|
38
69
|
layout?: "rail" | "card";
|
|
39
70
|
ariaLabel?: string;
|
|
71
|
+
/** Accessible name of the scrolling region between header and footer. */
|
|
72
|
+
label?: string;
|
|
73
|
+
/**
|
|
74
|
+
* What the sidebar is below the `lg` breakpoint. `none`: the rail, as
|
|
75
|
+
* everywhere. `drawer`: the rail is hidden there and its regions open
|
|
76
|
+
* in a Drawer from the start edge instead.
|
|
77
|
+
*/
|
|
78
|
+
mobile?: "none" | "drawer";
|
|
79
|
+
/** Whether the drawer is open. Bindable. Only used with `mobile="drawer"`. */
|
|
80
|
+
isOpen?: boolean;
|
|
81
|
+
/** Heading of the drawer, and its accessible name. Without it, `ariaLabel` is. */
|
|
82
|
+
drawerTitle?: string;
|
|
83
|
+
/** Accessible name of the drawer's close button. */
|
|
84
|
+
closeLabel?: string;
|
|
85
|
+
/** Fired when the drawer closes itself, with why. */
|
|
86
|
+
onclose?: (detail: {
|
|
87
|
+
reason: SidebarDrawerCloseReason;
|
|
88
|
+
}) => void;
|
|
89
|
+
/**
|
|
90
|
+
* The button that opens the drawer, rendered in the rail's place below
|
|
91
|
+
* `lg`. Optional: a button anywhere that sets `isOpen` does the same.
|
|
92
|
+
*/
|
|
93
|
+
trigger?: Snippet<[SidebarTriggerContext]>;
|
|
40
94
|
class?: string;
|
|
41
95
|
/** @deprecated use `class`. */
|
|
42
96
|
className?: string;
|
|
@@ -47,6 +101,6 @@ type Props = Omit<HTMLAttributes<HTMLElement>, "class"> & {
|
|
|
47
101
|
/** Account row, logout, theme toggle. Outside the scroll container. */
|
|
48
102
|
footer?: Snippet<[SidebarRegionContext]>;
|
|
49
103
|
};
|
|
50
|
-
declare const SidebarShell: import("svelte").Component<Props, {}, "">;
|
|
104
|
+
declare const SidebarShell: import("svelte").Component<Props, {}, "isOpen">;
|
|
51
105
|
type SidebarShell = ReturnType<typeof SidebarShell>;
|
|
52
106
|
export default SidebarShell;
|