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
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext, onMount, setContext, type Snippet } from "svelte";
|
|
3
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
4
|
+
import { cn } from "../util/cn.js";
|
|
5
|
+
import { generateId } from "../util/ssr-safe.js";
|
|
6
|
+
import {
|
|
7
|
+
CHIP_GAP,
|
|
8
|
+
CHIP_GROUP_CONTEXT_KEY,
|
|
9
|
+
SELECTED_CHIP_SELECTOR,
|
|
10
|
+
chipBox,
|
|
11
|
+
measureRowOverflow,
|
|
12
|
+
scrollLeftToReveal,
|
|
13
|
+
toggleValue,
|
|
14
|
+
type ChipGroupContext,
|
|
15
|
+
type RowMetrics,
|
|
16
|
+
} from "../util/chip.js";
|
|
17
|
+
|
|
18
|
+
/** Other attributes (`id`, `data-*`, `aria-label`, `aria-labelledby`, ...) land on the group element. */
|
|
19
|
+
type Props = Omit<HTMLAttributes<HTMLDivElement>, "class" | "onchange" | "children"> & {
|
|
20
|
+
class?: string;
|
|
21
|
+
/**
|
|
22
|
+
* `wrap` breaks onto as many lines as it needs; `row` is one line that
|
|
23
|
+
* scrolls sideways, with the chosen chip brought into view on load.
|
|
24
|
+
* A group inside a group takes the layout of the one around it.
|
|
25
|
+
*/
|
|
26
|
+
layout?: "wrap" | "row";
|
|
27
|
+
/** The group's accessible name. Not shown unless `showLabel`. */
|
|
28
|
+
label?: string;
|
|
29
|
+
/** Show `label` as text above the group (beside it, in a group inside a group). */
|
|
30
|
+
showLabel?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* `radio` or `checkbox`: the chips are inputs that share this group's
|
|
33
|
+
* `name` and `value`. Without it the group only lays out its chips,
|
|
34
|
+
* which are links or toggle buttons.
|
|
35
|
+
*/
|
|
36
|
+
type?: "radio" | "checkbox";
|
|
37
|
+
/** Name the inputs submit under. */
|
|
38
|
+
name?: string;
|
|
39
|
+
/**
|
|
40
|
+
* What is chosen. Bindable: a string, or `undefined` for none, for
|
|
41
|
+
* `radio`; an array of strings for `checkbox`.
|
|
42
|
+
*/
|
|
43
|
+
value?: string | string[] | undefined;
|
|
44
|
+
/** Disables every chip in the group. */
|
|
45
|
+
disabled?: boolean;
|
|
46
|
+
/** With `layout="row"`: `fade` dims the edge that has more chips beyond it; `none` never does. */
|
|
47
|
+
edge?: "fade" | "none";
|
|
48
|
+
/** With `layout="row"`: bring the chosen chip into view when the row appears. */
|
|
49
|
+
scrollSelectedIntoView?: boolean;
|
|
50
|
+
/** Called with the new `value` when a person changes it. */
|
|
51
|
+
onchange?: (value: string | string[] | undefined) => void;
|
|
52
|
+
children?: Snippet;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
let {
|
|
56
|
+
class: className = "",
|
|
57
|
+
layout = "wrap",
|
|
58
|
+
label = "",
|
|
59
|
+
showLabel = false,
|
|
60
|
+
type,
|
|
61
|
+
name,
|
|
62
|
+
value = $bindable<Props["value"]>(),
|
|
63
|
+
disabled = false,
|
|
64
|
+
edge = "fade",
|
|
65
|
+
scrollSelectedIntoView = true,
|
|
66
|
+
onchange,
|
|
67
|
+
children,
|
|
68
|
+
...restProps
|
|
69
|
+
}: Props = $props();
|
|
70
|
+
|
|
71
|
+
// No fallback on a bindable prop (see Rating): a checkbox group starts
|
|
72
|
+
// empty, here, so the server renders it and `bind:value={undefined}` works.
|
|
73
|
+
const applyDefaults = () => {
|
|
74
|
+
if (type === "checkbox" && value === undefined) value = [];
|
|
75
|
+
};
|
|
76
|
+
applyDefaults();
|
|
77
|
+
$effect.pre(applyDefaults);
|
|
78
|
+
|
|
79
|
+
/** A group inside a group is a sub-group: it names its chips and does not scroll or wrap on its own. */
|
|
80
|
+
const parent = getContext<ChipGroupContext | undefined>(CHIP_GROUP_CONTEXT_KEY);
|
|
81
|
+
const nested = parent !== undefined;
|
|
82
|
+
const effectiveLayout = $derived(parent ? parent.layout : layout);
|
|
83
|
+
|
|
84
|
+
function isSelected(chip: string): boolean {
|
|
85
|
+
if (type === "radio") return value === chip;
|
|
86
|
+
if (type === "checkbox") return Array.isArray(value) && value.includes(chip);
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
setContext<ChipGroupContext>(CHIP_GROUP_CONTEXT_KEY, {
|
|
91
|
+
get type() {
|
|
92
|
+
return type;
|
|
93
|
+
},
|
|
94
|
+
get name() {
|
|
95
|
+
return name;
|
|
96
|
+
},
|
|
97
|
+
get layout() {
|
|
98
|
+
return effectiveLayout;
|
|
99
|
+
},
|
|
100
|
+
get disabled() {
|
|
101
|
+
return disabled;
|
|
102
|
+
},
|
|
103
|
+
get radioValue() {
|
|
104
|
+
return type === "radio" && typeof value === "string" ? value : undefined;
|
|
105
|
+
},
|
|
106
|
+
isSelected,
|
|
107
|
+
change(chip, checked, report) {
|
|
108
|
+
if (type === "radio") {
|
|
109
|
+
// Single selection never clears: unchecking is not a thing a radio does.
|
|
110
|
+
if (!checked) return;
|
|
111
|
+
value = chip;
|
|
112
|
+
} else if (type === "checkbox") {
|
|
113
|
+
value = toggleValue(Array.isArray(value) ? value : [], chip, checked);
|
|
114
|
+
} else {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (report) onchange?.(value);
|
|
118
|
+
},
|
|
119
|
+
restore() {
|
|
120
|
+
if (type === "radio") value = undefined;
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const labelId = generateId("chip-group-label");
|
|
125
|
+
const role = $derived(type === "radio" ? "radiogroup" : "group");
|
|
126
|
+
const isRow = $derived(effectiveLayout === "row");
|
|
127
|
+
/** Only the outermost row scrolls; a sub-group is just inline. */
|
|
128
|
+
const scrolls = $derived(isRow && !nested);
|
|
129
|
+
|
|
130
|
+
// ---- The one-row layout: the chosen chip in view, and the edge cue. ----
|
|
131
|
+
|
|
132
|
+
let scroller = $state<HTMLDivElement | null>(null);
|
|
133
|
+
let overflowStart = $state(false);
|
|
134
|
+
let overflowEnd = $state(false);
|
|
135
|
+
|
|
136
|
+
function metricsOf(element: HTMLElement): RowMetrics {
|
|
137
|
+
return {
|
|
138
|
+
scrollLeft: element.scrollLeft,
|
|
139
|
+
scrollWidth: element.scrollWidth,
|
|
140
|
+
clientWidth: element.clientWidth,
|
|
141
|
+
rtl: getComputedStyle(element).direction === "rtl",
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function measure() {
|
|
146
|
+
if (!scroller) return;
|
|
147
|
+
const overflow = measureRowOverflow(metricsOf(scroller));
|
|
148
|
+
overflowStart = overflow.start;
|
|
149
|
+
overflowEnd = overflow.end;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Room kept between the revealed chip and the edge: one gap, and the fade when there is one. */
|
|
153
|
+
const FADE_WIDTH = 24;
|
|
154
|
+
|
|
155
|
+
/** Scrolls the row, and only the row (it sets `scrollLeft`, so the page cannot move). Not animated. */
|
|
156
|
+
function revealSelected() {
|
|
157
|
+
const row = scroller;
|
|
158
|
+
if (!row) return;
|
|
159
|
+
const selected = row.querySelector(SELECTED_CHIP_SELECTOR);
|
|
160
|
+
if (!selected) return;
|
|
161
|
+
const box = row.getBoundingClientRect();
|
|
162
|
+
const item = chipBox(selected).getBoundingClientRect();
|
|
163
|
+
row.scrollLeft = scrollLeftToReveal(
|
|
164
|
+
metricsOf(row),
|
|
165
|
+
{ left: box.left, right: box.right },
|
|
166
|
+
{ left: item.left, right: item.right },
|
|
167
|
+
edge === "fade" ? CHIP_GAP + FADE_WIDTH : CHIP_GAP,
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
let revealed = false;
|
|
172
|
+
onMount(() => {
|
|
173
|
+
if (!revealed && scroller && scrolls && scrollSelectedIntoView) revealSelected();
|
|
174
|
+
revealed = true;
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
$effect(() => {
|
|
178
|
+
const row = scroller;
|
|
179
|
+
if (!row || !scrolls) {
|
|
180
|
+
overflowStart = false;
|
|
181
|
+
overflowEnd = false;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
measure();
|
|
185
|
+
row.addEventListener("scroll", measure, { passive: true });
|
|
186
|
+
let sizes: ResizeObserver | undefined;
|
|
187
|
+
let nodes: MutationObserver | undefined;
|
|
188
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
189
|
+
const sized = new ResizeObserver(measure);
|
|
190
|
+
sizes = sized;
|
|
191
|
+
const watch = () => {
|
|
192
|
+
sized.disconnect();
|
|
193
|
+
sized.observe(row);
|
|
194
|
+
for (const child of row.children) sized.observe(child);
|
|
195
|
+
};
|
|
196
|
+
watch();
|
|
197
|
+
if (typeof MutationObserver !== "undefined") {
|
|
198
|
+
nodes = new MutationObserver(() => {
|
|
199
|
+
watch();
|
|
200
|
+
measure();
|
|
201
|
+
});
|
|
202
|
+
nodes.observe(row, { childList: true });
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return () => {
|
|
206
|
+
row.removeEventListener("scroll", measure);
|
|
207
|
+
sizes?.disconnect();
|
|
208
|
+
nodes?.disconnect();
|
|
209
|
+
};
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const hostClasses = $derived.by(() => {
|
|
213
|
+
if (nested) {
|
|
214
|
+
return cn(isRow ? "flex shrink-0 items-center gap-2" : "flex flex-wrap items-center gap-2", className);
|
|
215
|
+
}
|
|
216
|
+
if (isRow) {
|
|
217
|
+
// 4px of room on every side for the focus ring, which the scrolling box
|
|
218
|
+
// would clip, taken back by the negative margin (as Tabs does).
|
|
219
|
+
return cn(
|
|
220
|
+
"chip-row -m-1 flex flex-nowrap items-center gap-2 overflow-x-auto overflow-y-hidden overscroll-x-contain p-1 scroll-px-8 has-[>[data-chip-subgroup]]:gap-6",
|
|
221
|
+
className,
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
return cn("flex flex-wrap items-center gap-2 has-[>[data-chip-subgroup]]:gap-x-6", className);
|
|
225
|
+
});
|
|
226
|
+
</script>
|
|
227
|
+
|
|
228
|
+
{#snippet group(labelledBy: string | undefined)}
|
|
229
|
+
<div
|
|
230
|
+
bind:this={scroller}
|
|
231
|
+
{role}
|
|
232
|
+
class={hostClasses}
|
|
233
|
+
aria-label={labelledBy ? undefined : label || undefined}
|
|
234
|
+
aria-labelledby={labelledBy}
|
|
235
|
+
data-chip-subgroup={nested ? "" : undefined}
|
|
236
|
+
data-layout={nested ? undefined : effectiveLayout}
|
|
237
|
+
data-overflow-start={scrolls && edge === "fade" && overflowStart ? "" : undefined}
|
|
238
|
+
data-overflow-end={scrolls && edge === "fade" && overflowEnd ? "" : undefined}
|
|
239
|
+
{...restProps}
|
|
240
|
+
>
|
|
241
|
+
{#if nested && showLabel && label}
|
|
242
|
+
<span id={labelId} class="shrink-0 text-sm font-medium whitespace-nowrap text-label">{label}</span>
|
|
243
|
+
{/if}
|
|
244
|
+
{@render children?.()}
|
|
245
|
+
</div>
|
|
246
|
+
{/snippet}
|
|
247
|
+
|
|
248
|
+
{#if !nested && showLabel && label}
|
|
249
|
+
<div class="flex flex-col gap-2">
|
|
250
|
+
<span id={labelId} class="text-sm font-medium text-label">{label}</span>
|
|
251
|
+
{@render group(labelId)}
|
|
252
|
+
</div>
|
|
253
|
+
{:else if nested && showLabel && label}
|
|
254
|
+
{@render group(labelId)}
|
|
255
|
+
{:else}
|
|
256
|
+
{@render group(undefined)}
|
|
257
|
+
{/if}
|
|
258
|
+
|
|
259
|
+
<style>
|
|
260
|
+
/*
|
|
261
|
+
* One line that scrolls sideways, with no scrollbar. The edge cue is a
|
|
262
|
+
* mask, not a gradient laid over the chips, so it fades them into any
|
|
263
|
+
* background, a brand block included, and nothing sits on a chip or its
|
|
264
|
+
* focus ring. Only a side with more chips beyond it fades (the component
|
|
265
|
+
* writes data-overflow-start and -end after it has measured), and there
|
|
266
|
+
* is none on the server. The mask is physical; start is the right edge
|
|
267
|
+
* in a right-to-left row.
|
|
268
|
+
*/
|
|
269
|
+
:global(.chip-row) {
|
|
270
|
+
scrollbar-width: none;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
:global(.chip-row::-webkit-scrollbar) {
|
|
274
|
+
display: none;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
:global(.chip-row[data-overflow-start]),
|
|
278
|
+
:global(.chip-row[data-overflow-end]) {
|
|
279
|
+
--chip-fade-start: 0px;
|
|
280
|
+
--chip-fade-end: 0px;
|
|
281
|
+
--chip-fade-left: var(--chip-fade-start);
|
|
282
|
+
--chip-fade-right: var(--chip-fade-end);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
:global(.chip-row[data-overflow-start]) {
|
|
286
|
+
--chip-fade-start: 1.5rem;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
:global(.chip-row[data-overflow-end]) {
|
|
290
|
+
--chip-fade-end: 1.5rem;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
:global(.chip-row[data-overflow-start]:dir(rtl)),
|
|
294
|
+
:global(.chip-row[data-overflow-end]:dir(rtl)) {
|
|
295
|
+
--chip-fade-left: var(--chip-fade-end);
|
|
296
|
+
--chip-fade-right: var(--chip-fade-start);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
:global(.chip-row[data-overflow-start]),
|
|
300
|
+
:global(.chip-row[data-overflow-end]) {
|
|
301
|
+
-webkit-mask-image: linear-gradient(
|
|
302
|
+
to right,
|
|
303
|
+
transparent,
|
|
304
|
+
black var(--chip-fade-left),
|
|
305
|
+
black calc(100% - var(--chip-fade-right)),
|
|
306
|
+
transparent
|
|
307
|
+
);
|
|
308
|
+
mask-image: linear-gradient(
|
|
309
|
+
to right,
|
|
310
|
+
transparent,
|
|
311
|
+
black var(--chip-fade-left),
|
|
312
|
+
black calc(100% - var(--chip-fade-right)),
|
|
313
|
+
transparent
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* Forced colours: a half-transparent label is harder to read than a cut-off one. */
|
|
318
|
+
@media (forced-colors: active) {
|
|
319
|
+
:global(.chip-row[data-overflow-start]),
|
|
320
|
+
:global(.chip-row[data-overflow-end]) {
|
|
321
|
+
-webkit-mask-image: none;
|
|
322
|
+
mask-image: none;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
</style>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Snippet } from "svelte";
|
|
2
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
3
|
+
/** Other attributes (`id`, `data-*`, `aria-label`, `aria-labelledby`, ...) land on the group element. */
|
|
4
|
+
type Props = Omit<HTMLAttributes<HTMLDivElement>, "class" | "onchange" | "children"> & {
|
|
5
|
+
class?: string;
|
|
6
|
+
/**
|
|
7
|
+
* `wrap` breaks onto as many lines as it needs; `row` is one line that
|
|
8
|
+
* scrolls sideways, with the chosen chip brought into view on load.
|
|
9
|
+
* A group inside a group takes the layout of the one around it.
|
|
10
|
+
*/
|
|
11
|
+
layout?: "wrap" | "row";
|
|
12
|
+
/** The group's accessible name. Not shown unless `showLabel`. */
|
|
13
|
+
label?: string;
|
|
14
|
+
/** Show `label` as text above the group (beside it, in a group inside a group). */
|
|
15
|
+
showLabel?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* `radio` or `checkbox`: the chips are inputs that share this group's
|
|
18
|
+
* `name` and `value`. Without it the group only lays out its chips,
|
|
19
|
+
* which are links or toggle buttons.
|
|
20
|
+
*/
|
|
21
|
+
type?: "radio" | "checkbox";
|
|
22
|
+
/** Name the inputs submit under. */
|
|
23
|
+
name?: string;
|
|
24
|
+
/**
|
|
25
|
+
* What is chosen. Bindable: a string, or `undefined` for none, for
|
|
26
|
+
* `radio`; an array of strings for `checkbox`.
|
|
27
|
+
*/
|
|
28
|
+
value?: string | string[] | undefined;
|
|
29
|
+
/** Disables every chip in the group. */
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
/** With `layout="row"`: `fade` dims the edge that has more chips beyond it; `none` never does. */
|
|
32
|
+
edge?: "fade" | "none";
|
|
33
|
+
/** With `layout="row"`: bring the chosen chip into view when the row appears. */
|
|
34
|
+
scrollSelectedIntoView?: boolean;
|
|
35
|
+
/** Called with the new `value` when a person changes it. */
|
|
36
|
+
onchange?: (value: string | string[] | undefined) => void;
|
|
37
|
+
children?: Snippet;
|
|
38
|
+
};
|
|
39
|
+
declare const ChipGroup: import("svelte").Component<Props, {}, "value">;
|
|
40
|
+
type ChipGroup = ReturnType<typeof ChipGroup>;
|
|
41
|
+
export default ChipGroup;
|