@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,193 @@
|
|
|
1
|
+
/// Navbar menu popover — mobile drawer + backdrop + scroll-mask
|
|
2
|
+
/// @group organisms/navigation
|
|
3
|
+
|
|
4
|
+
@use '@pithyjs/design-system/a11y/styles/mixins' as a11y;
|
|
5
|
+
@use '@pithyjs/design-system/layout/styles/glass' as glass;
|
|
6
|
+
@use '@pithyjs/design-system/layout/styles/scroll-mask' as scroll-mask;
|
|
7
|
+
|
|
8
|
+
// ============================================
|
|
9
|
+
// Menu (popover)
|
|
10
|
+
// ============================================
|
|
11
|
+
|
|
12
|
+
// Suppress popover transitions while JS flips layout, otherwise the
|
|
13
|
+
// allow-discrete display animation flashes items on desktop→mobile.
|
|
14
|
+
.ui-navbar[data-layout-transitioning] .ui-navbar-menu,
|
|
15
|
+
.ui-navbar[data-layout-transitioning] .ui-navbar-menu::backdrop {
|
|
16
|
+
transition: none !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.ui-navbar-menu {
|
|
20
|
+
border: none;
|
|
21
|
+
padding: var(--space-md);
|
|
22
|
+
// Clears the iOS home indicator / Android gesture bar.
|
|
23
|
+
padding-block-end: max(var(--space-md), env(safe-area-inset-bottom));
|
|
24
|
+
margin: 0;
|
|
25
|
+
background: var(--color-surface);
|
|
26
|
+
color: var(--color-text);
|
|
27
|
+
border-radius: var(--radius-lg);
|
|
28
|
+
box-shadow: var(--shadow-lg);
|
|
29
|
+
// Drawer-width on mobile: span full viewport minus gutters. Desktop
|
|
30
|
+
// :not([data-layout="mobile"]) selector resets to auto.
|
|
31
|
+
inline-size: calc(100vw - var(--space-md) * 2);
|
|
32
|
+
max-inline-size: calc(100vw - var(--space-md) * 2);
|
|
33
|
+
|
|
34
|
+
// JS publishes `--_menu-top` on open; CSS subtracts it so max-block-size
|
|
35
|
+
// can factor in env() + dvh, which JS can't read. 100vh is the fallback
|
|
36
|
+
// for engines without dvh.
|
|
37
|
+
max-block-size: calc(
|
|
38
|
+
100vh - var(--_menu-top, 0px) - env(safe-area-inset-bottom) - var(
|
|
39
|
+
--space-md
|
|
40
|
+
)
|
|
41
|
+
);
|
|
42
|
+
max-block-size: calc(
|
|
43
|
+
100dvh - var(--_menu-top, 0px) - env(safe-area-inset-bottom) - var(
|
|
44
|
+
--space-md
|
|
45
|
+
)
|
|
46
|
+
);
|
|
47
|
+
overflow-y: auto;
|
|
48
|
+
overscroll-behavior: contain;
|
|
49
|
+
|
|
50
|
+
// Strong dim + meaningful blur so the drawer reads as modal on mobile.
|
|
51
|
+
// The menu's `overlay allow-discrete` transition keeps the backdrop in the
|
|
52
|
+
// render tree long enough to fade on close.
|
|
53
|
+
&::backdrop {
|
|
54
|
+
@include glass.glass-scrim(var(--color-text), 55%, glass);
|
|
55
|
+
|
|
56
|
+
@include a11y.motion-safe {
|
|
57
|
+
// Exit: quick fade — backdrop shouldn't linger after drawer is gone.
|
|
58
|
+
transition:
|
|
59
|
+
background-color var(--motion-duration-normal) var(--motion-easing-exit),
|
|
60
|
+
backdrop-filter var(--motion-duration-normal) var(--motion-easing-exit),
|
|
61
|
+
-webkit-backdrop-filter var(--motion-duration-normal)
|
|
62
|
+
var(--motion-easing-exit);
|
|
63
|
+
|
|
64
|
+
@starting-style {
|
|
65
|
+
background-color: transparent;
|
|
66
|
+
backdrop-filter: blur(0);
|
|
67
|
+
-webkit-backdrop-filter: blur(0);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Entrance: slow fade matches the drawer slide-in for a cohesive feel.
|
|
73
|
+
&:popover-open::backdrop {
|
|
74
|
+
@include a11y.motion-safe {
|
|
75
|
+
transition:
|
|
76
|
+
background-color var(--motion-duration-slow)
|
|
77
|
+
var(--motion-easing-entrance),
|
|
78
|
+
backdrop-filter var(--motion-duration-slow)
|
|
79
|
+
var(--motion-easing-entrance),
|
|
80
|
+
-webkit-backdrop-filter var(--motion-duration-slow)
|
|
81
|
+
var(--motion-easing-entrance);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&:not(:popover-open)::backdrop {
|
|
86
|
+
background-color: transparent;
|
|
87
|
+
backdrop-filter: blur(0);
|
|
88
|
+
-webkit-backdrop-filter: blur(0);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@include a11y.forced-colors {
|
|
92
|
+
border: 1px solid ButtonText;
|
|
93
|
+
background: Canvas;
|
|
94
|
+
color: CanvasText;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Mobile: full-height side-sheet anchored to the trailing edge (origin matches
|
|
99
|
+
// the hamburger). JS skips the desktop anchor-positioning on mobile so CSS here
|
|
100
|
+
// fully owns layout. Scoped so `:not(:popover-open)` doesn't bleed into desktop.
|
|
101
|
+
.ui-navbar[data-layout='mobile'] {
|
|
102
|
+
.ui-navbar-menu {
|
|
103
|
+
--_ui-navbar-menu-inline-size: min(88vw, 22rem);
|
|
104
|
+
|
|
105
|
+
position: fixed;
|
|
106
|
+
inset-block-start: 0;
|
|
107
|
+
inset-block-end: 0;
|
|
108
|
+
inset-inline-end: 0;
|
|
109
|
+
inset-inline-start: auto;
|
|
110
|
+
inline-size: var(--_ui-navbar-menu-inline-size);
|
|
111
|
+
max-inline-size: var(--_ui-navbar-menu-inline-size);
|
|
112
|
+
block-size: 100dvh;
|
|
113
|
+
max-block-size: 100dvh;
|
|
114
|
+
padding-block: var(--space-lg);
|
|
115
|
+
padding-block-end: max(var(--space-lg), env(safe-area-inset-bottom));
|
|
116
|
+
padding-inline: var(--space-lg);
|
|
117
|
+
border-radius: var(--radius-lg) 0 0 var(--radius-lg);
|
|
118
|
+
box-shadow: var(--shadow-xl);
|
|
119
|
+
border-inline-start: var(--border-width-hairline) solid var(--color-border);
|
|
120
|
+
|
|
121
|
+
&:popover-open {
|
|
122
|
+
display: flex;
|
|
123
|
+
flex-direction: column;
|
|
124
|
+
gap: var(--space-sm);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@include a11y.motion-safe {
|
|
128
|
+
opacity: 1;
|
|
129
|
+
translate: 0 0;
|
|
130
|
+
// Exit: responsive snap-out — fast enough to feel instant but visible.
|
|
131
|
+
transition:
|
|
132
|
+
opacity var(--motion-duration-normal) var(--motion-easing-exit),
|
|
133
|
+
translate var(--motion-duration-normal) var(--motion-easing-exit),
|
|
134
|
+
display var(--motion-duration-normal) allow-discrete,
|
|
135
|
+
overlay var(--motion-duration-normal) allow-discrete;
|
|
136
|
+
|
|
137
|
+
// Entrance: deliberate slide-in with deceleration for premium weight.
|
|
138
|
+
&:popover-open {
|
|
139
|
+
transition:
|
|
140
|
+
opacity var(--motion-duration-slow) var(--motion-easing-entrance),
|
|
141
|
+
translate var(--motion-duration-slow) var(--motion-easing-entrance),
|
|
142
|
+
display var(--motion-duration-slow) allow-discrete,
|
|
143
|
+
overlay var(--motion-duration-slow) allow-discrete;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Closed state: fully off-screen to the trailing edge.
|
|
147
|
+
&:not(:popover-open) {
|
|
148
|
+
opacity: 0;
|
|
149
|
+
translate: 100% 0;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@starting-style {
|
|
153
|
+
&:popover-open {
|
|
154
|
+
opacity: 0;
|
|
155
|
+
translate: 100% 0;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Scroll-driven scroll-edge mask — Chromium 115+ / Safari 18+.
|
|
162
|
+
// Engines without scroll-driven animations get a crisp edge.
|
|
163
|
+
.ui-navbar-menu {
|
|
164
|
+
@include scroll-mask.scroll-fade-mask('_navbar-menu');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Keyframes for the scroll-driven fade. 0% = both edges crisp (covers
|
|
168
|
+
// "at top" and "no overflow" since scroll-timeline stays at 0%).
|
|
169
|
+
@supports (animation-timeline: scroll()) {
|
|
170
|
+
@keyframes _navbar-menu-edge-fade {
|
|
171
|
+
0% {
|
|
172
|
+
--_navbar-menu-mask-top: 0px;
|
|
173
|
+
--_navbar-menu-mask-bottom: 0px;
|
|
174
|
+
}
|
|
175
|
+
2% {
|
|
176
|
+
--_navbar-menu-mask-top: 0px;
|
|
177
|
+
--_navbar-menu-mask-bottom: var(--_navbar-mask-fade);
|
|
178
|
+
}
|
|
179
|
+
5% {
|
|
180
|
+
--_navbar-menu-mask-top: var(--_navbar-mask-fade);
|
|
181
|
+
--_navbar-menu-mask-bottom: var(--_navbar-mask-fade);
|
|
182
|
+
}
|
|
183
|
+
95% {
|
|
184
|
+
--_navbar-menu-mask-top: var(--_navbar-mask-fade);
|
|
185
|
+
--_navbar-menu-mask-bottom: var(--_navbar-mask-fade);
|
|
186
|
+
}
|
|
187
|
+
100% {
|
|
188
|
+
--_navbar-menu-mask-top: var(--_navbar-mask-fade);
|
|
189
|
+
--_navbar-menu-mask-bottom: 0px;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/// Navbar root element + skip-to-content
|
|
2
|
+
/// @group organisms/navigation
|
|
3
|
+
|
|
4
|
+
@use '@pithyjs/design-system/a11y/styles/mixins' as a11y;
|
|
5
|
+
@use '@pithyjs/design-system/layout/styles/glass' as glass;
|
|
6
|
+
|
|
7
|
+
// ============================================
|
|
8
|
+
// Root
|
|
9
|
+
// ============================================
|
|
10
|
+
|
|
11
|
+
.ui-navbar {
|
|
12
|
+
// -- Component-scoped custom properties ------------------------------------
|
|
13
|
+
--_navbar-brand-dot: 0.55em;
|
|
14
|
+
--_navbar-brand-ls: -0.01em;
|
|
15
|
+
--_navbar-brand-ls-scrolled: -0.02em;
|
|
16
|
+
--_navbar-announcement-ls: 0.005em;
|
|
17
|
+
--_navbar-drawer-link-ls: -0.014em;
|
|
18
|
+
--_navbar-mask-fade: 0.75rem;
|
|
19
|
+
|
|
20
|
+
container-type: inline-size;
|
|
21
|
+
contain: layout paint;
|
|
22
|
+
position: relative;
|
|
23
|
+
display: block;
|
|
24
|
+
inline-size: 100%;
|
|
25
|
+
|
|
26
|
+
color: var(--color-text);
|
|
27
|
+
font-size: var(--font-size-sm);
|
|
28
|
+
-webkit-font-smoothing: antialiased;
|
|
29
|
+
-moz-osx-font-smoothing: grayscale;
|
|
30
|
+
|
|
31
|
+
// Prevents layout shift on hydration.
|
|
32
|
+
min-block-size: calc(
|
|
33
|
+
var(--control-padding-y-md) * 2 + var(--control-min-touch)
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
background-color: var(--color-surface);
|
|
37
|
+
border-block-end: var(--border-width-hairline) solid transparent;
|
|
38
|
+
|
|
39
|
+
@include a11y.motion-safe {
|
|
40
|
+
transition:
|
|
41
|
+
background-color var(--motion-duration-normal)
|
|
42
|
+
var(--motion-easing-standard),
|
|
43
|
+
border-block-end-color var(--motion-duration-normal)
|
|
44
|
+
var(--motion-easing-standard),
|
|
45
|
+
box-shadow var(--motion-duration-normal) var(--motion-easing-standard),
|
|
46
|
+
backdrop-filter var(--motion-duration-normal)
|
|
47
|
+
var(--motion-easing-standard),
|
|
48
|
+
min-block-size var(--motion-duration-normal) var(--motion-easing-standard);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
&[data-density='compact'] {
|
|
52
|
+
min-block-size: calc(
|
|
53
|
+
var(--control-padding-y-sm) * 2 + var(--control-min-touch)
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&[data-sticky='true'] {
|
|
58
|
+
position: sticky;
|
|
59
|
+
inset-block-start: 0;
|
|
60
|
+
z-index: 50;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
&[data-transparent='true'] {
|
|
64
|
+
background-color: transparent;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Both variants converge on a tinted, blurred, hair-bordered surface once scrolled.
|
|
68
|
+
// The inset 1px highlight seals the frosted surface — the "Linear/Vercel" effect.
|
|
69
|
+
&[data-scrolled='true'] {
|
|
70
|
+
@include glass.glass-surface(
|
|
71
|
+
var(--color-surface),
|
|
72
|
+
80%,
|
|
73
|
+
backdrop,
|
|
74
|
+
var(--color-text),
|
|
75
|
+
6%,
|
|
76
|
+
var(--shadow-sm)
|
|
77
|
+
);
|
|
78
|
+
border-block-end-color: var(--color-border);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Compact is already condensed; only comfortable shrinks on scroll.
|
|
82
|
+
&[data-density='comfortable'][data-scrolled='true'] {
|
|
83
|
+
min-block-size: calc(
|
|
84
|
+
var(--control-padding-y-sm) * 2 + var(--control-min-touch)
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@include a11y.forced-colors {
|
|
89
|
+
border-block-end: 1px solid ButtonText;
|
|
90
|
+
background-color: Canvas;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Nav is chrome, not content.
|
|
94
|
+
@media print {
|
|
95
|
+
display: none;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@include a11y.primary-selection;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ============================================
|
|
102
|
+
// Skip-to-content
|
|
103
|
+
// ============================================
|
|
104
|
+
|
|
105
|
+
.ui-navbar-skip {
|
|
106
|
+
@include a11y.skip-link;
|
|
107
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/// Navbar search slot (optional, between items and actions)
|
|
2
|
+
/// @group organisms/navigation
|
|
3
|
+
|
|
4
|
+
@use '@pithyjs/design-system/a11y/styles/mixins' as a11y;
|
|
5
|
+
|
|
6
|
+
// ============================================
|
|
7
|
+
// Search slot (optional, between items and actions)
|
|
8
|
+
// ============================================
|
|
9
|
+
|
|
10
|
+
.ui-navbar-search {
|
|
11
|
+
display: flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
min-inline-size: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Opinionated shell for a command-palette trigger. Consumers put their own
|
|
17
|
+
// button inside the slot; this class styles the trigger into a muted pill
|
|
18
|
+
// with a trailing kbd chip.
|
|
19
|
+
.ui-navbar-search-hint {
|
|
20
|
+
appearance: none;
|
|
21
|
+
display: inline-flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
gap: var(--space-sm); // Close friends — label ↔ kbd
|
|
24
|
+
min-block-size: var(--control-min-touch);
|
|
25
|
+
padding-inline: var(--control-padding-x-sm);
|
|
26
|
+
padding-block: var(--control-padding-y-sm);
|
|
27
|
+
border-radius: var(--radius-md);
|
|
28
|
+
border: var(--border-width-hairline) solid var(--color-border);
|
|
29
|
+
background-color: var(--color-surface-variant);
|
|
30
|
+
color: var(--color-text-muted);
|
|
31
|
+
font-size: var(--font-size-sm);
|
|
32
|
+
font-weight: var(--font-weight-regular);
|
|
33
|
+
text-decoration: none;
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
@include a11y.touch-optimize;
|
|
36
|
+
|
|
37
|
+
@include a11y.motion-safe {
|
|
38
|
+
transition:
|
|
39
|
+
var(--motion-transition-background), var(--motion-transition-color),
|
|
40
|
+
var(--motion-transition-border);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&:hover {
|
|
44
|
+
color: var(--color-text);
|
|
45
|
+
border-color: var(--color-border);
|
|
46
|
+
@include a11y.state-background(hover, var(--color-primary));
|
|
47
|
+
}
|
|
48
|
+
&:focus-visible {
|
|
49
|
+
@include a11y.focus-ring;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
kbd {
|
|
53
|
+
@include a11y.kbd-chip;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@include a11y.forced-colors {
|
|
57
|
+
border: 1px solid ButtonText;
|
|
58
|
+
kbd {
|
|
59
|
+
border: 1px solid ButtonText;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.ui-navbar[data-layout='mobile'] {
|
|
65
|
+
// Actions anchor to the bottom of the side-sheet — makes the theme toggle
|
|
66
|
+
// feel pinned rather than orphaned in whitespace.
|
|
67
|
+
.ui-navbar-actions {
|
|
68
|
+
margin-block-start: auto;
|
|
69
|
+
padding-block-start: var(--space-md);
|
|
70
|
+
border-block-start: var(--border-width-hairline) solid var(--color-divider);
|
|
71
|
+
inline-size: 100%;
|
|
72
|
+
}
|
|
73
|
+
.ui-navbar-search {
|
|
74
|
+
margin-block-start: var(--space-md);
|
|
75
|
+
padding-block-start: var(--space-md);
|
|
76
|
+
border-block-start: var(--border-width-hairline) solid var(--color-divider);
|
|
77
|
+
inline-size: 100%;
|
|
78
|
+
}
|
|
79
|
+
// When both slots are present, only the first one needs a divider — search
|
|
80
|
+
// already separates the lists cluster, so actions falls below search without
|
|
81
|
+
// a second rule. Actions next to search keeps its own divider intact because
|
|
82
|
+
// it's still separated by a semantic cluster (CTAs vs. trigger).
|
|
83
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/// Navbar hamburger toggle + SVG morph
|
|
2
|
+
/// @group organisms/navigation
|
|
3
|
+
|
|
4
|
+
@use '@pithyjs/design-system/a11y/styles/mixins' as a11y;
|
|
5
|
+
|
|
6
|
+
// ============================================
|
|
7
|
+
// Hamburger toggle
|
|
8
|
+
// ============================================
|
|
9
|
+
|
|
10
|
+
// Hidden in desktop layout via [data-layout] selector; visible only in mobile.
|
|
11
|
+
.ui-navbar-toggle {
|
|
12
|
+
appearance: none;
|
|
13
|
+
border: none;
|
|
14
|
+
background: none;
|
|
15
|
+
color: var(--color-text);
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
@include a11y.touch-optimize;
|
|
18
|
+
padding: 0;
|
|
19
|
+
inline-size: var(--control-min-touch);
|
|
20
|
+
block-size: var(--control-min-touch);
|
|
21
|
+
display: inline-flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: center;
|
|
24
|
+
border-radius: var(--radius-md);
|
|
25
|
+
margin-inline-start: auto;
|
|
26
|
+
|
|
27
|
+
@include a11y.motion-safe {
|
|
28
|
+
transition:
|
|
29
|
+
background-color var(--motion-duration-fast) var(--motion-easing-standard),
|
|
30
|
+
transform var(--motion-duration-fast) var(--motion-easing-standard),
|
|
31
|
+
color var(--motion-duration-fast) var(--motion-easing-standard);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
&:hover {
|
|
35
|
+
@include a11y.state-background(hover, var(--color-primary));
|
|
36
|
+
color: var(--color-primary);
|
|
37
|
+
}
|
|
38
|
+
&:focus-visible {
|
|
39
|
+
@include a11y.focus-ring;
|
|
40
|
+
}
|
|
41
|
+
// Shared pressed state ties trigger + popover together as one cause/effect;
|
|
42
|
+
// scale is tap-only so the button isn't permanently smaller while open.
|
|
43
|
+
&:active,
|
|
44
|
+
&[aria-expanded='true'] {
|
|
45
|
+
@include a11y.state-background(pressed, var(--color-primary));
|
|
46
|
+
}
|
|
47
|
+
&:active {
|
|
48
|
+
transform: scale(var(--motion-scale-subtle));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@include a11y.forced-colors {
|
|
52
|
+
border: 1px solid ButtonText;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ============================================
|
|
57
|
+
// Hamburger SVG (morph → X when menu open)
|
|
58
|
+
// ============================================
|
|
59
|
+
|
|
60
|
+
.ui-navbar-hamburger {
|
|
61
|
+
inline-size: var(--icon-size-md);
|
|
62
|
+
block-size: var(--icon-size-md);
|
|
63
|
+
display: block;
|
|
64
|
+
overflow: visible;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.ui-navbar-hamburger-line {
|
|
68
|
+
stroke: currentColor;
|
|
69
|
+
stroke-width: var(--icon-stroke-medium);
|
|
70
|
+
stroke-linecap: round;
|
|
71
|
+
// Center of the 24×24 viewBox.
|
|
72
|
+
transform-origin: center;
|
|
73
|
+
|
|
74
|
+
@include a11y.motion-safe {
|
|
75
|
+
transition:
|
|
76
|
+
transform var(--motion-duration-fast) var(--motion-easing-standard),
|
|
77
|
+
opacity var(--motion-duration-fast) var(--motion-easing-standard);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.ui-navbar-toggle[aria-expanded='true'] {
|
|
82
|
+
.ui-navbar-hamburger-line[data-line='top'] {
|
|
83
|
+
transform: translateY(5px) rotate(45deg);
|
|
84
|
+
}
|
|
85
|
+
.ui-navbar-hamburger-line[data-line='mid'] {
|
|
86
|
+
opacity: 0;
|
|
87
|
+
}
|
|
88
|
+
.ui-navbar-hamburger-line[data-line='bot'] {
|
|
89
|
+
transform: translateY(-5px) rotate(-45deg);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// Navbar @property registrations for animatable custom properties
|
|
2
|
+
/// @group organisms/navigation
|
|
3
|
+
|
|
4
|
+
// Registered so the mask stops can interpolate across keyframes instead
|
|
5
|
+
// of jumping discretely.
|
|
6
|
+
@property --_navbar-menu-mask-top {
|
|
7
|
+
syntax: '<length>';
|
|
8
|
+
inherits: false;
|
|
9
|
+
initial-value: 0px;
|
|
10
|
+
}
|
|
11
|
+
@property --_navbar-menu-mask-bottom {
|
|
12
|
+
syntax: '<length>';
|
|
13
|
+
inherits: false;
|
|
14
|
+
initial-value: 0px;
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// Navbar organism styles
|
|
2
|
+
/// Top-of-page navigation with brand, primary links, trailing actions,
|
|
3
|
+
/// native Popover mobile menu, and scroll-aware chrome.
|
|
4
|
+
///
|
|
5
|
+
/// @group organisms/navigation
|
|
6
|
+
|
|
7
|
+
@forward 'navbar-tokens';
|
|
8
|
+
@forward 'navbar-root';
|
|
9
|
+
@forward 'navbar-announcement';
|
|
10
|
+
@forward 'navbar-container';
|
|
11
|
+
@forward 'navbar-brand';
|
|
12
|
+
@forward 'navbar-toggle';
|
|
13
|
+
@forward 'navbar-drawer';
|
|
14
|
+
@forward 'navbar-menu';
|
|
15
|
+
@forward 'navbar-links';
|
|
16
|
+
@forward 'navbar-search';
|
|
17
|
+
@forward 'navbar-desktop';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.registry-categories", "title": "Component Domain Categories", "category": "types" } */
|
|
2
|
+
/** @codexApi {"parent":"pithy.ui-kit.registry-categories","name":"COMPONENT_DOMAINS","stability":"stable","signature":"readonly [\"actions\", \"content\", \"layout\", \"navigation\", \"forms\", \"data\", \"feedback\", \"sections\"]"} */
|
|
3
|
+
export declare const COMPONENT_DOMAINS: readonly ["actions", "content", "layout", "navigation", "forms", "data", "feedback", "sections"];
|
|
4
|
+
/** @codexApi {"parent":"pithy.ui-kit.registry-categories","name":"ComponentDomain","stability":"stable","signature":"type ComponentDomain = \"actions\" | \"content\" | \"layout\" | \"navigation\" | \"forms\" | \"data\" | \"feedback\" | \"sections\""} */
|
|
5
|
+
export type ComponentDomain = (typeof COMPONENT_DOMAINS)[number];
|
|
6
|
+
//# sourceMappingURL=categories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../src/registry/categories.ts"],"names":[],"mappings":"AAAA,uHAAuH;AAEvH,6OAA6O;AAC7O,eAAO,MAAM,iBAAiB,kGASpB,CAAC;AAEX,8PAA8P;AAC9P,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.registry-categories", "title": "Component Domain Categories", "category": "types" } */
|
|
2
|
+
/** @codexApi {"parent":"pithy.ui-kit.registry-categories","name":"COMPONENT_DOMAINS","stability":"stable","signature":"readonly [\"actions\", \"content\", \"layout\", \"navigation\", \"forms\", \"data\", \"feedback\", \"sections\"]"} */
|
|
3
|
+
export const COMPONENT_DOMAINS = [
|
|
4
|
+
'actions',
|
|
5
|
+
'content',
|
|
6
|
+
'layout',
|
|
7
|
+
'navigation',
|
|
8
|
+
'forms',
|
|
9
|
+
'data',
|
|
10
|
+
'feedback',
|
|
11
|
+
'sections',
|
|
12
|
+
];
|
|
13
|
+
//# sourceMappingURL=categories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categories.js","sourceRoot":"","sources":["../../src/registry/categories.ts"],"names":[],"mappings":"AAAA,uHAAuH;AAEvH,6OAA6O;AAC7O,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS;IACT,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,MAAM;IACN,UAAU;IACV,UAAU;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/registry/components.ts"],"names":[],"mappings":"AA4GA;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAIlC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// THIS FILE IS GENERATED by packages/ui-kit/scripts/sync-registry.ts
|
|
2
|
+
// DO NOT EDIT by hand. Run `pnpm --filter @pithyjs/ui-kit sync-registry` to
|
|
3
|
+
// regenerate from PIDL specs in packages/pidl-catalog/specs/.
|
|
4
|
+
/** @codex { "id": "pithy.ui-kit.registry-components", "title": "V0.1 Component Registrations", "category": "feature" } */
|
|
5
|
+
/**
|
|
6
|
+
* Registers all V0.1 UI Kit components into the registry.
|
|
7
|
+
* Import this module for its side-effect (populating the registry).
|
|
8
|
+
*
|
|
9
|
+
* Component code is lazy-loaded via dynamic import.
|
|
10
|
+
*/
|
|
11
|
+
import { registerComponent, VALID_LEVELS, VALID_DOMAINS, } from "./index";
|
|
12
|
+
import { REGISTRY_META } from "./registry-meta";
|
|
13
|
+
function fromMeta(id, load) {
|
|
14
|
+
const meta = REGISTRY_META[id];
|
|
15
|
+
if (!meta) {
|
|
16
|
+
console.error(`[ui-kit/registry] No PIDL metadata found for "${id}". Add it via PIDL spec + scripts/component-paths.ts.`);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (import.meta.env?.DEV) {
|
|
20
|
+
if (meta.id !== id) {
|
|
21
|
+
console.warn(`[ui-kit/registry] Key "${id}" does not match meta.id "${meta.id}".`);
|
|
22
|
+
}
|
|
23
|
+
if (!VALID_LEVELS.has(meta.level)) {
|
|
24
|
+
console.warn(`[ui-kit/registry] PIDL "${id}" has invalid level "${meta.level}".`);
|
|
25
|
+
}
|
|
26
|
+
if (!VALID_DOMAINS.has(meta.domain)) {
|
|
27
|
+
console.warn(`[ui-kit/registry] PIDL "${id}" has invalid domain "${meta.domain}".`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
id: meta.id,
|
|
32
|
+
name: meta.name,
|
|
33
|
+
level: meta.level,
|
|
34
|
+
domain: meta.domain,
|
|
35
|
+
pidl: meta,
|
|
36
|
+
load,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const V0_1_COMPONENTS = [
|
|
40
|
+
// Atoms — actions
|
|
41
|
+
fromMeta("ui.button", () => import("../atoms/actions/button/Button")),
|
|
42
|
+
fromMeta("ui.icon-group", () => import("../atoms/actions/icon-group/IconGroup")),
|
|
43
|
+
fromMeta("ui.segmented-control", () => import("../atoms/actions/segmented-control/SegmentedControl")),
|
|
44
|
+
// Atoms — content
|
|
45
|
+
fromMeta("ui.text", () => import("../atoms/content/text/Text")),
|
|
46
|
+
fromMeta("ui.heading", () => import("../atoms/content/heading/Heading")),
|
|
47
|
+
fromMeta("ui.image", () => import("../atoms/content/image/Image")),
|
|
48
|
+
fromMeta("ui.icon", () => import("../atoms/content/icon/Icon")),
|
|
49
|
+
fromMeta("ui.badge", () => import("../atoms/content/badge/Badge")),
|
|
50
|
+
fromMeta("ui.tile", () => import("../atoms/content/tile/Tile")),
|
|
51
|
+
fromMeta("ui.action-tile", () => import("../atoms/content/action-tile/ActionTile")),
|
|
52
|
+
// Forms (atoms + molecules)
|
|
53
|
+
fromMeta("ui.input", () => import("../atoms/forms/input/Input")),
|
|
54
|
+
fromMeta("ui.select", () => import("../atoms/forms/select/Select")),
|
|
55
|
+
fromMeta("ui.textarea", () => import("../atoms/forms/textarea/Textarea")),
|
|
56
|
+
fromMeta("ui.checkbox", () => import("../atoms/forms/checkbox/Checkbox")),
|
|
57
|
+
fromMeta("ui.checkbox-group", () => import("../atoms/forms/checkbox/CheckboxGroup")),
|
|
58
|
+
fromMeta("ui.radio", () => import("../atoms/forms/radio/Radio")),
|
|
59
|
+
fromMeta("ui.radio-group", () => import("../atoms/forms/radio/RadioGroup")),
|
|
60
|
+
fromMeta("ui.toggle", () => import("../atoms/forms/toggle/Toggle")),
|
|
61
|
+
fromMeta("ui.file-picker", () => import("../atoms/forms/file-picker/FilePicker")),
|
|
62
|
+
fromMeta("ui.form-field", () => import("../atoms/forms/form-field/FormField")),
|
|
63
|
+
// Organisms — forms
|
|
64
|
+
fromMeta("ui.form", () => import("../organisms/forms/Form")),
|
|
65
|
+
fromMeta("ui.dynamic-form", () => import("../organisms/forms/DynamicForm")),
|
|
66
|
+
// Organisms — content
|
|
67
|
+
fromMeta("ui.card", () => import("../organisms/content/Card")),
|
|
68
|
+
// Organisms — navigation
|
|
69
|
+
fromMeta("ui.navbar", () => import("../organisms/navigation/Navbar")),
|
|
70
|
+
// Layout
|
|
71
|
+
fromMeta("ui.stack", () => import("../layout/Stack")),
|
|
72
|
+
fromMeta("ui.grid", () => import("../layout/Grid")),
|
|
73
|
+
fromMeta("ui.grid-item", () => import("../layout/GridItem")),
|
|
74
|
+
fromMeta("ui.smart-container", () => import("../layout/SmartContainer")),
|
|
75
|
+
fromMeta("ui.page-section", () => import("../layout/PageSection")),
|
|
76
|
+
// Sections
|
|
77
|
+
fromMeta("ui.hero-section", () => import("../sections/hero/HeroSection")),
|
|
78
|
+
fromMeta("ui.features-section", () => import("../sections/features/FeaturesSection")),
|
|
79
|
+
fromMeta("ui.cta-section", () => import("../sections/cta/CTASection")),
|
|
80
|
+
fromMeta("ui.contact-section", () => import("../sections/contact/ContactSection")),
|
|
81
|
+
fromMeta("ui.footer-section", () => import("../sections/footer/FooterSection")),
|
|
82
|
+
// Other
|
|
83
|
+
fromMeta("ui.modal", () => import("../organisms/feedback/Modal")),
|
|
84
|
+
];
|
|
85
|
+
/**
|
|
86
|
+
* @codexApi {"parent":"pithy.ui-kit.registry-components","name":"registerAll","stability":"experimental","signature":"() => void"}
|
|
87
|
+
*/
|
|
88
|
+
export function registerAll() {
|
|
89
|
+
for (const meta of V0_1_COMPONENTS) {
|
|
90
|
+
if (meta)
|
|
91
|
+
registerComponent(meta);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
registerAll();
|
|
95
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/registry/components.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,4EAA4E;AAC5E,8DAA8D;AAE9D,0HAA0H;AAE1H;;;;;GAKG;AAEH,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,GAEd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAuB,MAAM,iBAAiB,CAAC;AAErE,SAAS,QAAQ,CACf,EAAU,EACV,IAA4C;IAE5C,MAAM,IAAI,GAA+B,aAAa,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CACX,iDAAiD,EAAE,uDAAuD,CAC3G,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,6BAA6B,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,wBAAwB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,yBAAyB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI;QACV,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAA6B;IAChD,kBAAkB;IAClB,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;IACrE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAChF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC;IAErG,kBAAkB;IAClB,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAC/D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IACxE,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAClE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAC/D,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAClE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAC/D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC;IAEnF,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACnE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IACzE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IACzE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;IACpF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAChE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAC3E,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACnE,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;IACjF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;IAE9E,oBAAoB;IACpB,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC5D,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAE3E,sBAAsB;IACtB,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAE9D,yBAAyB;IACzB,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAErE,SAAS;IACT,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACxE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElE,WAAW;IACX,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACzE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;IACrF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IACtE,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAClF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAE/E,QAAQ;IACR,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC;CAClE,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI;YAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,WAAW,EAAE,CAAC"}
|