@rivetjs/cdk 0.0.0-stage → 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +483 -0
- package/README.md +10 -2
- package/_adapters/collection.d.ts +160 -0
- package/_adapters/collection.js +235 -0
- package/_adapters/collections.d.ts +325 -0
- package/_adapters/collections.js +934 -0
- package/_adapters/dom-collection.d.ts +42 -0
- package/_adapters/dom-collection.js +228 -0
- package/_adapters/grid-selection.d.ts +115 -0
- package/_adapters/grid-selection.js +436 -0
- package/_adapters/interactions.d.ts +19 -0
- package/_adapters/interactions.js +45 -0
- package/_adapters/intl.d.ts +8 -0
- package/_adapters/intl.js +106 -0
- package/_adapters/press.d.ts +22 -0
- package/_adapters/press.js +34 -0
- package/_adapters/selectable.d.ts +132 -0
- package/_adapters/selectable.js +599 -0
- package/_adapters/selection.d.ts +120 -0
- package/_adapters/selection.js +709 -0
- package/_adapters/type-select.d.ts +8 -0
- package/_adapters/type-select.js +59 -0
- package/a11y/aria-describer.d.ts +46 -0
- package/a11y/aria-describer.js +169 -0
- package/a11y/focus-monitor.d.ts +98 -0
- package/a11y/focus-monitor.js +321 -0
- package/a11y/focus-trap.d.ts +137 -0
- package/a11y/focus-trap.js +378 -0
- package/a11y/high-contrast.d.ts +26 -0
- package/a11y/high-contrast.js +84 -0
- package/a11y/index.d.ts +37 -0
- package/a11y/index.js +97 -0
- package/a11y/interactivity-checker.d.ts +18 -0
- package/a11y/interactivity-checker.js +126 -0
- package/a11y/key-manager.d.ts +152 -0
- package/a11y/key-manager.js +397 -0
- package/a11y/live-announcer.d.ts +53 -0
- package/a11y/live-announcer.js +143 -0
- package/accordion/index.d.ts +2 -0
- package/accordion/index.jsx +10 -0
- package/announcer/index.d.ts +8 -0
- package/announcer/index.jsx +22 -0
- package/announcer/live-announcer.d.ts +15 -0
- package/announcer/live-announcer.js +123 -0
- package/autocomplete/behaviour.d.ts +94 -0
- package/autocomplete/behaviour.jsx +423 -0
- package/autocomplete/contexts.d.ts +54 -0
- package/autocomplete/contexts.js +28 -0
- package/autocomplete/index.d.ts +12 -0
- package/autocomplete/index.jsx +31 -0
- package/autocomplete/intl.d.ts +2 -0
- package/autocomplete/intl.js +36 -0
- package/bidi/bidi-dir.d.ts +23 -0
- package/bidi/bidi-dir.jsx +36 -0
- package/bidi/index.d.ts +58 -0
- package/bidi/index.js +84 -0
- package/breadcrumbs/behaviour.d.ts +6 -0
- package/breadcrumbs/behaviour.js +17 -0
- package/breadcrumbs/index.d.ts +68 -0
- package/breadcrumbs/index.jsx +224 -0
- package/breadcrumbs/intl.d.ts +3 -0
- package/breadcrumbs/intl.js +104 -0
- package/button/behaviour.d.ts +61 -0
- package/button/behaviour.js +90 -0
- package/button/index.d.ts +38 -0
- package/button/index.jsx +376 -0
- package/button/press.d.ts +25 -0
- package/button/press.js +54 -0
- package/calendar/behaviour.d.ts +250 -0
- package/calendar/behaviour.jsx +939 -0
- package/calendar/index.d.ts +157 -0
- package/calendar/index.jsx +484 -0
- package/calendar/intl.d.ts +3 -0
- package/calendar/intl.js +36 -0
- package/carousel/behaviour.d.ts +50 -0
- package/carousel/behaviour.jsx +365 -0
- package/carousel/engine/Alignment.d.ts +5 -0
- package/carousel/engine/Alignment.js +24 -0
- package/carousel/engine/Animations.d.ts +13 -0
- package/carousel/engine/Animations.js +28 -0
- package/carousel/engine/Axis.d.ts +14 -0
- package/carousel/engine/Axis.js +35 -0
- package/carousel/engine/Counter.d.ts +7 -0
- package/carousel/engine/Counter.js +32 -0
- package/carousel/engine/DragHandler.d.ts +22 -0
- package/carousel/engine/DragHandler.js +141 -0
- package/carousel/engine/DragTracker.d.ts +10 -0
- package/carousel/engine/DragTracker.js +29 -0
- package/carousel/engine/EmblaCarousel.d.ts +32 -0
- package/carousel/engine/EmblaCarousel.js +177 -0
- package/carousel/engine/Engine.d.ts +64 -0
- package/carousel/engine/Engine.js +137 -0
- package/carousel/engine/EventHandler.d.ts +27 -0
- package/carousel/engine/EventHandler.js +33 -0
- package/carousel/engine/EventStore.d.ts +9 -0
- package/carousel/engine/EventStore.js +25 -0
- package/carousel/engine/NodeRects.d.ts +12 -0
- package/carousel/engine/NodeRects.js +18 -0
- package/carousel/engine/Options.d.ts +40 -0
- package/carousel/engine/Options.js +22 -0
- package/carousel/engine/OptionsHandler.d.ts +10 -0
- package/carousel/engine/OptionsHandler.js +26 -0
- package/carousel/engine/PercentOfView.d.ts +4 -0
- package/carousel/engine/PercentOfView.js +9 -0
- package/carousel/engine/Plugins.d.ts +16 -0
- package/carousel/engine/Plugins.js +1 -0
- package/carousel/engine/PluginsHandler.d.ts +8 -0
- package/carousel/engine/PluginsHandler.js +16 -0
- package/carousel/engine/ResizeHandler.d.ts +13 -0
- package/carousel/engine/ResizeHandler.js +51 -0
- package/carousel/engine/ScrollBounds.d.ts +10 -0
- package/carousel/engine/ScrollBounds.js +41 -0
- package/carousel/engine/ScrollContain.d.ts +7 -0
- package/carousel/engine/ScrollContain.js +52 -0
- package/carousel/engine/ScrollLimit.d.ts +5 -0
- package/carousel/engine/ScrollLimit.js +13 -0
- package/carousel/engine/ScrollLooper.d.ts +6 -0
- package/carousel/engine/ScrollLooper.js +26 -0
- package/carousel/engine/ScrollProgress.d.ts +5 -0
- package/carousel/engine/ScrollProgress.js +11 -0
- package/carousel/engine/ScrollSnaps.d.ts +9 -0
- package/carousel/engine/ScrollSnaps.js +26 -0
- package/carousel/engine/ScrollTarget.d.ts +12 -0
- package/carousel/engine/ScrollTarget.js +47 -0
- package/carousel/engine/ScrollTo.d.ts +11 -0
- package/carousel/engine/ScrollTo.js +36 -0
- package/carousel/engine/SlideFocus.d.ts +13 -0
- package/carousel/engine/SlideFocus.js +39 -0
- package/carousel/engine/SlideLooper.d.ts +18 -0
- package/carousel/engine/SlideLooper.js +78 -0
- package/carousel/engine/SlideRegistry.d.ts +7 -0
- package/carousel/engine/SlideRegistry.js +31 -0
- package/carousel/engine/SlideSizes.d.ts +10 -0
- package/carousel/engine/SlideSizes.js +41 -0
- package/carousel/engine/SlidesHandler.d.ts +10 -0
- package/carousel/engine/SlidesHandler.js +36 -0
- package/carousel/engine/SlidesInView.d.ts +8 -0
- package/carousel/engine/SlidesInView.js +59 -0
- package/carousel/engine/SlidesToScroll.d.ts +7 -0
- package/carousel/engine/SlidesToScroll.js +41 -0
- package/carousel/engine/Translate.d.ts +7 -0
- package/carousel/engine/Translate.js +38 -0
- package/carousel/engine/index.d.ts +11 -0
- package/carousel/engine/index.js +1 -0
- package/carousel/engine/utils.d.ts +15 -0
- package/carousel/engine/utils.js +45 -0
- package/carousel/index.d.ts +202 -0
- package/carousel/index.jsx +469 -0
- package/carousel/plugins/auto-height/AutoHeight.d.ts +14 -0
- package/carousel/plugins/auto-height/AutoHeight.js +43 -0
- package/carousel/plugins/auto-height/Options.d.ts +2 -0
- package/carousel/plugins/auto-height/Options.js +1 -0
- package/carousel/plugins/auto-height/index.d.ts +2 -0
- package/carousel/plugins/auto-height/index.js +1 -0
- package/carousel/plugins/auto-scroll/AutoScroll.d.ts +25 -0
- package/carousel/plugins/auto-scroll/AutoScroll.js +185 -0
- package/carousel/plugins/auto-scroll/Options.d.ts +13 -0
- package/carousel/plugins/auto-scroll/Options.js +12 -0
- package/carousel/plugins/auto-scroll/index.d.ts +2 -0
- package/carousel/plugins/auto-scroll/index.js +1 -0
- package/carousel/plugins/auto-scroll/utils.d.ts +3 -0
- package/carousel/plugins/auto-scroll/utils.js +4 -0
- package/carousel/plugins/autoplay/Autoplay.d.ts +29 -0
- package/carousel/plugins/autoplay/Autoplay.js +173 -0
- package/carousel/plugins/autoplay/Options.d.ts +14 -0
- package/carousel/plugins/autoplay/Options.js +12 -0
- package/carousel/plugins/autoplay/index.d.ts +2 -0
- package/carousel/plugins/autoplay/index.js +1 -0
- package/carousel/plugins/autoplay/utils.d.ts +4 -0
- package/carousel/plugins/autoplay/utils.js +11 -0
- package/carousel/plugins/class-names/ClassNames.d.ts +14 -0
- package/carousel/plugins/class-names/ClassNames.js +98 -0
- package/carousel/plugins/class-names/Options.d.ts +13 -0
- package/carousel/plugins/class-names/Options.js +9 -0
- package/carousel/plugins/class-names/index.d.ts +2 -0
- package/carousel/plugins/class-names/index.js +1 -0
- package/carousel/plugins/class-names/utils.d.ts +4 -0
- package/carousel/plugins/class-names/utils.js +14 -0
- package/carousel/plugins/fade/Fade.d.ts +14 -0
- package/carousel/plugins/fade/Fade.js +199 -0
- package/carousel/plugins/fade/Options.d.ts +2 -0
- package/carousel/plugins/fade/Options.js +1 -0
- package/carousel/plugins/fade/index.d.ts +2 -0
- package/carousel/plugins/fade/index.js +1 -0
- package/carousel/plugins/fade/utils.d.ts +2 -0
- package/carousel/plugins/fade/utils.js +8 -0
- package/carousel/state.d.ts +81 -0
- package/carousel/state.js +71 -0
- package/chat/index.d.ts +83 -0
- package/chat/index.jsx +287 -0
- package/checkbox/behaviour.d.ts +172 -0
- package/checkbox/behaviour.jsx +412 -0
- package/checkbox/index.d.ts +168 -0
- package/checkbox/index.jsx +310 -0
- package/clipboard/index.d.ts +49 -0
- package/clipboard/index.js +136 -0
- package/coercion/index.d.ts +36 -0
- package/coercion/index.js +58 -0
- package/collections/base.d.ts +115 -0
- package/collections/base.js +346 -0
- package/collections/builder.d.ts +44 -0
- package/collections/builder.js +283 -0
- package/collections/components.d.ts +252 -0
- package/collections/components.jsx +745 -0
- package/collections/data-source.d.ts +26 -0
- package/collections/data-source.js +27 -0
- package/collections/dom.d.ts +34 -0
- package/collections/dom.js +127 -0
- package/collections/grid.d.ts +45 -0
- package/collections/grid.js +125 -0
- package/collections/hidden.d.ts +4 -0
- package/collections/hidden.js +12 -0
- package/collections/index.d.ts +45 -0
- package/collections/index.js +105 -0
- package/collections/list-state.d.ts +99 -0
- package/collections/list-state.js +156 -0
- package/collections/list.d.ts +20 -0
- package/collections/list.js +77 -0
- package/collections/nodes.d.ts +17 -0
- package/collections/nodes.js +107 -0
- package/collections/row-stamps.d.ts +17 -0
- package/collections/row-stamps.js +108 -0
- package/collections/selection-model.d.ts +93 -0
- package/collections/selection-model.js +192 -0
- package/collections/server-dev.d.ts +6 -0
- package/collections/server-dev.js +18 -0
- package/collections/server-off.d.ts +6 -0
- package/collections/server-off.js +9 -0
- package/collections/server-on.d.ts +29 -0
- package/collections/server-on.jsx +86 -0
- package/collections/table.d.ts +114 -0
- package/collections/table.js +439 -0
- package/collections/tree-state.d.ts +47 -0
- package/collections/tree-state.js +73 -0
- package/collections/tree.d.ts +20 -0
- package/collections/tree.js +66 -0
- package/collections/types.d.ts +229 -0
- package/collections/types.js +4 -0
- package/collections/unique-selection-dispatcher.d.ts +10 -0
- package/collections/unique-selection-dispatcher.js +25 -0
- package/color/area-state.d.ts +99 -0
- package/color/area-state.js +160 -0
- package/color/aria-intl.d.ts +3 -0
- package/color/aria-intl.js +274 -0
- package/color/channel-field-state.d.ts +50 -0
- package/color/channel-field-state.jsx +87 -0
- package/color/color.d.ts +78 -0
- package/color/color.js +738 -0
- package/color/field-state.d.ts +66 -0
- package/color/field-state.jsx +159 -0
- package/color/index.d.ts +58 -0
- package/color/index.js +88 -0
- package/color/intl.d.ts +3 -0
- package/color/intl.js +1328 -0
- package/color/picker-state.d.ts +20 -0
- package/color/picker-state.js +19 -0
- package/color/slider-state.d.ts +78 -0
- package/color/slider-state.jsx +98 -0
- package/color/value.d.ts +27 -0
- package/color/value.js +36 -0
- package/color/wheel-state.d.ts +77 -0
- package/color/wheel-state.js +152 -0
- package/color-area/behaviour.d.ts +161 -0
- package/color-area/behaviour.jsx +454 -0
- package/color-area/index.d.ts +34 -0
- package/color-area/index.jsx +187 -0
- package/color-field/behaviour.d.ts +112 -0
- package/color-field/behaviour.jsx +262 -0
- package/color-field/index.d.ts +72 -0
- package/color-field/index.jsx +309 -0
- package/color-picker/index.d.ts +19 -0
- package/color-picker/index.jsx +49 -0
- package/color-slider/behaviour.d.ts +103 -0
- package/color-slider/behaviour.jsx +234 -0
- package/color-slider/index.d.ts +40 -0
- package/color-slider/index.jsx +162 -0
- package/color-swatch/behaviour.d.ts +40 -0
- package/color-swatch/behaviour.js +36 -0
- package/color-swatch/index.d.ts +29 -0
- package/color-swatch/index.jsx +82 -0
- package/color-swatch-picker/index.d.ts +62 -0
- package/color-swatch-picker/index.jsx +95 -0
- package/color-swatch-picker/intl.d.ts +3 -0
- package/color-swatch-picker/intl.js +104 -0
- package/color-thumb/index.d.ts +85 -0
- package/color-thumb/index.jsx +93 -0
- package/color-wheel/behaviour.d.ts +123 -0
- package/color-wheel/behaviour.jsx +301 -0
- package/color-wheel/index.d.ts +50 -0
- package/color-wheel/index.jsx +166 -0
- package/combobox/behaviour.d.ts +120 -0
- package/combobox/behaviour.jsx +588 -0
- package/combobox/index.d.ts +101 -0
- package/combobox/index.jsx +365 -0
- package/combobox/intl.d.ts +2 -0
- package/combobox/intl.js +240 -0
- package/compare/behaviour.d.ts +101 -0
- package/compare/behaviour.js +288 -0
- package/compare/index.d.ts +58 -0
- package/compare/index.jsx +129 -0
- package/data/async-list.d.ts +78 -0
- package/data/async-list.jsx +257 -0
- package/data/index.d.ts +3 -0
- package/data/index.jsx +6 -0
- package/data/list-data.d.ts +88 -0
- package/data/list-data.jsx +210 -0
- package/data/tree-data.d.ts +59 -0
- package/data/tree-data.jsx +278 -0
- package/data-grid/behaviour.d.ts +95 -0
- package/data-grid/behaviour.js +725 -0
- package/data-grid/index.d.ts +138 -0
- package/data-grid/index.jsx +452 -0
- package/data-grid/state.d.ts +131 -0
- package/data-grid/state.js +288 -0
- package/date/CalendarDate.d.ts +207 -0
- package/date/CalendarDate.js +374 -0
- package/date/DateFormatter.d.ts +24 -0
- package/date/DateFormatter.js +175 -0
- package/date/calendars/BuddhistCalendar.d.ts +16 -0
- package/date/calendars/BuddhistCalendar.js +46 -0
- package/date/calendars/EthiopicCalendar.d.ts +45 -0
- package/date/calendars/EthiopicCalendar.js +178 -0
- package/date/calendars/GregorianCalendar.d.ts +26 -0
- package/date/calendars/GregorianCalendar.js +122 -0
- package/date/calendars/HebrewCalendar.d.ts +21 -0
- package/date/calendars/HebrewCalendar.js +174 -0
- package/date/calendars/IndianCalendar.d.ts +17 -0
- package/date/calendars/IndianCalendar.js +111 -0
- package/date/calendars/IslamicCalendar.d.ts +51 -0
- package/date/calendars/IslamicCalendar.js +205 -0
- package/date/calendars/JapaneseCalendar.d.ts +22 -0
- package/date/calendars/JapaneseCalendar.js +148 -0
- package/date/calendars/PersianCalendar.d.ts +19 -0
- package/date/calendars/PersianCalendar.js +85 -0
- package/date/calendars/TaiwanCalendar.d.ts +19 -0
- package/date/calendars/TaiwanCalendar.js +70 -0
- package/date/conversion.d.ts +45 -0
- package/date/conversion.js +269 -0
- package/date/createCalendar.d.ts +3 -0
- package/date/createCalendar.js +55 -0
- package/date/index.d.ts +20 -0
- package/date/index.js +30 -0
- package/date/manipulation.d.ts +25 -0
- package/date/manipulation.js +399 -0
- package/date/queries.d.ts +93 -0
- package/date/queries.js +303 -0
- package/date/serialize.d.ts +18 -0
- package/date/serialize.js +55 -0
- package/date/string.d.ts +36 -0
- package/date/string.js +223 -0
- package/date/types.d.ts +136 -0
- package/date/types.js +14 -0
- package/date/utils.d.ts +4 -0
- package/date/utils.js +16 -0
- package/date/weekStartData.d.ts +1 -0
- package/date/weekStartData.js +112 -0
- package/date-field/behaviour.d.ts +188 -0
- package/date-field/behaviour.jsx +1025 -0
- package/date-field/index.d.ts +150 -0
- package/date-field/index.jsx +354 -0
- package/date-field/intl.d.ts +3 -0
- package/date-field/intl.js +36 -0
- package/date-field/live-value.d.ts +22 -0
- package/date-field/live-value.jsx +44 -0
- package/date-picker/behaviour.d.ts +95 -0
- package/date-picker/behaviour.jsx +343 -0
- package/date-picker/index.d.ts +66 -0
- package/date-picker/index.jsx +243 -0
- package/dialog/behaviour.d.ts +63 -0
- package/dialog/behaviour.jsx +90 -0
- package/dialog/contexts.d.ts +12 -0
- package/dialog/contexts.js +8 -0
- package/dialog/index.d.ts +48 -0
- package/dialog/index.jsx +301 -0
- package/disclosure/behaviour.d.ts +50 -0
- package/disclosure/behaviour.jsx +128 -0
- package/disclosure/details.d.ts +21 -0
- package/disclosure/details.jsx +14 -0
- package/disclosure/index.d.ts +92 -0
- package/disclosure/index.jsx +300 -0
- package/drag-drop/cdk-index.d.ts +22 -0
- package/drag-drop/cdk-index.jsx +25 -0
- package/drag-drop/directives/assertions.d.ts +6 -0
- package/drag-drop/directives/assertions.js +13 -0
- package/drag-drop/directives/config.d.ts +30 -0
- package/drag-drop/directives/config.js +7 -0
- package/drag-drop/directives/drag-handle.d.ts +10 -0
- package/drag-drop/directives/drag-handle.js +29 -0
- package/drag-drop/directives/drag.d.ts +210 -0
- package/drag-drop/directives/drag.js +550 -0
- package/drag-drop/directives/drop-list-group.d.ts +25 -0
- package/drag-drop/directives/drop-list-group.js +55 -0
- package/drag-drop/directives/drop-list.d.ts +163 -0
- package/drag-drop/directives/drop-list.js +396 -0
- package/drag-drop/directives/registry.d.ts +32 -0
- package/drag-drop/directives/registry.js +61 -0
- package/drag-drop/dom/clone-node.d.ts +2 -0
- package/drag-drop/dom/clone-node.js +58 -0
- package/drag-drop/dom/coerce.d.ts +6 -0
- package/drag-drop/dom/coerce.js +8 -0
- package/drag-drop/dom/dom-rect.d.ts +37 -0
- package/drag-drop/dom/dom-rect.js +71 -0
- package/drag-drop/dom/fake-event.d.ts +4 -0
- package/drag-drop/dom/fake-event.js +22 -0
- package/drag-drop/dom/inherited-text.d.ts +4 -0
- package/drag-drop/dom/inherited-text.js +44 -0
- package/drag-drop/dom/layout-shift.d.ts +8 -0
- package/drag-drop/dom/layout-shift.js +87 -0
- package/drag-drop/dom/mount-content.d.ts +2 -0
- package/drag-drop/dom/mount-content.js +7 -0
- package/drag-drop/dom/parent-position-tracker.d.ts +32 -0
- package/drag-drop/dom/parent-position-tracker.js +71 -0
- package/drag-drop/dom/root-node.d.ts +21 -0
- package/drag-drop/dom/root-node.js +41 -0
- package/drag-drop/dom/shadow-dom.d.ts +4 -0
- package/drag-drop/dom/shadow-dom.js +18 -0
- package/drag-drop/dom/styling.d.ts +52 -0
- package/drag-drop/dom/styling.js +86 -0
- package/drag-drop/dom/transition-duration.d.ts +2 -0
- package/drag-drop/dom/transition-duration.js +29 -0
- package/drag-drop/drag-drop-registry.d.ts +69 -0
- package/drag-drop/drag-drop-registry.js +224 -0
- package/drag-drop/drag-drop.d.ts +19 -0
- package/drag-drop/drag-drop.js +10 -0
- package/drag-drop/drag-events.d.ts +117 -0
- package/drag-drop/drag-events.js +1 -0
- package/drag-drop/drag-handle.d.ts +18 -0
- package/drag-drop/drag-handle.jsx +53 -0
- package/drag-drop/drag-placeholder.d.ts +8 -0
- package/drag-drop/drag-placeholder.jsx +25 -0
- package/drag-drop/drag-preview.d.ts +10 -0
- package/drag-drop/drag-preview.jsx +31 -0
- package/drag-drop/drag-ref.d.ts +476 -0
- package/drag-drop/drag-ref.js +1306 -0
- package/drag-drop/drag-utils.d.ts +25 -0
- package/drag-drop/drag-utils.js +53 -0
- package/drag-drop/drag.d.ts +23 -0
- package/drag-drop/drag.jsx +128 -0
- package/drag-drop/drop-list-group.d.ts +22 -0
- package/drag-drop/drop-list-group.jsx +19 -0
- package/drag-drop/drop-list-ref.d.ts +295 -0
- package/drag-drop/drop-list-ref.js +707 -0
- package/drag-drop/drop-list.d.ts +19 -0
- package/drag-drop/drop-list.jsx +87 -0
- package/drag-drop/index.d.ts +1 -0
- package/drag-drop/index.jsx +4 -0
- package/drag-drop/lazy-refs.d.ts +28 -0
- package/drag-drop/lazy-refs.js +144 -0
- package/drag-drop/preview-ref.d.ts +38 -0
- package/drag-drop/preview-ref.js +132 -0
- package/drag-drop/sorting/drop-list-sort-strategy.d.ts +29 -0
- package/drag-drop/sorting/drop-list-sort-strategy.js +1 -0
- package/drag-drop/sorting/mixed-sort-strategy.d.ts +99 -0
- package/drag-drop/sorting/mixed-sort-strategy.js +259 -0
- package/drag-drop/sorting/single-axis-sort-strategy.d.ts +112 -0
- package/drag-drop/sorting/single-axis-sort-strategy.js +343 -0
- package/file-trigger/index.d.ts +24 -0
- package/file-trigger/index.jsx +41 -0
- package/flip/index.d.ts +59 -0
- package/flip/index.js +124 -0
- package/focus/focus-ring.d.ts +42 -0
- package/focus/focus-ring.jsx +77 -0
- package/focus/focus-scope.d.ts +51 -0
- package/focus/focus-scope.jsx +431 -0
- package/focus/focusable.d.ts +33 -0
- package/focus/focusable.jsx +93 -0
- package/focus/index.d.ts +74 -0
- package/focus/index.js +274 -0
- package/form/behaviour.d.ts +29 -0
- package/form/behaviour.js +145 -0
- package/form/field-error.d.ts +38 -0
- package/form/field-error.jsx +67 -0
- package/form/index.d.ts +77 -0
- package/form/index.jsx +116 -0
- package/grid/behaviour.d.ts +290 -0
- package/grid/behaviour.js +683 -0
- package/grid/intl.d.ts +2 -0
- package/grid/intl.js +36 -0
- package/grid/keyboard-delegate.d.ts +56 -0
- package/grid/keyboard-delegate.js +316 -0
- package/grid-list/behaviour.d.ts +248 -0
- package/grid-list/behaviour.js +616 -0
- package/grid-list/index.d.ts +204 -0
- package/grid-list/index.jsx +721 -0
- package/grid-list/row.d.ts +24 -0
- package/grid-list/row.js +57 -0
- package/group/index.d.ts +48 -0
- package/group/index.jsx +126 -0
- package/header/index.d.ts +13 -0
- package/header/index.jsx +34 -0
- package/heading/index.d.ts +19 -0
- package/heading/index.jsx +55 -0
- package/highlight/index.d.ts +12 -0
- package/highlight/index.jsx +357 -0
- package/i18n/filter.d.ts +16 -0
- package/i18n/filter.js +66 -0
- package/i18n/i18n-provider.d.ts +10 -0
- package/i18n/i18n-provider.jsx +15 -0
- package/i18n/index.d.ts +27 -0
- package/i18n/index.js +115 -0
- package/i18n/intl-cache.d.ts +4 -0
- package/i18n/intl-cache.js +40 -0
- package/i18n/list-formatter.d.ts +2 -0
- package/i18n/list-formatter.js +11 -0
- package/input/index.d.ts +51 -0
- package/input/index.jsx +95 -0
- package/interactions/controllable.d.ts +42 -0
- package/interactions/controllable.js +67 -0
- package/interactions/focus-visible.d.ts +68 -0
- package/interactions/focus-visible.jsx +291 -0
- package/interactions/focus.d.ts +58 -0
- package/interactions/focus.jsx +152 -0
- package/interactions/hover.d.ts +54 -0
- package/interactions/hover.jsx +139 -0
- package/interactions/index.d.ts +1 -0
- package/interactions/index.js +3 -0
- package/interactions/interact-outside.d.ts +24 -0
- package/interactions/interact-outside.jsx +57 -0
- package/interactions/keyboard.d.ts +28 -0
- package/interactions/keyboard.jsx +51 -0
- package/interactions/long-press.d.ts +41 -0
- package/interactions/long-press.jsx +79 -0
- package/interactions/merge-props.d.ts +54 -0
- package/interactions/merge-props.jsx +257 -0
- package/interactions/move.d.ts +48 -0
- package/interactions/move.jsx +96 -0
- package/interactions/press.d.ts +129 -0
- package/interactions/press.jsx +539 -0
- package/interactions/pressable.d.ts +22 -0
- package/interactions/pressable.jsx +93 -0
- package/interactions/scroll-wheel.d.ts +20 -0
- package/interactions/scroll-wheel.jsx +40 -0
- package/interactions/utils.d.ts +52 -0
- package/interactions/utils.js +253 -0
- package/keyboard/index.d.ts +12 -0
- package/keyboard/index.jsx +34 -0
- package/keys/index.d.ts +68 -0
- package/keys/index.js +199 -0
- package/label/behaviour.d.ts +54 -0
- package/label/behaviour.js +60 -0
- package/label/index.d.ts +35 -0
- package/label/index.jsx +85 -0
- package/landmark/index.d.ts +10 -0
- package/landmark/index.jsx +35 -0
- package/landmark/manager.d.ts +50 -0
- package/landmark/manager.js +364 -0
- package/layout/index.d.ts +90 -0
- package/layout/index.js +207 -0
- package/lightbox/behaviour.d.ts +82 -0
- package/lightbox/behaviour.js +490 -0
- package/lightbox/captions/index.d.ts +39 -0
- package/lightbox/captions/index.jsx +44 -0
- package/lightbox/counter/index.d.ts +10 -0
- package/lightbox/counter/index.jsx +10 -0
- package/lightbox/download/index.d.ts +32 -0
- package/lightbox/download/index.jsx +89 -0
- package/lightbox/embed/index.d.ts +15 -0
- package/lightbox/embed/index.jsx +58 -0
- package/lightbox/fullscreen/index.d.ts +24 -0
- package/lightbox/fullscreen/index.jsx +80 -0
- package/lightbox/index.d.ts +129 -0
- package/lightbox/index.jsx +284 -0
- package/lightbox/inline/index.d.ts +18 -0
- package/lightbox/inline/index.jsx +15 -0
- package/lightbox/pdf/index.d.ts +18 -0
- package/lightbox/pdf/index.jsx +31 -0
- package/lightbox/share/index.d.ts +29 -0
- package/lightbox/share/index.jsx +43 -0
- package/lightbox/slideshow/index.d.ts +24 -0
- package/lightbox/slideshow/index.jsx +118 -0
- package/lightbox/state.d.ts +334 -0
- package/lightbox/state.js +192 -0
- package/lightbox/thumbnails/index.d.ts +54 -0
- package/lightbox/thumbnails/index.jsx +96 -0
- package/lightbox/video/index.d.ts +13 -0
- package/lightbox/video/index.jsx +42 -0
- package/lightbox/zoom/index.d.ts +67 -0
- package/lightbox/zoom/index.jsx +456 -0
- package/link/behaviour.d.ts +41 -0
- package/link/behaviour.js +58 -0
- package/link/index.d.ts +30 -0
- package/link/index.jsx +179 -0
- package/link/router.d.ts +1 -0
- package/link/router.js +5 -0
- package/listbox/behaviour.d.ts +175 -0
- package/listbox/behaviour.jsx +515 -0
- package/listbox/index.d.ts +129 -0
- package/listbox/index.jsx +632 -0
- package/markdown/index.d.ts +82 -0
- package/markdown/index.jsx +654 -0
- package/masonry/behaviour.d.ts +121 -0
- package/masonry/behaviour.js +676 -0
- package/masonry/flip.d.ts +27 -0
- package/masonry/flip.js +61 -0
- package/masonry/geometry.d.ts +44 -0
- package/masonry/geometry.js +184 -0
- package/masonry/index.d.ts +153 -0
- package/masonry/index.jsx +833 -0
- package/masonry/justified.d.ts +49 -0
- package/masonry/justified.js +250 -0
- package/masonry/layout.d.ts +200 -0
- package/masonry/layout.js +668 -0
- package/masonry/masonry-layout.d.ts +57 -0
- package/masonry/masonry-layout.js +159 -0
- package/masonry/masonry.css +29 -0
- package/menu/behaviour.d.ts +205 -0
- package/menu/behaviour.jsx +847 -0
- package/menu/index.d.ts +171 -0
- package/menu/index.jsx +702 -0
- package/menu/intl.d.ts +2 -0
- package/menu/intl.js +36 -0
- package/menu/safely-mouse-to-submenu.d.ts +12 -0
- package/menu/safely-mouse-to-submenu.js +128 -0
- package/meter/behaviour.d.ts +18 -0
- package/meter/behaviour.jsx +17 -0
- package/meter/index.d.ts +30 -0
- package/meter/index.jsx +85 -0
- package/modal/index.d.ts +79 -0
- package/modal/index.jsx +359 -0
- package/modal/provider.d.ts +47 -0
- package/modal/provider.jsx +105 -0
- package/morph/index.d.ts +91 -0
- package/morph/index.jsx +372 -0
- package/morph/item.d.ts +89 -0
- package/morph/item.jsx +546 -0
- package/motion/Animations.d.ts +17 -0
- package/motion/Animations.js +56 -0
- package/motion/DragRelease.d.ts +22 -0
- package/motion/DragRelease.js +26 -0
- package/motion/DragTracker.d.ts +7 -0
- package/motion/DragTracker.js +43 -0
- package/motion/Limit.d.ts +12 -0
- package/motion/Limit.js +37 -0
- package/motion/Motion1D.d.ts +38 -0
- package/motion/Motion1D.js +72 -0
- package/motion/ScrollBody.d.ts +13 -0
- package/motion/ScrollBody.js +75 -0
- package/motion/Vector1d.d.ts +8 -0
- package/motion/Vector1d.js +29 -0
- package/motion/index.d.ts +8 -0
- package/motion/index.js +12 -0
- package/motion/utils.d.ts +5 -0
- package/motion/utils.js +23 -0
- package/native-select/index.d.ts +46 -0
- package/native-select/index.jsx +99 -0
- package/navigation-tree/index.d.ts +43 -0
- package/navigation-tree/index.jsx +110 -0
- package/number/NumberFormatter.d.ts +28 -0
- package/number/NumberFormatter.js +144 -0
- package/number/NumberParser.d.ts +27 -0
- package/number/NumberParser.js +316 -0
- package/number/index.d.ts +5 -0
- package/number/index.jsx +17 -0
- package/number/number-field-state.d.ts +132 -0
- package/number/number-field-state.jsx +364 -0
- package/number-field/behaviour.d.ts +165 -0
- package/number-field/behaviour.jsx +512 -0
- package/number-field/index.d.ts +52 -0
- package/number-field/index.jsx +207 -0
- package/number-field/intl.d.ts +2 -0
- package/number-field/intl.js +36 -0
- package/observers/index.d.ts +70 -0
- package/observers/index.js +279 -0
- package/overflow/index.d.ts +93 -0
- package/overflow/index.jsx +267 -0
- package/overlay/aria-hide-outside.d.ts +12 -0
- package/overlay/aria-hide-outside.js +141 -0
- package/overlay/close-on-scroll.d.ts +1 -0
- package/overlay/close-on-scroll.js +6 -0
- package/overlay/contexts.d.ts +34 -0
- package/overlay/contexts.js +21 -0
- package/overlay/dismiss-button.d.ts +10 -0
- package/overlay/dismiss-button.jsx +18 -0
- package/overlay/hover-trigger.d.ts +54 -0
- package/overlay/hover-trigger.jsx +221 -0
- package/overlay/index.d.ts +40 -0
- package/overlay/index.js +139 -0
- package/overlay/modal-overlay.d.ts +16 -0
- package/overlay/modal-overlay.js +38 -0
- package/overlay/overlay-strings.d.ts +4 -0
- package/overlay/overlay-strings.js +52 -0
- package/overlay/overlay-trigger-state.d.ts +1 -0
- package/overlay/overlay-trigger-state.js +3 -0
- package/overlay/overlay-trigger.d.ts +27 -0
- package/overlay/overlay-trigger.jsx +50 -0
- package/overlay/position.d.ts +160 -0
- package/overlay/position.js +559 -0
- package/overlay/prevent-scroll-ios.d.ts +17 -0
- package/overlay/prevent-scroll-ios.js +331 -0
- package/overlay/prevent-scroll.d.ts +18 -0
- package/overlay/prevent-scroll.js +122 -0
- package/overlay/safe-area.d.ts +28 -0
- package/overlay/safe-area.js +108 -0
- package/overlay-arrow/index.d.ts +23 -0
- package/overlay-arrow/index.jsx +59 -0
- package/overlay-service/connected-position.d.ts +163 -0
- package/overlay-service/connected-position.js +661 -0
- package/overlay-service/global-position.d.ts +34 -0
- package/overlay-service/global-position.js +154 -0
- package/overlay-service/index.d.ts +15 -0
- package/overlay-service/index.js +27 -0
- package/overlay-service/overlay-container.d.ts +27 -0
- package/overlay-service/overlay-container.js +93 -0
- package/overlay-service/overlay-dispatchers.d.ts +44 -0
- package/overlay-service/overlay-dispatchers.js +149 -0
- package/overlay-service/overlay-position-builder.d.ts +8 -0
- package/overlay-service/overlay-position-builder.js +15 -0
- package/overlay-service/overlay-ref.d.ts +155 -0
- package/overlay-service/overlay-ref.js +436 -0
- package/overlay-service/overlay-strategy.d.ts +48 -0
- package/overlay-service/overlay-strategy.js +3 -0
- package/overlay-service/overlay-viewport.d.ts +85 -0
- package/overlay-service/overlay-viewport.js +192 -0
- package/overlay-service/overlay.css +94 -0
- package/overlay-service/scroll-strategies.d.ts +71 -0
- package/overlay-service/scroll-strategies.js +185 -0
- package/package.json +754 -4
- package/platform/index.d.ts +100 -0
- package/platform/index.js +304 -0
- package/popover/behaviour.d.ts +23 -0
- package/popover/behaviour.js +39 -0
- package/popover/index.d.ts +60 -0
- package/popover/index.jsx +285 -0
- package/popover/popover-overlay.d.ts +27 -0
- package/popover/popover-overlay.jsx +60 -0
- package/popover/use-popover.d.ts +57 -0
- package/popover/use-popover.js +92 -0
- package/portal/index.d.ts +55 -0
- package/portal/index.jsx +83 -0
- package/portal/portal-mount.d.ts +8 -0
- package/portal/portal-mount.js +7 -0
- package/portal/portal-outlet.d.ts +88 -0
- package/portal/portal-outlet.js +222 -0
- package/preview-trigger/behaviour.d.ts +70 -0
- package/preview-trigger/behaviour.jsx +258 -0
- package/preview-trigger/index.d.ts +12 -0
- package/preview-trigger/index.jsx +82 -0
- package/progress-bar/behaviour.d.ts +77 -0
- package/progress-bar/behaviour.jsx +75 -0
- package/progress-bar/context.d.ts +4 -0
- package/progress-bar/context.js +7 -0
- package/progress-bar/index.d.ts +38 -0
- package/progress-bar/index.jsx +90 -0
- package/radio-group/behaviour.d.ts +11 -0
- package/radio-group/behaviour.js +85 -0
- package/radio-group/index.d.ts +82 -0
- package/radio-group/index.jsx +142 -0
- package/radio-group/parts.d.ts +223 -0
- package/radio-group/parts.jsx +425 -0
- package/range-calendar/behaviour.d.ts +2 -0
- package/range-calendar/behaviour.jsx +5 -0
- package/range-calendar/index.d.ts +2 -0
- package/range-calendar/index.jsx +4 -0
- package/resizable/engine/components/group/auto-save/getStorageKey.d.ts +1 -0
- package/resizable/engine/components/group/auto-save/getStorageKey.js +5 -0
- package/resizable/engine/components/group/compareDocumentPosition.d.ts +5 -0
- package/resizable/engine/components/group/compareDocumentPosition.js +19 -0
- package/resizable/engine/components/group/readLegacyLayout.d.ts +16 -0
- package/resizable/engine/components/group/readLegacyLayout.js +48 -0
- package/resizable/engine/components/group/sortByElementOffset.d.ts +4 -0
- package/resizable/engine/components/group/sortByElementOffset.js +28 -0
- package/resizable/engine/components/group/types.d.ts +50 -0
- package/resizable/engine/components/group/types.js +1 -0
- package/resizable/engine/components/panel/types.d.ts +90 -0
- package/resizable/engine/components/panel/types.js +4 -0
- package/resizable/engine/constants.d.ts +15 -0
- package/resizable/engine/constants.js +27 -0
- package/resizable/engine/global/cursor/getCursorStyle.d.ts +7 -0
- package/resizable/engine/global/cursor/getCursorStyle.js +94 -0
- package/resizable/engine/global/cursor/supportsAdvancedCursorStyles.d.ts +5 -0
- package/resizable/engine/global/cursor/supportsAdvancedCursorStyles.js +20 -0
- package/resizable/engine/global/cursor/updateCursorStyle.d.ts +1 -0
- package/resizable/engine/global/cursor/updateCursorStyle.js +64 -0
- package/resizable/engine/global/dom/calculateAvailableAxisSize.d.ts +4 -0
- package/resizable/engine/global/dom/calculateAvailableAxisSize.js +10 -0
- package/resizable/engine/global/dom/calculateHitRegions.d.ts +13 -0
- package/resizable/engine/global/dom/calculateHitRegions.js +153 -0
- package/resizable/engine/global/dom/calculateItemConstraints.d.ts +2 -0
- package/resizable/engine/global/dom/calculateItemConstraints.js +82 -0
- package/resizable/engine/global/event-handlers/onDocumentContextMenu.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentContextMenu.js +9 -0
- package/resizable/engine/global/event-handlers/onDocumentDoubleClick.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentDoubleClick.js +28 -0
- package/resizable/engine/global/event-handlers/onDocumentKeyDown.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentKeyDown.js +97 -0
- package/resizable/engine/global/event-handlers/onDocumentLostPointerCapture.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentLostPointerCapture.js +18 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerCancel.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerCancel.js +8 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerDown.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerDown.js +54 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerLeave.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerLeave.js +22 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerMove.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerMove.js +69 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerOut.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerOut.js +20 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerUp.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerUp.js +15 -0
- package/resizable/engine/global/event-handlers/onWindowBlur.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onWindowBlur.js +11 -0
- package/resizable/engine/global/mountAxis.d.ts +2 -0
- package/resizable/engine/global/mountAxis.js +187 -0
- package/resizable/engine/global/mutable-state/axes.d.ts +37 -0
- package/resizable/engine/global/mutable-state/axes.js +52 -0
- package/resizable/engine/global/mutable-state/interactions.d.ts +17 -0
- package/resizable/engine/global/mutable-state/interactions.js +92 -0
- package/resizable/engine/global/mutable-state/types.d.ts +32 -0
- package/resizable/engine/global/mutable-state/types.js +1 -0
- package/resizable/engine/global/styles/convertEmToPixels.d.ts +1 -0
- package/resizable/engine/global/styles/convertEmToPixels.js +7 -0
- package/resizable/engine/global/styles/convertRemToPixels.d.ts +1 -0
- package/resizable/engine/global/styles/convertRemToPixels.js +7 -0
- package/resizable/engine/global/styles/convertVhToPixels.d.ts +1 -0
- package/resizable/engine/global/styles/convertVhToPixels.js +5 -0
- package/resizable/engine/global/styles/convertVwToPixels.d.ts +1 -0
- package/resizable/engine/global/styles/convertVwToPixels.js +5 -0
- package/resizable/engine/global/styles/parseSizeAndUnit.d.ts +2 -0
- package/resizable/engine/global/styles/parseSizeAndUnit.js +29 -0
- package/resizable/engine/global/styles/sizeStyleToPixels.d.ts +5 -0
- package/resizable/engine/global/styles/sizeStyleToPixels.js +38 -0
- package/resizable/engine/global/types.d.ts +120 -0
- package/resizable/engine/global/types.js +1 -0
- package/resizable/engine/global/utils/abortActivePointerResize.d.ts +9 -0
- package/resizable/engine/global/utils/abortActivePointerResize.js +52 -0
- package/resizable/engine/global/utils/adjustLayoutByDelta.d.ts +9 -0
- package/resizable/engine/global/utils/adjustLayoutByDelta.js +219 -0
- package/resizable/engine/global/utils/adjustLayoutForSeparator.d.ts +1 -0
- package/resizable/engine/global/utils/adjustLayoutForSeparator.js +48 -0
- package/resizable/engine/global/utils/calculateDefaultLayout.d.ts +2 -0
- package/resizable/engine/global/utils/calculateDefaultLayout.js +30 -0
- package/resizable/engine/global/utils/calculateResizePreviews.d.ts +3 -0
- package/resizable/engine/global/utils/calculateResizePreviews.js +39 -0
- package/resizable/engine/global/utils/calculateSeparatorAriaValues.d.ts +12 -0
- package/resizable/engine/global/utils/calculateSeparatorAriaValues.js +43 -0
- package/resizable/engine/global/utils/compareLayoutNumbers.d.ts +1 -0
- package/resizable/engine/global/utils/compareLayoutNumbers.js +11 -0
- package/resizable/engine/global/utils/completeActivePointerResize.d.ts +6 -0
- package/resizable/engine/global/utils/completeActivePointerResize.js +49 -0
- package/resizable/engine/global/utils/doRectsIntersect.d.ts +2 -0
- package/resizable/engine/global/utils/doRectsIntersect.js +3 -0
- package/resizable/engine/global/utils/expandHitTarget.d.ts +10 -0
- package/resizable/engine/global/utils/expandHitTarget.js +19 -0
- package/resizable/engine/global/utils/findClosestHitRegion.d.ts +9 -0
- package/resizable/engine/global/utils/findClosestHitRegion.js +35 -0
- package/resizable/engine/global/utils/findClosestRect.d.ts +6 -0
- package/resizable/engine/global/utils/findClosestRect.js +22 -0
- package/resizable/engine/global/utils/findMatchingHitRegions.d.ts +7 -0
- package/resizable/engine/global/utils/findMatchingHitRegions.js +29 -0
- package/resizable/engine/global/utils/findSeparatorAxis.d.ts +21 -0
- package/resizable/engine/global/utils/findSeparatorAxis.js +12 -0
- package/resizable/engine/global/utils/formatLayoutNumber.d.ts +1 -0
- package/resizable/engine/global/utils/formatLayoutNumber.js +5 -0
- package/resizable/engine/global/utils/getDefaultLayout.d.ts +5 -0
- package/resizable/engine/global/utils/getDefaultLayout.js +11 -0
- package/resizable/engine/global/utils/getDistanceBetweenPointAndRect.d.ts +5 -0
- package/resizable/engine/global/utils/getDistanceBetweenPointAndRect.js +6 -0
- package/resizable/engine/global/utils/getImperativeAxisMethods.d.ts +4 -0
- package/resizable/engine/global/utils/getImperativeAxisMethods.js +53 -0
- package/resizable/engine/global/utils/getImperativeItemMethods.d.ts +5 -0
- package/resizable/engine/global/utils/getImperativeItemMethods.js +169 -0
- package/resizable/engine/global/utils/isCoarsePointer.d.ts +4 -0
- package/resizable/engine/global/utils/isCoarsePointer.js +17 -0
- package/resizable/engine/global/utils/isModal.d.ts +1 -0
- package/resizable/engine/global/utils/isModal.js +11 -0
- package/resizable/engine/global/utils/isViableHitTarget.d.ts +5 -0
- package/resizable/engine/global/utils/isViableHitTarget.js +50 -0
- package/resizable/engine/global/utils/itemConstraintsEqual.d.ts +2 -0
- package/resizable/engine/global/utils/itemConstraintsEqual.js +9 -0
- package/resizable/engine/global/utils/layoutNumbersEqual.d.ts +1 -0
- package/resizable/engine/global/utils/layoutNumbersEqual.js +6 -0
- package/resizable/engine/global/utils/layoutsEqual.d.ts +2 -0
- package/resizable/engine/global/utils/layoutsEqual.js +15 -0
- package/resizable/engine/global/utils/normalizeLayout.d.ts +11 -0
- package/resizable/engine/global/utils/normalizeLayout.js +21 -0
- package/resizable/engine/global/utils/notifyItemOnResize.d.ts +2 -0
- package/resizable/engine/global/utils/notifyItemOnResize.js +23 -0
- package/resizable/engine/global/utils/objectsEqual.d.ts +1 -0
- package/resizable/engine/global/utils/objectsEqual.js +14 -0
- package/resizable/engine/global/utils/preserveFixedItemSizes.d.ts +7 -0
- package/resizable/engine/global/utils/preserveFixedItemSizes.js +53 -0
- package/resizable/engine/global/utils/recordAxisLayoutChange.d.ts +15 -0
- package/resizable/engine/global/utils/recordAxisLayoutChange.js +25 -0
- package/resizable/engine/global/utils/updateActiveHitRegion.d.ts +18 -0
- package/resizable/engine/global/utils/updateActiveHitRegion.js +119 -0
- package/resizable/engine/global/utils/validateAxisLayout.d.ts +5 -0
- package/resizable/engine/global/utils/validateAxisLayout.js +70 -0
- package/resizable/engine/global/utils/validateItemSize.d.ts +7 -0
- package/resizable/engine/global/utils/validateItemSize.js +31 -0
- package/resizable/engine/global/utils/validateLayoutKeys.d.ts +2 -0
- package/resizable/engine/global/utils/validateLayoutKeys.js +13 -0
- package/resizable/engine/types.d.ts +13 -0
- package/resizable/engine/types.js +1 -0
- package/resizable/engine/utils/EventEmitter.d.ts +11 -0
- package/resizable/engine/utils/EventEmitter.js +60 -0
- package/resizable/engine/utils/assert.d.ts +1 -0
- package/resizable/engine/utils/assert.js +7 -0
- package/resizable/engine/utils/isArrayEqual.d.ts +1 -0
- package/resizable/engine/utils/isArrayEqual.js +15 -0
- package/resizable/engine/utils/isHTMLElement.d.ts +1 -0
- package/resizable/engine/utils/isHTMLElement.js +6 -0
- package/resizable/engine/utils/isShadowRoot.d.ts +1 -0
- package/resizable/engine/utils/isShadowRoot.js +6 -0
- package/resizable/engine/vendor/stacking-order.d.ts +7 -0
- package/resizable/engine/vendor/stacking-order.js +122 -0
- package/resizable/index.d.ts +263 -0
- package/resizable/index.jsx +537 -0
- package/resizable/mount.d.ts +115 -0
- package/resizable/mount.js +540 -0
- package/scheduler/behaviour.d.ts +71 -0
- package/scheduler/behaviour.js +243 -0
- package/scheduler/context.d.ts +100 -0
- package/scheduler/context.jsx +7 -0
- package/scheduler/dates.d.ts +53 -0
- package/scheduler/dates.js +183 -0
- package/scheduler/drag.d.ts +20 -0
- package/scheduler/drag.js +361 -0
- package/scheduler/event.d.ts +26 -0
- package/scheduler/event.jsx +93 -0
- package/scheduler/index.d.ts +57 -0
- package/scheduler/index.jsx +303 -0
- package/scheduler/intl.d.ts +16 -0
- package/scheduler/intl.js +529 -0
- package/scheduler/keys-month.d.ts +7 -0
- package/scheduler/keys-month.js +110 -0
- package/scheduler/keys-time-grid.d.ts +9 -0
- package/scheduler/keys-time-grid.js +115 -0
- package/scheduler/keys.d.ts +103 -0
- package/scheduler/keys.js +527 -0
- package/scheduler/layout-index.d.ts +3 -0
- package/scheduler/layout-index.js +6 -0
- package/scheduler/layout.d.ts +285 -0
- package/scheduler/layout.js +378 -0
- package/scheduler/menus.d.ts +66 -0
- package/scheduler/menus.jsx +88 -0
- package/scheduler/month.d.ts +26 -0
- package/scheduler/month.jsx +215 -0
- package/scheduler/pointer.d.ts +64 -0
- package/scheduler/pointer.js +203 -0
- package/scheduler/select.d.ts +11 -0
- package/scheduler/select.js +64 -0
- package/scheduler/selection.d.ts +34 -0
- package/scheduler/selection.js +39 -0
- package/scheduler/state.d.ts +296 -0
- package/scheduler/state.js +496 -0
- package/scheduler/time-grid-client.d.ts +32 -0
- package/scheduler/time-grid-client.jsx +133 -0
- package/scheduler/time-grid.d.ts +26 -0
- package/scheduler/time-grid.jsx +266 -0
- package/scheduler/time.d.ts +35 -0
- package/scheduler/time.js +56 -0
- package/scheduler/toolbar.d.ts +43 -0
- package/scheduler/toolbar.jsx +38 -0
- package/scroll-area/dom.d.ts +11 -0
- package/scroll-area/dom.js +55 -0
- package/scroll-area/index.d.ts +96 -0
- package/scroll-area/index.jsx +884 -0
- package/scroll-area/presence.d.ts +12 -0
- package/scroll-area/presence.jsx +131 -0
- package/scrolling/auto-size-virtual-scroll.d.ts +53 -0
- package/scrolling/auto-size-virtual-scroll.js +213 -0
- package/scrolling/behaviour.d.ts +3 -0
- package/scrolling/behaviour.js +5 -0
- package/scrolling/emitter.d.ts +34 -0
- package/scrolling/emitter.js +144 -0
- package/scrolling/fixed-size-virtual-scroll.d.ts +28 -0
- package/scrolling/fixed-size-virtual-scroll.js +107 -0
- package/scrolling/index.d.ts +11 -0
- package/scrolling/index.jsx +13 -0
- package/scrolling/rtl.d.ts +16 -0
- package/scrolling/rtl.js +64 -0
- package/scrolling/scroll-dispatcher.d.ts +49 -0
- package/scrolling/scroll-dispatcher.js +107 -0
- package/scrolling/scrollable.d.ts +75 -0
- package/scrolling/scrollable.js +149 -0
- package/scrolling/scrolling.css +11 -0
- package/scrolling/state.d.ts +92 -0
- package/scrolling/state.js +94 -0
- package/scrolling/viewport-ruler.d.ts +47 -0
- package/scrolling/viewport-ruler.js +100 -0
- package/scrolling/viewport.d.ts +54 -0
- package/scrolling/viewport.jsx +105 -0
- package/scrolling/virtual-scroll-strategy.d.ts +41 -0
- package/scrolling/virtual-scroll-strategy.js +2 -0
- package/scrolling/virtual-scroll-viewport.d.ts +95 -0
- package/scrolling/virtual-scroll-viewport.js +370 -0
- package/search-field/behaviour.d.ts +62 -0
- package/search-field/behaviour.jsx +116 -0
- package/search-field/index.d.ts +57 -0
- package/search-field/index.jsx +158 -0
- package/search-field/intl.d.ts +2 -0
- package/search-field/intl.js +36 -0
- package/select/behaviour.d.ts +188 -0
- package/select/behaviour.jsx +445 -0
- package/select/hidden-select.d.ts +44 -0
- package/select/hidden-select.jsx +68 -0
- package/select/index.d.ts +123 -0
- package/select/index.jsx +255 -0
- package/select/intl.d.ts +2 -0
- package/select/intl.js +36 -0
- package/select/parts.d.ts +11 -0
- package/select/parts.jsx +12 -0
- package/select/select-parts.d.ts +73 -0
- package/select/select-parts.jsx +293 -0
- package/select/select-value.d.ts +58 -0
- package/select/select-value.jsx +142 -0
- package/selection/dom-utils.d.ts +25 -0
- package/selection/dom-utils.js +77 -0
- package/selection/keyed.d.ts +19 -0
- package/selection/keyed.js +66 -0
- package/selection/list-keyboard-delegate.d.ts +67 -0
- package/selection/list-keyboard-delegate.js +274 -0
- package/selection/manager.d.ts +112 -0
- package/selection/manager.js +340 -0
- package/selection/selectable-collection.d.ts +123 -0
- package/selection/selectable-collection.js +560 -0
- package/selection/selectable-item.d.ts +128 -0
- package/selection/selectable-item.js +486 -0
- package/selection/selectable-list.d.ts +42 -0
- package/selection/selectable-list.js +34 -0
- package/selection/state.d.ts +96 -0
- package/selection/state.js +131 -0
- package/selection/type-select.d.ts +37 -0
- package/selection/type-select.js +114 -0
- package/selection/utils.d.ts +23 -0
- package/selection/utils.js +38 -0
- package/selection-indicator/context.d.ts +10 -0
- package/selection-indicator/context.js +7 -0
- package/selection-indicator/index.d.ts +20 -0
- package/selection-indicator/index.jsx +25 -0
- package/separator/behaviour.d.ts +17 -0
- package/separator/behaviour.js +17 -0
- package/separator/index.d.ts +23 -0
- package/separator/index.jsx +64 -0
- package/shared-element-transition/index.d.ts +36 -0
- package/shared-element-transition/index.jsx +182 -0
- package/shared-element-transition/transition.d.ts +19 -0
- package/shared-element-transition/transition.jsx +20 -0
- package/sheet-motion/index.d.ts +82 -0
- package/sheet-motion/index.js +386 -0
- package/sidebar/index.d.ts +257 -0
- package/sidebar/index.jsx +625 -0
- package/sidebar/pages.d.ts +71 -0
- package/sidebar/pages.jsx +177 -0
- package/sidebar/resize.d.ts +69 -0
- package/sidebar/resize.js +237 -0
- package/sidebar/sheet-motion.d.ts +15 -0
- package/sidebar/sheet-motion.js +170 -0
- package/sidebar/state.d.ts +126 -0
- package/sidebar/state.js +204 -0
- package/slider/behaviour.d.ts +141 -0
- package/slider/behaviour.jsx +492 -0
- package/slider/index.d.ts +171 -0
- package/slider/index.jsx +392 -0
- package/slider/state.d.ts +203 -0
- package/slider/state.js +377 -0
- package/slots/index.d.ts +248 -0
- package/slots/index.jsx +473 -0
- package/spinbutton/behaviour.d.ts +66 -0
- package/spinbutton/behaviour.jsx +312 -0
- package/spinbutton/intl.d.ts +2 -0
- package/spinbutton/intl.js +36 -0
- package/state/autocomplete.d.ts +26 -0
- package/state/autocomplete.js +32 -0
- package/state/calendar.d.ts +284 -0
- package/state/calendar.js +755 -0
- package/state/checkbox-group.d.ts +67 -0
- package/state/checkbox-group.js +76 -0
- package/state/combobox.d.ts +238 -0
- package/state/combobox.js +708 -0
- package/state/date-field.d.ts +407 -0
- package/state/date-field.js +1117 -0
- package/state/date-intl.d.ts +3 -0
- package/state/date-intl.js +36 -0
- package/state/date-picker.d.ts +144 -0
- package/state/date-picker.js +387 -0
- package/state/disclosure.d.ts +90 -0
- package/state/disclosure.js +148 -0
- package/state/form-validation.d.ts +89 -0
- package/state/form-validation.js +158 -0
- package/state/grid.d.ts +62 -0
- package/state/grid.js +127 -0
- package/state/list.d.ts +58 -0
- package/state/list.js +124 -0
- package/state/menu.d.ts +162 -0
- package/state/menu.js +185 -0
- package/state/overlays.d.ts +35 -0
- package/state/overlays.js +29 -0
- package/state/radio-group.d.ts +58 -0
- package/state/radio-group.js +68 -0
- package/state/search-field.d.ts +20 -0
- package/state/search-field.js +21 -0
- package/state/select.d.ts +150 -0
- package/state/select.js +187 -0
- package/state/selection.d.ts +3 -0
- package/state/selection.js +5 -0
- package/state/table-column-resize.d.ts +58 -0
- package/state/table-column-resize.js +76 -0
- package/state/table.d.ts +81 -0
- package/state/table.js +114 -0
- package/state/tabs.d.ts +85 -0
- package/state/tabs.js +161 -0
- package/state/time-field.d.ts +32 -0
- package/state/time-field.js +34 -0
- package/state/toast.d.ts +80 -0
- package/state/toast.js +146 -0
- package/state/toggle-group.d.ts +70 -0
- package/state/toggle-group.js +110 -0
- package/state/toggle.d.ts +40 -0
- package/state/toggle.js +39 -0
- package/state/tooltip.d.ts +53 -0
- package/state/tooltip.js +153 -0
- package/stepper/index.d.ts +117 -0
- package/stepper/index.jsx +405 -0
- package/stepper/state.d.ts +200 -0
- package/stepper/state.js +325 -0
- package/switch/behaviour.d.ts +12 -0
- package/switch/behaviour.jsx +9 -0
- package/switch/index.d.ts +150 -0
- package/switch/index.jsx +186 -0
- package/table/behaviour.d.ts +181 -0
- package/table/behaviour.js +334 -0
- package/table/collection.d.ts +49 -0
- package/table/collection.js +259 -0
- package/table/column-resize.d.ts +48 -0
- package/table/column-resize.jsx +247 -0
- package/table/index.d.ts +339 -0
- package/table/index.jsx +1326 -0
- package/table/intl.d.ts +2 -0
- package/table/intl.js +36 -0
- package/table/keyboard-delegate.d.ts +21 -0
- package/table/keyboard-delegate.js +166 -0
- package/table/rac-intl.d.ts +2 -0
- package/table/rac-intl.js +36 -0
- package/tabs/behaviour.d.ts +49 -0
- package/tabs/behaviour.js +173 -0
- package/tabs/index.d.ts +248 -0
- package/tabs/index.jsx +577 -0
- package/tabs/keyboard-delegate.d.ts +17 -0
- package/tabs/keyboard-delegate.js +64 -0
- package/tag-group/behaviour.d.ts +59 -0
- package/tag-group/behaviour.js +112 -0
- package/tag-group/index.d.ts +138 -0
- package/tag-group/index.jsx +565 -0
- package/tag-group/intl.d.ts +2 -0
- package/tag-group/intl.js +36 -0
- package/tailwind.css +12 -0
- package/tests-components/app/src/routes/index.d.ts +4 -0
- package/tests-components/app/src/routes/index.jsx +7 -0
- package/text/index.d.ts +15 -0
- package/text/index.jsx +61 -0
- package/text-area/index.d.ts +19 -0
- package/text-area/index.jsx +76 -0
- package/text-field/autosize.d.ts +70 -0
- package/text-field/autosize.js +355 -0
- package/text-field/behaviour.d.ts +140 -0
- package/text-field/behaviour.jsx +260 -0
- package/text-field/fields.d.ts +12 -0
- package/text-field/fields.js +20 -0
- package/text-field/index.d.ts +50 -0
- package/text-field/index.jsx +174 -0
- package/text-field/text-field.css +45 -0
- package/theme.css +1006 -0
- package/time-wheels/behaviour.d.ts +29 -0
- package/time-wheels/behaviour.js +156 -0
- package/time-wheels/index.d.ts +27 -0
- package/time-wheels/index.jsx +91 -0
- package/toast/behaviour.d.ts +51 -0
- package/toast/behaviour.jsx +273 -0
- package/toast/index.d.ts +94 -0
- package/toast/index.jsx +256 -0
- package/toast/intl.d.ts +2 -0
- package/toast/intl.js +36 -0
- package/toggle-button/behaviour.d.ts +15 -0
- package/toggle-button/behaviour.js +37 -0
- package/toggle-button/index.d.ts +59 -0
- package/toggle-button/index.jsx +206 -0
- package/toggle-button-group/behaviour.d.ts +19 -0
- package/toggle-button-group/behaviour.jsx +13 -0
- package/toggle-button-group/context.d.ts +7 -0
- package/toggle-button-group/context.js +9 -0
- package/toggle-button-group/index.d.ts +39 -0
- package/toggle-button-group/index.jsx +85 -0
- package/toggle-button-group/item.d.ts +30 -0
- package/toggle-button-group/item.jsx +37 -0
- package/toolbar/behaviour.d.ts +22 -0
- package/toolbar/behaviour.js +89 -0
- package/toolbar/index.d.ts +16 -0
- package/toolbar/index.jsx +67 -0
- package/tooltip/behaviour.d.ts +93 -0
- package/tooltip/behaviour.jsx +299 -0
- package/tooltip/index.d.ts +59 -0
- package/tooltip/index.jsx +193 -0
- package/tree/behaviour.d.ts +51 -0
- package/tree/behaviour.jsx +51 -0
- package/tree/cdk-index.d.ts +2 -0
- package/tree/cdk-index.js +6 -0
- package/tree/collection.d.ts +16 -0
- package/tree/collection.js +138 -0
- package/tree/control.d.ts +125 -0
- package/tree/control.js +166 -0
- package/tree/index.d.ts +154 -0
- package/tree/index.jsx +837 -0
- package/tree/intl.d.ts +2 -0
- package/tree/intl.js +36 -0
- package/tree/navigation-context.d.ts +44 -0
- package/tree/navigation-context.jsx +63 -0
- package/tree/tree-key-manager.d.ts +149 -0
- package/tree/tree-key-manager.js +336 -0
- package/utils/animation.d.ts +32 -0
- package/utils/animation.jsx +236 -0
- package/utils/data-attrs.d.ts +73 -0
- package/utils/data-attrs.jsx +217 -0
- package/utils/dev-off.d.ts +3 -0
- package/utils/dev-off.js +7 -0
- package/utils/dev-on.d.ts +3 -0
- package/utils/dev-on.js +17 -0
- package/utils/dom-props.d.ts +44 -0
- package/utils/dom-props.js +73 -0
- package/utils/dom.d.ts +85 -0
- package/utils/dom.js +402 -0
- package/utils/id.d.ts +23 -0
- package/utils/id.js +100 -0
- package/utils/index.d.ts +43 -0
- package/utils/index.js +160 -0
- package/utils/link-state.d.ts +6 -0
- package/utils/link-state.js +6 -0
- package/utils/links.d.ts +82 -0
- package/utils/links.jsx +150 -0
- package/utils/live-element.d.ts +8 -0
- package/utils/live-element.jsx +76 -0
- package/utils/live.d.ts +53 -0
- package/utils/live.jsx +169 -0
- package/utils/load-more-sentinel.d.ts +28 -0
- package/utils/load-more-sentinel.jsx +52 -0
- package/utils/motion-token.d.ts +4 -0
- package/utils/motion-token.js +48 -0
- package/utils/render.d.ts +19 -0
- package/utils/render.js +18 -0
- package/utils/transitions.d.ts +15 -0
- package/utils/transitions.js +104 -0
- package/utils/types.d.ts +111 -0
- package/utils/types.js +1 -0
- package/virtualizer/behaviour.d.ts +129 -0
- package/virtualizer/behaviour.js +437 -0
- package/virtualizer/collection-renderer.d.ts +62 -0
- package/virtualizer/collection-renderer.jsx +190 -0
- package/virtualizer/collection.d.ts +103 -0
- package/virtualizer/collection.js +155 -0
- package/virtualizer/dom.d.ts +50 -0
- package/virtualizer/dom.js +233 -0
- package/virtualizer/engine.d.ts +21 -0
- package/virtualizer/engine.js +21 -0
- package/virtualizer/grid-layout.d.ts +50 -0
- package/virtualizer/grid-layout.js +247 -0
- package/virtualizer/index.d.ts +3 -0
- package/virtualizer/index.jsx +5 -0
- package/virtualizer/layout-info.d.ts +33 -0
- package/virtualizer/layout-info.js +54 -0
- package/virtualizer/layout.d.ts +44 -0
- package/virtualizer/layout.js +30 -0
- package/virtualizer/list-layout.d.ts +103 -0
- package/virtualizer/list-layout.js +510 -0
- package/virtualizer/overscan-manager.d.ts +9 -0
- package/virtualizer/overscan-manager.js +32 -0
- package/virtualizer/point.d.ts +13 -0
- package/virtualizer/point.js +23 -0
- package/virtualizer/rect.d.ts +49 -0
- package/virtualizer/rect.js +105 -0
- package/virtualizer/reusable-view.d.ts +29 -0
- package/virtualizer/reusable-view.js +56 -0
- package/virtualizer/scroll-anchor.d.ts +62 -0
- package/virtualizer/scroll-anchor.js +130 -0
- package/virtualizer/size.d.ts +11 -0
- package/virtualizer/size.js +21 -0
- package/virtualizer/state.d.ts +35 -0
- package/virtualizer/state.js +89 -0
- package/virtualizer/table-collection.d.ts +45 -0
- package/virtualizer/table-collection.js +80 -0
- package/virtualizer/table-column-layout.d.ts +44 -0
- package/virtualizer/table-column-layout.js +210 -0
- package/virtualizer/table-layout.d.ts +55 -0
- package/virtualizer/table-layout.js +482 -0
- package/virtualizer/types.d.ts +63 -0
- package/virtualizer/types.js +1 -0
- package/virtualizer/utils.d.ts +2 -0
- package/virtualizer/utils.js +12 -0
- package/virtualizer/virtualizer-core.d.ts +61 -0
- package/virtualizer/virtualizer-core.js +304 -0
- package/virtualizer/virtualizer.d.ts +64 -0
- package/virtualizer/virtualizer.jsx +91 -0
- package/virtualizer/waterfall-layout.d.ts +41 -0
- package/virtualizer/waterfall-layout.js +227 -0
- package/wheel-picker/behaviour.d.ts +94 -0
- package/wheel-picker/behaviour.js +482 -0
- package/wheel-picker/index.d.ts +33 -0
- package/wheel-picker/index.jsx +66 -0
package/state/grid.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// Ported from @react-stately/grid (useGridState.ts), Apache-2.0, © Adobe.
|
|
2
|
+
//
|
|
3
|
+
// Rivet:
|
|
4
|
+
// - The state is split like every cdk list state: `createGridState(props)` returns the serializable
|
|
5
|
+
// part (selection + focus signals, disabled keys, focus mode); `gridState(data, collection)`
|
|
6
|
+
// derives react-stately's `GridState` view (`{ collection, disabledKeys, selectionManager,
|
|
7
|
+
// isKeyboardNavigationDisabled }`) per use — inside a handler or a binding — because the
|
|
8
|
+
// collection and the `SelectionManager` are class instances (never captured in resumable
|
|
9
|
+
// closures).
|
|
10
|
+
// - react-stately overrides `selectionState.setFocusedKey` for `focusMode: "cell"` (an item key
|
|
11
|
+
// focuses its first / last cell); here `GridSelectionManager.setFocusedKey` does the same.
|
|
12
|
+
// - The "reset focused key when the focused item is deleted" effect is `resetGridFocusedKey(state,
|
|
13
|
+
// previousCollection, collection)`: call it when the collection changes (component region
|
|
14
|
+
// re-render / after a data update), with the previous collection.
|
|
15
|
+
import { untrack } from "@rivetjs/reactivity";
|
|
16
|
+
import { getChildNodes, getFirstItem, getLastItem } from "../collections/nodes.js";
|
|
17
|
+
import { SelectionManager } from "../selection/manager.js";
|
|
18
|
+
import { createMultipleSelectionState, setFocusedKey as setStateFocusedKey, } from "../selection/state.js";
|
|
19
|
+
/**
|
|
20
|
+
* Provides state management for a grid component (react-stately `useGridState`). Handles row
|
|
21
|
+
* selection and focusing a grid cell's focusable child if applicable.
|
|
22
|
+
*/
|
|
23
|
+
export function createGridState(props = {}) {
|
|
24
|
+
const selectionState = props.UNSAFE_selectionState ?? createMultipleSelectionState(props);
|
|
25
|
+
return {
|
|
26
|
+
selectionState,
|
|
27
|
+
disabledKeys: props.disabledKeys ? new Set(props.disabledKeys) : new Set(),
|
|
28
|
+
focusMode: props.focusMode,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A `SelectionManager` whose `setFocusedKey` focuses a row's first / last cell when the grid's
|
|
33
|
+
* focus mode is "cell" (react-stately overrides `selectionState.setFocusedKey`).
|
|
34
|
+
*/
|
|
35
|
+
export class GridSelectionManager extends SelectionManager {
|
|
36
|
+
focusMode;
|
|
37
|
+
gridCollection;
|
|
38
|
+
managerOptions;
|
|
39
|
+
constructor(collection, state, focusMode, options) {
|
|
40
|
+
super(collection, state, options);
|
|
41
|
+
this.focusMode = focusMode;
|
|
42
|
+
this.gridCollection = collection;
|
|
43
|
+
this.managerOptions = options;
|
|
44
|
+
}
|
|
45
|
+
setFocusedKey(key, childFocusStrategy) {
|
|
46
|
+
if (key != null && !this.collection.getItem(key))
|
|
47
|
+
return;
|
|
48
|
+
setStateFocusedKey(this.selectionState, gridFocusKey(this.gridCollection, this.focusMode, key, childFocusStrategy), childFocusStrategy);
|
|
49
|
+
}
|
|
50
|
+
withCollection(collection) {
|
|
51
|
+
return new GridSelectionManager(collection, this.selectionState, this.focusMode, {
|
|
52
|
+
...this.managerOptions,
|
|
53
|
+
fullCollection: this.managerOptions?.fullCollection ?? this.gridCollection,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** The key `setFocusedKey(key, child)` really focuses: in "cell" focus mode an item key → its first / last cell. */
|
|
58
|
+
export function gridFocusKey(collection, focusMode, key, child) {
|
|
59
|
+
// If focusMode is cell and an item is focused, focus a child cell instead.
|
|
60
|
+
if (focusMode === "cell" && key != null) {
|
|
61
|
+
const item = collection.getItem(key);
|
|
62
|
+
if (item?.type === "item") {
|
|
63
|
+
const children = getChildNodes(item, collection);
|
|
64
|
+
if (child === "last")
|
|
65
|
+
key = getLastItem(children)?.key ?? null;
|
|
66
|
+
else
|
|
67
|
+
key = getFirstItem(children)?.key ?? null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return key;
|
|
71
|
+
}
|
|
72
|
+
/** The react-stately `GridState` view of `data` over `collection` (build per handler / binding). */
|
|
73
|
+
export function gridState(data, collection, options) {
|
|
74
|
+
return {
|
|
75
|
+
collection,
|
|
76
|
+
disabledKeys: data.disabledKeys,
|
|
77
|
+
selectionManager: new GridSelectionManager(collection, data.selectionState, data.focusMode, options),
|
|
78
|
+
isKeyboardNavigationDisabled: false,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Reset the focused key if that item was deleted from the collection (react-stately's effect):
|
|
83
|
+
* focus the nearest focusable row at or after the deleted position, else before it, keeping the
|
|
84
|
+
* cell index when a cell was focused.
|
|
85
|
+
*/
|
|
86
|
+
export function resetGridFocusedKey(data, cachedCollection, collection) {
|
|
87
|
+
const selectionState = data.selectionState;
|
|
88
|
+
const focusedKey = untrack(selectionState.focusedKey);
|
|
89
|
+
if (focusedKey == null || !cachedCollection || collection.getItem(focusedKey))
|
|
90
|
+
return;
|
|
91
|
+
const manager = gridState(data, collection).selectionManager;
|
|
92
|
+
const set = (key) => setStateFocusedKey(selectionState, gridFocusKey(collection, data.focusMode, key));
|
|
93
|
+
const node = cachedCollection.getItem(focusedKey);
|
|
94
|
+
const parentNode = node?.parentKey != null && (node.type === "cell" || node.type === "rowheader" || node.type === "column") ? cachedCollection.getItem(node.parentKey) : node;
|
|
95
|
+
if (!parentNode) {
|
|
96
|
+
set(null);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const cachedRows = cachedCollection.rows;
|
|
100
|
+
const rows = collection.rows;
|
|
101
|
+
const diff = cachedRows.length - rows.length;
|
|
102
|
+
const index = Math.min(diff > 1 ? Math.max(parentNode.index - diff + 1, 0) : parentNode.index, rows.length - 1);
|
|
103
|
+
let newRow = null;
|
|
104
|
+
// Find the nearest focusable row at or after the deleted position...
|
|
105
|
+
for (let i = Math.max(0, index); i < rows.length; i++) {
|
|
106
|
+
if (!manager.isDisabled(rows[i].key) && rows[i].type !== "headerrow") {
|
|
107
|
+
newRow = rows[i];
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// ...otherwise the nearest focusable row before it. (Mirrors useListState's getKeyAfter/getKeyBefore walk.)
|
|
112
|
+
if (newRow === null) {
|
|
113
|
+
for (let i = index - 1; i >= 0; i--) {
|
|
114
|
+
if (!manager.isDisabled(rows[i].key) && rows[i].type !== "headerrow") {
|
|
115
|
+
newRow = rows[i];
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (newRow) {
|
|
121
|
+
const childNodes = newRow.hasChildNodes ? [...getChildNodes(newRow, collection)] : [];
|
|
122
|
+
const keyToFocus = newRow.hasChildNodes && parentNode !== node && node && node.index < childNodes.length ? childNodes[node.index].key : newRow.key;
|
|
123
|
+
set(keyToFocus);
|
|
124
|
+
}
|
|
125
|
+
else
|
|
126
|
+
set(null);
|
|
127
|
+
}
|
package/state/list.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type Signal } from "@rivetjs/reactivity";
|
|
2
|
+
import { type CollectionEntry, type CollectionItem, type Key, type MultipleSelectionStateProps, type SelectionBehavior } from "../_adapters/collections.js";
|
|
3
|
+
import type { LinkBehavior, SelectableCollection, SelectableOptions } from "../_adapters/selection.js";
|
|
4
|
+
export type { Key, Selection, SelectionMode, SelectionBehavior, DisabledBehavior, Orientation, CollectionEntry, CollectionItem } from "../_adapters/collections.js";
|
|
5
|
+
export type { CollectionSection } from "../_adapters/collections.js";
|
|
6
|
+
export type { SelectableOptions, LinkBehavior } from "../_adapters/selection.js";
|
|
7
|
+
export { isSection, textOf, flatItems } from "../_adapters/collections.js";
|
|
8
|
+
/** An item of a data-driven collection (alias of `CollectionItem`). */
|
|
9
|
+
export type Item = CollectionItem;
|
|
10
|
+
export interface ListState extends SelectableCollection {
|
|
11
|
+
/** Id of the collection element; option ids are `<id>-option-<key>`. */
|
|
12
|
+
readonly id: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ListProps extends MultipleSelectionStateProps, SelectableOptions {
|
|
15
|
+
/** Data items: their `disabled` flags join `disabledKeys`; the first enabled / selected item is the initial tab stop. */
|
|
16
|
+
items?: readonly CollectionEntry[] | (() => readonly CollectionEntry[]);
|
|
17
|
+
id?: string;
|
|
18
|
+
onAction?: (key: Key) => void;
|
|
19
|
+
/** Initial focused key (default: none for virtual focus, else the first selected or first enabled item). */
|
|
20
|
+
focusedKey?: Key | null;
|
|
21
|
+
/** @deprecated use `selectedKeys`. */
|
|
22
|
+
selected?: Signal<Set<Key>>;
|
|
23
|
+
/** @deprecated use `defaultSelectedKeys`. */
|
|
24
|
+
defaultSelected?: Iterable<Key>;
|
|
25
|
+
/** @deprecated use `selectOnFocus` (or `selectionBehavior: "replace"`). */
|
|
26
|
+
followFocus?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/** react-stately `useListState`: multiple selection + focus over a collection. */
|
|
29
|
+
export declare function createListState(props: ListProps): ListState;
|
|
30
|
+
export interface SingleSelectListProps extends Omit<ListProps, "selectionMode" | "selectedKeys" | "defaultSelectedKeys" | "onSelectionChange" | "disallowEmptySelection"> {
|
|
31
|
+
/** Two-way selected key (RAC controlled `selectedKey`). */
|
|
32
|
+
selectedKey?: Signal<Key | null>;
|
|
33
|
+
defaultSelectedKey?: Key | null;
|
|
34
|
+
/** Called with the selected key (also when the same key is selected again). */
|
|
35
|
+
onSelectionChange?: (key: Key | null) => void;
|
|
36
|
+
}
|
|
37
|
+
export interface SingleSelectListState extends ListState {
|
|
38
|
+
readonly selectedKey: Signal<Key | null>;
|
|
39
|
+
}
|
|
40
|
+
/** react-stately `useSingleSelectListState`: single selection, never empty by user action. */
|
|
41
|
+
export declare function createSingleSelectListState(props: SingleSelectListProps): SingleSelectListState;
|
|
42
|
+
/** react-aria `getItemId`: `<list id>-option-<key without whitespace>`. */
|
|
43
|
+
export declare const getItemId: (state: {
|
|
44
|
+
id: string;
|
|
45
|
+
}, key: Key) => string;
|
|
46
|
+
/** `aria-selected` of an option: absent with selection mode "none". */
|
|
47
|
+
export declare const itemSelected: (state: ListState, key: Key, disabled?: boolean) => boolean | undefined;
|
|
48
|
+
/** Whether the item is disabled for every interaction (`aria-disabled`, `data-disabled`). */
|
|
49
|
+
export declare const itemDisabled: (state: ListState, key: Key, disabled?: boolean) => boolean;
|
|
50
|
+
/** Roving `tabindex` of an item (none with virtual focus or when disabled). */
|
|
51
|
+
export declare const itemTabIndex: (state: ListState, key: Key, disabled?: boolean) => number | undefined;
|
|
52
|
+
/** `data-focused` of an item: the collection is focused and this is its focused key (keyed read first: only the
|
|
53
|
+
* focused item re-runs when the collection's focus changes). */
|
|
54
|
+
export declare const itemFocused: (state: ListState, key: Key) => boolean;
|
|
55
|
+
/** `tabindex` of the collection element: tabbable while no item is the focus target. */
|
|
56
|
+
export declare const collectionTabIndex: (state: ListState) => number | undefined;
|
|
57
|
+
/** RAC `linkBehavior` default of a ListBox: "action" with `selectionBehavior="replace"`, else "override". */
|
|
58
|
+
export declare function listBoxLinkBehavior(selectionBehavior?: SelectionBehavior, linkBehavior?: LinkBehavior): LinkBehavior;
|
package/state/list.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// Ported from react-spectrum (react-stately: list/useListState, list/useSingleSelectListState), Apache-2.0,
|
|
2
|
+
// © Adobe.
|
|
3
|
+
//
|
|
4
|
+
// List state of ListBox, Select, ComboBox, Menu and Autocomplete: selection + focus (signals + JSON,
|
|
5
|
+
// resumable) and the collection's static options. Items are not stored: on the server the data
|
|
6
|
+
// items render the collection; in the browser handlers read it back from the DOM ("DOM as
|
|
7
|
+
// collection"), so filtering / async items need no state change here.
|
|
8
|
+
import { signal, untrack } from "@rivetjs/reactivity";
|
|
9
|
+
import { createId } from "@rivetjs/cdk/id";
|
|
10
|
+
import { createMultipleSelectionState, flatItems, isKeyDisabled, isKeySelected, readSelection, } from "../_adapters/collections.js";
|
|
11
|
+
import { isFocusedKey } from "../selection/keyed.js";
|
|
12
|
+
export { isSection, textOf, flatItems } from "../_adapters/collections.js";
|
|
13
|
+
const entriesOf = (items) => typeof items === "function" ? untrack(items) : (items ?? []);
|
|
14
|
+
/** react-stately `useListState`: multiple selection + focus over a collection. */
|
|
15
|
+
export function createListState(props) {
|
|
16
|
+
const items = flatItems(entriesOf(props.items));
|
|
17
|
+
const disabledKeys = new Set(props.disabledKeys ?? []);
|
|
18
|
+
for (const item of items)
|
|
19
|
+
if (item.disabled)
|
|
20
|
+
disabledKeys.add(item.key);
|
|
21
|
+
const selectionProps = {
|
|
22
|
+
...props,
|
|
23
|
+
selectionMode: props.selectionMode ?? "single",
|
|
24
|
+
disabledKeys,
|
|
25
|
+
...(props.selected && !props.selectedKeys ? { selectedKeys: props.selected } : {}),
|
|
26
|
+
...(props.defaultSelected && !props.defaultSelectedKeys ? { defaultSelectedKeys: props.defaultSelected } : {}),
|
|
27
|
+
};
|
|
28
|
+
const selection = createMultipleSelectionState(selectionProps);
|
|
29
|
+
return withList(selection, props, items, disabledKeys);
|
|
30
|
+
}
|
|
31
|
+
/** react-stately `useSingleSelectListState`: single selection, never empty by user action. */
|
|
32
|
+
export function createSingleSelectListState(props) {
|
|
33
|
+
const items = flatItems(entriesOf(props.items));
|
|
34
|
+
const disabledKeys = new Set(props.disabledKeys ?? []);
|
|
35
|
+
for (const item of items)
|
|
36
|
+
if (item.disabled)
|
|
37
|
+
disabledKeys.add(item.key);
|
|
38
|
+
const { onSelectionChange: onChange, ...rest } = props;
|
|
39
|
+
const selectedKey = props.selectedKey ?? signal(props.defaultSelectedKey ?? null);
|
|
40
|
+
const selection = createMultipleSelectionState({
|
|
41
|
+
...rest,
|
|
42
|
+
selectionMode: "single",
|
|
43
|
+
disallowEmptySelection: true,
|
|
44
|
+
allowDuplicateSelectionEvents: true,
|
|
45
|
+
disabledKeys,
|
|
46
|
+
selectedKey,
|
|
47
|
+
...(onChange ? { onSelectionChange: (keys) => onChange(keys === "all" ? null : (keys.values().next().value ?? null)) } : {}),
|
|
48
|
+
});
|
|
49
|
+
return withList(selection, props, items, disabledKeys);
|
|
50
|
+
}
|
|
51
|
+
function withList(selection, props, items, disabledKeys) {
|
|
52
|
+
const options = {};
|
|
53
|
+
const source = props;
|
|
54
|
+
for (const name of OPTION_NAMES)
|
|
55
|
+
if (source[name] !== undefined)
|
|
56
|
+
options[name] = source[name];
|
|
57
|
+
if (props.followFocus && options.selectOnFocus === undefined)
|
|
58
|
+
options.selectOnFocus = true;
|
|
59
|
+
// Initial tab stop (roving tabindex in the server HTML): first selected enabled item, else first enabled.
|
|
60
|
+
if (props.focusedKey !== undefined)
|
|
61
|
+
selection.focusedKey.set(props.focusedKey);
|
|
62
|
+
else if (!options.shouldUseVirtualFocus) {
|
|
63
|
+
const chosen = untrack(() => readSelection(selection));
|
|
64
|
+
// One pass, no copy of the item list: the first enabled chosen item ends it, else the first enabled one stays.
|
|
65
|
+
let first;
|
|
66
|
+
for (const item of items) {
|
|
67
|
+
if (disabledKeys.has(item.key))
|
|
68
|
+
continue;
|
|
69
|
+
if (chosen === "all" || chosen.has(item.key)) {
|
|
70
|
+
first = item;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
first ??= item;
|
|
74
|
+
}
|
|
75
|
+
if (first)
|
|
76
|
+
selection.focusedKey.set(first.key);
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
...selection,
|
|
80
|
+
id: props.id ?? createId(),
|
|
81
|
+
options,
|
|
82
|
+
...(props.onAction ? { onAction: props.onAction } : {}),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const OPTION_NAMES = [
|
|
86
|
+
"shouldFocusWrap",
|
|
87
|
+
"disallowEmptySelection",
|
|
88
|
+
"disallowSelectAll",
|
|
89
|
+
"escapeKeyBehavior",
|
|
90
|
+
"selectOnFocus",
|
|
91
|
+
"disallowTypeAhead",
|
|
92
|
+
"shouldUseVirtualFocus",
|
|
93
|
+
"allowsTabNavigation",
|
|
94
|
+
"linkBehavior",
|
|
95
|
+
"orientation",
|
|
96
|
+
"layout",
|
|
97
|
+
"shouldSelectOnPressUp",
|
|
98
|
+
"allowsDifferentPressOrigin",
|
|
99
|
+
"shouldFocusOnHover",
|
|
100
|
+
];
|
|
101
|
+
// ---------------------------------------------------------------------------------------------
|
|
102
|
+
// Render accessors (server + bindings). They read signals: call them inside attribute bindings.
|
|
103
|
+
// ---------------------------------------------------------------------------------------------
|
|
104
|
+
/** react-aria `getItemId`: `<list id>-option-<key without whitespace>`. */
|
|
105
|
+
export const getItemId = (state, key) => `${state.id}-option-${typeof key === "string" ? key.replace(/\s*/g, "") : String(key)}`;
|
|
106
|
+
/** `aria-selected` of an option: absent with selection mode "none". */
|
|
107
|
+
export const itemSelected = (state, key, disabled = false) => state.selectionMode === "none" ? undefined : isKeySelected(state, key, disabled);
|
|
108
|
+
/** Whether the item is disabled for every interaction (`aria-disabled`, `data-disabled`). */
|
|
109
|
+
export const itemDisabled = (state, key, disabled = false) => isKeyDisabled(state, key, disabled);
|
|
110
|
+
/** Roving `tabindex` of an item (none with virtual focus or when disabled). */
|
|
111
|
+
export const itemTabIndex = (state, key, disabled = false) => state.options.shouldUseVirtualFocus || isKeyDisabled(state, key, disabled) ? undefined : isFocusedKey(state, key) ? 0 : -1;
|
|
112
|
+
/** `data-focused` of an item: the collection is focused and this is its focused key (keyed read first: only the
|
|
113
|
+
* focused item re-runs when the collection's focus changes). */
|
|
114
|
+
export const itemFocused = (state, key) => isFocusedKey(state, key) && state.isFocused();
|
|
115
|
+
/** `tabindex` of the collection element: tabbable while no item is the focus target. */
|
|
116
|
+
export const collectionTabIndex = (state) => state.options.shouldUseVirtualFocus ? undefined : state.focusedKey() == null ? 0 : -1;
|
|
117
|
+
/** RAC `linkBehavior` default of a ListBox: "action" with `selectionBehavior="replace"`, else "override". */
|
|
118
|
+
export function listBoxLinkBehavior(selectionBehavior = "toggle", linkBehavior) {
|
|
119
|
+
let behavior = linkBehavior || (selectionBehavior === "replace" ? "action" : "override");
|
|
120
|
+
// "action" cannot work with "toggle" (no way to start selecting): links are not selectable then.
|
|
121
|
+
if (selectionBehavior === "toggle" && behavior === "action")
|
|
122
|
+
behavior = "override";
|
|
123
|
+
return behavior;
|
|
124
|
+
}
|
package/state/menu.d.ts
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { type Signal } from "@rivetjs/reactivity";
|
|
2
|
+
import { type FocusStrategy, type MultipleSelectionState } from "../_adapters/collections.js";
|
|
3
|
+
import type { PressEvent } from "../interactions/press.jsx";
|
|
4
|
+
import type { HoverEvent } from "../interactions/hover.jsx";
|
|
5
|
+
import type { VirtualCollection } from "../_adapters/selection.js";
|
|
6
|
+
import { type OverlayTriggerProps, type OverlayTriggerState } from "./overlays.js";
|
|
7
|
+
import { type Key, type ListProps, type ListState, type Selection, type SelectionMode } from "./list.js";
|
|
8
|
+
export type { Key, Selection, SelectionMode, FocusStrategy };
|
|
9
|
+
/** RAC `MenuTriggerType`. */
|
|
10
|
+
export type MenuTriggerType = "press" | "longPress" | "contextMenu";
|
|
11
|
+
/** Per-item callbacks / options of a rendered MenuItem (RAC `MenuItem` props), registered at render by key. */
|
|
12
|
+
export interface MenuItemCallbacks {
|
|
13
|
+
/** Item action (RAC `MenuItem onAction`), called before the menu's `onAction`. */
|
|
14
|
+
onAction?: () => void;
|
|
15
|
+
/** Overrides the section's / menu's `shouldCloseOnSelect`. */
|
|
16
|
+
shouldCloseOnSelect?: boolean;
|
|
17
|
+
/** Router options of a link item (`routerOptions`). */
|
|
18
|
+
routerOptions?: Record<string, unknown>;
|
|
19
|
+
onPressStart?: (e: PressEvent) => void;
|
|
20
|
+
onPressEnd?: (e: PressEvent) => void;
|
|
21
|
+
onPressUp?: (e: PressEvent) => void;
|
|
22
|
+
onPress?: (e: PressEvent) => void;
|
|
23
|
+
onPressChange?: (isPressed: boolean) => void;
|
|
24
|
+
onHoverStart?: (e: HoverEvent) => void;
|
|
25
|
+
onHoverEnd?: (e: HoverEvent) => void;
|
|
26
|
+
onHoverChange?: (isHovering: boolean) => void;
|
|
27
|
+
onFocus?: (e: FocusEvent) => void;
|
|
28
|
+
onBlur?: (e: FocusEvent) => void;
|
|
29
|
+
onFocusChange?: (isFocused: boolean) => void;
|
|
30
|
+
/** Interaction-state signals of the item, when its render props are functions (the menu's handler writes them with the `data-*` attributes). */
|
|
31
|
+
states?: MenuItemStateSignals;
|
|
32
|
+
}
|
|
33
|
+
/** RAC MenuItem render-prop states written from the delegated handler (`data-hovered` / `data-pressed` / `data-focus-visible`). */
|
|
34
|
+
export interface MenuItemStateSignals {
|
|
35
|
+
hovered: Signal<boolean>;
|
|
36
|
+
pressed: Signal<boolean>;
|
|
37
|
+
focusVisible: Signal<boolean>;
|
|
38
|
+
}
|
|
39
|
+
/** Options of a rendered MenuSection, by section key. */
|
|
40
|
+
export interface MenuSectionOptions {
|
|
41
|
+
shouldCloseOnSelect?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface MenuTriggerStateProps extends OverlayTriggerProps {
|
|
44
|
+
/** RAC `trigger`: "press" (default), "longPress" or "contextMenu". */
|
|
45
|
+
trigger?: MenuTriggerType;
|
|
46
|
+
}
|
|
47
|
+
/** react-stately `RootMenuTriggerState` (methods: `openMenu`, `toggleMenu`, `closeMenu`, `openSubmenuKey`, `closeSubmenuKey`). */
|
|
48
|
+
export interface MenuTriggerState extends OverlayTriggerState {
|
|
49
|
+
/** Trigger element id. */
|
|
50
|
+
readonly triggerId: string;
|
|
51
|
+
/** Root menu element id. */
|
|
52
|
+
readonly menuId: string;
|
|
53
|
+
readonly trigger: MenuTriggerType;
|
|
54
|
+
/** Where focus goes when the menu opens (RAC `focusStrategy`; null: the menu / its selection). */
|
|
55
|
+
readonly focusStrategy: Signal<FocusStrategy | null>;
|
|
56
|
+
/** Trigger keys of the open submenus, by level (RAC `expandedKeysStack`). */
|
|
57
|
+
readonly expandedKeysStack: Signal<readonly Key[]>;
|
|
58
|
+
}
|
|
59
|
+
/** react-stately `useMenuTriggerState`. */
|
|
60
|
+
export declare function createMenuTriggerState(props?: MenuTriggerStateProps & {
|
|
61
|
+
id?: string;
|
|
62
|
+
}): MenuTriggerState;
|
|
63
|
+
/** `open(focusStrategy = null)`. */
|
|
64
|
+
export declare function openMenu(state: MenuTriggerState, focusStrategy?: FocusStrategy | null): void;
|
|
65
|
+
/** `toggle(focusStrategy = null)`. */
|
|
66
|
+
export declare function toggleMenu(state: MenuTriggerState, focusStrategy?: FocusStrategy | null): void;
|
|
67
|
+
/** `close()` = `closeAll`: closes every submenu and the menu. */
|
|
68
|
+
export declare function closeMenu(state: MenuTriggerState): void;
|
|
69
|
+
/** `openSubmenu(triggerKey, level)`: the stack keeps levels below `level`, then this key. */
|
|
70
|
+
export declare function openSubmenuKey(state: MenuTriggerState, triggerKey: Key, level: number): void;
|
|
71
|
+
/** `closeSubmenu(triggerKey, level)`: closes this level (and the ones above) when it is open. */
|
|
72
|
+
export declare function closeSubmenuKey(state: MenuTriggerState, triggerKey: Key, level: number): void;
|
|
73
|
+
/** Whether the submenu of `triggerKey` at `level` is open (binding accessor). */
|
|
74
|
+
export declare const isSubmenuOpen: (state: MenuTriggerState, triggerKey: Key, level: number) => boolean;
|
|
75
|
+
/** react-stately `SubmenuTriggerState` (methods: `openSubmenu`, `closeSubmenu`, `toggleSubmenu`, `closeAllSubmenus`). */
|
|
76
|
+
export interface SubmenuTriggerState {
|
|
77
|
+
readonly root: MenuTriggerState;
|
|
78
|
+
/** The trigger item's key (Rivet: set by the trigger MenuItem when it renders, `bindSubmenuTrigger`). */
|
|
79
|
+
triggerKey: Key;
|
|
80
|
+
/** The level of the submenu (the stack length when the trigger was created). */
|
|
81
|
+
readonly submenuLevel: number;
|
|
82
|
+
/** Whether the submenu is open (accessor). */
|
|
83
|
+
readonly isOpen: () => boolean;
|
|
84
|
+
readonly focusStrategy: Signal<FocusStrategy | null>;
|
|
85
|
+
}
|
|
86
|
+
/** react-stately `useSubmenuTriggerState({ triggerKey }, rootState)`; `level` defaults to the current stack length. */
|
|
87
|
+
export declare function createSubmenuTriggerState(props: {
|
|
88
|
+
triggerKey: Key;
|
|
89
|
+
}, root: MenuTriggerState, level?: number): SubmenuTriggerState;
|
|
90
|
+
/** Rivet: the trigger item of a SubmenuTrigger renders with its own key: bind it (before anything opens). */
|
|
91
|
+
export declare function bindSubmenuTrigger(state: SubmenuTriggerState, triggerKey: Key): void;
|
|
92
|
+
/** Submenu `open(focusStrategy)`. */
|
|
93
|
+
export declare function openSubmenu(state: SubmenuTriggerState, focusStrategy?: FocusStrategy | null): void;
|
|
94
|
+
/** Submenu `close()`. */
|
|
95
|
+
export declare function closeSubmenu(state: SubmenuTriggerState): void;
|
|
96
|
+
/** Submenu `toggle(focusStrategy)`. */
|
|
97
|
+
export declare function toggleSubmenu(state: SubmenuTriggerState, focusStrategy?: FocusStrategy | null): void;
|
|
98
|
+
/** Submenu `closeAll()`: the root `close`. */
|
|
99
|
+
export declare const closeAllSubmenus: (state: SubmenuTriggerState) => void;
|
|
100
|
+
export interface MenuState extends ListState {
|
|
101
|
+
/** 0: root menu; n: submenu depth. */
|
|
102
|
+
readonly level: number;
|
|
103
|
+
/** The root trigger state (a standalone menu creates its own). */
|
|
104
|
+
readonly root: MenuTriggerState;
|
|
105
|
+
/** Submenu: its trigger's state and the parent menu's id. */
|
|
106
|
+
readonly submenuTrigger?: SubmenuTriggerState | undefined;
|
|
107
|
+
readonly parentId?: string | undefined;
|
|
108
|
+
/** RAC `Menu onAction(key)` (useMenu `menuData.onAction`). */
|
|
109
|
+
readonly menuAction?: ((key: Key) => void) | undefined;
|
|
110
|
+
/** RAC `Menu onClose` (default: the trigger's close). */
|
|
111
|
+
readonly onClose?: (() => void) | undefined;
|
|
112
|
+
readonly shouldCloseOnSelect?: boolean | undefined;
|
|
113
|
+
/** Item callbacks / options, by key (registered by MenuItem at render). */
|
|
114
|
+
readonly items: Record<string, MenuItemCallbacks>;
|
|
115
|
+
/** Section options, by section key (registered by MenuSection). */
|
|
116
|
+
readonly sections: Record<string, MenuSectionOptions>;
|
|
117
|
+
/** Submenu trigger states of this menu's SubmenuTrigger items, by trigger key. */
|
|
118
|
+
readonly submenus: Record<string, SubmenuTriggerState>;
|
|
119
|
+
/** Hover-open delays of submenu trigger items, by key (ms). */
|
|
120
|
+
readonly delays: Record<string, number>;
|
|
121
|
+
/** Rivet: number of rendered items (live collection: RAC `collection.size` for `isEmpty`). */
|
|
122
|
+
readonly itemCount: Signal<number>;
|
|
123
|
+
}
|
|
124
|
+
export interface MenuProps extends Omit<ListProps, "items" | "selectionBehavior" | "shouldSelectOnPressUp" | "allowsDifferentPressOrigin" | "linkBehavior" | "followFocus" | "selected" | "defaultSelected" | "onAction" | "selectedKeys"> {
|
|
125
|
+
/** The currently selected keys (a Signal: two-way; a plain value: the initial selection, changes reported to `onSelectionChange`). */
|
|
126
|
+
selectedKeys?: Signal<Selection> | "all" | Iterable<Key>;
|
|
127
|
+
onAction?: (key: Key) => void;
|
|
128
|
+
onClose?: () => void;
|
|
129
|
+
shouldCloseOnSelect?: boolean;
|
|
130
|
+
}
|
|
131
|
+
/** react-stately `useTreeState` for a menu + RAC menu context (`menuData`: action, close; section selection). */
|
|
132
|
+
export declare function createMenuState(props: MenuProps, context?: {
|
|
133
|
+
root?: MenuTriggerState;
|
|
134
|
+
level?: number;
|
|
135
|
+
submenuTrigger?: SubmenuTriggerState;
|
|
136
|
+
parentId?: string;
|
|
137
|
+
id?: string;
|
|
138
|
+
/** Rivet: a Menu inside a `CollectionVirtualizer` (its built collection + the layout delegate). */
|
|
139
|
+
virtual?: VirtualCollection;
|
|
140
|
+
}): MenuState;
|
|
141
|
+
/** Register a rendered MenuItem's callbacks / disabled flag (RAC: the collection node's props). */
|
|
142
|
+
export declare function registerMenuItem(state: MenuState, key: Key, item: MenuItemCallbacks & {
|
|
143
|
+
isDisabled?: boolean;
|
|
144
|
+
}): void;
|
|
145
|
+
/** Register a MenuSection: its close rule and own selection (RAC `GroupSelectionManager`). */
|
|
146
|
+
export declare function registerMenuSection(state: MenuState, key: Key, section: MenuSectionOptions & {
|
|
147
|
+
selectionMode?: SelectionMode;
|
|
148
|
+
selectedKeys?: Signal<Selection> | "all" | Iterable<Key>;
|
|
149
|
+
defaultSelectedKeys?: "all" | Iterable<Key>;
|
|
150
|
+
onSelectionChange?: (keys: Selection) => void;
|
|
151
|
+
disallowEmptySelection?: boolean;
|
|
152
|
+
}): void;
|
|
153
|
+
/** Register a SubmenuTrigger item of `state` (its trigger state + hover delay). */
|
|
154
|
+
export declare function registerSubmenu(state: MenuState, key: Key, sub: SubmenuTriggerState, delay?: number): void;
|
|
155
|
+
/** Id of the submenu of `key` in menu `parent` (its trigger item is `getItemId(parent, key)`). */
|
|
156
|
+
export declare const submenuId: (parent: {
|
|
157
|
+
id: string;
|
|
158
|
+
}, key: Key) => string;
|
|
159
|
+
/** The selection state an item renders from: its section's own, else the menu's. */
|
|
160
|
+
export declare function selectionOf(state: MenuState, sectionKey: Key | undefined): MultipleSelectionState & {
|
|
161
|
+
selectionMode: SelectionMode;
|
|
162
|
+
};
|
package/state/menu.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// Ported from react-spectrum (react-stately: menu/useMenuTriggerState, menu/useSubmenuTriggerState,
|
|
2
|
+
// tree/useTreeState for menus; react-aria-components Menu.tsx MenuSection selection), Apache-2.0, © Adobe.
|
|
3
|
+
//
|
|
4
|
+
// Menu state: the trigger's overlay state (open, focus strategy, the stack of open submenus), one
|
|
5
|
+
// submenu trigger state per SubmenuTrigger, and one list state per menu (root and each submenu):
|
|
6
|
+
// selection, focus, actions. Signals + JSON only.
|
|
7
|
+
// Rivet:
|
|
8
|
+
// - methods are free functions (`openMenu`, `toggleMenu`, `closeMenu`, `openSubmenuKey`, `openSubmenu`, …).
|
|
9
|
+
// - the menu's collection is the rendered DOM (items need no serialized model): MenuItem / MenuSection /
|
|
10
|
+
// SubmenuTrigger register their callbacks, disabled flags, section selection and submenu states into
|
|
11
|
+
// the menu state at render (`registerMenuItem`, `registerMenuSection`, `registerSubmenu`).
|
|
12
|
+
import { computed, signal, untrack, _regionState } from "@rivetjs/reactivity";
|
|
13
|
+
import { createId } from "@rivetjs/cdk/id";
|
|
14
|
+
import { createMultipleSelectionState } from "../_adapters/collections.js";
|
|
15
|
+
import { closeOverlay, createOverlayTriggerState, openOverlay, toggleOverlay } from "./overlays.js";
|
|
16
|
+
import { createListState, getItemId } from "./list.js";
|
|
17
|
+
/** react-stately `useMenuTriggerState`. */
|
|
18
|
+
export function createMenuTriggerState(props = {}) {
|
|
19
|
+
// Region state: a resumed page re-creating the menu's region (its first open) keeps it.
|
|
20
|
+
return _regionState(() => {
|
|
21
|
+
const menuId = props.id ?? createId();
|
|
22
|
+
return {
|
|
23
|
+
...createOverlayTriggerState(props),
|
|
24
|
+
triggerId: menuId + "-trigger",
|
|
25
|
+
menuId,
|
|
26
|
+
trigger: props.trigger ?? "press",
|
|
27
|
+
focusStrategy: signal(null),
|
|
28
|
+
expandedKeysStack: signal([]),
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** `open(focusStrategy = null)`. */
|
|
33
|
+
export function openMenu(state, focusStrategy = null) {
|
|
34
|
+
state.focusStrategy.set(focusStrategy);
|
|
35
|
+
openOverlay(state);
|
|
36
|
+
}
|
|
37
|
+
/** `toggle(focusStrategy = null)`. */
|
|
38
|
+
export function toggleMenu(state, focusStrategy = null) {
|
|
39
|
+
state.focusStrategy.set(focusStrategy);
|
|
40
|
+
toggleOverlay(state);
|
|
41
|
+
}
|
|
42
|
+
/** `close()` = `closeAll`: closes every submenu and the menu. */
|
|
43
|
+
export function closeMenu(state) {
|
|
44
|
+
state.expandedKeysStack.set([]);
|
|
45
|
+
closeOverlay(state);
|
|
46
|
+
}
|
|
47
|
+
/** `openSubmenu(triggerKey, level)`: the stack keeps levels below `level`, then this key. */
|
|
48
|
+
export function openSubmenuKey(state, triggerKey, level) {
|
|
49
|
+
const stack = untrack(state.expandedKeysStack);
|
|
50
|
+
if (level > stack.length)
|
|
51
|
+
return;
|
|
52
|
+
state.expandedKeysStack.set([...stack.slice(0, level), triggerKey]);
|
|
53
|
+
}
|
|
54
|
+
/** `closeSubmenu(triggerKey, level)`: closes this level (and the ones above) when it is open. */
|
|
55
|
+
export function closeSubmenuKey(state, triggerKey, level) {
|
|
56
|
+
const stack = untrack(state.expandedKeysStack);
|
|
57
|
+
if (stack[level] === triggerKey)
|
|
58
|
+
state.expandedKeysStack.set(stack.slice(0, level));
|
|
59
|
+
}
|
|
60
|
+
/** Whether the submenu of `triggerKey` at `level` is open (binding accessor). */
|
|
61
|
+
export const isSubmenuOpen = (state, triggerKey, level) => state.expandedKeysStack()[level] === triggerKey;
|
|
62
|
+
/** react-stately `useSubmenuTriggerState({ triggerKey }, rootState)`; `level` defaults to the current stack length. */
|
|
63
|
+
export function createSubmenuTriggerState(props, root, level) {
|
|
64
|
+
return _regionState(() => {
|
|
65
|
+
const submenuLevel = level ?? untrack(root.expandedKeysStack).length;
|
|
66
|
+
const sub = {
|
|
67
|
+
root,
|
|
68
|
+
triggerKey: props.triggerKey,
|
|
69
|
+
submenuLevel,
|
|
70
|
+
// Reads `triggerKey` at evaluation: the trigger item may bind its own key after creation.
|
|
71
|
+
isOpen: computed(() => String(root.expandedKeysStack()[submenuLevel]) === String(sub.triggerKey)),
|
|
72
|
+
focusStrategy: signal(null),
|
|
73
|
+
};
|
|
74
|
+
return sub;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/** Rivet: the trigger item of a SubmenuTrigger renders with its own key: bind it (before anything opens). */
|
|
78
|
+
export function bindSubmenuTrigger(state, triggerKey) {
|
|
79
|
+
state.triggerKey = triggerKey;
|
|
80
|
+
}
|
|
81
|
+
/** Submenu `open(focusStrategy)`. */
|
|
82
|
+
export function openSubmenu(state, focusStrategy) {
|
|
83
|
+
state.focusStrategy.set(focusStrategy ?? null);
|
|
84
|
+
openSubmenuKey(state.root, state.triggerKey, state.submenuLevel);
|
|
85
|
+
}
|
|
86
|
+
/** Submenu `close()`. */
|
|
87
|
+
export function closeSubmenu(state) {
|
|
88
|
+
state.focusStrategy.set(null);
|
|
89
|
+
closeSubmenuKey(state.root, state.triggerKey, state.submenuLevel);
|
|
90
|
+
}
|
|
91
|
+
/** Submenu `toggle(focusStrategy)`. */
|
|
92
|
+
export function toggleSubmenu(state, focusStrategy) {
|
|
93
|
+
state.focusStrategy.set(focusStrategy ?? null);
|
|
94
|
+
if (untrack(state.isOpen))
|
|
95
|
+
closeSubmenu(state);
|
|
96
|
+
else
|
|
97
|
+
openSubmenu(state, focusStrategy);
|
|
98
|
+
}
|
|
99
|
+
/** Submenu `closeAll()`: the root `close`. */
|
|
100
|
+
export const closeAllSubmenus = (state) => closeMenu(state.root);
|
|
101
|
+
/** react-stately `useTreeState` for a menu + RAC menu context (`menuData`: action, close; section selection). */
|
|
102
|
+
export function createMenuState(props, context = {}) {
|
|
103
|
+
// Region state: a resumed page re-creating the menu's region (its first open) keeps it.
|
|
104
|
+
return _regionState(() => {
|
|
105
|
+
const { onAction, selectedKeys, ...listProps } = props;
|
|
106
|
+
const list = createListState({
|
|
107
|
+
...listProps,
|
|
108
|
+
...(selectedKeys !== undefined ? { selectedKeys: toSelectionSignal(selectedKeys) } : {}),
|
|
109
|
+
...(context.id ? { id: context.id } : {}),
|
|
110
|
+
selectionMode: props.selectionMode ?? "none",
|
|
111
|
+
// useMenu: wrap focus; useMenuItem: select on press up, from a press that started elsewhere (the
|
|
112
|
+
// trigger); links are handled by the menu item (linkBehavior "none").
|
|
113
|
+
shouldFocusWrap: props.shouldFocusWrap ?? true,
|
|
114
|
+
linkBehavior: "none",
|
|
115
|
+
shouldSelectOnPressUp: true,
|
|
116
|
+
allowsDifferentPressOrigin: true,
|
|
117
|
+
// Menus open with focus on the menu (or the strategy's item): no server tab stop.
|
|
118
|
+
focusedKey: props.focusedKey ?? null,
|
|
119
|
+
});
|
|
120
|
+
return {
|
|
121
|
+
...list,
|
|
122
|
+
level: context.level ?? 0,
|
|
123
|
+
root: context.root ?? createMenuTriggerState({ id: list.id }),
|
|
124
|
+
submenuTrigger: context.submenuTrigger,
|
|
125
|
+
parentId: context.parentId,
|
|
126
|
+
menuAction: onAction,
|
|
127
|
+
onClose: props.onClose,
|
|
128
|
+
shouldCloseOnSelect: props.shouldCloseOnSelect,
|
|
129
|
+
items: {},
|
|
130
|
+
sections: {},
|
|
131
|
+
submenus: {},
|
|
132
|
+
delays: {},
|
|
133
|
+
groups: {},
|
|
134
|
+
itemCount: signal(0),
|
|
135
|
+
...(context.virtual ? { virtual: context.virtual } : {}),
|
|
136
|
+
};
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/** Register a rendered MenuItem's callbacks / disabled flag (RAC: the collection node's props). */
|
|
140
|
+
export function registerMenuItem(state, key, item) {
|
|
141
|
+
const { isDisabled, ...callbacks } = item;
|
|
142
|
+
if (isDisabled)
|
|
143
|
+
state.disabledKeys.add(key);
|
|
144
|
+
let any = false;
|
|
145
|
+
for (const name in callbacks)
|
|
146
|
+
if (callbacks[name] !== undefined)
|
|
147
|
+
any = true;
|
|
148
|
+
if (any)
|
|
149
|
+
state.items[String(key)] = callbacks;
|
|
150
|
+
}
|
|
151
|
+
/** Register a MenuSection: its close rule and own selection (RAC `GroupSelectionManager`). */
|
|
152
|
+
export function registerMenuSection(state, key, section) {
|
|
153
|
+
if (section.shouldCloseOnSelect !== undefined)
|
|
154
|
+
state.sections[String(key)] = { shouldCloseOnSelect: section.shouldCloseOnSelect };
|
|
155
|
+
if (section.selectionMode == null)
|
|
156
|
+
return;
|
|
157
|
+
state.groups[String(key)] = createMultipleSelectionState({
|
|
158
|
+
selectionMode: section.selectionMode,
|
|
159
|
+
...(section.selectedKeys ? { selectedKeys: toSelectionSignal(section.selectedKeys) } : {}),
|
|
160
|
+
...(section.defaultSelectedKeys ? { defaultSelectedKeys: section.defaultSelectedKeys } : {}),
|
|
161
|
+
...(section.onSelectionChange ? { onSelectionChange: section.onSelectionChange } : {}),
|
|
162
|
+
...(section.disallowEmptySelection !== undefined ? { disallowEmptySelection: section.disallowEmptySelection } : {}),
|
|
163
|
+
disabledKeys: state.disabledKeys,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/** Register a SubmenuTrigger item of `state` (its trigger state + hover delay). */
|
|
167
|
+
export function registerSubmenu(state, key, sub, delay) {
|
|
168
|
+
state.submenus[String(key)] = sub;
|
|
169
|
+
if (delay !== undefined)
|
|
170
|
+
state.delays[String(key)] = delay;
|
|
171
|
+
}
|
|
172
|
+
const isSignal = (v) => typeof v === "function" && typeof v.set === "function";
|
|
173
|
+
/** A controlled selection: a Signal as is; a plain value → a signal starting at it (Deviation: the adapter selection writes it). */
|
|
174
|
+
function toSelectionSignal(keys) {
|
|
175
|
+
// A Signal (two-way) or a read-only accessor (live prop, `liveKeys`: controlled, never written) as is.
|
|
176
|
+
if (typeof keys === "function")
|
|
177
|
+
return keys;
|
|
178
|
+
return signal(keys === "all" ? "all" : new Set(keys));
|
|
179
|
+
}
|
|
180
|
+
/** Id of the submenu of `key` in menu `parent` (its trigger item is `getItemId(parent, key)`). */
|
|
181
|
+
export const submenuId = (parent, key) => getItemId(parent, key) + "-menu";
|
|
182
|
+
/** The selection state an item renders from: its section's own, else the menu's. */
|
|
183
|
+
export function selectionOf(state, sectionKey) {
|
|
184
|
+
return (sectionKey !== undefined && state.groups?.[String(sectionKey)]) || state;
|
|
185
|
+
}
|