igniteui-webcomponents 7.2.4 → 7.3.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (976) hide show
  1. package/CHANGELOG.md +142 -0
  2. package/animations/player.js +1 -1
  3. package/animations/player.js.map +1 -1
  4. package/animations/view-transition.js +1 -1
  5. package/animations/view-transition.js.map +1 -1
  6. package/components/accordion/accordion.d.ts +1 -1
  7. package/components/accordion/accordion.js +7 -6
  8. package/components/accordion/accordion.js.map +1 -1
  9. package/components/avatar/avatar.js +3 -3
  10. package/components/avatar/avatar.js.map +1 -1
  11. package/components/avatar/themes/themes.d.ts +1 -1
  12. package/components/avatar/themes/themes.js.map +1 -1
  13. package/components/badge/badge.d.ts +1 -1
  14. package/components/badge/badge.js +5 -5
  15. package/components/badge/badge.js.map +1 -1
  16. package/components/badge/themes/themes.d.ts +1 -1
  17. package/components/badge/themes/themes.js.map +1 -1
  18. package/components/banner/banner.d.ts +2 -2
  19. package/components/banner/banner.js +8 -8
  20. package/components/banner/banner.js.map +1 -1
  21. package/components/banner/themes/themes.d.ts +1 -1
  22. package/components/banner/themes/themes.js.map +1 -1
  23. package/components/button/button-base.d.ts +2 -2
  24. package/components/button/button-base.js +9 -8
  25. package/components/button/button-base.js.map +1 -1
  26. package/components/button/button.d.ts +3 -3
  27. package/components/button/button.js +2 -2
  28. package/components/button/button.js.map +1 -1
  29. package/components/button/icon-button.js +3 -3
  30. package/components/button/icon-button.js.map +1 -1
  31. package/components/button/themes/button/themes.d.ts +1 -1
  32. package/components/button/themes/button/themes.js.map +1 -1
  33. package/components/button/themes/icon-button/themes.d.ts +1 -1
  34. package/components/button/themes/icon-button/themes.js.map +1 -1
  35. package/components/button-group/button-group.d.ts +42 -21
  36. package/components/button-group/button-group.js +101 -106
  37. package/components/button-group/button-group.js.map +1 -1
  38. package/components/button-group/themes/button.d.ts +1 -1
  39. package/components/button-group/themes/button.js.map +1 -1
  40. package/components/button-group/themes/group.d.ts +1 -1
  41. package/components/button-group/themes/group.js.map +1 -1
  42. package/components/button-group/toggle-button.d.ts +17 -10
  43. package/components/button-group/toggle-button.js +28 -13
  44. package/components/button-group/toggle-button.js.map +1 -1
  45. package/components/calendar/base.d.ts +29 -10
  46. package/components/calendar/base.js +12 -15
  47. package/components/calendar/base.js.map +1 -1
  48. package/components/calendar/calendar.d.ts +39 -8
  49. package/components/calendar/calendar.js +96 -85
  50. package/components/calendar/calendar.js.map +1 -1
  51. package/components/calendar/days-view/days-view.d.ts +49 -22
  52. package/components/calendar/days-view/days-view.js +102 -163
  53. package/components/calendar/days-view/days-view.js.map +1 -1
  54. package/components/calendar/helpers.d.ts +3 -62
  55. package/components/calendar/helpers.js +6 -110
  56. package/components/calendar/helpers.js.map +1 -1
  57. package/components/calendar/months-view/months-view.d.ts +7 -21
  58. package/components/calendar/months-view/months-view.js +30 -83
  59. package/components/calendar/months-view/months-view.js.map +1 -1
  60. package/components/calendar/selection.d.ts +21 -0
  61. package/components/calendar/selection.js +42 -0
  62. package/components/calendar/selection.js.map +1 -0
  63. package/components/calendar/themes/calendar.d.ts +1 -1
  64. package/components/calendar/themes/calendar.js.map +1 -1
  65. package/components/calendar/themes/days.d.ts +1 -1
  66. package/components/calendar/themes/days.js.map +1 -1
  67. package/components/calendar/themes/year-month.d.ts +1 -1
  68. package/components/calendar/themes/year-month.js.map +1 -1
  69. package/components/calendar/types.d.ts +18 -0
  70. package/components/calendar/types.js.map +1 -1
  71. package/components/calendar/year-month-view.base.d.ts +44 -0
  72. package/components/calendar/year-month-view.base.js +89 -0
  73. package/components/calendar/year-month-view.base.js.map +1 -0
  74. package/components/calendar/years-view/years-view.d.ts +7 -20
  75. package/components/calendar/years-view/years-view.js +25 -79
  76. package/components/calendar/years-view/years-view.js.map +1 -1
  77. package/components/card/card.actions.js +2 -2
  78. package/components/card/card.actions.js.map +1 -1
  79. package/components/card/card.content.d.ts +1 -1
  80. package/components/card/card.content.js +2 -2
  81. package/components/card/card.content.js.map +1 -1
  82. package/components/card/card.d.ts +1 -1
  83. package/components/card/card.header.js +2 -2
  84. package/components/card/card.header.js.map +1 -1
  85. package/components/card/card.js +2 -2
  86. package/components/card/card.js.map +1 -1
  87. package/components/card/card.media.d.ts +1 -1
  88. package/components/card/card.media.js +1 -1
  89. package/components/card/card.media.js.map +1 -1
  90. package/components/card/themes/actions.d.ts +1 -1
  91. package/components/card/themes/actions.js.map +1 -1
  92. package/components/card/themes/container.d.ts +1 -1
  93. package/components/card/themes/container.js.map +1 -1
  94. package/components/card/themes/content.d.ts +1 -1
  95. package/components/card/themes/content.js.map +1 -1
  96. package/components/card/themes/header.d.ts +1 -1
  97. package/components/card/themes/header.js.map +1 -1
  98. package/components/carousel/animations.d.ts +1 -1
  99. package/components/carousel/animations.js +2 -2
  100. package/components/carousel/animations.js.map +1 -1
  101. package/components/carousel/carousel-indicator-container.js +4 -4
  102. package/components/carousel/carousel-indicator-container.js.map +1 -1
  103. package/components/carousel/carousel-indicator.d.ts +1 -1
  104. package/components/carousel/carousel-indicator.js +5 -5
  105. package/components/carousel/carousel-indicator.js.map +1 -1
  106. package/components/carousel/carousel-slide.d.ts +1 -1
  107. package/components/carousel/carousel-slide.js +9 -9
  108. package/components/carousel/carousel-slide.js.map +1 -1
  109. package/components/carousel/carousel.d.ts +7 -7
  110. package/components/carousel/carousel.js +39 -28
  111. package/components/carousel/carousel.js.map +1 -1
  112. package/components/carousel/themes/container.d.ts +1 -1
  113. package/components/carousel/themes/container.js.map +1 -1
  114. package/components/carousel/themes/indicator-container.d.ts +1 -1
  115. package/components/carousel/themes/indicator-container.js.map +1 -1
  116. package/components/chat/chat-input.d.ts +4 -4
  117. package/components/chat/chat-input.js +9 -8
  118. package/components/chat/chat-input.js.map +1 -1
  119. package/components/chat/chat-message.d.ts +1 -1
  120. package/components/chat/chat-message.js +7 -6
  121. package/components/chat/chat-message.js.map +1 -1
  122. package/components/chat/chat-state.d.ts +2 -2
  123. package/components/chat/chat-state.js +2 -1
  124. package/components/chat/chat-state.js.map +1 -1
  125. package/components/chat/chat.d.ts +4 -4
  126. package/components/chat/chat.js +7 -7
  127. package/components/chat/chat.js.map +1 -1
  128. package/components/chat/message-attachments.js +5 -5
  129. package/components/chat/message-attachments.js.map +1 -1
  130. package/components/chat/themes/attachments.d.ts +1 -1
  131. package/components/chat/themes/attachments.js.map +1 -1
  132. package/components/chat/themes/input.d.ts +1 -1
  133. package/components/chat/themes/input.js.map +1 -1
  134. package/components/chat/themes/message.d.ts +1 -1
  135. package/components/chat/themes/message.js.map +1 -1
  136. package/components/chat/themes/themes.d.ts +1 -1
  137. package/components/chat/themes/themes.js.map +1 -1
  138. package/components/chat/types.d.ts +2 -2
  139. package/components/chat/types.js.map +1 -1
  140. package/components/chat/utils.d.ts +1 -1
  141. package/components/chat/utils.js +3 -3
  142. package/components/chat/utils.js.map +1 -1
  143. package/components/checkbox/checkbox-base.d.ts +7 -7
  144. package/components/checkbox/checkbox-base.js +7 -7
  145. package/components/checkbox/checkbox-base.js.map +1 -1
  146. package/components/checkbox/checkbox.js +7 -6
  147. package/components/checkbox/checkbox.js.map +1 -1
  148. package/components/checkbox/switch.js +7 -6
  149. package/components/checkbox/switch.js.map +1 -1
  150. package/components/checkbox/themes/checkbox-themes.d.ts +1 -1
  151. package/components/checkbox/themes/checkbox-themes.js.map +1 -1
  152. package/components/checkbox/themes/switch-themes.d.ts +1 -1
  153. package/components/checkbox/themes/switch-themes.js.map +1 -1
  154. package/components/checkbox/validators.d.ts +1 -1
  155. package/components/checkbox/validators.js +1 -1
  156. package/components/checkbox/validators.js.map +1 -1
  157. package/components/chip/chip.d.ts +9 -3
  158. package/components/chip/chip.js +10 -6
  159. package/components/chip/chip.js.map +1 -1
  160. package/components/chip/themes/chip.base.css.js +1 -1
  161. package/components/chip/themes/chip.base.css.js.map +1 -1
  162. package/components/chip/themes/dark/chip.bootstrap.css.js +1 -1
  163. package/components/chip/themes/dark/chip.bootstrap.css.js.map +1 -1
  164. package/components/chip/themes/dark/chip.fluent.css.js +1 -1
  165. package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
  166. package/components/chip/themes/dark/chip.indigo.css.js +1 -1
  167. package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
  168. package/components/chip/themes/dark/chip.material.css.js +1 -1
  169. package/components/chip/themes/dark/chip.material.css.js.map +1 -1
  170. package/components/chip/themes/light/chip.bootstrap.css.js +1 -1
  171. package/components/chip/themes/light/chip.bootstrap.css.js.map +1 -1
  172. package/components/chip/themes/light/chip.fluent.css.js +1 -1
  173. package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
  174. package/components/chip/themes/light/chip.indigo.css.js +1 -1
  175. package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
  176. package/components/chip/themes/light/chip.material.css.js +1 -1
  177. package/components/chip/themes/light/chip.material.css.js.map +1 -1
  178. package/components/chip/themes/light/chip.shared.css.js +1 -1
  179. package/components/chip/themes/light/chip.shared.css.js.map +1 -1
  180. package/components/chip/themes/shared/chip.bootstrap.css.js +1 -1
  181. package/components/chip/themes/shared/chip.bootstrap.css.js.map +1 -1
  182. package/components/chip/themes/shared/chip.common.css.js +1 -1
  183. package/components/chip/themes/shared/chip.common.css.js.map +1 -1
  184. package/components/chip/themes/shared/chip.fluent.css.js +1 -1
  185. package/components/chip/themes/shared/chip.fluent.css.js.map +1 -1
  186. package/components/chip/themes/shared/chip.indigo.css.js +1 -1
  187. package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
  188. package/components/chip/themes/themes.d.ts +1 -1
  189. package/components/chip/themes/themes.js.map +1 -1
  190. package/components/combo/combo-header.js +2 -2
  191. package/components/combo/combo-header.js.map +1 -1
  192. package/components/combo/combo-item.d.ts +0 -2
  193. package/components/combo/combo-item.js +4 -7
  194. package/components/combo/combo-item.js.map +1 -1
  195. package/components/combo/combo.d.ts +84 -27
  196. package/components/combo/combo.js +194 -157
  197. package/components/combo/combo.js.map +1 -1
  198. package/components/combo/controllers/data.d.ts +30 -3
  199. package/components/combo/controllers/data.js +34 -9
  200. package/components/combo/controllers/data.js.map +1 -1
  201. package/components/combo/controllers/navigation.d.ts +8 -2
  202. package/components/combo/controllers/navigation.js +11 -12
  203. package/components/combo/controllers/navigation.js.map +1 -1
  204. package/components/combo/operations/filter.d.ts +17 -1
  205. package/components/combo/operations/filter.js +29 -9
  206. package/components/combo/operations/filter.js.map +1 -1
  207. package/components/combo/operations/group.js +1 -1
  208. package/components/combo/operations/group.js.map +1 -1
  209. package/components/combo/themes/combo.base.css.js +1 -1
  210. package/components/combo/themes/combo.base.css.js.map +1 -1
  211. package/components/combo/themes/themes.d.ts +1 -1
  212. package/components/combo/themes/themes.js.map +1 -1
  213. package/components/combo/types.d.ts +8 -4
  214. package/components/combo/types.js.map +1 -1
  215. package/components/combo/validators.d.ts +1 -1
  216. package/components/combo/validators.js.map +1 -1
  217. package/components/date-picker/date-picker.base.d.ts +294 -0
  218. package/components/date-picker/date-picker.base.js +480 -0
  219. package/components/date-picker/date-picker.base.js.map +1 -0
  220. package/components/date-picker/date-picker.d.ts +53 -174
  221. package/components/date-picker/date-picker.js +88 -399
  222. package/components/date-picker/date-picker.js.map +1 -1
  223. package/components/date-picker/themes/themes.d.ts +1 -1
  224. package/components/date-picker/themes/themes.js.map +1 -1
  225. package/components/date-picker/validators.d.ts +1 -1
  226. package/components/date-picker/validators.js +2 -2
  227. package/components/date-picker/validators.js.map +1 -1
  228. package/components/date-range-picker/date-range-input.d.ts +12 -14
  229. package/components/date-range-picker/date-range-input.js +42 -98
  230. package/components/date-range-picker/date-range-input.js.map +1 -1
  231. package/components/date-range-picker/date-range-mask-parser.d.ts +22 -34
  232. package/components/date-range-picker/date-range-mask-parser.js +38 -69
  233. package/components/date-range-picker/date-range-mask-parser.js.map +1 -1
  234. package/components/date-range-picker/date-range-picker.d.ts +97 -191
  235. package/components/date-range-picker/date-range-picker.js +210 -532
  236. package/components/date-range-picker/date-range-picker.js.map +1 -1
  237. package/components/date-range-picker/predefined-ranges-area.d.ts +2 -2
  238. package/components/date-range-picker/predefined-ranges-area.js +5 -5
  239. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  240. package/components/date-range-picker/themes/ranges-themes.d.ts +1 -1
  241. package/components/date-range-picker/themes/ranges-themes.js.map +1 -1
  242. package/components/date-range-picker/themes/themes.d.ts +1 -1
  243. package/components/date-range-picker/themes/themes.js.map +1 -1
  244. package/components/date-range-picker/validators.d.ts +1 -1
  245. package/components/date-range-picker/validators.js +15 -22
  246. package/components/date-range-picker/validators.js.map +1 -1
  247. package/components/date-time-input/date-part.d.ts +18 -1
  248. package/components/date-time-input/date-part.js +10 -0
  249. package/components/date-time-input/date-part.js.map +1 -1
  250. package/components/date-time-input/date-time-input.base.d.ts +72 -25
  251. package/components/date-time-input/date-time-input.base.js +100 -36
  252. package/components/date-time-input/date-time-input.base.js.map +1 -1
  253. package/components/date-time-input/date-time-input.d.ts +13 -23
  254. package/components/date-time-input/date-time-input.js +45 -65
  255. package/components/date-time-input/date-time-input.js.map +1 -1
  256. package/components/date-time-input/datetime-mask-parser.d.ts +45 -109
  257. package/components/date-time-input/datetime-mask-parser.js +88 -139
  258. package/components/date-time-input/datetime-mask-parser.js.map +1 -1
  259. package/components/date-time-input/validators.d.ts +1 -1
  260. package/components/date-time-input/validators.js +2 -2
  261. package/components/date-time-input/validators.js.map +1 -1
  262. package/components/dialog/dialog.d.ts +2 -2
  263. package/components/dialog/dialog.js +17 -18
  264. package/components/dialog/dialog.js.map +1 -1
  265. package/components/dialog/themes/themes.d.ts +1 -1
  266. package/components/dialog/themes/themes.js.map +1 -1
  267. package/components/divider/divider.d.ts +2 -1
  268. package/components/divider/divider.js +3 -3
  269. package/components/divider/divider.js.map +1 -1
  270. package/components/divider/themes/themes.d.ts +1 -1
  271. package/components/divider/themes/themes.js.map +1 -1
  272. package/components/dropdown/dropdown-group.d.ts +10 -3
  273. package/components/dropdown/dropdown-group.js +21 -5
  274. package/components/dropdown/dropdown-group.js.map +1 -1
  275. package/components/dropdown/dropdown-header.d.ts +2 -2
  276. package/components/dropdown/dropdown-header.js +7 -2
  277. package/components/dropdown/dropdown-header.js.map +1 -1
  278. package/components/dropdown/dropdown-item.d.ts +4 -4
  279. package/components/dropdown/dropdown-item.js +3 -3
  280. package/components/dropdown/dropdown-item.js.map +1 -1
  281. package/components/dropdown/dropdown.d.ts +75 -32
  282. package/components/dropdown/dropdown.js +189 -110
  283. package/components/dropdown/dropdown.js.map +1 -1
  284. package/components/dropdown/themes/container.d.ts +1 -1
  285. package/components/dropdown/themes/container.js.map +1 -1
  286. package/components/dropdown/themes/group.d.ts +1 -1
  287. package/components/dropdown/themes/group.js.map +1 -1
  288. package/components/dropdown/themes/header.d.ts +1 -1
  289. package/components/dropdown/themes/header.js.map +1 -1
  290. package/components/dropdown/themes/item.d.ts +1 -1
  291. package/components/dropdown/themes/item.js.map +1 -1
  292. package/components/expansion-panel/expansion-panel.d.ts +14 -5
  293. package/components/expansion-panel/expansion-panel.js +10 -9
  294. package/components/expansion-panel/expansion-panel.js.map +1 -1
  295. package/components/expansion-panel/themes/themes.d.ts +1 -1
  296. package/components/expansion-panel/themes/themes.js.map +1 -1
  297. package/components/file-input/file-input.d.ts +20 -12
  298. package/components/file-input/file-input.js +17 -12
  299. package/components/file-input/file-input.js.map +1 -1
  300. package/components/file-input/themes/themes.d.ts +1 -1
  301. package/components/file-input/themes/themes.js.map +1 -1
  302. package/components/file-input/validators.d.ts +1 -1
  303. package/components/file-input/validators.js +1 -1
  304. package/components/file-input/validators.js.map +1 -1
  305. package/components/focus-trap/focus-trap.js +3 -2
  306. package/components/focus-trap/focus-trap.js.map +1 -1
  307. package/components/highlight/highlight.js +2 -2
  308. package/components/highlight/highlight.js.map +1 -1
  309. package/components/highlight/service.d.ts +4 -1
  310. package/components/highlight/service.js +23 -7
  311. package/components/highlight/service.js.map +1 -1
  312. package/components/highlight/themes/themes.d.ts +1 -1
  313. package/components/highlight/themes/themes.js.map +1 -1
  314. package/components/icon/icon-references.d.ts +3 -2
  315. package/components/icon/icon-references.js +103 -491
  316. package/components/icon/icon-references.js.map +1 -1
  317. package/components/icon/icon-state.broadcast.d.ts +14 -17
  318. package/components/icon/icon-state.broadcast.js +19 -20
  319. package/components/icon/icon-state.broadcast.js.map +1 -1
  320. package/components/icon/icon.d.ts +12 -24
  321. package/components/icon/icon.js +36 -28
  322. package/components/icon/icon.js.map +1 -1
  323. package/components/icon/icon.registry.d.ts +69 -131
  324. package/components/icon/icon.registry.js +51 -53
  325. package/components/icon/icon.registry.js.map +1 -1
  326. package/components/icon/internal-icons-lib.js +2 -2
  327. package/components/icon/internal-icons-lib.js.map +1 -1
  328. package/components/icon/registry/parser.d.ts +15 -3
  329. package/components/icon/registry/parser.js +36 -11
  330. package/components/icon/registry/parser.js.map +1 -1
  331. package/components/icon/registry/types.d.ts +55 -11
  332. package/components/icon/registry/types.js.map +1 -1
  333. package/components/icon/themes/icon.base.css.js +1 -1
  334. package/components/icon/themes/icon.base.css.js.map +1 -1
  335. package/components/icon/themes/shared/icon.common.css.js +1 -1
  336. package/components/icon/themes/shared/icon.common.css.js.map +1 -1
  337. package/components/icon/themes/themes.d.ts +1 -1
  338. package/components/icon/themes/themes.js.map +1 -1
  339. package/components/input/input-base.d.ts +10 -25
  340. package/components/input/input-base.js +14 -23
  341. package/components/input/input-base.js.map +1 -1
  342. package/components/input/input.d.ts +15 -12
  343. package/components/input/input.js +8 -9
  344. package/components/input/input.js.map +1 -1
  345. package/components/input/themes/input.base.css.js +1 -1
  346. package/components/input/themes/input.base.css.js.map +1 -1
  347. package/components/input/themes/shared/input.bootstrap.css.js +1 -1
  348. package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
  349. package/components/input/themes/shared/input.common.css.js +1 -1
  350. package/components/input/themes/shared/input.common.css.js.map +1 -1
  351. package/components/input/themes/shared/input.fluent.css.js +1 -1
  352. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  353. package/components/input/themes/shared/input.indigo.css.js +1 -1
  354. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  355. package/components/input/themes/shared/input.material.css.js +1 -1
  356. package/components/input/themes/shared/input.material.css.js.map +1 -1
  357. package/components/input/themes/themes.d.ts +1 -1
  358. package/components/input/themes/themes.js.map +1 -1
  359. package/components/input/validators.d.ts +1 -1
  360. package/components/input/validators.js +1 -1
  361. package/components/input/validators.js.map +1 -1
  362. package/components/list/list-header.js +3 -3
  363. package/components/list/list-header.js.map +1 -1
  364. package/components/list/list-item.js +3 -3
  365. package/components/list/list-item.js.map +1 -1
  366. package/components/list/list.js +3 -3
  367. package/components/list/list.js.map +1 -1
  368. package/components/list/themes/container.d.ts +1 -1
  369. package/components/list/themes/container.js.map +1 -1
  370. package/components/list/themes/header.d.ts +1 -1
  371. package/components/list/themes/header.js.map +1 -1
  372. package/components/list/themes/item.d.ts +1 -1
  373. package/components/list/themes/item.js.map +1 -1
  374. package/components/mask-input/mask-history.d.ts +99 -0
  375. package/components/mask-input/mask-history.js +95 -0
  376. package/components/mask-input/mask-history.js.map +1 -0
  377. package/components/mask-input/mask-input.d.ts +14 -9
  378. package/components/mask-input/mask-input.js +20 -24
  379. package/components/mask-input/mask-input.js.map +1 -1
  380. package/components/mask-input/mask-parser.d.ts +20 -2
  381. package/components/mask-input/mask-parser.js +21 -13
  382. package/components/mask-input/mask-parser.js.map +1 -1
  383. package/components/mask-input/validators.d.ts +1 -1
  384. package/components/mask-input/validators.js +1 -1
  385. package/components/mask-input/validators.js.map +1 -1
  386. package/components/nav-drawer/nav-drawer-header-item.d.ts +1 -1
  387. package/components/nav-drawer/nav-drawer-header-item.js +2 -2
  388. package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
  389. package/components/nav-drawer/nav-drawer-item.d.ts +2 -2
  390. package/components/nav-drawer/nav-drawer-item.js +4 -4
  391. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  392. package/components/nav-drawer/nav-drawer.d.ts +3 -3
  393. package/components/nav-drawer/nav-drawer.js +11 -14
  394. package/components/nav-drawer/nav-drawer.js.map +1 -1
  395. package/components/nav-drawer/themes/container.base.css.js +1 -1
  396. package/components/nav-drawer/themes/container.base.css.js.map +1 -1
  397. package/components/nav-drawer/themes/container.d.ts +1 -1
  398. package/components/nav-drawer/themes/container.js +2 -3
  399. package/components/nav-drawer/themes/container.js.map +1 -1
  400. package/components/nav-drawer/themes/dark/container/nav-drawer.shared.css.js +1 -1
  401. package/components/nav-drawer/themes/dark/container/nav-drawer.shared.css.js.map +1 -1
  402. package/components/nav-drawer/themes/header-item.d.ts +1 -1
  403. package/components/nav-drawer/themes/header-item.js.map +1 -1
  404. package/components/nav-drawer/themes/item.d.ts +1 -1
  405. package/components/nav-drawer/themes/item.js.map +1 -1
  406. package/components/nav-drawer/themes/light/container/nav-drawer.bootstrap.css.js +1 -1
  407. package/components/nav-drawer/themes/light/container/nav-drawer.bootstrap.css.js.map +1 -1
  408. package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js +1 -1
  409. package/components/nav-drawer/themes/light/container/nav-drawer.fluent.css.js.map +1 -1
  410. package/components/nav-drawer/themes/light/container/nav-drawer.indigo.css.js +1 -1
  411. package/components/nav-drawer/themes/light/container/nav-drawer.indigo.css.js.map +1 -1
  412. package/components/nav-drawer/themes/light/container/nav-drawer.shared.css.js +1 -1
  413. package/components/nav-drawer/themes/light/container/nav-drawer.shared.css.js.map +1 -1
  414. package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js +1 -1
  415. package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js.map +1 -1
  416. package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js +1 -1
  417. package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js.map +1 -1
  418. package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js +1 -1
  419. package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js.map +1 -1
  420. package/components/navbar/navbar.js +2 -2
  421. package/components/navbar/navbar.js.map +1 -1
  422. package/components/navbar/themes/themes.d.ts +1 -1
  423. package/components/navbar/themes/themes.js.map +1 -1
  424. package/components/popover/popover.d.ts +10 -3
  425. package/components/popover/popover.js +114 -99
  426. package/components/popover/popover.js.map +1 -1
  427. package/components/progress/base.d.ts +1 -1
  428. package/components/progress/base.js +5 -4
  429. package/components/progress/base.js.map +1 -1
  430. package/components/progress/circular-gradient.d.ts +2 -2
  431. package/components/progress/circular-gradient.js +1 -1
  432. package/components/progress/circular-gradient.js.map +1 -1
  433. package/components/progress/circular-progress.d.ts +15 -15
  434. package/components/progress/circular-progress.js +7 -6
  435. package/components/progress/circular-progress.js.map +1 -1
  436. package/components/progress/linear-progress.d.ts +12 -12
  437. package/components/progress/linear-progress.js +4 -4
  438. package/components/progress/linear-progress.js.map +1 -1
  439. package/components/progress/themes/circular/circular.progress.base.css.js +1 -1
  440. package/components/progress/themes/circular/circular.progress.base.css.js.map +1 -1
  441. package/components/progress/themes/circular/themes.d.ts +1 -1
  442. package/components/progress/themes/circular/themes.js.map +1 -1
  443. package/components/progress/themes/linear/linear.progress.base.css.js +1 -1
  444. package/components/progress/themes/linear/linear.progress.base.css.js.map +1 -1
  445. package/components/progress/themes/linear/themes.d.ts +1 -1
  446. package/components/progress/themes/linear/themes.js.map +1 -1
  447. package/components/qr-code/model/encode.d.ts +20 -0
  448. package/components/qr-code/model/encode.js +166 -0
  449. package/components/qr-code/model/encode.js.map +1 -0
  450. package/components/qr-code/model/error-correction.d.ts +15 -0
  451. package/components/qr-code/model/error-correction.js +1114 -0
  452. package/components/qr-code/model/error-correction.js.map +1 -0
  453. package/components/qr-code/model/mask.d.ts +11 -0
  454. package/components/qr-code/model/mask.js +161 -0
  455. package/components/qr-code/model/mask.js.map +1 -0
  456. package/components/qr-code/model/matrix.d.ts +15 -0
  457. package/components/qr-code/model/matrix.js +277 -0
  458. package/components/qr-code/model/matrix.js.map +1 -0
  459. package/components/qr-code/qr-code.d.ts +134 -0
  460. package/components/qr-code/qr-code.js +221 -0
  461. package/components/qr-code/qr-code.js.map +1 -0
  462. package/components/qr-code/renderer/constants.d.ts +26 -0
  463. package/components/qr-code/renderer/constants.js +5 -0
  464. package/components/qr-code/renderer/constants.js.map +1 -0
  465. package/components/qr-code/renderer/corner.d.ts +23 -0
  466. package/components/qr-code/renderer/corner.js +25 -0
  467. package/components/qr-code/renderer/corner.js.map +1 -0
  468. package/components/qr-code/renderer/dots.d.ts +14 -0
  469. package/components/qr-code/renderer/dots.js +7 -0
  470. package/components/qr-code/renderer/dots.js.map +1 -0
  471. package/components/qr-code/renderer/helpers.d.ts +18 -0
  472. package/components/qr-code/renderer/helpers.js +158 -0
  473. package/components/qr-code/renderer/helpers.js.map +1 -0
  474. package/components/qr-code/renderer/image.d.ts +23 -0
  475. package/components/qr-code/renderer/image.js +29 -0
  476. package/components/qr-code/renderer/image.js.map +1 -0
  477. package/components/qr-code/themes/dark/qr-code.bootstrap.css.js +3 -0
  478. package/components/qr-code/themes/dark/qr-code.bootstrap.css.js.map +1 -0
  479. package/components/qr-code/themes/dark/qr-code.fluent.css.d.ts +1 -0
  480. package/components/qr-code/themes/dark/qr-code.fluent.css.js +3 -0
  481. package/components/qr-code/themes/dark/qr-code.fluent.css.js.map +1 -0
  482. package/components/qr-code/themes/dark/qr-code.indigo.css.d.ts +1 -0
  483. package/components/qr-code/themes/dark/qr-code.indigo.css.js +3 -0
  484. package/components/qr-code/themes/dark/qr-code.indigo.css.js.map +1 -0
  485. package/components/qr-code/themes/dark/qr-code.material.css.d.ts +1 -0
  486. package/components/qr-code/themes/dark/qr-code.material.css.js +3 -0
  487. package/components/qr-code/themes/dark/qr-code.material.css.js.map +1 -0
  488. package/components/qr-code/themes/light/qr-code.bootstrap.css.d.ts +1 -0
  489. package/components/qr-code/themes/light/qr-code.bootstrap.css.js +3 -0
  490. package/components/qr-code/themes/light/qr-code.bootstrap.css.js.map +1 -0
  491. package/components/qr-code/themes/light/qr-code.fluent.css.d.ts +1 -0
  492. package/components/qr-code/themes/light/qr-code.fluent.css.js +3 -0
  493. package/components/qr-code/themes/light/qr-code.fluent.css.js.map +1 -0
  494. package/components/qr-code/themes/light/qr-code.indigo.css.d.ts +1 -0
  495. package/components/qr-code/themes/light/qr-code.indigo.css.js +3 -0
  496. package/components/qr-code/themes/light/qr-code.indigo.css.js.map +1 -0
  497. package/components/qr-code/themes/light/qr-code.material.css.d.ts +1 -0
  498. package/components/qr-code/themes/light/qr-code.material.css.js +3 -0
  499. package/components/qr-code/themes/light/qr-code.material.css.js.map +1 -0
  500. package/components/qr-code/themes/light/qr-code.shared.css.d.ts +1 -0
  501. package/components/qr-code/themes/light/qr-code.shared.css.js +3 -0
  502. package/components/qr-code/themes/light/qr-code.shared.css.js.map +1 -0
  503. package/components/qr-code/themes/qr-code.base.css.d.ts +1 -0
  504. package/components/qr-code/themes/qr-code.base.css.js +3 -0
  505. package/components/qr-code/themes/qr-code.base.css.js.map +1 -0
  506. package/components/qr-code/themes/shared/qr-code.common.css.d.ts +1 -0
  507. package/components/qr-code/themes/shared/qr-code.common.css.js +3 -0
  508. package/components/qr-code/themes/shared/qr-code.common.css.js.map +1 -0
  509. package/components/qr-code/themes/themes.d.ts +2 -0
  510. package/components/qr-code/themes/themes.js +46 -0
  511. package/components/qr-code/themes/themes.js.map +1 -0
  512. package/components/qr-code/types.d.ts +16 -0
  513. package/components/qr-code/types.js +2 -0
  514. package/components/qr-code/types.js.map +1 -0
  515. package/components/radio/controller.d.ts +35 -0
  516. package/components/radio/controller.js +100 -0
  517. package/components/radio/controller.js.map +1 -0
  518. package/components/radio/radio.d.ts +26 -14
  519. package/components/radio/radio.js +47 -36
  520. package/components/radio/radio.js.map +1 -1
  521. package/components/radio/themes/themes.d.ts +1 -1
  522. package/components/radio/themes/themes.js.map +1 -1
  523. package/components/radio/validators.d.ts +1 -1
  524. package/components/radio/validators.js +5 -3
  525. package/components/radio/validators.js.map +1 -1
  526. package/components/radio-group/radio-group.d.ts +19 -10
  527. package/components/radio-group/radio-group.js +50 -41
  528. package/components/radio-group/radio-group.js.map +1 -1
  529. package/components/radio-group/themes/themes.d.ts +1 -1
  530. package/components/radio-group/themes/themes.js.map +1 -1
  531. package/components/rating/rating-symbol.d.ts +1 -1
  532. package/components/rating/rating-symbol.js +1 -1
  533. package/components/rating/rating-symbol.js.map +1 -1
  534. package/components/rating/rating.d.ts +6 -6
  535. package/components/rating/rating.js +12 -9
  536. package/components/rating/rating.js.map +1 -1
  537. package/components/rating/themes/themes.d.ts +1 -1
  538. package/components/rating/themes/themes.js.map +1 -1
  539. package/components/resize-container/resize-container.d.ts +4 -4
  540. package/components/resize-container/resize-container.js +4 -4
  541. package/components/resize-container/resize-container.js.map +1 -1
  542. package/components/resize-container/resize-controller.js +2 -2
  543. package/components/resize-container/resize-controller.js.map +1 -1
  544. package/components/resize-container/themes/themes.d.ts +1 -1
  545. package/components/resize-container/themes/themes.js.map +1 -1
  546. package/components/ripple/ripple.d.ts +1 -1
  547. package/components/ripple/ripple.js +3 -2
  548. package/components/ripple/ripple.js.map +1 -1
  549. package/components/select/select-group.d.ts +9 -2
  550. package/components/select/select-group.js +21 -5
  551. package/components/select/select-group.js.map +1 -1
  552. package/components/select/select-header.d.ts +1 -1
  553. package/components/select/select-header.js +7 -2
  554. package/components/select/select-header.js.map +1 -1
  555. package/components/select/select-item.d.ts +4 -4
  556. package/components/select/select-item.js +3 -3
  557. package/components/select/select-item.js.map +1 -1
  558. package/components/select/select.d.ts +48 -27
  559. package/components/select/select.js +128 -74
  560. package/components/select/select.js.map +1 -1
  561. package/components/select/themes/select.base.css.js +1 -1
  562. package/components/select/themes/select.base.css.js.map +1 -1
  563. package/components/select/themes/themes.d.ts +1 -1
  564. package/components/select/themes/themes.js.map +1 -1
  565. package/components/select/validators.d.ts +1 -1
  566. package/components/select/validators.js +1 -1
  567. package/components/select/validators.js.map +1 -1
  568. package/components/slider/range-slider.d.ts +2 -2
  569. package/components/slider/range-slider.js +3 -3
  570. package/components/slider/range-slider.js.map +1 -1
  571. package/components/slider/slider-base.js +9 -5
  572. package/components/slider/slider-base.js.map +1 -1
  573. package/components/slider/slider-label.js +1 -1
  574. package/components/slider/slider-label.js.map +1 -1
  575. package/components/slider/slider.d.ts +3 -3
  576. package/components/slider/slider.js +6 -6
  577. package/components/slider/slider.js.map +1 -1
  578. package/components/slider/themes/themes.d.ts +1 -1
  579. package/components/slider/themes/themes.js.map +1 -1
  580. package/components/snackbar/snackbar.d.ts +3 -3
  581. package/components/snackbar/snackbar.js +4 -4
  582. package/components/snackbar/snackbar.js.map +1 -1
  583. package/components/snackbar/themes/themes.d.ts +1 -1
  584. package/components/snackbar/themes/themes.js.map +1 -1
  585. package/components/splitter/splitter.d.ts +106 -23
  586. package/components/splitter/splitter.js +234 -147
  587. package/components/splitter/splitter.js.map +1 -1
  588. package/components/splitter/themes/themes.d.ts +1 -1
  589. package/components/splitter/themes/themes.js.map +1 -1
  590. package/components/splitter/types.d.ts +14 -3
  591. package/components/splitter/types.js.map +1 -1
  592. package/components/stepper/common/animations.d.ts +1 -1
  593. package/components/stepper/common/animations.js +2 -2
  594. package/components/stepper/common/animations.js.map +1 -1
  595. package/components/stepper/step.d.ts +1 -1
  596. package/components/stepper/step.js +7 -7
  597. package/components/stepper/step.js.map +1 -1
  598. package/components/stepper/stepper.d.ts +5 -5
  599. package/components/stepper/stepper.js +12 -9
  600. package/components/stepper/stepper.js.map +1 -1
  601. package/components/stepper/themes/step/themes.d.ts +1 -1
  602. package/components/stepper/themes/step/themes.js.map +1 -1
  603. package/components/tabs/tab-dom.d.ts +31 -28
  604. package/components/tabs/tab-dom.js +84 -34
  605. package/components/tabs/tab-dom.js.map +1 -1
  606. package/components/tabs/tab.d.ts +24 -6
  607. package/components/tabs/tab.js +34 -13
  608. package/components/tabs/tab.js.map +1 -1
  609. package/components/tabs/tabs.d.ts +36 -22
  610. package/components/tabs/tabs.js +113 -102
  611. package/components/tabs/tabs.js.map +1 -1
  612. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js +1 -1
  613. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js.map +1 -1
  614. package/components/tabs/themes/tab-themes.d.ts +1 -1
  615. package/components/tabs/themes/tab-themes.js.map +1 -1
  616. package/components/tabs/themes/tabs-themes.d.ts +1 -1
  617. package/components/tabs/themes/tabs-themes.js.map +1 -1
  618. package/components/tabs/themes/tabs.base.css.js +1 -1
  619. package/components/tabs/themes/tabs.base.css.js.map +1 -1
  620. package/components/textarea/textarea.d.ts +19 -14
  621. package/components/textarea/textarea.js +22 -17
  622. package/components/textarea/textarea.js.map +1 -1
  623. package/components/textarea/themes/themes.d.ts +1 -1
  624. package/components/textarea/themes/themes.js.map +1 -1
  625. package/components/textarea/validators.d.ts +1 -1
  626. package/components/textarea/validators.js +1 -1
  627. package/components/textarea/validators.js.map +1 -1
  628. package/components/theme-provider/theme-provider.d.ts +1 -1
  629. package/components/theme-provider/theme-provider.js +2 -2
  630. package/components/theme-provider/theme-provider.js.map +1 -1
  631. package/components/tile-manager/position.d.ts +1 -1
  632. package/components/tile-manager/position.js +2 -2
  633. package/components/tile-manager/position.js.map +1 -1
  634. package/components/tile-manager/resize-state.js +4 -3
  635. package/components/tile-manager/resize-state.js.map +1 -1
  636. package/components/tile-manager/themes/container.d.ts +1 -1
  637. package/components/tile-manager/themes/container.js.map +1 -1
  638. package/components/tile-manager/themes/tile.d.ts +1 -1
  639. package/components/tile-manager/themes/tile.js.map +1 -1
  640. package/components/tile-manager/tile-ghost-util.js +1 -1
  641. package/components/tile-manager/tile-ghost-util.js.map +1 -1
  642. package/components/tile-manager/tile-manager.d.ts +1 -1
  643. package/components/tile-manager/tile-manager.js +7 -7
  644. package/components/tile-manager/tile-manager.js.map +1 -1
  645. package/components/tile-manager/tile.d.ts +4 -4
  646. package/components/tile-manager/tile.js +16 -13
  647. package/components/tile-manager/tile.js.map +1 -1
  648. package/components/toast/themes/themes.d.ts +1 -1
  649. package/components/toast/themes/themes.js.map +1 -1
  650. package/components/toast/toast.d.ts +1 -1
  651. package/components/toast/toast.js +3 -3
  652. package/components/toast/toast.js.map +1 -1
  653. package/components/tooltip/controller.d.ts +18 -16
  654. package/components/tooltip/controller.js +62 -41
  655. package/components/tooltip/controller.js.map +1 -1
  656. package/components/tooltip/service.d.ts +2 -1
  657. package/components/tooltip/service.js +10 -15
  658. package/components/tooltip/service.js.map +1 -1
  659. package/components/tooltip/themes/shared/tooltip.common.css.js +1 -1
  660. package/components/tooltip/themes/shared/tooltip.common.css.js.map +1 -1
  661. package/components/tooltip/themes/shared/tooltip.indigo.css.js +1 -1
  662. package/components/tooltip/themes/shared/tooltip.indigo.css.js.map +1 -1
  663. package/components/tooltip/themes/themes.d.ts +1 -1
  664. package/components/tooltip/themes/themes.js.map +1 -1
  665. package/components/tooltip/themes/tooltip.base.css.js +1 -1
  666. package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
  667. package/components/tooltip/tooltip.d.ts +64 -18
  668. package/components/tooltip/tooltip.js +110 -60
  669. package/components/tooltip/tooltip.js.map +1 -1
  670. package/components/tree/themes/container.base.css.js +1 -1
  671. package/components/tree/themes/container.base.css.js.map +1 -1
  672. package/components/tree/themes/container.d.ts +1 -1
  673. package/components/tree/themes/container.js.map +1 -1
  674. package/components/tree/themes/item.base.css.js +1 -1
  675. package/components/tree/themes/item.base.css.js.map +1 -1
  676. package/components/tree/themes/item.d.ts +1 -1
  677. package/components/tree/themes/item.js.map +1 -1
  678. package/components/tree/tree-item.d.ts +62 -36
  679. package/components/tree/tree-item.js +198 -208
  680. package/components/tree/tree-item.js.map +1 -1
  681. package/components/tree/tree.common.d.ts +16 -1
  682. package/components/tree/tree.common.js +40 -1
  683. package/components/tree/tree.common.js.map +1 -1
  684. package/components/tree/tree.d.ts +21 -14
  685. package/components/tree/tree.js +64 -72
  686. package/components/tree/tree.js.map +1 -1
  687. package/components/tree/tree.navigation.d.ts +39 -29
  688. package/components/tree/tree.navigation.js +140 -192
  689. package/components/tree/tree.navigation.js.map +1 -1
  690. package/components/tree/tree.selection.d.ts +32 -31
  691. package/components/tree/tree.selection.js +184 -178
  692. package/components/tree/tree.selection.js.map +1 -1
  693. package/components/types.js.map +1 -1
  694. package/components/validation-container/validation-container.d.ts +1 -1
  695. package/components/validation-container/validation-container.js +7 -6
  696. package/components/validation-container/validation-container.js.map +1 -1
  697. package/components/virtualization/engine.d.ts +92 -0
  698. package/components/virtualization/engine.js +217 -0
  699. package/components/virtualization/engine.js.map +1 -0
  700. package/components/virtualization/types.d.ts +53 -0
  701. package/components/virtualization/types.js +14 -0
  702. package/components/virtualization/types.js.map +1 -0
  703. package/components/virtualization/virtualization.d.ts +235 -0
  704. package/components/virtualization/virtualization.js +474 -0
  705. package/components/virtualization/virtualization.js.map +1 -0
  706. package/components/visually-hidden/visually-hidden.js +1 -1
  707. package/components/visually-hidden/visually-hidden.js.map +1 -1
  708. package/custom-elements.json +57745 -48130
  709. package/extras/chat-markdown-renderer.d.ts +1 -1
  710. package/extras/chat-markdown-renderer.js.map +1 -1
  711. package/igniteui-webcomponents.css-data.json +2 -2
  712. package/igniteui-webcomponents.html-data.json +1 -1
  713. package/index.d.ts +17 -12
  714. package/index.js +11 -9
  715. package/index.js.map +1 -1
  716. package/internals/abort-handler.js.map +1 -0
  717. package/internals/context.d.ts +39 -0
  718. package/{components/common → internals}/context.js +2 -1
  719. package/internals/context.js.map +1 -0
  720. package/internals/controllers/adopt-styles.d.ts +76 -0
  721. package/internals/controllers/adopt-styles.js +173 -0
  722. package/internals/controllers/adopt-styles.js.map +1 -0
  723. package/internals/controllers/aria-projection.d.ts +144 -0
  724. package/internals/controllers/aria-projection.js +138 -0
  725. package/internals/controllers/aria-projection.js.map +1 -0
  726. package/{components/common → internals}/controllers/async-consumer.js +8 -7
  727. package/internals/controllers/async-consumer.js.map +1 -0
  728. package/internals/controllers/command.js.map +1 -0
  729. package/{components/common → internals}/controllers/drag.js +3 -2
  730. package/internals/controllers/drag.js.map +1 -0
  731. package/{components/common → internals}/controllers/focus-ring.js +5 -2
  732. package/internals/controllers/focus-ring.js.map +1 -0
  733. package/{components/common → internals}/controllers/fullscreen.js +6 -3
  734. package/internals/controllers/fullscreen.js.map +1 -0
  735. package/{components/common → internals}/controllers/gestures.d.ts +1 -1
  736. package/{components/common → internals}/controllers/gestures.js +4 -4
  737. package/internals/controllers/gestures.js.map +1 -0
  738. package/{components/common → internals}/controllers/id-resolver.js +15 -21
  739. package/internals/controllers/id-resolver.js.map +1 -0
  740. package/{components/common → internals}/controllers/internals.d.ts +39 -3
  741. package/{components/common → internals}/controllers/internals.js +28 -0
  742. package/internals/controllers/internals.js.map +1 -0
  743. package/{components/common → internals}/controllers/key-bindings.d.ts +3 -6
  744. package/{components/common → internals}/controllers/key-bindings.js +43 -29
  745. package/internals/controllers/key-bindings.js.map +1 -0
  746. package/{components/common → internals}/controllers/mutation-observer.d.ts +3 -2
  747. package/{components/common → internals}/controllers/mutation-observer.js +24 -22
  748. package/internals/controllers/mutation-observer.js.map +1 -0
  749. package/{components/common → internals}/controllers/resize-observer.d.ts +11 -1
  750. package/{components/common → internals}/controllers/resize-observer.js +13 -2
  751. package/internals/controllers/resize-observer.js.map +1 -0
  752. package/{components/common → internals}/controllers/root-click.js +8 -13
  753. package/internals/controllers/root-click.js.map +1 -0
  754. package/{components/common → internals}/controllers/root-scroll.d.ts +11 -8
  755. package/internals/controllers/root-scroll.js +71 -0
  756. package/internals/controllers/root-scroll.js.map +1 -0
  757. package/{components/common → internals}/controllers/slot.d.ts +17 -1
  758. package/{components/common → internals}/controllers/slot.js +18 -6
  759. package/internals/controllers/slot.js.map +1 -0
  760. package/internals/date/compare.d.ts +2 -0
  761. package/internals/date/compare.js +23 -0
  762. package/internals/date/compare.js.map +1 -0
  763. package/internals/date/converters.d.ts +18 -0
  764. package/internals/date/converters.js +73 -0
  765. package/internals/date/converters.js.map +1 -0
  766. package/{components/calendar → internals/date}/model.d.ts +6 -3
  767. package/{components/calendar → internals/date}/model.js +23 -0
  768. package/internals/date/model.js.map +1 -0
  769. package/internals/decorators/blazorAdditionalDependencies.js.map +1 -0
  770. package/internals/decorators/blazorDeepImport.js.map +1 -0
  771. package/internals/decorators/blazorInclude.js.map +1 -0
  772. package/internals/decorators/blazorIndirectRender.js.map +1 -0
  773. package/internals/decorators/blazorSuppressComponent.js.map +1 -0
  774. package/internals/decorators/shadow-options.js.map +1 -0
  775. package/internals/decorators/watch.js.map +1 -0
  776. package/internals/definitions/defineAllComponents.js +153 -0
  777. package/internals/definitions/defineAllComponents.js.map +1 -0
  778. package/internals/definitions/defineComponents.js.map +1 -0
  779. package/internals/definitions/register.js.map +1 -0
  780. package/{components/common → internals}/i18n/EN/calendar.resources.js +1 -1
  781. package/internals/i18n/EN/calendar.resources.js.map +1 -0
  782. package/internals/i18n/EN/chat.resources.js.map +1 -0
  783. package/internals/i18n/EN/date-picker.resources.js.map +1 -0
  784. package/internals/i18n/EN/date-range-picker.resources.js.map +1 -0
  785. package/internals/i18n/i18n-controller.js.map +1 -0
  786. package/{components/common → internals}/i18n/utils.js +1 -1
  787. package/internals/i18n/utils.js.map +1 -0
  788. package/{components/common → internals}/mixins/alert.d.ts +2 -2
  789. package/{components/common → internals}/mixins/alert.js +3 -3
  790. package/internals/mixins/alert.js.map +1 -0
  791. package/{components/common → internals}/mixins/combo-box.d.ts +10 -2
  792. package/{components/common → internals}/mixins/combo-box.js +9 -4
  793. package/internals/mixins/combo-box.js.map +1 -0
  794. package/internals/mixins/constructor.js.map +1 -0
  795. package/internals/mixins/event-emitter.js.map +1 -0
  796. package/{components/common → internals}/mixins/forms/associated-required.js +10 -19
  797. package/internals/mixins/forms/associated-required.js.map +1 -0
  798. package/{components/common → internals}/mixins/forms/associated.js +45 -38
  799. package/internals/mixins/forms/associated.js.map +1 -0
  800. package/{components/common → internals}/mixins/forms/form-transformers.d.ts +1 -1
  801. package/{components/common → internals}/mixins/forms/form-transformers.js +2 -2
  802. package/internals/mixins/forms/form-transformers.js.map +1 -0
  803. package/internals/mixins/forms/form-value.js.map +1 -0
  804. package/{components/common → internals}/mixins/forms/types.d.ts +5 -6
  805. package/internals/mixins/forms/types.js.map +1 -0
  806. package/{components/common → internals}/mixins/mask-behavior.d.ts +11 -3
  807. package/{components/common → internals}/mixins/mask-behavior.js +117 -29
  808. package/internals/mixins/mask-behavior.js.map +1 -0
  809. package/{components/common → internals}/mixins/option.d.ts +0 -2
  810. package/{components/common → internals}/mixins/option.js +1 -4
  811. package/internals/mixins/option.js.map +1 -0
  812. package/internals/part-map.js.map +1 -0
  813. package/{components/common → internals}/templates/input-shell.d.ts +8 -1
  814. package/{components/common → internals}/templates/input-shell.js +14 -4
  815. package/internals/templates/input-shell.js.map +1 -0
  816. package/{components/common → internals}/templates/masked-input.d.ts +8 -4
  817. package/{components/common → internals}/templates/masked-input.js +4 -3
  818. package/internals/templates/masked-input.js.map +1 -0
  819. package/internals/utils/arrays.d.ts +53 -0
  820. package/internals/utils/arrays.js +31 -0
  821. package/internals/utils/arrays.js.map +1 -0
  822. package/internals/utils/dom.d.ts +92 -0
  823. package/internals/utils/dom.js +143 -0
  824. package/internals/utils/dom.js.map +1 -0
  825. package/internals/utils/events.d.ts +41 -0
  826. package/internals/utils/events.js +37 -0
  827. package/internals/utils/events.js.map +1 -0
  828. package/internals/utils/lit.d.ts +8 -0
  829. package/internals/utils/lit.js +15 -0
  830. package/internals/utils/lit.js.map +1 -0
  831. package/internals/utils/math.d.ts +50 -0
  832. package/internals/utils/math.js +38 -0
  833. package/internals/utils/math.js.map +1 -0
  834. package/internals/utils/objects.d.ts +25 -0
  835. package/internals/utils/objects.js +125 -0
  836. package/internals/utils/objects.js.map +1 -0
  837. package/internals/utils/strings.d.ts +44 -0
  838. package/internals/utils/strings.js +46 -0
  839. package/internals/utils/strings.js.map +1 -0
  840. package/internals/utils/types.d.ts +13 -0
  841. package/internals/utils/types.js +31 -0
  842. package/internals/utils/types.js.map +1 -0
  843. package/{components/common → internals}/validators.d.ts +1 -1
  844. package/{components/common → internals}/validators.js +4 -2
  845. package/internals/validators.js.map +1 -0
  846. package/package.json +15 -7
  847. package/themes/dark/bootstrap.css +1 -1
  848. package/themes/dark/fluent.css +1 -1
  849. package/themes/dark/indigo.css +1 -1
  850. package/themes/dark/material.css +1 -1
  851. package/themes/light/bootstrap.css +1 -1
  852. package/themes/light/fluent.css +1 -1
  853. package/themes/light/indigo.css +1 -1
  854. package/themes/light/material.css +1 -1
  855. package/theming/theming-controller.d.ts +2 -2
  856. package/theming/theming-controller.js.map +1 -1
  857. package/web-types.json +3 -3
  858. package/components/calendar/model.js.map +0 -1
  859. package/components/combo/combo-list.d.ts +0 -11
  860. package/components/combo/combo-list.js +0 -13
  861. package/components/combo/combo-list.js.map +0 -1
  862. package/components/common/abort-handler.js.map +0 -1
  863. package/components/common/context.d.ts +0 -25
  864. package/components/common/context.js.map +0 -1
  865. package/components/common/controllers/adopt-styles.d.ts +0 -124
  866. package/components/common/controllers/adopt-styles.js +0 -75
  867. package/components/common/controllers/adopt-styles.js.map +0 -1
  868. package/components/common/controllers/async-consumer.js.map +0 -1
  869. package/components/common/controllers/command.js.map +0 -1
  870. package/components/common/controllers/drag.js.map +0 -1
  871. package/components/common/controllers/focus-ring.js.map +0 -1
  872. package/components/common/controllers/fullscreen.js.map +0 -1
  873. package/components/common/controllers/gestures.js.map +0 -1
  874. package/components/common/controllers/id-resolver.js.map +0 -1
  875. package/components/common/controllers/internals.js.map +0 -1
  876. package/components/common/controllers/key-bindings.js.map +0 -1
  877. package/components/common/controllers/mutation-observer.js.map +0 -1
  878. package/components/common/controllers/resize-observer.js.map +0 -1
  879. package/components/common/controllers/root-click.js.map +0 -1
  880. package/components/common/controllers/root-scroll.js +0 -63
  881. package/components/common/controllers/root-scroll.js.map +0 -1
  882. package/components/common/controllers/slot.js.map +0 -1
  883. package/components/common/decorators/blazorAdditionalDependencies.js.map +0 -1
  884. package/components/common/decorators/blazorDeepImport.js.map +0 -1
  885. package/components/common/decorators/blazorInclude.js.map +0 -1
  886. package/components/common/decorators/blazorIndirectRender.js.map +0 -1
  887. package/components/common/decorators/blazorSuppressComponent.js.map +0 -1
  888. package/components/common/decorators/shadow-options.js.map +0 -1
  889. package/components/common/decorators/watch.js.map +0 -1
  890. package/components/common/definitions/defineAllComponents.js +0 -151
  891. package/components/common/definitions/defineAllComponents.js.map +0 -1
  892. package/components/common/definitions/defineComponents.js.map +0 -1
  893. package/components/common/definitions/register.js.map +0 -1
  894. package/components/common/i18n/EN/calendar.resources.js.map +0 -1
  895. package/components/common/i18n/EN/chat.resources.js.map +0 -1
  896. package/components/common/i18n/EN/date-picker.resources.js.map +0 -1
  897. package/components/common/i18n/EN/date-range-picker.resources.js.map +0 -1
  898. package/components/common/i18n/i18n-controller.js.map +0 -1
  899. package/components/common/i18n/utils.js.map +0 -1
  900. package/components/common/mixins/alert.js.map +0 -1
  901. package/components/common/mixins/combo-box.js.map +0 -1
  902. package/components/common/mixins/constructor.js.map +0 -1
  903. package/components/common/mixins/event-emitter.js.map +0 -1
  904. package/components/common/mixins/forms/associated-required.js.map +0 -1
  905. package/components/common/mixins/forms/associated.js.map +0 -1
  906. package/components/common/mixins/forms/form-transformers.js.map +0 -1
  907. package/components/common/mixins/forms/form-value.js.map +0 -1
  908. package/components/common/mixins/forms/types.js.map +0 -1
  909. package/components/common/mixins/mask-behavior.js.map +0 -1
  910. package/components/common/mixins/option.js.map +0 -1
  911. package/components/common/part-map.js.map +0 -1
  912. package/components/common/templates/input-shell.js.map +0 -1
  913. package/components/common/templates/masked-input.js.map +0 -1
  914. package/components/common/util.d.ts +0 -196
  915. package/components/common/util.js +0 -390
  916. package/components/common/util.js.map +0 -1
  917. package/components/common/validators.js.map +0 -1
  918. package/components/icon/registry/default-map.d.ts +0 -107
  919. package/components/icon/registry/default-map.js +0 -25
  920. package/components/icon/registry/default-map.js.map +0 -1
  921. package/components/nav-drawer/themes/shared/container/nav-drawer.fluent.css.js +0 -3
  922. package/components/nav-drawer/themes/shared/container/nav-drawer.fluent.css.js.map +0 -1
  923. package/components/radio/utils.d.ts +0 -13
  924. package/components/radio/utils.js +0 -37
  925. package/components/radio/utils.js.map +0 -1
  926. /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
  927. /package/{components/common → internals}/abort-handler.d.ts +0 -0
  928. /package/{components/common → internals}/abort-handler.js +0 -0
  929. /package/{components/common → internals}/controllers/async-consumer.d.ts +0 -0
  930. /package/{components/common → internals}/controllers/command.d.ts +0 -0
  931. /package/{components/common → internals}/controllers/command.js +0 -0
  932. /package/{components/common → internals}/controllers/drag.d.ts +0 -0
  933. /package/{components/common → internals}/controllers/focus-ring.d.ts +0 -0
  934. /package/{components/common → internals}/controllers/fullscreen.d.ts +0 -0
  935. /package/{components/common → internals}/controllers/id-resolver.d.ts +0 -0
  936. /package/{components/common → internals}/controllers/root-click.d.ts +0 -0
  937. /package/{components/common → internals}/decorators/blazorAdditionalDependencies.d.ts +0 -0
  938. /package/{components/common → internals}/decorators/blazorAdditionalDependencies.js +0 -0
  939. /package/{components/common → internals}/decorators/blazorDeepImport.d.ts +0 -0
  940. /package/{components/common → internals}/decorators/blazorDeepImport.js +0 -0
  941. /package/{components/common → internals}/decorators/blazorInclude.d.ts +0 -0
  942. /package/{components/common → internals}/decorators/blazorInclude.js +0 -0
  943. /package/{components/common → internals}/decorators/blazorIndirectRender.d.ts +0 -0
  944. /package/{components/common → internals}/decorators/blazorIndirectRender.js +0 -0
  945. /package/{components/common → internals}/decorators/blazorSuppressComponent.d.ts +0 -0
  946. /package/{components/common → internals}/decorators/blazorSuppressComponent.js +0 -0
  947. /package/{components/common → internals}/decorators/shadow-options.d.ts +0 -0
  948. /package/{components/common → internals}/decorators/shadow-options.js +0 -0
  949. /package/{components/common → internals}/decorators/watch.d.ts +0 -0
  950. /package/{components/common → internals}/decorators/watch.js +0 -0
  951. /package/{components/common → internals}/definitions/defineAllComponents.d.ts +0 -0
  952. /package/{components/common → internals}/definitions/defineComponents.d.ts +0 -0
  953. /package/{components/common → internals}/definitions/defineComponents.js +0 -0
  954. /package/{components/common → internals}/definitions/register.d.ts +0 -0
  955. /package/{components/common → internals}/definitions/register.js +0 -0
  956. /package/{components/common → internals}/i18n/EN/calendar.resources.d.ts +0 -0
  957. /package/{components/common → internals}/i18n/EN/chat.resources.d.ts +0 -0
  958. /package/{components/common → internals}/i18n/EN/chat.resources.js +0 -0
  959. /package/{components/common → internals}/i18n/EN/date-picker.resources.d.ts +0 -0
  960. /package/{components/common → internals}/i18n/EN/date-picker.resources.js +0 -0
  961. /package/{components/common → internals}/i18n/EN/date-range-picker.resources.d.ts +0 -0
  962. /package/{components/common → internals}/i18n/EN/date-range-picker.resources.js +0 -0
  963. /package/{components/common → internals}/i18n/i18n-controller.d.ts +0 -0
  964. /package/{components/common → internals}/i18n/i18n-controller.js +0 -0
  965. /package/{components/common → internals}/i18n/utils.d.ts +0 -0
  966. /package/{components/common → internals}/mixins/constructor.d.ts +0 -0
  967. /package/{components/common → internals}/mixins/constructor.js +0 -0
  968. /package/{components/common → internals}/mixins/event-emitter.d.ts +0 -0
  969. /package/{components/common → internals}/mixins/event-emitter.js +0 -0
  970. /package/{components/common → internals}/mixins/forms/associated-required.d.ts +0 -0
  971. /package/{components/common → internals}/mixins/forms/associated.d.ts +0 -0
  972. /package/{components/common → internals}/mixins/forms/form-value.d.ts +0 -0
  973. /package/{components/common → internals}/mixins/forms/form-value.js +0 -0
  974. /package/{components/common → internals}/mixins/forms/types.js +0 -0
  975. /package/{components/common → internals}/part-map.d.ts +0 -0
  976. /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. */\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"]}
@@ -0,0 +1,92 @@
1
+ import type { ScrollAlignment, VisibleRange } from './types.js';
2
+ /**
3
+ * Pure scroll-math engine for a single axis of virtual scrolling. All size
4
+ * state is held in a Fenwick tree.
5
+ *
6
+ * ### Virtual vs DOM coordinates
7
+ *
8
+ * Browsers cap how far an element can be scrolled. When the summed item size
9
+ * exceeds that cap, the engine compresses the *virtual* space (`0…totalSize`)
10
+ * into the *DOM* space the browser can represent (`0…domSize`) by the factor
11
+ * `_virtualRatio`. Every offset crossing that boundary is scaled: incoming
12
+ * scroll positions are multiplied by the ratio, outgoing offsets divided by
13
+ * it. Item sizes render at their real px size and so are always virtual.
14
+ */
15
+ export declare class VirtualScrollEngine {
16
+ private _maxBrowserSize;
17
+ /**
18
+ * The ratio `totalSize / maxBrowserSize` when `totalSize` exceeds the
19
+ * maximum DOM coordinate the browser supports; `1` otherwise.
20
+ * Used to map virtual scroll positions to DOM scroll positions.
21
+ */
22
+ private _virtualRatio;
23
+ /** Binary Indexed Tree for O(log N) size queries and updates. */
24
+ private _tree;
25
+ /**
26
+ * Called whenever item sizes or the item count change, e.g.
27
+ * `() => this.requestUpdate()`.
28
+ */
29
+ onSizeChange: (() => void) | null;
30
+ /** Total virtual size of all items in px. */
31
+ get totalSize(): number;
32
+ /** Total size in DOM space, clamped to the maximum browser size. */
33
+ get domSize(): number;
34
+ /** Probes the document for the maximum browser size and rescales. */
35
+ initMaxBrowserSize(doc: Document): void;
36
+ /**
37
+ * Grows or shrinks the internal sizes array to `length`. Measured sizes
38
+ * below `retainCount` are preserved; the rest is refilled with
39
+ * `estimatedSize` and marked unmeasured. Callers that only append can leave
40
+ * `retainCount` at its default; callers whose data changed identity at some
41
+ * index must pass it, so the stale measurements behind it are discarded.
42
+ */
43
+ resize(length: number, estimatedSize: number, retainCount?: number): void;
44
+ /** Records the measured DOM size for a single item. */
45
+ measureItem(index: number, size: number): void;
46
+ /**
47
+ * Applies a new estimated size to every item not yet measured in the DOM.
48
+ * Use this when `estimatedItemSize` changes but the item count doesn't, so
49
+ * `resize` would be a no-op.
50
+ */
51
+ updateEstimatedSize(estimatedSize: number): void;
52
+ /**
53
+ * Returns the DOM scroll offset in px that puts the item at `index` at the
54
+ * leading edge of the viewport.
55
+ */
56
+ getScrollOffsetForIndex(index: number): number;
57
+ /**
58
+ * The largest DOM scroll offset the host can reach for the given viewport
59
+ * size. Requesting anything beyond it silently does nothing, so offsets
60
+ * handed out to a caller that waits for the scroll to settle are clamped
61
+ * to it.
62
+ */
63
+ private _getMaxScrollOffset;
64
+ /**
65
+ * Returns the DOM scroll offset that positions the item at `index`
66
+ * according to `align` within a `viewportSize` px viewport, 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: a DOM pixel is worth
71
+ * `_virtualRatio` virtual pixels, so mixing the two would scale the slack.
72
+ */
73
+ getAlignedScrollOffset(index: number, viewportSize: number, align: ScrollAlignment): number;
74
+ /**
75
+ * Whether the item at `index` needs no scrolling to be seen at the given DOM
76
+ * scroll position: either it sits entirely inside the viewport, or it is
77
+ * larger than the viewport and already covers it end to end. The latter
78
+ * mirrors native `scrollIntoView({ block: 'nearest' })`.
79
+ */
80
+ isIndexInView(index: number, scrollPosition: number, viewportSize: number): boolean;
81
+ /**
82
+ * Returns the visible + over-scanned item range for the given scroll state.
83
+ */
84
+ getVisibleRange(scrollPosition: number, viewportSize: number, overScan: number): VisibleRange;
85
+ /**
86
+ * Sum of the actual sizes of the items in [startIndex, endIndex]. Clamps the
87
+ * content translate offset so rendered items never overflow past `domSize`
88
+ * under coordinate compression.
89
+ */
90
+ getPhysicalRangeSize(startIndex: number, endIndex: number): number;
91
+ private _updateVirtualRatio;
92
+ }
@@ -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 doesn't change over a document's lifetime,\n * so instances sharing one document share a single probe.\n */\nconst _maxBrowserSizeCache = new WeakMap<Document, number>();\n\n/**\n * Probes the browser for the maximum scrollable coordinate it 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]`, keeping both `prefixSum(index)` and\n * `prefixSum(index + 1)` addressable. Callers guard for `length > 0`.\n */\nfunction clampIndex(index: number, length: number): number {\n return clamp(index, 0, length - 1);\n}\n\n/**\n * Fills `tree` - a 1-indexed Fenwick array of `sizes.length + 1` entries,\n * expected to be zeroed - with the partial range sums of `sizes` in a single\n * O(N) pass. Returns the grand total.\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. Every hot-path\n * operation is O(log N): point update (item measured), prefix sum (scroll\n * offset) and index at offset (scroll -> item, via binary lifting).\n */\nclass SizeTree {\n public readonly length: number;\n\n /** 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 calc. */\n private readonly _sizes: Float64Array;\n\n /**\n * Which indices hold a real, DOM-measured size (`1`) rather than an\n * estimate (`0`). Only the latter are touched by `applyEstimate`.\n */\n private readonly _measured: Uint8Array;\n\n /** Running total maintained alongside tree updates in O(1). */\n private _total: number;\n\n /**\n * Highest power-of-two <= `length`, for the binary lifting in\n * `findIndexAtOffset`. Precomputed since that runs on every 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 all initialized to `fillSize`, none of\n * which are considered measured yet. 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 * Update the size of the item at 0-based index. Marks the item as\n * explicitly measured, exempting it from future `applyEstimate()` calls.\n * Returns true when the size actually 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 a single O(N) pass. Sizes and\n * their measured flags are preserved up to\n * `min(this.length, newLength, retainCount)`; the rest is filled with\n * `fillSize` and marked unmeasured. Pass a `retainCount` below the item\n * count when the data behind those indices 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 * Applies `estimatedSize` to every unmeasured item, leaving measured ones\n * untouched. Returns true when at least one size changed.\n *\n * One estimate change can affect most of the list at once, so this rebuilds\n * in a single 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 containing the scroll `offset`, i.e.\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 a single axis of virtual scrolling. All size\n * state is held in a Fenwick tree.\n *\n * ### Virtual vs DOM coordinates\n *\n * Browsers cap how far an element can be scrolled. When the summed item size\n * exceeds that cap, the engine compresses the *virtual* space (`0…totalSize`)\n * into the *DOM* space the browser can represent (`0…domSize`) by the factor\n * `_virtualRatio`. Every offset crossing that boundary is scaled: incoming\n * scroll positions are multiplied by the ratio, outgoing offsets divided by\n * it. Item sizes render at their real px size and so are always virtual.\n */\nexport class VirtualScrollEngine {\n private _maxBrowserSize = Number.POSITIVE_INFINITY;\n\n /**\n * The ratio `totalSize / maxBrowserSize` when `totalSize` exceeds the\n * maximum DOM coordinate the browser supports; `1` otherwise.\n * Used to map 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 whenever item sizes or the item count change, e.g.\n * `() => 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 /** Probes the document for the maximum browser size and rescales. */\n public initMaxBrowserSize(doc: Document): void {\n this._maxBrowserSize = getMaxBrowserSizeProbePx(doc);\n this._updateVirtualRatio();\n }\n\n /**\n * Grows or shrinks the internal sizes array to `length`. Measured sizes\n * below `retainCount` are preserved; the rest is refilled with\n * `estimatedSize` and marked unmeasured. Callers that only append can leave\n * `retainCount` at its default; callers whose data changed identity at some\n * index must pass it, so the stale measurements behind 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 every item not yet measured in the DOM.\n * Use this when `estimatedItemSize` changes but the item count doesn't, so\n * `resize` would be 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. Requesting anything beyond it silently does nothing, so offsets\n * handed out to a caller that waits for the scroll to settle are clamped\n * 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`\n * according to `align` within a `viewportSize` px viewport, 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: a DOM pixel is worth\n * `_virtualRatio` virtual pixels, so mixing the two would scale the 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` needs no scrolling to be seen at the given DOM\n * scroll position: either it sits entirely inside the viewport, or it is\n * larger than the viewport and already covers it end to end. The latter\n * mirrors 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 + over-scanned item range for the given scroll 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 px size, so a `viewportSize` px viewport always shows that many\n // virtual px worth of items, however compressed the scroll range is.\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]. Clamps the\n * content translate offset so rendered items never overflow past `domSize`\n * 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,53 @@
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 within the viewport.
20
+ * Mirrors the subset of `ScrollLogicalPosition` the engine can act on.
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 end
43
+ * of the loaded items. Consumers listen for it and append what it asks for.
44
+ */
45
+ export interface VirtualScrollDataRequest {
46
+ /**
47
+ * The first index that does not yet have data.
48
+ * Append at least `count` more items starting here.
49
+ */
50
+ startIndex: number;
51
+ /** Number of items being requested. */
52
+ count: number;
53
+ }
@@ -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 within the viewport.\n * Mirrors the subset of `ScrollLogicalPosition` the engine can act on.\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 end\n * of the loaded items. Consumers listen for it and append what it asks for.\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"]}