@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,1251 @@
1
+ var Autosuggest_1;
2
+ import { __decorate } from "tslib";
3
+ import { css, html } from '@refinitiv-ui/core';
4
+ import { customElement } from '@refinitiv-ui/core/lib/decorators/custom-element.js';
5
+ import { query } from '@refinitiv-ui/core/lib/decorators/query.js';
6
+ import { property } from '@refinitiv-ui/core/lib/decorators/property.js';
7
+ import { unsafeHTML } from '@refinitiv-ui/core/lib/directives/unsafe-html.js';
8
+ import { VERSION } from '../version.js';
9
+ import { AnimationTaskRunner, TimeoutTaskRunner } from '@refinitiv-ui/utils/lib/async.js';
10
+ import { escapeRegExp, itemHighlightable, itemRenderer, queryWordSelect } from './helpers/utils.js';
11
+ import { isIE, isMobile } from '@refinitiv-ui/utils/lib/browser.js';
12
+ import { Overlay } from '../overlay/index.js';
13
+ import '../loader/index.js';
14
+ import '../item/index.js';
15
+ export { queryWordSelect, itemRenderer, escapeRegExp, itemHighlightable, updateElementContent } from './helpers/utils.js';
16
+ /**
17
+ * Shows suggestions based on users' query.
18
+ * It can be used by attaching to text form control
19
+ * such as TextField, Multi Input, etc.
20
+ * Autosuggest supports various use cases such as
21
+ * custom rendering, pagination, asynchronous data request, etc.
22
+ *
23
+ * @fires item-highlight Fired when an item gets highlighted or highlight is removed
24
+ * @fires add-attach-target-events Fired when attach has been set
25
+ * @fires remove-attach-target-events Fired when attach has been removed
26
+ * @fires item-select Fired when an item gets selected
27
+ * @fires suggestions-fetch-requested Fired when auto suggest requests the data
28
+ * @fires suggestions-clear-requested Fired when auto suggest requests to clear the data. If used in reactive application, prevent default and set suggestions to []
29
+ * @fires suggestions-query Fired when input value has changed and the query must be set
30
+ * @fires suggestions-changed Fired when suggestions changed
31
+ *
32
+ * @attr {boolean} opened - Set to open auto suggest popup
33
+ * @prop {boolean} [opened=false] - Auto suggest popup's open state
34
+ */
35
+ let Autosuggest = Autosuggest_1 = class Autosuggest extends Overlay {
36
+ /**
37
+ * creates auto-suggest
38
+ */
39
+ constructor() {
40
+ super();
41
+ /**
42
+ * An HTML Element or CSS selector
43
+ * @type {AutosuggestTargetElement | string | null}
44
+ */
45
+ this.attach = null;
46
+ /**
47
+ * Request suggestions when attach target is focused
48
+ */
49
+ this.requestOnFocus = false;
50
+ /**
51
+ * If set to true display 'Has more results' item
52
+ */
53
+ this.moreResults = false;
54
+ /**
55
+ * Custom text for More Search
56
+ */
57
+ this.moreSearchText = Autosuggest_1.defaultMoreSearchText;
58
+ /**
59
+ * If set to true show loading mask
60
+ */
61
+ this.loading = false;
62
+ /**
63
+ * An object that represents a query from attach target
64
+ * @type {AutosuggestQuery | null}
65
+ */
66
+ this.query = null;
67
+ /**
68
+ * Debounce rate in ms of the filter as a number.
69
+ * Used to throttle the filter rate so as not to trigger unneeded filtering
70
+ * @default 100
71
+ */
72
+ this.debounceRate = Autosuggest_1.defaultDebounceRate;
73
+ /**
74
+ * A renderer applied to suggestion.
75
+ * By default a render maps data to item attributes
76
+ * @type {AutosuggestRenderer}
77
+ */
78
+ this.renderer = itemRenderer;
79
+ /**
80
+ * A function that is applied to every suggestion during the render process
81
+ * to say whether the item can be highlighted and selected. Only items that return true are considered.
82
+ * By default the function checks for `item` `highlightable` property.
83
+ * @type {AutosuggestHighlightable}
84
+ */
85
+ this.highlightable = itemHighlightable;
86
+ /**
87
+ * A list of suggestion items
88
+ * @type {AutosuggestItem[]}
89
+ */
90
+ this.suggestions = [];
91
+ /**
92
+ * If set to true, the render function is not called. Instead the wrapper element
93
+ * should populate and destroy suggestion elements. Rendering items manually
94
+ * may have performance benefits in frameworks that use virtual DOM (such as `Vue`, `React`, `hyperHTML` and others)
95
+ */
96
+ this.htmlRenderer = false;
97
+ // used to map render elements with data
98
+ this.suggestionMap = new Map();
99
+ this.highlightedItem = null;
100
+ this.attachTarget = null;
101
+ this.lastActiveElement = null;
102
+ this.suspendedKey = false;
103
+ this.preservedQueryValue = null;
104
+ this.focusSuspended = false;
105
+ this.jobRunner = new TimeoutTaskRunner(this.debounceRate);
106
+ this.attachChangeRunner = new AnimationTaskRunner();
107
+ this.moreResultsRunner = new AnimationTaskRunner();
108
+ this.loadingRunner = new AnimationTaskRunner();
109
+ /**
110
+ * Run when document click event happens.
111
+ * @param event object
112
+ * @returns {void}
113
+ */
114
+ this.onOutsideClick = (event) => {
115
+ const path = event.composedPath();
116
+ // outside click
117
+ if (!path.includes(this) && this.attachTarget && !path.includes(this.attachTarget)) {
118
+ this.setOpened(false);
119
+ }
120
+ };
121
+ /**
122
+ * fire event and reinit listeners if attach was changed
123
+ * @returns {void}
124
+ */
125
+ this.attachChangeFrameCallback = () => {
126
+ this.dispatchAttachEventsRemoveAction();
127
+ const attachTarget = (typeof this.attach === 'string' ? document.querySelector(this.attach) : this.attach);
128
+ if (attachTarget && attachTarget.nodeType === document.ELEMENT_NODE) {
129
+ this.attachTarget = attachTarget;
130
+ if (!this.positionTarget) {
131
+ this.positionTarget = attachTarget; // in most cases attachTarget and positionTarget must be the same
132
+ }
133
+ /**
134
+ * @event add-attach-target-events
135
+ * Fired when attach has been set.
136
+ * Add attach target listeners.
137
+ */
138
+ this.dispatchEventDefault(new CustomEvent('add-attach-target-events', {
139
+ cancelable: true
140
+ }), this.attachEventsAddAction);
141
+ }
142
+ };
143
+ /**
144
+ * set opened state due to status of focus and content
145
+ * @returns {void}
146
+ */
147
+ this.moreResultsFrameCallback = () => {
148
+ this.setOpened(this.attachTargetFocused && this.hasContent);
149
+ };
150
+ /**
151
+ * initialize opened state depends on focus and content
152
+ * @returns {void}
153
+ */
154
+ this.loadingFrameCallback = () => {
155
+ if (this.loading && !this.opened && this.attachTargetFocused) {
156
+ this.setOpened(true);
157
+ }
158
+ else if (!this.loading && this.opened && !this.hasContent) {
159
+ this.setOpened(false);
160
+ }
161
+ };
162
+ this.removeChildNode = (el) => {
163
+ el.parentNode && el.parentNode.removeChild(el);
164
+ };
165
+ this.generateSuggestionsFragment = (fragment, suggestion) => {
166
+ const el = this.renderer(suggestion, this.preservedQueryValue);
167
+ fragment.appendChild(el);
168
+ return fragment;
169
+ };
170
+ /**
171
+ * Fired when mouse down event happens. Select the item
172
+ * @param event Mouse down event
173
+ * @returns {void}
174
+ */
175
+ this.onItemMousedown = (event) => {
176
+ // do not loose focus from input when click happens on the popup
177
+ // note, in IE when scrolling the focus is lost regardless, so
178
+ // do hacking here and with on blur
179
+ /* istanbul ignore next */
180
+ requestAnimationFrame(() => {
181
+ // Ignore any focus query events!
182
+ this.focusSuspended = true;
183
+ this.attachTarget && this.attachTarget.focus();
184
+ this.focusSuspended = false;
185
+ });
186
+ event.stopPropagation();
187
+ event.preventDefault();
188
+ };
189
+ /**
190
+ * @ignore
191
+ */
192
+ this.position = ['bottom-start', 'top-start', 'right-middle'];
193
+ /**
194
+ * @ignore
195
+ */
196
+ this.noCancelOnEscKey = true;
197
+ /**
198
+ * @ignore
199
+ */
200
+ this.noCancelOnOutsideClick = true;
201
+ /**
202
+ * @ignore
203
+ */
204
+ this.noAutofocus = true;
205
+ /**
206
+ * @ignore
207
+ */
208
+ this.noOverlap = true;
209
+ /**
210
+ * @ignore
211
+ */
212
+ this.withShadow = false;
213
+ /**
214
+ * @ignore
215
+ */
216
+ this.onInputValueChange = this.onInputValueChange.bind(this);
217
+ /**
218
+ * @ignore
219
+ */
220
+ this.onInputKeyDown = this.onInputKeyDown.bind(this);
221
+ /**
222
+ * @ignore
223
+ */
224
+ this.onInputBlur = this.onInputBlur.bind(this);
225
+ /**
226
+ * @ignore
227
+ */
228
+ this.onInputFocus = this.onInputFocus.bind(this);
229
+ /**
230
+ * @ignore
231
+ */
232
+ this.suggestionsQueryAction = this.suggestionsQueryAction.bind(this);
233
+ /**
234
+ * @ignore
235
+ */
236
+ this.itemSelectAction = this.itemSelectAction.bind(this);
237
+ /**
238
+ * @ignore
239
+ */
240
+ this.itemHighlightAction = this.itemHighlightAction.bind(this);
241
+ /**
242
+ * @ignore
243
+ */
244
+ this.highlightText = this.highlightText.bind(this);
245
+ /**
246
+ * @ignore
247
+ */
248
+ this.suggestionsFetchRequestedAction = this.suggestionsFetchRequestedAction.bind(this);
249
+ /**
250
+ * @ignore
251
+ */
252
+ this.suggestionsClearRequestedAction = this.suggestionsClearRequestedAction.bind(this);
253
+ /**
254
+ * @ignore
255
+ */
256
+ this.attachEventsAddAction = this.attachEventsAddAction.bind(this);
257
+ /**
258
+ * @ignore
259
+ */
260
+ this.attachEventsRemoveAction = this.attachEventsRemoveAction.bind(this);
261
+ }
262
+ /**
263
+ * Element version number
264
+ * @returns version number
265
+ */
266
+ static get version() {
267
+ return VERSION;
268
+ }
269
+ /**
270
+ * A `CSSResultGroup` that will be used
271
+ * to style the host, slotted children
272
+ * and the internal template of the element.
273
+ * @return CSS template
274
+ */
275
+ static get styles() {
276
+ return [
277
+ super.styles,
278
+ css `
279
+ :host {
280
+ overflow: hidden;
281
+ display: flex;
282
+ flex-direction: column;
283
+ }
284
+ [part=content] {
285
+ flex: 1 1 auto;
286
+ overflow-x: hidden;
287
+ overflow-y: auto;
288
+ -webkit-overflow-scrolling: touch;
289
+ }
290
+ [part=header], [part=footer] {
291
+ flex: none;
292
+ }
293
+ `
294
+ ];
295
+ }
296
+ /**
297
+ * A basic regexp matching pattern to replace text based on string input.
298
+ * @param text Value to test against
299
+ * @param query The query
300
+ * @param [pattern=<mark>$1</mark>] Provide a pattern to replace string
301
+ * @returns innerHTML The text that can be used as innerHTML
302
+ */
303
+ static QueryWordSelect(text, query = '', pattern = '<mark>$1</mark>') {
304
+ return queryWordSelect(text, query, pattern);
305
+ }
306
+ /**
307
+ * Build item element from data object
308
+ * @param suggestion Suggestion data
309
+ * @param query A query data (usually string, but could be any entity )
310
+ * @returns item
311
+ */
312
+ static ItemRenderer(suggestion, query) {
313
+ return itemRenderer(suggestion, query);
314
+ }
315
+ /**
316
+ * Replace forbidden characters in regular expressions
317
+ * @param string A string to process
318
+ * @returns clean string
319
+ */
320
+ static EscapeRegExp(string = '') {
321
+ return escapeRegExp(string);
322
+ }
323
+ /**
324
+ * Check whether item can be highlighted
325
+ * @param suggestion Suggestion object
326
+ * @param target item element
327
+ * @returns highlightable
328
+ */
329
+ static ItemHighlightable(suggestion, target) {
330
+ return itemHighlightable(suggestion, target);
331
+ }
332
+ disconnectedCallback() {
333
+ this.dispatchAttachEventsRemoveAction();
334
+ super.disconnectedCallback();
335
+ }
336
+ /**
337
+ * Run when attach target value changes.
338
+ * @param event by default `value-changed` event is listened
339
+ * @returns {void}
340
+ */
341
+ onInputValueChange(event) {
342
+ if (!this.suspended) { // avoid circular
343
+ /* istanbul ignore next */
344
+ if (isMobile) {
345
+ this.lastActiveElement = event.target;
346
+ }
347
+ this.requestSuggestions('value-changed', true);
348
+ }
349
+ }
350
+ /**
351
+ * Run when input has lost focus
352
+ * @param event by default `blur` event is listened
353
+ * @returns {void}
354
+ */
355
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
356
+ onInputBlur(event) {
357
+ requestAnimationFrame(() => {
358
+ if (!this.attachTargetFocused) {
359
+ this.setOpened(false);
360
+ }
361
+ });
362
+ }
363
+ /**
364
+ * Run when input received focus
365
+ * @param event by default `focus` event is listened
366
+ * @returns {void}
367
+ */
368
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
369
+ onInputFocus(event) {
370
+ /* istanbul ignore next */
371
+ if (this.focusSuspended) {
372
+ // see _onItemMousedown, it is an IE fix for scrollbar
373
+ return;
374
+ }
375
+ this.requestOnFocus && this.requestSuggestions('input-focus');
376
+ }
377
+ /**
378
+ * Run when input key down event has happened
379
+ * @param event by default `keydown` event is listened
380
+ * @returns {void}
381
+ */
382
+ onInputKeyDown(event) {
383
+ if (event.key === 'Up' || event.key === 'ArrowUp') {
384
+ this.onUpKey();
385
+ }
386
+ else if (event.key === 'Down' || event.key === 'ArrowDown') {
387
+ this.onDownKey();
388
+ }
389
+ else if (event.key === 'Esc' || event.key === 'Escape') {
390
+ this.onEscKey();
391
+ }
392
+ else if (event.key === 'Enter' || event.key === 'Return') {
393
+ this.onEnterKey(event);
394
+ }
395
+ else {
396
+ return;
397
+ }
398
+ event.preventDefault();
399
+ }
400
+ /**
401
+ * @ignore
402
+ * Called when the element's dimensions have changed
403
+ * @param size dimension details
404
+ * @returns {void}
405
+ */
406
+ resizedCallback(size) {
407
+ super.resizedCallback(size);
408
+ this.calculateContentMaxHeight(size);
409
+ }
410
+ /**
411
+ * @returns template of loader if currently query loading
412
+ */
413
+ get loaderTemplate() {
414
+ if (!this.loading) {
415
+ return null;
416
+ }
417
+ return html `
418
+ <div part="loader">
419
+ <div part="backdrop"></div>
420
+ <ef-loader size="medium"></ef-loader>
421
+ </div>
422
+ `;
423
+ }
424
+ /**
425
+ * @returns template of moreResults
426
+ */
427
+ get moreResultsTemplate() {
428
+ if (!this.moreResults) {
429
+ return null;
430
+ }
431
+ return html `
432
+ <ef-item id="moreResults" part="more-results">${this.highlightText(this.moreResults, this.moreSearchText, this.query)}</ef-item>
433
+ `;
434
+ }
435
+ /**
436
+ * A `TemplateResult` that will be used
437
+ * to render the updated internal template.
438
+ * @return Render template
439
+ */
440
+ render() {
441
+ return html `
442
+ <div part="header">
443
+ <slot id="headerSlot" name="header"></slot>
444
+ </div>
445
+ <div id="content" part="content" @mousemove="${this.onItemMouseMove}" @mouseleave="${this.onItemMouseLeave}" @tap="${this.onItemMouseClick}">
446
+ <slot id="contentSlot" @slotchange="${this.onSlotChange}"></slot>
447
+ ${this.moreResultsTemplate}
448
+ </div>
449
+ <div part="footer">
450
+ <slot id="footerSlot" name="footer"></slot>
451
+ </div>
452
+ ${this.loaderTemplate}
453
+ `;
454
+ }
455
+ /**
456
+ * Called once after the component is first rendered
457
+ * @param changedProperties map of changed properties with old values
458
+ * @returns {void}
459
+ */
460
+ firstUpdated(changedProperties) {
461
+ super.firstUpdated(changedProperties);
462
+ this.addEventListener('tapstart', this.onItemMousedown);
463
+ }
464
+ /**
465
+ * Called when the element’s DOM has been updated and rendered
466
+ * @param changedProperties Properties that has changed
467
+ * @returns shouldUpdate
468
+ */
469
+ shouldUpdate(changedProperties) {
470
+ let result = super.shouldUpdate(changedProperties);
471
+ result = result || this.shouldAutosuggestUpdate(changedProperties);
472
+ return result;
473
+ }
474
+ /**
475
+ * Called after the element’s DOM has been updated
476
+ * @param changedProperties Properties that has changed
477
+ * @returns {void}
478
+ */
479
+ updated(changedProperties) {
480
+ super.updated(changedProperties);
481
+ if (changedProperties.has('suggestions')) {
482
+ this.notifySuggestions();
483
+ }
484
+ this.changedCallbacks(changedProperties);
485
+ }
486
+ /**
487
+ * inheritance callbacks
488
+ */
489
+ /**
490
+ * Run when the slot has changed.
491
+ * @param event Slot change query
492
+ * @returns {void}
493
+ */
494
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
495
+ onSlotChange(event) {
496
+ const nodes = (this.contentSlot && this.contentSlot.assignedNodes()) || [];
497
+ this.setOpened(this.attachTargetFocused && this.hasContent);
498
+ // make a brave assumption that suggestions are populated as well
499
+ const suggestions = this.suggestions;
500
+ this.highlightItem(); // hide highlight
501
+ this.suggestionMap.clear();
502
+ nodes.forEach((node, idx) => {
503
+ /* istanbul ignore next */
504
+ if (node.nodeType !== Node.ELEMENT_NODE) {
505
+ return;
506
+ }
507
+ const suggestion = suggestions[idx];
508
+ if (this.highlightable(suggestion, node)) {
509
+ this.suggestionMap.set(node, suggestion);
510
+ }
511
+ });
512
+ }
513
+ /**
514
+ * 'suggestions-query' default action
515
+ * @param event Suggestion query
516
+ * @returns {void}
517
+ */
518
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
519
+ suggestionsQueryAction(event) {
520
+ this.query = this.attachTarget && this.attachTarget.value;
521
+ }
522
+ /**
523
+ * 'item-select' default action
524
+ * @param event Select action
525
+ * @returns {void}
526
+ */
527
+ itemSelectAction(event) {
528
+ const { detail: { query, suggestion } } = event;
529
+ /* istanbul ignore next */
530
+ if (this.attachTarget) {
531
+ this.attachTarget.value = suggestion && (suggestion === null || suggestion === void 0 ? void 0 : suggestion.label) || query;
532
+ }
533
+ }
534
+ /**
535
+ * 'item-highlight' default action
536
+ * @param event Highlight action
537
+ * @returns {void}
538
+ */
539
+ itemHighlightAction(event) {
540
+ const target = event.detail.target;
541
+ const oldTarget = event.detail.oldTarget;
542
+ if (target) {
543
+ target.highlighted = true;
544
+ }
545
+ if (oldTarget) {
546
+ oldTarget.highlighted = false;
547
+ }
548
+ }
549
+ /**
550
+ * 'suggestions-fetch-requested' default action
551
+ * @param event Fetch request
552
+ * @returns {void}
553
+ */
554
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
555
+ suggestionsFetchRequestedAction(event) {
556
+ // do nothing
557
+ }
558
+ /**
559
+ * 'suggestions-clear-requested' default action
560
+ * @param event Clear request
561
+ * @returns {void}
562
+ */
563
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
564
+ suggestionsClearRequestedAction(event) {
565
+ this.suggestions = [];
566
+ }
567
+ /**
568
+ * Add listeners to the attached target
569
+ * By default `input`, 'keydown', 'focus' and 'blur' events are listened
570
+ * @param event Attach add action
571
+ * @returns {void}
572
+ */
573
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
574
+ attachEventsAddAction(event) {
575
+ const attachTarget = this.attachTarget;
576
+ /* istanbul ignore next */
577
+ if (!attachTarget) {
578
+ return;
579
+ }
580
+ attachTarget.addEventListener('input', this.onInputValueChange);
581
+ attachTarget.addEventListener('keydown', this.onInputKeyDown);
582
+ attachTarget.addEventListener('blur', this.onInputBlur);
583
+ attachTarget.addEventListener('focus', this.onInputFocus);
584
+ }
585
+ /**
586
+ * Remove event listeners from the attached target
587
+ * By default `input`, 'keydown', 'focus' and 'blur' events are listened
588
+ * @param event Attach remove action
589
+ * @returns {void}
590
+ */
591
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
592
+ attachEventsRemoveAction(event) {
593
+ const attachTarget = this.attachTarget;
594
+ if (!attachTarget) {
595
+ return;
596
+ }
597
+ attachTarget.removeEventListener('input', this.onInputValueChange);
598
+ attachTarget.removeEventListener('keydown', this.onInputKeyDown);
599
+ attachTarget.removeEventListener('blur', this.onInputBlur);
600
+ attachTarget.removeEventListener('focus', this.onInputFocus);
601
+ }
602
+ /**
603
+ * Call this method to fetch more results
604
+ * @returns {void}
605
+ */
606
+ fetchMoreSuggestions() {
607
+ this.dispatchSuggestionsFetchRequested('more-results');
608
+ }
609
+ /**
610
+ * Highlight the item and remove old highlighted item
611
+ * @param target Element to highlight. Pass null to just remove previous highlight
612
+ * @param silent Do not fire a select event on highlight. Select should be fired on keyboard navigation
613
+ * @returns {void}
614
+ */
615
+ highlightItem(target = null, silent = true) {
616
+ if (this.highlightedItem !== target) {
617
+ const oldTarget = this.highlightedItem;
618
+ this.highlightedItem = target && this.canSelect(target) ? target : null;
619
+ /**
620
+ * @event item-highlight
621
+ * Fired when an item gets highlighted or highlight is removed
622
+ * @param {HTMLElement} [target] New highlight target or null
623
+ * @param {*} [suggestion] New suggestion or null
624
+ * @param {HTMLElement} [oldTarget] Old highlight target or null
625
+ * @param {*} [oldSuggestion] Old suggestion or null
626
+ */
627
+ this.dispatchEventDefault(new CustomEvent('item-highlight', {
628
+ cancelable: true,
629
+ detail: {
630
+ target: this.highlightedItem,
631
+ suggestion: this.getSuggestionFor(this.highlightedItem),
632
+ oldTarget,
633
+ oldSuggestion: this.getSuggestionFor(oldTarget)
634
+ }
635
+ }), this.itemHighlightAction);
636
+ if (!silent && target) {
637
+ this.selectItem(target, 'navigation');
638
+ }
639
+ }
640
+ }
641
+ /**
642
+ * Calculate more search text inner html
643
+ * @param moreResults True if has more results
644
+ * @param moreSearchText More search text template
645
+ * @param query A query
646
+ * @returns innerHTML
647
+ */
648
+ highlightText(moreResults, moreSearchText, query) {
649
+ if (!moreResults) {
650
+ return null;
651
+ }
652
+ return html `
653
+ <span part="more-results-text">
654
+ ${unsafeHTML(moreSearchText.replace(/{0\}/g, `<mark>${query ? query.toString() : ''}</mark>`))}
655
+ </span>
656
+ <span part="more-results-keys" slot="right"><kbd>SHIFT</kbd> + <kbd>ENTER</kbd></span>
657
+ `;
658
+ }
659
+ /**
660
+ * Call this method to request suggestions
661
+ * @private
662
+ * @param reason The reason to request query
663
+ * @param debounce True to debounce
664
+ * @returns {void}
665
+ */
666
+ requestSuggestions(reason, debounce = false) {
667
+ this.dispatchSuggestionsQuery(reason);
668
+ if (this.preservedQueryValue === this.query) { // if the query is the same do not re-issue the request, instead try to open auto suggest
669
+ if (!this.opened && ((this.suggestions && this.suggestions.length) || this.moreResults)) {
670
+ this.setOpened(true);
671
+ }
672
+ return;
673
+ }
674
+ this.preservedQueryValue = this.query;
675
+ const dispatch = () => {
676
+ if (this.attachTargetFocused) {
677
+ this.dispatchSuggestionsFetchRequested(reason);
678
+ }
679
+ };
680
+ if (debounce) {
681
+ // debounce
682
+ this.jobRunner.schedule(dispatch);
683
+ return;
684
+ }
685
+ this.jobRunner.cancel();
686
+ dispatch();
687
+ }
688
+ /**
689
+ * All internal opened set events can be stoppable externally
690
+ * Use this instead of setting opened directly
691
+ * Protected method that can be used by managers or subclasses
692
+ * @returns {void}
693
+ */
694
+ onOpened() {
695
+ super.onOpened();
696
+ document.addEventListener('tapstart', this.onOutsideClick);
697
+ }
698
+ /**
699
+ * Run when the popup has closed, managers are de-registered
700
+ * and closing transition has finished
701
+ * @returns {void}
702
+ */
703
+ onClosed() {
704
+ super.onClosed();
705
+ this.restrictContentMaxHeight();
706
+ document.removeEventListener('tapstart', this.onOutsideClick);
707
+ }
708
+ /**
709
+ * enter key processing
710
+ * @param event Enter
711
+ * @returns {void}
712
+ */
713
+ onEnterKey(event) {
714
+ if (!this.opened) {
715
+ this.requestSuggestions('enter-pressed');
716
+ return;
717
+ }
718
+ /* istanbul ignore next */
719
+ if (this.loading) {
720
+ return;
721
+ }
722
+ // more results
723
+ if (this.moreResults && event.shiftKey) {
724
+ this.fetchMoreSuggestions();
725
+ return;
726
+ }
727
+ if (!this.highlightedItem) {
728
+ this.setOpened(false);
729
+ return;
730
+ }
731
+ this.highlightedItem && this.selectItem(this.highlightedItem, 'enter');
732
+ }
733
+ /**
734
+ * Up key processing
735
+ * @returns {void}
736
+ */
737
+ onUpKey() {
738
+ if (!this.opened) {
739
+ this.requestSuggestions('suggestions-revealed');
740
+ return;
741
+ }
742
+ /* istanbul ignore next */
743
+ if (this.loading) {
744
+ return;
745
+ }
746
+ this.focusElement(-1);
747
+ }
748
+ /**
749
+ * Down key processing
750
+ * @returns {void}
751
+ */
752
+ onDownKey() {
753
+ if (!this.opened) {
754
+ this.requestSuggestions('suggestions-revealed');
755
+ return;
756
+ }
757
+ /* istanbul ignore next */
758
+ if (this.loading) {
759
+ return;
760
+ }
761
+ this.focusElement(1);
762
+ }
763
+ /**
764
+ * Esc key processing
765
+ * @returns {void}
766
+ */
767
+ onEscKey() {
768
+ if (this.opened) {
769
+ // if preserved value exists, set it back
770
+ this.dispatchItemSelect('reset');
771
+ this.setOpened(false);
772
+ return;
773
+ }
774
+ if (this.query) {
775
+ this.suspend();
776
+ this.dispatchItemSelect('clear');
777
+ this.resume();
778
+ this.requestSuggestions('escape-pressed');
779
+ }
780
+ }
781
+ /**
782
+ * Highlight it on mouse move
783
+ * @param event for item
784
+ * @returns {void}
785
+ */
786
+ onItemMouseMove(event) {
787
+ this.highlightItem(this.getTarget(event));
788
+ }
789
+ /**
790
+ * @param target Item to check
791
+ * @returns true if an item can be highlighted and selectable
792
+ */
793
+ canSelect(target) {
794
+ return this.suggestionMap.has(target) || (this.moreResults && target === this.moreResultsItem);
795
+ }
796
+ /**
797
+ * Get suggestion for target
798
+ * @param target Target to check
799
+ * @returns suggestion
800
+ */
801
+ getSuggestionFor(target) {
802
+ return target && this.suggestionMap.get(target);
803
+ }
804
+ /**
805
+ * Select the item from the list
806
+ * @param target Element to select
807
+ * @param method 'click', 'enter' or 'navigation'
808
+ * @returns {void}
809
+ */
810
+ selectItem(target, method) {
811
+ if (this.canSelect(target)) {
812
+ // more results
813
+ if (target === this.moreResultsItem) {
814
+ this.dispatchItemSelect('reset');
815
+ switch (method) {
816
+ case 'click':
817
+ case 'enter':
818
+ this.fetchMoreSuggestions();
819
+ break;
820
+ default:
821
+ // node default
822
+ }
823
+ return;
824
+ }
825
+ this.dispatchItemSelect(method, target);
826
+ switch (method) {
827
+ case 'click':
828
+ case 'enter':
829
+ this.dispatchSuggestionsClearRequested();
830
+ break;
831
+ default:
832
+ // node default
833
+ }
834
+ }
835
+ }
836
+ /**
837
+ * Get the list of rendered suggestions
838
+ * @returns renderedSuggestions
839
+ */
840
+ get renderedSuggestions() {
841
+ const keys = [];
842
+ this.suggestionMap.forEach((value, key) => {
843
+ keys.push(key);
844
+ });
845
+ if (this.moreResults && this.moreResultsItem) {
846
+ keys.push(this.moreResultsItem);
847
+ }
848
+ return keys;
849
+ }
850
+ /**
851
+ * Fired when mouse leave event happens. Remove highlight from the item
852
+ * @returns {void}
853
+ */
854
+ /* istanbul ignore next */
855
+ onItemMouseLeave() {
856
+ this.highlightItem(); // remove highlight
857
+ }
858
+ /**
859
+ * Fired when mouse click event happens. Select an item
860
+ * @param event Mouse click event
861
+ * @returns {void}
862
+ */
863
+ onItemMouseClick(event) {
864
+ this.selectItem(this.getTarget(event), 'click');
865
+ }
866
+ /**
867
+ * check some of native properties was modified
868
+ * @param changedProperties properties that was changed
869
+ * @returns true if some of changedProperties modified
870
+ */
871
+ shouldAutosuggestUpdate(changedProperties) {
872
+ return changedProperties.has('attach') || changedProperties.has('suggestions') || changedProperties.has('moreResults') || changedProperties.has('loading') || changedProperties.has('debounceRate');
873
+ }
874
+ changedCallbacks(changedProperties) {
875
+ if (changedProperties.has('attach')) {
876
+ this.attachChangeRunner.schedule(this.attachChangeFrameCallback);
877
+ }
878
+ if (changedProperties.has('moreResults')) {
879
+ this.moreResultsRunner.schedule(this.moreResultsFrameCallback);
880
+ }
881
+ if (changedProperties.has('loading')) {
882
+ this.loadingRunner.schedule(this.loadingFrameCallback);
883
+ }
884
+ if (changedProperties.has('opened')) {
885
+ this.handleAfterOpened();
886
+ }
887
+ if (changedProperties.has('debounceRate')) {
888
+ this.debounceRateChange();
889
+ }
890
+ }
891
+ /**
892
+ * handle highlight after open
893
+ * @returns {void}
894
+ */
895
+ handleAfterOpened() {
896
+ this.highlightItem(); // hide highlight for case more-result
897
+ }
898
+ /**
899
+ * recreate debouncer if dobounceRate was changed
900
+ * @returns {void}
901
+ */
902
+ debounceRateChange() {
903
+ this.jobRunner.fulfil();
904
+ this.jobRunner = new TimeoutTaskRunner(this.debounceRate);
905
+ }
906
+ /**
907
+ * Dispatch attach events remove action event
908
+ * @returns {void}
909
+ */
910
+ dispatchAttachEventsRemoveAction() {
911
+ if (this.attachTarget) {
912
+ /**
913
+ * @event remove-attach-target-events
914
+ * Fired when attach has been removed.
915
+ * Remove attach target listeners.
916
+ */
917
+ this.dispatchEventDefault(new CustomEvent('remove-attach-target-events', {
918
+ cancelable: true
919
+ }), this.attachEventsRemoveAction);
920
+ this.attachTarget = null;
921
+ }
922
+ }
923
+ /**
924
+ * Run when suggestions get changed
925
+ * NB: this function is only run when htmlRenderer is set to false
926
+ * @returns {void}
927
+ */
928
+ suggestionsChange() {
929
+ this.contentSlot && this.contentSlot.assignedNodes().forEach(this.removeChildNode);
930
+ this.appendChild(this.suggestions.reduce(this.generateSuggestionsFragment, document.createDocumentFragment()));
931
+ }
932
+ /**
933
+ * Dispatch item select event
934
+ * The event may change input, therefore suspend listening
935
+ * @param method Select method
936
+ * @param target Target for suggestion
937
+ * @returns {void}
938
+ */
939
+ dispatchItemSelect(method, target = null) {
940
+ this.suspend();
941
+ /**
942
+ * @event item-select
943
+ * Fired when an item gets selected
944
+ * @param {AutosuggestMethodType} method Select method
945
+ * @param {HTMLElement} target Selection target
946
+ * @param {*} [suggestion] Selected suggestion or null
947
+ * @param {*} [query] Saved query object or null
948
+ */
949
+ this.dispatchEventDefault(new CustomEvent('item-select', {
950
+ cancelable: true,
951
+ detail: {
952
+ method,
953
+ target,
954
+ suggestion: this.getSuggestionFor(target),
955
+ query: method === 'clear' ? null : this.preservedQueryValue
956
+ }
957
+ }), this.itemSelectAction);
958
+ this.resume();
959
+ }
960
+ /**
961
+ * fire 'suggestions-fetch-requested' event
962
+ * @param reason Dispatch reason
963
+ * @returns {void}
964
+ */
965
+ dispatchSuggestionsFetchRequested(reason) {
966
+ /**
967
+ * @event suggestions-fetch-requested
968
+ * Fired when auto suggest requests the data.
969
+ * @param {String} query Input query
970
+ * @param {} reason The reason to fetch data
971
+ */
972
+ this.dispatchEventDefault(new CustomEvent('suggestions-fetch-requested', {
973
+ cancelable: true,
974
+ detail: {
975
+ query: this.query,
976
+ reason
977
+ }
978
+ }), this.suggestionsFetchRequestedAction);
979
+ }
980
+ /**
981
+ * fire 'suggestions-clear-requested' event
982
+ * @returns {void}
983
+ */
984
+ dispatchSuggestionsClearRequested() {
985
+ this.preservedQueryValue = null;
986
+ /**
987
+ * @event suggestions-clear-requested
988
+ * Fired when auto suggest requests to clear the data.
989
+ * If used in reactive application, prevent default and set suggestions to []
990
+ */
991
+ this.dispatchEventDefault(new CustomEvent('suggestions-clear-requested', {
992
+ cancelable: true
993
+ }), this.suggestionsClearRequestedAction);
994
+ }
995
+ /**
996
+ * fire 'suggestions-query' event
997
+ * @param reason Dispatch reason
998
+ * @returns {void}
999
+ */
1000
+ dispatchSuggestionsQuery(reason) {
1001
+ /**
1002
+ * @event suggestions-query
1003
+ * Fired when input value has changed and the query must be set.
1004
+ * @param reason The reason to request query
1005
+ */
1006
+ this.dispatchEventDefault(new CustomEvent('suggestions-query', {
1007
+ cancelable: true,
1008
+ detail: {
1009
+ reason
1010
+ }
1011
+ }), this.suggestionsQueryAction);
1012
+ }
1013
+ /**
1014
+ * Dispatch event and run default action if preventDefault is not run
1015
+ * @param event Custom event to dispatch
1016
+ * @param defaultAction Default action to run
1017
+ * @returns {void}
1018
+ */
1019
+ dispatchEventDefault(event, defaultAction) {
1020
+ this.dispatchEvent(event);
1021
+ if (!event.defaultPrevented) {
1022
+ defaultAction.call(this, event);
1023
+ }
1024
+ }
1025
+ /**
1026
+ * Check if the attach target is in focus
1027
+ * @returns focused true if attach target is focused
1028
+ */
1029
+ get attachTargetFocused() {
1030
+ return this.isFocused(document.activeElement) || this.attachTarget === this.lastActiveElement;
1031
+ }
1032
+ /**
1033
+ * Walk through shadowDOM to find activeElement
1034
+ * @param activeElement currently active document element
1035
+ * @returns true if activeElement is attached target
1036
+ */
1037
+ isFocused(activeElement) {
1038
+ if (this.attachTarget === activeElement) {
1039
+ return true;
1040
+ }
1041
+ if (activeElement && activeElement.shadowRoot) {
1042
+ return this.isFocused(activeElement.shadowRoot.activeElement);
1043
+ }
1044
+ return false;
1045
+ }
1046
+ /**
1047
+ * Check if the autosuggest has content
1048
+ * @returns content exists
1049
+ */
1050
+ get hasContent() {
1051
+ if (this.moreResults) {
1052
+ return true;
1053
+ }
1054
+ // Space characters (e.g. space, tab, EOL) don't count as having content
1055
+ const nodes = this.contentSlot && this.contentSlot.assignedNodes() || [];
1056
+ return nodes.some(({ nodeType, textContent }) => nodeType === Node.ELEMENT_NODE || (textContent && textContent.search(/\S/) >= 0)); // If node is element always return true
1057
+ }
1058
+ /**
1059
+ * Suspend updating suggestions on value-changed
1060
+ * Autosuggest is suspended on select
1061
+ * @returns {void}
1062
+ */
1063
+ suspend() {
1064
+ this.suspendedKey = true;
1065
+ }
1066
+ /**
1067
+ * Resume suspended autosuggest
1068
+ * @returns {void}
1069
+ */
1070
+ resume() {
1071
+ this.suspendedKey = false;
1072
+ }
1073
+ /**
1074
+ * Check if the autosuggest is suspended
1075
+ * @returns {Boolean} suspended
1076
+ */
1077
+ get suspended() {
1078
+ return this.suspendedKey;
1079
+ }
1080
+ /**
1081
+ * Event target is not always what we want. Try to find the best target to process further
1082
+ * @param event Mouse click hover event
1083
+ * @returns target
1084
+ */
1085
+ getTarget(event) {
1086
+ const path = event.composedPath();
1087
+ for (let i = 0; i <= path.length; i += 1) {
1088
+ const node = path[i];
1089
+ /* istanbul ignore next */
1090
+ if (node.nodeType !== Node.ELEMENT_NODE) {
1091
+ continue;
1092
+ }
1093
+ if (this.canSelect(node)) {
1094
+ return node;
1095
+ }
1096
+ /* istanbul ignore next */
1097
+ if (node === this) {
1098
+ return event.target;
1099
+ }
1100
+ }
1101
+ return event.target;
1102
+ }
1103
+ /**
1104
+ * Highlight next or previous highlightable element if present
1105
+ * @param {Number} direction -1 - up/next; 1 - down/previous
1106
+ * @returns {void}
1107
+ */
1108
+ focusElement(direction) {
1109
+ // focus is spread across
1110
+ const highlightedItem = this.highlightedItem;
1111
+ const children = this.renderedSuggestions;
1112
+ const idx = highlightedItem ? children.indexOf(highlightedItem) : -1;
1113
+ let focusElement;
1114
+ if (direction === 1) {
1115
+ focusElement = idx === -1 ? children[0] : children[idx + 1];
1116
+ }
1117
+ else {
1118
+ focusElement = idx === -1 ? children[children.length - 1] : children[idx - 1];
1119
+ }
1120
+ if (!focusElement) {
1121
+ focusElement = direction === 1 ? children[0] : children[children.length - 1];
1122
+ }
1123
+ if (focusElement) {
1124
+ this.highlightItem(focusElement, false);
1125
+ focusElement.scrollIntoView({
1126
+ behavior: 'auto',
1127
+ block: 'nearest'
1128
+ });
1129
+ }
1130
+ }
1131
+ /**
1132
+ * @returns {void}
1133
+ */
1134
+ notifySuggestions() {
1135
+ this.dispatchEvent(new CustomEvent('suggestions-changed', {
1136
+ detail: {
1137
+ value: this.suggestions
1138
+ }
1139
+ }));
1140
+ if (!this.htmlRenderer) {
1141
+ this.suggestionsChange();
1142
+ }
1143
+ }
1144
+ /**
1145
+ * Set the width
1146
+ * @returns {void}
1147
+ */
1148
+ refit() {
1149
+ super.refit();
1150
+ if (this.positionTarget && this.positionTarget instanceof HTMLElement) {
1151
+ const rect = this.positionTarget.getBoundingClientRect();
1152
+ this.style.minWidth = `${rect.width}px`;
1153
+ }
1154
+ this.restrictContentMaxHeight();
1155
+ }
1156
+ /**
1157
+ * IE11 only: Restrict maximum height of content element
1158
+ * @param [maxHeight] Maximum height of content element
1159
+ * @returns {void}
1160
+ */
1161
+ /* istanbul ignore next */
1162
+ restrictContentMaxHeight(maxHeight) {
1163
+ if (!isIE) {
1164
+ return;
1165
+ }
1166
+ if (maxHeight) {
1167
+ this.contentElement && this.contentElement.style.setProperty('max-height', `${maxHeight}px`);
1168
+ }
1169
+ else {
1170
+ this.contentElement && this.contentElement.style.removeProperty('max-height');
1171
+ }
1172
+ }
1173
+ /**
1174
+ * IE11 only: Calculate the maxHeight of content element
1175
+ * @param size Size of the dialog
1176
+ * @returns {void}
1177
+ */
1178
+ /* istanbul ignore next */
1179
+ calculateContentMaxHeight(size) {
1180
+ var _a, _b, _c;
1181
+ if (!isIE) {
1182
+ return;
1183
+ }
1184
+ const headerRect = (_a = this.headerElement) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
1185
+ const footerRect = (_b = this.footerElement) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect();
1186
+ const contentRect = (_c = this.contentElement) === null || _c === void 0 ? void 0 : _c.getBoundingClientRect();
1187
+ const dialogHeight = size.height;
1188
+ const headerHeight = headerRect ? headerRect.height : 0;
1189
+ const footerHeight = footerRect ? footerRect.height : 0;
1190
+ const contentHeight = contentRect ? contentRect.height : 0;
1191
+ if (headerHeight + footerHeight + contentHeight > dialogHeight) {
1192
+ this.restrictContentMaxHeight(dialogHeight - footerHeight - headerHeight);
1193
+ }
1194
+ }
1195
+ };
1196
+ Autosuggest.defaultDebounceRate = 100;
1197
+ Autosuggest.defaultMoreSearchText = 'More results for {0}';
1198
+ __decorate([
1199
+ property({ type: String })
1200
+ ], Autosuggest.prototype, "attach", void 0);
1201
+ __decorate([
1202
+ property({ type: Boolean, attribute: 'request-on-focus' })
1203
+ ], Autosuggest.prototype, "requestOnFocus", void 0);
1204
+ __decorate([
1205
+ property({ type: Boolean, reflect: true, attribute: 'more-results' })
1206
+ ], Autosuggest.prototype, "moreResults", void 0);
1207
+ __decorate([
1208
+ property({ type: String, attribute: 'more-search-text' })
1209
+ ], Autosuggest.prototype, "moreSearchText", void 0);
1210
+ __decorate([
1211
+ property({ type: Boolean, reflect: true })
1212
+ ], Autosuggest.prototype, "loading", void 0);
1213
+ __decorate([
1214
+ property({ type: Object, attribute: false })
1215
+ ], Autosuggest.prototype, "query", void 0);
1216
+ __decorate([
1217
+ property({ type: Number, attribute: 'debounce-rate' })
1218
+ ], Autosuggest.prototype, "debounceRate", void 0);
1219
+ __decorate([
1220
+ property({ type: Function, attribute: false })
1221
+ ], Autosuggest.prototype, "renderer", void 0);
1222
+ __decorate([
1223
+ property({ type: Function, attribute: false })
1224
+ ], Autosuggest.prototype, "highlightable", void 0);
1225
+ __decorate([
1226
+ property({ type: Array, attribute: false })
1227
+ ], Autosuggest.prototype, "suggestions", void 0);
1228
+ __decorate([
1229
+ property({ type: Boolean, attribute: 'html-renderer' })
1230
+ ], Autosuggest.prototype, "htmlRenderer", void 0);
1231
+ __decorate([
1232
+ query('#moreResults')
1233
+ ], Autosuggest.prototype, "moreResultsItem", void 0);
1234
+ __decorate([
1235
+ query('#contentSlot')
1236
+ ], Autosuggest.prototype, "contentSlot", void 0);
1237
+ __decorate([
1238
+ query('[part="content"]')
1239
+ ], Autosuggest.prototype, "contentElement", void 0);
1240
+ __decorate([
1241
+ query('[part="header"]')
1242
+ ], Autosuggest.prototype, "headerElement", void 0);
1243
+ __decorate([
1244
+ query('[part="footer"]')
1245
+ ], Autosuggest.prototype, "footerElement", void 0);
1246
+ Autosuggest = Autosuggest_1 = __decorate([
1247
+ customElement('ef-autosuggest', {
1248
+ alias: 'emerald-autosuggest'
1249
+ })
1250
+ ], Autosuggest);
1251
+ export { Autosuggest };