@pithyjs/ui-kit 0.1.0-beta.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/LICENSE +21 -0
- package/dist/animation/animate-in.d.ts +35 -0
- package/dist/animation/animate-in.d.ts.map +1 -0
- package/dist/animation/animate-in.js +71 -0
- package/dist/animation/animate-in.js.map +1 -0
- package/dist/atoms/actions/_icon-control.scss +53 -0
- package/dist/atoms/actions/button/Button.d.ts +93 -0
- package/dist/atoms/actions/button/Button.d.ts.map +1 -0
- package/dist/atoms/actions/button/Button.js +332 -0
- package/dist/atoms/actions/button/Button.js.map +1 -0
- package/dist/atoms/actions/button/button.scss +342 -0
- package/dist/atoms/actions/icon-button/IconButton.d.ts +47 -0
- package/dist/atoms/actions/icon-button/IconButton.d.ts.map +1 -0
- package/dist/atoms/actions/icon-button/IconButton.js +81 -0
- package/dist/atoms/actions/icon-button/IconButton.js.map +1 -0
- package/dist/atoms/actions/icon-button/icon-button.scss +20 -0
- package/dist/atoms/actions/icon-group/IconGroup.d.ts +60 -0
- package/dist/atoms/actions/icon-group/IconGroup.d.ts.map +1 -0
- package/dist/atoms/actions/icon-group/IconGroup.js +191 -0
- package/dist/atoms/actions/icon-group/IconGroup.js.map +1 -0
- package/dist/atoms/actions/icon-group/icon-group.scss +36 -0
- package/dist/atoms/actions/segmented-control/SegmentedControl.d.ts +49 -0
- package/dist/atoms/actions/segmented-control/SegmentedControl.d.ts.map +1 -0
- package/dist/atoms/actions/segmented-control/SegmentedControl.js +107 -0
- package/dist/atoms/actions/segmented-control/SegmentedControl.js.map +1 -0
- package/dist/atoms/actions/segmented-control/segmented-control.scss +90 -0
- package/dist/atoms/content/_mixins.scss +79 -0
- package/dist/atoms/content/action-tile/ActionTile.d.ts +27 -0
- package/dist/atoms/content/action-tile/ActionTile.d.ts.map +1 -0
- package/dist/atoms/content/action-tile/ActionTile.js +98 -0
- package/dist/atoms/content/action-tile/ActionTile.js.map +1 -0
- package/dist/atoms/content/action-tile/action-tile.scss +150 -0
- package/dist/atoms/content/badge/Badge.d.ts +57 -0
- package/dist/atoms/content/badge/Badge.d.ts.map +1 -0
- package/dist/atoms/content/badge/Badge.js +177 -0
- package/dist/atoms/content/badge/Badge.js.map +1 -0
- package/dist/atoms/content/badge/badge.scss +198 -0
- package/dist/atoms/content/heading/Heading.d.ts +53 -0
- package/dist/atoms/content/heading/Heading.d.ts.map +1 -0
- package/dist/atoms/content/heading/Heading.js +142 -0
- package/dist/atoms/content/heading/Heading.js.map +1 -0
- package/dist/atoms/content/heading/heading.scss +43 -0
- package/dist/atoms/content/icon/Icon.d.ts +68 -0
- package/dist/atoms/content/icon/Icon.d.ts.map +1 -0
- package/dist/atoms/content/icon/Icon.js +137 -0
- package/dist/atoms/content/icon/Icon.js.map +1 -0
- package/dist/atoms/content/icon/icon.scss +66 -0
- package/dist/atoms/content/icon/resolveIconSvg.d.ts +21 -0
- package/dist/atoms/content/icon/resolveIconSvg.d.ts.map +1 -0
- package/dist/atoms/content/icon/resolveIconSvg.js +73 -0
- package/dist/atoms/content/icon/resolveIconSvg.js.map +1 -0
- package/dist/atoms/content/image/Image.d.ts +81 -0
- package/dist/atoms/content/image/Image.d.ts.map +1 -0
- package/dist/atoms/content/image/Image.js +293 -0
- package/dist/atoms/content/image/Image.js.map +1 -0
- package/dist/atoms/content/image/image.scss +77 -0
- package/dist/atoms/content/text/Text.d.ts +58 -0
- package/dist/atoms/content/text/Text.d.ts.map +1 -0
- package/dist/atoms/content/text/Text.js +158 -0
- package/dist/atoms/content/text/Text.js.map +1 -0
- package/dist/atoms/content/text/text.scss +98 -0
- package/dist/atoms/content/tile/Tile.d.ts +66 -0
- package/dist/atoms/content/tile/Tile.d.ts.map +1 -0
- package/dist/atoms/content/tile/Tile.js +125 -0
- package/dist/atoms/content/tile/Tile.js.map +1 -0
- package/dist/atoms/content/tile/tile.scss +122 -0
- package/dist/atoms/feedback/tooltip/Tooltip.d.ts +44 -0
- package/dist/atoms/feedback/tooltip/Tooltip.d.ts.map +1 -0
- package/dist/atoms/feedback/tooltip/Tooltip.js +121 -0
- package/dist/atoms/feedback/tooltip/Tooltip.js.map +1 -0
- package/dist/atoms/feedback/tooltip/tooltip.scss +96 -0
- package/dist/atoms/forms/checkbox/Checkbox.d.ts +49 -0
- package/dist/atoms/forms/checkbox/Checkbox.d.ts.map +1 -0
- package/dist/atoms/forms/checkbox/Checkbox.js +269 -0
- package/dist/atoms/forms/checkbox/Checkbox.js.map +1 -0
- package/dist/atoms/forms/checkbox/CheckboxGroup.d.ts +50 -0
- package/dist/atoms/forms/checkbox/CheckboxGroup.d.ts.map +1 -0
- package/dist/atoms/forms/checkbox/CheckboxGroup.js +132 -0
- package/dist/atoms/forms/checkbox/CheckboxGroup.js.map +1 -0
- package/dist/atoms/forms/checkbox/checkbox.scss +506 -0
- package/dist/atoms/forms/file-picker/FilePicker.d.ts +23 -0
- package/dist/atoms/forms/file-picker/FilePicker.d.ts.map +1 -0
- package/dist/atoms/forms/file-picker/FilePicker.js +103 -0
- package/dist/atoms/forms/file-picker/FilePicker.js.map +1 -0
- package/dist/atoms/forms/file-picker/file-picker.scss +84 -0
- package/dist/atoms/forms/form-field/FormField.d.ts +39 -0
- package/dist/atoms/forms/form-field/FormField.d.ts.map +1 -0
- package/dist/atoms/forms/form-field/FormField.js +139 -0
- package/dist/atoms/forms/form-field/FormField.js.map +1 -0
- package/dist/atoms/forms/form-field/form-field.scss +46 -0
- package/dist/atoms/forms/input/Input.d.ts +81 -0
- package/dist/atoms/forms/input/Input.d.ts.map +1 -0
- package/dist/atoms/forms/input/Input.js +417 -0
- package/dist/atoms/forms/input/Input.js.map +1 -0
- package/dist/atoms/forms/input/input.scss +547 -0
- package/dist/atoms/forms/radio/Radio.d.ts +54 -0
- package/dist/atoms/forms/radio/Radio.d.ts.map +1 -0
- package/dist/atoms/forms/radio/Radio.js +278 -0
- package/dist/atoms/forms/radio/Radio.js.map +1 -0
- package/dist/atoms/forms/radio/RadioGroup.d.ts +54 -0
- package/dist/atoms/forms/radio/RadioGroup.d.ts.map +1 -0
- package/dist/atoms/forms/radio/RadioGroup.js +137 -0
- package/dist/atoms/forms/radio/RadioGroup.js.map +1 -0
- package/dist/atoms/forms/radio/radio.scss +459 -0
- package/dist/atoms/forms/select/Select.d.ts +57 -0
- package/dist/atoms/forms/select/Select.d.ts.map +1 -0
- package/dist/atoms/forms/select/Select.js +457 -0
- package/dist/atoms/forms/select/Select.js.map +1 -0
- package/dist/atoms/forms/select/select-dropdown.d.ts +49 -0
- package/dist/atoms/forms/select/select-dropdown.d.ts.map +1 -0
- package/dist/atoms/forms/select/select-dropdown.js +305 -0
- package/dist/atoms/forms/select/select-dropdown.js.map +1 -0
- package/dist/atoms/forms/select/select-keyboard.d.ts +14 -0
- package/dist/atoms/forms/select/select-keyboard.d.ts.map +1 -0
- package/dist/atoms/forms/select/select-keyboard.js +182 -0
- package/dist/atoms/forms/select/select-keyboard.js.map +1 -0
- package/dist/atoms/forms/select/select.scss +630 -0
- package/dist/atoms/forms/textarea/Textarea.d.ts +69 -0
- package/dist/atoms/forms/textarea/Textarea.d.ts.map +1 -0
- package/dist/atoms/forms/textarea/Textarea.js +394 -0
- package/dist/atoms/forms/textarea/Textarea.js.map +1 -0
- package/dist/atoms/forms/textarea/textarea.scss +486 -0
- package/dist/atoms/forms/toggle/Toggle.d.ts +47 -0
- package/dist/atoms/forms/toggle/Toggle.d.ts.map +1 -0
- package/dist/atoms/forms/toggle/Toggle.js +243 -0
- package/dist/atoms/forms/toggle/Toggle.js.map +1 -0
- package/dist/atoms/forms/toggle/toggle.scss +561 -0
- package/dist/compiler.d.ts +7 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +18 -0
- package/dist/compiler.js.map +1 -0
- package/dist/icons/index.d.ts +14 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +14 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/icons/registry.d.ts +65 -0
- package/dist/icons/registry.d.ts.map +1 -0
- package/dist/icons/registry.js +126 -0
- package/dist/icons/registry.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/Grid.d.ts +78 -0
- package/dist/layout/Grid.d.ts.map +1 -0
- package/dist/layout/Grid.js +272 -0
- package/dist/layout/Grid.js.map +1 -0
- package/dist/layout/GridItem.d.ts +52 -0
- package/dist/layout/GridItem.d.ts.map +1 -0
- package/dist/layout/GridItem.js +99 -0
- package/dist/layout/GridItem.js.map +1 -0
- package/dist/layout/PageSection.d.ts +43 -0
- package/dist/layout/PageSection.d.ts.map +1 -0
- package/dist/layout/PageSection.js +75 -0
- package/dist/layout/PageSection.js.map +1 -0
- package/dist/layout/SmartContainer.d.ts +66 -0
- package/dist/layout/SmartContainer.d.ts.map +1 -0
- package/dist/layout/SmartContainer.js +194 -0
- package/dist/layout/SmartContainer.js.map +1 -0
- package/dist/layout/Stack.d.ts +65 -0
- package/dist/layout/Stack.d.ts.map +1 -0
- package/dist/layout/Stack.js +114 -0
- package/dist/layout/Stack.js.map +1 -0
- package/dist/organisms/content/Card.d.ts +93 -0
- package/dist/organisms/content/Card.d.ts.map +1 -0
- package/dist/organisms/content/Card.js +353 -0
- package/dist/organisms/content/Card.js.map +1 -0
- package/dist/organisms/content/_card-horizontal.scss +88 -0
- package/dist/organisms/content/_card-link.scss +49 -0
- package/dist/organisms/content/_card-overlay.scss +91 -0
- package/dist/organisms/content/_card-root.scss +99 -0
- package/dist/organisms/content/_card-slots.scss +143 -0
- package/dist/organisms/content/_card-states.scss +166 -0
- package/dist/organisms/content/_card-tokens.scss +22 -0
- package/dist/organisms/content/_card-variants.scss +31 -0
- package/dist/organisms/content/card.scss +15 -0
- package/dist/organisms/feedback/Modal.d.ts +39 -0
- package/dist/organisms/feedback/Modal.d.ts.map +1 -0
- package/dist/organisms/feedback/Modal.js +120 -0
- package/dist/organisms/feedback/Modal.js.map +1 -0
- package/dist/organisms/feedback/Popover.d.ts +30 -0
- package/dist/organisms/feedback/Popover.d.ts.map +1 -0
- package/dist/organisms/feedback/Popover.js +151 -0
- package/dist/organisms/feedback/Popover.js.map +1 -0
- package/dist/organisms/feedback/modal.scss +66 -0
- package/dist/organisms/feedback/popover.scss +27 -0
- package/dist/organisms/forms/DynamicForm.d.ts +118 -0
- package/dist/organisms/forms/DynamicForm.d.ts.map +1 -0
- package/dist/organisms/forms/DynamicForm.js +546 -0
- package/dist/organisms/forms/DynamicForm.js.map +1 -0
- package/dist/organisms/forms/Form.d.ts +62 -0
- package/dist/organisms/forms/Form.d.ts.map +1 -0
- package/dist/organisms/forms/Form.js +131 -0
- package/dist/organisms/forms/Form.js.map +1 -0
- package/dist/organisms/forms/dynamic-form.scss +91 -0
- package/dist/organisms/forms/form-helpers.d.ts +21 -0
- package/dist/organisms/forms/form-helpers.d.ts.map +1 -0
- package/dist/organisms/forms/form-helpers.js +57 -0
- package/dist/organisms/forms/form-helpers.js.map +1 -0
- package/dist/organisms/forms/form-state.d.ts +66 -0
- package/dist/organisms/forms/form-state.d.ts.map +1 -0
- package/dist/organisms/forms/form-state.js +156 -0
- package/dist/organisms/forms/form-state.js.map +1 -0
- package/dist/organisms/forms/form.scss +23 -0
- package/dist/organisms/forms/validation.d.ts +32 -0
- package/dist/organisms/forms/validation.d.ts.map +1 -0
- package/dist/organisms/forms/validation.js +118 -0
- package/dist/organisms/forms/validation.js.map +1 -0
- package/dist/organisms/navigation/Navbar.d.ts +66 -0
- package/dist/organisms/navigation/Navbar.d.ts.map +1 -0
- package/dist/organisms/navigation/Navbar.js +881 -0
- package/dist/organisms/navigation/Navbar.js.map +1 -0
- package/dist/organisms/navigation/_navbar-announcement.scss +62 -0
- package/dist/organisms/navigation/_navbar-brand.scss +69 -0
- package/dist/organisms/navigation/_navbar-container.scss +37 -0
- package/dist/organisms/navigation/_navbar-desktop.scss +116 -0
- package/dist/organisms/navigation/_navbar-drawer.scss +97 -0
- package/dist/organisms/navigation/_navbar-links.scss +143 -0
- package/dist/organisms/navigation/_navbar-menu.scss +193 -0
- package/dist/organisms/navigation/_navbar-root.scss +107 -0
- package/dist/organisms/navigation/_navbar-search.scss +83 -0
- package/dist/organisms/navigation/_navbar-toggle.scss +91 -0
- package/dist/organisms/navigation/_navbar-tokens.scss +15 -0
- package/dist/organisms/navigation/navbar.scss +17 -0
- package/dist/registry/categories.d.ts +6 -0
- package/dist/registry/categories.d.ts.map +1 -0
- package/dist/registry/categories.js +13 -0
- package/dist/registry/categories.js.map +1 -0
- package/dist/registry/components.d.ts +5 -0
- package/dist/registry/components.d.ts.map +1 -0
- package/dist/registry/components.js +95 -0
- package/dist/registry/components.js.map +1 -0
- package/dist/registry/index.d.ts +59 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +79 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/levels.d.ts +6 -0
- package/dist/registry/levels.d.ts.map +1 -0
- package/dist/registry/levels.js +9 -0
- package/dist/registry/levels.js.map +1 -0
- package/dist/registry/registry-meta-types.d.ts +67 -0
- package/dist/registry/registry-meta-types.d.ts.map +1 -0
- package/dist/registry/registry-meta-types.js +6 -0
- package/dist/registry/registry-meta-types.js.map +1 -0
- package/dist/registry/registry-meta.d.ts +5 -0
- package/dist/registry/registry-meta.d.ts.map +1 -0
- package/dist/registry/registry-meta.js +731 -0
- package/dist/registry/registry-meta.js.map +1 -0
- package/dist/registry/renderer.d.ts +69 -0
- package/dist/registry/renderer.d.ts.map +1 -0
- package/dist/registry/renderer.js +311 -0
- package/dist/registry/renderer.js.map +1 -0
- package/dist/sections/_section-base.scss +204 -0
- package/dist/sections/contact/ContactSection.d.ts +55 -0
- package/dist/sections/contact/ContactSection.d.ts.map +1 -0
- package/dist/sections/contact/ContactSection.js +142 -0
- package/dist/sections/contact/ContactSection.js.map +1 -0
- package/dist/sections/contact/contact-section.scss +142 -0
- package/dist/sections/cta/CTASection.d.ts +52 -0
- package/dist/sections/cta/CTASection.d.ts.map +1 -0
- package/dist/sections/cta/CTASection.js +130 -0
- package/dist/sections/cta/CTASection.js.map +1 -0
- package/dist/sections/cta/cta-section.scss +131 -0
- package/dist/sections/entrance.d.ts +29 -0
- package/dist/sections/entrance.d.ts.map +1 -0
- package/dist/sections/entrance.js +69 -0
- package/dist/sections/entrance.js.map +1 -0
- package/dist/sections/features/FeaturesSection.d.ts +54 -0
- package/dist/sections/features/FeaturesSection.d.ts.map +1 -0
- package/dist/sections/features/FeaturesSection.js +139 -0
- package/dist/sections/features/FeaturesSection.js.map +1 -0
- package/dist/sections/features/features-section.scss +140 -0
- package/dist/sections/footer/FooterSection.d.ts +53 -0
- package/dist/sections/footer/FooterSection.d.ts.map +1 -0
- package/dist/sections/footer/FooterSection.js +147 -0
- package/dist/sections/footer/FooterSection.js.map +1 -0
- package/dist/sections/footer/footer-section.scss +131 -0
- package/dist/sections/hero/HeroSection.d.ts +66 -0
- package/dist/sections/hero/HeroSection.d.ts.map +1 -0
- package/dist/sections/hero/HeroSection.js +156 -0
- package/dist/sections/hero/HeroSection.js.map +1 -0
- package/dist/sections/hero/hero-section.scss +211 -0
- package/dist/shared/_form-animations.scss +283 -0
- package/dist/shared/_media-fit.scss +63 -0
- package/dist/shared/_mixins.scss +69 -0
- package/dist/shared/_tokens.scss +116 -0
- package/dist/shared/badge.d.ts +15 -0
- package/dist/shared/badge.d.ts.map +1 -0
- package/dist/shared/badge.js +15 -0
- package/dist/shared/badge.js.map +1 -0
- package/dist/shared/button.d.ts +22 -0
- package/dist/shared/button.d.ts.map +1 -0
- package/dist/shared/button.js +22 -0
- package/dist/shared/button.js.map +1 -0
- package/dist/shared/card.d.ts +21 -0
- package/dist/shared/card.d.ts.map +1 -0
- package/dist/shared/card.js +38 -0
- package/dist/shared/card.js.map +1 -0
- package/dist/shared/checkbox.d.ts +10 -0
- package/dist/shared/checkbox.d.ts.map +1 -0
- package/dist/shared/checkbox.js +28 -0
- package/dist/shared/checkbox.js.map +1 -0
- package/dist/shared/clickable.d.ts +34 -0
- package/dist/shared/clickable.d.ts.map +1 -0
- package/dist/shared/clickable.js +54 -0
- package/dist/shared/clickable.js.map +1 -0
- package/dist/shared/common.d.ts +31 -0
- package/dist/shared/common.d.ts.map +1 -0
- package/dist/shared/common.js +92 -0
- package/dist/shared/common.js.map +1 -0
- package/dist/shared/entrance-config.d.ts +46 -0
- package/dist/shared/entrance-config.d.ts.map +1 -0
- package/dist/shared/entrance-config.js +54 -0
- package/dist/shared/entrance-config.js.map +1 -0
- package/dist/shared/focusable.d.ts +8 -0
- package/dist/shared/focusable.d.ts.map +1 -0
- package/dist/shared/focusable.js +17 -0
- package/dist/shared/focusable.js.map +1 -0
- package/dist/shared/form-elements.d.ts +57 -0
- package/dist/shared/form-elements.d.ts.map +1 -0
- package/dist/shared/form-elements.js +95 -0
- package/dist/shared/form-elements.js.map +1 -0
- package/dist/shared/form-state.d.ts +52 -0
- package/dist/shared/form-state.d.ts.map +1 -0
- package/dist/shared/form-state.js +151 -0
- package/dist/shared/form-state.js.map +1 -0
- package/dist/shared/grid.d.ts +21 -0
- package/dist/shared/grid.d.ts.map +1 -0
- package/dist/shared/grid.js +187 -0
- package/dist/shared/grid.js.map +1 -0
- package/dist/shared/icon-slot.d.ts +22 -0
- package/dist/shared/icon-slot.d.ts.map +1 -0
- package/dist/shared/icon-slot.js +38 -0
- package/dist/shared/icon-slot.js.map +1 -0
- package/dist/shared/icon.d.ts +17 -0
- package/dist/shared/icon.d.ts.map +1 -0
- package/dist/shared/icon.js +18 -0
- package/dist/shared/icon.js.map +1 -0
- package/dist/shared/icons.d.ts +19 -0
- package/dist/shared/icons.d.ts.map +1 -0
- package/dist/shared/icons.js +22 -0
- package/dist/shared/icons.js.map +1 -0
- package/dist/shared/image.d.ts +35 -0
- package/dist/shared/image.d.ts.map +1 -0
- package/dist/shared/image.js +46 -0
- package/dist/shared/image.js.map +1 -0
- package/dist/shared/input.d.ts +12 -0
- package/dist/shared/input.d.ts.map +1 -0
- package/dist/shared/input.js +29 -0
- package/dist/shared/input.js.map +1 -0
- package/dist/shared/radio.d.ts +10 -0
- package/dist/shared/radio.d.ts.map +1 -0
- package/dist/shared/radio.js +29 -0
- package/dist/shared/radio.js.map +1 -0
- package/dist/shared/reconcile-list.d.ts +37 -0
- package/dist/shared/reconcile-list.d.ts.map +1 -0
- package/dist/shared/reconcile-list.js +95 -0
- package/dist/shared/reconcile-list.js.map +1 -0
- package/dist/shared/section.d.ts +23 -0
- package/dist/shared/section.d.ts.map +1 -0
- package/dist/shared/section.js +65 -0
- package/dist/shared/section.js.map +1 -0
- package/dist/shared/segmented.d.ts +17 -0
- package/dist/shared/segmented.d.ts.map +1 -0
- package/dist/shared/segmented.js +53 -0
- package/dist/shared/segmented.js.map +1 -0
- package/dist/shared/select.d.ts +18 -0
- package/dist/shared/select.d.ts.map +1 -0
- package/dist/shared/select.js +14 -0
- package/dist/shared/select.js.map +1 -0
- package/dist/shared/slots.d.ts +11 -0
- package/dist/shared/slots.d.ts.map +1 -0
- package/dist/shared/slots.js +33 -0
- package/dist/shared/slots.js.map +1 -0
- package/dist/shared/smart-container.d.ts +19 -0
- package/dist/shared/smart-container.d.ts.map +1 -0
- package/dist/shared/smart-container.js +29 -0
- package/dist/shared/smart-container.js.map +1 -0
- package/dist/shared/text.d.ts +29 -0
- package/dist/shared/text.d.ts.map +1 -0
- package/dist/shared/text.js +72 -0
- package/dist/shared/text.js.map +1 -0
- package/dist/shared/textarea.d.ts +6 -0
- package/dist/shared/textarea.d.ts.map +1 -0
- package/dist/shared/textarea.js +18 -0
- package/dist/shared/textarea.js.map +1 -0
- package/dist/shared/toggle.d.ts +6 -0
- package/dist/shared/toggle.d.ts.map +1 -0
- package/dist/shared/toggle.js +19 -0
- package/dist/shared/toggle.js.map +1 -0
- package/dist/shared/types.d.ts +41 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +20 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/structural/ErrorBoundary.d.ts +18 -0
- package/dist/structural/ErrorBoundary.d.ts.map +1 -0
- package/dist/structural/ErrorBoundary.js +119 -0
- package/dist/structural/ErrorBoundary.js.map +1 -0
- package/dist/structural/For.d.ts +37 -0
- package/dist/structural/For.d.ts.map +1 -0
- package/dist/structural/For.js +129 -0
- package/dist/structural/For.js.map +1 -0
- package/dist/structural/Lazy.d.ts +43 -0
- package/dist/structural/Lazy.d.ts.map +1 -0
- package/dist/structural/Lazy.js +47 -0
- package/dist/structural/Lazy.js.map +1 -0
- package/dist/structural/NavLink.d.ts +45 -0
- package/dist/structural/NavLink.d.ts.map +1 -0
- package/dist/structural/NavLink.js +37 -0
- package/dist/structural/NavLink.js.map +1 -0
- package/dist/structural/Show.d.ts +35 -0
- package/dist/structural/Show.d.ts.map +1 -0
- package/dist/structural/Show.js +34 -0
- package/dist/structural/Show.js.map +1 -0
- package/dist/structural/nav-link.scss +54 -0
- package/dist/styles/index.scss +58 -0
- package/package.json +64 -0
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
/// Toggle / switch component styles — premium edition.
|
|
2
|
+
/// Native input is visually hidden; the .ui-toggle-track element renders the
|
|
3
|
+
/// pill-shaped track in CSS, while .ui-toggle-thumb is the sliding circle knob.
|
|
4
|
+
///
|
|
5
|
+
/// @group atoms/forms
|
|
6
|
+
|
|
7
|
+
@use 'sass:map';
|
|
8
|
+
@use '@pithyjs/design-system/a11y/styles/mixins' as a11y;
|
|
9
|
+
@use '@pithyjs/design-system/borders/styles/tokens' as borders;
|
|
10
|
+
@use '../../../shared/tokens' as shared;
|
|
11
|
+
@use '../../../shared/form-animations' as form-anim;
|
|
12
|
+
|
|
13
|
+
// -- Component-level tokens ---------------------------------------------------
|
|
14
|
+
$_track-inset-shadow-opacity: 12%;
|
|
15
|
+
|
|
16
|
+
// ============================================
|
|
17
|
+
// Wrapper <label>
|
|
18
|
+
// ============================================
|
|
19
|
+
|
|
20
|
+
.ui-toggle {
|
|
21
|
+
// Single color family per state — declared on the wrapper so both the
|
|
22
|
+
// track and the label inherit it. Overridden by [data-success] / [data-error].
|
|
23
|
+
--_cmp-color: var(--color-primary);
|
|
24
|
+
--_cmp-color-hover: var(--color-primary-hover);
|
|
25
|
+
// Track border width — keep in sync with borders.border(control).
|
|
26
|
+
// Exposed as a custom property so the thumb can size itself relative to
|
|
27
|
+
// the padding-box (content area) rather than the border-box.
|
|
28
|
+
--_cmp-border-width: var(--border-width-thin);
|
|
29
|
+
|
|
30
|
+
@include a11y.touch-target-pseudo; // WCAG 2.5.5 — 44×44 invisible hit area
|
|
31
|
+
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: var(--space-xs); // Lovers — track ↔ label
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
position: relative;
|
|
37
|
+
user-select: none;
|
|
38
|
+
color: var(--color-text);
|
|
39
|
+
|
|
40
|
+
@include a11y.motion-safe {
|
|
41
|
+
transition: var(--motion-transition-color);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Field wrapper (when helper/error is rendered)
|
|
46
|
+
// No gap — child .ui-form-helper / .ui-form-error already carry
|
|
47
|
+
// margin-block-start: var(--space-xs), consistent with other form atoms.
|
|
48
|
+
.ui-toggle-field {
|
|
49
|
+
display: inline-flex;
|
|
50
|
+
flex-direction: column;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ============================================
|
|
54
|
+
// Native input — visually hidden but functional
|
|
55
|
+
// ============================================
|
|
56
|
+
|
|
57
|
+
.ui-toggle-input {
|
|
58
|
+
// sr-only — keeps the input in the layout (focusable, click-forwards via
|
|
59
|
+
// <label>), but visually hidden so the custom track renders the state.
|
|
60
|
+
position: absolute;
|
|
61
|
+
inline-size: 1px;
|
|
62
|
+
block-size: 1px;
|
|
63
|
+
padding: 0;
|
|
64
|
+
margin: 0;
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
clip: rect(0 0 0 0);
|
|
67
|
+
clip-path: inset(50%);
|
|
68
|
+
white-space: nowrap;
|
|
69
|
+
border: 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ============================================
|
|
73
|
+
// Custom track (pill shape)
|
|
74
|
+
// ============================================
|
|
75
|
+
|
|
76
|
+
.ui-toggle-track {
|
|
77
|
+
--_cmp-shadow: 0 0 transparent;
|
|
78
|
+
|
|
79
|
+
box-sizing: border-box;
|
|
80
|
+
display: inline-flex;
|
|
81
|
+
align-items: center;
|
|
82
|
+
flex-shrink: 0;
|
|
83
|
+
position: relative;
|
|
84
|
+
inline-size: calc(var(--_cmp-track-height) * 2);
|
|
85
|
+
block-size: var(--_cmp-track-height);
|
|
86
|
+
background-color: var(--color-surface-variant);
|
|
87
|
+
border: borders.border(control);
|
|
88
|
+
// Strengthen the control border — the toggle track is a small pill
|
|
89
|
+
// with minimal inner content, so its border is the primary visual
|
|
90
|
+
// boundary. Blending with text color ensures ≥3:1 vs background
|
|
91
|
+
// in dark mode (global --color-border alone achieves only ~2.2:1).
|
|
92
|
+
border-color: color-mix(in oklch, var(--color-border) 80%, var(--color-text));
|
|
93
|
+
border-radius: var(--radius-pill);
|
|
94
|
+
box-shadow: var(--_cmp-shadow);
|
|
95
|
+
// No overflow:hidden — keep the thumb unclipped during interactive
|
|
96
|
+
// size/position transitions (for example pressed/stretch states), so the
|
|
97
|
+
// circle does not read as flattened or barrel-shaped at the track edge.
|
|
98
|
+
|
|
99
|
+
// Inset shadow on off-state — creates a recessed channel feel so the
|
|
100
|
+
// filled "on" state pops by contrast. Layered under the colored shadow.
|
|
101
|
+
&::after {
|
|
102
|
+
content: '';
|
|
103
|
+
position: absolute;
|
|
104
|
+
inset: 0;
|
|
105
|
+
border-radius: inherit;
|
|
106
|
+
box-shadow: inset 0 var(--border-width-hairline) var(--border-width-thin)
|
|
107
|
+
color-mix(
|
|
108
|
+
in oklch,
|
|
109
|
+
var(--color-on-surface) $_track-inset-shadow-opacity,
|
|
110
|
+
transparent
|
|
111
|
+
);
|
|
112
|
+
pointer-events: none;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@include a11y.motion-safe {
|
|
116
|
+
transition:
|
|
117
|
+
var(--motion-transition-background),
|
|
118
|
+
var(--motion-transition-border),
|
|
119
|
+
box-shadow var(--motion-duration-normal) var(--motion-easing-entrance);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ============================================
|
|
124
|
+
// Thumb (sliding circle)
|
|
125
|
+
// ============================================
|
|
126
|
+
|
|
127
|
+
.ui-toggle-thumb {
|
|
128
|
+
position: absolute;
|
|
129
|
+
// Gap between the thumb circle and the track's content edge.
|
|
130
|
+
// Equal on all sides so the thumb sits concentrically in the pill's end
|
|
131
|
+
// semicircle — no asymmetric "floating" effect.
|
|
132
|
+
--_thumb-gap: var(--border-width-hairline);
|
|
133
|
+
// Thumb size derived from the PADDING-BOX height (not border-box).
|
|
134
|
+
// padding-height = track-height - 2*border, then subtract 2*gap.
|
|
135
|
+
--_thumb-size: calc(
|
|
136
|
+
var(--_cmp-track-height) - var(--_cmp-border-width) *
|
|
137
|
+
2 - var(--_thumb-gap) * 2
|
|
138
|
+
);
|
|
139
|
+
// Thumb shape primitives — circle at rest, rounded-rect when stretched
|
|
140
|
+
// during the active-press animation. Component-scoped so the global
|
|
141
|
+
// border-radius allowlist stays limited to true primitives (0 / 50%).
|
|
142
|
+
--_thumb-radius: 50%;
|
|
143
|
+
--_thumb-radius-stretched: 40%;
|
|
144
|
+
inline-size: var(--_thumb-size);
|
|
145
|
+
block-size: var(--_thumb-size);
|
|
146
|
+
border-radius: var(--_thumb-radius);
|
|
147
|
+
background-color: var(--color-on-primary);
|
|
148
|
+
// Vertical: bulletproof centering via auto margins (not flex static position).
|
|
149
|
+
inset-block: 0;
|
|
150
|
+
margin-block: auto;
|
|
151
|
+
// Horizontal: equal gap from content edge = concentric in pill semicircle.
|
|
152
|
+
inset-inline-start: var(--_thumb-gap);
|
|
153
|
+
box-shadow: var(--shadow-sm);
|
|
154
|
+
// Off-state edge definition — hairline border ensures the thumb is
|
|
155
|
+
// distinguishable from the light track for WCAG 1.4.11 (non-text contrast).
|
|
156
|
+
// Disappears on checked — the colored track provides sufficient contrast.
|
|
157
|
+
box-sizing: border-box;
|
|
158
|
+
border: var(--border-width-hairline) solid
|
|
159
|
+
color-mix(in oklch, var(--color-on-surface) 55%, transparent);
|
|
160
|
+
|
|
161
|
+
@include a11y.motion-safe {
|
|
162
|
+
// Springy easing — thumb overshoots slightly and settles, feels physical.
|
|
163
|
+
transition:
|
|
164
|
+
inset-inline-start var(--motion-duration-slow)
|
|
165
|
+
var(--motion-easing-springy),
|
|
166
|
+
inline-size var(--motion-duration-normal) var(--motion-easing-entrance),
|
|
167
|
+
block-size var(--motion-duration-normal) var(--motion-easing-entrance),
|
|
168
|
+
border-radius var(--motion-duration-normal) var(--motion-easing-entrance),
|
|
169
|
+
box-shadow var(--motion-duration-normal) var(--motion-easing-entrance),
|
|
170
|
+
var(--motion-transition-border),
|
|
171
|
+
var(--motion-transition-background);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// ============================================
|
|
176
|
+
// Visible label text
|
|
177
|
+
// ============================================
|
|
178
|
+
|
|
179
|
+
.ui-toggle-label {
|
|
180
|
+
font-size: var(--_cmp-font-size);
|
|
181
|
+
line-height: var(--leading-snug);
|
|
182
|
+
color: inherit;
|
|
183
|
+
|
|
184
|
+
// Branded selection — matches the active state color.
|
|
185
|
+
&::selection {
|
|
186
|
+
background-color: color-mix(
|
|
187
|
+
in oklch,
|
|
188
|
+
var(--_cmp-color) calc(var(--state-selected-opacity) * 100%),
|
|
189
|
+
transparent
|
|
190
|
+
);
|
|
191
|
+
color: inherit;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// ============================================
|
|
196
|
+
// Sizes — set custom props per control size
|
|
197
|
+
// ============================================
|
|
198
|
+
|
|
199
|
+
@each $size in shared.$control-sizes {
|
|
200
|
+
.ui-toggle[data-size='#{$size}'] {
|
|
201
|
+
--_cmp-track-height: #{map.get(shared.$control-indicator-sizes, $size)};
|
|
202
|
+
--_cmp-font-size: #{map.get(shared.$control-font-sizes, $size)};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// ============================================
|
|
207
|
+
// Checked state
|
|
208
|
+
// ============================================
|
|
209
|
+
|
|
210
|
+
.ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-track {
|
|
211
|
+
background-color: var(--_cmp-color);
|
|
212
|
+
border-color: var(--_cmp-color);
|
|
213
|
+
--_cmp-shadow: 0 var(--shadow-base-offset-y) var(--shadow-base-blur)
|
|
214
|
+
calc(var(--shadow-base-offset-y) * -1)
|
|
215
|
+
color-mix(
|
|
216
|
+
in oklch,
|
|
217
|
+
var(--_cmp-color) #{shared.$checked-glow-opacity},
|
|
218
|
+
transparent
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
// Kill the recessed inset shadow — the filled track doesn't need it.
|
|
222
|
+
&::after {
|
|
223
|
+
box-shadow: none;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Slide thumb to the end when checked.
|
|
228
|
+
// Uses 100% (= actual rendered padding-box width) so the end gap exactly
|
|
229
|
+
// mirrors the start gap, immune to DPI subpixel rounding of border-box tokens.
|
|
230
|
+
.ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-thumb {
|
|
231
|
+
inset-inline-start: calc(100% - var(--_thumb-size) - var(--_thumb-gap));
|
|
232
|
+
// Thumb lifts when checked — knob "rises" onto the active surface.
|
|
233
|
+
box-shadow: var(--shadow-md);
|
|
234
|
+
// Colored track provides ample contrast — border is no longer needed.
|
|
235
|
+
border-color: transparent;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Pop animation on toggle
|
|
239
|
+
@include form-anim.form-pop(
|
|
240
|
+
'.ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-track'
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
// ============================================
|
|
244
|
+
// Hover (not disabled / not readonly)
|
|
245
|
+
// ============================================
|
|
246
|
+
|
|
247
|
+
.ui-toggle:hover:not([data-disabled]):not([data-readonly]):not(
|
|
248
|
+
:has(.ui-toggle-input:disabled)
|
|
249
|
+
)
|
|
250
|
+
.ui-toggle-track {
|
|
251
|
+
border-color: var(--_cmp-color);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.ui-toggle:hover:not([data-disabled]):not([data-readonly]):not(
|
|
255
|
+
:has(.ui-toggle-input:disabled)
|
|
256
|
+
):has(.ui-toggle-input:checked)
|
|
257
|
+
.ui-toggle-track {
|
|
258
|
+
background-color: var(--_cmp-color-hover);
|
|
259
|
+
border-color: var(--_cmp-color-hover);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Hover: thumb grows to fill the full content area (padding-box height).
|
|
263
|
+
// This is non-color feedback for WCAG (visible size change, not just shadow).
|
|
264
|
+
// No overflow — the hover size exactly matches the padding-box height.
|
|
265
|
+
.ui-toggle:hover:not([data-disabled]):not([data-readonly]):not(
|
|
266
|
+
:has(.ui-toggle-input:disabled)
|
|
267
|
+
)
|
|
268
|
+
.ui-toggle-thumb {
|
|
269
|
+
--_thumb-hover-size: calc(
|
|
270
|
+
var(--_cmp-track-height) - var(--_cmp-border-width) * 2
|
|
271
|
+
);
|
|
272
|
+
inline-size: var(--_thumb-hover-size);
|
|
273
|
+
block-size: var(--_thumb-hover-size);
|
|
274
|
+
inset-inline-start: 0; // flush with content start edge
|
|
275
|
+
box-shadow: var(--shadow-md);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Hover + checked: flush with content end edge.
|
|
279
|
+
// Uses 100% to mirror the unchecked hover (inset-inline-start: 0).
|
|
280
|
+
.ui-toggle:hover:not([data-disabled]):not([data-readonly]):not(
|
|
281
|
+
:has(.ui-toggle-input:disabled)
|
|
282
|
+
):has(.ui-toggle-input:checked)
|
|
283
|
+
.ui-toggle-thumb {
|
|
284
|
+
inset-inline-start: calc(100% - var(--_thumb-hover-size));
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// ============================================
|
|
288
|
+
// Focus — bridge native input focus to the track
|
|
289
|
+
// ============================================
|
|
290
|
+
|
|
291
|
+
.ui-toggle:has(.ui-toggle-input:focus-visible) .ui-toggle-track {
|
|
292
|
+
outline: none;
|
|
293
|
+
--ring-offset: #{shared.$focus-ring-offset};
|
|
294
|
+
box-shadow: borders.ring(), var(--_cmp-shadow);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// ============================================
|
|
298
|
+
// Active / pressed feedback (iOS-style thumb stretch)
|
|
299
|
+
// ============================================
|
|
300
|
+
|
|
301
|
+
.ui-toggle:not([data-disabled]):not([data-readonly]):not(
|
|
302
|
+
:has(.ui-toggle-input:disabled)
|
|
303
|
+
):active
|
|
304
|
+
.ui-toggle-track {
|
|
305
|
+
@include a11y.state-background(pressed, var(--_cmp-color));
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// iOS signature: thumb stretches ~30% wider on press, creating an elongated
|
|
309
|
+
// pill shape that hints at the direction of travel. The border-radius shift
|
|
310
|
+
// from 50% to 40% keeps it rounded-rect instead of an ellipse.
|
|
311
|
+
//
|
|
312
|
+
// Unchecked+active: thumb stretches RIGHT (toward checked position) — default
|
|
313
|
+
// anchor is inset-inline-start so the width growth extends rightward.
|
|
314
|
+
.ui-toggle:not([data-disabled]):not([data-readonly]):not(
|
|
315
|
+
:has(.ui-toggle-input:disabled)
|
|
316
|
+
):active
|
|
317
|
+
.ui-toggle-thumb {
|
|
318
|
+
@include a11y.motion-safe {
|
|
319
|
+
inline-size: calc(var(--_thumb-size) * 1.3);
|
|
320
|
+
border-radius: var(--_thumb-radius-stretched);
|
|
321
|
+
transition:
|
|
322
|
+
inset-inline-start var(--motion-duration-slow)
|
|
323
|
+
var(--motion-easing-springy),
|
|
324
|
+
inline-size var(--motion-duration-fast) var(--motion-easing-standard),
|
|
325
|
+
border-radius var(--motion-duration-fast) var(--motion-easing-standard);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// Checked+active: thumb stretches LEFT (toward unchecked position).
|
|
330
|
+
// Shift inset-inline-start to account for the wider thumb so the extra 30%
|
|
331
|
+
// grows toward the start edge (direction of travel when unchecking).
|
|
332
|
+
// Stretch width = thumb × 1.3. End gap = --_thumb-gap (mirrors unchecked start gap).
|
|
333
|
+
// Uses 100% so the stretched thumb aligns flush with the rendered content end edge.
|
|
334
|
+
.ui-toggle:has(.ui-toggle-input:checked):not([data-disabled]):not(
|
|
335
|
+
[data-readonly]
|
|
336
|
+
):not(:has(.ui-toggle-input:disabled)):active
|
|
337
|
+
.ui-toggle-thumb {
|
|
338
|
+
@include a11y.motion-safe {
|
|
339
|
+
inset-inline-start: calc(
|
|
340
|
+
100% - var(--_thumb-size) * 1.3 - var(--_thumb-gap)
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// ============================================
|
|
346
|
+
// Success state
|
|
347
|
+
// ============================================
|
|
348
|
+
|
|
349
|
+
.ui-toggle[data-success] {
|
|
350
|
+
--_cmp-color: var(--color-success);
|
|
351
|
+
--_cmp-color-hover: var(--color-success-hover, var(--color-success));
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.ui-toggle[data-success] .ui-toggle-track {
|
|
355
|
+
border-color: var(--_cmp-color);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.ui-toggle[data-success]:has(.ui-toggle-input:focus-visible) .ui-toggle-track {
|
|
359
|
+
--ring-color: var(--color-success);
|
|
360
|
+
box-shadow: borders.ring(), var(--_cmp-shadow);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// ============================================
|
|
364
|
+
// Error state (after success — source order wins)
|
|
365
|
+
// ============================================
|
|
366
|
+
|
|
367
|
+
.ui-toggle[data-error] {
|
|
368
|
+
--_cmp-color: var(--color-danger);
|
|
369
|
+
--_cmp-color-hover: var(--color-danger-hover, var(--color-danger));
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.ui-toggle[data-error] .ui-toggle-track {
|
|
373
|
+
border-color: var(--_cmp-color);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.ui-toggle[data-error]:has(.ui-toggle-input:focus-visible) .ui-toggle-track {
|
|
377
|
+
--ring-color: var(--color-danger);
|
|
378
|
+
box-shadow: borders.ring(), var(--_cmp-shadow);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
.ui-toggle[data-error] .ui-toggle-label {
|
|
382
|
+
color: var(--color-danger);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// ============================================
|
|
386
|
+
// Error shake animation
|
|
387
|
+
// ============================================
|
|
388
|
+
|
|
389
|
+
@include form-anim.form-shake('.ui-toggle-shake');
|
|
390
|
+
|
|
391
|
+
// ============================================
|
|
392
|
+
// Disabled state
|
|
393
|
+
// ============================================
|
|
394
|
+
|
|
395
|
+
.ui-toggle[data-disabled] {
|
|
396
|
+
opacity: var(--state-disabled-opacity);
|
|
397
|
+
filter: saturate(shared.$disabled-saturation);
|
|
398
|
+
cursor: not-allowed;
|
|
399
|
+
|
|
400
|
+
.ui-toggle-input {
|
|
401
|
+
cursor: not-allowed;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Fieldset[disabled] cascade — when a toggle is disabled via a parent
|
|
406
|
+
// <fieldset disabled>, the native input is :disabled but the wrapper has no
|
|
407
|
+
// [data-disabled] attribute. Match the direct disabled visuals so individual
|
|
408
|
+
// toggles look consistently deactivated across both disable paths.
|
|
409
|
+
.ui-toggle:not([data-disabled]):has(.ui-toggle-input:disabled) {
|
|
410
|
+
opacity: var(--state-disabled-opacity);
|
|
411
|
+
filter: saturate(shared.$disabled-saturation);
|
|
412
|
+
cursor: not-allowed;
|
|
413
|
+
|
|
414
|
+
.ui-toggle-input {
|
|
415
|
+
cursor: not-allowed;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// ============================================
|
|
420
|
+
// Readonly state — looks normal, blocks toggling
|
|
421
|
+
// ============================================
|
|
422
|
+
|
|
423
|
+
.ui-toggle[data-readonly] {
|
|
424
|
+
cursor: default;
|
|
425
|
+
|
|
426
|
+
.ui-toggle-input {
|
|
427
|
+
cursor: default;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// Unchecked track gets a slightly different surface to hint it's locked.
|
|
431
|
+
.ui-toggle-input:not(:checked) + .ui-toggle-track {
|
|
432
|
+
background-color: var(--color-surface-variant);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// ============================================
|
|
437
|
+
// Required indicator on label text
|
|
438
|
+
// ============================================
|
|
439
|
+
|
|
440
|
+
.ui-toggle[data-required] .ui-toggle-label::after {
|
|
441
|
+
content: ' *';
|
|
442
|
+
color: var(--color-danger);
|
|
443
|
+
font-weight: var(--font-weight-medium);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// ============================================
|
|
447
|
+
// Loading spinner — overlays the track
|
|
448
|
+
// ============================================
|
|
449
|
+
|
|
450
|
+
// Hide the thumb while loading — the spinner is the only signal.
|
|
451
|
+
.ui-toggle.ui-toggle-loading .ui-toggle-thumb {
|
|
452
|
+
opacity: 0;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Kill the inset shadow so it doesn't interfere with the spinner.
|
|
456
|
+
.ui-toggle.ui-toggle-loading .ui-toggle-track::after {
|
|
457
|
+
box-shadow: none;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// Subtle border tint when not in error/success state.
|
|
461
|
+
.ui-toggle.ui-toggle-loading:not([data-error]):not([data-success])
|
|
462
|
+
.ui-toggle-track {
|
|
463
|
+
border-color: var(--color-primary);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// Spinner color: primary on empty surface, on-primary when filled (checked).
|
|
467
|
+
.ui-toggle.ui-toggle-loading .ui-toggle-track {
|
|
468
|
+
--_cmp-spinner-color: var(--color-primary);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.ui-toggle.ui-toggle-loading:has(.ui-toggle-input:checked) .ui-toggle-track {
|
|
472
|
+
--_cmp-spinner-color: var(--color-on-primary);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.ui-toggle[data-error].ui-toggle-loading .ui-toggle-track {
|
|
476
|
+
--_cmp-spinner-color: var(--color-danger);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.ui-toggle[data-success]:not([data-error]).ui-toggle-loading .ui-toggle-track {
|
|
480
|
+
--_cmp-spinner-color: var(--color-success);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// Spinner is a circle sized to the track height, centered in the track.
|
|
484
|
+
// We can't use `inset: 15%` because the track is a wide pill — that would
|
|
485
|
+
// create an oval. We can't use `transform: translate` for centering because
|
|
486
|
+
// it conflicts with the spin animation's transform. Use margin auto instead.
|
|
487
|
+
.ui-toggle.ui-toggle-loading .ui-toggle-track::before {
|
|
488
|
+
--_spinner-size: calc(var(--_cmp-track-height) * 0.5);
|
|
489
|
+
content: '';
|
|
490
|
+
position: absolute;
|
|
491
|
+
inset: 0;
|
|
492
|
+
// Explicit square dimensions + margin auto = centered circle in the pill
|
|
493
|
+
inline-size: var(--_spinner-size);
|
|
494
|
+
block-size: var(--_spinner-size);
|
|
495
|
+
margin: auto;
|
|
496
|
+
border: var(--border-width-medium) solid var(--_cmp-spinner-color);
|
|
497
|
+
border-inline-end-color: transparent;
|
|
498
|
+
border-radius: 50%;
|
|
499
|
+
|
|
500
|
+
@include a11y.motion-safe {
|
|
501
|
+
animation: var(--motion-animation-spin) var(--motion-duration-deliberate)
|
|
502
|
+
linear infinite;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
@include a11y.motion-reduced {
|
|
506
|
+
border-inline-end-color: var(--_cmp-spinner-color);
|
|
507
|
+
opacity: shared.$spinner-reduced-opacity;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// Helper + error text use shared .ui-form-helper / .ui-form-error classes
|
|
512
|
+
// from src/shared/_form-animations.scss — no per-component styles needed.
|
|
513
|
+
|
|
514
|
+
// ============================================
|
|
515
|
+
// Forced colors
|
|
516
|
+
// ============================================
|
|
517
|
+
|
|
518
|
+
@include a11y.forced-colors {
|
|
519
|
+
.ui-toggle-track {
|
|
520
|
+
border: var(--border-width-hairline) solid ButtonText;
|
|
521
|
+
background: Field;
|
|
522
|
+
|
|
523
|
+
// Suppress inset shadow — forced-colors surfaces must be flat.
|
|
524
|
+
&::after {
|
|
525
|
+
box-shadow: none;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
.ui-toggle-thumb {
|
|
530
|
+
background: ButtonText;
|
|
531
|
+
border-color: ButtonText;
|
|
532
|
+
box-shadow: none;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-track {
|
|
536
|
+
background: Highlight;
|
|
537
|
+
border-color: Highlight;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-thumb {
|
|
541
|
+
background: HighlightText;
|
|
542
|
+
border-color: HighlightText;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
.ui-toggle[data-disabled],
|
|
546
|
+
.ui-toggle:not([data-disabled]):has(.ui-toggle-input:disabled) {
|
|
547
|
+
color: GrayText;
|
|
548
|
+
|
|
549
|
+
.ui-toggle-track {
|
|
550
|
+
border-color: GrayText;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
.ui-toggle-thumb {
|
|
554
|
+
background: GrayText;
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
.ui-toggle:has(.ui-toggle-input:focus-visible) .ui-toggle-track {
|
|
559
|
+
@include a11y.focus-outline(Highlight);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiler-time metadata for @pithyjs/ui-kit components.
|
|
3
|
+
* Pass to htmlTransformPlugin({ componentScopes }) in vite.config.ts.
|
|
4
|
+
*/
|
|
5
|
+
import type { ComponentScopeConfig } from '@pithyjs/vite-plugin';
|
|
6
|
+
export declare const componentScopes: Record<string, ComponentScopeConfig>;
|
|
7
|
+
//# sourceMappingURL=compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAgBhE,CAAC"}
|
package/dist/compiler.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const componentScopes = {
|
|
2
|
+
For: {
|
|
3
|
+
vars: ['item', 'index', 'count', 'first', 'last', 'even', 'odd'],
|
|
4
|
+
aliases: {
|
|
5
|
+
as: 'item',
|
|
6
|
+
indexAs: 'index',
|
|
7
|
+
countAs: 'count',
|
|
8
|
+
firstAs: 'first',
|
|
9
|
+
lastAs: 'last',
|
|
10
|
+
evenAs: 'even',
|
|
11
|
+
oddAs: 'odd',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
ErrorBoundary: {
|
|
15
|
+
vars: ['error'],
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,eAAe,GAAyC;IACnE,GAAG,EAAE;QACH,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QAChE,OAAO,EAAE;YACP,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK;SACb;KACF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,CAAC,OAAO,CAAC;KAChB;CACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.icons",
|
|
4
|
+
"title": "Icon Sprite Registry Module",
|
|
5
|
+
"category": "runtime"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Icon sprite registry — tree-shakeable opt-in module.
|
|
10
|
+
*
|
|
11
|
+
* @module @pithyjs/ui-kit/icons
|
|
12
|
+
*/
|
|
13
|
+
export { registerIconSprite, lookupIcon, getRegisteredIcons, getIconMeta, hasIconSprite, getSpriteUrl, clearIconRegistry, type IconMeta, } from './registry';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;GAIG;AACH,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.icons",
|
|
4
|
+
"title": "Icon Sprite Registry Module",
|
|
5
|
+
"category": "runtime"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Icon sprite registry — tree-shakeable opt-in module.
|
|
10
|
+
*
|
|
11
|
+
* @module @pithyjs/ui-kit/icons
|
|
12
|
+
*/
|
|
13
|
+
export { registerIconSprite, lookupIcon, getRegisteredIcons, getIconMeta, hasIconSprite, getSpriteUrl, clearIconRegistry, } from './registry';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;GAIG;AACH,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,GAElB,MAAM,YAAY,CAAC"}
|