igniteui-webcomponents 7.2.4 → 7.3.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1012) hide show
  1. package/CHANGELOG.md +162 -0
  2. package/animations/player.d.ts +7 -2
  3. package/animations/player.js +2 -3
  4. package/animations/player.js.map +1 -1
  5. package/animations/view-transition.js +1 -1
  6. package/animations/view-transition.js.map +1 -1
  7. package/components/accordion/accordion.d.ts +1 -1
  8. package/components/accordion/accordion.js +11 -22
  9. package/components/accordion/accordion.js.map +1 -1
  10. package/components/avatar/avatar.d.ts +0 -1
  11. package/components/avatar/avatar.js +8 -12
  12. package/components/avatar/avatar.js.map +1 -1
  13. package/components/avatar/themes/themes.d.ts +1 -1
  14. package/components/avatar/themes/themes.js.map +1 -1
  15. package/components/badge/badge.d.ts +2 -4
  16. package/components/badge/badge.js +9 -13
  17. package/components/badge/badge.js.map +1 -1
  18. package/components/badge/themes/themes.d.ts +1 -1
  19. package/components/badge/themes/themes.js.map +1 -1
  20. package/components/banner/banner.d.ts +8 -7
  21. package/components/banner/banner.js +27 -25
  22. package/components/banner/banner.js.map +1 -1
  23. package/components/banner/themes/themes.d.ts +1 -1
  24. package/components/banner/themes/themes.js.map +1 -1
  25. package/components/button/button-base.d.ts +3 -3
  26. package/components/button/button-base.js +9 -8
  27. package/components/button/button-base.js.map +1 -1
  28. package/components/button/button.d.ts +3 -3
  29. package/components/button/button.js +2 -2
  30. package/components/button/button.js.map +1 -1
  31. package/components/button/icon-button.js +3 -3
  32. package/components/button/icon-button.js.map +1 -1
  33. package/components/button/themes/button/themes.d.ts +1 -1
  34. package/components/button/themes/button/themes.js.map +1 -1
  35. package/components/button/themes/icon-button/themes.d.ts +1 -1
  36. package/components/button/themes/icon-button/themes.js.map +1 -1
  37. package/components/button-group/button-group.d.ts +41 -21
  38. package/components/button-group/button-group.js +95 -105
  39. package/components/button-group/button-group.js.map +1 -1
  40. package/components/button-group/themes/button.d.ts +1 -1
  41. package/components/button-group/themes/button.js.map +1 -1
  42. package/components/button-group/themes/group.d.ts +1 -1
  43. package/components/button-group/themes/group.js.map +1 -1
  44. package/components/button-group/toggle-button.d.ts +17 -10
  45. package/components/button-group/toggle-button.js +28 -13
  46. package/components/button-group/toggle-button.js.map +1 -1
  47. package/components/calendar/base.d.ts +28 -19
  48. package/components/calendar/base.js +20 -44
  49. package/components/calendar/base.js.map +1 -1
  50. package/components/calendar/calendar.d.ts +38 -7
  51. package/components/calendar/calendar.js +96 -85
  52. package/components/calendar/calendar.js.map +1 -1
  53. package/components/calendar/days-view/days-view.d.ts +49 -22
  54. package/components/calendar/days-view/days-view.js +102 -163
  55. package/components/calendar/days-view/days-view.js.map +1 -1
  56. package/components/calendar/helpers.d.ts +3 -62
  57. package/components/calendar/helpers.js +6 -110
  58. package/components/calendar/helpers.js.map +1 -1
  59. package/components/calendar/months-view/months-view.d.ts +8 -22
  60. package/components/calendar/months-view/months-view.js +30 -83
  61. package/components/calendar/months-view/months-view.js.map +1 -1
  62. package/components/calendar/selection.d.ts +21 -0
  63. package/components/calendar/selection.js +42 -0
  64. package/components/calendar/selection.js.map +1 -0
  65. package/components/calendar/themes/calendar.d.ts +1 -1
  66. package/components/calendar/themes/calendar.js.map +1 -1
  67. package/components/calendar/themes/days.d.ts +1 -1
  68. package/components/calendar/themes/days.js.map +1 -1
  69. package/components/calendar/themes/year-month.d.ts +1 -1
  70. package/components/calendar/themes/year-month.js.map +1 -1
  71. package/components/calendar/types.d.ts +18 -0
  72. package/components/calendar/types.js.map +1 -1
  73. package/components/calendar/year-month-view.base.d.ts +44 -0
  74. package/components/calendar/year-month-view.base.js +89 -0
  75. package/components/calendar/year-month-view.base.js.map +1 -0
  76. package/components/calendar/years-view/years-view.d.ts +7 -20
  77. package/components/calendar/years-view/years-view.js +25 -79
  78. package/components/calendar/years-view/years-view.js.map +1 -1
  79. package/components/card/card.actions.js +2 -2
  80. package/components/card/card.actions.js.map +1 -1
  81. package/components/card/card.content.d.ts +1 -1
  82. package/components/card/card.content.js +2 -2
  83. package/components/card/card.content.js.map +1 -1
  84. package/components/card/card.d.ts +1 -1
  85. package/components/card/card.header.js +2 -2
  86. package/components/card/card.header.js.map +1 -1
  87. package/components/card/card.js +2 -2
  88. package/components/card/card.js.map +1 -1
  89. package/components/card/card.media.d.ts +1 -1
  90. package/components/card/card.media.js +1 -1
  91. package/components/card/card.media.js.map +1 -1
  92. package/components/card/themes/actions.d.ts +1 -1
  93. package/components/card/themes/actions.js.map +1 -1
  94. package/components/card/themes/container.d.ts +1 -1
  95. package/components/card/themes/container.js.map +1 -1
  96. package/components/card/themes/content.d.ts +1 -1
  97. package/components/card/themes/content.js.map +1 -1
  98. package/components/card/themes/header.d.ts +1 -1
  99. package/components/card/themes/header.js.map +1 -1
  100. package/components/carousel/animations.d.ts +1 -1
  101. package/components/carousel/animations.js +2 -2
  102. package/components/carousel/animations.js.map +1 -1
  103. package/components/carousel/carousel-indicator-container.js +4 -4
  104. package/components/carousel/carousel-indicator-container.js.map +1 -1
  105. package/components/carousel/carousel-indicator.d.ts +2 -2
  106. package/components/carousel/carousel-indicator.js +17 -17
  107. package/components/carousel/carousel-indicator.js.map +1 -1
  108. package/components/carousel/carousel-slide.d.ts +1 -3
  109. package/components/carousel/carousel-slide.js +16 -18
  110. package/components/carousel/carousel-slide.js.map +1 -1
  111. package/components/carousel/carousel.d.ts +58 -41
  112. package/components/carousel/carousel.js +170 -145
  113. package/components/carousel/carousel.js.map +1 -1
  114. package/components/carousel/themes/carousel.base.css.js +1 -1
  115. package/components/carousel/themes/carousel.base.css.js.map +1 -1
  116. package/components/carousel/themes/container.d.ts +1 -1
  117. package/components/carousel/themes/container.js.map +1 -1
  118. package/components/carousel/themes/indicator-container.d.ts +1 -1
  119. package/components/carousel/themes/indicator-container.js.map +1 -1
  120. package/components/chat/chat-input.d.ts +4 -4
  121. package/components/chat/chat-input.js +28 -27
  122. package/components/chat/chat-input.js.map +1 -1
  123. package/components/chat/chat-message.d.ts +1 -1
  124. package/components/chat/chat-message.js +7 -6
  125. package/components/chat/chat-message.js.map +1 -1
  126. package/components/chat/chat-state.d.ts +2 -2
  127. package/components/chat/chat-state.js +2 -1
  128. package/components/chat/chat-state.js.map +1 -1
  129. package/components/chat/chat.d.ts +4 -6
  130. package/components/chat/chat.js +13 -19
  131. package/components/chat/chat.js.map +1 -1
  132. package/components/chat/message-attachments.js +5 -5
  133. package/components/chat/message-attachments.js.map +1 -1
  134. package/components/chat/themes/attachments.d.ts +1 -1
  135. package/components/chat/themes/attachments.js.map +1 -1
  136. package/components/chat/themes/input.d.ts +1 -1
  137. package/components/chat/themes/input.js.map +1 -1
  138. package/components/chat/themes/message.d.ts +1 -1
  139. package/components/chat/themes/message.js.map +1 -1
  140. package/components/chat/themes/themes.d.ts +1 -1
  141. package/components/chat/themes/themes.js.map +1 -1
  142. package/components/chat/types.d.ts +2 -2
  143. package/components/chat/types.js.map +1 -1
  144. package/components/chat/utils.d.ts +1 -1
  145. package/components/chat/utils.js +3 -3
  146. package/components/chat/utils.js.map +1 -1
  147. package/components/checkbox/checkbox-base.d.ts +7 -7
  148. package/components/checkbox/checkbox-base.js +7 -7
  149. package/components/checkbox/checkbox-base.js.map +1 -1
  150. package/components/checkbox/checkbox.d.ts +3 -5
  151. package/components/checkbox/checkbox.js +40 -50
  152. package/components/checkbox/checkbox.js.map +1 -1
  153. package/components/checkbox/switch.d.ts +1 -1
  154. package/components/checkbox/switch.js +30 -40
  155. package/components/checkbox/switch.js.map +1 -1
  156. package/components/checkbox/themes/checkbox-themes.d.ts +1 -1
  157. package/components/checkbox/themes/checkbox-themes.js.map +1 -1
  158. package/components/checkbox/themes/switch-themes.d.ts +1 -1
  159. package/components/checkbox/themes/switch-themes.js.map +1 -1
  160. package/components/checkbox/validators.d.ts +1 -1
  161. package/components/checkbox/validators.js +1 -1
  162. package/components/checkbox/validators.js.map +1 -1
  163. package/components/chip/chip.d.ts +9 -16
  164. package/components/chip/chip.js +21 -38
  165. package/components/chip/chip.js.map +1 -1
  166. package/components/chip/themes/chip.base.css.js +1 -1
  167. package/components/chip/themes/chip.base.css.js.map +1 -1
  168. package/components/chip/themes/dark/chip.bootstrap.css.js +1 -1
  169. package/components/chip/themes/dark/chip.bootstrap.css.js.map +1 -1
  170. package/components/chip/themes/dark/chip.fluent.css.js +1 -1
  171. package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
  172. package/components/chip/themes/dark/chip.indigo.css.js +1 -1
  173. package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
  174. package/components/chip/themes/dark/chip.material.css.js +1 -1
  175. package/components/chip/themes/dark/chip.material.css.js.map +1 -1
  176. package/components/chip/themes/light/chip.bootstrap.css.js +1 -1
  177. package/components/chip/themes/light/chip.bootstrap.css.js.map +1 -1
  178. package/components/chip/themes/light/chip.fluent.css.js +1 -1
  179. package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
  180. package/components/chip/themes/light/chip.indigo.css.js +1 -1
  181. package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
  182. package/components/chip/themes/light/chip.material.css.js +1 -1
  183. package/components/chip/themes/light/chip.material.css.js.map +1 -1
  184. package/components/chip/themes/light/chip.shared.css.js +1 -1
  185. package/components/chip/themes/light/chip.shared.css.js.map +1 -1
  186. package/components/chip/themes/shared/chip.bootstrap.css.js +1 -1
  187. package/components/chip/themes/shared/chip.bootstrap.css.js.map +1 -1
  188. package/components/chip/themes/shared/chip.common.css.js +1 -1
  189. package/components/chip/themes/shared/chip.common.css.js.map +1 -1
  190. package/components/chip/themes/shared/chip.fluent.css.js +1 -1
  191. package/components/chip/themes/shared/chip.fluent.css.js.map +1 -1
  192. package/components/chip/themes/shared/chip.indigo.css.js +1 -1
  193. package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
  194. package/components/chip/themes/themes.d.ts +1 -1
  195. package/components/chip/themes/themes.js.map +1 -1
  196. package/components/combo/combo-header.js +2 -2
  197. package/components/combo/combo-header.js.map +1 -1
  198. package/components/combo/combo-item.d.ts +1 -5
  199. package/components/combo/combo-item.js +8 -18
  200. package/components/combo/combo-item.js.map +1 -1
  201. package/components/combo/combo.d.ts +89 -45
  202. package/components/combo/combo.js +244 -229
  203. package/components/combo/combo.js.map +1 -1
  204. package/components/combo/controllers/data.d.ts +30 -3
  205. package/components/combo/controllers/data.js +34 -9
  206. package/components/combo/controllers/data.js.map +1 -1
  207. package/components/combo/controllers/navigation.d.ts +8 -2
  208. package/components/combo/controllers/navigation.js +11 -12
  209. package/components/combo/controllers/navigation.js.map +1 -1
  210. package/components/combo/operations/filter.d.ts +17 -1
  211. package/components/combo/operations/filter.js +29 -9
  212. package/components/combo/operations/filter.js.map +1 -1
  213. package/components/combo/operations/group.js +1 -1
  214. package/components/combo/operations/group.js.map +1 -1
  215. package/components/combo/themes/combo.base.css.js +1 -1
  216. package/components/combo/themes/combo.base.css.js.map +1 -1
  217. package/components/combo/themes/themes.d.ts +1 -1
  218. package/components/combo/themes/themes.js.map +1 -1
  219. package/components/combo/types.d.ts +8 -4
  220. package/components/combo/types.js.map +1 -1
  221. package/components/combo/validators.d.ts +1 -1
  222. package/components/combo/validators.js.map +1 -1
  223. package/components/date-picker/date-picker.base.d.ts +297 -0
  224. package/components/date-picker/date-picker.base.js +473 -0
  225. package/components/date-picker/date-picker.base.js.map +1 -0
  226. package/components/date-picker/date-picker.d.ts +53 -174
  227. package/components/date-picker/date-picker.js +90 -403
  228. package/components/date-picker/date-picker.js.map +1 -1
  229. package/components/date-picker/themes/themes.d.ts +1 -1
  230. package/components/date-picker/themes/themes.js.map +1 -1
  231. package/components/date-picker/validators.d.ts +1 -1
  232. package/components/date-picker/validators.js +2 -2
  233. package/components/date-picker/validators.js.map +1 -1
  234. package/components/date-range-picker/date-range-input.d.ts +14 -18
  235. package/components/date-range-picker/date-range-input.js +39 -126
  236. package/components/date-range-picker/date-range-input.js.map +1 -1
  237. package/components/date-range-picker/date-range-mask-parser.d.ts +22 -34
  238. package/components/date-range-picker/date-range-mask-parser.js +38 -69
  239. package/components/date-range-picker/date-range-mask-parser.js.map +1 -1
  240. package/components/date-range-picker/date-range-picker.d.ts +93 -190
  241. package/components/date-range-picker/date-range-picker.js +208 -543
  242. package/components/date-range-picker/date-range-picker.js.map +1 -1
  243. package/components/date-range-picker/predefined-ranges-area.d.ts +4 -4
  244. package/components/date-range-picker/predefined-ranges-area.js +8 -10
  245. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  246. package/components/date-range-picker/themes/ranges-themes.d.ts +1 -1
  247. package/components/date-range-picker/themes/ranges-themes.js.map +1 -1
  248. package/components/date-range-picker/themes/themes.d.ts +1 -1
  249. package/components/date-range-picker/themes/themes.js.map +1 -1
  250. package/components/date-range-picker/validators.d.ts +1 -1
  251. package/components/date-range-picker/validators.js +10 -30
  252. package/components/date-range-picker/validators.js.map +1 -1
  253. package/components/date-time-input/date-part.d.ts +20 -2
  254. package/components/date-time-input/date-part.js +48 -75
  255. package/components/date-time-input/date-part.js.map +1 -1
  256. package/components/date-time-input/date-time-input.base.d.ts +101 -35
  257. package/components/date-time-input/date-time-input.base.js +142 -46
  258. package/components/date-time-input/date-time-input.base.js.map +1 -1
  259. package/components/date-time-input/date-time-input.d.ts +14 -26
  260. package/components/date-time-input/date-time-input.js +37 -90
  261. package/components/date-time-input/date-time-input.js.map +1 -1
  262. package/components/date-time-input/datetime-mask-parser.d.ts +53 -109
  263. package/components/date-time-input/datetime-mask-parser.js +93 -144
  264. package/components/date-time-input/datetime-mask-parser.js.map +1 -1
  265. package/components/date-time-input/validators.d.ts +1 -1
  266. package/components/date-time-input/validators.js +3 -14
  267. package/components/date-time-input/validators.js.map +1 -1
  268. package/components/dialog/dialog.d.ts +8 -9
  269. package/components/dialog/dialog.js +38 -44
  270. package/components/dialog/dialog.js.map +1 -1
  271. package/components/dialog/themes/themes.d.ts +1 -1
  272. package/components/dialog/themes/themes.js.map +1 -1
  273. package/components/divider/divider.d.ts +3 -5
  274. package/components/divider/divider.js +11 -20
  275. package/components/divider/divider.js.map +1 -1
  276. package/components/divider/themes/themes.d.ts +1 -1
  277. package/components/divider/themes/themes.js.map +1 -1
  278. package/components/dropdown/dropdown-group.d.ts +10 -3
  279. package/components/dropdown/dropdown-group.js +16 -5
  280. package/components/dropdown/dropdown-group.js.map +1 -1
  281. package/components/dropdown/dropdown-header.d.ts +2 -2
  282. package/components/dropdown/dropdown-header.js +7 -2
  283. package/components/dropdown/dropdown-header.js.map +1 -1
  284. package/components/dropdown/dropdown-item.d.ts +4 -4
  285. package/components/dropdown/dropdown-item.js +3 -3
  286. package/components/dropdown/dropdown-item.js.map +1 -1
  287. package/components/dropdown/dropdown.d.ts +75 -32
  288. package/components/dropdown/dropdown.js +189 -110
  289. package/components/dropdown/dropdown.js.map +1 -1
  290. package/components/dropdown/themes/container.d.ts +1 -1
  291. package/components/dropdown/themes/container.js.map +1 -1
  292. package/components/dropdown/themes/group.d.ts +1 -1
  293. package/components/dropdown/themes/group.js.map +1 -1
  294. package/components/dropdown/themes/header.d.ts +1 -1
  295. package/components/dropdown/themes/header.js.map +1 -1
  296. package/components/dropdown/themes/item.d.ts +1 -1
  297. package/components/dropdown/themes/item.js.map +1 -1
  298. package/components/expansion-panel/expansion-panel.d.ts +27 -8
  299. package/components/expansion-panel/expansion-panel.js +33 -43
  300. package/components/expansion-panel/expansion-panel.js.map +1 -1
  301. package/components/expansion-panel/themes/themes.d.ts +1 -1
  302. package/components/expansion-panel/themes/themes.js.map +1 -1
  303. package/components/file-input/file-input.d.ts +19 -23
  304. package/components/file-input/file-input.js +21 -34
  305. package/components/file-input/file-input.js.map +1 -1
  306. package/components/file-input/themes/themes.d.ts +1 -1
  307. package/components/file-input/themes/themes.js.map +1 -1
  308. package/components/file-input/validators.d.ts +1 -1
  309. package/components/file-input/validators.js +1 -1
  310. package/components/file-input/validators.js.map +1 -1
  311. package/components/focus-trap/focus-trap.js +3 -2
  312. package/components/focus-trap/focus-trap.js.map +1 -1
  313. package/components/highlight/highlight.d.ts +6 -8
  314. package/components/highlight/highlight.js +14 -22
  315. package/components/highlight/highlight.js.map +1 -1
  316. package/components/highlight/service.d.ts +4 -1
  317. package/components/highlight/service.js +23 -7
  318. package/components/highlight/service.js.map +1 -1
  319. package/components/highlight/themes/themes.d.ts +1 -1
  320. package/components/highlight/themes/themes.js.map +1 -1
  321. package/components/icon/icon-references.d.ts +3 -2
  322. package/components/icon/icon-references.js +103 -491
  323. package/components/icon/icon-references.js.map +1 -1
  324. package/components/icon/icon-state.broadcast.d.ts +14 -17
  325. package/components/icon/icon-state.broadcast.js +19 -20
  326. package/components/icon/icon-state.broadcast.js.map +1 -1
  327. package/components/icon/icon.d.ts +11 -23
  328. package/components/icon/icon.js +36 -28
  329. package/components/icon/icon.js.map +1 -1
  330. package/components/icon/icon.registry.d.ts +69 -131
  331. package/components/icon/icon.registry.js +51 -53
  332. package/components/icon/icon.registry.js.map +1 -1
  333. package/components/icon/internal-icons-lib.js +2 -2
  334. package/components/icon/internal-icons-lib.js.map +1 -1
  335. package/components/icon/registry/parser.d.ts +15 -3
  336. package/components/icon/registry/parser.js +36 -11
  337. package/components/icon/registry/parser.js.map +1 -1
  338. package/components/icon/registry/types.d.ts +55 -11
  339. package/components/icon/registry/types.js.map +1 -1
  340. package/components/icon/themes/icon.base.css.js +1 -1
  341. package/components/icon/themes/icon.base.css.js.map +1 -1
  342. package/components/icon/themes/shared/icon.common.css.js +1 -1
  343. package/components/icon/themes/shared/icon.common.css.js.map +1 -1
  344. package/components/icon/themes/themes.d.ts +1 -1
  345. package/components/icon/themes/themes.js.map +1 -1
  346. package/components/input/input-base.d.ts +10 -25
  347. package/components/input/input-base.js +14 -23
  348. package/components/input/input-base.js.map +1 -1
  349. package/components/input/input.d.ts +23 -30
  350. package/components/input/input.js +38 -69
  351. package/components/input/input.js.map +1 -1
  352. package/components/input/themes/input.base.css.js +1 -1
  353. package/components/input/themes/input.base.css.js.map +1 -1
  354. package/components/input/themes/shared/input.bootstrap.css.js +1 -1
  355. package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
  356. package/components/input/themes/shared/input.common.css.js +1 -1
  357. package/components/input/themes/shared/input.common.css.js.map +1 -1
  358. package/components/input/themes/shared/input.fluent.css.js +1 -1
  359. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  360. package/components/input/themes/shared/input.indigo.css.js +1 -1
  361. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  362. package/components/input/themes/shared/input.material.css.js +1 -1
  363. package/components/input/themes/shared/input.material.css.js.map +1 -1
  364. package/components/input/themes/themes.d.ts +1 -1
  365. package/components/input/themes/themes.js.map +1 -1
  366. package/components/input/validators.d.ts +1 -1
  367. package/components/input/validators.js +1 -1
  368. package/components/input/validators.js.map +1 -1
  369. package/components/list/list-header.js +3 -3
  370. package/components/list/list-header.js.map +1 -1
  371. package/components/list/list-item.js +3 -3
  372. package/components/list/list-item.js.map +1 -1
  373. package/components/list/list.js +3 -3
  374. package/components/list/list.js.map +1 -1
  375. package/components/list/themes/container.d.ts +1 -1
  376. package/components/list/themes/container.js.map +1 -1
  377. package/components/list/themes/header.d.ts +1 -1
  378. package/components/list/themes/header.js.map +1 -1
  379. package/components/list/themes/item.d.ts +1 -1
  380. package/components/list/themes/item.js.map +1 -1
  381. package/components/mask-input/mask-history.d.ts +99 -0
  382. package/components/mask-input/mask-history.js +95 -0
  383. package/components/mask-input/mask-history.js.map +1 -0
  384. package/components/mask-input/mask-input.d.ts +14 -9
  385. package/components/mask-input/mask-input.js +20 -26
  386. package/components/mask-input/mask-input.js.map +1 -1
  387. package/components/mask-input/mask-parser.d.ts +20 -2
  388. package/components/mask-input/mask-parser.js +21 -13
  389. package/components/mask-input/mask-parser.js.map +1 -1
  390. package/components/mask-input/validators.d.ts +1 -1
  391. package/components/mask-input/validators.js +1 -1
  392. package/components/mask-input/validators.js.map +1 -1
  393. package/components/nav-drawer/nav-drawer-header-item.d.ts +1 -1
  394. package/components/nav-drawer/nav-drawer-header-item.js +2 -2
  395. package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
  396. package/components/nav-drawer/nav-drawer-item.d.ts +2 -2
  397. package/components/nav-drawer/nav-drawer-item.js +4 -4
  398. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  399. package/components/nav-drawer/nav-drawer.d.ts +10 -10
  400. package/components/nav-drawer/nav-drawer.js +23 -37
  401. package/components/nav-drawer/nav-drawer.js.map +1 -1
  402. package/components/nav-drawer/themes/container.base.css.js +1 -1
  403. package/components/nav-drawer/themes/container.base.css.js.map +1 -1
  404. package/components/nav-drawer/themes/container.d.ts +1 -1
  405. package/components/nav-drawer/themes/container.js +2 -3
  406. package/components/nav-drawer/themes/container.js.map +1 -1
  407. package/components/nav-drawer/themes/dark/container/nav-drawer.shared.css.js +1 -1
  408. package/components/nav-drawer/themes/dark/container/nav-drawer.shared.css.js.map +1 -1
  409. package/components/nav-drawer/themes/header-item.d.ts +1 -1
  410. package/components/nav-drawer/themes/header-item.js.map +1 -1
  411. package/components/nav-drawer/themes/item.d.ts +1 -1
  412. package/components/nav-drawer/themes/item.js.map +1 -1
  413. package/components/nav-drawer/themes/light/container/nav-drawer.bootstrap.css.js +1 -1
  414. package/components/nav-drawer/themes/light/container/nav-drawer.bootstrap.css.js.map +1 -1
  415. package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js +1 -1
  416. package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js.map +1 -1
  417. package/components/nav-drawer/themes/light/container/nav-drawer.indigo.css.js +1 -1
  418. package/components/nav-drawer/themes/light/container/nav-drawer.indigo.css.js.map +1 -1
  419. package/components/nav-drawer/themes/light/container/nav-drawer.shared.css.js +1 -1
  420. package/components/nav-drawer/themes/light/container/nav-drawer.shared.css.js.map +1 -1
  421. package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js +1 -1
  422. package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js.map +1 -1
  423. package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js +1 -1
  424. package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js.map +1 -1
  425. package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js +1 -1
  426. package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js.map +1 -1
  427. package/components/navbar/navbar.js +2 -2
  428. package/components/navbar/navbar.js.map +1 -1
  429. package/components/navbar/themes/themes.d.ts +1 -1
  430. package/components/navbar/themes/themes.js.map +1 -1
  431. package/components/popover/popover.d.ts +10 -3
  432. package/components/popover/popover.js +114 -99
  433. package/components/popover/popover.js.map +1 -1
  434. package/components/progress/base.d.ts +5 -8
  435. package/components/progress/base.js +25 -48
  436. package/components/progress/base.js.map +1 -1
  437. package/components/progress/circular-gradient.d.ts +2 -2
  438. package/components/progress/circular-gradient.js +1 -1
  439. package/components/progress/circular-gradient.js.map +1 -1
  440. package/components/progress/circular-progress.d.ts +15 -15
  441. package/components/progress/circular-progress.js +7 -6
  442. package/components/progress/circular-progress.js.map +1 -1
  443. package/components/progress/linear-progress.d.ts +12 -12
  444. package/components/progress/linear-progress.js +4 -4
  445. package/components/progress/linear-progress.js.map +1 -1
  446. package/components/progress/themes/circular/circular.progress.base.css.js +1 -1
  447. package/components/progress/themes/circular/circular.progress.base.css.js.map +1 -1
  448. package/components/progress/themes/circular/themes.d.ts +1 -1
  449. package/components/progress/themes/circular/themes.js.map +1 -1
  450. package/components/progress/themes/linear/linear.progress.base.css.js +1 -1
  451. package/components/progress/themes/linear/linear.progress.base.css.js.map +1 -1
  452. package/components/progress/themes/linear/themes.d.ts +1 -1
  453. package/components/progress/themes/linear/themes.js.map +1 -1
  454. package/components/qr-code/model/encode.d.ts +20 -0
  455. package/components/qr-code/model/encode.js +166 -0
  456. package/components/qr-code/model/encode.js.map +1 -0
  457. package/components/qr-code/model/error-correction.d.ts +15 -0
  458. package/components/qr-code/model/error-correction.js +1114 -0
  459. package/components/qr-code/model/error-correction.js.map +1 -0
  460. package/components/qr-code/model/mask.d.ts +11 -0
  461. package/components/qr-code/model/mask.js +161 -0
  462. package/components/qr-code/model/mask.js.map +1 -0
  463. package/components/qr-code/model/matrix.d.ts +15 -0
  464. package/components/qr-code/model/matrix.js +277 -0
  465. package/components/qr-code/model/matrix.js.map +1 -0
  466. package/components/qr-code/qr-code.d.ts +134 -0
  467. package/components/qr-code/qr-code.js +222 -0
  468. package/components/qr-code/qr-code.js.map +1 -0
  469. package/components/qr-code/renderer/constants.d.ts +26 -0
  470. package/components/qr-code/renderer/constants.js +5 -0
  471. package/components/qr-code/renderer/constants.js.map +1 -0
  472. package/components/qr-code/renderer/corner.d.ts +23 -0
  473. package/components/qr-code/renderer/corner.js +25 -0
  474. package/components/qr-code/renderer/corner.js.map +1 -0
  475. package/components/qr-code/renderer/dots.d.ts +14 -0
  476. package/components/qr-code/renderer/dots.js +7 -0
  477. package/components/qr-code/renderer/dots.js.map +1 -0
  478. package/components/qr-code/renderer/helpers.d.ts +18 -0
  479. package/components/qr-code/renderer/helpers.js +158 -0
  480. package/components/qr-code/renderer/helpers.js.map +1 -0
  481. package/components/qr-code/renderer/image.d.ts +23 -0
  482. package/components/qr-code/renderer/image.js +29 -0
  483. package/components/qr-code/renderer/image.js.map +1 -0
  484. package/components/qr-code/themes/dark/qr-code.bootstrap.css.js +3 -0
  485. package/components/qr-code/themes/dark/qr-code.bootstrap.css.js.map +1 -0
  486. package/components/qr-code/themes/dark/qr-code.fluent.css.d.ts +1 -0
  487. package/components/qr-code/themes/dark/qr-code.fluent.css.js +3 -0
  488. package/components/qr-code/themes/dark/qr-code.fluent.css.js.map +1 -0
  489. package/components/qr-code/themes/dark/qr-code.indigo.css.d.ts +1 -0
  490. package/components/qr-code/themes/dark/qr-code.indigo.css.js +3 -0
  491. package/components/qr-code/themes/dark/qr-code.indigo.css.js.map +1 -0
  492. package/components/qr-code/themes/dark/qr-code.material.css.d.ts +1 -0
  493. package/components/qr-code/themes/dark/qr-code.material.css.js +3 -0
  494. package/components/qr-code/themes/dark/qr-code.material.css.js.map +1 -0
  495. package/components/qr-code/themes/light/qr-code.bootstrap.css.d.ts +1 -0
  496. package/components/qr-code/themes/light/qr-code.bootstrap.css.js +3 -0
  497. package/components/qr-code/themes/light/qr-code.bootstrap.css.js.map +1 -0
  498. package/components/qr-code/themes/light/qr-code.fluent.css.d.ts +1 -0
  499. package/components/qr-code/themes/light/qr-code.fluent.css.js +3 -0
  500. package/components/qr-code/themes/light/qr-code.fluent.css.js.map +1 -0
  501. package/components/qr-code/themes/light/qr-code.indigo.css.d.ts +1 -0
  502. package/components/qr-code/themes/light/qr-code.indigo.css.js +3 -0
  503. package/components/qr-code/themes/light/qr-code.indigo.css.js.map +1 -0
  504. package/components/qr-code/themes/light/qr-code.material.css.d.ts +1 -0
  505. package/components/qr-code/themes/light/qr-code.material.css.js +3 -0
  506. package/components/qr-code/themes/light/qr-code.material.css.js.map +1 -0
  507. package/components/qr-code/themes/light/qr-code.shared.css.d.ts +1 -0
  508. package/components/qr-code/themes/light/qr-code.shared.css.js +3 -0
  509. package/components/qr-code/themes/light/qr-code.shared.css.js.map +1 -0
  510. package/components/qr-code/themes/qr-code.base.css.d.ts +1 -0
  511. package/components/qr-code/themes/qr-code.base.css.js +3 -0
  512. package/components/qr-code/themes/qr-code.base.css.js.map +1 -0
  513. package/components/qr-code/themes/shared/qr-code.common.css.d.ts +1 -0
  514. package/components/qr-code/themes/shared/qr-code.common.css.js +3 -0
  515. package/components/qr-code/themes/shared/qr-code.common.css.js.map +1 -0
  516. package/components/qr-code/themes/themes.d.ts +2 -0
  517. package/components/qr-code/themes/themes.js +46 -0
  518. package/components/qr-code/themes/themes.js.map +1 -0
  519. package/components/qr-code/types.d.ts +16 -0
  520. package/components/qr-code/types.js +2 -0
  521. package/components/qr-code/types.js.map +1 -0
  522. package/components/radio/controller.d.ts +7 -0
  523. package/components/radio/controller.js +14 -0
  524. package/components/radio/controller.js.map +1 -0
  525. package/components/radio/radio.d.ts +30 -18
  526. package/components/radio/radio.js +90 -89
  527. package/components/radio/radio.js.map +1 -1
  528. package/components/radio/themes/themes.d.ts +1 -1
  529. package/components/radio/themes/themes.js.map +1 -1
  530. package/components/radio/validators.d.ts +1 -1
  531. package/components/radio/validators.js +5 -3
  532. package/components/radio/validators.js.map +1 -1
  533. package/components/radio-group/radio-group.d.ts +17 -9
  534. package/components/radio-group/radio-group.js +46 -44
  535. package/components/radio-group/radio-group.js.map +1 -1
  536. package/components/radio-group/themes/themes.d.ts +1 -1
  537. package/components/radio-group/themes/themes.js.map +1 -1
  538. package/components/rating/rating-symbol.d.ts +1 -1
  539. package/components/rating/rating-symbol.js +1 -1
  540. package/components/rating/rating-symbol.js.map +1 -1
  541. package/components/rating/rating.d.ts +30 -18
  542. package/components/rating/rating.js +90 -81
  543. package/components/rating/rating.js.map +1 -1
  544. package/components/rating/themes/themes.d.ts +1 -1
  545. package/components/rating/themes/themes.js.map +1 -1
  546. package/components/resize-container/default-ghost.js +4 -3
  547. package/components/resize-container/default-ghost.js.map +1 -1
  548. package/components/resize-container/resize-container.d.ts +3 -3
  549. package/components/resize-container/resize-container.js +9 -7
  550. package/components/resize-container/resize-container.js.map +1 -1
  551. package/components/resize-container/resize-controller.js +6 -5
  552. package/components/resize-container/resize-controller.js.map +1 -1
  553. package/components/resize-container/themes/themes.d.ts +1 -1
  554. package/components/resize-container/themes/themes.js.map +1 -1
  555. package/components/ripple/ripple.d.ts +1 -1
  556. package/components/ripple/ripple.js +3 -2
  557. package/components/ripple/ripple.js.map +1 -1
  558. package/components/select/select-group.d.ts +11 -3
  559. package/components/select/select-group.js +21 -9
  560. package/components/select/select-group.js.map +1 -1
  561. package/components/select/select-header.d.ts +1 -1
  562. package/components/select/select-header.js +7 -2
  563. package/components/select/select-header.js.map +1 -1
  564. package/components/select/select-item.d.ts +4 -4
  565. package/components/select/select-item.js +3 -3
  566. package/components/select/select-item.js.map +1 -1
  567. package/components/select/select.d.ts +48 -28
  568. package/components/select/select.js +143 -94
  569. package/components/select/select.js.map +1 -1
  570. package/components/select/themes/select.base.css.js +1 -1
  571. package/components/select/themes/select.base.css.js.map +1 -1
  572. package/components/select/themes/themes.d.ts +1 -1
  573. package/components/select/themes/themes.js.map +1 -1
  574. package/components/select/validators.d.ts +1 -1
  575. package/components/select/validators.js +1 -1
  576. package/components/select/validators.js.map +1 -1
  577. package/components/slider/range-slider.d.ts +5 -4
  578. package/components/slider/range-slider.js +25 -73
  579. package/components/slider/range-slider.js.map +1 -1
  580. package/components/slider/slider-base.d.ts +9 -6
  581. package/components/slider/slider-base.js +35 -32
  582. package/components/slider/slider-base.js.map +1 -1
  583. package/components/slider/slider-label.js +1 -1
  584. package/components/slider/slider-label.js.map +1 -1
  585. package/components/slider/slider.d.ts +3 -3
  586. package/components/slider/slider.js +15 -11
  587. package/components/slider/slider.js.map +1 -1
  588. package/components/slider/themes/themes.d.ts +1 -1
  589. package/components/slider/themes/themes.js.map +1 -1
  590. package/components/snackbar/snackbar.d.ts +3 -3
  591. package/components/snackbar/snackbar.js +4 -4
  592. package/components/snackbar/snackbar.js.map +1 -1
  593. package/components/snackbar/themes/themes.d.ts +1 -1
  594. package/components/snackbar/themes/themes.js.map +1 -1
  595. package/components/splitter/splitter.d.ts +107 -24
  596. package/components/splitter/splitter.js +234 -147
  597. package/components/splitter/splitter.js.map +1 -1
  598. package/components/splitter/themes/themes.d.ts +1 -1
  599. package/components/splitter/themes/themes.js.map +1 -1
  600. package/components/splitter/types.d.ts +14 -3
  601. package/components/splitter/types.js.map +1 -1
  602. package/components/stepper/common/animations.d.ts +1 -1
  603. package/components/stepper/common/animations.js +2 -2
  604. package/components/stepper/common/animations.js.map +1 -1
  605. package/components/stepper/step.d.ts +4 -1
  606. package/components/stepper/step.js +16 -12
  607. package/components/stepper/step.js.map +1 -1
  608. package/components/stepper/stepper.d.ts +5 -16
  609. package/components/stepper/stepper.js +27 -89
  610. package/components/stepper/stepper.js.map +1 -1
  611. package/components/stepper/themes/step/themes.d.ts +1 -1
  612. package/components/stepper/themes/step/themes.js.map +1 -1
  613. package/components/tabs/tab-dom.d.ts +31 -28
  614. package/components/tabs/tab-dom.js +84 -34
  615. package/components/tabs/tab-dom.js.map +1 -1
  616. package/components/tabs/tab.d.ts +24 -6
  617. package/components/tabs/tab.js +36 -14
  618. package/components/tabs/tab.js.map +1 -1
  619. package/components/tabs/tabs.d.ts +37 -27
  620. package/components/tabs/tabs.js +118 -129
  621. package/components/tabs/tabs.js.map +1 -1
  622. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js +1 -1
  623. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js.map +1 -1
  624. package/components/tabs/themes/tab-themes.d.ts +1 -1
  625. package/components/tabs/themes/tab-themes.js.map +1 -1
  626. package/components/tabs/themes/tabs-themes.d.ts +1 -1
  627. package/components/tabs/themes/tabs-themes.js.map +1 -1
  628. package/components/tabs/themes/tabs.base.css.js +1 -1
  629. package/components/tabs/themes/tabs.base.css.js.map +1 -1
  630. package/components/textarea/textarea.d.ts +24 -20
  631. package/components/textarea/textarea.js +25 -27
  632. package/components/textarea/textarea.js.map +1 -1
  633. package/components/textarea/themes/themes.d.ts +1 -1
  634. package/components/textarea/themes/themes.js.map +1 -1
  635. package/components/textarea/validators.d.ts +1 -1
  636. package/components/textarea/validators.js +1 -1
  637. package/components/textarea/validators.js.map +1 -1
  638. package/components/theme-provider/theme-provider.d.ts +3 -5
  639. package/components/theme-provider/theme-provider.js +13 -23
  640. package/components/theme-provider/theme-provider.js.map +1 -1
  641. package/components/tile-manager/position.d.ts +1 -1
  642. package/components/tile-manager/position.js +2 -2
  643. package/components/tile-manager/position.js.map +1 -1
  644. package/components/tile-manager/resize-state.js +4 -3
  645. package/components/tile-manager/resize-state.js.map +1 -1
  646. package/components/tile-manager/themes/container.d.ts +1 -1
  647. package/components/tile-manager/themes/container.js.map +1 -1
  648. package/components/tile-manager/themes/tile.d.ts +1 -1
  649. package/components/tile-manager/themes/tile.js.map +1 -1
  650. package/components/tile-manager/tile-ghost-util.js +1 -1
  651. package/components/tile-manager/tile-ghost-util.js.map +1 -1
  652. package/components/tile-manager/tile-manager.d.ts +11 -22
  653. package/components/tile-manager/tile-manager.js +50 -81
  654. package/components/tile-manager/tile-manager.js.map +1 -1
  655. package/components/tile-manager/tile.d.ts +14 -22
  656. package/components/tile-manager/tile.js +66 -80
  657. package/components/tile-manager/tile.js.map +1 -1
  658. package/components/toast/themes/themes.d.ts +1 -1
  659. package/components/toast/themes/themes.js.map +1 -1
  660. package/components/toast/toast.d.ts +1 -1
  661. package/components/toast/toast.js +3 -3
  662. package/components/toast/toast.js.map +1 -1
  663. package/components/tooltip/controller.d.ts +18 -16
  664. package/components/tooltip/controller.js +62 -41
  665. package/components/tooltip/controller.js.map +1 -1
  666. package/components/tooltip/service.d.ts +2 -1
  667. package/components/tooltip/service.js +10 -15
  668. package/components/tooltip/service.js.map +1 -1
  669. package/components/tooltip/themes/shared/tooltip.common.css.js +1 -1
  670. package/components/tooltip/themes/shared/tooltip.common.css.js.map +1 -1
  671. package/components/tooltip/themes/shared/tooltip.indigo.css.js +1 -1
  672. package/components/tooltip/themes/shared/tooltip.indigo.css.js.map +1 -1
  673. package/components/tooltip/themes/themes.d.ts +1 -1
  674. package/components/tooltip/themes/themes.js.map +1 -1
  675. package/components/tooltip/themes/tooltip.base.css.js +1 -1
  676. package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
  677. package/components/tooltip/tooltip.d.ts +68 -25
  678. package/components/tooltip/tooltip.js +130 -88
  679. package/components/tooltip/tooltip.js.map +1 -1
  680. package/components/tree/themes/container.base.css.js +1 -1
  681. package/components/tree/themes/container.base.css.js.map +1 -1
  682. package/components/tree/themes/container.d.ts +1 -1
  683. package/components/tree/themes/container.js.map +1 -1
  684. package/components/tree/themes/item.base.css.js +1 -1
  685. package/components/tree/themes/item.base.css.js.map +1 -1
  686. package/components/tree/themes/item.d.ts +1 -1
  687. package/components/tree/themes/item.js.map +1 -1
  688. package/components/tree/tree-item.d.ts +62 -36
  689. package/components/tree/tree-item.js +198 -208
  690. package/components/tree/tree-item.js.map +1 -1
  691. package/components/tree/tree.common.d.ts +16 -1
  692. package/components/tree/tree.common.js +40 -1
  693. package/components/tree/tree.common.js.map +1 -1
  694. package/components/tree/tree.d.ts +17 -23
  695. package/components/tree/tree.js +68 -94
  696. package/components/tree/tree.js.map +1 -1
  697. package/components/tree/tree.navigation.d.ts +39 -29
  698. package/components/tree/tree.navigation.js +140 -192
  699. package/components/tree/tree.navigation.js.map +1 -1
  700. package/components/tree/tree.selection.d.ts +32 -31
  701. package/components/tree/tree.selection.js +184 -178
  702. package/components/tree/tree.selection.js.map +1 -1
  703. package/components/types.js.map +1 -1
  704. package/components/validation-container/validation-container.d.ts +2 -3
  705. package/components/validation-container/validation-container.js +7 -6
  706. package/components/validation-container/validation-container.js.map +1 -1
  707. package/components/virtualization/engine.d.ts +94 -0
  708. package/components/virtualization/engine.js +217 -0
  709. package/components/virtualization/engine.js.map +1 -0
  710. package/components/virtualization/types.d.ts +54 -0
  711. package/components/virtualization/types.js +14 -0
  712. package/components/virtualization/types.js.map +1 -0
  713. package/components/virtualization/virtualization.d.ts +249 -0
  714. package/components/virtualization/virtualization.js +482 -0
  715. package/components/virtualization/virtualization.js.map +1 -0
  716. package/components/visually-hidden/visually-hidden.js +1 -1
  717. package/components/visually-hidden/visually-hidden.js.map +1 -1
  718. package/custom-elements.json +50649 -38832
  719. package/extras/chat-markdown-renderer.d.ts +1 -1
  720. package/extras/chat-markdown-renderer.js.map +1 -1
  721. package/igniteui-webcomponents.css-data.json +2 -2
  722. package/igniteui-webcomponents.html-data.json +1 -1
  723. package/index.d.ts +17 -12
  724. package/index.js +11 -9
  725. package/index.js.map +1 -1
  726. package/internals/abort-handler.js.map +1 -0
  727. package/internals/context.d.ts +39 -0
  728. package/{components/common → internals}/context.js +2 -1
  729. package/internals/context.js.map +1 -0
  730. package/internals/controllers/adopt-styles.d.ts +76 -0
  731. package/internals/controllers/adopt-styles.js +173 -0
  732. package/internals/controllers/adopt-styles.js.map +1 -0
  733. package/internals/controllers/aria-projection.d.ts +144 -0
  734. package/internals/controllers/aria-projection.js +138 -0
  735. package/internals/controllers/aria-projection.js.map +1 -0
  736. package/{components/common → internals}/controllers/async-consumer.js +8 -7
  737. package/internals/controllers/async-consumer.js.map +1 -0
  738. package/internals/controllers/command.js.map +1 -0
  739. package/internals/controllers/context-provider.d.ts +48 -0
  740. package/internals/controllers/context-provider.js +29 -0
  741. package/internals/controllers/context-provider.js.map +1 -0
  742. package/{components/common → internals}/controllers/drag.js +8 -7
  743. package/internals/controllers/drag.js.map +1 -0
  744. package/{components/common → internals}/controllers/focus-ring.js +5 -2
  745. package/internals/controllers/focus-ring.js.map +1 -0
  746. package/{components/common → internals}/controllers/fullscreen.js +6 -3
  747. package/internals/controllers/fullscreen.js.map +1 -0
  748. package/{components/common → internals}/controllers/gestures.d.ts +1 -1
  749. package/{components/common → internals}/controllers/gestures.js +7 -4
  750. package/internals/controllers/gestures.js.map +1 -0
  751. package/internals/controllers/group.d.ts +64 -0
  752. package/internals/controllers/group.js +104 -0
  753. package/internals/controllers/group.js.map +1 -0
  754. package/{components/common → internals}/controllers/id-resolver.js +15 -21
  755. package/internals/controllers/id-resolver.js.map +1 -0
  756. package/{components/common → internals}/controllers/internals.d.ts +52 -3
  757. package/{components/common → internals}/controllers/internals.js +35 -0
  758. package/internals/controllers/internals.js.map +1 -0
  759. package/{components/common → internals}/controllers/key-bindings.d.ts +8 -5
  760. package/{components/common → internals}/controllers/key-bindings.js +46 -29
  761. package/internals/controllers/key-bindings.js.map +1 -0
  762. package/{components/common → internals}/controllers/mutation-observer.d.ts +3 -2
  763. package/{components/common → internals}/controllers/mutation-observer.js +24 -22
  764. package/internals/controllers/mutation-observer.js.map +1 -0
  765. package/{components/common → internals}/controllers/resize-observer.d.ts +11 -1
  766. package/{components/common → internals}/controllers/resize-observer.js +13 -2
  767. package/internals/controllers/resize-observer.js.map +1 -0
  768. package/{components/common → internals}/controllers/root-click.js +8 -13
  769. package/internals/controllers/root-click.js.map +1 -0
  770. package/{components/common → internals}/controllers/root-scroll.d.ts +11 -8
  771. package/internals/controllers/root-scroll.js +71 -0
  772. package/internals/controllers/root-scroll.js.map +1 -0
  773. package/internals/controllers/roving-focus.d.ts +72 -0
  774. package/internals/controllers/roving-focus.js +61 -0
  775. package/internals/controllers/roving-focus.js.map +1 -0
  776. package/{components/common → internals}/controllers/slot.d.ts +25 -1
  777. package/{components/common → internals}/controllers/slot.js +22 -6
  778. package/internals/controllers/slot.js.map +1 -0
  779. package/internals/controllers/toggle.d.ts +96 -0
  780. package/internals/controllers/toggle.js +65 -0
  781. package/internals/controllers/toggle.js.map +1 -0
  782. package/internals/date/compare.d.ts +2 -0
  783. package/internals/date/compare.js +23 -0
  784. package/internals/date/compare.js.map +1 -0
  785. package/internals/date/converters.d.ts +18 -0
  786. package/internals/date/converters.js +70 -0
  787. package/internals/date/converters.js.map +1 -0
  788. package/{components/calendar → internals/date}/model.d.ts +10 -3
  789. package/{components/calendar → internals/date}/model.js +29 -0
  790. package/internals/date/model.js.map +1 -0
  791. package/internals/decorators/blazorAdditionalDependencies.js.map +1 -0
  792. package/internals/decorators/blazorDeepImport.js.map +1 -0
  793. package/internals/decorators/blazorInclude.js.map +1 -0
  794. package/internals/decorators/blazorIndirectRender.js.map +1 -0
  795. package/internals/decorators/blazorSuppressComponent.js.map +1 -0
  796. package/internals/decorators/coerced-property.d.ts +47 -0
  797. package/internals/decorators/coerced-property.js +36 -0
  798. package/internals/decorators/coerced-property.js.map +1 -0
  799. package/internals/decorators/shadow-options.js.map +1 -0
  800. package/internals/definitions/defineAllComponents.js +153 -0
  801. package/internals/definitions/defineAllComponents.js.map +1 -0
  802. package/internals/definitions/defineComponents.js.map +1 -0
  803. package/internals/definitions/register.js.map +1 -0
  804. package/{components/common → internals}/i18n/EN/calendar.resources.js +1 -1
  805. package/internals/i18n/EN/calendar.resources.js.map +1 -0
  806. package/internals/i18n/EN/chat.resources.js.map +1 -0
  807. package/internals/i18n/EN/date-picker.resources.js.map +1 -0
  808. package/internals/i18n/EN/date-range-picker.resources.js.map +1 -0
  809. package/{components/common → internals}/i18n/i18n-controller.d.ts +22 -3
  810. package/{components/common → internals}/i18n/i18n-controller.js +28 -6
  811. package/internals/i18n/i18n-controller.js.map +1 -0
  812. package/{components/common → internals}/i18n/utils.js +1 -1
  813. package/internals/i18n/utils.js.map +1 -0
  814. package/{components/common → internals}/mixins/alert.d.ts +3 -3
  815. package/{components/common → internals}/mixins/alert.js +8 -6
  816. package/internals/mixins/alert.js.map +1 -0
  817. package/{components/common → internals}/mixins/combo-box.d.ts +13 -14
  818. package/{components/common → internals}/mixins/combo-box.js +15 -36
  819. package/internals/mixins/combo-box.js.map +1 -0
  820. package/internals/mixins/constructor.js.map +1 -0
  821. package/internals/mixins/event-emitter.js.map +1 -0
  822. package/{components/common → internals}/mixins/forms/associated-required.js +10 -19
  823. package/internals/mixins/forms/associated-required.js.map +1 -0
  824. package/{components/common → internals}/mixins/forms/associated.js +63 -38
  825. package/internals/mixins/forms/associated.js.map +1 -0
  826. package/{components/common → internals}/mixins/forms/form-transformers.d.ts +1 -1
  827. package/{components/common → internals}/mixins/forms/form-transformers.js +2 -2
  828. package/internals/mixins/forms/form-transformers.js.map +1 -0
  829. package/internals/mixins/forms/form-value.js.map +1 -0
  830. package/{components/common → internals}/mixins/forms/types.d.ts +25 -7
  831. package/internals/mixins/forms/types.js.map +1 -0
  832. package/internals/mixins/i18n.d.ts +31 -0
  833. package/internals/mixins/i18n.js +36 -0
  834. package/internals/mixins/i18n.js.map +1 -0
  835. package/{components/common → internals}/mixins/mask-behavior.d.ts +17 -8
  836. package/{components/common → internals}/mixins/mask-behavior.js +118 -31
  837. package/internals/mixins/mask-behavior.js.map +1 -0
  838. package/{components/common → internals}/mixins/option.d.ts +0 -2
  839. package/{components/common → internals}/mixins/option.js +5 -6
  840. package/internals/mixins/option.js.map +1 -0
  841. package/internals/part-map.js.map +1 -0
  842. package/{components/common → internals}/templates/input-shell.d.ts +8 -1
  843. package/{components/common → internals}/templates/input-shell.js +14 -4
  844. package/internals/templates/input-shell.js.map +1 -0
  845. package/{components/common → internals}/templates/masked-input.d.ts +8 -4
  846. package/{components/common → internals}/templates/masked-input.js +4 -3
  847. package/internals/templates/masked-input.js.map +1 -0
  848. package/internals/templates/slotted-icon.d.ts +32 -0
  849. package/internals/templates/slotted-icon.js +19 -0
  850. package/internals/templates/slotted-icon.js.map +1 -0
  851. package/internals/templates/toggle-shell.d.ts +46 -0
  852. package/internals/templates/toggle-shell.js +38 -0
  853. package/internals/templates/toggle-shell.js.map +1 -0
  854. package/internals/timing.d.ts +32 -0
  855. package/internals/timing.js +20 -0
  856. package/internals/timing.js.map +1 -0
  857. package/internals/utils/arrays.d.ts +53 -0
  858. package/internals/utils/arrays.js +31 -0
  859. package/internals/utils/arrays.js.map +1 -0
  860. package/internals/utils/dom.d.ts +114 -0
  861. package/internals/utils/dom.js +157 -0
  862. package/internals/utils/dom.js.map +1 -0
  863. package/internals/utils/events.d.ts +41 -0
  864. package/internals/utils/events.js +37 -0
  865. package/internals/utils/events.js.map +1 -0
  866. package/internals/utils/lit.d.ts +8 -0
  867. package/internals/utils/lit.js +15 -0
  868. package/internals/utils/lit.js.map +1 -0
  869. package/internals/utils/math.d.ts +50 -0
  870. package/internals/utils/math.js +38 -0
  871. package/internals/utils/math.js.map +1 -0
  872. package/internals/utils/objects.d.ts +25 -0
  873. package/internals/utils/objects.js +125 -0
  874. package/internals/utils/objects.js.map +1 -0
  875. package/internals/utils/strings.d.ts +44 -0
  876. package/internals/utils/strings.js +46 -0
  877. package/internals/utils/strings.js.map +1 -0
  878. package/internals/utils/types.d.ts +13 -0
  879. package/internals/utils/types.js +31 -0
  880. package/internals/utils/types.js.map +1 -0
  881. package/{components/common → internals}/validators.d.ts +24 -1
  882. package/{components/common → internals}/validators.js +25 -2
  883. package/internals/validators.js.map +1 -0
  884. package/package.json +15 -7
  885. package/themes/dark/bootstrap.css +1 -1
  886. package/themes/dark/fluent.css +1 -1
  887. package/themes/dark/indigo.css +1 -1
  888. package/themes/dark/material.css +1 -1
  889. package/themes/light/bootstrap.css +1 -1
  890. package/themes/light/fluent.css +1 -1
  891. package/themes/light/indigo.css +1 -1
  892. package/themes/light/material.css +1 -1
  893. package/theming/theming-controller.d.ts +5 -5
  894. package/theming/theming-controller.js.map +1 -1
  895. package/web-types.json +3 -3
  896. package/components/calendar/model.js.map +0 -1
  897. package/components/combo/combo-list.d.ts +0 -11
  898. package/components/combo/combo-list.js +0 -13
  899. package/components/combo/combo-list.js.map +0 -1
  900. package/components/common/abort-handler.js.map +0 -1
  901. package/components/common/context.d.ts +0 -25
  902. package/components/common/context.js.map +0 -1
  903. package/components/common/controllers/adopt-styles.d.ts +0 -124
  904. package/components/common/controllers/adopt-styles.js +0 -75
  905. package/components/common/controllers/adopt-styles.js.map +0 -1
  906. package/components/common/controllers/async-consumer.js.map +0 -1
  907. package/components/common/controllers/command.js.map +0 -1
  908. package/components/common/controllers/drag.js.map +0 -1
  909. package/components/common/controllers/focus-ring.js.map +0 -1
  910. package/components/common/controllers/fullscreen.js.map +0 -1
  911. package/components/common/controllers/gestures.js.map +0 -1
  912. package/components/common/controllers/id-resolver.js.map +0 -1
  913. package/components/common/controllers/internals.js.map +0 -1
  914. package/components/common/controllers/key-bindings.js.map +0 -1
  915. package/components/common/controllers/mutation-observer.js.map +0 -1
  916. package/components/common/controllers/resize-observer.js.map +0 -1
  917. package/components/common/controllers/root-click.js.map +0 -1
  918. package/components/common/controllers/root-scroll.js +0 -63
  919. package/components/common/controllers/root-scroll.js.map +0 -1
  920. package/components/common/controllers/slot.js.map +0 -1
  921. package/components/common/decorators/blazorAdditionalDependencies.js.map +0 -1
  922. package/components/common/decorators/blazorDeepImport.js.map +0 -1
  923. package/components/common/decorators/blazorInclude.js.map +0 -1
  924. package/components/common/decorators/blazorIndirectRender.js.map +0 -1
  925. package/components/common/decorators/blazorSuppressComponent.js.map +0 -1
  926. package/components/common/decorators/shadow-options.js.map +0 -1
  927. package/components/common/decorators/watch.d.ts +0 -5
  928. package/components/common/decorators/watch.js +0 -19
  929. package/components/common/decorators/watch.js.map +0 -1
  930. package/components/common/definitions/defineAllComponents.js +0 -151
  931. package/components/common/definitions/defineAllComponents.js.map +0 -1
  932. package/components/common/definitions/defineComponents.js.map +0 -1
  933. package/components/common/definitions/register.js.map +0 -1
  934. package/components/common/i18n/EN/calendar.resources.js.map +0 -1
  935. package/components/common/i18n/EN/chat.resources.js.map +0 -1
  936. package/components/common/i18n/EN/date-picker.resources.js.map +0 -1
  937. package/components/common/i18n/EN/date-range-picker.resources.js.map +0 -1
  938. package/components/common/i18n/i18n-controller.js.map +0 -1
  939. package/components/common/i18n/utils.js.map +0 -1
  940. package/components/common/mixins/alert.js.map +0 -1
  941. package/components/common/mixins/combo-box.js.map +0 -1
  942. package/components/common/mixins/constructor.js.map +0 -1
  943. package/components/common/mixins/event-emitter.js.map +0 -1
  944. package/components/common/mixins/forms/associated-required.js.map +0 -1
  945. package/components/common/mixins/forms/associated.js.map +0 -1
  946. package/components/common/mixins/forms/form-transformers.js.map +0 -1
  947. package/components/common/mixins/forms/form-value.js.map +0 -1
  948. package/components/common/mixins/forms/types.js.map +0 -1
  949. package/components/common/mixins/mask-behavior.js.map +0 -1
  950. package/components/common/mixins/option.js.map +0 -1
  951. package/components/common/part-map.js.map +0 -1
  952. package/components/common/templates/input-shell.js.map +0 -1
  953. package/components/common/templates/masked-input.js.map +0 -1
  954. package/components/common/util.d.ts +0 -196
  955. package/components/common/util.js +0 -390
  956. package/components/common/util.js.map +0 -1
  957. package/components/common/validators.js.map +0 -1
  958. package/components/icon/registry/default-map.d.ts +0 -107
  959. package/components/icon/registry/default-map.js +0 -25
  960. package/components/icon/registry/default-map.js.map +0 -1
  961. package/components/nav-drawer/themes/shared/container/nav-drawer.fluent.css.js +0 -3
  962. package/components/nav-drawer/themes/shared/container/nav-drawer.fluent.css.js.map +0 -1
  963. package/components/radio/utils.d.ts +0 -13
  964. package/components/radio/utils.js +0 -37
  965. package/components/radio/utils.js.map +0 -1
  966. /package/components/{nav-drawer/themes/shared/container/nav-drawer.fluent.css.d.ts → qr-code/themes/dark/qr-code.bootstrap.css.d.ts} +0 -0
  967. /package/{components/common → internals}/abort-handler.d.ts +0 -0
  968. /package/{components/common → internals}/abort-handler.js +0 -0
  969. /package/{components/common → internals}/controllers/async-consumer.d.ts +0 -0
  970. /package/{components/common → internals}/controllers/command.d.ts +0 -0
  971. /package/{components/common → internals}/controllers/command.js +0 -0
  972. /package/{components/common → internals}/controllers/drag.d.ts +0 -0
  973. /package/{components/common → internals}/controllers/focus-ring.d.ts +0 -0
  974. /package/{components/common → internals}/controllers/fullscreen.d.ts +0 -0
  975. /package/{components/common → internals}/controllers/id-resolver.d.ts +0 -0
  976. /package/{components/common → internals}/controllers/root-click.d.ts +0 -0
  977. /package/{components/common → internals}/decorators/blazorAdditionalDependencies.d.ts +0 -0
  978. /package/{components/common → internals}/decorators/blazorAdditionalDependencies.js +0 -0
  979. /package/{components/common → internals}/decorators/blazorDeepImport.d.ts +0 -0
  980. /package/{components/common → internals}/decorators/blazorDeepImport.js +0 -0
  981. /package/{components/common → internals}/decorators/blazorInclude.d.ts +0 -0
  982. /package/{components/common → internals}/decorators/blazorInclude.js +0 -0
  983. /package/{components/common → internals}/decorators/blazorIndirectRender.d.ts +0 -0
  984. /package/{components/common → internals}/decorators/blazorIndirectRender.js +0 -0
  985. /package/{components/common → internals}/decorators/blazorSuppressComponent.d.ts +0 -0
  986. /package/{components/common → internals}/decorators/blazorSuppressComponent.js +0 -0
  987. /package/{components/common → internals}/decorators/shadow-options.d.ts +0 -0
  988. /package/{components/common → internals}/decorators/shadow-options.js +0 -0
  989. /package/{components/common → internals}/definitions/defineAllComponents.d.ts +0 -0
  990. /package/{components/common → internals}/definitions/defineComponents.d.ts +0 -0
  991. /package/{components/common → internals}/definitions/defineComponents.js +0 -0
  992. /package/{components/common → internals}/definitions/register.d.ts +0 -0
  993. /package/{components/common → internals}/definitions/register.js +0 -0
  994. /package/{components/common → internals}/i18n/EN/calendar.resources.d.ts +0 -0
  995. /package/{components/common → internals}/i18n/EN/chat.resources.d.ts +0 -0
  996. /package/{components/common → internals}/i18n/EN/chat.resources.js +0 -0
  997. /package/{components/common → internals}/i18n/EN/date-picker.resources.d.ts +0 -0
  998. /package/{components/common → internals}/i18n/EN/date-picker.resources.js +0 -0
  999. /package/{components/common → internals}/i18n/EN/date-range-picker.resources.d.ts +0 -0
  1000. /package/{components/common → internals}/i18n/EN/date-range-picker.resources.js +0 -0
  1001. /package/{components/common → internals}/i18n/utils.d.ts +0 -0
  1002. /package/{components/common → internals}/mixins/constructor.d.ts +0 -0
  1003. /package/{components/common → internals}/mixins/constructor.js +0 -0
  1004. /package/{components/common → internals}/mixins/event-emitter.d.ts +0 -0
  1005. /package/{components/common → internals}/mixins/event-emitter.js +0 -0
  1006. /package/{components/common → internals}/mixins/forms/associated-required.d.ts +0 -0
  1007. /package/{components/common → internals}/mixins/forms/associated.d.ts +0 -0
  1008. /package/{components/common → internals}/mixins/forms/form-value.d.ts +0 -0
  1009. /package/{components/common → internals}/mixins/forms/form-value.js +0 -0
  1010. /package/{components/common → internals}/mixins/forms/types.js +0 -0
  1011. /package/{components/common → internals}/part-map.d.ts +0 -0
  1012. /package/{components/common → internals}/part-map.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"validation-container.js","sourceRoot":"","sources":["../../../src/components/validation-container/validation-container.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, isServer, LitElement, nothing, type TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport { createAbortHandle } from '../common/abort-handler.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport {\n type IgcFormControl,\n InternalInvalidEvent,\n InternalResetEvent,\n} from '../common/mixins/forms/types.js';\nimport { partMap } from '../common/part-map.js';\nimport { isEmpty, toKebabCase } from '../common/util.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { all as inputThemes } from '../input/themes/themes.js';\nimport { styles as shared } from './themes/shared/validator.common.css.js';\nimport { styles } from './themes/validator.base.css.js';\n\n/** Configuration for the validation container. */\ninterface ValidationContainerConfig {\n /** The id attribute for the validation container. */\n id?: string;\n /** Project the validation container to the given slot inside the host shadow DOM. */\n slot?: string;\n /** Additional part(s) that should be bound to the validation container. */\n part?: string;\n /** Whether the validation container should expose a helper-text slot. */\n hasHelperText?: boolean;\n}\n\nconst ALL_SLOTS_SELECTOR = 'slot';\nconst QUERY_CONFIG: AssignedNodesOptions = { flatten: true };\n\n/**\n * Validity flags rendered as validation message slots, in a stable order so the\n * generated slots are deterministic across browsers.\n */\nconst VALIDITY_KEYS: ReadonlyArray<keyof ValidityStateFlags> = [\n 'badInput',\n 'customError',\n 'patternMismatch',\n 'rangeOverflow',\n 'rangeUnderflow',\n 'stepMismatch',\n 'tooLong',\n 'tooShort',\n 'typeMismatch',\n 'valueMissing',\n];\n\n/**\n * Yields the active validation slot names for the given validity state, in a\n * stable order (`invalid` first, then each failing constraint).\n */\nfunction* activeValidationSlots(validity: ValidityState): Generator<string> {\n if (!validity.valid) {\n yield 'invalid';\n }\n\n for (const key of VALIDITY_KEYS) {\n if (validity[key]) {\n yield toKebabCase(key);\n }\n }\n}\n\n/* blazorSuppress */\n/**\n * @element igc-validator\n *\n * @csspart helper-text - The base wrapper\n * @csspart validation-message - The validation error message container\n * @csspart validation-icon - The validation error icon\n */\nexport default class IgcValidationContainerComponent extends LitElement {\n public static readonly tagName = 'igc-validator';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcValidationContainerComponent, IgcIconComponent);\n }\n\n /**\n * Creates a validation container for the given form control.\n *\n * The container will render validation messages based on the control's validity state\n * and projected content, and reflect the control's `invalid` state.\n */\n public static create(\n host: IgcFormControl,\n config: ValidationContainerConfig = {\n id: 'helper-text',\n hasHelperText: true,\n }\n ): TemplateResult {\n const helperText = config.hasHelperText\n ? html`<slot name=\"helper-text\" slot=\"helper-text\"></slot>`\n : nothing;\n\n // `hasUpdated` is false during SSR and the host's hydrating render, so both\n // emit `nothing`. The real validation slots are projected post-hydration.\n const validationSlots = host.hasUpdated\n ? Iterator.from(activeValidationSlots(host.validity))\n .map((name) => html`<slot name=${name} slot=${name}></slot>`)\n .toArray()\n : nothing;\n\n return html`\n <igc-validator\n id=${ifDefined(config.id)}\n part=${ifDefined(config.part)}\n slot=${ifDefined(config.slot)}\n ?invalid=${host.invalid}\n .target=${host}\n exportparts=\"helper-text, validation-message, validation-icon\"\n >\n ${helperText}${validationSlots}\n </igc-validator>\n `;\n }\n\n private readonly _abortHandle = createAbortHandle();\n private _target!: IgcFormControl;\n\n /**\n * Whether the container is in an invalid state.\n *\n * This is reflected from the target's `invalid` property,\n * and is used to determine whether to render the validation message slots.\n */\n @property({ type: Boolean })\n public invalid = false;\n\n /**\n * The form control whose validity state is being rendered. The target's `invalid`\n * property is reflected to the container, and its validity state is used to\n * determine which validation message slots to render.\n *\n * @remarks The target must be set for the container to function, and should be\n * set before the first update cycle for SSR compatibility. When using the\n * `create` method, the target is set automatically.\n */\n @property({ attribute: false })\n public set target(value: IgcFormControl) {\n if (this._target === value) {\n return;\n }\n\n this._abortHandle.abort();\n const { signal } = this._abortHandle;\n\n this._target = value;\n this._target.addEventListener(InternalInvalidEvent, this, { signal });\n this._target.addEventListener(InternalResetEvent, this, { signal });\n }\n\n public get target(): IgcFormControl {\n return this._target;\n }\n\n constructor() {\n super();\n addThemingController(this, inputThemes);\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener('slotchange', this);\n return root;\n }\n\n /** @internal */\n public handleEvent(event: Event): void {\n switch (event.type) {\n case InternalInvalidEvent:\n this.invalid = true;\n break;\n case InternalResetEvent:\n this.invalid = false;\n break;\n }\n\n this.requestUpdate();\n }\n\n /**\n * Collects the projection state of the container slots in a single DOM pass.\n *\n * @returns Whether every slot is empty and the set of non-empty validation\n * slot names (i.e. excluding `helper-text`).\n */\n private _collectProjectedSlots(): {\n isProjectionEmpty: boolean;\n validation: Set<string>;\n } {\n const validation = new Set<string>();\n\n if (isServer || !this.hasUpdated) {\n return { isProjectionEmpty: false, validation };\n }\n\n const slots = Array.from(\n this.renderRoot.querySelectorAll<HTMLSlotElement>(ALL_SLOTS_SELECTOR)\n );\n let isProjectionEmpty = true;\n\n for (const slot of slots) {\n if (isEmpty(slot.assignedElements(QUERY_CONFIG))) {\n continue;\n }\n\n isProjectionEmpty = false;\n if (slot.name && slot.name !== 'helper-text') {\n validation.add(slot.name);\n }\n }\n\n return { isProjectionEmpty, validation };\n }\n\n protected _renderValidationMessage(\n slotName: string,\n projectedSlots: ReadonlySet<string>\n ): TemplateResult {\n const hasProjectedIcon = projectedSlots.has(slotName);\n const parts = { 'validation-message': true, empty: !hasProjectedIcon };\n const icon = hasProjectedIcon\n ? html`\n <igc-icon\n aria-hidden=\"true\"\n name=\"error\"\n part=\"validation-icon\"\n ></igc-icon>\n `\n : nothing;\n\n return html`<div part=${partMap(parts)}>\n ${icon}<slot name=${slotName}></slot>\n </div>`;\n }\n\n protected _renderHelper(\n hasValidationProjection: boolean\n ): TemplateResult | typeof nothing {\n return this.invalid && hasValidationProjection\n ? nothing\n : html`<slot name=\"helper-text\"></slot>`;\n }\n\n protected override firstUpdated(): void {\n // The first render is intentionally neutral to match the SSR output during\n // hydration. Only reconcile when the field hydrated in an invalid state, and\n // do it off the current update cycle so we don't schedule an update as a side\n // effect of the one in progress, projecting the real validation messages now\n // that `hasUpdated` is true.\n if (this.invalid) {\n queueMicrotask(() => this.requestUpdate());\n }\n }\n\n protected override render(): TemplateResult {\n const { isProjectionEmpty, validation } = this._collectProjectedSlots();\n const messages =\n this.hasUpdated && this.invalid\n ? Iterator.from(activeValidationSlots(this.target.validity))\n .map((name) => this._renderValidationMessage(name, validation))\n .toArray()\n : nothing;\n\n return html`\n <div\n part=${partMap({ 'helper-text': true, empty: isProjectionEmpty })}\n aria-live=\"polite\"\n >\n ${messages}${this._renderHelper(!isEmpty(validation))}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-validator': IgcValidationContainerComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"validation-container.js","sourceRoot":"","sources":["../../../src/components/validation-container/validation-container.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, isServer, LitElement, nothing, type TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { createAbortHandle } from '#internals/abort-handler.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport {\n type IgcFormControl,\n InternalInvalidEvent,\n InternalResetEvent,\n} from '#internals/mixins/forms/types.js';\nimport { partMap } from '#internals/part-map.js';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { toKebabCase } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { all as inputThemes } from '../input/themes/themes.js';\nimport { styles as shared } from './themes/shared/validator.common.css.js';\nimport { styles } from './themes/validator.base.css.js';\n\n/** Configuration for the validation container. */\nexport interface ValidationContainerConfig {\n /** The id attribute for the validation container. */\n id?: string;\n /** Project the validation container to the given slot inside the host shadow DOM. */\n slot?: string;\n /** Additional part(s) that should be bound to the validation container. */\n part?: string;\n /** Whether the validation container should expose a helper-text slot. */\n hasHelperText?: boolean;\n}\n\nconst ALL_SLOTS_SELECTOR = 'slot';\nconst QUERY_CONFIG: AssignedNodesOptions = { flatten: true };\n\n/**\n * Validity flags rendered as validation message slots, in a stable order so the\n * generated slots are deterministic across browsers.\n */\nconst VALIDITY_KEYS: ReadonlyArray<keyof ValidityStateFlags> = [\n 'badInput',\n 'customError',\n 'patternMismatch',\n 'rangeOverflow',\n 'rangeUnderflow',\n 'stepMismatch',\n 'tooLong',\n 'tooShort',\n 'typeMismatch',\n 'valueMissing',\n];\n\n/**\n * Yields the active validation slot names for the given validity state, in a\n * stable order (`invalid` first, then each failing constraint).\n */\nfunction* activeValidationSlots(validity: ValidityState): Generator<string> {\n if (!validity.valid) {\n yield 'invalid';\n }\n\n for (const key of VALIDITY_KEYS) {\n if (validity[key]) {\n yield toKebabCase(key);\n }\n }\n}\n\n/* blazorSuppress */\n/**\n * @element igc-validator\n *\n * @csspart helper-text - The base wrapper\n * @csspart validation-message - The validation error message container\n * @csspart validation-icon - The validation error icon\n */\nexport default class IgcValidationContainerComponent extends LitElement {\n public static readonly tagName = 'igc-validator';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcValidationContainerComponent, IgcIconComponent);\n }\n\n /**\n * Creates a validation container for the given form control.\n *\n * The container will render validation messages based on the control's validity state\n * and projected content, and reflect the control's `invalid` state.\n */\n public static create(\n host: IgcFormControl,\n config: ValidationContainerConfig = {\n id: 'helper-text',\n hasHelperText: true,\n }\n ): TemplateResult {\n const helperText = config.hasHelperText\n ? html`<slot name=\"helper-text\" slot=\"helper-text\"></slot>`\n : nothing;\n\n // `hasUpdated` is false during SSR and the host's hydrating render, so both\n // emit `nothing`. The real validation slots are projected post-hydration.\n const validationSlots = host.hasUpdated\n ? Iterator.from(activeValidationSlots(host.validity))\n .map((name) => html`<slot name=${name} slot=${name}></slot>`)\n .toArray()\n : nothing;\n\n return html`\n <igc-validator\n id=${ifDefined(config.id)}\n part=${ifDefined(config.part)}\n slot=${ifDefined(config.slot)}\n ?invalid=${host.invalid}\n .target=${host}\n exportparts=\"helper-text, validation-message, validation-icon\"\n >\n ${helperText}${validationSlots}\n </igc-validator>\n `;\n }\n\n private readonly _abortHandle = createAbortHandle();\n private _target!: IgcFormControl;\n\n /**\n * Whether the container is in an invalid state.\n *\n * This is reflected from the target's `invalid` property,\n * and is used to determine whether to render the validation message slots.\n */\n @property({ type: Boolean })\n public invalid = false;\n\n /**\n * The form control whose validity state is being rendered. The target's `invalid`\n * property is reflected to the container, and its validity state is used to\n * determine which validation message slots to render.\n *\n * @remarks The target must be set for the container to function, and should be\n * set before the first update cycle for SSR compatibility. When using the\n * `create` method, the target is set automatically.\n */\n @property({ attribute: false })\n public set target(value: IgcFormControl) {\n if (this._target === value) {\n return;\n }\n\n this._abortHandle.abort();\n const { signal } = this._abortHandle;\n\n this._target = value;\n this._target.addEventListener(InternalInvalidEvent, this, { signal });\n this._target.addEventListener(InternalResetEvent, this, { signal });\n }\n\n public get target(): IgcFormControl {\n return this._target;\n }\n\n constructor() {\n super();\n addThemingController(this, inputThemes);\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener('slotchange', this);\n return root;\n }\n\n /** @internal */\n public handleEvent(event: Event): void {\n switch (event.type) {\n case InternalInvalidEvent:\n this.invalid = true;\n break;\n case InternalResetEvent:\n this.invalid = false;\n break;\n }\n\n this.requestUpdate();\n }\n\n /**\n * Collects the projection state of the container slots in a single DOM pass.\n *\n * @returns Whether every slot is empty and the set of non-empty validation\n * slot names (i.e. excluding `helper-text`).\n */\n private _collectProjectedSlots(): {\n isProjectionEmpty: boolean;\n validation: Set<string>;\n } {\n const validation = new Set<string>();\n\n if (isServer || !this.hasUpdated) {\n return { isProjectionEmpty: false, validation };\n }\n\n const slots = Array.from(\n this.renderRoot.querySelectorAll<HTMLSlotElement>(ALL_SLOTS_SELECTOR)\n );\n let isProjectionEmpty = true;\n\n for (const slot of slots) {\n if (isEmpty(slot.assignedElements(QUERY_CONFIG))) {\n continue;\n }\n\n isProjectionEmpty = false;\n if (slot.name && slot.name !== 'helper-text') {\n validation.add(slot.name);\n }\n }\n\n return { isProjectionEmpty, validation };\n }\n\n protected _renderValidationMessage(\n slotName: string,\n projectedSlots: ReadonlySet<string>\n ): TemplateResult {\n const hasProjectedIcon = projectedSlots.has(slotName);\n const parts = { 'validation-message': true, empty: !hasProjectedIcon };\n const icon = hasProjectedIcon\n ? html`\n <igc-icon\n aria-hidden=\"true\"\n name=\"error\"\n part=\"validation-icon\"\n ></igc-icon>\n `\n : nothing;\n\n return html`<div part=${partMap(parts)}>\n ${icon}<slot name=${slotName}></slot>\n </div>`;\n }\n\n protected _renderHelper(\n hasValidationProjection: boolean\n ): TemplateResult | typeof nothing {\n return this.invalid && hasValidationProjection\n ? nothing\n : html`<slot name=\"helper-text\"></slot>`;\n }\n\n protected override firstUpdated(): void {\n // The first render is intentionally neutral to match the SSR output during\n // hydration. Only reconcile when the field hydrated in an invalid state, and\n // do it off the current update cycle so we don't schedule an update as a side\n // effect of the one in progress, projecting the real validation messages now\n // that `hasUpdated` is true.\n if (this.invalid) {\n queueMicrotask(() => this.requestUpdate());\n }\n }\n\n protected override render(): TemplateResult {\n const { isProjectionEmpty, validation } = this._collectProjectedSlots();\n const messages =\n this.hasUpdated && this.invalid\n ? Iterator.from(activeValidationSlots(this.target.validity))\n .map((name) => this._renderValidationMessage(name, validation))\n .toArray()\n : nothing;\n\n return html`\n <div\n part=${partMap({ 'helper-text': true, empty: isProjectionEmpty })}\n aria-live=\"polite\"\n >\n ${messages}${this._renderHelper(!isEmpty(validation))}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-validator': IgcValidationContainerComponent;\n }\n}\n"]}
@@ -0,0 +1,94 @@
1
+ import type { ScrollAlignment, VisibleRange } from './types.js';
2
+ /**
3
+ * Pure scroll-math engine for one axis of virtual scrolling. A Fenwick tree
4
+ * holds all size state.
5
+ *
6
+ * ### Virtual and DOM coordinates
7
+ *
8
+ * Browsers limit how far an element can scroll. When the total item size is
9
+ * larger than that limit, the engine compresses the *virtual* space
10
+ * (`0…totalSize`) into the *DOM* space the browser can represent
11
+ * (`0…domSize`) by the factor `_virtualRatio`. Each offset that crosses that
12
+ * boundary is scaled: incoming scroll positions are multiplied by the ratio,
13
+ * and outgoing offsets are divided by it. Items render at their real pixel
14
+ * size, so item sizes are always virtual.
15
+ */
16
+ export declare class VirtualScrollEngine {
17
+ private _maxBrowserSize;
18
+ /**
19
+ * The ratio `totalSize / maxBrowserSize` when `totalSize` is larger than
20
+ * the maximum DOM coordinate the browser supports; `1` otherwise.
21
+ * Maps virtual scroll positions to DOM scroll positions.
22
+ */
23
+ private _virtualRatio;
24
+ /** Binary Indexed Tree for O(log N) size queries and updates. */
25
+ private _tree;
26
+ /**
27
+ * Called when item sizes or the item count change.
28
+ * Example: `() => this.requestUpdate()`.
29
+ */
30
+ onSizeChange: (() => void) | null;
31
+ /** Total virtual size of all items in px. */
32
+ get totalSize(): number;
33
+ /** Total size in DOM space, clamped to the maximum browser size. */
34
+ get domSize(): number;
35
+ /** Measures the maximum browser size for the document and rescales. */
36
+ initMaxBrowserSize(doc: Document): void;
37
+ /**
38
+ * Resizes the internal sizes array to `length`. Measured sizes below
39
+ * `retainCount` are kept. The remainder is filled with `estimatedSize` and
40
+ * marked unmeasured. Callers that only append can keep the default
41
+ * `retainCount`. Callers whose data changed identity at some index must
42
+ * pass that index, so the stale measurements after it are discarded.
43
+ */
44
+ resize(length: number, estimatedSize: number, retainCount?: number): void;
45
+ /** Records the measured DOM size for a single item. */
46
+ measureItem(index: number, size: number): void;
47
+ /**
48
+ * Applies a new estimated size to each item that is not measured in the
49
+ * DOM. Use this when `estimatedItemSize` changes but the item count does
50
+ * not, because `resize` is then a no-op.
51
+ */
52
+ updateEstimatedSize(estimatedSize: number): void;
53
+ /**
54
+ * Returns the DOM scroll offset in px that puts the item at `index` at the
55
+ * leading edge of the viewport.
56
+ */
57
+ getScrollOffsetForIndex(index: number): number;
58
+ /**
59
+ * The largest DOM scroll offset the host can reach for the given viewport
60
+ * size. A request beyond it does nothing, so offsets given to a caller
61
+ * that waits for the scroll to settle are clamped to it.
62
+ */
63
+ private _getMaxScrollOffset;
64
+ /**
65
+ * Returns the DOM scroll offset that positions the item at `index` in a
66
+ * `viewportSize` px viewport, aligned by `align` and clamped to the
67
+ * reachable scroll range.
68
+ *
69
+ * The slack is computed in virtual space against the item's real size and
70
+ * converted to DOM space once, at the end. One DOM pixel equals
71
+ * `_virtualRatio` virtual pixels, so mixed coordinates would scale the
72
+ * slack.
73
+ */
74
+ getAlignedScrollOffset(index: number, viewportSize: number, align: ScrollAlignment): number;
75
+ /**
76
+ * Whether the item at `index` is visible without more scrolling at the
77
+ * given DOM scroll position. True when the item is fully inside the
78
+ * viewport, or when it is larger than the viewport and covers it fully.
79
+ * The second case matches native `scrollIntoView({ block: 'nearest' })`.
80
+ */
81
+ isIndexInView(index: number, scrollPosition: number, viewportSize: number): boolean;
82
+ /**
83
+ * Returns the visible and over-scanned item range for the given scroll
84
+ * state.
85
+ */
86
+ getVisibleRange(scrollPosition: number, viewportSize: number, overScan: number): VisibleRange;
87
+ /**
88
+ * Sum of the actual sizes of the items in [startIndex, endIndex]. The
89
+ * render pass uses it to clamp the content translate offset, so rendered
90
+ * items do not overflow past `domSize` under coordinate compression.
91
+ */
92
+ getPhysicalRangeSize(startIndex: number, endIndex: number): number;
93
+ private _updateVirtualRatio;
94
+ }
@@ -0,0 +1,217 @@
1
+ import { clamp } from '#internals/utils/math.js';
2
+ const _maxBrowserSizeCache = new WeakMap();
3
+ function getMaxBrowserSizeProbePx(doc) {
4
+ const cached = _maxBrowserSizeCache.get(doc);
5
+ if (cached !== undefined) {
6
+ return cached;
7
+ }
8
+ const container = doc.body ?? doc.documentElement;
9
+ if (!container) {
10
+ return Number.POSITIVE_INFINITY;
11
+ }
12
+ const div = doc.createElement('div');
13
+ div.style.position = 'absolute';
14
+ div.style.top = `${Number.MAX_SAFE_INTEGER}px`;
15
+ div.style.width = '0';
16
+ div.style.height = '0';
17
+ div.style.visibility = 'hidden';
18
+ container.appendChild(div);
19
+ const scrollOffset = doc.documentElement?.scrollTop ?? 0;
20
+ const size = Math.abs(div.getBoundingClientRect().top) + scrollOffset;
21
+ container.removeChild(div);
22
+ _maxBrowserSizeCache.set(doc, size);
23
+ return size;
24
+ }
25
+ function clampIndex(index, length) {
26
+ return clamp(index, 0, length - 1);
27
+ }
28
+ function buildTree(tree, sizes) {
29
+ const length = sizes.length;
30
+ let total = 0;
31
+ for (let i = 1; i <= length; i++) {
32
+ tree[i] += sizes[i - 1];
33
+ total += sizes[i - 1];
34
+ const j = i + (i & -i);
35
+ if (j <= length) {
36
+ tree[j] += tree[i];
37
+ }
38
+ }
39
+ return total;
40
+ }
41
+ class SizeTree {
42
+ constructor(length, sizes, tree, total, measured) {
43
+ this.length = length;
44
+ this._sizes = sizes;
45
+ this._tree = tree;
46
+ this._total = total;
47
+ this._measured = measured;
48
+ this._topBit = length > 0 ? 1 << (31 - Math.clz32(length)) : 0;
49
+ }
50
+ static filled(length, fillSize) {
51
+ return SizeTree._build(new Float64Array(length).fill(fillSize), new Uint8Array(length));
52
+ }
53
+ static _build(sizes, measured) {
54
+ const tree = new Float64Array(sizes.length + 1);
55
+ const total = buildTree(tree, sizes);
56
+ return new SizeTree(sizes.length, sizes, tree, total, measured);
57
+ }
58
+ get totalSize() {
59
+ return this._total;
60
+ }
61
+ prefixSum(i) {
62
+ let sum = 0;
63
+ for (let j = i; j > 0; j -= j & -j) {
64
+ sum += this._tree[j];
65
+ }
66
+ return sum;
67
+ }
68
+ update(index, newSize) {
69
+ if (index < 0 || index >= this.length)
70
+ return false;
71
+ const old = this._sizes[index];
72
+ this._measured[index] = 1;
73
+ if (old === newSize)
74
+ return false;
75
+ const delta = newSize - old;
76
+ this._sizes[index] = newSize;
77
+ this._total += delta;
78
+ for (let i = index + 1; i <= this.length; i += i & -i) {
79
+ this._tree[i] += delta;
80
+ }
81
+ return true;
82
+ }
83
+ cloneResized(newLength, fillSize, retainCount = newLength) {
84
+ const sizes = new Float64Array(newLength).fill(fillSize);
85
+ const measured = new Uint8Array(newLength);
86
+ const retained = Math.max(0, Math.min(this.length, newLength, retainCount));
87
+ sizes.set(this._sizes.subarray(0, retained));
88
+ measured.set(this._measured.subarray(0, retained));
89
+ return SizeTree._build(sizes, measured);
90
+ }
91
+ applyEstimate(estimatedSize) {
92
+ let changed = false;
93
+ for (let i = 0; i < this.length; i++) {
94
+ if (!this._measured[i] && this._sizes[i] !== estimatedSize) {
95
+ this._sizes[i] = estimatedSize;
96
+ changed = true;
97
+ }
98
+ }
99
+ if (!changed)
100
+ return false;
101
+ this._tree.fill(0);
102
+ this._total = buildTree(this._tree, this._sizes);
103
+ return true;
104
+ }
105
+ findIndexAtOffset(offset) {
106
+ if (offset <= 0 || this.length === 0)
107
+ return 0;
108
+ let idx = 0;
109
+ let remaining = offset;
110
+ for (let bit = this._topBit; bit > 0; bit >>= 1) {
111
+ const next = idx + bit;
112
+ if (next <= this.length && this._tree[next] <= remaining) {
113
+ idx = next;
114
+ remaining -= this._tree[idx];
115
+ }
116
+ }
117
+ return Math.min(this.length - 1, idx);
118
+ }
119
+ }
120
+ export class VirtualScrollEngine {
121
+ constructor() {
122
+ this._maxBrowserSize = Number.POSITIVE_INFINITY;
123
+ this._virtualRatio = 1;
124
+ this._tree = null;
125
+ this.onSizeChange = null;
126
+ }
127
+ get totalSize() {
128
+ return this._tree?.totalSize ?? 0;
129
+ }
130
+ get domSize() {
131
+ return this._virtualRatio !== 1 ? this._maxBrowserSize : this.totalSize;
132
+ }
133
+ initMaxBrowserSize(doc) {
134
+ this._maxBrowserSize = getMaxBrowserSizeProbePx(doc);
135
+ this._updateVirtualRatio();
136
+ }
137
+ resize(length, estimatedSize, retainCount = length) {
138
+ if (this._tree?.length === length && retainCount >= length)
139
+ return;
140
+ this._tree = this._tree
141
+ ? this._tree.cloneResized(length, estimatedSize, retainCount)
142
+ : SizeTree.filled(length, estimatedSize);
143
+ this._updateVirtualRatio();
144
+ this.onSizeChange?.();
145
+ }
146
+ measureItem(index, size) {
147
+ if (!this._tree?.update(index, size))
148
+ return;
149
+ this._updateVirtualRatio();
150
+ this.onSizeChange?.();
151
+ }
152
+ updateEstimatedSize(estimatedSize) {
153
+ if (!this._tree?.applyEstimate(estimatedSize))
154
+ return;
155
+ this._updateVirtualRatio();
156
+ this.onSizeChange?.();
157
+ }
158
+ getScrollOffsetForIndex(index) {
159
+ if (!this._tree || index <= 0)
160
+ return 0;
161
+ const clamped = Math.min(index, this._tree.length);
162
+ return this._tree.prefixSum(clamped) / this._virtualRatio;
163
+ }
164
+ _getMaxScrollOffset(viewportSize) {
165
+ return Math.max(0, this.domSize - viewportSize);
166
+ }
167
+ getAlignedScrollOffset(index, viewportSize, align) {
168
+ if (!this._tree || this._tree.length === 0)
169
+ return 0;
170
+ const clamped = clampIndex(index, this._tree.length);
171
+ const itemStart = this._tree.prefixSum(clamped);
172
+ let offset = itemStart;
173
+ if (align !== 'start') {
174
+ const itemEnd = this._tree.prefixSum(clamped + 1);
175
+ const slack = viewportSize - Math.max(0, itemEnd - itemStart);
176
+ offset -= align === 'center' ? slack / 2 : slack;
177
+ }
178
+ return clamp(offset / this._virtualRatio, 0, this._getMaxScrollOffset(viewportSize));
179
+ }
180
+ isIndexInView(index, scrollPosition, viewportSize) {
181
+ if (!this._tree || this._tree.length === 0)
182
+ return false;
183
+ const clamped = clampIndex(index, this._tree.length);
184
+ const itemStart = this._tree.prefixSum(clamped);
185
+ const itemEnd = this._tree.prefixSum(clamped + 1);
186
+ const viewStart = Math.max(0, scrollPosition) * this._virtualRatio;
187
+ const viewEnd = viewStart + viewportSize;
188
+ const contained = itemStart >= viewStart && itemEnd <= viewEnd;
189
+ const spanning = itemStart <= viewStart && itemEnd >= viewEnd;
190
+ return contained || spanning;
191
+ }
192
+ getVisibleRange(scrollPosition, viewportSize, overScan) {
193
+ if (!this._tree || this._tree.length === 0 || viewportSize <= 0) {
194
+ return { startIndex: 0, endIndex: -1 };
195
+ }
196
+ const startOffset = Math.max(0, scrollPosition) * this._virtualRatio;
197
+ const first = this._tree.findIndexAtOffset(startOffset);
198
+ const last = this._tree.findIndexAtOffset(startOffset + viewportSize);
199
+ return {
200
+ startIndex: Math.max(0, first - overScan),
201
+ endIndex: Math.min(this._tree.length - 1, last + overScan),
202
+ };
203
+ }
204
+ getPhysicalRangeSize(startIndex, endIndex) {
205
+ if (!this._tree)
206
+ return 0;
207
+ const start = Math.max(0, startIndex);
208
+ const end = Math.min(Math.max(endIndex + 1, start), this._tree.length);
209
+ return this._tree.prefixSum(end) - this._tree.prefixSum(start);
210
+ }
211
+ _updateVirtualRatio() {
212
+ const totalSize = this._tree?.totalSize ?? 0;
213
+ this._virtualRatio =
214
+ totalSize <= this._maxBrowserSize ? 1 : totalSize / this._maxBrowserSize;
215
+ }
216
+ }
217
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/components/virtualization/engine.ts"],"names":[],"mappings":"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","sourcesContent":["import { clamp } from '#internals/utils/math.js';\nimport type { ScrollAlignment, VisibleRange } from './types.js';\n\n/**\n * The maximum scrollable coordinate of a document does not change.\n * All instances in one document share one probe result.\n */\nconst _maxBrowserSizeCache = new WeakMap<Document, number>();\n\n/**\n * Measures the maximum scrollable coordinate that the browser supports.\n */\nfunction getMaxBrowserSizeProbePx(doc: Document): number {\n const cached = _maxBrowserSizeCache.get(doc);\n if (cached !== undefined) {\n return cached;\n }\n\n const container = doc.body ?? doc.documentElement;\n if (!container) {\n return Number.POSITIVE_INFINITY;\n }\n\n const div = doc.createElement('div');\n div.style.position = 'absolute';\n div.style.top = `${Number.MAX_SAFE_INTEGER}px`;\n div.style.width = '0';\n div.style.height = '0';\n div.style.visibility = 'hidden';\n container.appendChild(div);\n const scrollOffset = doc.documentElement?.scrollTop ?? 0;\n const size = Math.abs(div.getBoundingClientRect().top) + scrollOffset;\n container.removeChild(div);\n\n _maxBrowserSizeCache.set(doc, size);\n return size;\n}\n\n/**\n * Clamps `index` into `[0, length - 1]`. This keeps `prefixSum(index)` and\n * `prefixSum(index + 1)` valid. Callers make sure that `length > 0`.\n */\nfunction clampIndex(index: number, length: number): number {\n return clamp(index, 0, length - 1);\n}\n\n/**\n * Fills `tree` with the partial range sums of `sizes` in one O(N) pass.\n * `tree` is a 1-indexed Fenwick array of `sizes.length + 1` zeroed entries.\n * Returns the total sum.\n */\nfunction buildTree(tree: Float64Array, sizes: Float64Array): number {\n const length = sizes.length;\n let total = 0;\n\n for (let i = 1; i <= length; i++) {\n tree[i] += sizes[i - 1];\n total += sizes[i - 1];\n const j = i + (i & -i);\n if (j <= length) {\n tree[j] += tree[i];\n }\n }\n return total;\n}\n\n/**\n * Binary Indexed Tree (Fenwick tree) over item sizes. Each hot-path operation\n * is O(log N): point update (item measured), prefix sum (scroll offset), and\n * index at offset (scroll to item, through binary lifting).\n */\nclass SizeTree {\n public readonly length: number;\n\n /** A 1-indexed BIT. Each cell holds a partial range sum. */\n private readonly _tree: Float64Array;\n\n /** Raw per-item sizes, 0-indexed. Kept for O(1) reads and delta calculation. */\n private readonly _sizes: Float64Array;\n\n /**\n * Flags the indices that hold a DOM-measured size (`1`) instead of an\n * estimate (`0`). `applyEstimate` changes only the estimated entries.\n */\n private readonly _measured: Uint8Array;\n\n /** Running total. Updated together with the tree in O(1). */\n private _total: number;\n\n /**\n * The highest power of two <= `length`, for the binary lifting in\n * `findIndexAtOffset`. Precomputed because that runs on each scroll event.\n */\n private readonly _topBit: number;\n\n private constructor(\n length: number,\n sizes: Float64Array,\n tree: Float64Array,\n total: number,\n measured: Uint8Array\n ) {\n this.length = length;\n this._sizes = sizes;\n this._tree = tree;\n this._total = total;\n this._measured = measured;\n this._topBit = length > 0 ? 1 << (31 - Math.clz32(length)) : 0;\n }\n\n /**\n * Creates a tree of `length` items, each set to `fillSize` and marked\n * unmeasured. O(N).\n */\n public static filled(length: number, fillSize: number): SizeTree {\n return SizeTree._build(\n new Float64Array(length).fill(fillSize),\n new Uint8Array(length)\n );\n }\n\n /**\n * Builds a tree from a sizes array and its matching measured-flags array. O(N).\n */\n private static _build(sizes: Float64Array, measured: Uint8Array): SizeTree {\n const tree = new Float64Array(sizes.length + 1);\n const total = buildTree(tree, sizes);\n return new SizeTree(sizes.length, sizes, tree, total, measured);\n }\n\n /** Total size of all items. O(1). */\n public get totalSize(): number {\n return this._total;\n }\n\n /**\n * Prefix sum of items [0, i): the virtual scroll offset at the leading\n * edge of item i. O(log N).\n */\n public prefixSum(i: number): number {\n let sum = 0;\n for (let j = i; j > 0; j -= j & -j) {\n sum += this._tree[j];\n }\n return sum;\n }\n\n /**\n * Sets the size of the item at a 0-based index and marks the item as\n * measured. Later `applyEstimate()` calls do not change measured items.\n * Returns true when the size changed. O(log N).\n */\n public update(index: number, newSize: number): boolean {\n if (index < 0 || index >= this.length) return false;\n\n const old = this._sizes[index];\n this._measured[index] = 1;\n if (old === newSize) return false;\n\n const delta = newSize - old;\n this._sizes[index] = newSize;\n this._total += delta;\n for (let i = index + 1; i <= this.length; i += i & -i) {\n this._tree[i] += delta;\n }\n return true;\n }\n\n /**\n * Returns a new tree of `newLength` items in one O(N) pass. Sizes and\n * measured flags are kept up to `min(this.length, newLength, retainCount)`.\n * The remainder is filled with `fillSize` and marked unmeasured. Pass a\n * `retainCount` below the item count when the data behind those indices\n * changed identity.\n */\n public cloneResized(\n newLength: number,\n fillSize: number,\n retainCount = newLength\n ): SizeTree {\n const sizes = new Float64Array(newLength).fill(fillSize);\n const measured = new Uint8Array(newLength);\n const retained = Math.max(0, Math.min(this.length, newLength, retainCount));\n sizes.set(this._sizes.subarray(0, retained));\n measured.set(this._measured.subarray(0, retained));\n return SizeTree._build(sizes, measured);\n }\n\n /**\n * Sets `estimatedSize` on each unmeasured item. Measured items do not\n * change. Returns true when at least one size changed.\n *\n * One estimate change can touch most of the list, so this rebuilds in one\n * O(N) pass instead of one O(log N) `update` per item.\n */\n public applyEstimate(estimatedSize: number): boolean {\n let changed = false;\n for (let i = 0; i < this.length; i++) {\n if (!this._measured[i] && this._sizes[i] !== estimatedSize) {\n this._sizes[i] = estimatedSize;\n changed = true;\n }\n }\n if (!changed) return false;\n\n this._tree.fill(0);\n this._total = buildTree(this._tree, this._sizes);\n return true;\n }\n\n /**\n * Returns the 0-based index of the item that contains the scroll `offset`:\n * the largest i where `prefixSum(i) <= offset < prefixSum(i + 1)`. O(log N).\n */\n public findIndexAtOffset(offset: number): number {\n if (offset <= 0 || this.length === 0) return 0;\n\n let idx = 0;\n let remaining = offset;\n\n for (let bit = this._topBit; bit > 0; bit >>= 1) {\n const next = idx + bit;\n if (next <= this.length && this._tree[next] <= remaining) {\n idx = next;\n remaining -= this._tree[idx];\n }\n }\n return Math.min(this.length - 1, idx);\n }\n}\n\n/**\n * Pure scroll-math engine for one axis of virtual scrolling. A Fenwick tree\n * holds all size state.\n *\n * ### Virtual and DOM coordinates\n *\n * Browsers limit how far an element can scroll. When the total item size is\n * larger than that limit, the engine compresses the *virtual* space\n * (`0…totalSize`) into the *DOM* space the browser can represent\n * (`0…domSize`) by the factor `_virtualRatio`. Each offset that crosses that\n * boundary is scaled: incoming scroll positions are multiplied by the ratio,\n * and outgoing offsets are divided by it. Items render at their real pixel\n * size, so item sizes are always virtual.\n */\nexport class VirtualScrollEngine {\n private _maxBrowserSize = Number.POSITIVE_INFINITY;\n\n /**\n * The ratio `totalSize / maxBrowserSize` when `totalSize` is larger than\n * the maximum DOM coordinate the browser supports; `1` otherwise.\n * Maps virtual scroll positions to DOM scroll positions.\n */\n private _virtualRatio = 1;\n\n /** Binary Indexed Tree for O(log N) size queries and updates. */\n private _tree: SizeTree | null = null;\n\n /**\n * Called when item sizes or the item count change.\n * Example: `() => this.requestUpdate()`.\n */\n public onSizeChange: (() => void) | null = null;\n\n /** Total virtual size of all items in px. */\n public get totalSize(): number {\n return this._tree?.totalSize ?? 0;\n }\n\n /** Total size in DOM space, clamped to the maximum browser size. */\n public get domSize(): number {\n return this._virtualRatio !== 1 ? this._maxBrowserSize : this.totalSize;\n }\n\n /** Measures the maximum browser size for the document and rescales. */\n public initMaxBrowserSize(doc: Document): void {\n this._maxBrowserSize = getMaxBrowserSizeProbePx(doc);\n this._updateVirtualRatio();\n }\n\n /**\n * Resizes the internal sizes array to `length`. Measured sizes below\n * `retainCount` are kept. The remainder is filled with `estimatedSize` and\n * marked unmeasured. Callers that only append can keep the default\n * `retainCount`. Callers whose data changed identity at some index must\n * pass that index, so the stale measurements after it are discarded.\n */\n public resize(\n length: number,\n estimatedSize: number,\n retainCount = length\n ): void {\n if (this._tree?.length === length && retainCount >= length) return;\n\n this._tree = this._tree\n ? this._tree.cloneResized(length, estimatedSize, retainCount)\n : SizeTree.filled(length, estimatedSize);\n this._updateVirtualRatio();\n this.onSizeChange?.();\n }\n\n /** Records the measured DOM size for a single item. */\n public measureItem(index: number, size: number): void {\n if (!this._tree?.update(index, size)) return;\n\n this._updateVirtualRatio();\n this.onSizeChange?.();\n }\n\n /**\n * Applies a new estimated size to each item that is not measured in the\n * DOM. Use this when `estimatedItemSize` changes but the item count does\n * not, because `resize` is then a no-op.\n */\n public updateEstimatedSize(estimatedSize: number): void {\n if (!this._tree?.applyEstimate(estimatedSize)) return;\n\n this._updateVirtualRatio();\n this.onSizeChange?.();\n }\n\n /**\n * Returns the DOM scroll offset in px that puts the item at `index` at the\n * leading edge of the viewport.\n */\n public getScrollOffsetForIndex(index: number): number {\n if (!this._tree || index <= 0) return 0;\n\n const clamped = Math.min(index, this._tree.length);\n return this._tree.prefixSum(clamped) / this._virtualRatio;\n }\n\n /**\n * The largest DOM scroll offset the host can reach for the given viewport\n * size. A request beyond it does nothing, so offsets given to a caller\n * that waits for the scroll to settle are clamped to it.\n */\n private _getMaxScrollOffset(viewportSize: number): number {\n return Math.max(0, this.domSize - viewportSize);\n }\n\n /**\n * Returns the DOM scroll offset that positions the item at `index` in a\n * `viewportSize` px viewport, aligned by `align` and clamped to the\n * reachable scroll range.\n *\n * The slack is computed in virtual space against the item's real size and\n * converted to DOM space once, at the end. One DOM pixel equals\n * `_virtualRatio` virtual pixels, so mixed coordinates would scale the\n * slack.\n */\n public getAlignedScrollOffset(\n index: number,\n viewportSize: number,\n align: ScrollAlignment\n ): number {\n if (!this._tree || this._tree.length === 0) return 0;\n\n const clamped = clampIndex(index, this._tree.length);\n const itemStart = this._tree.prefixSum(clamped);\n let offset = itemStart;\n\n if (align !== 'start') {\n const itemEnd = this._tree.prefixSum(clamped + 1);\n const slack = viewportSize - Math.max(0, itemEnd - itemStart);\n offset -= align === 'center' ? slack / 2 : slack;\n }\n\n return clamp(\n offset / this._virtualRatio,\n 0,\n this._getMaxScrollOffset(viewportSize)\n );\n }\n\n /**\n * Whether the item at `index` is visible without more scrolling at the\n * given DOM scroll position. True when the item is fully inside the\n * viewport, or when it is larger than the viewport and covers it fully.\n * The second case matches native `scrollIntoView({ block: 'nearest' })`.\n */\n public isIndexInView(\n index: number,\n scrollPosition: number,\n viewportSize: number\n ): boolean {\n if (!this._tree || this._tree.length === 0) return false;\n\n const clamped = clampIndex(index, this._tree.length);\n const itemStart = this._tree.prefixSum(clamped);\n const itemEnd = this._tree.prefixSum(clamped + 1);\n const viewStart = Math.max(0, scrollPosition) * this._virtualRatio;\n const viewEnd = viewStart + viewportSize;\n\n const contained = itemStart >= viewStart && itemEnd <= viewEnd;\n const spanning = itemStart <= viewStart && itemEnd >= viewEnd;\n\n return contained || spanning;\n }\n\n /**\n * Returns the visible and over-scanned item range for the given scroll\n * state.\n */\n public getVisibleRange(\n scrollPosition: number,\n viewportSize: number,\n overScan: number\n ): VisibleRange {\n if (!this._tree || this._tree.length === 0 || viewportSize <= 0) {\n return { startIndex: 0, endIndex: -1 };\n }\n\n // The viewport is not scaled by the virtual ratio. Items render at their\n // real pixel size, so a `viewportSize` px viewport always shows that many\n // virtual pixels of items, at any compression of the scroll range.\n const startOffset = Math.max(0, scrollPosition) * this._virtualRatio;\n const first = this._tree.findIndexAtOffset(startOffset);\n const last = this._tree.findIndexAtOffset(startOffset + viewportSize);\n\n return {\n startIndex: Math.max(0, first - overScan),\n endIndex: Math.min(this._tree.length - 1, last + overScan),\n };\n }\n\n /**\n * Sum of the actual sizes of the items in [startIndex, endIndex]. The\n * render pass uses it to clamp the content translate offset, so rendered\n * items do not overflow past `domSize` under coordinate compression.\n */\n public getPhysicalRangeSize(startIndex: number, endIndex: number): number {\n if (!this._tree) return 0;\n\n const start = Math.max(0, startIndex);\n const end = Math.min(Math.max(endIndex + 1, start), this._tree.length);\n return this._tree.prefixSum(end) - this._tree.prefixSum(start);\n }\n\n private _updateVirtualRatio(): void {\n const totalSize = this._tree?.totalSize ?? 0;\n this._virtualRatio =\n totalSize <= this._maxBrowserSize ? 1 : totalSize / this._maxBrowserSize;\n }\n}\n"]}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Context passed to the item template: the item data, its index, and utility
3
+ * properties for rendering.
4
+ */
5
+ export declare class VirtualScrollItemContext<T> {
6
+ /** The current item in the virtual scroll */
7
+ readonly value: T;
8
+ /** The index of the current item */
9
+ readonly index: number;
10
+ /** The total number of items */
11
+ readonly count: number;
12
+ constructor(value: T, index: number, count: number);
13
+ /** Whether the current item is the first item */
14
+ get isFirst(): boolean;
15
+ /** Whether the current item is the last item */
16
+ get isLast(): boolean;
17
+ }
18
+ /**
19
+ * How `scrollToIndex` positions the requested item in the viewport.
20
+ * The subset of `ScrollLogicalPosition` that the engine supports.
21
+ */
22
+ export type ScrollAlignment = 'start' | 'center' | 'end';
23
+ /** The currently visible (and over-scanned) range of items. */
24
+ export interface VisibleRange {
25
+ /** Index of the first rendered item (inclusive) */
26
+ startIndex: number;
27
+ /** Index of the last rendered item (inclusive) */
28
+ endIndex: number;
29
+ }
30
+ /** Snapshot of the currently rendered virtual window */
31
+ export interface VirtualScrollState {
32
+ /** The index of the first item currently rendered in the viewport. */
33
+ startIndex: number;
34
+ /** The index of the last item currently rendered in the viewport (inclusive). */
35
+ endIndex: number;
36
+ /** The size of the viewport in pixels. */
37
+ viewportSize: number;
38
+ /** The total size of the virtual scroll content in pixels. */
39
+ totalSize: number;
40
+ }
41
+ /**
42
+ * A request for more data, emitted when the rendered window comes near the
43
+ * end of the loaded items. Consumers listen for it and append the requested
44
+ * items.
45
+ */
46
+ export interface VirtualScrollDataRequest {
47
+ /**
48
+ * The first index that does not yet have data.
49
+ * Append at least `count` more items starting here.
50
+ */
51
+ startIndex: number;
52
+ /** Number of items being requested. */
53
+ count: number;
54
+ }
@@ -0,0 +1,14 @@
1
+ export class VirtualScrollItemContext {
2
+ constructor(value, index, count) {
3
+ this.value = value;
4
+ this.index = index;
5
+ this.count = count;
6
+ }
7
+ get isFirst() {
8
+ return this.index === 0;
9
+ }
10
+ get isLast() {
11
+ return this.index === this.count - 1;
12
+ }
13
+ }
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/virtualization/types.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,wBAAwB;IAQnC,YAAY,KAAQ,EAAE,KAAa,EAAE,KAAa;QAChD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAGD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IAC1B,CAAC;IAGD,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACvC,CAAC;CACF","sourcesContent":["/**\n * Context passed to the item template: the item data, its index, and utility\n * properties for rendering.\n */\nexport class VirtualScrollItemContext<T> {\n /** The current item in the virtual scroll */\n public readonly value: T;\n /** The index of the current item */\n public readonly index: number;\n /** The total number of items */\n public readonly count: number;\n\n constructor(value: T, index: number, count: number) {\n this.value = value;\n this.index = index;\n this.count = count;\n }\n\n /** Whether the current item is the first item */\n public get isFirst(): boolean {\n return this.index === 0;\n }\n\n /** Whether the current item is the last item */\n public get isLast(): boolean {\n return this.index === this.count - 1;\n }\n}\n\n/**\n * How `scrollToIndex` positions the requested item in the viewport.\n * The subset of `ScrollLogicalPosition` that the engine supports.\n */\nexport type ScrollAlignment = 'start' | 'center' | 'end';\n\n/** The currently visible (and over-scanned) range of items. */\nexport interface VisibleRange {\n /** Index of the first rendered item (inclusive) */\n startIndex: number;\n /** Index of the last rendered item (inclusive) */\n endIndex: number;\n}\n\n/** Snapshot of the currently rendered virtual window */\nexport interface VirtualScrollState {\n /** The index of the first item currently rendered in the viewport. */\n startIndex: number;\n /** The index of the last item currently rendered in the viewport (inclusive). */\n endIndex: number;\n /** The size of the viewport in pixels. */\n viewportSize: number;\n /** The total size of the virtual scroll content in pixels. */\n totalSize: number;\n}\n\n/**\n * A request for more data, emitted when the rendered window comes near the\n * end of the loaded items. Consumers listen for it and append the requested\n * items.\n */\nexport interface VirtualScrollDataRequest {\n /**\n * The first index that does not yet have data.\n * Append at least `count` more items starting here.\n */\n startIndex: number;\n /** Number of items being requested. */\n count: number;\n}\n"]}