@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,44 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.tooltip",
|
|
4
|
+
"title": "<Tooltip> Feedback Component",
|
|
5
|
+
"category": "feature",
|
|
6
|
+
"risk": "low"
|
|
7
|
+
}
|
|
8
|
+
*/
|
|
9
|
+
import { type ReactiveText } from '../../../shared/clickable';
|
|
10
|
+
/**
|
|
11
|
+
* Reset the module-level tooltip ID counter so `ui-tooltip-*` IDs are
|
|
12
|
+
* deterministic. Call between SSR requests and between test cases — same pattern
|
|
13
|
+
* as `resetInputIdCounter` / `resetSectionIdCounter`.
|
|
14
|
+
*/
|
|
15
|
+
/** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"resetTooltipIdCounter","stability":"stable","signature":"() => void"} */
|
|
16
|
+
export declare function resetTooltipIdCounter(): void;
|
|
17
|
+
/** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"TooltipProps","stability":"stable","signature":"interface TooltipProps"} */
|
|
18
|
+
export interface TooltipProps {
|
|
19
|
+
/** Hint text. Static or a `() => string` accessor for reactive copy. */
|
|
20
|
+
label: ReactiveText;
|
|
21
|
+
/** Bubble placement relative to the trigger (default `"bottom"`). */
|
|
22
|
+
placement?: 'top' | 'bottom' | 'left' | 'right';
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Wraps trigger content and reveals a hint bubble on hover / focus-within.
|
|
26
|
+
*
|
|
27
|
+
* CSS-driven (no JS positioning): the wrapper element receives `:hover` /
|
|
28
|
+
* `:focus-within`, so the hint still shows when the wrapped control is
|
|
29
|
+
* **disabled** (a disabled `<button>` doesn't emit pointer events itself, but
|
|
30
|
+
* the wrapper does) — which is the primary use case.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```html
|
|
34
|
+
* <Tooltip label="'Set Default mode to Auto to preview both'">
|
|
35
|
+
* <IconGroup ... disabled="locked" />
|
|
36
|
+
* </Tooltip>
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
/** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"Tooltip","stability":"stable","signature":"(props: TooltipProps) => { el: HTMLElement; destroy: () => void }"} */
|
|
40
|
+
export declare function Tooltip({ label, placement }: TooltipProps): {
|
|
41
|
+
el: HTMLElement;
|
|
42
|
+
destroy: () => void;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=Tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../../src/atoms/feedback/tooltip/Tooltip.ts"],"names":[],"mappings":"AAAA;;;;;;;EAOE;AAIF,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAInC;;;;GAIG;AACH,+HAA+H;AAC/H,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAID,kIAAkI;AAClI,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,KAAK,EAAE,YAAY,CAAC;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACjD;AAED;;;;;;;;;;;;;;GAcG;AACH,wKAAwK;AACxK,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,SAAoB,EAAE,EAAE,YAAY,GAAG;IACtE,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAuFA"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.tooltip",
|
|
4
|
+
"title": "<Tooltip> Feedback Component",
|
|
5
|
+
"category": "feature",
|
|
6
|
+
"risk": "low"
|
|
7
|
+
}
|
|
8
|
+
*/
|
|
9
|
+
import { renderChildren } from '@pithyjs/core';
|
|
10
|
+
import { effect } from '@pithyjs/signals';
|
|
11
|
+
import { hasReactive, readReactive, } from '../../../shared/clickable';
|
|
12
|
+
let tooltipIdCounter = 0;
|
|
13
|
+
/**
|
|
14
|
+
* Reset the module-level tooltip ID counter so `ui-tooltip-*` IDs are
|
|
15
|
+
* deterministic. Call between SSR requests and between test cases — same pattern
|
|
16
|
+
* as `resetInputIdCounter` / `resetSectionIdCounter`.
|
|
17
|
+
*/
|
|
18
|
+
/** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"resetTooltipIdCounter","stability":"stable","signature":"() => void"} */
|
|
19
|
+
export function resetTooltipIdCounter() {
|
|
20
|
+
tooltipIdCounter = 0;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Wraps trigger content and reveals a hint bubble on hover / focus-within.
|
|
24
|
+
*
|
|
25
|
+
* CSS-driven (no JS positioning): the wrapper element receives `:hover` /
|
|
26
|
+
* `:focus-within`, so the hint still shows when the wrapped control is
|
|
27
|
+
* **disabled** (a disabled `<button>` doesn't emit pointer events itself, but
|
|
28
|
+
* the wrapper does) — which is the primary use case.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```html
|
|
32
|
+
* <Tooltip label="'Set Default mode to Auto to preview both'">
|
|
33
|
+
* <IconGroup ... disabled="locked" />
|
|
34
|
+
* </Tooltip>
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
/** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"Tooltip","stability":"stable","signature":"(props: TooltipProps) => { el: HTMLElement; destroy: () => void }"} */
|
|
38
|
+
export function Tooltip({ label, placement = 'bottom' }) {
|
|
39
|
+
const root = document.createElement('span');
|
|
40
|
+
root.classList.add('ui-tooltip');
|
|
41
|
+
root.dataset.placement = placement;
|
|
42
|
+
// Projected trigger content (the wrapped control).
|
|
43
|
+
const { el: childFragment, destroy: destroyChildren } = renderChildren();
|
|
44
|
+
root.appendChild(childFragment);
|
|
45
|
+
// The element that actually receives focus is the projected trigger, not the
|
|
46
|
+
// wrapper — capture it now (before the bubble is appended) for aria wiring.
|
|
47
|
+
const trigger = root.firstElementChild;
|
|
48
|
+
// Hint bubble.
|
|
49
|
+
const bubble = document.createElement('span');
|
|
50
|
+
bubble.classList.add('ui-tooltip-bubble');
|
|
51
|
+
bubble.setAttribute('role', 'tooltip');
|
|
52
|
+
bubble.id = `ui-tooltip-${(tooltipIdCounter += 1)}`;
|
|
53
|
+
// Describe the trigger for AT. Set on the wrapper (covers the disabled-control
|
|
54
|
+
// case, where focus stays outside), and best-effort on the projected trigger
|
|
55
|
+
// element so the hint is announced when focus lands on it. APPEND to any
|
|
56
|
+
// existing `aria-describedby` (e.g. a control already pointing at helper/error
|
|
57
|
+
// text) rather than skipping — deduped, space-separated.
|
|
58
|
+
root.setAttribute('aria-describedby', bubble.id);
|
|
59
|
+
if (trigger) {
|
|
60
|
+
const ids = (trigger.getAttribute('aria-describedby') ?? '')
|
|
61
|
+
.split(/\s+/)
|
|
62
|
+
.filter(Boolean);
|
|
63
|
+
if (!ids.includes(bubble.id)) {
|
|
64
|
+
ids.push(bubble.id);
|
|
65
|
+
trigger.setAttribute('aria-describedby', ids.join(' '));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
root.appendChild(bubble);
|
|
69
|
+
const disposers = [destroyChildren];
|
|
70
|
+
// A disabled trigger exposes no focusable element, so `:focus-within` (and thus
|
|
71
|
+
// keyboard reveal of the hint) can never fire and the wrapper's `aria-describedby`
|
|
72
|
+
// goes unused. Make the WRAPPER focusable in that case so keyboard users can
|
|
73
|
+
// reach the tooltip. Tracked reactively — e.g. `<IconGroup disabled>` toggles
|
|
74
|
+
// `data-disabled`/`aria-disabled` after mount.
|
|
75
|
+
if (trigger) {
|
|
76
|
+
const syncFocusable = () => {
|
|
77
|
+
// `data-disabled` has two conventions in the kit: a boolean attribute
|
|
78
|
+
// (`data-disabled=""` present when disabled — Input/Checkbox/Select/…) and
|
|
79
|
+
// IconGroup's `"true"/"false"`. Treat any present value as disabled EXCEPT
|
|
80
|
+
// the explicit "false".
|
|
81
|
+
const dataDisabled = trigger.getAttribute('data-disabled');
|
|
82
|
+
const disabled = trigger.hasAttribute('disabled') ||
|
|
83
|
+
trigger.getAttribute('aria-disabled') === 'true' ||
|
|
84
|
+
(dataDisabled !== null && dataDisabled !== 'false');
|
|
85
|
+
if (disabled)
|
|
86
|
+
root.tabIndex = 0;
|
|
87
|
+
else
|
|
88
|
+
root.removeAttribute('tabindex');
|
|
89
|
+
};
|
|
90
|
+
syncFocusable();
|
|
91
|
+
if (typeof MutationObserver !== 'undefined') {
|
|
92
|
+
const observer = new MutationObserver(syncFocusable);
|
|
93
|
+
observer.observe(trigger, {
|
|
94
|
+
attributes: true,
|
|
95
|
+
attributeFilter: ['disabled', 'aria-disabled', 'data-disabled'],
|
|
96
|
+
});
|
|
97
|
+
disposers.push(() => observer.disconnect());
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (hasReactive(label)) {
|
|
101
|
+
disposers.push(effect(() => {
|
|
102
|
+
bubble.textContent = readReactive(label) ?? '';
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
bubble.textContent = readReactive(label) ?? '';
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
el: root,
|
|
110
|
+
destroy() {
|
|
111
|
+
for (const dispose of disposers)
|
|
112
|
+
dispose();
|
|
113
|
+
disposers.length = 0;
|
|
114
|
+
// Clear the projected trigger + bubble so no stale ARIA wiring / DOM is
|
|
115
|
+
// left behind when a consumer destroys without removing `el` (matches the
|
|
116
|
+
// other ui-kit atoms).
|
|
117
|
+
root.replaceChildren();
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=Tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../src/atoms/feedback/tooltip/Tooltip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/// Tooltip — hint bubble revealed on hover / focus-within of the wrapper.
|
|
2
|
+
/// Pure-CSS visibility so it works around disabled controls.
|
|
3
|
+
///
|
|
4
|
+
/// @group atoms/feedback
|
|
5
|
+
|
|
6
|
+
@use '@pithyjs/design-system/a11y/styles/mixins' as a11y;
|
|
7
|
+
@use '../../../shared/tokens' as shared;
|
|
8
|
+
|
|
9
|
+
.ui-tooltip {
|
|
10
|
+
position: relative;
|
|
11
|
+
display: inline-flex;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.ui-tooltip-bubble {
|
|
15
|
+
position: absolute;
|
|
16
|
+
z-index: var(--z-tooltip);
|
|
17
|
+
inline-size: max-content;
|
|
18
|
+
// Centralized measure token (shared/_tokens.scss) rather than a one-off raw value.
|
|
19
|
+
max-inline-size: shared.$measure-tooltip;
|
|
20
|
+
padding-block: var(--space-xs);
|
|
21
|
+
padding-inline: var(--space-sm);
|
|
22
|
+
border-radius: var(--radius-sm);
|
|
23
|
+
background-color: var(--color-surface-inverse, var(--color-text));
|
|
24
|
+
color: var(--color-surface);
|
|
25
|
+
font-size: var(--font-size-xs);
|
|
26
|
+
line-height: var(--line-height-sm);
|
|
27
|
+
text-align: center;
|
|
28
|
+
box-shadow: var(--shadow-md);
|
|
29
|
+
pointer-events: none;
|
|
30
|
+
opacity: 0;
|
|
31
|
+
visibility: hidden;
|
|
32
|
+
|
|
33
|
+
@include a11y.motion-safe {
|
|
34
|
+
transition:
|
|
35
|
+
opacity var(--motion-duration-fast) var(--motion-easing-standard),
|
|
36
|
+
// visibility: 0ms duration, easing, then DELAY by the fade duration so the
|
|
37
|
+
// bubble stays present during the opacity fade-out before hiding. The
|
|
38
|
+
// explicit easing makes the 2nd time unambiguously the delay (not a
|
|
39
|
+
// timing-function).
|
|
40
|
+
visibility var(--motion-duration-instant) var(--motion-easing-standard)
|
|
41
|
+
var(--motion-duration-fast);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Forced-colors (Windows High Contrast): the token bg/text map to system
|
|
45
|
+
// colors that can collapse to unreadable pairings, and shadows aren't rendered
|
|
46
|
+
// — pin to a system Canvas/CanvasText bubble with a visible border instead.
|
|
47
|
+
@include a11y.forced-colors {
|
|
48
|
+
border: var(--border-width-thin) solid CanvasText;
|
|
49
|
+
background-color: Canvas;
|
|
50
|
+
color: CanvasText;
|
|
51
|
+
box-shadow: none;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// No bubble when there's no hint text (e.g. a reactive label that's empty).
|
|
56
|
+
.ui-tooltip-bubble:empty {
|
|
57
|
+
display: none;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Reveal on hover or keyboard focus within the wrapper.
|
|
61
|
+
.ui-tooltip:hover .ui-tooltip-bubble:not(:empty),
|
|
62
|
+
.ui-tooltip:focus-within .ui-tooltip-bubble:not(:empty) {
|
|
63
|
+
opacity: 1;
|
|
64
|
+
visibility: visible;
|
|
65
|
+
|
|
66
|
+
@include a11y.motion-safe {
|
|
67
|
+
transition: opacity var(--motion-duration-fast)
|
|
68
|
+
var(--motion-easing-standard);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// -- Placement ---------------------------------------------------------------
|
|
73
|
+
|
|
74
|
+
.ui-tooltip[data-placement='bottom'] .ui-tooltip-bubble {
|
|
75
|
+
inset-block-start: calc(100% + var(--space-xs));
|
|
76
|
+
inset-inline-start: 50%;
|
|
77
|
+
translate: -50% 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.ui-tooltip[data-placement='top'] .ui-tooltip-bubble {
|
|
81
|
+
inset-block-end: calc(100% + var(--space-xs));
|
|
82
|
+
inset-inline-start: 50%;
|
|
83
|
+
translate: -50% 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.ui-tooltip[data-placement='right'] .ui-tooltip-bubble {
|
|
87
|
+
inset-inline-start: calc(100% + var(--space-xs));
|
|
88
|
+
inset-block-start: 50%;
|
|
89
|
+
translate: 0 -50%;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.ui-tooltip[data-placement='left'] .ui-tooltip-bubble {
|
|
93
|
+
inset-inline-end: calc(100% + var(--space-xs));
|
|
94
|
+
inset-block-start: 50%;
|
|
95
|
+
translate: 0 -50%;
|
|
96
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.checkbox",
|
|
4
|
+
"title": "<Checkbox> Form Atom",
|
|
5
|
+
"category": "feature"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
import { type FormControlBaseProps } from '../../../shared/types';
|
|
9
|
+
/** @codexApi {"parent":"pithy.ui-kit.checkbox","name":"CheckboxProps","stability":"stable","signature":"interface CheckboxProps extends FormControlBaseProps"} */
|
|
10
|
+
export interface CheckboxProps extends FormControlBaseProps {
|
|
11
|
+
/** Checkbox name attribute */
|
|
12
|
+
name?: string;
|
|
13
|
+
/** Submitted value when the checkbox is checked (default: "on") */
|
|
14
|
+
value?: string;
|
|
15
|
+
/** Checked state — static boolean or signal accessor for controlled checkbox */
|
|
16
|
+
checked?: boolean | (() => boolean);
|
|
17
|
+
/** Indeterminate state — visually shows a dash; cleared on user toggle */
|
|
18
|
+
indeterminate?: boolean | (() => boolean);
|
|
19
|
+
/** Fires whenever the checked state changes */
|
|
20
|
+
onChange?: (checked: boolean, e: Event) => void;
|
|
21
|
+
/** Fires when the checkbox loses focus */
|
|
22
|
+
onBlur?: (e: FocusEvent) => void;
|
|
23
|
+
/** Fires when the checkbox gains focus */
|
|
24
|
+
onFocus?: (e: FocusEvent) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Accessible checkbox atom.
|
|
28
|
+
*
|
|
29
|
+
* Renders a `<label class="ui-checkbox">` wrapping a native `<input type="checkbox">`,
|
|
30
|
+
* a custom `<span class="ui-checkbox-box">` (drawn from CSS), and a visible
|
|
31
|
+
* `<span class="ui-checkbox-label">`. Supports indeterminate, error/success
|
|
32
|
+
* states (with shake), helper/error text, loading, and full a11y wiring.
|
|
33
|
+
*
|
|
34
|
+
* This is a pure visual atom — no validation logic. Error/success are driven
|
|
35
|
+
* externally via props.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```html
|
|
39
|
+
* <Checkbox label="'Accept terms'" required="true" />
|
|
40
|
+
* <Checkbox label="'Subscribe'" checked="isSubscribed" onChange="toggle" />
|
|
41
|
+
* <Checkbox label="'Select all'" indeterminate="someSelected" />
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
/** @codexApi {"parent":"pithy.ui-kit.checkbox","name":"Checkbox","stability":"stable","signature":"(props: CheckboxProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
|
|
45
|
+
export declare function Checkbox({ id: externalId, name, value, checked, indeterminate, disabled, readonly: readonlyProp, required, error, errorMessage, helperText, success, size: rawSize, label, loading, onChange, onBlur, onFocus, }: CheckboxProps): {
|
|
46
|
+
el: HTMLElement | DocumentFragment;
|
|
47
|
+
destroy: () => void;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=Checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/atoms/forms/checkbox/Checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAGF,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAc/B,kKAAkK;AAClK,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACzD,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACpC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IAC1C,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAChD,0CAA0C;IAC1C,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,8LAA8L;AAC9L,wBAAgB,QAAQ,CAAC,EACvB,EAAE,EAAE,UAAU,EACd,IAAI,EACJ,KAAY,EACZ,OAAe,EACf,aAAqB,EACrB,QAAgB,EAChB,QAAQ,EAAE,YAAoB,EAC9B,QAAgB,EAChB,KAAa,EACb,YAAY,EACZ,UAAU,EACV,OAAe,EACf,IAAI,EAAE,OAAc,EACpB,KAAK,EACL,OAAe,EACf,QAAQ,EACR,MAAM,EACN,OAAO,GACR,EAAE,aAAa,GAAG;IAAE,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA0R7E"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.checkbox",
|
|
4
|
+
"title": "<Checkbox> Form Atom",
|
|
5
|
+
"category": "feature"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
import { effect } from '@pithyjs/signals';
|
|
9
|
+
import { CONTROL_SIZES, } from '../../../shared/types';
|
|
10
|
+
import { generateCheckboxId } from '../../../shared/checkbox';
|
|
11
|
+
import { createFormStateTracker, applyFormState, cleanupFormState, } from '../../../shared/form-state';
|
|
12
|
+
import { createHelperElement, createErrorElement, createStateIcon, wrapFormControl, } from '../../../shared/form-elements';
|
|
13
|
+
/**
|
|
14
|
+
* Accessible checkbox atom.
|
|
15
|
+
*
|
|
16
|
+
* Renders a `<label class="ui-checkbox">` wrapping a native `<input type="checkbox">`,
|
|
17
|
+
* a custom `<span class="ui-checkbox-box">` (drawn from CSS), and a visible
|
|
18
|
+
* `<span class="ui-checkbox-label">`. Supports indeterminate, error/success
|
|
19
|
+
* states (with shake), helper/error text, loading, and full a11y wiring.
|
|
20
|
+
*
|
|
21
|
+
* This is a pure visual atom — no validation logic. Error/success are driven
|
|
22
|
+
* externally via props.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```html
|
|
26
|
+
* <Checkbox label="'Accept terms'" required="true" />
|
|
27
|
+
* <Checkbox label="'Subscribe'" checked="isSubscribed" onChange="toggle" />
|
|
28
|
+
* <Checkbox label="'Select all'" indeterminate="someSelected" />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
/** @codexApi {"parent":"pithy.ui-kit.checkbox","name":"Checkbox","stability":"stable","signature":"(props: CheckboxProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
|
|
32
|
+
export function Checkbox({ id: externalId, name, value = 'on', checked = false, indeterminate = false, disabled = false, readonly: readonlyProp = false, required = false, error = false, errorMessage, helperText, success = false, size: rawSize = 'md', label, loading = false, onChange, onBlur, onFocus, }) {
|
|
33
|
+
// -- Prop validation -------------------------------------------------------
|
|
34
|
+
const validSize = CONTROL_SIZES.includes(rawSize);
|
|
35
|
+
if (import.meta.env?.DEV) {
|
|
36
|
+
if (!validSize) {
|
|
37
|
+
const valid = CONTROL_SIZES.join(', ');
|
|
38
|
+
console.warn(`[<Checkbox>] Invalid size: "${rawSize}". Expected one of: ${valid}. Falling back to "md".`);
|
|
39
|
+
}
|
|
40
|
+
if (!label) {
|
|
41
|
+
console.warn(`[<Checkbox>] Empty label — all checkboxes require an accessible name. Pass a non-empty label string.`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const size = validSize ? rawSize : 'md';
|
|
45
|
+
// -- Element creation ------------------------------------------------------
|
|
46
|
+
const wrapper = document.createElement('label');
|
|
47
|
+
wrapper.classList.add('ui-checkbox');
|
|
48
|
+
wrapper.setAttribute('data-size', size);
|
|
49
|
+
const checkboxId = externalId ?? generateCheckboxId();
|
|
50
|
+
const input = document.createElement('input');
|
|
51
|
+
input.type = 'checkbox';
|
|
52
|
+
input.classList.add('ui-checkbox-input');
|
|
53
|
+
input.id = checkboxId;
|
|
54
|
+
if (name != null)
|
|
55
|
+
input.name = name;
|
|
56
|
+
input.value = value;
|
|
57
|
+
if (required) {
|
|
58
|
+
input.required = true;
|
|
59
|
+
input.setAttribute('aria-required', 'true');
|
|
60
|
+
wrapper.setAttribute('data-required', '');
|
|
61
|
+
}
|
|
62
|
+
// Custom box — inline SVG for crisp draw-in checkmark + indeterminate dash.
|
|
63
|
+
// Both paths share the same stroke-dasharray plumbing in CSS so they animate
|
|
64
|
+
// identically. The box itself is the painted square; the SVG is the mark.
|
|
65
|
+
const boxEl = document.createElement('span');
|
|
66
|
+
boxEl.classList.add('ui-checkbox-box');
|
|
67
|
+
boxEl.setAttribute('aria-hidden', 'true');
|
|
68
|
+
boxEl.innerHTML = `
|
|
69
|
+
<svg class="ui-checkbox-mark" viewBox="0 0 16 16" fill="none" focusable="false" aria-hidden="true">
|
|
70
|
+
<path class="ui-checkbox-mark-check" d="M3.5 8.5 L7 12 L13 4.5" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" pathLength="1" />
|
|
71
|
+
<path class="ui-checkbox-mark-dash" d="M4 8 L12 8" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" pathLength="1" />
|
|
72
|
+
</svg>
|
|
73
|
+
`.trim();
|
|
74
|
+
// Visible label text
|
|
75
|
+
const labelTextEl = document.createElement('span');
|
|
76
|
+
labelTextEl.classList.add('ui-checkbox-label');
|
|
77
|
+
labelTextEl.textContent = label;
|
|
78
|
+
wrapper.appendChild(input);
|
|
79
|
+
wrapper.appendChild(boxEl);
|
|
80
|
+
wrapper.appendChild(labelTextEl);
|
|
81
|
+
// -- State icon (detached — satisfies applyFormState's element contract) ---
|
|
82
|
+
// The custom box already conveys error/success colors, so the icon is never
|
|
83
|
+
// shown. We keep a detached element so applyFormState can mutate it without
|
|
84
|
+
// injecting unnecessary DOM nodes or triggering animations.
|
|
85
|
+
const stateIconEl = createStateIcon();
|
|
86
|
+
// -- Helper text -----------------------------------------------------------
|
|
87
|
+
const helperId = `${checkboxId}-helper`;
|
|
88
|
+
const helperEl = createHelperElement(helperId, helperText);
|
|
89
|
+
// -- Error message ---------------------------------------------------------
|
|
90
|
+
const errorMsgId = `${checkboxId}-error`;
|
|
91
|
+
const errorMsgEl = createErrorElement(errorMsgId, errorMessage);
|
|
92
|
+
// -- Event handlers --------------------------------------------------------
|
|
93
|
+
const changeHandler = ((e) => {
|
|
94
|
+
// Defensive: click/keydown preventDefault covers user toggles in readonly,
|
|
95
|
+
// but a stray programmatic toggle or label-forwarded click could still
|
|
96
|
+
// dispatch a change event. Roll back the value and skip side effects so
|
|
97
|
+
// readonly truly means readonly.
|
|
98
|
+
if (input.readOnly) {
|
|
99
|
+
const intended = !!readChecked();
|
|
100
|
+
if (input.checked !== intended) {
|
|
101
|
+
input.checked = intended;
|
|
102
|
+
}
|
|
103
|
+
if (intended) {
|
|
104
|
+
wrapper.setAttribute('data-checked', '');
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
wrapper.removeAttribute('data-checked');
|
|
108
|
+
}
|
|
109
|
+
// Restore indeterminate too — UA clears it on any toggle, so a stray
|
|
110
|
+
// change event would lose the visual dash even after checked rollback.
|
|
111
|
+
const intendedIndet = !!readIndeterminate() && !intended;
|
|
112
|
+
if (input.indeterminate !== intendedIndet) {
|
|
113
|
+
input.indeterminate = intendedIndet;
|
|
114
|
+
if (intendedIndet) {
|
|
115
|
+
wrapper.setAttribute('data-indeterminate', '');
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
wrapper.removeAttribute('data-indeterminate');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// User interaction always clears indeterminate
|
|
124
|
+
if (input.indeterminate) {
|
|
125
|
+
input.indeterminate = false;
|
|
126
|
+
wrapper.removeAttribute('data-indeterminate');
|
|
127
|
+
}
|
|
128
|
+
// Keep data-checked in sync for uncontrolled usage (static checked prop)
|
|
129
|
+
if (input.checked) {
|
|
130
|
+
wrapper.setAttribute('data-checked', '');
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
wrapper.removeAttribute('data-checked');
|
|
134
|
+
}
|
|
135
|
+
onChange?.(input.checked, e);
|
|
136
|
+
});
|
|
137
|
+
const blurHandler = ((e) => {
|
|
138
|
+
onBlur?.(e);
|
|
139
|
+
});
|
|
140
|
+
const focusHandler = ((e) => {
|
|
141
|
+
onFocus?.(e);
|
|
142
|
+
});
|
|
143
|
+
input.addEventListener('change', changeHandler);
|
|
144
|
+
input.addEventListener('blur', blurHandler);
|
|
145
|
+
input.addEventListener('focus', focusHandler);
|
|
146
|
+
// Readonly behavior — native <input type="checkbox"> ignores `readonly`,
|
|
147
|
+
// so we intercept and prevent toggling while allowing focus.
|
|
148
|
+
const clickHandler = (e) => {
|
|
149
|
+
if (input.readOnly) {
|
|
150
|
+
e.preventDefault();
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
input.addEventListener('click', clickHandler);
|
|
154
|
+
// Block keyboard toggle in readonly mode (Space). Native checkbox
|
|
155
|
+
// activation fires on keyup in Chromium (keydown only suppresses scroll),
|
|
156
|
+
// so intercept both phases — otherwise a stray toggle would slip through
|
|
157
|
+
// and trigger the change-event rollback path with a visible flash.
|
|
158
|
+
const keydownHandler = (e) => {
|
|
159
|
+
if (input.readOnly && e.key === ' ') {
|
|
160
|
+
e.preventDefault();
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
const keyupHandler = (e) => {
|
|
164
|
+
if (input.readOnly && e.key === ' ') {
|
|
165
|
+
e.preventDefault();
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
input.addEventListener('keydown', keydownHandler);
|
|
169
|
+
input.addEventListener('keyup', keyupHandler);
|
|
170
|
+
// -- Reactive state --------------------------------------------------------
|
|
171
|
+
const readChecked = () => typeof checked === 'function' ? checked() : checked;
|
|
172
|
+
const readIndeterminate = () => typeof indeterminate === 'function' ? indeterminate() : indeterminate;
|
|
173
|
+
const readDisabled = () => typeof disabled === 'function' ? disabled() : disabled;
|
|
174
|
+
const readReadonly = () => typeof readonlyProp === 'function' ? readonlyProp() : readonlyProp;
|
|
175
|
+
const readError = () => (typeof error === 'function' ? error() : error);
|
|
176
|
+
const readErrorMessage = () => typeof errorMessage === 'function' ? errorMessage() : errorMessage;
|
|
177
|
+
const readSuccess = () => typeof success === 'function' ? success() : success;
|
|
178
|
+
const readLoading = () => typeof loading === 'function' ? loading() : loading;
|
|
179
|
+
const isReactive = typeof checked === 'function' ||
|
|
180
|
+
typeof indeterminate === 'function' ||
|
|
181
|
+
typeof disabled === 'function' ||
|
|
182
|
+
typeof readonlyProp === 'function' ||
|
|
183
|
+
typeof error === 'function' ||
|
|
184
|
+
typeof errorMessage === 'function' ||
|
|
185
|
+
typeof success === 'function' ||
|
|
186
|
+
typeof loading === 'function';
|
|
187
|
+
const formTracker = createFormStateTracker();
|
|
188
|
+
const applyState = () => {
|
|
189
|
+
// Checked
|
|
190
|
+
const isChecked = !!readChecked();
|
|
191
|
+
if (input.checked !== isChecked) {
|
|
192
|
+
input.checked = isChecked;
|
|
193
|
+
}
|
|
194
|
+
if (isChecked) {
|
|
195
|
+
wrapper.setAttribute('data-checked', '');
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
wrapper.removeAttribute('data-checked');
|
|
199
|
+
}
|
|
200
|
+
// Indeterminate (only when not checked — UA convention)
|
|
201
|
+
const isIndet = !!readIndeterminate() && !isChecked;
|
|
202
|
+
input.indeterminate = isIndet;
|
|
203
|
+
if (isIndet) {
|
|
204
|
+
wrapper.setAttribute('data-indeterminate', '');
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
wrapper.removeAttribute('data-indeterminate');
|
|
208
|
+
}
|
|
209
|
+
// Disabled
|
|
210
|
+
const isDisabled = !!readDisabled();
|
|
211
|
+
input.disabled = isDisabled;
|
|
212
|
+
if (isDisabled) {
|
|
213
|
+
wrapper.setAttribute('data-disabled', '');
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
wrapper.removeAttribute('data-disabled');
|
|
217
|
+
}
|
|
218
|
+
// Readonly (custom — native checkboxes ignore it)
|
|
219
|
+
const isReadonly = !!readReadonly();
|
|
220
|
+
input.readOnly = isReadonly;
|
|
221
|
+
if (isReadonly) {
|
|
222
|
+
wrapper.setAttribute('data-readonly', '');
|
|
223
|
+
input.setAttribute('aria-readonly', 'true');
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
wrapper.removeAttribute('data-readonly');
|
|
227
|
+
input.removeAttribute('aria-readonly');
|
|
228
|
+
}
|
|
229
|
+
// Error / success / shake / aria-describedby — shared
|
|
230
|
+
applyFormState({ wrapper, control: input, stateIconEl, helperEl, errorMsgEl }, { readError, readErrorMessage, readSuccess }, { helperId, errorMsgId }, { shakeClass: 'ui-checkbox-shake', iconPrefix: 'ui-checkbox-state-icon' }, formTracker);
|
|
231
|
+
// Loading
|
|
232
|
+
const isLoading = !!readLoading();
|
|
233
|
+
wrapper.classList.toggle('ui-checkbox-loading', isLoading);
|
|
234
|
+
if (isLoading) {
|
|
235
|
+
input.setAttribute('aria-busy', 'true');
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
input.removeAttribute('aria-busy');
|
|
239
|
+
}
|
|
240
|
+
formTracker.firstRun = false;
|
|
241
|
+
};
|
|
242
|
+
const cleanupEffect = isReactive
|
|
243
|
+
? effect(applyState)
|
|
244
|
+
: (applyState(), undefined);
|
|
245
|
+
// -- Return ----------------------------------------------------------------
|
|
246
|
+
const { root, needsContainer } = wrapFormControl(wrapper, {
|
|
247
|
+
helperEl,
|
|
248
|
+
errorMsgEl,
|
|
249
|
+
containerClass: 'ui-checkbox-field',
|
|
250
|
+
});
|
|
251
|
+
return {
|
|
252
|
+
el: root,
|
|
253
|
+
destroy: () => {
|
|
254
|
+
cleanupEffect?.();
|
|
255
|
+
input.removeEventListener('change', changeHandler);
|
|
256
|
+
input.removeEventListener('blur', blurHandler);
|
|
257
|
+
input.removeEventListener('focus', focusHandler);
|
|
258
|
+
input.removeEventListener('click', clickHandler);
|
|
259
|
+
input.removeEventListener('keydown', keydownHandler);
|
|
260
|
+
input.removeEventListener('keyup', keyupHandler);
|
|
261
|
+
cleanupFormState(wrapper, stateIconEl, formTracker);
|
|
262
|
+
wrapper.replaceChildren();
|
|
263
|
+
if (needsContainer) {
|
|
264
|
+
root.replaceChildren();
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=Checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../src/atoms/forms/checkbox/Checkbox.ts"],"names":[],"mappings":"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"}
|