igniteui-webcomponents 7.3.2 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/CHANGELOG.md +87 -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 +3 -1
  101. package/components/checkbox/checkbox-base.js +4 -0
  102. package/components/checkbox/checkbox-base.js.map +1 -1
  103. package/components/checkbox/checkbox.js +4 -12
  104. package/components/checkbox/checkbox.js.map +1 -1
  105. package/components/checkbox/switch.js +1 -8
  106. package/components/checkbox/switch.js.map +1 -1
  107. package/components/chip/chip.d.ts +2 -2
  108. package/components/chip/chip.js.map +1 -1
  109. package/components/color-picker/color-picker.d.ts +35 -34
  110. package/components/color-picker/color-picker.js +12 -7
  111. package/components/color-picker/color-picker.js.map +1 -1
  112. package/components/color-picker/common.d.ts +0 -2
  113. package/components/color-picker/common.js +2 -2
  114. package/components/color-picker/common.js.map +1 -1
  115. package/components/color-picker/converters.js.map +1 -1
  116. package/components/color-picker/picker-canvas.js.map +1 -1
  117. package/components/combo/combo.d.ts +24 -24
  118. package/components/combo/combo.js +21 -26
  119. package/components/combo/combo.js.map +1 -1
  120. package/components/combo/controllers/data.d.ts +7 -10
  121. package/components/combo/controllers/data.js.map +1 -1
  122. package/components/date-picker/date-picker.base.d.ts +22 -27
  123. package/components/date-picker/date-picker.base.js +9 -3
  124. package/components/date-picker/date-picker.base.js.map +1 -1
  125. package/components/date-picker/date-picker.d.ts +1 -1
  126. package/components/date-picker/date-picker.js +5 -3
  127. package/components/date-picker/date-picker.js.map +1 -1
  128. package/components/date-range-picker/date-range-input.d.ts +0 -2
  129. package/components/date-range-picker/date-range-input.js +0 -6
  130. package/components/date-range-picker/date-range-input.js.map +1 -1
  131. package/components/date-range-picker/date-range-picker.d.ts +22 -31
  132. package/components/date-range-picker/date-range-picker.js +7 -7
  133. package/components/date-range-picker/date-range-picker.js.map +1 -1
  134. package/components/date-range-picker/i18n.d.ts +21 -0
  135. package/components/date-range-picker/i18n.js +10 -0
  136. package/components/date-range-picker/i18n.js.map +1 -0
  137. package/components/date-range-picker/predefined-ranges-area.d.ts +3 -3
  138. package/components/date-range-picker/predefined-ranges-area.js +2 -5
  139. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  140. package/components/date-range-picker/validators.d.ts +0 -4
  141. package/components/date-range-picker/validators.js +4 -4
  142. package/components/date-range-picker/validators.js.map +1 -1
  143. package/components/date-time-input/date-time-input.base.d.ts +42 -40
  144. package/components/date-time-input/date-time-input.base.js +9 -5
  145. package/components/date-time-input/date-time-input.base.js.map +1 -1
  146. package/components/date-time-input/date-time-input.d.ts +1 -11
  147. package/components/date-time-input/date-time-input.js +0 -6
  148. package/components/date-time-input/date-time-input.js.map +1 -1
  149. package/components/date-time-input/datetime-mask-parser.d.ts +0 -10
  150. package/components/date-time-input/datetime-mask-parser.js +1 -1
  151. package/components/date-time-input/datetime-mask-parser.js.map +1 -1
  152. package/components/dialog/dialog.js.map +1 -1
  153. package/components/dropdown/dropdown-group.d.ts +2 -10
  154. package/components/dropdown/dropdown-group.js +2 -27
  155. package/components/dropdown/dropdown-group.js.map +1 -1
  156. package/components/dropdown/dropdown.d.ts +17 -23
  157. package/components/dropdown/dropdown.js +5 -17
  158. package/components/dropdown/dropdown.js.map +1 -1
  159. package/components/file-input/file-input.d.ts +7 -2
  160. package/components/file-input/file-input.js +4 -0
  161. package/components/file-input/file-input.js.map +1 -1
  162. package/components/icon/icon.d.ts +1 -1
  163. package/components/icon/icon.registry.d.ts +6 -6
  164. package/components/icon/icon.registry.js.map +1 -1
  165. package/components/input/input-base.d.ts +2 -2
  166. package/components/input/input-base.js +3 -5
  167. package/components/input/input-base.js.map +1 -1
  168. package/components/input/input.d.ts +3 -3
  169. package/components/input/input.js.map +1 -1
  170. package/components/mask-input/mask-history.d.ts +22 -18
  171. package/components/mask-input/mask-history.js.map +1 -1
  172. package/components/mask-input/mask-input.d.ts +1 -1
  173. package/components/mask-input/mask-parser.d.ts +11 -13
  174. package/components/mask-input/mask-parser.js.map +1 -1
  175. package/components/popover/popover.d.ts +45 -34
  176. package/components/popover/popover.js +54 -122
  177. package/components/popover/popover.js.map +1 -1
  178. package/components/popover/position/arrow.d.ts +19 -0
  179. package/components/popover/position/arrow.js +33 -0
  180. package/components/popover/position/arrow.js.map +1 -0
  181. package/components/popover/position/floating.d.ts +40 -0
  182. package/components/popover/position/floating.js +146 -0
  183. package/components/popover/position/floating.js.map +1 -0
  184. package/components/popover/position/native.d.ts +45 -0
  185. package/components/popover/position/native.js +158 -0
  186. package/components/popover/position/native.js.map +1 -0
  187. package/components/popover/position/strategy.d.ts +37 -0
  188. package/components/popover/position/strategy.js +21 -0
  189. package/components/popover/position/strategy.js.map +1 -0
  190. package/components/popover/position/types.d.ts +26 -0
  191. package/components/popover/position/types.js +15 -0
  192. package/components/popover/position/types.js.map +1 -0
  193. package/components/popover/themes/light/popover.base.css.js +1 -1
  194. package/components/popover/themes/light/popover.base.css.js.map +1 -1
  195. package/components/progress/circular-progress.d.ts +0 -5
  196. package/components/progress/circular-progress.js.map +1 -1
  197. package/components/qr-code/qr-code.d.ts +1 -1
  198. package/components/radio/radio.d.ts +6 -4
  199. package/components/radio/radio.js +24 -25
  200. package/components/radio/radio.js.map +1 -1
  201. package/components/radio-group/radio-group.js.map +1 -1
  202. package/components/rating/rating.d.ts +9 -6
  203. package/components/rating/rating.js +17 -18
  204. package/components/rating/rating.js.map +1 -1
  205. package/components/select/select-group.d.ts +5 -10
  206. package/components/select/select-group.js +10 -34
  207. package/components/select/select-group.js.map +1 -1
  208. package/components/select/select.d.ts +12 -20
  209. package/components/select/select.js +5 -15
  210. package/components/select/select.js.map +1 -1
  211. package/components/slider/range-slider.d.ts +0 -1
  212. package/components/slider/range-slider.js +6 -11
  213. package/components/slider/range-slider.js.map +1 -1
  214. package/components/slider/slider-base.d.ts +4 -1
  215. package/components/slider/slider-base.js +20 -18
  216. package/components/slider/slider-base.js.map +1 -1
  217. package/components/slider/slider.d.ts +2 -0
  218. package/components/slider/slider.js +5 -1
  219. package/components/slider/slider.js.map +1 -1
  220. package/components/splitter/splitter.d.ts +6 -6
  221. package/components/splitter/splitter.js.map +1 -1
  222. package/components/textarea/textarea.d.ts +2 -5
  223. package/components/textarea/textarea.js +3 -5
  224. package/components/textarea/textarea.js.map +1 -1
  225. package/components/tile-manager/tile-manager.d.ts +6 -7
  226. package/components/tile-manager/tile-manager.js.map +1 -1
  227. package/components/tile-manager/tile.d.ts +3 -3
  228. package/components/tile-manager/tile.js.map +1 -1
  229. package/components/toast/toast.d.ts +0 -2
  230. package/components/toast/toast.js.map +1 -1
  231. package/components/tooltip/controller.js.map +1 -1
  232. package/components/tooltip/service.js +4 -5
  233. package/components/tooltip/service.js.map +1 -1
  234. package/components/tooltip/tooltip.d.ts +34 -13
  235. package/components/tooltip/tooltip.js +8 -4
  236. package/components/tooltip/tooltip.js.map +1 -1
  237. package/components/tree/tree-item.d.ts +6 -6
  238. package/components/tree/tree-item.js.map +1 -1
  239. package/components/tree/tree.navigation.d.ts +5 -6
  240. package/components/tree/tree.navigation.js.map +1 -1
  241. package/components/tree/tree.selection.js.map +1 -1
  242. package/components/types.d.ts +1 -1
  243. package/components/types.js.map +1 -1
  244. package/components/validation-container/validation-container.js +2 -1
  245. package/components/validation-container/validation-container.js.map +1 -1
  246. package/components/virtualization/engine.d.ts +40 -9
  247. package/components/virtualization/engine.js +126 -61
  248. package/components/virtualization/engine.js.map +1 -1
  249. package/components/virtualization/recycle.d.ts +13 -0
  250. package/components/virtualization/recycle.js +152 -0
  251. package/components/virtualization/recycle.js.map +1 -0
  252. package/components/virtualization/virtualization.d.ts +84 -65
  253. package/components/virtualization/virtualization.js +20 -16
  254. package/components/virtualization/virtualization.js.map +1 -1
  255. package/custom-elements.json +18455 -19551
  256. package/igniteui-webcomponents.css-data.json +2 -2
  257. package/igniteui-webcomponents.html-data.json +1 -1
  258. package/index.d.ts +3 -1
  259. package/index.js +2 -0
  260. package/index.js.map +1 -1
  261. package/internals/abort-handler.d.ts +13 -25
  262. package/internals/abort-handler.js +4 -6
  263. package/internals/abort-handler.js.map +1 -1
  264. package/internals/context.d.ts +13 -7
  265. package/internals/context.js +2 -1
  266. package/internals/context.js.map +1 -1
  267. package/internals/controllers/adopt-styles.d.ts +19 -20
  268. package/internals/controllers/adopt-styles.js +3 -8
  269. package/internals/controllers/adopt-styles.js.map +1 -1
  270. package/internals/controllers/aria-projection.d.ts +100 -61
  271. package/internals/controllers/aria-projection.js +81 -31
  272. package/internals/controllers/aria-projection.js.map +1 -1
  273. package/internals/controllers/async-consumer.js.map +1 -1
  274. package/internals/controllers/command.d.ts +15 -30
  275. package/internals/controllers/command.js +2 -7
  276. package/internals/controllers/command.js.map +1 -1
  277. package/internals/controllers/context-provider.d.ts +7 -13
  278. package/internals/controllers/context-provider.js.map +1 -1
  279. package/internals/controllers/focus-ring.d.ts +10 -30
  280. package/internals/controllers/focus-ring.js +6 -12
  281. package/internals/controllers/focus-ring.js.map +1 -1
  282. package/internals/controllers/fullscreen.d.ts +7 -23
  283. package/internals/controllers/fullscreen.js +3 -9
  284. package/internals/controllers/fullscreen.js.map +1 -1
  285. package/internals/controllers/gestures.d.ts +10 -29
  286. package/internals/controllers/gestures.js +1 -3
  287. package/internals/controllers/gestures.js.map +1 -1
  288. package/internals/controllers/group.d.ts +13 -30
  289. package/internals/controllers/group.js.map +1 -1
  290. package/internals/controllers/host-listeners.d.ts +28 -0
  291. package/internals/controllers/host-listeners.js +27 -0
  292. package/internals/controllers/host-listeners.js.map +1 -0
  293. package/internals/controllers/id-resolver.d.ts +8 -9
  294. package/internals/controllers/id-resolver.js +6 -14
  295. package/internals/controllers/id-resolver.js.map +1 -1
  296. package/internals/controllers/internals.d.ts +53 -104
  297. package/internals/controllers/internals.js +40 -13
  298. package/internals/controllers/internals.js.map +1 -1
  299. package/internals/controllers/key-bindings.d.ts +61 -158
  300. package/internals/controllers/key-bindings.js +68 -67
  301. package/internals/controllers/key-bindings.js.map +1 -1
  302. package/internals/controllers/keys.d.ts +32 -0
  303. package/internals/controllers/keys.js +20 -0
  304. package/internals/controllers/keys.js.map +1 -0
  305. package/internals/controllers/mutation-observer.d.ts +14 -37
  306. package/internals/controllers/mutation-observer.js +1 -1
  307. package/internals/controllers/mutation-observer.js.map +1 -1
  308. package/internals/controllers/resize-observer.d.ts +9 -19
  309. package/internals/controllers/resize-observer.js.map +1 -1
  310. package/internals/controllers/root-click.d.ts +11 -42
  311. package/internals/controllers/root-click.js +4 -6
  312. package/internals/controllers/root-click.js.map +1 -1
  313. package/internals/controllers/roving-focus.d.ts +16 -35
  314. package/internals/controllers/roving-focus.js.map +1 -1
  315. package/internals/controllers/slot.d.ts +25 -54
  316. package/internals/controllers/slot.js +6 -6
  317. package/internals/controllers/slot.js.map +1 -1
  318. package/internals/controllers/toggle.d.ts +44 -48
  319. package/internals/controllers/toggle.js.map +1 -1
  320. package/internals/date/compare.js.map +1 -1
  321. package/internals/date/converters.d.ts +10 -7
  322. package/internals/date/converters.js.map +1 -1
  323. package/internals/date/model.d.ts +9 -16
  324. package/internals/date/model.js +22 -25
  325. package/internals/date/model.js.map +1 -1
  326. package/internals/decorators/blazorAdditionalDependencies.d.ts +4 -2
  327. package/internals/decorators/blazorAdditionalDependencies.js.map +1 -1
  328. package/internals/decorators/blazorDeepImport.d.ts +1 -3
  329. package/internals/decorators/blazorDeepImport.js.map +1 -1
  330. package/internals/decorators/blazorInclude.d.ts +3 -2
  331. package/internals/decorators/blazorInclude.js.map +1 -1
  332. package/internals/decorators/blazorIndirectRender.d.ts +1 -3
  333. package/internals/decorators/blazorIndirectRender.js.map +1 -1
  334. package/internals/decorators/blazorSuppressComponent.d.ts +1 -3
  335. package/internals/decorators/blazorSuppressComponent.js.map +1 -1
  336. package/internals/decorators/coerced-property.d.ts +14 -20
  337. package/internals/decorators/coerced-property.js.map +1 -1
  338. package/internals/decorators/shadow-options.d.ts +2 -5
  339. package/internals/decorators/shadow-options.js.map +1 -1
  340. package/internals/definitions/defineAllComponents.js +2 -0
  341. package/internals/definitions/defineAllComponents.js.map +1 -1
  342. package/internals/directives/drag.d.ts +51 -81
  343. package/internals/directives/drag.js +27 -89
  344. package/internals/directives/drag.js.map +1 -1
  345. package/internals/directives/pointer-operation.d.ts +75 -0
  346. package/internals/directives/pointer-operation.js +92 -0
  347. package/internals/directives/pointer-operation.js.map +1 -0
  348. package/internals/directives/resize.d.ts +36 -64
  349. package/internals/directives/resize.js +18 -85
  350. package/internals/directives/resize.js.map +1 -1
  351. package/internals/i18n/EN/calendar.resources.d.ts +8 -2
  352. package/internals/i18n/EN/calendar.resources.js +2 -2
  353. package/internals/i18n/EN/calendar.resources.js.map +1 -1
  354. package/internals/i18n/EN/chat.resources.d.ts +8 -2
  355. package/internals/i18n/EN/chat.resources.js +3 -10
  356. package/internals/i18n/EN/chat.resources.js.map +1 -1
  357. package/internals/i18n/EN/date-picker.resources.d.ts +6 -4
  358. package/internals/i18n/EN/date-picker.resources.js +1 -7
  359. package/internals/i18n/EN/date-picker.resources.js.map +1 -1
  360. package/internals/i18n/EN/date-range-picker.resources.d.ts +9 -2
  361. package/internals/i18n/EN/date-range-picker.resources.js +2 -2
  362. package/internals/i18n/EN/date-range-picker.resources.js.map +1 -1
  363. package/internals/i18n/i18n-controller.d.ts +44 -46
  364. package/internals/i18n/i18n-controller.js +46 -33
  365. package/internals/i18n/i18n-controller.js.map +1 -1
  366. package/internals/i18n/utils.d.ts +9 -4
  367. package/internals/i18n/utils.js +4 -27
  368. package/internals/i18n/utils.js.map +1 -1
  369. package/internals/mixins/alert.d.ts +10 -25
  370. package/internals/mixins/alert.js.map +1 -1
  371. package/internals/mixins/combo-box.d.ts +21 -11
  372. package/internals/mixins/combo-box.js +16 -22
  373. package/internals/mixins/combo-box.js.map +1 -1
  374. package/internals/mixins/event-emitter.js +9 -11
  375. package/internals/mixins/event-emitter.js.map +1 -1
  376. package/internals/mixins/forms/associated-required.d.ts +4 -4
  377. package/internals/mixins/forms/associated-required.js.map +1 -1
  378. package/internals/mixins/forms/associated.d.ts +4 -2
  379. package/internals/mixins/forms/associated.js +42 -19
  380. package/internals/mixins/forms/associated.js.map +1 -1
  381. package/internals/mixins/forms/form-transformers.js.map +1 -1
  382. package/internals/mixins/forms/types.d.ts +27 -78
  383. package/internals/mixins/forms/types.js.map +1 -1
  384. package/internals/mixins/group.d.ts +18 -0
  385. package/internals/mixins/group.js +37 -0
  386. package/internals/mixins/group.js.map +1 -0
  387. package/internals/mixins/i18n.d.ts +10 -16
  388. package/internals/mixins/i18n.js.map +1 -1
  389. package/internals/mixins/mask-behavior.d.ts +8 -22
  390. package/internals/mixins/mask-behavior.js +1 -2
  391. package/internals/mixins/mask-behavior.js.map +1 -1
  392. package/internals/mixins/option.d.ts +1 -2
  393. package/internals/mixins/option.js +2 -1
  394. package/internals/mixins/option.js.map +1 -1
  395. package/internals/part-map.d.ts +4 -2
  396. package/internals/part-map.js +1 -1
  397. package/internals/part-map.js.map +1 -1
  398. package/internals/templates/input-shell.d.ts +8 -17
  399. package/internals/templates/input-shell.js +4 -1
  400. package/internals/templates/input-shell.js.map +1 -1
  401. package/internals/templates/masked-input.d.ts +7 -8
  402. package/internals/templates/masked-input.js.map +1 -1
  403. package/internals/templates/slotted-icon.d.ts +7 -12
  404. package/internals/templates/slotted-icon.js.map +1 -1
  405. package/internals/templates/toggle-shell.d.ts +19 -19
  406. package/internals/templates/toggle-shell.js +12 -8
  407. package/internals/templates/toggle-shell.js.map +1 -1
  408. package/internals/timing.d.ts +5 -14
  409. package/internals/timing.js.map +1 -1
  410. package/internals/utils/arrays.d.ts +21 -21
  411. package/internals/utils/arrays.js +14 -0
  412. package/internals/utils/arrays.js.map +1 -1
  413. package/internals/utils/dom.d.ts +53 -41
  414. package/internals/utils/dom.js +3 -4
  415. package/internals/utils/dom.js.map +1 -1
  416. package/internals/utils/events.d.ts +29 -16
  417. package/internals/utils/events.js +9 -1
  418. package/internals/utils/events.js.map +1 -1
  419. package/internals/utils/lit.d.ts +5 -2
  420. package/internals/utils/lit.js.map +1 -1
  421. package/internals/utils/math.d.ts +8 -6
  422. package/internals/utils/math.js.map +1 -1
  423. package/internals/utils/objects.d.ts +3 -20
  424. package/internals/utils/objects.js +1 -39
  425. package/internals/utils/objects.js.map +1 -1
  426. package/internals/utils/strings.d.ts +9 -11
  427. package/internals/utils/strings.js.map +1 -1
  428. package/internals/utils/types.d.ts +16 -3
  429. package/internals/utils/types.js +3 -0
  430. package/internals/utils/types.js.map +1 -1
  431. package/internals/validators.d.ts +9 -8
  432. package/internals/validators.js +12 -6
  433. package/internals/validators.js.map +1 -1
  434. package/package.json +1 -1
  435. package/skills/README.md +4 -3
  436. package/skills/igniteui-wc-choose-components/SKILL.md +2 -1
  437. package/skills/igniteui-wc-customize-component-theme/SKILL.md +2 -1
  438. package/skills/igniteui-wc-figma-to-app/SKILL.md +328 -0
  439. package/skills/igniteui-wc-figma-to-app/references/asset-extraction.md +343 -0
  440. package/skills/igniteui-wc-figma-to-app/references/design-provenance.md +199 -0
  441. package/skills/igniteui-wc-figma-to-app/references/design-token-bridge.md +489 -0
  442. package/skills/igniteui-wc-figma-to-app/references/figma-component-map.md +370 -0
  443. package/skills/igniteui-wc-figma-to-app/references/figma-exploration.md +222 -0
  444. package/skills/igniteui-wc-figma-to-app/references/mcp-setup.md +363 -0
  445. package/skills/igniteui-wc-figma-to-app/references/project-setup.md +105 -0
  446. package/skills/igniteui-wc-figma-to-app/references/theme-generation.md +180 -0
  447. package/skills/igniteui-wc-figma-to-app/references/validation-patterns.md +370 -0
  448. package/skills/igniteui-wc-generate-from-image-design/SKILL.md +2 -1
  449. package/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +3 -3
  450. package/skills/igniteui-wc-grids/SKILL.md +133 -0
  451. package/skills/igniteui-wc-integrate-with-framework/SKILL.md +2 -1
  452. package/skills/igniteui-wc-migrate-grid-lite-to-premium/SKILL.md +2 -1
  453. package/skills/igniteui-wc-optimize-bundle-size/SKILL.md +2 -1
  454. package/theming/config.d.ts +14 -5
  455. package/theming/config.js +38 -18
  456. package/theming/config.js.map +1 -1
  457. package/theming/context.d.ts +1 -23
  458. package/theming/context.js.map +1 -1
  459. package/theming/theming-controller.d.ts +2 -32
  460. package/theming/theming-controller.js +15 -21
  461. package/theming/theming-controller.js.map +1 -1
  462. package/theming/theming-event.d.ts +0 -7
  463. package/theming/theming-event.js +0 -13
  464. package/theming/theming-event.js.map +1 -1
  465. package/theming/types.d.ts +1 -8
  466. package/theming/types.js.map +1 -1
  467. package/web-types.json +3 -3
  468. package/animations/presets/slide/index.d.ts +0 -3
  469. package/animations/presets/slide/index.js +0 -16
  470. package/animations/presets/slide/index.js.map +0 -1
  471. package/components/resize-container/themes/resize-container.base.css.js.map +0 -1
  472. package/internals/controllers/root-scroll.d.ts +0 -31
  473. package/internals/controllers/root-scroll.js +0 -71
  474. package/internals/controllers/root-scroll.js.map +0 -1
  475. package/theming/utils.d.ts +0 -11
  476. package/theming/utils.js +0 -20
  477. package/theming/utils.js.map +0 -1
  478. /package/components/{resize-container/themes/resize-container.base.css.d.ts → breadcrumb/themes/breadcrumb.base.css.d.ts} +0 -0
@@ -0,0 +1,363 @@
1
+ # MCP Server Setup — All Four Servers
2
+
3
+ > **Part of the [`igniteui-wc-figma-to-app`](../SKILL.md) skill.**
4
+ >
5
+ > This file contains setup instructions for all four MCP servers required by this skill. Configure all four before running the Figma-to-app workflow.
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ | Server | Purpose | Verify with |
12
+ | ------------------------------------------ | --------------------------------------------------- | ---------------------------------------------- |
13
+ | **Figma** | Read artboard structure, screenshots, design tokens | Tool listed; configured URL (no call) |
14
+ | **Ignite UI CLI** (`igniteui-cli`) | Component docs, API reference | `list_components` |
15
+ | **Ignite UI Theming** (`igniteui-theming`) | Palette + component-level theming code | `theming_detect_platform` |
16
+ | **Playwright** | Browser automation, screenshots, DOM measurement | `playwright_browser_navigate` to `about:blank` |
17
+
18
+ > **Fast path for the two Ignite UI servers:** run `npx -y igniteui-cli ai-config` in the project root. It configures `igniteui-cli` **and** `igniteui-theming` and copies the Agent Skills, preserving existing entries. Projects created with `npx igniteui-cli new --framework=webcomponents` already have both, in the config file of the assistant chosen with `--assistants` (`.mcp.json` by default) — they normally need only Figma and Playwright added.
19
+
20
+ ---
21
+
22
+ ## 1. Figma MCP
23
+
24
+ Figma provides two official MCP servers. Both are HTTP servers — there is **no npm package** to install for either one. Source: https://developers.figma.com/docs/figma-mcp-server/
25
+
26
+ | Server | URL | Authentication | How tools find a node |
27
+ | --- | --- | --- | --- |
28
+ | **Desktop** (local) | `http://127.0.0.1:3845/mcp` | None — the Figma desktop app must be running with the server enabled | The **file open in the desktop app**: the current selection, or the node ID taken from a pasted frame link |
29
+ | **Remote** | `https://mcp.figma.com/mcp` | Figma OAuth sign-in on first use | A **link** to a frame or layer, from which the file key and node ID are taken. No selection |
30
+
31
+ Prefer the **remote** server when the user can share file links: you can move between artboards without asking the user to click anything. Use the **desktop** server when the file is only available in the user's desktop app.
32
+
33
+ ### Desktop server
34
+
35
+ 1. In the Figma desktop app, open the design file and switch to **Dev Mode**.
36
+ 2. In the inspect panel's **MCP server** section, select **Enable desktop MCP server**. A confirmation appears at the bottom of the screen.
37
+ 3. Add the server to the client:
38
+
39
+ **VS Code** (`.vscode/mcp.json`):
40
+
41
+ ```json
42
+ {
43
+ "servers": {
44
+ "figma-desktop": {
45
+ "type": "http",
46
+ "url": "http://127.0.0.1:3845/mcp"
47
+ }
48
+ }
49
+ }
50
+ ```
51
+
52
+ **Cursor** (`.cursor/mcp.json`):
53
+
54
+ ```json
55
+ {
56
+ "mcpServers": {
57
+ "figma-desktop": {
58
+ "url": "http://127.0.0.1:3845/mcp"
59
+ }
60
+ }
61
+ }
62
+ ```
63
+
64
+ **Claude Code:**
65
+
66
+ ```bash
67
+ claude mcp add --transport http figma-desktop http://127.0.0.1:3845/mcp
68
+ ```
69
+
70
+ **JetBrains IDEs:** **Settings → Tools → AI Assistant → MCP Servers → + Add MCP Server**, then add an HTTP server with the URL `http://127.0.0.1:3845/mcp`.
71
+
72
+ Official guide: https://developers.figma.com/docs/figma-mcp-server/local-server-installation/
73
+
74
+ ### Remote server
75
+
76
+ **VS Code** (`.vscode/mcp.json`):
77
+
78
+ ```json
79
+ {
80
+ "servers": {
81
+ "figma": {
82
+ "type": "http",
83
+ "url": "https://mcp.figma.com/mcp"
84
+ }
85
+ }
86
+ }
87
+ ```
88
+
89
+ **Cursor:** use the one-click install link from Figma's guide, or add the same URL as an HTTP server in `.cursor/mcp.json`.
90
+
91
+ **Claude Code:**
92
+
93
+ ```bash
94
+ claude mcp add --transport http figma https://mcp.figma.com/mcp
95
+ ```
96
+
97
+ The client opens Figma's OAuth flow the first time a tool is called.
98
+
99
+ Official guide: https://developers.figma.com/docs/figma-mcp-server/remote-server-installation/
100
+
101
+ > Neither server needs a secret in the config file, so both entries are safe to commit.
102
+
103
+ ### Personal access token (REST API only)
104
+
105
+ The MCP servers do **not** use a personal access token. You need one only for the Figma **REST API** calls in this skill: Tier 1 asset export (`asset-extraction.md`) and reading exact variant properties (`design-provenance.md § Step 1`).
106
+
107
+ 1. Figma → avatar → **Settings** → **Security** → **Personal access tokens** → **Generate new token**, with read access to file content.
108
+ 2. Ask the user to export it in the shell that runs the agent (`export FIGMA_TOKEN=…`). **Never** write it into a project file, `mcp.json`, or source control.
109
+
110
+ Without a token, asset extraction falls back to Tier 2/3 and variant properties come from the design context only.
111
+
112
+ ### Verifying Figma MCP
113
+
114
+ Check that the Figma tools (`figma_get_metadata`, `figma_get_design_context`, …) are listed. Do not spend a call just to verify: View/Collab seats have very small quotas. Tell which server is connected from its **configured URL** (`127.0.0.1:3845` → desktop, `mcp.figma.com` → remote); see `figma-exploration.md` for how each is driven.
115
+
116
+ > **Rate limits** (per seat; verify at https://developers.figma.com/docs/figma-mcp-server/rate-limits-access/): View/Collab seats get up to 6 calls/month (20 on Starter). Dev/Full seats get 200/day on Starter and Professional, and 600/day on Organization and Enterprise, with per-minute caps of 10–20. Use `figma_get_metadata` for structural discovery and `figma_get_design_context` only for target artboards to conserve quota.
117
+
118
+ ### Troubleshooting Figma MCP
119
+
120
+ | Problem | Fix |
121
+ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
122
+ | `figma_get_metadata` returns an error | Desktop: the Figma desktop app is closed, the server is not enabled in Dev Mode, or no file is open. Remote: sign in again through OAuth |
123
+ | Tools not available after config | Restart the editor/IDE |
124
+ | `File not found` | Verify the Figma file URL and your access; `/design/` URLs only (not `/board/`, `/make/`) |
125
+ | Monthly/daily call quota exceeded | A View/Collab seat allows 6 calls/month (20 on Starter) — use a Dev/Full seat, or the Figma REST API with a personal access token for metadata and assets |
126
+
127
+ ---
128
+
129
+ ## 2. Ignite UI CLI MCP (`igniteui-cli`)
130
+
131
+ > Projects created with `npx igniteui-cli new` already have this configured. For existing projects, `npx -y igniteui-cli ai-config` sets up this server and the theming server in one step. Use the manual steps below only when `ai-config` is unavailable or does not cover your editor.
132
+
133
+ ### VS Code
134
+
135
+ ```json
136
+ {
137
+ "servers": {
138
+ "igniteui-cli": {
139
+ "command": "npx",
140
+ "args": ["-y", "igniteui-cli", "mcp"]
141
+ }
142
+ }
143
+ }
144
+ ```
145
+
146
+ ### Cursor
147
+
148
+ ```json
149
+ {
150
+ "mcpServers": {
151
+ "igniteui-cli": {
152
+ "command": "npx",
153
+ "args": ["-y", "igniteui-cli", "mcp"]
154
+ }
155
+ }
156
+ }
157
+ ```
158
+
159
+ ### Claude Code
160
+
161
+ ```bash
162
+ claude mcp add igniteui-cli -- npx -y igniteui-cli mcp
163
+ ```
164
+
165
+ ### JetBrains IDEs
166
+
167
+ 1. **Settings → Tools → AI Assistant → MCP Servers → + Add MCP Server**
168
+ 2. Command: `npx`, Arguments: `-y igniteui-cli mcp`
169
+
170
+ ### Verifying Ignite UI CLI MCP
171
+
172
+ Ask: *"List all available Ignite UI Web Components."* The `list_components` tool should return the catalog for `framework: "webcomponents"`.
173
+
174
+ Tools this skill relies on: `list_components`, `get_doc`, `search_docs`, `search_api`, `get_api_reference`, `get_project_setup_guide`.
175
+
176
+ ---
177
+
178
+ ## 3. Ignite UI Theming MCP (`igniteui-theming`)
179
+
180
+ > `npx -y igniteui-cli ai-config` configures this server too (see section 2).
181
+
182
+ ### VS Code
183
+
184
+ ```json
185
+ {
186
+ "servers": {
187
+ "igniteui-theming": {
188
+ "command": "npx",
189
+ "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
190
+ }
191
+ }
192
+ }
193
+ ```
194
+
195
+ ### Cursor
196
+
197
+ ```json
198
+ {
199
+ "mcpServers": {
200
+ "igniteui-theming": {
201
+ "command": "npx",
202
+ "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
203
+ }
204
+ }
205
+ }
206
+ ```
207
+
208
+ ### Claude Code
209
+
210
+ ```bash
211
+ claude mcp add igniteui-theming -- npx -y igniteui-theming igniteui-theming-mcp
212
+ ```
213
+
214
+ ### JetBrains IDEs
215
+
216
+ 1. **Settings → Tools → AI Assistant → MCP Servers → + Add MCP Server**
217
+ 2. Command: `npx`, Arguments: `-y igniteui-theming igniteui-theming-mcp`
218
+
219
+ ### Verifying Ignite UI Theming MCP
220
+
221
+ Ask: *"Detect which Ignite UI platform my project uses."* `detect_platform` should analyze `package.json` and return `webcomponents`.
222
+
223
+ Tools this skill relies on: `detect_platform`, `create_palette`, `create_custom_palette`, `create_typography`, `create_elevations`, `create_theme`, `get_component_design_tokens`, `create_component_theme`, `get_color`, `get_chart_series_colors`, `set_size`, `set_spacing`, `set_roundness`, `read_resource`.
224
+
225
+ ---
226
+
227
+ ## 4. Playwright MCP
228
+
229
+ ### VS Code
230
+
231
+ ```json
232
+ {
233
+ "servers": {
234
+ "playwright": {
235
+ "command": "npx",
236
+ "args": ["-y", "@playwright/mcp@latest"]
237
+ }
238
+ }
239
+ }
240
+ ```
241
+
242
+ ### Cursor
243
+
244
+ ```json
245
+ {
246
+ "mcpServers": {
247
+ "playwright": {
248
+ "command": "npx",
249
+ "args": ["-y", "@playwright/mcp@latest"]
250
+ }
251
+ }
252
+ }
253
+ ```
254
+
255
+ ### Claude Code
256
+
257
+ ```bash
258
+ claude mcp add playwright -- npx -y @playwright/mcp@latest
259
+ ```
260
+
261
+ ### JetBrains IDEs
262
+
263
+ 1. **Settings → Tools → AI Assistant → MCP Servers → + Add MCP Server**
264
+ 2. Command: `npx`, Arguments: `-y @playwright/mcp@latest`
265
+
266
+ ### Verifying Playwright MCP
267
+
268
+ Ask: *"Navigate the browser to `about:blank`."* `playwright_browser_navigate` should open the page without error.
269
+
270
+ ### Troubleshooting Playwright MCP
271
+
272
+ | Problem | Fix |
273
+ | ----------------------------------------------------- | ----------------------------------------------------------------------------------------- |
274
+ | Screenshots are blank | Make sure the dev server is running (`npm start`; Vite defaults to port 5173) |
275
+ | Page resets to `about:blank` after resize | Always re-navigate after `playwright_browser_resize` |
276
+ | `ERR_CONNECTION_REFUSED` | The dev server is not running, or the port differs from 5173 |
277
+ | `browser_evaluate` fails with *"Invalid input: expected string, received undefined"* | Pass code via the `function` parameter, not `script` |
278
+ | Selector returns `null` for something clearly visible | It is inside a shadow root — use the deep-query helper in `validation-patterns.md` |
279
+ | Element measures `0` height | Measured before upgrade/render, or the host lacks `display: block` — see the same file |
280
+
281
+ ---
282
+
283
+ ## Combined JSON Config (All Four Servers)
284
+
285
+ > **If your project was created with `npx igniteui-cli new`:** `igniteui-cli` and `igniteui-theming` are already in your client's config file (the one chosen with `--assistants`; `.mcp.json` by default). Add only the Figma and Playwright entries below — do not duplicate the others.
286
+ >
287
+ > **Fresh setup:** use the complete blocks below. They use Figma's **remote** server; for the desktop server, replace the `figma` entry with the desktop entry from section 1 (`http://127.0.0.1:3845/mcp`). No Figma token belongs in these files.
288
+
289
+ ### VS Code (`.vscode/mcp.json`)
290
+
291
+ ```json
292
+ {
293
+ "servers": {
294
+ "figma": {
295
+ "type": "http",
296
+ "url": "https://mcp.figma.com/mcp"
297
+ },
298
+ "igniteui-cli": {
299
+ "command": "npx",
300
+ "args": ["-y", "igniteui-cli", "mcp"]
301
+ },
302
+ "igniteui-theming": {
303
+ "command": "npx",
304
+ "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
305
+ },
306
+ "playwright": {
307
+ "command": "npx",
308
+ "args": ["-y", "@playwright/mcp@latest"]
309
+ }
310
+ }
311
+ }
312
+ ```
313
+
314
+ ### Cursor (`.cursor/mcp.json`)
315
+
316
+ ```json
317
+ {
318
+ "mcpServers": {
319
+ "figma": {
320
+ "url": "https://mcp.figma.com/mcp"
321
+ },
322
+ "igniteui-cli": {
323
+ "command": "npx",
324
+ "args": ["-y", "igniteui-cli", "mcp"]
325
+ },
326
+ "igniteui-theming": {
327
+ "command": "npx",
328
+ "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
329
+ },
330
+ "playwright": {
331
+ "command": "npx",
332
+ "args": ["-y", "@playwright/mcp@latest"]
333
+ }
334
+ }
335
+ }
336
+ ```
337
+
338
+ ### Claude Code (`.mcp.json` in the project root)
339
+
340
+ ```json
341
+ {
342
+ "mcpServers": {
343
+ "figma": {
344
+ "type": "http",
345
+ "url": "https://mcp.figma.com/mcp"
346
+ },
347
+ "igniteui-cli": {
348
+ "command": "npx",
349
+ "args": ["-y", "igniteui-cli", "mcp"]
350
+ },
351
+ "igniteui-theming": {
352
+ "command": "npx",
353
+ "args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
354
+ },
355
+ "playwright": {
356
+ "command": "npx",
357
+ "args": ["-y", "@playwright/mcp@latest"]
358
+ }
359
+ }
360
+ }
361
+ ```
362
+
363
+ > Newly added MCP servers require an editor or session reload before their tools appear.
@@ -0,0 +1,105 @@
1
+ # Project Detection and Scaffolding
2
+
3
+ > **Part of the [`igniteui-wc-figma-to-app`](../SKILL.md) skill.**
4
+ >
5
+ > Use this file in Phase 0b to detect an existing Ignite UI Web Components project or scaffold a new one, and in Phase 4 for the view layout and file structure ([Implementation Layout](#implementation-layout)). Read the setup part in full before checking the project or running `igniteui-cli new`.
6
+
7
+ Check whether the current working directory contains a valid Web Components + Ignite UI project:
8
+
9
+ ```
10
+ 1. Does package.json exist?
11
+ 2. Does it list "igniteui-webcomponents" in dependencies?
12
+ 3. Is there a src/ directory with an entry module (src/index.ts, src/main.ts, or similar)?
13
+ ```
14
+
15
+ ## If a valid project is found
16
+
17
+ - Note the package layout: `igniteui-webcomponents` (MIT). Commercial packages — `igniteui-webcomponents-grids` (trial) / `@infragistics/igniteui-webcomponents-grids` (licensed) , `igniteui-webcomponents-charts` (trial) / `@infragistics/igniteui-webcomponents-charts` (licensed), `igniteui-webcomponents-core` (trial) / `@infragistics/igniteui-webcomponents-core` (licensed), `igniteui-dockmanager` (trial) / `@infragistics/igniteui-dockmanager` (licensed).
18
+ - Note the host setup: plain Lit/vanilla app, or a framework wrapper (React/Angular/Vue). If a wrapper is in play, registration and event binding follow [`igniteui-wc-integrate-with-framework`](../../igniteui-wc-integrate-with-framework/SKILL.md), not the raw `defineComponents` pattern.
19
+ - Note whether **Sass** is configured (a `.scss` entry file, `sass` in `devDependencies`, or a bundler Sass plugin). This decides the Phase 3 output format — CSS or Sass.
20
+ - **Check the MCP configuration for all four required server entries** — a Figma entry (`figma` or `figma-desktop`), `igniteui-cli`, `igniteui-theming`, and `playwright`, in the config file your client reads (`.mcp.json`, `.vscode/mcp.json`, `.cursor/mcp.json`, …). If `igniteui-cli` or `igniteui-theming` is missing, run `npx -y igniteui-cli ai-config` (or `ig ai-config` when `igniteui-cli` is installed globally) from the project root yourself — it configures both servers and copies the Agent Skills, preserving existing entries. Add a missing Figma entry and `playwright` from [mcp-setup.md](mcp-setup.md). Projects scaffolded with `npx igniteui-cli new` already have `igniteui-cli` **and** `igniteui-theming` wired; they typically lack Figma and Playwright. A reload is required before newly configured servers' tools appear: ask the user to reload, then stop.
21
+ - Inform the user: "Found existing Ignite UI Web Components project. Proceeding with the Figma workflow."
22
+
23
+ ## If no valid project is found
24
+
25
+ Present this message and wait for the user's choice:
26
+
27
+ > "No Ignite UI Web Components project found in the current directory. Would you like me to scaffold a new one using the Ignite UI CLI before implementing the Figma design?
28
+ >
29
+ > `npx -y igniteui-cli new` creates a Vite + Lit + TypeScript project pre-configured with `igniteui-webcomponents`, a starter theme, and the Ignite UI CLI and Theming MCP servers configured for your coding assistant. No global install required.
30
+ >
31
+ > Alternatively, point me at an existing project directory."
32
+
33
+ If the user confirms scaffolding:
34
+
35
+ 1. Ask for a project name. If the user has already shared a Figma URL, suggest a name derived from the Figma file name; otherwise prompt.
36
+
37
+ 2. Choose the project template based on the artboard structure. Because Phase 1 has not run yet, use the lightest signal available:
38
+
39
+ | Signal | Template to use |
40
+ | ----------------------------------------------------------- | ------------------------------------------------ |
41
+ | User mentions a persistent sidebar or multiple routed views | `side-nav` |
42
+ | User mentions an icon-rail / collapsible sidebar | `side-nav-mini` |
43
+ | No strong signal — default | `empty` (routing + home page; easiest to extend) |
44
+
45
+ 3. Create the project:
46
+
47
+ ```bash
48
+ npx -y igniteui-cli new <project-name> --framework=webcomponents --type=igc-ts --template=<empty|side-nav|side-nav-mini> --assistants=<generic|vscode|cursor|gemini|junie> --agents=<generic|claude|copilot|cursor|…>
49
+ ```
50
+
51
+ `--assistants` picks the MCP config file: `generic` → `.mcp.json` (the default; Claude Code, GitHub Copilot, and others), `vscode` → `.vscode/mcp.json`, `cursor` → `.cursor/mcp.json`, `gemini` → `.gemini/settings.json`, `junie` → `.junie/mcp/mcp.json`. `--agents` picks where the Agent Skills are copied (`generic` → `.agents/skills`, `claude` → `.claude/skills`, `copilot` → `.github/skills`, …). Pass both: without them the CLI asks interactively.
52
+
53
+ This produces a standard Vite workspace and additionally:
54
+ - Installs and configures `igniteui-webcomponents` and `lit`, with a starter theme: a `<link>` in `index.html` to `themes/light/bootstrap.css` or `themes/light/material.css`, depending on the template (Phase 3a treats it as "no theme")
55
+ - Wires `@vaadin/router` routing in `src/app/app-routing.ts`
56
+ - Runs the `ai-config` setup: adds the `igniteui-cli` **and** `igniteui-theming` MCP servers to the chosen assistant's config file, and copies the Agent Skills for the chosen agents
57
+ - Copies static assets from `src/assets` via `vite-plugin-static-copy`
58
+
59
+ 4. `cd <project-name>`.
60
+
61
+ 5. Add the Figma and Playwright entries from [mcp-setup.md](mcp-setup.md) to the same config file the scaffold wrote (the one for `--assistants`).
62
+
63
+ 6. Confirm the project builds:
64
+ ```bash
65
+ npm run build
66
+ ```
67
+ Do not run `npm start` in the foreground: the Vite dev server never exits. Start it in the background, or ask the user to run it, when Phase 5 needs it (default `http://localhost:5173`).
68
+
69
+ 7. The new servers and the new folder only take effect in a new session. Ask the user to **reopen the editor or agent session in the new project folder**, then stop. Phase 1 continues in that session.
70
+
71
+ ## Implementation Layout
72
+
73
+ Used in Phase 4.
74
+
75
+ ### Layout Strategy
76
+
77
+ Translate Figma frame dimensions into CSS Grid first:
78
+
79
+ ```css
80
+ /* Artboard: 1440×900px, sidebar 280px, content 1160px */
81
+ .app-layout {
82
+ display: grid;
83
+ grid-template-columns: 280px 1fr;
84
+ grid-template-rows: 64px 1fr;
85
+ min-height: 100vh;
86
+ }
87
+ ```
88
+
89
+ Match desktop proportions before adding responsive breakpoints.
90
+
91
+ > A Lit component's host is `display: inline` by default — set `:host { display: block }` (or `grid`/`flex`) or the layout collapses. Charts and grids inside a flexible grid track need an explicit height on both the track and the element.
92
+
93
+ ### Project Structure
94
+
95
+ For a new view generated from a Figma artboard in a CLI-scaffolded project:
96
+
97
+ ```
98
+ src/app/
99
+ <artboard-name>/
100
+ <artboard-name>.ts ← Lit component: template, static styles, registration
101
+ data.ts ← typed mock data for the view
102
+ _assets.ts ← asset manifest from Phase 1h (when the view has images)
103
+ ```
104
+
105
+ Register the route in `src/app/app-routing.ts` when the project uses routing. In a non-Lit project, follow the structure already in the repository.
@@ -0,0 +1,180 @@
1
+ # Theme Generation
2
+
3
+ > **Part of the [`igniteui-wc-figma-to-app`](../SKILL.md) skill.**
4
+ >
5
+ > Use this file in Phase 3 to generate the global theme and per-component tokens. Read in full, together with [`design-token-bridge.md`](design-token-bridge.md), before calling any theming tool.
6
+
7
+ > **Tool names:** like SKILL.md, this file writes theming tools as `theming_<tool>`. Match by the tool's base name (`create_palette`, `create_theme`, `create_component_theme`, …) on the connected `igniteui-theming` server; your client may show them as `mcp__igniteui-theming__create_palette` or similar. The `licensed` parameter is for Angular only — do not pass it for Web Components.
8
+
9
+ **Goal:** produce theming code that matches the Figma design's visual language, using the kit variables from Phase 1e (Path A) or the color census and measurements from Phase 1d (Path B).
10
+
11
+ > **Output format decision — make it once, here.** Pass `output: "css"` (the default) when the project has no Sass; pass `output: "sass"` only when Phase 0b found a Sass setup. Every theming tool that generates code (`create_*`, `set_size`, `set_spacing`, `set_roundness`) accepts `output`. Do not emit Sass into a project that cannot compile it, and do not use the Angular-only `core()` / `theme()` mixins — the Web Components Sass API uses `igniteui-theming` with individual `palette()`, `typography()`, `elevations()`, and `spacing()` mixins.
12
+
13
+ ## 3a: Inspect the Existing Theme (Guard)
14
+
15
+ Check **all three** places a theme can come from: `index.html`, the app entry point (`src/index.ts` / `main.ts`), and the global stylesheet (`styles.css` or the project's equivalent). Look for:
16
+
17
+ - a pre-built theme import or `<link>`, such as `igniteui-webcomponents/themes/dark/material.css`
18
+ - `--ig-theme` / `--ig-theme-variant` declarations on `:root`
19
+ - a `configureTheme(...)` call
20
+ - existing palette overrides (`--ig-primary-500`, …) or app-level semantic variables
21
+
22
+ Then classify what you found:
23
+
24
+ | Found | Meaning | Action |
25
+ | --- | --- | --- |
26
+ | Nothing | No theme | Continue with 3b–3c |
27
+ | Only the CLI scaffold's theme: a `<link rel="stylesheet" href="./node_modules/igniteui-webcomponents/themes/light/<bootstrap\|material>.css">` in `index.html` (the template decides which), with no `--ig-*` palette overrides and no `configureTheme` call | The scaffold's starter theme, not a choice made for this app | Treat it as no theme. In 3c, **replace** that `<link>` with the resolved design system and variant; never load two pre-built themes |
28
+ | Any other theme | A theme the app's authors chose | Keep it for now. Finish the comparison below after 3b |
29
+
30
+ **Existing app theme — compare after 3b.** Reuse it, and skip to 3d, only when **all three** match the design:
31
+
32
+ 1. the light/dark **variant** (the import path, or `--ig-theme-variant`);
33
+ 2. the **design system** (the import path, or `--ig-theme`);
34
+ 3. the **primary color**: the seed color on the high-emphasis controls, as seen in the design (Path A: the kit variables; Path B: the color census).
35
+
36
+ If any of them differs, **ask the user** before changing the global theme. It affects every existing view in the app. If the user declines, scope the design's palette overrides, type-style variables, and component tokens to the new view's host selector instead of `:root`. The design system and variant cannot be scoped: components read `--ig-theme` and `--ig-theme-variant` from the document root. Pass the app's `designSystem` / `variant` to `create_component_theme`, and tell the user which anatomy differences will remain.
37
+
38
+ Detect the Figma design's variant from Phase 1e: if a `color/mode` variable exists, use its value. Otherwise use the artboard background color: near-black (`#121212`, `#1a1a1a`, `#000`) → `"dark"`; near-white (`#fff`, `#f5f5f5`) → `"light"`.
39
+
40
+ ## 3b: Resolve the Design System
41
+
42
+ **Choose the path from the dominant Phase 1f tier** (see `design-token-bridge.md § Two Paths`):
43
+
44
+ - **Path B (mostly Tier B/C):** the design system is the **closest baseline**, not a match. Choose it with `design-token-bridge.md § B1`, in this order: the user's request, then the kit's direct counterpart (Material 3 → `material`, Fluent 2 → `fluent`, Bootstrap → `bootstrap`), then text-field label placement, then control heights. A design whose fields have labels *above* them should not get `material`. Then continue: apply B2–B4 in 3c and B5–B8 in 3d.
45
+ - **Path A (mostly Tier A):** use this **strict precedence order**. Stop at the first signal that gives a clear answer:
46
+
47
+ 1. **Explicit user request** — "make it Material", "use Fluent", etc.
48
+ 2. **Library source name in design context** — the `figma_get_design_context` or `figma_get_metadata` response may reference the source library file name (e.g. `"Indigo.Design UI Kit for Material"` → `material`).
49
+ 3. **Variable collection names from Phase 1e** — collection names like `Material/color/primary` identify the kit variant directly.
50
+ 4. **Elevation variable structure** — inspect the `Elevations/*` variables:
51
+ - **Three-layer DROP_SHADOW** (umbra + penumbra + ambient) → **Material**
52
+ - **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap
53
+ 5. **Palette shade naming** — `primary/500`, `primary/100`–`primary/900` follows the Material 100–900 convention → likely **Material**.
54
+ 6. **Visual heuristics** (only when all above are inconclusive): layered shadows + ripple effects → `"material"`; flat surfaces + sharp corners + Segoe/Inter font → `"fluent"`; component borders + Bootstrap grid → `"bootstrap"`; rounded purple/indigo accents without Material shadows → `"indigo"`.
55
+
56
+ > **Never use font name as a primary signal.** "Titillium Web" is the default body font in the Indigo.Design UI Kit for Material — it is not exclusive to any single kit variant.
57
+
58
+ Supported values: `material`, `bootstrap`, `fluent`, `indigo`.
59
+
60
+ > **Web Components read the active design system from CSS variables for the initial theme.** Components read `--ig-theme` and `--ig-theme-variant` (falling back to `bootstrap` / `light` when absent). A generated palette alone does **not** switch the design system — use the pre-built theme CSS or generated `:root` block for that. `configureTheme(ds, variant)` switches registered components at runtime but does not rewrite those root variables.
61
+
62
+ ## 3c: Generate the Global Theme
63
+
64
+ Extract the following using [design-token-bridge.md](design-token-bridge.md):
65
+
66
+ ```
67
+ Path A (Indigo.Design kits) — from Phase 1e variables:
68
+ primaryColor ← from "color/primary/500" or "primary/500"
69
+ secondaryColor ← from "color/secondary/500" or "secondary/500"
70
+ surfaceColor ← from "color/surface" or "surface/default"
71
+ fontFamily ← from "typography/font-family" or "typography/body/font-family"
72
+
73
+ Path B (any other kit, or none) — from the Phase 1d color census (`design-token-bridge.md § B2`):
74
+ primaryColor ← color painted on high-emphasis buttons / active indicators
75
+ secondaryColor ← a second accent actually used, else = primary
76
+ (material baseline: controls use secondary — seed it with the button color)
77
+ surfaceColor ← page background
78
+ fontFamily ← family of the text styles in use
79
+ type overrides ← kit type ramp by role (`design-token-bridge.md § B3`), incl. button text transform (§ B4)
80
+ ```
81
+
82
+ Read the theming guidance resources before generating, so you extract only values the theme system actually accepts:
83
+
84
+ ```
85
+ theming_read_resource({ uri: "theming://guidance/colors/rules" }) // luminance + variant rules
86
+ theming_read_resource({ uri: "theming://platforms/webcomponents" }) // platform specifics
87
+ ```
88
+
89
+ > **Parameter names differ between tools** — `theming_create_palette` uses `primary`, `secondary`, `surface`, `gray`, `success`, `warn`, `error`, `info`, and `variant`. `theming_create_theme` uses `primaryColor`, `secondaryColor`, `surfaceColor`, and has no `gray` or status colors. Do not mix them up.
90
+
91
+ **CSS path (default — no Sass in the project):**
92
+
93
+ 1. Load the pre-built theme CSS for the resolved design system and variant — in the app entry point, or by replacing the scaffold's `<link>` in `index.html` (per 3a). This sets `--ig-theme`, `--ig-theme-variant`, the full palette, typography, and elevations in one line:
94
+
95
+ ```typescript
96
+ import 'igniteui-webcomponents/themes/dark/material.css';
97
+ ```
98
+
99
+ 2. Generate the palette overrides from the seed colors (add `gray` and the status colors when the design needs them):
100
+
101
+ ```
102
+ theming_create_palette({
103
+ primary: primaryColor,
104
+ secondary: secondaryColor,
105
+ surface: surfaceColor,
106
+ variant: "<light|dark>",
107
+ platform: "webcomponents",
108
+ output: "css"
109
+ })
110
+ ```
111
+
112
+ Apply the generated custom properties to `:root` in the global stylesheet. The overrides must load **after** the theme: load both through the same mechanism, in order — import the theme CSS and then `styles.css` from the entry module, or put both as `<link>` tags in `index.html`, theme first. (Vite injects CSS imported from JS after any `<link>` in `index.html`, so mixing the two can let the theme win.)
113
+
114
+ 3. Apply the font family with plain CSS (`--ig-font-family` or `font-family`) or the CSS output of `theming_create_typography({ fontFamily, designSystem, platform: "webcomponents", output: "css" })`. Do not pass `customScale`: the tool accepts it but its generators ignore it. Do not emit Sass typography mixins into a CSS-only app.
115
+
116
+ 4. Read and act on any **luminance warning** the palette tools return. When the design has several distinct surface depths that one generated surface color cannot express, use `theming_create_custom_palette`, or define semantic variables (`--surface-1`, `--surface-2`) for the extra depths.
117
+
118
+ **Sass path (only when Sass is configured):**
119
+
120
+ ```
121
+ theming_create_theme({
122
+ platform: "webcomponents",
123
+ designSystem: "<resolved design system>",
124
+ primaryColor, secondaryColor, surfaceColor,
125
+ variant: "<light|dark>",
126
+ fontFamily,
127
+ includeTypography: true,
128
+ includeElevations: true,
129
+ includeSpacing: true,
130
+ output: "sass"
131
+ })
132
+ ```
133
+
134
+ `theming_create_theme` emits the `@use 'igniteui-theming'` imports, the `palette()` / `elevations()` / `typography()` / `spacing()` mixin calls, and the `:root` block with `--ig-theme` and `--ig-theme-variant`. Apply its output as instructed in the response. For `gray`, status colors, or a full custom ramp, add the output of `theming_create_palette` or `theming_create_custom_palette` **after** it; its `:root` palette variables override the generated ones. Remove the scaffold's theme `<link>` from `index.html` (3a), so only one theme loads.
135
+
136
+ > `theming_create_elevations` takes **`designSystem`** (`"material"` or `"indigo"`) — there is no `preset` parameter.
137
+
138
+ **Path B type overrides (both paths).** After the theme, add a `:root` block that sets the `--ig-<style>-<property>` variables for the type styles that differ from the baseline, including the button's text transform. See `design-token-bridge.md § B4`.
139
+
140
+ **Runtime switching.** When the design needs light and dark at runtime, swap the pre-built stylesheet (or the palette block) **and** call the library API with the same design system and variant. Components cache the design system they read from `--ig-theme` on first use, so neither step alone switches both the palette and the component styles:
141
+
142
+ ```typescript
143
+ import { configureTheme } from 'igniteui-webcomponents';
144
+ // after loading the dark material stylesheet:
145
+ configureTheme('material', 'dark');
146
+ ```
147
+
148
+ **Grid and chart packages carry their own themes.** The premium grids need `igniteui-webcomponents-grids/grids/themes/<variant>/<design-system>.css` in addition to the core theme, and inside a Lit component that CSS must be imported `?inline` and injected into the shadow root:
149
+
150
+ ```typescript
151
+ import gridTheme from 'igniteui-webcomponents-grids/grids/themes/dark/material.css?inline';
152
+ // in render(): html`<style>${gridTheme}</style> <igc-grid ...></igc-grid>`
153
+ ```
154
+
155
+ ## 3d: Per-Component Token Mapping
156
+
157
+ > **Scope:** applies to every Ignite UI family that exposes design tokens — card, inputs, select, combo, navbar, nav drawer, list, tabs, date pickers, chips, grids, etc. Charts, gauges, and maps have **no design tokens**; configure those through component properties (see 3e).
158
+
159
+ For **every** Ignite UI component in your plan, run this loop:
160
+
161
+ 1. `theming_get_component_design_tokens({ component: "<theme-key>" })` — review all token names, types, and descriptions, plus any **related themes** listed for compound components. Theme keys are not always the tag name: inputs are `input-group`, the nav drawer is `navdrawer`, progress bars are `progress-linear` / `progress-circular`, a single-select combo is `simple-combo`, and buttons need the variant name (`contained-button`, `flat-icon-button`, …). See `design-token-bridge.md § Per-Component Token Resolution` for the full map.
162
+ 2. Find the values for this component's surfaces (background, text, border, hover state). **Path A:** from the Phase 1e kit variables. **Path B:** from the Phase 1d color census and measurements. Variables, when they exist, only confirm them.
163
+ 3. `theming_create_component_theme({ component: "<theme-key>", platform: "webcomponents", designSystem: "<3b result>", variant: "<light|dark>", tokens: { <only differing tokens> }, output: "css" | "sass" })`. Always pass `designSystem` and `variant`: the tool defaults to Material light and would compute the theme against the wrong schema.
164
+ 4. Apply the generated block exactly as returned — to the component selector or to the `selector` you passed. Color token values must reference palette variables (`var(--ig-primary-500)`), never raw hex.
165
+ 5. For compound components — any component whose `get_component_design_tokens` result lists related themes (for example `combo`, `select`, the date pickers, `card`, `navbar`, `dialog`, `banner`, and the grids) — follow the related-theme chain from step 1 and theme each child with its scoped selector. Styling only the parent leaves the dropdown or calendar off-theme. Exception: the grid theme **derives** its children (`action-strip`, `column-actions`, toolbar, paginator, …); theme the grid and do not call `create_component_theme` for those keys separately.
166
+
167
+ **Path B additions to this loop** (see `design-token-bridge.md § B5–B8`): include the component's **radius** tokens at the measured px value, its **border** and **shadow/elevation** tokens as the design shows them, and its hover/focus/disabled **state** tokens from the kit's state variants, in the same `theming_create_component_theme` call. Choose `--ig-size` per component family from the measured control heights (`design-token-bridge.md § B7`) before tuning individual components.
168
+
169
+ When a specific component needs a different density or spacing from the global default, use `theming_set_size` or `theming_set_spacing` with the `component` parameter — this scopes `--ig-size` or `--ig-spacing` to that component's selector rather than applying globally. For compound components, use `scope` with a sub-component selector. Only apply these globally (`:root`) when the entire app has a clearly distinct density (Path B: when every component family moves the same way, see `design-token-bridge.md § B7`). Leave `theming_set_roundness` at its default unless the user explicitly requests a change. For Path B, express radius through per-component tokens instead, because one global factor cannot reproduce a kit's radii. Never derive multiplier values from Figma pixel values — see `design-token-bridge.md § Spacing, Sizing, and Roundness`.
170
+
171
+ ## 3e: Chart Series Colors
172
+
173
+ Charts have no design tokens, and they default to their own brush palette — which will not match the Figma series colors. Before implementing any chart:
174
+
175
+ ```
176
+ theming_get_chart_series_colors({ chartType: "<e.g. category-chart>" })
177
+ theming_get_chart_series_colors({ customBrushes: ["#9DE772", "#6DB1FF"] }) // validate Figma colors
178
+ ```
179
+
180
+ The first call lists which theme tokens on that chart type accept a brush list; the second validates the colors you extracted in Phase 1d and flags pairs that are hard to tell apart. Apply the result through the chart's brush properties, assigned on the element: `brushes` / `outlines` on most charts, `brush` on `igc-sparkline`, `fillBrushes` on `igc-treemap`, and `brushes` / `outlines` on each `igc-ring-series` of a doughnut chart.