@refinitiv-ui/elements 5.3.3 → 5.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (617) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/lib/accordion/custom-elements.json +49 -0
  3. package/lib/accordion/custom-elements.md +18 -0
  4. package/lib/accordion/index.d.ts +76 -0
  5. package/lib/accordion/index.js +136 -0
  6. package/lib/accordion/themes/halo/dark/index.js +3 -0
  7. package/lib/accordion/themes/halo/light/index.js +3 -0
  8. package/lib/accordion/themes/solar/charcoal/index.js +3 -0
  9. package/lib/accordion/themes/solar/pearl/index.js +3 -0
  10. package/lib/appstate-bar/custom-elements.json +49 -0
  11. package/lib/appstate-bar/custom-elements.md +22 -0
  12. package/lib/appstate-bar/index.d.ts +65 -0
  13. package/lib/appstate-bar/index.js +100 -0
  14. package/lib/appstate-bar/themes/halo/dark/index.js +3 -0
  15. package/lib/appstate-bar/themes/halo/light/index.js +3 -0
  16. package/lib/appstate-bar/themes/solar/charcoal/index.js +3 -0
  17. package/lib/appstate-bar/themes/solar/pearl/index.js +3 -0
  18. package/lib/autosuggest/custom-elements.json +233 -0
  19. package/lib/autosuggest/custom-elements.md +47 -0
  20. package/lib/autosuggest/helpers/types.d.ts +54 -0
  21. package/lib/autosuggest/helpers/types.js +1 -0
  22. package/lib/autosuggest/helpers/utils.d.ts +39 -0
  23. package/lib/autosuggest/helpers/utils.js +75 -0
  24. package/lib/autosuggest/index.d.ts +534 -0
  25. package/lib/autosuggest/index.js +1251 -0
  26. package/lib/autosuggest/themes/halo/dark/index.js +5 -0
  27. package/lib/autosuggest/themes/halo/light/index.js +5 -0
  28. package/lib/autosuggest/themes/solar/charcoal/index.js +5 -0
  29. package/lib/autosuggest/themes/solar/pearl/index.js +5 -0
  30. package/lib/button/custom-elements.json +119 -0
  31. package/lib/button/custom-elements.md +23 -0
  32. package/lib/button/index.d.ts +132 -0
  33. package/lib/button/index.js +223 -0
  34. package/lib/button/themes/halo/dark/index.js +3 -0
  35. package/lib/button/themes/halo/light/index.js +3 -0
  36. package/lib/button/themes/solar/charcoal/index.js +3 -0
  37. package/lib/button/themes/solar/pearl/index.js +3 -0
  38. package/lib/button-bar/custom-elements.json +26 -0
  39. package/lib/button-bar/custom-elements.md +9 -0
  40. package/lib/button-bar/index.d.ts +76 -0
  41. package/lib/button-bar/index.js +155 -0
  42. package/lib/button-bar/themes/halo/dark/index.js +3 -0
  43. package/lib/button-bar/themes/halo/light/index.js +3 -0
  44. package/lib/button-bar/themes/solar/charcoal/index.js +3 -0
  45. package/lib/button-bar/themes/solar/pearl/index.js +3 -0
  46. package/lib/calendar/constants.d.ts +22 -0
  47. package/lib/calendar/constants.js +23 -0
  48. package/lib/calendar/custom-elements.json +199 -0
  49. package/lib/calendar/custom-elements.md +35 -0
  50. package/lib/calendar/index.d.ts +321 -0
  51. package/lib/calendar/index.js +906 -0
  52. package/lib/calendar/locales.d.ts +1 -0
  53. package/lib/calendar/locales.js +40 -0
  54. package/lib/calendar/themes/halo/dark/index.js +3 -0
  55. package/lib/calendar/themes/halo/light/index.js +3 -0
  56. package/lib/calendar/themes/solar/charcoal/index.js +3 -0
  57. package/lib/calendar/themes/solar/pearl/index.js +3 -0
  58. package/lib/calendar/types.d.ts +29 -0
  59. package/lib/calendar/types.js +1 -0
  60. package/lib/calendar/utils.d.ts +42 -0
  61. package/lib/calendar/utils.js +119 -0
  62. package/lib/canvas/custom-elements.json +69 -0
  63. package/lib/canvas/custom-elements.md +27 -0
  64. package/lib/canvas/index.d.ts +100 -0
  65. package/lib/canvas/index.js +172 -0
  66. package/lib/canvas/themes/halo/dark/index.js +2 -0
  67. package/lib/canvas/themes/halo/light/index.js +2 -0
  68. package/lib/canvas/themes/solar/charcoal/index.js +2 -0
  69. package/lib/canvas/themes/solar/pearl/index.js +2 -0
  70. package/lib/card/custom-elements.json +59 -0
  71. package/lib/card/custom-elements.md +24 -0
  72. package/lib/card/helpers/types.d.ts +12 -0
  73. package/lib/card/helpers/types.js +1 -0
  74. package/lib/card/index.d.ts +140 -0
  75. package/lib/card/index.js +246 -0
  76. package/lib/card/themes/halo/dark/index.js +5 -0
  77. package/lib/card/themes/halo/light/index.js +5 -0
  78. package/lib/card/themes/solar/charcoal/index.js +5 -0
  79. package/lib/card/themes/solar/pearl/index.js +5 -0
  80. package/lib/chart/custom-elements.json +42 -0
  81. package/lib/chart/custom-elements.md +16 -0
  82. package/lib/chart/helpers/index.d.ts +2 -0
  83. package/lib/chart/helpers/index.js +2 -0
  84. package/lib/chart/helpers/legend.d.ts +5 -0
  85. package/lib/chart/helpers/legend.js +78 -0
  86. package/lib/chart/helpers/merge.d.ts +15 -0
  87. package/lib/chart/helpers/merge.js +28 -0
  88. package/lib/chart/helpers/types.d.ts +69 -0
  89. package/lib/chart/helpers/types.js +1 -0
  90. package/lib/chart/index.d.ts +187 -0
  91. package/lib/chart/index.js +491 -0
  92. package/lib/chart/plugins/doughnut-center-label.d.ts +3 -0
  93. package/lib/chart/plugins/doughnut-center-label.js +196 -0
  94. package/lib/chart/themes/halo/dark/index.js +4 -0
  95. package/lib/chart/themes/halo/light/index.js +4 -0
  96. package/lib/chart/themes/solar/charcoal/index.js +4 -0
  97. package/lib/chart/themes/solar/pearl/index.js +4 -0
  98. package/lib/checkbox/custom-elements.json +67 -0
  99. package/lib/checkbox/custom-elements.md +18 -0
  100. package/lib/checkbox/index.d.ts +95 -0
  101. package/lib/checkbox/index.js +193 -0
  102. package/lib/checkbox/themes/halo/dark/index.js +4 -0
  103. package/lib/checkbox/themes/halo/light/index.js +4 -0
  104. package/lib/checkbox/themes/solar/charcoal/index.js +4 -0
  105. package/lib/checkbox/themes/solar/pearl/index.js +4 -0
  106. package/lib/clock/custom-elements.json +121 -0
  107. package/lib/clock/custom-elements.md +28 -0
  108. package/lib/clock/index.d.ts +319 -0
  109. package/lib/clock/index.js +581 -0
  110. package/lib/clock/themes/halo/dark/index.js +2 -0
  111. package/lib/clock/themes/halo/light/index.js +2 -0
  112. package/lib/clock/themes/solar/charcoal/index.js +2 -0
  113. package/lib/clock/themes/solar/pearl/index.js +2 -0
  114. package/lib/clock/utils/TickManager.d.ts +14 -0
  115. package/lib/clock/utils/TickManager.js +66 -0
  116. package/lib/clock/utils/timestamps.d.ts +6 -0
  117. package/lib/clock/utils/timestamps.js +6 -0
  118. package/lib/collapse/custom-elements.json +79 -0
  119. package/lib/collapse/custom-elements.md +27 -0
  120. package/lib/collapse/index.d.ts +119 -0
  121. package/lib/collapse/index.js +197 -0
  122. package/lib/collapse/themes/halo/dark/index.js +5 -0
  123. package/lib/collapse/themes/halo/light/index.js +5 -0
  124. package/lib/collapse/themes/solar/charcoal/index.js +5 -0
  125. package/lib/collapse/themes/solar/pearl/index.js +5 -0
  126. package/lib/color-dialog/custom-elements.json +193 -0
  127. package/lib/color-dialog/custom-elements.md +39 -0
  128. package/lib/color-dialog/elements/color-palettes.d.ts +52 -0
  129. package/lib/color-dialog/elements/color-palettes.js +101 -0
  130. package/lib/color-dialog/elements/grayscale-palettes.d.ts +67 -0
  131. package/lib/color-dialog/elements/grayscale-palettes.js +161 -0
  132. package/lib/color-dialog/elements/palettes.d.ts +65 -0
  133. package/lib/color-dialog/elements/palettes.js +132 -0
  134. package/lib/color-dialog/helpers/color-helpers.d.ts +16 -0
  135. package/lib/color-dialog/helpers/color-helpers.js +161 -0
  136. package/lib/color-dialog/helpers/value-model.d.ts +75 -0
  137. package/lib/color-dialog/helpers/value-model.js +141 -0
  138. package/lib/color-dialog/index.d.ts +232 -0
  139. package/lib/color-dialog/index.js +459 -0
  140. package/lib/color-dialog/themes/halo/dark/index.js +7 -0
  141. package/lib/color-dialog/themes/halo/light/index.js +7 -0
  142. package/lib/color-dialog/themes/solar/charcoal/index.js +7 -0
  143. package/lib/color-dialog/themes/solar/pearl/index.js +7 -0
  144. package/lib/combo-box/custom-elements.json +210 -0
  145. package/lib/combo-box/custom-elements.md +35 -0
  146. package/lib/combo-box/helpers/filter.d.ts +10 -0
  147. package/lib/combo-box/helpers/filter.js +29 -0
  148. package/lib/combo-box/helpers/keyboard-event.d.ts +17 -0
  149. package/lib/combo-box/helpers/keyboard-event.js +19 -0
  150. package/lib/combo-box/helpers/types.d.ts +11 -0
  151. package/lib/combo-box/helpers/types.js +1 -0
  152. package/lib/combo-box/index.d.ts +523 -0
  153. package/lib/combo-box/index.js +1146 -0
  154. package/lib/combo-box/themes/halo/dark/index.js +8 -0
  155. package/lib/combo-box/themes/halo/light/index.js +8 -0
  156. package/lib/combo-box/themes/solar/charcoal/index.js +8 -0
  157. package/lib/combo-box/themes/solar/pearl/index.js +8 -0
  158. package/lib/counter/custom-elements.json +35 -0
  159. package/lib/counter/custom-elements.md +11 -0
  160. package/lib/counter/index.d.ts +89 -0
  161. package/lib/counter/index.js +152 -0
  162. package/lib/counter/themes/halo/dark/index.js +3 -0
  163. package/lib/counter/themes/halo/light/index.js +3 -0
  164. package/lib/counter/themes/solar/charcoal/index.js +3 -0
  165. package/lib/counter/themes/solar/pearl/index.js +3 -0
  166. package/lib/counter/utils.d.ts +13 -0
  167. package/lib/counter/utils.js +52 -0
  168. package/lib/datetime-picker/custom-elements.json +333 -0
  169. package/lib/datetime-picker/custom-elements.md +49 -0
  170. package/lib/datetime-picker/index.d.ts +498 -0
  171. package/lib/datetime-picker/index.js +1164 -0
  172. package/lib/datetime-picker/locales.d.ts +8 -0
  173. package/lib/datetime-picker/locales.js +57 -0
  174. package/lib/datetime-picker/themes/halo/dark/index.js +7 -0
  175. package/lib/datetime-picker/themes/halo/light/index.js +7 -0
  176. package/lib/datetime-picker/themes/solar/charcoal/index.js +7 -0
  177. package/lib/datetime-picker/themes/solar/pearl/index.js +7 -0
  178. package/lib/datetime-picker/types.d.ts +3 -0
  179. package/lib/datetime-picker/types.js +1 -0
  180. package/lib/datetime-picker/utils.d.ts +55 -0
  181. package/lib/datetime-picker/utils.js +92 -0
  182. package/lib/dialog/custom-elements.json +136 -0
  183. package/lib/dialog/custom-elements.md +47 -0
  184. package/lib/dialog/draggable-element.d.ts +14 -0
  185. package/lib/dialog/draggable-element.js +221 -0
  186. package/lib/dialog/index.d.ts +199 -0
  187. package/lib/dialog/index.js +331 -0
  188. package/lib/dialog/themes/halo/dark/index.js +7 -0
  189. package/lib/dialog/themes/halo/light/index.js +7 -0
  190. package/lib/dialog/themes/solar/charcoal/index.js +7 -0
  191. package/lib/dialog/themes/solar/pearl/index.js +7 -0
  192. package/lib/email-field/custom-elements.json +199 -0
  193. package/lib/email-field/custom-elements.md +35 -0
  194. package/lib/email-field/index.d.ts +152 -0
  195. package/lib/email-field/index.js +286 -0
  196. package/lib/email-field/themes/halo/dark/index.js +3 -0
  197. package/lib/email-field/themes/halo/light/index.js +3 -0
  198. package/lib/email-field/themes/solar/charcoal/index.js +3 -0
  199. package/lib/email-field/themes/solar/pearl/index.js +3 -0
  200. package/lib/events.d.ts +121 -0
  201. package/lib/events.js +1 -0
  202. package/lib/flag/custom-elements.json +35 -0
  203. package/lib/flag/custom-elements.md +10 -0
  204. package/lib/flag/index.d.ts +94 -0
  205. package/lib/flag/index.js +166 -0
  206. package/lib/flag/themes/halo/dark/index.js +2 -0
  207. package/lib/flag/themes/halo/light/index.js +2 -0
  208. package/lib/flag/themes/solar/charcoal/index.js +2 -0
  209. package/lib/flag/themes/solar/pearl/index.js +2 -0
  210. package/lib/flag/utils/FlagLoader.d.ts +47 -0
  211. package/lib/flag/utils/FlagLoader.js +86 -0
  212. package/lib/header/custom-elements.json +36 -0
  213. package/lib/header/custom-elements.md +18 -0
  214. package/lib/header/index.d.ts +46 -0
  215. package/lib/header/index.js +73 -0
  216. package/lib/header/themes/halo/dark/index.js +2 -0
  217. package/lib/header/themes/halo/light/index.js +2 -0
  218. package/lib/header/themes/solar/charcoal/index.js +2 -0
  219. package/lib/header/themes/solar/pearl/index.js +2 -0
  220. package/lib/heatmap/custom-elements.json +151 -0
  221. package/lib/heatmap/custom-elements.md +26 -0
  222. package/lib/heatmap/helpers/color.d.ts +30 -0
  223. package/lib/heatmap/helpers/color.js +68 -0
  224. package/lib/heatmap/helpers/text.d.ts +26 -0
  225. package/lib/heatmap/helpers/text.js +91 -0
  226. package/lib/heatmap/helpers/track.d.ts +102 -0
  227. package/lib/heatmap/helpers/track.js +160 -0
  228. package/lib/heatmap/helpers/types.d.ts +40 -0
  229. package/lib/heatmap/helpers/types.js +1 -0
  230. package/lib/heatmap/index.d.ts +453 -0
  231. package/lib/heatmap/index.js +1103 -0
  232. package/lib/heatmap/themes/halo/dark/index.js +4 -0
  233. package/lib/heatmap/themes/halo/light/index.js +4 -0
  234. package/lib/heatmap/themes/solar/charcoal/index.js +4 -0
  235. package/lib/heatmap/themes/solar/pearl/index.js +4 -0
  236. package/lib/icon/custom-elements.json +36 -0
  237. package/lib/icon/custom-elements.md +8 -0
  238. package/lib/icon/index.d.ts +88 -0
  239. package/lib/icon/index.js +169 -0
  240. package/lib/icon/themes/halo/dark/index.js +2 -0
  241. package/lib/icon/themes/halo/light/index.js +2 -0
  242. package/lib/icon/themes/solar/charcoal/index.js +2 -0
  243. package/lib/icon/themes/solar/pearl/index.js +2 -0
  244. package/lib/icon/utils/IconLoader.d.ts +52 -0
  245. package/lib/icon/utils/IconLoader.js +93 -0
  246. package/lib/index.d.ts +3 -0
  247. package/lib/index.js +3 -0
  248. package/lib/interactive-chart/custom-elements.json +86 -0
  249. package/lib/interactive-chart/custom-elements.md +32 -0
  250. package/lib/interactive-chart/helpers/merge.d.ts +15 -0
  251. package/lib/interactive-chart/helpers/merge.js +28 -0
  252. package/lib/interactive-chart/helpers/types.d.ts +45 -0
  253. package/lib/interactive-chart/helpers/types.js +6 -0
  254. package/lib/interactive-chart/index.d.ts +380 -0
  255. package/lib/interactive-chart/index.js +1090 -0
  256. package/lib/interactive-chart/themes/halo/dark/index.js +3 -0
  257. package/lib/interactive-chart/themes/halo/light/index.js +3 -0
  258. package/lib/interactive-chart/themes/solar/charcoal/index.js +3 -0
  259. package/lib/interactive-chart/themes/solar/pearl/index.js +3 -0
  260. package/lib/item/custom-elements.json +151 -0
  261. package/lib/item/custom-elements.md +29 -0
  262. package/lib/item/helpers/types.d.ts +57 -0
  263. package/lib/item/helpers/types.js +1 -0
  264. package/lib/item/index.d.ts +158 -0
  265. package/lib/item/index.js +271 -0
  266. package/lib/item/themes/halo/dark/index.js +4 -0
  267. package/lib/item/themes/halo/light/index.js +4 -0
  268. package/lib/item/themes/solar/charcoal/index.js +4 -0
  269. package/lib/item/themes/solar/pearl/index.js +4 -0
  270. package/lib/jsx.d.ts +223 -0
  271. package/lib/label/custom-elements.json +52 -0
  272. package/lib/label/custom-elements.md +11 -0
  273. package/lib/label/index.d.ts +102 -0
  274. package/lib/label/index.js +244 -0
  275. package/lib/label/themes/halo/dark/index.js +3 -0
  276. package/lib/label/themes/halo/light/index.js +3 -0
  277. package/lib/label/themes/solar/charcoal/index.js +3 -0
  278. package/lib/label/themes/solar/pearl/index.js +3 -0
  279. package/lib/layout/custom-elements.json +163 -0
  280. package/lib/layout/custom-elements.md +26 -0
  281. package/lib/layout/index.d.ts +107 -0
  282. package/lib/layout/index.js +212 -0
  283. package/lib/layout/themes/halo/dark/index.js +2 -0
  284. package/lib/layout/themes/halo/light/index.js +2 -0
  285. package/lib/layout/themes/solar/charcoal/index.js +2 -0
  286. package/lib/layout/themes/solar/pearl/index.js +2 -0
  287. package/lib/led-gauge/custom-elements.json +113 -0
  288. package/lib/led-gauge/custom-elements.md +17 -0
  289. package/lib/led-gauge/index.d.ts +143 -0
  290. package/lib/led-gauge/index.js +437 -0
  291. package/lib/led-gauge/themes/halo/dark/index.js +3 -0
  292. package/lib/led-gauge/themes/halo/light/index.js +3 -0
  293. package/lib/led-gauge/themes/solar/charcoal/index.js +3 -0
  294. package/lib/led-gauge/themes/solar/pearl/index.js +3 -0
  295. package/lib/list/custom-elements.json +111 -0
  296. package/lib/list/custom-elements.md +30 -0
  297. package/lib/list/extensible-function.d.ts +8 -0
  298. package/lib/list/extensible-function.js +13 -0
  299. package/lib/list/helpers/list-renderer.d.ts +9 -0
  300. package/lib/list/helpers/list-renderer.js +35 -0
  301. package/lib/list/helpers/types.d.ts +3 -0
  302. package/lib/list/helpers/types.js +1 -0
  303. package/lib/list/index.d.ts +292 -0
  304. package/lib/list/index.js +600 -0
  305. package/lib/list/renderer.d.ts +36 -0
  306. package/lib/list/renderer.js +9 -0
  307. package/lib/list/themes/halo/dark/index.js +3 -0
  308. package/lib/list/themes/halo/light/index.js +3 -0
  309. package/lib/list/themes/solar/charcoal/index.js +3 -0
  310. package/lib/list/themes/solar/pearl/index.js +3 -0
  311. package/lib/loader/custom-elements.json +9 -0
  312. package/lib/loader/custom-elements.md +5 -0
  313. package/lib/loader/index.d.ts +41 -0
  314. package/lib/loader/index.js +61 -0
  315. package/lib/loader/themes/halo/dark/index.js +2 -0
  316. package/lib/loader/themes/halo/light/index.js +2 -0
  317. package/lib/loader/themes/solar/charcoal/index.js +2 -0
  318. package/lib/loader/themes/solar/pearl/index.js +2 -0
  319. package/lib/multi-input/custom-elements.json +238 -0
  320. package/lib/multi-input/custom-elements.md +43 -0
  321. package/lib/multi-input/helpers/types.d.ts +11 -0
  322. package/lib/multi-input/helpers/types.js +1 -0
  323. package/lib/multi-input/index.d.ts +297 -0
  324. package/lib/multi-input/index.js +590 -0
  325. package/lib/multi-input/themes/halo/dark/index.js +4 -0
  326. package/lib/multi-input/themes/halo/light/index.js +4 -0
  327. package/lib/multi-input/themes/solar/charcoal/index.js +4 -0
  328. package/lib/multi-input/themes/solar/pearl/index.js +4 -0
  329. package/lib/notification/custom-elements.json +95 -0
  330. package/lib/notification/custom-elements.md +26 -0
  331. package/lib/notification/elements/notification-tray.d.ts +97 -0
  332. package/lib/notification/elements/notification-tray.js +167 -0
  333. package/lib/notification/elements/notification.d.ts +90 -0
  334. package/lib/notification/elements/notification.js +154 -0
  335. package/lib/notification/helpers/status.d.ts +30 -0
  336. package/lib/notification/helpers/status.js +130 -0
  337. package/lib/notification/helpers/types.d.ts +10 -0
  338. package/lib/notification/helpers/types.js +1 -0
  339. package/lib/notification/index.d.ts +2 -0
  340. package/lib/notification/index.js +2 -0
  341. package/lib/notification/themes/halo/dark/index.js +5 -0
  342. package/lib/notification/themes/halo/light/index.js +5 -0
  343. package/lib/notification/themes/solar/charcoal/index.js +5 -0
  344. package/lib/notification/themes/solar/pearl/index.js +5 -0
  345. package/lib/number-field/custom-elements.json +200 -0
  346. package/lib/number-field/custom-elements.md +37 -0
  347. package/lib/number-field/index.d.ts +294 -0
  348. package/lib/number-field/index.js +707 -0
  349. package/lib/number-field/themes/halo/dark/index.js +3 -0
  350. package/lib/number-field/themes/halo/light/index.js +3 -0
  351. package/lib/number-field/themes/solar/charcoal/index.js +3 -0
  352. package/lib/number-field/themes/solar/pearl/index.js +3 -0
  353. package/lib/overlay/custom-elements.json +345 -0
  354. package/lib/overlay/custom-elements.md +54 -0
  355. package/lib/overlay/elements/overlay-backdrop.d.ts +46 -0
  356. package/lib/overlay/elements/overlay-backdrop.js +64 -0
  357. package/lib/overlay/elements/overlay-viewport.d.ts +40 -0
  358. package/lib/overlay/elements/overlay-viewport.js +52 -0
  359. package/lib/overlay/elements/overlay.d.ts +403 -0
  360. package/lib/overlay/elements/overlay.js +1426 -0
  361. package/lib/overlay/helpers/functions.d.ts +13 -0
  362. package/lib/overlay/helpers/functions.js +16 -0
  363. package/lib/overlay/helpers/types.d.ts +97 -0
  364. package/lib/overlay/helpers/types.js +16 -0
  365. package/lib/overlay/index.d.ts +2 -0
  366. package/lib/overlay/index.js +1 -0
  367. package/lib/overlay/managers/backdrop-manager.d.ts +45 -0
  368. package/lib/overlay/managers/backdrop-manager.js +96 -0
  369. package/lib/overlay/managers/close-manager.d.ts +54 -0
  370. package/lib/overlay/managers/close-manager.js +138 -0
  371. package/lib/overlay/managers/focus-manager.d.ts +71 -0
  372. package/lib/overlay/managers/focus-manager.js +228 -0
  373. package/lib/overlay/managers/interaction-lock-manager.d.ts +138 -0
  374. package/lib/overlay/managers/interaction-lock-manager.js +375 -0
  375. package/lib/overlay/managers/viewport-manager.d.ts +93 -0
  376. package/lib/overlay/managers/viewport-manager.js +211 -0
  377. package/lib/overlay/managers/zindex-manager.d.ts +80 -0
  378. package/lib/overlay/managers/zindex-manager.js +195 -0
  379. package/lib/overlay/themes/halo/dark/index.js +4 -0
  380. package/lib/overlay/themes/halo/light/index.js +4 -0
  381. package/lib/overlay/themes/solar/charcoal/index.js +4 -0
  382. package/lib/overlay/themes/solar/pearl/index.js +4 -0
  383. package/lib/overlay-menu/custom-elements.json +194 -0
  384. package/lib/overlay-menu/custom-elements.md +44 -0
  385. package/lib/overlay-menu/helpers/types.d.ts +8 -0
  386. package/lib/overlay-menu/helpers/types.js +1 -0
  387. package/lib/overlay-menu/index.d.ts +385 -0
  388. package/lib/overlay-menu/index.js +933 -0
  389. package/lib/overlay-menu/managers/menu-manager.d.ts +98 -0
  390. package/lib/overlay-menu/managers/menu-manager.js +240 -0
  391. package/lib/overlay-menu/themes/halo/dark/index.js +5 -0
  392. package/lib/overlay-menu/themes/halo/light/index.js +5 -0
  393. package/lib/overlay-menu/themes/solar/charcoal/index.js +5 -0
  394. package/lib/overlay-menu/themes/solar/pearl/index.js +5 -0
  395. package/lib/pagination/custom-elements.json +93 -0
  396. package/lib/pagination/custom-elements.md +27 -0
  397. package/lib/pagination/helpers/types.d.ts +9 -0
  398. package/lib/pagination/helpers/types.js +1 -0
  399. package/lib/pagination/index.d.ts +207 -0
  400. package/lib/pagination/index.js +398 -0
  401. package/lib/pagination/themes/halo/dark/index.js +6 -0
  402. package/lib/pagination/themes/halo/light/index.js +6 -0
  403. package/lib/pagination/themes/solar/charcoal/index.js +6 -0
  404. package/lib/pagination/themes/solar/pearl/index.js +6 -0
  405. package/lib/panel/custom-elements.json +39 -0
  406. package/lib/panel/custom-elements.md +11 -0
  407. package/lib/panel/index.d.ts +48 -0
  408. package/lib/panel/index.js +74 -0
  409. package/lib/panel/themes/halo/dark/index.js +2 -0
  410. package/lib/panel/themes/halo/light/index.js +2 -0
  411. package/lib/panel/themes/solar/charcoal/index.js +2 -0
  412. package/lib/panel/themes/solar/pearl/index.js +2 -0
  413. package/lib/password-field/custom-elements.json +156 -0
  414. package/lib/password-field/custom-elements.md +31 -0
  415. package/lib/password-field/index.d.ts +141 -0
  416. package/lib/password-field/index.js +258 -0
  417. package/lib/password-field/themes/halo/dark/index.js +3 -0
  418. package/lib/password-field/themes/halo/light/index.js +3 -0
  419. package/lib/password-field/themes/solar/charcoal/index.js +3 -0
  420. package/lib/password-field/themes/solar/pearl/index.js +3 -0
  421. package/lib/pill/custom-elements.json +95 -0
  422. package/lib/pill/custom-elements.md +22 -0
  423. package/lib/pill/index.d.ts +97 -0
  424. package/lib/pill/index.js +160 -0
  425. package/lib/pill/themes/halo/dark/index.js +3 -0
  426. package/lib/pill/themes/halo/light/index.js +3 -0
  427. package/lib/pill/themes/solar/charcoal/index.js +3 -0
  428. package/lib/pill/themes/solar/pearl/index.js +3 -0
  429. package/lib/progress-bar/custom-elements.json +58 -0
  430. package/lib/progress-bar/custom-elements.md +18 -0
  431. package/lib/progress-bar/index.d.ts +82 -0
  432. package/lib/progress-bar/index.js +157 -0
  433. package/lib/progress-bar/themes/halo/dark/index.js +2 -0
  434. package/lib/progress-bar/themes/halo/light/index.js +2 -0
  435. package/lib/progress-bar/themes/solar/charcoal/index.js +2 -0
  436. package/lib/progress-bar/themes/solar/pearl/index.js +2 -0
  437. package/lib/radio-button/custom-elements.json +82 -0
  438. package/lib/radio-button/custom-elements.md +19 -0
  439. package/lib/radio-button/index.d.ts +122 -0
  440. package/lib/radio-button/index.js +257 -0
  441. package/lib/radio-button/radio-button-registry.d.ts +22 -0
  442. package/lib/radio-button/radio-button-registry.js +93 -0
  443. package/lib/radio-button/themes/halo/dark/index.js +3 -0
  444. package/lib/radio-button/themes/halo/light/index.js +3 -0
  445. package/lib/radio-button/themes/solar/charcoal/index.js +3 -0
  446. package/lib/radio-button/themes/solar/pearl/index.js +3 -0
  447. package/lib/rating/custom-elements.json +58 -0
  448. package/lib/rating/custom-elements.md +17 -0
  449. package/lib/rating/index.d.ts +91 -0
  450. package/lib/rating/index.js +157 -0
  451. package/lib/rating/themes/halo/dark/index.js +2 -0
  452. package/lib/rating/themes/halo/light/index.js +2 -0
  453. package/lib/rating/themes/solar/charcoal/index.js +2 -0
  454. package/lib/rating/themes/solar/pearl/index.js +2 -0
  455. package/lib/search-field/custom-elements.json +173 -0
  456. package/lib/search-field/custom-elements.md +33 -0
  457. package/lib/search-field/index.d.ts +134 -0
  458. package/lib/search-field/index.js +253 -0
  459. package/lib/search-field/themes/halo/dark/index.js +3 -0
  460. package/lib/search-field/themes/halo/light/index.js +3 -0
  461. package/lib/search-field/themes/solar/charcoal/index.js +3 -0
  462. package/lib/search-field/themes/solar/pearl/index.js +3 -0
  463. package/lib/select/custom-elements.json +103 -0
  464. package/lib/select/custom-elements.md +24 -0
  465. package/lib/select/helpers/types.d.ts +3 -0
  466. package/lib/select/helpers/types.js +1 -0
  467. package/lib/select/index.d.ts +388 -0
  468. package/lib/select/index.js +942 -0
  469. package/lib/select/themes/halo/dark/index.js +5 -0
  470. package/lib/select/themes/halo/light/index.js +5 -0
  471. package/lib/select/themes/solar/charcoal/index.js +5 -0
  472. package/lib/select/themes/solar/pearl/index.js +5 -0
  473. package/lib/sidebar-layout/custom-elements.json +72 -0
  474. package/lib/sidebar-layout/custom-elements.md +22 -0
  475. package/lib/sidebar-layout/index.d.ts +69 -0
  476. package/lib/sidebar-layout/index.js +134 -0
  477. package/lib/sidebar-layout/themes/halo/dark/index.js +3 -0
  478. package/lib/sidebar-layout/themes/halo/light/index.js +3 -0
  479. package/lib/sidebar-layout/themes/solar/charcoal/index.js +3 -0
  480. package/lib/sidebar-layout/themes/solar/pearl/index.js +3 -0
  481. package/lib/slider/custom-elements.json +181 -0
  482. package/lib/slider/custom-elements.md +28 -0
  483. package/lib/slider/index.d.ts +409 -0
  484. package/lib/slider/index.js +1187 -0
  485. package/lib/slider/themes/halo/dark/index.js +3 -0
  486. package/lib/slider/themes/halo/light/index.js +3 -0
  487. package/lib/slider/themes/solar/charcoal/index.js +3 -0
  488. package/lib/slider/themes/solar/pearl/index.js +3 -0
  489. package/lib/sparkline/custom-elements.json +59 -0
  490. package/lib/sparkline/custom-elements.md +16 -0
  491. package/lib/sparkline/index.d.ts +107 -0
  492. package/lib/sparkline/index.js +186 -0
  493. package/lib/sparkline/themes/halo/dark/index.js +2 -0
  494. package/lib/sparkline/themes/halo/light/index.js +2 -0
  495. package/lib/sparkline/themes/solar/charcoal/index.js +2 -0
  496. package/lib/sparkline/themes/solar/pearl/index.js +2 -0
  497. package/lib/swing-gauge/const.d.ts +22 -0
  498. package/lib/swing-gauge/const.js +26 -0
  499. package/lib/swing-gauge/custom-elements.json +109 -0
  500. package/lib/swing-gauge/custom-elements.md +17 -0
  501. package/lib/swing-gauge/helpers.d.ts +8 -0
  502. package/lib/swing-gauge/helpers.js +105 -0
  503. package/lib/swing-gauge/index.d.ts +294 -0
  504. package/lib/swing-gauge/index.js +762 -0
  505. package/lib/swing-gauge/themes/halo/dark/index.js +3 -0
  506. package/lib/swing-gauge/themes/halo/light/index.js +3 -0
  507. package/lib/swing-gauge/themes/solar/charcoal/index.js +3 -0
  508. package/lib/swing-gauge/themes/solar/pearl/index.js +3 -0
  509. package/lib/swing-gauge/types.d.ts +34 -0
  510. package/lib/swing-gauge/types.js +1 -0
  511. package/lib/tab/custom-elements.json +123 -0
  512. package/lib/tab/custom-elements.md +22 -0
  513. package/lib/tab/index.d.ts +118 -0
  514. package/lib/tab/index.js +208 -0
  515. package/lib/tab/themes/halo/dark/index.js +4 -0
  516. package/lib/tab/themes/halo/light/index.js +4 -0
  517. package/lib/tab/themes/solar/charcoal/index.js +4 -0
  518. package/lib/tab/themes/solar/pearl/index.js +4 -0
  519. package/lib/tab-bar/custom-elements.json +52 -0
  520. package/lib/tab-bar/custom-elements.md +11 -0
  521. package/lib/tab-bar/helpers/animate.d.ts +16 -0
  522. package/lib/tab-bar/helpers/animate.js +53 -0
  523. package/lib/tab-bar/index.d.ts +108 -0
  524. package/lib/tab-bar/index.js +218 -0
  525. package/lib/tab-bar/themes/halo/dark/index.js +4 -0
  526. package/lib/tab-bar/themes/halo/light/index.js +4 -0
  527. package/lib/tab-bar/themes/solar/charcoal/index.js +4 -0
  528. package/lib/tab-bar/themes/solar/pearl/index.js +4 -0
  529. package/lib/text-field/custom-elements.json +210 -0
  530. package/lib/text-field/custom-elements.md +37 -0
  531. package/lib/text-field/index.d.ts +193 -0
  532. package/lib/text-field/index.js +409 -0
  533. package/lib/text-field/themes/halo/dark/index.js +3 -0
  534. package/lib/text-field/themes/halo/light/index.js +3 -0
  535. package/lib/text-field/themes/solar/charcoal/index.js +3 -0
  536. package/lib/text-field/themes/solar/pearl/index.js +3 -0
  537. package/lib/time-picker/custom-elements.json +124 -0
  538. package/lib/time-picker/custom-elements.md +28 -0
  539. package/lib/time-picker/index.d.ts +379 -0
  540. package/lib/time-picker/index.js +775 -0
  541. package/lib/time-picker/themes/halo/dark/index.js +4 -0
  542. package/lib/time-picker/themes/halo/light/index.js +4 -0
  543. package/lib/time-picker/themes/solar/charcoal/index.js +4 -0
  544. package/lib/time-picker/themes/solar/pearl/index.js +4 -0
  545. package/lib/toggle/custom-elements.json +82 -0
  546. package/lib/toggle/custom-elements.md +19 -0
  547. package/lib/toggle/index.d.ts +86 -0
  548. package/lib/toggle/index.js +152 -0
  549. package/lib/toggle/themes/halo/dark/index.js +2 -0
  550. package/lib/toggle/themes/halo/light/index.js +2 -0
  551. package/lib/toggle/themes/solar/charcoal/index.js +2 -0
  552. package/lib/toggle/themes/solar/pearl/index.js +2 -0
  553. package/lib/tooltip/custom-elements.json +62 -0
  554. package/lib/tooltip/custom-elements.md +14 -0
  555. package/lib/tooltip/elements/title-tooltip.d.ts +1 -0
  556. package/lib/tooltip/elements/title-tooltip.js +18 -0
  557. package/lib/tooltip/elements/tooltip-element.d.ts +21 -0
  558. package/lib/tooltip/elements/tooltip-element.js +54 -0
  559. package/lib/tooltip/helpers/overflow-tooltip.d.ts +9 -0
  560. package/lib/tooltip/helpers/overflow-tooltip.js +19 -0
  561. package/lib/tooltip/helpers/renderer.d.ts +8 -0
  562. package/lib/tooltip/helpers/renderer.js +11 -0
  563. package/lib/tooltip/helpers/types.d.ts +23 -0
  564. package/lib/tooltip/helpers/types.js +1 -0
  565. package/lib/tooltip/index.d.ts +232 -0
  566. package/lib/tooltip/index.js +477 -0
  567. package/lib/tooltip/managers/tooltip-manager.d.ts +15 -0
  568. package/lib/tooltip/managers/tooltip-manager.js +140 -0
  569. package/lib/tooltip/themes/halo/dark/index.js +3 -0
  570. package/lib/tooltip/themes/halo/light/index.js +3 -0
  571. package/lib/tooltip/themes/solar/charcoal/index.js +3 -0
  572. package/lib/tooltip/themes/solar/pearl/index.js +3 -0
  573. package/lib/tornado-chart/custom-elements.json +45 -0
  574. package/lib/tornado-chart/custom-elements.md +18 -0
  575. package/lib/tornado-chart/elements/tornado-chart.d.ts +78 -0
  576. package/lib/tornado-chart/elements/tornado-chart.js +122 -0
  577. package/lib/tornado-chart/elements/tornado-item.d.ts +110 -0
  578. package/lib/tornado-chart/elements/tornado-item.js +207 -0
  579. package/lib/tornado-chart/index.d.ts +2 -0
  580. package/lib/tornado-chart/index.js +2 -0
  581. package/lib/tornado-chart/themes/halo/dark/index.js +6 -0
  582. package/lib/tornado-chart/themes/halo/light/index.js +6 -0
  583. package/lib/tornado-chart/themes/solar/charcoal/index.js +6 -0
  584. package/lib/tornado-chart/themes/solar/pearl/index.js +6 -0
  585. package/lib/tree/custom-elements.json +113 -0
  586. package/lib/tree/custom-elements.md +32 -0
  587. package/lib/tree/elements/tree-item.d.ts +96 -0
  588. package/lib/tree/elements/tree-item.js +179 -0
  589. package/lib/tree/elements/tree.d.ts +201 -0
  590. package/lib/tree/elements/tree.js +412 -0
  591. package/lib/tree/helpers/filter.d.ts +8 -0
  592. package/lib/tree/helpers/filter.js +33 -0
  593. package/lib/tree/helpers/renderer.d.ts +5 -0
  594. package/lib/tree/helpers/renderer.js +33 -0
  595. package/lib/tree/helpers/types.d.ts +25 -0
  596. package/lib/tree/helpers/types.js +1 -0
  597. package/lib/tree/index.d.ts +4 -0
  598. package/lib/tree/index.js +3 -0
  599. package/lib/tree/managers/tree-manager.d.ts +248 -0
  600. package/lib/tree/managers/tree-manager.js +395 -0
  601. package/lib/tree/themes/halo/dark/index.js +7 -0
  602. package/lib/tree/themes/halo/light/index.js +7 -0
  603. package/lib/tree/themes/solar/charcoal/index.js +7 -0
  604. package/lib/tree/themes/solar/pearl/index.js +7 -0
  605. package/lib/tree-select/custom-elements.json +107 -0
  606. package/lib/tree-select/custom-elements.md +26 -0
  607. package/lib/tree-select/helpers/types.d.ts +4 -0
  608. package/lib/tree-select/helpers/types.js +1 -0
  609. package/lib/tree-select/index.d.ts +402 -0
  610. package/lib/tree-select/index.js +890 -0
  611. package/lib/tree-select/themes/halo/dark/index.js +12 -0
  612. package/lib/tree-select/themes/halo/light/index.js +12 -0
  613. package/lib/tree-select/themes/solar/charcoal/index.js +12 -0
  614. package/lib/tree-select/themes/solar/pearl/index.js +12 -0
  615. package/lib/version.d.ts +1 -0
  616. package/lib/version.js +1 -0
  617. package/package.json +298 -15
@@ -0,0 +1,375 @@
1
+ import { AnimationTaskRunner } from '@refinitiv-ui/utils/lib/async.js';
2
+ import { getOverlays } from './zindex-manager.js';
3
+ /**
4
+ * Check if two arrays are shallow equal
5
+ * @param left Left side array
6
+ * @param right Right side array
7
+ * @returns true if arrays are equal
8
+ */
9
+ const equal = (left, right) => {
10
+ const length = left.length;
11
+ if (length !== right.length) {
12
+ return false;
13
+ }
14
+ for (let i = 0; i < length; i += 1) {
15
+ if (left[i] !== right[i]) {
16
+ return false;
17
+ }
18
+ }
19
+ return true;
20
+ };
21
+ /**
22
+ * Scroll lock manager singleton is responsible for locking
23
+ * all scrollbars apart one in the active overlay
24
+ */
25
+ export class ScrollLockManager {
26
+ constructor() {
27
+ this.scrollTop = 0;
28
+ this.scrollLeft = 0;
29
+ this.lockScroll = false;
30
+ /**
31
+ * A list of elements that are currently interactive
32
+ * aka `pointer-events: auto` applied
33
+ */
34
+ this.interactiveElements = [];
35
+ this.pointerEventsMap = new Map();
36
+ this.scrollThrottler = new AnimationTaskRunner();
37
+ /**
38
+ * Run on scroll event. If onscroll happened as a result of user interaction, restore the original position
39
+ * @param event Scroll event
40
+ * @returns {void}
41
+ */
42
+ this.onScroll = (event) => {
43
+ const path = event.composedPath();
44
+ if (this.lockScroll && !path.includes(this.interactiveElement)) {
45
+ this.restoreScrollPosition();
46
+ }
47
+ };
48
+ /**
49
+ * Apply scroll lock as a result of user interaction
50
+ * @returns {void}
51
+ */
52
+ this.applyScrollLock = () => {
53
+ // this must be applied in order to make the difference between user scroll and system scroll
54
+ // otherwise there must not be scroll prevention on resize/orientationchange events
55
+ this.scrollThrottler.cancel();
56
+ this.lockScroll = true;
57
+ };
58
+ /**
59
+ * Remove scroll lock when user interaction has finished
60
+ * @returns {void}
61
+ */
62
+ this.removeScrollLock = () => {
63
+ this.scrollThrottler.schedule(() => {
64
+ this.lockScroll = false;
65
+ });
66
+ };
67
+ /**
68
+ * Run on wheel event
69
+ * If wheel happened as a result of user interaction, restore the original position
70
+ * @param event Wheel event
71
+ * @returns {void}
72
+ */
73
+ this.onWheelScroll = (event) => {
74
+ if (this.shouldCancelWheel(event)) {
75
+ event.preventDefault();
76
+ }
77
+ };
78
+ /**
79
+ * Run on touch events.
80
+ * If touch happened as a result of user interaction, restore the original position
81
+ * @param event Touch event
82
+ * @returns {void}
83
+ */
84
+ this.onTouchScroll = (event) => {
85
+ if (event.cancelable && this.shouldCancelTouch(event)) { /* Not all touch events can be cancelled */
86
+ event.preventDefault();
87
+ }
88
+ };
89
+ }
90
+ /**
91
+ * Get a collection of interactive elements
92
+ * @param overlay Overlay to check
93
+ * @returns interactive elements
94
+ */
95
+ static getInteractiveElements(overlay) {
96
+ if (!overlay) {
97
+ return [];
98
+ }
99
+ // overlay is always included
100
+ const interactiveElements = [overlay];
101
+ if (overlay.interactiveElements && overlay.interactiveElements.length) {
102
+ return interactiveElements.concat(overlay.interactiveElements);
103
+ }
104
+ if (!overlay.lockPositionTarget && overlay.positionTarget instanceof HTMLElement) {
105
+ interactiveElements.push(overlay.positionTarget);
106
+ }
107
+ return interactiveElements;
108
+ }
109
+ /**
110
+ * The list of active overlays, which participate
111
+ * in lock management
112
+ */
113
+ get overlays() {
114
+ return getOverlays().filter(overlay => !overlay.noInteractionLock);
115
+ }
116
+ /**
117
+ * Lock the screen and make top most overlay
118
+ * and its position target interactive
119
+ * @returns {void}
120
+ */
121
+ applyLock() {
122
+ const topOverlay = this.overlays[0];
123
+ const oldInteractiveElements = this.interactiveElements;
124
+ const newInteractiveElements = ScrollLockManager.getInteractiveElements(topOverlay);
125
+ // do nothing if the list is the same
126
+ if (equal(oldInteractiveElements, newInteractiveElements)) {
127
+ return;
128
+ }
129
+ if (!oldInteractiveElements.length && newInteractiveElements.length) {
130
+ // lock the screen
131
+ this.saveScrollPosition();
132
+ this.lockEvents();
133
+ this.applyLockBackdrop();
134
+ }
135
+ else if (oldInteractiveElements.length && !newInteractiveElements.length) {
136
+ // unlock the screen
137
+ this.unlockEvents();
138
+ this.removeLockBackdrop();
139
+ }
140
+ // restore overlay events to original value
141
+ for (let i = 0; i < oldInteractiveElements.length; i += 1) {
142
+ this.restorePointerEvents(oldInteractiveElements[i]);
143
+ }
144
+ // make overlay interactive by applying pointer-events: auto;
145
+ for (let i = 0; i < newInteractiveElements.length; i += 1) {
146
+ this.setPointerEvents(newInteractiveElements[i]);
147
+ }
148
+ this.interactiveElements = newInteractiveElements;
149
+ }
150
+ /**
151
+ * Set pointer events style tag
152
+ * @param el Element to unlock
153
+ * @param [value=auto] Value of pointer events
154
+ * @returns {void}
155
+ */
156
+ setPointerEvents(el, value = 'auto') {
157
+ if (el) {
158
+ this.pointerEventsMap.set(el, el.style.pointerEvents);
159
+ el.style.setProperty('pointer-events', value);
160
+ }
161
+ }
162
+ /**
163
+ * Restore pointer events style tag
164
+ * @param el Element to restore
165
+ * @returns {void}
166
+ */
167
+ restorePointerEvents(el) {
168
+ if (el) {
169
+ const pointerEvents = this.pointerEventsMap.get(el);
170
+ this.pointerEventsMap.delete(el);
171
+ if (pointerEvents) {
172
+ el.style.setProperty('pointer-events', pointerEvents);
173
+ }
174
+ else {
175
+ el.style.removeProperty('pointer-events');
176
+ }
177
+ }
178
+ }
179
+ /**
180
+ * Get the top most interactive element
181
+ * @returns element
182
+ */
183
+ get interactiveElement() {
184
+ return this.interactiveElements[this.interactiveElements.length - 1];
185
+ }
186
+ /**
187
+ * Memoize the scroll position of the outside scrolling element.
188
+ * @returns {void}
189
+ */
190
+ saveScrollPosition() {
191
+ if (document.scrollingElement) {
192
+ this.scrollTop = document.scrollingElement.scrollTop;
193
+ this.scrollLeft = document.scrollingElement.scrollLeft;
194
+ }
195
+ else {
196
+ // Since we don't know if is the body or html, get max.
197
+ this.scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
198
+ this.scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
199
+ }
200
+ }
201
+ /**
202
+ * Resets the scroll position of the outside scrolling element.
203
+ * @returns {void}
204
+ */
205
+ restoreScrollPosition() {
206
+ if (document.scrollingElement) {
207
+ document.scrollingElement.scrollTop = this.scrollTop;
208
+ document.scrollingElement.scrollLeft = this.scrollLeft;
209
+ }
210
+ else {
211
+ // Since we don't know if is the body or html, set both.
212
+ document.documentElement.scrollTop = document.body.scrollTop = this.scrollTop;
213
+ document.documentElement.scrollLeft = document.body.scrollLeft = this.scrollLeft;
214
+ }
215
+ }
216
+ /**
217
+ * Listen for scroll and wheel events, to apply the correct lock logic
218
+ * @returns {void}
219
+ */
220
+ lockEvents() {
221
+ const wheelEventConf = {
222
+ capture: true,
223
+ passive: false
224
+ };
225
+ document.addEventListener('wheel', this.onWheelScroll, wheelEventConf);
226
+ document.addEventListener('touchstart', this.onTouchScroll, wheelEventConf);
227
+ document.addEventListener('touchmove', this.onTouchScroll, wheelEventConf);
228
+ document.addEventListener('touchend', this.onTouchScroll, wheelEventConf);
229
+ const scrollEventConf = {
230
+ capture: true,
231
+ passive: true /* passive improves scrolling performance. See https://developers.google.com/web/tools/lighthouse/audits/passive-event-listeners how. This does not work in IE11 */
232
+ };
233
+ document.addEventListener('scroll', this.onScroll, scrollEventConf);
234
+ document.addEventListener('mousedown', this.applyScrollLock, scrollEventConf);
235
+ document.addEventListener('touchstart', this.applyScrollLock, scrollEventConf);
236
+ document.addEventListener('keydown', this.applyScrollLock, scrollEventConf);
237
+ document.addEventListener('mouseup', this.removeScrollLock, scrollEventConf);
238
+ document.addEventListener('touchend', this.removeScrollLock, scrollEventConf);
239
+ document.addEventListener('keyup', this.removeScrollLock, scrollEventConf);
240
+ }
241
+ /**
242
+ * Remove scroll and wheel listeners
243
+ * @returns {void}
244
+ */
245
+ unlockEvents() {
246
+ const wheelEventConf = {
247
+ capture: true,
248
+ passive: false
249
+ };
250
+ document.removeEventListener('wheel', this.onWheelScroll, wheelEventConf);
251
+ document.removeEventListener('touchstart', this.onTouchScroll, wheelEventConf);
252
+ document.removeEventListener('touchmove', this.onTouchScroll, wheelEventConf);
253
+ document.removeEventListener('touchend', this.onTouchScroll, wheelEventConf);
254
+ const scrollEventConf = {
255
+ capture: true,
256
+ passive: true
257
+ };
258
+ document.removeEventListener('scroll', this.onScroll, scrollEventConf);
259
+ document.removeEventListener('mousedown', this.applyScrollLock, scrollEventConf);
260
+ document.removeEventListener('touchstart', this.applyScrollLock, scrollEventConf);
261
+ document.removeEventListener('keydown', this.applyScrollLock, scrollEventConf);
262
+ document.removeEventListener('mouseup', this.removeScrollLock, scrollEventConf);
263
+ document.removeEventListener('touchend', this.removeScrollLock, scrollEventConf);
264
+ document.removeEventListener('keyup', this.removeScrollLock, scrollEventConf);
265
+ }
266
+ /**
267
+ * Add locking backdrop and prevent pointer events on document
268
+ * @returns {void}
269
+ */
270
+ applyLockBackdrop() {
271
+ this.setPointerEvents(document.documentElement, 'none'); /* prevent scrolling on all other scrollable elements */
272
+ }
273
+ /**
274
+ * Remove locking backdrop and prevent pointer events on document
275
+ * @returns {void}
276
+ */
277
+ removeLockBackdrop() {
278
+ this.restorePointerEvents(document.documentElement);
279
+ }
280
+ /**
281
+ * Check if wheel event should be cancelled
282
+ * @param event Touch event
283
+ * @return shouldCancelTouch True if the touch event should be cancelled
284
+ */
285
+ shouldCancelTouch(event) {
286
+ const { targetTouches, type, target } = event;
287
+ if (type === 'touchend') {
288
+ this.lastTouchPosition = undefined;
289
+ return false;
290
+ }
291
+ // store touch position
292
+ if (type === 'touchstart') {
293
+ const touch = targetTouches[0];
294
+ this.lastTouchPosition = {
295
+ pageX: touch.pageX,
296
+ pageY: touch.pageY,
297
+ target
298
+ };
299
+ return false;
300
+ }
301
+ if (!this.lastTouchPosition) {
302
+ return false;
303
+ }
304
+ // 'touchmove'
305
+ const touch = targetTouches[0];
306
+ const deltaX = this.lastTouchPosition.pageX - touch.pageX;
307
+ const deltaY = this.lastTouchPosition.pageY - touch.pageY;
308
+ return this.shouldCancelScroll(event, deltaY, deltaX);
309
+ }
310
+ /**
311
+ * Check if wheel event should be cancelled
312
+ * @param event Wheel event
313
+ * @return shouldCancelWheel True if the scroll event should be cancelled
314
+ */
315
+ shouldCancelWheel(event) {
316
+ const { deltaX, deltaY } = event;
317
+ return this.shouldCancelScroll(event, deltaY, deltaX);
318
+ }
319
+ /**
320
+ * Check if wheel event should be cancelled
321
+ * @param event Wheel event
322
+ * @param deltaY Scroll delta on Y axis
323
+ * @param deltaX Scroll delta on X axis
324
+ * @return shouldCancel True if the event should be cancelled
325
+ */
326
+ shouldCancelScroll(event, deltaY, deltaX) {
327
+ const isVerticalScroll = Math.abs(deltaY) >= Math.abs(deltaX);
328
+ const path = [...event.composedPath()];
329
+ let idx = -1;
330
+ const interactiveElements = [...this.interactiveElements];
331
+ // calculate if the wheel event should be stopped according to locked
332
+ while (idx === -1 && interactiveElements.length) {
333
+ idx = path.indexOf(interactiveElements.pop());
334
+ }
335
+ // scroll happened outside the locked container
336
+ if (idx === -1) {
337
+ return true;
338
+ }
339
+ const checkSlice = path.slice(0, idx + 1);
340
+ const canScroll = isVerticalScroll ? (element) => {
341
+ const style = window.getComputedStyle(element);
342
+ if (style.overflowY === 'scroll' || style.overflowY === 'auto') {
343
+ // delta < 0 is scroll up, delta > 0 is scroll down.
344
+ return deltaY < 0 ? element.scrollTop > 0 : element.scrollTop < element.scrollHeight - element.clientHeight;
345
+ }
346
+ return false;
347
+ } : (element) => {
348
+ const style = window.getComputedStyle(element);
349
+ if (style.overflowX === 'scroll' || style.overflowX === 'auto') {
350
+ // delta < 0 is scroll left, delta > 0 is scroll right.
351
+ return deltaX < 0 ? element.scrollLeft > 0 : element.scrollLeft < element.scrollWidth - element.clientWidth;
352
+ }
353
+ return false;
354
+ };
355
+ while (checkSlice.length) {
356
+ const node = checkSlice.shift();
357
+ if (node && node.nodeType !== Node.ELEMENT_NODE) {
358
+ continue;
359
+ }
360
+ if (canScroll(node)) {
361
+ return false;
362
+ }
363
+ }
364
+ return true;
365
+ }
366
+ }
367
+ const locker = new ScrollLockManager(); /* Locker is a singleton */
368
+ /**
369
+ * Lock the screen and make top most overlay
370
+ * and its position target interactive
371
+ * @returns {void}
372
+ */
373
+ export const applyLock = () => {
374
+ locker.applyLock();
375
+ };
@@ -0,0 +1,93 @@
1
+ import type { ViewAreaInfo } from '../helpers/types';
2
+ import type { Overlay } from '../elements/overlay';
3
+ import '../elements/overlay-viewport.js';
4
+ /**
5
+ * Viewport manager singleton is responsible for getting
6
+ * viewport sizes and reacting on viewport changes
7
+ * @returns {void}
8
+ */
9
+ export declare class ViewportManager {
10
+ private registry;
11
+ private viewRegistry;
12
+ private refitFrame;
13
+ private screenViewport;
14
+ /**
15
+ * Refit all overlays
16
+ * @returns {void}
17
+ */
18
+ private callRefit;
19
+ /**
20
+ * Create overlay-viewport and insert it before the provided node
21
+ * @param insertBefore A node to insert before
22
+ * @returns created overlay-viewport
23
+ */
24
+ private createViewport;
25
+ /**
26
+ * Remove overlay-viewport from DOM tree
27
+ * @param viewport overlay-viewport to remove
28
+ * @returns {void}
29
+ */
30
+ private removeViewport;
31
+ /**
32
+ * Set screen sizing viewport
33
+ * @returns void
34
+ */
35
+ private setScreenViewport;
36
+ /**
37
+ * Removes screen sizing viewport
38
+ * @returns void
39
+ */
40
+ private removeScreenViewport;
41
+ /**
42
+ * Reset sizing for viewport
43
+ * @param viewport Viewport to reset sizing for
44
+ * @returns {void}
45
+ */
46
+ private resetViewportSizing;
47
+ getViewAreaInfo(overlay: Overlay): ViewAreaInfo;
48
+ register(overlay: Overlay): void;
49
+ deregister(overlay: Overlay): void;
50
+ /**
51
+ * @returns count of elements inside manager
52
+ */
53
+ size(): number;
54
+ /**
55
+ * applies deregister for each element in registry
56
+ * @returns {void}
57
+ */
58
+ clear(): void;
59
+ }
60
+ /**
61
+ * Register the new overlay. Must be run to let start behaviour to listen for viewport events
62
+ * @param overlay Overlay
63
+ * @returns {void}
64
+ */
65
+ export declare const register: (overlay: Overlay) => void;
66
+ /**
67
+ * Deregister the overlay
68
+ * @param overlay Overlay
69
+ * @returns {void}
70
+ */
71
+ export declare const deregister: (overlay: Overlay) => void;
72
+ /**
73
+ * @typedef {Object} ViewAreaInfo
74
+ * @property {Number} viewHeight - The height of view area
75
+ * @property {Number} viewWidth - The width of view area
76
+ * @property {Number} [offsetTop=0] - iOS only the view area vertical offset
77
+ * @property {Number} [offsetLeft=0] - iOS only the view area horizontal offset
78
+ */
79
+ /**
80
+ * Get sizing information of the viewport for overlay
81
+ * @param overlay Overlay to get info for
82
+ * @return area info
83
+ */
84
+ export declare const getViewAreaInfo: (overlay: Overlay) => ViewAreaInfo;
85
+ /**
86
+ * @returns count of elements inside manager
87
+ */
88
+ export declare const size: () => number;
89
+ /**
90
+ * removes all elements from registry
91
+ * @returns {void}
92
+ */
93
+ export declare const clear: () => void;
@@ -0,0 +1,211 @@
1
+ import { AnimationTaskRunner } from '@refinitiv-ui/utils/lib/async.js';
2
+ import '../elements/overlay-viewport.js';
3
+ /**
4
+ * Default values for area info
5
+ */
6
+ const viewAreaInfo = {
7
+ viewHeight: 0,
8
+ viewWidth: 0,
9
+ offsetTop: 0,
10
+ offsetLeft: 0,
11
+ offsetBottom: 0,
12
+ offsetRight: 0,
13
+ viewOffsetTop: 0,
14
+ viewOffsetLeft: 0
15
+ };
16
+ // Used to capture scroll events
17
+ const ScrollEventOptions = { capture: true, passive: true };
18
+ /**
19
+ * Viewport manager singleton is responsible for getting
20
+ * viewport sizes and reacting on viewport changes
21
+ * @returns {void}
22
+ */
23
+ export class ViewportManager {
24
+ constructor() {
25
+ this.registry = new Map();
26
+ this.viewRegistry = new WeakMap();
27
+ this.refitFrame = new AnimationTaskRunner();
28
+ this.screenViewport = null;
29
+ /**
30
+ * Refit all overlays
31
+ * @returns {void}
32
+ */
33
+ this.callRefit = () => {
34
+ this.refitFrame.schedule(() => {
35
+ this.registry.forEach((viewport, overlay) => {
36
+ this.resetViewportSizing(viewport);
37
+ overlay.fit();
38
+ });
39
+ });
40
+ };
41
+ }
42
+ /**
43
+ * Create overlay-viewport and insert it before the provided node
44
+ * @param insertBefore A node to insert before
45
+ * @returns created overlay-viewport
46
+ */
47
+ createViewport(insertBefore) {
48
+ var _a;
49
+ const viewport = document.createElement('ef-overlay-viewport');
50
+ (_a = insertBefore === null || insertBefore === void 0 ? void 0 : insertBefore.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(viewport, insertBefore);
51
+ return viewport;
52
+ }
53
+ /**
54
+ * Remove overlay-viewport from DOM tree
55
+ * @param viewport overlay-viewport to remove
56
+ * @returns {void}
57
+ */
58
+ removeViewport(viewport) {
59
+ var _a;
60
+ (_a = viewport.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(viewport);
61
+ }
62
+ /**
63
+ * Set screen sizing viewport
64
+ * @returns void
65
+ */
66
+ setScreenViewport() {
67
+ if (!this.screenViewport) {
68
+ this.screenViewport = this.createViewport(document.body);
69
+ }
70
+ }
71
+ /**
72
+ * Removes screen sizing viewport
73
+ * @returns void
74
+ */
75
+ removeScreenViewport() {
76
+ if (this.screenViewport) {
77
+ this.removeViewport(this.screenViewport);
78
+ this.screenViewport = null;
79
+ }
80
+ }
81
+ /**
82
+ * Reset sizing for viewport
83
+ * @param viewport Viewport to reset sizing for
84
+ * @returns {void}
85
+ */
86
+ resetViewportSizing(viewport) {
87
+ if (!this.screenViewport) {
88
+ return;
89
+ }
90
+ const screenRect = this.screenViewport.getBoundingClientRect();
91
+ // since screenViewport is applied on html element, it does not include body zoom
92
+ // Zoom is a legacy feature and must not be used by any means.
93
+ // Kept here for compatibility with old apps
94
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
95
+ // @ts-ignore
96
+ const zoom = parseFloat(window.getComputedStyle(document.body).zoom);
97
+ const screenHeight = screenRect.height / zoom;
98
+ const screenWidth = screenRect.width / zoom;
99
+ const { top, left, bottom, right } = viewport.getBoundingClientRect();
100
+ const offsetTop = top < 0 ? Math.abs(top) : 0;
101
+ const offsetLeft = left < 0 ? Math.abs(left) : 0;
102
+ const offsetBottom = bottom > screenHeight ? bottom - screenHeight : 0;
103
+ const offsetRight = right > screenWidth ? right - screenWidth : 0;
104
+ const viewHeight = viewport.offsetHeight - offsetTop - offsetBottom;
105
+ const viewWidth = viewport.offsetWidth - offsetLeft - offsetRight;
106
+ this.viewRegistry.set(viewport, {
107
+ viewOffsetTop: top < 0 ? top + offsetTop : top,
108
+ viewOffsetLeft: left < 0 ? left + offsetLeft : left,
109
+ viewHeight: viewHeight < 0 ? 0 : viewHeight,
110
+ viewWidth: viewWidth < 0 ? 0 : viewWidth,
111
+ offsetTop,
112
+ offsetLeft,
113
+ offsetBottom,
114
+ offsetRight
115
+ });
116
+ }
117
+ getViewAreaInfo(overlay) {
118
+ const viewport = this.registry.get(overlay);
119
+ if (!viewport) {
120
+ return viewAreaInfo;
121
+ }
122
+ if (!this.viewRegistry.has(viewport)) {
123
+ this.resetViewportSizing(viewport);
124
+ }
125
+ return this.viewRegistry.get(viewport) || viewAreaInfo;
126
+ }
127
+ register(overlay) {
128
+ if (!this.registry.size) {
129
+ window.addEventListener('resize', this.callRefit);
130
+ window.addEventListener('orientationchange', this.callRefit);
131
+ window.addEventListener('scroll', this.callRefit, ScrollEventOptions);
132
+ this.setScreenViewport();
133
+ }
134
+ if (!this.registry.has(overlay)) {
135
+ const viewport = this.createViewport(overlay);
136
+ this.registry.set(overlay, viewport);
137
+ viewport.addEventListener('resize', () => overlay.fit());
138
+ }
139
+ }
140
+ deregister(overlay) {
141
+ if (this.registry.has(overlay)) {
142
+ const viewport = this.registry.get(overlay);
143
+ viewport && this.removeViewport(viewport);
144
+ this.registry.delete(overlay);
145
+ }
146
+ if (!this.registry.size) {
147
+ window.removeEventListener('resize', this.callRefit);
148
+ window.removeEventListener('orientationchange', this.callRefit);
149
+ window.removeEventListener('scroll', this.callRefit, ScrollEventOptions);
150
+ this.removeScreenViewport();
151
+ }
152
+ }
153
+ /**
154
+ * @returns count of elements inside manager
155
+ */
156
+ size() {
157
+ return this.registry.size;
158
+ }
159
+ /**
160
+ * applies deregister for each element in registry
161
+ * @returns {void}
162
+ */
163
+ clear() {
164
+ this.registry.forEach((viewport, overlay) => this.deregister(overlay));
165
+ }
166
+ }
167
+ const viewportManager = new ViewportManager();
168
+ /**
169
+ * Register the new overlay. Must be run to let start behaviour to listen for viewport events
170
+ * @param overlay Overlay
171
+ * @returns {void}
172
+ */
173
+ export const register = (overlay) => {
174
+ viewportManager.register(overlay);
175
+ };
176
+ /**
177
+ * Deregister the overlay
178
+ * @param overlay Overlay
179
+ * @returns {void}
180
+ */
181
+ export const deregister = (overlay) => {
182
+ viewportManager.deregister(overlay);
183
+ };
184
+ /**
185
+ * @typedef {Object} ViewAreaInfo
186
+ * @property {Number} viewHeight - The height of view area
187
+ * @property {Number} viewWidth - The width of view area
188
+ * @property {Number} [offsetTop=0] - iOS only the view area vertical offset
189
+ * @property {Number} [offsetLeft=0] - iOS only the view area horizontal offset
190
+ */
191
+ /**
192
+ * Get sizing information of the viewport for overlay
193
+ * @param overlay Overlay to get info for
194
+ * @return area info
195
+ */
196
+ export const getViewAreaInfo = (overlay) => {
197
+ return viewportManager.getViewAreaInfo(overlay);
198
+ };
199
+ /**
200
+ * @returns count of elements inside manager
201
+ */
202
+ export const size = () => {
203
+ return viewportManager.size();
204
+ };
205
+ /**
206
+ * removes all elements from registry
207
+ * @returns {void}
208
+ */
209
+ export const clear = () => {
210
+ viewportManager.clear();
211
+ };