igniteui-webcomponents 7.3.2 → 7.4.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 (441) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/animations/easings.d.ts +21 -31
  3. package/animations/easings.js +21 -34
  4. package/animations/easings.js.map +1 -1
  5. package/animations/player.d.ts +8 -16
  6. package/animations/player.js +5 -8
  7. package/animations/player.js.map +1 -1
  8. package/animations/view-transition.d.ts +10 -10
  9. package/animations/view-transition.js +26 -37
  10. package/animations/view-transition.js.map +1 -1
  11. package/components/breadcrumb/breadcrumb.d.ts +74 -0
  12. package/components/breadcrumb/breadcrumb.js +107 -0
  13. package/components/breadcrumb/breadcrumb.js.map +1 -0
  14. package/components/breadcrumb/breadcrumbs.d.ts +60 -0
  15. package/components/breadcrumb/breadcrumbs.js +50 -0
  16. package/components/breadcrumb/breadcrumbs.js.map +1 -0
  17. package/components/breadcrumb/themes/breadcrumb.base.css.js +3 -0
  18. package/components/breadcrumb/themes/breadcrumb.base.css.js.map +1 -0
  19. package/components/breadcrumb/themes/breadcrumbs.base.css.d.ts +1 -0
  20. package/components/{resize-container/themes/resize-container.base.css.js → breadcrumb/themes/breadcrumbs.base.css.js} +2 -2
  21. package/components/breadcrumb/themes/breadcrumbs.base.css.js.map +1 -0
  22. package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.d.ts +1 -0
  23. package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.js +3 -0
  24. package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.js.map +1 -0
  25. package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.d.ts +1 -0
  26. package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.js +3 -0
  27. package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.js.map +1 -0
  28. package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.d.ts +1 -0
  29. package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.js +3 -0
  30. package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.js.map +1 -0
  31. package/components/breadcrumb/themes/dark/breadcrumb.material.css.d.ts +1 -0
  32. package/components/breadcrumb/themes/dark/breadcrumb.material.css.js +3 -0
  33. package/components/breadcrumb/themes/dark/breadcrumb.material.css.js.map +1 -0
  34. package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.d.ts +1 -0
  35. package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.js +3 -0
  36. package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.js.map +1 -0
  37. package/components/breadcrumb/themes/light/breadcrumb.fluent.css.d.ts +1 -0
  38. package/components/breadcrumb/themes/light/breadcrumb.fluent.css.js +3 -0
  39. package/components/breadcrumb/themes/light/breadcrumb.fluent.css.js.map +1 -0
  40. package/components/breadcrumb/themes/light/breadcrumb.indigo.css.d.ts +1 -0
  41. package/components/breadcrumb/themes/light/breadcrumb.indigo.css.js +3 -0
  42. package/components/breadcrumb/themes/light/breadcrumb.indigo.css.js.map +1 -0
  43. package/components/breadcrumb/themes/light/breadcrumb.material.css.d.ts +1 -0
  44. package/components/breadcrumb/themes/light/breadcrumb.material.css.js +3 -0
  45. package/components/breadcrumb/themes/light/breadcrumb.material.css.js.map +1 -0
  46. package/components/breadcrumb/themes/light/breadcrumb.shared.css.d.ts +1 -0
  47. package/components/breadcrumb/themes/light/breadcrumb.shared.css.js +3 -0
  48. package/components/breadcrumb/themes/light/breadcrumb.shared.css.js.map +1 -0
  49. package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.d.ts +1 -0
  50. package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.js +3 -0
  51. package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.js.map +1 -0
  52. package/components/breadcrumb/themes/shared/breadcrumb.common.css.d.ts +1 -0
  53. package/components/breadcrumb/themes/shared/breadcrumb.common.css.js +3 -0
  54. package/components/breadcrumb/themes/shared/breadcrumb.common.css.js.map +1 -0
  55. package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.d.ts +1 -0
  56. package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.js +3 -0
  57. package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.js.map +1 -0
  58. package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.d.ts +1 -0
  59. package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.js +3 -0
  60. package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.js.map +1 -0
  61. package/components/breadcrumb/themes/shared/breadcrumb.material.css.d.ts +1 -0
  62. package/components/breadcrumb/themes/shared/breadcrumb.material.css.js +3 -0
  63. package/components/breadcrumb/themes/shared/breadcrumb.material.css.js.map +1 -0
  64. package/components/breadcrumb/themes/themes.d.ts +2 -0
  65. package/components/breadcrumb/themes/themes.js +50 -0
  66. package/components/breadcrumb/themes/themes.js.map +1 -0
  67. package/components/button/button.d.ts +0 -2
  68. package/components/button/button.js.map +1 -1
  69. package/components/button-group/button-group.d.ts +42 -12
  70. package/components/button-group/button-group.js +82 -34
  71. package/components/button-group/button-group.js.map +1 -1
  72. package/components/button-group/toggle-button.d.ts +6 -1
  73. package/components/button-group/toggle-button.js +28 -2
  74. package/components/button-group/toggle-button.js.map +1 -1
  75. package/components/calendar/base.js +2 -1
  76. package/components/calendar/base.js.map +1 -1
  77. package/components/calendar/calendar.d.ts +2 -3
  78. package/components/calendar/calendar.js.map +1 -1
  79. package/components/calendar/days-view/days-view.d.ts +2 -2
  80. package/components/calendar/days-view/days-view.js.map +1 -1
  81. package/components/carousel/carousel-indicator.js +1 -0
  82. package/components/carousel/carousel-indicator.js.map +1 -1
  83. package/components/carousel/carousel-slide.d.ts +1 -1
  84. package/components/carousel/carousel-slide.js.map +1 -1
  85. package/components/carousel/carousel.d.ts +3 -3
  86. package/components/carousel/carousel.js.map +1 -1
  87. package/components/chat/chat-input.d.ts +1 -2
  88. package/components/chat/chat-input.js +1 -1
  89. package/components/chat/chat-input.js.map +1 -1
  90. package/components/chat/chat-state.d.ts +8 -9
  91. package/components/chat/chat-state.js.map +1 -1
  92. package/components/chat/chat.d.ts +1 -3
  93. package/components/chat/chat.js +2 -2
  94. package/components/chat/chat.js.map +1 -1
  95. package/components/chat/message-attachments.d.ts +6 -15
  96. package/components/chat/message-attachments.js.map +1 -1
  97. package/components/chat/utils.d.ts +0 -1
  98. package/components/chat/utils.js +1 -1
  99. package/components/chat/utils.js.map +1 -1
  100. package/components/checkbox/checkbox-base.d.ts +1 -1
  101. package/components/checkbox/checkbox.js +1 -1
  102. package/components/checkbox/checkbox.js.map +1 -1
  103. package/components/chip/chip.d.ts +2 -2
  104. package/components/chip/chip.js.map +1 -1
  105. package/components/color-picker/color-picker.d.ts +35 -34
  106. package/components/color-picker/color-picker.js +9 -4
  107. package/components/color-picker/color-picker.js.map +1 -1
  108. package/components/color-picker/common.d.ts +0 -2
  109. package/components/color-picker/common.js +2 -2
  110. package/components/color-picker/common.js.map +1 -1
  111. package/components/color-picker/converters.js.map +1 -1
  112. package/components/color-picker/picker-canvas.js.map +1 -1
  113. package/components/combo/combo.d.ts +18 -20
  114. package/components/combo/combo.js +8 -2
  115. package/components/combo/combo.js.map +1 -1
  116. package/components/combo/controllers/data.d.ts +7 -10
  117. package/components/combo/controllers/data.js.map +1 -1
  118. package/components/date-picker/date-picker.base.d.ts +22 -27
  119. package/components/date-picker/date-picker.base.js +7 -1
  120. package/components/date-picker/date-picker.base.js.map +1 -1
  121. package/components/date-picker/date-picker.d.ts +1 -1
  122. package/components/date-picker/date-picker.js +5 -3
  123. package/components/date-picker/date-picker.js.map +1 -1
  124. package/components/date-range-picker/date-range-input.d.ts +0 -2
  125. package/components/date-range-picker/date-range-input.js +0 -6
  126. package/components/date-range-picker/date-range-input.js.map +1 -1
  127. package/components/date-range-picker/date-range-picker.d.ts +22 -31
  128. package/components/date-range-picker/date-range-picker.js +7 -7
  129. package/components/date-range-picker/date-range-picker.js.map +1 -1
  130. package/components/date-range-picker/i18n.d.ts +21 -0
  131. package/components/date-range-picker/i18n.js +10 -0
  132. package/components/date-range-picker/i18n.js.map +1 -0
  133. package/components/date-range-picker/predefined-ranges-area.d.ts +3 -3
  134. package/components/date-range-picker/predefined-ranges-area.js +2 -5
  135. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  136. package/components/date-range-picker/validators.d.ts +0 -4
  137. package/components/date-range-picker/validators.js +4 -4
  138. package/components/date-range-picker/validators.js.map +1 -1
  139. package/components/date-time-input/date-time-input.base.d.ts +39 -37
  140. package/components/date-time-input/date-time-input.base.js +6 -0
  141. package/components/date-time-input/date-time-input.base.js.map +1 -1
  142. package/components/date-time-input/date-time-input.d.ts +1 -11
  143. package/components/date-time-input/date-time-input.js +0 -6
  144. package/components/date-time-input/date-time-input.js.map +1 -1
  145. package/components/date-time-input/datetime-mask-parser.d.ts +0 -10
  146. package/components/date-time-input/datetime-mask-parser.js +1 -1
  147. package/components/date-time-input/datetime-mask-parser.js.map +1 -1
  148. package/components/dialog/dialog.js.map +1 -1
  149. package/components/dropdown/dropdown-group.d.ts +2 -10
  150. package/components/dropdown/dropdown-group.js +2 -27
  151. package/components/dropdown/dropdown-group.js.map +1 -1
  152. package/components/dropdown/dropdown.d.ts +17 -23
  153. package/components/dropdown/dropdown.js +5 -17
  154. package/components/dropdown/dropdown.js.map +1 -1
  155. package/components/file-input/file-input.d.ts +2 -2
  156. package/components/file-input/file-input.js.map +1 -1
  157. package/components/icon/icon.d.ts +1 -1
  158. package/components/icon/icon.registry.d.ts +6 -6
  159. package/components/icon/icon.registry.js.map +1 -1
  160. package/components/input/input.d.ts +3 -3
  161. package/components/input/input.js.map +1 -1
  162. package/components/mask-input/mask-history.d.ts +22 -18
  163. package/components/mask-input/mask-history.js.map +1 -1
  164. package/components/mask-input/mask-input.d.ts +1 -1
  165. package/components/mask-input/mask-parser.d.ts +11 -13
  166. package/components/mask-input/mask-parser.js.map +1 -1
  167. package/components/popover/popover.d.ts +45 -34
  168. package/components/popover/popover.js +54 -122
  169. package/components/popover/popover.js.map +1 -1
  170. package/components/popover/position/arrow.d.ts +19 -0
  171. package/components/popover/position/arrow.js +33 -0
  172. package/components/popover/position/arrow.js.map +1 -0
  173. package/components/popover/position/floating.d.ts +40 -0
  174. package/components/popover/position/floating.js +146 -0
  175. package/components/popover/position/floating.js.map +1 -0
  176. package/components/popover/position/native.d.ts +45 -0
  177. package/components/popover/position/native.js +158 -0
  178. package/components/popover/position/native.js.map +1 -0
  179. package/components/popover/position/strategy.d.ts +37 -0
  180. package/components/popover/position/strategy.js +21 -0
  181. package/components/popover/position/strategy.js.map +1 -0
  182. package/components/popover/position/types.d.ts +26 -0
  183. package/components/popover/position/types.js +15 -0
  184. package/components/popover/position/types.js.map +1 -0
  185. package/components/popover/themes/light/popover.base.css.js +1 -1
  186. package/components/popover/themes/light/popover.base.css.js.map +1 -1
  187. package/components/progress/circular-progress.d.ts +0 -5
  188. package/components/progress/circular-progress.js.map +1 -1
  189. package/components/qr-code/qr-code.d.ts +1 -1
  190. package/components/radio/radio.d.ts +4 -4
  191. package/components/radio/radio.js +17 -14
  192. package/components/radio/radio.js.map +1 -1
  193. package/components/radio-group/radio-group.js.map +1 -1
  194. package/components/rating/rating.d.ts +6 -6
  195. package/components/rating/rating.js.map +1 -1
  196. package/components/select/select-group.d.ts +5 -10
  197. package/components/select/select-group.js +10 -34
  198. package/components/select/select-group.js.map +1 -1
  199. package/components/select/select.d.ts +12 -20
  200. package/components/select/select.js +4 -14
  201. package/components/select/select.js.map +1 -1
  202. package/components/splitter/splitter.d.ts +6 -6
  203. package/components/splitter/splitter.js.map +1 -1
  204. package/components/textarea/textarea.d.ts +1 -1
  205. package/components/textarea/textarea.js.map +1 -1
  206. package/components/tile-manager/tile-manager.d.ts +6 -7
  207. package/components/tile-manager/tile-manager.js.map +1 -1
  208. package/components/tile-manager/tile.d.ts +3 -3
  209. package/components/tile-manager/tile.js.map +1 -1
  210. package/components/toast/toast.d.ts +0 -2
  211. package/components/toast/toast.js.map +1 -1
  212. package/components/tooltip/controller.js.map +1 -1
  213. package/components/tooltip/service.js +4 -5
  214. package/components/tooltip/service.js.map +1 -1
  215. package/components/tooltip/tooltip.d.ts +34 -13
  216. package/components/tooltip/tooltip.js +8 -4
  217. package/components/tooltip/tooltip.js.map +1 -1
  218. package/components/tree/tree-item.d.ts +6 -6
  219. package/components/tree/tree-item.js.map +1 -1
  220. package/components/tree/tree.navigation.d.ts +5 -6
  221. package/components/tree/tree.navigation.js.map +1 -1
  222. package/components/tree/tree.selection.js.map +1 -1
  223. package/components/types.d.ts +1 -1
  224. package/components/types.js.map +1 -1
  225. package/components/validation-container/validation-container.js.map +1 -1
  226. package/components/virtualization/engine.d.ts +5 -5
  227. package/components/virtualization/engine.js.map +1 -1
  228. package/components/virtualization/virtualization.d.ts +61 -63
  229. package/components/virtualization/virtualization.js +6 -5
  230. package/components/virtualization/virtualization.js.map +1 -1
  231. package/custom-elements.json +16280 -19679
  232. package/igniteui-webcomponents.css-data.json +2 -2
  233. package/igniteui-webcomponents.html-data.json +1 -1
  234. package/index.d.ts +2 -0
  235. package/index.js +2 -0
  236. package/index.js.map +1 -1
  237. package/internals/abort-handler.d.ts +13 -25
  238. package/internals/abort-handler.js +4 -6
  239. package/internals/abort-handler.js.map +1 -1
  240. package/internals/context.d.ts +13 -7
  241. package/internals/context.js +2 -1
  242. package/internals/context.js.map +1 -1
  243. package/internals/controllers/adopt-styles.d.ts +19 -20
  244. package/internals/controllers/adopt-styles.js +3 -8
  245. package/internals/controllers/adopt-styles.js.map +1 -1
  246. package/internals/controllers/aria-projection.d.ts +56 -55
  247. package/internals/controllers/aria-projection.js +14 -15
  248. package/internals/controllers/aria-projection.js.map +1 -1
  249. package/internals/controllers/async-consumer.js.map +1 -1
  250. package/internals/controllers/command.d.ts +15 -30
  251. package/internals/controllers/command.js +2 -7
  252. package/internals/controllers/command.js.map +1 -1
  253. package/internals/controllers/context-provider.d.ts +7 -13
  254. package/internals/controllers/context-provider.js.map +1 -1
  255. package/internals/controllers/focus-ring.d.ts +10 -30
  256. package/internals/controllers/focus-ring.js +6 -12
  257. package/internals/controllers/focus-ring.js.map +1 -1
  258. package/internals/controllers/fullscreen.d.ts +7 -23
  259. package/internals/controllers/fullscreen.js +3 -9
  260. package/internals/controllers/fullscreen.js.map +1 -1
  261. package/internals/controllers/gestures.d.ts +10 -29
  262. package/internals/controllers/gestures.js +1 -3
  263. package/internals/controllers/gestures.js.map +1 -1
  264. package/internals/controllers/group.d.ts +13 -30
  265. package/internals/controllers/group.js.map +1 -1
  266. package/internals/controllers/host-listeners.d.ts +28 -0
  267. package/internals/controllers/host-listeners.js +27 -0
  268. package/internals/controllers/host-listeners.js.map +1 -0
  269. package/internals/controllers/id-resolver.d.ts +8 -9
  270. package/internals/controllers/id-resolver.js +6 -14
  271. package/internals/controllers/id-resolver.js.map +1 -1
  272. package/internals/controllers/internals.d.ts +53 -104
  273. package/internals/controllers/internals.js +40 -13
  274. package/internals/controllers/internals.js.map +1 -1
  275. package/internals/controllers/key-bindings.d.ts +61 -158
  276. package/internals/controllers/key-bindings.js +68 -67
  277. package/internals/controllers/key-bindings.js.map +1 -1
  278. package/internals/controllers/keys.d.ts +32 -0
  279. package/internals/controllers/keys.js +20 -0
  280. package/internals/controllers/keys.js.map +1 -0
  281. package/internals/controllers/mutation-observer.d.ts +14 -37
  282. package/internals/controllers/mutation-observer.js +1 -1
  283. package/internals/controllers/mutation-observer.js.map +1 -1
  284. package/internals/controllers/resize-observer.d.ts +9 -19
  285. package/internals/controllers/resize-observer.js.map +1 -1
  286. package/internals/controllers/root-click.d.ts +11 -42
  287. package/internals/controllers/root-click.js +4 -6
  288. package/internals/controllers/root-click.js.map +1 -1
  289. package/internals/controllers/roving-focus.d.ts +16 -35
  290. package/internals/controllers/roving-focus.js.map +1 -1
  291. package/internals/controllers/slot.d.ts +25 -54
  292. package/internals/controllers/slot.js +6 -6
  293. package/internals/controllers/slot.js.map +1 -1
  294. package/internals/controllers/toggle.d.ts +44 -48
  295. package/internals/controllers/toggle.js.map +1 -1
  296. package/internals/date/compare.js.map +1 -1
  297. package/internals/date/converters.d.ts +10 -7
  298. package/internals/date/converters.js.map +1 -1
  299. package/internals/date/model.d.ts +9 -16
  300. package/internals/date/model.js +22 -25
  301. package/internals/date/model.js.map +1 -1
  302. package/internals/decorators/blazorAdditionalDependencies.d.ts +4 -2
  303. package/internals/decorators/blazorAdditionalDependencies.js.map +1 -1
  304. package/internals/decorators/blazorDeepImport.d.ts +1 -3
  305. package/internals/decorators/blazorDeepImport.js.map +1 -1
  306. package/internals/decorators/blazorInclude.d.ts +3 -2
  307. package/internals/decorators/blazorInclude.js.map +1 -1
  308. package/internals/decorators/blazorIndirectRender.d.ts +1 -3
  309. package/internals/decorators/blazorIndirectRender.js.map +1 -1
  310. package/internals/decorators/blazorSuppressComponent.d.ts +1 -3
  311. package/internals/decorators/blazorSuppressComponent.js.map +1 -1
  312. package/internals/decorators/coerced-property.d.ts +14 -20
  313. package/internals/decorators/coerced-property.js.map +1 -1
  314. package/internals/decorators/shadow-options.d.ts +2 -5
  315. package/internals/decorators/shadow-options.js.map +1 -1
  316. package/internals/definitions/defineAllComponents.js +2 -0
  317. package/internals/definitions/defineAllComponents.js.map +1 -1
  318. package/internals/directives/drag.d.ts +51 -81
  319. package/internals/directives/drag.js +27 -89
  320. package/internals/directives/drag.js.map +1 -1
  321. package/internals/directives/pointer-operation.d.ts +75 -0
  322. package/internals/directives/pointer-operation.js +92 -0
  323. package/internals/directives/pointer-operation.js.map +1 -0
  324. package/internals/directives/resize.d.ts +36 -64
  325. package/internals/directives/resize.js +18 -85
  326. package/internals/directives/resize.js.map +1 -1
  327. package/internals/i18n/EN/calendar.resources.d.ts +8 -2
  328. package/internals/i18n/EN/calendar.resources.js +2 -2
  329. package/internals/i18n/EN/calendar.resources.js.map +1 -1
  330. package/internals/i18n/EN/chat.resources.d.ts +8 -2
  331. package/internals/i18n/EN/chat.resources.js +3 -10
  332. package/internals/i18n/EN/chat.resources.js.map +1 -1
  333. package/internals/i18n/EN/date-picker.resources.d.ts +6 -4
  334. package/internals/i18n/EN/date-picker.resources.js +1 -7
  335. package/internals/i18n/EN/date-picker.resources.js.map +1 -1
  336. package/internals/i18n/EN/date-range-picker.resources.d.ts +9 -2
  337. package/internals/i18n/EN/date-range-picker.resources.js +2 -2
  338. package/internals/i18n/EN/date-range-picker.resources.js.map +1 -1
  339. package/internals/i18n/i18n-controller.d.ts +44 -46
  340. package/internals/i18n/i18n-controller.js +46 -33
  341. package/internals/i18n/i18n-controller.js.map +1 -1
  342. package/internals/i18n/utils.d.ts +9 -4
  343. package/internals/i18n/utils.js +4 -27
  344. package/internals/i18n/utils.js.map +1 -1
  345. package/internals/mixins/alert.d.ts +10 -25
  346. package/internals/mixins/alert.js.map +1 -1
  347. package/internals/mixins/combo-box.d.ts +21 -11
  348. package/internals/mixins/combo-box.js +16 -22
  349. package/internals/mixins/combo-box.js.map +1 -1
  350. package/internals/mixins/event-emitter.js +9 -11
  351. package/internals/mixins/event-emitter.js.map +1 -1
  352. package/internals/mixins/forms/associated-required.d.ts +4 -4
  353. package/internals/mixins/forms/associated-required.js.map +1 -1
  354. package/internals/mixins/forms/associated.d.ts +4 -2
  355. package/internals/mixins/forms/associated.js +8 -19
  356. package/internals/mixins/forms/associated.js.map +1 -1
  357. package/internals/mixins/forms/form-transformers.js.map +1 -1
  358. package/internals/mixins/forms/types.d.ts +24 -80
  359. package/internals/mixins/forms/types.js.map +1 -1
  360. package/internals/mixins/group.d.ts +18 -0
  361. package/internals/mixins/group.js +37 -0
  362. package/internals/mixins/group.js.map +1 -0
  363. package/internals/mixins/i18n.d.ts +10 -16
  364. package/internals/mixins/i18n.js.map +1 -1
  365. package/internals/mixins/mask-behavior.d.ts +8 -22
  366. package/internals/mixins/mask-behavior.js +1 -2
  367. package/internals/mixins/mask-behavior.js.map +1 -1
  368. package/internals/mixins/option.d.ts +1 -2
  369. package/internals/mixins/option.js +2 -1
  370. package/internals/mixins/option.js.map +1 -1
  371. package/internals/part-map.d.ts +4 -2
  372. package/internals/part-map.js +1 -1
  373. package/internals/part-map.js.map +1 -1
  374. package/internals/templates/input-shell.d.ts +8 -17
  375. package/internals/templates/input-shell.js +4 -1
  376. package/internals/templates/input-shell.js.map +1 -1
  377. package/internals/templates/masked-input.d.ts +7 -8
  378. package/internals/templates/masked-input.js.map +1 -1
  379. package/internals/templates/slotted-icon.d.ts +7 -12
  380. package/internals/templates/slotted-icon.js.map +1 -1
  381. package/internals/templates/toggle-shell.d.ts +6 -7
  382. package/internals/templates/toggle-shell.js.map +1 -1
  383. package/internals/timing.d.ts +5 -14
  384. package/internals/timing.js.map +1 -1
  385. package/internals/utils/arrays.d.ts +21 -21
  386. package/internals/utils/arrays.js +14 -0
  387. package/internals/utils/arrays.js.map +1 -1
  388. package/internals/utils/dom.d.ts +51 -39
  389. package/internals/utils/dom.js +1 -2
  390. package/internals/utils/dom.js.map +1 -1
  391. package/internals/utils/events.d.ts +29 -16
  392. package/internals/utils/events.js +9 -1
  393. package/internals/utils/events.js.map +1 -1
  394. package/internals/utils/lit.d.ts +5 -2
  395. package/internals/utils/lit.js.map +1 -1
  396. package/internals/utils/math.d.ts +8 -6
  397. package/internals/utils/math.js.map +1 -1
  398. package/internals/utils/objects.d.ts +3 -20
  399. package/internals/utils/objects.js +1 -39
  400. package/internals/utils/objects.js.map +1 -1
  401. package/internals/utils/strings.d.ts +9 -11
  402. package/internals/utils/strings.js.map +1 -1
  403. package/internals/utils/types.d.ts +16 -3
  404. package/internals/utils/types.js +3 -0
  405. package/internals/utils/types.js.map +1 -1
  406. package/internals/validators.d.ts +9 -8
  407. package/internals/validators.js +12 -6
  408. package/internals/validators.js.map +1 -1
  409. package/package.json +1 -1
  410. package/skills/README.md +3 -0
  411. package/skills/igniteui-wc-figma-to-app/SKILL.md +907 -0
  412. package/skills/igniteui-wc-figma-to-app/references/asset-extraction.md +363 -0
  413. package/skills/igniteui-wc-figma-to-app/references/design-token-bridge.md +407 -0
  414. package/skills/igniteui-wc-figma-to-app/references/figma-component-map.md +325 -0
  415. package/skills/igniteui-wc-figma-to-app/references/mcp-setup.md +409 -0
  416. package/skills/igniteui-wc-figma-to-app/references/validation-patterns.md +376 -0
  417. package/theming/config.d.ts +14 -5
  418. package/theming/config.js +38 -18
  419. package/theming/config.js.map +1 -1
  420. package/theming/context.d.ts +1 -23
  421. package/theming/context.js.map +1 -1
  422. package/theming/theming-controller.d.ts +2 -32
  423. package/theming/theming-controller.js +15 -21
  424. package/theming/theming-controller.js.map +1 -1
  425. package/theming/theming-event.d.ts +0 -7
  426. package/theming/theming-event.js +0 -13
  427. package/theming/theming-event.js.map +1 -1
  428. package/theming/types.d.ts +1 -8
  429. package/theming/types.js.map +1 -1
  430. package/web-types.json +3 -3
  431. package/animations/presets/slide/index.d.ts +0 -3
  432. package/animations/presets/slide/index.js +0 -16
  433. package/animations/presets/slide/index.js.map +0 -1
  434. package/components/resize-container/themes/resize-container.base.css.js.map +0 -1
  435. package/internals/controllers/root-scroll.d.ts +0 -31
  436. package/internals/controllers/root-scroll.js +0 -71
  437. package/internals/controllers/root-scroll.js.map +0 -1
  438. package/theming/utils.d.ts +0 -11
  439. package/theming/utils.js +0 -20
  440. package/theming/utils.js.map +0 -1
  441. /package/components/{resize-container/themes/resize-container.base.css.d.ts → breadcrumb/themes/breadcrumb.base.css.d.ts} +0 -0
@@ -0,0 +1,376 @@
1
+ # Playwright Visual Validation Patterns — Web Components
2
+
3
+ > **Part of the [`igniteui-wc-figma-to-app`](../SKILL.md) skill.**
4
+ >
5
+ > Use this file in Phase 5 for the measurement-driven validation loop. Read it in full
6
+ > before calling any Playwright tool.
7
+
8
+ ---
9
+
10
+ ## Core Philosophy
11
+
12
+ **Measure, don't eyeball.** The goal is not visual regression (did this change since last
13
+ week?) but design fidelity (does this match the Figma spec?). Screenshots give you the
14
+ gestalt; `playwright_browser_evaluate` gives you the numbers; numbers drive corrections.
15
+
16
+ **The Web Components twist:** almost everything you want to measure lives inside a shadow
17
+ root. `document.querySelector('igc-card .title')` returns `null` — not because the element
18
+ is missing, but because the selector cannot cross the boundary. Every snippet below is
19
+ shadow-aware. Use them instead of writing ad-hoc selectors.
20
+
21
+ ---
22
+
23
+ ## Phase 5 Tool Sequence
24
+
25
+ ```
26
+ 1. playwright_browser_navigate → open the app at the target route
27
+ 2. playwright_browser_console_messages → catch startup/registration errors
28
+ 3. playwright_browser_resize → match the Figma artboard dimensions
29
+ 4. playwright_browser_navigate → re-navigate after resize (required)
30
+ 5. playwright_browser_evaluate → registration + theme audit (fail fast)
31
+ 6. playwright_browser_take_screenshot → capture the full viewport
32
+ 7. [Visual comparison] → against the Phase 1c reference, section by section
33
+ 8. playwright_browser_evaluate → measure EVERY section in the Phase 1g Surfaces table
34
+ 9. [Surfaces audit] → assert background, radius, padding, border
35
+ 10. [Action controls audit] → count and name every control, shadow roots included
36
+ 11. [Input variant audit] → check `outlined` against the Phase 1d variant
37
+ 12. [Classify mismatches] → severity table
38
+ 13. [Apply fixes] → edit source files
39
+ 14. playwright_browser_navigate → reload after fixes
40
+ 15. Repeat 6–14 until no Critical/Major issues remain
41
+ 16. Do NOT advance to the next artboard until all checks pass on this one
42
+ 17. playwright_browser_snapshot → final accessibility check
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Known Pitfalls
48
+
49
+ ### 1. Viewport reset after resize
50
+
51
+ After `playwright_browser_resize`, the browser may navigate itself to `about:blank`, and
52
+ subsequent screenshots and measurements come back empty.
53
+
54
+ ```
55
+ playwright_browser_resize({ width: 1440, height: 900 })
56
+ playwright_browser_navigate({ url: "http://localhost:5173/dashboard" })
57
+ // NOW safe to screenshot and measure
58
+ ```
59
+
60
+ ### 2. `playwright_browser_evaluate` uses `function`, not `script`
61
+
62
+ Passing `script` fails with *"Invalid input: expected string, received undefined"*.
63
+
64
+ ```
65
+ // WRONG
66
+ playwright_browser_evaluate({ script: "return document.title;" })
67
+
68
+ // CORRECT
69
+ playwright_browser_evaluate({ function: "() => document.title" })
70
+ ```
71
+
72
+ ### 3. Measuring before the components have upgraded
73
+
74
+ Custom elements upgrade asynchronously, and Lit renders on a microtask. Measuring too early
75
+ returns pre-upgrade box metrics (often `height: 0`). Wait for definition and render:
76
+
77
+ ```
78
+ playwright_browser_evaluate({
79
+ function: "async () => { const tags = [...new Set([...document.querySelectorAll('*')].map(e => e.tagName.toLowerCase()).filter(t => t.startsWith('igc-')))]; await Promise.all(tags.map(t => customElements.whenDefined(t))); const els = [...document.querySelectorAll('*')].filter(e => e.tagName.startsWith('IGC-')); await Promise.all(els.map(e => e.updateComplete).filter(Boolean)); await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r))); return { upgraded: tags.length }; }"
80
+ })
81
+ ```
82
+
83
+ ### 4. An unregistered element fails silently
84
+
85
+ A missing `defineComponents(...)` produces **no console error** — the tag renders as an
86
+ empty inline box. Run the registration audit before blaming CSS.
87
+
88
+ ### 5. Dev server must be running
89
+
90
+ ```
91
+ playwright_browser_navigate({ url: "http://localhost:5173" })
92
+ playwright_browser_console_messages()
93
+ ```
94
+
95
+ `ERR_CONNECTION_REFUSED` or a blank page means the Vite dev server is not running — ask the
96
+ user to run `npm start`. Note the port: Vite defaults to **5173**.
97
+
98
+ ---
99
+
100
+ ## The Deep-Query Helper
101
+
102
+ Every measurement snippet below assumes this helper. It walks shadow roots, so a selector
103
+ like `igc-card >>> [part="header"]` resolves.
104
+
105
+ ```javascript
106
+ // Paste as the first statements of any evaluate() function.
107
+ const deepQuery = (path, root = document) =>
108
+ path.split('>>>').map(s => s.trim()).reduce(
109
+ (node, sel) => node && (node.shadowRoot || node).querySelector(sel),
110
+ root
111
+ );
112
+
113
+ const deepQueryAll = (sel, root = document) => {
114
+ const out = [];
115
+ const walk = (node) => {
116
+ if (!node) return;
117
+ out.push(...node.querySelectorAll(sel));
118
+ node.querySelectorAll('*').forEach(el => el.shadowRoot && walk(el.shadowRoot));
119
+ };
120
+ walk(root);
121
+ return out;
122
+ };
123
+ ```
124
+
125
+ Prefer measuring the **host element** (`igc-card`) for box metrics — width, height,
126
+ position, margin — and pierce only for internals that the design calls out (header height,
127
+ row padding). When you must pierce, target documented `::part(...)` names from `get_doc`,
128
+ never internal class names.
129
+
130
+ ---
131
+
132
+ ## Reusable Measurement Snippets
133
+
134
+ All snippets use the `function` parameter.
135
+
136
+ ### Registration + theme audit (run first, every page)
137
+
138
+ ```
139
+ playwright_browser_evaluate({
140
+ function: "() => { const tags = [...new Set(deepQueryAll('*').map(e => e.tagName.toLowerCase()).filter(t => t.startsWith('igc-')))]; const undefinedTags = tags.filter(t => !customElements.get(t)); const s = getComputedStyle(document.documentElement); return { tags, undefinedTags, theme: s.getPropertyValue('--ig-theme').trim(), variant: s.getPropertyValue('--ig-theme-variant').trim(), primary500: s.getPropertyValue('--ig-primary-500').trim(), surface500: s.getPropertyValue('--ig-surface-500').trim(), fontFamily: s.getPropertyValue('--ig-font-family').trim() }; }"
141
+ })
142
+ ```
143
+
144
+ Assert: `undefinedTags` is empty; `theme` and `variant` match the design system and variant
145
+ resolved in Phase 3. An empty `theme` means no theme CSS is loaded — components silently
146
+ fall back to `bootstrap` / `light`.
147
+
148
+ ### Measure a single element (shadow-aware)
149
+
150
+ ```
151
+ playwright_browser_evaluate({
152
+ function: "() => { const deepQuery = (path, root = document) => path.split('>>>').map(s => s.trim()).reduce((n, sel) => n && (n.shadowRoot || n).querySelector(sel), root); const el = deepQuery('<YOUR_SELECTOR_PATH>'); if (!el) return { error: 'element not found' }; const s = getComputedStyle(el); const r = el.getBoundingClientRect(); return { fontSize: s.fontSize, fontWeight: s.fontWeight, lineHeight: s.lineHeight, color: s.color, backgroundColor: s.backgroundColor, padding: s.padding, margin: s.margin, gap: s.gap, borderRadius: s.borderRadius, border: s.border, boxShadow: s.boxShadow, width: Math.round(r.width), height: Math.round(r.height), top: Math.round(r.top), left: Math.round(r.left) }; }"
153
+ })
154
+ ```
155
+
156
+ > A host element with `display: inline` (the Lit default) reports a misleading box. If width
157
+ > or height look wrong, check for a missing `:host { display: block }` before chasing padding.
158
+
159
+ ### Surfaces audit (mandatory — every page, every Phase 1g surface)
160
+
161
+ ```
162
+ playwright_browser_evaluate({
163
+ function: "() => { const sections = { /* fill from the Phase 1g Surfaces table */ sectionA: '.section-a', sectionB: '.section-b' }; const deepQuery = (path, root = document) => path.split('>>>').map(s => s.trim()).reduce((n, sel) => n && (n.shadowRoot || n).querySelector(sel), root); const out = {}; for (const [key, sel] of Object.entries(sections)) { const el = deepQuery(sel); if (!el) { out[key] = 'NOT FOUND'; continue; } const s = getComputedStyle(el); const r = el.getBoundingClientRect(); out[key] = { bg: s.backgroundColor, radius: s.borderRadius, padding: s.padding, border: s.border, shadow: s.boxShadow, w: Math.round(r.width), h: Math.round(r.height) }; } return out; }"
164
+ })
165
+ ```
166
+
167
+ **Assert for each entry:**
168
+
169
+ - Figma surface has a background → `bg !== 'rgba(0, 0, 0, 0)'`
170
+ - Figma section floats on the page background → `bg === 'rgba(0, 0, 0, 0)'` (do not over-surface)
171
+ - `radius`, `padding`, `border`, `shadow` match the Phase 1g values
172
+ - children shown inside the card in Figma are inside the card's bounding rect in the DOM
173
+
174
+ ### Action controls audit (mandatory, every page)
175
+
176
+ ```
177
+ playwright_browser_evaluate({
178
+ function: "() => { const out = []; const walk = (root) => { root.querySelectorAll('igc-button, igc-icon-button, button, [role=button]').forEach(b => { if (b.tagName === 'BUTTON' && b.getRootNode().host?.matches('igc-button, igc-icon-button')) return; out.push((b.textContent || '').trim().replace(/\\s+/g, ' ') || b.getAttribute('aria-label') || b.getAttribute('name') || '(unlabeled)'); }); root.querySelectorAll('*').forEach(el => el.shadowRoot && walk(el.shadowRoot)); }; walk(document); return { count: out.length, controls: out }; }"
179
+ })
180
+ ```
181
+
182
+ Compare against the Phase 1d inventory. Any control not in the design context output is
183
+ fabricated and must be removed. `(unlabeled)` entries are also an accessibility failure —
184
+ icon-only buttons need `aria-label`.
185
+
186
+ ### Input variant audit (every page with form controls)
187
+
188
+ ```
189
+ playwright_browser_evaluate({
190
+ function: "() => { const tags = ['igc-input','igc-textarea','igc-mask-input','igc-date-time-input','igc-file-input','igc-select','igc-combo','igc-date-picker','igc-date-range-picker']; const out = {}; tags.forEach(t => { const els = deepQueryAll(t); if (els.length) out[t] = { count: els.length, outlined: els.filter(e => e.hasAttribute('outlined')).length }; }); return out; }"
191
+ })
192
+ ```
193
+
194
+ Compare against the variant detected in Phase 1d. If the design uses border-style inputs
195
+ everywhere, every control should report `outlined === count`.
196
+
197
+ ### Property-binding audit (collection-bound charts, grids, combos)
198
+
199
+ ```
200
+ playwright_browser_evaluate({
201
+ function: "() => { const defs = [ ['igc-category-chart', ['dataSource', 'data']], ['igc-data-chart', ['dataSource', 'data']], ['igc-pie-chart', ['dataSource', 'data']], ['igc-doughnut-chart', ['dataSource', 'data']], ['igc-financial-chart', ['dataSource', 'data']], ['igc-sparkline', ['dataSource', 'data']], ['igc-treemap', ['dataSource', 'data']], ['igc-funnel-chart', ['dataSource', 'data']], ['igc-grid', ['data']], ['igc-grid-lite', ['data']], ['igc-combo', ['data']] ]; const out = {}; defs.forEach(([tag, dataProps]) => { deepQueryAll(tag).forEach((el, i) => { const dataProp = dataProps.find(prop => Array.isArray(el[prop])); const brushProps = ['brushes', 'outlines'].filter(prop => Array.isArray(el[prop])); out[tag + '#' + i] = { dataLength: dataProp ? el[dataProp].length : null, brushCollections: brushProps.length ? Object.fromEntries(brushProps.map(prop => [prop, el[prop]])) : null, height: Math.round(el.getBoundingClientRect().height) }; }); }); return out; }"
202
+ })
203
+ ```
204
+
205
+ `dataLength: null` means the collection was set as an attribute (or not at all) instead of
206
+ as a property. `brushCollections: null` on a chart means none of its documented
207
+ `brushes` / `outlines` arrays were assigned, so it is still using the default palette instead
208
+ of the Figma series colors. `height: 0` means the element or its grid track has no height.
209
+ Use this audit for the collection-bound host tags in the selected plan; gauges and maps need
210
+ their own host-specific validation once you know which properties the chosen component binds.
211
+
212
+ ### Measure the gap between two elements
213
+
214
+ ```
215
+ playwright_browser_evaluate({
216
+ function: "() => { const a = document.querySelector('<SELECTOR_A>'); const b = document.querySelector('<SELECTOR_B>'); if (!a || !b) return { error: 'one or both elements not found' }; const ra = a.getBoundingClientRect(); const rb = b.getBoundingClientRect(); return { gapBetween: Math.round(rb.top - ra.bottom), aHeight: Math.round(ra.height), bTop: Math.round(rb.top) }; }"
217
+ })
218
+ ```
219
+
220
+ ### Measure typography scale
221
+
222
+ ```
223
+ playwright_browser_evaluate({
224
+ function: "() => { const sels = ['h1','h2','h3','p','.subtitle','.caption']; const out = {}; sels.forEach(sel => { const el = document.querySelector(sel); if (el) { const s = getComputedStyle(el); out[sel] = { fontSize: s.fontSize, fontWeight: s.fontWeight, lineHeight: s.lineHeight, fontFamily: s.fontFamily }; } }); return out; }"
225
+ })
226
+ ```
227
+
228
+ ### Measure grid layout proportions
229
+
230
+ ```
231
+ playwright_browser_evaluate({
232
+ function: "() => { const el = document.querySelector('<LAYOUT_CONTAINER>'); if (!el) return { error: 'layout container not found' }; const s = getComputedStyle(el); return { display: s.display, gridTemplateColumns: s.gridTemplateColumns, gridTemplateRows: s.gridTemplateRows, gap: s.gap, width: Math.round(el.getBoundingClientRect().width) }; }"
233
+ })
234
+ ```
235
+
236
+ ### Inspect a component's parts (when a token override is not landing)
237
+
238
+ ```
239
+ playwright_browser_evaluate({
240
+ function: "() => { const host = document.querySelector('<igc-tag>'); if (!host || !host.shadowRoot) return { error: 'host or shadow root not found' }; return [...host.shadowRoot.querySelectorAll('[part]')].map(el => ({ part: el.getAttribute('part'), bg: getComputedStyle(el).backgroundColor, color: getComputedStyle(el).color })); }"
241
+ })
242
+ ```
243
+
244
+ Use the reported `part` names — they are the supported styling surface when a design token
245
+ does not exist for a detail the design requires.
246
+
247
+ ---
248
+
249
+ ## Mismatch Severity Classification
250
+
251
+ | Severity | Category | Decision rule | Action |
252
+ | ------------ | -------------------------- | ----------------------------------------------------------- | --------------------------- |
253
+ | **Critical** | Missing element | Present in Figma, absent from DOM | Auto-fix |
254
+ | **Critical** | Unregistered component | Tag present but `customElements.get()` is undefined | Auto-fix (add registration) |
255
+ | **Critical** | Broken layout | Overlapping elements, content outside bounds, zero-height | Auto-fix |
256
+ | **Critical** | Wrong design system active | `--ig-theme` does not match the Phase 3 resolution | Auto-fix (theme import) |
257
+ | **Major** | Wrong component | Figma shows a combo, code has a select | Auto-fix |
258
+ | **Major** | Wrong variant | `variant="flat"` when the design shows contained | Auto-fix |
259
+ | **Major** | Collection not bound | `data` / `dataSource` / `brushes` set as an attribute | Auto-fix |
260
+ | **Minor** | Spacing off by > 4px | `gap: 24px` measured, Figma shows `16px` | Auto-fix if a single property |
261
+ | **Minor** | Font size wrong by > 2px | `16px` measured, Figma shows `14px` | Auto-fix |
262
+ | **Cosmetic** | Color shade | `rgb(50,50,50)` vs `#333333` (perceptually identical) | Report only |
263
+ | **Cosmetic** | Spacing off by ≤ 4px | Rounding or sub-pixel difference | Report only |
264
+
265
+ ### Mismatch report format
266
+
267
+ ```
268
+ ISSUE: <concise description of the mismatch>
269
+ LOCATION: <component/section in the view>
270
+ FIGMA: <value from the design context>
271
+ RENDERED: <value measured by Playwright>
272
+ SEVERITY: <Critical | Major | Minor | Cosmetic>
273
+ FIX: <specific, one-line code change>
274
+ ```
275
+
276
+ Example:
277
+
278
+ ```
279
+ ISSUE: Card surface is transparent
280
+ LOCATION: igc-card in the "Budget Categories" section
281
+ FIGMA: background = #222222 (Surfaces table row 1)
282
+ RENDERED: backgroundColor = rgba(0, 0, 0, 0)
283
+ SEVERITY: Critical
284
+ FIX: create_component_theme("card", tokens: { background: "var(--ig-surface-100)" })
285
+ and apply the generated block — do not set background on a wrapper div.
286
+
287
+ ISSUE: Chart series colors are the default palette
288
+ LOCATION: igc-category-chart in the "Spending" panel
289
+ FIGMA: series = #9DE772, #6DB1FF
290
+ RENDERED: brushes = null
291
+ SEVERITY: Major
292
+ FIX: chart.brushes = ['#9DE772', '#6DB1FF'] assigned as a property after validating
293
+ with get_chart_series_colors({ customBrushes: [...] }).
294
+ ```
295
+
296
+ ---
297
+
298
+ ## Section-by-Section Comparison Checklist
299
+
300
+ | Section | What to check |
301
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------ |
302
+ | Top navigation | Height, background, slotted `start`/`end` content alignment, action icon positions |
303
+ | Sidebar / nav drawer | Width (`--menu-full-width`), `position="relative"` vs modal, item spacing, icon + label alignment, selected state |
304
+ | Page header | Typography size and weight, breadcrumb spacing, action button prominence |
305
+ | Data grid | Column widths (at least one fluid), header background, row height, cell padding, grid theme CSS actually loaded |
306
+ | Cards / panels | **Background** (must not be `rgba(0,0,0,0)` when Figma shows a surface), border, radius, shadow, padding |
307
+ | Surface containers | Every entry in the Phase 1g Surfaces table; children enclosed within the card's bounding rect |
308
+ | Form fields | `outlined` presence matching the Phase 1d variant; label placement; helper text slot |
309
+ | Action controls | Count and names vs the Phase 1d inventory; `aria-label` on icon-only buttons |
310
+ | Buttons | `variant` (flat/outlined/contained/fab), color, typography, padding |
311
+ | Charts | Chart type, **series colors** (explicit `brushes`), marker visibility, legend placement, non-zero height |
312
+ | Lists | Slot usage (`start`/`title`/`subtitle`/`end`), item height, divider treatment |
313
+ | Footer / paginator | Alignment, spacing, font size |
314
+
315
+ ---
316
+
317
+ ## Accessibility Snapshot Checks
318
+
319
+ After `playwright_browser_snapshot()`, verify:
320
+
321
+ | Check | What to look for |
322
+ | --------------------- | ------------------------------------------------------------------------ |
323
+ | Heading hierarchy | `h1` → `h2` → `h3` without skipping levels |
324
+ | Button labels | Every button has text or `aria-label` — icon-only buttons especially |
325
+ | Input labels | Inputs use the `label` attribute or an associated `<label>` |
326
+ | Navigation landmark | `<nav>` or `role="navigation"` wraps the main navigation |
327
+ | Main content landmark | `<main>` or `role="main"` wraps the primary content region |
328
+ | Image alt text | Meaningful `<img>` elements have non-empty `alt` |
329
+ | Drawer labelling | `igc-nav-drawer` has a `label` when more than one nav landmark exists |
330
+
331
+ ---
332
+
333
+ ## Common Fix Patterns
334
+
335
+ ### Style correction — in order of preference
336
+
337
+ 1. **Component design token** — `get_component_design_tokens` → `create_component_theme`
338
+ 2. **Documented `::part(...)`** — for details with no token
339
+ 3. **Slotted content you own** — style it in your own CSS
340
+ 4. Never internal class names; never attempts to reach into a shadow root from page CSS
341
+
342
+ ### Density and spacing
343
+
344
+ ```
345
+ set_size({ component: "calendar", size: "small", platform: "webcomponents" })
346
+ set_spacing({ component: "calendar", spacing: 0.75, platform: "webcomponents" })
347
+ set_size({ scope: ".compact-toolbar", size: "small", platform: "webcomponents" })
348
+ ```
349
+
350
+ Or directly:
351
+
352
+ ```css
353
+ igc-calendar {
354
+ --ig-size: var(--ig-size-small);
355
+ --ig-spacing: 0.75;
356
+ }
357
+ ```
358
+
359
+ Choose the multiplier by visual judgment — never by mapping a Figma pixel value.
360
+
361
+ ### Color correction
362
+
363
+ ```css
364
+ /* never a raw hex once a palette exists */
365
+ background: var(--ig-primary-500);
366
+ color: var(--ig-primary-500-contrast);
367
+ ```
368
+
369
+ Use `get_color({ color: "primary", variant: "500", contrast: true })` when unsure of the
370
+ exact variable name.
371
+
372
+ ### Missing element
373
+
374
+ If an element is in Figma but absent from the DOM, check in this order: registration
375
+ (`customElements.get`) → import path → the slot name it should occupy → then go back to
376
+ Phase 2 and re-read the component doc. A wrong slot name renders nothing and reports nothing.
@@ -1,9 +1,17 @@
1
+ import { type ChangeThemeEventDetail } from './theming-event.js';
1
2
  import type { Theme, ThemeVariant } from './types.js';
2
- export declare function getTheme(): {
3
- theme: Theme;
4
- themeVariant: ThemeVariant;
5
- };
6
- export declare function setTheme(value: Theme, variant: ThemeVariant): void;
3
+ /**
4
+ * Relays "igc-change-theme" events from `window` to the theming controllers.
5
+ * It also syncs the module state from the event detail, so an event from another
6
+ * copy of the library changes the theme here too.
7
+ */
8
+ declare class ThemeChangedEmitter extends EventTarget {
9
+ constructor();
10
+ /** @internal */
11
+ handleEvent({ detail }: CustomEvent<ChangeThemeEventDetail>): void;
12
+ }
13
+ export declare const _themeChangedEmitter: ThemeChangedEmitter;
14
+ export declare function getTheme(): ChangeThemeEventDetail;
7
15
  /**
8
16
  * Allows the global configuration of the active theme.
9
17
  *
@@ -15,3 +23,4 @@ export declare function setTheme(value: Theme, variant: ThemeVariant): void;
15
23
  * ```
16
24
  */
17
25
  export declare function configureTheme(t: Theme, v?: ThemeVariant): void;
26
+ export {};
package/theming/config.js CHANGED
@@ -1,37 +1,57 @@
1
1
  import { isServer } from 'lit';
2
- import { CHANGE_THEME_EVENT, } from './theming-event.js';
3
- import { getAllCssVariables } from './utils.js';
2
+ import { CHANGE_THEME_EVENT, CHANGED_THEME_EVENT, } from './theming-event.js';
3
+ const THEMES = new Set(['bootstrap', 'material', 'indigo', 'fluent']);
4
+ const THEME_VARIANTS = new Set(['light', 'dark']);
4
5
  let theme;
5
6
  let themeVariant;
6
- function dispatchThemingEvent(detail) {
7
- if (!isServer) {
8
- globalThis.dispatchEvent(new CustomEvent(CHANGE_THEME_EVENT, { detail }));
9
- }
7
+ function isOfTypeTheme(value) {
8
+ return THEMES.has(value);
10
9
  }
11
- function isOfTypeTheme(theme) {
12
- return ['bootstrap', 'material', 'indigo', 'fluent'].includes(theme);
10
+ function isOfTypeThemeVariant(value) {
11
+ return THEME_VARIANTS.has(value);
13
12
  }
14
- function isOfTypeThemeVariant(variant) {
15
- return ['light', 'dark'].includes(variant);
13
+ function setTheme(value, variant) {
14
+ theme = value;
15
+ themeVariant = variant;
16
16
  }
17
+ class ThemeChangedEmitter extends EventTarget {
18
+ constructor() {
19
+ super();
20
+ if (!isServer) {
21
+ globalThis.addEventListener(CHANGE_THEME_EVENT, this);
22
+ }
23
+ }
24
+ handleEvent({ detail }) {
25
+ if (isOfTypeTheme(detail?.theme) &&
26
+ isOfTypeThemeVariant(detail?.themeVariant)) {
27
+ setTheme(detail.theme, detail.themeVariant);
28
+ this.dispatchEvent(new CustomEvent(CHANGED_THEME_EVENT));
29
+ }
30
+ }
31
+ }
32
+ export const _themeChangedEmitter = new ThemeChangedEmitter();
17
33
  export function getTheme() {
18
34
  if (!(theme && themeVariant)) {
19
- const cssVars = getAllCssVariables();
20
- const foundTheme = cssVars.igTheme;
21
- const foundVariant = cssVars.igThemeVariant;
35
+ const rootStyles = isServer
36
+ ? undefined
37
+ : getComputedStyle(document.documentElement);
38
+ const foundTheme = rootStyles?.getPropertyValue('--ig-theme').trim();
39
+ const foundVariant = rootStyles
40
+ ?.getPropertyValue('--ig-theme-variant')
41
+ .trim();
22
42
  theme = isOfTypeTheme(foundTheme) ? foundTheme : 'bootstrap';
23
43
  themeVariant = isOfTypeThemeVariant(foundVariant) ? foundVariant : 'light';
24
44
  }
25
45
  return { theme, themeVariant };
26
46
  }
27
- export function setTheme(value, variant) {
28
- theme = value;
29
- themeVariant = variant;
30
- }
31
47
  export function configureTheme(t, v = 'light') {
32
48
  if (isOfTypeTheme(t) && isOfTypeThemeVariant(v)) {
33
49
  setTheme(t, v);
34
- dispatchThemingEvent({ theme, themeVariant });
50
+ if (!isServer) {
51
+ globalThis.dispatchEvent(new CustomEvent(CHANGE_THEME_EVENT, {
52
+ detail: { theme, themeVariant },
53
+ }));
54
+ }
35
55
  }
36
56
  }
37
57
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/theming/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EACL,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,IAAI,KAAY,CAAC;AACjB,IAAI,YAA0B,CAAC;AAK/B,SAAS,oBAAoB,CAAC,MAA8B;IAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,UAAU,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;QAE5C,KAAK,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;QAC7D,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAY,EAAE,OAAqB;IAC1D,KAAK,GAAG,KAAK,CAAC;IACd,YAAY,GAAG,OAAO,CAAC;AACzB,CAAC;AAYD,MAAM,UAAU,cAAc,CAAC,CAAQ,EAAE,IAAkB,OAAO;IAChE,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,oBAAoB,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC","sourcesContent":["import { isServer } from 'lit';\nimport {\n CHANGE_THEME_EVENT,\n type ChangeThemeEventDetail,\n} from './theming-event.js';\nimport type { Theme, ThemeVariant } from './types.js';\nimport { getAllCssVariables } from './utils.js';\n\nlet theme: Theme;\nlet themeVariant: ThemeVariant;\n\n/**\n * Dispatch an \"igc-change-theme\" event to `window` with the given detail.\n */\nfunction dispatchThemingEvent(detail: ChangeThemeEventDetail): void {\n if (!isServer) {\n globalThis.dispatchEvent(new CustomEvent(CHANGE_THEME_EVENT, { detail }));\n }\n}\n\nfunction isOfTypeTheme(theme: string): theme is Theme {\n return ['bootstrap', 'material', 'indigo', 'fluent'].includes(theme);\n}\n\nfunction isOfTypeThemeVariant(variant: string): variant is ThemeVariant {\n return ['light', 'dark'].includes(variant);\n}\n\nexport function getTheme() {\n if (!(theme && themeVariant)) {\n const cssVars = getAllCssVariables();\n const foundTheme = cssVars.igTheme;\n const foundVariant = cssVars.igThemeVariant;\n\n theme = isOfTypeTheme(foundTheme) ? foundTheme : 'bootstrap';\n themeVariant = isOfTypeThemeVariant(foundVariant) ? foundVariant : 'light';\n }\n\n return { theme, themeVariant };\n}\n\nexport function setTheme(value: Theme, variant: ThemeVariant): void {\n theme = value;\n themeVariant = variant;\n}\n\n/**\n * Allows the global configuration of the active theme.\n *\n * Usage:\n * ```ts\n * import { configureTheme } from 'igniteui-webcomponents';\n *\n * configureTheme('material', 'light');\n * ```\n */\nexport function configureTheme(t: Theme, v: ThemeVariant = 'light'): void {\n if (isOfTypeTheme(t) && isOfTypeThemeVariant(v)) {\n setTheme(t, v);\n dispatchThemingEvent({ theme, themeVariant });\n }\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/theming/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAU,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3D,IAAI,KAAY,CAAC;AACjB,IAAI,YAA0B,CAAC;AAE/B,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAY,EAAE,OAAqB;IACnD,KAAK,GAAG,KAAK,CAAC;IACd,YAAY,GAAG,OAAO,CAAC;AACzB,CAAC;AAOD,MAAM,mBAAoB,SAAQ,WAAW;IAC3C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,UAAU,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAGM,WAAW,CAAC,EAAE,MAAM,EAAuC;QAChE,IACE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;YAC5B,oBAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,EAC1C,CAAC;YACD,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,mBAAmB,EAAE,CAAC;AAE9D,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,QAAQ;YACzB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,YAAY,GAAG,UAAU;YAC7B,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;aACvC,IAAI,EAAE,CAAC;QAEV,KAAK,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;QAC7D,YAAY,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACjC,CAAC;AAYD,MAAM,UAAU,cAAc,CAAC,CAAQ,EAAE,IAAkB,OAAO;IAChE,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhD,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,UAAU,CAAC,aAAa,CACtB,IAAI,WAAW,CAAC,kBAAkB,EAAE;gBAClC,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;aAChC,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { isServer } from 'lit';\nimport {\n CHANGE_THEME_EVENT,\n CHANGED_THEME_EVENT,\n type ChangeThemeEventDetail,\n} from './theming-event.js';\nimport type { Theme, ThemeVariant } from './types.js';\n\nconst THEMES = new Set<unknown>(['bootstrap', 'material', 'indigo', 'fluent']);\nconst THEME_VARIANTS = new Set<unknown>(['light', 'dark']);\n\nlet theme: Theme;\nlet themeVariant: ThemeVariant;\n\nfunction isOfTypeTheme(value: unknown): value is Theme {\n return THEMES.has(value);\n}\n\nfunction isOfTypeThemeVariant(value: unknown): value is ThemeVariant {\n return THEME_VARIANTS.has(value);\n}\n\nfunction setTheme(value: Theme, variant: ThemeVariant): void {\n theme = value;\n themeVariant = variant;\n}\n\n/**\n * Relays \"igc-change-theme\" events from `window` to the theming controllers.\n * It also syncs the module state from the event detail, so an event from another\n * copy of the library changes the theme here too.\n */\nclass ThemeChangedEmitter extends EventTarget {\n constructor() {\n super();\n if (!isServer) {\n globalThis.addEventListener(CHANGE_THEME_EVENT, this);\n }\n }\n\n /** @internal */\n public handleEvent({ detail }: CustomEvent<ChangeThemeEventDetail>): void {\n if (\n isOfTypeTheme(detail?.theme) &&\n isOfTypeThemeVariant(detail?.themeVariant)\n ) {\n setTheme(detail.theme, detail.themeVariant);\n this.dispatchEvent(new CustomEvent(CHANGED_THEME_EVENT));\n }\n }\n}\n\nexport const _themeChangedEmitter = new ThemeChangedEmitter();\n\nexport function getTheme(): ChangeThemeEventDetail {\n if (!(theme && themeVariant)) {\n const rootStyles = isServer\n ? undefined\n : getComputedStyle(document.documentElement);\n const foundTheme = rootStyles?.getPropertyValue('--ig-theme').trim();\n const foundVariant = rootStyles\n ?.getPropertyValue('--ig-theme-variant')\n .trim();\n\n theme = isOfTypeTheme(foundTheme) ? foundTheme : 'bootstrap';\n themeVariant = isOfTypeThemeVariant(foundVariant) ? foundVariant : 'light';\n }\n\n return { theme, themeVariant };\n}\n\n/**\n * Allows the global configuration of the active theme.\n *\n * Usage:\n * ```ts\n * import { configureTheme } from 'igniteui-webcomponents';\n *\n * configureTheme('material', 'light');\n * ```\n */\nexport function configureTheme(t: Theme, v: ThemeVariant = 'light'): void {\n if (isOfTypeTheme(t) && isOfTypeThemeVariant(v)) {\n // Also set by the emitter's window listener, but that listener does not exist on the server.\n setTheme(t, v);\n\n if (!isServer) {\n globalThis.dispatchEvent(\n new CustomEvent(CHANGE_THEME_EVENT, {\n detail: { theme, themeVariant },\n })\n );\n }\n }\n}\n"]}
@@ -7,29 +7,7 @@ export interface ThemeContext {
7
7
  variant: ThemeVariant;
8
8
  }
9
9
  /**
10
- * Context for providing theme information to descendant components.
11
- *
12
- * Components can consume this context to receive theme information from a theme provider
13
- * instead of relying on global theming events.
14
- *
15
- * @example
16
- * ```ts
17
- * // In a component
18
- * import { ContextConsumer } from '@lit/context';
19
- * import { themeContext } from './context.js';
20
- *
21
- * class MyComponent extends LitElement {
22
- * private _themeConsumer = new ContextConsumer(this, {
23
- * context: themeContext,
24
- * subscribe: true
25
- * });
26
- *
27
- * render() {
28
- * const theme = this._themeConsumer.value;
29
- * // ...
30
- * }
31
- * }
32
- * ```
10
+ * Theme context provided by the theme provider component and consumed by the theming controller.
33
11
  */
34
12
  export declare const themeContext: {
35
13
  __context__: ThemeContext;
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/theming/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAoC7C,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAe,kBAAkB,CAAC,CAAC","sourcesContent":["import { createContext } from '@lit/context';\nimport type { Theme, ThemeVariant } from './types.js';\n\n/**\n * The theme context value.\n */\nexport interface ThemeContext {\n theme: Theme;\n variant: ThemeVariant;\n}\n\n/**\n * Context for providing theme information to descendant components.\n *\n * Components can consume this context to receive theme information from a theme provider\n * instead of relying on global theming events.\n *\n * @example\n * ```ts\n * // In a component\n * import { ContextConsumer } from '@lit/context';\n * import { themeContext } from './context.js';\n *\n * class MyComponent extends LitElement {\n * private _themeConsumer = new ContextConsumer(this, {\n * context: themeContext,\n * subscribe: true\n * });\n *\n * render() {\n * const theme = this._themeConsumer.value;\n * // ...\n * }\n * }\n * ```\n */\nexport const themeContext = createContext<ThemeContext>('ig-theme-context');\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/theming/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAc7C,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAe,kBAAkB,CAAC,CAAC","sourcesContent":["import { createContext } from '@lit/context';\nimport type { Theme, ThemeVariant } from './types.js';\n\n/**\n * The theme context value.\n */\nexport interface ThemeContext {\n theme: Theme;\n variant: ThemeVariant;\n}\n\n/**\n * Theme context provided by the theme provider component and consumed by the theming controller.\n */\nexport const themeContext = createContext<ThemeContext>('ig-theme-context');\n"]}
@@ -5,7 +5,7 @@ import type { Theme, Themes, ThemeVariant, ThemingControllerConfig } from './typ
5
5
  *
6
6
  * It resolves the active theme from one of two sources, in order of priority:
7
7
  *
8
- * 1. **Context** - provided by an ancestor `<igc-theme-provider>` element via the Lit context API.
8
+ * 1. **Context** - provided by an ancestor theme provider component via the Lit context API.
9
9
  * 2. **Global** - the application-wide theme set via `configureTheme()`.
10
10
  *
11
11
  * When a context provider is present, the controller subscribes to its updates
@@ -15,41 +15,11 @@ import type { Theme, Themes, ThemeVariant, ThemingControllerConfig } from './typ
15
15
  *
16
16
  * Theme styles are applied directly to the host's shadow root via `adoptStyles`
17
17
  * every time the active theme or variant changes.
18
- *
19
- * @example
20
- * Basic usage - typically created via {@link addThemingController}:
21
- * ```typescript
22
- * import { addThemingController } from '#theming/theming-controller.js';
23
- * import { all } from './themes/themes.js';
24
- *
25
- * export default class IgcMyComponent extends LitElement {
26
- * constructor() {
27
- * super();
28
- * addThemingController(this, all);
29
- * }
30
- * }
31
- * ```
32
- *
33
- * @example
34
- * Accessing the current theme and variant at runtime:
35
- * ```typescript
36
- * export default class IgcMyComponent extends LitElement {
37
- * private readonly _themes = addThemingController(this, all);
38
- *
39
- * protected override render() {
40
- * // Conditionally render based on active theme
41
- * return this._themes.variant === 'dark'
42
- * ? html`<div class="dark-layout"></div>`
43
- * : html`<div class="light-layout"></div>`;
44
- * }
45
- * }
46
- * ```
47
18
  */
48
19
  declare class ThemingController implements ReactiveController {
49
20
  private readonly _host;
50
21
  private readonly _themes;
51
22
  private readonly _options?;
52
- private readonly _contextConsumer;
53
23
  private _theme;
54
24
  private _variant;
55
25
  private _themeSource;
@@ -74,7 +44,7 @@ declare class ThemingController implements ReactiveController {
74
44
  *
75
45
  * This is the preferred way to add theming support to a component. The controller
76
46
  * is registered with the host's reactive controller lifecycle and automatically
77
- * resolves the active theme from an ancestor `<igc-theme-provider>` context or
47
+ * resolves the active theme from an ancestor theme provider context or
78
48
  * falls back to the application-wide theme set via `configureTheme()`.
79
49
  *
80
50
  * @param host - The Lit element that will host the controller.