@angular/cdk 19.0.0-next.1 → 19.0.0-next.2

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.
Files changed (311) hide show
  1. package/a11y/index.d.ts +5 -1
  2. package/fesm2022/a11y.mjs +21 -11
  3. package/fesm2022/a11y.mjs.map +1 -1
  4. package/fesm2022/cdk.mjs +1 -1
  5. package/fesm2022/cdk.mjs.map +1 -1
  6. package/fesm2022/drag-drop.mjs +2 -1
  7. package/fesm2022/drag-drop.mjs.map +1 -1
  8. package/fesm2022/overlay.mjs +20 -1
  9. package/fesm2022/overlay.mjs.map +1 -1
  10. package/fesm2022/private.mjs +9 -7
  11. package/fesm2022/private.mjs.map +1 -1
  12. package/fesm2022/text-field.mjs +17 -2
  13. package/fesm2022/text-field.mjs.map +1 -1
  14. package/fesm2022/tree.mjs +13 -7
  15. package/fesm2022/tree.mjs.map +1 -1
  16. package/overlay/_index.scss +15 -13
  17. package/overlay/index.d.ts +5 -0
  18. package/overlay-prebuilt.css +1 -1
  19. package/package.json +1 -57
  20. package/private/index.d.ts +1 -0
  21. package/schematics/ng-add/index.js +1 -1
  22. package/schematics/ng-add/index.mjs +1 -1
  23. package/text-field/index.d.ts +1 -0
  24. package/tree/index.d.ts +3 -1
  25. package/esm2022/a11y/a11y-module.mjs +0 -31
  26. package/esm2022/a11y/a11y_public_index.mjs +0 -5
  27. package/esm2022/a11y/aria-describer/aria-describer.mjs +0 -232
  28. package/esm2022/a11y/aria-describer/aria-reference.mjs +0 -47
  29. package/esm2022/a11y/fake-event-detection.mjs +0 -29
  30. package/esm2022/a11y/focus-monitor/focus-monitor.mjs +0 -468
  31. package/esm2022/a11y/focus-trap/configurable-focus-trap-config.mjs +0 -9
  32. package/esm2022/a11y/focus-trap/configurable-focus-trap-factory.mjs +0 -54
  33. package/esm2022/a11y/focus-trap/configurable-focus-trap.mjs +0 -51
  34. package/esm2022/a11y/focus-trap/event-listener-inert-strategy.mjs +0 -61
  35. package/esm2022/a11y/focus-trap/focus-trap-inert-strategy.mjs +0 -11
  36. package/esm2022/a11y/focus-trap/focus-trap-manager.mjs +0 -53
  37. package/esm2022/a11y/focus-trap/focus-trap.mjs +0 -396
  38. package/esm2022/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +0 -116
  39. package/esm2022/a11y/index.mjs +0 -9
  40. package/esm2022/a11y/input-modality/input-modality-detector.mjs +0 -176
  41. package/esm2022/a11y/interactivity-checker/interactivity-checker.mjs +0 -238
  42. package/esm2022/a11y/key-manager/activedescendant-key-manager.mjs +0 -20
  43. package/esm2022/a11y/key-manager/focus-key-manager.mjs +0 -29
  44. package/esm2022/a11y/key-manager/list-key-manager.mjs +0 -357
  45. package/esm2022/a11y/key-manager/noop-tree-key-manager.mjs +0 -94
  46. package/esm2022/a11y/key-manager/tree-key-manager-strategy.mjs +0 -9
  47. package/esm2022/a11y/key-manager/tree-key-manager.mjs +0 -345
  48. package/esm2022/a11y/key-manager/typeahead.mjs +0 -91
  49. package/esm2022/a11y/live-announcer/live-announcer-tokens.mjs +0 -19
  50. package/esm2022/a11y/live-announcer/live-announcer.mjs +0 -210
  51. package/esm2022/a11y/public-api.mjs +0 -30
  52. package/esm2022/accordion/accordion-item.mjs +0 -162
  53. package/esm2022/accordion/accordion-module.mjs +0 -24
  54. package/esm2022/accordion/accordion.mjs +0 -65
  55. package/esm2022/accordion/accordion_public_index.mjs +0 -5
  56. package/esm2022/accordion/index.mjs +0 -9
  57. package/esm2022/accordion/public-api.mjs +0 -11
  58. package/esm2022/bidi/bidi-module.mjs +0 -23
  59. package/esm2022/bidi/bidi_public_index.mjs +0 -5
  60. package/esm2022/bidi/dir-document-token.mjs +0 -33
  61. package/esm2022/bidi/dir.mjs +0 -70
  62. package/esm2022/bidi/directionality.mjs +0 -52
  63. package/esm2022/bidi/index.mjs +0 -9
  64. package/esm2022/bidi/public-api.mjs +0 -12
  65. package/esm2022/clipboard/clipboard-module.mjs +0 -23
  66. package/esm2022/clipboard/clipboard.mjs +0 -53
  67. package/esm2022/clipboard/clipboard_public_index.mjs +0 -5
  68. package/esm2022/clipboard/copy-to-clipboard.mjs +0 -100
  69. package/esm2022/clipboard/index.mjs +0 -9
  70. package/esm2022/clipboard/pending-copy.mjs +0 -71
  71. package/esm2022/clipboard/public-api.mjs +0 -12
  72. package/esm2022/coercion/array.mjs +0 -11
  73. package/esm2022/coercion/boolean-property.mjs +0 -12
  74. package/esm2022/coercion/css-pixel-value.mjs +0 -15
  75. package/esm2022/coercion/element.mjs +0 -16
  76. package/esm2022/coercion/index.mjs +0 -9
  77. package/esm2022/coercion/number-property.mjs +0 -24
  78. package/esm2022/coercion/private/index.mjs +0 -9
  79. package/esm2022/coercion/private/observable.mjs +0 -19
  80. package/esm2022/coercion/private/private_public_index.mjs +0 -5
  81. package/esm2022/coercion/public-api.mjs +0 -14
  82. package/esm2022/coercion/string-array.mjs +0 -38
  83. package/esm2022/collections/array-data-source.mjs +0 -21
  84. package/esm2022/collections/collection-viewer.mjs +0 -9
  85. package/esm2022/collections/collections_public_index.mjs +0 -5
  86. package/esm2022/collections/data-source.mjs +0 -19
  87. package/esm2022/collections/dispose-view-repeater-strategy.mjs +0 -48
  88. package/esm2022/collections/index.mjs +0 -9
  89. package/esm2022/collections/public-api.mjs +0 -17
  90. package/esm2022/collections/recycle-view-repeater-strategy.mjs +0 -129
  91. package/esm2022/collections/selection-model.mjs +0 -225
  92. package/esm2022/collections/tree-adapter.mjs +0 -9
  93. package/esm2022/collections/unique-selection-dispatcher.mjs +0 -55
  94. package/esm2022/collections/view-repeater.mjs +0 -26
  95. package/esm2022/dialog/dialog-config.mjs +0 -70
  96. package/esm2022/dialog/dialog-container.mjs +0 -308
  97. package/esm2022/dialog/dialog-injectors.mjs +0 -40
  98. package/esm2022/dialog/dialog-module.mjs +0 -40
  99. package/esm2022/dialog/dialog-ref.mjs +0 -85
  100. package/esm2022/dialog/dialog.mjs +0 -303
  101. package/esm2022/dialog/dialog_public_index.mjs +0 -5
  102. package/esm2022/dialog/index.mjs +0 -9
  103. package/esm2022/dialog/public-api.mjs +0 -14
  104. package/esm2022/drag-drop/directives/assertions.mjs +0 -18
  105. package/esm2022/drag-drop/directives/config.mjs +0 -14
  106. package/esm2022/drag-drop/directives/drag-handle.mjs +0 -68
  107. package/esm2022/drag-drop/directives/drag-placeholder.mjs +0 -43
  108. package/esm2022/drag-drop/directives/drag-preview.mjs +0 -48
  109. package/esm2022/drag-drop/directives/drag.mjs +0 -520
  110. package/esm2022/drag-drop/directives/drop-list-group.mjs +0 -47
  111. package/esm2022/drag-drop/directives/drop-list.mjs +0 -352
  112. package/esm2022/drag-drop/dom/clone-node.mjs +0 -65
  113. package/esm2022/drag-drop/dom/dom-rect.mjs +0 -64
  114. package/esm2022/drag-drop/dom/parent-position-tracker.mjs +0 -76
  115. package/esm2022/drag-drop/dom/root-node.mjs +0 -21
  116. package/esm2022/drag-drop/dom/styling.mjs +0 -89
  117. package/esm2022/drag-drop/dom/transition-duration.mjs +0 -36
  118. package/esm2022/drag-drop/drag-drop-module.mjs +0 -49
  119. package/esm2022/drag-drop/drag-drop-registry.mjs +0 -248
  120. package/esm2022/drag-drop/drag-drop.mjs +0 -57
  121. package/esm2022/drag-drop/drag-drop_public_index.mjs +0 -5
  122. package/esm2022/drag-drop/drag-events.mjs +0 -9
  123. package/esm2022/drag-drop/drag-parent.mjs +0 -16
  124. package/esm2022/drag-drop/drag-ref.mjs +0 -1097
  125. package/esm2022/drag-drop/drag-utils.mjs +0 -60
  126. package/esm2022/drag-drop/drop-list-ref.mjs +0 -672
  127. package/esm2022/drag-drop/index.mjs +0 -9
  128. package/esm2022/drag-drop/preview-ref.mjs +0 -125
  129. package/esm2022/drag-drop/public-api.mjs +0 -23
  130. package/esm2022/drag-drop/sorting/drop-list-sort-strategy.mjs +0 -9
  131. package/esm2022/drag-drop/sorting/mixed-sort-strategy.mjs +0 -246
  132. package/esm2022/drag-drop/sorting/single-axis-sort-strategy.mjs +0 -343
  133. package/esm2022/index.mjs +0 -9
  134. package/esm2022/keycodes/index.mjs +0 -9
  135. package/esm2022/keycodes/keycodes.mjs +0 -127
  136. package/esm2022/keycodes/keycodes_public_index.mjs +0 -5
  137. package/esm2022/keycodes/modifiers.mjs +0 -18
  138. package/esm2022/keycodes/public-api.mjs +0 -10
  139. package/esm2022/layout/breakpoints-observer.mjs +0 -105
  140. package/esm2022/layout/breakpoints.mjs +0 -29
  141. package/esm2022/layout/index.mjs +0 -9
  142. package/esm2022/layout/layout-module.mjs +0 -19
  143. package/esm2022/layout/layout_public_index.mjs +0 -5
  144. package/esm2022/layout/media-matcher.mjs +0 -94
  145. package/esm2022/layout/public-api.mjs +0 -12
  146. package/esm2022/listbox/index.mjs +0 -9
  147. package/esm2022/listbox/listbox-module.mjs +0 -24
  148. package/esm2022/listbox/listbox.mjs +0 -888
  149. package/esm2022/listbox/listbox_public_index.mjs +0 -5
  150. package/esm2022/listbox/public-api.mjs +0 -10
  151. package/esm2022/menu/context-menu-trigger.mjs +0 -221
  152. package/esm2022/menu/event-detection.mjs +0 -28
  153. package/esm2022/menu/index.mjs +0 -9
  154. package/esm2022/menu/menu-aim.mjs +0 -204
  155. package/esm2022/menu/menu-bar.mjs +0 -134
  156. package/esm2022/menu/menu-base.mjs +0 -192
  157. package/esm2022/menu/menu-errors.mjs +0 -22
  158. package/esm2022/menu/menu-group.mjs +0 -31
  159. package/esm2022/menu/menu-interface.mjs +0 -11
  160. package/esm2022/menu/menu-item-checkbox.mjs +0 -50
  161. package/esm2022/menu/menu-item-radio.mjs +0 -72
  162. package/esm2022/menu/menu-item-selectable.mjs +0 -36
  163. package/esm2022/menu/menu-item.mjs +0 -270
  164. package/esm2022/menu/menu-module.mjs +0 -60
  165. package/esm2022/menu/menu-stack.mjs +0 -163
  166. package/esm2022/menu/menu-trigger-base.mjs +0 -119
  167. package/esm2022/menu/menu-trigger.mjs +0 -313
  168. package/esm2022/menu/menu.mjs +0 -135
  169. package/esm2022/menu/menu_public_index.mjs +0 -5
  170. package/esm2022/menu/pointer-focus-tracker.mjs +0 -51
  171. package/esm2022/menu/public-api.mjs +0 -24
  172. package/esm2022/observers/index.mjs +0 -9
  173. package/esm2022/observers/observe-content.mjs +0 -216
  174. package/esm2022/observers/observers_public_index.mjs +0 -5
  175. package/esm2022/observers/private/index.mjs +0 -9
  176. package/esm2022/observers/private/private_public_index.mjs +0 -5
  177. package/esm2022/observers/private/shared-resize-observer.mjs +0 -125
  178. package/esm2022/observers/public-api.mjs +0 -9
  179. package/esm2022/overlay/dispatchers/base-overlay-dispatcher.mjs +0 -52
  180. package/esm2022/overlay/dispatchers/index.mjs +0 -10
  181. package/esm2022/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +0 -81
  182. package/esm2022/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +0 -151
  183. package/esm2022/overlay/fullscreen-overlay-container.mjs +0 -94
  184. package/esm2022/overlay/index.mjs +0 -9
  185. package/esm2022/overlay/overlay-config.mjs +0 -45
  186. package/esm2022/overlay/overlay-container.mjs +0 -81
  187. package/esm2022/overlay/overlay-directives.mjs +0 -432
  188. package/esm2022/overlay/overlay-module.mjs +0 -28
  189. package/esm2022/overlay/overlay-ref.mjs +0 -437
  190. package/esm2022/overlay/overlay.mjs +0 -126
  191. package/esm2022/overlay/overlay_public_index.mjs +0 -5
  192. package/esm2022/overlay/position/connected-position.mjs +0 -88
  193. package/esm2022/overlay/position/flexible-connected-position-strategy.mjs +0 -1002
  194. package/esm2022/overlay/position/global-position-strategy.mjs +0 -237
  195. package/esm2022/overlay/position/overlay-position-builder.mjs +0 -50
  196. package/esm2022/overlay/position/position-strategy.mjs +0 -9
  197. package/esm2022/overlay/position/scroll-clip.mjs +0 -40
  198. package/esm2022/overlay/public-api.mjs +0 -22
  199. package/esm2022/overlay/scroll/block-scroll-strategy.mjs +0 -80
  200. package/esm2022/overlay/scroll/close-scroll-strategy.mjs +0 -65
  201. package/esm2022/overlay/scroll/index.mjs +0 -14
  202. package/esm2022/overlay/scroll/noop-scroll-strategy.mjs +0 -17
  203. package/esm2022/overlay/scroll/reposition-scroll-strategy.mjs +0 -61
  204. package/esm2022/overlay/scroll/scroll-strategy-options.mjs +0 -55
  205. package/esm2022/overlay/scroll/scroll-strategy.mjs +0 -14
  206. package/esm2022/platform/features/input-types.mjs +0 -59
  207. package/esm2022/platform/features/passive-listeners.mjs +0 -36
  208. package/esm2022/platform/features/scrolling.mjs +0 -104
  209. package/esm2022/platform/features/shadow-dom.mjs +0 -54
  210. package/esm2022/platform/features/test-environment.mjs +0 -24
  211. package/esm2022/platform/index.mjs +0 -9
  212. package/esm2022/platform/platform-module.mjs +0 -19
  213. package/esm2022/platform/platform.mjs +0 -82
  214. package/esm2022/platform/platform_public_index.mjs +0 -5
  215. package/esm2022/platform/public-api.mjs +0 -15
  216. package/esm2022/portal/dom-portal-outlet.mjs +0 -158
  217. package/esm2022/portal/index.mjs +0 -9
  218. package/esm2022/portal/portal-directives.mjs +0 -251
  219. package/esm2022/portal/portal-errors.mjs +0 -51
  220. package/esm2022/portal/portal-injector.mjs +0 -28
  221. package/esm2022/portal/portal.mjs +0 -189
  222. package/esm2022/portal/portal_public_index.mjs +0 -5
  223. package/esm2022/portal/public-api.mjs +0 -12
  224. package/esm2022/private/index.mjs +0 -9
  225. package/esm2022/private/private_public_index.mjs +0 -5
  226. package/esm2022/private/public-api.mjs +0 -9
  227. package/esm2022/private/style-loader.mjs +0 -50
  228. package/esm2022/public-api.mjs +0 -9
  229. package/esm2022/scrolling/fixed-size-virtual-scroll.mjs +0 -218
  230. package/esm2022/scrolling/index.mjs +0 -9
  231. package/esm2022/scrolling/public-api.mjs +0 -20
  232. package/esm2022/scrolling/scroll-dispatcher.mjs +0 -163
  233. package/esm2022/scrolling/scrollable.mjs +0 -177
  234. package/esm2022/scrolling/scrolling-module.mjs +0 -69
  235. package/esm2022/scrolling/scrolling_public_index.mjs +0 -5
  236. package/esm2022/scrolling/viewport-ruler.mjs +0 -146
  237. package/esm2022/scrolling/virtual-for-of.mjs +0 -299
  238. package/esm2022/scrolling/virtual-scroll-repeater.mjs +0 -9
  239. package/esm2022/scrolling/virtual-scroll-strategy.mjs +0 -11
  240. package/esm2022/scrolling/virtual-scroll-viewport.mjs +0 -445
  241. package/esm2022/scrolling/virtual-scrollable-element.mjs +0 -42
  242. package/esm2022/scrolling/virtual-scrollable-window.mjs +0 -41
  243. package/esm2022/scrolling/virtual-scrollable.mjs +0 -40
  244. package/esm2022/stepper/index.mjs +0 -9
  245. package/esm2022/stepper/public-api.mjs +0 -13
  246. package/esm2022/stepper/step-header.mjs +0 -31
  247. package/esm2022/stepper/step-label.mjs +0 -24
  248. package/esm2022/stepper/stepper-button.mjs +0 -58
  249. package/esm2022/stepper/stepper-module.mjs +0 -41
  250. package/esm2022/stepper/stepper.mjs +0 -452
  251. package/esm2022/stepper/stepper_public_index.mjs +0 -5
  252. package/esm2022/table/can-stick.mjs +0 -46
  253. package/esm2022/table/cell.mjs +0 -245
  254. package/esm2022/table/coalesced-style-scheduler.mjs +0 -79
  255. package/esm2022/table/index.mjs +0 -9
  256. package/esm2022/table/public-api.mjs +0 -20
  257. package/esm2022/table/row.mjs +0 -317
  258. package/esm2022/table/sticky-position-listener.mjs +0 -11
  259. package/esm2022/table/sticky-styler.mjs +0 -347
  260. package/esm2022/table/table-errors.mjs +0 -67
  261. package/esm2022/table/table-module.mjs +0 -93
  262. package/esm2022/table/table.mjs +0 -1148
  263. package/esm2022/table/table_public_index.mjs +0 -5
  264. package/esm2022/table/text-column.mjs +0 -154
  265. package/esm2022/table/tokens.mjs +0 -16
  266. package/esm2022/testing/change-detection.mjs +0 -102
  267. package/esm2022/testing/component-harness.mjs +0 -328
  268. package/esm2022/testing/element-dimensions.mjs +0 -9
  269. package/esm2022/testing/harness-environment.mjs +0 -220
  270. package/esm2022/testing/index.mjs +0 -9
  271. package/esm2022/testing/public-api.mjs +0 -15
  272. package/esm2022/testing/selenium-webdriver/index.mjs +0 -9
  273. package/esm2022/testing/selenium-webdriver/public-api.mjs +0 -10
  274. package/esm2022/testing/selenium-webdriver/selenium-web-driver-element.mjs +0 -216
  275. package/esm2022/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +0 -88
  276. package/esm2022/testing/selenium-webdriver/selenium-webdriver-keys.mjs +0 -64
  277. package/esm2022/testing/test-element-errors.mjs +0 -15
  278. package/esm2022/testing/test-element.mjs +0 -49
  279. package/esm2022/testing/testbed/fake-events/dispatch-events.mjs +0 -53
  280. package/esm2022/testing/testbed/fake-events/element-focus.mjs +0 -39
  281. package/esm2022/testing/testbed/fake-events/event-objects.mjs +0 -127
  282. package/esm2022/testing/testbed/fake-events/index.mjs +0 -14
  283. package/esm2022/testing/testbed/fake-events/type-in-element.mjs +0 -97
  284. package/esm2022/testing/testbed/index.mjs +0 -9
  285. package/esm2022/testing/testbed/public-api.mjs +0 -10
  286. package/esm2022/testing/testbed/task-state-zone-interceptor.mjs +0 -83
  287. package/esm2022/testing/testbed/testbed-harness-environment.mjs +0 -165
  288. package/esm2022/testing/testbed/unit-test-element.mjs +0 -258
  289. package/esm2022/testing/text-filtering.mjs +0 -21
  290. package/esm2022/text-field/autofill.mjs +0 -114
  291. package/esm2022/text-field/autosize.mjs +0 -309
  292. package/esm2022/text-field/index.mjs +0 -9
  293. package/esm2022/text-field/public-api.mjs +0 -11
  294. package/esm2022/text-field/text-field-module.mjs +0 -24
  295. package/esm2022/text-field/text-field_public_index.mjs +0 -5
  296. package/esm2022/tree/control/base-tree-control.mjs +0 -62
  297. package/esm2022/tree/control/flat-tree-control.mjs +0 -57
  298. package/esm2022/tree/control/nested-tree-control.mjs +0 -67
  299. package/esm2022/tree/control/tree-control.mjs +0 -2
  300. package/esm2022/tree/index.mjs +0 -9
  301. package/esm2022/tree/nested-node.mjs +0 -103
  302. package/esm2022/tree/node.mjs +0 -36
  303. package/esm2022/tree/outlet.mjs +0 -40
  304. package/esm2022/tree/padding.mjs +0 -129
  305. package/esm2022/tree/public-api.mjs +0 -20
  306. package/esm2022/tree/toggle.mjs +0 -51
  307. package/esm2022/tree/tree-errors.mjs +0 -44
  308. package/esm2022/tree/tree-module.mjs +0 -49
  309. package/esm2022/tree/tree.mjs +0 -1123
  310. package/esm2022/tree/tree_public_index.mjs +0 -5
  311. package/esm2022/version.mjs +0 -11
@@ -1,9 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- export * from './public-api';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2RyYWctZHJvcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -1,125 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { extendStyles, getTransform, matchElementSize, toggleNativeDragInteractions, } from './dom/styling';
9
- import { deepCloneNode } from './dom/clone-node';
10
- import { getRootNode } from './dom/root-node';
11
- import { getTransformTransitionDurationInMs } from './dom/transition-duration';
12
- /** Inline styles to be set as `!important` while dragging. */
13
- const importantProperties = new Set([
14
- // Needs to be important, because some `mat-table` sets `position: sticky !important`. See #22781.
15
- 'position',
16
- ]);
17
- export class PreviewRef {
18
- get element() {
19
- return this._preview;
20
- }
21
- constructor(_document, _rootElement, _direction, _initialDomRect, _previewTemplate, _previewClass, _pickupPositionOnPage, _initialTransform, _zIndex) {
22
- this._document = _document;
23
- this._rootElement = _rootElement;
24
- this._direction = _direction;
25
- this._initialDomRect = _initialDomRect;
26
- this._previewTemplate = _previewTemplate;
27
- this._previewClass = _previewClass;
28
- this._pickupPositionOnPage = _pickupPositionOnPage;
29
- this._initialTransform = _initialTransform;
30
- this._zIndex = _zIndex;
31
- }
32
- attach(parent) {
33
- this._preview = this._createPreview();
34
- parent.appendChild(this._preview);
35
- // The null check is necessary for browsers that don't support the popover API.
36
- // Note that we use a string access for compatibility with Closure.
37
- if (supportsPopover(this._preview)) {
38
- this._preview['showPopover']();
39
- }
40
- }
41
- destroy() {
42
- this._preview.remove();
43
- this._previewEmbeddedView?.destroy();
44
- this._preview = this._previewEmbeddedView = null;
45
- }
46
- setTransform(value) {
47
- this._preview.style.transform = value;
48
- }
49
- getBoundingClientRect() {
50
- return this._preview.getBoundingClientRect();
51
- }
52
- addClass(className) {
53
- this._preview.classList.add(className);
54
- }
55
- getTransitionDuration() {
56
- return getTransformTransitionDurationInMs(this._preview);
57
- }
58
- addEventListener(name, handler) {
59
- this._preview.addEventListener(name, handler);
60
- }
61
- removeEventListener(name, handler) {
62
- this._preview.removeEventListener(name, handler);
63
- }
64
- _createPreview() {
65
- const previewConfig = this._previewTemplate;
66
- const previewClass = this._previewClass;
67
- const previewTemplate = previewConfig ? previewConfig.template : null;
68
- let preview;
69
- if (previewTemplate && previewConfig) {
70
- // Measure the element before we've inserted the preview
71
- // since the insertion could throw off the measurement.
72
- const rootRect = previewConfig.matchSize ? this._initialDomRect : null;
73
- const viewRef = previewConfig.viewContainer.createEmbeddedView(previewTemplate, previewConfig.context);
74
- viewRef.detectChanges();
75
- preview = getRootNode(viewRef, this._document);
76
- this._previewEmbeddedView = viewRef;
77
- if (previewConfig.matchSize) {
78
- matchElementSize(preview, rootRect);
79
- }
80
- else {
81
- preview.style.transform = getTransform(this._pickupPositionOnPage.x, this._pickupPositionOnPage.y);
82
- }
83
- }
84
- else {
85
- preview = deepCloneNode(this._rootElement);
86
- matchElementSize(preview, this._initialDomRect);
87
- if (this._initialTransform) {
88
- preview.style.transform = this._initialTransform;
89
- }
90
- }
91
- extendStyles(preview.style, {
92
- // It's important that we disable the pointer events on the preview, because
93
- // it can throw off the `document.elementFromPoint` calls in the `CdkDropList`.
94
- 'pointer-events': 'none',
95
- // If the preview has a margin, it can throw off our positioning so we reset it. The reset
96
- // value for `margin-right` needs to be `auto` when opened as a popover, because our
97
- // positioning is always top/left based, but native popover seems to position itself
98
- // to the top/right if `<html>` or `<body>` have `dir="rtl"` (see #29604). Setting it
99
- // to `auto` pushed it to the top/left corner in RTL and is a noop in LTR.
100
- 'margin': supportsPopover(preview) ? '0 auto 0 0' : '0',
101
- 'position': 'fixed',
102
- 'top': '0',
103
- 'left': '0',
104
- 'z-index': this._zIndex + '',
105
- }, importantProperties);
106
- toggleNativeDragInteractions(preview, false);
107
- preview.classList.add('cdk-drag-preview');
108
- preview.setAttribute('popover', 'manual');
109
- preview.setAttribute('dir', this._direction);
110
- if (previewClass) {
111
- if (Array.isArray(previewClass)) {
112
- previewClass.forEach(className => preview.classList.add(className));
113
- }
114
- else {
115
- preview.classList.add(previewClass);
116
- }
117
- }
118
- return preview;
119
- }
120
- }
121
- /** Checks whether a specific element supports the popover API. */
122
- function supportsPopover(element) {
123
- return 'showPopover' in element;
124
- }
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2RyYWctZHJvcC9wcmV2aWV3LXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsNEJBQTRCLEdBQzdCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFVN0UsOERBQThEO0FBQzlELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMsa0dBQWtHO0lBQ2xHLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSCxNQUFNLE9BQU8sVUFBVTtJQU9yQixJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFlBQ1UsU0FBbUIsRUFDbkIsWUFBeUIsRUFDekIsVUFBcUIsRUFDckIsZUFBd0IsRUFDeEIsZ0JBQTRDLEVBQzVDLGFBQXVDLEVBQ3ZDLHFCQUdQLEVBQ08saUJBQWdDLEVBQ2hDLE9BQWU7UUFYZixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLGVBQVUsR0FBVixVQUFVLENBQVc7UUFDckIsb0JBQWUsR0FBZixlQUFlLENBQVM7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE0QjtRQUM1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBMEI7UUFDdkMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUc1QjtRQUNPLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBZTtRQUNoQyxZQUFPLEdBQVAsT0FBTyxDQUFRO0lBQ3RCLENBQUM7SUFFSixNQUFNLENBQUMsTUFBbUI7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbEMsK0VBQStFO1FBQy9FLG1FQUFtRTtRQUNuRSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSyxDQUFDO0lBQ3BELENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFpQjtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLE9BQTJDO1FBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsT0FBMkM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDeEMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEUsSUFBSSxPQUFvQixDQUFDO1FBRXpCLElBQUksZUFBZSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3JDLHdEQUF3RDtZQUN4RCx1REFBdUQ7WUFDdkQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZFLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQzVELGVBQWUsRUFDZixhQUFhLENBQUMsT0FBTyxDQUN0QixDQUFDO1lBQ0YsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDO1lBQ3BDLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUyxDQUFDLENBQUM7WUFDdkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FDcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFDNUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FDN0IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZ0IsQ0FBQyxDQUFDO1lBRWpELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztRQUVELFlBQVksQ0FDVixPQUFPLENBQUMsS0FBSyxFQUNiO1lBQ0UsNEVBQTRFO1lBQzVFLCtFQUErRTtZQUMvRSxnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLDBGQUEwRjtZQUMxRixvRkFBb0Y7WUFDcEYsb0ZBQW9GO1lBQ3BGLHFGQUFxRjtZQUNyRiwwRUFBMEU7WUFDMUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQ3ZELFVBQVUsRUFBRSxPQUFPO1lBQ25CLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLEdBQUc7WUFDWCxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFO1NBQzdCLEVBQ0QsbUJBQW1CLENBQ3BCLENBQUM7UUFFRiw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFN0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBRUQsa0VBQWtFO0FBQ2xFLFNBQVMsZUFBZSxDQUFDLE9BQW9CO0lBQzNDLE9BQU8sYUFBYSxJQUFJLE9BQU8sQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RW1iZWRkZWRWaWV3UmVmLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpcmVjdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHtcbiAgZXh0ZW5kU3R5bGVzLFxuICBnZXRUcmFuc2Zvcm0sXG4gIG1hdGNoRWxlbWVudFNpemUsXG4gIHRvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMsXG59IGZyb20gJy4vZG9tL3N0eWxpbmcnO1xuaW1wb3J0IHtkZWVwQ2xvbmVOb2RlfSBmcm9tICcuL2RvbS9jbG9uZS1ub2RlJztcbmltcG9ydCB7Z2V0Um9vdE5vZGV9IGZyb20gJy4vZG9tL3Jvb3Qtbm9kZSc7XG5pbXBvcnQge2dldFRyYW5zZm9ybVRyYW5zaXRpb25EdXJhdGlvbkluTXN9IGZyb20gJy4vZG9tL3RyYW5zaXRpb24tZHVyYXRpb24nO1xuXG4vKiogVGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBkcmFnIHByZXZpZXcgZWxlbWVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJhZ1ByZXZpZXdUZW1wbGF0ZTxUID0gYW55PiB7XG4gIG1hdGNoU2l6ZT86IGJvb2xlYW47XG4gIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxUPiB8IG51bGw7XG4gIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIGNvbnRleHQ6IFQ7XG59XG5cbi8qKiBJbmxpbmUgc3R5bGVzIHRvIGJlIHNldCBhcyBgIWltcG9ydGFudGAgd2hpbGUgZHJhZ2dpbmcuICovXG5jb25zdCBpbXBvcnRhbnRQcm9wZXJ0aWVzID0gbmV3IFNldChbXG4gIC8vIE5lZWRzIHRvIGJlIGltcG9ydGFudCwgYmVjYXVzZSBzb21lIGBtYXQtdGFibGVgIHNldHMgYHBvc2l0aW9uOiBzdGlja3kgIWltcG9ydGFudGAuIFNlZSAjMjI3ODEuXG4gICdwb3NpdGlvbicsXG5dKTtcblxuZXhwb3J0IGNsYXNzIFByZXZpZXdSZWYge1xuICAvKiogUmVmZXJlbmNlIHRvIHRoZSB2aWV3IG9mIHRoZSBwcmV2aWV3IGVsZW1lbnQuICovXG4gIHByaXZhdGUgX3ByZXZpZXdFbWJlZGRlZFZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+IHwgbnVsbDtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBwcmV2aWV3IGVsZW1lbnQuICovXG4gIHByaXZhdGUgX3ByZXZpZXc6IEhUTUxFbGVtZW50O1xuXG4gIGdldCBlbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fcHJldmlldztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIF9yb290RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gICAgcHJpdmF0ZSBfaW5pdGlhbERvbVJlY3Q6IERPTVJlY3QsXG4gICAgcHJpdmF0ZSBfcHJldmlld1RlbXBsYXRlOiBEcmFnUHJldmlld1RlbXBsYXRlIHwgbnVsbCxcbiAgICBwcml2YXRlIF9wcmV2aWV3Q2xhc3M6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCxcbiAgICBwcml2YXRlIF9waWNrdXBQb3NpdGlvbk9uUGFnZToge1xuICAgICAgeDogbnVtYmVyO1xuICAgICAgeTogbnVtYmVyO1xuICAgIH0sXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFRyYW5zZm9ybTogc3RyaW5nIHwgbnVsbCxcbiAgICBwcml2YXRlIF96SW5kZXg6IG51bWJlcixcbiAgKSB7fVxuXG4gIGF0dGFjaChwYXJlbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fcHJldmlldyA9IHRoaXMuX2NyZWF0ZVByZXZpZXcoKTtcbiAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5fcHJldmlldyk7XG5cbiAgICAvLyBUaGUgbnVsbCBjaGVjayBpcyBuZWNlc3NhcnkgZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgcG9wb3ZlciBBUEkuXG4gICAgLy8gTm90ZSB0aGF0IHdlIHVzZSBhIHN0cmluZyBhY2Nlc3MgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDbG9zdXJlLlxuICAgIGlmIChzdXBwb3J0c1BvcG92ZXIodGhpcy5fcHJldmlldykpIHtcbiAgICAgIHRoaXMuX3ByZXZpZXdbJ3Nob3dQb3BvdmVyJ10oKTtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3ByZXZpZXcucmVtb3ZlKCk7XG4gICAgdGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz8uZGVzdHJveSgpO1xuICAgIHRoaXMuX3ByZXZpZXcgPSB0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3ID0gbnVsbCE7XG4gIH1cblxuICBzZXRUcmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtID0gdmFsdWU7XG4gIH1cblxuICBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKTogRE9NUmVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cblxuICBhZGRDbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3ByZXZpZXcuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG5cbiAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGdldFRyYW5zZm9ybVRyYW5zaXRpb25EdXJhdGlvbkluTXModGhpcy5fcHJldmlldyk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgaGFuZGxlcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCkge1xuICAgIHRoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBoYW5kbGVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0KSB7XG4gICAgdGhpcy5fcHJldmlldy5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGhhbmRsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlUHJldmlldygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgcHJldmlld0NvbmZpZyA9IHRoaXMuX3ByZXZpZXdUZW1wbGF0ZTtcbiAgICBjb25zdCBwcmV2aWV3Q2xhc3MgPSB0aGlzLl9wcmV2aWV3Q2xhc3M7XG4gICAgY29uc3QgcHJldmlld1RlbXBsYXRlID0gcHJldmlld0NvbmZpZyA/IHByZXZpZXdDb25maWcudGVtcGxhdGUgOiBudWxsO1xuICAgIGxldCBwcmV2aWV3OiBIVE1MRWxlbWVudDtcblxuICAgIGlmIChwcmV2aWV3VGVtcGxhdGUgJiYgcHJldmlld0NvbmZpZykge1xuICAgICAgLy8gTWVhc3VyZSB0aGUgZWxlbWVudCBiZWZvcmUgd2UndmUgaW5zZXJ0ZWQgdGhlIHByZXZpZXdcbiAgICAgIC8vIHNpbmNlIHRoZSBpbnNlcnRpb24gY291bGQgdGhyb3cgb2ZmIHRoZSBtZWFzdXJlbWVudC5cbiAgICAgIGNvbnN0IHJvb3RSZWN0ID0gcHJldmlld0NvbmZpZy5tYXRjaFNpemUgPyB0aGlzLl9pbml0aWFsRG9tUmVjdCA6IG51bGw7XG4gICAgICBjb25zdCB2aWV3UmVmID0gcHJldmlld0NvbmZpZy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgcHJldmlld1RlbXBsYXRlLFxuICAgICAgICBwcmV2aWV3Q29uZmlnLmNvbnRleHQsXG4gICAgICApO1xuICAgICAgdmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBwcmV2aWV3ID0gZ2V0Um9vdE5vZGUodmlld1JlZiwgdGhpcy5fZG9jdW1lbnQpO1xuICAgICAgdGhpcy5fcHJldmlld0VtYmVkZGVkVmlldyA9IHZpZXdSZWY7XG4gICAgICBpZiAocHJldmlld0NvbmZpZy5tYXRjaFNpemUpIHtcbiAgICAgICAgbWF0Y2hFbGVtZW50U2l6ZShwcmV2aWV3LCByb290UmVjdCEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlldy5zdHlsZS50cmFuc2Zvcm0gPSBnZXRUcmFuc2Zvcm0oXG4gICAgICAgICAgdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCxcbiAgICAgICAgICB0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwcmV2aWV3ID0gZGVlcENsb25lTm9kZSh0aGlzLl9yb290RWxlbWVudCk7XG4gICAgICBtYXRjaEVsZW1lbnRTaXplKHByZXZpZXcsIHRoaXMuX2luaXRpYWxEb21SZWN0ISk7XG5cbiAgICAgIGlmICh0aGlzLl9pbml0aWFsVHJhbnNmb3JtKSB7XG4gICAgICAgIHByZXZpZXcuc3R5bGUudHJhbnNmb3JtID0gdGhpcy5faW5pdGlhbFRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHRlbmRTdHlsZXMoXG4gICAgICBwcmV2aWV3LnN0eWxlLFxuICAgICAge1xuICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHdlIGRpc2FibGUgdGhlIHBvaW50ZXIgZXZlbnRzIG9uIHRoZSBwcmV2aWV3LCBiZWNhdXNlXG4gICAgICAgIC8vIGl0IGNhbiB0aHJvdyBvZmYgdGhlIGBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50YCBjYWxscyBpbiB0aGUgYENka0Ryb3BMaXN0YC5cbiAgICAgICAgJ3BvaW50ZXItZXZlbnRzJzogJ25vbmUnLFxuICAgICAgICAvLyBJZiB0aGUgcHJldmlldyBoYXMgYSBtYXJnaW4sIGl0IGNhbiB0aHJvdyBvZmYgb3VyIHBvc2l0aW9uaW5nIHNvIHdlIHJlc2V0IGl0LiBUaGUgcmVzZXRcbiAgICAgICAgLy8gdmFsdWUgZm9yIGBtYXJnaW4tcmlnaHRgIG5lZWRzIHRvIGJlIGBhdXRvYCB3aGVuIG9wZW5lZCBhcyBhIHBvcG92ZXIsIGJlY2F1c2Ugb3VyXG4gICAgICAgIC8vIHBvc2l0aW9uaW5nIGlzIGFsd2F5cyB0b3AvbGVmdCBiYXNlZCwgYnV0IG5hdGl2ZSBwb3BvdmVyIHNlZW1zIHRvIHBvc2l0aW9uIGl0c2VsZlxuICAgICAgICAvLyB0byB0aGUgdG9wL3JpZ2h0IGlmIGA8aHRtbD5gIG9yIGA8Ym9keT5gIGhhdmUgYGRpcj1cInJ0bFwiYCAoc2VlICMyOTYwNCkuIFNldHRpbmcgaXRcbiAgICAgICAgLy8gdG8gYGF1dG9gIHB1c2hlZCBpdCB0byB0aGUgdG9wL2xlZnQgY29ybmVyIGluIFJUTCBhbmQgaXMgYSBub29wIGluIExUUi5cbiAgICAgICAgJ21hcmdpbic6IHN1cHBvcnRzUG9wb3ZlcihwcmV2aWV3KSA/ICcwIGF1dG8gMCAwJyA6ICcwJyxcbiAgICAgICAgJ3Bvc2l0aW9uJzogJ2ZpeGVkJyxcbiAgICAgICAgJ3RvcCc6ICcwJyxcbiAgICAgICAgJ2xlZnQnOiAnMCcsXG4gICAgICAgICd6LWluZGV4JzogdGhpcy5fekluZGV4ICsgJycsXG4gICAgICB9LFxuICAgICAgaW1wb3J0YW50UHJvcGVydGllcyxcbiAgICApO1xuXG4gICAgdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucyhwcmV2aWV3LCBmYWxzZSk7XG4gICAgcHJldmlldy5jbGFzc0xpc3QuYWRkKCdjZGstZHJhZy1wcmV2aWV3Jyk7XG4gICAgcHJldmlldy5zZXRBdHRyaWJ1dGUoJ3BvcG92ZXInLCAnbWFudWFsJyk7XG4gICAgcHJldmlldy5zZXRBdHRyaWJ1dGUoJ2RpcicsIHRoaXMuX2RpcmVjdGlvbik7XG5cbiAgICBpZiAocHJldmlld0NsYXNzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwcmV2aWV3Q2xhc3MpKSB7XG4gICAgICAgIHByZXZpZXdDbGFzcy5mb3JFYWNoKGNsYXNzTmFtZSA9PiBwcmV2aWV3LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2aWV3LmNsYXNzTGlzdC5hZGQocHJldmlld0NsYXNzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJldmlldztcbiAgfVxufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgYSBzcGVjaWZpYyBlbGVtZW50IHN1cHBvcnRzIHRoZSBwb3BvdmVyIEFQSS4gKi9cbmZ1bmN0aW9uIHN1cHBvcnRzUG9wb3ZlcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ3Nob3dQb3BvdmVyJyBpbiBlbGVtZW50O1xufVxuIl19
@@ -1,23 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- export { DragDrop } from './drag-drop';
9
- export { DragRef } from './drag-ref';
10
- export { DropListRef } from './drop-list-ref';
11
- export { CDK_DRAG_PARENT } from './drag-parent';
12
- export * from './drag-events';
13
- export * from './drag-utils';
14
- export * from './drag-drop-module';
15
- export { DragDropRegistry } from './drag-drop-registry';
16
- export { CdkDropList } from './directives/drop-list';
17
- export * from './directives/config';
18
- export * from './directives/drop-list-group';
19
- export * from './directives/drag';
20
- export * from './directives/drag-handle';
21
- export * from './directives/drag-preview';
22
- export * from './directives/drag-placeholder';
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvZHJhZy1kcm9wL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsT0FBTyxFQUF5QyxNQUFNLFlBQVksQ0FBQztBQUMzRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU5QyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0RyYWdEcm9wfSBmcm9tICcuL2RyYWctZHJvcCc7XG5leHBvcnQge0RyYWdSZWYsIERyYWdSZWZDb25maWcsIFBvaW50LCBQcmV2aWV3Q29udGFpbmVyfSBmcm9tICcuL2RyYWctcmVmJztcbmV4cG9ydCB7RHJvcExpc3RSZWZ9IGZyb20gJy4vZHJvcC1saXN0LXJlZic7XG5leHBvcnQge0NES19EUkFHX1BBUkVOVH0gZnJvbSAnLi9kcmFnLXBhcmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZHJhZy1ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmFnLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZHJhZy1kcm9wLW1vZHVsZSc7XG5leHBvcnQge0RyYWdEcm9wUmVnaXN0cnl9IGZyb20gJy4vZHJhZy1kcm9wLXJlZ2lzdHJ5JztcblxuZXhwb3J0IHtDZGtEcm9wTGlzdH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Ryb3AtbGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9kcm9wLWxpc3QtZ3JvdXAnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2RyYWcnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2RyYWctaGFuZGxlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9kcmFnLXByZXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2RyYWctcGxhY2Vob2xkZXInO1xuIl19
@@ -1,9 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1saXN0LXNvcnQtc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2RyYWctZHJvcC9zb3J0aW5nL2Ryb3AtbGlzdC1zb3J0LXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7RHJhZ1JlZn0gZnJvbSAnLi4vZHJhZy1yZWYnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBpdGVtIGNhbiBiZSBzb3J0ZWQgaW50byBhIHBhcnRpY3VsYXIgaW5kZXguXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIFNvcnRQcmVkaWNhdGU8VD4gPSAoaW5kZXg6IG51bWJlciwgaXRlbTogVCkgPT4gYm9vbGVhbjtcblxuLyoqXG4gKiBTdHJhdGVneSB1c2VkIHRvIHNvcnQgYW5kIHBvc2l0aW9uIGl0ZW1zIHdpdGhpbiBhIGRyb3AgbGlzdC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcm9wTGlzdFNvcnRTdHJhdGVneSB7XG4gIHN0YXJ0KGl0ZW1zOiByZWFkb25seSBEcmFnUmVmW10pOiB2b2lkO1xuICBzb3J0KFxuICAgIGl0ZW06IERyYWdSZWYsXG4gICAgcG9pbnRlclg6IG51bWJlcixcbiAgICBwb2ludGVyWTogbnVtYmVyLFxuICAgIHBvaW50ZXJEZWx0YToge3g6IG51bWJlcjsgeTogbnVtYmVyfSxcbiAgKToge3ByZXZpb3VzSW5kZXg6IG51bWJlcjsgY3VycmVudEluZGV4OiBudW1iZXJ9IHwgbnVsbDtcbiAgZW50ZXIoaXRlbTogRHJhZ1JlZiwgcG9pbnRlclg6IG51bWJlciwgcG9pbnRlclk6IG51bWJlciwgaW5kZXg/OiBudW1iZXIpOiB2b2lkO1xuICB3aXRoSXRlbXMoaXRlbXM6IHJlYWRvbmx5IERyYWdSZWZbXSk6IHZvaWQ7XG4gIHdpdGhTb3J0UHJlZGljYXRlKHByZWRpY2F0ZTogU29ydFByZWRpY2F0ZTxEcmFnUmVmPik6IHZvaWQ7XG4gIHdpdGhFbGVtZW50Q29udGFpbmVyKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpOiB2b2lkO1xuICByZXNldCgpOiB2b2lkO1xuICBnZXRBY3RpdmVJdGVtc1NuYXBzaG90KCk6IHJlYWRvbmx5IERyYWdSZWZbXTtcbiAgZ2V0SXRlbUluZGV4KGl0ZW06IERyYWdSZWYpOiBudW1iZXI7XG4gIHVwZGF0ZU9uU2Nyb2xsKHRvcERpZmZlcmVuY2U6IG51bWJlciwgbGVmdERpZmZlcmVuY2U6IG51bWJlcik6IHZvaWQ7XG59XG4iXX0=
@@ -1,246 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { _getShadowRoot } from '@angular/cdk/platform';
9
- import { moveItemInArray } from '../drag-utils';
10
- /**
11
- * Strategy that only supports sorting on a list that might wrap.
12
- * Items are reordered by moving their DOM nodes around.
13
- * @docs-private
14
- */
15
- export class MixedSortStrategy {
16
- constructor(_document, _dragDropRegistry) {
17
- this._document = _document;
18
- this._dragDropRegistry = _dragDropRegistry;
19
- /**
20
- * Keeps track of the item that was last swapped with the dragged item, as well as what direction
21
- * the pointer was moving in when the swap occurred and whether the user's pointer continued to
22
- * overlap with the swapped item after the swapping occurred.
23
- */
24
- this._previousSwap = {
25
- drag: null,
26
- deltaX: 0,
27
- deltaY: 0,
28
- overlaps: false,
29
- };
30
- /**
31
- * Keeps track of the relationship between a node and its next sibling. This information
32
- * is used to restore the DOM to the order it was in before dragging started.
33
- */
34
- this._relatedNodes = [];
35
- }
36
- /**
37
- * To be called when the drag sequence starts.
38
- * @param items Items that are currently in the list.
39
- */
40
- start(items) {
41
- const childNodes = this._element.childNodes;
42
- this._relatedNodes = [];
43
- for (let i = 0; i < childNodes.length; i++) {
44
- const node = childNodes[i];
45
- this._relatedNodes.push([node, node.nextSibling]);
46
- }
47
- this.withItems(items);
48
- }
49
- /**
50
- * To be called when an item is being sorted.
51
- * @param item Item to be sorted.
52
- * @param pointerX Position of the item along the X axis.
53
- * @param pointerY Position of the item along the Y axis.
54
- * @param pointerDelta Direction in which the pointer is moving along each axis.
55
- */
56
- sort(item, pointerX, pointerY, pointerDelta) {
57
- const newIndex = this._getItemIndexFromPointerPosition(item, pointerX, pointerY);
58
- const previousSwap = this._previousSwap;
59
- if (newIndex === -1 || this._activeItems[newIndex] === item) {
60
- return null;
61
- }
62
- const toSwapWith = this._activeItems[newIndex];
63
- // Prevent too many swaps over the same item.
64
- if (previousSwap.drag === toSwapWith &&
65
- previousSwap.overlaps &&
66
- previousSwap.deltaX === pointerDelta.x &&
67
- previousSwap.deltaY === pointerDelta.y) {
68
- return null;
69
- }
70
- const previousIndex = this.getItemIndex(item);
71
- const current = item.getPlaceholderElement();
72
- const overlapElement = toSwapWith.getRootElement();
73
- if (newIndex > previousIndex) {
74
- overlapElement.after(current);
75
- }
76
- else {
77
- overlapElement.before(current);
78
- }
79
- moveItemInArray(this._activeItems, previousIndex, newIndex);
80
- const newOverlapElement = this._getRootNode().elementFromPoint(pointerX, pointerY);
81
- // Note: it's tempting to save the entire `pointerDelta` object here, however that'll
82
- // break this functionality, because the same object is passed for all `sort` calls.
83
- previousSwap.deltaX = pointerDelta.x;
84
- previousSwap.deltaY = pointerDelta.y;
85
- previousSwap.drag = toSwapWith;
86
- previousSwap.overlaps =
87
- overlapElement === newOverlapElement || overlapElement.contains(newOverlapElement);
88
- return {
89
- previousIndex,
90
- currentIndex: newIndex,
91
- };
92
- }
93
- /**
94
- * Called when an item is being moved into the container.
95
- * @param item Item that was moved into the container.
96
- * @param pointerX Position of the item along the X axis.
97
- * @param pointerY Position of the item along the Y axis.
98
- * @param index Index at which the item entered. If omitted, the container will try to figure it
99
- * out automatically.
100
- */
101
- enter(item, pointerX, pointerY, index) {
102
- let enterIndex = index == null || index < 0
103
- ? this._getItemIndexFromPointerPosition(item, pointerX, pointerY)
104
- : index;
105
- // In some cases (e.g. when the container has padding) we might not be able to figure
106
- // out which item to insert the dragged item next to, because the pointer didn't overlap
107
- // with anything. In that case we find the item that's closest to the pointer.
108
- if (enterIndex === -1) {
109
- enterIndex = this._getClosestItemIndexToPointer(item, pointerX, pointerY);
110
- }
111
- const targetItem = this._activeItems[enterIndex];
112
- const currentIndex = this._activeItems.indexOf(item);
113
- if (currentIndex > -1) {
114
- this._activeItems.splice(currentIndex, 1);
115
- }
116
- if (targetItem && !this._dragDropRegistry.isDragging(targetItem)) {
117
- this._activeItems.splice(enterIndex, 0, item);
118
- targetItem.getRootElement().before(item.getPlaceholderElement());
119
- }
120
- else {
121
- this._activeItems.push(item);
122
- this._element.appendChild(item.getPlaceholderElement());
123
- }
124
- }
125
- /** Sets the items that are currently part of the list. */
126
- withItems(items) {
127
- this._activeItems = items.slice();
128
- }
129
- /** Assigns a sort predicate to the strategy. */
130
- withSortPredicate(predicate) {
131
- this._sortPredicate = predicate;
132
- }
133
- /** Resets the strategy to its initial state before dragging was started. */
134
- reset() {
135
- const root = this._element;
136
- const previousSwap = this._previousSwap;
137
- // Moving elements around in the DOM can break things like the `@for` loop, because it
138
- // uses comment nodes to know where to insert elements. To avoid such issues, we restore
139
- // the DOM nodes in the list to their original order when the list is reset.
140
- // Note that this could be simpler if we just saved all the nodes, cleared the root
141
- // and then appended them in the original order. We don't do it, because it can break
142
- // down depending on when the snapshot was taken. E.g. we may end up snapshotting the
143
- // placeholder element which is removed after dragging.
144
- for (let i = this._relatedNodes.length - 1; i > -1; i--) {
145
- const [node, nextSibling] = this._relatedNodes[i];
146
- if (node.parentNode === root && node.nextSibling !== nextSibling) {
147
- if (nextSibling === null) {
148
- root.appendChild(node);
149
- }
150
- else if (nextSibling.parentNode === root) {
151
- root.insertBefore(node, nextSibling);
152
- }
153
- }
154
- }
155
- this._relatedNodes = [];
156
- this._activeItems = [];
157
- previousSwap.drag = null;
158
- previousSwap.deltaX = previousSwap.deltaY = 0;
159
- previousSwap.overlaps = false;
160
- }
161
- /**
162
- * Gets a snapshot of items currently in the list.
163
- * Can include items that we dragged in from another list.
164
- */
165
- getActiveItemsSnapshot() {
166
- return this._activeItems;
167
- }
168
- /** Gets the index of a specific item. */
169
- getItemIndex(item) {
170
- return this._activeItems.indexOf(item);
171
- }
172
- /** Used to notify the strategy that the scroll position has changed. */
173
- updateOnScroll() {
174
- this._activeItems.forEach(item => {
175
- if (this._dragDropRegistry.isDragging(item)) {
176
- // We need to re-sort the item manually, because the pointer move
177
- // events won't be dispatched while the user is scrolling.
178
- item._sortFromLastPointerPosition();
179
- }
180
- });
181
- }
182
- withElementContainer(container) {
183
- if (container !== this._element) {
184
- this._element = container;
185
- this._rootNode = undefined;
186
- }
187
- }
188
- /**
189
- * Gets the index of an item in the drop container, based on the position of the user's pointer.
190
- * @param item Item that is being sorted.
191
- * @param pointerX Position of the user's pointer along the X axis.
192
- * @param pointerY Position of the user's pointer along the Y axis.
193
- * @param delta Direction in which the user is moving their pointer.
194
- */
195
- _getItemIndexFromPointerPosition(item, pointerX, pointerY) {
196
- const elementAtPoint = this._getRootNode().elementFromPoint(Math.floor(pointerX), Math.floor(pointerY));
197
- const index = elementAtPoint
198
- ? this._activeItems.findIndex(item => {
199
- const root = item.getRootElement();
200
- return elementAtPoint === root || root.contains(elementAtPoint);
201
- })
202
- : -1;
203
- return index === -1 || !this._sortPredicate(index, item) ? -1 : index;
204
- }
205
- /** Lazily resolves the list's root node. */
206
- _getRootNode() {
207
- // Resolve the root node lazily to ensure that the drop list is in its final place in the DOM.
208
- if (!this._rootNode) {
209
- this._rootNode = _getShadowRoot(this._element) || this._document;
210
- }
211
- return this._rootNode;
212
- }
213
- /**
214
- * Finds the index of the item that's closest to the item being dragged.
215
- * @param item Item being dragged.
216
- * @param pointerX Position of the user's pointer along the X axis.
217
- * @param pointerY Position of the user's pointer along the Y axis.
218
- */
219
- _getClosestItemIndexToPointer(item, pointerX, pointerY) {
220
- if (this._activeItems.length === 0) {
221
- return -1;
222
- }
223
- if (this._activeItems.length === 1) {
224
- return 0;
225
- }
226
- let minDistance = Infinity;
227
- let minIndex = -1;
228
- // Find the Euclidean distance (https://en.wikipedia.org/wiki/Euclidean_distance) between each
229
- // item and the pointer, and return the smallest one. Note that this is a bit flawed in that DOM
230
- // nodes are rectangles, not points, so we use the top/left coordinates. It should be enough
231
- // for our purposes.
232
- for (let i = 0; i < this._activeItems.length; i++) {
233
- const current = this._activeItems[i];
234
- if (current !== item) {
235
- const { x, y } = current.getRootElement().getBoundingClientRect();
236
- const distance = Math.hypot(pointerX - x, pointerY - y);
237
- if (distance < minDistance) {
238
- minDistance = distance;
239
- minIndex = i;
240
- }
241
- }
242
- }
243
- return minIndex;
244
- }
245
- }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWQtc29ydC1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvZHJhZy1kcm9wL3NvcnRpbmcvbWl4ZWQtc29ydC1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUs5Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQW1DNUIsWUFDVSxTQUFtQixFQUNuQixpQkFBbUM7UUFEbkMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBcEI3Qzs7OztXQUlHO1FBQ0ssa0JBQWEsR0FBRztZQUN0QixJQUFJLEVBQUUsSUFBc0I7WUFDNUIsTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUM7UUFFRjs7O1dBR0c7UUFDSyxrQkFBYSxHQUE2QyxFQUFFLENBQUM7SUFLbEUsQ0FBQztJQUVKOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUF5QjtRQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztR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QixFQUFFLENBQUM7Z0JBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRXhELElBQUksUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO29CQUMzQixXQUFXLEdBQUcsUUFBUSxDQUFDO29CQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge19nZXRTaGFkb3dSb290fSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHttb3ZlSXRlbUluQXJyYXl9IGZyb20gJy4uL2RyYWctdXRpbHMnO1xuaW1wb3J0IHtEcm9wTGlzdFNvcnRTdHJhdGVneSwgU29ydFByZWRpY2F0ZX0gZnJvbSAnLi9kcm9wLWxpc3Qtc29ydC1zdHJhdGVneSc7XG5pbXBvcnQge0RyYWdEcm9wUmVnaXN0cnl9IGZyb20gJy4uL2RyYWctZHJvcC1yZWdpc3RyeSc7XG5pbXBvcnQgdHlwZSB7RHJhZ1JlZn0gZnJvbSAnLi4vZHJhZy1yZWYnO1xuXG4vKipcbiAqIFN0cmF0ZWd5IHRoYXQgb25seSBzdXBwb3J0cyBzb3J0aW5nIG9uIGEgbGlzdCB0aGF0IG1pZ2h0IHdyYXAuXG4gKiBJdGVtcyBhcmUgcmVvcmRlcmVkIGJ5IG1vdmluZyB0aGVpciBET00gbm9kZXMgYXJvdW5kLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgTWl4ZWRTb3J0U3RyYXRlZ3kgaW1wbGVtZW50cyBEcm9wTGlzdFNvcnRTdHJhdGVneSB7XG4gIC8qKiBSb290IGVsZW1lbnQgY29udGFpbmVyIG9mIHRoZSBkcm9wIGxpc3QuICovXG4gIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gIC8qKiBGdW5jdGlvbiB1c2VkIHRvIGRldGVybWluZSBpZiBhbiBpdGVtIGNhbiBiZSBzb3J0ZWQgaW50byBhIHNwZWNpZmljIGluZGV4LiAqL1xuICBwcml2YXRlIF9zb3J0UHJlZGljYXRlOiBTb3J0UHJlZGljYXRlPERyYWdSZWY+O1xuXG4gIC8qKiBMYXppbHktcmVzb2x2ZWQgcm9vdCBub2RlIGNvbnRhaW5pbmcgdGhlIGxpc3QuIFVzZSBgX2dldFJvb3ROb2RlYCB0byByZWFkIHRoaXMuICovXG4gIHByaXZhdGUgX3Jvb3ROb2RlOiBEb2N1bWVudE9yU2hhZG93Um9vdCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRHJhZ2dhYmxlIGl0ZW1zIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUgaW5zaWRlIHRoZSBjb250YWluZXIuIEluY2x1ZGVzIHRoZSBpdGVtc1xuICAgKiB0aGF0IHdlcmUgdGhlcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSwgYXMgd2VsbCBhcyBhbnkgaXRlbXMgdGhhdCBoYXZlIGJlZW4gZHJhZ2dlZFxuICAgKiBpbiwgYnV0IGhhdmVuJ3QgYmVlbiBkcm9wcGVkIHlldC5cbiAgICovXG4gIHByaXZhdGUgX2FjdGl2ZUl0ZW1zOiBEcmFnUmVmW107XG5cbiAgLyoqXG4gICAqIEtlZXBzIHRyYWNrIG9mIHRoZSBpdGVtIHRoYXQgd2FzIGxhc3Qgc3dhcHBlZCB3aXRoIHRoZSBkcmFnZ2VkIGl0ZW0sIGFzIHdlbGwgYXMgd2hhdCBkaXJlY3Rpb25cbiAgICogdGhlIHBvaW50ZXIgd2FzIG1vdmluZyBpbiB3aGVuIHRoZSBzd2FwIG9jY3VycmVkIGFuZCB3aGV0aGVyIHRoZSB1c2VyJ3MgcG9pbnRlciBjb250aW51ZWQgdG9cbiAgICogb3ZlcmxhcCB3aXRoIHRoZSBzd2FwcGVkIGl0ZW0gYWZ0ZXIgdGhlIHN3YXBwaW5nIG9jY3VycmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNTd2FwID0ge1xuICAgIGRyYWc6IG51bGwgYXMgRHJhZ1JlZiB8IG51bGwsXG4gICAgZGVsdGFYOiAwLFxuICAgIGRlbHRhWTogMCxcbiAgICBvdmVybGFwczogZmFsc2UsXG4gIH07XG5cbiAgLyoqXG4gICAqIEtlZXBzIHRyYWNrIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhIG5vZGUgYW5kIGl0cyBuZXh0IHNpYmxpbmcuIFRoaXMgaW5mb3JtYXRpb25cbiAgICogaXMgdXNlZCB0byByZXN0b3JlIHRoZSBET00gdG8gdGhlIG9yZGVyIGl0IHdhcyBpbiBiZWZvcmUgZHJhZ2dpbmcgc3RhcnRlZC5cbiAgICovXG4gIHByaXZhdGUgX3JlbGF0ZWROb2RlczogW25vZGU6IE5vZGUsIG5leHRTaWJsaW5nOiBOb2RlIHwgbnVsbF1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIF9kcmFnRHJvcFJlZ2lzdHJ5OiBEcmFnRHJvcFJlZ2lzdHJ5LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSBkcmFnIHNlcXVlbmNlIHN0YXJ0cy5cbiAgICogQHBhcmFtIGl0ZW1zIEl0ZW1zIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB0aGUgbGlzdC5cbiAgICovXG4gIHN0YXJ0KGl0ZW1zOiByZWFkb25seSBEcmFnUmVmW10pOiB2b2lkIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5fZWxlbWVudC5jaGlsZE5vZGVzO1xuICAgIHRoaXMuX3JlbGF0ZWROb2RlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgIHRoaXMuX3JlbGF0ZWROb2Rlcy5wdXNoKFtub2RlLCBub2RlLm5leHRTaWJsaW5nXSk7XG4gICAgfVxuXG4gICAgdGhpcy53aXRoSXRlbXMoaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFuIGl0ZW0gaXMgYmVpbmcgc29ydGVkLlxuICAgKiBAcGFyYW0gaXRlbSBJdGVtIHRvIGJlIHNvcnRlZC5cbiAgICogQHBhcmFtIHBvaW50ZXJYIFBvc2l0aW9uIG9mIHRoZSBpdGVtIGFsb25nIHRoZSBYIGF4aXMuXG4gICAqIEBwYXJhbSBwb2ludGVyWSBQb3NpdGlvbiBvZiB0aGUgaXRlbSBhbG9uZyB0aGUgWSBheGlzLlxuICAgKiBAcGFyYW0gcG9pbnRlckRlbHRhIERpcmVjdGlvbiBpbiB3aGljaCB0aGUgcG9pbnRlciBpcyBtb3ZpbmcgYWxvbmcgZWFjaCBheGlzLlxuICAgKi9cbiAgc29ydChcbiAgICBpdGVtOiBEcmFnUmVmLFxuICAgIHBvaW50ZXJYOiBudW1iZXIsXG4gICAgcG9pbnRlclk6IG51bWJlcixcbiAgICBwb2ludGVyRGVsdGE6IHt4OiBudW1iZXI7IHk6IG51bWJlcn0sXG4gICk6IHtwcmV2aW91c0luZGV4OiBudW1iZXI7IGN1cnJlbnRJbmRleDogbnVtYmVyfSB8IG51bGwge1xuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihpdGVtLCBwb2ludGVyWCwgcG9pbnRlclkpO1xuICAgIGNvbnN0IHByZXZpb3VzU3dhcCA9IHRoaXMuX3ByZXZpb3VzU3dhcDtcblxuICAgIGlmIChuZXdJbmRleCA9PT0gLTEgfHwgdGhpcy5fYWN0aXZlSXRlbXNbbmV3SW5kZXhdID09PSBpdGVtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0b1N3YXBXaXRoID0gdGhpcy5fYWN0aXZlSXRlbXNbbmV3SW5kZXhdO1xuXG4gICAgLy8gUHJldmVudCB0b28gbWFueSBzd2FwcyBvdmVyIHRoZSBzYW1lIGl0ZW0uXG4gICAgaWYgKFxuICAgICAgcHJldmlvdXNTd2FwLmRyYWcgPT09IHRvU3dhcFdpdGggJiZcbiAgICAgIHByZXZpb3VzU3dhcC5vdmVybGFwcyAmJlxuICAgICAgcHJldmlvdXNTd2FwLmRlbHRhWCA9PT0gcG9pbnRlckRlbHRhLnggJiZcbiAgICAgIHByZXZpb3VzU3dhcC5kZWx0YVkgPT09IHBvaW50ZXJEZWx0YS55XG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgoaXRlbSk7XG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW0uZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk7XG4gICAgY29uc3Qgb3ZlcmxhcEVsZW1lbnQgPSB0b1N3YXBXaXRoLmdldFJvb3RFbGVtZW50KCk7XG5cbiAgICBpZiAobmV3SW5kZXggPiBwcmV2aW91c0luZGV4KSB7XG4gICAgICBvdmVybGFwRWxlbWVudC5hZnRlcihjdXJyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3ZlcmxhcEVsZW1lbnQuYmVmb3JlKGN1cnJlbnQpO1xuICAgIH1cblxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLl9hY3RpdmVJdGVtcywgcHJldmlvdXNJbmRleCwgbmV3SW5kZXgpO1xuXG4gICAgY29uc3QgbmV3T3ZlcmxhcEVsZW1lbnQgPSB0aGlzLl9nZXRSb290Tm9kZSgpLmVsZW1lbnRGcm9tUG9pbnQocG9pbnRlclgsIHBvaW50ZXJZKTtcbiAgICAvLyBOb3RlOiBpdCdzIHRlbXB0aW5nIHRvIHNhdmUgdGhlIGVudGlyZSBgcG9pbnRlckRlbHRhYCBvYmplY3QgaGVyZSwgaG93ZXZlciB0aGF0J2xsXG4gICAgLy8gYnJlYWsgdGhpcyBmdW5jdGlvbmFsaXR5LCBiZWNhdXNlIHRoZSBzYW1lIG9iamVjdCBpcyBwYXNzZWQgZm9yIGFsbCBgc29ydGAgY2FsbHMuXG4gICAgcHJldmlvdXNTd2FwLmRlbHRhWCA9IHBvaW50ZXJEZWx0YS54O1xuICAgIHByZXZpb3VzU3dhcC5kZWx0YVkgPSBwb2ludGVyRGVsdGEueTtcbiAgICBwcmV2aW91c1N3YXAuZHJhZyA9IHRvU3dhcFdpdGg7XG4gICAgcHJldmlvdXNTd2FwLm92ZXJsYXBzID1cbiAgICAgIG92ZXJsYXBFbGVtZW50ID09PSBuZXdPdmVybGFwRWxlbWVudCB8fCBvdmVybGFwRWxlbWVudC5jb250YWlucyhuZXdPdmVybGFwRWxlbWVudCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleDogbmV3SW5kZXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhbiBpdGVtIGlzIGJlaW5nIG1vdmVkIGludG8gdGhlIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIGl0ZW0gSXRlbSB0aGF0IHdhcyBtb3ZlZCBpbnRvIHRoZSBjb250YWluZXIuXG4gICAqIEBwYXJhbSBwb2ludGVyWCBQb3NpdGlvbiBvZiB0aGUgaXRlbSBhbG9uZyB0aGUgWCBheGlzLlxuICAgKiBAcGFyYW0gcG9pbnRlclkgUG9zaXRpb24gb2YgdGhlIGl0ZW0gYWxvbmcgdGhlIFkgYXhpcy5cbiAgICogQHBhcmFtIGluZGV4IEluZGV4IGF0IHdoaWNoIHRoZSBpdGVtIGVudGVyZWQuIElmIG9taXR0ZWQsIHRoZSBjb250YWluZXIgd2lsbCB0cnkgdG8gZmlndXJlIGl0XG4gICAqICAgb3V0IGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBlbnRlcihpdGVtOiBEcmFnUmVmLCBwb2ludGVyWDogbnVtYmVyLCBwb2ludGVyWTogbnVtYmVyLCBpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBlbnRlckluZGV4ID1cbiAgICAgIGluZGV4ID09IG51bGwgfHwgaW5kZXggPCAwXG4gICAgICAgID8gdGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihpdGVtLCBwb2ludGVyWCwgcG9pbnRlclkpXG4gICAgICAgIDogaW5kZXg7XG5cbiAgICAvLyBJbiBzb21lIGNhc2VzIChlLmcuIHdoZW4gdGhlIGNvbnRhaW5lciBoYXMgcGFkZGluZykgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gZmlndXJlXG4gICAgLy8gb3V0IHdoaWNoIGl0ZW0gdG8gaW5zZXJ0IHRoZSBkcmFnZ2VkIGl0ZW0gbmV4dCB0bywgYmVjYXVzZSB0aGUgcG9pbnRlciBkaWRuJ3Qgb3ZlcmxhcFxuICAgIC8vIHdpdGggYW55dGhpbmcuIEluIHRoYXQgY2FzZSB3ZSBmaW5kIHRoZSBpdGVtIHRoYXQncyBjbG9zZXN0IHRvIHRoZSBwb2ludGVyLlxuICAgIGlmIChlbnRlckluZGV4ID09PSAtMSkge1xuICAgICAgZW50ZXJJbmRleCA9IHRoaXMuX2dldENsb3Nlc3RJdGVtSW5kZXhUb1BvaW50ZXIoaXRlbSwgcG9pbnRlclgsIHBvaW50ZXJZKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRJdGVtID0gdGhpcy5fYWN0aXZlSXRlbXNbZW50ZXJJbmRleF0gYXMgRHJhZ1JlZiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLl9hY3RpdmVJdGVtcy5pbmRleE9mKGl0ZW0pO1xuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLl9hY3RpdmVJdGVtcy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0SXRlbSAmJiAhdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRhcmdldEl0ZW0pKSB7XG4gICAgICB0aGlzLl9hY3RpdmVJdGVtcy5zcGxpY2UoZW50ZXJJbmRleCwgMCwgaXRlbSk7XG4gICAgICB0YXJnZXRJdGVtLmdldFJvb3RFbGVtZW50KCkuYmVmb3JlKGl0ZW0uZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hY3RpdmVJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChpdGVtLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgaXRlbXMgdGhhdCBhcmUgY3VycmVudGx5IHBhcnQgb2YgdGhlIGxpc3QuICovXG4gIHdpdGhJdGVtcyhpdGVtczogcmVhZG9ubHkgRHJhZ1JlZltdKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlSXRlbXMgPSBpdGVtcy5zbGljZSgpO1xuICB9XG5cbiAgLyoqIEFzc2lnbnMgYSBzb3J0IHByZWRpY2F0ZSB0byB0aGUgc3RyYXRlZ3kuICovXG4gIHdpdGhTb3J0UHJlZGljYXRlKHByZWRpY2F0ZTogU29ydFByZWRpY2F0ZTxEcmFnUmVmPik6IHZvaWQge1xuICAgIHRoaXMuX3NvcnRQcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gIH1cblxuICAvKiogUmVzZXRzIHRoZSBzdHJhdGVneSB0byBpdHMgaW5pdGlhbCBzdGF0ZSBiZWZvcmUgZHJhZ2dpbmcgd2FzIHN0YXJ0ZWQuICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9lbGVtZW50O1xuICAgIGNvbnN0IHByZXZpb3VzU3dhcCA9IHRoaXMuX3ByZXZpb3VzU3dhcDtcblxuICAgIC8vIE1vdmluZyBlbGVtZW50cyBhcm91bmQgaW4gdGhlIERPTSBjYW4gYnJlYWsgdGhpbmdzIGxpa2UgdGhlIGBAZm9yYCBsb29wLCBiZWNhdXNlIGl0XG4gICAgLy8gdXNlcyBjb21tZW50IG5vZGVzIHRvIGtub3cgd2hlcmUgdG8gaW5zZXJ0IGVsZW1lbnRzLiBUbyBhdm9pZCBzdWNoIGlzc3Vlcywgd2UgcmVzdG9yZVxuICAgIC8vIHRoZSBET00gbm9kZXMgaW4gdGhlIGxpc3QgdG8gdGhlaXIgb3JpZ2luYWwgb3JkZXIgd2hlbiB0aGUgbGlzdCBpcyByZXNldC5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcyBjb3VsZCBiZSBzaW1wbGVyIGlmIHdlIGp1c3Qgc2F2ZWQgYWxsIHRoZSBub2RlcywgY2xlYXJlZCB0aGUgcm9vdFxuICAgIC8vIGFuZCB0aGVuIGFwcGVuZGVkIHRoZW0gaW4gdGhlIG9yaWdpbmFsIG9yZGVyLiBXZSBkb24ndCBkbyBpdCwgYmVjYXVzZSBpdCBjYW4gYnJlYWtcbiAgICAvLyBkb3duIGRlcGVuZGluZyBvbiB3aGVuIHRoZSBzbmFwc2hvdCB3YXMgdGFrZW4uIEUuZy4gd2UgbWF5IGVuZCB1cCBzbmFwc2hvdHRpbmcgdGhlXG4gICAgLy8gcGxhY2Vob2xkZXIgZWxlbWVudCB3aGljaCBpcyByZW1vdmVkIGFmdGVyIGRyYWdnaW5nLlxuICAgIGZvciAobGV0IGkgPSB0aGlzLl9yZWxhdGVkTm9kZXMubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcbiAgICAgIGNvbnN0IFtub2RlLCBuZXh0U2libGluZ10gPSB0aGlzLl9yZWxhdGVkTm9kZXNbaV07XG4gICAgICBpZiAobm9kZS5wYXJlbnROb2RlID09PSByb290ICYmIG5vZGUubmV4dFNpYmxpbmcgIT09IG5leHRTaWJsaW5nKSB7XG4gICAgICAgIGlmIChuZXh0U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dFNpYmxpbmcucGFyZW50Tm9kZSA9PT0gcm9vdCkge1xuICAgICAgICAgIHJvb3QuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3JlbGF0ZWROb2RlcyA9IFtdO1xuICAgIHRoaXMuX2FjdGl2ZUl0ZW1zID0gW107XG4gICAgcHJldmlvdXNTd2FwLmRyYWcgPSBudWxsO1xuICAgIHByZXZpb3VzU3dhcC5kZWx0YVggPSBwcmV2aW91c1N3YXAuZGVsdGFZID0gMDtcbiAgICBwcmV2aW91c1N3YXAub3ZlcmxhcHMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgc25hcHNob3Qgb2YgaXRlbXMgY3VycmVudGx5IGluIHRoZSBsaXN0LlxuICAgKiBDYW4gaW5jbHVkZSBpdGVtcyB0aGF0IHdlIGRyYWdnZWQgaW4gZnJvbSBhbm90aGVyIGxpc3QuXG4gICAqL1xuICBnZXRBY3RpdmVJdGVtc1NuYXBzaG90KCk6IHJlYWRvbmx5IERyYWdSZWZbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1zO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGluZGV4IG9mIGEgc3BlY2lmaWMgaXRlbS4gKi9cbiAgZ2V0SXRlbUluZGV4KGl0ZW06IERyYWdSZWYpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVJdGVtcy5pbmRleE9mKGl0ZW0pO1xuICB9XG5cbiAgLyoqIFVzZWQgdG8gbm90aWZ5IHRoZSBzdHJhdGVneSB0aGF0IHRoZSBzY3JvbGwgcG9zaXRpb24gaGFzIGNoYW5nZWQuICovXG4gIHVwZGF0ZU9uU2Nyb2xsKCk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2ZUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKGl0ZW0pKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmUtc29ydCB0aGUgaXRlbSBtYW51YWxseSwgYmVjYXVzZSB0aGUgcG9pbnRlciBtb3ZlXG4gICAgICAgIC8vIGV2ZW50cyB3b24ndCBiZSBkaXNwYXRjaGVkIHdoaWxlIHRoZSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgICAgaXRlbS5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB3aXRoRWxlbWVudENvbnRhaW5lcihjb250YWluZXI6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGNvbnRhaW5lciAhPT0gdGhpcy5fZWxlbWVudCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGNvbnRhaW5lcjtcbiAgICAgIHRoaXMuX3Jvb3ROb2RlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbmRleCBvZiBhbiBpdGVtIGluIHRoZSBkcm9wIGNvbnRhaW5lciwgYmFzZWQgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSB1c2VyJ3MgcG9pbnRlci5cbiAgICogQHBhcmFtIGl0ZW0gSXRlbSB0aGF0IGlzIGJlaW5nIHNvcnRlZC5cbiAgICogQHBhcmFtIHBvaW50ZXJYIFBvc2l0aW9uIG9mIHRoZSB1c2VyJ3MgcG9pbnRlciBhbG9uZyB0aGUgWCBheGlzLlxuICAgKiBAcGFyYW0gcG9pbnRlclkgUG9zaXRpb24gb2YgdGhlIHVzZXIncyBwb2ludGVyIGFsb25nIHRoZSBZIGF4aXMuXG4gICAqIEBwYXJhbSBkZWx0YSBEaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHVzZXIgaXMgbW92aW5nIHRoZWlyIHBvaW50ZXIuXG4gICAqL1xuICBwcml2YXRlIF9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKFxuICAgIGl0ZW06IERyYWdSZWYsXG4gICAgcG9pbnRlclg6IG51bWJlcixcbiAgICBwb2ludGVyWTogbnVtYmVyLFxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IGVsZW1lbnRBdFBvaW50ID0gdGhpcy5fZ2V0Um9vdE5vZGUoKS5lbGVtZW50RnJvbVBvaW50KFxuICAgICAgTWF0aC5mbG9vcihwb2ludGVyWCksXG4gICAgICBNYXRoLmZsb29yKHBvaW50ZXJZKSxcbiAgICApO1xuICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudEF0UG9pbnRcbiAgICAgID8gdGhpcy5fYWN0aXZlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHJvb3QgPSBpdGVtLmdldFJvb3RFbGVtZW50KCk7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnRBdFBvaW50ID09PSByb290IHx8IHJvb3QuY29udGFpbnMoZWxlbWVudEF0UG9pbnQpO1xuICAgICAgICB9KVxuICAgICAgOiAtMTtcbiAgICByZXR1cm4gaW5kZXggPT09IC0xIHx8ICF0aGlzLl9zb3J0UHJlZGljYXRlKGluZGV4LCBpdGVtKSA/IC0xIDogaW5kZXg7XG4gIH1cblxuICAvKiogTGF6aWx5IHJlc29sdmVzIHRoZSBsaXN0J3Mgcm9vdCBub2RlLiAqL1xuICBwcml2YXRlIF9nZXRSb290Tm9kZSgpOiBEb2N1bWVudE9yU2hhZG93Um9vdCB7XG4gICAgLy8gUmVzb2x2ZSB0aGUgcm9vdCBub2RlIGxhemlseSB0byBlbnN1cmUgdGhhdCB0aGUgZHJvcCBsaXN0IGlzIGluIGl0cyBmaW5hbCBwbGFjZSBpbiB0aGUgRE9NLlxuICAgIGlmICghdGhpcy5fcm9vdE5vZGUpIHtcbiAgICAgIHRoaXMuX3Jvb3ROb2RlID0gX2dldFNoYWRvd1Jvb3QodGhpcy5fZWxlbWVudCkgfHwgdGhpcy5fZG9jdW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yb290Tm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdGhhdCdzIGNsb3Nlc3QgdG8gdGhlIGl0ZW0gYmVpbmcgZHJhZ2dlZC5cbiAgICogQHBhcmFtIGl0ZW0gSXRlbSBiZWluZyBkcmFnZ2VkLlxuICAgKiBAcGFyYW0gcG9pbnRlclggUG9zaXRpb24gb2YgdGhlIHVzZXIncyBwb2ludGVyIGFsb25nIHRoZSBYIGF4aXMuXG4gICAqIEBwYXJhbSBwb2ludGVyWSBQb3NpdGlvbiBvZiB0aGUgdXNlcidzIHBvaW50ZXIgYWxvbmcgdGhlIFkgYXhpcy5cbiAgICovXG4gIHByaXZhdGUgX2dldENsb3Nlc3RJdGVtSW5kZXhUb1BvaW50ZXIoaXRlbTogRHJhZ1JlZiwgcG9pbnRlclg6IG51bWJlciwgcG9pbnRlclk6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hY3RpdmVJdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGxldCBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGxldCBtaW5JbmRleCA9IC0xO1xuXG4gICAgLy8gRmluZCB0aGUgRXVjbGlkZWFuIGRpc3RhbmNlIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdWNsaWRlYW5fZGlzdGFuY2UpIGJldHdlZW4gZWFjaFxuICAgIC8vIGl0ZW0gYW5kIHRoZSBwb2ludGVyLCBhbmQgcmV0dXJuIHRoZSBzbWFsbGVzdCBvbmUuIE5vdGUgdGhhdCB0aGlzIGlzIGEgYml0IGZsYXdlZCBpbiB0aGF0IERPTVxuICAgIC8vIG5vZGVzIGFyZSByZWN0YW5nbGVzLCBub3QgcG9pbnRzLCBzbyB3ZSB1c2UgdGhlIHRvcC9sZWZ0IGNvb3JkaW5hdGVzLiBJdCBzaG91bGQgYmUgZW5vdWdoXG4gICAgLy8gZm9yIG91ciBwdXJwb3Nlcy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2FjdGl2ZUl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fYWN0aXZlSXRlbXNbaV07XG4gICAgICBpZiAoY3VycmVudCAhPT0gaXRlbSkge1xuICAgICAgICBjb25zdCB7eCwgeX0gPSBjdXJyZW50LmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5oeXBvdChwb2ludGVyWCAtIHgsIHBvaW50ZXJZIC0geSk7XG5cbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgIG1pbkluZGV4ID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW5JbmRleDtcbiAgfVxufVxuIl19