@accelint/design-toolkit 9.3.0 → 9.4.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/catalog-info.yaml +1 -1
- package/dist/components/accordion/context.d.ts +6 -0
- package/dist/components/accordion/context.js +6 -0
- package/dist/components/accordion/context.js.map +1 -1
- package/dist/components/accordion/group.d.ts +37 -2
- package/dist/components/accordion/group.js +34 -0
- package/dist/components/accordion/group.js.map +1 -1
- package/dist/components/accordion/header.d.ts +27 -2
- package/dist/components/accordion/header.js +25 -1
- package/dist/components/accordion/header.js.map +1 -1
- package/dist/components/accordion/index.d.ts +18 -4
- package/dist/components/accordion/index.js +16 -2
- package/dist/components/accordion/index.js.map +1 -1
- package/dist/components/accordion/panel.d.ts +29 -2
- package/dist/components/accordion/panel.js +26 -0
- package/dist/components/accordion/panel.js.map +1 -1
- package/dist/components/accordion/trigger.d.ts +25 -2
- package/dist/components/accordion/trigger.js +23 -1
- package/dist/components/accordion/trigger.js.map +1 -1
- package/dist/components/accordion/types.d.ts +33 -0
- package/dist/components/action-bar/index.d.ts +29 -8
- package/dist/components/action-bar/index.js +27 -6
- package/dist/components/action-bar/index.js.map +1 -1
- package/dist/components/action-bar/types.d.ts +7 -0
- package/dist/components/avatar/context.d.ts +22 -4
- package/dist/components/avatar/context.js +18 -0
- package/dist/components/avatar/context.js.map +1 -1
- package/dist/components/avatar/index.d.ts +22 -15
- package/dist/components/avatar/index.js +21 -14
- package/dist/components/avatar/index.js.map +1 -1
- package/dist/components/avatar/types.d.ts +13 -0
- package/dist/components/badge/context.d.ts +20 -2
- package/dist/components/badge/context.js +18 -0
- package/dist/components/badge/context.js.map +1 -1
- package/dist/components/badge/index.d.ts +28 -14
- package/dist/components/badge/index.js +28 -14
- package/dist/components/badge/index.js.map +1 -1
- package/dist/components/badge/types.d.ts +9 -0
- package/dist/components/breadcrumbs/index.d.ts +8 -0
- package/dist/components/breadcrumbs/index.js +7 -0
- package/dist/components/breadcrumbs/index.js.map +1 -1
- package/dist/components/breadcrumbs/item.d.ts +23 -0
- package/dist/components/breadcrumbs/item.js +23 -1
- package/dist/components/breadcrumbs/item.js.map +1 -1
- package/dist/components/breadcrumbs/types.d.ts +17 -0
- package/dist/components/button/context.d.ts +62 -8
- package/dist/components/button/context.js +54 -0
- package/dist/components/button/context.js.map +1 -1
- package/dist/components/button/index.d.ts +21 -2
- package/dist/components/button/index.js +19 -0
- package/dist/components/button/index.js.map +1 -1
- package/dist/components/button/link.d.ts +20 -0
- package/dist/components/button/link.js +20 -0
- package/dist/components/button/link.js.map +1 -1
- package/dist/components/button/toggle.d.ts +23 -2
- package/dist/components/button/toggle.js +22 -1
- package/dist/components/button/toggle.js.map +1 -1
- package/dist/components/button/types.d.ts +26 -0
- package/dist/components/checkbox/context.d.ts +9 -3
- package/dist/components/checkbox/context.js +6 -0
- package/dist/components/checkbox/context.js.map +1 -1
- package/dist/components/checkbox/group.d.ts +31 -2
- package/dist/components/checkbox/group.js +28 -0
- package/dist/components/checkbox/group.js.map +1 -1
- package/dist/components/checkbox/index.d.ts +19 -2
- package/dist/components/checkbox/index.js +19 -1
- package/dist/components/checkbox/index.js.map +1 -1
- package/dist/components/checkbox/types.d.ts +19 -0
- package/dist/components/chip/context.d.ts +22 -4
- package/dist/components/chip/context.js +18 -0
- package/dist/components/chip/context.js.map +1 -1
- package/dist/components/chip/deletable.d.ts +38 -2
- package/dist/components/chip/deletable.js +36 -1
- package/dist/components/chip/deletable.js.map +1 -1
- package/dist/components/chip/index.d.ts +24 -2
- package/dist/components/chip/index.js +22 -0
- package/dist/components/chip/index.js.map +1 -1
- package/dist/components/chip/list.d.ts +47 -2
- package/dist/components/chip/list.js +45 -0
- package/dist/components/chip/list.js.map +1 -1
- package/dist/components/chip/selectable.d.ts +32 -0
- package/dist/components/chip/selectable.js +31 -0
- package/dist/components/chip/selectable.js.map +1 -1
- package/dist/components/chip/types.d.ts +27 -0
- package/dist/components/classification-badge/context.d.ts +18 -2
- package/dist/components/classification-badge/context.js +16 -0
- package/dist/components/classification-badge/context.js.map +1 -1
- package/dist/components/classification-badge/index.d.ts +26 -8
- package/dist/components/classification-badge/index.js +25 -8
- package/dist/components/classification-badge/index.js.map +1 -1
- package/dist/components/classification-badge/types.d.ts +4 -0
- package/dist/components/classification-banner/context.d.ts +20 -4
- package/dist/components/classification-banner/context.js +16 -0
- package/dist/components/classification-banner/context.js.map +1 -1
- package/dist/components/classification-banner/index.d.ts +12 -2
- package/dist/components/classification-banner/index.js +9 -0
- package/dist/components/classification-banner/index.js.map +1 -1
- package/dist/components/classification-banner/types.d.ts +4 -0
- package/dist/components/clock/index.d.ts +12 -2
- package/dist/components/clock/index.js +10 -0
- package/dist/components/clock/index.js.map +1 -1
- package/dist/components/clock/types.d.ts +4 -0
- package/dist/components/color-picker/index.d.ts +12 -10
- package/dist/components/color-picker/index.js +10 -8
- package/dist/components/color-picker/index.js.map +1 -1
- package/dist/components/color-picker/types.d.ts +8 -0
- package/dist/components/combobox-field/context.d.ts +20 -4
- package/dist/components/combobox-field/context.js +16 -0
- package/dist/components/combobox-field/context.js.map +1 -1
- package/dist/components/combobox-field/index.d.ts +15 -2
- package/dist/components/combobox-field/index.js +13 -1
- package/dist/components/combobox-field/index.js.map +1 -1
- package/dist/components/combobox-field/types.d.ts +19 -0
- package/dist/components/coordinate-field/context.d.ts +15 -6
- package/dist/components/coordinate-field/context.js +9 -0
- package/dist/components/coordinate-field/context.js.map +1 -1
- package/dist/components/coordinate-field/coordinate-utils.d.ts +8 -0
- package/dist/components/coordinate-field/coordinate-utils.js +8 -0
- package/dist/components/coordinate-field/coordinate-utils.js.map +1 -1
- package/dist/components/coordinate-field/index.d.ts +29 -2
- package/dist/components/coordinate-field/index.js +29 -3
- package/dist/components/coordinate-field/index.js.map +1 -1
- package/dist/components/coordinate-field/segment.d.ts +27 -2
- package/dist/components/coordinate-field/segment.js +25 -0
- package/dist/components/coordinate-field/segment.js.map +1 -1
- package/dist/components/coordinate-field/styles.module.css +5 -1
- package/dist/components/date-field/index.d.ts +27 -2
- package/dist/components/date-field/index.js +25 -0
- package/dist/components/date-field/index.js.map +1 -1
- package/dist/components/date-field/types.d.ts +19 -3
- package/dist/components/deferred-collection/index.d.ts +10 -2
- package/dist/components/deferred-collection/index.js +8 -0
- package/dist/components/deferred-collection/index.js.map +1 -1
- package/dist/components/deferred-collection/types.d.ts +6 -3
- package/dist/components/details-list/context.d.ts +25 -4
- package/dist/components/details-list/context.js +21 -0
- package/dist/components/details-list/context.js.map +1 -1
- package/dist/components/details-list/index.d.ts +9 -2
- package/dist/components/details-list/index.js +7 -0
- package/dist/components/details-list/index.js.map +1 -1
- package/dist/components/details-list/label.d.ts +18 -2
- package/dist/components/details-list/label.js +16 -0
- package/dist/components/details-list/label.js.map +1 -1
- package/dist/components/details-list/types.d.ts +14 -0
- package/dist/components/details-list/value.d.ts +20 -2
- package/dist/components/details-list/value.js +17 -0
- package/dist/components/details-list/value.js.map +1 -1
- package/dist/components/dialog/content.d.ts +23 -2
- package/dist/components/dialog/content.js +20 -0
- package/dist/components/dialog/content.js.map +1 -1
- package/dist/components/dialog/context.d.ts +5 -2
- package/dist/components/dialog/context.js +3 -0
- package/dist/components/dialog/context.js.map +1 -1
- package/dist/components/dialog/footer.d.ts +26 -2
- package/dist/components/dialog/footer.js +23 -0
- package/dist/components/dialog/footer.js.map +1 -1
- package/dist/components/dialog/index.d.ts +12 -2
- package/dist/components/dialog/index.js +10 -0
- package/dist/components/dialog/index.js.map +1 -1
- package/dist/components/dialog/title.d.ts +21 -2
- package/dist/components/dialog/title.js +18 -0
- package/dist/components/dialog/title.js.map +1 -1
- package/dist/components/dialog/trigger.d.ts +18 -0
- package/dist/components/dialog/trigger.js +17 -0
- package/dist/components/dialog/trigger.js.map +1 -1
- package/dist/components/dialog/types.d.ts +12 -0
- package/dist/components/divider/context.d.ts +24 -4
- package/dist/components/divider/context.js +20 -0
- package/dist/components/divider/context.js.map +1 -1
- package/dist/components/divider/index.d.ts +13 -2
- package/dist/components/divider/index.js +10 -0
- package/dist/components/divider/index.js.map +1 -1
- package/dist/components/divider/types.d.ts +4 -4
- package/dist/components/drawer/back.d.ts +21 -2
- package/dist/components/drawer/back.js +19 -1
- package/dist/components/drawer/back.js.map +1 -1
- package/dist/components/drawer/close.d.ts +25 -2
- package/dist/components/drawer/close.js +28 -3
- package/dist/components/drawer/close.js.map +1 -1
- package/dist/components/drawer/content.d.ts +22 -2
- package/dist/components/drawer/content.js +19 -0
- package/dist/components/drawer/content.js.map +1 -1
- package/dist/components/drawer/context.d.ts +46 -4
- package/dist/components/drawer/context.js +45 -2
- package/dist/components/drawer/context.js.map +1 -1
- package/dist/components/drawer/events.d.ts +2 -0
- package/dist/components/drawer/events.js +2 -0
- package/dist/components/drawer/events.js.map +1 -1
- package/dist/components/drawer/footer.d.ts +24 -2
- package/dist/components/drawer/footer.js +21 -0
- package/dist/components/drawer/footer.js.map +1 -1
- package/dist/components/drawer/header-title.d.ts +22 -4
- package/dist/components/drawer/header-title.js +19 -2
- package/dist/components/drawer/header-title.js.map +1 -1
- package/dist/components/drawer/header.d.ts +34 -2
- package/dist/components/drawer/header.js +42 -2
- package/dist/components/drawer/header.js.map +1 -1
- package/dist/components/drawer/index.d.ts +14 -2
- package/dist/components/drawer/index.js +16 -0
- package/dist/components/drawer/index.js.map +1 -1
- package/dist/components/drawer/layout-main.d.ts +23 -2
- package/dist/components/drawer/layout-main.js +20 -0
- package/dist/components/drawer/layout-main.js.map +1 -1
- package/dist/components/drawer/layout.d.ts +25 -2
- package/dist/components/drawer/layout.js +22 -0
- package/dist/components/drawer/layout.js.map +1 -1
- package/dist/components/drawer/menu-item.d.ts +25 -2
- package/dist/components/drawer/menu-item.js +22 -0
- package/dist/components/drawer/menu-item.js.map +1 -1
- package/dist/components/drawer/menu.d.ts +22 -2
- package/dist/components/drawer/menu.js +19 -0
- package/dist/components/drawer/menu.js.map +1 -1
- package/dist/components/drawer/panel.d.ts +21 -2
- package/dist/components/drawer/panel.js +18 -0
- package/dist/components/drawer/panel.js.map +1 -1
- package/dist/components/drawer/trigger.d.ts +31 -2
- package/dist/components/drawer/trigger.js +29 -1
- package/dist/components/drawer/trigger.js.map +1 -1
- package/dist/components/drawer/types.d.ts +149 -2
- package/dist/components/drawer/view.d.ts +25 -2
- package/dist/components/drawer/view.js +22 -0
- package/dist/components/drawer/view.js.map +1 -1
- package/dist/components/flashcard/index.d.ts +129 -27
- package/dist/components/flashcard/index.js +120 -18
- package/dist/components/flashcard/index.js.map +1 -1
- package/dist/components/flashcard/styles.module.css +1 -1
- package/dist/components/flashcard/types.d.ts +12 -0
- package/dist/components/hero/context.d.ts +5 -2
- package/dist/components/hero/context.js +3 -0
- package/dist/components/hero/context.js.map +1 -1
- package/dist/components/hero/index.d.ts +9 -2
- package/dist/components/hero/index.js +7 -0
- package/dist/components/hero/index.js.map +1 -1
- package/dist/components/hero/subtitle.d.ts +17 -2
- package/dist/components/hero/subtitle.js +15 -0
- package/dist/components/hero/subtitle.js.map +1 -1
- package/dist/components/hero/title.d.ts +15 -2
- package/dist/components/hero/title.js +13 -0
- package/dist/components/hero/title.js.map +1 -1
- package/dist/components/hero/types.d.ts +9 -0
- package/dist/components/hotkey/context.d.ts +24 -4
- package/dist/components/hotkey/context.js +20 -0
- package/dist/components/hotkey/context.js.map +1 -1
- package/dist/components/hotkey/index.d.ts +17 -2
- package/dist/components/hotkey/index.js +15 -0
- package/dist/components/hotkey/index.js.map +1 -1
- package/dist/components/hotkey/set.d.ts +21 -2
- package/dist/components/hotkey/set.js +18 -0
- package/dist/components/hotkey/set.js.map +1 -1
- package/dist/components/hotkey/types.d.ts +4 -0
- package/dist/components/icon/context.d.ts +24 -4
- package/dist/components/icon/context.js +20 -0
- package/dist/components/icon/context.js.map +1 -1
- package/dist/components/icon/index.d.ts +15 -2
- package/dist/components/icon/index.js +13 -0
- package/dist/components/icon/index.js.map +1 -1
- package/dist/components/icon/types.d.ts +4 -0
- package/dist/components/input/context.d.ts +4 -0
- package/dist/components/input/context.js +4 -0
- package/dist/components/input/context.js.map +1 -1
- package/dist/components/input/index.d.ts +17 -2
- package/dist/components/input/index.js +16 -1
- package/dist/components/input/index.js.map +1 -1
- package/dist/components/input/types.d.ts +16 -0
- package/dist/components/kanban/card-body.d.ts +10 -2
- package/dist/components/kanban/card-body.js +8 -0
- package/dist/components/kanban/card-body.js.map +1 -1
- package/dist/components/kanban/card-header-actions.d.ts +10 -2
- package/dist/components/kanban/card-header-actions.js +8 -0
- package/dist/components/kanban/card-header-actions.js.map +1 -1
- package/dist/components/kanban/card-header-title.d.ts +10 -2
- package/dist/components/kanban/card-header-title.js +8 -0
- package/dist/components/kanban/card-header-title.js.map +1 -1
- package/dist/components/kanban/card-header.d.ts +12 -2
- package/dist/components/kanban/card-header.js +10 -0
- package/dist/components/kanban/card-header.js.map +1 -1
- package/dist/components/kanban/card.d.ts +26 -2
- package/dist/components/kanban/card.js +23 -0
- package/dist/components/kanban/card.js.map +1 -1
- package/dist/components/kanban/column-actions.d.ts +10 -2
- package/dist/components/kanban/column-actions.js +9 -1
- package/dist/components/kanban/column-actions.js.map +1 -1
- package/dist/components/kanban/column-container.d.ts +10 -2
- package/dist/components/kanban/column-container.js +8 -0
- package/dist/components/kanban/column-container.js.map +1 -1
- package/dist/components/kanban/column-content.d.ts +13 -2
- package/dist/components/kanban/column-content.js +11 -0
- package/dist/components/kanban/column-content.js.map +1 -1
- package/dist/components/kanban/column-header-actions.d.ts +13 -2
- package/dist/components/kanban/column-header-actions.js +11 -0
- package/dist/components/kanban/column-header-actions.js.map +1 -1
- package/dist/components/kanban/column-header-drag-handle.d.ts +7 -2
- package/dist/components/kanban/column-header-drag-handle.js +6 -1
- package/dist/components/kanban/column-header-drag-handle.js.map +1 -1
- package/dist/components/kanban/column-header-title.d.ts +10 -2
- package/dist/components/kanban/column-header-title.js +8 -0
- package/dist/components/kanban/column-header-title.js.map +1 -1
- package/dist/components/kanban/column-header.d.ts +12 -2
- package/dist/components/kanban/column-header.js +10 -0
- package/dist/components/kanban/column-header.js.map +1 -1
- package/dist/components/kanban/column.d.ts +22 -2
- package/dist/components/kanban/column.js +19 -0
- package/dist/components/kanban/column.js.map +1 -1
- package/dist/components/kanban/context.d.ts +49 -2
- package/dist/components/kanban/context.js +30 -0
- package/dist/components/kanban/context.js.map +1 -1
- package/dist/components/kanban/header-actions.d.ts +10 -2
- package/dist/components/kanban/header-actions.js +8 -0
- package/dist/components/kanban/header-actions.js.map +1 -1
- package/dist/components/kanban/header-search.d.ts +9 -2
- package/dist/components/kanban/header-search.js +7 -0
- package/dist/components/kanban/header-search.js.map +1 -1
- package/dist/components/kanban/header-title.d.ts +10 -2
- package/dist/components/kanban/header-title.js +8 -0
- package/dist/components/kanban/header-title.js.map +1 -1
- package/dist/components/kanban/header.d.ts +12 -2
- package/dist/components/kanban/header.js +10 -0
- package/dist/components/kanban/header.js.map +1 -1
- package/dist/components/kanban/kanban.d.ts +33 -4
- package/dist/components/kanban/kanban.js +29 -0
- package/dist/components/kanban/kanban.js.map +1 -1
- package/dist/components/kanban/types.d.ts +51 -0
- package/dist/components/label/context.d.ts +25 -4
- package/dist/components/label/context.js +21 -0
- package/dist/components/label/context.js.map +1 -1
- package/dist/components/label/index.d.ts +16 -2
- package/dist/components/label/index.js +14 -0
- package/dist/components/label/index.js.map +1 -1
- package/dist/components/label/types.d.ts +5 -0
- package/dist/components/lines/index.d.ts +10 -0
- package/dist/components/lines/index.js +9 -0
- package/dist/components/lines/index.js.map +1 -1
- package/dist/components/lines/types.d.ts +6 -0
- package/dist/components/link/context.d.ts +21 -2
- package/dist/components/link/context.js +18 -0
- package/dist/components/link/context.js.map +1 -1
- package/dist/components/link/index.d.ts +12 -2
- package/dist/components/link/index.js +9 -0
- package/dist/components/link/index.js.map +1 -1
- package/dist/components/link/types.d.ts +5 -0
- package/dist/components/list/context.d.ts +11 -2
- package/dist/components/list/context.js +9 -0
- package/dist/components/list/context.js.map +1 -1
- package/dist/components/list/index.d.ts +11 -2
- package/dist/components/list/index.js +9 -0
- package/dist/components/list/index.js.map +1 -1
- package/dist/components/list/item-content.d.ts +9 -2
- package/dist/components/list/item-content.js +6 -0
- package/dist/components/list/item-content.js.map +1 -1
- package/dist/components/list/item-description.d.ts +9 -2
- package/dist/components/list/item-description.js +7 -0
- package/dist/components/list/item-description.js.map +1 -1
- package/dist/components/list/item-title.d.ts +9 -2
- package/dist/components/list/item-title.js +7 -0
- package/dist/components/list/item-title.js.map +1 -1
- package/dist/components/list/item.d.ts +10 -2
- package/dist/components/list/item.js +8 -0
- package/dist/components/list/item.js.map +1 -1
- package/dist/components/list/types.d.ts +22 -0
- package/dist/components/menu/context.d.ts +6 -2
- package/dist/components/menu/context.js +4 -0
- package/dist/components/menu/context.js.map +1 -1
- package/dist/components/menu/index.d.ts +24 -3
- package/dist/components/menu/index.js +22 -1
- package/dist/components/menu/index.js.map +1 -1
- package/dist/components/menu/item-description.d.ts +17 -2
- package/dist/components/menu/item-description.js +15 -0
- package/dist/components/menu/item-description.js.map +1 -1
- package/dist/components/menu/item-label.d.ts +17 -2
- package/dist/components/menu/item-label.js +15 -0
- package/dist/components/menu/item-label.js.map +1 -1
- package/dist/components/menu/item.d.ts +23 -2
- package/dist/components/menu/item.js +21 -1
- package/dist/components/menu/item.js.map +1 -1
- package/dist/components/menu/section.d.ts +23 -2
- package/dist/components/menu/section.js +20 -0
- package/dist/components/menu/section.js.map +1 -1
- package/dist/components/menu/separator.d.ts +16 -2
- package/dist/components/menu/separator.js +14 -0
- package/dist/components/menu/separator.js.map +1 -1
- package/dist/components/menu/submenu.d.ts +18 -2
- package/dist/components/menu/submenu.js +16 -0
- package/dist/components/menu/submenu.js.map +1 -1
- package/dist/components/menu/trigger.d.ts +15 -0
- package/dist/components/menu/trigger.js +15 -0
- package/dist/components/menu/trigger.js.map +1 -1
- package/dist/components/menu/types.d.ts +25 -0
- package/dist/components/notice/events.d.ts +9 -0
- package/dist/components/notice/events.js +9 -0
- package/dist/components/notice/events.js.map +1 -1
- package/dist/components/notice/index.d.ts +34 -2
- package/dist/components/notice/index.js +32 -1
- package/dist/components/notice/index.js.map +1 -1
- package/dist/components/notice/list.d.ts +31 -2
- package/dist/components/notice/list.js +28 -0
- package/dist/components/notice/list.js.map +1 -1
- package/dist/components/notice/notice-icon.d.ts +22 -2
- package/dist/components/notice/notice-icon.js +23 -1
- package/dist/components/notice/notice-icon.js.map +1 -1
- package/dist/components/notice/types.d.ts +60 -0
- package/dist/components/notice/utils.d.ts +8 -0
- package/dist/components/notice/utils.js +8 -0
- package/dist/components/notice/utils.js.map +1 -1
- package/dist/components/options/context.d.ts +1 -0
- package/dist/components/options/context.js +1 -0
- package/dist/components/options/context.js.map +1 -1
- package/dist/components/options/index.d.ts +15 -2
- package/dist/components/options/index.js +13 -0
- package/dist/components/options/index.js.map +1 -1
- package/dist/components/options/item-content.d.ts +22 -2
- package/dist/components/options/item-content.js +19 -0
- package/dist/components/options/item-content.js.map +1 -1
- package/dist/components/options/item-description.d.ts +14 -2
- package/dist/components/options/item-description.js +12 -0
- package/dist/components/options/item-description.js.map +1 -1
- package/dist/components/options/item-label.d.ts +14 -2
- package/dist/components/options/item-label.js +12 -0
- package/dist/components/options/item-label.js.map +1 -1
- package/dist/components/options/item.d.ts +24 -2
- package/dist/components/options/item.js +21 -0
- package/dist/components/options/item.js.map +1 -1
- package/dist/components/options/section.d.ts +21 -2
- package/dist/components/options/section.js +18 -0
- package/dist/components/options/section.js.map +1 -1
- package/dist/components/options/types.d.ts +24 -0
- package/dist/components/pagination/context.d.ts +3 -2
- package/dist/components/pagination/context.js +1 -0
- package/dist/components/pagination/context.js.map +1 -1
- package/dist/components/pagination/index.d.ts +18 -11
- package/dist/components/pagination/index.js +15 -9
- package/dist/components/pagination/index.js.map +1 -1
- package/dist/components/pagination/next.d.ts +17 -2
- package/dist/components/pagination/next.js +15 -0
- package/dist/components/pagination/next.js.map +1 -1
- package/dist/components/pagination/pages.d.ts +21 -2
- package/dist/components/pagination/pages.js +18 -0
- package/dist/components/pagination/pages.js.map +1 -1
- package/dist/components/pagination/prev.d.ts +17 -2
- package/dist/components/pagination/prev.js +16 -1
- package/dist/components/pagination/prev.js.map +1 -1
- package/dist/components/pagination/types.d.ts +32 -0
- package/dist/components/pagination/utils.d.ts +35 -0
- package/dist/components/pagination/utils.js +35 -0
- package/dist/components/pagination/utils.js.map +1 -1
- package/dist/components/popover/content.d.ts +20 -2
- package/dist/components/popover/content.js +17 -0
- package/dist/components/popover/content.js.map +1 -1
- package/dist/components/popover/footer.d.ts +22 -2
- package/dist/components/popover/footer.js +19 -0
- package/dist/components/popover/footer.js.map +1 -1
- package/dist/components/popover/index.d.ts +9 -2
- package/dist/components/popover/index.js +8 -1
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/popover/styles.module.css +6 -0
- package/dist/components/popover/title.d.ts +17 -2
- package/dist/components/popover/title.js +15 -0
- package/dist/components/popover/title.js.map +1 -1
- package/dist/components/popover/trigger.d.ts +24 -2
- package/dist/components/popover/trigger.js +21 -0
- package/dist/components/popover/trigger.js.map +1 -1
- package/dist/components/popover/types.d.ts +10 -0
- package/dist/components/query-builder/action-element.d.ts +20 -2
- package/dist/components/query-builder/action-element.js +17 -0
- package/dist/components/query-builder/action-element.js.map +1 -1
- package/dist/components/query-builder/actions.d.ts +37 -4
- package/dist/components/query-builder/actions.js +36 -1
- package/dist/components/query-builder/actions.js.map +1 -1
- package/dist/components/query-builder/combinator-selector.d.ts +10 -2
- package/dist/components/query-builder/combinator-selector.js +8 -0
- package/dist/components/query-builder/combinator-selector.js.map +1 -1
- package/dist/components/query-builder/constants.d.ts +1 -0
- package/dist/components/query-builder/constants.js +1 -0
- package/dist/components/query-builder/constants.js.map +1 -1
- package/dist/components/query-builder/index.d.ts +11 -2
- package/dist/components/query-builder/index.js +9 -0
- package/dist/components/query-builder/index.js.map +1 -1
- package/dist/components/query-builder/rule-group.d.ts +52 -4
- package/dist/components/query-builder/rule-group.js +47 -0
- package/dist/components/query-builder/rule-group.js.map +1 -1
- package/dist/components/query-builder/rule.d.ts +20 -2
- package/dist/components/query-builder/rule.js +18 -0
- package/dist/components/query-builder/rule.js.map +1 -1
- package/dist/components/query-builder/types.d.ts +9 -0
- package/dist/components/query-builder/utils.d.ts +15 -0
- package/dist/components/query-builder/utils.js +15 -0
- package/dist/components/query-builder/utils.js.map +1 -1
- package/dist/components/query-builder/value-editor.d.ts +23 -2
- package/dist/components/query-builder/value-editor.js +20 -0
- package/dist/components/query-builder/value-editor.js.map +1 -1
- package/dist/components/query-builder/value-selector.d.ts +23 -2
- package/dist/components/query-builder/value-selector.js +20 -0
- package/dist/components/query-builder/value-selector.js.map +1 -1
- package/dist/components/radio/context.d.ts +2 -2
- package/dist/components/radio/group.d.ts +19 -2
- package/dist/components/radio/group.js +16 -0
- package/dist/components/radio/group.js.map +1 -1
- package/dist/components/radio/index.d.ts +13 -26
- package/dist/components/radio/index.js +11 -24
- package/dist/components/radio/index.js.map +1 -1
- package/dist/components/radio/types.d.ts +16 -0
- package/dist/components/search-field/context.d.ts +7 -4
- package/dist/components/search-field/context.js +3 -0
- package/dist/components/search-field/context.js.map +1 -1
- package/dist/components/search-field/index.d.ts +15 -24
- package/dist/components/search-field/index.js +16 -23
- package/dist/components/search-field/index.js.map +1 -1
- package/dist/components/search-field/types.d.ts +13 -0
- package/dist/components/select-field/context.d.ts +11 -4
- package/dist/components/select-field/context.js +7 -0
- package/dist/components/select-field/context.js.map +1 -1
- package/dist/components/select-field/index.d.ts +19 -39
- package/dist/components/select-field/index.js +18 -38
- package/dist/components/select-field/index.js.map +1 -1
- package/dist/components/select-field/styles.module.css +8 -0
- package/dist/components/select-field/types.d.ts +18 -0
- package/dist/components/sidenav/avatar.d.ts +19 -2
- package/dist/components/sidenav/avatar.js +16 -0
- package/dist/components/sidenav/avatar.js.map +1 -1
- package/dist/components/sidenav/content.d.ts +23 -2
- package/dist/components/sidenav/content.js +20 -0
- package/dist/components/sidenav/content.js.map +1 -1
- package/dist/components/sidenav/context.d.ts +3 -2
- package/dist/components/sidenav/context.js +1 -0
- package/dist/components/sidenav/context.js.map +1 -1
- package/dist/components/sidenav/events.d.ts +2 -0
- package/dist/components/sidenav/events.js +2 -0
- package/dist/components/sidenav/events.js.map +1 -1
- package/dist/components/sidenav/footer.d.ts +16 -2
- package/dist/components/sidenav/footer.js +13 -0
- package/dist/components/sidenav/footer.js.map +1 -1
- package/dist/components/sidenav/header.d.ts +20 -2
- package/dist/components/sidenav/header.js +18 -1
- package/dist/components/sidenav/header.js.map +1 -1
- package/dist/components/sidenav/index.d.ts +11 -2
- package/dist/components/sidenav/index.js +9 -0
- package/dist/components/sidenav/index.js.map +1 -1
- package/dist/components/sidenav/item.d.ts +17 -2
- package/dist/components/sidenav/item.js +14 -0
- package/dist/components/sidenav/item.js.map +1 -1
- package/dist/components/sidenav/link.d.ts +17 -2
- package/dist/components/sidenav/link.js +15 -1
- package/dist/components/sidenav/link.js.map +1 -1
- package/dist/components/sidenav/menu-item.d.ts +16 -2
- package/dist/components/sidenav/menu-item.js +13 -0
- package/dist/components/sidenav/menu-item.js.map +1 -1
- package/dist/components/sidenav/menu.d.ts +19 -2
- package/dist/components/sidenav/menu.js +17 -1
- package/dist/components/sidenav/menu.js.map +1 -1
- package/dist/components/sidenav/trigger.d.ts +17 -2
- package/dist/components/sidenav/trigger.js +14 -0
- package/dist/components/sidenav/trigger.js.map +1 -1
- package/dist/components/sidenav/types.d.ts +53 -0
- package/dist/components/skeleton/index.d.ts +12 -27
- package/dist/components/skeleton/index.js +10 -24
- package/dist/components/skeleton/index.js.map +1 -1
- package/dist/components/skeleton/types.d.ts +4 -0
- package/dist/components/slider/index.d.ts +30 -29
- package/dist/components/slider/index.js +28 -27
- package/dist/components/slider/index.js.map +1 -1
- package/dist/components/slider/types.d.ts +18 -0
- package/dist/components/switch/context.d.ts +16 -10
- package/dist/components/switch/context.js +13 -7
- package/dist/components/switch/context.js.map +1 -1
- package/dist/components/switch/index.d.ts +14 -31
- package/dist/components/switch/index.js +12 -29
- package/dist/components/switch/index.js.map +1 -1
- package/dist/components/switch/types.d.ts +5 -0
- package/dist/components/table/body.d.ts +21 -2
- package/dist/components/table/body.js +18 -0
- package/dist/components/table/body.js.map +1 -1
- package/dist/components/table/cell.d.ts +22 -2
- package/dist/components/table/cell.js +19 -0
- package/dist/components/table/cell.js.map +1 -1
- package/dist/components/table/constants/table.d.ts +6 -0
- package/dist/components/table/constants/table.js +4 -0
- package/dist/components/table/constants/table.js.map +1 -1
- package/dist/components/table/context.d.ts +3 -2
- package/dist/components/table/context.js +1 -0
- package/dist/components/table/context.js.map +1 -1
- package/dist/components/table/header-cell.d.ts +24 -2
- package/dist/components/table/header-cell.js +24 -1
- package/dist/components/table/header-cell.js.map +1 -1
- package/dist/components/table/header.d.ts +20 -0
- package/dist/components/table/header.js +19 -0
- package/dist/components/table/header.js.map +1 -1
- package/dist/components/table/index.d.ts +28 -6
- package/dist/components/table/index.js +27 -5
- package/dist/components/table/index.js.map +1 -1
- package/dist/components/table/row.d.ts +26 -2
- package/dist/components/table/row.js +23 -0
- package/dist/components/table/row.js.map +1 -1
- package/dist/components/table/types.d.ts +3 -0
- package/dist/components/tabs/context.d.ts +20 -10
- package/dist/components/tabs/context.js +17 -7
- package/dist/components/tabs/context.js.map +1 -1
- package/dist/components/tabs/index.d.ts +17 -40
- package/dist/components/tabs/index.js +15 -38
- package/dist/components/tabs/index.js.map +1 -1
- package/dist/components/tabs/list.d.ts +20 -4
- package/dist/components/tabs/list.js +17 -2
- package/dist/components/tabs/list.js.map +1 -1
- package/dist/components/tabs/panel.d.ts +21 -4
- package/dist/components/tabs/panel.js +18 -2
- package/dist/components/tabs/panel.js.map +1 -1
- package/dist/components/tabs/tab.d.ts +17 -4
- package/dist/components/tabs/tab.js +14 -2
- package/dist/components/tabs/tab.js.map +1 -1
- package/dist/components/tabs/types.d.ts +3 -0
- package/dist/components/text-area-field/context.d.ts +20 -10
- package/dist/components/text-area-field/context.js +17 -7
- package/dist/components/text-area-field/context.js.map +1 -1
- package/dist/components/text-area-field/index.d.ts +20 -15
- package/dist/components/text-area-field/index.js +18 -13
- package/dist/components/text-area-field/index.js.map +1 -1
- package/dist/components/text-area-field/styles.module.css +1 -1
- package/dist/components/text-area-field/types.d.ts +9 -0
- package/dist/components/text-field/context.d.ts +24 -4
- package/dist/components/text-field/context.js +20 -0
- package/dist/components/text-field/context.js.map +1 -1
- package/dist/components/text-field/index.d.ts +17 -82
- package/dist/components/text-field/index.js +15 -80
- package/dist/components/text-field/index.js.map +1 -1
- package/dist/components/text-field/types.d.ts +9 -0
- package/dist/components/time-field/index.d.ts +23 -5
- package/dist/components/time-field/index.js +21 -4
- package/dist/components/time-field/index.js.map +1 -1
- package/dist/components/time-field/types.d.ts +9 -0
- package/dist/components/tooltip/context.d.ts +3 -2
- package/dist/components/tooltip/context.js +1 -0
- package/dist/components/tooltip/context.js.map +1 -1
- package/dist/components/tooltip/index.d.ts +15 -30
- package/dist/components/tooltip/index.js +13 -28
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/components/tooltip/trigger.d.ts +22 -2
- package/dist/components/tooltip/trigger.js +19 -0
- package/dist/components/tooltip/trigger.js.map +1 -1
- package/dist/components/tooltip/types.d.ts +7 -0
- package/dist/components/tree/context.d.ts +5 -9
- package/dist/components/tree/context.js +2 -6
- package/dist/components/tree/context.js.map +1 -1
- package/dist/components/tree/index.d.ts +30 -8
- package/dist/components/tree/index.js +28 -6
- package/dist/components/tree/index.js.map +1 -1
- package/dist/components/tree/item-actions.d.ts +19 -4
- package/dist/components/tree/item-actions.js +16 -2
- package/dist/components/tree/item-actions.js.map +1 -1
- package/dist/components/tree/item-content.d.ts +18 -4
- package/dist/components/tree/item-content.js +20 -3
- package/dist/components/tree/item-content.js.map +1 -1
- package/dist/components/tree/item-description.d.ts +15 -4
- package/dist/components/tree/item-description.js +13 -2
- package/dist/components/tree/item-description.js.map +1 -1
- package/dist/components/tree/item-label.d.ts +15 -4
- package/dist/components/tree/item-label.js +13 -2
- package/dist/components/tree/item-label.js.map +1 -1
- package/dist/components/tree/item-prefix-icon.d.ts +15 -4
- package/dist/components/tree/item-prefix-icon.js +13 -2
- package/dist/components/tree/item-prefix-icon.js.map +1 -1
- package/dist/components/tree/item.d.ts +24 -4
- package/dist/components/tree/item.js +21 -2
- package/dist/components/tree/item.js.map +1 -1
- package/dist/components/tree/lines.d.ts +10 -2
- package/dist/components/tree/lines.js +8 -0
- package/dist/components/tree/lines.js.map +1 -1
- package/dist/components/tree/types.d.ts +26 -0
- package/dist/components/view-stack/context.d.ts +20 -9
- package/dist/components/view-stack/context.js +18 -7
- package/dist/components/view-stack/context.js.map +1 -1
- package/dist/components/view-stack/events.d.ts +2 -0
- package/dist/components/view-stack/events.js +2 -0
- package/dist/components/view-stack/events.js.map +1 -1
- package/dist/components/view-stack/index.d.ts +16 -24
- package/dist/components/view-stack/index.js +14 -22
- package/dist/components/view-stack/index.js.map +1 -1
- package/dist/components/view-stack/trigger.d.ts +26 -4
- package/dist/components/view-stack/trigger.js +23 -2
- package/dist/components/view-stack/trigger.js.map +1 -1
- package/dist/components/view-stack/types.d.ts +29 -0
- package/dist/components/view-stack/view.d.ts +22 -2
- package/dist/components/view-stack/view.js +19 -0
- package/dist/components/view-stack/view.js.map +1 -1
- package/dist/hooks/coordinate-field/use-coordinate-copy.d.ts +44 -0
- package/dist/hooks/coordinate-field/use-coordinate-copy.js +35 -0
- package/dist/hooks/coordinate-field/use-coordinate-copy.js.map +1 -1
- package/dist/hooks/coordinate-field/use-coordinate-field-state.d.ts +69 -0
- package/dist/hooks/coordinate-field/use-coordinate-field-state.js +50 -0
- package/dist/hooks/coordinate-field/use-coordinate-field-state.js.map +1 -1
- package/dist/hooks/coordinate-field/use-coordinate-field.d.ts +61 -0
- package/dist/hooks/coordinate-field/use-coordinate-field.js +47 -0
- package/dist/hooks/coordinate-field/use-coordinate-field.js.map +1 -1
- package/dist/hooks/coordinate-field/use-coordinate-focus.d.ts +51 -0
- package/dist/hooks/coordinate-field/use-coordinate-focus.js +39 -0
- package/dist/hooks/coordinate-field/use-coordinate-focus.js.map +1 -1
- package/dist/hooks/coordinate-field/use-coordinate-paste.d.ts +63 -0
- package/dist/hooks/coordinate-field/use-coordinate-paste.js +51 -0
- package/dist/hooks/coordinate-field/use-coordinate-paste.js.map +1 -1
- package/dist/hooks/coordinate-field/use-timeout-cleanup.d.ts +32 -0
- package/dist/hooks/coordinate-field/use-timeout-cleanup.js +30 -0
- package/dist/hooks/coordinate-field/use-timeout-cleanup.js.map +1 -1
- package/dist/hooks/use-frame-delay/index.d.ts +5 -0
- package/dist/hooks/use-frame-delay/index.js +5 -0
- package/dist/hooks/use-frame-delay/index.js.map +1 -1
- package/dist/hooks/use-tree/actions/index.d.ts +4 -2
- package/dist/hooks/use-tree/actions/index.js +4 -2
- package/dist/hooks/use-tree/actions/index.js.map +1 -1
- package/dist/hooks/use-tree/state/index.d.ts +7 -0
- package/dist/hooks/use-tree/state/index.js +7 -0
- package/dist/hooks/use-tree/state/index.js.map +1 -1
- package/dist/hooks/use-tree/types.d.ts +22 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/lib/types.d.ts +17 -0
- package/dist/lib/utils.d.ts +15 -0
- package/dist/lib/utils.js +15 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/providers/portal.d.ts +11 -2
- package/dist/providers/portal.js +9 -0
- package/dist/providers/portal.js.map +1 -1
- package/dist/providers/theme-provider.d.ts +18 -2
- package/dist/providers/theme-provider.js +15 -0
- package/dist/providers/theme-provider.js.map +1 -1
- package/package.json +3 -3
|
@@ -12,50 +12,42 @@
|
|
|
12
12
|
|
|
13
13
|
import { ViewStackProps } from "./types.js";
|
|
14
14
|
import "client-only";
|
|
15
|
-
import * as
|
|
15
|
+
import * as react_jsx_runtime170 from "react/jsx-runtime";
|
|
16
16
|
|
|
17
17
|
//#region src/components/view-stack/index.d.ts
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* ViewStack - Stack-based
|
|
20
|
+
* ViewStack - Stack-based navigation for managing multiple views
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
22
|
+
* Supports push, pop, clear, and reset operations with global event system.
|
|
23
|
+
*
|
|
24
|
+
* @param props - {@link ViewStackProps}
|
|
25
|
+
* @param props.id - Unique identifier for the stack.
|
|
26
|
+
* @param props.children - ViewStackView components.
|
|
27
|
+
* @param props.defaultView - Default view to display when the stack is initialized.
|
|
28
|
+
* @param props.onChange - Callback when the active view changes.
|
|
29
|
+
* @returns The rendered ViewStack component.
|
|
24
30
|
*
|
|
25
31
|
* @example
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* a: uuid(),
|
|
29
|
-
* b: uuid(),
|
|
30
|
-
* };
|
|
32
|
+
* ```tsx
|
|
33
|
+
* const ids = { stack: uuid(), a: uuid(), b: uuid() };
|
|
31
34
|
*
|
|
32
35
|
* <ViewStack id={ids.stack} defaultView={ids.a}>
|
|
33
36
|
* <ViewStackView id={ids.a}>
|
|
34
|
-
* <ViewStackTrigger for={ids.b}>
|
|
35
|
-
* <Button>
|
|
36
|
-
* Push View B
|
|
37
|
-
* </Button>
|
|
38
|
-
* </ViewStackTrigger>
|
|
39
|
-
* <h1>View A</h1>
|
|
37
|
+
* <ViewStackTrigger for={ids.b}><Button>Go to B</Button></ViewStackTrigger>
|
|
40
38
|
* </ViewStackView>
|
|
41
39
|
* <ViewStackView id={ids.b}>
|
|
42
|
-
* <ViewStackTrigger for=
|
|
43
|
-
* <Button variant='icon'>
|
|
44
|
-
* <Icon>
|
|
45
|
-
* <ChevronLeft />
|
|
46
|
-
* </Icon>
|
|
47
|
-
* </Button>
|
|
48
|
-
* </ViewStackTrigger>
|
|
49
|
-
* <h1>View B</h1>
|
|
40
|
+
* <ViewStackTrigger for="back"><Button>Back</Button></ViewStackTrigger>
|
|
50
41
|
* </ViewStackView>
|
|
51
42
|
* </ViewStack>
|
|
43
|
+
* ```
|
|
52
44
|
*/
|
|
53
45
|
declare function ViewStack({
|
|
54
46
|
id,
|
|
55
47
|
children,
|
|
56
48
|
defaultView,
|
|
57
49
|
onChange
|
|
58
|
-
}: ViewStackProps):
|
|
50
|
+
}: ViewStackProps): react_jsx_runtime170.JSX.Element;
|
|
59
51
|
//#endregion
|
|
60
52
|
export { ViewStack };
|
|
61
53
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -23,38 +23,30 @@ import { isUUID } from "@accelint/core";
|
|
|
23
23
|
|
|
24
24
|
//#region src/components/view-stack/index.tsx
|
|
25
25
|
/**
|
|
26
|
-
* ViewStack - Stack-based
|
|
26
|
+
* ViewStack - Stack-based navigation for managing multiple views
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
28
|
+
* Supports push, pop, clear, and reset operations with global event system.
|
|
29
|
+
*
|
|
30
|
+
* @param props - {@link ViewStackProps}
|
|
31
|
+
* @param props.id - Unique identifier for the stack.
|
|
32
|
+
* @param props.children - ViewStackView components.
|
|
33
|
+
* @param props.defaultView - Default view to display when the stack is initialized.
|
|
34
|
+
* @param props.onChange - Callback when the active view changes.
|
|
35
|
+
* @returns The rendered ViewStack component.
|
|
30
36
|
*
|
|
31
37
|
* @example
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* a: uuid(),
|
|
35
|
-
* b: uuid(),
|
|
36
|
-
* };
|
|
38
|
+
* ```tsx
|
|
39
|
+
* const ids = { stack: uuid(), a: uuid(), b: uuid() };
|
|
37
40
|
*
|
|
38
41
|
* <ViewStack id={ids.stack} defaultView={ids.a}>
|
|
39
42
|
* <ViewStackView id={ids.a}>
|
|
40
|
-
* <ViewStackTrigger for={ids.b}>
|
|
41
|
-
* <Button>
|
|
42
|
-
* Push View B
|
|
43
|
-
* </Button>
|
|
44
|
-
* </ViewStackTrigger>
|
|
45
|
-
* <h1>View A</h1>
|
|
43
|
+
* <ViewStackTrigger for={ids.b}><Button>Go to B</Button></ViewStackTrigger>
|
|
46
44
|
* </ViewStackView>
|
|
47
45
|
* <ViewStackView id={ids.b}>
|
|
48
|
-
* <ViewStackTrigger for=
|
|
49
|
-
* <Button variant='icon'>
|
|
50
|
-
* <Icon>
|
|
51
|
-
* <ChevronLeft />
|
|
52
|
-
* </Icon>
|
|
53
|
-
* </Button>
|
|
54
|
-
* </ViewStackTrigger>
|
|
55
|
-
* <h1>View B</h1>
|
|
46
|
+
* <ViewStackTrigger for="back"><Button>Back</Button></ViewStackTrigger>
|
|
56
47
|
* </ViewStackView>
|
|
57
48
|
* </ViewStack>
|
|
49
|
+
* ```
|
|
58
50
|
*/
|
|
59
51
|
function ViewStack({ id, children, defaultView, onChange }) {
|
|
60
52
|
if (!isUUID(id)) throw new Error(`ViewStack's id must be a UniqueId`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["view"],"sources":["../../../src/components/view-stack/index.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n'use client';\n\nimport { useOn } from '@accelint/bus/react';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport 'client-only';\nimport { useCallback, useRef, useState } from 'react';\nimport { ViewStackContext } from './context';\nimport { ViewStackEventTypes } from './events';\nimport type {\n ViewStackBackEvent,\n ViewStackClearEvent,\n ViewStackProps,\n ViewStackPushEvent,\n ViewStackResetEvent,\n} from './types';\n\n/**\n * ViewStack - Stack-based
|
|
1
|
+
{"version":3,"file":"index.js","names":["view"],"sources":["../../../src/components/view-stack/index.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n'use client';\n\nimport { useOn } from '@accelint/bus/react';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport 'client-only';\nimport { useCallback, useRef, useState } from 'react';\nimport { ViewStackContext } from './context';\nimport { ViewStackEventTypes } from './events';\nimport type {\n ViewStackBackEvent,\n ViewStackClearEvent,\n ViewStackProps,\n ViewStackPushEvent,\n ViewStackResetEvent,\n} from './types';\n\n/**\n * ViewStack - Stack-based navigation for managing multiple views\n *\n * Supports push, pop, clear, and reset operations with global event system.\n *\n * @param props - {@link ViewStackProps}\n * @param props.id - Unique identifier for the stack.\n * @param props.children - ViewStackView components.\n * @param props.defaultView - Default view to display when the stack is initialized.\n * @param props.onChange - Callback when the active view changes.\n * @returns The rendered ViewStack component.\n *\n * @example\n * ```tsx\n * const ids = { stack: uuid(), a: uuid(), b: uuid() };\n *\n * <ViewStack id={ids.stack} defaultView={ids.a}>\n * <ViewStackView id={ids.a}>\n * <ViewStackTrigger for={ids.b}><Button>Go to B</Button></ViewStackTrigger>\n * </ViewStackView>\n * <ViewStackView id={ids.b}>\n * <ViewStackTrigger for=\"back\"><Button>Back</Button></ViewStackTrigger>\n * </ViewStackView>\n * </ViewStack>\n * ```\n */\nexport function ViewStack({\n id,\n children,\n defaultView,\n onChange,\n}: ViewStackProps) {\n if (!isUUID(id)) {\n throw new Error(`ViewStack's id must be a UniqueId`);\n }\n\n const views = useRef(new Set<UniqueId>());\n const [stack, setStack] = useState<UniqueId[]>(\n defaultView ? [defaultView] : [],\n );\n const view = stack.at(-1) ?? null;\n\n const handleBack = useCallback(\n (data: ViewStackBackEvent) => {\n if (id === data?.payload?.stack) {\n const next = stack.slice(0, -1);\n\n if (!next.length && defaultView) {\n next.push(defaultView);\n }\n\n setStack(next);\n onChange?.(next.at(-1) ?? null);\n }\n },\n [id, defaultView, onChange, stack],\n );\n\n const handleClear = useCallback(\n (data: ViewStackClearEvent) => {\n if (id === data?.payload?.stack) {\n setStack([]);\n onChange?.(null);\n }\n },\n [id, onChange],\n );\n\n const handlePush = useCallback(\n (data: ViewStackPushEvent) => {\n if (views.current.has(data?.payload?.view)) {\n setStack((prev) => [...prev, data?.payload?.view]);\n onChange?.(data?.payload?.view);\n }\n },\n [onChange],\n );\n\n const handleReset = useCallback(\n (data: ViewStackResetEvent) => {\n if (id === data?.payload?.stack) {\n setStack(defaultView ? [defaultView] : []);\n onChange?.(defaultView ?? null);\n }\n },\n [id, defaultView, onChange],\n );\n useOn(ViewStackEventTypes.back, handleBack);\n useOn(ViewStackEventTypes.clear, handleClear);\n useOn(ViewStackEventTypes.push, handlePush);\n useOn(ViewStackEventTypes.reset, handleReset);\n\n return (\n <ViewStackContext.Provider\n value={{\n parent: id,\n stack,\n view,\n register: (view: UniqueId) => views.current.add(view),\n unregister: (view: UniqueId) => views.current.delete(view),\n }}\n >\n {children}\n </ViewStackContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,UAAU,EACxB,IACA,UACA,aACA,YACiB;AACjB,KAAI,CAAC,OAAO,GAAG,CACb,OAAM,IAAI,MAAM,oCAAoC;CAGtD,MAAM,QAAQ,uBAAO,IAAI,KAAe,CAAC;CACzC,MAAM,CAAC,OAAO,YAAY,SACxB,cAAc,CAAC,YAAY,GAAG,EAAE,CACjC;CACD,MAAM,OAAO,MAAM,GAAG,GAAG,IAAI;CAE7B,MAAM,aAAa,aAChB,SAA6B;AAC5B,MAAI,OAAO,MAAM,SAAS,OAAO;GAC/B,MAAM,OAAO,MAAM,MAAM,GAAG,GAAG;AAE/B,OAAI,CAAC,KAAK,UAAU,YAClB,MAAK,KAAK,YAAY;AAGxB,YAAS,KAAK;AACd,cAAW,KAAK,GAAG,GAAG,IAAI,KAAK;;IAGnC;EAAC;EAAI;EAAa;EAAU;EAAM,CACnC;CAED,MAAM,cAAc,aACjB,SAA8B;AAC7B,MAAI,OAAO,MAAM,SAAS,OAAO;AAC/B,YAAS,EAAE,CAAC;AACZ,cAAW,KAAK;;IAGpB,CAAC,IAAI,SAAS,CACf;CAED,MAAM,aAAa,aAChB,SAA6B;AAC5B,MAAI,MAAM,QAAQ,IAAI,MAAM,SAAS,KAAK,EAAE;AAC1C,aAAU,SAAS,CAAC,GAAG,MAAM,MAAM,SAAS,KAAK,CAAC;AAClD,cAAW,MAAM,SAAS,KAAK;;IAGnC,CAAC,SAAS,CACX;CAED,MAAM,cAAc,aACjB,SAA8B;AAC7B,MAAI,OAAO,MAAM,SAAS,OAAO;AAC/B,YAAS,cAAc,CAAC,YAAY,GAAG,EAAE,CAAC;AAC1C,cAAW,eAAe,KAAK;;IAGnC;EAAC;EAAI;EAAa;EAAS,CAC5B;AACD,OAAM,oBAAoB,MAAM,WAAW;AAC3C,OAAM,oBAAoB,OAAO,YAAY;AAC7C,OAAM,oBAAoB,MAAM,WAAW;AAC3C,OAAM,oBAAoB,OAAO,YAAY;AAE7C,QACE,oBAAC,iBAAiB;EAChB,OAAO;GACL,QAAQ;GACR;GACA;GACA,WAAW,WAAmB,MAAM,QAAQ,IAAIA,OAAK;GACrD,aAAa,WAAmB,MAAM,QAAQ,OAAOA,OAAK;GAC3D;EAEA;GACyB"}
|
|
@@ -12,18 +12,40 @@
|
|
|
12
12
|
|
|
13
13
|
import { ViewStackTriggerProps } from "./types.js";
|
|
14
14
|
import "client-only";
|
|
15
|
-
import * as
|
|
15
|
+
import * as react_jsx_runtime172 from "react/jsx-runtime";
|
|
16
16
|
|
|
17
17
|
//#region src/components/view-stack/trigger.d.ts
|
|
18
|
+
|
|
18
19
|
/**
|
|
19
|
-
* ViewStackTrigger -
|
|
20
|
+
* ViewStackTrigger - Pressable element that triggers ViewStack navigation actions
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* <ViewStack id="main-stack">
|
|
25
|
+
* <ViewStackView id="home">
|
|
26
|
+
* <h1>Home</h1>
|
|
27
|
+
* <ViewStackTrigger for="settings-view-id">
|
|
28
|
+
* <Button>Go to Settings</Button>
|
|
29
|
+
* </ViewStackTrigger>
|
|
30
|
+
* </ViewStackView>
|
|
31
|
+
* <ViewStackView id="settings-view-id">
|
|
32
|
+
* <h1>Settings</h1>
|
|
33
|
+
* <ViewStackTrigger for="back:main-stack">
|
|
34
|
+
* <Button>Back</Button>
|
|
35
|
+
* </ViewStackTrigger>
|
|
36
|
+
* </ViewStackView>
|
|
37
|
+
* </ViewStack>
|
|
38
|
+
* ```
|
|
20
39
|
*
|
|
21
|
-
*
|
|
40
|
+
* @param props - {@link ViewStackTriggerProps}
|
|
41
|
+
* @param props.children - Pressable children content.
|
|
42
|
+
* @param props.for - Navigation action(s) to trigger on press.
|
|
43
|
+
* @returns The rendered ViewStackTrigger component.
|
|
22
44
|
*/
|
|
23
45
|
declare function ViewStackTrigger({
|
|
24
46
|
children,
|
|
25
47
|
for: types
|
|
26
|
-
}: ViewStackTriggerProps):
|
|
48
|
+
}: ViewStackTriggerProps): react_jsx_runtime172.JSX.Element;
|
|
27
49
|
//#endregion
|
|
28
50
|
export { ViewStackTrigger };
|
|
29
51
|
//# sourceMappingURL=trigger.d.ts.map
|
|
@@ -22,9 +22,30 @@ import { isUUID } from "@accelint/core";
|
|
|
22
22
|
|
|
23
23
|
//#region src/components/view-stack/trigger.tsx
|
|
24
24
|
/**
|
|
25
|
-
* ViewStackTrigger -
|
|
25
|
+
* ViewStackTrigger - Pressable element that triggers ViewStack navigation actions
|
|
26
26
|
*
|
|
27
|
-
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* <ViewStack id="main-stack">
|
|
30
|
+
* <ViewStackView id="home">
|
|
31
|
+
* <h1>Home</h1>
|
|
32
|
+
* <ViewStackTrigger for="settings-view-id">
|
|
33
|
+
* <Button>Go to Settings</Button>
|
|
34
|
+
* </ViewStackTrigger>
|
|
35
|
+
* </ViewStackView>
|
|
36
|
+
* <ViewStackView id="settings-view-id">
|
|
37
|
+
* <h1>Settings</h1>
|
|
38
|
+
* <ViewStackTrigger for="back:main-stack">
|
|
39
|
+
* <Button>Back</Button>
|
|
40
|
+
* </ViewStackTrigger>
|
|
41
|
+
* </ViewStackView>
|
|
42
|
+
* </ViewStack>
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @param props - {@link ViewStackTriggerProps}
|
|
46
|
+
* @param props.children - Pressable children content.
|
|
47
|
+
* @param props.for - Navigation action(s) to trigger on press.
|
|
48
|
+
* @returns The rendered ViewStackTrigger component.
|
|
28
49
|
*/
|
|
29
50
|
function ViewStackTrigger({ children, for: types }) {
|
|
30
51
|
const { parent } = useContext(ViewStackContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.js","names":[],"sources":["../../../src/components/view-stack/trigger.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n'use client';\n\nimport 'client-only';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport { useContext } from 'react';\nimport { Pressable } from 'react-aria-components';\nimport { useViewStackEmit, ViewStackContext } from './context';\nimport type { ViewStackTriggerProps } from './types';\n\n/**\n * ViewStackTrigger -
|
|
1
|
+
{"version":3,"file":"trigger.js","names":[],"sources":["../../../src/components/view-stack/trigger.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n'use client';\n\nimport 'client-only';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport { useContext } from 'react';\nimport { Pressable } from 'react-aria-components';\nimport { useViewStackEmit, ViewStackContext } from './context';\nimport type { ViewStackTriggerProps } from './types';\n\n/**\n * ViewStackTrigger - Pressable element that triggers ViewStack navigation actions\n *\n * @example\n * ```tsx\n * <ViewStack id=\"main-stack\">\n * <ViewStackView id=\"home\">\n * <h1>Home</h1>\n * <ViewStackTrigger for=\"settings-view-id\">\n * <Button>Go to Settings</Button>\n * </ViewStackTrigger>\n * </ViewStackView>\n * <ViewStackView id=\"settings-view-id\">\n * <h1>Settings</h1>\n * <ViewStackTrigger for=\"back:main-stack\">\n * <Button>Back</Button>\n * </ViewStackTrigger>\n * </ViewStackView>\n * </ViewStack>\n * ```\n *\n * @param props - {@link ViewStackTriggerProps}\n * @param props.children - Pressable children content.\n * @param props.for - Navigation action(s) to trigger on press.\n * @returns The rendered ViewStackTrigger component.\n */\nexport function ViewStackTrigger({\n children,\n for: types,\n}: ViewStackTriggerProps) {\n const { parent } = useContext(ViewStackContext);\n const viewStackEmit = useViewStackEmit();\n\n function handlePress() {\n for (const type of Array.isArray(types) ? types : [types]) {\n let [event, id] = (isUUID(type) ? ['push', type] : type.split(':')) as [\n 'back' | 'clear' | 'reset' | 'push',\n UniqueId | undefined | null,\n ];\n\n id ??= parent;\n\n if (!id) {\n continue;\n }\n\n viewStackEmit[event](id);\n }\n }\n\n return <Pressable onPress={handlePress}>{children}</Pressable>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAgB,iBAAiB,EAC/B,UACA,KAAK,SACmB;CACxB,MAAM,EAAE,WAAW,WAAW,iBAAiB;CAC/C,MAAM,gBAAgB,kBAAkB;CAExC,SAAS,cAAc;AACrB,OAAK,MAAM,QAAQ,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE;GACzD,IAAI,CAAC,OAAO,MAAO,OAAO,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,KAAK,MAAM,IAAI;AAKlE,UAAO;AAEP,OAAI,CAAC,GACH;AAGF,iBAAc,OAAO,GAAG;;;AAI5B,QAAO,oBAAC;EAAU,SAAS;EAAc;GAAqB"}
|
|
@@ -17,31 +17,50 @@ import { Payload } from "@accelint/bus";
|
|
|
17
17
|
import { UniqueId } from "@accelint/core";
|
|
18
18
|
|
|
19
19
|
//#region src/components/view-stack/types.d.ts
|
|
20
|
+
/**
|
|
21
|
+
* Props for the ViewStack component.
|
|
22
|
+
*/
|
|
20
23
|
type ViewStackProps = RefAttributes<HTMLDivElement> & PropsWithChildren<{
|
|
24
|
+
/** Unique identifier for the stack. */
|
|
21
25
|
id: UniqueId;
|
|
26
|
+
/** Default view to display when the stack is initialized. */
|
|
22
27
|
defaultView?: UniqueId;
|
|
28
|
+
/** Callback when the active view changes. */
|
|
23
29
|
onChange?: (view: UniqueId | null) => void;
|
|
24
30
|
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Props for the ViewStackView component.
|
|
33
|
+
*/
|
|
25
34
|
type ViewStackViewProps = RefAttributes<HTMLDivElement> & PropsWithChildren<{
|
|
35
|
+
/** Unique identifier for the view. */
|
|
26
36
|
id: UniqueId;
|
|
27
37
|
}>;
|
|
38
|
+
/** Event payload for navigating back in a ViewStack. */
|
|
28
39
|
type ViewStackBackEvent = Payload<typeof ViewStackEventTypes.back, {
|
|
29
40
|
stack: UniqueId;
|
|
30
41
|
}>;
|
|
42
|
+
/** Event payload for clearing all views in a ViewStack. */
|
|
31
43
|
type ViewStackClearEvent = Payload<typeof ViewStackEventTypes.clear, {
|
|
32
44
|
stack: UniqueId;
|
|
33
45
|
}>;
|
|
46
|
+
/** Event payload for resetting a ViewStack to its default view. */
|
|
34
47
|
type ViewStackResetEvent = Payload<typeof ViewStackEventTypes.reset, {
|
|
35
48
|
stack: UniqueId;
|
|
36
49
|
}>;
|
|
50
|
+
/** Event payload for pushing a view onto a ViewStack. */
|
|
37
51
|
type ViewStackPushEvent = Payload<typeof ViewStackEventTypes.push, {
|
|
38
52
|
view: UniqueId;
|
|
39
53
|
}>;
|
|
54
|
+
/** Union of all ViewStack event types. */
|
|
40
55
|
type ViewStackEvent = ViewStackBackEvent | ViewStackClearEvent | ViewStackResetEvent | ViewStackPushEvent;
|
|
41
56
|
type SimpleEvents = 'back' | 'clear' | 'reset' | UniqueId;
|
|
42
57
|
type TargetedEvents = `back:${UniqueId}` | `clear:${UniqueId}` | `reset:${UniqueId}`;
|
|
43
58
|
type ChainedEvents = (SimpleEvents | TargetedEvents)[];
|
|
59
|
+
/**
|
|
60
|
+
* Props for the ViewStackTrigger component.
|
|
61
|
+
*/
|
|
44
62
|
type ViewStackTriggerProps = {
|
|
63
|
+
/** Pressable children content. */
|
|
45
64
|
children: ComponentProps<typeof Pressable>['children'];
|
|
46
65
|
/**
|
|
47
66
|
* __SimpleEvents__ allow the easiest implementation of events, but come with some restrictions:
|
|
@@ -53,6 +72,7 @@ type ViewStackTriggerProps = {
|
|
|
53
72
|
* __ChainedEvents__ allow a list of events from a single control to enable multiple behaviors
|
|
54
73
|
*
|
|
55
74
|
* @example
|
|
75
|
+
* ```ts
|
|
56
76
|
* // Clear a stack and then push a view on:
|
|
57
77
|
* ['clear', myViewId]
|
|
58
78
|
*
|
|
@@ -61,14 +81,23 @@ type ViewStackTriggerProps = {
|
|
|
61
81
|
*
|
|
62
82
|
* // Hydrate a stack with multiple views:
|
|
63
83
|
* [viewOneId, viewTwoId, viewThreeId]
|
|
84
|
+
* ```
|
|
64
85
|
*/
|
|
65
86
|
for: SimpleEvents | TargetedEvents | ChainedEvents;
|
|
66
87
|
};
|
|
88
|
+
/**
|
|
89
|
+
* Context value for the ViewStack component.
|
|
90
|
+
*/
|
|
67
91
|
type ViewStackContextValue = {
|
|
92
|
+
/** Parent stack identifier, or null if at root. */
|
|
68
93
|
parent: UniqueId | null;
|
|
94
|
+
/** Array of view IDs currently in the stack. */
|
|
69
95
|
stack: string[];
|
|
96
|
+
/** Currently active view ID, or null if empty. */
|
|
70
97
|
view: UniqueId | null;
|
|
98
|
+
/** Registers a view with the stack. */
|
|
71
99
|
register: (view: UniqueId) => void;
|
|
100
|
+
/** Unregisters a view from the stack. */
|
|
72
101
|
unregister: (view: UniqueId) => void;
|
|
73
102
|
};
|
|
74
103
|
//#endregion
|
|
@@ -12,18 +12,38 @@
|
|
|
12
12
|
|
|
13
13
|
import { ViewStackViewProps } from "./types.js";
|
|
14
14
|
import "client-only";
|
|
15
|
-
import * as
|
|
15
|
+
import * as react_jsx_runtime175 from "react/jsx-runtime";
|
|
16
16
|
|
|
17
17
|
//#region src/components/view-stack/view.d.ts
|
|
18
|
+
|
|
18
19
|
/**
|
|
19
20
|
* ViewStackView - Individual view in a ViewStack
|
|
20
21
|
*
|
|
21
22
|
* Represents a single view that can be pushed onto the ViewStack
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* <ViewStack id="app-stack">
|
|
27
|
+
* <ViewStackView id="home-view">
|
|
28
|
+
* <h1>Home Screen</h1>
|
|
29
|
+
* <p>Welcome to the app</p>
|
|
30
|
+
* </ViewStackView>
|
|
31
|
+
* <ViewStackView id="details-view">
|
|
32
|
+
* <h1>Details Screen</h1>
|
|
33
|
+
* <p>Detailed information</p>
|
|
34
|
+
* </ViewStackView>
|
|
35
|
+
* </ViewStack>
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @param props - {@link ViewStackViewProps}
|
|
39
|
+
* @param props.id - Unique identifier for the view.
|
|
40
|
+
* @param props.children - View content to render when active.
|
|
41
|
+
* @returns The rendered view content if active, or null.
|
|
22
42
|
*/
|
|
23
43
|
declare function ViewStackView({
|
|
24
44
|
id,
|
|
25
45
|
children
|
|
26
|
-
}: ViewStackViewProps):
|
|
46
|
+
}: ViewStackViewProps): react_jsx_runtime175.JSX.Element | null;
|
|
27
47
|
//#endregion
|
|
28
48
|
export { ViewStackView };
|
|
29
49
|
//# sourceMappingURL=view.d.ts.map
|
|
@@ -24,6 +24,25 @@ import { isUUID } from "@accelint/core";
|
|
|
24
24
|
* ViewStackView - Individual view in a ViewStack
|
|
25
25
|
*
|
|
26
26
|
* Represents a single view that can be pushed onto the ViewStack
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* <ViewStack id="app-stack">
|
|
31
|
+
* <ViewStackView id="home-view">
|
|
32
|
+
* <h1>Home Screen</h1>
|
|
33
|
+
* <p>Welcome to the app</p>
|
|
34
|
+
* </ViewStackView>
|
|
35
|
+
* <ViewStackView id="details-view">
|
|
36
|
+
* <h1>Details Screen</h1>
|
|
37
|
+
* <p>Detailed information</p>
|
|
38
|
+
* </ViewStackView>
|
|
39
|
+
* </ViewStack>
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @param props - {@link ViewStackViewProps}
|
|
43
|
+
* @param props.id - Unique identifier for the view.
|
|
44
|
+
* @param props.children - View content to render when active.
|
|
45
|
+
* @returns The rendered view content if active, or null.
|
|
27
46
|
*/
|
|
28
47
|
function ViewStackView({ id, children }) {
|
|
29
48
|
const { parent, view, register, unregister } = useContext(ViewStackContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","names":[],"sources":["../../../src/components/view-stack/view.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n'use client';\n\nimport { isUUID } from '@accelint/core';\nimport 'client-only';\nimport { Fragment, useContext, useEffect } from 'react';\nimport { ViewStackContext } from './context';\nimport type { ViewStackViewProps } from './types';\n\n/**\n * ViewStackView - Individual view in a ViewStack\n *\n * Represents a single view that can be pushed onto the ViewStack\n */\nexport function ViewStackView({ id, children }: ViewStackViewProps) {\n const { parent, view, register, unregister } = useContext(ViewStackContext);\n\n if (!parent) {\n throw new Error('ViewStackView must be implemented within a ViewStack');\n }\n\n if (!isUUID(id)) {\n throw new Error(`ViewStackView's id must be a UniqueId`);\n }\n\n useEffect(() => {\n register(id);\n\n return () => unregister(id);\n }, [register, unregister, id]);\n\n return view === id ? <Fragment key={id}>{children}</Fragment> : null;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"view.js","names":[],"sources":["../../../src/components/view-stack/view.tsx"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n'use client';\n\nimport { isUUID } from '@accelint/core';\nimport 'client-only';\nimport { Fragment, useContext, useEffect } from 'react';\nimport { ViewStackContext } from './context';\nimport type { ViewStackViewProps } from './types';\n\n/**\n * ViewStackView - Individual view in a ViewStack\n *\n * Represents a single view that can be pushed onto the ViewStack\n *\n * @example\n * ```tsx\n * <ViewStack id=\"app-stack\">\n * <ViewStackView id=\"home-view\">\n * <h1>Home Screen</h1>\n * <p>Welcome to the app</p>\n * </ViewStackView>\n * <ViewStackView id=\"details-view\">\n * <h1>Details Screen</h1>\n * <p>Detailed information</p>\n * </ViewStackView>\n * </ViewStack>\n * ```\n *\n * @param props - {@link ViewStackViewProps}\n * @param props.id - Unique identifier for the view.\n * @param props.children - View content to render when active.\n * @returns The rendered view content if active, or null.\n */\nexport function ViewStackView({ id, children }: ViewStackViewProps) {\n const { parent, view, register, unregister } = useContext(ViewStackContext);\n\n if (!parent) {\n throw new Error('ViewStackView must be implemented within a ViewStack');\n }\n\n if (!isUUID(id)) {\n throw new Error(`ViewStackView's id must be a UniqueId`);\n }\n\n useEffect(() => {\n register(id);\n\n return () => unregister(id);\n }, [register, unregister, id]);\n\n return view === id ? <Fragment key={id}>{children}</Fragment> : null;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,cAAc,EAAE,IAAI,YAAgC;CAClE,MAAM,EAAE,QAAQ,MAAM,UAAU,eAAe,WAAW,iBAAiB;AAE3E,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,uDAAuD;AAGzE,KAAI,CAAC,OAAO,GAAG,CACb,OAAM,IAAI,MAAM,wCAAwC;AAG1D,iBAAgB;AACd,WAAS,GAAG;AAEZ,eAAa,WAAW,GAAG;IAC1B;EAAC;EAAU;EAAY;EAAG,CAAC;AAE9B,QAAO,SAAS,KAAK,oBAAC,YAAmB,YAAL,GAAyB,GAAG"}
|
|
@@ -14,17 +14,61 @@ import { CoordinateSystem, CoordinateValue } from "../../components/coordinate-f
|
|
|
14
14
|
import { UseTimeoutCleanupResult } from "./use-timeout-cleanup.js";
|
|
15
15
|
|
|
16
16
|
//#region src/hooks/coordinate-field/use-coordinate-copy.d.ts
|
|
17
|
+
/** Options for the useCoordinateCopy hook */
|
|
17
18
|
interface UseCoordinateCopyOptions {
|
|
19
|
+
/** Current coordinate value to copy (null if empty) */
|
|
18
20
|
currentValue: CoordinateValue | null;
|
|
21
|
+
/** Array of validation error messages */
|
|
19
22
|
validationErrors: string[];
|
|
23
|
+
/** Whether copying is disabled */
|
|
20
24
|
isDisabled: boolean;
|
|
25
|
+
/** Function to register timeouts for cleanup */
|
|
21
26
|
registerTimeout: UseTimeoutCleanupResult['registerTimeout'];
|
|
22
27
|
}
|
|
28
|
+
/** Return value from the useCoordinateCopy hook */
|
|
23
29
|
interface UseCoordinateCopyResult {
|
|
30
|
+
/** Currently copied format (for visual feedback) or null */
|
|
24
31
|
copiedFormat: CoordinateSystem | null;
|
|
32
|
+
/** Copy coordinate in specified format to clipboard */
|
|
25
33
|
handleCopyFormat: (formatToCopy: CoordinateSystem) => Promise<void>;
|
|
34
|
+
/** Whether copy format buttons should be enabled */
|
|
26
35
|
isFormatButtonEnabled: boolean;
|
|
27
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Handles copying coordinates to clipboard with format conversion and visual feedback
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```tsx
|
|
42
|
+
* function CoordinateField() {
|
|
43
|
+
* const { registerTimeout } = useTimeoutCleanup();
|
|
44
|
+
* const [value, setValue] = useState<CoordinateValue | null>(null);
|
|
45
|
+
* const [errors, setErrors] = useState<string[]>([]);
|
|
46
|
+
*
|
|
47
|
+
* const { copiedFormat, handleCopyFormat, isFormatButtonEnabled } = useCoordinateCopy({
|
|
48
|
+
* currentValue: value,
|
|
49
|
+
* validationErrors: errors,
|
|
50
|
+
* isDisabled: false,
|
|
51
|
+
* registerTimeout,
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* return (
|
|
55
|
+
* <Button
|
|
56
|
+
* onPress={() => handleCopyFormat('dd')}
|
|
57
|
+
* isDisabled={!isFormatButtonEnabled}
|
|
58
|
+
* >
|
|
59
|
+
* {copiedFormat === 'dd' ? <Check /> : <Copy />}
|
|
60
|
+
* </Button>
|
|
61
|
+
* );
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* @param options - {@link UseCoordinateCopyOptions}
|
|
66
|
+
* @param options.currentValue - Current coordinate value to copy (null if empty).
|
|
67
|
+
* @param options.validationErrors - Array of validation error messages.
|
|
68
|
+
* @param options.isDisabled - Whether copying is disabled.
|
|
69
|
+
* @param options.registerTimeout - Function to register timeouts for cleanup.
|
|
70
|
+
* @returns {@link UseCoordinateCopyResult} Copy utilities and feedback state.
|
|
71
|
+
*/
|
|
28
72
|
declare function useCoordinateCopy({
|
|
29
73
|
currentValue,
|
|
30
74
|
validationErrors,
|
|
@@ -23,6 +23,41 @@ const logger = getLogger({
|
|
|
23
23
|
pretty: true
|
|
24
24
|
});
|
|
25
25
|
const COPY_FEEDBACK_DURATION_MS = 2e3;
|
|
26
|
+
/**
|
|
27
|
+
* Handles copying coordinates to clipboard with format conversion and visual feedback
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* function CoordinateField() {
|
|
32
|
+
* const { registerTimeout } = useTimeoutCleanup();
|
|
33
|
+
* const [value, setValue] = useState<CoordinateValue | null>(null);
|
|
34
|
+
* const [errors, setErrors] = useState<string[]>([]);
|
|
35
|
+
*
|
|
36
|
+
* const { copiedFormat, handleCopyFormat, isFormatButtonEnabled } = useCoordinateCopy({
|
|
37
|
+
* currentValue: value,
|
|
38
|
+
* validationErrors: errors,
|
|
39
|
+
* isDisabled: false,
|
|
40
|
+
* registerTimeout,
|
|
41
|
+
* });
|
|
42
|
+
*
|
|
43
|
+
* return (
|
|
44
|
+
* <Button
|
|
45
|
+
* onPress={() => handleCopyFormat('dd')}
|
|
46
|
+
* isDisabled={!isFormatButtonEnabled}
|
|
47
|
+
* >
|
|
48
|
+
* {copiedFormat === 'dd' ? <Check /> : <Copy />}
|
|
49
|
+
* </Button>
|
|
50
|
+
* );
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @param options - {@link UseCoordinateCopyOptions}
|
|
55
|
+
* @param options.currentValue - Current coordinate value to copy (null if empty).
|
|
56
|
+
* @param options.validationErrors - Array of validation error messages.
|
|
57
|
+
* @param options.isDisabled - Whether copying is disabled.
|
|
58
|
+
* @param options.registerTimeout - Function to register timeouts for cleanup.
|
|
59
|
+
* @returns {@link UseCoordinateCopyResult} Copy utilities and feedback state.
|
|
60
|
+
*/
|
|
26
61
|
function useCoordinateCopy({ currentValue, validationErrors, isDisabled, registerTimeout }) {
|
|
27
62
|
const [copiedFormat, setCopiedFormat] = useState(null);
|
|
28
63
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-coordinate-copy.js","names":[],"sources":["../../../src/hooks/coordinate-field/use-coordinate-copy.ts"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { getLogger } from '@accelint/logger';\nimport { useState } from 'react';\n\nconst logger = getLogger({\n enabled: process.env.NODE_ENV !== 'production',\n level: 'debug',\n prefix: '[CoordinateField]',\n pretty: true,\n});\n\nimport { getAllCoordinateFormats } from '../../components/coordinate-field/coordinate-utils';\nimport type {\n CoordinateSystem,\n CoordinateValue,\n} from '../../components/coordinate-field/types';\nimport type { UseTimeoutCleanupResult } from './use-timeout-cleanup';\n\nconst COPY_FEEDBACK_DURATION_MS = 2000;\n\nexport interface UseCoordinateCopyOptions {\n currentValue: CoordinateValue | null;\n validationErrors: string[];\n isDisabled: boolean;\n registerTimeout: UseTimeoutCleanupResult['registerTimeout'];\n}\n\nexport interface UseCoordinateCopyResult {\n copiedFormat: CoordinateSystem | null;\n handleCopyFormat: (formatToCopy: CoordinateSystem) => Promise<void>;\n isFormatButtonEnabled: boolean;\n}\n\nexport function useCoordinateCopy({\n currentValue,\n validationErrors,\n isDisabled,\n registerTimeout,\n}: UseCoordinateCopyOptions): UseCoordinateCopyResult {\n const [copiedFormat, setCopiedFormat] = useState<CoordinateSystem | null>(\n null,\n );\n\n /**\n * Fallback clipboard copy for browsers that don't support navigator.clipboard API.\n * Creates a temporary textarea, copies text using document.execCommand('copy'),\n * and provides visual feedback by setting copiedFormat state for 2 seconds.\n *\n * @param text - The coordinate string to copy to clipboard\n * @param formatToCopy - The coordinate format being copied (for UI feedback)\n */\n const fallbackCopyToClipboard = (\n text: string,\n formatToCopy: CoordinateSystem,\n ) => {\n // Create temporary textarea for copy operation\n const textArea = document.createElement('textarea');\n textArea.value = text;\n // Position off-screen so it's not visible to user\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n document.execCommand('copy');\n\n // Set copied format to show Check icon in UI\n setCopiedFormat(formatToCopy);\n\n // Reset to null after 2 seconds to return to Copy icon\n registerTimeout(\n setTimeout(() => {\n setCopiedFormat(null);\n }, COPY_FEEDBACK_DURATION_MS),\n );\n } catch (err) {\n logger.withError(err).warn('Fallback copy to clipboard failed');\n }\n\n // Clean up temporary textarea\n document.body.removeChild(textArea);\n };\n\n /**\n * Handles copying a coordinate in the specified format to the clipboard.\n * Uses modern clipboard API (navigator.clipboard.writeText) with fallback\n * to document.execCommand for older browsers.\n *\n * Sets copiedFormat state to show visual feedback (Check icon) for 2 seconds.\n *\n * @param formatToCopy - The coordinate format to copy (dd, ddm, dms, mgrs, utm)\n */\n const handleCopyFormat = async (formatToCopy: CoordinateSystem) => {\n if (!currentValue) {\n return;\n }\n\n const allFormats = getAllCoordinateFormats(currentValue);\n const formatResult = allFormats[formatToCopy];\n\n if (!formatResult.isValid) {\n return;\n }\n\n try {\n // Modern clipboard API - copy and show feedback\n await navigator.clipboard.writeText(formatResult.value);\n\n // Set copied format to show Check icon in UI\n setCopiedFormat(formatToCopy);\n\n // Reset to null after 2 seconds to return to Copy icon\n registerTimeout(\n setTimeout(() => {\n setCopiedFormat(null);\n }, COPY_FEEDBACK_DURATION_MS),\n );\n } catch (_err) {\n // Fall back to document.execCommand for older browsers\n fallbackCopyToClipboard(formatResult.value, formatToCopy);\n }\n };\n\n const isFormatButtonEnabled =\n currentValue !== null && validationErrors.length === 0 && !isDisabled;\n\n return {\n copiedFormat,\n handleCopyFormat,\n isFormatButtonEnabled,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,MAAM,SAAS,UAAU;CACvB,SAAS,QAAQ,IAAI,aAAa;CAClC,OAAO;CACP,QAAQ;CACR,QAAQ;CACT,CAAC;AASF,MAAM,4BAA4B
|
|
1
|
+
{"version":3,"file":"use-coordinate-copy.js","names":[],"sources":["../../../src/hooks/coordinate-field/use-coordinate-copy.ts"],"sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { getLogger } from '@accelint/logger';\nimport { useState } from 'react';\n\nconst logger = getLogger({\n enabled: process.env.NODE_ENV !== 'production',\n level: 'debug',\n prefix: '[CoordinateField]',\n pretty: true,\n});\n\nimport { getAllCoordinateFormats } from '../../components/coordinate-field/coordinate-utils';\nimport type {\n CoordinateSystem,\n CoordinateValue,\n} from '../../components/coordinate-field/types';\nimport type { UseTimeoutCleanupResult } from './use-timeout-cleanup';\n\nconst COPY_FEEDBACK_DURATION_MS = 2000;\n\n/** Options for the useCoordinateCopy hook */\nexport interface UseCoordinateCopyOptions {\n /** Current coordinate value to copy (null if empty) */\n currentValue: CoordinateValue | null;\n /** Array of validation error messages */\n validationErrors: string[];\n /** Whether copying is disabled */\n isDisabled: boolean;\n /** Function to register timeouts for cleanup */\n registerTimeout: UseTimeoutCleanupResult['registerTimeout'];\n}\n\n/** Return value from the useCoordinateCopy hook */\nexport interface UseCoordinateCopyResult {\n /** Currently copied format (for visual feedback) or null */\n copiedFormat: CoordinateSystem | null;\n /** Copy coordinate in specified format to clipboard */\n handleCopyFormat: (formatToCopy: CoordinateSystem) => Promise<void>;\n /** Whether copy format buttons should be enabled */\n isFormatButtonEnabled: boolean;\n}\n\n/**\n * Handles copying coordinates to clipboard with format conversion and visual feedback\n *\n * @example\n * ```tsx\n * function CoordinateField() {\n * const { registerTimeout } = useTimeoutCleanup();\n * const [value, setValue] = useState<CoordinateValue | null>(null);\n * const [errors, setErrors] = useState<string[]>([]);\n *\n * const { copiedFormat, handleCopyFormat, isFormatButtonEnabled } = useCoordinateCopy({\n * currentValue: value,\n * validationErrors: errors,\n * isDisabled: false,\n * registerTimeout,\n * });\n *\n * return (\n * <Button\n * onPress={() => handleCopyFormat('dd')}\n * isDisabled={!isFormatButtonEnabled}\n * >\n * {copiedFormat === 'dd' ? <Check /> : <Copy />}\n * </Button>\n * );\n * }\n * ```\n *\n * @param options - {@link UseCoordinateCopyOptions}\n * @param options.currentValue - Current coordinate value to copy (null if empty).\n * @param options.validationErrors - Array of validation error messages.\n * @param options.isDisabled - Whether copying is disabled.\n * @param options.registerTimeout - Function to register timeouts for cleanup.\n * @returns {@link UseCoordinateCopyResult} Copy utilities and feedback state.\n */\nexport function useCoordinateCopy({\n currentValue,\n validationErrors,\n isDisabled,\n registerTimeout,\n}: UseCoordinateCopyOptions): UseCoordinateCopyResult {\n const [copiedFormat, setCopiedFormat] = useState<CoordinateSystem | null>(\n null,\n );\n\n /**\n * Fallback clipboard copy for browsers that don't support navigator.clipboard API.\n * Creates a temporary textarea, copies text using document.execCommand('copy'),\n * and provides visual feedback by setting copiedFormat state for 2 seconds.\n *\n * @param text - The coordinate string to copy to clipboard\n * @param formatToCopy - The coordinate format being copied (for UI feedback)\n */\n const fallbackCopyToClipboard = (\n text: string,\n formatToCopy: CoordinateSystem,\n ) => {\n // Create temporary textarea for copy operation\n const textArea = document.createElement('textarea');\n textArea.value = text;\n // Position off-screen so it's not visible to user\n textArea.style.position = 'fixed';\n textArea.style.left = '-999999px';\n textArea.style.top = '-999999px';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n try {\n document.execCommand('copy');\n\n // Set copied format to show Check icon in UI\n setCopiedFormat(formatToCopy);\n\n // Reset to null after 2 seconds to return to Copy icon\n registerTimeout(\n setTimeout(() => {\n setCopiedFormat(null);\n }, COPY_FEEDBACK_DURATION_MS),\n );\n } catch (err) {\n logger.withError(err).warn('Fallback copy to clipboard failed');\n }\n\n // Clean up temporary textarea\n document.body.removeChild(textArea);\n };\n\n /**\n * Handles copying a coordinate in the specified format to the clipboard.\n * Uses modern clipboard API (navigator.clipboard.writeText) with fallback\n * to document.execCommand for older browsers.\n *\n * Sets copiedFormat state to show visual feedback (Check icon) for 2 seconds.\n *\n * @param formatToCopy - The coordinate format to copy (dd, ddm, dms, mgrs, utm)\n */\n const handleCopyFormat = async (formatToCopy: CoordinateSystem) => {\n if (!currentValue) {\n return;\n }\n\n const allFormats = getAllCoordinateFormats(currentValue);\n const formatResult = allFormats[formatToCopy];\n\n if (!formatResult.isValid) {\n return;\n }\n\n try {\n // Modern clipboard API - copy and show feedback\n await navigator.clipboard.writeText(formatResult.value);\n\n // Set copied format to show Check icon in UI\n setCopiedFormat(formatToCopy);\n\n // Reset to null after 2 seconds to return to Copy icon\n registerTimeout(\n setTimeout(() => {\n setCopiedFormat(null);\n }, COPY_FEEDBACK_DURATION_MS),\n );\n } catch (_err) {\n // Fall back to document.execCommand for older browsers\n fallbackCopyToClipboard(formatResult.value, formatToCopy);\n }\n };\n\n const isFormatButtonEnabled =\n currentValue !== null && validationErrors.length === 0 && !isDisabled;\n\n return {\n copiedFormat,\n handleCopyFormat,\n isFormatButtonEnabled,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,MAAM,SAAS,UAAU;CACvB,SAAS,QAAQ,IAAI,aAAa;CAClC,OAAO;CACP,QAAQ;CACR,QAAQ;CACT,CAAC;AASF,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DlC,SAAgB,kBAAkB,EAChC,cACA,kBACA,YACA,mBACoD;CACpD,MAAM,CAAC,cAAc,mBAAmB,SACtC,KACD;;;;;;;;;CAUD,MAAM,2BACJ,MACA,iBACG;EAEH,MAAM,WAAW,SAAS,cAAc,WAAW;AACnD,WAAS,QAAQ;AAEjB,WAAS,MAAM,WAAW;AAC1B,WAAS,MAAM,OAAO;AACtB,WAAS,MAAM,MAAM;AACrB,WAAS,KAAK,YAAY,SAAS;AACnC,WAAS,OAAO;AAChB,WAAS,QAAQ;AAEjB,MAAI;AACF,YAAS,YAAY,OAAO;AAG5B,mBAAgB,aAAa;AAG7B,mBACE,iBAAiB;AACf,oBAAgB,KAAK;MACpB,0BAA0B,CAC9B;WACM,KAAK;AACZ,UAAO,UAAU,IAAI,CAAC,KAAK,oCAAoC;;AAIjE,WAAS,KAAK,YAAY,SAAS;;;;;;;;;;;CAYrC,MAAM,mBAAmB,OAAO,iBAAmC;AACjE,MAAI,CAAC,aACH;EAIF,MAAM,eADa,wBAAwB,aAAa,CACxB;AAEhC,MAAI,CAAC,aAAa,QAChB;AAGF,MAAI;AAEF,SAAM,UAAU,UAAU,UAAU,aAAa,MAAM;AAGvD,mBAAgB,aAAa;AAG7B,mBACE,iBAAiB;AACf,oBAAgB,KAAK;MACpB,0BAA0B,CAC9B;WACM,MAAM;AAEb,2BAAwB,aAAa,OAAO,aAAa;;;AAO7D,QAAO;EACL;EACA;EACA,uBALA,iBAAiB,QAAQ,iBAAiB,WAAW,KAAK,CAAC;EAM5D"}
|
|
@@ -14,27 +14,96 @@ import { CoordinateSystem, CoordinateValue, SegmentConfig } from "../../componen
|
|
|
14
14
|
import { Dispatch, SetStateAction } from "react";
|
|
15
15
|
|
|
16
16
|
//#region src/hooks/coordinate-field/use-coordinate-field-state.d.ts
|
|
17
|
+
/** Options for the useCoordinateFieldState hook */
|
|
17
18
|
interface UseCoordinateFieldStateOptions {
|
|
19
|
+
/** Controlled coordinate value */
|
|
18
20
|
value?: CoordinateValue | null;
|
|
21
|
+
/** Default value for uncontrolled mode */
|
|
19
22
|
defaultValue?: CoordinateValue;
|
|
23
|
+
/** Coordinate format system (dd, ddm, dms, mgrs, utm) */
|
|
20
24
|
format: CoordinateSystem;
|
|
25
|
+
/** Callback when coordinate value changes */
|
|
21
26
|
onChange?: Dispatch<SetStateAction<CoordinateValue | null>> | ((value: CoordinateValue | null) => void);
|
|
27
|
+
/** Callback for validation errors */
|
|
22
28
|
onError?: (message: string, context?: Record<string, unknown>) => void;
|
|
29
|
+
/** Register timeouts for cleanup on unmount */
|
|
23
30
|
registerTimeout?: (timeoutId: NodeJS.Timeout) => void;
|
|
24
31
|
}
|
|
32
|
+
/** Return value from the useCoordinateFieldState hook */
|
|
25
33
|
interface UseCoordinateFieldStateResult {
|
|
34
|
+
/** Current coordinate value (null if incomplete/invalid) */
|
|
26
35
|
currentValue: CoordinateValue | null;
|
|
36
|
+
/** Array of display values for each segment */
|
|
27
37
|
segmentValues: string[];
|
|
38
|
+
/** Array of validation error messages */
|
|
28
39
|
validationErrors: string[];
|
|
40
|
+
/** All segment configurations including literals */
|
|
29
41
|
segmentConfigs: SegmentConfig[];
|
|
42
|
+
/** Only editable segment configurations */
|
|
30
43
|
editableSegmentConfigs: SegmentConfig[];
|
|
44
|
+
/** Handle change of a single segment */
|
|
31
45
|
handleSegmentChange: (index: number, newValue: string) => void;
|
|
46
|
+
/** Set all segment values at once */
|
|
32
47
|
setSegmentValues: (values: string[]) => void;
|
|
48
|
+
/** Set validation errors */
|
|
33
49
|
setValidationErrors: (errors: string[]) => void;
|
|
50
|
+
/** First validation error or null */
|
|
34
51
|
effectiveErrorMessage: string | null;
|
|
52
|
+
/** Apply a pasted coordinate value */
|
|
35
53
|
applyPastedCoordinate: (pastedValue: CoordinateValue) => void;
|
|
54
|
+
/** Immediately run pending validation */
|
|
36
55
|
flushPendingValidation: () => void;
|
|
37
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Manages coordinate segment values, validation, and format conversion
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```tsx
|
|
62
|
+
* function CoordinateInputs() {
|
|
63
|
+
* const [value, setValue] = useState<CoordinateValue | null>(null);
|
|
64
|
+
* const { registerTimeout } = useTimeoutCleanup();
|
|
65
|
+
*
|
|
66
|
+
* const {
|
|
67
|
+
* currentValue,
|
|
68
|
+
* segmentValues,
|
|
69
|
+
* validationErrors,
|
|
70
|
+
* editableSegmentConfigs,
|
|
71
|
+
* handleSegmentChange,
|
|
72
|
+
* } = useCoordinateFieldState({
|
|
73
|
+
* value,
|
|
74
|
+
* format: 'ddm',
|
|
75
|
+
* onChange: setValue,
|
|
76
|
+
* onError: (msg) => console.error(msg),
|
|
77
|
+
* registerTimeout,
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* return (
|
|
81
|
+
* <div>
|
|
82
|
+
* {editableSegmentConfigs.map((config, i) => (
|
|
83
|
+
* <input
|
|
84
|
+
* key={i}
|
|
85
|
+
* value={segmentValues[i]}
|
|
86
|
+
* onChange={(e) => handleSegmentChange(i, e.target.value)}
|
|
87
|
+
* placeholder={config.placeholder}
|
|
88
|
+
* />
|
|
89
|
+
* ))}
|
|
90
|
+
* {validationErrors.map((error, i) => (
|
|
91
|
+
* <span key={i}>{error}</span>
|
|
92
|
+
* ))}
|
|
93
|
+
* </div>
|
|
94
|
+
* );
|
|
95
|
+
* }
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* @param options - {@link UseCoordinateFieldStateOptions}
|
|
99
|
+
* @param options.value - Controlled coordinate value.
|
|
100
|
+
* @param options.defaultValue - Default value for uncontrolled mode.
|
|
101
|
+
* @param options.format - Coordinate format system (dd, ddm, dms, mgrs, utm).
|
|
102
|
+
* @param options.onChange - Callback when coordinate value changes.
|
|
103
|
+
* @param options.onError - Callback for validation errors.
|
|
104
|
+
* @param options.registerTimeout - Register timeouts for cleanup on unmount.
|
|
105
|
+
* @returns {@link UseCoordinateFieldStateResult} Segment state, validation, and change handlers.
|
|
106
|
+
*/
|
|
38
107
|
declare function useCoordinateFieldState({
|
|
39
108
|
value,
|
|
40
109
|
defaultValue,
|