@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,884 @@
|
|
|
1
|
+
// Ported from @radix-ui/react-scroll-area 1.3.0 (src/scroll-area.tsx, src/use-state-machine.ts), MIT, © 2022 WorkOS
|
|
2
|
+
// (https://github.com/radix-ui/primitives packages/react/scroll-area; read from the published tarball's source map), with
|
|
3
|
+
// @radix-ui/number `clamp`, @radix-ui/primitive `composeEventHandlers`, @radix-ui/react-direction `useDirection`,
|
|
4
|
+
// @radix-ui/react-use-callback-ref / react-use-layout-effect folded in (MIT, © 2022 WorkOS).
|
|
5
|
+
// Augments native scroll: the Viewport scrolls natively (native scrollbars hidden: inline `scrollbar-width: none` + one nonce'd `::-webkit-scrollbar` style per document), custom
|
|
6
|
+
// scrollbars mirror its scroll metrics — thumb size from viewport / content ratio (min 18 px, macOS), thumb position
|
|
7
|
+
// from the scroll offset (rAF loop while scrolling, no scroll-linked effects), thumb drag, track click (page to the
|
|
8
|
+
// pointer), wheel over a scrollbar scrolls the viewport, RTL, ResizeObserver re-measures. Scrollbar visibility by
|
|
9
|
+
// `type`: `hover` (pointer over the root, hidden `scrollHideDelay` ms after it leaves) / `scroll` (while scrolling or
|
|
10
|
+
// interacting, state machine) / `auto` (when the content overflows) / `always`.
|
|
11
|
+
// Rivet:
|
|
12
|
+
// - fine-grained: element refs (`ref()` signals), sizes, visibility states and corner sizes are signals in the
|
|
13
|
+
// resumable contexts `rv-scroll-area` / `rv-scroll-area-scrollbar`; nothing re-renders, bindings update the `style`
|
|
14
|
+
// (CSS variables) / `data-state`; Radix `useEffect` / `useLayoutEffect` → `clientEffect` (ResizeObserver, listeners).
|
|
15
|
+
// - SSR renders the Root, Viewport and Content; scrollbars only for `type="always"` (or `forceMount`), as static markup
|
|
16
|
+
// (no thumb), thumbs / corner once measured on the client.
|
|
17
|
+
// - activation (`active` in the context): a server-rendered area is inactive — the viewport scrolls natively on both
|
|
18
|
+
// axes, no part runs client code — until the first `pointerenter` / `wheel` / `focusin` on the Root or `scroll` of the
|
|
19
|
+
// Viewport (delegated handlers, `preload="interaction"`), or, for `type="auto"` / `"always"` (their first frame needs
|
|
20
|
+
// measuring), the Root coming into view (`clientEffect` `when: "visible"`). Each Scrollbar is a `Show` over `active`:
|
|
21
|
+
// activation re-creates it with the Radix behaviour (axis enabling, measuring, listeners); the activating
|
|
22
|
+
// `pointerenter` / `scroll` is caught up on (`:hover`, scroll offset vs the server's 0). A client render is active
|
|
23
|
+
// from the start (Radix exactly).
|
|
24
|
+
// - `asChild` → cdk `render` prop on every part (`render(attrs)`, spread `attrs` onto your element).
|
|
25
|
+
// - `Presence` → `./presence.tsx` (`createPresence` + `Show`), exit animations kept.
|
|
26
|
+
// - `useDirection(dir)`: the nearest cdk `<Dir>` (`@rivetjs/cdk/bidi-dir`, `DirectionalityContext`) stands in for the
|
|
27
|
+
// Radix `DirectionProvider`; default `ltr`.
|
|
28
|
+
// - parts accept every `<div>` attribute (Radix `Primitive.div`); default classes `rv-ScrollArea`, `rv-ScrollAreaViewport`,
|
|
29
|
+
// `rv-ScrollAreaContent`, `rv-ScrollAreaScrollbar`, `rv-ScrollAreaThumb`, `rv-ScrollAreaCorner` when `class` is omitted.
|
|
30
|
+
// - `type`, `dir`, `scrollHideDelay`, `orientation`, `forceMount`, `nonce` are read when the part is created.
|
|
31
|
+
// - user handlers run first and a `preventDefault()` skips the part's own (Radix `composeEventHandlers`).
|
|
32
|
+
// - component-owned state (visibility, machine, sizes, presence, timers) is `_regionState`: a part re-created on a
|
|
33
|
+
// resumed page (first signal change) continues from the same values; Scrollbar mount flags (`scrollbarXMounted` /
|
|
34
|
+
// `YMounted`, set from a `clientEffect`) drive the Corner — revived `ref()` signals already hold the server element.
|
|
35
|
+
// Deviations (documented in scroll-area/CLAUDE.md):
|
|
36
|
+
// - names `--radix-scroll-area-*` → `--rv-scroll-area-thumb-width` / `-thumb-height` / `-corner-width` / `-corner-height`,
|
|
37
|
+
// `data-radix-scroll-area-viewport` → `data-rv-scroll-area-viewport`;
|
|
38
|
+
// - the Thumb records the pointer offset in a bubbling `pointerdown` (Radix: `onPointerDownCapture`; capture handlers
|
|
39
|
+
// are not resumable) — it still runs before the Scrollbar's own handler (inner element first);
|
|
40
|
+
// - the Thumb's rAF scroll loop stops when the Thumb unmounts (Radix leaves it running until the page unloads);
|
|
41
|
+
// - the `asChild` single-child dev warning has no counterpart (`render` replaces `asChild`);
|
|
42
|
+
// - the native-scrollbar `<style>` Radix renders next to every Viewport → inline hiding styles + `insertViewportStyle`
|
|
43
|
+
// (`./dom.ts`, client, once per document, nonce'd; JSX has no `<style>` content);
|
|
44
|
+
// - `type="scroll"`: the scroll-end debounce timer is not cleared on unmount (a re-created part keeps the timer);
|
|
45
|
+
// - before activation both viewport axes are `overflow: scroll` (Radix: `hidden` until the scrollbars mount).
|
|
46
|
+
import { _regionState, computed, createContext, signal, untrack, useContext } from "@rivetjs/reactivity";
|
|
47
|
+
import { Provider, Show, clientEffect, ref as createRef } from "@rivetjs/runtime/dom";
|
|
48
|
+
import { splitProps } from "@rivetjs/runtime/props";
|
|
49
|
+
import { resumableContext } from "@rivetjs/runtime/resume-format";
|
|
50
|
+
import { DirectionalityContext } from "../bidi/index.js";
|
|
51
|
+
import { getNonce } from "../utils/dom.js";
|
|
52
|
+
import { addUnlinkedScrollListener, insertViewportStyle, observeResize } from "./dom.js";
|
|
53
|
+
import { mergeRefValues } from "../slots/index.jsx";
|
|
54
|
+
import { createPresence, isPresent } from "./presence.jsx";
|
|
55
|
+
const EMPTY_SIZES = { content: 0, viewport: 0, scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 } };
|
|
56
|
+
/** The Root's state (Radix `ScrollAreaProvider`). */
|
|
57
|
+
export const ScrollAreaContext = resumableContext(createContext(null, { id: "rv-scroll-area" }));
|
|
58
|
+
/** A Scrollbar's state (Radix `ScrollbarProvider`). */
|
|
59
|
+
const ScrollbarContext = resumableContext(createContext(null, { id: "rv-scroll-area-scrollbar" }));
|
|
60
|
+
/** Radix `createContext` consumer: throws outside the provider. */
|
|
61
|
+
function useScrollAreaContext(consumerName) {
|
|
62
|
+
const context = useContext(ScrollAreaContext);
|
|
63
|
+
if (!context)
|
|
64
|
+
throw new Error(`\`${consumerName}\` must be used within \`ScrollArea\``);
|
|
65
|
+
return context;
|
|
66
|
+
}
|
|
67
|
+
function useScrollbarContext(consumerName) {
|
|
68
|
+
const context = useContext(ScrollbarContext);
|
|
69
|
+
if (!context)
|
|
70
|
+
throw new Error(`\`${consumerName}\` must be used within \`ScrollAreaScrollbar\``);
|
|
71
|
+
return context;
|
|
72
|
+
}
|
|
73
|
+
const ROOT_KEYS = ["type", "dir", "scrollHideDelay", "class", "style", "ref", "render", "children", "onPointerEnter", "onWheel", "onFocusIn"];
|
|
74
|
+
/** Augments native scroll functionality for custom, cross-browser styling (Radix `ScrollArea.Root`). */
|
|
75
|
+
export function ScrollArea(props) {
|
|
76
|
+
const [local, rest] = splitProps(props, ROOT_KEYS);
|
|
77
|
+
const directionality = useContext(DirectionalityContext);
|
|
78
|
+
const direction = local.dir || (directionality ? untrack(directionality.valueSignal) : undefined) || "ltr";
|
|
79
|
+
// Component-owned (`_regionState`): a Root re-created on a resumed page continues from the server's state.
|
|
80
|
+
const value = _regionState(() => ({
|
|
81
|
+
type: local.type ?? "hover",
|
|
82
|
+
dir: direction,
|
|
83
|
+
scrollHideDelay: local.scrollHideDelay ?? 600,
|
|
84
|
+
scrollArea: createRef(),
|
|
85
|
+
viewport: createRef(),
|
|
86
|
+
content: createRef(),
|
|
87
|
+
scrollbarX: createRef(),
|
|
88
|
+
scrollbarY: createRef(),
|
|
89
|
+
scrollbarXEnabled: signal(false),
|
|
90
|
+
scrollbarYEnabled: signal(false),
|
|
91
|
+
scrollbarXMounted: signal(false),
|
|
92
|
+
scrollbarYMounted: signal(false),
|
|
93
|
+
cornerWidth: signal(0),
|
|
94
|
+
cornerHeight: signal(0),
|
|
95
|
+
// Server render: inactive until the first interaction (resumed pages load no scroll-area code before it).
|
|
96
|
+
active: signal(typeof document !== "undefined"),
|
|
97
|
+
}));
|
|
98
|
+
const ref = mergeRefValues(value.scrollArea, local.ref);
|
|
99
|
+
const cls = local.class ?? "rv-ScrollArea";
|
|
100
|
+
const userStyle = local.style;
|
|
101
|
+
const cornerWidth = value.cornerWidth;
|
|
102
|
+
const cornerHeight = value.cornerHeight;
|
|
103
|
+
const children = local.children;
|
|
104
|
+
const active = value.active;
|
|
105
|
+
const onPointerEnter = local.onPointerEnter;
|
|
106
|
+
const onWheel = local.onWheel;
|
|
107
|
+
const onFocusIn = local.onFocusIn;
|
|
108
|
+
// Types whose first frame depends on measuring (overflow / thumb size) activate when the Root comes into view.
|
|
109
|
+
if (value.type === "auto" || value.type === "always") {
|
|
110
|
+
const scrollArea = value.scrollArea;
|
|
111
|
+
clientEffect(() => {
|
|
112
|
+
if (scrollArea())
|
|
113
|
+
active.set(true);
|
|
114
|
+
}, { when: "visible" });
|
|
115
|
+
}
|
|
116
|
+
if (local.render)
|
|
117
|
+
return local.render({
|
|
118
|
+
dir: direction,
|
|
119
|
+
...rest,
|
|
120
|
+
ref,
|
|
121
|
+
class: cls,
|
|
122
|
+
onPointerEnter: (event) => {
|
|
123
|
+
onPointerEnter?.(event);
|
|
124
|
+
active.set(true);
|
|
125
|
+
},
|
|
126
|
+
onWheel: (event) => {
|
|
127
|
+
onWheel?.(event);
|
|
128
|
+
active.set(true);
|
|
129
|
+
},
|
|
130
|
+
onFocusIn: (event) => {
|
|
131
|
+
onFocusIn?.(event);
|
|
132
|
+
active.set(true);
|
|
133
|
+
},
|
|
134
|
+
// Corner sizes as CSS variables (Radix: fewer re-renders of context consumers).
|
|
135
|
+
style: () => ({
|
|
136
|
+
position: "relative",
|
|
137
|
+
"--rv-scroll-area-corner-width": cornerWidth() + "px",
|
|
138
|
+
"--rv-scroll-area-corner-height": cornerHeight() + "px",
|
|
139
|
+
...userStyle,
|
|
140
|
+
}),
|
|
141
|
+
children: () => (<Provider token={ScrollAreaContext} value={value}>
|
|
142
|
+
{children}
|
|
143
|
+
</Provider>),
|
|
144
|
+
}, undefined);
|
|
145
|
+
return (<div dir={direction} {...rest} ref={ref} class={cls} preload="visible" onPointerEnter={(event) => {
|
|
146
|
+
onPointerEnter?.(event);
|
|
147
|
+
active.set(true);
|
|
148
|
+
}} onWheel={(event) => {
|
|
149
|
+
onWheel?.(event);
|
|
150
|
+
active.set(true);
|
|
151
|
+
}} onFocusIn={(event) => {
|
|
152
|
+
onFocusIn?.(event);
|
|
153
|
+
active.set(true);
|
|
154
|
+
}} style={{
|
|
155
|
+
position: "relative",
|
|
156
|
+
"--rv-scroll-area-corner-width": cornerWidth() + "px",
|
|
157
|
+
"--rv-scroll-area-corner-height": cornerHeight() + "px",
|
|
158
|
+
...userStyle,
|
|
159
|
+
}}>
|
|
160
|
+
<Provider token={ScrollAreaContext} value={value}>
|
|
161
|
+
{children}
|
|
162
|
+
</Provider>
|
|
163
|
+
</div>);
|
|
164
|
+
}
|
|
165
|
+
const VIEWPORT_KEYS = ["children", "nonce", "disableImplicitContentElement", "class", "style", "ref", "render", "onScroll"];
|
|
166
|
+
/** The viewport area of the scroll area: scrolls natively (Radix `ScrollArea.Viewport`). */
|
|
167
|
+
export function ScrollAreaViewport(props) {
|
|
168
|
+
const [local, rest] = splitProps(props, VIEWPORT_KEYS);
|
|
169
|
+
const context = useScrollAreaContext("ScrollAreaViewport");
|
|
170
|
+
const ref = mergeRefValues(context.viewport, local.ref);
|
|
171
|
+
const cls = local.class ?? "rv-ScrollAreaViewport";
|
|
172
|
+
const userStyle = local.style;
|
|
173
|
+
const nonce = local.nonce;
|
|
174
|
+
const xEnabled = context.scrollbarXEnabled;
|
|
175
|
+
const yEnabled = context.scrollbarYEnabled;
|
|
176
|
+
const children = local.children;
|
|
177
|
+
const implicit = !local.disableImplicitContentElement;
|
|
178
|
+
const active = context.active;
|
|
179
|
+
const onScroll = local.onScroll;
|
|
180
|
+
// `overflow: scroll` on an enabled axis (the native scrollbar is hidden by the style; `visible` would act as `auto`).
|
|
181
|
+
// Before activation (server, resumed page) both axes scroll natively: the server cannot know which Scrollbars follow.
|
|
182
|
+
// Legacy WebKit (no `scrollbar-width`): the `::-webkit-scrollbar` rule needs a stylesheet (`ViewportStyle`, once active).
|
|
183
|
+
if (local.render)
|
|
184
|
+
return local.render({
|
|
185
|
+
"data-rv-scroll-area-viewport": "",
|
|
186
|
+
...rest,
|
|
187
|
+
ref,
|
|
188
|
+
class: cls,
|
|
189
|
+
onScroll: (event) => {
|
|
190
|
+
onScroll?.(event);
|
|
191
|
+
active.set(true);
|
|
192
|
+
},
|
|
193
|
+
style: () => ({
|
|
194
|
+
...HIDE_NATIVE_SCROLLBAR,
|
|
195
|
+
overflowX: xEnabled() || !active() ? "scroll" : "hidden",
|
|
196
|
+
overflowY: yEnabled() || !active() ? "scroll" : "hidden",
|
|
197
|
+
...userStyle,
|
|
198
|
+
}),
|
|
199
|
+
children: () => (<>
|
|
200
|
+
<Show when={active}>{() => <ViewportStyle nonce={nonce}/>}</Show>
|
|
201
|
+
{implicit ? <ScrollAreaContent>{children}</ScrollAreaContent> : children}
|
|
202
|
+
</>),
|
|
203
|
+
}, undefined);
|
|
204
|
+
return (<div data-rv-scroll-area-viewport="" {...rest} ref={ref} class={cls} preload="visible" onScroll={(event) => {
|
|
205
|
+
onScroll?.(event);
|
|
206
|
+
active.set(true);
|
|
207
|
+
}} style={{
|
|
208
|
+
...HIDE_NATIVE_SCROLLBAR,
|
|
209
|
+
overflowX: xEnabled() || !active() ? "scroll" : "hidden",
|
|
210
|
+
overflowY: yEnabled() || !active() ? "scroll" : "hidden",
|
|
211
|
+
...userStyle,
|
|
212
|
+
}}>
|
|
213
|
+
<Show when={active}>{() => <ViewportStyle nonce={nonce}/>}</Show>
|
|
214
|
+
{implicit ? <ScrollAreaContent>{children}</ScrollAreaContent> : children}
|
|
215
|
+
</div>);
|
|
216
|
+
}
|
|
217
|
+
/** Inserts the document's native-scrollbar stylesheet once the area is active (client only). */
|
|
218
|
+
function ViewportStyle(props) {
|
|
219
|
+
const nonce = props.nonce;
|
|
220
|
+
clientEffect(() => insertViewportStyle(nonce ?? getNonce()));
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
/** Radix `ScrollAreaViewportStyle` declarations, inline (SSR-safe, CSP-safe, not keyed on a class). */
|
|
224
|
+
const HIDE_NATIVE_SCROLLBAR = { scrollbarWidth: "none", "-ms-overflow-style": "none", "-webkit-overflow-scrolling": "touch" };
|
|
225
|
+
const CONTENT_KEYS = ["children", "class", "style", "ref", "render"];
|
|
226
|
+
/**
|
|
227
|
+
* The measured content of the viewport (Radix `ScrollArea.Content`): rendered implicitly by the Viewport unless it
|
|
228
|
+
* has `disableImplicitContentElement`. `display: table` makes it match the size of its children on both axes, so a
|
|
229
|
+
* change of the scroll size re-measures the thumbs.
|
|
230
|
+
*/
|
|
231
|
+
export function ScrollAreaContent(props) {
|
|
232
|
+
const [local, rest] = splitProps(props, CONTENT_KEYS);
|
|
233
|
+
const context = useScrollAreaContext("ScrollAreaContent");
|
|
234
|
+
const ref = mergeRefValues(context.content, local.ref);
|
|
235
|
+
const cls = local.class ?? "rv-ScrollAreaContent";
|
|
236
|
+
const style = { minWidth: "100%", display: "table", ...local.style };
|
|
237
|
+
const children = local.children;
|
|
238
|
+
if (local.render)
|
|
239
|
+
return local.render({ ...rest, ref, class: cls, style, children }, undefined);
|
|
240
|
+
return (<div {...rest} ref={ref} class={cls} style={style}>
|
|
241
|
+
{children}
|
|
242
|
+
</div>);
|
|
243
|
+
}
|
|
244
|
+
/** The vertical or horizontal scrollbar (Radix `ScrollArea.Scrollbar`); its visibility follows the Root's `type`. */
|
|
245
|
+
export function ScrollAreaScrollbar(props) {
|
|
246
|
+
const context = useScrollAreaContext("ScrollAreaScrollbar");
|
|
247
|
+
const active = context.active;
|
|
248
|
+
// Rendered by the server before activation (a resumed re-creation keeps `true`; a client render: `false`). The
|
|
249
|
+
// activating event already happened when the scrollbar code runs: `hover` / `scroll` catch up on it.
|
|
250
|
+
const server = _regionState(() => ({ value: !untrack(active) }));
|
|
251
|
+
// Server: enable the axis now (serialized with the context), so the Viewport keeps `overflow: scroll` on it through
|
|
252
|
+
// activation while this scrollbar's code may still be loading (no `hidden` window under a running scroll).
|
|
253
|
+
if (!untrack(active))
|
|
254
|
+
(props.orientation === "horizontal" ? context.scrollbarXEnabled : context.scrollbarYEnabled).set(true);
|
|
255
|
+
const type = context.type;
|
|
256
|
+
// Before activation: the server's first frame, no behaviour (`always`, `forceMount`: the static track, no thumb).
|
|
257
|
+
const placeholder = type === "always" || (!!props.forceMount && type !== "hover");
|
|
258
|
+
// `fallback` is a function: JSX in a conditional prop would be created eagerly (and its ref called) in a client render.
|
|
259
|
+
return (<Show when={active} fallback={placeholder ? () => <ScrollbarStatic p={props} state={type === "always" ? "visible" : "hidden"}/> : undefined}>
|
|
260
|
+
{() => <ScrollbarActive p={props} server={server.value}/>}
|
|
261
|
+
</Show>);
|
|
262
|
+
}
|
|
263
|
+
function ScrollbarActive(props) {
|
|
264
|
+
const p = props.p;
|
|
265
|
+
const server = props.server;
|
|
266
|
+
const context = useScrollAreaContext("ScrollAreaScrollbar");
|
|
267
|
+
const enabled = p.orientation === "horizontal" ? context.scrollbarXEnabled : context.scrollbarYEnabled;
|
|
268
|
+
clientEffect(() => {
|
|
269
|
+
enabled.set(true);
|
|
270
|
+
return () => enabled.set(false);
|
|
271
|
+
});
|
|
272
|
+
const type = context.type;
|
|
273
|
+
if (type === "hover")
|
|
274
|
+
return <ScrollbarHover p={p} server={server}/>;
|
|
275
|
+
if (type === "scroll")
|
|
276
|
+
return <ScrollbarScroll p={p} server={server}/>;
|
|
277
|
+
if (type === "auto")
|
|
278
|
+
return <ScrollbarAuto p={p} forceMount={p.forceMount}/>;
|
|
279
|
+
if (type === "always")
|
|
280
|
+
return <ScrollbarVisible p={p} dataState={{ get: () => "visible" }}/>;
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
/** The scrollbar's server markup before activation (`ScrollbarVisible` with empty sizes; no handlers, no children). */
|
|
284
|
+
function ScrollbarStatic(props) {
|
|
285
|
+
const [local, rest] = splitProps(props.p, SCROLLBAR_KEYS);
|
|
286
|
+
const context = useScrollAreaContext("ScrollAreaScrollbar");
|
|
287
|
+
const orientation = local.orientation === "horizontal" ? "horizontal" : "vertical";
|
|
288
|
+
const ref = mergeRefValues(createRef(), local.ref);
|
|
289
|
+
const cls = local.class ?? "rv-ScrollAreaScrollbar";
|
|
290
|
+
const style = scrollbarStyle(orientation === "horizontal", context.dir, EMPTY_SIZES, local.style);
|
|
291
|
+
const state = props.state;
|
|
292
|
+
if (local.render)
|
|
293
|
+
return local.render({ "data-orientation": orientation, "data-state": state, ...rest, ref, class: cls, style }, undefined);
|
|
294
|
+
return <div data-orientation={orientation} data-state={state} {...rest} ref={ref} class={cls} style={style}/>;
|
|
295
|
+
}
|
|
296
|
+
/** The scrollbar element of an orientation (Radix composes it into the context: `onScrollbarXChange` / `Y`). */
|
|
297
|
+
const scrollbarRef = (context, p) => p.orientation === "horizontal" ? context.scrollbarX : context.scrollbarY;
|
|
298
|
+
/* ---- type="hover" ---- */
|
|
299
|
+
function ScrollbarHover(props) {
|
|
300
|
+
const p = props.p;
|
|
301
|
+
const server = props.server;
|
|
302
|
+
const context = useScrollAreaContext("ScrollAreaScrollbar");
|
|
303
|
+
const visible = _regionState(() => signal(false));
|
|
304
|
+
const forceMount = p.forceMount;
|
|
305
|
+
clientEffect(() => {
|
|
306
|
+
const scrollArea = context.scrollArea();
|
|
307
|
+
const delay = context.scrollHideDelay;
|
|
308
|
+
if (!scrollArea)
|
|
309
|
+
return;
|
|
310
|
+
// Activated by the pointer entering (resumed page): that `pointerenter` came before this listener.
|
|
311
|
+
if (server && scrollArea.matches(":hover"))
|
|
312
|
+
visible.set(true);
|
|
313
|
+
let hideTimer = 0;
|
|
314
|
+
const handlePointerEnter = () => {
|
|
315
|
+
window.clearTimeout(hideTimer);
|
|
316
|
+
visible.set(true);
|
|
317
|
+
};
|
|
318
|
+
const handlePointerLeave = () => {
|
|
319
|
+
hideTimer = window.setTimeout(() => visible.set(false), delay);
|
|
320
|
+
};
|
|
321
|
+
scrollArea.addEventListener("pointerenter", handlePointerEnter);
|
|
322
|
+
scrollArea.addEventListener("pointerleave", handlePointerLeave);
|
|
323
|
+
return () => {
|
|
324
|
+
window.clearTimeout(hideTimer);
|
|
325
|
+
scrollArea.removeEventListener("pointerenter", handlePointerEnter);
|
|
326
|
+
scrollArea.removeEventListener("pointerleave", handlePointerLeave);
|
|
327
|
+
};
|
|
328
|
+
});
|
|
329
|
+
const presence = createPresence({ present: () => !!forceMount || visible(), node: scrollbarRef(context, p) });
|
|
330
|
+
// Radix renders `ScrollAreaScrollbarAuto` without `forceMount` here: overflow still decides inside.
|
|
331
|
+
return (<Show when={() => isPresent(presence())}>
|
|
332
|
+
{() => <ScrollbarAuto p={p} forceMount={undefined} dataState={{ get: () => (visible() ? "visible" : "hidden") }}/>}
|
|
333
|
+
</Show>);
|
|
334
|
+
}
|
|
335
|
+
const SCROLL_MACHINE = {
|
|
336
|
+
hidden: { SCROLL: "scrolling" },
|
|
337
|
+
scrolling: { SCROLL_END: "idle", POINTER_ENTER: "interacting" },
|
|
338
|
+
interacting: { SCROLL: "interacting", POINTER_LEAVE: "idle" },
|
|
339
|
+
idle: { HIDE: "hidden", SCROLL: "scrolling", POINTER_ENTER: "interacting" },
|
|
340
|
+
};
|
|
341
|
+
/** Radix `useStateMachine` step. */
|
|
342
|
+
function sendScroll(state, event) {
|
|
343
|
+
const next = SCROLL_MACHINE[untrack(state)][event];
|
|
344
|
+
if (next)
|
|
345
|
+
state.set(next);
|
|
346
|
+
}
|
|
347
|
+
function ScrollbarScroll(props) {
|
|
348
|
+
const p = props.p;
|
|
349
|
+
const server = props.server;
|
|
350
|
+
const context = useScrollAreaContext("ScrollAreaScrollbar");
|
|
351
|
+
const isHorizontal = p.orientation === "horizontal";
|
|
352
|
+
const forceMount = p.forceMount;
|
|
353
|
+
const state = _regionState(() => signal("hidden"));
|
|
354
|
+
// Radix `useDebounceCallback(() => send('SCROLL_END'), 100)`: one timer for the part's lifetime. Not cleared on
|
|
355
|
+
// unmount (Radix clears it): a part re-created on a resumed page (first state change) continues the same timer and
|
|
356
|
+
// state signal; a late `SCROLL_END` on an unmounted part changes nothing.
|
|
357
|
+
const scrollEnd = _regionState(() => ({ timer: 0 }));
|
|
358
|
+
clientEffect(() => {
|
|
359
|
+
if (state() !== "idle")
|
|
360
|
+
return;
|
|
361
|
+
const delay = context.scrollHideDelay;
|
|
362
|
+
const hideTimer = window.setTimeout(() => sendScroll(state, "HIDE"), delay);
|
|
363
|
+
return () => window.clearTimeout(hideTimer);
|
|
364
|
+
});
|
|
365
|
+
clientEffect(() => {
|
|
366
|
+
const viewport = context.viewport();
|
|
367
|
+
if (!viewport)
|
|
368
|
+
return;
|
|
369
|
+
const scrollDirection = isHorizontal ? "scrollLeft" : "scrollTop";
|
|
370
|
+
// Resumed page: compare with the server's position (0), so a scroll that activated the area shows its scrollbar.
|
|
371
|
+
let prevScrollPos = server ? 0 : viewport[scrollDirection];
|
|
372
|
+
const handleScroll = () => {
|
|
373
|
+
const scrollPos = viewport[scrollDirection];
|
|
374
|
+
if (prevScrollPos !== scrollPos) {
|
|
375
|
+
sendScroll(state, "SCROLL");
|
|
376
|
+
window.clearTimeout(scrollEnd.timer);
|
|
377
|
+
scrollEnd.timer = window.setTimeout(() => sendScroll(state, "SCROLL_END"), 100);
|
|
378
|
+
}
|
|
379
|
+
prevScrollPos = scrollPos;
|
|
380
|
+
};
|
|
381
|
+
viewport.addEventListener("scroll", handleScroll);
|
|
382
|
+
if (server)
|
|
383
|
+
handleScroll();
|
|
384
|
+
return () => viewport.removeEventListener("scroll", handleScroll);
|
|
385
|
+
});
|
|
386
|
+
const presence = createPresence({ present: () => !!forceMount || state() !== "hidden", node: scrollbarRef(context, p) });
|
|
387
|
+
return (<Show when={() => isPresent(presence())}>
|
|
388
|
+
{() => <ScrollbarVisible p={p} dataState={{ get: () => (state() === "hidden" ? "hidden" : "visible") }} machine={state}/>}
|
|
389
|
+
</Show>);
|
|
390
|
+
}
|
|
391
|
+
/* ---- type="auto" ---- */
|
|
392
|
+
function ScrollbarAuto(props) {
|
|
393
|
+
const p = props.p;
|
|
394
|
+
const context = useScrollAreaContext("ScrollAreaScrollbar");
|
|
395
|
+
const isHorizontal = p.orientation === "horizontal";
|
|
396
|
+
const forceMount = props.forceMount;
|
|
397
|
+
const visible = _regionState(() => signal(false));
|
|
398
|
+
clientEffect(() => {
|
|
399
|
+
const viewport = context.viewport();
|
|
400
|
+
const content = context.content();
|
|
401
|
+
// Radix `useDebounceCallback(…, 10)` shared by both observers.
|
|
402
|
+
let timer = 0;
|
|
403
|
+
const handleResize = () => {
|
|
404
|
+
window.clearTimeout(timer);
|
|
405
|
+
timer = window.setTimeout(() => {
|
|
406
|
+
const vp = untrack(context.viewport);
|
|
407
|
+
if (vp) {
|
|
408
|
+
const isOverflowX = vp.offsetWidth < vp.scrollWidth;
|
|
409
|
+
const isOverflowY = vp.offsetHeight < vp.scrollHeight;
|
|
410
|
+
visible.set(isHorizontal ? isOverflowX : isOverflowY);
|
|
411
|
+
}
|
|
412
|
+
}, 10);
|
|
413
|
+
};
|
|
414
|
+
const stopViewport = observeResize(viewport, handleResize);
|
|
415
|
+
const stopContent = observeResize(content, handleResize);
|
|
416
|
+
return () => {
|
|
417
|
+
window.clearTimeout(timer);
|
|
418
|
+
stopViewport();
|
|
419
|
+
stopContent();
|
|
420
|
+
};
|
|
421
|
+
});
|
|
422
|
+
const presence = createPresence({ present: () => !!forceMount || visible(), node: scrollbarRef(context, p) });
|
|
423
|
+
// The wrapper's `data-state` (hover) wins over the overflow one (Radix spreads the outer props last).
|
|
424
|
+
const outer = props.dataState;
|
|
425
|
+
return (<Show when={() => isPresent(presence())}>{() => <ScrollbarVisible p={p} dataState={outer ?? { get: () => (visible() ? "visible" : "hidden") }}/>}</Show>);
|
|
426
|
+
}
|
|
427
|
+
/* ---- ScrollAreaScrollbarVisible + ScrollAreaScrollbarX / Y + ScrollAreaScrollbarImpl ---- */
|
|
428
|
+
const SCROLLBAR_KEYS = [
|
|
429
|
+
"orientation",
|
|
430
|
+
"forceMount",
|
|
431
|
+
"children",
|
|
432
|
+
"class",
|
|
433
|
+
"style",
|
|
434
|
+
"ref",
|
|
435
|
+
"render",
|
|
436
|
+
"onPointerDown",
|
|
437
|
+
"onPointerMove",
|
|
438
|
+
"onPointerUp",
|
|
439
|
+
"onPointerEnter",
|
|
440
|
+
"onPointerLeave",
|
|
441
|
+
];
|
|
442
|
+
function ScrollbarVisible(props) {
|
|
443
|
+
const [local, rest] = splitProps(props.p, SCROLLBAR_KEYS);
|
|
444
|
+
const context = useScrollAreaContext("ScrollAreaScrollbar");
|
|
445
|
+
const orientation = local.orientation === "horizontal" ? "horizontal" : "vertical";
|
|
446
|
+
const isHorizontal = orientation === "horizontal";
|
|
447
|
+
const element = isHorizontal ? context.scrollbarX : context.scrollbarY;
|
|
448
|
+
// Component-owned (`_regionState`): a scrollbar re-created on a resumed page keeps its measures and thumb.
|
|
449
|
+
const sizes = _regionState(() => signal(EMPTY_SIZES));
|
|
450
|
+
const thumb = _regionState(() => createRef());
|
|
451
|
+
const pointerOffset = _regionState(() => ({ current: 0 }));
|
|
452
|
+
// Radix `rectRef` / `prevWebkitUserSelectRef` (pointer drag on the track / thumb).
|
|
453
|
+
const drag = _regionState(() => ({ rect: null, prevWebkitUserSelect: "" }));
|
|
454
|
+
const hasThumb = computed(() => {
|
|
455
|
+
const s = sizes();
|
|
456
|
+
const ratio = getThumbRatio(s.viewport, s.content);
|
|
457
|
+
return ratio > 0 && ratio < 1;
|
|
458
|
+
});
|
|
459
|
+
const scrollbarValue = { isHorizontal, sizes, hasThumb, thumb, pointerOffset };
|
|
460
|
+
const dir = context.dir;
|
|
461
|
+
const machine = props.machine;
|
|
462
|
+
const dataState = props.dataState;
|
|
463
|
+
const onPointerDown = local.onPointerDown;
|
|
464
|
+
const onPointerMove = local.onPointerMove;
|
|
465
|
+
const onPointerUp = local.onPointerUp;
|
|
466
|
+
const onPointerEnter = local.onPointerEnter;
|
|
467
|
+
const onPointerLeave = local.onPointerLeave;
|
|
468
|
+
const ref = mergeRefValues(element, local.ref);
|
|
469
|
+
const cls = local.class ?? "rv-ScrollAreaScrollbar";
|
|
470
|
+
const userStyle = local.style;
|
|
471
|
+
const children = local.children;
|
|
472
|
+
// Radix composes the element into the context (`onScrollbarXChange`): the Corner renders while both are mounted. A
|
|
473
|
+
// flag, not the ref: on a resumed page the revived ref already holds the server element, the flag changes.
|
|
474
|
+
const mounted = isHorizontal ? context.scrollbarXMounted : context.scrollbarYMounted;
|
|
475
|
+
clientEffect(() => {
|
|
476
|
+
mounted.set(!!element());
|
|
477
|
+
return () => mounted.set(false);
|
|
478
|
+
});
|
|
479
|
+
// Wheel over the scrollbar scrolls the viewport: bound on the document, not passive, so it can stop the page scroll.
|
|
480
|
+
clientEffect(() => {
|
|
481
|
+
const scrollbar = element();
|
|
482
|
+
const handleWheel = (event) => {
|
|
483
|
+
if (scrollbar?.contains(event.target))
|
|
484
|
+
wheelScroll(event, context, isHorizontal, untrack(sizes));
|
|
485
|
+
};
|
|
486
|
+
document.addEventListener("wheel", handleWheel, { passive: false });
|
|
487
|
+
return () => document.removeEventListener("wheel", handleWheel, { passive: false });
|
|
488
|
+
});
|
|
489
|
+
// Update the thumb position when the sizes change.
|
|
490
|
+
clientEffect(() => {
|
|
491
|
+
sizes();
|
|
492
|
+
untrack(() => thumbPositionChange(context, scrollbarValue));
|
|
493
|
+
});
|
|
494
|
+
// Re-measure when the scrollbar or the content resizes (Radix `useDebounceCallback(onResize, 10)`).
|
|
495
|
+
clientEffect(() => {
|
|
496
|
+
const scrollbar = element();
|
|
497
|
+
const content = context.content();
|
|
498
|
+
let timer = 0;
|
|
499
|
+
const handleResize = () => {
|
|
500
|
+
window.clearTimeout(timer);
|
|
501
|
+
timer = window.setTimeout(() => measure(context, scrollbarValue, untrack(element)), 10);
|
|
502
|
+
};
|
|
503
|
+
const stopScrollbar = observeResize(scrollbar, handleResize);
|
|
504
|
+
const stopContent = observeResize(content, handleResize);
|
|
505
|
+
return () => {
|
|
506
|
+
window.clearTimeout(timer);
|
|
507
|
+
stopScrollbar();
|
|
508
|
+
stopContent();
|
|
509
|
+
};
|
|
510
|
+
});
|
|
511
|
+
const style = () => scrollbarStyle(isHorizontal, dir, sizes(), userStyle);
|
|
512
|
+
if (local.render)
|
|
513
|
+
return local.render({
|
|
514
|
+
"data-orientation": orientation,
|
|
515
|
+
"data-state": () => dataState.get(),
|
|
516
|
+
...rest,
|
|
517
|
+
ref,
|
|
518
|
+
class: cls,
|
|
519
|
+
style: () => style(),
|
|
520
|
+
onPointerDown: (event) => {
|
|
521
|
+
onPointerDown?.(event);
|
|
522
|
+
if (!event.defaultPrevented)
|
|
523
|
+
scrollbarPointerDown(event, context, scrollbarValue, drag);
|
|
524
|
+
},
|
|
525
|
+
onPointerMove: (event) => {
|
|
526
|
+
onPointerMove?.(event);
|
|
527
|
+
if (!event.defaultPrevented)
|
|
528
|
+
dragScroll(event, context, scrollbarValue, drag);
|
|
529
|
+
},
|
|
530
|
+
onPointerUp: (event) => {
|
|
531
|
+
onPointerUp?.(event);
|
|
532
|
+
if (!event.defaultPrevented)
|
|
533
|
+
scrollbarPointerUp(event, context, drag);
|
|
534
|
+
},
|
|
535
|
+
onPointerEnter: (event) => {
|
|
536
|
+
onPointerEnter?.(event);
|
|
537
|
+
if (!event.defaultPrevented && machine)
|
|
538
|
+
sendScroll(machine, "POINTER_ENTER");
|
|
539
|
+
},
|
|
540
|
+
onPointerLeave: (event) => {
|
|
541
|
+
onPointerLeave?.(event);
|
|
542
|
+
if (!event.defaultPrevented && machine)
|
|
543
|
+
sendScroll(machine, "POINTER_LEAVE");
|
|
544
|
+
},
|
|
545
|
+
children: () => (<Provider token={ScrollbarContext} value={scrollbarValue}>
|
|
546
|
+
{children}
|
|
547
|
+
</Provider>),
|
|
548
|
+
}, undefined);
|
|
549
|
+
return (<div data-orientation={orientation} data-state={dataState.get()} {...rest} ref={ref} class={cls} style={style()} onPointerDown={(event) => {
|
|
550
|
+
onPointerDown?.(event);
|
|
551
|
+
if (!event.defaultPrevented)
|
|
552
|
+
scrollbarPointerDown(event, context, scrollbarValue, drag);
|
|
553
|
+
}} onPointerMove={(event) => {
|
|
554
|
+
onPointerMove?.(event);
|
|
555
|
+
if (!event.defaultPrevented)
|
|
556
|
+
dragScroll(event, context, scrollbarValue, drag);
|
|
557
|
+
}} onPointerUp={(event) => {
|
|
558
|
+
onPointerUp?.(event);
|
|
559
|
+
if (!event.defaultPrevented)
|
|
560
|
+
scrollbarPointerUp(event, context, drag);
|
|
561
|
+
}} onPointerEnter={(event) => {
|
|
562
|
+
onPointerEnter?.(event);
|
|
563
|
+
if (!event.defaultPrevented && machine)
|
|
564
|
+
sendScroll(machine, "POINTER_ENTER");
|
|
565
|
+
}} onPointerLeave={(event) => {
|
|
566
|
+
onPointerLeave?.(event);
|
|
567
|
+
if (!event.defaultPrevented && machine)
|
|
568
|
+
sendScroll(machine, "POINTER_LEAVE");
|
|
569
|
+
}}>
|
|
570
|
+
<Provider token={ScrollbarContext} value={scrollbarValue}>
|
|
571
|
+
{children}
|
|
572
|
+
</Provider>
|
|
573
|
+
</div>);
|
|
574
|
+
}
|
|
575
|
+
/** Radix `ScrollAreaScrollbarX` / `Y` style: absolute along its edge, the thumb size as a CSS variable. */
|
|
576
|
+
function scrollbarStyle(isHorizontal, dir, sizes, userStyle) {
|
|
577
|
+
const thumbSize = getThumbSize(sizes) + "px";
|
|
578
|
+
return isHorizontal
|
|
579
|
+
? {
|
|
580
|
+
position: "absolute",
|
|
581
|
+
bottom: 0,
|
|
582
|
+
left: dir === "rtl" ? "var(--rv-scroll-area-corner-width)" : 0,
|
|
583
|
+
right: dir === "ltr" ? "var(--rv-scroll-area-corner-width)" : 0,
|
|
584
|
+
"--rv-scroll-area-thumb-width": thumbSize,
|
|
585
|
+
...userStyle,
|
|
586
|
+
}
|
|
587
|
+
: {
|
|
588
|
+
position: "absolute",
|
|
589
|
+
top: 0,
|
|
590
|
+
right: dir === "ltr" ? 0 : undefined,
|
|
591
|
+
left: dir === "rtl" ? 0 : undefined,
|
|
592
|
+
bottom: "var(--rv-scroll-area-corner-height)",
|
|
593
|
+
"--rv-scroll-area-thumb-height": thumbSize,
|
|
594
|
+
...userStyle,
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
/** Radix `ScrollAreaScrollbarX` / `Y` `onResize`: scroll metrics of the viewport + the scrollbar's inner length. */
|
|
598
|
+
function measure(context, scrollbar, element) {
|
|
599
|
+
const viewport = untrack(context.viewport);
|
|
600
|
+
if (!element || !viewport)
|
|
601
|
+
return;
|
|
602
|
+
const computedStyle = element.ownerDocument.defaultView.getComputedStyle(element);
|
|
603
|
+
scrollbar.sizes.set(scrollbar.isHorizontal
|
|
604
|
+
? {
|
|
605
|
+
content: viewport.scrollWidth,
|
|
606
|
+
viewport: viewport.offsetWidth,
|
|
607
|
+
scrollbar: { size: element.clientWidth, paddingStart: toInt(computedStyle.paddingLeft), paddingEnd: toInt(computedStyle.paddingRight) },
|
|
608
|
+
}
|
|
609
|
+
: {
|
|
610
|
+
content: viewport.scrollHeight,
|
|
611
|
+
viewport: viewport.offsetHeight,
|
|
612
|
+
scrollbar: { size: element.clientHeight, paddingStart: toInt(computedStyle.paddingTop), paddingEnd: toInt(computedStyle.paddingBottom) },
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
/** Radix `onThumbPositionChange` (ScrollbarVisible): move the thumb to the viewport's scroll offset. */
|
|
616
|
+
function thumbPositionChange(context, scrollbar) {
|
|
617
|
+
const viewport = untrack(context.viewport);
|
|
618
|
+
const thumb = untrack(scrollbar.thumb);
|
|
619
|
+
if (!viewport || !thumb)
|
|
620
|
+
return;
|
|
621
|
+
const sizes = untrack(scrollbar.sizes);
|
|
622
|
+
if (scrollbar.isHorizontal) {
|
|
623
|
+
const offset = getThumbOffsetFromScroll(viewport.scrollLeft, sizes, context.dir);
|
|
624
|
+
thumb.style.transform = `translate3d(${offset}px, 0, 0)`;
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
const offset = getThumbOffsetFromScroll(viewport.scrollTop, sizes);
|
|
628
|
+
thumb.style.transform = `translate3d(0, ${offset}px, 0)`;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
/** Radix `ScrollAreaScrollbarX` / `Y` `onWheelScroll`. */
|
|
632
|
+
function wheelScroll(event, context, isHorizontal, sizes) {
|
|
633
|
+
const viewport = untrack(context.viewport);
|
|
634
|
+
if (!viewport)
|
|
635
|
+
return;
|
|
636
|
+
const maxScrollPos = sizes.content - sizes.viewport;
|
|
637
|
+
const scrollPos = isHorizontal ? viewport.scrollLeft + event.deltaX : viewport.scrollTop + event.deltaY;
|
|
638
|
+
if (isHorizontal)
|
|
639
|
+
viewport.scrollLeft = scrollPos;
|
|
640
|
+
else
|
|
641
|
+
viewport.scrollTop = scrollPos;
|
|
642
|
+
// Prevent the window scroll when wheeling on the scrollbar.
|
|
643
|
+
if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos))
|
|
644
|
+
event.preventDefault();
|
|
645
|
+
}
|
|
646
|
+
/** Radix `handleDragScroll` → `onDragScroll` (ScrollbarX / Y → ScrollbarVisible). */
|
|
647
|
+
function dragScroll(event, context, scrollbar, drag) {
|
|
648
|
+
const rect = drag.rect;
|
|
649
|
+
if (!rect)
|
|
650
|
+
return;
|
|
651
|
+
const viewport = untrack(context.viewport);
|
|
652
|
+
if (!viewport)
|
|
653
|
+
return;
|
|
654
|
+
const sizes = untrack(scrollbar.sizes);
|
|
655
|
+
if (scrollbar.isHorizontal)
|
|
656
|
+
viewport.scrollLeft = getScrollPositionFromPointer(event.clientX - rect.left, scrollbar.pointerOffset.current, sizes, context.dir);
|
|
657
|
+
else
|
|
658
|
+
viewport.scrollTop = getScrollPositionFromPointer(event.clientY - rect.top, scrollbar.pointerOffset.current, sizes);
|
|
659
|
+
}
|
|
660
|
+
function scrollbarPointerDown(event, context, scrollbar, drag) {
|
|
661
|
+
const mainPointer = 0;
|
|
662
|
+
if (event.button !== mainPointer)
|
|
663
|
+
return;
|
|
664
|
+
const element = event.target;
|
|
665
|
+
element.setPointerCapture(event.pointerId);
|
|
666
|
+
drag.rect = event.currentTarget.getBoundingClientRect();
|
|
667
|
+
// Pointer capture doesn't prevent text selection in Safari: remove the selection while dragging.
|
|
668
|
+
const body = element.ownerDocument.body;
|
|
669
|
+
drag.prevWebkitUserSelect = body.style.webkitUserSelect;
|
|
670
|
+
body.style.webkitUserSelect = "none";
|
|
671
|
+
const viewport = untrack(context.viewport);
|
|
672
|
+
if (viewport)
|
|
673
|
+
viewport.style.scrollBehavior = "auto";
|
|
674
|
+
dragScroll(event, context, scrollbar, drag);
|
|
675
|
+
}
|
|
676
|
+
function scrollbarPointerUp(event, context, drag) {
|
|
677
|
+
const element = event.target;
|
|
678
|
+
if (element.hasPointerCapture(event.pointerId))
|
|
679
|
+
element.releasePointerCapture(event.pointerId);
|
|
680
|
+
element.ownerDocument.body.style.webkitUserSelect = drag.prevWebkitUserSelect;
|
|
681
|
+
const viewport = untrack(context.viewport);
|
|
682
|
+
if (viewport)
|
|
683
|
+
viewport.style.scrollBehavior = "";
|
|
684
|
+
drag.rect = null;
|
|
685
|
+
}
|
|
686
|
+
/** The thumb of a scrollbar (Radix `ScrollArea.Thumb`): rendered while the content overflows the viewport. */
|
|
687
|
+
export function ScrollAreaThumb(props) {
|
|
688
|
+
const scrollbar = useScrollbarContext("ScrollAreaThumb");
|
|
689
|
+
const forceMount = props.forceMount;
|
|
690
|
+
const hasThumb = scrollbar.hasThumb;
|
|
691
|
+
const presence = createPresence({ present: () => !!forceMount || hasThumb(), node: scrollbar.thumb });
|
|
692
|
+
return <Show when={() => isPresent(presence())}>{() => <ThumbImpl p={props}/>}</Show>;
|
|
693
|
+
}
|
|
694
|
+
const THUMB_KEYS = ["forceMount", "children", "class", "style", "ref", "render", "onPointerDown", "onPointerUp"];
|
|
695
|
+
function ThumbImpl(props) {
|
|
696
|
+
const [local, rest] = splitProps(props.p, THUMB_KEYS);
|
|
697
|
+
const context = useScrollAreaContext("ScrollAreaThumb");
|
|
698
|
+
const scrollbar = useScrollbarContext("ScrollAreaThumb");
|
|
699
|
+
const ref = mergeRefValues(scrollbar.thumb, local.ref);
|
|
700
|
+
const cls = local.class ?? "rv-ScrollAreaThumb";
|
|
701
|
+
const style = { width: "var(--rv-scroll-area-thumb-width)", height: "var(--rv-scroll-area-thumb-height)", ...local.style };
|
|
702
|
+
const hasThumb = scrollbar.hasThumb;
|
|
703
|
+
const pointerOffset = scrollbar.pointerOffset;
|
|
704
|
+
const isHorizontal = scrollbar.isHorizontal;
|
|
705
|
+
const onPointerDown = local.onPointerDown;
|
|
706
|
+
const onPointerUp = local.onPointerUp;
|
|
707
|
+
const children = local.children;
|
|
708
|
+
// Only the native `scroll` event tells when a scroll starts / ends: while scrolling a rAF loop follows the scroll
|
|
709
|
+
// position (no scroll-linked effects, https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects).
|
|
710
|
+
clientEffect(() => {
|
|
711
|
+
const viewport = context.viewport();
|
|
712
|
+
if (!viewport)
|
|
713
|
+
return;
|
|
714
|
+
let removeUnlinkedScrollListener;
|
|
715
|
+
let timer = 0;
|
|
716
|
+
const onThumbPositionChange = () => thumbPositionChange(context, scrollbar);
|
|
717
|
+
const handleScroll = () => {
|
|
718
|
+
// Radix `useDebounceCallback(…, 100)`: stop the loop 100 ms after the last scroll event.
|
|
719
|
+
window.clearTimeout(timer);
|
|
720
|
+
timer = window.setTimeout(() => {
|
|
721
|
+
removeUnlinkedScrollListener?.();
|
|
722
|
+
removeUnlinkedScrollListener = undefined;
|
|
723
|
+
}, 100);
|
|
724
|
+
if (!removeUnlinkedScrollListener) {
|
|
725
|
+
removeUnlinkedScrollListener = addUnlinkedScrollListener(viewport, onThumbPositionChange);
|
|
726
|
+
onThumbPositionChange();
|
|
727
|
+
}
|
|
728
|
+
};
|
|
729
|
+
untrack(onThumbPositionChange);
|
|
730
|
+
viewport.addEventListener("scroll", handleScroll);
|
|
731
|
+
return () => {
|
|
732
|
+
viewport.removeEventListener("scroll", handleScroll);
|
|
733
|
+
window.clearTimeout(timer);
|
|
734
|
+
removeUnlinkedScrollListener?.();
|
|
735
|
+
};
|
|
736
|
+
});
|
|
737
|
+
if (local.render)
|
|
738
|
+
return local.render({
|
|
739
|
+
"data-state": () => (hasThumb() ? "visible" : "hidden"),
|
|
740
|
+
...rest,
|
|
741
|
+
ref,
|
|
742
|
+
class: cls,
|
|
743
|
+
style,
|
|
744
|
+
onPointerDown: (event) => {
|
|
745
|
+
onPointerDown?.(event);
|
|
746
|
+
if (!event.defaultPrevented)
|
|
747
|
+
thumbPointerDown(event, pointerOffset, isHorizontal);
|
|
748
|
+
},
|
|
749
|
+
onPointerUp: (event) => {
|
|
750
|
+
onPointerUp?.(event);
|
|
751
|
+
if (!event.defaultPrevented)
|
|
752
|
+
pointerOffset.current = 0;
|
|
753
|
+
},
|
|
754
|
+
children,
|
|
755
|
+
}, undefined);
|
|
756
|
+
return (<div data-state={hasThumb() ? "visible" : "hidden"} {...rest} ref={ref} class={cls} style={style} onPointerDown={(event) => {
|
|
757
|
+
onPointerDown?.(event);
|
|
758
|
+
if (!event.defaultPrevented)
|
|
759
|
+
thumbPointerDown(event, pointerOffset, isHorizontal);
|
|
760
|
+
}} onPointerUp={(event) => {
|
|
761
|
+
onPointerUp?.(event);
|
|
762
|
+
if (!event.defaultPrevented)
|
|
763
|
+
pointerOffset.current = 0;
|
|
764
|
+
}}>
|
|
765
|
+
{children}
|
|
766
|
+
</div>);
|
|
767
|
+
}
|
|
768
|
+
/** Radix Thumb `onPointerDownCapture` → `onThumbPointerDown`: where the pointer grabbed the thumb. */
|
|
769
|
+
function thumbPointerDown(event, pointerOffset, isHorizontal) {
|
|
770
|
+
const thumbRect = event.target.getBoundingClientRect();
|
|
771
|
+
pointerOffset.current = isHorizontal ? event.clientX - thumbRect.left : event.clientY - thumbRect.top;
|
|
772
|
+
}
|
|
773
|
+
/** The corner where both scrollbars meet (Radix `ScrollArea.Corner`): rendered while both are, except for `type="scroll"`. */
|
|
774
|
+
export function ScrollAreaCorner(props) {
|
|
775
|
+
const context = useScrollAreaContext("ScrollAreaCorner");
|
|
776
|
+
const type = context.type;
|
|
777
|
+
const xMounted = context.scrollbarXMounted;
|
|
778
|
+
const yMounted = context.scrollbarYMounted;
|
|
779
|
+
return <Show when={() => type !== "scroll" && xMounted() && yMounted()}>{() => <CornerImpl p={props}/>}</Show>;
|
|
780
|
+
}
|
|
781
|
+
const CORNER_KEYS = ["children", "class", "style", "ref", "render"];
|
|
782
|
+
function CornerImpl(props) {
|
|
783
|
+
const [local, rest] = splitProps(props.p, CORNER_KEYS);
|
|
784
|
+
const context = useScrollAreaContext("ScrollAreaCorner");
|
|
785
|
+
const width = _regionState(() => signal(0));
|
|
786
|
+
const height = _regionState(() => signal(0));
|
|
787
|
+
clientEffect(() => {
|
|
788
|
+
const scrollbarX = context.scrollbarX();
|
|
789
|
+
return observeResize(scrollbarX, () => {
|
|
790
|
+
const h = untrack(context.scrollbarX)?.offsetHeight || 0;
|
|
791
|
+
context.cornerHeight.set(h);
|
|
792
|
+
height.set(h);
|
|
793
|
+
});
|
|
794
|
+
});
|
|
795
|
+
clientEffect(() => {
|
|
796
|
+
const scrollbarY = context.scrollbarY();
|
|
797
|
+
return observeResize(scrollbarY, () => {
|
|
798
|
+
const w = untrack(context.scrollbarY)?.offsetWidth || 0;
|
|
799
|
+
context.cornerWidth.set(w);
|
|
800
|
+
width.set(w);
|
|
801
|
+
});
|
|
802
|
+
});
|
|
803
|
+
// Reset the corner sizes when the corner unmounts (one scrollbar hidden): the CSS variables must not leave a gap
|
|
804
|
+
// on the remaining scrollbar (radix-ui/primitives#2383).
|
|
805
|
+
clientEffect(() => () => {
|
|
806
|
+
context.cornerWidth.set(0);
|
|
807
|
+
context.cornerHeight.set(0);
|
|
808
|
+
});
|
|
809
|
+
const dir = context.dir;
|
|
810
|
+
const userStyle = local.style;
|
|
811
|
+
const cls = local.class ?? "rv-ScrollAreaCorner";
|
|
812
|
+
// `{ current }` / callback / `ref()` user refs (the runtime binds functions and `ref()` signals only).
|
|
813
|
+
const ref = mergeRefValues(createRef(), local.ref);
|
|
814
|
+
const children = local.children;
|
|
815
|
+
const render = local.render;
|
|
816
|
+
const style = () => ({
|
|
817
|
+
width: width(),
|
|
818
|
+
height: height(),
|
|
819
|
+
position: "absolute",
|
|
820
|
+
right: dir === "ltr" ? 0 : undefined,
|
|
821
|
+
left: dir === "rtl" ? 0 : undefined,
|
|
822
|
+
bottom: 0,
|
|
823
|
+
...userStyle,
|
|
824
|
+
});
|
|
825
|
+
return (<Show when={() => !!(width() && height())}>
|
|
826
|
+
{() => render ? (render({ ...rest, ref, class: cls, style: () => style(), children }, undefined)) : (<div {...rest} ref={ref} class={cls} style={style()}>
|
|
827
|
+
{children}
|
|
828
|
+
</div>)}
|
|
829
|
+
</Show>);
|
|
830
|
+
}
|
|
831
|
+
/* -----------------------------------------------------------------------------------------------*/
|
|
832
|
+
function toInt(value) {
|
|
833
|
+
return value ? parseInt(value, 10) : 0;
|
|
834
|
+
}
|
|
835
|
+
function getThumbRatio(viewportSize, contentSize) {
|
|
836
|
+
const ratio = viewportSize / contentSize;
|
|
837
|
+
return isNaN(ratio) ? 0 : ratio;
|
|
838
|
+
}
|
|
839
|
+
function getThumbSize(sizes) {
|
|
840
|
+
const ratio = getThumbRatio(sizes.viewport, sizes.content);
|
|
841
|
+
const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;
|
|
842
|
+
const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;
|
|
843
|
+
// Minimum of 18 matches the macOS minimum.
|
|
844
|
+
return Math.max(thumbSize, 18);
|
|
845
|
+
}
|
|
846
|
+
function getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = "ltr") {
|
|
847
|
+
const thumbSizePx = getThumbSize(sizes);
|
|
848
|
+
const thumbCenter = thumbSizePx / 2;
|
|
849
|
+
const offset = pointerOffset || thumbCenter;
|
|
850
|
+
const thumbOffsetFromEnd = thumbSizePx - offset;
|
|
851
|
+
const minPointerPos = sizes.scrollbar.paddingStart + offset;
|
|
852
|
+
const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;
|
|
853
|
+
const maxScrollPos = sizes.content - sizes.viewport;
|
|
854
|
+
const scrollRange = dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];
|
|
855
|
+
return linearScale([minPointerPos, maxPointerPos], scrollRange)(pointerPos);
|
|
856
|
+
}
|
|
857
|
+
function getThumbOffsetFromScroll(scrollPos, sizes, dir = "ltr") {
|
|
858
|
+
const thumbSizePx = getThumbSize(sizes);
|
|
859
|
+
const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;
|
|
860
|
+
const scrollbar = sizes.scrollbar.size - scrollbarPadding;
|
|
861
|
+
const maxScrollPos = sizes.content - sizes.viewport;
|
|
862
|
+
const maxThumbPos = scrollbar - thumbSizePx;
|
|
863
|
+
const scrollClampRange = dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];
|
|
864
|
+
const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);
|
|
865
|
+
return linearScale([0, maxScrollPos], [0, maxThumbPos])(scrollWithoutMomentum);
|
|
866
|
+
}
|
|
867
|
+
/** @radix-ui/number `clamp`. */
|
|
868
|
+
function clamp(value, [min, max]) {
|
|
869
|
+
return Math.min(max, Math.max(min, value));
|
|
870
|
+
}
|
|
871
|
+
// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js
|
|
872
|
+
function linearScale(input, output) {
|
|
873
|
+
return (value) => {
|
|
874
|
+
if (input[0] === input[1] || output[0] === output[1])
|
|
875
|
+
return output[0];
|
|
876
|
+
const ratio = (output[1] - output[0]) / (input[1] - input[0]);
|
|
877
|
+
return output[0] + ratio * (value - input[0]);
|
|
878
|
+
};
|
|
879
|
+
}
|
|
880
|
+
function isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {
|
|
881
|
+
return scrollPos > 0 && scrollPos < maxScrollPos;
|
|
882
|
+
}
|
|
883
|
+
/* -----------------------------------------------------------------------------------------------*/
|
|
884
|
+
export { ScrollArea as Root, ScrollAreaViewport as Viewport, ScrollAreaContent as Content, ScrollAreaScrollbar as Scrollbar, ScrollAreaThumb as Thumb, ScrollAreaCorner as Corner, };
|