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,370 @@
1
+ # Figma Components → Ignite UI Web Components Map
2
+
3
+ > **Part of the [`igniteui-wc-figma-to-app`](../SKILL.md) skill.**
4
+ >
5
+ > Use this file in Phase 2a to resolve every row of the Phase 1g Table A to a tag, component class, package, and `get_doc` name. It has two entry points:
6
+ >
7
+ > - **Canonical Role Index** (next section). Use it for **Tier B and Tier C** layers: components from any other UI kit, or un-componentized frames, after they are normalized with [design-provenance.md](design-provenance.md).
8
+ > - **Kit Component Name** tables (the sections after it). Use them for **Tier A** layers from the Infragistics **Indigo.Design UI Kits** (Material, Fluent, Bootstrap, Indigo variants), whose layer names map to Ignite UI directly.
9
+ >
10
+ > When a role or layer name is in neither, call `list_components` then `get_doc` on the closest match.
11
+
12
+ ---
13
+
14
+ ## Canonical Role Index
15
+
16
+ Normalized roles from `design-provenance.md` → the Ignite UI tag, and the section below that holds its full row (class, package, doc name, key attributes).
17
+
18
+ | Canonical role (+ normalized props) | Ignite UI Web Components | Section |
19
+ | --- | --- | --- |
20
+ | `button` · high | `<igc-button variant="contained">` | Button Components |
21
+ | `button` · medium (outlined) | `<igc-button variant="outlined">` | Button Components |
22
+ | `button` · medium (tonal / secondary fill) | `<igc-button variant="contained">` + `contained-button` tokens set to the **measured** tonal fill and text colors (usually a light shade such as `var(--ig-primary-100)`). Do not use the plain `secondary` palette: on a `material` baseline it holds the brand color, so tonal buttons would look like high-emphasis ones | Button Components |
23
+ | `button` · low | `<igc-button variant="flat">` | Button Components |
24
+ | `button` · link | `<igc-button variant="flat" href="…">`, or a plain `<a>` styled as a link | Button Components |
25
+ | `button` · elevated | `<igc-button variant="contained">` + elevation via tokens | Button Components |
26
+ | `button` · danger | Same variant + tokens bound to `--ig-error-*` | Button Components |
27
+ | `icon-button` | `<igc-icon-button variant="flat\|outlined\|contained">` | Button Components |
28
+ | `fab` | `<igc-button variant="fab">` | Button Components |
29
+ | `toggle-group` | `<igc-button-group>` + `<igc-toggle-button>` | Button Components |
30
+ | `text-field` · outlined | `<igc-input outlined>` | Form Controls |
31
+ | `text-field` · filled / underlined | `<igc-input>` (close the look with `input-group` tokens) | Form Controls |
32
+ | `textarea` | `<igc-textarea>` | Form Controls |
33
+ | `select` | `<igc-select>` | Form Controls |
34
+ | `combobox` (single, searchable) | `<igc-combo single-select>` | Form Controls |
35
+ | `combobox` (multi / tags) | `<igc-combo>` | Form Controls |
36
+ | `checkbox` / `radio` / `switch` | `<igc-checkbox>` / `<igc-radio-group>`+`<igc-radio>` / `<igc-switch>` | Form Controls |
37
+ | `slider` / `range-slider` | `<igc-slider>` / `<igc-range-slider>` | Form Controls |
38
+ | `rating` | `<igc-rating>` | Form Controls |
39
+ | `file-upload` | `<igc-file-input>` | Form Controls |
40
+ | `color-picker` | `<igc-color-picker>` | Form Controls |
41
+ | `date-picker` / `date-range-picker` / `calendar` | `<igc-date-picker>` / `<igc-date-range-picker>` / `<igc-calendar>` | Date & Time |
42
+ | `time-picker` | `<igc-date-time-input>` with a time format | Date & Time |
43
+ | `app-bar` | `<igc-navbar>` | Navigation |
44
+ | `side-nav` (expanded, always visible) | `<igc-nav-drawer position="relative" open>` | Navigation |
45
+ | navigation rail (icon-only) | `<igc-nav-drawer position="relative">` (**not** `open`) with the rail items in the `mini` slot. The mini rail is hidden while the drawer is open | Navigation |
46
+ | `tabs` | `<igc-tabs>` | Navigation |
47
+ | `breadcrumbs` | `<igc-breadcrumbs>` + `<igc-breadcrumb>` | Navigation |
48
+ | `stepper` | `<igc-stepper>` | Navigation |
49
+ | `menu` | `<igc-dropdown>` | Form Controls |
50
+ | `accordion` / `expansion-panel` | `<igc-accordion>` / `<igc-expansion-panel>` | Layout |
51
+ | `card` | `<igc-card>` (only when header/media/content/actions anatomy fits) | Data Display |
52
+ | `list` | `<igc-list>` | Data Display |
53
+ | `tree` | `<igc-tree>` | Data Display |
54
+ | `data-table` (simple, read-only) | `<igc-grid-lite>` | Grids |
55
+ | `data-table` (editing, grouping, paging, summaries…) | `<igc-grid>` and family | Grids |
56
+ | `avatar` | `<igc-avatar>` | Data Display |
57
+ | `tag` / `count-badge` | `<igc-badge>` | Data Display |
58
+ | `chip` | `<igc-chip>` | Data Display |
59
+ | `progress-linear` / `progress-circular` | `<igc-linear-progress>` / `<igc-circular-progress>` | Data Display |
60
+ | `divider` | `<igc-divider>` | Data Display |
61
+ | `carousel` | `<igc-carousel>` | Data Display |
62
+ | `dialog` | `<igc-dialog>` | Feedback / Overlay |
63
+ | `toast` (text only) / (with action) | `<igc-toast>` / `<igc-snackbar>` | Feedback / Overlay |
64
+ | `inline-alert` | `<igc-banner>` | Feedback / Overlay |
65
+ | `tooltip` | `<igc-tooltip>` | Feedback / Overlay |
66
+ | `qr-code` | `<igc-qr-code>` | Data Display |
67
+ | `chart-*` / `gauge-*` / `map` | See the DV table | Charts, Gauges, and Maps |
68
+ | `bottom-nav`, `sheet`, `skeleton`, `pagination` (standalone) | No direct component | Components With No Web Components Equivalent |
69
+
70
+ ---
71
+
72
+ ## How to Use the Kit Tables
73
+
74
+ 1. Find the kit component name (as it appears in the Figma layers panel or the Indigo.Design kit library) in the **Kit Component Name** column.
75
+ 2. Read the **Tag**, **Class**, and **Package** columns for the markup and imports.
76
+ 3. Call `get_doc({ framework: "webcomponents", name: "<doc name>" })` for usage patterns and slots, then `get_api_reference({ platform: "webcomponents", component: "<Class>" })` for the full property/method/event API.
77
+ 4. Consult **Key attributes / slots** for the properties most commonly configured from Figma variants. These are starting points, not a substitute for the docs.
78
+
79
+ > The kit component names are identical across all four kit variants (Material, Fluent, Bootstrap, Indigo). The kit variant determines the theme, not the component name.
80
+
81
+ ### Doc-name rules you will hit immediately
82
+
83
+ - **Doc names are topic-page names, not tag names.** `navigation-drawer`, `text-area`, `data-grid`, `circular-progress`.
84
+ - **`get_doc` normalizes and aliases input.** It strips the `Igc` prefix and the `Component` suffix, so `IgcCarouselComponent` resolves to `carousel`. It also aliases these Web Components names:
85
+
86
+ | You pass | Resolves to |
87
+ | --- | --- |
88
+ | `combo`, `combo-box`, `combobox` | `overview` |
89
+ | `grid` | `data-grid` |
90
+ | `tree-grid` | `tree-grid-overview` |
91
+ | `hierarchical-grid` | `hierarchical-grid-overview` |
92
+ | `pivot-grid` | `pivot-grid-overview` |
93
+ | `grid-lite` | `grid-lite-overview` |
94
+ | `treemap` | `treemap-chart` |
95
+ | `radio-group` | `radio` |
96
+ | `range-slider` | `slider` |
97
+ | `geographic-map` | `geo-map` |
98
+
99
+ - Combo has several topic pages (`overview`, `features`, `single-selection`, `templates`); read `overview` first, then the specific one the design needs.
100
+ - Always confirm against a live `list_components({ framework: "webcomponents" })` — the catalog is the source of truth, this table is a shortcut.
101
+
102
+ ### Registration cheat sheet
103
+
104
+ | Package | Registration |
105
+ | --- | --- |
106
+ | `igniteui-webcomponents` | `defineComponents(IgcNavbarComponent, IgcCardComponent, …)` |
107
+ | `igniteui-webcomponents-grids` | `IgcGridComponent.register()` (per grid type) |
108
+ | `igniteui-grid-lite` | `IgcGridLite.register()`, or `import 'igniteui-grid-lite/define'`; the column tag is `igc-grid-lite-column` |
109
+ | `igniteui-webcomponents-charts` / `-gauges` / `-maps` | `ModuleManager.register(IgcCategoryChartModule, …)` from `igniteui-webcomponents-core` |
110
+ | `igniteui-dockmanager` | `defineComponents(IgcDockManagerComponent)` from `igniteui-dockmanager` (`defineCustomElements()` is deprecated since 2.0.0) |
111
+
112
+ Licensed projects use the same names prefixed with `@infragistics/` (e.g. `@infragistics/igniteui-webcomponents-grids`, `@infragistics/igniteui-dockmanager`). `igniteui-webcomponents` itself is MIT and has no licensed variant. Resolve the layout once in Phase 0b and keep it consistent.
113
+
114
+ ---
115
+
116
+ ## Button Components
117
+
118
+ | Kit Component Name | Tag | Class | Package | Doc | Key attributes / slots |
119
+ | -------------------------------------- | -------------------------------------- | ------------------------ | ------------------------ | ------------- | ---------------------------------------------------------- |
120
+ | `_Button/Flat` | `<igc-button variant="flat">` | `IgcButtonComponent` | `igniteui-webcomponents` | `button` | `variant`, `disabled`, `href`; slots `prefix`, `suffix` |
121
+ | `_Button/Outlined` | `<igc-button variant="outlined">` | `IgcButtonComponent` | `igniteui-webcomponents` | `button` | `variant="outlined"` |
122
+ | `_Button/Contained` / `_Button/Raised` | `<igc-button variant="contained">` | `IgcButtonComponent` | `igniteui-webcomponents` | `button` | `variant="contained"` (default) |
123
+ | `_FAB` / `Fab` | `<igc-button variant="fab">` | `IgcButtonComponent` | `igniteui-webcomponents` | `button` | `variant="fab"` |
124
+ | `_Icon Button/*` | `<igc-icon-button variant="flat">` | `IgcIconButtonComponent` | `igniteui-webcomponents` | `icon-button` | `variant` (`flat\|contained\|outlined`), `name`, `collection` |
125
+ | `_Button Group` | `<igc-button-group>` | `IgcButtonGroupComponent` | `igniteui-webcomponents` | `button-group` | `selection`, `alignment`; `<igc-toggle-button>` children |
126
+
127
+ > `variant` is an **attribute** on the element itself — there is no directive equivalent of Angular's `igxButton`. Icon-only buttons need an `aria-label` for the Phase 5g check.
128
+
129
+ ---
130
+
131
+ ## Form Controls
132
+
133
+ > **Input variants.** The kits express `line` / `box` / `border` input types. Web Components expose a single boolean **`outlined`** attribute on `igc-input`, `igc-textarea`, `igc-mask-input`, `igc-date-time-input`, `igc-file-input`, `igc-select`, `igc-combo`, `igc-date-picker`, and `igc-date-range-picker`. Map `_Input/Border` → `outlined`; `_Input/Line` and `_Input/Box` → default. There is **no** global injection-token equivalent of Angular's `IGX_INPUT_GROUP_TYPE` — set the attribute per control, and close residual differences with `input-group` component tokens (Phase 3d), never with internal class selectors.
134
+
135
+ | Kit Component Name | Tag | Class | Package | Doc | Key attributes / slots |
136
+ | ------------------------------ | ------------------------- | ------------------------------- | ------------------------ | ------------------- | --------------------------------------------------------------------------- |
137
+ | `_Input/Line`, `_Input/Box` | `<igc-input>` | `IgcInputComponent` | `igniteui-webcomponents` | `input` | `type`, `label`, `placeholder`, `value`, `disabled`; slots `prefix`, `suffix`, `helper-text` |
138
+ | `_Input/Border` | `<igc-input outlined>` | `IgcInputComponent` | `igniteui-webcomponents` | `input` | `outlined` |
139
+ | `_Input/Search` | `<igc-input type="search">` | `IgcInputComponent` | `igniteui-webcomponents` | `input` | Add a search `igc-icon` in the `prefix` slot |
140
+ | `_Text Area` | `<igc-textarea>` | `IgcTextareaComponent` | `igniteui-webcomponents` | `text-area` | `label`, `rows`, `resize`, `outlined` |
141
+ | `_Masked Input` | `<igc-mask-input>` | `IgcMaskInputComponent` | `igniteui-webcomponents` | `mask-input` | `mask`, `prompt`, `value-mode` |
142
+ | `_File Upload` | `<igc-file-input>` | `IgcFileInputComponent` | `igniteui-webcomponents` | `file-input` | `multiple`, `accept`, `label` |
143
+ | `_Combo` / `_ComboBox` | `<igc-combo>` | `IgcComboComponent` | `igniteui-webcomponents` | `combo` → `overview` | `.data`, `display-key`, `value-key`, `group-key`, `single-select`, `outlined` |
144
+ | `_Simple Combo` | `<igc-combo single-select>` | `IgcComboComponent` | `igniteui-webcomponents` | `single-selection` | `single-select` — theme key is `simple-combo` |
145
+ | `_Select` / `_Dropdown` | `<igc-select>` | `IgcSelectComponent` | `igniteui-webcomponents` | `select` | `<igc-select-item>` / `igc-select-group` / `igc-select-header` children |
146
+ | `_Dropdown` (menu, not a field) | `<igc-dropdown>` | `IgcDropdownComponent` | `igniteui-webcomponents` | `dropdown` | `open`, `placement`; `<igc-dropdown-item>` children |
147
+ | `_Checkbox` | `<igc-checkbox>` | `IgcCheckboxComponent` | `igniteui-webcomponents` | `checkbox` | `checked`, `indeterminate`, `label-position`, `disabled` |
148
+ | `_Radio` / `_Radio Button` | `<igc-radio>` | `IgcRadioComponent` | `igniteui-webcomponents` | `radio` | `value`, `checked`; wrap in `<igc-radio-group>` |
149
+ | `_Switch` / `_Toggle` | `<igc-switch>` | `IgcSwitchComponent` | `igniteui-webcomponents` | `switch` | `checked`, `label-position` |
150
+ | `_Slider` | `<igc-slider>` | `IgcSliderComponent` | `igniteui-webcomponents` | `slider` | `min`, `max`, `step`, `value`, `discrete-track` |
151
+ | `_Range Slider` | `<igc-range-slider>` | `IgcRangeSliderComponent` | `igniteui-webcomponents` | `slider` | `lower`, `upper` |
152
+ | `_Rating` | `<igc-rating>` | `IgcRatingComponent` | `igniteui-webcomponents` | `rating` | `value`, `max`, `step`, `single`, `allow-reset`, `hover-preview`, `readonly`; slots `symbol`, `value-label`; `igcChange` event |
153
+ | `_Color Picker` | `<igc-color-picker>` | `IgcColorPickerComponent` | `igniteui-webcomponents` | confirm via `list_components` | `value`, `format`, `label`, `mode`, `show-alpha`, `hide-formats` |
154
+
155
+ ---
156
+
157
+ ## Date & Time
158
+
159
+ | Kit Component Name | Tag | Class | Package | Doc | Key attributes / slots |
160
+ | -------------------- | --------------------------- | ------------------------------- | ------------------------ | ------------------- | -------------------------------------------------------------------- |
161
+ | `_Date Picker` | `<igc-date-picker>` | `IgcDatePickerComponent` | `igniteui-webcomponents` | `date-picker` | `value`, `min`, `max`, `mode` (`dropdown\|dialog`), `label`, `outlined` |
162
+ | `_Date Range Picker` | `<igc-date-range-picker>` | `IgcDateRangePickerComponent` | `igniteui-webcomponents` | `date-range-picker` | `value`, `mode`, `use-two-inputs` |
163
+ | `_Time Picker` | `<igc-date-time-input>` | `IgcDateTimeInputComponent` | `igniteui-webcomponents` | `date-time-input` | **No dedicated time picker in Web Components** — use a time `input-format` |
164
+ | `_Calendar` | `<igc-calendar>` | `IgcCalendarComponent` | `igniteui-webcomponents` | `calendar` | `selection` (`single\|multiple\|range`), `value`, `values`, `visible-months`, `week-start`, `show-week-numbers`, `header-orientation` |
165
+
166
+ > The date pickers are **compound** — their dropdown and calendar surfaces are separate themes. Follow the related-theme chain from `get_component_design_tokens`.
167
+
168
+ ---
169
+
170
+ ## Navigation
171
+
172
+ | Kit Component Name | Tag | Class | Package | Doc | Key attributes / slots |
173
+ | ---------------------------------- | ------------------------- | ------------------------------ | ------------------------ | --------------------- | -------------------------------------------------------------------------------- |
174
+ | `_Navbar` | `<igc-navbar>` | `IgcNavbarComponent` | `igniteui-webcomponents` | `navbar` | Slots `start`, `end`, default (title). No `title` attribute — slot the title in. |
175
+ | `_Navigation Drawer` / `_Side Nav` | `<igc-nav-drawer>` | `IgcNavDrawerComponent` | `igniteui-webcomponents` | `navigation-drawer` | `open`, `position` (`start\|end\|top\|bottom\|relative`), `label`; slot `mini`; `<igc-nav-drawer-item>` / `<igc-nav-drawer-header-item>` children |
176
+ | `_Tabs` | `<igc-tabs>` | `IgcTabsComponent` | `igniteui-webcomponents` | `tabs` | `alignment`, `activation`; `<igc-tab label="…">` children with `prefix`/`suffix` slots |
177
+ | `_Bottom Navigation` | — | — | — | — | **Not available in Web Components.** Use `igc-tabs` or custom markup; document the substitution. |
178
+ | `_Stepper` | `<igc-stepper>` | `IgcStepperComponent` | `igniteui-webcomponents` | `stepper` | `orientation`, `step-type`, `linear`, `title-position`; `<igc-step>` children |
179
+ | `_Breadcrumbs` | `<igc-breadcrumbs>` | `IgcBreadcrumbsComponent` | `igniteui-webcomponents` | confirm via `list_components` | `separator`; default slot contains `<igc-breadcrumb>` children; wrap in `<nav aria-label="…">` |
180
+ | `_Breadcrumb` | `<igc-breadcrumb>` | `IgcBreadcrumbComponent` | `igniteui-webcomponents` | confirm via `list_components` | `current`, `disabled`; slots `prefix`, `suffix`, `separator` |
181
+
182
+ > A design showing a persistent, always-visible sidebar maps to `<igc-nav-drawer position="relative" open>` — not the modal default. The drawer's width comes from the `navdrawer` design tokens `size` and `size--mini`, exposed as `--ig-nav-drawer-size` (default 15rem) and `--ig-nav-drawer-size--mini`. Set them through `create_component_theme` like any other token.
183
+
184
+ ---
185
+
186
+ ## Layout
187
+
188
+ | Kit Component Name | Tag | Class | Package | Doc | Key attributes / slots |
189
+ | ------------------ | ----------------------- | ---------------------------- | --------------------------- | ------------------ | -------------------------------------------------------------- |
190
+ | `_Accordion` | `<igc-accordion>` | `IgcAccordionComponent` | `igniteui-webcomponents` | `accordion` | `single-expand`; `<igc-expansion-panel>` children |
191
+ | `_Expansion Panel` | `<igc-expansion-panel>` | `IgcExpansionPanelComponent` | `igniteui-webcomponents` | `expansion-panel` | `open`, `disabled`, `indicator-position`; slots `title`, `subtitle`, `indicator-expanded` |
192
+ | `_Splitter` | `<igc-splitter>` | `IgcSplitterComponent` | `igniteui-webcomponents` | `splitter` | Orientation and pane sizing — confirm from `get_doc` |
193
+ | `_Tile Manager` | `<igc-tile-manager>` | `IgcTileManagerComponent` | `igniteui-webcomponents` | `tile-manager` | `<igc-tile>` children; `column-count`, `gap`, `min-column-width`, `resize-mode`, `drag-mode` |
194
+ | `_Dock Manager` | `<igc-dockmanager>` | `IgcDockManagerComponent` | `igniteui-dockmanager` | `dock-manager` | `.layout` JSON assigned as a **property** |
195
+
196
+ ---
197
+
198
+ ## Data Display
199
+
200
+ | Kit Component Name | Tag | Class | Package | Doc | Key attributes / slots |
201
+ | ------------------------------------ | -------------------------- | --------------------------------- | ------------------------ | -------------------- | -------------------------------------------------------------------------- |
202
+ | `_List` | `<igc-list>` | `IgcListComponent` | `igniteui-webcomponents` | `list` | `<igc-list-item>` children with slots `start`, `title`, `subtitle`, `end`; `<igc-list-header>` |
203
+ | `_Tree` / `_Tree View` | `<igc-tree>` | `IgcTreeComponent` | `igniteui-webcomponents` | `tree` | `selection`; `<igc-tree-item>` children |
204
+ | `_Card` | `<igc-card>` | `IgcCardComponent` | `igniteui-webcomponents` | `card` | `<igc-card-header>` (slots `thumbnail`, `title`, `subtitle`), `<igc-card-media>`, `<igc-card-content>`, `<igc-card-actions>` |
205
+ | `_Chip` / `_Chips` | `<igc-chip>` | `IgcChipComponent` | `igniteui-webcomponents` | `chip` | `removable`, `selectable`, `selected`, `disabled`, `outlined`, `variant`; slots `prefix`, `suffix`, `start`, `end` — there is **no chips-area**, lay chips out with flex |
206
+ | `_Avatar` | `<igc-avatar>` | `IgcAvatarComponent` | `igniteui-webcomponents` | `avatar` | `src`, `alt`, `initials`, `shape` (`circle\|rounded\|square`) |
207
+ | `_Badge` | `<igc-badge>` | `IgcBadgeComponent` | `igniteui-webcomponents` | `badge` | `variant` (`primary\|info\|success\|warning\|danger`), `shape`, `outlined`, `dot` |
208
+ | `_Icon` | `<igc-icon>` | `IgcIconComponent` | `igniteui-webcomponents` | `icon` | `name`, `collection` — icons must be **registered first** (see below) |
209
+ | `_Carousel` | `<igc-carousel>` | `IgcCarouselComponent` | `igniteui-webcomponents` | `carousel` | `<igc-carousel-slide>` children; `interval`, `vertical`, `disable-loop`, `hide-indicators`, `hide-navigation` |
210
+ | `_Linear Progress` / `_Progress Bar` | `<igc-linear-progress>` | `IgcLinearProgressComponent` | `igniteui-webcomponents` | `linear-progress` | `value`, `max`, `indeterminate`, `variant`, `striped` — theme key `progress-linear` |
211
+ | `_Circular Progress` | `<igc-circular-progress>` | `IgcCircularProgressComponent` | `igniteui-webcomponents` | `circular-progress` | `value`, `max`, `indeterminate` — theme key `progress-circular` |
212
+ | `_Divider` | `<igc-divider>` | `IgcDividerComponent` | `igniteui-webcomponents` | `divider` | `type` (`solid\|dashed`), `vertical`, `middle` |
213
+ | `_Chat` | `<igc-chat>` | `IgcChatComponent` | `igniteui-webcomponents` | `chat` | `.messages`, `.options` assigned as properties |
214
+ | `_QR Code` | `<igc-qr-code>` | `IgcQrCodeComponent` | `igniteui-webcomponents` | confirm via `list_components` | `value`, `size`, `error-level`, `logo-src`, `dot-style`, `square-style` |
215
+ | `_Paginator` | `<igc-paginator>` | grid package | `igniteui-webcomponents-grids` | search `grid-paging` | Part of the grid packages, not a standalone core component |
216
+
217
+ ---
218
+
219
+ ## Feedback / Overlay
220
+
221
+ | Kit Component Name | Tag | Class | Package | Doc | Key attributes / slots |
222
+ | ------------------ | ---------------- | ---------------------- | ------------------------ | ---------- | ----------------------------------------------------------------- |
223
+ | `_Dialog` | `<igc-dialog>` | `IgcDialogComponent` | `igniteui-webcomponents` | `dialog` | `open`, `title`, `close-on-outside-click`, `keep-open-on-escape`, `hide-default-action`; slots `title`, `message`, `footer`; `show()` / `hide()` |
224
+ | `_Toast` | `<igc-toast>` | `IgcToastComponent` | `igniteui-webcomponents` | `toast` | `open`, `display-time`, `keep-open`, `position`; `show()` / `hide()` |
225
+ | `_Snackbar` | `<igc-snackbar>` | `IgcSnackbarComponent` | `igniteui-webcomponents` | `snackbar` | `open`, `display-time`, `keep-open`, `action-text`; slot `action`; `show()` |
226
+ | `_Banner` | `<igc-banner>` | `IgcBannerComponent` | `igniteui-webcomponents` | `banner` | Slots `prefix`, `actions`; compound with `flat-button` for theming |
227
+ | `_Tooltip` | `<igc-tooltip>` | `IgcTooltipComponent` | `igniteui-webcomponents` | `tooltip` | `anchor`, `placement`, `message`, `show-delay`, `hide-delay`, `sticky`, `with-arrow` — a component, not a directive |
228
+
229
+ ---
230
+
231
+ ## Grids
232
+
233
+ | Kit Component Name | Tag | Class | Package | Doc | Key attributes / slots |
234
+ | ---------------------- | -------------------------- | ------------------------------ | ------------------------------ | ------------------------------ | --------------------------------------------------------- |
235
+ | `_Grid` / `_Data Grid` | `<igc-grid>` | `IgcGridComponent` | `igniteui-webcomponents-grids` | `grid` → `data-grid` | `.data` property, `primary-key`, `row-editable`; `<igc-column>` children |
236
+ | Lightweight table | `<igc-grid-lite>` | grid-lite package | `igniteui-grid-lite` | `grid-lite` → `grid-lite-overview` | `<igc-grid-lite-column>` children |
237
+ | `_Tree Grid` | `<igc-tree-grid>` | `IgcTreeGridComponent` | `igniteui-webcomponents-grids` | `tree-grid` → `tree-grid-overview` | `primary-key`, `foreign-key` or `child-data-key` |
238
+ | `_Hierarchical Grid` | `<igc-hierarchical-grid>` | `IgcHierarchicalGridComponent` | `igniteui-webcomponents-grids` | `hierarchical-grid` → `…-overview` | nested `<igc-row-island>` |
239
+ | `_Pivot Grid` | `<igc-pivot-grid>` | `IgcPivotGridComponent` | `igniteui-webcomponents-grids` | `pivot-grid` → `…-overview` | `.pivotConfiguration` property |
240
+
241
+ Grid rules that differ from Angular:
242
+
243
+ - Register per grid type: `IgcGridComponent.register()`.
244
+ - The grid packages ship their **own theme CSS** — `igniteui-webcomponents-grids/grids/themes/<variant>/<design-system>.css` — in addition to the core theme. Inside a Lit component, import it `?inline` and inject it into the shadow root; at app level, import it normally.
245
+ - `data` is a property, not an attribute: `.data=${rows}` / `grid.data = rows`.
246
+ - Leave at least one `<igc-column>` without a `width` so it fills the remaining space.
247
+ - Feature docs are separate pages (`grid-editing`, `grid-filtering`, `grid-paging`, …) — fetch the ones the artboard actually shows.
248
+
249
+ ---
250
+
251
+ ## Charts, Gauges, and Maps
252
+
253
+ > These are DV components. They have **no design tokens** — do not call `get_component_design_tokens` for them. Configure everything through properties, and take series colors from `theming_get_chart_series_colors` plus the Figma values captured in Phase 1d.
254
+ >
255
+ > Registration for all three packages goes through `ModuleManager.register(IgcXxxModule, …)` imported from `igniteui-webcomponents-core`. Array and function values must be **assigned as properties**, never as attributes.
256
+
257
+ | Kit Component Name | Tag | Class | Package | Doc |
258
+ | --------------------------------------------------------- | ------------------------- | ---------------------------- | -------------------------------- | --------------------------------------------- |
259
+ | `_Category Chart` / `_Line` / `_Area` / `_Column` charts | `<igc-category-chart>` | `IgcCategoryChartComponent` | `igniteui-webcomponents-charts` | `column-chart`, `line-chart`, `area-chart`, `bar-chart` |
260
+ | `_Pie Chart` | `<igc-pie-chart>` | `IgcPieChartComponent` | `igniteui-webcomponents-charts` | `pie-chart` |
261
+ | `_Donut Chart` | `<igc-doughnut-chart>` | `IgcDoughnutChartComponent` | `igniteui-webcomponents-charts` | `donut-chart` |
262
+ | `_Financial Chart` / `_Stock Chart` | `<igc-financial-chart>` | `IgcFinancialChartComponent` | `igniteui-webcomponents-charts` | `stock-chart` |
263
+ | `_Sparkline` | `<igc-sparkline>` | `IgcSparklineComponent` | `igniteui-webcomponents-charts` | `sparkline-chart` |
264
+ | `_Data Chart` / `_Scatter` / `_Bubble` / `_Polar` | `<igc-data-chart>` | `IgcDataChartComponent` | `igniteui-webcomponents-charts` | `scatter-chart`, `bubble-chart`, `polar-chart`, `composite-chart` |
265
+ | `_Treemap` | `<igc-treemap>` | `IgcTreemapComponent` | `igniteui-webcomponents-charts` | `treemap` → `treemap-chart` |
266
+ | `_Funnel Chart` | `<igc-funnel-chart>` | `IgcFunnelChartComponent` | `igniteui-webcomponents-charts` | no topic page — use `search_api` + `get_api_reference` |
267
+ | `_Linear Gauge` | `<igc-linear-gauge>` | `IgcLinearGaugeComponent` | `igniteui-webcomponents-gauges` | `linear-gauge` |
268
+ | `_Radial Gauge` | `<igc-radial-gauge>` | `IgcRadialGaugeComponent` | `igniteui-webcomponents-gauges` | `radial-gauge` |
269
+ | `_Bullet Graph` | `<igc-bullet-graph>` | `IgcBulletGraphComponent` | `igniteui-webcomponents-gauges` | `bullet-graph` |
270
+ | `_Geographic Map` | `<igc-geographic-map>` | `IgcGeographicMapComponent` | `igniteui-webcomponents-maps` | `geographic-map` → `geo-map` |
271
+
272
+ DV specifics worth knowing before Phase 4:
273
+
274
+ - Gauge and chart **attributes are kebab-case** (`minimum-value`, `maximum-value`, `chart-type`), while collection-valued members such as `dataSource` are properties.
275
+ - `plotAreaBackground` and `areaFillOpacity` are inherited from parent classes and will not appear in `get_api_reference` for `IgcCategoryChartComponent` — find them with `search_api`.
276
+ - Category charts show markers by default; if the design has none, set the documented no-marker value.
277
+ - Give charts an explicit height (and their grid track a `min-height`) or they collapse.
278
+
279
+ ---
280
+
281
+ ## Icons
282
+
283
+ `igc-icon` renders from a **registry** — nothing is bundled by default. Register before use:
284
+
285
+ ```typescript
286
+ import { registerIcon, registerIconFromText } from 'igniteui-webcomponents';
287
+
288
+ // From an SVG string (preferred — no network dependency)
289
+ registerIconFromText('home', '<svg …></svg>', 'material');
290
+
291
+ // From a URL
292
+ await registerIcon('search', 'https://example.com/icons/search.svg');
293
+ ```
294
+
295
+ For the Material Icons Extended set used by the Indigo.Design UI Kit for Material — Figma component descriptions carry the suffix **"material extended"**:
296
+
297
+ ```bash
298
+ npm install @igniteui/material-icons-extended
299
+ ```
300
+
301
+ ```typescript
302
+ import { all } from '@igniteui/material-icons-extended';
303
+ import { registerIconFromText } from 'igniteui-webcomponents';
304
+
305
+ for (const icon of all) {
306
+ registerIconFromText(icon.name, icon.value);
307
+ }
308
+ ```
309
+
310
+ ```html
311
+ <igc-icon name="credit-cards"></igc-icon>
312
+ ```
313
+
314
+ **Detection in Phase 1d:** scan `data-name` values and component descriptions for "material extended". If found, add the package to the required list and get approval before Phase 4. `setIconRef(name, collection, meta)` lets you alias one registered icon to another name when the design reuses a glyph under a different label.
315
+
316
+ Registered icons are never extracted as image assets — see `asset-extraction.md`.
317
+
318
+ ### Icons from other kits
319
+
320
+ Third-party kits come with their own icon sets. Identify the set from the icon instance names (`lucide/chevron-down`, `ic_fluent_…`, `Icon / arrow-right`, `Symbols/…`), from the component descriptions, or from the kit fingerprint in `design-provenance.md`. Then register glyphs **from that set's SVG package**, so names, weights, and stroke widths match the design:
321
+
322
+ | Icon set | SVG source package (confirm name, version, and license before installing) |
323
+ | --- | --- |
324
+ | Material Symbols | `@material-symbols/svg-400` (pick the weight/fill the design uses) |
325
+ | Fluent System Icons | `@fluentui/svg-icons` |
326
+ | Lucide (shadcn/ui kits) | `lucide-static` |
327
+ | Bootstrap Icons | `bootstrap-icons` |
328
+ | Heroicons | `heroicons` |
329
+ | Phosphor | `@phosphor-icons/core` |
330
+ | Ant Design Icons | `@ant-design/icons-svg` |
331
+
332
+ ```typescript
333
+ import chevronDown from 'lucide-static/icons/chevron-down.svg?raw';
334
+ registerIconFromText('chevron-down', chevronDown, 'lucide');
335
+ ```
336
+
337
+ ```html
338
+ <igc-icon name="chevron-down" collection="lucide"></igc-icon>
339
+ ```
340
+
341
+ Register only the glyphs the design uses: importing a whole set inflates the bundle. When the set is paid (for example Untitled UI Icons Pro) or unknown, or is not licensed for the web (SF Symbols), extract the used glyphs as SVG with Tier 1 Method B from `asset-extraction.md` and register those instead. Tell the user which icons came from a licensed set.
342
+
343
+ ---
344
+
345
+ ## Components With No Web Components Equivalent
346
+
347
+ Check this list before assuming a 1:1 mapping exists. When you hit one, substitute and document the substitution in a code comment and in the Phase 2d plan.
348
+
349
+ | Kit component / role | Status in Web Components | Substitute |
350
+ | ----------------- | ------------------------- | ------------------------------------------------------------------ |
351
+ | `_Bottom Navigation` | Not available | `igc-tabs`, or custom markup styled from the design |
352
+ | `_Time Picker` | Not available as a picker | `igc-date-time-input` with a time input format |
353
+ | `_Autocomplete` | Not available | `igc-combo` with filtering, or `igc-input` + `igc-dropdown` |
354
+ | `_Action Strip` | Grid packages only (`igc-action-strip`) | Inside grids, use `igc-action-strip`; elsewhere, slotted icon buttons positioned over the row/card |
355
+ | `_Chips Area` | Not a component | A flex container around `igc-chip` elements |
356
+ | `_Query Builder` | Grid packages only | `query-builder` doc — confirm availability for the installed package |
357
+ | Sheet / side sheet (other kits) | Not available | `igc-nav-drawer` for navigation; `igc-dialog` or custom markup for content panels |
358
+ | Skeleton loader (other kits) | Not available | Custom markup with a CSS shimmer bound to palette variables |
359
+ | Standalone pagination (other kits) | Grid packages only (`igc-paginator`) | `igc-paginator` when paging a grid; otherwise custom markup with `igc-icon-button`s |
360
+
361
+ ---
362
+
363
+ ## Unmapped Layers
364
+
365
+ When you encounter a Figma layer that is **not in this file**:
366
+
367
+ 1. Normalize it with [design-provenance.md](design-provenance.md) (Tier B variant properties, or Tier C structure) and retry the Canonical Role Index. Otherwise, extract the visual pattern (is it a list? a form field? a card?).
368
+ 2. Call `list_components({ framework: "webcomponents", filter: "<keyword>" })` and scan for the closest match.
369
+ 3. Call `get_doc` (and `get_api_reference` when you need the full API) before writing code.
370
+ 4. If no Ignite UI component matches after a genuine attempt, use plain semantic HTML and document the reason in a code comment.
@@ -0,0 +1,222 @@
1
+ # Figma Design Exploration
2
+
3
+ > **Part of the [`igniteui-wc-figma-to-app`](../SKILL.md) skill.**
4
+ >
5
+ > Use this file in Phase 1 to explore the Figma design and capture everything needed for implementation and validation. Read in full before the first Figma MCP call.
6
+
7
+ **Goal:** understand the full design structure and capture all data needed for implementation and validation before writing any code.
8
+
9
+ > **Rate-limit awareness:** Figma MCP limits depend on the **seat**, not only the plan (as published in September 2026; 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 (Starter, Professional) or 600/day (Organization, Enterprise), with 10–20/min.
10
+ >
11
+ > Estimated call budget for a 5-artboard design: `figma_get_metadata` ×2 + `figma_get_screenshot` ×5 + `figma_get_design_context` ×5 + `figma_get_variable_defs` ×1 per target page + `figma_get_code_connect_map` ×5 + `figma_get_libraries` ×1 = **~19 calls**. Retries and sparse-response follow-ups add to this. **Compare the estimate with the user's remaining quota before starting.** On a View/Collab seat (6/month on Professional and above) even one artboard may not fit. The Starter View/Collab limit (20/month) covers a small design with no retries. When the estimate does not fit, say so and suggest a Dev/Full seat, or the REST API with a personal access token for metadata and assets. Strategies:
12
+ > 1. Call `figma_get_variable_defs` once per **target page**, not once per artboard. It returns the variables used inside the node you pass, so one page-level call covers every artboard on that page.
13
+ > 2. Prioritize `figma_get_design_context` over additional screenshots if quota is tight.
14
+ > 3. For large files, consider implementing one artboard per monthly budget cycle.
15
+ >
16
+ > Use `figma_get_metadata` first to discover structure cheaply, then call `figma_get_design_context` only for the artboards you will implement.
17
+
18
+ ## Before the First Call: Determine the Figma MCP Variant
19
+
20
+ Figma has two official MCP servers (setup: `mcp-setup.md § 1. Figma MCP`). Establish which one is connected **before** Phase 1, because it decides how you address artboards.
21
+
22
+ | Variant | How to recognize it | How you drive it |
23
+ | --- | --- | --- |
24
+ | **Remote** | Configured URL `https://mcp.figma.com/mcp`; the tools take `fileKey` | Pass `fileKey` and a `nodeId` (page or artboard) on **every** call. You can iterate artboards without the user. |
25
+ | **Desktop** | Configured URL `http://127.0.0.1:3845/mcp`; the tools take no `fileKey` | Works only on the file **open in the Figma desktop app**. Pass the `nodeId` from a frame link, or act on the current selection. |
26
+
27
+ Prefer the remote variant, and ask the user once for the file URL:
28
+
29
+ ```
30
+ https://figma.com/design/:fileKey/:fileName?node-id=1-2 → fileKey = ":fileKey", nodeId = "1:2"
31
+ ```
32
+
33
+ On the remote variant, treat both `fileKey` and `nodeId` as required, even if the schema marks `nodeId` optional. Calls without a node are not reliably supported.
34
+
35
+ On the desktop variant:
36
+
37
+ 1. Make sure the user has the design file **open** in the desktop app.
38
+ 2. When the user can share frame links (right-click → **Copy link to selection**), pass each frame's `nodeId` and **check that the response describes the requested frame** (same name and size as in the Phase 1a metadata).
39
+ 3. If the response describes a different node, or the user cannot share links, fall back to selection: ask *"In Figma, please click the **[Artboard Name]** frame to select it, then confirm."*, wait for confirmation, and call the tool with no node. Never batch selection-based calls: each one depends on what the user has selected at that moment.
40
+
41
+ ## 1a: Discover Pages and Artboards
42
+
43
+ The goal is to list the pages, then get each relevant page's artboard tree. The calls differ by variant:
44
+
45
+ ```
46
+ // Remote variant: fileKey and nodeId are both required
47
+ figma_get_metadata({ fileKey: "<fileKey>", nodeId: "<pageId>" })
48
+
49
+ // Desktop variant: a nodeId from a page or frame link, or no arguments to use the current selection
50
+ figma_get_metadata({ nodeId: "<pageId>" })
51
+ figma_get_metadata({})
52
+ ```
53
+
54
+ **Remote variant.** Choose the starting `nodeId` like this:
55
+
56
+ 1. If the shared URL has a `node-id`, use it (replace `-` with `:`, e.g. `1-2` → `1:2`). URL format: `https://figma.com/design/:fileKey/:name?node-id=1-2`.
57
+ 2. Otherwise, list the pages with the REST API when a token is available. It costs no MCP quota: `GET https://api.figma.com/v1/files/:fileKey?depth=1` returns `document.children[]` with each page's `id` and `name`.
58
+ 3. Otherwise, ask the user to copy the link to the page or a frame (right-click → **Copy link to selection**) and take its `node-id`.
59
+
60
+ If that node is a single frame rather than a page, the response covers only that frame's subtree. To see its sibling artboards, get the page's `id` (step 2 or 3) and call `figma_get_metadata` again with it. Repeat for every page that looks relevant.
61
+
62
+ **Desktop variant.** The user must have the file open in the desktop app. With a link to the page or a frame, pass its `nodeId` and check the response. Otherwise ask the user to open the relevant page and select its top-level frames (or the page in the Layers panel), then call `figma_get_metadata({})`. Repeat for each relevant page, waiting for confirmation each time.
63
+
64
+ ## 1b: Select Target Artboards
65
+
66
+ If there are multiple pages or artboards, show the user a list:
67
+
68
+ > "I found these artboards in your Figma file:
69
+ >
70
+ > - Page 1: [list artboard names + node IDs]
71
+ > - Page 2: [list artboard names + node IDs]
72
+ >
73
+ > Which artboards should I implement? (You can say 'all' or list specific names.)"
74
+
75
+ Wait for confirmation before proceeding.
76
+
77
+ ## 1c: Capture Reference Screenshots
78
+
79
+ For each target artboard:
80
+
81
+ 1. **Remote variant:** call `figma_get_screenshot({ fileKey: "<fileKey>", nodeId: "<artboardId>", maxDimension: 2048 })`. **Desktop variant:** call `figma_get_screenshot({ nodeId: "<artboardId>" })` and check that the image shows the requested artboard. If it does not, or you have no node ID, ask the user to select the artboard, wait for confirmation, then call `figma_get_screenshot({})`. Do **not** batch selection-based calls.
82
+ 2. **Save each screenshot to disk** (e.g. `.figma-reference/<artboard-name>.png`). Phase 5 compares against these files. If the tool returns a URL, download it right away (it is short-lived). If it returns the image inline and you cannot write it to disk, export the node through the REST API instead (`GET /v1/images/:fileKey?ids=<nodeId>&format=png&scale=2`, see `asset-extraction.md`) when a token is available. Otherwise keep the image in context for Phase 5. Record `{ artboardName, nodeId, file, width, height }`.
83
+
84
+ After all artboards are captured, confirm the count:
85
+
86
+ > *"I have N reference screenshots: [list artboard names]. Proceeding to design context extraction."*
87
+
88
+ If any are missing, recapture them: by `nodeId` on the remote server, or by asking the user to select the artboard on the desktop server.
89
+
90
+ > Never skip this step. The screenshots are your ground truth for Phase 5 validation.
91
+
92
+ ## 1d: Extract Design Context
93
+
94
+ > **Output format:** `figma_get_design_context` returns **React + Tailwind CSS reference code**, not structured Web Components metadata. Do **not** copy that code into the project. Read the JSX to extract the information below. Asset URLs in the output (localhost on the desktop server, https on the remote server) are short-lived previews — do **not** use them as final assets (see Phase 1h and `references/asset-extraction.md`).
95
+
96
+ For **each** target artboard:
97
+
98
+ 1. On the remote variant, pass `fileKey` and `nodeId`. On the desktop variant, pass the `nodeId` and check the response, or fall back to selection (see [Before the First Call](#before-the-first-call-determine-the-figma-mcp-variant)).
99
+ 2. Call:
100
+ ```
101
+ figma_get_design_context({
102
+ fileKey: "<fileKey>", // remote variant only
103
+ nodeId: "<artboardId>", // both variants (desktop: check the response)
104
+ })
105
+ ```
106
+ 3. From the React+Tailwind output, extract:
107
+
108
+ - **Component layer names and props** — the `data-name` attributes and any component props or variant values in the JSX. Phase 1f classifies and normalizes them.
109
+ - **Layout structure** — `flex`, `grid`, `gap-*`, `p-*`, `w-*`, `h-*` Tailwind classes on container divs
110
+ - **Typography** — `font-['...']`, `text-[...]`, `font-weight` classes
111
+ - **Surface colors** — `bg-[#XXXXXX]` classes on container `<div>` elements that wrap major sections (these become plain `<div>` wrappers in the view, not Ignite UI components)
112
+ - **Border/roundness** — `rounded-[...]`, `border`, `border-[...]` classes on containers and cards
113
+ - **Input type variants** *(Tier A only)* — look for hidden zero-size nodes (`size-[0.5px]`) whose `data-name` contains a component type (e.g. `"Date Picker Type"`, `"Combo Input"`). These are the Indigo.Design kit's **variant indicator nodes**, and their name encodes which input variant (border/line/box) is active for that component. For other kits, read the field style from its variant property or visuals (outlined / filled / underlined, label floating or above). Web Components expose this as the boolean `outlined` attribute, not a three-way type (SKILL.md Phase 4, rule 12).
114
+ - **Chart series colors** — for any chart layer, note the fill colors on its series paths
115
+ - **Color census** — which colors appear on which kinds of element: high-emphasis button fills, page and card backgrounds, borders, primary and secondary text, error states. For Tier B/C designs, Phase 3 seeds the palette from this (see `design-token-bridge.md § B2`), not from variable names.
116
+ - **Measured control heights** — button, input, and list-row heights. Phase 3 uses them to pick `--ig-size`.
117
+ - **Action controls** — list every button, icon button, and toolbar action visible in the artboard; this is your authoritative inventory — do not add actions not present in the design
118
+ - **Provenance signals** — library/source file names (e.g. `Indigo.Design UI Kit for Material`, `Material 3 Design Kit`, `shadcn/ui`), naming conventions (`_Button/…` vs `Button` with `Variant=…`), and un-componentized frames. Phase 1f turns them into a tier for each instance.
119
+
120
+ 4. Record all surface containers for **Table B — Layout Surfaces** (Phase 1g).
121
+
122
+ ## 1e: Extract Design Tokens
123
+
124
+ > `figma_get_variable_defs` returns the variables and styles **used inside the node you pass** (or the current selection), not every variable in the file. Call it **once per target page**, with the page's node ID. That covers every target artboard on the page without spending a call per artboard. If the targets span two pages, call it twice.
125
+
126
+ ```
127
+ // Remote variant
128
+ figma_get_variable_defs({ fileKey: "<fileKey>", nodeId: "<pageId>" })
129
+
130
+ // Desktop variant: the page's nodeId (check the response), or select the page and pass nothing
131
+ figma_get_variable_defs({ nodeId: "<pageId>" })
132
+ figma_get_variable_defs({})
133
+ ```
134
+
135
+ The response contains a map of variable names to values, e.g.:
136
+
137
+ ```
138
+ "color/primary/500": "#6200EE"
139
+ "color/surface": "#FFFFFF"
140
+ "typography/body/font-family": "Roboto"
141
+ ```
142
+
143
+ Use `references/design-token-bridge.md` to map color and typography variables to Ignite UI theming inputs in Phase 3. Third-party kits name variables differently (`md.sys.color.primary`, `Colors/Brand/600`, `colorBrandBackground`, `primary-foreground`, …). Record them as-is. Phase 3 matches them to roles by **usage** (the Phase 1d color census), not by name. Files without variables are normal for Tier C designs. The color census then provides every seed. Do **not** attempt to map Figma spacing or sizing values — see `references/design-token-bridge.md § Spacing, Sizing, and Roundness` for why.
144
+
145
+ ## 1f: Classify Provenance and Normalize Components
146
+
147
+ Read [design-provenance.md](design-provenance.md) in full.
148
+
149
+ 1. Call `figma_get_libraries` **once per file**, if the connected server exposes it. The subscribed library names (`Indigo.Design UI Kit for Material`, `Material 3 Design Kit`, `shadcn/ui`, an in-house library) are the fastest provenance signal.
150
+ 2. Check for Code Connect mappings:
151
+
152
+ ```
153
+ figma_get_code_connect_map({ fileKey: "<fileKey>", nodeId: "<artboardId>" }) // remote variant
154
+ figma_get_code_connect_map({ nodeId: "<artboardId>" }) // desktop variant
155
+ ```
156
+
157
+ Mappings are strong evidence of a component's **role and props**. They may point at **another library** (e.g. a shadcn kit connected to `@/components/ui/button`). Never copy their imports or tags: the target is always Ignite UI for Web Components.
158
+
159
+ 3. Classify **every** component-like layer as **Tier A** (Indigo.Design kit), **Tier B** (any other component library), or **Tier C** (un-componentized). Classify per instance, not per file.
160
+ 4. Normalize Tier B instances to a canonical role + emphasis/style + measured height, using their variant properties. When names are ambiguous and a file key and token are available, read exact `componentProperties` from the REST API (`design-provenance.md § Step 1`).
161
+ 5. Infer Tier C roles from structure and visuals. Mark them **low confidence**.
162
+ 6. Record the dominant tier. It selects the Phase 3 theming path (A or B).
163
+
164
+ ## 1g: Build the Decomposition Table
165
+
166
+ Before writing any code, produce **two tables** for **each artboard**.
167
+
168
+ ### Table A — Ignite UI Components
169
+
170
+ | Figma Layer Name | Tier | Kit / Source | Canonical Role + Props | Ignite UI Tag | Package | Confidence | Token Work | Suspected Anatomy Deltas | Data Type |
171
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
172
+ | _e.g._ `_NavBar` | A | Indigo.Design (Material) | `app-bar` | `<igc-navbar>` | `igniteui-webcomponents` | high | — | — | n/a |
173
+ | _e.g._ `_Grid/Default` | A | Indigo.Design (Material) | `data-table` | `<igc-grid>` | `igniteui-webcomponents-grids` | high | — | — | Tabular records |
174
+ | _e.g._ `Button` (`Variant=outline, Size=sm`) | B | shadcn/ui | `button` · medium · 32px | `<igc-button variant="outlined">` | `igniteui-webcomponents` | high | radius, casing, size | — | n/a |
175
+ | _e.g._ `Text field` (`Style=Filled`) | B | M3 Design Kit | `text-field` · filled · label-floating · 56px | `<igc-input>` | `igniteui-webcomponents` | high | height, fill color | — | n/a |
176
+ | _e.g._ `Segmented button` | B | M3 Design Kit | `toggle-group` · 40px | `<igc-button-group>` | `igniteui-webcomponents` | high | radius, colors | check icon on the selected segment | n/a |
177
+ | _e.g._ `Frame 427` | C | — | `tag` · pill · 24px | `<igc-badge>` | `igniteui-webcomponents` | low | radius, colors | — (confirm the role) | n/a |
178
+
179
+ The **Package** column is not optional in Web Components: general UI (`igniteui-webcomponents`, MIT), grids, charts, and dock manager ship as separate packages, and the commercial ones come in trial and `@infragistics` licensed variants.
180
+
181
+ - **Token Work** lists what Phase 3 must set: colors, radius, borders, casing, size. These are implementation work. They are **never** anatomy deltas and never become Accepted.
182
+ - **Suspected Anatomy Deltas** lists only structural differences that tokens, documented `::part(...)` selectors, and slotted content cannot close. They are suspicions at this point: you only know what Ignite UI renders after reading its doc in Phase 2b. Confirm them in the Phase 2d ledger.
183
+
184
+ Fallback to plain semantic HTML only when no Ignite UI component can match the layer after consulting `references/figma-component-map.md`. Document the reason inline.
185
+
186
+ ### Table B — Layout Surfaces
187
+
188
+ Record every **non-`igc-*` container** that carries visual properties (background color, border, padding, shadow). These are plain `<div>` wrappers in the view — not Ignite UI components — but they are critical to visual fidelity. Populate this table from the `bg-[...]`, `rounded-[...]`, `border`, `p-[...]`, and `shadow-[...]` Tailwind classes observed on container divs in the Phase 1d design context output.
189
+
190
+ | Figma Frame / Container Name | Background | Border-Radius | Padding | Border | Shadow | Encloses (child sections) |
191
+ | ---------------------------- | ---------- | ------------- | ------- | ------ | ------ | ------------------------- |
192
+ | _e.g._ `Budget Categories` | `#222222` | `4px` | `24px` | none | none | Categories list, Add button |
193
+ | _e.g._ `Friend Card` | `#222222` | `8px` | `24px 16px` | `1px solid #333` | none | Avatar, name, phone, email, buttons |
194
+
195
+ > **Rule:** if a section appears on a surface in Figma (i.e. its container has a non-transparent background), it **must** have that background in the implementation. If a section floats on the page background (transparent), do **not** add a surface wrapper. Never infer surface structure from another page — always derive it from the design context for the specific artboard being implemented.
196
+
197
+ Present both tables to the user for review before proceeding. List **low-confidence** mappings first and ask the user to confirm or correct them. A wrong role is the most expensive mistake to fix after Phase 4.
198
+
199
+ ## 1h: Extract Image Assets
200
+
201
+ Read [references/asset-extraction.md](asset-extraction.md) in full before running any extraction.
202
+
203
+ **Zero-placeholder policy:** every image visible in the Figma design must be extracted and committed to the project's assets directory before Phase 4. Gradient placeholders are not acceptable.
204
+
205
+ **Step 0 — File key and token.** Reuse the file key from Phase 1 (the remote server always has one). On the desktop server without one, ask the user for the file URL (Figma desktop: right-click the file tab → **Copy link**). Tier 1 also needs a REST API token (`mcp-setup.md § Personal access token`). Without both you fall back to Tier 2 or 3.
206
+
207
+ From the decomposition tables, identify every layer that is a **static image asset** (photo, background, logo, custom icon, illustration) rather than an Ignite UI component. Do **not** extract component instances that Table A maps to a component, whatever kit they come from, or icons available from a registerable icon package (`figma-component-map.md § Icons`, which also covers third-party kit icon sets).
208
+
209
+ **Use the four-tier decision tree from `asset-extraction.md`** (these asset tiers 1–4 are unrelated to the provenance Tiers A–C):
210
+
211
+ | Tier | Method | When to use |
212
+ | ---- | ------ | ----------- |
213
+ | **1** | REST API `/v1/files/:key/images` (Method A) or `/v1/images/:key` (Method B) | `FILE_KEY` **and** `FIGMA_TOKEN` available — always the highest fidelity |
214
+ | **2** | Download the asset URLs from `figma_get_design_context` (localhost on desktop, https on remote), or `figma_download_assets` on remote | No REST access; the design context returned asset URLs |
215
+ | **3** | `figma_get_screenshot` per node (`nodeId`, or the selection on desktop) | No REST access and no asset URL for this node |
216
+ | **4** | CSS gradient/color placeholder with `// TODO` comment | Only for confirmed pure-color fills — never as a shortcut |
217
+
218
+ Save assets under the project's static directory — `src/assets/images/` and `src/assets/icons/` in a CLI-scaffolded Vite project (copied to the build output by `vite-plugin-static-copy`); `public/` in a stock Vite app. Match whatever the project already uses.
219
+
220
+ Build a concise asset manifest (see `asset-extraction.md § Build an Asset Manifest`) so the implementation phase uses consistent paths.
221
+
222
+ If you used Tier 2 or Tier 3 for any asset, tell the user which ones need re-export once the file key and a REST API token are available.