@taiga-ui/cdk 3.0.0-rc.0 → 3.0.0-rc.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.
Files changed (477) hide show
  1. package/abstract/control.d.ts +2 -1
  2. package/abstract/dialog.service.d.ts +1 -1
  3. package/abstract/portal-host.d.ts +5 -3
  4. package/abstract/portal-service.d.ts +3 -2
  5. package/abstract/theme-switcher.d.ts +0 -1
  6. package/bundles/taiga-ui-cdk-abstract.umd.js +25 -16
  7. package/bundles/taiga-ui-cdk-abstract.umd.js.map +1 -1
  8. package/bundles/taiga-ui-cdk-classes.umd.js +0 -8
  9. package/bundles/taiga-ui-cdk-classes.umd.js.map +1 -1
  10. package/bundles/taiga-ui-cdk-components-dialog-host.umd.js +0 -1
  11. package/bundles/taiga-ui-cdk-components-dialog-host.umd.js.map +1 -1
  12. package/bundles/taiga-ui-cdk-components-dropdown-host.umd.js +3 -1
  13. package/bundles/taiga-ui-cdk-components-dropdown-host.umd.js.map +1 -1
  14. package/bundles/taiga-ui-cdk-constants.umd.js +18 -1
  15. package/bundles/taiga-ui-cdk-constants.umd.js.map +1 -1
  16. package/bundles/taiga-ui-cdk-date-time.umd.js +3 -29
  17. package/bundles/taiga-ui-cdk-date-time.umd.js.map +1 -1
  18. package/bundles/taiga-ui-cdk-directives-active-zone.umd.js +5 -6
  19. package/bundles/taiga-ui-cdk-directives-active-zone.umd.js.map +1 -1
  20. package/bundles/taiga-ui-cdk-directives-auto-focus.umd.js +8 -9
  21. package/bundles/taiga-ui-cdk-directives-auto-focus.umd.js.map +1 -1
  22. package/bundles/taiga-ui-cdk-directives-autofilled.umd.js +1 -1
  23. package/bundles/taiga-ui-cdk-directives-autofilled.umd.js.map +1 -1
  24. package/bundles/taiga-ui-cdk-directives-copy-processor.umd.js +0 -1
  25. package/bundles/taiga-ui-cdk-directives-copy-processor.umd.js.map +1 -1
  26. package/bundles/taiga-ui-cdk-directives-drag.umd.js +1 -1
  27. package/bundles/taiga-ui-cdk-directives-drag.umd.js.map +1 -1
  28. package/bundles/taiga-ui-cdk-directives-droppable.umd.js +5 -6
  29. package/bundles/taiga-ui-cdk-directives-droppable.umd.js.map +1 -1
  30. package/bundles/taiga-ui-cdk-directives-focus-trap.umd.js +11 -9
  31. package/bundles/taiga-ui-cdk-directives-focus-trap.umd.js.map +1 -1
  32. package/bundles/taiga-ui-cdk-directives-focus-visible.umd.js +0 -1
  33. package/bundles/taiga-ui-cdk-directives-focus-visible.umd.js.map +1 -1
  34. package/bundles/taiga-ui-cdk-directives-focused.umd.js +1 -1
  35. package/bundles/taiga-ui-cdk-directives-focused.umd.js.map +1 -1
  36. package/bundles/taiga-ui-cdk-directives-high-dpi.umd.js +0 -1
  37. package/bundles/taiga-ui-cdk-directives-high-dpi.umd.js.map +1 -1
  38. package/bundles/taiga-ui-cdk-directives-hovered.umd.js +7 -10
  39. package/bundles/taiga-ui-cdk-directives-hovered.umd.js.map +1 -1
  40. package/bundles/taiga-ui-cdk-directives-media.umd.js +4 -11
  41. package/bundles/taiga-ui-cdk-directives-media.umd.js.map +1 -1
  42. package/bundles/taiga-ui-cdk-directives-overscroll.umd.js +10 -12
  43. package/bundles/taiga-ui-cdk-directives-overscroll.umd.js.map +1 -1
  44. package/bundles/taiga-ui-cdk-directives-pan.umd.js +0 -1
  45. package/bundles/taiga-ui-cdk-directives-pan.umd.js.map +1 -1
  46. package/bundles/taiga-ui-cdk-directives-pressed.umd.js +1 -1
  47. package/bundles/taiga-ui-cdk-directives-pressed.umd.js.map +1 -1
  48. package/bundles/taiga-ui-cdk-directives-prevent-default.umd.js +1 -2
  49. package/bundles/taiga-ui-cdk-directives-prevent-default.umd.js.map +1 -1
  50. package/bundles/taiga-ui-cdk-directives-repeat-times.umd.js +1 -1
  51. package/bundles/taiga-ui-cdk-directives-repeat-times.umd.js.map +1 -1
  52. package/bundles/taiga-ui-cdk-directives-resize.umd.js +0 -1
  53. package/bundles/taiga-ui-cdk-directives-resize.umd.js.map +1 -1
  54. package/bundles/taiga-ui-cdk-directives-swipe.umd.js +0 -1
  55. package/bundles/taiga-ui-cdk-directives-swipe.umd.js.map +1 -1
  56. package/bundles/taiga-ui-cdk-directives-zoom.umd.js +0 -1
  57. package/bundles/taiga-ui-cdk-directives-zoom.umd.js.map +1 -1
  58. package/bundles/taiga-ui-cdk-observables.umd.js +20 -76
  59. package/bundles/taiga-ui-cdk-observables.umd.js.map +1 -1
  60. package/bundles/taiga-ui-cdk-pipes-keys.umd.js +68 -0
  61. package/bundles/taiga-ui-cdk-pipes-keys.umd.js.map +1 -0
  62. package/bundles/taiga-ui-cdk-pipes.umd.js +10 -4
  63. package/bundles/taiga-ui-cdk-pipes.umd.js.map +1 -1
  64. package/bundles/taiga-ui-cdk-services.umd.js +37 -72
  65. package/bundles/taiga-ui-cdk-services.umd.js.map +1 -1
  66. package/bundles/taiga-ui-cdk-tokens.umd.js +46 -20
  67. package/bundles/taiga-ui-cdk-tokens.umd.js.map +1 -1
  68. package/bundles/taiga-ui-cdk-utils-browser.umd.js +3 -26
  69. package/bundles/taiga-ui-cdk-utils-browser.umd.js.map +1 -1
  70. package/bundles/taiga-ui-cdk-utils-color.umd.js +81 -0
  71. package/bundles/taiga-ui-cdk-utils-color.umd.js.map +1 -0
  72. package/bundles/taiga-ui-cdk-utils-dom.umd.js +57 -87
  73. package/bundles/taiga-ui-cdk-utils-dom.umd.js.map +1 -1
  74. package/bundles/taiga-ui-cdk-utils-focus.umd.js +24 -67
  75. package/bundles/taiga-ui-cdk-utils-focus.umd.js.map +1 -1
  76. package/bundles/taiga-ui-cdk-utils-format.umd.js +0 -1
  77. package/bundles/taiga-ui-cdk-utils-format.umd.js.map +1 -1
  78. package/bundles/taiga-ui-cdk-utils-math.umd.js +8 -48
  79. package/bundles/taiga-ui-cdk-utils-math.umd.js.map +1 -1
  80. package/bundles/taiga-ui-cdk-utils-miscellaneous.umd.js +349 -84
  81. package/bundles/taiga-ui-cdk-utils-miscellaneous.umd.js.map +1 -1
  82. package/bundles/taiga-ui-cdk-utils-os.umd.js +5 -21
  83. package/bundles/taiga-ui-cdk-utils-os.umd.js.map +1 -1
  84. package/bundles/taiga-ui-cdk-utils-svg.umd.js +1 -5
  85. package/bundles/taiga-ui-cdk-utils-svg.umd.js.map +1 -1
  86. package/bundles/taiga-ui-cdk-utils.umd.js +10 -4
  87. package/bundles/taiga-ui-cdk-utils.umd.js.map +1 -1
  88. package/classes/assert.d.ts +0 -3
  89. package/constants/browser.d.ts +4 -0
  90. package/constants/index.d.ts +1 -0
  91. package/constants/unicode-chars.d.ts +8 -0
  92. package/constants/version.d.ts +1 -0
  93. package/constants/version.js +4 -0
  94. package/date-time/day-range.d.ts +0 -5
  95. package/date-time/day.d.ts +1 -2
  96. package/date-time/month.d.ts +1 -2
  97. package/date-time/year.d.ts +1 -1
  98. package/directives/auto-focus/autofocus.directive.d.ts +2 -2
  99. package/directives/focus-visible/focus-visible.directive.d.ts +0 -1
  100. package/directives/high-dpi/high-dpi.directive.d.ts +0 -1
  101. package/directives/media/media.directive.d.ts +0 -2
  102. package/directives/overscroll/overscroll.directive.d.ts +0 -1
  103. package/directives/prevent-default/prevent-default.directive.d.ts +0 -1
  104. package/esm2015/abstract/control.js +7 -1
  105. package/esm2015/abstract/dialog.service.js +1 -1
  106. package/esm2015/abstract/portal-host.js +18 -15
  107. package/esm2015/abstract/portal-service.js +4 -4
  108. package/esm2015/abstract/theme-switcher.js +1 -2
  109. package/esm2015/classes/assert.js +1 -8
  110. package/esm2015/components/dialog-host/dialog-host.component.js +1 -2
  111. package/esm2015/components/dropdown-host/dropdown-host.component.js +4 -2
  112. package/esm2015/constants/browser.js +5 -1
  113. package/esm2015/constants/index.js +2 -1
  114. package/esm2015/constants/parent-animation.js +2 -2
  115. package/esm2015/constants/unicode-chars.js +9 -1
  116. package/esm2015/constants/version.js +2 -0
  117. package/esm2015/date-time/day-range.js +1 -6
  118. package/esm2015/date-time/day.js +2 -9
  119. package/esm2015/date-time/month.js +2 -8
  120. package/esm2015/date-time/year.js +2 -6
  121. package/esm2015/directives/active-zone/active-zone.directive.js +3 -6
  122. package/esm2015/directives/auto-focus/autofocus.directive.js +6 -5
  123. package/esm2015/directives/auto-focus/handlers/ios.handler.js +1 -2
  124. package/esm2015/directives/autofilled/autofilled-style.component.js +1 -1
  125. package/esm2015/directives/copy-processor/copy-processor.directive.js +1 -2
  126. package/esm2015/directives/drag/drag.directive.js +3 -3
  127. package/esm2015/directives/droppable/droppable.directive.js +7 -8
  128. package/esm2015/directives/focus-trap/focus-trap.directive.js +14 -12
  129. package/esm2015/directives/focus-visible/focus-visible.directive.js +1 -2
  130. package/esm2015/directives/focused/focused.directive.js +3 -3
  131. package/esm2015/directives/high-dpi/high-dpi.directive.js +1 -2
  132. package/esm2015/directives/hovered/hovered.service.js +5 -8
  133. package/esm2015/directives/media/media.directive.js +5 -10
  134. package/esm2015/directives/overscroll/overscroll.directive.js +13 -15
  135. package/esm2015/directives/pan/pan.directive.js +1 -2
  136. package/esm2015/directives/pressed/pressed.directive.js +3 -3
  137. package/esm2015/directives/prevent-default/prevent-default.directive.js +3 -4
  138. package/esm2015/directives/repeat-times/repeat-times.directive.js +3 -3
  139. package/esm2015/directives/resize/resize.directive.js +1 -2
  140. package/esm2015/directives/swipe/swipe.directive.js +1 -2
  141. package/esm2015/directives/zoom/zoom.directive.js +1 -2
  142. package/esm2015/observables/drag-and-drop-from.js +6 -11
  143. package/esm2015/observables/focus-visible-observable.js +7 -12
  144. package/esm2015/observables/items-query-list-observable.js +4 -7
  145. package/esm2015/observables/mouse-drag-finish-from.js +4 -7
  146. package/esm2015/observables/must-be-present.js +4 -9
  147. package/esm2015/observables/pressed-observable.js +5 -10
  148. package/esm2015/observables/prevent-default.js +2 -7
  149. package/esm2015/observables/stop-propagation.js +2 -7
  150. package/esm2015/observables/typed-from-event.js +2 -7
  151. package/esm2015/observables/watch.js +2 -7
  152. package/esm2015/pipes/index.js +2 -1
  153. package/esm2015/pipes/keys/index.js +3 -0
  154. package/esm2015/pipes/keys/keys.module.js +16 -0
  155. package/esm2015/pipes/keys/keys.pipe.js +14 -0
  156. package/esm2015/pipes/keys/taiga-ui-cdk-pipes-keys.js +5 -0
  157. package/esm2015/services/directive-styles.service.js +3 -26
  158. package/esm2015/services/focus-visible.service.js +3 -4
  159. package/esm2015/services/obscured.service.js +3 -5
  160. package/esm2015/services/pan.service.js +6 -9
  161. package/esm2015/services/parents-scroll.service.js +3 -5
  162. package/esm2015/services/resize.service.js +1 -2
  163. package/esm2015/services/scroll.service.js +4 -5
  164. package/esm2015/services/swipe.service.js +6 -9
  165. package/esm2015/services/zoom.service.js +8 -9
  166. package/esm2015/tokens/active-element.js +16 -16
  167. package/esm2015/tokens/alerts.js +8 -1
  168. package/esm2015/tokens/dialogs.js +8 -1
  169. package/esm2015/tokens/focusable-item-accessor.js +7 -1
  170. package/esm2015/tokens/index.js +2 -2
  171. package/esm2015/tokens/is-apple.js +3 -3
  172. package/esm2015/tokens/is-cypress.js +1 -1
  173. package/esm2015/tokens/is-ios.js +3 -3
  174. package/esm2015/tokens/range.js +8 -0
  175. package/esm2015/tokens/window-height.js +3 -3
  176. package/esm2015/utils/browser/index.js +1 -2
  177. package/esm2015/utils/browser/is-edge.js +2 -7
  178. package/esm2015/utils/browser/is-firefox.js +2 -7
  179. package/esm2015/utils/browser/is-safari.js +2 -7
  180. package/esm2015/utils/color/hex-to-rgb.js +12 -0
  181. package/esm2015/utils/color/hsv-to-rgb.js +11 -0
  182. package/esm2015/utils/color/index.js +6 -0
  183. package/esm2015/utils/color/parse-color.js +27 -0
  184. package/esm2015/utils/color/rgb-to-hex.js +4 -0
  185. package/esm2015/utils/color/rgb-to-hsv.js +7 -0
  186. package/esm2015/utils/color/taiga-ui-cdk-utils-color.js +5 -0
  187. package/esm2015/utils/dom/can-scroll.js +2 -7
  188. package/esm2015/utils/dom/contains-or-after.js +2 -7
  189. package/esm2015/utils/dom/element-checks.js +21 -0
  190. package/esm2015/utils/dom/get-actual-target.js +2 -5
  191. package/esm2015/utils/dom/get-clipboard-data-text.js +2 -5
  192. package/esm2015/utils/dom/get-document-or-shadow-root.js +2 -7
  193. package/esm2015/utils/dom/get-element-obscurers.js +14 -17
  194. package/esm2015/utils/dom/get-element-offset.js +4 -7
  195. package/esm2015/utils/dom/get-scroll-parent.js +3 -6
  196. package/esm2015/utils/dom/get-selected-text.js +3 -3
  197. package/esm2015/utils/dom/index.js +3 -2
  198. package/esm2015/utils/dom/is-current-target.js +2 -7
  199. package/esm2015/utils/dom/is-element-editable.js +5 -0
  200. package/esm2015/utils/dom/is-inside-iframe.js +2 -5
  201. package/esm2015/utils/dom/is-node-in.js +5 -7
  202. package/esm2015/utils/focus/blur-native-focused.js +4 -7
  203. package/esm2015/utils/focus/get-closest-focusable.js +26 -0
  204. package/esm2015/utils/focus/get-native-focused.js +3 -3
  205. package/esm2015/utils/focus/index.js +2 -3
  206. package/esm2015/utils/focus/is-native-focused-in.js +1 -2
  207. package/esm2015/utils/focus/is-native-focused.js +1 -2
  208. package/esm2015/utils/focus/is-native-keyboard-focusable.js +3 -3
  209. package/esm2015/utils/focus/is-native-mouse-focusable.js +1 -4
  210. package/esm2015/utils/focus/move-focus.js +2 -4
  211. package/esm2015/utils/focus/set-native-mouse-focused.js +8 -7
  212. package/esm2015/utils/format/px.js +1 -2
  213. package/esm2015/utils/index.js +2 -1
  214. package/esm2015/utils/math/clamp.js +2 -5
  215. package/esm2015/utils/math/quantize.js +2 -5
  216. package/esm2015/utils/math/round.js +4 -19
  217. package/esm2015/utils/math/sum.js +2 -5
  218. package/esm2015/utils/math/to-int.js +2 -7
  219. package/esm2015/utils/math/to-radians.js +2 -5
  220. package/esm2015/utils/miscellaneous/array-remove.js +4 -0
  221. package/esm2015/utils/miscellaneous/array-toggle.js +6 -0
  222. package/esm2015/utils/miscellaneous/distance-between-touches.js +2 -7
  223. package/esm2015/utils/miscellaneous/ease-in-out-quad.js +2 -7
  224. package/esm2015/utils/miscellaneous/flat-length.js +2 -5
  225. package/esm2015/utils/miscellaneous/get-original-array-from-query-list.js +2 -5
  226. package/esm2015/utils/miscellaneous/get-swipe-direction.js +2 -7
  227. package/esm2015/utils/miscellaneous/index.js +3 -3
  228. package/esm2015/utils/miscellaneous/is-number.js +2 -7
  229. package/esm2015/utils/miscellaneous/is-present.js +2 -7
  230. package/esm2015/utils/miscellaneous/mark-control-as-touched-and-validate.js +4 -9
  231. package/esm2015/utils/miscellaneous/uniq-by.js +2 -7
  232. package/esm2015/utils/os/is-apple-platform.js +2 -5
  233. package/esm2015/utils/os/is-apple.js +4 -9
  234. package/esm2015/utils/os/is-ios.js +4 -9
  235. package/esm2015/utils/svg/svg-linear-gradient-processor.js +2 -5
  236. package/fesm2015/taiga-ui-cdk-abstract.js +26 -18
  237. package/fesm2015/taiga-ui-cdk-abstract.js.map +1 -1
  238. package/fesm2015/taiga-ui-cdk-classes.js +1 -8
  239. package/fesm2015/taiga-ui-cdk-classes.js.map +1 -1
  240. package/fesm2015/taiga-ui-cdk-components-dialog-host.js +0 -1
  241. package/fesm2015/taiga-ui-cdk-components-dialog-host.js.map +1 -1
  242. package/fesm2015/taiga-ui-cdk-components-dropdown-host.js +3 -1
  243. package/fesm2015/taiga-ui-cdk-components-dropdown-host.js.map +1 -1
  244. package/fesm2015/taiga-ui-cdk-constants.js +16 -2
  245. package/fesm2015/taiga-ui-cdk-constants.js.map +1 -1
  246. package/fesm2015/taiga-ui-cdk-date-time.js +4 -26
  247. package/fesm2015/taiga-ui-cdk-date-time.js.map +1 -1
  248. package/fesm2015/taiga-ui-cdk-directives-active-zone.js +2 -5
  249. package/fesm2015/taiga-ui-cdk-directives-active-zone.js.map +1 -1
  250. package/fesm2015/taiga-ui-cdk-directives-auto-focus.js +5 -5
  251. package/fesm2015/taiga-ui-cdk-directives-auto-focus.js.map +1 -1
  252. package/fesm2015/taiga-ui-cdk-directives-autofilled.js +1 -1
  253. package/fesm2015/taiga-ui-cdk-directives-autofilled.js.map +1 -1
  254. package/fesm2015/taiga-ui-cdk-directives-copy-processor.js +0 -1
  255. package/fesm2015/taiga-ui-cdk-directives-copy-processor.js.map +1 -1
  256. package/fesm2015/taiga-ui-cdk-directives-drag.js +2 -2
  257. package/fesm2015/taiga-ui-cdk-directives-drag.js.map +1 -1
  258. package/fesm2015/taiga-ui-cdk-directives-droppable.js +6 -7
  259. package/fesm2015/taiga-ui-cdk-directives-droppable.js.map +1 -1
  260. package/fesm2015/taiga-ui-cdk-directives-focus-trap.js +13 -11
  261. package/fesm2015/taiga-ui-cdk-directives-focus-trap.js.map +1 -1
  262. package/fesm2015/taiga-ui-cdk-directives-focus-visible.js +0 -1
  263. package/fesm2015/taiga-ui-cdk-directives-focus-visible.js.map +1 -1
  264. package/fesm2015/taiga-ui-cdk-directives-focused.js +2 -2
  265. package/fesm2015/taiga-ui-cdk-directives-focused.js.map +1 -1
  266. package/fesm2015/taiga-ui-cdk-directives-high-dpi.js +0 -1
  267. package/fesm2015/taiga-ui-cdk-directives-high-dpi.js.map +1 -1
  268. package/fesm2015/taiga-ui-cdk-directives-hovered.js +4 -7
  269. package/fesm2015/taiga-ui-cdk-directives-hovered.js.map +1 -1
  270. package/fesm2015/taiga-ui-cdk-directives-media.js +5 -10
  271. package/fesm2015/taiga-ui-cdk-directives-media.js.map +1 -1
  272. package/fesm2015/taiga-ui-cdk-directives-overscroll.js +12 -14
  273. package/fesm2015/taiga-ui-cdk-directives-overscroll.js.map +1 -1
  274. package/fesm2015/taiga-ui-cdk-directives-pan.js +0 -1
  275. package/fesm2015/taiga-ui-cdk-directives-pan.js.map +1 -1
  276. package/fesm2015/taiga-ui-cdk-directives-pressed.js +2 -2
  277. package/fesm2015/taiga-ui-cdk-directives-pressed.js.map +1 -1
  278. package/fesm2015/taiga-ui-cdk-directives-prevent-default.js +2 -3
  279. package/fesm2015/taiga-ui-cdk-directives-prevent-default.js.map +1 -1
  280. package/fesm2015/taiga-ui-cdk-directives-repeat-times.js +2 -2
  281. package/fesm2015/taiga-ui-cdk-directives-repeat-times.js.map +1 -1
  282. package/fesm2015/taiga-ui-cdk-directives-resize.js +0 -1
  283. package/fesm2015/taiga-ui-cdk-directives-resize.js.map +1 -1
  284. package/fesm2015/taiga-ui-cdk-directives-swipe.js +0 -1
  285. package/fesm2015/taiga-ui-cdk-directives-swipe.js.map +1 -1
  286. package/fesm2015/taiga-ui-cdk-directives-zoom.js +0 -1
  287. package/fesm2015/taiga-ui-cdk-directives-zoom.js.map +1 -1
  288. package/fesm2015/taiga-ui-cdk-observables.js +21 -67
  289. package/fesm2015/taiga-ui-cdk-observables.js.map +1 -1
  290. package/fesm2015/taiga-ui-cdk-pipes-keys.js +34 -0
  291. package/fesm2015/taiga-ui-cdk-pipes-keys.js.map +1 -0
  292. package/fesm2015/taiga-ui-cdk-pipes.js +1 -0
  293. package/fesm2015/taiga-ui-cdk-pipes.js.map +1 -1
  294. package/fesm2015/taiga-ui-cdk-services.js +25 -60
  295. package/fesm2015/taiga-ui-cdk-services.js.map +1 -1
  296. package/fesm2015/taiga-ui-cdk-tokens.js +46 -23
  297. package/fesm2015/taiga-ui-cdk-tokens.js.map +1 -1
  298. package/fesm2015/taiga-ui-cdk-utils-browser.js +4 -23
  299. package/fesm2015/taiga-ui-cdk-utils-browser.js.map +1 -1
  300. package/fesm2015/taiga-ui-cdk-utils-color.js +67 -0
  301. package/fesm2015/taiga-ui-cdk-utils-color.js.map +1 -0
  302. package/fesm2015/taiga-ui-cdk-utils-dom.js +53 -78
  303. package/fesm2015/taiga-ui-cdk-utils-dom.js.map +1 -1
  304. package/fesm2015/taiga-ui-cdk-utils-focus.js +21 -57
  305. package/fesm2015/taiga-ui-cdk-utils-focus.js.map +1 -1
  306. package/fesm2015/taiga-ui-cdk-utils-format.js +0 -1
  307. package/fesm2015/taiga-ui-cdk-utils-format.js.map +1 -1
  308. package/fesm2015/taiga-ui-cdk-utils-math.js +9 -41
  309. package/fesm2015/taiga-ui-cdk-utils-math.js.map +1 -1
  310. package/fesm2015/taiga-ui-cdk-utils-miscellaneous.js +21 -73
  311. package/fesm2015/taiga-ui-cdk-utils-miscellaneous.js.map +1 -1
  312. package/fesm2015/taiga-ui-cdk-utils-os.js +6 -19
  313. package/fesm2015/taiga-ui-cdk-utils-os.js.map +1 -1
  314. package/fesm2015/taiga-ui-cdk-utils-svg.js +2 -5
  315. package/fesm2015/taiga-ui-cdk-utils-svg.js.map +1 -1
  316. package/fesm2015/taiga-ui-cdk-utils.js +1 -0
  317. package/fesm2015/taiga-ui-cdk-utils.js.map +1 -1
  318. package/observables/drag-and-drop-from.d.ts +1 -5
  319. package/observables/focus-visible-observable.d.ts +1 -5
  320. package/observables/items-query-list-observable.d.ts +1 -3
  321. package/observables/mouse-drag-finish-from.d.ts +1 -3
  322. package/observables/must-be-present.d.ts +1 -5
  323. package/observables/pressed-observable.d.ts +1 -5
  324. package/observables/prevent-default.d.ts +1 -5
  325. package/observables/stop-propagation.d.ts +1 -5
  326. package/observables/typed-from-event.d.ts +5 -21
  327. package/observables/watch.d.ts +1 -5
  328. package/package.json +7 -3
  329. package/pipes/index.d.ts +1 -0
  330. package/pipes/keys/index.d.ts +2 -0
  331. package/pipes/keys/keys.module.d.ts +7 -0
  332. package/pipes/keys/keys.pipe.d.ts +7 -0
  333. package/pipes/keys/package.json +10 -0
  334. package/pipes/keys/taiga-ui-cdk-pipes-keys.d.ts +5 -0
  335. package/schematics/collection.json +6 -0
  336. package/schematics/constants/file-globs.d.ts +2 -0
  337. package/schematics/constants/file-globs.js +11 -0
  338. package/schematics/constants/index.d.ts +1 -0
  339. package/schematics/constants/index.js +4 -0
  340. package/schematics/constants/taiga-styles.d.ts +1 -1
  341. package/schematics/constants/taiga-styles.js +4 -1
  342. package/schematics/ng-add/constants/versions.js +2 -2
  343. package/schematics/ng-add/index.js +6 -0
  344. package/schematics/ng-add/schema.d.ts +8 -0
  345. package/schematics/ng-add/schema.json +9 -0
  346. package/schematics/ng-add/steps/add-taiga-icons.js +5 -3
  347. package/schematics/ng-add/steps/add-taiga-modules.js +4 -0
  348. package/schematics/ng-add/steps/add-taiga-styles.js +6 -3
  349. package/schematics/ng-add/steps/wrap-with-tui-root.js +3 -0
  350. package/schematics/ng-update/constants/breakpoints.d.ts +82 -0
  351. package/schematics/ng-update/constants/breakpoints.js +34 -0
  352. package/schematics/ng-update/constants/consts.d.ts +1 -1
  353. package/schematics/ng-update/constants/consts.js +170 -0
  354. package/schematics/ng-update/constants/deprecated-functions.js +1 -36
  355. package/schematics/ng-update/constants/services.js +1 -1
  356. package/schematics/ng-update/constants/templates.d.ts +16 -0
  357. package/schematics/ng-update/constants/templates.js +261 -1
  358. package/schematics/ng-update/constants/warnings.js +10 -0
  359. package/schematics/ng-update/index.js +13 -10
  360. package/schematics/ng-update/schema.json +13 -0
  361. package/schematics/ng-update/steps/migrate-date-time.js +45 -1
  362. package/schematics/ng-update/steps/migrate-progress.d.ts +1 -1
  363. package/schematics/ng-update/steps/migrate-progress.js +2 -1
  364. package/schematics/ng-update/steps/migrate-sliders/index.d.ts +1 -1
  365. package/schematics/ng-update/steps/migrate-sliders/index.js +2 -0
  366. package/schematics/ng-update/steps/migrate-sliders/migrate-input-range.d.ts +1 -1
  367. package/schematics/ng-update/steps/migrate-sliders/migrate-input-range.js +4 -3
  368. package/schematics/ng-update/steps/migrate-sliders/migrate-input-slider.d.ts +1 -1
  369. package/schematics/ng-update/steps/migrate-sliders/migrate-input-slider.js +3 -2
  370. package/schematics/ng-update/steps/migrate-taiga-proprietary-icons.d.ts +3 -0
  371. package/schematics/ng-update/steps/migrate-taiga-proprietary-icons.js +51 -0
  372. package/schematics/ng-update/steps/migrate-templates.d.ts +1 -1
  373. package/schematics/ng-update/steps/migrate-templates.js +77 -5
  374. package/schematics/ng-update/steps/replace-deep-import.js +2 -1
  375. package/schematics/ng-update/steps/replace-enums.js +2 -1
  376. package/schematics/ng-update/steps/replace-functions.js +42 -2
  377. package/schematics/ng-update/steps/replace-styles.d.ts +1 -0
  378. package/schematics/ng-update/steps/replace-styles.js +18 -0
  379. package/schematics/ng-update/steps/show-warnings.js +2 -1
  380. package/schematics/utils/add-import-to-closest-module.d.ts +1 -0
  381. package/schematics/utils/add-import-to-closest-module.js +18 -0
  382. package/schematics/utils/add-styles.d.ts +3 -2
  383. package/schematics/utils/add-styles.js +8 -1
  384. package/schematics/utils/angular/ng-component.d.ts +1 -2
  385. package/schematics/utils/angular/ng-module.d.ts +1 -2
  386. package/schematics/utils/angular/ng-module.js +2 -1
  387. package/schematics/utils/get-execution-time.d.ts +1 -0
  388. package/schematics/utils/get-execution-time.js +8 -0
  389. package/schematics/utils/get-named-import-references.js +2 -1
  390. package/schematics/utils/get-project.d.ts +1 -1
  391. package/schematics/utils/get-project.js +0 -4
  392. package/schematics/utils/insert-todo.d.ts +1 -0
  393. package/schematics/utils/insert-todo.js +3 -2
  394. package/schematics/utils/progress.d.ts +1 -0
  395. package/schematics/utils/progress.js +13 -0
  396. package/schematics/utils/templates/get-component-templates.d.ts +1 -2
  397. package/schematics/utils/templates/get-component-templates.js +1 -1
  398. package/schematics/utils/templates/ng-component-input-manipulations.js +2 -12
  399. package/schematics/utils/templates/template-resource.d.ts +1 -1
  400. package/services/directive-styles.service.d.ts +2 -9
  401. package/services/focus-visible.service.d.ts +0 -1
  402. package/services/pan.service.d.ts +0 -3
  403. package/services/swipe.service.d.ts +0 -3
  404. package/tokens/alerts.d.ts +2 -1
  405. package/tokens/dialogs.d.ts +2 -1
  406. package/tokens/focusable-item-accessor.d.ts +2 -1
  407. package/tokens/index.d.ts +1 -1
  408. package/tokens/is-cypress.d.ts +0 -3
  409. package/tokens/range.d.ts +2 -0
  410. package/utils/browser/index.d.ts +0 -1
  411. package/utils/browser/is-edge.d.ts +1 -5
  412. package/utils/browser/is-firefox.d.ts +1 -5
  413. package/utils/browser/is-safari.d.ts +1 -5
  414. package/utils/color/hex-to-rgb.d.ts +1 -0
  415. package/utils/color/hsv-to-rgb.d.ts +4 -0
  416. package/utils/color/index.d.ts +5 -0
  417. package/utils/color/package.json +10 -0
  418. package/utils/color/parse-color.d.ts +1 -0
  419. package/utils/color/rgb-to-hex.d.ts +1 -0
  420. package/utils/color/rgb-to-hsv.d.ts +1 -0
  421. package/utils/color/taiga-ui-cdk-utils-color.d.ts +5 -0
  422. package/utils/dom/can-scroll.d.ts +1 -5
  423. package/utils/dom/contains-or-after.d.ts +1 -5
  424. package/utils/dom/element-checks.d.ts +6 -0
  425. package/utils/dom/get-actual-target.d.ts +1 -3
  426. package/utils/dom/get-clipboard-data-text.d.ts +1 -3
  427. package/utils/dom/get-document-or-shadow-root.d.ts +1 -5
  428. package/utils/dom/get-element-obscurers.d.ts +1 -3
  429. package/utils/dom/get-element-offset.d.ts +1 -3
  430. package/utils/dom/get-scroll-parent.d.ts +1 -3
  431. package/utils/dom/index.d.ts +2 -1
  432. package/utils/dom/is-current-target.d.ts +1 -5
  433. package/utils/dom/is-element-editable.d.ts +1 -0
  434. package/utils/dom/is-inside-iframe.d.ts +1 -3
  435. package/utils/dom/is-node-in.d.ts +1 -3
  436. package/utils/focus/blur-native-focused.d.ts +1 -3
  437. package/utils/focus/get-closest-focusable.d.ts +27 -0
  438. package/utils/focus/index.d.ts +1 -2
  439. package/utils/focus/is-native-mouse-focusable.d.ts +0 -2
  440. package/utils/focus/set-native-mouse-focused.d.ts +1 -3
  441. package/utils/index.d.ts +1 -0
  442. package/utils/math/clamp.d.ts +1 -3
  443. package/utils/math/quantize.d.ts +1 -3
  444. package/utils/math/round.d.ts +3 -15
  445. package/utils/math/sum.d.ts +1 -3
  446. package/utils/math/to-int.d.ts +1 -5
  447. package/utils/math/to-radians.d.ts +1 -3
  448. package/utils/miscellaneous/array-remove.d.ts +1 -0
  449. package/utils/miscellaneous/array-toggle.d.ts +1 -0
  450. package/utils/miscellaneous/distance-between-touches.d.ts +1 -5
  451. package/utils/miscellaneous/ease-in-out-quad.d.ts +1 -5
  452. package/utils/miscellaneous/flat-length.d.ts +1 -3
  453. package/utils/miscellaneous/get-original-array-from-query-list.d.ts +1 -3
  454. package/utils/miscellaneous/get-swipe-direction.d.ts +1 -5
  455. package/utils/miscellaneous/index.d.ts +2 -2
  456. package/utils/miscellaneous/is-number.d.ts +1 -5
  457. package/utils/miscellaneous/is-present.d.ts +1 -5
  458. package/utils/miscellaneous/mark-control-as-touched-and-validate.d.ts +1 -5
  459. package/utils/miscellaneous/uniq-by.d.ts +1 -5
  460. package/utils/os/is-apple-platform.d.ts +1 -3
  461. package/utils/os/is-apple.d.ts +1 -5
  462. package/utils/os/is-ios.d.ts +1 -5
  463. package/utils/svg/svg-linear-gradient-processor.d.ts +1 -3
  464. package/esm2015/tokens/sanitizer.js +0 -4
  465. package/esm2015/utils/browser/is-ie.js +0 -4
  466. package/esm2015/utils/dom/is-form-field.js +0 -8
  467. package/esm2015/utils/focus/get-closest-keyboard-focusable.js +0 -34
  468. package/esm2015/utils/focus/set-native-focused.js +0 -19
  469. package/esm2015/utils/miscellaneous/identity.js +0 -8
  470. package/esm2015/utils/miscellaneous/is-element-editable.js +0 -12
  471. package/tokens/sanitizer.d.ts +0 -2
  472. package/utils/browser/is-ie.d.ts +0 -1
  473. package/utils/dom/is-form-field.d.ts +0 -1
  474. package/utils/focus/get-closest-keyboard-focusable.d.ts +0 -10
  475. package/utils/focus/set-native-focused.d.ts +0 -10
  476. package/utils/miscellaneous/identity.d.ts +0 -4
  477. package/utils/miscellaneous/is-element-editable.d.ts +0 -5
@@ -4,16 +4,11 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global["taiga-ui"] = global["taiga-ui"] || {}, global["taiga-ui"].cdk = global["taiga-ui"].cdk || {}, global["taiga-ui"].cdk.utils = global["taiga-ui"].cdk.utils || {}, global["taiga-ui"].cdk.utils.dom = {}), global["taiga-ui"].cdk.utils.math, global["taiga-ui"].cdk.utils.miscellaneous, global["taiga-ui"].cdk.classes));
5
5
  })(this, (function (exports, math, miscellaneous, classes) { 'use strict';
6
6
 
7
- /**
8
- * @deprecated: use {@link tuiCanScroll} instead
9
- */
10
- // eslint-disable-next-line @typescript-eslint/naming-convention
11
- function canScroll(element, rootElement, vertical, scrollEnd) {
7
+ function tuiCanScroll(element, rootElement, vertical, scrollEnd) {
12
8
  return vertical
13
9
  ? canScrollVertical(element, rootElement, scrollEnd)
14
10
  : canScrollHorizontal(element, rootElement, scrollEnd);
15
11
  }
16
- var tuiCanScroll = canScroll;
17
12
  function canScrollVertical(element, rootElement, scrollEnd) {
18
13
  var currentElement = element;
19
14
  while (currentElement !== rootElement.parentElement) {
@@ -51,122 +46,118 @@
51
46
  return false;
52
47
  }
53
48
 
54
- /**
55
- * @deprecated: use {@link tuiContainsOrAfter} instead
56
- */
57
- // eslint-disable-next-line @typescript-eslint/naming-convention
58
- function containsOrAfter(current, node) {
49
+ function tuiContainsOrAfter(current, node) {
59
50
  return (current.contains(node) ||
60
51
  !!(node.compareDocumentPosition(current) & Node.DOCUMENT_POSITION_PRECEDING));
61
52
  }
62
- var tuiContainsOrAfter = containsOrAfter;
53
+
54
+ // TODO: Refactor to use this check everywhere
55
+ function tuiIsInput(element) {
56
+ return element.matches("input");
57
+ }
58
+ function tuiIsTextarea(element) {
59
+ return element.matches("textarea");
60
+ }
61
+ function tuiIsTextfield(element) {
62
+ return tuiIsInput(element) || tuiIsTextarea(element);
63
+ }
64
+ function tuiIsElement(node) {
65
+ return !!node && "nodeType" in node && node.nodeType === Node.ELEMENT_NODE;
66
+ }
67
+ function tuiIsHTMLElement(node) {
68
+ // TODO: iframe warning
69
+ return node instanceof HTMLElement;
70
+ }
71
+ function tuiIsTextNode(node) {
72
+ return node.nodeType === Node.TEXT_NODE;
73
+ }
63
74
 
64
75
  /**
65
- * @deprecated: use {@link tuiGetActualTarget} instead
66
76
  * Gets actual target from open Shadow DOM if event happened within it
67
77
  */
68
- // eslint-disable-next-line @typescript-eslint/naming-convention
69
- function getActualTarget(event) {
78
+ function tuiGetActualTarget(event) {
70
79
  if ("composedPath" in event) {
71
80
  return event.composedPath()[0];
72
81
  }
73
82
  return event.target;
74
83
  }
75
- var tuiGetActualTarget = getActualTarget;
76
84
 
77
85
  var DEFAULT_FORMAT = "text/plain";
78
86
  /**
79
- * @deprecated: use {@link tuiGetClipboardDataText} instead
80
87
  * Gets text from data of clipboardEvent, it also works in IE and Edge browsers
81
88
  */
82
- // eslint-disable-next-line @typescript-eslint/naming-convention
83
- function getClipboardDataText(event, format) {
89
+ function tuiGetClipboardDataText(event, format) {
84
90
  if (format === void 0) { format = DEFAULT_FORMAT; }
85
91
  return "clipboardData" in event && event.clipboardData !== null
86
92
  ? event.clipboardData.getData(format) ||
87
93
  event.clipboardData.getData(DEFAULT_FORMAT)
88
94
  : event.target.ownerDocument.defaultView.clipboardData.getData("text");
89
95
  }
90
- var tuiGetClipboardDataText = getClipboardDataText;
91
96
 
92
- /**
93
- * @deprecated: use {@link tuiGetDocumentOrShadowRoot} instead
94
- */
95
- // eslint-disable-next-line @typescript-eslint/naming-convention
96
- function getDocumentOrShadowRoot(node) {
97
+ function tuiGetDocumentOrShadowRoot(node) {
97
98
  return "getRootNode" in node && node.isConnected
98
99
  ? node.getRootNode()
99
100
  : node.ownerDocument;
100
101
  }
101
- var tuiGetDocumentOrShadowRoot = getDocumentOrShadowRoot;
102
102
 
103
103
  /**
104
- * @deprecated: use {@link tuiGetElementObscures} instead
105
104
  * Returns array of Elements covering edges of given element or null if at least one edge middle point is visible
106
105
  *
107
106
  * CAUTION: Empty array means element if offscreen i.e. covered by no elements, rather than not covered
108
107
  */
109
- // eslint-disable-next-line @typescript-eslint/naming-convention
110
- function getElementObscurers(element) {
108
+ function tuiGetElementObscures(element) {
111
109
  var ownerDocument = element.ownerDocument;
112
- if (!ownerDocument || !ownerDocument.defaultView) {
110
+ if (!(ownerDocument === null || ownerDocument === void 0 ? void 0 : ownerDocument.defaultView)) {
113
111
  return null;
114
112
  }
115
113
  var _a = ownerDocument.defaultView, innerWidth = _a.innerWidth, innerHeight = _a.innerHeight;
116
- var documentRef = getDocumentOrShadowRoot(element);
114
+ var documentRef = tuiGetDocumentOrShadowRoot(element);
117
115
  var rect = element.getBoundingClientRect();
118
- var left = math.clamp(Math.round(rect.left) + 2, 0, innerWidth);
119
- var top = math.clamp(Math.round(rect.top) + 2, 0, innerHeight);
120
- var right = math.clamp(Math.round(rect.right) - 2, 0, innerWidth);
121
- var bottom = math.clamp(Math.round(rect.bottom) - 2, 0, innerHeight);
122
- var horizontalMiddle = math.clamp(Math.round(rect.left + rect.width / 2), 0, innerWidth);
123
- var verticalMiddle = math.clamp(Math.round(rect.top + rect.height / 2), 0, innerHeight);
116
+ var left = math.tuiClamp(Math.round(rect.left) + 2, 0, innerWidth);
117
+ var top = math.tuiClamp(Math.round(rect.top) + 2, 0, innerHeight);
118
+ var right = math.tuiClamp(Math.round(rect.right) - 2, 0, innerWidth);
119
+ var bottom = math.tuiClamp(Math.round(rect.bottom) - 2, 0, innerHeight);
120
+ var horizontalMiddle = math.tuiClamp(Math.round(rect.left + rect.width / 2), 0, innerWidth);
121
+ var verticalMiddle = math.tuiClamp(Math.round(rect.top + rect.height / 2), 0, innerHeight);
124
122
  var elements = [
125
123
  documentRef.elementFromPoint(horizontalMiddle, top),
126
124
  documentRef.elementFromPoint(horizontalMiddle, bottom),
127
125
  documentRef.elementFromPoint(left, verticalMiddle),
128
126
  documentRef.elementFromPoint(right, verticalMiddle),
129
127
  ];
130
- var nonNull = elements.filter(miscellaneous.isPresent);
128
+ var nonNull = elements.filter(miscellaneous.tuiIsPresent);
131
129
  if (!nonNull.length) {
132
130
  return nonNull;
133
131
  }
134
132
  var filtered = nonNull.filter(function (el) { return !element.contains(el); });
135
133
  return filtered.length === 4 ? filtered : null;
136
134
  }
137
- var tuiGetElementObscures = getElementObscurers;
138
135
 
139
136
  /**
140
- * @deprecated: use {@link tuiGetElementOffset} instead
141
137
  * Calculates offset for an element relative to it's parent several levels above
142
138
  *
143
139
  * @param host parent element
144
140
  * @param element
145
141
  * @return object with offsetTop and offsetLeft number properties
146
142
  */
147
- // eslint-disable-next-line @typescript-eslint/naming-convention
148
- function getElementOffset(host, element) {
143
+ function tuiGetElementOffset(host, element) {
149
144
  classes.tuiAssert.assert(host.contains(element), "Host must contain element");
150
145
  var offsetTop = element.offsetTop, offsetLeft = element.offsetLeft, offsetParent = element.offsetParent;
151
- // TODO: iframe warning
152
- while (offsetParent && offsetParent instanceof HTMLElement && offsetParent !== host) {
146
+ while (tuiIsHTMLElement(offsetParent) && offsetParent !== host) {
153
147
  offsetTop += offsetParent.offsetTop;
154
148
  offsetLeft += offsetParent.offsetLeft;
155
149
  offsetParent = offsetParent.offsetParent;
156
150
  }
157
151
  return { offsetTop: offsetTop, offsetLeft: offsetLeft };
158
152
  }
159
- var tuiGetElementOffset = getElementOffset;
160
153
 
161
154
  /**
162
- * @deprecated: use {@link tuiGetScrollParent} instead
163
155
  * Finds the nearest parent with scroll in it
164
156
  *
165
157
  * @param element initial element
166
158
  * @param vertical flag for orientation of scroll
167
159
  */
168
- // eslint-disable-next-line @typescript-eslint/naming-convention
169
- function getScrollParent(element, vertical) {
160
+ function tuiGetScrollParent(element, vertical) {
170
161
  if (vertical === void 0) { vertical = true; }
171
162
  if (element === null) {
172
163
  return null;
@@ -177,16 +168,7 @@
177
168
  if (!vertical && element.scrollWidth > element.clientWidth) {
178
169
  return element;
179
170
  }
180
- return getScrollParent(element.parentElement, vertical);
181
- }
182
- var tuiGetScrollParent = getScrollParent;
183
-
184
- function tuiIsFormFieldElement(element) {
185
- var textfield = element;
186
- return (!!textfield &&
187
- "value" in textfield &&
188
- "selectionStart" in textfield &&
189
- "selectionEnd" in textfield);
171
+ return tuiGetScrollParent(element.parentElement, vertical);
190
172
  }
191
173
 
192
174
  /**
@@ -200,47 +182,40 @@
200
182
  function tuiGetSelectedText(_b) {
201
183
  var getSelection = _b.getSelection, document = _b.document;
202
184
  var _a;
203
- return tuiIsFormFieldElement(document.activeElement)
185
+ return document.activeElement && tuiIsTextfield(document.activeElement)
204
186
  ? document.activeElement.value.slice(document.activeElement.selectionStart || 0, document.activeElement.selectionEnd || 0)
205
187
  : ((_a = getSelection()) === null || _a === void 0 ? void 0 : _a.toString()) || null;
206
188
  }
207
189
 
208
- /**
209
- * @deprecated: use {@link tuiIsCurrentTarget} instead
210
- */
211
- // eslint-disable-next-line @typescript-eslint/naming-convention
212
- function isCurrentTarget(_a) {
190
+ function tuiIsCurrentTarget(_a) {
213
191
  var target = _a.target, currentTarget = _a.currentTarget;
214
192
  return target === currentTarget;
215
193
  }
216
- var tuiIsCurrentTarget = isCurrentTarget;
194
+
195
+ function tuiIsElementEditable(element) {
196
+ return (tuiIsTextfield(element) && !element.readOnly) || element.isContentEditable;
197
+ }
217
198
 
218
199
  /**
219
- * @deprecated: use {@link tuiIsInsideIframe} instead
220
200
  * Checks if an app is running inside <iframe /> tag
221
201
  */
222
- // eslint-disable-next-line @typescript-eslint/naming-convention
223
- function isInsideIframe(windowRef) {
202
+ function tuiIsInsideIframe(windowRef) {
224
203
  return windowRef.parent !== windowRef;
225
204
  }
226
- var tuiIsInsideIframe = isInsideIframe;
227
205
 
228
206
  /**
229
- * @deprecated: use {@link tuiIsNodeIn} instead
230
207
  * Checks if node is inside a specific selector
231
208
  *
232
209
  * @param node
233
210
  * @param selector
234
211
  * @return true if node is inside a particular selector
235
212
  */
236
- // eslint-disable-next-line @typescript-eslint/naming-convention
237
- function isNodeIn(node, selector) {
213
+ function tuiIsNodeIn(node, selector) {
238
214
  var _a;
239
- return node.nodeType === Node.TEXT_NODE
215
+ return tuiIsTextNode(node)
240
216
  ? !!((_a = node.parentElement) === null || _a === void 0 ? void 0 : _a.closest(selector))
241
- : node.nodeType === Node.ELEMENT_NODE && !!node.closest(selector);
217
+ : tuiIsElement(node) && !!node.closest(selector);
242
218
  }
243
- var tuiIsNodeIn = isNodeIn;
244
219
 
245
220
  function tuiPointToClientRect(x, y) {
246
221
  if (x === void 0) { x = 0; }
@@ -259,17 +234,6 @@
259
234
  * Generated bundle index. Do not edit.
260
235
  */
261
236
 
262
- exports.canScroll = canScroll;
263
- exports.containsOrAfter = containsOrAfter;
264
- exports.getActualTarget = getActualTarget;
265
- exports.getClipboardDataText = getClipboardDataText;
266
- exports.getDocumentOrShadowRoot = getDocumentOrShadowRoot;
267
- exports.getElementObscurers = getElementObscurers;
268
- exports.getElementOffset = getElementOffset;
269
- exports.getScrollParent = getScrollParent;
270
- exports.isCurrentTarget = isCurrentTarget;
271
- exports.isInsideIframe = isInsideIframe;
272
- exports.isNodeIn = isNodeIn;
273
237
  exports.tuiCanScroll = tuiCanScroll;
274
238
  exports.tuiContainsOrAfter = tuiContainsOrAfter;
275
239
  exports.tuiGetActualTarget = tuiGetActualTarget;
@@ -280,9 +244,15 @@
280
244
  exports.tuiGetScrollParent = tuiGetScrollParent;
281
245
  exports.tuiGetSelectedText = tuiGetSelectedText;
282
246
  exports.tuiIsCurrentTarget = tuiIsCurrentTarget;
283
- exports.tuiIsFormFieldElement = tuiIsFormFieldElement;
247
+ exports.tuiIsElement = tuiIsElement;
248
+ exports.tuiIsElementEditable = tuiIsElementEditable;
249
+ exports.tuiIsHTMLElement = tuiIsHTMLElement;
250
+ exports.tuiIsInput = tuiIsInput;
284
251
  exports.tuiIsInsideIframe = tuiIsInsideIframe;
285
252
  exports.tuiIsNodeIn = tuiIsNodeIn;
253
+ exports.tuiIsTextNode = tuiIsTextNode;
254
+ exports.tuiIsTextarea = tuiIsTextarea;
255
+ exports.tuiIsTextfield = tuiIsTextfield;
286
256
  exports.tuiPointToClientRect = tuiPointToClientRect;
287
257
 
288
258
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-dom.umd.js","sources":["../../../projects/cdk/utils/dom/can-scroll.ts","../../../projects/cdk/utils/dom/contains-or-after.ts","../../../projects/cdk/utils/dom/get-actual-target.ts","../../../projects/cdk/utils/dom/get-clipboard-data-text.ts","../../../projects/cdk/utils/dom/get-document-or-shadow-root.ts","../../../projects/cdk/utils/dom/get-element-obscurers.ts","../../../projects/cdk/utils/dom/get-element-offset.ts","../../../projects/cdk/utils/dom/get-scroll-parent.ts","../../../projects/cdk/utils/dom/is-form-field.ts","../../../projects/cdk/utils/dom/get-selected-text.ts","../../../projects/cdk/utils/dom/is-current-target.ts","../../../projects/cdk/utils/dom/is-inside-iframe.ts","../../../projects/cdk/utils/dom/is-node-in.ts","../../../projects/cdk/utils/dom/point-to-client-rect.ts","../../../projects/cdk/utils/dom/taiga-ui-cdk-utils-dom.ts"],"sourcesContent":["/**\n * @deprecated: use {@link tuiCanScroll} instead\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function canScroll(\n element: Element,\n rootElement: Element,\n vertical: boolean,\n scrollEnd: boolean,\n): boolean {\n return vertical\n ? canScrollVertical(element, rootElement, scrollEnd)\n : canScrollHorizontal(element, rootElement, scrollEnd);\n}\n\nexport const tuiCanScroll = canScroll;\n\nfunction canScrollVertical(\n element: Element,\n rootElement: Element,\n scrollEnd: boolean,\n): boolean {\n let currentElement = element;\n\n while (currentElement !== rootElement.parentElement) {\n if (\n (Math.floor(currentElement.scrollTop) > 0 && !scrollEnd) ||\n (Math.ceil(currentElement.scrollTop + currentElement.clientHeight) <\n currentElement.scrollHeight &&\n scrollEnd)\n ) {\n return true;\n }\n\n if (currentElement.parentElement) {\n currentElement = currentElement.parentElement;\n } else {\n return false;\n }\n }\n\n return false;\n}\n\nfunction canScrollHorizontal(\n element: Element,\n rootElement: Element,\n scrollEnd: boolean,\n): boolean {\n let currentElement = element;\n\n while (currentElement !== rootElement.parentElement) {\n if (\n (Math.floor(currentElement.scrollLeft) > 0 && !scrollEnd) ||\n (Math.ceil(currentElement.scrollLeft + currentElement.clientWidth) <\n currentElement.scrollWidth &&\n scrollEnd)\n ) {\n return true;\n }\n\n if (currentElement.parentElement) {\n currentElement = currentElement.parentElement;\n } else {\n return false;\n }\n }\n\n return false;\n}\n","/**\n * @deprecated: use {@link tuiContainsOrAfter} instead\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function containsOrAfter(current: Node, node: Node): boolean {\n return (\n current.contains(node) ||\n !!(node.compareDocumentPosition(current) & Node.DOCUMENT_POSITION_PRECEDING)\n );\n}\n\nexport const tuiContainsOrAfter = containsOrAfter;\n","/**\n * @deprecated: use {@link tuiGetActualTarget} instead\n * Gets actual target from open Shadow DOM if event happened within it\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function getActualTarget(event: Event): Node {\n if (`composedPath` in event) {\n return (event as any).composedPath()[0];\n }\n\n return (event as any).target;\n}\n\nexport const tuiGetActualTarget = getActualTarget;\n","const DEFAULT_FORMAT = `text/plain`;\n\n/**\n * @deprecated: use {@link tuiGetClipboardDataText} instead\n * Gets text from data of clipboardEvent, it also works in IE and Edge browsers\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function getClipboardDataText(\n event: ClipboardEvent,\n format: string = DEFAULT_FORMAT,\n): string {\n return `clipboardData` in event && event.clipboardData !== null\n ? event.clipboardData.getData(format) ||\n event.clipboardData.getData(DEFAULT_FORMAT)\n : (event as any).target.ownerDocument.defaultView.clipboardData.getData(`text`);\n}\n\nexport const tuiGetClipboardDataText = getClipboardDataText;\n","/**\n * @deprecated: use {@link tuiGetDocumentOrShadowRoot} instead\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function getDocumentOrShadowRoot(node: Node): DocumentOrShadowRoot {\n return `getRootNode` in node && node.isConnected\n ? (node.getRootNode() as Document)\n : node.ownerDocument!;\n}\n\nexport const tuiGetDocumentOrShadowRoot = getDocumentOrShadowRoot;\n","import {clamp} from '@taiga-ui/cdk/utils/math';\nimport {isPresent} from '@taiga-ui/cdk/utils/miscellaneous';\n\nimport {getDocumentOrShadowRoot} from './get-document-or-shadow-root';\n\n/**\n * @deprecated: use {@link tuiGetElementObscures} instead\n * Returns array of Elements covering edges of given element or null if at least one edge middle point is visible\n *\n * CAUTION: Empty array means element if offscreen i.e. covered by no elements, rather than not covered\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function getElementObscurers(element: Element): readonly Element[] | null {\n const {ownerDocument} = element;\n\n if (!ownerDocument || !ownerDocument.defaultView) {\n return null;\n }\n\n const {innerWidth, innerHeight} = ownerDocument.defaultView;\n const documentRef = getDocumentOrShadowRoot(element);\n const rect = element.getBoundingClientRect();\n const left = clamp(Math.round(rect.left) + 2, 0, innerWidth);\n const top = clamp(Math.round(rect.top) + 2, 0, innerHeight);\n const right = clamp(Math.round(rect.right) - 2, 0, innerWidth);\n const bottom = clamp(Math.round(rect.bottom) - 2, 0, innerHeight);\n const horizontalMiddle = clamp(Math.round(rect.left + rect.width / 2), 0, innerWidth);\n const verticalMiddle = clamp(Math.round(rect.top + rect.height / 2), 0, innerHeight);\n const elements = [\n documentRef.elementFromPoint(horizontalMiddle, top),\n documentRef.elementFromPoint(horizontalMiddle, bottom),\n documentRef.elementFromPoint(left, verticalMiddle),\n documentRef.elementFromPoint(right, verticalMiddle),\n ];\n const nonNull = elements.filter(isPresent);\n\n if (!nonNull.length) {\n return nonNull;\n }\n\n const filtered = nonNull.filter(el => !element.contains(el));\n\n return filtered.length === 4 ? filtered : null;\n}\n\nexport const tuiGetElementObscures = getElementObscurers;\n","import {tuiAssert} from '@taiga-ui/cdk/classes';\n\n/**\n * @deprecated: use {@link tuiGetElementOffset} instead\n * Calculates offset for an element relative to it's parent several levels above\n *\n * @param host parent element\n * @param element\n * @return object with offsetTop and offsetLeft number properties\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function getElementOffset(\n host: Element,\n element: HTMLElement,\n): {offsetTop: number; offsetLeft: number} {\n tuiAssert.assert(host.contains(element), `Host must contain element`);\n\n let {offsetTop, offsetLeft, offsetParent} = element;\n\n // TODO: iframe warning\n while (offsetParent && offsetParent instanceof HTMLElement && offsetParent !== host) {\n offsetTop += offsetParent.offsetTop;\n offsetLeft += offsetParent.offsetLeft;\n offsetParent = offsetParent.offsetParent;\n }\n\n return {offsetTop, offsetLeft};\n}\n\nexport const tuiGetElementOffset = getElementOffset;\n","/**\n * @deprecated: use {@link tuiGetScrollParent} instead\n * Finds the nearest parent with scroll in it\n *\n * @param element initial element\n * @param vertical flag for orientation of scroll\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function getScrollParent(\n element: Element | null,\n vertical: boolean = true,\n): Element | null {\n if (element === null) {\n return null;\n }\n\n if (vertical && element.scrollHeight > element.clientHeight) {\n return element;\n }\n\n if (!vertical && element.scrollWidth > element.clientWidth) {\n return element;\n }\n\n return getScrollParent(element.parentElement, vertical);\n}\n\nexport const tuiGetScrollParent = getScrollParent;\n","export function tuiIsFormFieldElement(\n element: unknown | null,\n): element is HTMLInputElement | HTMLTextAreaElement {\n const textfield = element as Record<string, unknown> | null;\n\n return (\n !!textfield &&\n `value` in textfield &&\n `selectionStart` in textfield &&\n `selectionEnd` in textfield\n );\n}\n","import {tuiIsFormFieldElement} from './is-form-field';\n\n/**\n * @description:\n * cross browser way to get selected text\n *\n * History:\n * BUG - window.getSelection() fails when text selected in a form field\n * https://bugzilla.mozilla.org/show_bug.cgi?id=85686\n */\nexport function tuiGetSelectedText({getSelection, document}: Window): string | null {\n return tuiIsFormFieldElement(document.activeElement)\n ? document.activeElement.value.slice(\n document.activeElement.selectionStart || 0,\n document.activeElement.selectionEnd || 0,\n )\n : getSelection()?.toString() || null;\n}\n","/**\n * @deprecated: use {@link tuiIsCurrentTarget} instead\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function isCurrentTarget({target, currentTarget}: Event): boolean {\n return target === currentTarget;\n}\n\nexport const tuiIsCurrentTarget = isCurrentTarget;\n","/**\n * @deprecated: use {@link tuiIsInsideIframe} instead\n * Checks if an app is running inside <iframe /> tag\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function isInsideIframe(windowRef: Window): boolean {\n return windowRef.parent !== windowRef;\n}\n\nexport const tuiIsInsideIframe = isInsideIframe;\n","/**\n * @deprecated: use {@link tuiIsNodeIn} instead\n * Checks if node is inside a specific selector\n *\n * @param node\n * @param selector\n * @return true if node is inside a particular selector\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function isNodeIn(node: Node, selector: string): boolean {\n return node.nodeType === Node.TEXT_NODE\n ? !!node.parentElement?.closest(selector)\n : node.nodeType === Node.ELEMENT_NODE && !!(node as Element).closest(selector);\n}\n\nexport const tuiIsNodeIn = isNodeIn;\n","export function tuiPointToClientRect(x: number = 0, y: number = 0): ClientRect {\n return {\n left: x,\n right: x,\n top: y,\n bottom: y,\n width: 0,\n height: 0,\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["clamp","isPresent","tuiAssert"],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-dom.umd.js","sources":["../../../projects/cdk/utils/dom/can-scroll.ts","../../../projects/cdk/utils/dom/contains-or-after.ts","../../../projects/cdk/utils/dom/element-checks.ts","../../../projects/cdk/utils/dom/get-actual-target.ts","../../../projects/cdk/utils/dom/get-clipboard-data-text.ts","../../../projects/cdk/utils/dom/get-document-or-shadow-root.ts","../../../projects/cdk/utils/dom/get-element-obscurers.ts","../../../projects/cdk/utils/dom/get-element-offset.ts","../../../projects/cdk/utils/dom/get-scroll-parent.ts","../../../projects/cdk/utils/dom/get-selected-text.ts","../../../projects/cdk/utils/dom/is-current-target.ts","../../../projects/cdk/utils/dom/is-element-editable.ts","../../../projects/cdk/utils/dom/is-inside-iframe.ts","../../../projects/cdk/utils/dom/is-node-in.ts","../../../projects/cdk/utils/dom/point-to-client-rect.ts","../../../projects/cdk/utils/dom/taiga-ui-cdk-utils-dom.ts"],"sourcesContent":["export function tuiCanScroll(\n element: Element,\n rootElement: Element,\n vertical: boolean,\n scrollEnd: boolean,\n): boolean {\n return vertical\n ? canScrollVertical(element, rootElement, scrollEnd)\n : canScrollHorizontal(element, rootElement, scrollEnd);\n}\n\nfunction canScrollVertical(\n element: Element,\n rootElement: Element,\n scrollEnd: boolean,\n): boolean {\n let currentElement = element;\n\n while (currentElement !== rootElement.parentElement) {\n if (\n (Math.floor(currentElement.scrollTop) > 0 && !scrollEnd) ||\n (Math.ceil(currentElement.scrollTop + currentElement.clientHeight) <\n currentElement.scrollHeight &&\n scrollEnd)\n ) {\n return true;\n }\n\n if (currentElement.parentElement) {\n currentElement = currentElement.parentElement;\n } else {\n return false;\n }\n }\n\n return false;\n}\n\nfunction canScrollHorizontal(\n element: Element,\n rootElement: Element,\n scrollEnd: boolean,\n): boolean {\n let currentElement = element;\n\n while (currentElement !== rootElement.parentElement) {\n if (\n (Math.floor(currentElement.scrollLeft) > 0 && !scrollEnd) ||\n (Math.ceil(currentElement.scrollLeft + currentElement.clientWidth) <\n currentElement.scrollWidth &&\n scrollEnd)\n ) {\n return true;\n }\n\n if (currentElement.parentElement) {\n currentElement = currentElement.parentElement;\n } else {\n return false;\n }\n }\n\n return false;\n}\n","export function tuiContainsOrAfter(current: Node, node: Node): boolean {\n return (\n current.contains(node) ||\n !!(node.compareDocumentPosition(current) & Node.DOCUMENT_POSITION_PRECEDING)\n );\n}\n","// TODO: Refactor to use this check everywhere\nexport function tuiIsInput(element: Element): element is HTMLInputElement {\n return element.matches(`input`);\n}\n\nexport function tuiIsTextarea(element: Element): element is HTMLTextAreaElement {\n return element.matches(`textarea`);\n}\n\nexport function tuiIsTextfield(\n element: Element,\n): element is HTMLInputElement | HTMLTextAreaElement {\n return tuiIsInput(element) || tuiIsTextarea(element);\n}\n\nexport function tuiIsElement(\n node?: Node | Element | EventTarget | null,\n): node is Element {\n return !!node && `nodeType` in node && node.nodeType === Node.ELEMENT_NODE;\n}\n\nexport function tuiIsHTMLElement(node: unknown): node is HTMLElement {\n // TODO: iframe warning\n return node instanceof HTMLElement;\n}\n\nexport function tuiIsTextNode(node: Node): node is Text {\n return node.nodeType === Node.TEXT_NODE;\n}\n","/**\n * Gets actual target from open Shadow DOM if event happened within it\n */\nexport function tuiGetActualTarget(event: Event): Node {\n if (`composedPath` in event) {\n return (event as any).composedPath()[0];\n }\n\n return (event as any).target;\n}\n","const DEFAULT_FORMAT = `text/plain`;\n\n/**\n * Gets text from data of clipboardEvent, it also works in IE and Edge browsers\n */\nexport function tuiGetClipboardDataText(\n event: ClipboardEvent,\n format: string = DEFAULT_FORMAT,\n): string {\n return `clipboardData` in event && event.clipboardData !== null\n ? event.clipboardData.getData(format) ||\n event.clipboardData.getData(DEFAULT_FORMAT)\n : (event as any).target.ownerDocument.defaultView.clipboardData.getData(`text`);\n}\n","export function tuiGetDocumentOrShadowRoot(node: Node): DocumentOrShadowRoot {\n return `getRootNode` in node && node.isConnected\n ? (node.getRootNode() as Document)\n : node.ownerDocument!;\n}\n","import {tuiClamp} from '@taiga-ui/cdk/utils/math';\nimport {tuiIsPresent} from '@taiga-ui/cdk/utils/miscellaneous';\n\nimport {tuiGetDocumentOrShadowRoot} from './get-document-or-shadow-root';\n\n/**\n * Returns array of Elements covering edges of given element or null if at least one edge middle point is visible\n *\n * CAUTION: Empty array means element if offscreen i.e. covered by no elements, rather than not covered\n */\nexport function tuiGetElementObscures(element: Element): readonly Element[] | null {\n const {ownerDocument} = element;\n\n if (!ownerDocument?.defaultView) {\n return null;\n }\n\n const {innerWidth, innerHeight} = ownerDocument.defaultView;\n const documentRef = tuiGetDocumentOrShadowRoot(element);\n const rect = element.getBoundingClientRect();\n const left = tuiClamp(Math.round(rect.left) + 2, 0, innerWidth);\n const top = tuiClamp(Math.round(rect.top) + 2, 0, innerHeight);\n const right = tuiClamp(Math.round(rect.right) - 2, 0, innerWidth);\n const bottom = tuiClamp(Math.round(rect.bottom) - 2, 0, innerHeight);\n const horizontalMiddle = tuiClamp(\n Math.round(rect.left + rect.width / 2),\n 0,\n innerWidth,\n );\n const verticalMiddle = tuiClamp(\n Math.round(rect.top + rect.height / 2),\n 0,\n innerHeight,\n );\n const elements = [\n documentRef.elementFromPoint(horizontalMiddle, top),\n documentRef.elementFromPoint(horizontalMiddle, bottom),\n documentRef.elementFromPoint(left, verticalMiddle),\n documentRef.elementFromPoint(right, verticalMiddle),\n ];\n const nonNull = elements.filter(tuiIsPresent);\n\n if (!nonNull.length) {\n return nonNull;\n }\n\n const filtered = nonNull.filter(el => !element.contains(el));\n\n return filtered.length === 4 ? filtered : null;\n}\n","import {tuiAssert} from '@taiga-ui/cdk/classes';\n\nimport {tuiIsHTMLElement} from './element-checks';\n\n/**\n * Calculates offset for an element relative to it's parent several levels above\n *\n * @param host parent element\n * @param element\n * @return object with offsetTop and offsetLeft number properties\n */\nexport function tuiGetElementOffset(\n host: Element,\n element: HTMLElement,\n): {offsetTop: number; offsetLeft: number} {\n tuiAssert.assert(host.contains(element), `Host must contain element`);\n\n let {offsetTop, offsetLeft, offsetParent} = element;\n\n while (tuiIsHTMLElement(offsetParent) && offsetParent !== host) {\n offsetTop += offsetParent.offsetTop;\n offsetLeft += offsetParent.offsetLeft;\n offsetParent = offsetParent.offsetParent;\n }\n\n return {offsetTop, offsetLeft};\n}\n","/**\n * Finds the nearest parent with scroll in it\n *\n * @param element initial element\n * @param vertical flag for orientation of scroll\n */\nexport function tuiGetScrollParent(\n element: Element | null,\n vertical: boolean = true,\n): Element | null {\n if (element === null) {\n return null;\n }\n\n if (vertical && element.scrollHeight > element.clientHeight) {\n return element;\n }\n\n if (!vertical && element.scrollWidth > element.clientWidth) {\n return element;\n }\n\n return tuiGetScrollParent(element.parentElement, vertical);\n}\n","import {tuiIsTextfield} from './element-checks';\n\n/**\n * @description:\n * cross browser way to get selected text\n *\n * History:\n * BUG - window.getSelection() fails when text selected in a form field\n * https://bugzilla.mozilla.org/show_bug.cgi?id=85686\n */\nexport function tuiGetSelectedText({getSelection, document}: Window): string | null {\n return document.activeElement && tuiIsTextfield(document.activeElement)\n ? document.activeElement.value.slice(\n document.activeElement.selectionStart || 0,\n document.activeElement.selectionEnd || 0,\n )\n : getSelection()?.toString() || null;\n}\n","export function tuiIsCurrentTarget({target, currentTarget}: Event): boolean {\n return target === currentTarget;\n}\n","import {tuiIsTextfield} from './element-checks';\n\nexport function tuiIsElementEditable(element: HTMLElement): boolean {\n return (tuiIsTextfield(element) && !element.readOnly) || element.isContentEditable;\n}\n","/**\n * Checks if an app is running inside <iframe /> tag\n */\nexport function tuiIsInsideIframe(windowRef: Window): boolean {\n return windowRef.parent !== windowRef;\n}\n","import {tuiIsElement, tuiIsTextNode} from './element-checks';\n\n/**\n * Checks if node is inside a specific selector\n *\n * @param node\n * @param selector\n * @return true if node is inside a particular selector\n */\nexport function tuiIsNodeIn(node: Node, selector: string): boolean {\n return tuiIsTextNode(node)\n ? !!node.parentElement?.closest(selector)\n : tuiIsElement(node) && !!node.closest(selector);\n}\n","export function tuiPointToClientRect(x: number = 0, y: number = 0): ClientRect {\n return {\n left: x,\n right: x,\n top: y,\n bottom: y,\n width: 0,\n height: 0,\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tuiClamp","tuiIsPresent","tuiAssert"],"mappings":"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"}
@@ -1,17 +1,17 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@taiga-ui/cdk/constants')) :
3
- typeof define === 'function' && define.amd ? define('@taiga-ui/cdk/utils/focus', ['exports', '@taiga-ui/cdk/constants'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global["taiga-ui"] = global["taiga-ui"] || {}, global["taiga-ui"].cdk = global["taiga-ui"].cdk || {}, global["taiga-ui"].cdk.utils = global["taiga-ui"].cdk.utils || {}, global["taiga-ui"].cdk.utils.focus = {}), global["taiga-ui"].cdk.constants));
5
- })(this, (function (exports, constants) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@taiga-ui/cdk/utils/dom'), require('@taiga-ui/cdk/constants')) :
3
+ typeof define === 'function' && define.amd ? define('@taiga-ui/cdk/utils/focus', ['exports', '@taiga-ui/cdk/utils/dom', '@taiga-ui/cdk/constants'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global["taiga-ui"] = global["taiga-ui"] || {}, global["taiga-ui"].cdk = global["taiga-ui"].cdk || {}, global["taiga-ui"].cdk.utils = global["taiga-ui"].cdk.utils || {}, global["taiga-ui"].cdk.utils.focus = {}), global["taiga-ui"].cdk.utils.dom, global["taiga-ui"].cdk.constants));
5
+ })(this, (function (exports, dom, constants) { 'use strict';
6
6
 
7
7
  /**
8
8
  * Returns current active element, including shadow dom
9
9
  *
10
10
  * @return element or null
11
11
  */
12
- // eslint-disable-next-line @typescript-eslint/naming-convention
13
12
  function tuiGetNativeFocused(documentRef) {
14
- if (!documentRef.activeElement || !documentRef.activeElement.shadowRoot) {
13
+ var _a;
14
+ if (!((_a = documentRef.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot)) {
15
15
  return documentRef.activeElement;
16
16
  }
17
17
  var element = documentRef.activeElement.shadowRoot.activeElement;
@@ -22,18 +22,14 @@
22
22
  }
23
23
 
24
24
  /**
25
- * @deprecated: use {@link tuiBlurNativeFocused} instead
26
25
  * Finds and blurs current active element, including shadow DOM
27
26
  */
28
- // eslint-disable-next-line @typescript-eslint/naming-convention
29
- function blurNativeFocused(documentRef) {
27
+ function tuiBlurNativeFocused(documentRef) {
30
28
  var activeElement = tuiGetNativeFocused(documentRef);
31
- // TODO: iframe warning
32
- if (activeElement instanceof HTMLElement) {
29
+ if (dom.tuiIsHTMLElement(activeElement)) {
33
30
  activeElement.blur();
34
31
  }
35
32
  }
36
- var tuiBlurNativeFocused = blurNativeFocused;
37
33
 
38
34
  /**
39
35
  * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to
@@ -45,8 +41,7 @@
45
41
  if (element.hasAttribute("disabled") || element.getAttribute("tabIndex") === "-1") {
46
42
  return false;
47
43
  }
48
- // TODO: iframe warning
49
- if ((element instanceof HTMLElement && element.isContentEditable) ||
44
+ if ((dom.tuiIsHTMLElement(element) && element.isContentEditable) ||
50
45
  element.getAttribute("tabIndex") === "0") {
51
46
  return true;
52
47
  }
@@ -68,9 +63,6 @@
68
63
  }
69
64
  }
70
65
 
71
- /**
72
- */
73
- // eslint-disable-next-line @typescript-eslint/naming-convention
74
66
  function tuiIsNativeMouseFocusable(element) {
75
67
  return (!element.hasAttribute("disabled") &&
76
68
  (element.getAttribute("tabIndex") === "-1" ||
@@ -78,32 +70,22 @@
78
70
  }
79
71
 
80
72
  /**
73
+ * @description:
81
74
  * Finds the closest element that can be focused with a keyboard or mouse in theory
82
- *
83
- * @param initial current HTML element
84
- * @param prev should it look backwards instead (find item that will be focused with Shift + Tab)
85
- * @param root top Node limiting the search area
86
- * @param keyboard determine if only keyboard focus is of interest
87
- *
88
75
  */
89
- function tuiGetClosestFocusable(initial, prev, root, keyboard) {
90
- if (prev === void 0) { prev = false; }
91
- if (keyboard === void 0) { keyboard = true; }
76
+ function tuiGetClosestFocusable(_a) {
77
+ var initial = _a.initial, root = _a.root, _b = _a.previous, previous = _b === void 0 ? false : _b, _c = _a.keyboard, keyboard = _c === void 0 ? true : _c;
92
78
  if (!root.ownerDocument) {
93
79
  return null;
94
80
  }
95
81
  var check = keyboard ? tuiIsNativeKeyboardFocusable : tuiIsNativeMouseFocusable;
96
- // Deprecated but ony this overload works in IE
97
- // Filter must be a function in IE, other modern browsers are compliant to this format
98
- var treeWalker = root.ownerDocument.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, constants.svgNodeFilter, false);
82
+ var treeWalker = root.ownerDocument.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, constants.svgNodeFilter);
99
83
  treeWalker.currentNode = initial;
100
- while (prev ? treeWalker.previousNode() : treeWalker.nextNode()) {
101
- // TODO: iframe warning
102
- if (treeWalker.currentNode instanceof HTMLElement) {
84
+ while (previous ? treeWalker.previousNode() : treeWalker.nextNode()) {
85
+ if (dom.tuiIsHTMLElement(treeWalker.currentNode)) {
103
86
  initial = treeWalker.currentNode;
104
87
  }
105
- // TODO: iframe warning
106
- if (check(initial) && initial instanceof HTMLElement) {
88
+ if (dom.tuiIsHTMLElement(initial) && check(initial)) {
107
89
  return initial;
108
90
  }
109
91
  }
@@ -118,7 +100,6 @@
118
100
  * @param node or null (as a common return value of DOM nodes walking)
119
101
  * @return true if focused
120
102
  */
121
- // eslint-disable-next-line @typescript-eslint/naming-convention
122
103
  function tuiIsNativeFocused(node) {
123
104
  return !!(node === null || node === void 0 ? void 0 : node.ownerDocument) && tuiGetNativeFocused(node.ownerDocument) === node;
124
105
  }
@@ -129,7 +110,6 @@
129
110
  * @param node
130
111
  * @return true if focused node is contained within element
131
112
  */
132
- // eslint-disable-next-line @typescript-eslint/naming-convention
133
113
  function tuiIsNativeFocusedIn(node) {
134
114
  // !node.contains - check for IE11
135
115
  if (!node.ownerDocument || !node.contains) {
@@ -139,27 +119,6 @@
139
119
  return nativeFocused !== null && node.contains(nativeFocused);
140
120
  }
141
121
 
142
- /**
143
- * @deprecated: use native element.focus()
144
- * TODO: remove in v3.0
145
- * Focuses or blurs and element
146
- *
147
- * @param element native element
148
- * @param focused boolean focused state
149
- * @param preventScroll optional flag to prevent native scroll to the element
150
- */
151
- // eslint-disable-next-line @typescript-eslint/naming-convention
152
- function setNativeFocused(element, focused, preventScroll) {
153
- if (focused === void 0) { focused = true; }
154
- if (preventScroll === void 0) { preventScroll = false; }
155
- if (focused) {
156
- element.focus({ preventScroll: preventScroll });
157
- }
158
- else {
159
- element.blur();
160
- }
161
- }
162
-
163
122
  /**
164
123
  * Utility method for moving focus in a list of elements
165
124
  *
@@ -167,11 +126,10 @@
167
126
  * @param elements array of focusable elements
168
127
  * @param step a step to move focus by, typically -1 or 1
169
128
  */
170
- // eslint-disable-next-line @typescript-eslint/naming-convention
171
129
  function tuiMoveFocus(currentIndex, elements, step) {
172
130
  currentIndex += step;
173
131
  while (currentIndex >= 0 && currentIndex < elements.length) {
174
- setNativeFocused(elements[currentIndex]);
132
+ elements[currentIndex].focus();
175
133
  if (tuiIsNativeFocused(elements[currentIndex])) {
176
134
  return;
177
135
  }
@@ -180,15 +138,13 @@
180
138
  }
181
139
 
182
140
  /**
183
- * @deprecated: use {@link tuiSetNativeMouseFocused} instead
184
141
  * Focuses or blurs element with mouse action imitation (to spoof {@link TuiFocusVisibleService})
185
142
  *
186
143
  * @param element
187
144
  * @param focused desired focused state
188
145
  * @param preventScroll optionally prevent native browser scroll after focus
189
146
  */
190
- // eslint-disable-next-line @typescript-eslint/naming-convention
191
- function setNativeMouseFocused(element, focused, preventScroll) {
147
+ function tuiSetNativeMouseFocused(element, focused, preventScroll) {
192
148
  if (focused === void 0) { focused = true; }
193
149
  if (preventScroll === void 0) { preventScroll = false; }
194
150
  if (!element.ownerDocument) {
@@ -202,17 +158,18 @@
202
158
  event.initEvent("mousedown", true, true);
203
159
  element.dispatchEvent(event);
204
160
  }
205
- setNativeFocused(element, focused, preventScroll);
161
+ if (focused) {
162
+ element.focus({ preventScroll: preventScroll });
163
+ }
164
+ else {
165
+ element.blur();
166
+ }
206
167
  }
207
- var tuiSetNativeMouseFocused = setNativeMouseFocused;
208
168
 
209
169
  /**
210
170
  * Generated bundle index. Do not edit.
211
171
  */
212
172
 
213
- exports.blurNativeFocused = blurNativeFocused;
214
- exports.setNativeFocused = setNativeFocused;
215
- exports.setNativeMouseFocused = setNativeMouseFocused;
216
173
  exports.tuiBlurNativeFocused = tuiBlurNativeFocused;
217
174
  exports.tuiGetClosestFocusable = tuiGetClosestFocusable;
218
175
  exports.tuiGetNativeFocused = tuiGetNativeFocused;
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-focus.umd.js","sources":["../../../projects/cdk/utils/focus/get-native-focused.ts","../../../projects/cdk/utils/focus/blur-native-focused.ts","../../../projects/cdk/utils/focus/is-native-keyboard-focusable.ts","../../../projects/cdk/utils/focus/is-native-mouse-focusable.ts","../../../projects/cdk/utils/focus/get-closest-keyboard-focusable.ts","../../../projects/cdk/utils/focus/is-native-focused.ts","../../../projects/cdk/utils/focus/is-native-focused-in.ts","../../../projects/cdk/utils/focus/set-native-focused.ts","../../../projects/cdk/utils/focus/move-focus.ts","../../../projects/cdk/utils/focus/set-native-mouse-focused.ts","../../../projects/cdk/utils/focus/taiga-ui-cdk-utils-focus.ts"],"sourcesContent":["/**\n * Returns current active element, including shadow dom\n *\n * @return element or null\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function tuiGetNativeFocused(documentRef: Document): Element | null {\n if (!documentRef.activeElement || !documentRef.activeElement.shadowRoot) {\n return documentRef.activeElement;\n }\n\n let element = documentRef.activeElement.shadowRoot.activeElement;\n\n while (element?.shadowRoot) {\n element = element.shadowRoot.activeElement;\n }\n\n return element;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * @deprecated: use {@link tuiBlurNativeFocused} instead\n * Finds and blurs current active element, including shadow DOM\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function blurNativeFocused(documentRef: Document): void {\n const activeElement = tuiGetNativeFocused(documentRef);\n\n // TODO: iframe warning\n if (activeElement instanceof HTMLElement) {\n activeElement.blur();\n }\n}\n\nexport const tuiBlurNativeFocused = blurNativeFocused;\n","/**\n * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to\n * only target natural focus order. Not checking the possibility of an element to\n * be focused, for example element can have display: none applied to it or any other\n * circumstances could prevent actual focus.\n */\nexport function tuiIsNativeKeyboardFocusable(element: Element): boolean {\n if (element.hasAttribute(`disabled`) || element.getAttribute(`tabIndex`) === `-1`) {\n return false;\n }\n\n // TODO: iframe warning\n if (\n (element instanceof HTMLElement && element.isContentEditable) ||\n element.getAttribute(`tabIndex`) === `0`\n ) {\n return true;\n }\n\n switch (element.tagName) {\n case `BUTTON`:\n case `SELECT`:\n case `TEXTAREA`:\n return true;\n case `VIDEO`:\n case `AUDIO`:\n return element.hasAttribute(`controls`);\n case `INPUT`:\n return element.getAttribute(`type`) !== `hidden`;\n case `A`:\n case `LINK`:\n return element.hasAttribute(`href`);\n default:\n return false;\n }\n}\n","import {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\n\n/**\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function tuiIsNativeMouseFocusable(element: Element): boolean {\n return (\n !element.hasAttribute(`disabled`) &&\n (element.getAttribute(`tabIndex`) === `-1` ||\n tuiIsNativeKeyboardFocusable(element))\n );\n}\n","import {svgNodeFilter} from '@taiga-ui/cdk/constants';\n\nimport {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\nimport {tuiIsNativeMouseFocusable} from './is-native-mouse-focusable';\n\n/**\n * Finds the closest element that can be focused with a keyboard or mouse in theory\n *\n * @param initial current HTML element\n * @param prev should it look backwards instead (find item that will be focused with Shift + Tab)\n * @param root top Node limiting the search area\n * @param keyboard determine if only keyboard focus is of interest\n *\n */\nexport function tuiGetClosestFocusable(\n initial: Element,\n prev: boolean = false,\n root: Node,\n keyboard: boolean = true,\n): HTMLElement | null {\n if (!root.ownerDocument) {\n return null;\n }\n\n const check = keyboard ? tuiIsNativeKeyboardFocusable : tuiIsNativeMouseFocusable;\n\n // Deprecated but ony this overload works in IE\n // Filter must be a function in IE, other modern browsers are compliant to this format\n const treeWalker = root.ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n svgNodeFilter,\n false,\n );\n\n treeWalker.currentNode = initial;\n\n while (prev ? treeWalker.previousNode() : treeWalker.nextNode()) {\n // TODO: iframe warning\n if (treeWalker.currentNode instanceof HTMLElement) {\n initial = treeWalker.currentNode;\n }\n\n // TODO: iframe warning\n if (check(initial) && initial instanceof HTMLElement) {\n return initial;\n }\n }\n\n return null;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if element is focused.\n *\n * Could return true even after blur since element remains focused if you switch away from a browser tab.\n *\n * @param node or null (as a common return value of DOM nodes walking)\n * @return true if focused\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function tuiIsNativeFocused(node: Node | null): boolean {\n return !!node?.ownerDocument && tuiGetNativeFocused(node.ownerDocument) === node;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if focused element is within given element.\n *\n * @param node\n * @return true if focused node is contained within element\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function tuiIsNativeFocusedIn(node: Node): boolean {\n // !node.contains - check for IE11\n if (!node.ownerDocument || !node.contains) {\n return false;\n }\n\n const nativeFocused = tuiGetNativeFocused(node.ownerDocument);\n\n return nativeFocused !== null && node.contains(nativeFocused);\n}\n","/**\n * @deprecated: use native element.focus()\n * TODO: remove in v3.0\n * Focuses or blurs and element\n *\n * @param element native element\n * @param focused boolean focused state\n * @param preventScroll optional flag to prevent native scroll to the element\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function setNativeFocused(\n element: HTMLOrSVGElement,\n focused: boolean = true,\n preventScroll: boolean = false,\n): void {\n if (focused) {\n element.focus({preventScroll});\n } else {\n element.blur();\n }\n}\n","import {tuiIsNativeFocused} from './is-native-focused';\nimport {setNativeFocused} from './set-native-focused';\n\n/**\n * Utility method for moving focus in a list of elements\n *\n * @param currentIndex currently focused index\n * @param elements array of focusable elements\n * @param step a step to move focus by, typically -1 or 1\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function tuiMoveFocus(\n currentIndex: number,\n elements: readonly HTMLElement[],\n step: number,\n): void {\n currentIndex += step;\n\n while (currentIndex >= 0 && currentIndex < elements.length) {\n setNativeFocused(elements[currentIndex]);\n\n if (tuiIsNativeFocused(elements[currentIndex])) {\n return;\n }\n\n currentIndex += step;\n }\n}\n","import {setNativeFocused} from './set-native-focused';\n\n/**\n * @deprecated: use {@link tuiSetNativeMouseFocused} instead\n * Focuses or blurs element with mouse action imitation (to spoof {@link TuiFocusVisibleService})\n *\n * @param element\n * @param focused desired focused state\n * @param preventScroll optionally prevent native browser scroll after focus\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function setNativeMouseFocused(\n element: HTMLOrSVGElement & Element,\n focused: boolean = true,\n preventScroll: boolean = false,\n): void {\n if (!element.ownerDocument) {\n return;\n }\n\n if (typeof Event === `function`) {\n element.dispatchEvent(new Event(`mousedown`, {bubbles: true, cancelable: true}));\n } else {\n const event = element.ownerDocument.createEvent(`Event`);\n\n event.initEvent(`mousedown`, true, true);\n element.dispatchEvent(event);\n }\n\n setNativeFocused(element, focused, preventScroll);\n}\n\nexport const tuiSetNativeMouseFocused = setNativeMouseFocused;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["svgNodeFilter"],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-focus.umd.js","sources":["../../../projects/cdk/utils/focus/get-native-focused.ts","../../../projects/cdk/utils/focus/blur-native-focused.ts","../../../projects/cdk/utils/focus/is-native-keyboard-focusable.ts","../../../projects/cdk/utils/focus/is-native-mouse-focusable.ts","../../../projects/cdk/utils/focus/get-closest-focusable.ts","../../../projects/cdk/utils/focus/is-native-focused.ts","../../../projects/cdk/utils/focus/is-native-focused-in.ts","../../../projects/cdk/utils/focus/move-focus.ts","../../../projects/cdk/utils/focus/set-native-mouse-focused.ts","../../../projects/cdk/utils/focus/taiga-ui-cdk-utils-focus.ts"],"sourcesContent":["/**\n * Returns current active element, including shadow dom\n *\n * @return element or null\n */\nexport function tuiGetNativeFocused(documentRef: Document): Element | null {\n if (!documentRef.activeElement?.shadowRoot) {\n return documentRef.activeElement;\n }\n\n let element = documentRef.activeElement.shadowRoot.activeElement;\n\n while (element?.shadowRoot) {\n element = element.shadowRoot.activeElement;\n }\n\n return element;\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Finds and blurs current active element, including shadow DOM\n */\nexport function tuiBlurNativeFocused(documentRef: Document): void {\n const activeElement = tuiGetNativeFocused(documentRef);\n\n if (tuiIsHTMLElement(activeElement)) {\n activeElement.blur();\n }\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\n/**\n * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to\n * only target natural focus order. Not checking the possibility of an element to\n * be focused, for example element can have display: none applied to it or any other\n * circumstances could prevent actual focus.\n */\nexport function tuiIsNativeKeyboardFocusable(element: Element): boolean {\n if (element.hasAttribute(`disabled`) || element.getAttribute(`tabIndex`) === `-1`) {\n return false;\n }\n\n if (\n (tuiIsHTMLElement(element) && element.isContentEditable) ||\n element.getAttribute(`tabIndex`) === `0`\n ) {\n return true;\n }\n\n switch (element.tagName) {\n case `BUTTON`:\n case `SELECT`:\n case `TEXTAREA`:\n return true;\n case `VIDEO`:\n case `AUDIO`:\n return element.hasAttribute(`controls`);\n case `INPUT`:\n return element.getAttribute(`type`) !== `hidden`;\n case `A`:\n case `LINK`:\n return element.hasAttribute(`href`);\n default:\n return false;\n }\n}\n","import {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\n\nexport function tuiIsNativeMouseFocusable(element: Element): boolean {\n return (\n !element.hasAttribute(`disabled`) &&\n (element.getAttribute(`tabIndex`) === `-1` ||\n tuiIsNativeKeyboardFocusable(element))\n );\n}\n","import {svgNodeFilter} from '@taiga-ui/cdk/constants';\nimport {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiIsNativeKeyboardFocusable} from './is-native-keyboard-focusable';\nimport {tuiIsNativeMouseFocusable} from './is-native-mouse-focusable';\n\nexport interface TuiGetClosestFocusableOptions {\n /**\n * @description:\n * current HTML element\n */\n initial: Element;\n\n /**\n * @description:\n * top Node limiting the search area\n */\n root: Node;\n\n /**\n * @description:\n * should it look backwards instead (find item that will be focused with Shift + Tab)\n */\n previous?: boolean;\n\n /**\n * @description:\n * determine if only keyboard focus is of interest\n */\n keyboard?: boolean;\n}\n\n/**\n * @description:\n * Finds the closest element that can be focused with a keyboard or mouse in theory\n */\nexport function tuiGetClosestFocusable({\n initial,\n root,\n previous = false,\n keyboard = true,\n}: TuiGetClosestFocusableOptions): HTMLElement | null {\n if (!root.ownerDocument) {\n return null;\n }\n\n const check = keyboard ? tuiIsNativeKeyboardFocusable : tuiIsNativeMouseFocusable;\n const treeWalker = root.ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n svgNodeFilter,\n );\n\n treeWalker.currentNode = initial;\n\n while (previous ? treeWalker.previousNode() : treeWalker.nextNode()) {\n if (tuiIsHTMLElement(treeWalker.currentNode)) {\n initial = treeWalker.currentNode;\n }\n\n if (tuiIsHTMLElement(initial) && check(initial)) {\n return initial;\n }\n }\n\n return null;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if element is focused.\n *\n * Could return true even after blur since element remains focused if you switch away from a browser tab.\n *\n * @param node or null (as a common return value of DOM nodes walking)\n * @return true if focused\n */\nexport function tuiIsNativeFocused(node: Node | null): boolean {\n return !!node?.ownerDocument && tuiGetNativeFocused(node.ownerDocument) === node;\n}\n","import {tuiGetNativeFocused} from './get-native-focused';\n\n/**\n * Checks if focused element is within given element.\n *\n * @param node\n * @return true if focused node is contained within element\n */\nexport function tuiIsNativeFocusedIn(node: Node): boolean {\n // !node.contains - check for IE11\n if (!node.ownerDocument || !node.contains) {\n return false;\n }\n\n const nativeFocused = tuiGetNativeFocused(node.ownerDocument);\n\n return nativeFocused !== null && node.contains(nativeFocused);\n}\n","import {tuiIsNativeFocused} from './is-native-focused';\n\n/**\n * Utility method for moving focus in a list of elements\n *\n * @param currentIndex currently focused index\n * @param elements array of focusable elements\n * @param step a step to move focus by, typically -1 or 1\n */\nexport function tuiMoveFocus(\n currentIndex: number,\n elements: readonly HTMLElement[],\n step: number,\n): void {\n currentIndex += step;\n\n while (currentIndex >= 0 && currentIndex < elements.length) {\n elements[currentIndex].focus();\n\n if (tuiIsNativeFocused(elements[currentIndex])) {\n return;\n }\n\n currentIndex += step;\n }\n}\n","/**\n * Focuses or blurs element with mouse action imitation (to spoof {@link TuiFocusVisibleService})\n *\n * @param element\n * @param focused desired focused state\n * @param preventScroll optionally prevent native browser scroll after focus\n */\nexport function tuiSetNativeMouseFocused(\n element: HTMLOrSVGElement & Element,\n focused: boolean = true,\n preventScroll: boolean = false,\n): void {\n if (!element.ownerDocument) {\n return;\n }\n\n if (typeof Event === `function`) {\n element.dispatchEvent(new Event(`mousedown`, {bubbles: true, cancelable: true}));\n } else {\n const event = element.ownerDocument.createEvent(`Event`);\n\n event.initEvent(`mousedown`, true, true);\n element.dispatchEvent(event);\n }\n\n if (focused) {\n element.focus({preventScroll});\n } else {\n element.blur();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tuiIsHTMLElement","svgNodeFilter"],"mappings":"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"}