@rivetjs/cdk 0.0.0-stage → 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/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 +109 -0
- package/_adapters/selection.js +685 -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 +374 -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 +217 -0
- package/collections/components.jsx +537 -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 +9 -0
- package/collections/nodes.js +81 -0
- package/collections/selection-model.d.ts +93 -0
- package/collections/selection-model.js +192 -0
- package/collections/server-dev.d.ts +5 -0
- package/collections/server-dev.js +16 -0
- package/collections/server-off.d.ts +5 -0
- package/collections/server-off.js +7 -0
- package/collections/server-on.d.ts +28 -0
- package/collections/server-on.jsx +76 -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 +194 -0
- package/drag-drop/directives/drag.js +522 -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 +126 -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 +133 -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 +242 -0
- package/grid-list/behaviour.js +598 -0
- package/grid-list/index.d.ts +202 -0
- package/grid-list/index.jsx +685 -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 +538 -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 +53 -0
- package/interactions/utils.js +252 -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 +492 -0
- package/listbox/index.d.ts +129 -0
- package/listbox/index.jsx +596 -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 +671 -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 +47 -0
- package/portal/index.jsx +76 -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 +139 -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 +76 -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 +535 -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 +624 -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 +159 -0
- package/state/menu.js +184 -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 +982 -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 +815 -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 +71 -0
- package/utils/data-attrs.jsx +193 -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 +57 -0
- package/utils/index.js +257 -0
- package/utils/links.d.ts +87 -0
- package/utils/links.jsx +152 -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/types.d.ts +111 -0
- package/utils/types.js +1 -0
- package/virtualizer/behaviour.d.ts +98 -0
- package/virtualizer/behaviour.js +315 -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 +2 -0
- package/virtualizer/index.jsx +4 -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 +508 -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 +79 -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 +62 -0
- package/virtualizer/virtualizer.jsx +88 -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
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Ported from react-aria useFocusable / Focusable / FocusableProvider / FocusableContext
|
|
2
|
+
// (packages/react-aria/src/interactions/useFocusable.tsx), Apache-2.0, © Adobe.
|
|
3
|
+
// Makes an element focusable and capable of auto focus; `FocusableContext` passes DOM props (e.g. a
|
|
4
|
+
// TooltipTrigger's `aria-describedby` + focus handlers) to the nearest focusable child.
|
|
5
|
+
// Rivet:
|
|
6
|
+
// - `useFocusable(props, ref)` → `focusableProps(props, ref?)` returning RA's `focusableProps` bag
|
|
7
|
+
// (naming convention); handlers are resumable (focusProps / keyboardProps bags).
|
|
8
|
+
// - autoFocus: a `clientEffect` focuses the ref'd element once (`focusSafely`), only when `autoFocus`.
|
|
9
|
+
// - `FocusableContext` is registered for resume (id `rv-focusable`); its `ref` is a Rivet ref that the
|
|
10
|
+
// consumer's ref is synced to (RA `useSyncRef`) through `mergeRefValues`.
|
|
11
|
+
// - Deviation: `<Focusable>` cannot clone its child (compiled templates): the child is a render
|
|
12
|
+
// function receiving the merged props, which it spreads on its element and whose `ref` it passes
|
|
13
|
+
// (`{(p) => <span {...p} ref={p.ref} role="button">…</span>}`: a spread never sets `ref`). Dev checks (child focusable / interactive
|
|
14
|
+
// role) run in a dev-only client effect.
|
|
15
|
+
import { createContext, untrack, useContext } from "@rivetjs/reactivity";
|
|
16
|
+
import { Provider as ContextProvider, clientEffect, ref as createRef } from "@rivetjs/runtime/dom";
|
|
17
|
+
import { renderSlot } from "@rivetjs/runtime/slot";
|
|
18
|
+
import { resumableContext } from "@rivetjs/runtime/resume-format";
|
|
19
|
+
import { focusProps } from "../interactions/focus.jsx";
|
|
20
|
+
import { keyboardProps } from "../interactions/keyboard.jsx";
|
|
21
|
+
import { mergeProps } from "../interactions/merge-props.jsx";
|
|
22
|
+
import { isFocusable } from "../interactions/utils.js";
|
|
23
|
+
import { mergeRefValues } from "../slots/index.jsx";
|
|
24
|
+
import { focusSafely } from "./index.js";
|
|
25
|
+
/** DOM props for the nearest focusable child (RA `FocusableContext`, exported for collections). */
|
|
26
|
+
export const FocusableContext = resumableContext(createContext(null, { id: "rv-focusable" }));
|
|
27
|
+
/** Provides DOM props to the nearest focusable child (RA `FocusableProvider`). */
|
|
28
|
+
export function FocusableProvider(props) {
|
|
29
|
+
const { children, ref, ...otherProps } = props;
|
|
30
|
+
const value = { ...otherProps, ref: ref ?? createRef() };
|
|
31
|
+
return (<ContextProvider token={FocusableContext} value={value}>
|
|
32
|
+
{renderSlot(children)}
|
|
33
|
+
</ContextProvider>);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Used to make an element focusable and capable of auto focus (RA `useFocusable(props, domRef).focusableProps`).
|
|
37
|
+
* Put `ref` (when given) on the element: autoFocus and the context's ref sync go through it.
|
|
38
|
+
*/
|
|
39
|
+
export function focusableProps(props, ref) {
|
|
40
|
+
const focus = focusProps(props);
|
|
41
|
+
const keyboard = keyboardProps(props);
|
|
42
|
+
const interactions = mergeProps(focus.focusProps, keyboard.keyboardProps);
|
|
43
|
+
const context = useContext(FocusableContext) || {};
|
|
44
|
+
const { ref: contextRef, ...domProps } = context;
|
|
45
|
+
const interactionProps = props.isDisabled ? {} : domProps;
|
|
46
|
+
const elementRef = mergeRefValues(ref, contextRef);
|
|
47
|
+
if (props.autoFocus && elementRef) {
|
|
48
|
+
const target = elementRef;
|
|
49
|
+
let done = false;
|
|
50
|
+
clientEffect(() => {
|
|
51
|
+
const el = typeof target === "function" ? target() : target.current;
|
|
52
|
+
if (!done && el)
|
|
53
|
+
untrack(() => focusSafely(el));
|
|
54
|
+
done = true;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// Always set a tabIndex so that Safari allows focusing native buttons and inputs.
|
|
58
|
+
let tabIndex = props.excludeFromTabOrder ? -1 : 0;
|
|
59
|
+
if (props.isDisabled)
|
|
60
|
+
tabIndex = undefined;
|
|
61
|
+
const out = mergeProps({ ...interactions, tabIndex }, interactionProps);
|
|
62
|
+
if (elementRef)
|
|
63
|
+
out.ref = elementRef;
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
const isDev = () => globalThis.process?.env?.NODE_ENV === "development";
|
|
67
|
+
const INTERACTIVE_ROLES = /^(application|button|checkbox|combobox|gridcell|link|menuitem|menuitemcheckbox|menuitemradio|option|radio|searchbox|separator|slider|spinbutton|switch|tab|tabpanel|textbox|treeitem|img|meter|progressbar)$/;
|
|
68
|
+
/** Makes its child focusable (RA `<Focusable>`); see the header for the render-function child. */
|
|
69
|
+
export function Focusable(props) {
|
|
70
|
+
const { children, ref, ...options } = props;
|
|
71
|
+
const element = ref ?? createRef();
|
|
72
|
+
const merged = focusableProps(options, element);
|
|
73
|
+
if (isDev()) {
|
|
74
|
+
const isDisabled = options.isDisabled;
|
|
75
|
+
clientEffect(() => {
|
|
76
|
+
const el = typeof element === "function" ? element() : element.current;
|
|
77
|
+
if (!el)
|
|
78
|
+
return console.error("<Focusable> child must forward its ref to a DOM element.");
|
|
79
|
+
untrack(() => {
|
|
80
|
+
if (!isDisabled && !isFocusable(el, { skipVisibilityCheck: true }))
|
|
81
|
+
return console.warn("<Focusable> child must be focusable. Please ensure the tabIndex prop is passed through.");
|
|
82
|
+
if (!/^(button|input|select|textarea|a|area|summary|img|svg)$/.test(el.localName)) {
|
|
83
|
+
const role = el.getAttribute("role");
|
|
84
|
+
if (!role)
|
|
85
|
+
console.warn("<Focusable> child must have an interactive ARIA role.");
|
|
86
|
+
else if (!INTERACTIVE_ROLES.test(role))
|
|
87
|
+
console.warn(`<Focusable> child must have an interactive ARIA role. Got "${role}".`);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return renderSlot(children, merged);
|
|
93
|
+
}
|
package/focus/index.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type FocusableElement } from "../interactions/utils.js";
|
|
2
|
+
/**
|
|
3
|
+
* Rivet: the mount effect of a server-rendered element (auto focus of a Dialog / FocusScope / `autoFocus`)
|
|
4
|
+
* runs on a resumed page when its chunk wakes (idle / visible), possibly after the user moved focus — React
|
|
5
|
+
* runs it at hydration, before any interaction. True when focus already left the body: auto focus then
|
|
6
|
+
* leaves it where the user put it.
|
|
7
|
+
*/
|
|
8
|
+
export declare function focusMovedByUser(doc: Document): boolean;
|
|
9
|
+
/** Focus the first tabbable element inside `scope` (or `scope` itself when focusable); returns it. */
|
|
10
|
+
export declare function focusFirst(scope: Element): HTMLElement | null;
|
|
11
|
+
/** Focus the last tabbable element inside `scope`; returns it. */
|
|
12
|
+
export declare function focusLast(scope: Element): HTMLElement | null;
|
|
13
|
+
/**
|
|
14
|
+
* Keydown handler body that keeps Tab / Shift+Tab inside `scope` (wraps at the ends). Wire it on the
|
|
15
|
+
* scope element: `onKeyDown={(e) => containFocus(e.currentTarget, e)}`. Returns true when it moved focus.
|
|
16
|
+
*/
|
|
17
|
+
export declare function containFocus(scope: Element, event: KeyboardEvent): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Remember the focused element now; the returned function focuses it again (if still connected and
|
|
20
|
+
* focus is not already elsewhere outside `within`). Use around custom overlays: save on open, call on close.
|
|
21
|
+
*/
|
|
22
|
+
export declare function saveFocus(within?: Element | null): () => void;
|
|
23
|
+
/**
|
|
24
|
+
* Roving tabindex: make `item` the only tabbable item among `items` (tabindex 0, others -1) and focus
|
|
25
|
+
* it. Server markup renders the same tabindex values from state (`tabIndex={focused === key ? 0 : -1}`).
|
|
26
|
+
*/
|
|
27
|
+
export declare function roveFocus(items: Iterable<Element>, item: HTMLElement, options?: FocusOptions): void;
|
|
28
|
+
/**
|
|
29
|
+
* Make everything outside `element` inert (siblings of it and of each ancestor up to `<body>`); the
|
|
30
|
+
* returned function restores the previous `inert` values. For custom modal surfaces (the overlay
|
|
31
|
+
* components use `ariaHideOutside`).
|
|
32
|
+
*/
|
|
33
|
+
export declare function inertOutside(element: Element): () => void;
|
|
34
|
+
export interface FocusManagerOptions {
|
|
35
|
+
/** Element to start from (default: the focused element). */
|
|
36
|
+
from?: Element;
|
|
37
|
+
/** Only tabbable elements (default: all focusable). */
|
|
38
|
+
tabbable?: boolean;
|
|
39
|
+
/** Wrap around at the ends. */
|
|
40
|
+
wrap?: boolean;
|
|
41
|
+
/** Filter: whether an element may receive focus. */
|
|
42
|
+
accept?: (node: Element) => boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface FocusManager {
|
|
45
|
+
/** Focus the next focusable / tabbable element in the scope. */
|
|
46
|
+
focusNext(opts?: FocusManagerOptions): FocusableElement | null;
|
|
47
|
+
/** Focus the previous focusable / tabbable element in the scope. */
|
|
48
|
+
focusPrevious(opts?: FocusManagerOptions): FocusableElement | null;
|
|
49
|
+
/** Focus the first focusable / tabbable element in the scope. */
|
|
50
|
+
focusFirst(opts?: FocusManagerOptions): FocusableElement | null;
|
|
51
|
+
/** Focus the last focusable / tabbable element in the scope. */
|
|
52
|
+
focusLast(opts?: FocusManagerOptions): FocusableElement | null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Focus `element` without scrolling; when a screen reader's virtual cursor drives the interaction,
|
|
56
|
+
* wait for running CSS transitions first (VoiceOver on iOS scrolls to transitioning elements).
|
|
57
|
+
*/
|
|
58
|
+
export declare function focusSafely(element: FocusableElement): void;
|
|
59
|
+
/** Whether `element` is inside one of the `scope` nodes. */
|
|
60
|
+
export declare function isElementInScope(element: Element | null | undefined, scope: Element[] | null | undefined): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* A TreeWalker over the focusable (or tabbable) elements of `root` — radio groups collapse to their
|
|
63
|
+
* tab stop, `from`'s subtree is skipped, `scope` limits the nodes, `accept` filters.
|
|
64
|
+
*/
|
|
65
|
+
export declare function getFocusableTreeWalker(root: Element, opts?: FocusManagerOptions, scope?: Element[]): TreeWalker;
|
|
66
|
+
type RootRef = (() => Element | null | undefined) | {
|
|
67
|
+
current: Element | null;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* A FocusManager moving focus within `ref`'s element (react-aria `createFocusManager`). `ref`: a
|
|
71
|
+
* `ref()` object, an element accessor or `{ current }`. Browser only (call it in handlers).
|
|
72
|
+
*/
|
|
73
|
+
export declare function createFocusManager(ref: RootRef, defaultOptions?: FocusManagerOptions): FocusManager;
|
|
74
|
+
export {};
|
package/focus/index.js
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
// Focus management: containment (Tab trap), restore, roving tabindex, inert outside, for overlays
|
|
2
|
+
// (the div overlay layer; `<FocusScope>` for components), composite widgets and custom roots.
|
|
3
|
+
import { tabbables } from "../a11y/index.js";
|
|
4
|
+
import { getActiveElement, getOwnerDocument, isFocusable as isFocusableElement, isTabbable as isTabbableElement, nodeContains, focusWithoutScrolling, runAfterTransition, } from "../interactions/utils.js";
|
|
5
|
+
import { getInteractionModality } from "../interactions/focus-visible.jsx";
|
|
6
|
+
import { cssEscape } from "../utils/dom.js";
|
|
7
|
+
/**
|
|
8
|
+
* Rivet: the mount effect of a server-rendered element (auto focus of a Dialog / FocusScope / `autoFocus`)
|
|
9
|
+
* runs on a resumed page when its chunk wakes (idle / visible), possibly after the user moved focus — React
|
|
10
|
+
* runs it at hydration, before any interaction. True when focus already left the body: auto focus then
|
|
11
|
+
* leaves it where the user put it.
|
|
12
|
+
*/
|
|
13
|
+
export function focusMovedByUser(doc) {
|
|
14
|
+
const active = getActiveElement(doc);
|
|
15
|
+
return !!active && active !== doc.body && active !== doc.documentElement;
|
|
16
|
+
}
|
|
17
|
+
/** Focus the first tabbable element inside `scope` (or `scope` itself when focusable); returns it. */
|
|
18
|
+
export function focusFirst(scope) {
|
|
19
|
+
const target = tabbables(scope)[0] ?? null;
|
|
20
|
+
target?.focus();
|
|
21
|
+
return target;
|
|
22
|
+
}
|
|
23
|
+
/** Focus the last tabbable element inside `scope`; returns it. */
|
|
24
|
+
export function focusLast(scope) {
|
|
25
|
+
const list = tabbables(scope);
|
|
26
|
+
const target = list[list.length - 1] ?? null;
|
|
27
|
+
target?.focus();
|
|
28
|
+
return target;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Keydown handler body that keeps Tab / Shift+Tab inside `scope` (wraps at the ends). Wire it on the
|
|
32
|
+
* scope element: `onKeyDown={(e) => containFocus(e.currentTarget, e)}`. Returns true when it moved focus.
|
|
33
|
+
*/
|
|
34
|
+
export function containFocus(scope, event) {
|
|
35
|
+
if (event.key !== "Tab" || event.altKey || event.ctrlKey || event.metaKey)
|
|
36
|
+
return false;
|
|
37
|
+
const list = tabbables(scope);
|
|
38
|
+
if (!list.length) {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
// The element the key was pressed on, not `activeElement`: on a resumed page the first Tab runs
|
|
43
|
+
// this after the chunk loaded, when the browser has already moved focus (from the middle item to
|
|
44
|
+
// the last one, say) — comparing that new focus with the ends would wrap one step too early.
|
|
45
|
+
const first = list[0], last = list[list.length - 1], target = event.target instanceof Element ? event.target : null, active = target && target !== scope ? target : scope.ownerDocument.activeElement;
|
|
46
|
+
const outside = !active || !scope.contains(active);
|
|
47
|
+
if (event.shiftKey && (active === first || outside)) {
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
last.focus();
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if (!event.shiftKey && (active === last || outside)) {
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
first.focus();
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Remember the focused element now; the returned function focuses it again (if still connected and
|
|
61
|
+
* focus is not already elsewhere outside `within`). Use around custom overlays: save on open, call on close.
|
|
62
|
+
*/
|
|
63
|
+
export function saveFocus(within) {
|
|
64
|
+
const previous = typeof document === "undefined" ? null : document.activeElement;
|
|
65
|
+
return () => {
|
|
66
|
+
const active = document.activeElement;
|
|
67
|
+
const lost = !active || active === document.body || (within ? within.contains(active) : true);
|
|
68
|
+
if (previous?.isConnected && lost)
|
|
69
|
+
previous.focus({ preventScroll: true });
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Roving tabindex: make `item` the only tabbable item among `items` (tabindex 0, others -1) and focus
|
|
74
|
+
* it. Server markup renders the same tabindex values from state (`tabIndex={focused === key ? 0 : -1}`).
|
|
75
|
+
*/
|
|
76
|
+
export function roveFocus(items, item, options) {
|
|
77
|
+
for (const other of items)
|
|
78
|
+
if (other !== item)
|
|
79
|
+
other.setAttribute("tabindex", "-1");
|
|
80
|
+
item.setAttribute("tabindex", "0");
|
|
81
|
+
item.focus(options);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Make everything outside `element` inert (siblings of it and of each ancestor up to `<body>`); the
|
|
85
|
+
* returned function restores the previous `inert` values. For custom modal surfaces (the overlay
|
|
86
|
+
* components use `ariaHideOutside`).
|
|
87
|
+
*/
|
|
88
|
+
export function inertOutside(element) {
|
|
89
|
+
const changed = [];
|
|
90
|
+
for (let node = element; node && node !== document.body; node = node.parentElement) {
|
|
91
|
+
const parent = node.parentElement;
|
|
92
|
+
if (!parent)
|
|
93
|
+
break;
|
|
94
|
+
for (const sibling of parent.children)
|
|
95
|
+
if (sibling !== node && !sibling.hasAttribute("inert") && sibling.localName !== "script") {
|
|
96
|
+
sibling.setAttribute("inert", "");
|
|
97
|
+
changed.push(sibling);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return () => {
|
|
101
|
+
for (const el of changed)
|
|
102
|
+
el.removeAttribute("inert");
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Focus `element` without scrolling; when a screen reader's virtual cursor drives the interaction,
|
|
107
|
+
* wait for running CSS transitions first (VoiceOver on iOS scrolls to transitioning elements).
|
|
108
|
+
*/
|
|
109
|
+
export function focusSafely(element) {
|
|
110
|
+
if (!element.isConnected)
|
|
111
|
+
return;
|
|
112
|
+
const doc = getOwnerDocument(element);
|
|
113
|
+
if (getInteractionModality() === "virtual") {
|
|
114
|
+
const last = getActiveElement(doc);
|
|
115
|
+
runAfterTransition(() => {
|
|
116
|
+
const active = getActiveElement(doc);
|
|
117
|
+
// Focus did not move (or was lost to the body) meanwhile.
|
|
118
|
+
if ((active === last || active === doc.body) && element.isConnected)
|
|
119
|
+
focusWithoutScrolling(element);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else
|
|
123
|
+
focusWithoutScrolling(element);
|
|
124
|
+
}
|
|
125
|
+
function getRadiosInGroup(element) {
|
|
126
|
+
if (!element.form)
|
|
127
|
+
return [...getOwnerDocument(element).querySelectorAll(`input[type="radio"][name="${cssEscape(element.name)}"]`)].filter((radio) => !radio.form);
|
|
128
|
+
const list = element.form.elements.namedItem(element.name);
|
|
129
|
+
if (list instanceof RadioNodeList)
|
|
130
|
+
return [...list].filter((el) => el instanceof HTMLInputElement);
|
|
131
|
+
if (list instanceof HTMLInputElement)
|
|
132
|
+
return [list];
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
function isTabbableRadio(element) {
|
|
136
|
+
if (element.checked)
|
|
137
|
+
return true;
|
|
138
|
+
const radios = getRadiosInGroup(element);
|
|
139
|
+
return radios.length > 0 && !radios.some((radio) => radio.checked);
|
|
140
|
+
}
|
|
141
|
+
/** Whether `element` is inside one of the `scope` nodes. */
|
|
142
|
+
export function isElementInScope(element, scope) {
|
|
143
|
+
if (!element || !scope)
|
|
144
|
+
return false;
|
|
145
|
+
return scope.some((node) => nodeContains(node, element));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* A TreeWalker over the focusable (or tabbable) elements of `root` — radio groups collapse to their
|
|
149
|
+
* tab stop, `from`'s subtree is skipped, `scope` limits the nodes, `accept` filters.
|
|
150
|
+
*/
|
|
151
|
+
export function getFocusableTreeWalker(root, opts, scope) {
|
|
152
|
+
const filter = opts?.tabbable ? isTabbableElement : isFocusableElement;
|
|
153
|
+
const rootElement = root?.nodeType === Node.ELEMENT_NODE ? root : null;
|
|
154
|
+
const doc = getOwnerDocument(rootElement);
|
|
155
|
+
const walker = doc.createTreeWalker(root || doc, NodeFilter.SHOW_ELEMENT, {
|
|
156
|
+
acceptNode(node) {
|
|
157
|
+
// Skip nodes inside the starting node.
|
|
158
|
+
if (nodeContains(opts?.from, node))
|
|
159
|
+
return NodeFilter.FILTER_REJECT;
|
|
160
|
+
const element = node;
|
|
161
|
+
if (opts?.tabbable && element.tagName === "INPUT" && element.getAttribute("type") === "radio") {
|
|
162
|
+
if (!isTabbableRadio(element))
|
|
163
|
+
return NodeFilter.FILTER_REJECT;
|
|
164
|
+
// Same group as the current node, none checked: skip.
|
|
165
|
+
const current = walker.currentNode;
|
|
166
|
+
if (current.tagName === "INPUT" && current.type === "radio" && current.name === element.name)
|
|
167
|
+
return NodeFilter.FILTER_REJECT;
|
|
168
|
+
}
|
|
169
|
+
if (filter(element) && (!scope || isElementInScope(element, scope)) && (!opts?.accept || opts.accept(element)))
|
|
170
|
+
return NodeFilter.FILTER_ACCEPT;
|
|
171
|
+
return NodeFilter.FILTER_SKIP;
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
if (opts?.from)
|
|
175
|
+
walker.currentNode = opts.from;
|
|
176
|
+
return walker;
|
|
177
|
+
}
|
|
178
|
+
function lastNode(walker) {
|
|
179
|
+
let next;
|
|
180
|
+
let last;
|
|
181
|
+
do {
|
|
182
|
+
last = walker.lastChild();
|
|
183
|
+
if (last)
|
|
184
|
+
next = last;
|
|
185
|
+
} while (last);
|
|
186
|
+
return next;
|
|
187
|
+
}
|
|
188
|
+
function focusElement(element, scroll = false) {
|
|
189
|
+
if (element == null)
|
|
190
|
+
return;
|
|
191
|
+
try {
|
|
192
|
+
if (scroll)
|
|
193
|
+
element.focus();
|
|
194
|
+
else
|
|
195
|
+
focusSafely(element);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// ignore
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const rootOf = (ref) => (typeof ref === "function" ? ref() : ref.current);
|
|
202
|
+
/**
|
|
203
|
+
* A FocusManager moving focus within `ref`'s element (react-aria `createFocusManager`). `ref`: a
|
|
204
|
+
* `ref()` object, an element accessor or `{ current }`. Browser only (call it in handlers).
|
|
205
|
+
*/
|
|
206
|
+
export function createFocusManager(ref, defaultOptions = {}) {
|
|
207
|
+
return {
|
|
208
|
+
focusNext(opts = {}) {
|
|
209
|
+
const root = rootOf(ref);
|
|
210
|
+
if (!root)
|
|
211
|
+
return null;
|
|
212
|
+
const { from, tabbable = defaultOptions.tabbable, wrap = defaultOptions.wrap, accept = defaultOptions.accept } = opts;
|
|
213
|
+
const node = from || getActiveElement(getOwnerDocument(root));
|
|
214
|
+
const walker = getFocusableTreeWalker(root, { tabbable, accept });
|
|
215
|
+
if (nodeContains(root, node))
|
|
216
|
+
walker.currentNode = node;
|
|
217
|
+
let next = walker.nextNode();
|
|
218
|
+
if (!next && wrap) {
|
|
219
|
+
walker.currentNode = root;
|
|
220
|
+
next = walker.nextNode();
|
|
221
|
+
}
|
|
222
|
+
if (next)
|
|
223
|
+
focusElement(next, true);
|
|
224
|
+
return next;
|
|
225
|
+
},
|
|
226
|
+
focusPrevious(opts = defaultOptions) {
|
|
227
|
+
const root = rootOf(ref);
|
|
228
|
+
if (!root)
|
|
229
|
+
return null;
|
|
230
|
+
const { from, tabbable = defaultOptions.tabbable, wrap = defaultOptions.wrap, accept = defaultOptions.accept } = opts;
|
|
231
|
+
const node = from || getActiveElement(getOwnerDocument(root));
|
|
232
|
+
const walker = getFocusableTreeWalker(root, { tabbable, accept });
|
|
233
|
+
if (nodeContains(root, node))
|
|
234
|
+
walker.currentNode = node;
|
|
235
|
+
else {
|
|
236
|
+
const next = lastNode(walker);
|
|
237
|
+
if (next)
|
|
238
|
+
focusElement(next, true);
|
|
239
|
+
return next ?? null;
|
|
240
|
+
}
|
|
241
|
+
let previous = walker.previousNode();
|
|
242
|
+
if (!previous && wrap) {
|
|
243
|
+
walker.currentNode = root;
|
|
244
|
+
const last = lastNode(walker);
|
|
245
|
+
if (!last)
|
|
246
|
+
return null;
|
|
247
|
+
previous = last;
|
|
248
|
+
}
|
|
249
|
+
if (previous)
|
|
250
|
+
focusElement(previous, true);
|
|
251
|
+
return previous ?? null;
|
|
252
|
+
},
|
|
253
|
+
focusFirst(opts = defaultOptions) {
|
|
254
|
+
const root = rootOf(ref);
|
|
255
|
+
if (!root)
|
|
256
|
+
return null;
|
|
257
|
+
const { tabbable = defaultOptions.tabbable, accept = defaultOptions.accept } = opts;
|
|
258
|
+
const next = getFocusableTreeWalker(root, { tabbable, accept }).nextNode();
|
|
259
|
+
if (next)
|
|
260
|
+
focusElement(next, true);
|
|
261
|
+
return next;
|
|
262
|
+
},
|
|
263
|
+
focusLast(opts = defaultOptions) {
|
|
264
|
+
const root = rootOf(ref);
|
|
265
|
+
if (!root)
|
|
266
|
+
return null;
|
|
267
|
+
const { tabbable = defaultOptions.tabbable, accept = defaultOptions.accept } = opts;
|
|
268
|
+
const next = lastNode(getFocusableTreeWalker(root, { tabbable, accept }));
|
|
269
|
+
if (next)
|
|
270
|
+
focusElement(next, true);
|
|
271
|
+
return next ?? null;
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type FormValidationState, type ValidationResult } from "../state/form-validation.js";
|
|
2
|
+
export type ValidatableElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;
|
|
3
|
+
/**
|
|
4
|
+
* `data-rv-error` attribute value (render it on the native input in `native` mode): the realtime
|
|
5
|
+
* error text, so `<Form>` can apply it as custom validity before a cold submit. Reads the state.
|
|
6
|
+
*/
|
|
7
|
+
export declare function validityError(state: FormValidationState): string | undefined;
|
|
8
|
+
/** Snapshot of the element's native validity. */
|
|
9
|
+
export declare function nativeValidity(input: ValidatableElement): ValidationResult;
|
|
10
|
+
/**
|
|
11
|
+
* The layout effect of `useFormValidation`: native mode sets the realtime error as custom validity
|
|
12
|
+
* (prevents submit) and, when valid, records the native validity for the next commit.
|
|
13
|
+
*/
|
|
14
|
+
export declare function syncValidity(state: FormValidationState, input: ValidatableElement | null | undefined): void;
|
|
15
|
+
/** `invalid` event on the native input (fires on submit / checkValidity; captured, it does not bubble). */
|
|
16
|
+
export declare function validationInvalid(state: FormValidationState, event: Event, focus?: () => void): void;
|
|
17
|
+
/** `change` on the native input: commit (RA `onChange` listener). */
|
|
18
|
+
export declare function validationChange(state: FormValidationState, input: ValidatableElement | null): void;
|
|
19
|
+
/** RA order: server errors cleared → (render) layout effect syncs the custom validity → effect commits. */
|
|
20
|
+
export declare function commit(state: FormValidationState, input: ValidatableElement | null | undefined): void;
|
|
21
|
+
/** Run `fn` when the input's form resets (once per state). */
|
|
22
|
+
export declare function onFormReset(owner: object, input: ValidatableElement | HTMLElement | null | undefined, fn: () => void): void;
|
|
23
|
+
/**
|
|
24
|
+
* `<Form>` submit (and any form's submit): apply `data-rv-error` of every field as custom validity
|
|
25
|
+
* (fields never interacted with have not synced it yet); when that makes the form invalid, cancel and
|
|
26
|
+
* report (fires `invalid` → fields commit and the first one focuses).
|
|
27
|
+
*/
|
|
28
|
+
export declare function applyPendingValidity(form: HTMLFormElement): boolean;
|
|
29
|
+
export declare function formSubmit(event: SubmitEvent): void;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Ported from react-aria `useFormValidation` + `useFormReset` (packages/react-aria/src/form/useFormValidation.ts,
|
|
2
|
+
// src/utils/useFormReset.ts), Apache-2.0, © Adobe.
|
|
3
|
+
// Rivet: no layout effect runs before interaction, so the native custom validity is synced from the
|
|
4
|
+
// field's handlers (`syncValidity` at input / change / focus / invalid) and, for fields never touched,
|
|
5
|
+
// by `<Form>`'s submit handler from the `data-rv-error` attribute the field renders (`formSubmit`).
|
|
6
|
+
// Deviation: no `form.reset` override (`isIgnoredReset`: detects React's automatic form reset after
|
|
7
|
+
// server actions; Rivet never resets forms programmatically), so every reset clears the validation.
|
|
8
|
+
import { untrack } from "@rivetjs/reactivity";
|
|
9
|
+
import { setInteractionModality } from "../interactions/focus-visible.jsx";
|
|
10
|
+
import { clearServerErrors, commitValidation, displayValidation, realtimeValidation, resetValidation, updateValidation, } from "../state/form-validation.js";
|
|
11
|
+
const ERROR_ATTR = "data-rv-error";
|
|
12
|
+
/**
|
|
13
|
+
* `data-rv-error` attribute value (render it on the native input in `native` mode): the realtime
|
|
14
|
+
* error text, so `<Form>` can apply it as custom validity before a cold submit. Reads the state.
|
|
15
|
+
*/
|
|
16
|
+
export function validityError(state) {
|
|
17
|
+
if (state.behavior !== "native")
|
|
18
|
+
return undefined;
|
|
19
|
+
const realtime = realtimeValidation(state);
|
|
20
|
+
return realtime.isInvalid ? realtime.validationErrors.join(" ") || "Invalid value." : undefined;
|
|
21
|
+
}
|
|
22
|
+
/** Snapshot of the element's native validity. */
|
|
23
|
+
export function nativeValidity(input) {
|
|
24
|
+
const v = input.validity;
|
|
25
|
+
return {
|
|
26
|
+
isInvalid: !v.valid,
|
|
27
|
+
validationDetails: {
|
|
28
|
+
badInput: v.badInput,
|
|
29
|
+
customError: v.customError,
|
|
30
|
+
patternMismatch: v.patternMismatch,
|
|
31
|
+
rangeOverflow: v.rangeOverflow,
|
|
32
|
+
rangeUnderflow: v.rangeUnderflow,
|
|
33
|
+
stepMismatch: v.stepMismatch,
|
|
34
|
+
tooLong: v.tooLong,
|
|
35
|
+
tooShort: v.tooShort,
|
|
36
|
+
typeMismatch: v.typeMismatch,
|
|
37
|
+
valueMissing: v.valueMissing,
|
|
38
|
+
valid: v.valid,
|
|
39
|
+
},
|
|
40
|
+
validationErrors: input.validationMessage ? [input.validationMessage] : [],
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The layout effect of `useFormValidation`: native mode sets the realtime error as custom validity
|
|
45
|
+
* (prevents submit) and, when valid, records the native validity for the next commit.
|
|
46
|
+
*/
|
|
47
|
+
export function syncValidity(state, input) {
|
|
48
|
+
if (state.behavior !== "native" || !input || !("setCustomValidity" in input) || input.disabled)
|
|
49
|
+
return;
|
|
50
|
+
const realtime = untrack(() => realtimeValidation(state));
|
|
51
|
+
input.setCustomValidity(realtime.isInvalid ? realtime.validationErrors.join(" ") || "Invalid value." : "");
|
|
52
|
+
// Prevent the default tooltip for the validation message (Firefox).
|
|
53
|
+
if (!input.hasAttribute("title"))
|
|
54
|
+
input.title = "";
|
|
55
|
+
if (!realtime.isInvalid)
|
|
56
|
+
updateValidation(state, nativeValidity(input));
|
|
57
|
+
attachReset(state, input);
|
|
58
|
+
}
|
|
59
|
+
function firstInvalid(form) {
|
|
60
|
+
for (let i = 0; i < form.elements.length; i++) {
|
|
61
|
+
const element = form.elements[i];
|
|
62
|
+
if (element.validity?.valid === false)
|
|
63
|
+
return element;
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
/** `invalid` event on the native input (fires on submit / checkValidity; captured, it does not bubble). */
|
|
68
|
+
export function validationInvalid(state, event, focus) {
|
|
69
|
+
const input = event.target;
|
|
70
|
+
// Only commit when not already displaying an error: keeps server errors the user did not fix.
|
|
71
|
+
if (!untrack(() => displayValidation(state)).isInvalid)
|
|
72
|
+
commit(state, input);
|
|
73
|
+
// Focus the first invalid input of the form unless the event was already handled.
|
|
74
|
+
const form = input.form;
|
|
75
|
+
if (!event.defaultPrevented && form && firstInvalid(form) === input) {
|
|
76
|
+
if (focus)
|
|
77
|
+
focus();
|
|
78
|
+
else
|
|
79
|
+
input.focus();
|
|
80
|
+
// Always show focus ring.
|
|
81
|
+
setInteractionModality("keyboard");
|
|
82
|
+
}
|
|
83
|
+
// Prevent the browser's error bubble.
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
}
|
|
86
|
+
/** `change` on the native input: commit (RA `onChange` listener). */
|
|
87
|
+
export function validationChange(state, input) {
|
|
88
|
+
commit(state, input);
|
|
89
|
+
}
|
|
90
|
+
/** RA order: server errors cleared → (render) layout effect syncs the custom validity → effect commits. */
|
|
91
|
+
export function commit(state, input) {
|
|
92
|
+
clearServerErrors(state);
|
|
93
|
+
syncValidity(state, input);
|
|
94
|
+
commitValidation(state);
|
|
95
|
+
}
|
|
96
|
+
// Form reset (RA `useFormReset` + reset listener): attached on the first handler that sees the input.
|
|
97
|
+
const resetFns = new WeakMap();
|
|
98
|
+
const attached = new WeakSet();
|
|
99
|
+
/** Run `fn` when the input's form resets (once per state). */
|
|
100
|
+
export function onFormReset(owner, input, fn) {
|
|
101
|
+
const form = input?.form;
|
|
102
|
+
if (!form || attached.has(owner))
|
|
103
|
+
return;
|
|
104
|
+
attached.add(owner);
|
|
105
|
+
let fns = resetFns.get(form);
|
|
106
|
+
if (!fns) {
|
|
107
|
+
resetFns.set(form, (fns = new Set()));
|
|
108
|
+
// RA useFormReset: a reset cancelled (in the capture phase) resets nothing.
|
|
109
|
+
form.addEventListener("reset", (event) => {
|
|
110
|
+
if (event.defaultPrevented)
|
|
111
|
+
return;
|
|
112
|
+
for (const f of fns)
|
|
113
|
+
f();
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
fns.add(fn);
|
|
117
|
+
}
|
|
118
|
+
function attachReset(state, input) {
|
|
119
|
+
onFormReset(state, input, () => resetValidation(state));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* `<Form>` submit (and any form's submit): apply `data-rv-error` of every field as custom validity
|
|
123
|
+
* (fields never interacted with have not synced it yet); when that makes the form invalid, cancel and
|
|
124
|
+
* report (fires `invalid` → fields commit and the first one focuses).
|
|
125
|
+
*/
|
|
126
|
+
export function applyPendingValidity(form) {
|
|
127
|
+
let changed = false;
|
|
128
|
+
for (const element of form.querySelectorAll(`[${ERROR_ATTR}]`)) {
|
|
129
|
+
const message = element.getAttribute(ERROR_ATTR) ?? "";
|
|
130
|
+
if (element.validationMessage !== message && !element.disabled) {
|
|
131
|
+
element.setCustomValidity(message);
|
|
132
|
+
changed = true;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return changed;
|
|
136
|
+
}
|
|
137
|
+
export function formSubmit(event) {
|
|
138
|
+
const form = event.currentTarget;
|
|
139
|
+
if (form.noValidate)
|
|
140
|
+
return;
|
|
141
|
+
if (applyPendingValidity(form) && !form.checkValidity()) {
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
event.stopImmediatePropagation();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type MaybeAccessor, type ValidationResult } from "../state/form-validation.js";
|
|
2
|
+
import { type GlobalDOMAttributes } from "../utils/dom-props.js";
|
|
3
|
+
import { type RefValue, type ClassNameOrFunction, type RenderProps } from "../slots/index.jsx";
|
|
4
|
+
import { type DOMRenderProps } from "../utils/render.js";
|
|
5
|
+
/** RAC `FieldErrorContext`: the validation of the enclosing field (`null` outside a field). */
|
|
6
|
+
export declare const FieldErrorContext: import("@rivetjs/reactivity").Context<MaybeAccessor<ValidationResult | null>>;
|
|
7
|
+
/** RAC `FieldErrorRenderProps` (= `ValidationResult`), as accessors. */
|
|
8
|
+
export interface FieldErrorRenderProps {
|
|
9
|
+
/** Whether the input value is invalid. */
|
|
10
|
+
isInvalid: () => boolean;
|
|
11
|
+
/** The current error messages for the input if it is invalid, otherwise an empty array. */
|
|
12
|
+
validationErrors: () => string[];
|
|
13
|
+
/** The native validation details for the input. */
|
|
14
|
+
validationDetails: () => ValidationState;
|
|
15
|
+
}
|
|
16
|
+
type ValidationState = ValidationResult["validationDetails"];
|
|
17
|
+
export interface FieldErrorProps extends RenderProps<FieldErrorRenderProps>, DOMRenderProps<"span", undefined>, Omit<GlobalDOMAttributes<HTMLElement>, "style"> {
|
|
18
|
+
/** The element's unique identifier. */
|
|
19
|
+
id?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The CSS class for the element. A function may be provided to compute the class based on component state.
|
|
22
|
+
*
|
|
23
|
+
* @default 'rv-FieldError'
|
|
24
|
+
*/
|
|
25
|
+
class?: ClassNameOrFunction<FieldErrorRenderProps>;
|
|
26
|
+
/**
|
|
27
|
+
* The HTML element type to render. Set to `'div'` when using block-level children (e.g. `<ul>`).
|
|
28
|
+
*
|
|
29
|
+
* @default 'span'
|
|
30
|
+
*/
|
|
31
|
+
elementType?: string;
|
|
32
|
+
ref?: RefValue<HTMLElement>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A FieldError displays validation errors for a form field.
|
|
36
|
+
*/
|
|
37
|
+
export declare function FieldError(props: FieldErrorProps): import("@rivetjs/runtime/jsx-runtime").CompiledElement | null;
|
|
38
|
+
export {};
|