zabi-components 7.0.2 → 8.1.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 +1924 -0
- package/README.md +287 -11
- package/THEME.md +149 -332
- package/THEMING.md +1329 -163
- package/dist/atoms/ActionPanel.svelte +24 -9
- package/dist/atoms/ActionPanel.svelte.d.ts +2 -0
- package/dist/atoms/Avatar.svelte +104 -0
- package/dist/atoms/Avatar.svelte.d.ts +34 -0
- package/dist/atoms/Badge.svelte +124 -58
- package/dist/atoms/Badge.svelte.d.ts +17 -5
- package/dist/atoms/Button.svelte +212 -62
- package/dist/atoms/Button.svelte.d.ts +33 -2
- package/dist/atoms/Card.svelte +31 -28
- package/dist/atoms/Card.svelte.d.ts +5 -2
- package/dist/atoms/CardContent.svelte +10 -2
- package/dist/atoms/CardContent.svelte.d.ts +2 -0
- package/dist/atoms/CardFooter.svelte +10 -2
- package/dist/atoms/CardFooter.svelte.d.ts +2 -0
- package/dist/atoms/CardHeader.svelte +26 -6
- package/dist/atoms/CardHeader.svelte.d.ts +2 -0
- package/dist/atoms/Checkbox.svelte +52 -21
- package/dist/atoms/Checkbox.svelte.d.ts +6 -2
- package/dist/atoms/CodeBlock.svelte +35 -9
- package/dist/atoms/CodeBlock.svelte.d.ts +13 -3
- package/dist/atoms/ColorPicker.svelte +272 -52
- package/dist/atoms/ColorPicker.svelte.d.ts +6 -1
- package/dist/atoms/Container.svelte +17 -10
- package/dist/atoms/DateField.svelte +107 -0
- package/dist/atoms/DateField.svelte.d.ts +53 -0
- package/dist/atoms/Divider.svelte +4 -4
- package/dist/atoms/FeatureCard.svelte +4 -3
- package/dist/atoms/FieldMessages.svelte +69 -0
- package/dist/atoms/FieldMessages.svelte.d.ts +23 -0
- package/dist/atoms/FloatingActionButton.svelte +174 -0
- package/dist/atoms/FloatingActionButton.svelte.d.ts +51 -0
- package/dist/atoms/Heading.svelte +93 -32
- package/dist/atoms/Heading.svelte.d.ts +24 -4
- package/dist/atoms/IconButton.svelte +242 -53
- package/dist/atoms/IconButton.svelte.d.ts +49 -4
- package/dist/atoms/Input.svelte +267 -74
- package/dist/atoms/Input.svelte.d.ts +32 -2
- package/dist/atoms/List.svelte +13 -2
- package/dist/atoms/List.svelte.d.ts +2 -0
- package/dist/atoms/ListItem.svelte +44 -11
- package/dist/atoms/ListItem.svelte.d.ts +5 -0
- package/dist/atoms/ListItemLeading.svelte +4 -2
- package/dist/atoms/ListItemLeading.svelte.d.ts +1 -1
- package/dist/atoms/OptimizedImage.svelte +11 -2
- package/dist/atoms/OptimizedImage.svelte.d.ts +2 -0
- package/dist/atoms/Progress.svelte +31 -9
- package/dist/atoms/Progress.svelte.d.ts +6 -0
- package/dist/atoms/Radio.svelte +23 -3
- package/dist/atoms/Radio.svelte.d.ts +6 -2
- package/dist/atoms/Rating.svelte +494 -0
- package/dist/atoms/Rating.svelte.d.ts +56 -0
- package/dist/atoms/Select.svelte +475 -135
- package/dist/atoms/Select.svelte.d.ts +52 -2
- package/dist/atoms/SelectionControl.svelte +99 -18
- package/dist/atoms/SelectionControl.svelte.d.ts +6 -3
- package/dist/atoms/Skeleton.svelte +5 -3
- package/dist/atoms/Slider.svelte +309 -0
- package/dist/atoms/Slider.svelte.d.ts +40 -0
- package/dist/atoms/Spinner.svelte +57 -0
- package/dist/atoms/Spinner.svelte.d.ts +19 -0
- package/dist/atoms/Table.svelte +152 -6
- package/dist/atoms/Table.svelte.d.ts +15 -3
- package/dist/atoms/TemporalField.svelte +140 -0
- package/dist/atoms/TemporalField.svelte.d.ts +32 -0
- package/dist/atoms/Text.svelte +56 -15
- package/dist/atoms/Text.svelte.d.ts +13 -4
- package/dist/atoms/Textarea.svelte +57 -45
- package/dist/atoms/Textarea.svelte.d.ts +14 -2
- package/dist/atoms/ThemeToggle.svelte +238 -56
- package/dist/atoms/ThemeToggle.svelte.d.ts +28 -3
- package/dist/atoms/TimeField.svelte +108 -0
- package/dist/atoms/TimeField.svelte.d.ts +54 -0
- package/dist/atoms/Toast.svelte +25 -10
- package/dist/atoms/Toast.svelte.d.ts +2 -0
- package/dist/atoms/Toggle.svelte +60 -19
- package/dist/atoms/Toggle.svelte.d.ts +18 -2
- package/dist/atoms/Tooltip.svelte +583 -40
- package/dist/atoms/Tooltip.svelte.d.ts +26 -0
- package/dist/atoms/ZabiStringsProvider.svelte +45 -0
- package/dist/atoms/ZabiStringsProvider.svelte.d.ts +27 -0
- package/dist/atoms/index.d.ts +17 -0
- package/dist/atoms/index.js +12 -0
- package/dist/atoms/selection-control.styles.d.ts +36 -5
- package/dist/atoms/selection-control.styles.js +40 -9
- package/dist/components/atoms/index.d.ts +17 -0
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/selection-control.styles.d.ts +36 -5
- package/dist/components/atoms/selection-control.styles.d.ts.map +1 -1
- package/dist/components/index.d.ts +83 -3
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/molecules/index.d.ts +46 -0
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/molecules/toast-store.d.ts +53 -7
- package/dist/components/molecules/toast-store.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +6 -0
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/types/variants.d.ts +15 -1
- package/dist/components/types/variants.d.ts.map +1 -1
- package/dist/components/util/app-shell.d.ts +28 -0
- package/dist/components/util/app-shell.d.ts.map +1 -0
- package/dist/components/util/avatar.d.ts +36 -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 +35 -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/cn.d.ts +8 -0
- package/dist/components/util/cn.d.ts.map +1 -0
- package/dist/components/util/collapsible.d.ts +58 -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/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.d.ts +39 -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 +75 -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/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 +215 -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/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-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 +60 -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/sortable-list.d.ts +65 -0
- package/dist/components/util/sortable-list.d.ts.map +1 -0
- package/dist/components/util/ssr-safe.d.ts +4 -4
- package/dist/components/util/ssr-safe.d.ts.map +1 -1
- 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/theme-mode.d.ts +80 -0
- package/dist/components/util/theme-mode.d.ts.map +1 -0
- package/dist/components/util/toaster.d.ts +93 -0
- package/dist/components/util/toaster.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 +11 -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 +133 -0
- package/dist/components/util/zabi-strings.d.ts.map +1 -0
- package/dist/create-theme/cli.js +169 -0
- package/dist/create-theme/index.d.ts +176 -0
- package/dist/create-theme/index.js +817 -0
- package/dist/create-theme/lib/ramp-math.js +128 -0
- package/dist/create-theme/lib/resolve.js +141 -0
- package/dist/create-theme/theme-data.js +1116 -0
- package/dist/index.d.ts +83 -3
- package/dist/index.js +60 -8
- package/dist/molecules/Alert.svelte +73 -66
- package/dist/molecules/Alert.svelte.d.ts +9 -1
- package/dist/molecules/AppBar.svelte +415 -0
- package/dist/molecules/AppBar.svelte.d.ts +69 -0
- package/dist/molecules/AvatarGroup.svelte +116 -0
- package/dist/molecules/AvatarGroup.svelte.d.ts +40 -0
- package/dist/molecules/BottomSheet.svelte +540 -0
- package/dist/molecules/BottomSheet.svelte.d.ts +93 -0
- package/dist/molecules/BottomTabBar.svelte +297 -0
- package/dist/molecules/BottomTabBar.svelte.d.ts +64 -0
- package/dist/molecules/Calendar.svelte +597 -0
- package/dist/molecules/Calendar.svelte.d.ts +72 -0
- package/dist/molecules/Collapsible.svelte +243 -0
- package/dist/molecules/Collapsible.svelte.d.ts +44 -0
- package/dist/molecules/CollapsibleGroup.svelte +126 -0
- package/dist/molecules/CollapsibleGroup.svelte.d.ts +14 -0
- package/dist/molecules/ComponentDemo.svelte +25 -5
- package/dist/molecules/ComponentDemo.svelte.d.ts +5 -0
- package/dist/molecules/ConfirmDialog.svelte +253 -0
- package/dist/molecules/ConfirmDialog.svelte.d.ts +55 -0
- package/dist/molecules/ContactForm.svelte +46 -19
- package/dist/molecules/ContactForm.svelte.d.ts +10 -0
- package/dist/molecules/Drawer.svelte +394 -0
- package/dist/molecules/Drawer.svelte.d.ts +55 -0
- package/dist/molecules/Dropdown.svelte +540 -50
- package/dist/molecules/Dropdown.svelte.d.ts +49 -6
- package/dist/molecules/DropdownItem.svelte +122 -0
- package/dist/molecules/DropdownItem.svelte.d.ts +28 -0
- package/dist/molecules/EmptyState.svelte +56 -10
- package/dist/molecules/EmptyState.svelte.d.ts +8 -0
- package/dist/molecules/Form.svelte +25 -14
- package/dist/molecules/Form.svelte.d.ts +13 -5
- package/dist/molecules/FormField.svelte +11 -2
- package/dist/molecules/FormField.svelte.d.ts +2 -0
- package/dist/molecules/Header.svelte +13 -3
- package/dist/molecules/Header.svelte.d.ts +2 -0
- package/dist/molecules/ImageUpload.svelte +422 -70
- package/dist/molecules/ImageUpload.svelte.d.ts +61 -5
- package/dist/molecules/MediaGrid.svelte +527 -0
- package/dist/molecules/MediaGrid.svelte.d.ts +77 -0
- package/dist/molecules/Modal.svelte +340 -45
- package/dist/molecules/Modal.svelte.d.ts +59 -7
- package/dist/molecules/NavigationMenu.svelte +15 -3
- package/dist/molecules/NavigationMenu.svelte.d.ts +4 -0
- package/dist/molecules/NavigationMenuContent.svelte +91 -36
- package/dist/molecules/NavigationMenuContent.svelte.d.ts +2 -0
- package/dist/molecules/NavigationMenuItem.svelte +10 -3
- package/dist/molecules/NavigationMenuItem.svelte.d.ts +2 -0
- package/dist/molecules/NavigationMenuLink.svelte +10 -2
- package/dist/molecules/NavigationMenuLink.svelte.d.ts +2 -0
- package/dist/molecules/NavigationMenuList.svelte +19 -4
- package/dist/molecules/NavigationMenuList.svelte.d.ts +2 -0
- package/dist/molecules/NavigationMenuTrigger.svelte +16 -3
- package/dist/molecules/NavigationMenuTrigger.svelte.d.ts +2 -0
- package/dist/molecules/Page.svelte +38 -2
- package/dist/molecules/Page.svelte.d.ts +13 -0
- package/dist/molecules/PhotoGrid.svelte +433 -0
- package/dist/molecules/PhotoGrid.svelte.d.ts +62 -0
- package/dist/molecules/PhotoViewer.svelte +1116 -0
- package/dist/molecules/PhotoViewer.svelte.d.ts +56 -0
- package/dist/molecules/PropsTable.svelte +26 -11
- package/dist/molecules/PropsTable.svelte.d.ts +5 -0
- package/dist/molecules/PullToRefresh.svelte +263 -0
- package/dist/molecules/PullToRefresh.svelte.d.ts +52 -0
- package/dist/molecules/RadioGroup.svelte +57 -15
- package/dist/molecules/RadioGroup.svelte.d.ts +16 -3
- package/dist/molecules/Section.svelte +13 -5
- package/dist/molecules/Section.svelte.d.ts +3 -1
- package/dist/molecules/SegmentedControl.svelte +323 -0
- package/dist/molecules/SegmentedControl.svelte.d.ts +34 -0
- package/dist/molecules/SidebarBrandHeader.svelte +24 -5
- package/dist/molecules/SidebarBrandHeader.svelte.d.ts +5 -0
- package/dist/molecules/SidebarFooter.svelte +39 -8
- package/dist/molecules/SidebarFooter.svelte.d.ts +5 -0
- package/dist/molecules/SidebarNavSection.svelte +12 -4
- package/dist/molecules/SidebarNavSection.svelte.d.ts +2 -0
- package/dist/molecules/SlideUp.svelte +253 -30
- package/dist/molecules/SlideUp.svelte.d.ts +31 -4
- package/dist/molecules/SortableList.svelte +632 -0
- package/dist/molecules/SortableList.svelte.d.ts +69 -0
- package/dist/molecules/Stepper.svelte +548 -0
- package/dist/molecules/Stepper.svelte.d.ts +39 -0
- package/dist/molecules/StickyActionBar.svelte +191 -0
- package/dist/molecules/StickyActionBar.svelte.d.ts +65 -0
- package/dist/molecules/SwipeableListItem.svelte +334 -0
- package/dist/molecules/SwipeableListItem.svelte.d.ts +54 -0
- package/dist/molecules/Tabs.svelte +254 -24
- package/dist/molecules/Tabs.svelte.d.ts +15 -4
- package/dist/molecules/Toaster.svelte +352 -6
- package/dist/molecules/Toaster.svelte.d.ts +95 -2
- package/dist/molecules/ToasterToast.svelte +279 -62
- package/dist/molecules/ToasterToast.svelte.d.ts +11 -0
- package/dist/molecules/UnsavedChangesBar.svelte +212 -0
- package/dist/molecules/UnsavedChangesBar.svelte.d.ts +43 -0
- package/dist/molecules/index.d.ts +46 -0
- package/dist/molecules/index.js +27 -0
- package/dist/molecules/toast-store.d.ts +53 -7
- package/dist/molecules/toast-store.js +21 -0
- package/dist/organisms/AppShell.svelte +196 -0
- package/dist/organisms/AppShell.svelte.d.ts +61 -0
- package/dist/organisms/SidebarAccountPanel.svelte +111 -12
- package/dist/organisms/SidebarAccountPanel.svelte.d.ts +21 -0
- package/dist/organisms/SidebarNavigation.svelte +193 -69
- package/dist/organisms/SidebarNavigation.svelte.d.ts +31 -1
- package/dist/organisms/SidebarPanel.svelte +45 -16
- package/dist/organisms/SidebarPanel.svelte.d.ts +2 -0
- package/dist/organisms/SidebarShell.svelte +263 -0
- package/dist/organisms/SidebarShell.svelte.d.ts +106 -0
- package/dist/organisms/TopNavbar.svelte +329 -33
- package/dist/organisms/TopNavbar.svelte.d.ts +28 -0
- package/dist/organisms/index.d.ts +6 -0
- package/dist/organisms/index.js +4 -0
- package/dist/routes/lib/variant-utils.d.ts +26 -0
- package/dist/routes/lib/{variant-utils.ts → variant-utils.js} +15 -46
- package/dist/types/components.d.ts +4 -0
- package/dist/types/components.d.ts.map +1 -1
- package/dist/types/events.js +1 -0
- package/dist/types/index.d.ts +605 -25
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/variants.ts +17 -1
- package/dist/util/app-shell.d.ts +27 -0
- package/dist/util/app-shell.js +72 -0
- package/dist/util/avatar.d.ts +35 -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 +34 -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/cn.d.ts +7 -0
- package/dist/util/cn.js +48 -0
- package/dist/util/collapsible.d.ts +57 -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/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.d.ts +38 -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 +75 -2
- package/dist/util/focus-utils.js +182 -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/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 +214 -0
- package/dist/util/photo.js +206 -0
- package/dist/util/portal.d.ts +22 -0
- package/dist/util/portal.js +50 -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-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 +59 -0
- package/dist/util/sheet-drag.js +241 -0
- package/dist/util/sidebar.d.ts +62 -0
- package/dist/util/sidebar.js +38 -0
- package/dist/util/sortable-list.d.ts +64 -0
- package/dist/util/sortable-list.js +53 -0
- package/dist/util/ssr-safe.d.ts +4 -4
- 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/theme-mode.d.ts +79 -0
- package/dist/util/theme-mode.js +121 -0
- package/dist/util/toaster.d.ts +92 -0
- package/dist/util/toaster.js +75 -0
- package/dist/util/tooltip.d.ts +9 -0
- package/dist/util/tooltip.js +18 -0
- package/dist/util/top-navbar.d.ts +10 -0
- package/dist/util/top-navbar.js +5 -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 +132 -0
- package/dist/util/zabi-strings.js +105 -0
- package/dist/zabi-components-colors.css +5 -2
- package/dist/zabi-components-theme-dark-only.css +574 -225
- package/dist/zabi-components-theme-dark.css +574 -225
- package/dist/zabi-components-theme-only.css +1680 -317
- package/dist/zabi-components-theme.css +1680 -317
- package/dist/zabi-components.css +4473 -1158
- package/docs/lucide-icons.md +41 -16
- package/docs/theme-imports.md +81 -11
- package/package.json +51 -29
- package/dist/lib/layout-width-tokens.d.ts +0 -17
- package/dist/lib/layout-width-tokens.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Button.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Button.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Input.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Input.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/List.d.ts +0 -3
- package/dist/lib/showcase/component-docs/List.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Modal.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Modal.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Radio.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Radio.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts +0 -3
- package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/Skeleton.d.ts +0 -3
- package/dist/lib/showcase/component-docs/Skeleton.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/_shared.d.ts +0 -12
- package/dist/lib/showcase/component-docs/_shared.d.ts.map +0 -1
- package/dist/lib/showcase/component-docs/index.d.ts +0 -4
- package/dist/lib/showcase/component-docs/index.d.ts.map +0 -1
- package/dist/lib/showcase/components-catalog.d.ts +0 -3
- package/dist/lib/showcase/components-catalog.d.ts.map +0 -1
- package/dist/lib/showcase/components-showcase-constants.d.ts +0 -89
- package/dist/lib/showcase/components-showcase-constants.d.ts.map +0 -1
- package/dist/lib/showcase/docs-sidebar-helpers.d.ts +0 -15
- package/dist/lib/showcase/docs-sidebar-helpers.d.ts.map +0 -1
- package/dist/routes/lib/focus-utils.d.ts +0 -12
- package/dist/routes/lib/focus-utils.ts +0 -110
- package/dist/routes/lib/ssr-safe.ts +0 -58
- package/scripts/fix-lucide-svelte-icon-dts.js +0 -35
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The maths behind every chromatic ramp: one shared lightness curve, one
|
|
3
|
+
* chroma envelope, and a solver that lands a hue and chroma on a CIE L*.
|
|
4
|
+
*
|
|
5
|
+
* It lives here, not in tokens/, because the theme generator ships it: this
|
|
6
|
+
* directory is copied into dist/create-theme/ and runs under plain Node in an
|
|
7
|
+
* app's project. tokens/chromatic-scales.js imports it for the library's own
|
|
8
|
+
* ramps, so the library and a generated brand cannot drift onto two curves.
|
|
9
|
+
*
|
|
10
|
+
* Runtime dependency: culori.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { converter, formatHex, inGamut } from 'culori';
|
|
14
|
+
|
|
15
|
+
const toLab = converter('lab');
|
|
16
|
+
const toOklch = converter('oklch');
|
|
17
|
+
const toRgb = converter('rgb');
|
|
18
|
+
const rgbInGamut = inGamut('rgb');
|
|
19
|
+
|
|
20
|
+
export const RAMP_STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The shared lightness curve, in CIE L*.
|
|
24
|
+
*
|
|
25
|
+
* Step 600 sits at L* 47, which is the darkest a fill can be while still
|
|
26
|
+
* reading as "coloured" and the lightest it can be while keeping >= 4.5:1
|
|
27
|
+
* against white. Every semantic token resolves to step 600 in light mode
|
|
28
|
+
* (and mirrors to step 400 in dark).
|
|
29
|
+
*/
|
|
30
|
+
export const TARGET_LIGHTNESS = {
|
|
31
|
+
50: 97,
|
|
32
|
+
100: 94,
|
|
33
|
+
200: 88,
|
|
34
|
+
300: 80,
|
|
35
|
+
400: 70,
|
|
36
|
+
500: 58,
|
|
37
|
+
600: 47,
|
|
38
|
+
700: 38,
|
|
39
|
+
800: 29,
|
|
40
|
+
900: 20,
|
|
41
|
+
950: 12,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Chroma envelope across the ramp, as a fraction of peakChroma.
|
|
46
|
+
* Colour is most saturated in the middle and tapers at both ends, which is how
|
|
47
|
+
* a ramp stays usable: near-white tints don't turn neon, near-black shades
|
|
48
|
+
* don't turn muddy.
|
|
49
|
+
*/
|
|
50
|
+
export const CHROMA_ENVELOPE = {
|
|
51
|
+
50: 0.08,
|
|
52
|
+
100: 0.16,
|
|
53
|
+
200: 0.32,
|
|
54
|
+
300: 0.52,
|
|
55
|
+
400: 0.74,
|
|
56
|
+
500: 0.92,
|
|
57
|
+
600: 1.0,
|
|
58
|
+
700: 0.94,
|
|
59
|
+
800: 0.82,
|
|
60
|
+
900: 0.66,
|
|
61
|
+
950: 0.48,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export function cieL(color) {
|
|
65
|
+
return toLab(color).l;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Pull chroma down until the colour fits in sRGB, keeping L* and hue. */
|
|
69
|
+
function fitToGamut(oklchColor) {
|
|
70
|
+
let { l, c, h } = oklchColor;
|
|
71
|
+
if (rgbInGamut({ mode: 'oklch', l, c, h })) return { mode: 'oklch', l, c, h };
|
|
72
|
+
let lo = 0;
|
|
73
|
+
let hi = c;
|
|
74
|
+
for (let i = 0; i < 40; i += 1) {
|
|
75
|
+
const mid = (lo + hi) / 2;
|
|
76
|
+
if (rgbInGamut({ mode: 'oklch', l, c: mid, h })) lo = mid;
|
|
77
|
+
else hi = mid;
|
|
78
|
+
}
|
|
79
|
+
return { mode: 'oklch', l, c: lo, h };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Solve for the OKLCH lightness that lands on a given CIE L*, at a fixed hue
|
|
84
|
+
* and chroma. OKLCH L and CIE L* are both perceptual but not identical, so a
|
|
85
|
+
* short bisection is the honest way to hit the target.
|
|
86
|
+
*/
|
|
87
|
+
export function solveForCieL(targetL, chroma, hue) {
|
|
88
|
+
let lo = 0;
|
|
89
|
+
let hi = 1;
|
|
90
|
+
let best = { mode: 'oklch', l: 0.5, c: chroma, h: hue };
|
|
91
|
+
for (let i = 0; i < 48; i += 1) {
|
|
92
|
+
const mid = (lo + hi) / 2;
|
|
93
|
+
const candidate = fitToGamut({ mode: 'oklch', l: mid, c: chroma, h: hue });
|
|
94
|
+
const actual = cieL(candidate);
|
|
95
|
+
best = candidate;
|
|
96
|
+
if (Math.abs(actual - targetL) < 0.01) break;
|
|
97
|
+
if (actual < targetL) lo = mid;
|
|
98
|
+
else hi = mid;
|
|
99
|
+
}
|
|
100
|
+
return best;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** The colour at one CIE L*, hue and chroma, as `#rrggbb`. */
|
|
104
|
+
export function hexAt(targetL, chroma, hue) {
|
|
105
|
+
return formatHex(toRgb(solveForCieL(targetL, chroma, hue)));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* One ramp from a seed `{ hue, peakChroma, hueShift }`, as `{ step: '#rrggbb' }`.
|
|
110
|
+
* Hue is in OKLCH degrees; `hueShift` rotates it linearly from step 50 to 950.
|
|
111
|
+
*/
|
|
112
|
+
export function generateRampFromSeed(seed) {
|
|
113
|
+
const out = {};
|
|
114
|
+
for (const step of RAMP_STEPS) {
|
|
115
|
+
const t = (RAMP_STEPS.indexOf(step)) / (RAMP_STEPS.length - 1);
|
|
116
|
+
const hue = (seed.hue + (seed.hueShift ?? 0) * t + 360) % 360;
|
|
117
|
+
const chroma = seed.peakChroma * CHROMA_ENVELOPE[step];
|
|
118
|
+
out[step] = hexAt(TARGET_LIGHTNESS[step], chroma, hue);
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** Measured CIE L* of a hex string, to one decimal. */
|
|
124
|
+
export function measureLightness(hex) {
|
|
125
|
+
return Math.round(cieL(hex) * 10) / 10;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export { toOklch, toLab };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve design tokens the way a browser would, without a browser.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions over a `{ '--token': 'value' }` map: no file access and no
|
|
5
|
+
* dependencies, because the theme generator ships this file to apps
|
|
6
|
+
* (dist/create-theme/lib/) to run its contrast check. The library's own
|
|
7
|
+
* guards reach it through scripts/resolve-tokens.js, which adds the PostCSS
|
|
8
|
+
* reading of stylesheets on top.
|
|
9
|
+
*
|
|
10
|
+
* Supported, because it is all the stylesheet uses for a flat colour:
|
|
11
|
+
* - `var(--token)` and `var(--token, fallback)`, anywhere in a value
|
|
12
|
+
* - `color-mix(in srgb, <opaque> p%, <opaque>)` (either or both percentages)
|
|
13
|
+
* Anything else (`rgba()`, a mix with `transparent`) is returned as written,
|
|
14
|
+
* for the caller to composite over a surface or to skip.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const HEX = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
|
|
18
|
+
|
|
19
|
+
function parseHex(hex) {
|
|
20
|
+
const h = hex.replace('#', '');
|
|
21
|
+
const full = h.length === 3 ? h.split('').map((c) => c + c).join('') : h;
|
|
22
|
+
return [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function toHex(channels) {
|
|
26
|
+
return '#' + channels.map((c) => Math.round(c).toString(16).padStart(2, '0')).join('');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Split on commas that are not inside parentheses. */
|
|
30
|
+
function splitTopLevel(text) {
|
|
31
|
+
const parts = [];
|
|
32
|
+
let depth = 0;
|
|
33
|
+
let current = '';
|
|
34
|
+
for (const char of text) {
|
|
35
|
+
if (char === '(') depth += 1;
|
|
36
|
+
if (char === ')') depth -= 1;
|
|
37
|
+
if (char === ',' && depth === 0) {
|
|
38
|
+
parts.push(current.trim());
|
|
39
|
+
current = '';
|
|
40
|
+
} else {
|
|
41
|
+
current += char;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
parts.push(current.trim());
|
|
45
|
+
return parts;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Index of the parenthesis that closes the one at `open`. */
|
|
49
|
+
function closingParen(text, open) {
|
|
50
|
+
let depth = 0;
|
|
51
|
+
for (let i = open; i < text.length; i += 1) {
|
|
52
|
+
if (text[i] === '(') depth += 1;
|
|
53
|
+
if (text[i] === ')') {
|
|
54
|
+
depth -= 1;
|
|
55
|
+
if (depth === 0) return i;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return -1;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Replace every `var()` in `value` with what it refers to in `map`.
|
|
63
|
+
* Returns null when a reference has neither a declaration nor a fallback,
|
|
64
|
+
* which is what makes a declaration invalid at computed-value time.
|
|
65
|
+
*/
|
|
66
|
+
export function substituteVars(map, value, seen = new Set()) {
|
|
67
|
+
let out = value.replace(/\/\*[\s\S]*?\*\//g, '').trim();
|
|
68
|
+
let guard = 0;
|
|
69
|
+
while (out.includes('var(')) {
|
|
70
|
+
guard += 1;
|
|
71
|
+
if (guard > 200) return null;
|
|
72
|
+
const start = out.indexOf('var(');
|
|
73
|
+
const end = closingParen(out, start + 3);
|
|
74
|
+
if (end === -1) return null;
|
|
75
|
+
const [name, ...fallback] = splitTopLevel(out.slice(start + 4, end));
|
|
76
|
+
let replacement;
|
|
77
|
+
if (map[name] !== undefined && !seen.has(name)) {
|
|
78
|
+
replacement = substituteVars(map, map[name], new Set([...seen, name]));
|
|
79
|
+
}
|
|
80
|
+
if (replacement === null || replacement === undefined) {
|
|
81
|
+
replacement = fallback.length
|
|
82
|
+
? substituteVars(map, fallback.join(', '), seen)
|
|
83
|
+
: null;
|
|
84
|
+
}
|
|
85
|
+
if (replacement === null) return null;
|
|
86
|
+
out = out.slice(0, start) + replacement + out.slice(end + 1);
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* `color-mix(in srgb, A p%, B q%)` of two opaque colours, as hex.
|
|
93
|
+
* Returns null for anything it cannot reduce to one flat colour.
|
|
94
|
+
*/
|
|
95
|
+
export function evaluateColorMix(value) {
|
|
96
|
+
const match = /^color-mix\(([\s\S]*)\)$/.exec(value.trim());
|
|
97
|
+
if (!match) return null;
|
|
98
|
+
const [space, first, second] = splitTopLevel(match[1]);
|
|
99
|
+
if (!space || !first || !second || space.replace(/\s+/g, ' ') !== 'in srgb') return null;
|
|
100
|
+
|
|
101
|
+
const operand = (text) => {
|
|
102
|
+
const percent = /(-?[\d.]+)%/.exec(text);
|
|
103
|
+
const colourText = text.replace(/-?[\d.]+%/, '').trim();
|
|
104
|
+
const colour = HEX.test(colourText) ? colourText : evaluateColorMix(colourText);
|
|
105
|
+
return colour ? { colour, percent: percent ? Number(percent[1]) : null } : null;
|
|
106
|
+
};
|
|
107
|
+
const a = operand(first);
|
|
108
|
+
const b = operand(second);
|
|
109
|
+
if (!a || !b) return null;
|
|
110
|
+
|
|
111
|
+
let pa = a.percent;
|
|
112
|
+
let pb = b.percent;
|
|
113
|
+
if (pa === null && pb === null) { pa = 50; pb = 50; }
|
|
114
|
+
else if (pa === null) pa = 100 - pb;
|
|
115
|
+
else if (pb === null) pb = 100 - pa;
|
|
116
|
+
const total = pa + pb;
|
|
117
|
+
// A sum under 100% leaves the result partly transparent; over-100 is normalised.
|
|
118
|
+
if (total <= 0 || total < 100) return null;
|
|
119
|
+
const wa = pa / total;
|
|
120
|
+
const ca = parseHex(a.colour);
|
|
121
|
+
const cb = parseHex(b.colour);
|
|
122
|
+
return toHex(ca.map((channel, i) => channel * wa + cb[i] * (1 - wa)));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* The literal a token computes to: `var()` chains followed and an opaque
|
|
127
|
+
* `color-mix()` evaluated to hex. Null when the token is not declared.
|
|
128
|
+
*/
|
|
129
|
+
export function resolveTokenValue(map, token) {
|
|
130
|
+
if (map[token] === undefined) return null;
|
|
131
|
+
const substituted = substituteVars(map, map[token], new Set([token]));
|
|
132
|
+
if (substituted === null) return null;
|
|
133
|
+
if (substituted.startsWith('color-mix(')) return evaluateColorMix(substituted) ?? substituted;
|
|
134
|
+
return substituted;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** As above, but only when the result is one flat opaque colour. */
|
|
138
|
+
export function resolveTokenColor(map, token) {
|
|
139
|
+
const value = resolveTokenValue(map, token);
|
|
140
|
+
return value && HEX.test(value) ? value.toLowerCase() : null;
|
|
141
|
+
}
|