thread-ui 0.16.5 → 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 +4 -1
- package/dist/components/{form-elements → data-input}/number-input/number-input.js +47 -52
- 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/{form-elements → data-input/shared}/input-props.types.d.ts +11 -5
- 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.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 -9
- package/dist/components/form-elements/text-input/text-input.js +0 -20
- 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,95 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useId, useMemo } from 'react';
|
|
4
|
+
import { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, useSensors, } from '@dnd-kit/core';
|
|
5
|
+
import { arrayMove, SortableContext, sortableKeyboardCoordinates } from '@dnd-kit/sortable';
|
|
6
|
+
import { css } from '../../../../styled-system/css';
|
|
7
|
+
import { InputWrapper } from '../../shared/input-wrapper';
|
|
8
|
+
import { SortableItem, applyOrder, createListAnnouncements, defaultGetItemLabel, layoutRecipe, layoutStrategies, screenReaderInstructions, } from '../shared';
|
|
9
|
+
import { useLatestRef } from '../../../../internal';
|
|
10
|
+
const styles = {
|
|
11
|
+
list: css({
|
|
12
|
+
width: '100%',
|
|
13
|
+
}),
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Controlled list input whose items can be reordered by pointer, touch, or keyboard. Each item renders through `ItemComponent`, which receives a default `dragHandle` or `dragHandleProps` to make any element the handle. Set `name` to submit the order with a form.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const [tasks, setTasks] = useState(initialTasks);
|
|
20
|
+
*
|
|
21
|
+
* <ReorderableList
|
|
22
|
+
* name="taskOrder"
|
|
23
|
+
* title="Tasks"
|
|
24
|
+
* value={tasks}
|
|
25
|
+
* orderProperty="order"
|
|
26
|
+
* ItemComponent={TaskRow}
|
|
27
|
+
* onChange={setTasks}
|
|
28
|
+
* getItemLabel={(task) => task.title}
|
|
29
|
+
* />
|
|
30
|
+
*/
|
|
31
|
+
export const ReorderableList = ({ value, orderProperty, ItemComponent, onChange, getItemLabel = defaultGetItemLabel, layout = 'vertical', ItemsWrapper, id: idProp, name, formValue = 'inputs', title, size = 'md', divider, secondaryContent, }) => {
|
|
32
|
+
// Resolve Id
|
|
33
|
+
const generatedId = useId();
|
|
34
|
+
const inputId = idProp ?? name ?? generatedId;
|
|
35
|
+
// Latest value, so delayed item callbacks never act on a stale list
|
|
36
|
+
const valueRef = useLatestRef(value);
|
|
37
|
+
// Configure sensors for mouse, touch, and keyboard interactions
|
|
38
|
+
const sensors = useSensors(useSensor(PointerSensor, {
|
|
39
|
+
activationConstraint: { distance: 4 },
|
|
40
|
+
}), useSensor(KeyboardSensor, {
|
|
41
|
+
coordinateGetter: sortableKeyboardCoordinates,
|
|
42
|
+
}));
|
|
43
|
+
// Item IDs in display order
|
|
44
|
+
const ids = useMemo(() => value.map((item) => item.id), [value]);
|
|
45
|
+
// Screen reader announcements
|
|
46
|
+
const announcements = useMemo(() => createListAnnouncements(ids, (key) => {
|
|
47
|
+
const index = ids.indexOf(key);
|
|
48
|
+
return index === -1 ? 'Item' : getItemLabel(value[index], index);
|
|
49
|
+
}), [ids, value, getItemLabel]);
|
|
50
|
+
// Handle drag end with memoized callback
|
|
51
|
+
const handleDragEnd = useCallback((event) => {
|
|
52
|
+
const { active, over } = event;
|
|
53
|
+
if (!over || active.id === over.id)
|
|
54
|
+
return;
|
|
55
|
+
// Find current indices
|
|
56
|
+
const oldIndex = ids.indexOf(active.id);
|
|
57
|
+
const newIndex = ids.indexOf(over.id);
|
|
58
|
+
if (oldIndex === -1 || newIndex === -1)
|
|
59
|
+
return;
|
|
60
|
+
// Reorder Array
|
|
61
|
+
const newItems = arrayMove(value, oldIndex, newIndex);
|
|
62
|
+
// Update OrderProperty on each Item
|
|
63
|
+
const updatedItems = applyOrder(newItems, orderProperty);
|
|
64
|
+
// Update Data
|
|
65
|
+
onChange(updatedItems);
|
|
66
|
+
}, [value, ids, onChange, orderProperty]);
|
|
67
|
+
// Handle Item Change with memoized callback
|
|
68
|
+
const handleItemChange = useCallback((updatedItem) => {
|
|
69
|
+
const current = valueRef.current;
|
|
70
|
+
// Find the item index in the current list
|
|
71
|
+
const itemIndex = current.findIndex((item) => item.id === updatedItem.id);
|
|
72
|
+
if (itemIndex === -1)
|
|
73
|
+
return;
|
|
74
|
+
// Create a new array with the updated item
|
|
75
|
+
const updatedItems = [...current];
|
|
76
|
+
updatedItems[itemIndex] = updatedItem;
|
|
77
|
+
// Notify parent component
|
|
78
|
+
onChange(updatedItems);
|
|
79
|
+
}, [onChange, valueRef]);
|
|
80
|
+
// Handle Item Remove with memoized callback
|
|
81
|
+
const handleItemRemove = useCallback((itemId) => {
|
|
82
|
+
const current = valueRef.current;
|
|
83
|
+
// Drop the item
|
|
84
|
+
const remaining = current.filter((item) => item.id !== itemId);
|
|
85
|
+
if (remaining.length === current.length)
|
|
86
|
+
return;
|
|
87
|
+
// Re-index and notify parent component
|
|
88
|
+
onChange(applyOrder(remaining, orderProperty));
|
|
89
|
+
}, [onChange, orderProperty, valueRef]);
|
|
90
|
+
const items = value.map((item, index) => (_jsx(SortableItem, { sortableId: item.id, item: item, label: getItemLabel(item, index), ItemComponent: ItemComponent, onItemChange: handleItemChange, onItemRemove: handleItemRemove }, item.id)));
|
|
91
|
+
return (_jsx(InputWrapper, { id: inputId, title: title, size: size, divider: divider, secondaryContent: secondaryContent, children: _jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, accessibility: { announcements, screenReaderInstructions }, children: _jsx(SortableContext, { items: ids, strategy: layoutStrategies[layout], children: _jsxs("div", { id: inputId, role: "group", "aria-labelledby": title ? `${inputId}-label` : undefined, className: styles.list, children: [ItemsWrapper ? (_jsx(ItemsWrapper, { children: items })) : (_jsx("div", { className: layoutRecipe({ layout }), children: items })), name &&
|
|
92
|
+
formValue === 'inputs' &&
|
|
93
|
+
ids.map((id) => (_jsx("input", { type: "hidden", name: name, value: id }, id))), name && formValue === 'json' && (_jsx("input", { type: "hidden", name: name, value: JSON.stringify(ids) }))] }) }) }) }));
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=reorderable-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reorderable-list.js","sourceRoot":"","sources":["../../../../../src/components/data-input/reorderable/reorderable-list/reorderable-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Prettify } from '../../../../types';
|
|
2
|
+
import type { BaseInputProps, ControlledValueProps } from '../../shared/input-props.types';
|
|
3
|
+
import type { FormLabelProps } from '../../shared/form-label';
|
|
4
|
+
import type { FormValueMode, NumericKeys, ReorderableItem, ReorderableItemComponent, ReorderableLayout, ReorderableWrapper } from '../shared';
|
|
5
|
+
/** Props for a `ReorderableList`, a controlled input whose value is an ordered list of items. */
|
|
6
|
+
export type ReorderableListProps<T extends ReorderableItem> = Prettify<{
|
|
7
|
+
/** Items to render, in display order. */
|
|
8
|
+
value: ControlledValueProps<T[], T[]>['value'];
|
|
9
|
+
/** Number property rewritten with each item's new index after a reorder. Omit to rely on array order alone. */
|
|
10
|
+
orderProperty?: NumericKeys<T>;
|
|
11
|
+
/** Component rendered for each item. Receives the `item`, a default `dragHandle`, spreadable `dragHandleProps`, `onItemChange`, `onItemRemove`, and `isDragging`. */
|
|
12
|
+
ItemComponent: ReorderableItemComponent<T>;
|
|
13
|
+
/** Fires with the full list after a reorder or an item update. */
|
|
14
|
+
onChange: ControlledValueProps<T[], T[]>['onChange'];
|
|
15
|
+
/**
|
|
16
|
+
* Human-readable name for an item, used in screen reader announcements and the drag handle's `aria-label`.
|
|
17
|
+
* @default `'Item {n}'`
|
|
18
|
+
*/
|
|
19
|
+
getItemLabel?: (item: T, index: number) => string;
|
|
20
|
+
/** Arrangement of items; also selects the sorting strategy @default `'vertical'` */
|
|
21
|
+
layout?: ReorderableLayout;
|
|
22
|
+
/** Lays out the rendered items. Replaces the default `layout` styles, so pass a `layout` that matches it. */
|
|
23
|
+
ItemsWrapper?: ReorderableWrapper;
|
|
24
|
+
/** Form field name. `formValue` sets how the order is submitted. */
|
|
25
|
+
name?: BaseInputProps['name'];
|
|
26
|
+
/** Submission shape when `name` is set. `'inputs'`: `formData.getAll(name)` returns ids; `'json'`: read with `parseReorderableValue` @default `'inputs'` */
|
|
27
|
+
formValue?: FormValueMode;
|
|
28
|
+
} & Pick<BaseInputProps, 'id' | 'title' | 'size' | 'divider'> & Pick<FormLabelProps, 'secondaryContent'>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reorderable-list.types.js","sourceRoot":"","sources":["../../../../../src/components/data-input/reorderable/reorderable-list/reorderable-list.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/reorderable-list/sortable-item/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReorderableItem, SortableItemProps } from './sortable-item.types';
|
|
2
|
+
/**
|
|
3
|
+
* Internal wrapper that makes a single `ReorderableList` item sortable and hands the consumer's `ItemComponent` a pre-wired drag handle.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* <SortableItem item={task} label={task.title} ItemComponent={TaskRow} onItemChange={handleItemChange} />
|
|
7
|
+
*/
|
|
8
|
+
export declare const SortableItem: <T extends ReorderableItem>({ item, label, ItemComponent, onItemChange, onItemRemove, }: SortableItemProps<T>) => import("react/jsx-runtime").JSX.Element;
|
package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useSortable } from '@dnd-kit/sortable';
|
|
4
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
5
|
+
import { cva } from '../../../../../styled-system/css';
|
|
6
|
+
import { Icon } from '../../../../../components/ui';
|
|
7
|
+
const itemRecipe = cva({
|
|
8
|
+
base: {
|
|
9
|
+
position: 'relative',
|
|
10
|
+
},
|
|
11
|
+
variants: {
|
|
12
|
+
dragging: {
|
|
13
|
+
true: { zIndex: 1 },
|
|
14
|
+
false: {},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
const dragHandleRecipe = cva({
|
|
19
|
+
base: {
|
|
20
|
+
display: 'inline-flex',
|
|
21
|
+
alignItems: 'center',
|
|
22
|
+
justifyContent: 'center',
|
|
23
|
+
flexShrink: 0,
|
|
24
|
+
padding: '1',
|
|
25
|
+
borderRadius: 'sm',
|
|
26
|
+
color: 'text.standard',
|
|
27
|
+
background: 'transparent',
|
|
28
|
+
border: 'none',
|
|
29
|
+
cursor: 'grab',
|
|
30
|
+
touchAction: 'none',
|
|
31
|
+
_hover: {
|
|
32
|
+
backgroundColor: 'hover',
|
|
33
|
+
},
|
|
34
|
+
_focusVisible: {
|
|
35
|
+
outlineStyle: 'solid',
|
|
36
|
+
outlineWidth: '2px',
|
|
37
|
+
outlineColor: 'text.standard',
|
|
38
|
+
outlineOffset: '0.5',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
variants: {
|
|
42
|
+
dragging: {
|
|
43
|
+
true: { cursor: 'grabbing', color: 'text.secondary' },
|
|
44
|
+
false: {},
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Internal wrapper that makes a single `ReorderableList` item sortable and hands the consumer's `ItemComponent` a pre-wired drag handle.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* <SortableItem item={task} label={task.title} ItemComponent={TaskRow} onItemChange={handleItemChange} />
|
|
53
|
+
*/
|
|
54
|
+
export const SortableItem = ({ item, label, ItemComponent, onItemChange, onItemRemove, }) => {
|
|
55
|
+
// Init DnD Kit Functionality
|
|
56
|
+
const { attributes, listeners, setNodeRef, setActivatorNodeRef, transform, transition, isDragging, } = useSortable({ id: item.id });
|
|
57
|
+
// DnD Kit Hover/Drag Styling
|
|
58
|
+
const style = {
|
|
59
|
+
transform: CSS.Translate.toString(transform),
|
|
60
|
+
transition,
|
|
61
|
+
};
|
|
62
|
+
// Drag Handle
|
|
63
|
+
const dragHandle = (_jsx("button", { type: "button", ref: setActivatorNodeRef, className: dragHandleRecipe({ dragging: isDragging }), "aria-label": `Reorder ${label}`, ...attributes, ...listeners, children: _jsx(Icon, { name: "DotsSixVertical", size: 16 }) }));
|
|
64
|
+
return (_jsx("div", { ref: setNodeRef, style: style, className: itemRecipe({ dragging: isDragging }), children: _jsx(ItemComponent, { item: item, dragHandle: dragHandle, onItemChange: onItemChange, onItemRemove: () => onItemRemove(item.id), isDragging: isDragging }) }));
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=sortable-item.js.map
|
package/dist/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortable-item.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,UAAU,GAAG,GAAG,CAAC;IACtB,IAAI,EAAE;QACL,QAAQ,EAAE,UAAU;KACpB;IACD,QAAQ,EAAE;QACT,QAAQ,EAAE;YACT,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACnB,KAAK,EAAE,EAAE;SACT;KACD;CACD,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,GAAG,CAAC;IAC5B,IAAI,EAAE;QACL,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,GAAG;QACZ,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,eAAe;QACtB,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,MAAM;QACnB,MAAM,EAAE;YACP,eAAe,EAAE,OAAO;SACxB;QACD,aAAa,EAAE;YACd,YAAY,EAAE,OAAO;YACrB,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,eAAe;YAC7B,aAAa,EAAE,KAAK;SACpB;KACD;IACD,QAAQ,EAAE;QACT,QAAQ,EAAE;YACT,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACrD,KAAK,EAAE,EAAE;SACT;KACD;CACD,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAA4B,EACvD,IAAI,EACJ,KAAK,EACL,aAAa,EACb,YAAY,EACZ,YAAY,GACU,EAAE,EAAE;IAC1B,6BAA6B;IAC7B,MAAM,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,UAAU,GACV,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjC,6BAA6B;IAC7B,MAAM,KAAK,GAAG;QACb,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5C,UAAU;KACV,CAAC;IAEF,cAAc;IACd,MAAM,UAAU,GAAG,CAClB,iBACC,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,gBACzC,WAAW,KAAK,EAAE,KAC1B,UAAU,KACV,SAAS,YAEb,KAAC,IAAI,IAAC,IAAI,EAAC,iBAAiB,EAAC,IAAI,EAAE,EAAE,GAAI,GACjC,CACT,CAAC;IAEF,OAAO,CACN,cAAK,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,YAClF,KAAC,aAAa,IACb,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EACzC,UAAU,EAAE,UAAU,GACrB,GACG,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
2
|
+
/** Minimum shape required for items rendered in a `ReorderableList`. */
|
|
3
|
+
export type ReorderableItem = {
|
|
4
|
+
id: string | number;
|
|
5
|
+
};
|
|
6
|
+
/** Callback an item uses to report its own updated data. */
|
|
7
|
+
export type ReorderableItemChangeHandler<T> = (item: T) => void;
|
|
8
|
+
/** Props passed to the consumer-provided `ItemComponent`. */
|
|
9
|
+
export type ReorderableItemProps<T> = {
|
|
10
|
+
item: T;
|
|
11
|
+
/** Pre-wired drag handle. Render it wherever the item should be grabbed. */
|
|
12
|
+
dragHandle: ReactNode;
|
|
13
|
+
/** Report changes to this item back to the list. */
|
|
14
|
+
onItemChange: ReorderableItemChangeHandler<T>;
|
|
15
|
+
/** Remove this item from the list. Remaining items are re-indexed via `orderProperty`. */
|
|
16
|
+
onItemRemove: () => void;
|
|
17
|
+
/** `true` while this item is being dragged. */
|
|
18
|
+
isDragging: boolean;
|
|
19
|
+
};
|
|
20
|
+
/** Component used to render each item in a `ReorderableList`. */
|
|
21
|
+
export type ReorderableItemComponent<T> = ComponentType<ReorderableItemProps<T>>;
|
|
22
|
+
/** Props for the internal `SortableItem` wrapper. */
|
|
23
|
+
export type SortableItemProps<T extends ReorderableItem> = {
|
|
24
|
+
item: T;
|
|
25
|
+
/** Human-readable name used in the drag handle's `aria-label`. */
|
|
26
|
+
label: string;
|
|
27
|
+
ItemComponent: ReorderableItemComponent<T>;
|
|
28
|
+
onItemChange: ReorderableItemChangeHandler<T>;
|
|
29
|
+
/** Remove an item from the list by `id`. */
|
|
30
|
+
onItemRemove: (id: ReorderableItem['id']) => void;
|
|
31
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortable-item.types.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/reorderable-list/sortable-item/sortable-item.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core';
|
|
2
|
+
import type { DragHandleProps } from '../types/reorderable.types';
|
|
3
|
+
/** Input for `createDragHandleProps`, taken from `useSortable` output. */
|
|
4
|
+
type CreateDragHandlePropsInput = {
|
|
5
|
+
attributes: DraggableAttributes;
|
|
6
|
+
listeners: DraggableSyntheticListeners;
|
|
7
|
+
setActivatorNodeRef: (element: HTMLElement | null) => void;
|
|
8
|
+
/** Human-readable name; the handle's `aria-label` becomes `Reorder {label}` */
|
|
9
|
+
label: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const createDragHandleProps: ({ attributes, listeners, setActivatorNodeRef, label, }: CreateDragHandlePropsInput) => DragHandleProps;
|
|
12
|
+
/** Props for the default `DragHandle` button. */
|
|
13
|
+
type DragHandleComponentProps = {
|
|
14
|
+
dragHandleProps: DragHandleProps;
|
|
15
|
+
isDragging: boolean;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Default drag handle button for reorderable items and groups.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <DragHandle dragHandleProps={dragHandleProps} isDragging={isDragging} />
|
|
22
|
+
*/
|
|
23
|
+
export declare const DragHandle: ({ dragHandleProps, isDragging }: DragHandleComponentProps) => import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from '../../../../../styled-system/css';
|
|
4
|
+
import { Icon } from '../../../../../components/ui';
|
|
5
|
+
const dragHandleRecipe = cva({
|
|
6
|
+
base: {
|
|
7
|
+
display: 'inline-flex',
|
|
8
|
+
alignItems: 'center',
|
|
9
|
+
justifyContent: 'center',
|
|
10
|
+
flexShrink: 0,
|
|
11
|
+
padding: '1',
|
|
12
|
+
borderRadius: 'sm',
|
|
13
|
+
color: 'text.standard',
|
|
14
|
+
background: 'transparent',
|
|
15
|
+
border: 'none',
|
|
16
|
+
cursor: 'grab',
|
|
17
|
+
_hover: {
|
|
18
|
+
backgroundColor: 'hover',
|
|
19
|
+
},
|
|
20
|
+
_focusVisible: {
|
|
21
|
+
outlineStyle: 'solid',
|
|
22
|
+
outlineWidth: '2px',
|
|
23
|
+
outlineColor: 'text.standard',
|
|
24
|
+
outlineOffset: '0.5',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
variants: {
|
|
28
|
+
dragging: {
|
|
29
|
+
true: { cursor: 'grabbing', color: 'text.secondary', backgroundColor: 'active' },
|
|
30
|
+
false: {},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
// Listener keys match the pointer and keyboard sensors registered by the reorderable components
|
|
35
|
+
export const createDragHandleProps = ({ attributes, listeners, setActivatorNodeRef, label, }) => ({
|
|
36
|
+
...attributes,
|
|
37
|
+
onPointerDown: listeners?.onPointerDown,
|
|
38
|
+
onKeyDown: listeners?.onKeyDown,
|
|
39
|
+
ref: setActivatorNodeRef,
|
|
40
|
+
'aria-label': `Reorder ${label}`,
|
|
41
|
+
style: { touchAction: 'none' },
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Default drag handle button for reorderable items and groups.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* <DragHandle dragHandleProps={dragHandleProps} isDragging={isDragging} />
|
|
48
|
+
*/
|
|
49
|
+
export const DragHandle = ({ dragHandleProps, isDragging }) => (_jsx("button", { type: "button", className: dragHandleRecipe({ dragging: isDragging }), ...dragHandleProps, children: _jsx(Icon, { name: "DotsSixVertical", size: 16 }) }));
|
|
50
|
+
//# sourceMappingURL=drag-handle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-handle.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/shared/components/drag-handle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,MAAM,gBAAgB,GAAG,GAAG,CAAC;IAC5B,IAAI,EAAE;QACL,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,GAAG;QACZ,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,eAAe;QACtB,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,MAAM,EAAE;YACP,eAAe,EAAE,OAAO;SACxB;QACD,aAAa,EAAE;YACd,YAAY,EAAE,OAAO;YACrB,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,eAAe;YAC7B,aAAa,EAAE,KAAK;SACpB;KACD;IACD,QAAQ,EAAE;QACT,QAAQ,EAAE;YACT,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE;YAChF,KAAK,EAAE,EAAE;SACT;KACD;CACD,CAAC,CAAC;AAWH,gGAAgG;AAChG,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACrC,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,KAAK,GACuB,EAAmB,EAAE,CAAC,CAAC;IACnD,GAAG,UAAU;IACb,aAAa,EAAE,SAAS,EAAE,aAA6D;IACvF,SAAS,EAAE,SAAS,EAAE,SAA0D;IAChF,GAAG,EAAE,mBAAmB;IACxB,YAAY,EAAE,WAAW,KAAK,EAAE;IAChC,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;CAC9B,CAAC,CAAC;AAQH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,eAAe,EAAE,UAAU,EAA4B,EAAE,EAAE,CAAC,CACxF,iBACC,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,KACjD,eAAe,YAEnB,KAAC,IAAI,IAAC,IAAI,EAAC,iBAAiB,EAAC,IAAI,EAAE,EAAE,GAAI,GACjC,CACT,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReorderableItem } from '../types/reorderable.types';
|
|
2
|
+
import type { SortableItemProps } from '../types/sortable-item.types';
|
|
3
|
+
/**
|
|
4
|
+
* Internal wrapper that makes a single item sortable and hands the consumer's `ItemComponent` a default `dragHandle` and spreadable `dragHandleProps`.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* <SortableItem sortableId={task.id} item={task} label={task.title} ItemComponent={TaskRow} onItemChange={handleItemChange} onItemRemove={handleItemRemove} />
|
|
8
|
+
*/
|
|
9
|
+
export declare const SortableItem: <T extends ReorderableItem>({ item, label, ItemComponent, onItemChange, onItemRemove, sortableId, }: SortableItemProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useSortable } from '@dnd-kit/sortable';
|
|
4
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
5
|
+
import { cva } from '../../../../../styled-system/css';
|
|
6
|
+
import { DragHandle, createDragHandleProps } from './drag-handle';
|
|
7
|
+
const itemRecipe = cva({
|
|
8
|
+
base: {
|
|
9
|
+
position: 'relative',
|
|
10
|
+
},
|
|
11
|
+
variants: {
|
|
12
|
+
dragging: {
|
|
13
|
+
true: { zIndex: 1 },
|
|
14
|
+
false: {},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Internal wrapper that makes a single item sortable and hands the consumer's `ItemComponent` a default `dragHandle` and spreadable `dragHandleProps`.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* <SortableItem sortableId={task.id} item={task} label={task.title} ItemComponent={TaskRow} onItemChange={handleItemChange} onItemRemove={handleItemRemove} />
|
|
23
|
+
*/
|
|
24
|
+
export const SortableItem = ({ item, label, ItemComponent, onItemChange, onItemRemove, sortableId, }) => {
|
|
25
|
+
// Init DnD Kit Functionality
|
|
26
|
+
const { attributes, listeners, setNodeRef, setActivatorNodeRef, transform, transition, isDragging, } = useSortable({ id: sortableId });
|
|
27
|
+
// DnD Kit Hover/Drag Styling
|
|
28
|
+
const style = {
|
|
29
|
+
transform: CSS.Translate.toString(transform),
|
|
30
|
+
transition,
|
|
31
|
+
};
|
|
32
|
+
// Drag Handle
|
|
33
|
+
const dragHandleProps = createDragHandleProps({
|
|
34
|
+
attributes,
|
|
35
|
+
listeners,
|
|
36
|
+
setActivatorNodeRef,
|
|
37
|
+
label,
|
|
38
|
+
});
|
|
39
|
+
const dragHandle = _jsx(DragHandle, { dragHandleProps: dragHandleProps, isDragging: isDragging });
|
|
40
|
+
return (_jsx("div", { ref: setNodeRef, style: style, className: itemRecipe({ dragging: isDragging }), children: _jsx(ItemComponent, { item: item, dragHandle: dragHandle, dragHandleProps: dragHandleProps, onItemChange: onItemChange, onItemRemove: () => onItemRemove(item.id), isDragging: isDragging }) }));
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=sortable-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortable-item.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/shared/components/sortable-item.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAIlE,MAAM,UAAU,GAAG,GAAG,CAAC;IACtB,IAAI,EAAE;QACL,QAAQ,EAAE,UAAU;KACpB;IACD,QAAQ,EAAE;QACT,QAAQ,EAAE;YACT,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACnB,KAAK,EAAE,EAAE;SACT;KACD;CACD,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAA4B,EACvD,IAAI,EACJ,KAAK,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,GACY,EAAE,EAAE;IAC1B,6BAA6B;IAC7B,MAAM,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,UAAU,GACV,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAEpC,6BAA6B;IAC7B,MAAM,KAAK,GAAG;QACb,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5C,UAAU;KACV,CAAC;IAEF,cAAc;IACd,MAAM,eAAe,GAAG,qBAAqB,CAAC;QAC7C,UAAU;QACV,SAAS;QACT,mBAAmB;QACnB,KAAK;KACL,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,KAAC,UAAU,IAAC,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,GAAI,CAAC;IAE5F,OAAO,CACN,cAAK,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,YAClF,KAAC,aAAa,IACb,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EACzC,UAAU,EAAE,UAAU,GACrB,GACG,CACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Announcements, ScreenReaderInstructions, UniqueIdentifier } from '@dnd-kit/core';
|
|
2
|
+
export declare const screenReaderInstructions: ScreenReaderInstructions;
|
|
3
|
+
export declare const defaultGetItemLabel: (_item: unknown, index: number) => string;
|
|
4
|
+
export declare const createListAnnouncements: (ids: UniqueIdentifier[], getLabel: (id: UniqueIdentifier) => string) => Announcements;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const screenReaderInstructions = {
|
|
2
|
+
draggable: 'To pick up an item, press Space or Enter. While dragging, use the arrow keys to move it. Press Space or Enter again to drop it in its new position, or press Escape to cancel.',
|
|
3
|
+
};
|
|
4
|
+
export const defaultGetItemLabel = (_item, index) => `Item ${index + 1}`;
|
|
5
|
+
// Announcements for a single flat list, from ids in display order
|
|
6
|
+
export const createListAnnouncements = (ids, getLabel) => {
|
|
7
|
+
const total = ids.length;
|
|
8
|
+
const position = (id) => ids.indexOf(id) + 1;
|
|
9
|
+
return {
|
|
10
|
+
onDragStart: ({ active }) => `Picked up ${getLabel(active.id)}. Position ${position(active.id)} of ${total}.`,
|
|
11
|
+
onDragOver: ({ active, over }) => over
|
|
12
|
+
? `${getLabel(active.id)} moved to position ${position(over.id)} of ${total}.`
|
|
13
|
+
: `${getLabel(active.id)} is not over a valid position.`,
|
|
14
|
+
onDragEnd: ({ active, over }) => over
|
|
15
|
+
? `${getLabel(active.id)} dropped at position ${position(over.id)} of ${total}.`
|
|
16
|
+
: `${getLabel(active.id)} dropped.`,
|
|
17
|
+
onDragCancel: ({ active }) => `Reordering cancelled. ${getLabel(active.id)} returned to position ${position(active.id)} of ${total}.`,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=announcements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"announcements.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/shared/functions/announcements.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAA6B;IACjE,SAAS,EACR,gLAAgL;CACjL,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAE,KAAa,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;AAE1F,kEAAkE;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACtC,GAAuB,EACvB,QAA0C,EAC1B,EAAE;IAClB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAC,EAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAE/D,OAAO;QACN,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAC3B,aAAa,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,KAAK,GAAG;QACjF,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAChC,IAAI;YACH,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,sBAAsB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,KAAK,GAAG;YAC9E,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,gCAAgC;QAC1D,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAC/B,IAAI;YACH,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,KAAK,GAAG;YAChF,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW;QACrC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAC5B,yBAAyB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,yBAAyB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,KAAK,GAAG;KACxG,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Rewrite `orderProperty` to match array position; unchanged when omitted
|
|
2
|
+
export const applyOrder = (items, orderProperty) => orderProperty
|
|
3
|
+
? items.map((item, index) => ({
|
|
4
|
+
...item,
|
|
5
|
+
[orderProperty]: index,
|
|
6
|
+
}))
|
|
7
|
+
: items;
|
|
8
|
+
//# sourceMappingURL=apply-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-order.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/shared/functions/apply-order.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,KAAU,EAAE,aAA8B,EAAO,EAAE,CAChF,aAAa;IACZ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,GAAG,IAAI;QACP,CAAC,aAAa,CAAC,EAAE,KAAK;KACtB,CAAC,CAAC;IACJ,CAAC,CAAC,KAAK,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ReorderableItem } from '../types/reorderable.types';
|
|
2
|
+
/** How a `ReorderableList` submits its order when `name` is set. `'inputs'` renders one hidden input per item; `'json'` renders one hidden input holding a JSON array of ids. */
|
|
3
|
+
export type FormValueMode = 'inputs' | 'json';
|
|
4
|
+
/** Submitted shape of a `ReorderableGroups` value. */
|
|
5
|
+
export type ReorderableGroupsFormValue = {
|
|
6
|
+
groupId: ReorderableItem['id'];
|
|
7
|
+
itemIds: ReorderableItem['id'][];
|
|
8
|
+
}[];
|
|
9
|
+
/**
|
|
10
|
+
* Parses a `ReorderableList` value submitted with `formValue="json"` into item `id`s in order.
|
|
11
|
+
*
|
|
12
|
+
* @throws When the value is missing or isn't a JSON array of ids.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* const ids = parseReorderableValue(formData.get('taskOrder'));
|
|
16
|
+
*/
|
|
17
|
+
export declare const parseReorderableValue: (value: FormDataEntryValue | null) => ReorderableItem["id"][];
|
|
18
|
+
/**
|
|
19
|
+
* Parses a submitted `ReorderableGroups` value into groups with their item `id`s in order.
|
|
20
|
+
*
|
|
21
|
+
* @throws When the value is missing or doesn't match `ReorderableGroupsFormValue`.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const tiers = parseReorderableGroups(formData.get('tiers'));
|
|
25
|
+
*/
|
|
26
|
+
export declare const parseReorderableGroups: (value: FormDataEntryValue | null) => ReorderableGroupsFormValue;
|
|
27
|
+
export declare const serializeReorderableGroups: (groups: {
|
|
28
|
+
id: ReorderableItem["id"];
|
|
29
|
+
items: ReorderableItem[];
|
|
30
|
+
}[]) => string;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const isId = (value) => typeof value === 'string' || typeof value === 'number';
|
|
2
|
+
const parseJson = (value) => {
|
|
3
|
+
if (typeof value !== 'string' || value === '') {
|
|
4
|
+
throw new Error('Expected a JSON string form value');
|
|
5
|
+
}
|
|
6
|
+
return JSON.parse(value);
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Parses a `ReorderableList` value submitted with `formValue="json"` into item `id`s in order.
|
|
10
|
+
*
|
|
11
|
+
* @throws When the value is missing or isn't a JSON array of ids.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const ids = parseReorderableValue(formData.get('taskOrder'));
|
|
15
|
+
*/
|
|
16
|
+
export const parseReorderableValue = (value) => {
|
|
17
|
+
const parsed = parseJson(value);
|
|
18
|
+
if (!Array.isArray(parsed) || !parsed.every(isId)) {
|
|
19
|
+
throw new Error('Expected a JSON array of ids');
|
|
20
|
+
}
|
|
21
|
+
return parsed;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Parses a submitted `ReorderableGroups` value into groups with their item `id`s in order.
|
|
25
|
+
*
|
|
26
|
+
* @throws When the value is missing or doesn't match `ReorderableGroupsFormValue`.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* const tiers = parseReorderableGroups(formData.get('tiers'));
|
|
30
|
+
*/
|
|
31
|
+
export const parseReorderableGroups = (value) => {
|
|
32
|
+
const parsed = parseJson(value);
|
|
33
|
+
const valid = Array.isArray(parsed) &&
|
|
34
|
+
parsed.every((group) => typeof group === 'object' &&
|
|
35
|
+
group !== null &&
|
|
36
|
+
isId(group.groupId) &&
|
|
37
|
+
Array.isArray(group.itemIds) &&
|
|
38
|
+
group.itemIds.every(isId));
|
|
39
|
+
if (!valid) {
|
|
40
|
+
throw new Error('Expected a JSON array of { groupId, itemIds }');
|
|
41
|
+
}
|
|
42
|
+
return parsed;
|
|
43
|
+
};
|
|
44
|
+
// Group structure -> JSON string for the hidden input
|
|
45
|
+
export const serializeReorderableGroups = (groups) => JSON.stringify(groups.map((group) => ({
|
|
46
|
+
groupId: group.id,
|
|
47
|
+
itemIds: group.items.map((item) => item.id),
|
|
48
|
+
})));
|
|
49
|
+
//# sourceMappingURL=form-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-value.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/shared/functions/form-value.ts"],"names":[],"mappings":"AAWA,MAAM,IAAI,GAAG,CAAC,KAAc,EAAkC,EAAE,CAC/D,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AAExD,MAAM,SAAS,GAAG,CAAC,KAAgC,EAAW,EAAE;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACpC,KAAgC,EACN,EAAE;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,KAAgC,EACH,EAAE;IAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,KAAK,GACV,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACrB,MAAM,CAAC,KAAK,CACX,CAAC,KAAK,EAAE,EAAE,CACT,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACnB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAC1B,CAAC;IACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACzC,MAAiE,EACxD,EAAE,CACX,IAAI,CAAC,SAAS,CACb,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC,EAAE;IACjB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type SortingStrategy } from '@dnd-kit/sortable';
|
|
2
|
+
import type { ReorderableLayout } from '../types/reorderable.types';
|
|
3
|
+
export declare const layoutStrategies: Record<ReorderableLayout, SortingStrategy>;
|
|
4
|
+
export declare const layoutRecipe: import("../../../../../styled-system/types").RecipeRuntimeFn<{
|
|
5
|
+
layout: {
|
|
6
|
+
vertical: {
|
|
7
|
+
flexDirection: "column";
|
|
8
|
+
};
|
|
9
|
+
horizontal: {
|
|
10
|
+
flexDirection: "row";
|
|
11
|
+
overflowX: "auto";
|
|
12
|
+
};
|
|
13
|
+
grid: {
|
|
14
|
+
flexDirection: "row";
|
|
15
|
+
flexWrap: "wrap";
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
}>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cva } from '../../../../../styled-system/css';
|
|
2
|
+
import { horizontalListSortingStrategy, rectSortingStrategy, verticalListSortingStrategy, } from '@dnd-kit/sortable';
|
|
3
|
+
// dnd-kit sorting strategy for each layout
|
|
4
|
+
export const layoutStrategies = {
|
|
5
|
+
vertical: verticalListSortingStrategy,
|
|
6
|
+
horizontal: horizontalListSortingStrategy,
|
|
7
|
+
grid: rectSortingStrategy,
|
|
8
|
+
};
|
|
9
|
+
// Default arrangement when no wrapper is passed
|
|
10
|
+
export const layoutRecipe = cva({
|
|
11
|
+
base: {
|
|
12
|
+
display: 'flex',
|
|
13
|
+
width: '100%',
|
|
14
|
+
minWidth: '0',
|
|
15
|
+
},
|
|
16
|
+
variants: {
|
|
17
|
+
layout: {
|
|
18
|
+
vertical: { flexDirection: 'column' },
|
|
19
|
+
horizontal: { flexDirection: 'row', overflowX: 'auto' },
|
|
20
|
+
grid: { flexDirection: 'row', flexWrap: 'wrap' },
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
layout: 'vertical',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../../../src/components/data-input/reorderable/shared/functions/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EACN,6BAA6B,EAC7B,mBAAmB,EACnB,2BAA2B,GAE3B,MAAM,mBAAmB,CAAC;AAG3B,2CAA2C;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAA+C;IAC3E,QAAQ,EAAE,2BAA2B;IACrC,UAAU,EAAE,6BAA6B;IACzC,IAAI,EAAE,mBAAmB;CACzB,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;IAC/B,IAAI,EAAE;QACL,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,GAAG;KACb;IACD,QAAQ,EAAE;QACT,MAAM,EAAE;YACP,QAAQ,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE;YACrC,UAAU,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;YACvD,IAAI,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;SAChD;KACD;IACD,eAAe,EAAE;QAChB,MAAM,EAAE,UAAU;KAClB;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { ReorderableItem, NumericKeys, ReorderableLayout, ReorderableWrapperProps, ReorderableWrapper, DragHandleProps, ReorderableItemChangeHandler, ReorderableItemProps, ReorderableItemComponent, } from './types/reorderable.types';
|
|
2
|
+
export type { SortableItemProps } from './types/sortable-item.types';
|
|
3
|
+
export type { FormValueMode, ReorderableGroupsFormValue } from './functions/form-value';
|
|
4
|
+
export { parseReorderableValue, parseReorderableGroups, serializeReorderableGroups, } from './functions/form-value';
|
|
5
|
+
export { applyOrder } from './functions/apply-order';
|
|
6
|
+
export { layoutStrategies, layoutRecipe } from './functions/layout';
|
|
7
|
+
export { screenReaderInstructions, defaultGetItemLabel, createListAnnouncements, } from './functions/announcements';
|
|
8
|
+
export { DragHandle, createDragHandleProps } from './components/drag-handle';
|
|
9
|
+
export { SortableItem } from './components/sortable-item';
|