@rivetjs/cdk 0.0.0-stage → 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +483 -0
- package/README.md +10 -2
- package/_adapters/collection.d.ts +160 -0
- package/_adapters/collection.js +235 -0
- package/_adapters/collections.d.ts +325 -0
- package/_adapters/collections.js +934 -0
- package/_adapters/dom-collection.d.ts +42 -0
- package/_adapters/dom-collection.js +228 -0
- package/_adapters/grid-selection.d.ts +115 -0
- package/_adapters/grid-selection.js +436 -0
- package/_adapters/interactions.d.ts +19 -0
- package/_adapters/interactions.js +45 -0
- package/_adapters/intl.d.ts +8 -0
- package/_adapters/intl.js +106 -0
- package/_adapters/press.d.ts +22 -0
- package/_adapters/press.js +34 -0
- package/_adapters/selectable.d.ts +132 -0
- package/_adapters/selectable.js +599 -0
- package/_adapters/selection.d.ts +120 -0
- package/_adapters/selection.js +709 -0
- package/_adapters/type-select.d.ts +8 -0
- package/_adapters/type-select.js +59 -0
- package/a11y/aria-describer.d.ts +46 -0
- package/a11y/aria-describer.js +169 -0
- package/a11y/focus-monitor.d.ts +98 -0
- package/a11y/focus-monitor.js +321 -0
- package/a11y/focus-trap.d.ts +137 -0
- package/a11y/focus-trap.js +378 -0
- package/a11y/high-contrast.d.ts +26 -0
- package/a11y/high-contrast.js +84 -0
- package/a11y/index.d.ts +37 -0
- package/a11y/index.js +97 -0
- package/a11y/interactivity-checker.d.ts +18 -0
- package/a11y/interactivity-checker.js +126 -0
- package/a11y/key-manager.d.ts +152 -0
- package/a11y/key-manager.js +397 -0
- package/a11y/live-announcer.d.ts +53 -0
- package/a11y/live-announcer.js +143 -0
- package/accordion/index.d.ts +2 -0
- package/accordion/index.jsx +10 -0
- package/announcer/index.d.ts +8 -0
- package/announcer/index.jsx +22 -0
- package/announcer/live-announcer.d.ts +15 -0
- package/announcer/live-announcer.js +123 -0
- package/autocomplete/behaviour.d.ts +94 -0
- package/autocomplete/behaviour.jsx +423 -0
- package/autocomplete/contexts.d.ts +54 -0
- package/autocomplete/contexts.js +28 -0
- package/autocomplete/index.d.ts +12 -0
- package/autocomplete/index.jsx +31 -0
- package/autocomplete/intl.d.ts +2 -0
- package/autocomplete/intl.js +36 -0
- package/bidi/bidi-dir.d.ts +23 -0
- package/bidi/bidi-dir.jsx +36 -0
- package/bidi/index.d.ts +58 -0
- package/bidi/index.js +84 -0
- package/breadcrumbs/behaviour.d.ts +6 -0
- package/breadcrumbs/behaviour.js +17 -0
- package/breadcrumbs/index.d.ts +68 -0
- package/breadcrumbs/index.jsx +224 -0
- package/breadcrumbs/intl.d.ts +3 -0
- package/breadcrumbs/intl.js +104 -0
- package/button/behaviour.d.ts +61 -0
- package/button/behaviour.js +90 -0
- package/button/index.d.ts +38 -0
- package/button/index.jsx +376 -0
- package/button/press.d.ts +25 -0
- package/button/press.js +54 -0
- package/calendar/behaviour.d.ts +250 -0
- package/calendar/behaviour.jsx +939 -0
- package/calendar/index.d.ts +157 -0
- package/calendar/index.jsx +484 -0
- package/calendar/intl.d.ts +3 -0
- package/calendar/intl.js +36 -0
- package/carousel/behaviour.d.ts +50 -0
- package/carousel/behaviour.jsx +365 -0
- package/carousel/engine/Alignment.d.ts +5 -0
- package/carousel/engine/Alignment.js +24 -0
- package/carousel/engine/Animations.d.ts +13 -0
- package/carousel/engine/Animations.js +28 -0
- package/carousel/engine/Axis.d.ts +14 -0
- package/carousel/engine/Axis.js +35 -0
- package/carousel/engine/Counter.d.ts +7 -0
- package/carousel/engine/Counter.js +32 -0
- package/carousel/engine/DragHandler.d.ts +22 -0
- package/carousel/engine/DragHandler.js +141 -0
- package/carousel/engine/DragTracker.d.ts +10 -0
- package/carousel/engine/DragTracker.js +29 -0
- package/carousel/engine/EmblaCarousel.d.ts +32 -0
- package/carousel/engine/EmblaCarousel.js +177 -0
- package/carousel/engine/Engine.d.ts +64 -0
- package/carousel/engine/Engine.js +137 -0
- package/carousel/engine/EventHandler.d.ts +27 -0
- package/carousel/engine/EventHandler.js +33 -0
- package/carousel/engine/EventStore.d.ts +9 -0
- package/carousel/engine/EventStore.js +25 -0
- package/carousel/engine/NodeRects.d.ts +12 -0
- package/carousel/engine/NodeRects.js +18 -0
- package/carousel/engine/Options.d.ts +40 -0
- package/carousel/engine/Options.js +22 -0
- package/carousel/engine/OptionsHandler.d.ts +10 -0
- package/carousel/engine/OptionsHandler.js +26 -0
- package/carousel/engine/PercentOfView.d.ts +4 -0
- package/carousel/engine/PercentOfView.js +9 -0
- package/carousel/engine/Plugins.d.ts +16 -0
- package/carousel/engine/Plugins.js +1 -0
- package/carousel/engine/PluginsHandler.d.ts +8 -0
- package/carousel/engine/PluginsHandler.js +16 -0
- package/carousel/engine/ResizeHandler.d.ts +13 -0
- package/carousel/engine/ResizeHandler.js +51 -0
- package/carousel/engine/ScrollBounds.d.ts +10 -0
- package/carousel/engine/ScrollBounds.js +41 -0
- package/carousel/engine/ScrollContain.d.ts +7 -0
- package/carousel/engine/ScrollContain.js +52 -0
- package/carousel/engine/ScrollLimit.d.ts +5 -0
- package/carousel/engine/ScrollLimit.js +13 -0
- package/carousel/engine/ScrollLooper.d.ts +6 -0
- package/carousel/engine/ScrollLooper.js +26 -0
- package/carousel/engine/ScrollProgress.d.ts +5 -0
- package/carousel/engine/ScrollProgress.js +11 -0
- package/carousel/engine/ScrollSnaps.d.ts +9 -0
- package/carousel/engine/ScrollSnaps.js +26 -0
- package/carousel/engine/ScrollTarget.d.ts +12 -0
- package/carousel/engine/ScrollTarget.js +47 -0
- package/carousel/engine/ScrollTo.d.ts +11 -0
- package/carousel/engine/ScrollTo.js +36 -0
- package/carousel/engine/SlideFocus.d.ts +13 -0
- package/carousel/engine/SlideFocus.js +39 -0
- package/carousel/engine/SlideLooper.d.ts +18 -0
- package/carousel/engine/SlideLooper.js +78 -0
- package/carousel/engine/SlideRegistry.d.ts +7 -0
- package/carousel/engine/SlideRegistry.js +31 -0
- package/carousel/engine/SlideSizes.d.ts +10 -0
- package/carousel/engine/SlideSizes.js +41 -0
- package/carousel/engine/SlidesHandler.d.ts +10 -0
- package/carousel/engine/SlidesHandler.js +36 -0
- package/carousel/engine/SlidesInView.d.ts +8 -0
- package/carousel/engine/SlidesInView.js +59 -0
- package/carousel/engine/SlidesToScroll.d.ts +7 -0
- package/carousel/engine/SlidesToScroll.js +41 -0
- package/carousel/engine/Translate.d.ts +7 -0
- package/carousel/engine/Translate.js +38 -0
- package/carousel/engine/index.d.ts +11 -0
- package/carousel/engine/index.js +1 -0
- package/carousel/engine/utils.d.ts +15 -0
- package/carousel/engine/utils.js +45 -0
- package/carousel/index.d.ts +202 -0
- package/carousel/index.jsx +469 -0
- package/carousel/plugins/auto-height/AutoHeight.d.ts +14 -0
- package/carousel/plugins/auto-height/AutoHeight.js +43 -0
- package/carousel/plugins/auto-height/Options.d.ts +2 -0
- package/carousel/plugins/auto-height/Options.js +1 -0
- package/carousel/plugins/auto-height/index.d.ts +2 -0
- package/carousel/plugins/auto-height/index.js +1 -0
- package/carousel/plugins/auto-scroll/AutoScroll.d.ts +25 -0
- package/carousel/plugins/auto-scroll/AutoScroll.js +185 -0
- package/carousel/plugins/auto-scroll/Options.d.ts +13 -0
- package/carousel/plugins/auto-scroll/Options.js +12 -0
- package/carousel/plugins/auto-scroll/index.d.ts +2 -0
- package/carousel/plugins/auto-scroll/index.js +1 -0
- package/carousel/plugins/auto-scroll/utils.d.ts +3 -0
- package/carousel/plugins/auto-scroll/utils.js +4 -0
- package/carousel/plugins/autoplay/Autoplay.d.ts +29 -0
- package/carousel/plugins/autoplay/Autoplay.js +173 -0
- package/carousel/plugins/autoplay/Options.d.ts +14 -0
- package/carousel/plugins/autoplay/Options.js +12 -0
- package/carousel/plugins/autoplay/index.d.ts +2 -0
- package/carousel/plugins/autoplay/index.js +1 -0
- package/carousel/plugins/autoplay/utils.d.ts +4 -0
- package/carousel/plugins/autoplay/utils.js +11 -0
- package/carousel/plugins/class-names/ClassNames.d.ts +14 -0
- package/carousel/plugins/class-names/ClassNames.js +98 -0
- package/carousel/plugins/class-names/Options.d.ts +13 -0
- package/carousel/plugins/class-names/Options.js +9 -0
- package/carousel/plugins/class-names/index.d.ts +2 -0
- package/carousel/plugins/class-names/index.js +1 -0
- package/carousel/plugins/class-names/utils.d.ts +4 -0
- package/carousel/plugins/class-names/utils.js +14 -0
- package/carousel/plugins/fade/Fade.d.ts +14 -0
- package/carousel/plugins/fade/Fade.js +199 -0
- package/carousel/plugins/fade/Options.d.ts +2 -0
- package/carousel/plugins/fade/Options.js +1 -0
- package/carousel/plugins/fade/index.d.ts +2 -0
- package/carousel/plugins/fade/index.js +1 -0
- package/carousel/plugins/fade/utils.d.ts +2 -0
- package/carousel/plugins/fade/utils.js +8 -0
- package/carousel/state.d.ts +81 -0
- package/carousel/state.js +71 -0
- package/chat/index.d.ts +83 -0
- package/chat/index.jsx +287 -0
- package/checkbox/behaviour.d.ts +172 -0
- package/checkbox/behaviour.jsx +412 -0
- package/checkbox/index.d.ts +168 -0
- package/checkbox/index.jsx +310 -0
- package/clipboard/index.d.ts +49 -0
- package/clipboard/index.js +136 -0
- package/coercion/index.d.ts +36 -0
- package/coercion/index.js +58 -0
- package/collections/base.d.ts +115 -0
- package/collections/base.js +346 -0
- package/collections/builder.d.ts +44 -0
- package/collections/builder.js +283 -0
- package/collections/components.d.ts +252 -0
- package/collections/components.jsx +745 -0
- package/collections/data-source.d.ts +26 -0
- package/collections/data-source.js +27 -0
- package/collections/dom.d.ts +34 -0
- package/collections/dom.js +127 -0
- package/collections/grid.d.ts +45 -0
- package/collections/grid.js +125 -0
- package/collections/hidden.d.ts +4 -0
- package/collections/hidden.js +12 -0
- package/collections/index.d.ts +45 -0
- package/collections/index.js +105 -0
- package/collections/list-state.d.ts +99 -0
- package/collections/list-state.js +156 -0
- package/collections/list.d.ts +20 -0
- package/collections/list.js +77 -0
- package/collections/nodes.d.ts +17 -0
- package/collections/nodes.js +107 -0
- package/collections/row-stamps.d.ts +17 -0
- package/collections/row-stamps.js +108 -0
- package/collections/selection-model.d.ts +93 -0
- package/collections/selection-model.js +192 -0
- package/collections/server-dev.d.ts +6 -0
- package/collections/server-dev.js +18 -0
- package/collections/server-off.d.ts +6 -0
- package/collections/server-off.js +9 -0
- package/collections/server-on.d.ts +29 -0
- package/collections/server-on.jsx +86 -0
- package/collections/table.d.ts +114 -0
- package/collections/table.js +439 -0
- package/collections/tree-state.d.ts +47 -0
- package/collections/tree-state.js +73 -0
- package/collections/tree.d.ts +20 -0
- package/collections/tree.js +66 -0
- package/collections/types.d.ts +229 -0
- package/collections/types.js +4 -0
- package/collections/unique-selection-dispatcher.d.ts +10 -0
- package/collections/unique-selection-dispatcher.js +25 -0
- package/color/area-state.d.ts +99 -0
- package/color/area-state.js +160 -0
- package/color/aria-intl.d.ts +3 -0
- package/color/aria-intl.js +274 -0
- package/color/channel-field-state.d.ts +50 -0
- package/color/channel-field-state.jsx +87 -0
- package/color/color.d.ts +78 -0
- package/color/color.js +738 -0
- package/color/field-state.d.ts +66 -0
- package/color/field-state.jsx +159 -0
- package/color/index.d.ts +58 -0
- package/color/index.js +88 -0
- package/color/intl.d.ts +3 -0
- package/color/intl.js +1328 -0
- package/color/picker-state.d.ts +20 -0
- package/color/picker-state.js +19 -0
- package/color/slider-state.d.ts +78 -0
- package/color/slider-state.jsx +98 -0
- package/color/value.d.ts +27 -0
- package/color/value.js +36 -0
- package/color/wheel-state.d.ts +77 -0
- package/color/wheel-state.js +152 -0
- package/color-area/behaviour.d.ts +161 -0
- package/color-area/behaviour.jsx +454 -0
- package/color-area/index.d.ts +34 -0
- package/color-area/index.jsx +187 -0
- package/color-field/behaviour.d.ts +112 -0
- package/color-field/behaviour.jsx +262 -0
- package/color-field/index.d.ts +72 -0
- package/color-field/index.jsx +309 -0
- package/color-picker/index.d.ts +19 -0
- package/color-picker/index.jsx +49 -0
- package/color-slider/behaviour.d.ts +103 -0
- package/color-slider/behaviour.jsx +234 -0
- package/color-slider/index.d.ts +40 -0
- package/color-slider/index.jsx +162 -0
- package/color-swatch/behaviour.d.ts +40 -0
- package/color-swatch/behaviour.js +36 -0
- package/color-swatch/index.d.ts +29 -0
- package/color-swatch/index.jsx +82 -0
- package/color-swatch-picker/index.d.ts +62 -0
- package/color-swatch-picker/index.jsx +95 -0
- package/color-swatch-picker/intl.d.ts +3 -0
- package/color-swatch-picker/intl.js +104 -0
- package/color-thumb/index.d.ts +85 -0
- package/color-thumb/index.jsx +93 -0
- package/color-wheel/behaviour.d.ts +123 -0
- package/color-wheel/behaviour.jsx +301 -0
- package/color-wheel/index.d.ts +50 -0
- package/color-wheel/index.jsx +166 -0
- package/combobox/behaviour.d.ts +120 -0
- package/combobox/behaviour.jsx +588 -0
- package/combobox/index.d.ts +101 -0
- package/combobox/index.jsx +365 -0
- package/combobox/intl.d.ts +2 -0
- package/combobox/intl.js +240 -0
- package/compare/behaviour.d.ts +101 -0
- package/compare/behaviour.js +288 -0
- package/compare/index.d.ts +58 -0
- package/compare/index.jsx +129 -0
- package/data/async-list.d.ts +78 -0
- package/data/async-list.jsx +257 -0
- package/data/index.d.ts +3 -0
- package/data/index.jsx +6 -0
- package/data/list-data.d.ts +88 -0
- package/data/list-data.jsx +210 -0
- package/data/tree-data.d.ts +59 -0
- package/data/tree-data.jsx +278 -0
- package/data-grid/behaviour.d.ts +95 -0
- package/data-grid/behaviour.js +725 -0
- package/data-grid/index.d.ts +138 -0
- package/data-grid/index.jsx +452 -0
- package/data-grid/state.d.ts +131 -0
- package/data-grid/state.js +288 -0
- package/date/CalendarDate.d.ts +207 -0
- package/date/CalendarDate.js +374 -0
- package/date/DateFormatter.d.ts +24 -0
- package/date/DateFormatter.js +175 -0
- package/date/calendars/BuddhistCalendar.d.ts +16 -0
- package/date/calendars/BuddhistCalendar.js +46 -0
- package/date/calendars/EthiopicCalendar.d.ts +45 -0
- package/date/calendars/EthiopicCalendar.js +178 -0
- package/date/calendars/GregorianCalendar.d.ts +26 -0
- package/date/calendars/GregorianCalendar.js +122 -0
- package/date/calendars/HebrewCalendar.d.ts +21 -0
- package/date/calendars/HebrewCalendar.js +174 -0
- package/date/calendars/IndianCalendar.d.ts +17 -0
- package/date/calendars/IndianCalendar.js +111 -0
- package/date/calendars/IslamicCalendar.d.ts +51 -0
- package/date/calendars/IslamicCalendar.js +205 -0
- package/date/calendars/JapaneseCalendar.d.ts +22 -0
- package/date/calendars/JapaneseCalendar.js +148 -0
- package/date/calendars/PersianCalendar.d.ts +19 -0
- package/date/calendars/PersianCalendar.js +85 -0
- package/date/calendars/TaiwanCalendar.d.ts +19 -0
- package/date/calendars/TaiwanCalendar.js +70 -0
- package/date/conversion.d.ts +45 -0
- package/date/conversion.js +269 -0
- package/date/createCalendar.d.ts +3 -0
- package/date/createCalendar.js +55 -0
- package/date/index.d.ts +20 -0
- package/date/index.js +30 -0
- package/date/manipulation.d.ts +25 -0
- package/date/manipulation.js +399 -0
- package/date/queries.d.ts +93 -0
- package/date/queries.js +303 -0
- package/date/serialize.d.ts +18 -0
- package/date/serialize.js +55 -0
- package/date/string.d.ts +36 -0
- package/date/string.js +223 -0
- package/date/types.d.ts +136 -0
- package/date/types.js +14 -0
- package/date/utils.d.ts +4 -0
- package/date/utils.js +16 -0
- package/date/weekStartData.d.ts +1 -0
- package/date/weekStartData.js +112 -0
- package/date-field/behaviour.d.ts +188 -0
- package/date-field/behaviour.jsx +1025 -0
- package/date-field/index.d.ts +150 -0
- package/date-field/index.jsx +354 -0
- package/date-field/intl.d.ts +3 -0
- package/date-field/intl.js +36 -0
- package/date-field/live-value.d.ts +22 -0
- package/date-field/live-value.jsx +44 -0
- package/date-picker/behaviour.d.ts +95 -0
- package/date-picker/behaviour.jsx +343 -0
- package/date-picker/index.d.ts +66 -0
- package/date-picker/index.jsx +243 -0
- package/dialog/behaviour.d.ts +63 -0
- package/dialog/behaviour.jsx +90 -0
- package/dialog/contexts.d.ts +12 -0
- package/dialog/contexts.js +8 -0
- package/dialog/index.d.ts +48 -0
- package/dialog/index.jsx +301 -0
- package/disclosure/behaviour.d.ts +50 -0
- package/disclosure/behaviour.jsx +128 -0
- package/disclosure/details.d.ts +21 -0
- package/disclosure/details.jsx +14 -0
- package/disclosure/index.d.ts +92 -0
- package/disclosure/index.jsx +300 -0
- package/drag-drop/cdk-index.d.ts +22 -0
- package/drag-drop/cdk-index.jsx +25 -0
- package/drag-drop/directives/assertions.d.ts +6 -0
- package/drag-drop/directives/assertions.js +13 -0
- package/drag-drop/directives/config.d.ts +30 -0
- package/drag-drop/directives/config.js +7 -0
- package/drag-drop/directives/drag-handle.d.ts +10 -0
- package/drag-drop/directives/drag-handle.js +29 -0
- package/drag-drop/directives/drag.d.ts +210 -0
- package/drag-drop/directives/drag.js +550 -0
- package/drag-drop/directives/drop-list-group.d.ts +25 -0
- package/drag-drop/directives/drop-list-group.js +55 -0
- package/drag-drop/directives/drop-list.d.ts +163 -0
- package/drag-drop/directives/drop-list.js +396 -0
- package/drag-drop/directives/registry.d.ts +32 -0
- package/drag-drop/directives/registry.js +61 -0
- package/drag-drop/dom/clone-node.d.ts +2 -0
- package/drag-drop/dom/clone-node.js +58 -0
- package/drag-drop/dom/coerce.d.ts +6 -0
- package/drag-drop/dom/coerce.js +8 -0
- package/drag-drop/dom/dom-rect.d.ts +37 -0
- package/drag-drop/dom/dom-rect.js +71 -0
- package/drag-drop/dom/fake-event.d.ts +4 -0
- package/drag-drop/dom/fake-event.js +22 -0
- package/drag-drop/dom/inherited-text.d.ts +4 -0
- package/drag-drop/dom/inherited-text.js +44 -0
- package/drag-drop/dom/layout-shift.d.ts +8 -0
- package/drag-drop/dom/layout-shift.js +87 -0
- package/drag-drop/dom/mount-content.d.ts +2 -0
- package/drag-drop/dom/mount-content.js +7 -0
- package/drag-drop/dom/parent-position-tracker.d.ts +32 -0
- package/drag-drop/dom/parent-position-tracker.js +71 -0
- package/drag-drop/dom/root-node.d.ts +21 -0
- package/drag-drop/dom/root-node.js +41 -0
- package/drag-drop/dom/shadow-dom.d.ts +4 -0
- package/drag-drop/dom/shadow-dom.js +18 -0
- package/drag-drop/dom/styling.d.ts +52 -0
- package/drag-drop/dom/styling.js +86 -0
- package/drag-drop/dom/transition-duration.d.ts +2 -0
- package/drag-drop/dom/transition-duration.js +29 -0
- package/drag-drop/drag-drop-registry.d.ts +69 -0
- package/drag-drop/drag-drop-registry.js +224 -0
- package/drag-drop/drag-drop.d.ts +19 -0
- package/drag-drop/drag-drop.js +10 -0
- package/drag-drop/drag-events.d.ts +117 -0
- package/drag-drop/drag-events.js +1 -0
- package/drag-drop/drag-handle.d.ts +18 -0
- package/drag-drop/drag-handle.jsx +53 -0
- package/drag-drop/drag-placeholder.d.ts +8 -0
- package/drag-drop/drag-placeholder.jsx +25 -0
- package/drag-drop/drag-preview.d.ts +10 -0
- package/drag-drop/drag-preview.jsx +31 -0
- package/drag-drop/drag-ref.d.ts +476 -0
- package/drag-drop/drag-ref.js +1306 -0
- package/drag-drop/drag-utils.d.ts +25 -0
- package/drag-drop/drag-utils.js +53 -0
- package/drag-drop/drag.d.ts +23 -0
- package/drag-drop/drag.jsx +128 -0
- package/drag-drop/drop-list-group.d.ts +22 -0
- package/drag-drop/drop-list-group.jsx +19 -0
- package/drag-drop/drop-list-ref.d.ts +295 -0
- package/drag-drop/drop-list-ref.js +707 -0
- package/drag-drop/drop-list.d.ts +19 -0
- package/drag-drop/drop-list.jsx +87 -0
- package/drag-drop/index.d.ts +1 -0
- package/drag-drop/index.jsx +4 -0
- package/drag-drop/lazy-refs.d.ts +28 -0
- package/drag-drop/lazy-refs.js +144 -0
- package/drag-drop/preview-ref.d.ts +38 -0
- package/drag-drop/preview-ref.js +132 -0
- package/drag-drop/sorting/drop-list-sort-strategy.d.ts +29 -0
- package/drag-drop/sorting/drop-list-sort-strategy.js +1 -0
- package/drag-drop/sorting/mixed-sort-strategy.d.ts +99 -0
- package/drag-drop/sorting/mixed-sort-strategy.js +259 -0
- package/drag-drop/sorting/single-axis-sort-strategy.d.ts +112 -0
- package/drag-drop/sorting/single-axis-sort-strategy.js +343 -0
- package/file-trigger/index.d.ts +24 -0
- package/file-trigger/index.jsx +41 -0
- package/flip/index.d.ts +59 -0
- package/flip/index.js +124 -0
- package/focus/focus-ring.d.ts +42 -0
- package/focus/focus-ring.jsx +77 -0
- package/focus/focus-scope.d.ts +51 -0
- package/focus/focus-scope.jsx +431 -0
- package/focus/focusable.d.ts +33 -0
- package/focus/focusable.jsx +93 -0
- package/focus/index.d.ts +74 -0
- package/focus/index.js +274 -0
- package/form/behaviour.d.ts +29 -0
- package/form/behaviour.js +145 -0
- package/form/field-error.d.ts +38 -0
- package/form/field-error.jsx +67 -0
- package/form/index.d.ts +77 -0
- package/form/index.jsx +116 -0
- package/grid/behaviour.d.ts +290 -0
- package/grid/behaviour.js +683 -0
- package/grid/intl.d.ts +2 -0
- package/grid/intl.js +36 -0
- package/grid/keyboard-delegate.d.ts +56 -0
- package/grid/keyboard-delegate.js +316 -0
- package/grid-list/behaviour.d.ts +248 -0
- package/grid-list/behaviour.js +616 -0
- package/grid-list/index.d.ts +204 -0
- package/grid-list/index.jsx +721 -0
- package/grid-list/row.d.ts +24 -0
- package/grid-list/row.js +57 -0
- package/group/index.d.ts +48 -0
- package/group/index.jsx +126 -0
- package/header/index.d.ts +13 -0
- package/header/index.jsx +34 -0
- package/heading/index.d.ts +19 -0
- package/heading/index.jsx +55 -0
- package/highlight/index.d.ts +12 -0
- package/highlight/index.jsx +357 -0
- package/i18n/filter.d.ts +16 -0
- package/i18n/filter.js +66 -0
- package/i18n/i18n-provider.d.ts +10 -0
- package/i18n/i18n-provider.jsx +15 -0
- package/i18n/index.d.ts +27 -0
- package/i18n/index.js +115 -0
- package/i18n/intl-cache.d.ts +4 -0
- package/i18n/intl-cache.js +40 -0
- package/i18n/list-formatter.d.ts +2 -0
- package/i18n/list-formatter.js +11 -0
- package/input/index.d.ts +51 -0
- package/input/index.jsx +95 -0
- package/interactions/controllable.d.ts +42 -0
- package/interactions/controllable.js +67 -0
- package/interactions/focus-visible.d.ts +68 -0
- package/interactions/focus-visible.jsx +291 -0
- package/interactions/focus.d.ts +58 -0
- package/interactions/focus.jsx +152 -0
- package/interactions/hover.d.ts +54 -0
- package/interactions/hover.jsx +139 -0
- package/interactions/index.d.ts +1 -0
- package/interactions/index.js +3 -0
- package/interactions/interact-outside.d.ts +24 -0
- package/interactions/interact-outside.jsx +57 -0
- package/interactions/keyboard.d.ts +28 -0
- package/interactions/keyboard.jsx +51 -0
- package/interactions/long-press.d.ts +41 -0
- package/interactions/long-press.jsx +79 -0
- package/interactions/merge-props.d.ts +54 -0
- package/interactions/merge-props.jsx +257 -0
- package/interactions/move.d.ts +48 -0
- package/interactions/move.jsx +96 -0
- package/interactions/press.d.ts +129 -0
- package/interactions/press.jsx +539 -0
- package/interactions/pressable.d.ts +22 -0
- package/interactions/pressable.jsx +93 -0
- package/interactions/scroll-wheel.d.ts +20 -0
- package/interactions/scroll-wheel.jsx +40 -0
- package/interactions/utils.d.ts +52 -0
- package/interactions/utils.js +253 -0
- package/keyboard/index.d.ts +12 -0
- package/keyboard/index.jsx +34 -0
- package/keys/index.d.ts +68 -0
- package/keys/index.js +199 -0
- package/label/behaviour.d.ts +54 -0
- package/label/behaviour.js +60 -0
- package/label/index.d.ts +35 -0
- package/label/index.jsx +85 -0
- package/landmark/index.d.ts +10 -0
- package/landmark/index.jsx +35 -0
- package/landmark/manager.d.ts +50 -0
- package/landmark/manager.js +364 -0
- package/layout/index.d.ts +90 -0
- package/layout/index.js +207 -0
- package/lightbox/behaviour.d.ts +82 -0
- package/lightbox/behaviour.js +490 -0
- package/lightbox/captions/index.d.ts +39 -0
- package/lightbox/captions/index.jsx +44 -0
- package/lightbox/counter/index.d.ts +10 -0
- package/lightbox/counter/index.jsx +10 -0
- package/lightbox/download/index.d.ts +32 -0
- package/lightbox/download/index.jsx +89 -0
- package/lightbox/embed/index.d.ts +15 -0
- package/lightbox/embed/index.jsx +58 -0
- package/lightbox/fullscreen/index.d.ts +24 -0
- package/lightbox/fullscreen/index.jsx +80 -0
- package/lightbox/index.d.ts +129 -0
- package/lightbox/index.jsx +284 -0
- package/lightbox/inline/index.d.ts +18 -0
- package/lightbox/inline/index.jsx +15 -0
- package/lightbox/pdf/index.d.ts +18 -0
- package/lightbox/pdf/index.jsx +31 -0
- package/lightbox/share/index.d.ts +29 -0
- package/lightbox/share/index.jsx +43 -0
- package/lightbox/slideshow/index.d.ts +24 -0
- package/lightbox/slideshow/index.jsx +118 -0
- package/lightbox/state.d.ts +334 -0
- package/lightbox/state.js +192 -0
- package/lightbox/thumbnails/index.d.ts +54 -0
- package/lightbox/thumbnails/index.jsx +96 -0
- package/lightbox/video/index.d.ts +13 -0
- package/lightbox/video/index.jsx +42 -0
- package/lightbox/zoom/index.d.ts +67 -0
- package/lightbox/zoom/index.jsx +456 -0
- package/link/behaviour.d.ts +41 -0
- package/link/behaviour.js +58 -0
- package/link/index.d.ts +30 -0
- package/link/index.jsx +179 -0
- package/link/router.d.ts +1 -0
- package/link/router.js +5 -0
- package/listbox/behaviour.d.ts +175 -0
- package/listbox/behaviour.jsx +515 -0
- package/listbox/index.d.ts +129 -0
- package/listbox/index.jsx +632 -0
- package/markdown/index.d.ts +82 -0
- package/markdown/index.jsx +654 -0
- package/masonry/behaviour.d.ts +121 -0
- package/masonry/behaviour.js +676 -0
- package/masonry/flip.d.ts +27 -0
- package/masonry/flip.js +61 -0
- package/masonry/geometry.d.ts +44 -0
- package/masonry/geometry.js +184 -0
- package/masonry/index.d.ts +153 -0
- package/masonry/index.jsx +833 -0
- package/masonry/justified.d.ts +49 -0
- package/masonry/justified.js +250 -0
- package/masonry/layout.d.ts +200 -0
- package/masonry/layout.js +668 -0
- package/masonry/masonry-layout.d.ts +57 -0
- package/masonry/masonry-layout.js +159 -0
- package/masonry/masonry.css +29 -0
- package/menu/behaviour.d.ts +205 -0
- package/menu/behaviour.jsx +847 -0
- package/menu/index.d.ts +171 -0
- package/menu/index.jsx +702 -0
- package/menu/intl.d.ts +2 -0
- package/menu/intl.js +36 -0
- package/menu/safely-mouse-to-submenu.d.ts +12 -0
- package/menu/safely-mouse-to-submenu.js +128 -0
- package/meter/behaviour.d.ts +18 -0
- package/meter/behaviour.jsx +17 -0
- package/meter/index.d.ts +30 -0
- package/meter/index.jsx +85 -0
- package/modal/index.d.ts +79 -0
- package/modal/index.jsx +359 -0
- package/modal/provider.d.ts +47 -0
- package/modal/provider.jsx +105 -0
- package/morph/index.d.ts +91 -0
- package/morph/index.jsx +372 -0
- package/morph/item.d.ts +89 -0
- package/morph/item.jsx +546 -0
- package/motion/Animations.d.ts +17 -0
- package/motion/Animations.js +56 -0
- package/motion/DragRelease.d.ts +22 -0
- package/motion/DragRelease.js +26 -0
- package/motion/DragTracker.d.ts +7 -0
- package/motion/DragTracker.js +43 -0
- package/motion/Limit.d.ts +12 -0
- package/motion/Limit.js +37 -0
- package/motion/Motion1D.d.ts +38 -0
- package/motion/Motion1D.js +72 -0
- package/motion/ScrollBody.d.ts +13 -0
- package/motion/ScrollBody.js +75 -0
- package/motion/Vector1d.d.ts +8 -0
- package/motion/Vector1d.js +29 -0
- package/motion/index.d.ts +8 -0
- package/motion/index.js +12 -0
- package/motion/utils.d.ts +5 -0
- package/motion/utils.js +23 -0
- package/native-select/index.d.ts +46 -0
- package/native-select/index.jsx +99 -0
- package/navigation-tree/index.d.ts +43 -0
- package/navigation-tree/index.jsx +110 -0
- package/number/NumberFormatter.d.ts +28 -0
- package/number/NumberFormatter.js +144 -0
- package/number/NumberParser.d.ts +27 -0
- package/number/NumberParser.js +316 -0
- package/number/index.d.ts +5 -0
- package/number/index.jsx +17 -0
- package/number/number-field-state.d.ts +132 -0
- package/number/number-field-state.jsx +364 -0
- package/number-field/behaviour.d.ts +165 -0
- package/number-field/behaviour.jsx +512 -0
- package/number-field/index.d.ts +52 -0
- package/number-field/index.jsx +207 -0
- package/number-field/intl.d.ts +2 -0
- package/number-field/intl.js +36 -0
- package/observers/index.d.ts +70 -0
- package/observers/index.js +279 -0
- package/overflow/index.d.ts +93 -0
- package/overflow/index.jsx +267 -0
- package/overlay/aria-hide-outside.d.ts +12 -0
- package/overlay/aria-hide-outside.js +141 -0
- package/overlay/close-on-scroll.d.ts +1 -0
- package/overlay/close-on-scroll.js +6 -0
- package/overlay/contexts.d.ts +34 -0
- package/overlay/contexts.js +21 -0
- package/overlay/dismiss-button.d.ts +10 -0
- package/overlay/dismiss-button.jsx +18 -0
- package/overlay/hover-trigger.d.ts +54 -0
- package/overlay/hover-trigger.jsx +221 -0
- package/overlay/index.d.ts +40 -0
- package/overlay/index.js +139 -0
- package/overlay/modal-overlay.d.ts +16 -0
- package/overlay/modal-overlay.js +38 -0
- package/overlay/overlay-strings.d.ts +4 -0
- package/overlay/overlay-strings.js +52 -0
- package/overlay/overlay-trigger-state.d.ts +1 -0
- package/overlay/overlay-trigger-state.js +3 -0
- package/overlay/overlay-trigger.d.ts +27 -0
- package/overlay/overlay-trigger.jsx +50 -0
- package/overlay/position.d.ts +160 -0
- package/overlay/position.js +559 -0
- package/overlay/prevent-scroll-ios.d.ts +17 -0
- package/overlay/prevent-scroll-ios.js +331 -0
- package/overlay/prevent-scroll.d.ts +18 -0
- package/overlay/prevent-scroll.js +122 -0
- package/overlay/safe-area.d.ts +28 -0
- package/overlay/safe-area.js +108 -0
- package/overlay-arrow/index.d.ts +23 -0
- package/overlay-arrow/index.jsx +59 -0
- package/overlay-service/connected-position.d.ts +163 -0
- package/overlay-service/connected-position.js +661 -0
- package/overlay-service/global-position.d.ts +34 -0
- package/overlay-service/global-position.js +154 -0
- package/overlay-service/index.d.ts +15 -0
- package/overlay-service/index.js +27 -0
- package/overlay-service/overlay-container.d.ts +27 -0
- package/overlay-service/overlay-container.js +93 -0
- package/overlay-service/overlay-dispatchers.d.ts +44 -0
- package/overlay-service/overlay-dispatchers.js +149 -0
- package/overlay-service/overlay-position-builder.d.ts +8 -0
- package/overlay-service/overlay-position-builder.js +15 -0
- package/overlay-service/overlay-ref.d.ts +155 -0
- package/overlay-service/overlay-ref.js +436 -0
- package/overlay-service/overlay-strategy.d.ts +48 -0
- package/overlay-service/overlay-strategy.js +3 -0
- package/overlay-service/overlay-viewport.d.ts +85 -0
- package/overlay-service/overlay-viewport.js +192 -0
- package/overlay-service/overlay.css +94 -0
- package/overlay-service/scroll-strategies.d.ts +71 -0
- package/overlay-service/scroll-strategies.js +185 -0
- package/package.json +754 -4
- package/platform/index.d.ts +100 -0
- package/platform/index.js +304 -0
- package/popover/behaviour.d.ts +23 -0
- package/popover/behaviour.js +39 -0
- package/popover/index.d.ts +60 -0
- package/popover/index.jsx +285 -0
- package/popover/popover-overlay.d.ts +27 -0
- package/popover/popover-overlay.jsx +60 -0
- package/popover/use-popover.d.ts +57 -0
- package/popover/use-popover.js +92 -0
- package/portal/index.d.ts +55 -0
- package/portal/index.jsx +83 -0
- package/portal/portal-mount.d.ts +8 -0
- package/portal/portal-mount.js +7 -0
- package/portal/portal-outlet.d.ts +88 -0
- package/portal/portal-outlet.js +222 -0
- package/preview-trigger/behaviour.d.ts +70 -0
- package/preview-trigger/behaviour.jsx +258 -0
- package/preview-trigger/index.d.ts +12 -0
- package/preview-trigger/index.jsx +82 -0
- package/progress-bar/behaviour.d.ts +77 -0
- package/progress-bar/behaviour.jsx +75 -0
- package/progress-bar/context.d.ts +4 -0
- package/progress-bar/context.js +7 -0
- package/progress-bar/index.d.ts +38 -0
- package/progress-bar/index.jsx +90 -0
- package/radio-group/behaviour.d.ts +11 -0
- package/radio-group/behaviour.js +85 -0
- package/radio-group/index.d.ts +82 -0
- package/radio-group/index.jsx +142 -0
- package/radio-group/parts.d.ts +223 -0
- package/radio-group/parts.jsx +425 -0
- package/range-calendar/behaviour.d.ts +2 -0
- package/range-calendar/behaviour.jsx +5 -0
- package/range-calendar/index.d.ts +2 -0
- package/range-calendar/index.jsx +4 -0
- package/resizable/engine/components/group/auto-save/getStorageKey.d.ts +1 -0
- package/resizable/engine/components/group/auto-save/getStorageKey.js +5 -0
- package/resizable/engine/components/group/compareDocumentPosition.d.ts +5 -0
- package/resizable/engine/components/group/compareDocumentPosition.js +19 -0
- package/resizable/engine/components/group/readLegacyLayout.d.ts +16 -0
- package/resizable/engine/components/group/readLegacyLayout.js +48 -0
- package/resizable/engine/components/group/sortByElementOffset.d.ts +4 -0
- package/resizable/engine/components/group/sortByElementOffset.js +28 -0
- package/resizable/engine/components/group/types.d.ts +50 -0
- package/resizable/engine/components/group/types.js +1 -0
- package/resizable/engine/components/panel/types.d.ts +90 -0
- package/resizable/engine/components/panel/types.js +4 -0
- package/resizable/engine/constants.d.ts +15 -0
- package/resizable/engine/constants.js +27 -0
- package/resizable/engine/global/cursor/getCursorStyle.d.ts +7 -0
- package/resizable/engine/global/cursor/getCursorStyle.js +94 -0
- package/resizable/engine/global/cursor/supportsAdvancedCursorStyles.d.ts +5 -0
- package/resizable/engine/global/cursor/supportsAdvancedCursorStyles.js +20 -0
- package/resizable/engine/global/cursor/updateCursorStyle.d.ts +1 -0
- package/resizable/engine/global/cursor/updateCursorStyle.js +64 -0
- package/resizable/engine/global/dom/calculateAvailableAxisSize.d.ts +4 -0
- package/resizable/engine/global/dom/calculateAvailableAxisSize.js +10 -0
- package/resizable/engine/global/dom/calculateHitRegions.d.ts +13 -0
- package/resizable/engine/global/dom/calculateHitRegions.js +153 -0
- package/resizable/engine/global/dom/calculateItemConstraints.d.ts +2 -0
- package/resizable/engine/global/dom/calculateItemConstraints.js +82 -0
- package/resizable/engine/global/event-handlers/onDocumentContextMenu.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentContextMenu.js +9 -0
- package/resizable/engine/global/event-handlers/onDocumentDoubleClick.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentDoubleClick.js +28 -0
- package/resizable/engine/global/event-handlers/onDocumentKeyDown.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentKeyDown.js +97 -0
- package/resizable/engine/global/event-handlers/onDocumentLostPointerCapture.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentLostPointerCapture.js +18 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerCancel.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerCancel.js +8 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerDown.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerDown.js +54 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerLeave.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerLeave.js +22 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerMove.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerMove.js +69 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerOut.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerOut.js +20 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerUp.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onDocumentPointerUp.js +15 -0
- package/resizable/engine/global/event-handlers/onWindowBlur.d.ts +1 -0
- package/resizable/engine/global/event-handlers/onWindowBlur.js +11 -0
- package/resizable/engine/global/mountAxis.d.ts +2 -0
- package/resizable/engine/global/mountAxis.js +187 -0
- package/resizable/engine/global/mutable-state/axes.d.ts +37 -0
- package/resizable/engine/global/mutable-state/axes.js +52 -0
- package/resizable/engine/global/mutable-state/interactions.d.ts +17 -0
- package/resizable/engine/global/mutable-state/interactions.js +92 -0
- package/resizable/engine/global/mutable-state/types.d.ts +32 -0
- package/resizable/engine/global/mutable-state/types.js +1 -0
- package/resizable/engine/global/styles/convertEmToPixels.d.ts +1 -0
- package/resizable/engine/global/styles/convertEmToPixels.js +7 -0
- package/resizable/engine/global/styles/convertRemToPixels.d.ts +1 -0
- package/resizable/engine/global/styles/convertRemToPixels.js +7 -0
- package/resizable/engine/global/styles/convertVhToPixels.d.ts +1 -0
- package/resizable/engine/global/styles/convertVhToPixels.js +5 -0
- package/resizable/engine/global/styles/convertVwToPixels.d.ts +1 -0
- package/resizable/engine/global/styles/convertVwToPixels.js +5 -0
- package/resizable/engine/global/styles/parseSizeAndUnit.d.ts +2 -0
- package/resizable/engine/global/styles/parseSizeAndUnit.js +29 -0
- package/resizable/engine/global/styles/sizeStyleToPixels.d.ts +5 -0
- package/resizable/engine/global/styles/sizeStyleToPixels.js +38 -0
- package/resizable/engine/global/types.d.ts +120 -0
- package/resizable/engine/global/types.js +1 -0
- package/resizable/engine/global/utils/abortActivePointerResize.d.ts +9 -0
- package/resizable/engine/global/utils/abortActivePointerResize.js +52 -0
- package/resizable/engine/global/utils/adjustLayoutByDelta.d.ts +9 -0
- package/resizable/engine/global/utils/adjustLayoutByDelta.js +219 -0
- package/resizable/engine/global/utils/adjustLayoutForSeparator.d.ts +1 -0
- package/resizable/engine/global/utils/adjustLayoutForSeparator.js +48 -0
- package/resizable/engine/global/utils/calculateDefaultLayout.d.ts +2 -0
- package/resizable/engine/global/utils/calculateDefaultLayout.js +30 -0
- package/resizable/engine/global/utils/calculateResizePreviews.d.ts +3 -0
- package/resizable/engine/global/utils/calculateResizePreviews.js +39 -0
- package/resizable/engine/global/utils/calculateSeparatorAriaValues.d.ts +12 -0
- package/resizable/engine/global/utils/calculateSeparatorAriaValues.js +43 -0
- package/resizable/engine/global/utils/compareLayoutNumbers.d.ts +1 -0
- package/resizable/engine/global/utils/compareLayoutNumbers.js +11 -0
- package/resizable/engine/global/utils/completeActivePointerResize.d.ts +6 -0
- package/resizable/engine/global/utils/completeActivePointerResize.js +49 -0
- package/resizable/engine/global/utils/doRectsIntersect.d.ts +2 -0
- package/resizable/engine/global/utils/doRectsIntersect.js +3 -0
- package/resizable/engine/global/utils/expandHitTarget.d.ts +10 -0
- package/resizable/engine/global/utils/expandHitTarget.js +19 -0
- package/resizable/engine/global/utils/findClosestHitRegion.d.ts +9 -0
- package/resizable/engine/global/utils/findClosestHitRegion.js +35 -0
- package/resizable/engine/global/utils/findClosestRect.d.ts +6 -0
- package/resizable/engine/global/utils/findClosestRect.js +22 -0
- package/resizable/engine/global/utils/findMatchingHitRegions.d.ts +7 -0
- package/resizable/engine/global/utils/findMatchingHitRegions.js +29 -0
- package/resizable/engine/global/utils/findSeparatorAxis.d.ts +21 -0
- package/resizable/engine/global/utils/findSeparatorAxis.js +12 -0
- package/resizable/engine/global/utils/formatLayoutNumber.d.ts +1 -0
- package/resizable/engine/global/utils/formatLayoutNumber.js +5 -0
- package/resizable/engine/global/utils/getDefaultLayout.d.ts +5 -0
- package/resizable/engine/global/utils/getDefaultLayout.js +11 -0
- package/resizable/engine/global/utils/getDistanceBetweenPointAndRect.d.ts +5 -0
- package/resizable/engine/global/utils/getDistanceBetweenPointAndRect.js +6 -0
- package/resizable/engine/global/utils/getImperativeAxisMethods.d.ts +4 -0
- package/resizable/engine/global/utils/getImperativeAxisMethods.js +53 -0
- package/resizable/engine/global/utils/getImperativeItemMethods.d.ts +5 -0
- package/resizable/engine/global/utils/getImperativeItemMethods.js +169 -0
- package/resizable/engine/global/utils/isCoarsePointer.d.ts +4 -0
- package/resizable/engine/global/utils/isCoarsePointer.js +17 -0
- package/resizable/engine/global/utils/isModal.d.ts +1 -0
- package/resizable/engine/global/utils/isModal.js +11 -0
- package/resizable/engine/global/utils/isViableHitTarget.d.ts +5 -0
- package/resizable/engine/global/utils/isViableHitTarget.js +50 -0
- package/resizable/engine/global/utils/itemConstraintsEqual.d.ts +2 -0
- package/resizable/engine/global/utils/itemConstraintsEqual.js +9 -0
- package/resizable/engine/global/utils/layoutNumbersEqual.d.ts +1 -0
- package/resizable/engine/global/utils/layoutNumbersEqual.js +6 -0
- package/resizable/engine/global/utils/layoutsEqual.d.ts +2 -0
- package/resizable/engine/global/utils/layoutsEqual.js +15 -0
- package/resizable/engine/global/utils/normalizeLayout.d.ts +11 -0
- package/resizable/engine/global/utils/normalizeLayout.js +21 -0
- package/resizable/engine/global/utils/notifyItemOnResize.d.ts +2 -0
- package/resizable/engine/global/utils/notifyItemOnResize.js +23 -0
- package/resizable/engine/global/utils/objectsEqual.d.ts +1 -0
- package/resizable/engine/global/utils/objectsEqual.js +14 -0
- package/resizable/engine/global/utils/preserveFixedItemSizes.d.ts +7 -0
- package/resizable/engine/global/utils/preserveFixedItemSizes.js +53 -0
- package/resizable/engine/global/utils/recordAxisLayoutChange.d.ts +15 -0
- package/resizable/engine/global/utils/recordAxisLayoutChange.js +25 -0
- package/resizable/engine/global/utils/updateActiveHitRegion.d.ts +18 -0
- package/resizable/engine/global/utils/updateActiveHitRegion.js +119 -0
- package/resizable/engine/global/utils/validateAxisLayout.d.ts +5 -0
- package/resizable/engine/global/utils/validateAxisLayout.js +70 -0
- package/resizable/engine/global/utils/validateItemSize.d.ts +7 -0
- package/resizable/engine/global/utils/validateItemSize.js +31 -0
- package/resizable/engine/global/utils/validateLayoutKeys.d.ts +2 -0
- package/resizable/engine/global/utils/validateLayoutKeys.js +13 -0
- package/resizable/engine/types.d.ts +13 -0
- package/resizable/engine/types.js +1 -0
- package/resizable/engine/utils/EventEmitter.d.ts +11 -0
- package/resizable/engine/utils/EventEmitter.js +60 -0
- package/resizable/engine/utils/assert.d.ts +1 -0
- package/resizable/engine/utils/assert.js +7 -0
- package/resizable/engine/utils/isArrayEqual.d.ts +1 -0
- package/resizable/engine/utils/isArrayEqual.js +15 -0
- package/resizable/engine/utils/isHTMLElement.d.ts +1 -0
- package/resizable/engine/utils/isHTMLElement.js +6 -0
- package/resizable/engine/utils/isShadowRoot.d.ts +1 -0
- package/resizable/engine/utils/isShadowRoot.js +6 -0
- package/resizable/engine/vendor/stacking-order.d.ts +7 -0
- package/resizable/engine/vendor/stacking-order.js +122 -0
- package/resizable/index.d.ts +263 -0
- package/resizable/index.jsx +537 -0
- package/resizable/mount.d.ts +115 -0
- package/resizable/mount.js +540 -0
- package/scheduler/behaviour.d.ts +71 -0
- package/scheduler/behaviour.js +243 -0
- package/scheduler/context.d.ts +100 -0
- package/scheduler/context.jsx +7 -0
- package/scheduler/dates.d.ts +53 -0
- package/scheduler/dates.js +183 -0
- package/scheduler/drag.d.ts +20 -0
- package/scheduler/drag.js +361 -0
- package/scheduler/event.d.ts +26 -0
- package/scheduler/event.jsx +93 -0
- package/scheduler/index.d.ts +57 -0
- package/scheduler/index.jsx +303 -0
- package/scheduler/intl.d.ts +16 -0
- package/scheduler/intl.js +529 -0
- package/scheduler/keys-month.d.ts +7 -0
- package/scheduler/keys-month.js +110 -0
- package/scheduler/keys-time-grid.d.ts +9 -0
- package/scheduler/keys-time-grid.js +115 -0
- package/scheduler/keys.d.ts +103 -0
- package/scheduler/keys.js +527 -0
- package/scheduler/layout-index.d.ts +3 -0
- package/scheduler/layout-index.js +6 -0
- package/scheduler/layout.d.ts +285 -0
- package/scheduler/layout.js +378 -0
- package/scheduler/menus.d.ts +66 -0
- package/scheduler/menus.jsx +88 -0
- package/scheduler/month.d.ts +26 -0
- package/scheduler/month.jsx +215 -0
- package/scheduler/pointer.d.ts +64 -0
- package/scheduler/pointer.js +203 -0
- package/scheduler/select.d.ts +11 -0
- package/scheduler/select.js +64 -0
- package/scheduler/selection.d.ts +34 -0
- package/scheduler/selection.js +39 -0
- package/scheduler/state.d.ts +296 -0
- package/scheduler/state.js +496 -0
- package/scheduler/time-grid-client.d.ts +32 -0
- package/scheduler/time-grid-client.jsx +133 -0
- package/scheduler/time-grid.d.ts +26 -0
- package/scheduler/time-grid.jsx +266 -0
- package/scheduler/time.d.ts +35 -0
- package/scheduler/time.js +56 -0
- package/scheduler/toolbar.d.ts +43 -0
- package/scheduler/toolbar.jsx +38 -0
- package/scroll-area/dom.d.ts +11 -0
- package/scroll-area/dom.js +55 -0
- package/scroll-area/index.d.ts +96 -0
- package/scroll-area/index.jsx +884 -0
- package/scroll-area/presence.d.ts +12 -0
- package/scroll-area/presence.jsx +131 -0
- package/scrolling/auto-size-virtual-scroll.d.ts +53 -0
- package/scrolling/auto-size-virtual-scroll.js +213 -0
- package/scrolling/behaviour.d.ts +3 -0
- package/scrolling/behaviour.js +5 -0
- package/scrolling/emitter.d.ts +34 -0
- package/scrolling/emitter.js +144 -0
- package/scrolling/fixed-size-virtual-scroll.d.ts +28 -0
- package/scrolling/fixed-size-virtual-scroll.js +107 -0
- package/scrolling/index.d.ts +11 -0
- package/scrolling/index.jsx +13 -0
- package/scrolling/rtl.d.ts +16 -0
- package/scrolling/rtl.js +64 -0
- package/scrolling/scroll-dispatcher.d.ts +49 -0
- package/scrolling/scroll-dispatcher.js +107 -0
- package/scrolling/scrollable.d.ts +75 -0
- package/scrolling/scrollable.js +149 -0
- package/scrolling/scrolling.css +11 -0
- package/scrolling/state.d.ts +92 -0
- package/scrolling/state.js +94 -0
- package/scrolling/viewport-ruler.d.ts +47 -0
- package/scrolling/viewport-ruler.js +100 -0
- package/scrolling/viewport.d.ts +54 -0
- package/scrolling/viewport.jsx +105 -0
- package/scrolling/virtual-scroll-strategy.d.ts +41 -0
- package/scrolling/virtual-scroll-strategy.js +2 -0
- package/scrolling/virtual-scroll-viewport.d.ts +95 -0
- package/scrolling/virtual-scroll-viewport.js +370 -0
- package/search-field/behaviour.d.ts +62 -0
- package/search-field/behaviour.jsx +116 -0
- package/search-field/index.d.ts +57 -0
- package/search-field/index.jsx +158 -0
- package/search-field/intl.d.ts +2 -0
- package/search-field/intl.js +36 -0
- package/select/behaviour.d.ts +188 -0
- package/select/behaviour.jsx +445 -0
- package/select/hidden-select.d.ts +44 -0
- package/select/hidden-select.jsx +68 -0
- package/select/index.d.ts +123 -0
- package/select/index.jsx +255 -0
- package/select/intl.d.ts +2 -0
- package/select/intl.js +36 -0
- package/select/parts.d.ts +11 -0
- package/select/parts.jsx +12 -0
- package/select/select-parts.d.ts +73 -0
- package/select/select-parts.jsx +293 -0
- package/select/select-value.d.ts +58 -0
- package/select/select-value.jsx +142 -0
- package/selection/dom-utils.d.ts +25 -0
- package/selection/dom-utils.js +77 -0
- package/selection/keyed.d.ts +19 -0
- package/selection/keyed.js +66 -0
- package/selection/list-keyboard-delegate.d.ts +67 -0
- package/selection/list-keyboard-delegate.js +274 -0
- package/selection/manager.d.ts +112 -0
- package/selection/manager.js +340 -0
- package/selection/selectable-collection.d.ts +123 -0
- package/selection/selectable-collection.js +560 -0
- package/selection/selectable-item.d.ts +128 -0
- package/selection/selectable-item.js +486 -0
- package/selection/selectable-list.d.ts +42 -0
- package/selection/selectable-list.js +34 -0
- package/selection/state.d.ts +96 -0
- package/selection/state.js +131 -0
- package/selection/type-select.d.ts +37 -0
- package/selection/type-select.js +114 -0
- package/selection/utils.d.ts +23 -0
- package/selection/utils.js +38 -0
- package/selection-indicator/context.d.ts +10 -0
- package/selection-indicator/context.js +7 -0
- package/selection-indicator/index.d.ts +20 -0
- package/selection-indicator/index.jsx +25 -0
- package/separator/behaviour.d.ts +17 -0
- package/separator/behaviour.js +17 -0
- package/separator/index.d.ts +23 -0
- package/separator/index.jsx +64 -0
- package/shared-element-transition/index.d.ts +36 -0
- package/shared-element-transition/index.jsx +182 -0
- package/shared-element-transition/transition.d.ts +19 -0
- package/shared-element-transition/transition.jsx +20 -0
- package/sheet-motion/index.d.ts +82 -0
- package/sheet-motion/index.js +386 -0
- package/sidebar/index.d.ts +257 -0
- package/sidebar/index.jsx +625 -0
- package/sidebar/pages.d.ts +71 -0
- package/sidebar/pages.jsx +177 -0
- package/sidebar/resize.d.ts +69 -0
- package/sidebar/resize.js +237 -0
- package/sidebar/sheet-motion.d.ts +15 -0
- package/sidebar/sheet-motion.js +170 -0
- package/sidebar/state.d.ts +126 -0
- package/sidebar/state.js +204 -0
- package/slider/behaviour.d.ts +141 -0
- package/slider/behaviour.jsx +492 -0
- package/slider/index.d.ts +171 -0
- package/slider/index.jsx +392 -0
- package/slider/state.d.ts +203 -0
- package/slider/state.js +377 -0
- package/slots/index.d.ts +248 -0
- package/slots/index.jsx +473 -0
- package/spinbutton/behaviour.d.ts +66 -0
- package/spinbutton/behaviour.jsx +312 -0
- package/spinbutton/intl.d.ts +2 -0
- package/spinbutton/intl.js +36 -0
- package/state/autocomplete.d.ts +26 -0
- package/state/autocomplete.js +32 -0
- package/state/calendar.d.ts +284 -0
- package/state/calendar.js +755 -0
- package/state/checkbox-group.d.ts +67 -0
- package/state/checkbox-group.js +76 -0
- package/state/combobox.d.ts +238 -0
- package/state/combobox.js +708 -0
- package/state/date-field.d.ts +407 -0
- package/state/date-field.js +1117 -0
- package/state/date-intl.d.ts +3 -0
- package/state/date-intl.js +36 -0
- package/state/date-picker.d.ts +144 -0
- package/state/date-picker.js +387 -0
- package/state/disclosure.d.ts +90 -0
- package/state/disclosure.js +148 -0
- package/state/form-validation.d.ts +89 -0
- package/state/form-validation.js +158 -0
- package/state/grid.d.ts +62 -0
- package/state/grid.js +127 -0
- package/state/list.d.ts +58 -0
- package/state/list.js +124 -0
- package/state/menu.d.ts +162 -0
- package/state/menu.js +185 -0
- package/state/overlays.d.ts +35 -0
- package/state/overlays.js +29 -0
- package/state/radio-group.d.ts +58 -0
- package/state/radio-group.js +68 -0
- package/state/search-field.d.ts +20 -0
- package/state/search-field.js +21 -0
- package/state/select.d.ts +150 -0
- package/state/select.js +187 -0
- package/state/selection.d.ts +3 -0
- package/state/selection.js +5 -0
- package/state/table-column-resize.d.ts +58 -0
- package/state/table-column-resize.js +76 -0
- package/state/table.d.ts +81 -0
- package/state/table.js +114 -0
- package/state/tabs.d.ts +85 -0
- package/state/tabs.js +161 -0
- package/state/time-field.d.ts +32 -0
- package/state/time-field.js +34 -0
- package/state/toast.d.ts +80 -0
- package/state/toast.js +146 -0
- package/state/toggle-group.d.ts +70 -0
- package/state/toggle-group.js +110 -0
- package/state/toggle.d.ts +40 -0
- package/state/toggle.js +39 -0
- package/state/tooltip.d.ts +53 -0
- package/state/tooltip.js +153 -0
- package/stepper/index.d.ts +117 -0
- package/stepper/index.jsx +405 -0
- package/stepper/state.d.ts +200 -0
- package/stepper/state.js +325 -0
- package/switch/behaviour.d.ts +12 -0
- package/switch/behaviour.jsx +9 -0
- package/switch/index.d.ts +150 -0
- package/switch/index.jsx +186 -0
- package/table/behaviour.d.ts +181 -0
- package/table/behaviour.js +334 -0
- package/table/collection.d.ts +49 -0
- package/table/collection.js +259 -0
- package/table/column-resize.d.ts +48 -0
- package/table/column-resize.jsx +247 -0
- package/table/index.d.ts +339 -0
- package/table/index.jsx +1326 -0
- package/table/intl.d.ts +2 -0
- package/table/intl.js +36 -0
- package/table/keyboard-delegate.d.ts +21 -0
- package/table/keyboard-delegate.js +166 -0
- package/table/rac-intl.d.ts +2 -0
- package/table/rac-intl.js +36 -0
- package/tabs/behaviour.d.ts +49 -0
- package/tabs/behaviour.js +173 -0
- package/tabs/index.d.ts +248 -0
- package/tabs/index.jsx +577 -0
- package/tabs/keyboard-delegate.d.ts +17 -0
- package/tabs/keyboard-delegate.js +64 -0
- package/tag-group/behaviour.d.ts +59 -0
- package/tag-group/behaviour.js +112 -0
- package/tag-group/index.d.ts +138 -0
- package/tag-group/index.jsx +565 -0
- package/tag-group/intl.d.ts +2 -0
- package/tag-group/intl.js +36 -0
- package/tailwind.css +12 -0
- package/tests-components/app/src/routes/index.d.ts +4 -0
- package/tests-components/app/src/routes/index.jsx +7 -0
- package/text/index.d.ts +15 -0
- package/text/index.jsx +61 -0
- package/text-area/index.d.ts +19 -0
- package/text-area/index.jsx +76 -0
- package/text-field/autosize.d.ts +70 -0
- package/text-field/autosize.js +355 -0
- package/text-field/behaviour.d.ts +140 -0
- package/text-field/behaviour.jsx +260 -0
- package/text-field/fields.d.ts +12 -0
- package/text-field/fields.js +20 -0
- package/text-field/index.d.ts +50 -0
- package/text-field/index.jsx +174 -0
- package/text-field/text-field.css +45 -0
- package/theme.css +1006 -0
- package/time-wheels/behaviour.d.ts +29 -0
- package/time-wheels/behaviour.js +156 -0
- package/time-wheels/index.d.ts +27 -0
- package/time-wheels/index.jsx +91 -0
- package/toast/behaviour.d.ts +51 -0
- package/toast/behaviour.jsx +273 -0
- package/toast/index.d.ts +94 -0
- package/toast/index.jsx +256 -0
- package/toast/intl.d.ts +2 -0
- package/toast/intl.js +36 -0
- package/toggle-button/behaviour.d.ts +15 -0
- package/toggle-button/behaviour.js +37 -0
- package/toggle-button/index.d.ts +59 -0
- package/toggle-button/index.jsx +206 -0
- package/toggle-button-group/behaviour.d.ts +19 -0
- package/toggle-button-group/behaviour.jsx +13 -0
- package/toggle-button-group/context.d.ts +7 -0
- package/toggle-button-group/context.js +9 -0
- package/toggle-button-group/index.d.ts +39 -0
- package/toggle-button-group/index.jsx +85 -0
- package/toggle-button-group/item.d.ts +30 -0
- package/toggle-button-group/item.jsx +37 -0
- package/toolbar/behaviour.d.ts +22 -0
- package/toolbar/behaviour.js +89 -0
- package/toolbar/index.d.ts +16 -0
- package/toolbar/index.jsx +67 -0
- package/tooltip/behaviour.d.ts +93 -0
- package/tooltip/behaviour.jsx +299 -0
- package/tooltip/index.d.ts +59 -0
- package/tooltip/index.jsx +193 -0
- package/tree/behaviour.d.ts +51 -0
- package/tree/behaviour.jsx +51 -0
- package/tree/cdk-index.d.ts +2 -0
- package/tree/cdk-index.js +6 -0
- package/tree/collection.d.ts +16 -0
- package/tree/collection.js +138 -0
- package/tree/control.d.ts +125 -0
- package/tree/control.js +166 -0
- package/tree/index.d.ts +154 -0
- package/tree/index.jsx +837 -0
- package/tree/intl.d.ts +2 -0
- package/tree/intl.js +36 -0
- package/tree/navigation-context.d.ts +44 -0
- package/tree/navigation-context.jsx +63 -0
- package/tree/tree-key-manager.d.ts +149 -0
- package/tree/tree-key-manager.js +336 -0
- package/utils/animation.d.ts +32 -0
- package/utils/animation.jsx +236 -0
- package/utils/data-attrs.d.ts +73 -0
- package/utils/data-attrs.jsx +217 -0
- package/utils/dev-off.d.ts +3 -0
- package/utils/dev-off.js +7 -0
- package/utils/dev-on.d.ts +3 -0
- package/utils/dev-on.js +17 -0
- package/utils/dom-props.d.ts +44 -0
- package/utils/dom-props.js +73 -0
- package/utils/dom.d.ts +85 -0
- package/utils/dom.js +402 -0
- package/utils/id.d.ts +23 -0
- package/utils/id.js +100 -0
- package/utils/index.d.ts +43 -0
- package/utils/index.js +160 -0
- package/utils/link-state.d.ts +6 -0
- package/utils/link-state.js +6 -0
- package/utils/links.d.ts +82 -0
- package/utils/links.jsx +150 -0
- package/utils/live-element.d.ts +8 -0
- package/utils/live-element.jsx +76 -0
- package/utils/live.d.ts +53 -0
- package/utils/live.jsx +169 -0
- package/utils/load-more-sentinel.d.ts +28 -0
- package/utils/load-more-sentinel.jsx +52 -0
- package/utils/motion-token.d.ts +4 -0
- package/utils/motion-token.js +48 -0
- package/utils/render.d.ts +19 -0
- package/utils/render.js +18 -0
- package/utils/transitions.d.ts +15 -0
- package/utils/transitions.js +104 -0
- package/utils/types.d.ts +111 -0
- package/utils/types.js +1 -0
- package/virtualizer/behaviour.d.ts +129 -0
- package/virtualizer/behaviour.js +437 -0
- package/virtualizer/collection-renderer.d.ts +62 -0
- package/virtualizer/collection-renderer.jsx +190 -0
- package/virtualizer/collection.d.ts +103 -0
- package/virtualizer/collection.js +155 -0
- package/virtualizer/dom.d.ts +50 -0
- package/virtualizer/dom.js +233 -0
- package/virtualizer/engine.d.ts +21 -0
- package/virtualizer/engine.js +21 -0
- package/virtualizer/grid-layout.d.ts +50 -0
- package/virtualizer/grid-layout.js +247 -0
- package/virtualizer/index.d.ts +3 -0
- package/virtualizer/index.jsx +5 -0
- package/virtualizer/layout-info.d.ts +33 -0
- package/virtualizer/layout-info.js +54 -0
- package/virtualizer/layout.d.ts +44 -0
- package/virtualizer/layout.js +30 -0
- package/virtualizer/list-layout.d.ts +103 -0
- package/virtualizer/list-layout.js +510 -0
- package/virtualizer/overscan-manager.d.ts +9 -0
- package/virtualizer/overscan-manager.js +32 -0
- package/virtualizer/point.d.ts +13 -0
- package/virtualizer/point.js +23 -0
- package/virtualizer/rect.d.ts +49 -0
- package/virtualizer/rect.js +105 -0
- package/virtualizer/reusable-view.d.ts +29 -0
- package/virtualizer/reusable-view.js +56 -0
- package/virtualizer/scroll-anchor.d.ts +62 -0
- package/virtualizer/scroll-anchor.js +130 -0
- package/virtualizer/size.d.ts +11 -0
- package/virtualizer/size.js +21 -0
- package/virtualizer/state.d.ts +35 -0
- package/virtualizer/state.js +89 -0
- package/virtualizer/table-collection.d.ts +45 -0
- package/virtualizer/table-collection.js +80 -0
- package/virtualizer/table-column-layout.d.ts +44 -0
- package/virtualizer/table-column-layout.js +210 -0
- package/virtualizer/table-layout.d.ts +55 -0
- package/virtualizer/table-layout.js +482 -0
- package/virtualizer/types.d.ts +63 -0
- package/virtualizer/types.js +1 -0
- package/virtualizer/utils.d.ts +2 -0
- package/virtualizer/utils.js +12 -0
- package/virtualizer/virtualizer-core.d.ts +61 -0
- package/virtualizer/virtualizer-core.js +304 -0
- package/virtualizer/virtualizer.d.ts +64 -0
- package/virtualizer/virtualizer.jsx +91 -0
- package/virtualizer/waterfall-layout.d.ts +41 -0
- package/virtualizer/waterfall-layout.js +227 -0
- package/wheel-picker/behaviour.d.ts +94 -0
- package/wheel-picker/behaviour.js +482 -0
- package/wheel-picker/index.d.ts +33 -0
- package/wheel-picker/index.jsx +66 -0
|
@@ -0,0 +1,1306 @@
|
|
|
1
|
+
// Ported from Angular Components (src/cdk/drag-drop/drag-ref.ts), MIT, © Google LLC.
|
|
2
|
+
// Rivet: no DI / NgZone / Renderer2 — `createDragRef(element, config?, deps?)` resolves the per-document
|
|
3
|
+
// registry and viewport ruler lazily; Subjects are `Emitter`s; preview / placeholder "templates" are view
|
|
4
|
+
// factories or host elements whose content is cloned (see dom/root-node.ts); `_pointerDownFromHost(event, age)`
|
|
5
|
+
// lets a lazily created ref handle the very event that woke it (the `<Drag>` component creates the ref on
|
|
6
|
+
// the first press; a replayed cold press keeps its original timing and aborts when already released).
|
|
7
|
+
import { isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader } from "./dom/fake-event.js";
|
|
8
|
+
import { coerceElement } from "./dom/coerce.js";
|
|
9
|
+
import { _getEventTarget, _getShadowRoot } from "./dom/shadow-dom.js";
|
|
10
|
+
import { viewportRuler } from "../scrolling/viewport-ruler.js";
|
|
11
|
+
import { Emitter } from "../scrolling/emitter.js";
|
|
12
|
+
import { deepCloneNode } from "./dom/clone-node.js";
|
|
13
|
+
import { adjustDomRect, getMutableClientRect, isOverflowingParent } from "./dom/dom-rect.js";
|
|
14
|
+
import { ParentPositionTracker } from "./dom/parent-position-tracker.js";
|
|
15
|
+
import { getRootNode, stampTemplate } from "./dom/root-node.js";
|
|
16
|
+
import { combineTransforms, getTransform, toggleNativeDragInteractions, toggleVisibility } from "./dom/styling.js";
|
|
17
|
+
import { dragDropRegistry } from "./drag-drop-registry.js";
|
|
18
|
+
import { PreviewRef } from "./preview-ref.js";
|
|
19
|
+
const NO_SUBSCRIPTION = { unsubscribe() { } };
|
|
20
|
+
function listen(target, name, handler, options) {
|
|
21
|
+
target.addEventListener(name, handler, options);
|
|
22
|
+
return () => target.removeEventListener(name, handler, options);
|
|
23
|
+
}
|
|
24
|
+
/** No NgZone: `run` / `runOutsideAngular` call through (keeps the upstream code shape). */
|
|
25
|
+
const zone = {
|
|
26
|
+
run: (fn) => fn(),
|
|
27
|
+
runOutsideAngular: (fn) => fn(),
|
|
28
|
+
};
|
|
29
|
+
/** Angular `signal(false)` stand-in: a callable flag with `set`. */
|
|
30
|
+
function flag(value) {
|
|
31
|
+
const read = () => value;
|
|
32
|
+
read.set = (next) => void (value = next);
|
|
33
|
+
return read;
|
|
34
|
+
}
|
|
35
|
+
/** Options that can be used to bind a passive event listener. */
|
|
36
|
+
const passiveEventListenerOptions = { passive: true };
|
|
37
|
+
/** Options that can be used to bind an active event listener. */
|
|
38
|
+
const activeEventListenerOptions = { passive: false };
|
|
39
|
+
/** Event options that can be used to bind an active, capturing event. */
|
|
40
|
+
const activeCapturingEventOptions = {
|
|
41
|
+
passive: false,
|
|
42
|
+
capture: true,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Time in milliseconds for which to ignore mouse events, after
|
|
46
|
+
* receiving a touch event. Used to avoid doing double work for
|
|
47
|
+
* touch devices where the browser fires fake mouse events, in
|
|
48
|
+
* addition to touch events.
|
|
49
|
+
*/
|
|
50
|
+
const MOUSE_EVENT_IGNORE_TIME = 800;
|
|
51
|
+
/** Class applied to the drag placeholder. */
|
|
52
|
+
const PLACEHOLDER_CLASS = "cdk-drag-placeholder";
|
|
53
|
+
/** Inline styles to be set as `!important` while dragging. */
|
|
54
|
+
const dragImportantProperties = new Set([
|
|
55
|
+
// Needs to be important, because some `mat-table` sets `position: sticky !important`. See #22781.
|
|
56
|
+
"position",
|
|
57
|
+
]);
|
|
58
|
+
/**
|
|
59
|
+
* Creates a `DragRef` for an element, turning it into a draggable item.
|
|
60
|
+
* @param element Element to which to attach the dragging functionality.
|
|
61
|
+
* @param config Object used to configure the dragging behavior.
|
|
62
|
+
* @param deps Optional services (Angular: the injector).
|
|
63
|
+
*/
|
|
64
|
+
export function createDragRef(element, config = {
|
|
65
|
+
dragStartThreshold: 5,
|
|
66
|
+
pointerDirectionChangeThreshold: 5,
|
|
67
|
+
}, deps = {}) {
|
|
68
|
+
const doc = deps.document ?? coerceElement(element).ownerDocument;
|
|
69
|
+
return new DragRef(element, config, doc, deps.viewportRuler ?? viewportRuler(doc), deps.dragDropRegistry ?? dragDropRegistry(doc));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Reference to a draggable item. Used to manipulate or dispose of the item.
|
|
73
|
+
*/
|
|
74
|
+
export class DragRef {
|
|
75
|
+
_rootElementCleanups;
|
|
76
|
+
_cleanupShadowRootSelectStart;
|
|
77
|
+
/** Element displayed next to the user's pointer while the element is dragged. */
|
|
78
|
+
_preview = null;
|
|
79
|
+
/** Container into which to insert the preview. */
|
|
80
|
+
_previewContainer;
|
|
81
|
+
/** Reference to the view of the placeholder element. */
|
|
82
|
+
_placeholderRef = null;
|
|
83
|
+
/** Element that is rendered instead of the draggable item while it is being sorted. */
|
|
84
|
+
_placeholder;
|
|
85
|
+
/** Coordinates within the element at which the user picked up the element. */
|
|
86
|
+
_pickupPositionInElement;
|
|
87
|
+
/** Coordinates on the page at which the user picked up the element. */
|
|
88
|
+
_pickupPositionOnPage;
|
|
89
|
+
/**
|
|
90
|
+
* Marker node used to save the place in the DOM where the element was
|
|
91
|
+
* picked up so that it can be restored at the end of the drag sequence.
|
|
92
|
+
*/
|
|
93
|
+
_marker;
|
|
94
|
+
/**
|
|
95
|
+
* Element indicating the position from which the item was picked up initially.
|
|
96
|
+
*/
|
|
97
|
+
_anchor = null;
|
|
98
|
+
/**
|
|
99
|
+
* CSS `transform` applied to the element when it isn't being dragged. We need a
|
|
100
|
+
* passive transform in order for the dragged element to retain its new position
|
|
101
|
+
* after the user has stopped dragging and because we need to know the relative
|
|
102
|
+
* position in case they start dragging again. This corresponds to `element.style.transform`.
|
|
103
|
+
*/
|
|
104
|
+
_passiveTransform = { x: 0, y: 0 };
|
|
105
|
+
/** CSS `transform` that is applied to the element while it's being dragged. */
|
|
106
|
+
_activeTransform = { x: 0, y: 0 };
|
|
107
|
+
/** Inline `transform` value that the element had before the first dragging sequence. */
|
|
108
|
+
_initialTransform;
|
|
109
|
+
/**
|
|
110
|
+
* Whether the dragging sequence has been started. Doesn't
|
|
111
|
+
* necessarily mean that the element has been moved.
|
|
112
|
+
*/
|
|
113
|
+
_hasStartedDragging = flag(false);
|
|
114
|
+
/** Whether the element has moved since the user started dragging it. */
|
|
115
|
+
_hasMoved = false;
|
|
116
|
+
/** Drop container in which the DragRef resided when dragging began. */
|
|
117
|
+
_initialContainer;
|
|
118
|
+
/** Index at which the item started in its initial container. */
|
|
119
|
+
_initialIndex;
|
|
120
|
+
/** Cached positions of scrollable parent elements. */
|
|
121
|
+
_parentPositions;
|
|
122
|
+
/** Emits when the item is being moved. */
|
|
123
|
+
_moveEvents = new Emitter();
|
|
124
|
+
/** Keeps track of the direction in which the user is dragging along each axis. */
|
|
125
|
+
_pointerDirectionDelta;
|
|
126
|
+
/** Pointer position at which the last change in the delta occurred. */
|
|
127
|
+
_pointerPositionAtLastDirectionChange;
|
|
128
|
+
/** Position of the pointer at the last pointer event. */
|
|
129
|
+
_lastKnownPointerPosition;
|
|
130
|
+
/**
|
|
131
|
+
* Root DOM node of the drag instance. This is the element that will
|
|
132
|
+
* be moved around as the user is dragging.
|
|
133
|
+
*/
|
|
134
|
+
_rootElement;
|
|
135
|
+
/**
|
|
136
|
+
* Nearest ancestor SVG, relative to which coordinates are calculated if dragging SVGElement
|
|
137
|
+
*/
|
|
138
|
+
_ownerSVGElement = null;
|
|
139
|
+
/**
|
|
140
|
+
* Inline style value of `-webkit-tap-highlight-color` at the time the
|
|
141
|
+
* dragging was started. Used to restore the value once we're done dragging.
|
|
142
|
+
*/
|
|
143
|
+
_rootElementTapHighlight;
|
|
144
|
+
/** Subscription to pointer movement events. */
|
|
145
|
+
_pointerMoveSubscription = NO_SUBSCRIPTION;
|
|
146
|
+
/** Subscription to the event that is dispatched when the user lifts their pointer. */
|
|
147
|
+
_pointerUpSubscription = NO_SUBSCRIPTION;
|
|
148
|
+
/** Subscription to the viewport being scrolled. */
|
|
149
|
+
_scrollSubscription = NO_SUBSCRIPTION;
|
|
150
|
+
/** Subscription to the viewport being resized. */
|
|
151
|
+
_resizeSubscription = NO_SUBSCRIPTION;
|
|
152
|
+
/**
|
|
153
|
+
* Time at which the last touch event occurred. Used to avoid firing the same
|
|
154
|
+
* events multiple times on touch devices where the browser will fire a fake
|
|
155
|
+
* mouse event for each touch event, after a certain time.
|
|
156
|
+
*/
|
|
157
|
+
_lastTouchEventTime;
|
|
158
|
+
/** Time at which the last dragging sequence was started. */
|
|
159
|
+
_dragStartTime;
|
|
160
|
+
/** Cached reference to the boundary element. */
|
|
161
|
+
_boundaryElement = null;
|
|
162
|
+
/** Whether the native dragging interactions have been enabled on the root element. */
|
|
163
|
+
_nativeInteractionsEnabled = true;
|
|
164
|
+
/** Client rect of the root element when the dragging sequence has started. */
|
|
165
|
+
_initialDomRect;
|
|
166
|
+
/** Cached dimensions of the preview element. Should be read via `_getPreviewRect`. */
|
|
167
|
+
_previewRect;
|
|
168
|
+
/** Cached dimensions of the boundary element. */
|
|
169
|
+
_boundaryRect;
|
|
170
|
+
/** Element that will be used as a template to create the draggable item's preview. */
|
|
171
|
+
_previewTemplate;
|
|
172
|
+
/** Template for placeholder element rendered to show where a draggable would be dropped. */
|
|
173
|
+
_placeholderTemplate;
|
|
174
|
+
/** Elements that can be used to drag the draggable item. */
|
|
175
|
+
_handles = [];
|
|
176
|
+
/** Registered handles that are currently disabled. */
|
|
177
|
+
_disabledHandles = new Set();
|
|
178
|
+
/** Droppable container that the draggable is a part of. */
|
|
179
|
+
_dropContainer;
|
|
180
|
+
/** Layout direction of the item. */
|
|
181
|
+
_direction = "ltr";
|
|
182
|
+
/** Ref that the current drag item is nested in. */
|
|
183
|
+
_parentDragRef = null;
|
|
184
|
+
/**
|
|
185
|
+
* Cached shadow root that the element is placed in. `null` means that the element isn't in
|
|
186
|
+
* the shadow DOM and `undefined` means that it hasn't been resolved yet. Should be read via
|
|
187
|
+
* `_getShadowRoot`, not directly.
|
|
188
|
+
*/
|
|
189
|
+
_cachedShadowRoot;
|
|
190
|
+
/** Axis along which dragging is locked. */
|
|
191
|
+
lockAxis = null;
|
|
192
|
+
/**
|
|
193
|
+
* Amount of milliseconds to wait after the user has put their
|
|
194
|
+
* pointer down before starting to drag the element.
|
|
195
|
+
*/
|
|
196
|
+
dragStartDelay = 0;
|
|
197
|
+
/** Class to be added to the preview element. */
|
|
198
|
+
previewClass;
|
|
199
|
+
/**
|
|
200
|
+
* If the parent of the dragged element has a `scale` transform, it can throw off the
|
|
201
|
+
* positioning when the user starts dragging. Use this input to notify the CDK of the scale.
|
|
202
|
+
*/
|
|
203
|
+
scale = 1;
|
|
204
|
+
/** Whether starting to drag this element is disabled. */
|
|
205
|
+
get disabled() {
|
|
206
|
+
return this._disabled || !!(this._dropContainer && this._dropContainer.disabled);
|
|
207
|
+
}
|
|
208
|
+
set disabled(value) {
|
|
209
|
+
if (value !== this._disabled) {
|
|
210
|
+
this._disabled = value;
|
|
211
|
+
this._toggleNativeDragInteractions();
|
|
212
|
+
this._handles.forEach((handle) => toggleNativeDragInteractions(handle, value));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
_disabled = false;
|
|
216
|
+
/** Emits as the drag sequence is being prepared. */
|
|
217
|
+
beforeStarted = new Emitter();
|
|
218
|
+
/** Emits when the user starts dragging the item. */
|
|
219
|
+
started = new Emitter();
|
|
220
|
+
/** Emits when the user has released a drag item, before any animations have started. */
|
|
221
|
+
released = new Emitter();
|
|
222
|
+
/** Emits when the user stops dragging an item in the container. */
|
|
223
|
+
ended = new Emitter();
|
|
224
|
+
/** Emits when the user has moved the item into a new container. */
|
|
225
|
+
entered = new Emitter();
|
|
226
|
+
/** Emits when the user removes the item its container by dragging it into another container. */
|
|
227
|
+
exited = new Emitter();
|
|
228
|
+
/** Emits when the user drops the item inside a container. */
|
|
229
|
+
dropped = new Emitter();
|
|
230
|
+
/**
|
|
231
|
+
* Emits as the user is dragging the item. Use with caution,
|
|
232
|
+
* because this event will fire for every pixel that the user has dragged.
|
|
233
|
+
*/
|
|
234
|
+
moved = this._moveEvents;
|
|
235
|
+
/** Arbitrary data that can be attached to the drag item. */
|
|
236
|
+
data;
|
|
237
|
+
/**
|
|
238
|
+
* Function that can be used to customize the logic of how the position of the drag item
|
|
239
|
+
* is limited while it's being dragged. Gets called with a point containing the current position
|
|
240
|
+
* of the user's pointer on the page, a reference to the item being dragged and its dimensions.
|
|
241
|
+
* Should return a point describing where the item should be rendered.
|
|
242
|
+
*/
|
|
243
|
+
constrainPosition;
|
|
244
|
+
_config;
|
|
245
|
+
_document;
|
|
246
|
+
_viewportRuler;
|
|
247
|
+
_dragDropRegistry;
|
|
248
|
+
constructor(element, _config, _document, _viewportRuler, _dragDropRegistry) {
|
|
249
|
+
this._config = _config;
|
|
250
|
+
this._document = _document;
|
|
251
|
+
this._viewportRuler = _viewportRuler;
|
|
252
|
+
this._dragDropRegistry = _dragDropRegistry;
|
|
253
|
+
this.withRootElement(element).withParent(_config.parentDragRef || null);
|
|
254
|
+
this._parentPositions = new ParentPositionTracker(_document);
|
|
255
|
+
_dragDropRegistry.registerDragItem(this);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Returns the element that is being used as a placeholder
|
|
259
|
+
* while the current element is being dragged.
|
|
260
|
+
*/
|
|
261
|
+
getPlaceholderElement() {
|
|
262
|
+
return this._placeholder;
|
|
263
|
+
}
|
|
264
|
+
/** Returns the root draggable element. */
|
|
265
|
+
getRootElement() {
|
|
266
|
+
return this._rootElement;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Gets the currently-visible element that represents the drag item.
|
|
270
|
+
* While dragging this is the placeholder, otherwise it's the root element.
|
|
271
|
+
*/
|
|
272
|
+
getVisibleElement() {
|
|
273
|
+
return this.isDragging() ? this.getPlaceholderElement() : this.getRootElement();
|
|
274
|
+
}
|
|
275
|
+
/** Registers the handles that can be used to drag the element. */
|
|
276
|
+
withHandles(handles) {
|
|
277
|
+
this._handles = handles.map((handle) => coerceElement(handle));
|
|
278
|
+
this._handles.forEach((handle) => toggleNativeDragInteractions(handle, this.disabled));
|
|
279
|
+
this._toggleNativeDragInteractions();
|
|
280
|
+
// Delete any lingering disabled handles that may have been destroyed. Note that we re-create
|
|
281
|
+
// the set, rather than iterate over it and filter out the destroyed handles, because while
|
|
282
|
+
// the ES spec allows for sets to be modified while they're being iterated over, some polyfills
|
|
283
|
+
// use an array internally which may throw an error.
|
|
284
|
+
const disabledHandles = new Set();
|
|
285
|
+
this._disabledHandles.forEach((handle) => {
|
|
286
|
+
if (this._handles.indexOf(handle) > -1) {
|
|
287
|
+
disabledHandles.add(handle);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
this._disabledHandles = disabledHandles;
|
|
291
|
+
return this;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Registers the template that should be used for the drag preview.
|
|
295
|
+
* @param template Template that from which to stamp out the preview.
|
|
296
|
+
*/
|
|
297
|
+
withPreviewTemplate(template) {
|
|
298
|
+
this._previewTemplate = template;
|
|
299
|
+
return this;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Registers the template that should be used for the drag placeholder.
|
|
303
|
+
* @param template Template that from which to stamp out the placeholder.
|
|
304
|
+
*/
|
|
305
|
+
withPlaceholderTemplate(template) {
|
|
306
|
+
this._placeholderTemplate = template;
|
|
307
|
+
return this;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Sets an alternate drag root element. The root element is the element that will be moved as
|
|
311
|
+
* the user is dragging. Passing an alternate root element is useful when trying to enable
|
|
312
|
+
* dragging on an element that you might not have access to.
|
|
313
|
+
*/
|
|
314
|
+
withRootElement(rootElement) {
|
|
315
|
+
const element = coerceElement(rootElement);
|
|
316
|
+
if (element !== this._rootElement) {
|
|
317
|
+
this._removeRootElementListeners();
|
|
318
|
+
this._rootElementCleanups = [
|
|
319
|
+
listen(element, "mousedown", this._pointerDown, activeEventListenerOptions),
|
|
320
|
+
listen(element, "touchstart", this._pointerDown, passiveEventListenerOptions),
|
|
321
|
+
listen(element, "dragstart", this._nativeDragStart, activeEventListenerOptions),
|
|
322
|
+
];
|
|
323
|
+
this._initialTransform = undefined;
|
|
324
|
+
this._rootElement = element;
|
|
325
|
+
}
|
|
326
|
+
if (typeof SVGElement !== "undefined" && this._rootElement instanceof SVGElement) {
|
|
327
|
+
this._ownerSVGElement = this._rootElement.ownerSVGElement;
|
|
328
|
+
}
|
|
329
|
+
return this;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Element to which the draggable's position will be constrained.
|
|
333
|
+
*/
|
|
334
|
+
withBoundaryElement(boundaryElement) {
|
|
335
|
+
this._boundaryElement = boundaryElement ? coerceElement(boundaryElement) : null;
|
|
336
|
+
this._resizeSubscription.unsubscribe();
|
|
337
|
+
if (boundaryElement) {
|
|
338
|
+
this._resizeSubscription = this._viewportRuler.change(10).subscribe(() => this._containInsideBoundaryOnResize());
|
|
339
|
+
}
|
|
340
|
+
return this;
|
|
341
|
+
}
|
|
342
|
+
/** Sets the parent ref that the ref is nested in. */
|
|
343
|
+
withParent(parent) {
|
|
344
|
+
this._parentDragRef = parent;
|
|
345
|
+
return this;
|
|
346
|
+
}
|
|
347
|
+
/** Removes the dragging functionality from the DOM element. */
|
|
348
|
+
dispose() {
|
|
349
|
+
this._removeRootElementListeners();
|
|
350
|
+
// Do this check before removing from the registry since it'll
|
|
351
|
+
// stop being considered as dragged once it is removed.
|
|
352
|
+
if (this.isDragging()) {
|
|
353
|
+
// Since we move out the element to the end of the body while it's being
|
|
354
|
+
// dragged, we have to make sure that it's removed if it gets destroyed.
|
|
355
|
+
this._rootElement?.remove();
|
|
356
|
+
}
|
|
357
|
+
this._marker?.remove();
|
|
358
|
+
this._destroyPreview();
|
|
359
|
+
this._destroyPlaceholder();
|
|
360
|
+
this._dragDropRegistry.removeDragItem(this);
|
|
361
|
+
this._removeListeners();
|
|
362
|
+
this.beforeStarted.complete();
|
|
363
|
+
this.started.complete();
|
|
364
|
+
this.released.complete();
|
|
365
|
+
this.ended.complete();
|
|
366
|
+
this.entered.complete();
|
|
367
|
+
this.exited.complete();
|
|
368
|
+
this.dropped.complete();
|
|
369
|
+
this._moveEvents.complete();
|
|
370
|
+
this._handles = [];
|
|
371
|
+
this._disabledHandles.clear();
|
|
372
|
+
this._dropContainer = undefined;
|
|
373
|
+
this._resizeSubscription.unsubscribe();
|
|
374
|
+
this._parentPositions.clear();
|
|
375
|
+
this._boundaryElement =
|
|
376
|
+
this._rootElement =
|
|
377
|
+
this._ownerSVGElement =
|
|
378
|
+
this._placeholderTemplate =
|
|
379
|
+
this._previewTemplate =
|
|
380
|
+
this._marker =
|
|
381
|
+
this._parentDragRef =
|
|
382
|
+
null;
|
|
383
|
+
}
|
|
384
|
+
/** Checks whether the element is currently being dragged. */
|
|
385
|
+
isDragging() {
|
|
386
|
+
return this._hasStartedDragging() && this._dragDropRegistry.isDragging(this);
|
|
387
|
+
}
|
|
388
|
+
/** Resets a standalone drag item to its initial position. */
|
|
389
|
+
reset() {
|
|
390
|
+
this._rootElement.style.transform = this._initialTransform || "";
|
|
391
|
+
this._activeTransform = { x: 0, y: 0 };
|
|
392
|
+
this._passiveTransform = { x: 0, y: 0 };
|
|
393
|
+
}
|
|
394
|
+
/** Resets drag item to end of boundary element. */
|
|
395
|
+
resetToBoundary() {
|
|
396
|
+
if (
|
|
397
|
+
// can be null if the drag item was never dragged.
|
|
398
|
+
this._boundaryElement &&
|
|
399
|
+
this._rootElement &&
|
|
400
|
+
// check if we are overflowing off our boundary element
|
|
401
|
+
isOverflowingParent(this._boundaryElement.getBoundingClientRect(), this._rootElement.getBoundingClientRect())) {
|
|
402
|
+
const parentRect = this._boundaryElement.getBoundingClientRect();
|
|
403
|
+
const childRect = this._rootElement.getBoundingClientRect();
|
|
404
|
+
let offsetX = 0;
|
|
405
|
+
let offsetY = 0;
|
|
406
|
+
// check if we are overflowing from left or right
|
|
407
|
+
if (childRect.left < parentRect.left) {
|
|
408
|
+
offsetX = parentRect.left - childRect.left;
|
|
409
|
+
}
|
|
410
|
+
else if (childRect.right > parentRect.right) {
|
|
411
|
+
offsetX = parentRect.right - childRect.right;
|
|
412
|
+
}
|
|
413
|
+
// check if we are overflowing from top or bottom
|
|
414
|
+
if (childRect.top < parentRect.top) {
|
|
415
|
+
offsetY = parentRect.top - childRect.top;
|
|
416
|
+
}
|
|
417
|
+
else if (childRect.bottom > parentRect.bottom) {
|
|
418
|
+
offsetY = parentRect.bottom - childRect.bottom;
|
|
419
|
+
}
|
|
420
|
+
const currentLeft = this._activeTransform.x;
|
|
421
|
+
const currentTop = this._activeTransform.y;
|
|
422
|
+
let x = currentLeft + offsetX, y = currentTop + offsetY;
|
|
423
|
+
this._rootElement.style.transform = getTransform(x, y);
|
|
424
|
+
this._activeTransform = { x, y };
|
|
425
|
+
this._passiveTransform = { x, y };
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Sets a handle as disabled. While a handle is disabled, it'll capture and interrupt dragging.
|
|
430
|
+
* @param handle Handle element that should be disabled.
|
|
431
|
+
*/
|
|
432
|
+
disableHandle(handle) {
|
|
433
|
+
if (!this._disabledHandles.has(handle) && this._handles.indexOf(handle) > -1) {
|
|
434
|
+
this._disabledHandles.add(handle);
|
|
435
|
+
toggleNativeDragInteractions(handle, true);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Enables a handle, if it has been disabled.
|
|
440
|
+
* @param handle Handle element to be enabled.
|
|
441
|
+
*/
|
|
442
|
+
enableHandle(handle) {
|
|
443
|
+
if (this._disabledHandles.has(handle)) {
|
|
444
|
+
this._disabledHandles.delete(handle);
|
|
445
|
+
toggleNativeDragInteractions(handle, this.disabled);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/** Sets the layout direction of the draggable item. */
|
|
449
|
+
withDirection(direction) {
|
|
450
|
+
this._direction = direction;
|
|
451
|
+
return this;
|
|
452
|
+
}
|
|
453
|
+
/** Sets the container that the item is part of. */
|
|
454
|
+
_withDropContainer(container) {
|
|
455
|
+
this._dropContainer = container;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Gets the current position in pixels the draggable outside of a drop container.
|
|
459
|
+
*/
|
|
460
|
+
getFreeDragPosition() {
|
|
461
|
+
const position = this.isDragging() ? this._activeTransform : this._passiveTransform;
|
|
462
|
+
return { x: position.x, y: position.y };
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Sets the current position in pixels the draggable outside of a drop container.
|
|
466
|
+
* @param value New position to be set.
|
|
467
|
+
*/
|
|
468
|
+
setFreeDragPosition(value) {
|
|
469
|
+
this._activeTransform = { x: 0, y: 0 };
|
|
470
|
+
this._passiveTransform.x = value.x;
|
|
471
|
+
this._passiveTransform.y = value.y;
|
|
472
|
+
if (!this._dropContainer) {
|
|
473
|
+
this._applyRootElementTransform(value.x, value.y);
|
|
474
|
+
}
|
|
475
|
+
return this;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Sets the container into which to insert the preview element.
|
|
479
|
+
* @param value Container into which to insert the preview.
|
|
480
|
+
*/
|
|
481
|
+
withPreviewContainer(value) {
|
|
482
|
+
this._previewContainer = value;
|
|
483
|
+
return this;
|
|
484
|
+
}
|
|
485
|
+
/** Updates the item's sort order based on the last-known pointer position. */
|
|
486
|
+
_sortFromLastPointerPosition() {
|
|
487
|
+
const position = this._lastKnownPointerPosition;
|
|
488
|
+
if (position && this._dropContainer) {
|
|
489
|
+
this._updateActiveDropContainer(this._getConstrainedPointerPosition(position), position);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/** Unsubscribes from the global subscriptions. */
|
|
493
|
+
_removeListeners() {
|
|
494
|
+
this._pointerMoveSubscription.unsubscribe();
|
|
495
|
+
this._pointerUpSubscription.unsubscribe();
|
|
496
|
+
this._scrollSubscription.unsubscribe();
|
|
497
|
+
this._cleanupShadowRootSelectStart?.();
|
|
498
|
+
this._cleanupShadowRootSelectStart = undefined;
|
|
499
|
+
}
|
|
500
|
+
/** Destroys the preview element and its ViewRef. */
|
|
501
|
+
_destroyPreview() {
|
|
502
|
+
this._preview?.destroy();
|
|
503
|
+
this._preview = null;
|
|
504
|
+
}
|
|
505
|
+
/** Destroys the placeholder element and its ViewRef. */
|
|
506
|
+
_destroyPlaceholder() {
|
|
507
|
+
this._anchor?.remove();
|
|
508
|
+
this._placeholder?.remove();
|
|
509
|
+
this._placeholderRef?.destroy();
|
|
510
|
+
this._placeholder = this._anchor = this._placeholderRef = null;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Rivet: handles a `mousedown` / `touchstart` that reached the root element before this ref
|
|
514
|
+
* existed (the ref is created lazily by the very event). Ignored if already handled. `age` (ms,
|
|
515
|
+
* 0 = live): the press was replayed after its code loaded — the drag start delay counts from the
|
|
516
|
+
* original press, and a press released in the meantime cancels the pending sequence on the next
|
|
517
|
+
* move (mouse: no primary button; touch: the original touch is gone).
|
|
518
|
+
*/
|
|
519
|
+
_pointerDownFromHost(event, age = 0) {
|
|
520
|
+
this._pointerDown(event);
|
|
521
|
+
// A press handled after its dispatch ended (replayed once the code loaded): its default action ran
|
|
522
|
+
// before the registry's `selectstart` listener existed, so the browser started a text selection
|
|
523
|
+
// that follows the pointer for the whole drag (upstream binds it during the press). Clear it; the
|
|
524
|
+
// registry blocks new ones from here on.
|
|
525
|
+
if (event.eventPhase === 0 && !isTouchEvent(event) && this._dragDropRegistry.isDragging(this)) {
|
|
526
|
+
this._document.getSelection()?.removeAllRanges();
|
|
527
|
+
}
|
|
528
|
+
if (age <= 0 || !this._dragDropRegistry.isDragging(this) || this._hasStartedDragging())
|
|
529
|
+
return;
|
|
530
|
+
this._dragStartTime -= age;
|
|
531
|
+
const view = this._document.defaultView || window;
|
|
532
|
+
const touch = isTouchEvent(event) ? (event.changedTouches[0] || event.touches[0])?.identifier : undefined;
|
|
533
|
+
const types = isTouchEvent(event) ? ["touchmove", "touchend", "touchcancel"] : ["mousemove", "mouseup"];
|
|
534
|
+
const done = () => types.forEach((type) => view.removeEventListener(type, check, true));
|
|
535
|
+
// Window capture: runs before the registry's document listeners hand the move to this ref.
|
|
536
|
+
const check = (next) => {
|
|
537
|
+
done();
|
|
538
|
+
if (next.type !== "mousemove" && next.type !== "touchmove")
|
|
539
|
+
return;
|
|
540
|
+
const released = isTouchEvent(next)
|
|
541
|
+
? !Array.from(next.touches).some((t) => t.identifier === touch)
|
|
542
|
+
: !(next.buttons & 1);
|
|
543
|
+
if (released && !this._hasStartedDragging())
|
|
544
|
+
this._endDragSequence(next);
|
|
545
|
+
};
|
|
546
|
+
types.forEach((type) => view.addEventListener(type, check, true));
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Rivet: handles a native `dragstart` that reached the root element before this ref existed (the
|
|
550
|
+
* ref was created by that very event, so the root element listener added meanwhile missed it).
|
|
551
|
+
*/
|
|
552
|
+
_nativeDragStartFromHost(event) {
|
|
553
|
+
this._nativeDragStart(event);
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Rivet: events seen by `_pointerDown`, so the host forward and the root element listener (added
|
|
557
|
+
* while the same event is still being dispatched) can't start a second sequence.
|
|
558
|
+
*/
|
|
559
|
+
_handledEvents = new WeakSet();
|
|
560
|
+
/**
|
|
561
|
+
* Rivet: runs before this ref handles a press on its root (set by the `Drag` instance): a nested `<Drag>`
|
|
562
|
+
* between the target and the root whose instance does not exist yet is created and handles the press
|
|
563
|
+
* first, as its own root listener would have (Angular: the child directive exists from the start and
|
|
564
|
+
* stops propagation). Under DOM v2 the child's creating handler is delegated to the document, so it
|
|
565
|
+
* would otherwise run after this (ancestor) native listener.
|
|
566
|
+
*/
|
|
567
|
+
_beforeRootPointerDown = null;
|
|
568
|
+
/** Handler for the `mousedown`/`touchstart` events. */
|
|
569
|
+
_pointerDown = (event) => {
|
|
570
|
+
if (this._handledEvents.has(event))
|
|
571
|
+
return;
|
|
572
|
+
this._beforeRootPointerDown?.(event);
|
|
573
|
+
// The nested drag took the press (its sequence stopped the propagation; Angular: this listener never runs).
|
|
574
|
+
if (event.cancelBubble)
|
|
575
|
+
return;
|
|
576
|
+
this._handledEvents.add(event);
|
|
577
|
+
this.beforeStarted.next();
|
|
578
|
+
// Delegate the event based on whether it started from a handle or the element itself.
|
|
579
|
+
if (this._handles.length) {
|
|
580
|
+
const targetHandle = this._getTargetHandle(event);
|
|
581
|
+
if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {
|
|
582
|
+
this._initializeDragSequence(targetHandle, event);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
else if (!this.disabled) {
|
|
586
|
+
this._initializeDragSequence(this._rootElement, event);
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
/** Handler that is invoked when the user moves their pointer after they've initiated a drag. */
|
|
590
|
+
_pointerMove = (event) => {
|
|
591
|
+
const pointerPosition = this._getPointerPositionOnPage(event);
|
|
592
|
+
if (!this._hasStartedDragging()) {
|
|
593
|
+
const distanceX = Math.abs(pointerPosition.x - this._pickupPositionOnPage.x);
|
|
594
|
+
const distanceY = Math.abs(pointerPosition.y - this._pickupPositionOnPage.y);
|
|
595
|
+
const isOverThreshold = distanceX + distanceY >= this._config.dragStartThreshold;
|
|
596
|
+
// Only start dragging after the user has moved more than the minimum distance in either
|
|
597
|
+
// direction. Note that this is preferable over doing something like `skip(minimumDistance)`
|
|
598
|
+
// in the `pointerMove` subscription, because we're not guaranteed to have one move event
|
|
599
|
+
// per pixel of movement (e.g. if the user moves their pointer quickly).
|
|
600
|
+
if (isOverThreshold) {
|
|
601
|
+
const isDelayElapsed = Date.now() >= this._dragStartTime + this._getDragStartDelay(event);
|
|
602
|
+
const container = this._dropContainer;
|
|
603
|
+
if (!isDelayElapsed) {
|
|
604
|
+
this._endDragSequence(event);
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
// Prevent other drag sequences from starting while something in the container is still
|
|
608
|
+
// being dragged. This can happen while we're waiting for the drop animation to finish
|
|
609
|
+
// and can cause errors, because some elements might still be moving around.
|
|
610
|
+
if (!container || (!container.isDragging() && !container.isReceiving())) {
|
|
611
|
+
// Prevent the default action as soon as the dragging sequence is considered as
|
|
612
|
+
// "started" since waiting for the next event can allow the device to begin scrolling.
|
|
613
|
+
if (event.cancelable) {
|
|
614
|
+
event.preventDefault();
|
|
615
|
+
}
|
|
616
|
+
this._hasStartedDragging.set(true);
|
|
617
|
+
zone.run(() => this._startDragSequence(event));
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
// We prevent the default action down here so that we know that dragging has started. This is
|
|
623
|
+
// important for touch devices where doing this too early can unnecessarily block scrolling,
|
|
624
|
+
// if there's a dragging delay.
|
|
625
|
+
if (event.cancelable) {
|
|
626
|
+
event.preventDefault();
|
|
627
|
+
}
|
|
628
|
+
const constrainedPointerPosition = this._getConstrainedPointerPosition(pointerPosition);
|
|
629
|
+
this._hasMoved = true;
|
|
630
|
+
this._lastKnownPointerPosition = pointerPosition;
|
|
631
|
+
this._updatePointerDirectionDelta(constrainedPointerPosition);
|
|
632
|
+
if (this._dropContainer) {
|
|
633
|
+
this._updateActiveDropContainer(constrainedPointerPosition, pointerPosition);
|
|
634
|
+
}
|
|
635
|
+
else {
|
|
636
|
+
// If there's a position constraint function, we want the element's top/left to be at the
|
|
637
|
+
// specific position on the page. Use the initial position as a reference if that's the case.
|
|
638
|
+
const offset = this.constrainPosition ? this._initialDomRect : this._pickupPositionOnPage;
|
|
639
|
+
const activeTransform = this._activeTransform;
|
|
640
|
+
activeTransform.x = constrainedPointerPosition.x - offset.x + this._passiveTransform.x;
|
|
641
|
+
activeTransform.y = constrainedPointerPosition.y - offset.y + this._passiveTransform.y;
|
|
642
|
+
this._applyRootElementTransform(activeTransform.x, activeTransform.y);
|
|
643
|
+
}
|
|
644
|
+
// Since this event gets fired for every pixel while dragging, we only
|
|
645
|
+
// want to fire it if the consumer opted into it. Also we have to
|
|
646
|
+
// re-enter the zone because we run all of the events on the outside.
|
|
647
|
+
if (this._moveEvents.count) {
|
|
648
|
+
zone.run(() => {
|
|
649
|
+
this._moveEvents.next({
|
|
650
|
+
source: this,
|
|
651
|
+
pointerPosition: constrainedPointerPosition,
|
|
652
|
+
event,
|
|
653
|
+
distance: this._getDragDistance(constrainedPointerPosition),
|
|
654
|
+
delta: this._pointerDirectionDelta,
|
|
655
|
+
});
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
/** Handler that is invoked when the user lifts their pointer up, after initiating a drag. */
|
|
660
|
+
_pointerUp = (event) => {
|
|
661
|
+
this._endDragSequence(event);
|
|
662
|
+
};
|
|
663
|
+
/**
|
|
664
|
+
* Clears subscriptions and stops the dragging sequence.
|
|
665
|
+
* @param event Browser event object that ended the sequence.
|
|
666
|
+
*/
|
|
667
|
+
_endDragSequence(event) {
|
|
668
|
+
// Note that here we use `isDragging` from the service, rather than from `this`.
|
|
669
|
+
// The difference is that the one from the service reflects whether a dragging sequence
|
|
670
|
+
// has been initiated, whereas the one on `this` includes whether the user has passed
|
|
671
|
+
// the minimum dragging threshold.
|
|
672
|
+
if (!this._dragDropRegistry.isDragging(this)) {
|
|
673
|
+
return;
|
|
674
|
+
}
|
|
675
|
+
this._removeListeners();
|
|
676
|
+
this._dragDropRegistry.stopDragging(this);
|
|
677
|
+
this._toggleNativeDragInteractions();
|
|
678
|
+
if (this._handles) {
|
|
679
|
+
this._rootElement.style.webkitTapHighlightColor = this._rootElementTapHighlight;
|
|
680
|
+
}
|
|
681
|
+
if (!this._hasStartedDragging()) {
|
|
682
|
+
return;
|
|
683
|
+
}
|
|
684
|
+
this.released.next({ source: this, event });
|
|
685
|
+
if (this._dropContainer) {
|
|
686
|
+
// Stop scrolling immediately, instead of waiting for the animation to finish.
|
|
687
|
+
this._dropContainer._stopScrolling();
|
|
688
|
+
this._animatePreviewToPlaceholder().then(() => {
|
|
689
|
+
this._cleanupDragArtifacts(event);
|
|
690
|
+
this._cleanupCachedDimensions();
|
|
691
|
+
this._dragDropRegistry.stopDragging(this);
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
else {
|
|
695
|
+
// Convert the active transform into a passive one. This means that next time
|
|
696
|
+
// the user starts dragging the item, its position will be calculated relatively
|
|
697
|
+
// to the new passive transform.
|
|
698
|
+
this._passiveTransform.x = this._activeTransform.x;
|
|
699
|
+
const pointerPosition = this._getPointerPositionOnPage(event);
|
|
700
|
+
this._passiveTransform.y = this._activeTransform.y;
|
|
701
|
+
zone.run(() => {
|
|
702
|
+
this.ended.next({
|
|
703
|
+
source: this,
|
|
704
|
+
distance: this._getDragDistance(pointerPosition),
|
|
705
|
+
dropPoint: pointerPosition,
|
|
706
|
+
event,
|
|
707
|
+
});
|
|
708
|
+
});
|
|
709
|
+
this._cleanupCachedDimensions();
|
|
710
|
+
this._dragDropRegistry.stopDragging(this);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
/** Starts the dragging sequence. */
|
|
714
|
+
_startDragSequence(event) {
|
|
715
|
+
if (isTouchEvent(event)) {
|
|
716
|
+
this._lastTouchEventTime = Date.now();
|
|
717
|
+
}
|
|
718
|
+
this._toggleNativeDragInteractions();
|
|
719
|
+
// Needs to happen before the root element is moved.
|
|
720
|
+
const shadowRoot = this._getShadowRoot();
|
|
721
|
+
const dropContainer = this._dropContainer;
|
|
722
|
+
if (shadowRoot) {
|
|
723
|
+
// In some browsers the global `selectstart` that we maintain in the `DragDropRegistry`
|
|
724
|
+
// doesn't cross the shadow boundary so we have to prevent it at the shadow root (see #28792).
|
|
725
|
+
zone.runOutsideAngular(() => {
|
|
726
|
+
this._cleanupShadowRootSelectStart = listen(shadowRoot, "selectstart", shadowDomSelectStart, activeCapturingEventOptions);
|
|
727
|
+
});
|
|
728
|
+
}
|
|
729
|
+
if (dropContainer) {
|
|
730
|
+
const element = this._rootElement;
|
|
731
|
+
const parent = element.parentNode;
|
|
732
|
+
const placeholder = (this._placeholder = this._createPlaceholderElement());
|
|
733
|
+
const marker = (this._marker = this._marker || this._document.createComment("cdk-drag-marker"));
|
|
734
|
+
// Insert a marker node so that we can restore the element's position in the DOM.
|
|
735
|
+
parent.insertBefore(marker, element);
|
|
736
|
+
// There's no risk of transforms stacking when inside a drop container so
|
|
737
|
+
// we can keep the initial transform up to date any time dragging starts.
|
|
738
|
+
this._initialTransform = element.style.transform || "";
|
|
739
|
+
// Create the preview after the initial transform has
|
|
740
|
+
// been cached, because it can be affected by the transform.
|
|
741
|
+
this._preview = new PreviewRef(this._document, this._rootElement, this._direction, this._initialDomRect, this._previewTemplate || null, this.previewClass || null, this._pickupPositionOnPage, this._initialTransform, this._config.zIndex || 1000);
|
|
742
|
+
// Rivet: a global preview keeps the text styles the element inherits here (dom/inherited-text.ts).
|
|
743
|
+
this._preview.attach(this._getPreviewInsertionPoint(parent, shadowRoot), (this._previewContainer || "global") === "global" ? element.parentElement : null);
|
|
744
|
+
// We move the element out at the end of the body and we make it hidden, because keeping it in
|
|
745
|
+
// place will throw off the consumer's `:last-child` selectors. We can't remove the element
|
|
746
|
+
// from the DOM completely, because iOS will stop firing all subsequent events in the chain.
|
|
747
|
+
toggleVisibility(element, false, dragImportantProperties);
|
|
748
|
+
this._document.body.appendChild(parent.replaceChild(placeholder, element));
|
|
749
|
+
this.started.next({ source: this, event }); // Emit before notifying the container.
|
|
750
|
+
dropContainer.start();
|
|
751
|
+
this._initialContainer = dropContainer;
|
|
752
|
+
this._initialIndex = dropContainer.getItemIndex(this);
|
|
753
|
+
}
|
|
754
|
+
else {
|
|
755
|
+
this.started.next({ source: this, event });
|
|
756
|
+
this._initialContainer = this._initialIndex = undefined;
|
|
757
|
+
}
|
|
758
|
+
// Important to run after we've called `start` on the parent container
|
|
759
|
+
// so that it has had time to resolve its scrollable parents.
|
|
760
|
+
this._parentPositions.cache(dropContainer ? dropContainer.getScrollableParents() : []);
|
|
761
|
+
}
|
|
762
|
+
/**
|
|
763
|
+
* Sets up the different variables and subscriptions
|
|
764
|
+
* that will be necessary for the dragging sequence.
|
|
765
|
+
* @param referenceElement Element that started the drag sequence.
|
|
766
|
+
* @param event Browser event object that started the sequence.
|
|
767
|
+
*/
|
|
768
|
+
_initializeDragSequence(referenceElement, event) {
|
|
769
|
+
// Stop propagation if the item is inside another
|
|
770
|
+
// draggable so we don't start multiple drag sequences.
|
|
771
|
+
if (this._parentDragRef) {
|
|
772
|
+
event.stopPropagation();
|
|
773
|
+
}
|
|
774
|
+
const isDragging = this.isDragging();
|
|
775
|
+
const isTouchSequence = isTouchEvent(event);
|
|
776
|
+
const isAuxiliaryMouseButton = !isTouchSequence && event.button !== 0;
|
|
777
|
+
const rootElement = this._rootElement;
|
|
778
|
+
const target = _getEventTarget(event);
|
|
779
|
+
const isSyntheticEvent = !isTouchSequence && this._lastTouchEventTime && this._lastTouchEventTime + MOUSE_EVENT_IGNORE_TIME > Date.now();
|
|
780
|
+
const isFakeEvent = isTouchSequence ? isFakeTouchstartFromScreenReader(event) : isFakeMousedownFromScreenReader(event);
|
|
781
|
+
// If the event started from an element with the native HTML drag&drop, it'll interfere
|
|
782
|
+
// with our own dragging (e.g. `img` tags do it by default). Prevent the default action
|
|
783
|
+
// to stop it from happening. Note that preventing on `dragstart` also seems to work, but
|
|
784
|
+
// it's flaky and it fails if the user drags it away quickly. Also note that we only want
|
|
785
|
+
// to do this for `mousedown` since doing the same for `touchstart` will stop any `click`
|
|
786
|
+
// events from firing on touch devices.
|
|
787
|
+
if (target && target.draggable && event.type === "mousedown") {
|
|
788
|
+
event.preventDefault();
|
|
789
|
+
}
|
|
790
|
+
// Abort if the user is already dragging or is using a mouse button other than the primary one.
|
|
791
|
+
if (isDragging || isAuxiliaryMouseButton || isSyntheticEvent || isFakeEvent) {
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
// If we've got handles, we need to disable the tap highlight on the entire root element,
|
|
795
|
+
// otherwise iOS will still add it, even though all the drag interactions on the handle
|
|
796
|
+
// are disabled.
|
|
797
|
+
if (this._handles.length) {
|
|
798
|
+
const rootStyles = rootElement.style;
|
|
799
|
+
this._rootElementTapHighlight = rootStyles.webkitTapHighlightColor || "";
|
|
800
|
+
rootStyles.webkitTapHighlightColor = "transparent";
|
|
801
|
+
}
|
|
802
|
+
this._hasMoved = false;
|
|
803
|
+
this._hasStartedDragging.set(this._hasMoved);
|
|
804
|
+
// Avoid multiple subscriptions and memory leaks when multi touch
|
|
805
|
+
// (isDragging check above isn't enough because of possible temporal and/or dimensional delays)
|
|
806
|
+
this._removeListeners();
|
|
807
|
+
this._initialDomRect = this._rootElement.getBoundingClientRect();
|
|
808
|
+
this._pointerMoveSubscription = this._dragDropRegistry.pointerMove.subscribe(this._pointerMove);
|
|
809
|
+
this._pointerUpSubscription = this._dragDropRegistry.pointerUp.subscribe(this._pointerUp);
|
|
810
|
+
this._scrollSubscription = this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe((scrollEvent) => this._updateOnScroll(scrollEvent));
|
|
811
|
+
if (this._boundaryElement) {
|
|
812
|
+
this._boundaryRect = getMutableClientRect(this._boundaryElement);
|
|
813
|
+
}
|
|
814
|
+
// If we have a custom preview we can't know ahead of time how large it'll be so we position
|
|
815
|
+
// it next to the cursor. The exception is when the consumer has opted into making the preview
|
|
816
|
+
// the same size as the root element, in which case we do know the size.
|
|
817
|
+
const previewTemplate = this._previewTemplate;
|
|
818
|
+
this._pickupPositionInElement =
|
|
819
|
+
previewTemplate && previewTemplate.template && !previewTemplate.matchSize
|
|
820
|
+
? { x: 0, y: 0 }
|
|
821
|
+
: this._getPointerPositionInElement(this._initialDomRect, referenceElement, event);
|
|
822
|
+
const pointerPosition = (this._pickupPositionOnPage = this._lastKnownPointerPosition = this._getPointerPositionOnPage(event));
|
|
823
|
+
this._pointerDirectionDelta = { x: 0, y: 0 };
|
|
824
|
+
this._pointerPositionAtLastDirectionChange = { x: pointerPosition.x, y: pointerPosition.y };
|
|
825
|
+
this._dragStartTime = Date.now();
|
|
826
|
+
this._dragDropRegistry.startDragging(this, event);
|
|
827
|
+
}
|
|
828
|
+
/** Cleans up the DOM artifacts that were added to facilitate the element being dragged. */
|
|
829
|
+
_cleanupDragArtifacts(event) {
|
|
830
|
+
// Restore the element's visibility and insert it at its old position in the DOM.
|
|
831
|
+
// It's important that we maintain the position, because moving the element around in the DOM
|
|
832
|
+
// can throw off `NgFor` which does smart diffing and re-creates elements only when necessary,
|
|
833
|
+
// while moving the existing elements in all other cases.
|
|
834
|
+
toggleVisibility(this._rootElement, true, dragImportantProperties);
|
|
835
|
+
this._marker.parentNode.replaceChild(this._rootElement, this._marker);
|
|
836
|
+
this._destroyPreview();
|
|
837
|
+
this._destroyPlaceholder();
|
|
838
|
+
this._initialDomRect = this._boundaryRect = this._previewRect = this._initialTransform = undefined;
|
|
839
|
+
// Re-enter the NgZone since we bound `document` events on the outside.
|
|
840
|
+
zone.run(() => {
|
|
841
|
+
const container = this._dropContainer;
|
|
842
|
+
const currentIndex = container.getItemIndex(this);
|
|
843
|
+
const pointerPosition = this._getPointerPositionOnPage(event);
|
|
844
|
+
const distance = this._getDragDistance(pointerPosition);
|
|
845
|
+
const isPointerOverContainer = container._isOverContainer(pointerPosition.x, pointerPosition.y);
|
|
846
|
+
this.ended.next({ source: this, distance, dropPoint: pointerPosition, event });
|
|
847
|
+
this.dropped.next({
|
|
848
|
+
item: this,
|
|
849
|
+
currentIndex,
|
|
850
|
+
previousIndex: this._initialIndex,
|
|
851
|
+
container: container,
|
|
852
|
+
previousContainer: this._initialContainer,
|
|
853
|
+
isPointerOverContainer,
|
|
854
|
+
distance,
|
|
855
|
+
dropPoint: pointerPosition,
|
|
856
|
+
event,
|
|
857
|
+
});
|
|
858
|
+
container.drop(this, currentIndex, this._initialIndex, this._initialContainer, isPointerOverContainer, distance, pointerPosition, event);
|
|
859
|
+
this._dropContainer = this._initialContainer;
|
|
860
|
+
});
|
|
861
|
+
}
|
|
862
|
+
/**
|
|
863
|
+
* Updates the item's position in its drop container, or moves it
|
|
864
|
+
* into a new one, depending on its current drag position.
|
|
865
|
+
*/
|
|
866
|
+
_updateActiveDropContainer({ x, y }, { x: rawX, y: rawY }) {
|
|
867
|
+
// Drop container that draggable has been moved into.
|
|
868
|
+
let newContainer = this._initialContainer._getSiblingContainerFromPosition(this, x, y);
|
|
869
|
+
// If we couldn't find a new container to move the item into, and the item has left its
|
|
870
|
+
// initial container, check whether the it's over the initial container. This handles the
|
|
871
|
+
// case where two containers are connected one way and the user tries to undo dragging an
|
|
872
|
+
// item into a new container.
|
|
873
|
+
if (!newContainer && this._dropContainer !== this._initialContainer && this._initialContainer._isOverContainer(x, y)) {
|
|
874
|
+
newContainer = this._initialContainer;
|
|
875
|
+
}
|
|
876
|
+
if (newContainer && newContainer !== this._dropContainer) {
|
|
877
|
+
zone.run(() => {
|
|
878
|
+
const exitIndex = this._dropContainer.getItemIndex(this);
|
|
879
|
+
const nextItemElement = this._dropContainer.getItemAtIndex(exitIndex + 1)?.getVisibleElement() || null;
|
|
880
|
+
// Notify the old container that the item has left.
|
|
881
|
+
this.exited.next({ item: this, container: this._dropContainer });
|
|
882
|
+
this._dropContainer.exit(this);
|
|
883
|
+
this._conditionallyInsertAnchor(newContainer, this._dropContainer, nextItemElement);
|
|
884
|
+
// Notify the new container that the item has entered.
|
|
885
|
+
this._dropContainer = newContainer;
|
|
886
|
+
this._dropContainer.enter(this, x, y,
|
|
887
|
+
// If we're re-entering the initial container and sorting is disabled,
|
|
888
|
+
// put item the into its starting index to begin with.
|
|
889
|
+
newContainer === this._initialContainer && newContainer.sortingDisabled ? this._initialIndex : undefined);
|
|
890
|
+
this.entered.next({
|
|
891
|
+
item: this,
|
|
892
|
+
container: newContainer,
|
|
893
|
+
currentIndex: newContainer.getItemIndex(this),
|
|
894
|
+
});
|
|
895
|
+
});
|
|
896
|
+
}
|
|
897
|
+
// Dragging may have been interrupted as a result of the events above.
|
|
898
|
+
if (this.isDragging()) {
|
|
899
|
+
this._dropContainer._startScrollingIfNecessary(rawX, rawY);
|
|
900
|
+
this._dropContainer._sortItem(this, x, y, this._pointerDirectionDelta);
|
|
901
|
+
if (this.constrainPosition) {
|
|
902
|
+
this._applyPreviewTransform(x, y);
|
|
903
|
+
}
|
|
904
|
+
else {
|
|
905
|
+
this._applyPreviewTransform(x - this._pickupPositionInElement.x, y - this._pickupPositionInElement.y);
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
/**
|
|
910
|
+
* Animates the preview element from its current position to the location of the drop placeholder.
|
|
911
|
+
* @returns Promise that resolves when the animation completes.
|
|
912
|
+
*/
|
|
913
|
+
_animatePreviewToPlaceholder() {
|
|
914
|
+
// If the user hasn't moved yet, the transitionend event won't fire.
|
|
915
|
+
if (!this._hasMoved) {
|
|
916
|
+
return Promise.resolve();
|
|
917
|
+
}
|
|
918
|
+
const placeholderRect = this._placeholder.getBoundingClientRect();
|
|
919
|
+
// Apply the class that adds a transition to the preview.
|
|
920
|
+
this._preview.addClass("cdk-drag-animating");
|
|
921
|
+
// Move the preview to the placeholder position.
|
|
922
|
+
this._applyPreviewTransform(placeholderRect.left, placeholderRect.top);
|
|
923
|
+
// If the element doesn't have a `transition`, the `transitionend` event won't fire. Since
|
|
924
|
+
// we need to trigger a style recalculation in order for the `cdk-drag-animating` class to
|
|
925
|
+
// apply its style, we take advantage of the available info to figure out whether we need to
|
|
926
|
+
// bind the event in the first place.
|
|
927
|
+
const duration = this._preview.getTransitionDuration();
|
|
928
|
+
if (duration === 0) {
|
|
929
|
+
return Promise.resolve();
|
|
930
|
+
}
|
|
931
|
+
return zone.runOutsideAngular(() => {
|
|
932
|
+
return new Promise((resolve) => {
|
|
933
|
+
const handler = (event) => {
|
|
934
|
+
if (!event || (this._preview && _getEventTarget(event) === this._preview.element && event.propertyName === "transform")) {
|
|
935
|
+
cleanupListener();
|
|
936
|
+
resolve();
|
|
937
|
+
clearTimeout(timeout);
|
|
938
|
+
}
|
|
939
|
+
};
|
|
940
|
+
// If a transition is short enough, the browser might not fire the `transitionend` event.
|
|
941
|
+
// Since we know how long it's supposed to take, add a timeout with a 50% buffer that'll
|
|
942
|
+
// fire if the transition hasn't completed when it was supposed to.
|
|
943
|
+
const timeout = setTimeout(handler, duration * 1.5);
|
|
944
|
+
const cleanupListener = this._preview.addEventListener("transitionend", handler);
|
|
945
|
+
});
|
|
946
|
+
});
|
|
947
|
+
}
|
|
948
|
+
/** Creates an element that will be shown instead of the current element while dragging. */
|
|
949
|
+
_createPlaceholderElement() {
|
|
950
|
+
const placeholderConfig = this._placeholderTemplate;
|
|
951
|
+
const placeholderTemplate = placeholderConfig ? placeholderConfig.template : null;
|
|
952
|
+
let placeholder;
|
|
953
|
+
if (placeholderTemplate) {
|
|
954
|
+
const view = stampTemplate(placeholderTemplate);
|
|
955
|
+
placeholder = getRootNode(view, this._document);
|
|
956
|
+
this._placeholderRef = view;
|
|
957
|
+
}
|
|
958
|
+
else {
|
|
959
|
+
placeholder = deepCloneNode(this._rootElement);
|
|
960
|
+
}
|
|
961
|
+
// Stop pointer events on the preview so the user can't
|
|
962
|
+
// interact with it while the preview is animating.
|
|
963
|
+
placeholder.style.pointerEvents = "none";
|
|
964
|
+
placeholder.classList.add(PLACEHOLDER_CLASS);
|
|
965
|
+
return placeholder;
|
|
966
|
+
}
|
|
967
|
+
/**
|
|
968
|
+
* Figures out the coordinates at which an element was picked up.
|
|
969
|
+
* @param referenceElement Element that initiated the dragging.
|
|
970
|
+
* @param event Event that initiated the dragging.
|
|
971
|
+
*/
|
|
972
|
+
_getPointerPositionInElement(elementRect, referenceElement, event) {
|
|
973
|
+
const handleElement = referenceElement === this._rootElement ? null : referenceElement;
|
|
974
|
+
const referenceRect = handleElement ? handleElement.getBoundingClientRect() : elementRect;
|
|
975
|
+
const point = isTouchEvent(event) ? event.targetTouches[0] : event;
|
|
976
|
+
const scrollPosition = this._getViewportScrollPosition();
|
|
977
|
+
const x = point.pageX - referenceRect.left - scrollPosition.left;
|
|
978
|
+
const y = point.pageY - referenceRect.top - scrollPosition.top;
|
|
979
|
+
return {
|
|
980
|
+
x: referenceRect.left - elementRect.left + x,
|
|
981
|
+
y: referenceRect.top - elementRect.top + y,
|
|
982
|
+
};
|
|
983
|
+
}
|
|
984
|
+
/** Determines the point of the page that was touched by the user. */
|
|
985
|
+
_getPointerPositionOnPage(event) {
|
|
986
|
+
const scrollPosition = this._getViewportScrollPosition();
|
|
987
|
+
const point = isTouchEvent(event)
|
|
988
|
+
? // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.
|
|
989
|
+
// Also note that on real devices we're guaranteed for either `touches` or `changedTouches`
|
|
990
|
+
// to have a value, but Firefox in device emulation mode has a bug where both can be empty
|
|
991
|
+
// for `touchstart` and `touchend` so we fall back to a dummy object in order to avoid
|
|
992
|
+
// throwing an error. The value returned here will be incorrect, but since this only
|
|
993
|
+
// breaks inside a developer tool and the value is only used for secondary information,
|
|
994
|
+
// we can get away with it. See https://bugzilla.mozilla.org/show_bug.cgi?id=1615824.
|
|
995
|
+
event.touches[0] || event.changedTouches[0] || { pageX: 0, pageY: 0 }
|
|
996
|
+
: event;
|
|
997
|
+
const x = point.pageX - scrollPosition.left;
|
|
998
|
+
const y = point.pageY - scrollPosition.top;
|
|
999
|
+
// if dragging SVG element, try to convert from the screen coordinate system to the SVG
|
|
1000
|
+
// coordinate system
|
|
1001
|
+
if (this._ownerSVGElement) {
|
|
1002
|
+
const svgMatrix = this._ownerSVGElement.getScreenCTM();
|
|
1003
|
+
if (svgMatrix) {
|
|
1004
|
+
const svgPoint = this._ownerSVGElement.createSVGPoint();
|
|
1005
|
+
svgPoint.x = x;
|
|
1006
|
+
svgPoint.y = y;
|
|
1007
|
+
return svgPoint.matrixTransform(svgMatrix.inverse());
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
return { x, y };
|
|
1011
|
+
}
|
|
1012
|
+
/** Gets the pointer position on the page, accounting for any position constraints. */
|
|
1013
|
+
_getConstrainedPointerPosition(point) {
|
|
1014
|
+
const dropContainerLock = this._dropContainer ? this._dropContainer.lockAxis : null;
|
|
1015
|
+
let { x, y } = this.constrainPosition ? this.constrainPosition(point, this, this._initialDomRect, this._pickupPositionInElement) : point;
|
|
1016
|
+
if (this.lockAxis === "x" || dropContainerLock === "x") {
|
|
1017
|
+
y = this._pickupPositionOnPage.y - (this.constrainPosition ? this._pickupPositionInElement.y : 0);
|
|
1018
|
+
}
|
|
1019
|
+
else if (this.lockAxis === "y" || dropContainerLock === "y") {
|
|
1020
|
+
x = this._pickupPositionOnPage.x - (this.constrainPosition ? this._pickupPositionInElement.x : 0);
|
|
1021
|
+
}
|
|
1022
|
+
if (this._boundaryRect) {
|
|
1023
|
+
// If not using a custom constrain we need to account for the pickup position in the element
|
|
1024
|
+
// otherwise we do not need to do this, as it has already been accounted for
|
|
1025
|
+
const { x: pickupX, y: pickupY } = !this.constrainPosition ? this._pickupPositionInElement : { x: 0, y: 0 };
|
|
1026
|
+
const boundaryRect = this._boundaryRect;
|
|
1027
|
+
const { width: previewWidth, height: previewHeight } = this._getPreviewRect();
|
|
1028
|
+
const minY = boundaryRect.top + pickupY;
|
|
1029
|
+
const maxY = boundaryRect.bottom - (previewHeight - pickupY);
|
|
1030
|
+
const minX = boundaryRect.left + pickupX;
|
|
1031
|
+
const maxX = boundaryRect.right - (previewWidth - pickupX);
|
|
1032
|
+
x = clamp(x, minX, maxX);
|
|
1033
|
+
y = clamp(y, minY, maxY);
|
|
1034
|
+
}
|
|
1035
|
+
return { x, y };
|
|
1036
|
+
}
|
|
1037
|
+
/** Updates the current drag delta, based on the user's current pointer position on the page. */
|
|
1038
|
+
_updatePointerDirectionDelta(pointerPositionOnPage) {
|
|
1039
|
+
const { x, y } = pointerPositionOnPage;
|
|
1040
|
+
const delta = this._pointerDirectionDelta;
|
|
1041
|
+
const positionSinceLastChange = this._pointerPositionAtLastDirectionChange;
|
|
1042
|
+
// Amount of pixels the user has dragged since the last time the direction changed.
|
|
1043
|
+
const changeX = Math.abs(x - positionSinceLastChange.x);
|
|
1044
|
+
const changeY = Math.abs(y - positionSinceLastChange.y);
|
|
1045
|
+
// Because we handle pointer events on a per-pixel basis, we don't want the delta
|
|
1046
|
+
// to change for every pixel, otherwise anything that depends on it can look erratic.
|
|
1047
|
+
// To make the delta more consistent, we track how much the user has moved since the last
|
|
1048
|
+
// delta change and we only update it after it has reached a certain threshold.
|
|
1049
|
+
if (changeX > this._config.pointerDirectionChangeThreshold) {
|
|
1050
|
+
delta.x = x > positionSinceLastChange.x ? 1 : -1;
|
|
1051
|
+
positionSinceLastChange.x = x;
|
|
1052
|
+
}
|
|
1053
|
+
if (changeY > this._config.pointerDirectionChangeThreshold) {
|
|
1054
|
+
delta.y = y > positionSinceLastChange.y ? 1 : -1;
|
|
1055
|
+
positionSinceLastChange.y = y;
|
|
1056
|
+
}
|
|
1057
|
+
return delta;
|
|
1058
|
+
}
|
|
1059
|
+
/** Toggles the native drag interactions, based on how many handles are registered. */
|
|
1060
|
+
_toggleNativeDragInteractions() {
|
|
1061
|
+
if (!this._rootElement || !this._handles) {
|
|
1062
|
+
return;
|
|
1063
|
+
}
|
|
1064
|
+
const shouldEnable = this._handles.length > 0 || !this.isDragging();
|
|
1065
|
+
if (shouldEnable !== this._nativeInteractionsEnabled) {
|
|
1066
|
+
this._nativeInteractionsEnabled = shouldEnable;
|
|
1067
|
+
toggleNativeDragInteractions(this._rootElement, shouldEnable);
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
/** Removes the manually-added event listeners from the root element. */
|
|
1071
|
+
_removeRootElementListeners() {
|
|
1072
|
+
this._rootElementCleanups?.forEach((cleanup) => cleanup());
|
|
1073
|
+
this._rootElementCleanups = undefined;
|
|
1074
|
+
}
|
|
1075
|
+
/**
|
|
1076
|
+
* Applies a `transform` to the root element, taking into account any existing transforms on it.
|
|
1077
|
+
* @param x New transform value along the X axis.
|
|
1078
|
+
* @param y New transform value along the Y axis.
|
|
1079
|
+
*/
|
|
1080
|
+
_applyRootElementTransform(x, y) {
|
|
1081
|
+
const scale = 1 / this.scale;
|
|
1082
|
+
const transform = getTransform(x * scale, y * scale);
|
|
1083
|
+
const styles = this._rootElement.style;
|
|
1084
|
+
// Cache the previous transform amount only after the first drag sequence, because
|
|
1085
|
+
// we don't want our own transforms to stack on top of each other.
|
|
1086
|
+
// Should be excluded none because none + translate3d(x, y, x) is invalid css
|
|
1087
|
+
if (this._initialTransform == null) {
|
|
1088
|
+
this._initialTransform = styles.transform && styles.transform != "none" ? styles.transform : "";
|
|
1089
|
+
}
|
|
1090
|
+
// Preserve the previous `transform` value, if there was one. Note that we apply our own
|
|
1091
|
+
// transform before the user's, because things like rotation can affect which direction
|
|
1092
|
+
// the element will be translated towards.
|
|
1093
|
+
styles.transform = combineTransforms(transform, this._initialTransform);
|
|
1094
|
+
}
|
|
1095
|
+
/**
|
|
1096
|
+
* Applies a `transform` to the preview, taking into account any existing transforms on it.
|
|
1097
|
+
* @param x New transform value along the X axis.
|
|
1098
|
+
* @param y New transform value along the Y axis.
|
|
1099
|
+
*/
|
|
1100
|
+
_applyPreviewTransform(x, y) {
|
|
1101
|
+
// Only apply the initial transform if the preview is a clone of the original element, otherwise
|
|
1102
|
+
// it could be completely different and the transform might not make sense anymore.
|
|
1103
|
+
const initialTransform = this._previewTemplate?.template ? undefined : this._initialTransform;
|
|
1104
|
+
const transform = getTransform(x, y);
|
|
1105
|
+
this._preview.setTransform(combineTransforms(transform, initialTransform));
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Gets the distance that the user has dragged during the current drag sequence.
|
|
1109
|
+
* @param currentPosition Current position of the user's pointer.
|
|
1110
|
+
*/
|
|
1111
|
+
_getDragDistance(currentPosition) {
|
|
1112
|
+
const pickupPosition = this._pickupPositionOnPage;
|
|
1113
|
+
if (pickupPosition) {
|
|
1114
|
+
return { x: currentPosition.x - pickupPosition.x, y: currentPosition.y - pickupPosition.y };
|
|
1115
|
+
}
|
|
1116
|
+
return { x: 0, y: 0 };
|
|
1117
|
+
}
|
|
1118
|
+
/** Cleans up any cached element dimensions that we don't need after dragging has stopped. */
|
|
1119
|
+
_cleanupCachedDimensions() {
|
|
1120
|
+
this._boundaryRect = this._previewRect = undefined;
|
|
1121
|
+
this._parentPositions.clear();
|
|
1122
|
+
}
|
|
1123
|
+
/**
|
|
1124
|
+
* Checks whether the element is still inside its boundary after the viewport has been resized.
|
|
1125
|
+
* If not, the position is adjusted so that the element fits again.
|
|
1126
|
+
*/
|
|
1127
|
+
_containInsideBoundaryOnResize() {
|
|
1128
|
+
let { x, y } = this._passiveTransform;
|
|
1129
|
+
if ((x === 0 && y === 0) || this.isDragging() || !this._boundaryElement) {
|
|
1130
|
+
return;
|
|
1131
|
+
}
|
|
1132
|
+
// Note: don't use `_clientRectAtStart` here, because we want the latest position.
|
|
1133
|
+
const elementRect = this._rootElement.getBoundingClientRect();
|
|
1134
|
+
const boundaryRect = this._boundaryElement.getBoundingClientRect();
|
|
1135
|
+
// It's possible that the element got hidden away after dragging (e.g. by switching to a
|
|
1136
|
+
// different tab). Don't do anything in this case so we don't clear the user's position.
|
|
1137
|
+
if ((boundaryRect.width === 0 && boundaryRect.height === 0) || (elementRect.width === 0 && elementRect.height === 0)) {
|
|
1138
|
+
return;
|
|
1139
|
+
}
|
|
1140
|
+
const leftOverflow = boundaryRect.left - elementRect.left;
|
|
1141
|
+
const rightOverflow = elementRect.right - boundaryRect.right;
|
|
1142
|
+
const topOverflow = boundaryRect.top - elementRect.top;
|
|
1143
|
+
const bottomOverflow = elementRect.bottom - boundaryRect.bottom;
|
|
1144
|
+
// If the element has become wider than the boundary, we can't
|
|
1145
|
+
// do much to make it fit so we just anchor it to the left.
|
|
1146
|
+
if (boundaryRect.width > elementRect.width) {
|
|
1147
|
+
if (leftOverflow > 0) {
|
|
1148
|
+
x += leftOverflow;
|
|
1149
|
+
}
|
|
1150
|
+
if (rightOverflow > 0) {
|
|
1151
|
+
x -= rightOverflow;
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
else {
|
|
1155
|
+
x = 0;
|
|
1156
|
+
}
|
|
1157
|
+
// If the element has become taller than the boundary, we can't
|
|
1158
|
+
// do much to make it fit so we just anchor it to the top.
|
|
1159
|
+
if (boundaryRect.height > elementRect.height) {
|
|
1160
|
+
if (topOverflow > 0) {
|
|
1161
|
+
y += topOverflow;
|
|
1162
|
+
}
|
|
1163
|
+
if (bottomOverflow > 0) {
|
|
1164
|
+
y -= bottomOverflow;
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
else {
|
|
1168
|
+
y = 0;
|
|
1169
|
+
}
|
|
1170
|
+
if (x !== this._passiveTransform.x || y !== this._passiveTransform.y) {
|
|
1171
|
+
this.setFreeDragPosition({ y, x });
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
/** Gets the drag start delay, based on the event type. */
|
|
1175
|
+
_getDragStartDelay(event) {
|
|
1176
|
+
const value = this.dragStartDelay;
|
|
1177
|
+
if (typeof value === "number") {
|
|
1178
|
+
return value;
|
|
1179
|
+
}
|
|
1180
|
+
else if (isTouchEvent(event)) {
|
|
1181
|
+
return value.touch;
|
|
1182
|
+
}
|
|
1183
|
+
return value ? value.mouse : 0;
|
|
1184
|
+
}
|
|
1185
|
+
/** Updates the internal state of the draggable element when scrolling has occurred. */
|
|
1186
|
+
_updateOnScroll(event) {
|
|
1187
|
+
const scrollDifference = this._parentPositions.handleScroll(event);
|
|
1188
|
+
if (scrollDifference) {
|
|
1189
|
+
const target = _getEventTarget(event);
|
|
1190
|
+
// DOMRect dimensions are based on the scroll position of the page and its parent
|
|
1191
|
+
// node so we have to update the cached boundary DOMRect if the user has scrolled.
|
|
1192
|
+
if (this._boundaryRect && target !== this._boundaryElement && target.contains(this._boundaryElement)) {
|
|
1193
|
+
adjustDomRect(this._boundaryRect, scrollDifference.top, scrollDifference.left);
|
|
1194
|
+
}
|
|
1195
|
+
this._pickupPositionOnPage.x += scrollDifference.left;
|
|
1196
|
+
this._pickupPositionOnPage.y += scrollDifference.top;
|
|
1197
|
+
// If we're in free drag mode, we have to update the active transform, because
|
|
1198
|
+
// it isn't relative to the viewport like the preview inside a drop list.
|
|
1199
|
+
if (!this._dropContainer) {
|
|
1200
|
+
this._activeTransform.x -= scrollDifference.left;
|
|
1201
|
+
this._activeTransform.y -= scrollDifference.top;
|
|
1202
|
+
this._applyRootElementTransform(this._activeTransform.x, this._activeTransform.y);
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
/** Gets the scroll position of the viewport. */
|
|
1207
|
+
_getViewportScrollPosition() {
|
|
1208
|
+
return this._parentPositions.positions.get(this._document)?.scrollPosition || this._parentPositions.getViewportScrollPosition();
|
|
1209
|
+
}
|
|
1210
|
+
/**
|
|
1211
|
+
* Lazily resolves and returns the shadow root of the element. We do this in a function, rather
|
|
1212
|
+
* than saving it in property directly on init, because we want to resolve it as late as possible
|
|
1213
|
+
* in order to ensure that the element has been moved into the shadow DOM. Doing it inside the
|
|
1214
|
+
* constructor might be too early if the element is inside of something like `ngFor` or `ngIf`.
|
|
1215
|
+
*/
|
|
1216
|
+
_getShadowRoot() {
|
|
1217
|
+
if (this._cachedShadowRoot === undefined) {
|
|
1218
|
+
this._cachedShadowRoot = _getShadowRoot(this._rootElement);
|
|
1219
|
+
}
|
|
1220
|
+
return this._cachedShadowRoot;
|
|
1221
|
+
}
|
|
1222
|
+
/** Gets the element into which the drag preview should be inserted. */
|
|
1223
|
+
_getPreviewInsertionPoint(initialParent, shadowRoot) {
|
|
1224
|
+
const previewContainer = this._previewContainer || "global";
|
|
1225
|
+
if (previewContainer === "parent") {
|
|
1226
|
+
return initialParent;
|
|
1227
|
+
}
|
|
1228
|
+
if (previewContainer === "global") {
|
|
1229
|
+
const documentRef = this._document;
|
|
1230
|
+
// We can't use the body if the user is in fullscreen mode,
|
|
1231
|
+
// because the preview will render under the fullscreen element.
|
|
1232
|
+
// TODO(crisbeto): dedupe this with the `FullscreenOverlayContainer` eventually.
|
|
1233
|
+
return shadowRoot || documentRef.fullscreenElement || documentRef.webkitFullscreenElement || documentRef.body;
|
|
1234
|
+
}
|
|
1235
|
+
return coerceElement(previewContainer);
|
|
1236
|
+
}
|
|
1237
|
+
/** Lazily resolves and returns the dimensions of the preview. */
|
|
1238
|
+
_getPreviewRect() {
|
|
1239
|
+
// Cache the preview element rect if we haven't cached it already or if
|
|
1240
|
+
// we cached it too early before the element dimensions were computed.
|
|
1241
|
+
if (!this._previewRect || (!this._previewRect.width && !this._previewRect.height)) {
|
|
1242
|
+
this._previewRect = this._preview ? this._preview.getBoundingClientRect() : this._initialDomRect;
|
|
1243
|
+
}
|
|
1244
|
+
return this._previewRect;
|
|
1245
|
+
}
|
|
1246
|
+
/** Handles a native `dragstart` event. */
|
|
1247
|
+
_nativeDragStart = (event) => {
|
|
1248
|
+
if (this._handles.length) {
|
|
1249
|
+
const targetHandle = this._getTargetHandle(event);
|
|
1250
|
+
if (targetHandle && !this._disabledHandles.has(targetHandle) && !this.disabled) {
|
|
1251
|
+
event.preventDefault();
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
else if (!this.disabled) {
|
|
1255
|
+
// Usually this isn't necessary since the we prevent the default action in `pointerDown`,
|
|
1256
|
+
// but some cases like dragging of links can slip through (see #24403).
|
|
1257
|
+
event.preventDefault();
|
|
1258
|
+
}
|
|
1259
|
+
};
|
|
1260
|
+
/** Gets a handle that is the target of an event. */
|
|
1261
|
+
_getTargetHandle(event) {
|
|
1262
|
+
return this._handles.find((handle) => {
|
|
1263
|
+
return event.target && (event.target === handle || handle.contains(event.target));
|
|
1264
|
+
});
|
|
1265
|
+
}
|
|
1266
|
+
/** Inserts the anchor element, if it's valid. */
|
|
1267
|
+
_conditionallyInsertAnchor(newContainer, exitContainer, nextItemElement) {
|
|
1268
|
+
// Remove the anchor when returning to the initial container.
|
|
1269
|
+
if (newContainer === this._initialContainer) {
|
|
1270
|
+
this._anchor?.remove();
|
|
1271
|
+
this._anchor = null;
|
|
1272
|
+
}
|
|
1273
|
+
else if (exitContainer === this._initialContainer && exitContainer.hasAnchor) {
|
|
1274
|
+
// Insert the anchor when leaving the initial container.
|
|
1275
|
+
const anchor = (this._anchor ??= deepCloneNode(this._placeholder));
|
|
1276
|
+
anchor.classList.remove(PLACEHOLDER_CLASS);
|
|
1277
|
+
anchor.classList.add("cdk-drag-anchor");
|
|
1278
|
+
// Clear the transform since the single-axis strategy uses transforms to sort the items.
|
|
1279
|
+
anchor.style.transform = "";
|
|
1280
|
+
// When the item leaves the initial container, the container's DOM will be restored to
|
|
1281
|
+
// its original state, except for the dragged item which is removed. Insert the anchor in
|
|
1282
|
+
// the position from which the item left so that the list looks consistent.
|
|
1283
|
+
if (nextItemElement) {
|
|
1284
|
+
nextItemElement.before(anchor);
|
|
1285
|
+
}
|
|
1286
|
+
else {
|
|
1287
|
+
coerceElement(exitContainer.element).appendChild(anchor);
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
/** Clamps a value between a minimum and a maximum. */
|
|
1293
|
+
function clamp(value, min, max) {
|
|
1294
|
+
return Math.max(min, Math.min(max, value));
|
|
1295
|
+
}
|
|
1296
|
+
/** Determines whether an event is a touch event. */
|
|
1297
|
+
function isTouchEvent(event) {
|
|
1298
|
+
// This function is called for every pixel that the user has dragged so we need it to be
|
|
1299
|
+
// as fast as possible. Since we only bind mouse events and touch events, we can assume
|
|
1300
|
+
// that if the event's name starts with `t`, it's a touch event.
|
|
1301
|
+
return event.type[0] === "t";
|
|
1302
|
+
}
|
|
1303
|
+
/** Callback invoked for `selectstart` events inside the shadow DOM. */
|
|
1304
|
+
function shadowDomSelectStart(event) {
|
|
1305
|
+
event.preventDefault();
|
|
1306
|
+
}
|