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,59 +1,121 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { zabiCommonStrings } from "../util/zabi-strings.js";
|
|
2
3
|
import type { Snippet } from 'svelte';
|
|
3
4
|
import {
|
|
4
5
|
focusFirstElement,
|
|
5
|
-
|
|
6
|
+
joinOverlayStack,
|
|
7
|
+
recoverStrayFocus,
|
|
6
8
|
returnFocus,
|
|
7
9
|
saveFocus,
|
|
8
10
|
} from '../util/focus-utils.js';
|
|
11
|
+
import {
|
|
12
|
+
followKeyboard,
|
|
13
|
+
lockBodyScroll,
|
|
14
|
+
registerOverlayFooter,
|
|
15
|
+
registerOverlayHeader,
|
|
16
|
+
trapTabKey,
|
|
17
|
+
} from '../util/overlay.js';
|
|
18
|
+
import { TOUCH_HIT_AREA } from '../util/touch-target.js';
|
|
9
19
|
import { generateId } from "../util/ssr-safe.js";
|
|
10
20
|
import { cn } from "../util/cn.js";
|
|
21
|
+
import {
|
|
22
|
+
OVERLAY_CHROME,
|
|
23
|
+
OVERLAY_CLOSE_GLYPH,
|
|
24
|
+
OVERLAY_TITLE_2XL,
|
|
25
|
+
OVERLAY_TITLE_HYPHENS,
|
|
26
|
+
OVERLAY_TITLE_WRAP,
|
|
27
|
+
textIsEnlarged,
|
|
28
|
+
} from "../util/overlay-chrome.js";
|
|
29
|
+
import { attachSheetDrag, FLICK_VELOCITY } from "../util/sheet-drag.js";
|
|
11
30
|
|
|
12
31
|
interface Props {
|
|
13
32
|
/** Extra classes for the host element. */
|
|
14
33
|
class?: string;
|
|
15
34
|
isOpen?: boolean;
|
|
16
35
|
title?: string;
|
|
36
|
+
/** Accessible name of the close button. */
|
|
37
|
+
closeLabel?: string;
|
|
38
|
+
/**
|
|
39
|
+
* CSS selector, looked up inside the sheet, of the control that takes
|
|
40
|
+
* focus when it opens. Without it, or with no match, the first control does.
|
|
41
|
+
*/
|
|
42
|
+
initialFocus?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Adds a grip at the top and lets a swipe down close the sheet. The
|
|
45
|
+
* grip drags from anywhere; a swipe on the content closes only when
|
|
46
|
+
* the content is at its top, and scrolls it otherwise. The close
|
|
47
|
+
* button, the backdrop and Escape stay, so nothing depends on the
|
|
48
|
+
* gesture.
|
|
49
|
+
*/
|
|
50
|
+
swipeToClose?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Runs when the sheet closes itself, with the event that closed it:
|
|
53
|
+
* the click, the Escape keydown, or the end of a swipe.
|
|
54
|
+
*/
|
|
17
55
|
onclick?: (event: Event) => void;
|
|
18
56
|
onkeydown?: (event: Event) => void;
|
|
19
57
|
children?: Snippet;
|
|
58
|
+
/**
|
|
59
|
+
* Pinned to the bottom of the sheet, below the content, which then
|
|
60
|
+
* scrolls on its own: for the buttons of a form. It stays above the
|
|
61
|
+
* on-screen keyboard, and toasts keep off it. Without it the sheet is
|
|
62
|
+
* as it always was: one box that scrolls as a whole.
|
|
63
|
+
*/
|
|
64
|
+
footer?: Snippet;
|
|
20
65
|
}
|
|
21
66
|
|
|
22
67
|
let {
|
|
23
68
|
class: className = "",
|
|
24
|
-
isOpen = $bindable(
|
|
69
|
+
isOpen = $bindable<Exclude<Props["isOpen"], undefined>>(),
|
|
25
70
|
title = '',
|
|
71
|
+
closeLabel: closeLabelGiven,
|
|
72
|
+
initialFocus,
|
|
73
|
+
swipeToClose = false,
|
|
26
74
|
onclick,
|
|
27
75
|
onkeydown,
|
|
28
76
|
children,
|
|
77
|
+
footer,
|
|
29
78
|
...restProps
|
|
30
79
|
}: Props = $props();
|
|
31
80
|
|
|
81
|
+
/** Words many components share: a `ZabiStringsProvider` above this one may give them; else English. */
|
|
82
|
+
const common = zabiCommonStrings();
|
|
83
|
+
const closeLabel = $derived(closeLabelGiven ?? common().close);
|
|
84
|
+
|
|
85
|
+
// No fallback on a bindable prop: Svelte refuses `bind:…={undefined}` on
|
|
86
|
+
// one that has a fallback (`props_invalid_value`), and a page that throws
|
|
87
|
+
// while it hydrates never becomes interactive. The default is applied
|
|
88
|
+
// here instead: at once, for the server and the first render, and again
|
|
89
|
+
// whenever a parent hands back `undefined`.
|
|
90
|
+
const applyDefaults = () => {
|
|
91
|
+
if (isOpen === undefined) isOpen = false;
|
|
92
|
+
};
|
|
93
|
+
applyDefaults();
|
|
94
|
+
$effect.pre(applyDefaults);
|
|
95
|
+
|
|
32
96
|
const slideTitleId = generateId('slideup-title');
|
|
33
97
|
|
|
34
98
|
let slideUpContainer = $state<HTMLDivElement>();
|
|
35
|
-
let
|
|
99
|
+
let grip = $state<HTMLDivElement>();
|
|
100
|
+
let headerElement = $state<HTMLDivElement>();
|
|
101
|
+
let footerElement = $state<HTMLDivElement>();
|
|
36
102
|
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
body.dataset.zabiScrollLock = String(next);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
}
|
|
103
|
+
/**
|
|
104
|
+
* Read as the overlay opens: with the text enlarged, a long word in the
|
|
105
|
+
* title is hyphenated before it is cut (util/overlay-chrome.ts).
|
|
106
|
+
*/
|
|
107
|
+
let enlargedText = $state(false);
|
|
108
|
+
$effect(() => {
|
|
109
|
+
if (isOpen) enlargedText = textIsEnlarged();
|
|
110
|
+
});
|
|
111
|
+
/** With a footer: the content, which is then what scrolls. */
|
|
112
|
+
let scroller = $state<HTMLDivElement>();
|
|
113
|
+
/** How far a swipe has pulled the sheet down, in px. */
|
|
114
|
+
let dragOffset = $state(0);
|
|
115
|
+
let dragging = $state(false);
|
|
116
|
+
let focusActive = false;
|
|
117
|
+
/** Position among the open overlays; lifts a sheet opened later above the earlier ones. */
|
|
118
|
+
let depth = $state(0);
|
|
57
119
|
|
|
58
120
|
function closeSlideUp(event?: Event) {
|
|
59
121
|
isOpen = false;
|
|
@@ -72,11 +134,32 @@
|
|
|
72
134
|
saveFocus();
|
|
73
135
|
focusActive = true;
|
|
74
136
|
const unlockScroll = lockBodyScroll();
|
|
137
|
+
const overlay = joinOverlayStack(container);
|
|
138
|
+
depth = overlay.depth;
|
|
75
139
|
const t = setTimeout(() => {
|
|
76
|
-
|
|
140
|
+
// Something inside has taken focus already (a field that
|
|
141
|
+
// focuses itself as it mounts): leave it there. `initialFocus`
|
|
142
|
+
// is the consumer saying where focus goes, so it still decides.
|
|
143
|
+
const active = document.activeElement;
|
|
144
|
+
const inside = !!active && active !== container && container.contains(active);
|
|
145
|
+
if (inside && !(initialFocus && container.querySelector(initialFocus))) return;
|
|
146
|
+
focusFirstElement(container, initialFocus);
|
|
77
147
|
}, 0);
|
|
148
|
+
// If the focused control is disabled or removed, focus lands on
|
|
149
|
+
// `<body>`; take Tab and Escape back from there.
|
|
150
|
+
const stopRecovery = recoverStrayFocus(container, {
|
|
151
|
+
onEscape: (event) => closeSlideUp(event),
|
|
152
|
+
});
|
|
153
|
+
// Where the on-screen keyboard covers the page, the overlay
|
|
154
|
+
// keeps to what is left above it.
|
|
155
|
+
const stopKeyboard = container.parentElement
|
|
156
|
+
? followKeyboard(container.parentElement)
|
|
157
|
+
: undefined;
|
|
78
158
|
return () => {
|
|
79
159
|
clearTimeout(t);
|
|
160
|
+
stopRecovery();
|
|
161
|
+
stopKeyboard?.();
|
|
162
|
+
overlay.leave();
|
|
80
163
|
unlockScroll();
|
|
81
164
|
if (focusActive) {
|
|
82
165
|
focusActive = false;
|
|
@@ -86,34 +169,49 @@
|
|
|
86
169
|
}
|
|
87
170
|
});
|
|
88
171
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
const first = focusable[0];
|
|
103
|
-
const last = focusable[focusable.length - 1];
|
|
104
|
-
const active = document.activeElement as HTMLElement | null;
|
|
172
|
+
// For the toast stack: it starts below the header, which holds the close
|
|
173
|
+
// button, and stays off a pinned footer.
|
|
174
|
+
$effect(() => {
|
|
175
|
+
const top = headerElement;
|
|
176
|
+
if (!isOpen || !top) return;
|
|
177
|
+
return registerOverlayHeader(top);
|
|
178
|
+
});
|
|
179
|
+
$effect(() => {
|
|
180
|
+
const pinned = footerElement;
|
|
181
|
+
if (!isOpen || !pinned) return;
|
|
182
|
+
return registerOverlayFooter(pinned);
|
|
183
|
+
});
|
|
105
184
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
185
|
+
$effect(() => {
|
|
186
|
+
const container = slideUpContainer;
|
|
187
|
+
const zone = grip;
|
|
188
|
+
// With a footer the content scrolls, not the panel.
|
|
189
|
+
const scrolls = footer ? scroller : container;
|
|
190
|
+
if (!isOpen || !swipeToClose || !container || !zone || !scrolls) return;
|
|
191
|
+
const settle = () => {
|
|
192
|
+
dragging = false;
|
|
193
|
+
dragOffset = 0;
|
|
194
|
+
};
|
|
195
|
+
const stop = attachSheetDrag(
|
|
196
|
+
// Without a footer the panel is its own scrolling box.
|
|
197
|
+
{ handleZone: zone, scroller: scrolls },
|
|
198
|
+
{
|
|
199
|
+
onStart: () => (dragging = true),
|
|
200
|
+
// Down only: there is nowhere for it to go upwards.
|
|
201
|
+
onMove: (distance) => (dragOffset = Math.max(0, distance)),
|
|
202
|
+
onEnd(distance, velocity, event) {
|
|
203
|
+
const far = distance > container.getBoundingClientRect().height * 0.3;
|
|
204
|
+
settle();
|
|
205
|
+
if (distance > 0 && (far || velocity >= FLICK_VELOCITY)) closeSlideUp(event);
|
|
206
|
+
},
|
|
207
|
+
onCancel: settle,
|
|
208
|
+
},
|
|
209
|
+
);
|
|
210
|
+
return () => {
|
|
211
|
+
stop();
|
|
212
|
+
settle();
|
|
213
|
+
};
|
|
214
|
+
});
|
|
117
215
|
|
|
118
216
|
function handleBackdropClick(event: Event) {
|
|
119
217
|
if (event.target === event.currentTarget) {
|
|
@@ -134,43 +232,104 @@
|
|
|
134
232
|
{#if isOpen}
|
|
135
233
|
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
136
234
|
<div
|
|
137
|
-
class="fixed inset-0 z-modal cursor-pointer bg-overlay"
|
|
235
|
+
class="group/overlay fixed inset-0 z-modal cursor-pointer bg-overlay"
|
|
236
|
+
style:z-index={depth > 0 ? `calc(var(--z-modal) + ${depth})` : undefined}
|
|
237
|
+
data-overlay-depth={depth}
|
|
138
238
|
onclick={handleBackdropClick}
|
|
139
239
|
onkeydown={handleKeydown}
|
|
140
240
|
role="presentation"
|
|
141
241
|
>
|
|
142
242
|
<div
|
|
143
243
|
bind:this={slideUpContainer}
|
|
144
|
-
class={cn(
|
|
244
|
+
class={cn(
|
|
245
|
+
"group-data-keyboard-open/overlay:max-h-full",
|
|
246
|
+
"absolute bottom-0 left-0 right-0 z-modal flex max-h-[90dvh] cursor-default flex-col overflow-y-auto rounded-t-overlay border-t border-border-overlay bg-surface-overlay shadow-lg animate-[slideUp_0.3s_ease-out] motion-reduce:animate-none",
|
|
247
|
+
// With a footer the content scrolls between the header and it.
|
|
248
|
+
footer && "overflow-y-hidden",
|
|
249
|
+
// Back to rest after a swipe that did not close it.
|
|
250
|
+
swipeToClose &&
|
|
251
|
+
"overscroll-contain transition-transform duration-200 ease-out motion-reduce:transition-none",
|
|
252
|
+
className,
|
|
253
|
+
)}
|
|
254
|
+
style:transform={dragOffset > 0 ? `translateY(${dragOffset}px)` : undefined}
|
|
255
|
+
style:transition={dragging ? "none" : undefined}
|
|
256
|
+
data-dragging={dragging ? "true" : undefined}
|
|
145
257
|
role="dialog"
|
|
146
258
|
aria-modal="true"
|
|
147
259
|
aria-labelledby={title ? slideTitleId : undefined}
|
|
148
260
|
tabindex="-1"
|
|
149
|
-
onkeydown={
|
|
261
|
+
onkeydown={(event) => trapTabKey(slideUpContainer, event)}
|
|
150
262
|
{...restProps}
|
|
151
263
|
>
|
|
264
|
+
{#if swipeToClose}
|
|
265
|
+
<!-- Decorative: it adds a gesture, and the close button is the
|
|
266
|
+
control. It stays at the top while the content scrolls.
|
|
267
|
+
`touch-none`: otherwise the browser takes a touch here for
|
|
268
|
+
itself. The bar is drawn in the text colour where colours are
|
|
269
|
+
forced, since a background is dropped there. -->
|
|
270
|
+
<div
|
|
271
|
+
bind:this={grip}
|
|
272
|
+
data-sheet-grip
|
|
273
|
+
aria-hidden="true"
|
|
274
|
+
class="sticky top-0 z-10 flex h-[28px] shrink-0 cursor-grab touch-none items-start justify-center bg-surface-overlay pt-[10px] active:cursor-grabbing {OVERLAY_CHROME}"
|
|
275
|
+
>
|
|
276
|
+
<span
|
|
277
|
+
class="block h-1 w-9 rounded-pill bg-current text-description forced-colors:bg-[CanvasText]"
|
|
278
|
+
></span>
|
|
279
|
+
</div>
|
|
280
|
+
{/if}
|
|
152
281
|
{#if title}
|
|
153
|
-
|
|
282
|
+
<!-- Chrome: laid out in px, with a title that stops at 1.3
|
|
283
|
+
times its size (util/overlay-chrome.ts). 12px between a long
|
|
284
|
+
title and the button: the title wraps, the button keeps its size. -->
|
|
285
|
+
<div
|
|
286
|
+
bind:this={headerElement}
|
|
287
|
+
class="flex shrink-0 items-center justify-between gap-[12px] px-6 pb-4 {OVERLAY_CHROME} {swipeToClose
|
|
288
|
+
? 'pt-2'
|
|
289
|
+
: 'pt-6'}"
|
|
290
|
+
>
|
|
154
291
|
<h2
|
|
155
292
|
id={slideTitleId}
|
|
156
|
-
class="
|
|
293
|
+
class="min-w-0 {OVERLAY_TITLE_2XL} font-normal tracking-normal text-headline {OVERLAY_TITLE_WRAP} {enlargedText ? OVERLAY_TITLE_HYPHENS : ''}"
|
|
157
294
|
>
|
|
158
295
|
{title}
|
|
159
296
|
</h2>
|
|
160
297
|
<button
|
|
161
298
|
type="button"
|
|
162
299
|
onclick={closeSlideUp}
|
|
163
|
-
class="focus-ring flex h-8 w-8 cursor-pointer items-center justify-center rounded-full
|
|
164
|
-
aria-label=
|
|
300
|
+
class="focus-ring pointer-coarse:relative flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-full {OVERLAY_CLOSE_GLYPH} text-description transition-colors hover:bg-surface-overlay-hover hover:text-headline active:bg-surface-active {TOUCH_HIT_AREA}"
|
|
301
|
+
aria-label={closeLabel}
|
|
165
302
|
>
|
|
166
303
|
×
|
|
167
304
|
</button>
|
|
168
305
|
</div>
|
|
169
306
|
{/if}
|
|
170
307
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
308
|
+
{#if footer}
|
|
309
|
+
<!-- `pt-1`: a scroll container clips, and the focus ring of a
|
|
310
|
+
first control needs the room. -->
|
|
311
|
+
<div
|
|
312
|
+
bind:this={scroller}
|
|
313
|
+
data-slide-up-content
|
|
314
|
+
class="min-h-0 flex-1 overflow-y-auto overscroll-contain px-[24px] pt-[4px] pb-[16px]"
|
|
315
|
+
>
|
|
316
|
+
{@render children?.()}
|
|
317
|
+
</div>
|
|
318
|
+
<!-- Clear of the home indicator on a phone; over the keyboard
|
|
319
|
+
that is under the keyboard, and 16px is enough. -->
|
|
320
|
+
<div
|
|
321
|
+
bind:this={footerElement}
|
|
322
|
+
data-slide-up-footer
|
|
323
|
+
class="flex shrink-0 flex-wrap justify-end gap-[8px] border-t border-border-overlay px-[24px] pt-[16px] pb-[calc(16px+env(safe-area-inset-bottom,0px))] group-data-keyboard-open/overlay:pb-[16px]"
|
|
324
|
+
>
|
|
325
|
+
{@render footer()}
|
|
326
|
+
</div>
|
|
327
|
+
{:else}
|
|
328
|
+
<!-- Clear of the home indicator on a phone. -->
|
|
329
|
+
<div class="flex-1 px-[24px] pb-[calc(1.5rem+env(safe-area-inset-bottom,0px))]">
|
|
330
|
+
{@render children?.()}
|
|
331
|
+
</div>
|
|
332
|
+
{/if}
|
|
174
333
|
</div>
|
|
175
334
|
</div>
|
|
176
335
|
{/if}
|
|
@@ -4,9 +4,35 @@ interface Props {
|
|
|
4
4
|
class?: string;
|
|
5
5
|
isOpen?: boolean;
|
|
6
6
|
title?: string;
|
|
7
|
+
/** Accessible name of the close button. */
|
|
8
|
+
closeLabel?: string;
|
|
9
|
+
/**
|
|
10
|
+
* CSS selector, looked up inside the sheet, of the control that takes
|
|
11
|
+
* focus when it opens. Without it, or with no match, the first control does.
|
|
12
|
+
*/
|
|
13
|
+
initialFocus?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Adds a grip at the top and lets a swipe down close the sheet. The
|
|
16
|
+
* grip drags from anywhere; a swipe on the content closes only when
|
|
17
|
+
* the content is at its top, and scrolls it otherwise. The close
|
|
18
|
+
* button, the backdrop and Escape stay, so nothing depends on the
|
|
19
|
+
* gesture.
|
|
20
|
+
*/
|
|
21
|
+
swipeToClose?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Runs when the sheet closes itself, with the event that closed it:
|
|
24
|
+
* the click, the Escape keydown, or the end of a swipe.
|
|
25
|
+
*/
|
|
7
26
|
onclick?: (event: Event) => void;
|
|
8
27
|
onkeydown?: (event: Event) => void;
|
|
9
28
|
children?: Snippet;
|
|
29
|
+
/**
|
|
30
|
+
* Pinned to the bottom of the sheet, below the content, which then
|
|
31
|
+
* scrolls on its own: for the buttons of a form. It stays above the
|
|
32
|
+
* on-screen keyboard, and toasts keep off it. Without it the sheet is
|
|
33
|
+
* as it always was: one box that scrolls as a whole.
|
|
34
|
+
*/
|
|
35
|
+
footer?: Snippet;
|
|
10
36
|
}
|
|
11
37
|
declare const SlideUp: import("svelte").Component<Props, {}, "isOpen">;
|
|
12
38
|
type SlideUp = ReturnType<typeof SlideUp>;
|