thread-ui 0.16.4 → 0.17.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/README.md +2 -2
- package/dist/components/content-display/carousel/carousel-context.d.ts +15 -15
- package/dist/components/content-display/carousel/carousel.types.d.ts +1 -1
- package/dist/components/content-display/carousel/components/carousel-header.js +1 -1
- package/dist/components/content-display/carousel/components/carousel-header.js.map +1 -1
- package/dist/components/content-display/gallery/components/gallery-content.js +1 -1
- package/dist/components/content-display/gallery/components/gallery-content.js.map +1 -1
- package/dist/components/content-display/gallery/gallery-context.d.ts +15 -15
- package/dist/components/content-display/gallery/gallery.types.d.ts +1 -1
- package/dist/components/content-display/lightbox/components/lightbox-title.js +2 -2
- package/dist/components/content-display/lightbox/components/lightbox-title.js.map +1 -1
- package/dist/components/content-display/lightbox/lightbox-context.d.ts +6 -6
- package/dist/components/content-display/lightbox/lightbox.js +1 -1
- package/dist/components/content-display/lightbox/lightbox.js.map +1 -1
- package/dist/components/content-display/tab-view/components/tab-item-content.js +1 -1
- package/dist/components/content-display/tab-view/components/tab-item-content.js.map +1 -1
- package/dist/components/data-display/filter-controls/variants/filter-controls.js +13 -2
- package/dist/components/data-display/filter-controls/variants/filter-controls.js.map +1 -1
- package/dist/components/data-display/filter-controls/variants/inline-filter-controls.js +1 -1
- package/dist/components/data-display/filter-controls/variants/inline-filter-controls.js.map +1 -1
- package/dist/components/data-display/sort-controls/sort-controls.js +1 -1
- package/dist/components/data-display/sort-controls/sort-controls.js.map +1 -1
- package/dist/components/data-input/dropdowns/dropdown/dropdown.d.ts +19 -0
- package/dist/components/data-input/dropdowns/dropdown/dropdown.js +22 -0
- package/dist/components/data-input/dropdowns/dropdown/dropdown.js.map +1 -0
- package/dist/components/data-input/dropdowns/dropdown/dropdown.types.d.ts +4 -0
- package/dist/components/data-input/dropdowns/dropdown/dropdown.types.js.map +1 -0
- package/dist/components/data-input/dropdowns/dropdown/index.js.map +1 -0
- package/dist/components/data-input/dropdowns/dropdown-base/dropdown-base.d.ts +42 -0
- package/dist/components/data-input/dropdowns/dropdown-base/dropdown-base.js +233 -0
- package/dist/components/data-input/dropdowns/dropdown-base/dropdown-base.js.map +1 -0
- package/dist/components/data-input/dropdowns/dropdown-base/dropdown-base.types.d.ts +36 -0
- package/dist/components/data-input/dropdowns/dropdown-base/dropdown-base.types.js.map +1 -0
- package/dist/components/data-input/dropdowns/dropdown-base/index.js.map +1 -0
- package/dist/components/data-input/dropdowns/index.js.map +1 -0
- package/dist/components/data-input/dropdowns/multi-dropdown/index.js.map +1 -0
- package/dist/components/data-input/dropdowns/multi-dropdown/multi-dropdown.d.ts +19 -0
- package/dist/components/data-input/dropdowns/multi-dropdown/multi-dropdown.js +21 -0
- package/dist/components/data-input/dropdowns/multi-dropdown/multi-dropdown.js.map +1 -0
- package/dist/components/data-input/dropdowns/multi-dropdown/multi-dropdown.types.d.ts +4 -0
- package/dist/components/data-input/dropdowns/multi-dropdown/multi-dropdown.types.js.map +1 -0
- package/dist/components/data-input/file-upload/components/dropzone.d.ts +8 -0
- package/dist/components/data-input/file-upload/components/dropzone.js +117 -0
- package/dist/components/data-input/file-upload/components/dropzone.js.map +1 -0
- package/dist/components/data-input/file-upload/components/file-item.d.ts +14 -0
- package/dist/components/data-input/file-upload/components/file-item.js +69 -0
- package/dist/components/data-input/file-upload/components/file-item.js.map +1 -0
- package/dist/components/data-input/file-upload/components/file-upload-content.d.ts +10 -0
- package/dist/components/data-input/file-upload/components/file-upload-content.js +55 -0
- package/dist/components/data-input/file-upload/components/file-upload-content.js.map +1 -0
- package/dist/components/data-input/file-upload/components/item-previews.d.ts +28 -0
- package/dist/components/data-input/file-upload/components/item-previews.js +95 -0
- package/dist/components/data-input/file-upload/components/item-previews.js.map +1 -0
- package/dist/components/data-input/file-upload/file-upload-context.js.map +1 -0
- package/dist/components/data-input/file-upload/file-upload.d.ts +23 -0
- package/dist/components/data-input/file-upload/file-upload.js +58 -0
- package/dist/components/data-input/file-upload/file-upload.js.map +1 -0
- package/dist/components/data-input/file-upload/file-upload.types.d.ts +54 -0
- package/dist/components/data-input/file-upload/file-upload.types.js.map +1 -0
- package/dist/components/data-input/file-upload/file-upload.utils.d.ts +21 -0
- package/dist/components/data-input/file-upload/file-upload.utils.js +86 -0
- package/dist/components/data-input/file-upload/file-upload.utils.js.map +1 -0
- package/dist/components/data-input/file-upload/index.d.ts +3 -0
- package/dist/components/data-input/file-upload/index.js.map +1 -0
- package/dist/components/data-input/file-upload/use-file-upload.d.ts +58 -0
- package/dist/components/data-input/file-upload/use-file-upload.js +154 -0
- package/dist/components/data-input/file-upload/use-file-upload.js.map +1 -0
- package/dist/components/data-input/file-upload/use-object-url.d.ts +9 -0
- package/dist/components/data-input/file-upload/use-object-url.js +24 -0
- package/dist/components/data-input/file-upload/use-object-url.js.map +1 -0
- package/dist/components/{form-elements → data-input}/index.d.ts +2 -1
- package/dist/components/{form-elements → data-input}/index.js +2 -1
- package/dist/components/data-input/index.js.map +1 -0
- package/dist/components/data-input/number-input/index.js.map +1 -0
- package/dist/components/{form-elements → data-input}/number-input/number-input.d.ts +5 -1
- package/dist/components/{form-elements → data-input}/number-input/number-input.js +48 -49
- package/dist/components/data-input/number-input/number-input.js.map +1 -0
- package/dist/components/{form-elements → data-input}/number-input/number-input.types.d.ts +1 -1
- package/dist/components/data-input/number-input/number-input.types.js.map +1 -0
- package/dist/components/data-input/reorderable/index.d.ts +4 -0
- package/dist/components/data-input/reorderable/index.js +4 -0
- package/dist/components/data-input/reorderable/index.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-groups/group-title.d.ts +8 -0
- package/dist/components/data-input/reorderable/reorderable-groups/group-title.js +20 -0
- package/dist/components/data-input/reorderable/reorderable-groups/group-title.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-groups/group-utils.d.ts +13 -0
- package/dist/components/data-input/reorderable/reorderable-groups/group-utils.js +26 -0
- package/dist/components/data-input/reorderable/reorderable-groups/group-utils.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-groups/index.d.ts +2 -0
- package/dist/components/data-input/reorderable/reorderable-groups/index.js +2 -0
- package/dist/components/data-input/reorderable/reorderable-groups/index.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-groups/reorderable-groups.d.ts +18 -0
- package/dist/components/data-input/reorderable/reorderable-groups/reorderable-groups.js +135 -0
- package/dist/components/data-input/reorderable/reorderable-groups/reorderable-groups.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-groups/reorderable-groups.types.d.ts +66 -0
- package/dist/components/data-input/reorderable/reorderable-groups/reorderable-groups.types.js +2 -0
- package/dist/components/data-input/reorderable/reorderable-groups/reorderable-groups.types.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-groups/sortable-group.d.ts +30 -0
- package/dist/components/data-input/reorderable/reorderable-groups/sortable-group.js +65 -0
- package/dist/components/data-input/reorderable/reorderable-groups/sortable-group.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-groups/use-group-drag.d.ts +30 -0
- package/dist/components/data-input/reorderable/reorderable-groups/use-group-drag.js +186 -0
- package/dist/components/data-input/reorderable/reorderable-groups/use-group-drag.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-list/index.d.ts +2 -0
- package/dist/components/data-input/reorderable/reorderable-list/index.js +2 -0
- package/dist/components/data-input/reorderable/reorderable-list/index.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-list/reorderable-list.d.ts +19 -0
- package/dist/components/data-input/reorderable/reorderable-list/reorderable-list.js +95 -0
- package/dist/components/data-input/reorderable/reorderable-list/reorderable-list.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-list/reorderable-list.types.d.ts +28 -0
- package/dist/components/data-input/reorderable/reorderable-list/reorderable-list.types.js +2 -0
- package/dist/components/data-input/reorderable/reorderable-list/reorderable-list.types.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/index.d.ts +2 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/index.js +2 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/index.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.d.ts +8 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.js +66 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.js.map +1 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.types.d.ts +31 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.types.js +2 -0
- package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.types.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/components/drag-handle.d.ts +24 -0
- package/dist/components/data-input/reorderable/shared/components/drag-handle.js +50 -0
- package/dist/components/data-input/reorderable/shared/components/drag-handle.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/components/sortable-item.d.ts +9 -0
- package/dist/components/data-input/reorderable/shared/components/sortable-item.js +42 -0
- package/dist/components/data-input/reorderable/shared/components/sortable-item.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/functions/announcements.d.ts +4 -0
- package/dist/components/data-input/reorderable/shared/functions/announcements.js +20 -0
- package/dist/components/data-input/reorderable/shared/functions/announcements.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/functions/apply-order.d.ts +2 -0
- package/dist/components/data-input/reorderable/shared/functions/apply-order.js +8 -0
- package/dist/components/data-input/reorderable/shared/functions/apply-order.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/functions/form-value.d.ts +30 -0
- package/dist/components/data-input/reorderable/shared/functions/form-value.js +49 -0
- package/dist/components/data-input/reorderable/shared/functions/form-value.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/functions/layout.d.ts +18 -0
- package/dist/components/data-input/reorderable/shared/functions/layout.js +27 -0
- package/dist/components/data-input/reorderable/shared/functions/layout.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/index.d.ts +9 -0
- package/dist/components/data-input/reorderable/shared/index.js +7 -0
- package/dist/components/data-input/reorderable/shared/index.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/types/reorderable.types.d.ts +45 -0
- package/dist/components/data-input/reorderable/shared/types/reorderable.types.js +2 -0
- package/dist/components/data-input/reorderable/shared/types/reorderable.types.js.map +1 -0
- package/dist/components/data-input/reorderable/shared/types/sortable-item.types.d.ts +14 -0
- package/dist/components/data-input/reorderable/shared/types/sortable-item.types.js +2 -0
- package/dist/components/data-input/reorderable/shared/types/sortable-item.types.js.map +1 -0
- package/dist/components/data-input/shared/form-label/form-label.d.ts +15 -0
- package/dist/components/data-input/shared/form-label/form-label.js +53 -0
- package/dist/components/data-input/shared/form-label/form-label.js.map +1 -0
- package/dist/components/data-input/shared/form-label/form-label.types.d.ts +10 -0
- package/dist/components/data-input/shared/form-label/form-label.types.js.map +1 -0
- package/dist/components/data-input/shared/form-label/index.js.map +1 -0
- package/dist/components/data-input/shared/input-props.types.d.ts +43 -0
- package/dist/components/data-input/shared/input-props.types.js.map +1 -0
- package/dist/components/data-input/shared/input-wrapper.d.ts +31 -0
- package/dist/components/data-input/shared/input-wrapper.js +50 -0
- package/dist/components/data-input/shared/input-wrapper.js.map +1 -0
- package/dist/components/{form-elements/styles/index.d.ts → data-input/shared/styles.d.ts} +26 -3
- package/dist/components/data-input/shared/styles.js +107 -0
- package/dist/components/data-input/shared/styles.js.map +1 -0
- package/dist/components/data-input/shared/use-field-error.d.ts +58 -0
- package/dist/components/data-input/shared/use-field-error.js +82 -0
- package/dist/components/data-input/shared/use-field-error.js.map +1 -0
- package/dist/components/data-input/shared/use-input-id.d.ts +8 -0
- package/dist/components/data-input/shared/use-input-id.js +14 -0
- package/dist/components/data-input/shared/use-input-id.js.map +1 -0
- package/dist/components/data-input/text-input/index.js.map +1 -0
- package/dist/components/data-input/text-input/text-input.d.ts +16 -0
- package/dist/components/data-input/text-input/text-input.js +37 -0
- package/dist/components/data-input/text-input/text-input.js.map +1 -0
- package/dist/components/{form-elements → data-input}/text-input/text-input.types.d.ts +1 -1
- package/dist/components/data-input/text-input/text-input.types.js.map +1 -0
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/layouts/column-layout/column-layout.js +1 -1
- package/dist/components/layouts/column-layout/column-layout.js.map +1 -1
- package/dist/components/layouts/column-layout/column-layout.types.d.ts +1 -1
- package/dist/components/layouts/footer/footer.js +1 -1
- package/dist/components/layouts/footer/footer.js.map +1 -1
- package/dist/components/layouts/index.d.ts +2 -0
- package/dist/components/layouts/index.js +2 -0
- package/dist/components/layouts/index.js.map +1 -1
- package/dist/components/layouts/layout-wrapper.js +1 -1
- package/dist/components/layouts/layout-wrapper.js.map +1 -1
- package/dist/components/layouts/masonry-layout/masonry-layout.js +1 -1
- package/dist/components/layouts/masonry-layout/masonry-layout.js.map +1 -1
- package/dist/components/layouts/masonry-layout/masonry-layout.types.d.ts +1 -1
- package/dist/components/layouts/split-navigator/index.d.ts +2 -0
- package/dist/components/layouts/split-navigator/index.js +2 -0
- package/dist/components/layouts/split-navigator/index.js.map +1 -0
- package/dist/components/layouts/split-navigator/split-navigator.d.ts +19 -0
- package/dist/components/layouts/split-navigator/split-navigator.js +91 -0
- package/dist/components/layouts/split-navigator/split-navigator.js.map +1 -0
- package/dist/components/layouts/split-navigator/split-navigator.types.d.ts +55 -0
- package/dist/components/layouts/split-navigator/split-navigator.types.js +2 -0
- package/dist/components/layouts/split-navigator/split-navigator.types.js.map +1 -0
- package/dist/components/layouts/split-view/components/split-view-back-button.d.ts +3 -0
- package/dist/components/layouts/split-view/components/split-view-back-button.js +18 -0
- package/dist/components/layouts/split-view/components/split-view-back-button.js.map +1 -0
- package/dist/components/layouts/split-view/components/split-view-column.d.ts +5 -0
- package/dist/components/layouts/split-view/components/split-view-column.js +204 -0
- package/dist/components/layouts/split-view/components/split-view-column.js.map +1 -0
- package/dist/components/layouts/split-view/components/split-view-header.d.ts +6 -0
- package/dist/components/layouts/split-view/components/split-view-header.js +44 -0
- package/dist/components/layouts/split-view/components/split-view-header.js.map +1 -0
- package/dist/components/layouts/split-view/components/split-view-item.d.ts +11 -0
- package/dist/components/layouts/split-view/components/split-view-item.js +19 -0
- package/dist/components/layouts/split-view/components/split-view-item.js.map +1 -0
- package/dist/components/layouts/split-view/components/split-view-panes.d.ts +7 -0
- package/dist/components/layouts/split-view/components/split-view-panes.js +10 -0
- package/dist/components/layouts/split-view/components/split-view-panes.js.map +1 -0
- package/dist/components/layouts/split-view/components/split-view-sidebar-toggle.d.ts +3 -0
- package/dist/components/layouts/split-view/components/split-view-sidebar-toggle.js +14 -0
- package/dist/components/layouts/split-view/components/split-view-sidebar-toggle.js.map +1 -0
- package/dist/components/layouts/split-view/index.d.ts +10 -0
- package/dist/components/layouts/split-view/index.js +15 -0
- package/dist/components/layouts/split-view/index.js.map +1 -0
- package/dist/components/layouts/split-view/split-view-context.d.ts +4 -0
- package/dist/components/layouts/split-view/split-view-context.js +6 -0
- package/dist/components/layouts/split-view/split-view-context.js.map +1 -0
- package/dist/components/layouts/split-view/split-view.d.ts +20 -0
- package/dist/components/layouts/split-view/split-view.js +153 -0
- package/dist/components/layouts/split-view/split-view.js.map +1 -0
- package/dist/components/layouts/split-view/split-view.types.d.ts +90 -0
- package/dist/components/layouts/split-view/split-view.types.js +2 -0
- package/dist/components/layouts/split-view/split-view.types.js.map +1 -0
- package/dist/components/media-display/image-panel/image-panel.js +1 -1
- package/dist/components/media-display/image-panel/image-panel.js.map +1 -1
- package/dist/components/media-display/info-card/info-card.js +2 -2
- package/dist/components/media-display/info-card/info-card.js.map +1 -1
- package/dist/components/media-display/info-card/info-card.types.d.ts +1 -1
- package/dist/components/media-display/media-card/media-card.js +2 -2
- package/dist/components/media-display/media-card/media-card.js.map +1 -1
- package/dist/components/navigation/nav-menu/components/nav-drop-down-item.js +1 -1
- package/dist/components/navigation/nav-menu/components/nav-drop-down-item.js.map +1 -1
- package/dist/components/navigation/nav-menu/components/nav-item.js +1 -1
- package/dist/components/navigation/nav-menu/components/nav-item.js.map +1 -1
- package/dist/components/navigation/nav-menu/components/nav-link.js +1 -1
- package/dist/components/navigation/nav-menu/components/nav-link.js.map +1 -1
- package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.d.ts +1 -1
- package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.js +5 -48
- package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.js.map +1 -1
- package/dist/components/navigation/side-nav/side-nav-item/side-nav-item.types.d.ts +3 -0
- package/dist/components/navigation/side-nav/side-nav.d.ts +4 -2
- package/dist/components/navigation/side-nav/side-nav.js +27 -11
- package/dist/components/navigation/side-nav/side-nav.js.map +1 -1
- package/dist/components/navigation/side-nav/side-nav.types.d.ts +6 -1
- package/dist/components/typography/body/body.types.d.ts +8 -5
- package/dist/components/typography/body/text.d.ts +5 -3
- package/dist/components/typography/body/text.js +20 -6
- package/dist/components/typography/body/text.js.map +1 -1
- package/dist/components/typography/code/code.d.ts +8 -0
- package/dist/components/typography/code/code.js +12 -1
- package/dist/components/typography/code/code.js.map +1 -1
- package/dist/components/typography/code/code.types.d.ts +2 -2
- package/dist/components/typography/heading/heading.js +7 -2
- package/dist/components/typography/heading/heading.js.map +1 -1
- package/dist/components/typography/heading/heading.types.d.ts +3 -1
- package/dist/components/typography/heading/render-heading.d.ts +1 -1
- package/dist/components/typography/heading/render-heading.js +6 -4
- package/dist/components/typography/heading/render-heading.js.map +1 -1
- package/dist/components/typography/page-header/page-header.js +1 -1
- package/dist/components/typography/page-header/page-header.js.map +1 -1
- package/dist/components/typography/shared-utils/get-presentation-styles.js +8 -0
- package/dist/components/typography/shared-utils/get-presentation-styles.js.map +1 -1
- package/dist/components/typography/shared-utils/resolve-margin-bottom.d.ts +22 -0
- package/dist/components/typography/shared-utils/resolve-margin-bottom.js +25 -0
- package/dist/components/typography/shared-utils/resolve-margin-bottom.js.map +1 -0
- package/dist/components/typography/typography.types.d.ts +8 -3
- package/dist/components/ui/button/button-recipe.js +8 -0
- package/dist/components/ui/button/button-recipe.js.map +1 -1
- package/dist/components/ui/button/button.d.ts +7 -1
- package/dist/components/ui/button/button.js +8 -2
- package/dist/components/ui/button/button.js.map +1 -1
- package/dist/components/ui/button/button.types.d.ts +6 -6
- package/dist/components/ui/card/card.js +2 -2
- package/dist/components/ui/card/card.js.map +1 -1
- package/dist/components/ui/icon/icon.types.d.ts +1 -1
- package/dist/components/ui/icon-button/icon-button.js +2 -2
- package/dist/components/ui/icon-button/icon-button.js.map +1 -1
- package/dist/components/ui/icon-button/icon-button.types.d.ts +4 -3
- package/dist/components/ui/modal/components/modal-content.js +1 -1
- package/dist/components/ui/modal/components/modal-content.js.map +1 -1
- package/dist/components/ui/modal/modal.js +1 -1
- package/dist/components/ui/modal/modal.js.map +1 -1
- package/dist/components/ui/modal/modal.types.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-media-query/index.d.ts +1 -0
- package/dist/hooks/use-media-query/index.js +2 -0
- package/dist/hooks/use-media-query/index.js.map +1 -0
- package/dist/hooks/use-media-query/use-media-query.d.ts +8 -0
- package/dist/hooks/use-media-query/use-media-query.js +22 -0
- package/dist/hooks/use-media-query/use-media-query.js.map +1 -0
- package/dist/hooks/use-pathname/use-pathname.d.ts +2 -1
- package/dist/hooks/use-pathname/use-pathname.js +28 -4
- package/dist/hooks/use-pathname/use-pathname.js.map +1 -1
- package/dist/internal/components/conditional-wrapper/conditional-wrapper.js.map +1 -0
- package/dist/internal/components/conditional-wrapper/conditional-wrapper.types.js.map +1 -0
- package/dist/internal/components/conditional-wrapper/index.js.map +1 -0
- package/dist/{internal-components → internal/components}/content-header/content-header.js +3 -3
- package/dist/internal/components/content-header/content-header.js.map +1 -0
- package/dist/{internal-components → internal/components}/content-header/content-header.types.d.ts +3 -3
- package/dist/internal/components/content-header/content-header.types.js.map +1 -0
- package/dist/internal/components/content-header/index.js.map +1 -0
- package/dist/{internal-components → internal/components}/dynamic-icon/dynamic-icon.js +1 -1
- package/dist/internal/components/dynamic-icon/dynamic-icon.js.map +1 -0
- package/dist/internal/components/dynamic-icon/dynamic-icon.types.d.ts +6 -0
- package/dist/internal/components/dynamic-icon/dynamic-icon.types.js.map +1 -0
- package/dist/internal/components/dynamic-icon/index.js.map +1 -0
- package/dist/internal/components/image/index.js.map +1 -0
- package/dist/{internal-components → internal/components}/image/is-html-image-props.d.ts +1 -1
- package/dist/internal/components/image/is-html-image-props.js.map +1 -0
- package/dist/{internal-components → internal/components}/image/render-image.d.ts +1 -1
- package/dist/{internal-components → internal/components}/image/render-image.js +1 -1
- package/dist/internal/components/image/render-image.js.map +1 -0
- package/dist/{internal-components → internal/components}/index.d.ts +1 -0
- package/dist/{internal-components → internal/components}/index.js +1 -0
- package/dist/internal/components/index.js.map +1 -0
- package/dist/internal/components/link/index.js.map +1 -0
- package/dist/{internal-components → internal/components}/link/link.js +1 -1
- package/dist/internal/components/link/link.js.map +1 -0
- package/dist/internal/components/link/link.types.js.map +1 -0
- package/dist/internal/components/modal-primitive/index.js.map +1 -0
- package/dist/{internal-components → internal/components}/modal-primitive/modal-primitive.js +1 -1
- package/dist/internal/components/modal-primitive/modal-primitive.js.map +1 -0
- package/dist/internal/components/modal-primitive/modal-primitive.types.js.map +1 -0
- package/dist/internal/components/nav-list-item/index.d.ts +2 -0
- package/dist/internal/components/nav-list-item/index.js +2 -0
- package/dist/internal/components/nav-list-item/index.js.map +1 -0
- package/dist/internal/components/nav-list-item/nav-list-item.d.ts +9 -0
- package/dist/internal/components/nav-list-item/nav-list-item.js +105 -0
- package/dist/internal/components/nav-list-item/nav-list-item.js.map +1 -0
- package/dist/internal/components/nav-list-item/nav-list-item.types.d.ts +24 -0
- package/dist/internal/components/nav-list-item/nav-list-item.types.js +2 -0
- package/dist/internal/components/nav-list-item/nav-list-item.types.js.map +1 -0
- package/dist/internal/components/optional-icon-button/index.js.map +1 -0
- package/dist/{internal-components → internal/components}/optional-icon-button/optional-icon-button.js +1 -1
- package/dist/internal/components/optional-icon-button/optional-icon-button.js.map +1 -0
- package/dist/{internal-components → internal/components}/optional-icon-button/optional-icon-button.types.d.ts +1 -1
- package/dist/internal/components/optional-icon-button/optional-icon-button.types.js.map +1 -0
- package/dist/internal/components/surface/index.js.map +1 -0
- package/dist/{internal-components → internal/components}/surface/surface.js +2 -2
- package/dist/internal/components/surface/surface.js.map +1 -0
- package/dist/{internal-components → internal/components}/surface/surface.types.d.ts +2 -2
- package/dist/internal/components/surface/surface.types.js.map +1 -0
- package/dist/internal/hooks/index.d.ts +2 -0
- package/dist/internal/hooks/index.js +3 -0
- package/dist/internal/hooks/index.js.map +1 -0
- package/dist/internal/hooks/use-controllable-state.d.ts +22 -0
- package/dist/internal/hooks/use-controllable-state.js +34 -0
- package/dist/internal/hooks/use-controllable-state.js.map +1 -0
- package/dist/internal/hooks/use-latest-ref.d.ts +7 -0
- package/dist/internal/hooks/use-latest-ref.js +16 -0
- package/dist/internal/hooks/use-latest-ref.js.map +1 -0
- package/dist/internal/index.d.ts +2 -0
- package/dist/internal/index.js +5 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/styled-system/recipes/button.js +7 -0
- package/dist/styles/panda.css +1 -1
- package/package.json +4 -1
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.d.ts +0 -13
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.js +0 -41
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.js.map +0 -1
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.types.d.ts +0 -21
- package/dist/components/form-elements/dropdowns/dropdown/dropdown.types.js.map +0 -1
- package/dist/components/form-elements/dropdowns/dropdown/index.js.map +0 -1
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.d.ts +0 -8
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.js +0 -44
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.js.map +0 -1
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.types.d.ts +0 -26
- package/dist/components/form-elements/dropdowns/dropdown-base/dropdown-base.types.js.map +0 -1
- package/dist/components/form-elements/dropdowns/dropdown-base/index.js.map +0 -1
- package/dist/components/form-elements/dropdowns/index.js.map +0 -1
- package/dist/components/form-elements/dropdowns/multi-dropdown/index.js.map +0 -1
- package/dist/components/form-elements/dropdowns/multi-dropdown/multi-dropdown.d.ts +0 -15
- package/dist/components/form-elements/dropdowns/multi-dropdown/multi-dropdown.js +0 -55
- package/dist/components/form-elements/dropdowns/multi-dropdown/multi-dropdown.js.map +0 -1
- package/dist/components/form-elements/dropdowns/multi-dropdown/multi-dropdown.types.d.ts +0 -25
- package/dist/components/form-elements/dropdowns/multi-dropdown/multi-dropdown.types.js.map +0 -1
- package/dist/components/form-elements/file-upload/components/file-input.d.ts +0 -1
- package/dist/components/form-elements/file-upload/components/file-input.js +0 -95
- package/dist/components/form-elements/file-upload/components/file-input.js.map +0 -1
- package/dist/components/form-elements/file-upload/components/file-upload-content.d.ts +0 -1
- package/dist/components/form-elements/file-upload/components/file-upload-content.js +0 -29
- package/dist/components/form-elements/file-upload/components/file-upload-content.js.map +0 -1
- package/dist/components/form-elements/file-upload/components/file-upload-preview.d.ts +0 -1
- package/dist/components/form-elements/file-upload/components/file-upload-preview.js +0 -51
- package/dist/components/form-elements/file-upload/components/file-upload-preview.js.map +0 -1
- package/dist/components/form-elements/file-upload/components/item-previews.d.ts +0 -11
- package/dist/components/form-elements/file-upload/components/item-previews.js +0 -58
- package/dist/components/form-elements/file-upload/components/item-previews.js.map +0 -1
- package/dist/components/form-elements/file-upload/file-upload-context.js.map +0 -1
- package/dist/components/form-elements/file-upload/file-upload.d.ts +0 -19
- package/dist/components/form-elements/file-upload/file-upload.js +0 -149
- package/dist/components/form-elements/file-upload/file-upload.js.map +0 -1
- package/dist/components/form-elements/file-upload/file-upload.types.d.ts +0 -36
- package/dist/components/form-elements/file-upload/file-upload.types.js.map +0 -1
- package/dist/components/form-elements/file-upload/index.d.ts +0 -3
- package/dist/components/form-elements/file-upload/index.js.map +0 -1
- package/dist/components/form-elements/form-label/form-label.d.ts +0 -8
- package/dist/components/form-elements/form-label/form-label.js +0 -32
- package/dist/components/form-elements/form-label/form-label.js.map +0 -1
- package/dist/components/form-elements/form-label/form-label.types.d.ts +0 -11
- package/dist/components/form-elements/form-label/form-label.types.js.map +0 -1
- package/dist/components/form-elements/form-label/index.js.map +0 -1
- package/dist/components/form-elements/index.js.map +0 -1
- package/dist/components/form-elements/input-props.types.d.ts +0 -21
- package/dist/components/form-elements/input-props.types.js.map +0 -1
- package/dist/components/form-elements/input-wrapper.d.ts +0 -4
- package/dist/components/form-elements/input-wrapper.js +0 -13
- package/dist/components/form-elements/input-wrapper.js.map +0 -1
- package/dist/components/form-elements/number-input/index.js.map +0 -1
- package/dist/components/form-elements/number-input/number-input.js.map +0 -1
- package/dist/components/form-elements/number-input/number-input.types.js.map +0 -1
- package/dist/components/form-elements/styles/index.js +0 -74
- package/dist/components/form-elements/styles/index.js.map +0 -1
- package/dist/components/form-elements/text-input/index.js.map +0 -1
- package/dist/components/form-elements/text-input/text-input.d.ts +0 -8
- package/dist/components/form-elements/text-input/text-input.js +0 -19
- package/dist/components/form-elements/text-input/text-input.js.map +0 -1
- package/dist/components/form-elements/text-input/text-input.types.js.map +0 -1
- package/dist/components/typography/typography.d.ts +0 -116
- package/dist/components/typography/typography.js +0 -249
- package/dist/components/typography/typography.js.map +0 -1
- package/dist/internal-components/conditional-wrapper/conditional-wrapper.js.map +0 -1
- package/dist/internal-components/conditional-wrapper/conditional-wrapper.types.js.map +0 -1
- package/dist/internal-components/conditional-wrapper/index.js.map +0 -1
- package/dist/internal-components/content-header/content-header.js.map +0 -1
- package/dist/internal-components/content-header/content-header.types.js.map +0 -1
- package/dist/internal-components/content-header/index.js.map +0 -1
- package/dist/internal-components/dynamic-icon/dynamic-icon.js.map +0 -1
- package/dist/internal-components/dynamic-icon/dynamic-icon.types.d.ts +0 -6
- package/dist/internal-components/dynamic-icon/dynamic-icon.types.js.map +0 -1
- package/dist/internal-components/dynamic-icon/index.js.map +0 -1
- package/dist/internal-components/image/index.js.map +0 -1
- package/dist/internal-components/image/is-html-image-props.js.map +0 -1
- package/dist/internal-components/image/render-image.js.map +0 -1
- package/dist/internal-components/index.js.map +0 -1
- package/dist/internal-components/link/index.js.map +0 -1
- package/dist/internal-components/link/link.js.map +0 -1
- package/dist/internal-components/link/link.types.js.map +0 -1
- package/dist/internal-components/modal-primitive/index.js.map +0 -1
- package/dist/internal-components/modal-primitive/modal-primitive.js.map +0 -1
- package/dist/internal-components/modal-primitive/modal-primitive.types.js.map +0 -1
- package/dist/internal-components/optional-icon-button/index.js.map +0 -1
- package/dist/internal-components/optional-icon-button/optional-icon-button.js.map +0 -1
- package/dist/internal-components/optional-icon-button/optional-icon-button.types.js.map +0 -1
- package/dist/internal-components/surface/index.js.map +0 -1
- package/dist/internal-components/surface/surface.js.map +0 -1
- package/dist/internal-components/surface/surface.types.js.map +0 -1
- /package/dist/components/{form-elements → data-input}/dropdowns/dropdown/dropdown.types.js +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/dropdown/index.d.ts +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/dropdown/index.js +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/dropdown-base/dropdown-base.types.js +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/dropdown-base/index.d.ts +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/dropdown-base/index.js +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/index.d.ts +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/index.js +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/multi-dropdown/index.d.ts +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/multi-dropdown/index.js +0 -0
- /package/dist/components/{form-elements → data-input}/dropdowns/multi-dropdown/multi-dropdown.types.js +0 -0
- /package/dist/components/{form-elements → data-input}/file-upload/file-upload-context.d.ts +0 -0
- /package/dist/components/{form-elements → data-input}/file-upload/file-upload-context.js +0 -0
- /package/dist/components/{form-elements → data-input}/file-upload/file-upload.types.js +0 -0
- /package/dist/components/{form-elements → data-input}/file-upload/index.js +0 -0
- /package/dist/components/{form-elements → data-input}/number-input/index.d.ts +0 -0
- /package/dist/components/{form-elements → data-input}/number-input/index.js +0 -0
- /package/dist/components/{form-elements → data-input}/number-input/number-input.types.js +0 -0
- /package/dist/components/{form-elements → data-input/shared}/form-label/form-label.types.js +0 -0
- /package/dist/components/{form-elements → data-input/shared}/form-label/index.d.ts +0 -0
- /package/dist/components/{form-elements → data-input/shared}/form-label/index.js +0 -0
- /package/dist/components/{form-elements → data-input/shared}/input-props.types.js +0 -0
- /package/dist/components/{form-elements → data-input}/text-input/index.d.ts +0 -0
- /package/dist/components/{form-elements → data-input}/text-input/index.js +0 -0
- /package/dist/components/{form-elements → data-input}/text-input/text-input.types.js +0 -0
- /package/dist/{internal-components → internal/components}/conditional-wrapper/conditional-wrapper.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/conditional-wrapper/conditional-wrapper.js +0 -0
- /package/dist/{internal-components → internal/components}/conditional-wrapper/conditional-wrapper.types.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/conditional-wrapper/conditional-wrapper.types.js +0 -0
- /package/dist/{internal-components → internal/components}/conditional-wrapper/index.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/conditional-wrapper/index.js +0 -0
- /package/dist/{internal-components → internal/components}/content-header/content-header.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/content-header/content-header.types.js +0 -0
- /package/dist/{internal-components → internal/components}/content-header/index.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/content-header/index.js +0 -0
- /package/dist/{internal-components → internal/components}/dynamic-icon/dynamic-icon.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/dynamic-icon/dynamic-icon.types.js +0 -0
- /package/dist/{internal-components → internal/components}/dynamic-icon/index.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/dynamic-icon/index.js +0 -0
- /package/dist/{internal-components → internal/components}/image/index.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/image/index.js +0 -0
- /package/dist/{internal-components → internal/components}/image/is-html-image-props.js +0 -0
- /package/dist/{internal-components → internal/components}/link/index.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/link/index.js +0 -0
- /package/dist/{internal-components → internal/components}/link/link.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/link/link.types.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/link/link.types.js +0 -0
- /package/dist/{internal-components → internal/components}/modal-primitive/index.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/modal-primitive/index.js +0 -0
- /package/dist/{internal-components → internal/components}/modal-primitive/modal-primitive.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/modal-primitive/modal-primitive.types.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/modal-primitive/modal-primitive.types.js +0 -0
- /package/dist/{internal-components → internal/components}/optional-icon-button/index.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/optional-icon-button/index.js +0 -0
- /package/dist/{internal-components → internal/components}/optional-icon-button/optional-icon-button.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/optional-icon-button/optional-icon-button.types.js +0 -0
- /package/dist/{internal-components → internal/components}/surface/index.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/surface/index.js +0 -0
- /package/dist/{internal-components → internal/components}/surface/surface.d.ts +0 -0
- /package/dist/{internal-components → internal/components}/surface/surface.types.js +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { parseReorderableValue, parseReorderableGroups, serializeReorderableGroups, } from './functions/form-value';
|
|
2
|
+
export { applyOrder } from './functions/apply-order';
|
|
3
|
+
export { layoutStrategies, layoutRecipe } from './functions/layout';
|
|
4
|
+
export { screenReaderInstructions, defaultGetItemLabel, createListAnnouncements, } from './functions/announcements';
|
|
5
|
+
export { DragHandle, createDragHandleProps } from './components/drag-handle';
|
|
6
|
+
export { SortableItem } from './components/sortable-item';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/data-input/reorderable/shared/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACN,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CSSProperties, ComponentType, KeyboardEventHandler, PointerEventHandler, ReactNode } from 'react';
|
|
2
|
+
import type { DraggableAttributes } from '@dnd-kit/core';
|
|
3
|
+
/** Minimum shape required for items rendered in a reorderable component. */
|
|
4
|
+
export type ReorderableItem = {
|
|
5
|
+
id: string | number;
|
|
6
|
+
};
|
|
7
|
+
/** Keys of `T` whose values are numbers. */
|
|
8
|
+
export type NumericKeys<T> = {
|
|
9
|
+
[K in keyof T]: T[K] extends number ? K : never;
|
|
10
|
+
}[keyof T];
|
|
11
|
+
/** Layout and sorting arrangement of items or groups */
|
|
12
|
+
export type ReorderableLayout = 'vertical' | 'horizontal' | 'grid';
|
|
13
|
+
/** Props passed to a consumer-provided layout wrapper. */
|
|
14
|
+
export type ReorderableWrapperProps = {
|
|
15
|
+
children: ReactNode;
|
|
16
|
+
};
|
|
17
|
+
/** Consumer-provided component that lays out rendered items or groups. */
|
|
18
|
+
export type ReorderableWrapper = ComponentType<ReorderableWrapperProps>;
|
|
19
|
+
/** Props that turn any element into a drag handle. Spread onto the element; merge `style` if you pass your own. */
|
|
20
|
+
export type DragHandleProps = DraggableAttributes & {
|
|
21
|
+
ref: (element: HTMLElement | null) => void;
|
|
22
|
+
'aria-label': string;
|
|
23
|
+
/** Sets `touchAction: 'none'` so touch drags don't scroll the page */
|
|
24
|
+
style: CSSProperties;
|
|
25
|
+
onPointerDown?: PointerEventHandler<HTMLElement>;
|
|
26
|
+
onKeyDown?: KeyboardEventHandler<HTMLElement>;
|
|
27
|
+
};
|
|
28
|
+
/** Callback an item uses to report its own updated data. */
|
|
29
|
+
export type ReorderableItemChangeHandler<T> = (item: T) => void;
|
|
30
|
+
/** Props passed to the consumer-provided `ItemComponent`. */
|
|
31
|
+
export type ReorderableItemProps<T> = {
|
|
32
|
+
item: T;
|
|
33
|
+
/** Default drag handle button. Render it, or spread `dragHandleProps` onto your own element instead. */
|
|
34
|
+
dragHandle: ReactNode;
|
|
35
|
+
/** Spread onto any element to make it the drag handle, e.g. `<img {...dragHandleProps} />` */
|
|
36
|
+
dragHandleProps: DragHandleProps;
|
|
37
|
+
/** Report changes to this item back to the list. */
|
|
38
|
+
onItemChange: ReorderableItemChangeHandler<T>;
|
|
39
|
+
/** Remove this item from the list. Remaining items are re-indexed via `orderProperty`. */
|
|
40
|
+
onItemRemove: () => void;
|
|
41
|
+
/** `true` while this item is being dragged. */
|
|
42
|
+
isDragging: boolean;
|
|
43
|
+
};
|
|
44
|
+
/** Component used to render each item in a reorderable component. */
|
|
45
|
+
export type ReorderableItemComponent<T> = ComponentType<ReorderableItemProps<T>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reorderable.types.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/shared/types/reorderable.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { UniqueIdentifier } from '@dnd-kit/core';
|
|
2
|
+
import type { ReorderableItem, ReorderableItemChangeHandler, ReorderableItemComponent } from './reorderable.types';
|
|
3
|
+
/** Props for internal `SortableItem` wrapper. */
|
|
4
|
+
export type SortableItemProps<T extends ReorderableItem> = {
|
|
5
|
+
item: T;
|
|
6
|
+
/** Human-readable name used in the drag handle's `aria-label`. */
|
|
7
|
+
label: string;
|
|
8
|
+
ItemComponent: ReorderableItemComponent<T>;
|
|
9
|
+
onItemChange: ReorderableItemChangeHandler<T>;
|
|
10
|
+
/** Remove an item from the list by `id`. */
|
|
11
|
+
onItemRemove: (id: ReorderableItem['id']) => void;
|
|
12
|
+
/** dnd-kit id. The item `id` in a flat list, namespaced in `ReorderableGroups`. */
|
|
13
|
+
sortableId: UniqueIdentifier;
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortable-item.types.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/shared/types/sortable-item.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FormLabelProps } from './form-label.types';
|
|
2
|
+
/**
|
|
3
|
+
* Form label linked to a control by `id`. Renders as an `H3` typographic style, with optional `secondaryContent` on the trailing end.
|
|
4
|
+
* Rendered by `InputWrapper`; use directly only for custom layouts.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* <FormLabel id="email" title="Email Address" />
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <FormLabel id="attachments" title="Attachments" divider />
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* <FormLabel id="contents" title="Contents" secondaryContent={<IconButton icon="Plus" onClick={onAdd} />} divider />
|
|
14
|
+
*/
|
|
15
|
+
export declare const FormLabel: ({ id, title, size, divider, secondaryContent, }: FormLabelProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { css, cva } from '../../../../styled-system/css';
|
|
3
|
+
import { Text } from '../../../../components/typography';
|
|
4
|
+
import { Divider } from '../../../../components/ui';
|
|
5
|
+
const styles = {
|
|
6
|
+
root: cva({
|
|
7
|
+
base: {
|
|
8
|
+
display: 'block',
|
|
9
|
+
width: '100%',
|
|
10
|
+
alignSelf: 'flex-start',
|
|
11
|
+
},
|
|
12
|
+
variants: {
|
|
13
|
+
size: {
|
|
14
|
+
sm: {
|
|
15
|
+
marginBottom: '1',
|
|
16
|
+
},
|
|
17
|
+
md: {
|
|
18
|
+
marginBottom: '1.5',
|
|
19
|
+
},
|
|
20
|
+
lg: {
|
|
21
|
+
marginBottom: '2',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
}),
|
|
26
|
+
row: css({
|
|
27
|
+
display: 'flex',
|
|
28
|
+
alignItems: 'center',
|
|
29
|
+
justifyContent: 'space-between',
|
|
30
|
+
gap: '2',
|
|
31
|
+
}),
|
|
32
|
+
label: css({
|
|
33
|
+
flex: '1',
|
|
34
|
+
minWidth: '0',
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Form label linked to a control by `id`. Renders as an `H3` typographic style, with optional `secondaryContent` on the trailing end.
|
|
39
|
+
* Rendered by `InputWrapper`; use directly only for custom layouts.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* <FormLabel id="email" title="Email Address" />
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* <FormLabel id="attachments" title="Attachments" divider />
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* <FormLabel id="contents" title="Contents" secondaryContent={<IconButton icon="Plus" onClick={onAdd} />} divider />
|
|
49
|
+
*/
|
|
50
|
+
export const FormLabel = ({ id, title, size = 'md', divider, secondaryContent, }) => {
|
|
51
|
+
return (_jsxs("div", { className: styles.root({ size }), children: [_jsxs("div", { className: styles.row, children: [_jsx("label", { id: `${id}-label`, htmlFor: id, className: styles.label, children: _jsx(Text, { marginBottom: false, weight: "semibold", size: size, children: title }) }), secondaryContent] }), divider && _jsx(Divider, { width: "100%", marginY: "2px" })] }));
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=form-label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-label.js","sourceRoot":"","sources":["../../../../../src/components/data-input/shared/form-label/form-label.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,MAAM,GAAG;IACd,IAAI,EAAE,GAAG,CAAC;QACT,IAAI,EAAE;YACL,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,YAAY;SACvB;QACD,QAAQ,EAAE;YACT,IAAI,EAAE;gBACL,EAAE,EAAE;oBACH,YAAY,EAAE,GAAG;iBACjB;gBACD,EAAE,EAAE;oBACH,YAAY,EAAE,KAAK;iBACnB;gBACD,EAAE,EAAE;oBACH,YAAY,EAAE,GAAG;iBACjB;aACD;SACD;KACD,CAAC;IACF,GAAG,EAAE,GAAG,CAAC;QACR,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,GAAG,EAAE,GAAG;KACR,CAAC;IACF,KAAK,EAAE,GAAG,CAAC;QACV,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,GAAG;KACb,CAAC;CACF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACzB,EAAE,EACF,KAAK,EACL,IAAI,GAAG,IAAI,EACX,OAAO,EACP,gBAAgB,GACA,EAAE,EAAE;IACpB,OAAO,CACN,eAAK,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,aACpC,eAAK,SAAS,EAAE,MAAM,CAAC,GAAG,aACzB,gBAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,YAC7D,KAAC,IAAI,IAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAC,UAAU,EAAC,IAAI,EAAE,IAAI,YACrD,KAAK,GACA,GACA,EACP,gBAAgB,IACZ,EACL,OAAO,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAC,KAAK,GAAG,IAC7C,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Override, Prettify } from '../../../../types';
|
|
2
|
+
import { BaseInputProps } from '../input-props.types';
|
|
3
|
+
import { ReactNode } from 'react';
|
|
4
|
+
export type FormLabelProps = Prettify<Pick<Override<BaseInputProps, {
|
|
5
|
+
/** Id of the control this label points to via `htmlFor`; the label's own id is `${id}-label` */
|
|
6
|
+
id: string;
|
|
7
|
+
}>, 'id' | 'title' | 'size' | 'divider'> & {
|
|
8
|
+
/** Optional content rendered on the trailing end of the label */
|
|
9
|
+
secondaryContent?: ReactNode;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-label.types.js","sourceRoot":"","sources":["../../../../../src/components/data-input/shared/form-label/form-label.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/data-input/shared/form-label/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { UtilitySizeOptions } from '../../../types';
|
|
2
|
+
/** HTML Elements that accept inputs */
|
|
3
|
+
export type InputElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
|
|
4
|
+
/** Props shared by every input element, independent of control mode. */
|
|
5
|
+
export type BaseInputProps = {
|
|
6
|
+
/** Defaults to `name`, or a generated id when neither is set */
|
|
7
|
+
id?: string;
|
|
8
|
+
/** Form field name; omit to keep the value out of form submission */
|
|
9
|
+
name?: string;
|
|
10
|
+
/** Label text rendered above the input */
|
|
11
|
+
title?: string;
|
|
12
|
+
/** Require value for form submission */
|
|
13
|
+
required?: boolean;
|
|
14
|
+
/** Descriptive text rendered within input */
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
/** Size @default `md` */
|
|
17
|
+
size?: UtilitySizeOptions;
|
|
18
|
+
/** Block interaction and exclude the value from form submission */
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
/** Error message rendered below the input. Overrides native validation message and blocks form submission while set */
|
|
21
|
+
error?: string;
|
|
22
|
+
/** Optionally render divider beneath label @default false */
|
|
23
|
+
divider?: boolean;
|
|
24
|
+
};
|
|
25
|
+
/** Control props for inputs that only support controlled use. */
|
|
26
|
+
export type ControlledValueProps<TValue, TChange> = {
|
|
27
|
+
/** Controlled value */
|
|
28
|
+
value: TValue;
|
|
29
|
+
/** Called when the input value changes */
|
|
30
|
+
onChange: (e: TChange) => void | Promise<void>;
|
|
31
|
+
};
|
|
32
|
+
/** Controlled when `value` is passed, uncontrolled otherwise. */
|
|
33
|
+
type ControllableValueProps<TValue, TChange> = (ControlledValueProps<TValue, TChange> & {
|
|
34
|
+
defaultValue?: never;
|
|
35
|
+
}) | {
|
|
36
|
+
value?: never;
|
|
37
|
+
/** Called when the input value changes */
|
|
38
|
+
onChange?: (e: TChange) => void | Promise<void>;
|
|
39
|
+
/** Initial value for uncontrolled use */
|
|
40
|
+
defaultValue?: TValue;
|
|
41
|
+
};
|
|
42
|
+
export type InputProps<TValue, TChange = React.ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>> = BaseInputProps & ControllableValueProps<TValue, TChange>;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-props.types.js","sourceRoot":"","sources":["../../../../src/components/data-input/shared/input-props.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Override, Prettify } from '../../../types';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { BaseInputProps } from './input-props.types';
|
|
4
|
+
import { FormLabelProps } from './form-label';
|
|
5
|
+
/** Props for `InputWrapper`. */
|
|
6
|
+
type InputWrapperProps = Prettify<Pick<Override<BaseInputProps, {
|
|
7
|
+
/** Id of the wrapped control; the label points to it and the message id derives from it */
|
|
8
|
+
id: string;
|
|
9
|
+
}>, 'id' | 'title' | 'size' | 'divider'> & {
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
/** Message rendered below the control */
|
|
12
|
+
error?: string | null;
|
|
13
|
+
/** Keep the label for screen readers but hide it visually */
|
|
14
|
+
hideLabel?: boolean;
|
|
15
|
+
} & Pick<FormLabelProps, 'secondaryContent'>>;
|
|
16
|
+
/**
|
|
17
|
+
* Field shell for a form control: label (with optional divider), the control, and the error message.
|
|
18
|
+
* The message slot is an always-present `aria-live` region so screen readers announce changes.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <InputWrapper id={id} title={title} size={size} error={message}>
|
|
22
|
+
* <input id={id} name={name} />
|
|
23
|
+
* </InputWrapper>
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* <InputWrapper id={id} title="Filters" hideLabel>
|
|
27
|
+
* <button id={id}>Open</button>
|
|
28
|
+
* </InputWrapper>
|
|
29
|
+
*/
|
|
30
|
+
export declare const InputWrapper: ({ children, id, title, size, divider, hideLabel, error, secondaryContent, }: InputWrapperProps) => import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { css, cva } from '../../../styled-system/css';
|
|
3
|
+
import { FormLabel } from './form-label';
|
|
4
|
+
import { getErrorId } from './use-field-error';
|
|
5
|
+
const styles = {
|
|
6
|
+
wrapper: css({
|
|
7
|
+
display: 'flex',
|
|
8
|
+
flexDirection: 'column',
|
|
9
|
+
justifyContent: 'start',
|
|
10
|
+
alignItems: 'center',
|
|
11
|
+
width: '100%',
|
|
12
|
+
}),
|
|
13
|
+
message: cva({
|
|
14
|
+
base: {
|
|
15
|
+
alignSelf: 'flex-start',
|
|
16
|
+
color: 'error.main',
|
|
17
|
+
_empty: { marginTop: '0' },
|
|
18
|
+
},
|
|
19
|
+
variants: {
|
|
20
|
+
size: {
|
|
21
|
+
sm: { fontSize: 'xs', marginTop: '1' },
|
|
22
|
+
md: { fontSize: 'sm', marginTop: '1.5' },
|
|
23
|
+
lg: { fontSize: 'md', marginTop: '2' },
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
defaultVariants: {
|
|
27
|
+
size: 'md',
|
|
28
|
+
},
|
|
29
|
+
}),
|
|
30
|
+
srOnly: css({ srOnly: true }),
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Field shell for a form control: label (with optional divider), the control, and the error message.
|
|
34
|
+
* The message slot is an always-present `aria-live` region so screen readers announce changes.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* <InputWrapper id={id} title={title} size={size} error={message}>
|
|
38
|
+
* <input id={id} name={name} />
|
|
39
|
+
* </InputWrapper>
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* <InputWrapper id={id} title="Filters" hideLabel>
|
|
43
|
+
* <button id={id}>Open</button>
|
|
44
|
+
* </InputWrapper>
|
|
45
|
+
*/
|
|
46
|
+
export const InputWrapper = ({ children, id, title, size = 'md', divider, hideLabel, error, secondaryContent, }) => {
|
|
47
|
+
const label = title && (_jsx(FormLabel, { id: id, title: title, size: size, divider: divider, secondaryContent: secondaryContent }));
|
|
48
|
+
return (_jsxs("div", { className: styles.wrapper, children: [label && (hideLabel ? _jsx("div", { className: styles.srOnly, children: label }) : label), children, _jsx("div", { id: getErrorId(id), "aria-live": "polite", className: styles.message({ size }), children: error })] }));
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=input-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-wrapper.js","sourceRoot":"","sources":["../../../../src/components/data-input/shared/input-wrapper.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAI/C,OAAO,EAAE,SAAS,EAAkB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,MAAM,GAAG;IACd,OAAO,EAAE,GAAG,CAAC;QACZ,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,cAAc,EAAE,OAAO;QACvB,UAAU,EAAE,QAAQ;QACpB,KAAK,EAAE,MAAM;KACb,CAAC;IACF,OAAO,EAAE,GAAG,CAAC;QACZ,IAAI,EAAE;YACL,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE;SAC1B;QACD,QAAQ,EAAE;YACT,IAAI,EAAE;gBACL,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;gBACtC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE;gBACxC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;aACtC;SACD;QACD,eAAe,EAAE;YAChB,IAAI,EAAE,IAAI;SACV;KACD,CAAC;IACF,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;CAC7B,CAAC;AAsBF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC5B,QAAQ,EACR,EAAE,EACF,KAAK,EACL,IAAI,GAAG,IAAI,EACX,OAAO,EACP,SAAS,EACT,KAAK,EACL,gBAAgB,GACG,EAAE,EAAE;IACvB,MAAM,KAAK,GAAG,KAAK,IAAI,CACtB,KAAC,SAAS,IACT,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,gBAAgB,GACjC,CACF,CAAC;IAEF,OAAO,CACN,eAAK,SAAS,EAAE,MAAM,CAAC,OAAO,aAC5B,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAK,SAAS,EAAE,MAAM,CAAC,MAAM,YAAG,KAAK,GAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAC3E,QAAQ,EACT,cAAK,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,eAAY,QAAQ,EAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,YAC7E,KAAK,GACD,IACD,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IconSizes } from '../../../components';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { UtilitySizeOptions } from '../../../types';
|
|
3
|
+
/** Size scale shared by every input element. */
|
|
4
|
+
export type InputSize = UtilitySizeOptions;
|
|
4
5
|
/** Icon size to pair with each `InputSize`. */
|
|
5
6
|
export declare const inputIconSizes: Record<InputSize, IconSizes>;
|
|
6
7
|
export declare const baseInputStyles: import("../../../styled-system/types").RecipeRuntimeFn<{
|
|
@@ -30,8 +31,30 @@ export declare const baseInputStyles: import("../../../styled-system/types").Rec
|
|
|
30
31
|
};
|
|
31
32
|
};
|
|
32
33
|
}>;
|
|
33
|
-
/** Sizing for
|
|
34
|
+
/** Sizing for pieces of composite controls, like the `NumberInput` stepper buttons and center field. */
|
|
34
35
|
export declare const inputSegmentStyles: import("../../../styled-system/types").RecipeRuntimeFn<{
|
|
36
|
+
field: {
|
|
37
|
+
true: {
|
|
38
|
+
position: "relative";
|
|
39
|
+
_focus: {
|
|
40
|
+
zIndex: number;
|
|
41
|
+
outline: "none";
|
|
42
|
+
borderColor: "info.main";
|
|
43
|
+
boxShadow: "0 0 0 2px {colors.info.main}";
|
|
44
|
+
};
|
|
45
|
+
color: "text.standard";
|
|
46
|
+
backgroundColor: "inset";
|
|
47
|
+
transition: "colors";
|
|
48
|
+
'&[aria-invalid=true]': {
|
|
49
|
+
readonly borderColor: "error.main";
|
|
50
|
+
readonly _focus: {
|
|
51
|
+
readonly borderColor: "error.main";
|
|
52
|
+
readonly boxShadow: "0 0 0 2px {colors.error.main}";
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
false: {};
|
|
57
|
+
};
|
|
35
58
|
size: {
|
|
36
59
|
readonly sm: {
|
|
37
60
|
readonly paddingX: "2";
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { cva } from '../../../styled-system/css';
|
|
2
|
+
// Single source of truth for size-driven spacing and type
|
|
3
|
+
const sizeVariants = {
|
|
4
|
+
sm: {
|
|
5
|
+
paddingX: '2',
|
|
6
|
+
paddingY: '1',
|
|
7
|
+
fontSize: 'xs',
|
|
8
|
+
},
|
|
9
|
+
md: {
|
|
10
|
+
paddingX: '3',
|
|
11
|
+
paddingY: '1.5',
|
|
12
|
+
fontSize: 'sm',
|
|
13
|
+
},
|
|
14
|
+
lg: {
|
|
15
|
+
paddingX: '4',
|
|
16
|
+
paddingY: '2',
|
|
17
|
+
fontSize: 'md',
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
// Border shared by standalone fields and composite segments
|
|
21
|
+
const border = {
|
|
22
|
+
borderWidth: 'md',
|
|
23
|
+
borderStyle: 'solid',
|
|
24
|
+
borderColor: 'structure.default',
|
|
25
|
+
};
|
|
26
|
+
// Surface and focus/invalid states for anything the user types into
|
|
27
|
+
const fieldSurface = {
|
|
28
|
+
color: 'text.standard',
|
|
29
|
+
backgroundColor: 'inset',
|
|
30
|
+
transition: 'colors',
|
|
31
|
+
_focus: {
|
|
32
|
+
outline: 'none',
|
|
33
|
+
borderColor: 'info.main',
|
|
34
|
+
boxShadow: '0 0 0 2px {colors.info.main}',
|
|
35
|
+
},
|
|
36
|
+
// Keyed off `aria-invalid`, not `:invalid`, so untouched required fields don't render as errors
|
|
37
|
+
'&[aria-invalid=true]': {
|
|
38
|
+
borderColor: 'error.main',
|
|
39
|
+
_focus: {
|
|
40
|
+
borderColor: 'error.main',
|
|
41
|
+
boxShadow: '0 0 0 2px {colors.error.main}',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
const disabledState = {
|
|
46
|
+
_disabled: {
|
|
47
|
+
opacity: '0.5',
|
|
48
|
+
cursor: 'not-allowed',
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
/** Icon size to pair with each `InputSize`. */
|
|
52
|
+
export const inputIconSizes = {
|
|
53
|
+
sm: 8,
|
|
54
|
+
md: 12,
|
|
55
|
+
lg: 16,
|
|
56
|
+
};
|
|
57
|
+
export const baseInputStyles = cva({
|
|
58
|
+
base: {
|
|
59
|
+
...border,
|
|
60
|
+
...fieldSurface,
|
|
61
|
+
...disabledState,
|
|
62
|
+
borderRadius: 'md',
|
|
63
|
+
},
|
|
64
|
+
variants: {
|
|
65
|
+
alt: {
|
|
66
|
+
true: {
|
|
67
|
+
width: 'auto',
|
|
68
|
+
},
|
|
69
|
+
false: {
|
|
70
|
+
width: '100%',
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
size: sizeVariants,
|
|
74
|
+
},
|
|
75
|
+
defaultVariants: {
|
|
76
|
+
alt: false,
|
|
77
|
+
size: 'md',
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
/** Sizing for pieces of composite controls, like the `NumberInput` stepper buttons and center field. */
|
|
81
|
+
export const inputSegmentStyles = cva({
|
|
82
|
+
base: {
|
|
83
|
+
...border,
|
|
84
|
+
...disabledState,
|
|
85
|
+
},
|
|
86
|
+
variants: {
|
|
87
|
+
// `true` for the segment the user types into
|
|
88
|
+
field: {
|
|
89
|
+
true: {
|
|
90
|
+
...fieldSurface,
|
|
91
|
+
// Lift the focus ring above neighbouring segments
|
|
92
|
+
position: 'relative',
|
|
93
|
+
_focus: {
|
|
94
|
+
...fieldSurface._focus,
|
|
95
|
+
zIndex: 1,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
false: {},
|
|
99
|
+
},
|
|
100
|
+
size: sizeVariants,
|
|
101
|
+
},
|
|
102
|
+
defaultVariants: {
|
|
103
|
+
field: false,
|
|
104
|
+
size: 'md',
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/components/data-input/shared/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAO1C,0DAA0D;AAC1D,MAAM,YAAY,GAAG;IACpB,EAAE,EAAE;QACH,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;KACd;IACD,EAAE,EAAE;QACH,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;KACd;IACD,EAAE,EAAE;QACH,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,IAAI;KACd;CACQ,CAAC;AAEX,4DAA4D;AAC5D,MAAM,MAAM,GAAG;IACd,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,mBAAmB;CACvB,CAAC;AAEX,oEAAoE;AACpE,MAAM,YAAY,GAAG;IACpB,KAAK,EAAE,eAAe;IACtB,eAAe,EAAE,OAAO;IACxB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE;QACP,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,8BAA8B;KACzC;IACD,gGAAgG;IAChG,sBAAsB,EAAE;QACvB,WAAW,EAAE,YAAY;QACzB,MAAM,EAAE;YACP,WAAW,EAAE,YAAY;YACzB,SAAS,EAAE,+BAA+B;SAC1C;KACD;CACQ,CAAC;AAEX,MAAM,aAAa,GAAG;IACrB,SAAS,EAAE;QACV,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,aAAa;KACrB;CACQ,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAiC;IAC3D,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACN,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;IAClC,IAAI,EAAE;QACL,GAAG,MAAM;QACT,GAAG,YAAY;QACf,GAAG,aAAa;QAChB,YAAY,EAAE,IAAI;KAClB;IACD,QAAQ,EAAE;QACT,GAAG,EAAE;YACJ,IAAI,EAAE;gBACL,KAAK,EAAE,MAAM;aACb;YACD,KAAK,EAAE;gBACN,KAAK,EAAE,MAAM;aACb;SACD;QACD,IAAI,EAAE,YAAY;KAClB;IACD,eAAe,EAAE;QAChB,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,IAAI;KACV;CACD,CAAC,CAAC;AAEH,wGAAwG;AACxG,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;IACrC,IAAI,EAAE;QACL,GAAG,MAAM;QACT,GAAG,aAAa;KAChB;IACD,QAAQ,EAAE;QACT,6CAA6C;QAC7C,KAAK,EAAE;YACN,IAAI,EAAE;gBACL,GAAG,YAAY;gBACf,kDAAkD;gBAClD,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE;oBACP,GAAG,YAAY,CAAC,MAAM;oBACtB,MAAM,EAAE,CAAC;iBACT;aACD;YACD,KAAK,EAAE,EAAE;SACT;QACD,IAAI,EAAE,YAAY;KAClB;IACD,eAAe,EAAE;QAChB,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,IAAI;KACV;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { InputElement } from './input-props.types';
|
|
3
|
+
/** Props for `useFieldError`. */
|
|
4
|
+
type UseFieldErrorProps<T extends InputElement> = {
|
|
5
|
+
/** Id of the control; the message id is derived from it */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Consumer-supplied error; takes precedence over the native validation message */
|
|
8
|
+
error?: string;
|
|
9
|
+
/** Current value; refreshes a visible native message when the value changes without user input, like stepper buttons */
|
|
10
|
+
value?: unknown;
|
|
11
|
+
/** Ref to share the validated element with other hooks; one is created when omitted */
|
|
12
|
+
elementRef?: RefObject<T | null>;
|
|
13
|
+
/** Element to focus when validation fails, for controls whose native element is hidden. Defaults to the validated element */
|
|
14
|
+
focusRef?: RefObject<HTMLElement | null>;
|
|
15
|
+
};
|
|
16
|
+
/** Id of the message element linked to a control via `aria-describedby`. */
|
|
17
|
+
export declare const getErrorId: (id: string) => string;
|
|
18
|
+
/**
|
|
19
|
+
* Replaces the browser validation bubble with an inline message.
|
|
20
|
+
* Mirrors `error` into native validity via `setCustomValidity`, captures native messages on `invalid`,
|
|
21
|
+
* clears them on form `reset`, and wires `aria-invalid` and `aria-describedby` to the message rendered by `InputWrapper`.
|
|
22
|
+
*
|
|
23
|
+
* `validationProps` go on the native element, `ariaProps` on the element the user focuses.
|
|
24
|
+
* `fieldProps` combines both for controls where those are the same element.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const { ref, message, fieldProps } = useFieldError({ id, error, value });
|
|
28
|
+
*
|
|
29
|
+
* <InputWrapper id={id} error={message} size={size}>
|
|
30
|
+
* <input ref={ref} id={id} {...fieldProps} />
|
|
31
|
+
* </InputWrapper>
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Hidden native element with a custom trigger
|
|
35
|
+
* const { ref, validationProps, ariaProps } = useFieldError<HTMLSelectElement>({ id, error, focusRef: triggerRef });
|
|
36
|
+
*
|
|
37
|
+
* <button ref={triggerRef} {...ariaProps} />
|
|
38
|
+
* <select ref={ref} {...validationProps} />
|
|
39
|
+
*/
|
|
40
|
+
export declare const useFieldError: <T extends InputElement = HTMLInputElement>({ id, error, value, elementRef: externalRef, focusRef, }: UseFieldErrorProps<T>) => {
|
|
41
|
+
ref: (node: T | null) => void;
|
|
42
|
+
message: string | null;
|
|
43
|
+
validationProps: {
|
|
44
|
+
onInvalid: (e: React.FormEvent<T>) => void;
|
|
45
|
+
onInput: () => void;
|
|
46
|
+
};
|
|
47
|
+
ariaProps: {
|
|
48
|
+
'aria-invalid': boolean | undefined;
|
|
49
|
+
'aria-describedby': string | undefined;
|
|
50
|
+
};
|
|
51
|
+
fieldProps: {
|
|
52
|
+
'aria-invalid': boolean | undefined;
|
|
53
|
+
'aria-describedby': string | undefined;
|
|
54
|
+
onInvalid: (e: React.FormEvent<T>) => void;
|
|
55
|
+
onInput: () => void;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
|
+
/** Id of the message element linked to a control via `aria-describedby`. */
|
|
4
|
+
export const getErrorId = (id) => `${id}-error`;
|
|
5
|
+
/**
|
|
6
|
+
* Replaces the browser validation bubble with an inline message.
|
|
7
|
+
* Mirrors `error` into native validity via `setCustomValidity`, captures native messages on `invalid`,
|
|
8
|
+
* clears them on form `reset`, and wires `aria-invalid` and `aria-describedby` to the message rendered by `InputWrapper`.
|
|
9
|
+
*
|
|
10
|
+
* `validationProps` go on the native element, `ariaProps` on the element the user focuses.
|
|
11
|
+
* `fieldProps` combines both for controls where those are the same element.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const { ref, message, fieldProps } = useFieldError({ id, error, value });
|
|
15
|
+
*
|
|
16
|
+
* <InputWrapper id={id} error={message} size={size}>
|
|
17
|
+
* <input ref={ref} id={id} {...fieldProps} />
|
|
18
|
+
* </InputWrapper>
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Hidden native element with a custom trigger
|
|
22
|
+
* const { ref, validationProps, ariaProps } = useFieldError<HTMLSelectElement>({ id, error, focusRef: triggerRef });
|
|
23
|
+
*
|
|
24
|
+
* <button ref={triggerRef} {...ariaProps} />
|
|
25
|
+
* <select ref={ref} {...validationProps} />
|
|
26
|
+
*/
|
|
27
|
+
export const useFieldError = ({ id, error, value, elementRef: externalRef, focusRef, }) => {
|
|
28
|
+
const internalRef = useRef(null);
|
|
29
|
+
const elementRef = externalRef ?? internalRef;
|
|
30
|
+
const [nativeMessage, setNativeMessage] = useState(null);
|
|
31
|
+
// Mirror `error` into native validity so the form refuses to submit while it is set.
|
|
32
|
+
// A callback ref re-applies it when `error` changes or the element is swapped
|
|
33
|
+
const ref = useCallback((node) => {
|
|
34
|
+
elementRef.current = node;
|
|
35
|
+
node?.setCustomValidity(error ?? '');
|
|
36
|
+
}, [error, elementRef]);
|
|
37
|
+
// Refresh a visible native message; clears once the field is valid
|
|
38
|
+
const refresh = useCallback(() => {
|
|
39
|
+
setNativeMessage((prev) => prev === null ? null : elementRef.current?.validationMessage || null);
|
|
40
|
+
}, [elementRef]);
|
|
41
|
+
// Catch changes that don't fire `input`, like programmatic value updates or `error` being cleared
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
refresh();
|
|
44
|
+
}, [value, error, refresh]);
|
|
45
|
+
// A form reset clears native messages, matching browser behaviour
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
const form = elementRef.current?.form;
|
|
48
|
+
if (!form)
|
|
49
|
+
return;
|
|
50
|
+
const handleReset = () => setNativeMessage(null);
|
|
51
|
+
form.addEventListener('reset', handleReset);
|
|
52
|
+
return () => form.removeEventListener('reset', handleReset);
|
|
53
|
+
}, [elementRef]);
|
|
54
|
+
const handleInvalid = (e) => {
|
|
55
|
+
// Suppress the browser bubble; the message renders inline instead
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
setNativeMessage(e.currentTarget.validationMessage);
|
|
58
|
+
// Cancelling `invalid` also cancels the browser's focus on the first invalid field, so restore it
|
|
59
|
+
const form = e.currentTarget.form;
|
|
60
|
+
const firstInvalid = form?.querySelector('input:invalid, select:invalid, textarea:invalid');
|
|
61
|
+
if (firstInvalid === e.currentTarget) {
|
|
62
|
+
(focusRef?.current ?? e.currentTarget).focus();
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const message = error || nativeMessage || null;
|
|
66
|
+
const validationProps = {
|
|
67
|
+
onInvalid: handleInvalid,
|
|
68
|
+
onInput: refresh,
|
|
69
|
+
};
|
|
70
|
+
const ariaProps = {
|
|
71
|
+
'aria-invalid': message ? true : undefined,
|
|
72
|
+
'aria-describedby': message ? getErrorId(id) : undefined,
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
ref,
|
|
76
|
+
message,
|
|
77
|
+
validationProps,
|
|
78
|
+
ariaProps,
|
|
79
|
+
fieldProps: { ...validationProps, ...ariaProps },
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=use-field-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-field-error.js","sourceRoot":"","sources":["../../../../src/components/data-input/shared/use-field-error.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAa,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAiB5E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAA4C,EACxE,EAAE,EACF,KAAK,EACL,KAAK,EACL,UAAU,EAAE,WAAW,EACvB,QAAQ,GACe,EAAE,EAAE;IAC3B,MAAM,WAAW,GAAG,MAAM,CAAW,IAAI,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,WAAW,IAAI,WAAW,CAAC;IAC9C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExE,qFAAqF;IACrF,8EAA8E;IAC9E,MAAM,GAAG,GAAG,WAAW,CACtB,CAAC,IAAc,EAAE,EAAE;QAClB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,IAAI,EAAE,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC,EACD,CAAC,KAAK,EAAE,UAAU,CAAC,CACnB,CAAC;IAEF,mEAAmE;IACnE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,IAAI,IAAI,CACpE,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,kGAAkG;IAClG,SAAS,CAAC,GAAG,EAAE;QACd,OAAO,EAAE,CAAC;IACX,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5B,kEAAkE;IAClE,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,aAAa,GAAG,CAAC,CAAqB,EAAE,EAAE;QAC/C,kEAAkE;QAClE,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QAEpD,kGAAkG;QAClG,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,EAAE,aAAa,CAAC,iDAAiD,CAAC,CAAC;QAC5F,IAAI,YAAY,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;YACtC,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;QAChD,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,IAAI,aAAa,IAAI,IAAI,CAAC;IAE/C,MAAM,eAAe,GAAG;QACvB,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,OAAO;KAChB,CAAC;IAEF,MAAM,SAAS,GAAG;QACjB,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC1C,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACxD,CAAC;IAEF,OAAO;QACN,GAAG;QACH,OAAO;QACP,eAAe;QACf,SAAS;QACT,UAAU,EAAE,EAAE,GAAG,eAAe,EAAE,GAAG,SAAS,EAAE;KAChD,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a control's `id`: the explicit `id`, then `name`, then a generated id.
|
|
3
|
+
* Keeps label, error message, and ARIA wiring working for unnamed inputs like search bars.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* const id = useInputId(idProp, name);
|
|
7
|
+
*/
|
|
8
|
+
export declare const useInputId: (id?: string, name?: string) => string;
|