@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,37 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.reconcile-list",
|
|
4
|
+
"title": "Imperative Keyed List Reconciler",
|
|
5
|
+
"category": "runtime"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
import { type Reactive } from './clickable';
|
|
9
|
+
/** A reconciled row: its element, an in-place patcher, and a disposer. */
|
|
10
|
+
/** @codexApi {"parent":"pithy.ui-kit.reconcile-list","name":"ListRow","stability":"stable","signature":"interface ListRow<T>"} */
|
|
11
|
+
export interface ListRow<T> {
|
|
12
|
+
el: HTMLElement;
|
|
13
|
+
/** Patch the row's content to reflect a new item with the same key. */
|
|
14
|
+
update: (item: T, index: number) => void;
|
|
15
|
+
destroy: () => void;
|
|
16
|
+
}
|
|
17
|
+
/** @codexApi {"parent":"pithy.ui-kit.reconcile-list","name":"ReconcileListOptions","stability":"stable","signature":"interface ReconcileListOptions<T>"} */
|
|
18
|
+
export interface ReconcileListOptions<T> {
|
|
19
|
+
/** Container the rows live in. Rows are appended/reordered as direct children. */
|
|
20
|
+
parent: HTMLElement;
|
|
21
|
+
/** Static array or `() => T[]` accessor (editor wraps reactive props as accessors). */
|
|
22
|
+
list: Reactive<T[]>;
|
|
23
|
+
/** Stable key per item. Falls back to index when omitted. */
|
|
24
|
+
keyOf?: (item: T, index: number) => string;
|
|
25
|
+
/** Build a row's DOM + patcher + disposer for a never-before-seen key. */
|
|
26
|
+
renderRow: (item: T, index: number) => ListRow<T>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Reconcile `parent`'s children against `list`, reusing rows by key.
|
|
30
|
+
*
|
|
31
|
+
* When `list` is an accessor, the reconcile runs inside an `effect` so editor
|
|
32
|
+
* signal writes live-patch. Returns a disposer that stops the effect and
|
|
33
|
+
* destroys all live rows.
|
|
34
|
+
*/
|
|
35
|
+
/** @codexApi {"parent":"pithy.ui-kit.reconcile-list","name":"reconcileList","stability":"stable","signature":"<T>(options: ReconcileListOptions<T>) => () => void"} */
|
|
36
|
+
export declare function reconcileList<T>({ parent, list, keyOf, renderRow, }: ReconcileListOptions<T>): () => void;
|
|
37
|
+
//# sourceMappingURL=reconcile-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile-list.d.ts","sourceRoot":"","sources":["../../src/shared/reconcile-list.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAWF,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,aAAa,CAAC;AAE1D,0EAA0E;AAC1E,kIAAkI;AAClI,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,EAAE,EAAE,WAAW,CAAC;IAChB,uEAAuE;IACvE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,4JAA4J;AAC5J,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,kFAAkF;IAClF,MAAM,EAAE,WAAW,CAAC;IACpB,uFAAuF;IACvF,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,0EAA0E;IAC1E,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACnD;AAED;;;;;;GAMG;AACH,uKAAuK;AACvK,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAC/B,MAAM,EACN,IAAI,EACJ,KAAK,EACL,SAAS,GACV,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAyEtC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.reconcile-list",
|
|
4
|
+
"title": "Imperative Keyed List Reconciler",
|
|
5
|
+
"category": "runtime"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Keyed, imperative list reconciler for section components.
|
|
10
|
+
*
|
|
11
|
+
* The framework's <For> / createLoopManager render from a compiled AST, which
|
|
12
|
+
* imperatively-built section rows (document.createElement) can't drive — hence
|
|
13
|
+
* this parallel primitive.
|
|
14
|
+
*/
|
|
15
|
+
import { effect } from '@pithyjs/signals';
|
|
16
|
+
import { readReactive } from './clickable';
|
|
17
|
+
/**
|
|
18
|
+
* Reconcile `parent`'s children against `list`, reusing rows by key.
|
|
19
|
+
*
|
|
20
|
+
* When `list` is an accessor, the reconcile runs inside an `effect` so editor
|
|
21
|
+
* signal writes live-patch. Returns a disposer that stops the effect and
|
|
22
|
+
* destroys all live rows.
|
|
23
|
+
*/
|
|
24
|
+
/** @codexApi {"parent":"pithy.ui-kit.reconcile-list","name":"reconcileList","stability":"stable","signature":"<T>(options: ReconcileListOptions<T>) => () => void"} */
|
|
25
|
+
export function reconcileList({ parent, list, keyOf, renderRow, }) {
|
|
26
|
+
const keyFn = keyOf ?? ((_item, index) => String(index));
|
|
27
|
+
const rows = new Map();
|
|
28
|
+
const globalScope = globalThis;
|
|
29
|
+
function run() {
|
|
30
|
+
const wasRendering = globalScope.__pithyRenderingComponent;
|
|
31
|
+
globalScope.__pithyRenderingComponent = true;
|
|
32
|
+
try {
|
|
33
|
+
reconcile();
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
globalScope.__pithyRenderingComponent = wasRendering;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function reconcile() {
|
|
40
|
+
const raw = readReactive(list);
|
|
41
|
+
const collection = Array.isArray(raw) ? raw : [];
|
|
42
|
+
const newKeys = [];
|
|
43
|
+
const newKeySet = new Set();
|
|
44
|
+
for (let i = 0; i < collection.length; i++) {
|
|
45
|
+
const k = keyFn(collection[i], i);
|
|
46
|
+
newKeys.push(k);
|
|
47
|
+
if (import.meta.env?.DEV && newKeySet.has(k)) {
|
|
48
|
+
console.warn(`[reconcileList] duplicate key detected: ${k}`);
|
|
49
|
+
}
|
|
50
|
+
newKeySet.add(k);
|
|
51
|
+
}
|
|
52
|
+
for (const [key, row] of rows) {
|
|
53
|
+
if (!newKeySet.has(key)) {
|
|
54
|
+
row.destroy();
|
|
55
|
+
row.el.remove();
|
|
56
|
+
rows.delete(key);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Build / patch rows in target order, then place each before a moving cursor
|
|
60
|
+
// walking backwards so a row only moves when it is genuinely out of order.
|
|
61
|
+
let cursor = null;
|
|
62
|
+
for (let i = collection.length - 1; i >= 0; i--) {
|
|
63
|
+
const key = newKeys[i];
|
|
64
|
+
const item = collection[i];
|
|
65
|
+
let row = rows.get(key);
|
|
66
|
+
if (row) {
|
|
67
|
+
row.update(item, i);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
row = renderRow(item, i);
|
|
71
|
+
rows.set(key, row);
|
|
72
|
+
}
|
|
73
|
+
if (row.el.nextSibling !== cursor || row.el.parentNode !== parent) {
|
|
74
|
+
parent.insertBefore(row.el, cursor);
|
|
75
|
+
}
|
|
76
|
+
cursor = row.el;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (typeof list === 'function') {
|
|
80
|
+
const stop = effect(run);
|
|
81
|
+
return () => {
|
|
82
|
+
stop();
|
|
83
|
+
for (const row of rows.values())
|
|
84
|
+
row.destroy();
|
|
85
|
+
rows.clear();
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
run();
|
|
89
|
+
return () => {
|
|
90
|
+
for (const row of rows.values())
|
|
91
|
+
row.destroy();
|
|
92
|
+
rows.clear();
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=reconcile-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile-list.js","sourceRoot":"","sources":["../../src/shared/reconcile-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.shared-section", "title": "Shared Section Template Types", "category": "types" } */
|
|
2
|
+
/**
|
|
3
|
+
* Shared types and validation for section template components.
|
|
4
|
+
*/
|
|
5
|
+
import type { SpacingSize } from '@pithyjs/design-system';
|
|
6
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"generateSectionHeadingId","stability":"internal","signature":"(sectionName: string, explicitId?: string) => string"} */
|
|
7
|
+
export declare function generateSectionHeadingId(sectionName: string, explicitId?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Resets the internal section heading ID counter to 0.
|
|
10
|
+
* Call this between SSR requests to ensure deterministic IDs,
|
|
11
|
+
* or in test `beforeEach` to avoid cross-test ordering dependencies.
|
|
12
|
+
*/
|
|
13
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"resetSectionIdCounter","stability":"stable","signature":"() => void"} */
|
|
14
|
+
export declare function resetSectionIdCounter(): void;
|
|
15
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"clampHeadingLevel","stability":"internal","signature":"(level: number) => number"} */
|
|
16
|
+
export declare function clampHeadingLevel(level: number): number;
|
|
17
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"validateSpacing","stability":"internal","signature":"(componentName: string, rawSpacing: SpacingSize, fallback?: SpacingSize) => SpacingSize"} */
|
|
18
|
+
export declare function validateSpacing(componentName: string, rawSpacing: SpacingSize, fallback?: SpacingSize): SpacingSize;
|
|
19
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"validateEnum","stability":"internal","signature":"<T extends string>(component: string, prop: string, value: unknown, allowed: readonly T[], fallback: T) => T"} */
|
|
20
|
+
export declare function validateEnum<T extends string>(component: string, prop: string, value: unknown, allowed: readonly T[], fallback: T): T;
|
|
21
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"applyContainment","stability":"internal","signature":"(el: HTMLElement) => void"} */
|
|
22
|
+
export declare function applyContainment(el: HTMLElement): void;
|
|
23
|
+
//# sourceMappingURL=section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../src/shared/section.ts"],"names":[],"mappings":"AAAA,oHAAoH;AAEpH;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO1D,qLAAqL;AACrL,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAGR;AAED;;;;GAIG;AACH,sIAAsI;AACtI,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAID,mJAAmJ;AACnJ,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAID,+MAA+M;AAC/M,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,WAAW,EACvB,QAAQ,GAAE,WAAkB,GAC3B,WAAW,CAYb;AAED,iOAAiO;AACjO,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,QAAQ,EAAE,CAAC,GACV,CAAC,CAsBH;AAID,kJAAkJ;AAClJ,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAEtD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.shared-section", "title": "Shared Section Template Types", "category": "types" } */
|
|
2
|
+
import { PY_CLASS } from './common';
|
|
3
|
+
// -- Deterministic section heading IDs ----------------------------------------
|
|
4
|
+
let sectionIdCounter = 0;
|
|
5
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"generateSectionHeadingId","stability":"internal","signature":"(sectionName: string, explicitId?: string) => string"} */
|
|
6
|
+
export function generateSectionHeadingId(sectionName, explicitId) {
|
|
7
|
+
if (explicitId)
|
|
8
|
+
return `${explicitId}-heading`;
|
|
9
|
+
return `ui-${sectionName}-heading-${++sectionIdCounter}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resets the internal section heading ID counter to 0.
|
|
13
|
+
* Call this between SSR requests to ensure deterministic IDs,
|
|
14
|
+
* or in test `beforeEach` to avoid cross-test ordering dependencies.
|
|
15
|
+
*/
|
|
16
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"resetSectionIdCounter","stability":"stable","signature":"() => void"} */
|
|
17
|
+
export function resetSectionIdCounter() {
|
|
18
|
+
sectionIdCounter = 0;
|
|
19
|
+
}
|
|
20
|
+
// -- Heading level clamping ---------------------------------------------------
|
|
21
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"clampHeadingLevel","stability":"internal","signature":"(level: number) => number"} */
|
|
22
|
+
export function clampHeadingLevel(level) {
|
|
23
|
+
if (!Number.isFinite(level))
|
|
24
|
+
return 2;
|
|
25
|
+
return Math.max(1, Math.min(6, Math.round(level)));
|
|
26
|
+
}
|
|
27
|
+
// -- Shared section validation ------------------------------------------------
|
|
28
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"validateSpacing","stability":"internal","signature":"(componentName: string, rawSpacing: SpacingSize, fallback?: SpacingSize) => SpacingSize"} */
|
|
29
|
+
export function validateSpacing(componentName, rawSpacing, fallback = 'lg') {
|
|
30
|
+
const hasOwn = Object.prototype.hasOwnProperty;
|
|
31
|
+
const valid = hasOwn.call(PY_CLASS, rawSpacing);
|
|
32
|
+
if (import.meta.env?.DEV && !valid) {
|
|
33
|
+
const validValues = Object.keys(PY_CLASS).join(', ');
|
|
34
|
+
console.warn(`[<${componentName}>] Invalid spacing value: "${rawSpacing}". Expected one of: ${validValues}. Falling back to "${fallback}".`);
|
|
35
|
+
}
|
|
36
|
+
return valid ? rawSpacing : fallback;
|
|
37
|
+
}
|
|
38
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"validateEnum","stability":"internal","signature":"<T extends string>(component: string, prop: string, value: unknown, allowed: readonly T[], fallback: T) => T"} */
|
|
39
|
+
export function validateEnum(component, prop, value, allowed, fallback) {
|
|
40
|
+
if (typeof value === 'string' &&
|
|
41
|
+
allowed.includes(value)) {
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
if (import.meta.env?.DEV) {
|
|
45
|
+
let formatted;
|
|
46
|
+
try {
|
|
47
|
+
formatted = JSON.stringify(value);
|
|
48
|
+
if (formatted === undefined)
|
|
49
|
+
formatted = String(value);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
formatted = String(value);
|
|
53
|
+
}
|
|
54
|
+
console.warn(`[<${component}>] Invalid ${prop}: ${formatted}. Expected one of: ${allowed
|
|
55
|
+
.map(v => `"${v}"`)
|
|
56
|
+
.join(', ')}. Falling back to "${fallback}".`);
|
|
57
|
+
}
|
|
58
|
+
return fallback;
|
|
59
|
+
}
|
|
60
|
+
// -- Containment styles (reused by all sections with contained layout) --------
|
|
61
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-section","name":"applyContainment","stability":"internal","signature":"(el: HTMLElement) => void"} */
|
|
62
|
+
export function applyContainment(el) {
|
|
63
|
+
el.classList.add('ui-section-container');
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section.js","sourceRoot":"","sources":["../../src/shared/section.ts"],"names":[],"mappings":"AAAA,oHAAoH;AAOpH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,gFAAgF;AAEhF,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,qLAAqL;AACrL,MAAM,UAAU,wBAAwB,CACtC,WAAmB,EACnB,UAAmB;IAEnB,IAAI,UAAU;QAAE,OAAO,GAAG,UAAU,UAAU,CAAC;IAC/C,OAAO,MAAM,WAAW,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,sIAAsI;AACtI,MAAM,UAAU,qBAAqB;IACnC,gBAAgB,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,gFAAgF;AAEhF,mJAAmJ;AACnJ,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,gFAAgF;AAEhF,+MAA+M;AAC/M,MAAM,UAAU,eAAe,CAC7B,aAAqB,EACrB,UAAuB,EACvB,WAAwB,IAAI;IAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEhD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CACV,KAAK,aAAa,8BAA8B,UAAU,uBAAuB,WAAW,sBAAsB,QAAQ,IAAI,CAC/H,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvC,CAAC;AAED,iOAAiO;AACjO,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,IAAY,EACZ,KAAc,EACd,OAAqB,EACrB,QAAW;IAEX,IACE,OAAO,KAAK,KAAK,QAAQ;QACxB,OAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC9C,CAAC;QACD,OAAO,KAAU,CAAC;IACpB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACzB,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,SAAS,KAAK,SAAS;gBAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,IAAI,CACV,KAAK,SAAS,cAAc,IAAI,KAAK,SAAS,sBAAsB,OAAO;aACxE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,sBAAsB,QAAQ,IAAI,CAChD,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAEhF,kJAAkJ;AAClJ,MAAM,UAAU,gBAAgB,CAAC,EAAe;IAC9C,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.segmented",
|
|
4
|
+
"title": "Segmented Keyboard Helpers",
|
|
5
|
+
"category": "types"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Shared keyboard plumbing for single-select segmented controls
|
|
10
|
+
* (SegmentedControl, IconGroup). Implements WAI-ARIA radiogroup
|
|
11
|
+
* navigation: focus moves activate, arrow keys wrap, Home/End jump.
|
|
12
|
+
*/
|
|
13
|
+
/** @codexApi {"parent":"pithy.ui-kit.segmented","name":"bindSegmentedKeyboard","stability":"stable","signature":"(buttons: HTMLButtonElement[], onActivate: (index: number) => void) => () => void"} */
|
|
14
|
+
export declare function bindSegmentedKeyboard(buttons: HTMLButtonElement[], onActivate: (index: number) => void): () => void;
|
|
15
|
+
/** @codexApi {"parent":"pithy.ui-kit.segmented","name":"applyRovingTabindex","stability":"stable","signature":"(buttons: HTMLButtonElement[], activeIndex: number) => void"} */
|
|
16
|
+
export declare function applyRovingTabindex(buttons: HTMLButtonElement[], activeIndex: number): void;
|
|
17
|
+
//# sourceMappingURL=segmented.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmented.d.ts","sourceRoot":"","sources":["../../src/shared/segmented.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;GAIG;AAEH,wMAAwM;AACxM,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAClC,MAAM,IAAI,CA8BZ;AAED,gLAAgL;AAChL,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,WAAW,EAAE,MAAM,GAClB,IAAI,CAMN"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.segmented",
|
|
4
|
+
"title": "Segmented Keyboard Helpers",
|
|
5
|
+
"category": "types"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Shared keyboard plumbing for single-select segmented controls
|
|
10
|
+
* (SegmentedControl, IconGroup). Implements WAI-ARIA radiogroup
|
|
11
|
+
* navigation: focus moves activate, arrow keys wrap, Home/End jump.
|
|
12
|
+
*/
|
|
13
|
+
/** @codexApi {"parent":"pithy.ui-kit.segmented","name":"bindSegmentedKeyboard","stability":"stable","signature":"(buttons: HTMLButtonElement[], onActivate: (index: number) => void) => () => void"} */
|
|
14
|
+
export function bindSegmentedKeyboard(buttons, onActivate) {
|
|
15
|
+
const handlers = [];
|
|
16
|
+
buttons.forEach((btn, i) => {
|
|
17
|
+
const handler = (e) => {
|
|
18
|
+
let next;
|
|
19
|
+
if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {
|
|
20
|
+
next = (i - 1 + buttons.length) % buttons.length;
|
|
21
|
+
}
|
|
22
|
+
else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {
|
|
23
|
+
next = (i + 1) % buttons.length;
|
|
24
|
+
}
|
|
25
|
+
else if (e.key === 'Home') {
|
|
26
|
+
next = 0;
|
|
27
|
+
}
|
|
28
|
+
else if (e.key === 'End') {
|
|
29
|
+
next = buttons.length - 1;
|
|
30
|
+
}
|
|
31
|
+
if (next != null) {
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
onActivate(next);
|
|
34
|
+
buttons[next].focus();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
btn.addEventListener('keydown', handler);
|
|
38
|
+
handlers.push(handler);
|
|
39
|
+
});
|
|
40
|
+
return () => {
|
|
41
|
+
buttons.forEach((btn, i) => {
|
|
42
|
+
btn.removeEventListener('keydown', handlers[i]);
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** @codexApi {"parent":"pithy.ui-kit.segmented","name":"applyRovingTabindex","stability":"stable","signature":"(buttons: HTMLButtonElement[], activeIndex: number) => void"} */
|
|
47
|
+
export function applyRovingTabindex(buttons, activeIndex) {
|
|
48
|
+
const safeIndex = activeIndex >= 0 && activeIndex < buttons.length ? activeIndex : 0;
|
|
49
|
+
buttons.forEach((btn, i) => {
|
|
50
|
+
btn.tabIndex = i === safeIndex ? 0 : -1;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=segmented.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segmented.js","sourceRoot":"","sources":["../../src/shared/segmented.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;GAIG;AAEH,wMAAwM;AACxM,MAAM,UAAU,qBAAqB,CACnC,OAA4B,EAC5B,UAAmC;IAEnC,MAAM,QAAQ,GAAsC,EAAE,CAAC;IAEvD,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,IAAwB,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACjD,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YACnD,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;gBAC3D,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAClC,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;gBAC5B,IAAI,GAAG,CAAC,CAAC;YACX,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QACF,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACzB,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,gLAAgL;AAChL,MAAM,UAAU,mBAAmB,CACjC,OAA4B,EAC5B,WAAmB;IAEnB,MAAM,SAAS,GACb,WAAW,IAAI,CAAC,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACzB,GAAG,CAAC,QAAQ,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.shared-select", "title": "Shared Select Constants", "category": "types" } */
|
|
2
|
+
/**
|
|
3
|
+
* Shared constants for form Select component.
|
|
4
|
+
* Single source of truth for select option types and ID generation.
|
|
5
|
+
*/
|
|
6
|
+
export interface SelectOption {
|
|
7
|
+
/** Option value — used as the selected value. Must be non-empty; empty string is reserved as the "no selection" sentinel. */
|
|
8
|
+
value: string;
|
|
9
|
+
/** Display label — shown in the dropdown and trigger */
|
|
10
|
+
label: string;
|
|
11
|
+
/** Whether this option is disabled */
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-select","name":"generateSelectId","stability":"stable","signature":"() => string"} */
|
|
15
|
+
export declare function generateSelectId(): string;
|
|
16
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-select","name":"resetSelectIdCounter","stability":"stable","signature":"() => void"} */
|
|
17
|
+
export declare function resetSelectIdCounter(): void;
|
|
18
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/shared/select.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAE7G;;;GAGG;AAMH,MAAM,WAAW,YAAY;IAC3B,6HAA6H;IAC7H,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAQD,kIAAkI;AAClI,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,oIAAoI;AACpI,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.shared-select", "title": "Shared Select Constants", "category": "types" } */
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Auto-generated IDs — stable Select instance IDs for component wiring/a11y
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
let selectIdCounter = 0;
|
|
6
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-select","name":"generateSelectId","stability":"stable","signature":"() => string"} */
|
|
7
|
+
export function generateSelectId() {
|
|
8
|
+
return `ui-select-${++selectIdCounter}`;
|
|
9
|
+
}
|
|
10
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-select","name":"resetSelectIdCounter","stability":"stable","signature":"() => void"} */
|
|
11
|
+
export function resetSelectIdCounter() {
|
|
12
|
+
selectIdCounter = 0;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/shared/select.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAoB7G,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,kIAAkI;AAClI,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,EAAE,eAAe,EAAE,CAAC;AAC1C,CAAC;AAED,oIAAoI;AACpI,MAAM,UAAU,oBAAoB;IAClC,eAAe,GAAG,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.shared-slots", "title": "Named-Slot Utilities", "category": "runtime" } */
|
|
2
|
+
/**
|
|
3
|
+
* Extracts nodes flagged with `data-slot="<name>"` out of the projected
|
|
4
|
+
* children fragment, returning them as a single fragment (or null when no
|
|
5
|
+
* matching nodes exist). Matching nodes are moved, not cloned.
|
|
6
|
+
*/
|
|
7
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-slots","name":"extractSlot","stability":"internal","signature":"(source: DocumentFragment, name: string) => DocumentFragment | null"} */
|
|
8
|
+
export declare function extractSlot(source: DocumentFragment, name: string): DocumentFragment | null;
|
|
9
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-slots","name":"captureSlot","stability":"internal","signature":"<T extends HTMLElement>(el: T, name: string) => T"} */
|
|
10
|
+
export declare function captureSlot<T extends HTMLElement>(el: T, name: string): T;
|
|
11
|
+
//# sourceMappingURL=slots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/shared/slots.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAE3G;;;;GAIG;AACH,qLAAqL;AACrL,wBAAgB,WAAW,CACzB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,IAAI,CAkBzB;AAED,mKAAmK;AACnK,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAGzE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.shared-slots", "title": "Named-Slot Utilities", "category": "runtime" } */
|
|
2
|
+
/**
|
|
3
|
+
* Extracts nodes flagged with `data-slot="<name>"` out of the projected
|
|
4
|
+
* children fragment, returning them as a single fragment (or null when no
|
|
5
|
+
* matching nodes exist). Matching nodes are moved, not cloned.
|
|
6
|
+
*/
|
|
7
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-slots","name":"extractSlot","stability":"internal","signature":"(source: DocumentFragment, name: string) => DocumentFragment | null"} */
|
|
8
|
+
export function extractSlot(source, name) {
|
|
9
|
+
const out = document.createDocumentFragment();
|
|
10
|
+
let found = false;
|
|
11
|
+
for (const node of Array.from(source.childNodes)) {
|
|
12
|
+
if (node.nodeType !== Node.ELEMENT_NODE)
|
|
13
|
+
continue;
|
|
14
|
+
const el = node;
|
|
15
|
+
if (el.tagName === 'TEMPLATE' && el.dataset.slot === name) {
|
|
16
|
+
out.appendChild(el.content);
|
|
17
|
+
el.remove();
|
|
18
|
+
found = true;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (el.dataset.slot === name) {
|
|
22
|
+
out.appendChild(el);
|
|
23
|
+
found = true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return found ? out : null;
|
|
27
|
+
}
|
|
28
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-slots","name":"captureSlot","stability":"internal","signature":"<T extends HTMLElement>(el: T, name: string) => T"} */
|
|
29
|
+
export function captureSlot(el, name) {
|
|
30
|
+
el.setAttribute('data-slot', name);
|
|
31
|
+
return el;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=slots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/shared/slots.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAE3G;;;;GAIG;AACH,qLAAqL;AACrL,MAAM,UAAU,WAAW,CACzB,MAAwB,EACxB,IAAY;IAEZ,MAAM,GAAG,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;IAC9C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,IAAmB,CAAC;QAC/B,IAAI,EAAE,CAAC,OAAO,KAAK,UAAU,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC1D,GAAG,CAAC,WAAW,CAAE,EAA0B,CAAC,OAAO,CAAC,CAAC;YACrD,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC7B,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,CAAC;AAED,mKAAmK;AACnK,MAAM,UAAU,WAAW,CAAwB,EAAK,EAAE,IAAY;IACpE,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.shared.smart-container",
|
|
4
|
+
"title": "SmartContainer Constants & Types",
|
|
5
|
+
"category": "types"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* SmartContainer-specific constants and types.
|
|
10
|
+
*
|
|
11
|
+
* Separated from grid.ts because these are only used by SmartContainer,
|
|
12
|
+
* not by Grid/GridItem.
|
|
13
|
+
*/
|
|
14
|
+
export declare const RECIPE_ITEMS: readonly ["auto-grid", "stack-to-row", "row-wrap", "sidebar", "equal-cards"];
|
|
15
|
+
export type Recipe = (typeof RECIPE_ITEMS)[number];
|
|
16
|
+
export declare const DENSITY_ITEMS: readonly ["compact", "normal", "relaxed"];
|
|
17
|
+
export type Density = (typeof DENSITY_ITEMS)[number];
|
|
18
|
+
export declare const DENSITY_RATIO: Record<Density, number>;
|
|
19
|
+
//# sourceMappingURL=smart-container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-container.d.ts","sourceRoot":"","sources":["../../src/shared/smart-container.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;;GAKG;AAIH,eAAO,MAAM,YAAY,8EAMf,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAInD,eAAO,MAAM,aAAa,2CAA4C,CAAC;AACvE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAIjD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.shared.smart-container",
|
|
4
|
+
"title": "SmartContainer Constants & Types",
|
|
5
|
+
"category": "types"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* SmartContainer-specific constants and types.
|
|
10
|
+
*
|
|
11
|
+
* Separated from grid.ts because these are only used by SmartContainer,
|
|
12
|
+
* not by Grid/GridItem.
|
|
13
|
+
*/
|
|
14
|
+
// -- Recipe types ------------------------------------------------------------
|
|
15
|
+
export const RECIPE_ITEMS = [
|
|
16
|
+
'auto-grid',
|
|
17
|
+
'stack-to-row',
|
|
18
|
+
'row-wrap',
|
|
19
|
+
'sidebar',
|
|
20
|
+
'equal-cards',
|
|
21
|
+
];
|
|
22
|
+
// -- Density types -----------------------------------------------------------
|
|
23
|
+
export const DENSITY_ITEMS = ['compact', 'normal', 'relaxed'];
|
|
24
|
+
export const DENSITY_RATIO = {
|
|
25
|
+
compact: 0.9,
|
|
26
|
+
normal: 1,
|
|
27
|
+
relaxed: 1.25,
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=smart-container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-container.js","sourceRoot":"","sources":["../../src/shared/smart-container.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;;GAKG;AAEH,+EAA+E;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,WAAW;IACX,cAAc;IACd,UAAU;IACV,SAAS;IACT,aAAa;CACL,CAAC;AAGX,+EAA+E;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAGvE,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,IAAI;CACd,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.text-constants",
|
|
4
|
+
"title": "Content Shared Constants",
|
|
5
|
+
"category": "types"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Shared constants for content components (Text, Heading, etc.).
|
|
10
|
+
*
|
|
11
|
+
* Sizes, weights, and colors derive from @pithyjs/design-system (single source of truth).
|
|
12
|
+
* Alignment and tags are ui-kit concerns defined here.
|
|
13
|
+
*/
|
|
14
|
+
import { type FontSize } from '@pithyjs/design-system/typography';
|
|
15
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"SIZE_CLASS","stability":"stable","signature":"Record<FontSize, string>"} */
|
|
16
|
+
export declare const SIZE_CLASS: Record<FontSize, string>;
|
|
17
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TEXT_COLORS","stability":"stable","signature":"readonly [\"text\", \"text-muted\", \"text-inverse\", \"primary\", \"secondary\", \"tertiary\", \"success\", \"info\", \"warning\", \"danger\"]"} */
|
|
18
|
+
export declare const TEXT_COLORS: readonly ["text", "text-muted", "text-inverse", "primary", "secondary", "tertiary", "success", "info", "warning", "danger"];
|
|
19
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TextColor","stability":"stable","signature":"type TextColor = \"text\" | \"text-muted\" | \"text-inverse\" | \"primary\" | \"secondary\" | \"tertiary\" | \"success\" | \"info\" | \"warning\" | \"danger\""} */
|
|
20
|
+
export type TextColor = (typeof TEXT_COLORS)[number];
|
|
21
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TEXT_ALIGNS","stability":"stable","signature":"readonly [\"start\", \"center\", \"end\", \"justify\"]"} */
|
|
22
|
+
export declare const TEXT_ALIGNS: readonly ["start", "center", "end", "justify"];
|
|
23
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TextAlign","stability":"stable","signature":"type TextAlign = \"start\" | \"center\" | \"end\" | \"justify\""} */
|
|
24
|
+
export type TextAlign = (typeof TEXT_ALIGNS)[number];
|
|
25
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TEXT_TAGS","stability":"stable","signature":"readonly [\"p\", \"span\", \"div\", \"small\", \"strong\", \"em\", \"s\", \"abbr\", \"time\", \"blockquote\", \"figcaption\", \"cite\", \"q\", \"mark\", \"code\", \"pre\", \"kbd\", \"samp\"]"} */
|
|
26
|
+
export declare const TEXT_TAGS: readonly ["p", "span", "div", "small", "strong", "em", "s", "abbr", "time", "blockquote", "figcaption", "cite", "q", "mark", "code", "pre", "kbd", "samp"];
|
|
27
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TextTag","stability":"stable","signature":"type TextTag = \"p\" | \"span\" | \"div\" | \"small\" | \"strong\" | \"em\" | \"s\" | \"abbr\" | \"time\" | \"blockquote\" | \"figcaption\" | \"cite\" | \"q\" | \"mark\" | \"code\" | \"pre\" | \"kbd\" | \"samp\""} */
|
|
28
|
+
export type TextTag = (typeof TEXT_TAGS)[number];
|
|
29
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/shared/text.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;;GAKG;AAEH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAQ9E,yIAAyI;AACzI,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAS/C,CAAC;AAgBF,iQAAiQ;AACjQ,eAAO,MAAM,WAAW,6HAId,CAAC;AACX,8QAA8Q;AAC9Q,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAIrD,wKAAwK;AACxK,eAAO,MAAM,WAAW,gDAAiD,CAAC;AAC1E,+KAA+K;AAC/K,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAIrD,8SAA8S;AAC9S,eAAO,MAAM,SAAS,4JAmBZ,CAAC;AACX,iUAAiU;AACjU,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** @codex
|
|
2
|
+
{
|
|
3
|
+
"id": "pithy.ui-kit.text-constants",
|
|
4
|
+
"title": "Content Shared Constants",
|
|
5
|
+
"category": "types"
|
|
6
|
+
}
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Shared constants for content components (Text, Heading, etc.).
|
|
10
|
+
*
|
|
11
|
+
* Sizes, weights, and colors derive from @pithyjs/design-system (single source of truth).
|
|
12
|
+
* Alignment and tags are ui-kit concerns defined here.
|
|
13
|
+
*/
|
|
14
|
+
import { FONT_SIZES } from '@pithyjs/design-system/typography';
|
|
15
|
+
import { COLOR_TOKENS } from '@pithyjs/design-system/colors';
|
|
16
|
+
// -- Size → class mapping (u-text-* typography utilities) ---------------------
|
|
17
|
+
// Literal entries (not Object.fromEntries) so the design-system Vite plugin's
|
|
18
|
+
// static scanner can detect each `u-text-*` class. The DEV-time guard below
|
|
19
|
+
// warns at module load if @pithyjs/design-system adds or removes a font size.
|
|
20
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"SIZE_CLASS","stability":"stable","signature":"Record<FontSize, string>"} */
|
|
21
|
+
export const SIZE_CLASS = {
|
|
22
|
+
xs: 'u-text-xs',
|
|
23
|
+
sm: 'u-text-sm',
|
|
24
|
+
base: 'u-text-base',
|
|
25
|
+
lg: 'u-text-lg',
|
|
26
|
+
xl: 'u-text-xl',
|
|
27
|
+
'2xl': 'u-text-2xl',
|
|
28
|
+
'3xl': 'u-text-3xl',
|
|
29
|
+
'4xl': 'u-text-4xl',
|
|
30
|
+
};
|
|
31
|
+
if (import.meta.env?.DEV) {
|
|
32
|
+
const declared = Object.keys(SIZE_CLASS).sort().join(',');
|
|
33
|
+
const expected = [...FONT_SIZES].sort().join(',');
|
|
34
|
+
if (declared !== expected) {
|
|
35
|
+
console.warn(`[ui-kit/text] SIZE_CLASS is out of sync with @pithyjs/design-system FONT_SIZES.\n` +
|
|
36
|
+
` SIZE_CLASS: ${declared}\n FONT_SIZES: ${expected}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// -- Colors (semantic color tokens for text) ----------------------------------
|
|
40
|
+
// Derived from design system COLOR_TOKENS — single source of truth.
|
|
41
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TEXT_COLORS","stability":"stable","signature":"readonly [\"text\", \"text-muted\", \"text-inverse\", \"primary\", \"secondary\", \"tertiary\", \"success\", \"info\", \"warning\", \"danger\"]"} */
|
|
42
|
+
export const TEXT_COLORS = [
|
|
43
|
+
...COLOR_TOKENS.text,
|
|
44
|
+
...COLOR_TOKENS.brand,
|
|
45
|
+
...COLOR_TOKENS.status,
|
|
46
|
+
];
|
|
47
|
+
// -- Alignment (logical values for RTL support) -------------------------------
|
|
48
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TEXT_ALIGNS","stability":"stable","signature":"readonly [\"start\", \"center\", \"end\", \"justify\"]"} */
|
|
49
|
+
export const TEXT_ALIGNS = ['start', 'center', 'end', 'justify'];
|
|
50
|
+
// -- HTML tags ----------------------------------------------------------------
|
|
51
|
+
/** @codexApi {"parent":"pithy.ui-kit.text-constants","name":"TEXT_TAGS","stability":"stable","signature":"readonly [\"p\", \"span\", \"div\", \"small\", \"strong\", \"em\", \"s\", \"abbr\", \"time\", \"blockquote\", \"figcaption\", \"cite\", \"q\", \"mark\", \"code\", \"pre\", \"kbd\", \"samp\"]"} */
|
|
52
|
+
export const TEXT_TAGS = [
|
|
53
|
+
'p',
|
|
54
|
+
'span',
|
|
55
|
+
'div',
|
|
56
|
+
'small',
|
|
57
|
+
'strong',
|
|
58
|
+
'em',
|
|
59
|
+
's',
|
|
60
|
+
'abbr',
|
|
61
|
+
'time',
|
|
62
|
+
'blockquote',
|
|
63
|
+
'figcaption',
|
|
64
|
+
'cite',
|
|
65
|
+
'q',
|
|
66
|
+
'mark',
|
|
67
|
+
'code',
|
|
68
|
+
'pre',
|
|
69
|
+
'kbd',
|
|
70
|
+
'samp',
|
|
71
|
+
];
|
|
72
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/shared/text.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,gFAAgF;AAChF,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,yIAAyI;AACzI,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,aAAa;IACnB,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;CACpB,CAAC;AAEF,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CACV,mFAAmF;YACjF,iBAAiB,QAAQ,mBAAmB,QAAQ,EAAE,CACzD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,oEAAoE;AAEpE,iQAAiQ;AACjQ,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,YAAY,CAAC,IAAI;IACpB,GAAG,YAAY,CAAC,KAAK;IACrB,GAAG,YAAY,CAAC,MAAM;CACd,CAAC;AAIX,gFAAgF;AAEhF,wKAAwK;AACxK,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAU,CAAC;AAI1E,gFAAgF;AAEhF,8SAA8S;AAC9S,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG;IACH,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,GAAG;IACH,MAAM;IACN,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,MAAM;IACN,GAAG;IACH,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;CACE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** @codex { "id": "pithy.ui-kit.shared-textarea", "title": "Shared Textarea Constants", "category": "types" } */
|
|
2
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-textarea","name":"generateTextareaId","stability":"stable","signature":"() => string"} */
|
|
3
|
+
export declare function generateTextareaId(): string;
|
|
4
|
+
/** @codexApi {"parent":"pithy.ui-kit.shared-textarea","name":"resetTextareaIdCounter","stability":"stable","signature":"() => void"} */
|
|
5
|
+
export declare function resetTextareaIdCounter(): void;
|
|
6
|
+
//# sourceMappingURL=textarea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../src/shared/textarea.ts"],"names":[],"mappings":"AAAA,iHAAiH;AAajH,sIAAsI;AACtI,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wIAAwI;AACxI,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|