@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,331 @@
|
|
|
1
|
+
// iOS Safari part of `preventScroll()` (loaded lazily, only there or for `overrideFocus`). Even with
|
|
2
|
+
// `overflow: hidden` Mobile Safari scrolls the page: with collapsed toolbars, when the keyboard
|
|
3
|
+
// covers the viewport, when focusing an input (centers it), and with the keyboard's next / previous
|
|
4
|
+
// buttons. So: prevent `touchmove` outside scrollable elements, `overscroll-behavior: contain` on
|
|
5
|
+
// nested scrollers (a `<style>`, applied before touchstart as of iOS 26), and focus programmatically
|
|
6
|
+
// without page scroll, scrolling only the scroll parents once the virtual keyboard settled.
|
|
7
|
+
// Keyboard tracking starts on first use (React Aria starts it at import).
|
|
8
|
+
//
|
|
9
|
+
// Ported from @react-aria/overlays (usePreventScroll.ts) and @react-aria/utils (keyboard.tsx,
|
|
10
|
+
// runAfterKeyboard.ts, getNonce.ts), Apache-2.0, © Adobe.
|
|
11
|
+
import { isFocusable } from "../a11y/index.js";
|
|
12
|
+
import { isAndroid, isWebKit } from "../platform/index.js";
|
|
13
|
+
import { getScrollParent, isScrollable, setStyle } from "./prevent-scroll.js";
|
|
14
|
+
const eventTarget = (event) => event.composedPath?.()[0] ?? event.target;
|
|
15
|
+
/** The CSP nonce for injected `<style>`: `<meta property="csp-nonce">`, else the nonce of a page script. */
|
|
16
|
+
export function getNonce(doc = document) {
|
|
17
|
+
const meta = doc.querySelector('meta[property="csp-nonce"], meta[name="csp-nonce"]')?.content;
|
|
18
|
+
return meta || (doc.querySelector("script[nonce]")?.nonce ?? undefined) || undefined;
|
|
19
|
+
}
|
|
20
|
+
/** iOS Safari scroll lock; returns the restore function. */
|
|
21
|
+
export function preventScrollMobileWebKit() {
|
|
22
|
+
ensureKeyboardTracking();
|
|
23
|
+
let scrollable;
|
|
24
|
+
let allowTouchMove = false;
|
|
25
|
+
const onTouchStart = (e) => {
|
|
26
|
+
// Nearest scrollable element from the touched one.
|
|
27
|
+
const target = eventTarget(e);
|
|
28
|
+
scrollable = isScrollable(target, true) ? target : getScrollParent(target, true);
|
|
29
|
+
allowTouchMove = false;
|
|
30
|
+
// Selected text: let the visitor adjust the selection.
|
|
31
|
+
const selection = target.ownerDocument.defaultView.getSelection();
|
|
32
|
+
if (selection && !selection.isCollapsed && selection.containsNode(target, true))
|
|
33
|
+
allowTouchMove = true;
|
|
34
|
+
// Range inputs: let the visitor drag the slider.
|
|
35
|
+
if (e.composedPath().some((el) => el instanceof HTMLInputElement && el.type === "range"))
|
|
36
|
+
allowTouchMove = true;
|
|
37
|
+
// A focused input with a selected range: let the visitor drag the handles.
|
|
38
|
+
const field = target;
|
|
39
|
+
if ("selectionStart" in target &&
|
|
40
|
+
"selectionEnd" in target &&
|
|
41
|
+
field.selectionStart < field.selectionEnd &&
|
|
42
|
+
target.ownerDocument.activeElement === target)
|
|
43
|
+
allowTouchMove = true;
|
|
44
|
+
};
|
|
45
|
+
// Stop nested scrollers from chaining to the window at their ends (applied before touchstart).
|
|
46
|
+
const style = document.createElement("style");
|
|
47
|
+
const nonce = getNonce();
|
|
48
|
+
if (nonce)
|
|
49
|
+
style.nonce = nonce;
|
|
50
|
+
style.textContent = "@layer {\n * {\n overscroll-behavior: contain;\n }\n}";
|
|
51
|
+
document.head.prepend(style);
|
|
52
|
+
const onTouchMove = (e) => {
|
|
53
|
+
// Pinch zoom, selections, sliders.
|
|
54
|
+
if (e.touches.length === 2 || allowTouchMove)
|
|
55
|
+
return;
|
|
56
|
+
// Scrolling the window.
|
|
57
|
+
if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// overscroll-behavior does not stop chaining when the element does not overflow
|
|
62
|
+
// (https://bugs.webkit.org/show_bug.cgi?id=243452): neither axis overflowing → prevent.
|
|
63
|
+
if (scrollable.scrollHeight === scrollable.clientHeight && scrollable.scrollWidth === scrollable.clientWidth)
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
};
|
|
66
|
+
const onBlur = (e) => {
|
|
67
|
+
const target = eventTarget(e);
|
|
68
|
+
const relatedTarget = e.relatedTarget;
|
|
69
|
+
if (relatedTarget && willOpenKeyboard(relatedTarget)) {
|
|
70
|
+
// Re-focus programmatically so the focus override performs the scroll.
|
|
71
|
+
relatedTarget.focus();
|
|
72
|
+
}
|
|
73
|
+
else if (!relatedTarget) {
|
|
74
|
+
// Keyboard "Done" moves focus to the body; refocusing the same input later fires no blur and
|
|
75
|
+
// Safari would scroll natively: move focus to the nearest focusable parent instead.
|
|
76
|
+
const focusable = target.parentElement?.closest("[tabindex]");
|
|
77
|
+
focusable?.focus({ preventScroll: true });
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const restoreFocus = overrideFocus();
|
|
81
|
+
document.addEventListener("touchstart", onTouchStart, { passive: false, capture: true });
|
|
82
|
+
document.addEventListener("touchmove", onTouchMove, { passive: false, capture: true });
|
|
83
|
+
document.addEventListener("blur", onBlur, true);
|
|
84
|
+
return () => {
|
|
85
|
+
document.removeEventListener("touchstart", onTouchStart, true);
|
|
86
|
+
document.removeEventListener("touchmove", onTouchMove, true);
|
|
87
|
+
document.removeEventListener("blur", onBlur, true);
|
|
88
|
+
style.remove();
|
|
89
|
+
restoreFocus();
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** Patch `HTMLElement.prototype.focus`: focus without scrolling the page, then scroll only its scroll parents. */
|
|
93
|
+
export function overrideFocus() {
|
|
94
|
+
ensureKeyboardTracking();
|
|
95
|
+
const focus = HTMLElement.prototype.focus;
|
|
96
|
+
Reflect.defineProperty(HTMLElement.prototype, "focus", {
|
|
97
|
+
configurable: true,
|
|
98
|
+
writable: true,
|
|
99
|
+
value: function (opts) {
|
|
100
|
+
focus.call(this, { ...opts, preventScroll: true });
|
|
101
|
+
if (!opts || !opts.preventScroll) {
|
|
102
|
+
const scroll = () => {
|
|
103
|
+
if (document.activeElement === this)
|
|
104
|
+
scrollIntoView(this);
|
|
105
|
+
};
|
|
106
|
+
runAfterKeyboard((isOpen) => (isOpen ? scroll() : runAfterKeyboardTransition(() => scroll())));
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
return () => {
|
|
111
|
+
Reflect.defineProperty(HTMLElement.prototype, "focus", { configurable: true, writable: true, value: focus });
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function scrollIntoView(target) {
|
|
115
|
+
const root = document.scrollingElement || document.documentElement;
|
|
116
|
+
const visualViewport = window.visualViewport;
|
|
117
|
+
let nextTarget = target;
|
|
118
|
+
while (nextTarget && nextTarget !== root && nextTarget.isConnected) {
|
|
119
|
+
// Adjust the scroll parent if the target is not in view.
|
|
120
|
+
const scrollable = getScrollParent(nextTarget);
|
|
121
|
+
if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== nextTarget) {
|
|
122
|
+
const scrollableRect = scrollable.getBoundingClientRect();
|
|
123
|
+
const targetRect = nextTarget.getBoundingClientRect();
|
|
124
|
+
if (targetRect.top < scrollableRect.top || targetRect.bottom > scrollableRect.top + nextTarget.clientHeight) {
|
|
125
|
+
let bottom = scrollableRect.bottom;
|
|
126
|
+
if (visualViewport)
|
|
127
|
+
bottom = Math.min(bottom, visualViewport.offsetTop + visualViewport.height);
|
|
128
|
+
// Center within the viewport, clamped to the scroll range.
|
|
129
|
+
const adjustment = targetRect.top - scrollableRect.top - ((bottom - scrollableRect.top) / 2 - targetRect.height / 2);
|
|
130
|
+
scrollable.scrollTo({
|
|
131
|
+
top: Math.max(0, Math.min(scrollable.scrollHeight - scrollable.clientHeight, scrollable.scrollTop + adjustment)),
|
|
132
|
+
behavior: "smooth",
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
nextTarget = scrollable.parentElement;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// ---------------------------------------------------------------------------------------------
|
|
140
|
+
// Virtual keyboard tracking (keyboard.tsx, runAfterKeyboard.ts).
|
|
141
|
+
const KEYBOARD_HEIGHT = 100;
|
|
142
|
+
const KEYBOARD_TIMEOUT = 600;
|
|
143
|
+
const state = {
|
|
144
|
+
isOpen: false,
|
|
145
|
+
screenWidth: 0,
|
|
146
|
+
screenHeight: 0,
|
|
147
|
+
screenAngle: 0,
|
|
148
|
+
screenTimeout: 0,
|
|
149
|
+
startTimeStamp: 0,
|
|
150
|
+
endTimeStamp: 0,
|
|
151
|
+
resizeTimeStamp: 0,
|
|
152
|
+
resizeTimeout: 0,
|
|
153
|
+
};
|
|
154
|
+
// Input types that open no software keyboard.
|
|
155
|
+
const nonTextInputTypes = new Set(["checkbox", "radio", "range", "color", "file", "image", "button", "submit", "reset"]);
|
|
156
|
+
let tracking = false;
|
|
157
|
+
const metaValue = (name) => document.querySelector(`meta[name="${name}"]`)?.content;
|
|
158
|
+
function getTouchScreen() {
|
|
159
|
+
// Undo scaling: layout coordinate space.
|
|
160
|
+
const screenWidth = Number(window.visualViewport?.width ?? window.innerWidth);
|
|
161
|
+
const screenHeight = Number(window.visualViewport?.height ?? window.innerHeight);
|
|
162
|
+
const visualScale = Number(window.visualViewport?.scale ?? 1);
|
|
163
|
+
return { width: screenWidth * visualScale, height: screenHeight * visualScale, angle: window.screen.orientation?.angle ?? 0 };
|
|
164
|
+
}
|
|
165
|
+
function onResizeStart(e) {
|
|
166
|
+
// Reschedule only when the timer gets close.
|
|
167
|
+
if (state.resizeTimeStamp <= e.timeStamp + 50) {
|
|
168
|
+
state.resizeTimeStamp = e.timeStamp + 150;
|
|
169
|
+
window.clearTimeout(state.resizeTimeout);
|
|
170
|
+
state.resizeTimeout = window.setTimeout(onResizeEnd, 150);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function onResizeEnd() {
|
|
174
|
+
// Overlaying keyboards do not change geometry.
|
|
175
|
+
if (isAndroid() && metaValue("viewport")?.includes("overlays-content"))
|
|
176
|
+
return;
|
|
177
|
+
const time = performance.now();
|
|
178
|
+
const screen = getTouchScreen();
|
|
179
|
+
const elapsed = time - state.startTimeStamp;
|
|
180
|
+
let delta = state.screenHeight - screen.height;
|
|
181
|
+
const rotation = state.screenAngle - screen.angle;
|
|
182
|
+
// An open keyboard that rotated along closes: the old width predicts the closing height.
|
|
183
|
+
if (Math.abs(rotation) % 180 && state.screenWidth - screen.height < KEYBOARD_HEIGHT) {
|
|
184
|
+
state.screenWidth = screen.width;
|
|
185
|
+
state.screenHeight = screen.height;
|
|
186
|
+
state.screenAngle = screen.angle;
|
|
187
|
+
delta = 0;
|
|
188
|
+
}
|
|
189
|
+
// A resize outside the capture window updates the screen (debounced: WebKit may resize before focus).
|
|
190
|
+
if (elapsed > KEYBOARD_TIMEOUT) {
|
|
191
|
+
window.clearTimeout(state.screenTimeout);
|
|
192
|
+
state.screenTimeout = window.setTimeout(() => {
|
|
193
|
+
const activeElement = document.hasFocus() ? document.activeElement : null;
|
|
194
|
+
const willKeyboardOpen = willOpenKeyboard(activeElement);
|
|
195
|
+
const next = getTouchScreen();
|
|
196
|
+
if (Math.abs(state.screenAngle - next.angle) % 180)
|
|
197
|
+
return;
|
|
198
|
+
if (state.isOpen && willKeyboardOpen)
|
|
199
|
+
return;
|
|
200
|
+
state.screenWidth = next.width;
|
|
201
|
+
state.screenHeight = next.height;
|
|
202
|
+
state.screenAngle = next.angle;
|
|
203
|
+
state.isOpen = false;
|
|
204
|
+
}, KEYBOARD_TIMEOUT);
|
|
205
|
+
}
|
|
206
|
+
// Otherwise an opening, when the height changed past the threshold.
|
|
207
|
+
if (elapsed <= KEYBOARD_TIMEOUT && delta >= KEYBOARD_HEIGHT)
|
|
208
|
+
state.endTimeStamp = time;
|
|
209
|
+
state.isOpen = delta >= KEYBOARD_HEIGHT;
|
|
210
|
+
}
|
|
211
|
+
function onOrientationChange() {
|
|
212
|
+
const screen = getTouchScreen();
|
|
213
|
+
const rotation = state.screenAngle - screen.angle;
|
|
214
|
+
// A screen estimate must exist before focus lands after a rotation.
|
|
215
|
+
if (Math.abs(rotation) % 180 && !state.isOpen) {
|
|
216
|
+
const width = state.screenWidth;
|
|
217
|
+
state.screenWidth = state.screenHeight;
|
|
218
|
+
state.screenHeight = width;
|
|
219
|
+
}
|
|
220
|
+
if (!state.isOpen)
|
|
221
|
+
state.screenAngle = screen.angle;
|
|
222
|
+
}
|
|
223
|
+
function onFocus(e) {
|
|
224
|
+
const willKeyboardOpen = willOpenKeyboard(eventTarget(e));
|
|
225
|
+
const time = performance.now();
|
|
226
|
+
const screen = getTouchScreen();
|
|
227
|
+
const delta = state.screenHeight - screen.height;
|
|
228
|
+
if (delta < KEYBOARD_HEIGHT && willKeyboardOpen) {
|
|
229
|
+
state.screenWidth = screen.width;
|
|
230
|
+
state.screenHeight = screen.height;
|
|
231
|
+
state.screenAngle = screen.angle;
|
|
232
|
+
state.startTimeStamp = time;
|
|
233
|
+
}
|
|
234
|
+
if (willKeyboardOpen)
|
|
235
|
+
window.clearTimeout(state.screenTimeout);
|
|
236
|
+
if (delta >= KEYBOARD_HEIGHT && willKeyboardOpen)
|
|
237
|
+
state.endTimeStamp = time;
|
|
238
|
+
}
|
|
239
|
+
function ensureKeyboardTracking() {
|
|
240
|
+
if (tracking || typeof window === "undefined")
|
|
241
|
+
return;
|
|
242
|
+
tracking = true;
|
|
243
|
+
const screen = getTouchScreen();
|
|
244
|
+
// WebKit fires a single event per resize.
|
|
245
|
+
window.visualViewport?.addEventListener("resize", isWebKit() ? onResizeEnd : onResizeStart);
|
|
246
|
+
window.screen.orientation?.addEventListener("change", onOrientationChange);
|
|
247
|
+
window.addEventListener("focus", onFocus, { capture: true, passive: true });
|
|
248
|
+
state.screenWidth = screen.width;
|
|
249
|
+
state.screenHeight = screen.height;
|
|
250
|
+
state.screenAngle = screen.angle;
|
|
251
|
+
}
|
|
252
|
+
/** Whether the device has a software keyboard (best effort). */
|
|
253
|
+
export function supportsKeyboard() {
|
|
254
|
+
if (isAndroid() && metaValue("viewport")?.includes("overlays-content"))
|
|
255
|
+
return false;
|
|
256
|
+
if (state.isOpen)
|
|
257
|
+
return true;
|
|
258
|
+
if (!state.startTimeStamp)
|
|
259
|
+
return window.navigator.maxTouchPoints > 0;
|
|
260
|
+
if (state.endTimeStamp >= state.startTimeStamp)
|
|
261
|
+
return true;
|
|
262
|
+
return performance.now() - state.startTimeStamp <= KEYBOARD_TIMEOUT ? state.endTimeStamp > 0 || window.navigator.maxTouchPoints > 0 : false;
|
|
263
|
+
}
|
|
264
|
+
/** Whether focusing `target` opens the software keyboard. */
|
|
265
|
+
export function willOpenKeyboard(target) {
|
|
266
|
+
if (!(target instanceof Element) || !isFocusable(target))
|
|
267
|
+
return false;
|
|
268
|
+
const isTextArea = target instanceof HTMLTextAreaElement;
|
|
269
|
+
const isEditable = target instanceof HTMLElement && target.isContentEditable;
|
|
270
|
+
const isTextInput = target instanceof HTMLInputElement && !nonTextInputTypes.has(target.type);
|
|
271
|
+
return isTextArea || isEditable || isTextInput;
|
|
272
|
+
}
|
|
273
|
+
export const isKeyboardOpen = () => state.isOpen;
|
|
274
|
+
const WEBKIT_OPEN_DELAY = 200;
|
|
275
|
+
const TRANSITION_FRAMETIME = 50;
|
|
276
|
+
const TRANSITION_TIMEOUT = 600;
|
|
277
|
+
let interval;
|
|
278
|
+
const transitionCallbacks = new Set();
|
|
279
|
+
const resizeCallbacks = new Set();
|
|
280
|
+
function onTransitionFrame(wasOpenKeyboard, signal) {
|
|
281
|
+
const isOpenKeyboard = isKeyboardOpen();
|
|
282
|
+
// Resize callbacks: once layout changed, or out of time.
|
|
283
|
+
if (wasOpenKeyboard !== isOpenKeyboard || signal.aborted)
|
|
284
|
+
for (const callback of resizeCallbacks) {
|
|
285
|
+
callback(isOpenKeyboard);
|
|
286
|
+
resizeCallbacks.delete(callback);
|
|
287
|
+
}
|
|
288
|
+
// WebKit fires one resize at the start of the ~200 ms opening: restart and flush when it ends.
|
|
289
|
+
if (!wasOpenKeyboard && isOpenKeyboard && isWebKit() && !signal.aborted) {
|
|
290
|
+
window.clearInterval(interval);
|
|
291
|
+
interval = setupInterval(WEBKIT_OPEN_DELAY);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (wasOpenKeyboard !== isOpenKeyboard || signal.aborted)
|
|
295
|
+
for (const callback of transitionCallbacks) {
|
|
296
|
+
callback(isOpenKeyboard);
|
|
297
|
+
transitionCallbacks.delete(callback);
|
|
298
|
+
}
|
|
299
|
+
if (resizeCallbacks.size + transitionCallbacks.size <= 0 || signal.aborted) {
|
|
300
|
+
window.clearInterval(interval);
|
|
301
|
+
interval = undefined;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const setupInterval = (timeout = TRANSITION_TIMEOUT) => window.setInterval(onTransitionFrame, TRANSITION_FRAMETIME, isKeyboardOpen(), AbortSignal.timeout(timeout));
|
|
305
|
+
function queue(fn, into, fireOnClose) {
|
|
306
|
+
// No keyboard: synchronously.
|
|
307
|
+
if (!supportsKeyboard())
|
|
308
|
+
return (fn(false), () => { });
|
|
309
|
+
// Two frames: does focus land on an input?
|
|
310
|
+
let frame = window.requestAnimationFrame(() => {
|
|
311
|
+
frame = window.requestAnimationFrame(() => {
|
|
312
|
+
const activeElement = document.hasFocus() ? document.activeElement : null;
|
|
313
|
+
const willKeyboardOpen = willOpenKeyboard(activeElement);
|
|
314
|
+
if (isKeyboardOpen() === willKeyboardOpen)
|
|
315
|
+
return fn(willKeyboardOpen);
|
|
316
|
+
// On close, at once: callers may assert the initial containing block.
|
|
317
|
+
if (fireOnClose && isKeyboardOpen() && !willKeyboardOpen)
|
|
318
|
+
return fn(willKeyboardOpen);
|
|
319
|
+
into.add(fn);
|
|
320
|
+
interval ??= setupInterval();
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
return () => {
|
|
324
|
+
window.cancelAnimationFrame(frame);
|
|
325
|
+
into.delete(fn);
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/** Run `fn` once a keyboard transition can no longer affect layout (at most ~600 ms later). */
|
|
329
|
+
export const runAfterKeyboard = (fn) => queue(fn, resizeCallbacks, true);
|
|
330
|
+
/** Run `fn` once the software keyboard finished its transition (at most ~600 ms later). */
|
|
331
|
+
export const runAfterKeyboardTransition = (fn) => queue(fn, transitionCallbacks, false);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface PreventScrollOptions {
|
|
2
|
+
/** No lock (returns a no-op). */
|
|
3
|
+
isDisabled?: boolean;
|
|
4
|
+
/** Patch `HTMLElement.prototype.focus` so programmatic focus does not scroll the page (React Aria `UNSTABLE_overrideFocus`). */
|
|
5
|
+
overrideFocus?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Lock document scrolling; returns the release function (idempotent). */
|
|
8
|
+
export declare function preventScroll(options?: PreventScrollOptions): () => void;
|
|
9
|
+
/** Whether a scroll lock is active (React Aria checks `overflow: hidden` on the root for this). */
|
|
10
|
+
export declare const isScrollPrevented: () => boolean;
|
|
11
|
+
/** Set an inline style property; returns the function restoring the previous value. */
|
|
12
|
+
export declare function setStyle(element: HTMLElement, property: string, value: string): () => void;
|
|
13
|
+
/** Whether `node` scrolls (overflow auto / scroll; the root unless hidden); with `checkForOverflow`, only if its content overflows. */
|
|
14
|
+
export declare function isScrollable(node: Element | null, checkForOverflow?: boolean): boolean;
|
|
15
|
+
/** Nearest scrollable ancestor of `node` (not `node` itself), else the scrolling element. */
|
|
16
|
+
export declare function getScrollParent(node: Element, checkForOverflow?: boolean): Element;
|
|
17
|
+
/** Scrollable ancestors of `node`, nearest first (React Aria `getScrollParents`). */
|
|
18
|
+
export declare function getScrollParents(node: Element, checkForOverflow?: boolean): Element[];
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// Scroll locking (React Aria `usePreventScroll`): `preventScroll()` stops the document from
|
|
2
|
+
// scrolling while an overlay is open and returns the restore function. Reference counted: the page
|
|
3
|
+
// style is restored when the last lock is released. Standard browsers: `overflow: hidden` on the
|
|
4
|
+
// root plus `scrollbar-gutter: stable` (or padding) so content does not shift. iOS Safari, which
|
|
5
|
+
// scrolls anyway: the touch / focus handling of React Aria, loaded lazily from
|
|
6
|
+
// `./prevent-scroll-ios.ts` (nothing for other platforms). Modal overlays lock scrolling with it
|
|
7
|
+
// while open.
|
|
8
|
+
//
|
|
9
|
+
// Ported from @react-aria/overlays (usePreventScroll.ts) and @react-aria/utils (isScrollable.ts,
|
|
10
|
+
// getScrollParent.ts), Apache-2.0, © Adobe.
|
|
11
|
+
import { isIOS, isWebKit } from "../platform/index.js";
|
|
12
|
+
// Active locks; restore of the page style when the count returns to 0.
|
|
13
|
+
let preventScrollCount = 0;
|
|
14
|
+
let restore;
|
|
15
|
+
/** Lock document scrolling; returns the release function (idempotent). */
|
|
16
|
+
export function preventScroll(options = {}) {
|
|
17
|
+
const { isDisabled, overrideFocus } = options;
|
|
18
|
+
if (isDisabled || typeof document === "undefined")
|
|
19
|
+
return () => { };
|
|
20
|
+
preventScrollCount++;
|
|
21
|
+
if (preventScrollCount === 1) {
|
|
22
|
+
if (isIOS() && isWebKit()) {
|
|
23
|
+
// Mobile Safari: overflow first (so scrollIntoView logic sees the lock), the rest when loaded.
|
|
24
|
+
const restoreOverflow = setStyle(document.documentElement, "overflow", "hidden");
|
|
25
|
+
let restoreRest, released = false;
|
|
26
|
+
void import("./prevent-scroll-ios.js").then((ios) => {
|
|
27
|
+
if (!released)
|
|
28
|
+
restoreRest = ios.preventScrollMobileWebKit();
|
|
29
|
+
});
|
|
30
|
+
restore = () => {
|
|
31
|
+
released = true;
|
|
32
|
+
restoreRest?.();
|
|
33
|
+
restoreOverflow();
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else
|
|
37
|
+
restore = preventScrollStandard(overrideFocus);
|
|
38
|
+
}
|
|
39
|
+
let released = false;
|
|
40
|
+
return () => {
|
|
41
|
+
if (released)
|
|
42
|
+
return;
|
|
43
|
+
released = true;
|
|
44
|
+
preventScrollCount--;
|
|
45
|
+
if (preventScrollCount === 0)
|
|
46
|
+
restore?.();
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Whether a scroll lock is active (React Aria checks `overflow: hidden` on the root for this). */
|
|
50
|
+
export const isScrollPrevented = () => preventScrollCount > 0;
|
|
51
|
+
// Most browsers: overflow hidden on the root, keep the scrollbar's space.
|
|
52
|
+
function preventScrollStandard(overrideFocus) {
|
|
53
|
+
const root = document.documentElement;
|
|
54
|
+
const scrollbarWidth = window.innerWidth - root.clientWidth;
|
|
55
|
+
const restores = [];
|
|
56
|
+
if (scrollbarWidth > 0)
|
|
57
|
+
// scrollbar-gutter also keeps fixed-position elements from shifting.
|
|
58
|
+
restores.push("scrollbarGutter" in root.style ? setStyle(root, "scrollbar-gutter", "stable") : setStyle(root, "padding-right", `${scrollbarWidth}px`));
|
|
59
|
+
restores.push(setStyle(root, "overflow", "hidden"));
|
|
60
|
+
if (overrideFocus) {
|
|
61
|
+
let undo, released = false;
|
|
62
|
+
void import("./prevent-scroll-ios.js").then((ios) => {
|
|
63
|
+
if (!released)
|
|
64
|
+
undo = ios.overrideFocus();
|
|
65
|
+
});
|
|
66
|
+
restores.push(() => {
|
|
67
|
+
released = true;
|
|
68
|
+
undo?.();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return () => {
|
|
72
|
+
for (const fn of restores.reverse())
|
|
73
|
+
fn();
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/** Set an inline style property; returns the function restoring the previous value. */
|
|
77
|
+
export function setStyle(element, property, value) {
|
|
78
|
+
const style = element.style;
|
|
79
|
+
const previous = style.getPropertyValue(property), priority = style.getPropertyPriority(property);
|
|
80
|
+
style.setProperty(property, value);
|
|
81
|
+
return () => {
|
|
82
|
+
if (previous)
|
|
83
|
+
style.setProperty(property, previous, priority);
|
|
84
|
+
else
|
|
85
|
+
style.removeProperty(property);
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** Whether `node` scrolls (overflow auto / scroll; the root unless hidden); with `checkForOverflow`, only if its content overflows. */
|
|
89
|
+
export function isScrollable(node, checkForOverflow) {
|
|
90
|
+
if (!node)
|
|
91
|
+
return false;
|
|
92
|
+
const style = window.getComputedStyle(node);
|
|
93
|
+
const root = document.scrollingElement || document.documentElement;
|
|
94
|
+
let scrollable = /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);
|
|
95
|
+
// The root has `visible` overflow by default but scrolls.
|
|
96
|
+
if (node === root && style.overflow !== "hidden")
|
|
97
|
+
scrollable = true;
|
|
98
|
+
if (scrollable && checkForOverflow)
|
|
99
|
+
scrollable = node.scrollHeight !== node.clientHeight || node.scrollWidth !== node.clientWidth;
|
|
100
|
+
return scrollable;
|
|
101
|
+
}
|
|
102
|
+
/** Nearest scrollable ancestor of `node` (not `node` itself), else the scrolling element. */
|
|
103
|
+
export function getScrollParent(node, checkForOverflow) {
|
|
104
|
+
let scrollableNode = node;
|
|
105
|
+
if (isScrollable(scrollableNode, checkForOverflow))
|
|
106
|
+
scrollableNode = scrollableNode.parentElement;
|
|
107
|
+
while (scrollableNode && !isScrollable(scrollableNode, checkForOverflow))
|
|
108
|
+
scrollableNode = scrollableNode.parentElement;
|
|
109
|
+
return scrollableNode || document.scrollingElement || document.documentElement;
|
|
110
|
+
}
|
|
111
|
+
/** Scrollable ancestors of `node`, nearest first (React Aria `getScrollParents`). */
|
|
112
|
+
export function getScrollParents(node, checkForOverflow) {
|
|
113
|
+
const parents = [];
|
|
114
|
+
const root = document.scrollingElement || document.documentElement;
|
|
115
|
+
let current = node;
|
|
116
|
+
do {
|
|
117
|
+
if (isScrollable(current, checkForOverflow))
|
|
118
|
+
parents.push(current);
|
|
119
|
+
current = current.parentElement;
|
|
120
|
+
} while (current && current !== root);
|
|
121
|
+
return parents;
|
|
122
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ElementSource } from "./position.js";
|
|
2
|
+
interface Point {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SafeAreaOptions {
|
|
7
|
+
/** Ref for the trigger element. */
|
|
8
|
+
triggerRef: ElementSource;
|
|
9
|
+
/** Ref for the overlay element. */
|
|
10
|
+
overlayRef: ElementSource;
|
|
11
|
+
/** Whether this feature is disabled. */
|
|
12
|
+
isDisabled?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Called on pointer move (and when the pointer leaves the document) with whether the pointer is
|
|
15
|
+
* currently within the "safe area" — the trigger, the overlay, or the region between them. This
|
|
16
|
+
* lets an overlay stay open while the pointer travels from the trigger to the overlay, even
|
|
17
|
+
* diagonally and regardless of placement.
|
|
18
|
+
*/
|
|
19
|
+
onSafeAreaChange: (isInSafeArea: boolean) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Tracks whether the pointer is within a "safe area" connecting a trigger and its overlay, so the
|
|
23
|
+
* overlay can stay open while the pointer moves between them. Call while open; returns the release.
|
|
24
|
+
*/
|
|
25
|
+
export declare function safeArea(options: SafeAreaOptions): () => void;
|
|
26
|
+
/** Whether `point` is in the trigger rect, the overlay rect or the convex hull of both (padded). */
|
|
27
|
+
export declare function isPointInSafeArea(point: Point, triggerRect: DOMRect, overlayRect?: DOMRect): boolean;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Ported from @react-aria/tooltip (useSafeArea.ts; react-aria/src/tooltip/useSafeArea.ts), Apache-2.0, © Adobe.
|
|
2
|
+
// Tracks whether the pointer is within a "safe area" connecting a trigger and its overlay, so the
|
|
3
|
+
// overlay can stay open while the pointer moves between them (hover-opened overlays: PreviewTrigger).
|
|
4
|
+
// The safe area is the union of the trigger rect, the overlay rect, and the convex hull connecting the
|
|
5
|
+
// two (a polygon), which works for any placement of the overlay relative to the trigger, diagonal
|
|
6
|
+
// moves and any gap (offset / arrow) between them.
|
|
7
|
+
// Rivet:
|
|
8
|
+
// - `useSafeArea(options)` (an effect while `isOpen`) → `safeArea(options)`: call when the overlay
|
|
9
|
+
// opens (browser only), it returns the release (call on close). `isOpen` is implied.
|
|
10
|
+
// - refs are `ElementSource`s; `isPointInSafeArea` is exported for tests.
|
|
11
|
+
import { getOwnerDocument, getOwnerWindow } from "../utils/dom.js";
|
|
12
|
+
// A small amount of padding (in pixels) added around the trigger and overlay so the safe area is
|
|
13
|
+
// slightly forgiving of sub-pixel jitter and the gap between the elements.
|
|
14
|
+
const PADDING = 8;
|
|
15
|
+
const read = (source) => (typeof source === "function" ? source() : source) ?? null;
|
|
16
|
+
/**
|
|
17
|
+
* Tracks whether the pointer is within a "safe area" connecting a trigger and its overlay, so the
|
|
18
|
+
* overlay can stay open while the pointer moves between them. Call while open; returns the release.
|
|
19
|
+
*/
|
|
20
|
+
export function safeArea(options) {
|
|
21
|
+
const { triggerRef, overlayRef, isDisabled } = options;
|
|
22
|
+
const trigger = read(triggerRef);
|
|
23
|
+
if (isDisabled || !trigger)
|
|
24
|
+
return () => { };
|
|
25
|
+
const onPointerMove = (e) => {
|
|
26
|
+
if (e.pointerType === "touch")
|
|
27
|
+
return;
|
|
28
|
+
const point = { x: e.clientX, y: e.clientY };
|
|
29
|
+
const triggerRect = trigger.getBoundingClientRect();
|
|
30
|
+
const overlayRect = read(overlayRef)?.getBoundingClientRect();
|
|
31
|
+
options.onSafeAreaChange(isPointInSafeArea(point, triggerRect, overlayRect));
|
|
32
|
+
};
|
|
33
|
+
// If the pointer leaves the document entirely, it is no longer in the safe area.
|
|
34
|
+
const onPointerLeave = () => options.onSafeAreaChange(false);
|
|
35
|
+
const win = getOwnerWindow(trigger);
|
|
36
|
+
const doc = getOwnerDocument(trigger);
|
|
37
|
+
win.addEventListener("pointermove", onPointerMove);
|
|
38
|
+
doc.documentElement.addEventListener("pointerleave", onPointerLeave);
|
|
39
|
+
return () => {
|
|
40
|
+
win.removeEventListener("pointermove", onPointerMove);
|
|
41
|
+
doc.documentElement.removeEventListener("pointerleave", onPointerLeave);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Whether `point` is in the trigger rect, the overlay rect or the convex hull of both (padded). */
|
|
45
|
+
export function isPointInSafeArea(point, triggerRect, overlayRect) {
|
|
46
|
+
if (rectContains(triggerRect, point))
|
|
47
|
+
return true;
|
|
48
|
+
if (!overlayRect)
|
|
49
|
+
return false;
|
|
50
|
+
if (rectContains(overlayRect, point))
|
|
51
|
+
return true;
|
|
52
|
+
// Otherwise, check whether the point is within the convex hull connecting the two rects.
|
|
53
|
+
const hull = convexHull([...rectCorners(triggerRect), ...rectCorners(overlayRect)]);
|
|
54
|
+
return hull.length >= 3 && isPointInPolygon(point, hull);
|
|
55
|
+
}
|
|
56
|
+
function rectContains(rect, point) {
|
|
57
|
+
return point.x >= rect.left - PADDING && point.x <= rect.right + PADDING && point.y >= rect.top - PADDING && point.y <= rect.bottom + PADDING;
|
|
58
|
+
}
|
|
59
|
+
function rectCorners(rect) {
|
|
60
|
+
const left = rect.left - PADDING;
|
|
61
|
+
const right = rect.right + PADDING;
|
|
62
|
+
const top = rect.top - PADDING;
|
|
63
|
+
const bottom = rect.bottom + PADDING;
|
|
64
|
+
return [
|
|
65
|
+
{ x: left, y: top },
|
|
66
|
+
{ x: right, y: top },
|
|
67
|
+
{ x: right, y: bottom },
|
|
68
|
+
{ x: left, y: bottom },
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
// Computes the convex hull of a set of points using the monotone chain algorithm.
|
|
72
|
+
function convexHull(points) {
|
|
73
|
+
const sorted = points.slice().sort((a, b) => a.x - b.x || a.y - b.y);
|
|
74
|
+
if (sorted.length < 3)
|
|
75
|
+
return sorted;
|
|
76
|
+
const cross = (o, a, b) => (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);
|
|
77
|
+
const lower = [];
|
|
78
|
+
for (const p of sorted) {
|
|
79
|
+
while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], p) <= 0)
|
|
80
|
+
lower.pop();
|
|
81
|
+
lower.push(p);
|
|
82
|
+
}
|
|
83
|
+
const upper = [];
|
|
84
|
+
for (let i = sorted.length - 1; i >= 0; i--) {
|
|
85
|
+
const p = sorted[i];
|
|
86
|
+
while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], p) <= 0)
|
|
87
|
+
upper.pop();
|
|
88
|
+
upper.push(p);
|
|
89
|
+
}
|
|
90
|
+
lower.pop();
|
|
91
|
+
upper.pop();
|
|
92
|
+
return lower.concat(upper);
|
|
93
|
+
}
|
|
94
|
+
// Ray casting point-in-polygon test.
|
|
95
|
+
function isPointInPolygon(point, polygon) {
|
|
96
|
+
const { x, y } = point;
|
|
97
|
+
let inside = false;
|
|
98
|
+
for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
|
|
99
|
+
const xi = polygon[i].x;
|
|
100
|
+
const yi = polygon[i].y;
|
|
101
|
+
const xj = polygon[j].x;
|
|
102
|
+
const yj = polygon[j].y;
|
|
103
|
+
const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;
|
|
104
|
+
if (intersect)
|
|
105
|
+
inside = !inside;
|
|
106
|
+
}
|
|
107
|
+
return inside;
|
|
108
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type RenderProps, type RefValue, type ClassNameOrFunction, type StyleOrFunction } from "../slots/index.jsx";
|
|
2
|
+
import { type DOMRenderProps } from "../utils/render.js";
|
|
3
|
+
import { type GlobalDOMAttributes } from "../utils/dom-props.js";
|
|
4
|
+
import { OverlayArrowContext, type OverlayArrowContextValue } from "../overlay/contexts.js";
|
|
5
|
+
import type { PlacementAxis } from "../overlay/position.js";
|
|
6
|
+
export { OverlayArrowContext, type OverlayArrowContextValue };
|
|
7
|
+
export interface OverlayArrowRenderProps {
|
|
8
|
+
/** The placement of the overlay relative to the trigger. @selector [data-placement="left | right | top | bottom"] */
|
|
9
|
+
placement: () => PlacementAxis | null;
|
|
10
|
+
}
|
|
11
|
+
export interface OverlayArrowProps extends RenderProps<OverlayArrowRenderProps>, DOMRenderProps<"div", OverlayArrowRenderProps>, Omit<GlobalDOMAttributes<HTMLDivElement>, "style"> {
|
|
12
|
+
/** The CSS class for the element. A function may be provided to compute the class based on component state. @default 'rv-OverlayArrow' */
|
|
13
|
+
class?: ClassNameOrFunction<OverlayArrowRenderProps>;
|
|
14
|
+
/** The inline style for the element. A function may be provided to compute the style based on component state. */
|
|
15
|
+
style?: StyleOrFunction<OverlayArrowRenderProps>;
|
|
16
|
+
id?: string;
|
|
17
|
+
ref?: RefValue<HTMLDivElement>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* An OverlayArrow renders a custom arrow element relative to an overlay element such as a popover or
|
|
21
|
+
* tooltip such that it aligns with a trigger element.
|
|
22
|
+
*/
|
|
23
|
+
export declare function OverlayArrow(props: OverlayArrowProps): import("@rivetjs/runtime/jsx-runtime").CompiledElement;
|