@commercetools/nimbus-mcp 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/README.md +9 -1
  2. package/data/docs/route-manifest.json +1608 -143
  3. package/data/docs/routes/components-buttons-button.json +25 -2
  4. package/data/docs/routes/components-chat-chat-message-list.json +448 -0
  5. package/data/docs/routes/components-chat-chat-message.json +580 -0
  6. package/data/docs/routes/components-content-markdown.json +548 -0
  7. package/data/docs/routes/components-data-display-item-group.json +413 -0
  8. package/data/docs/routes/components-data-display-item.json +611 -0
  9. package/data/docs/routes/components-feedback-activity-indicator.json +396 -0
  10. package/data/docs/routes/components-feedback-skeleton.json +481 -0
  11. package/data/docs/routes/components-feedback-skeletoncircle.json +429 -0
  12. package/data/docs/routes/components-feedback-skeletontext.json +417 -0
  13. package/data/docs/routes/components-feedback-tooltip.json +23 -1
  14. package/data/docs/routes/components-inputs-drop-zone.json +562 -0
  15. package/data/docs/routes/components-inputs-file-trigger.json +421 -0
  16. package/data/docs/routes/components-inputs-range-slider.json +633 -0
  17. package/data/docs/routes/components-inputs-slider.json +611 -0
  18. package/data/docs/routes/components-layout-splitter.json +3 -3
  19. package/data/docs/routes/components-media-avatar.json +16 -5
  20. package/data/docs/routes/components-navigation-breadcrumbs.json +565 -0
  21. package/data/docs/routes/components-navigation-menu.json +1 -1
  22. package/data/docs/routes/components-navigation-tabnav.json +80 -14
  23. package/data/docs/routes/components-navigation-tabs.json +44 -11
  24. package/data/docs/routes/components-navigation-tree.json +445 -0
  25. package/data/docs/routes/home-getting-started-mcp-server-overview.json +2 -2
  26. package/data/docs/routes/home-getting-started-mcp-server-setup.json +2 -2
  27. package/data/docs/routes/icons.json +3 -3
  28. package/data/docs/routes/patterns-buttons-floating-action-button.json +392 -0
  29. package/data/docs/routes/patterns-buttons.json +58 -0
  30. package/data/docs/search-index.json +1 -1
  31. package/data/docs/types/AccordionContent.json +24 -24
  32. package/data/docs/types/AccordionHeader.json +88 -88
  33. package/data/docs/types/AccordionItem.json +20 -20
  34. package/data/docs/types/AccordionRoot.json +14 -14
  35. package/data/docs/types/ActivityIndicator.json +202 -0
  36. package/data/docs/types/AlertDescription.json +8 -8
  37. package/data/docs/types/AlertDismissButton.json +98 -81
  38. package/data/docs/types/AlertTitle.json +8 -8
  39. package/data/docs/types/Avatar.json +19 -2
  40. package/data/docs/types/Badge.json +2 -2
  41. package/data/docs/types/Body.json +6 -6
  42. package/data/docs/types/Box.json +6 -6
  43. package/data/docs/types/Breadcrumbs.json +12 -0
  44. package/data/docs/types/BreadcrumbsItem.json +296 -0
  45. package/data/docs/types/BreadcrumbsItemProps.json +9 -0
  46. package/data/docs/types/BreadcrumbsProps.json +9 -0
  47. package/data/docs/types/BreadcrumbsRoot.json +110 -0
  48. package/data/docs/types/Button.json +106 -89
  49. package/data/docs/types/Calendar.json +56 -56
  50. package/data/docs/types/Caption.json +6 -6
  51. package/data/docs/types/CardRoot.json +2 -2
  52. package/data/docs/types/Cell.json +6 -6
  53. package/data/docs/types/ChatMessage.json +12 -0
  54. package/data/docs/types/ChatMessageActions.json +42 -0
  55. package/data/docs/types/ChatMessageAvatar.json +140 -0
  56. package/data/docs/types/ChatMessageBody.json +42 -0
  57. package/data/docs/types/ChatMessageList.json +12 -0
  58. package/data/docs/types/ChatMessageListItem.json +42 -0
  59. package/data/docs/types/ChatMessageListRoot.json +78 -0
  60. package/data/docs/types/ChatMessageMeta.json +42 -0
  61. package/data/docs/types/ChatMessageRoot.json +119 -0
  62. package/data/docs/types/ChatMessageTyping.json +42 -0
  63. package/data/docs/types/Checkbox.json +86 -86
  64. package/data/docs/types/Code.json +11 -11
  65. package/data/docs/types/Column.json +6 -6
  66. package/data/docs/types/ColumnGroup.json +6 -6
  67. package/data/docs/types/ColumnHeader.json +6 -6
  68. package/data/docs/types/ComboBoxListBox.json +70 -70
  69. package/data/docs/types/ComboBoxOption.json +64 -64
  70. package/data/docs/types/ComboBoxPopover.json +91 -70
  71. package/data/docs/types/ComboBoxRoot.json +8 -8
  72. package/data/docs/types/ComboBoxSection.json +24 -24
  73. package/data/docs/types/ComboBoxTrigger.json +6 -6
  74. package/data/docs/types/DataTable.json +2 -2
  75. package/data/docs/types/DataTableBody.json +20 -20
  76. package/data/docs/types/DataTableHeader.json +25 -25
  77. package/data/docs/types/DataTableRoot.json +2 -2
  78. package/data/docs/types/DataTableTable.json +6 -6
  79. package/data/docs/types/DateInput.json +73 -73
  80. package/data/docs/types/DatePicker.json +58 -58
  81. package/data/docs/types/DateRangePicker.json +86 -86
  82. package/data/docs/types/DateRangePickerField.json +86 -86
  83. package/data/docs/types/DefaultPageRoot.json +2 -2
  84. package/data/docs/types/DialogCloseTrigger.json +96 -79
  85. package/data/docs/types/DraggableListField.json +88 -60
  86. package/data/docs/types/DraggableListItem.json +52 -52
  87. package/data/docs/types/DraggableListRoot.json +88 -60
  88. package/data/docs/types/DrawerCloseTrigger.json +96 -79
  89. package/data/docs/types/DropZone.json +161 -0
  90. package/data/docs/types/FieldErrors.json +2 -2
  91. package/data/docs/types/FileTrigger.json +130 -0
  92. package/data/docs/types/Flex.json +22 -22
  93. package/data/docs/types/FloatingActionButton.json +1036 -0
  94. package/data/docs/types/Footer.json +6 -6
  95. package/data/docs/types/FormActionBar.json +1 -1
  96. package/data/docs/types/FormFieldRoot.json +2 -2
  97. package/data/docs/types/Grid.json +24 -24
  98. package/data/docs/types/Group.json +12 -12
  99. package/data/docs/types/Header.json +6 -6
  100. package/data/docs/types/Heading.json +8 -8
  101. package/data/docs/types/Icon.json +4 -4
  102. package/data/docs/types/IconButton.json +106 -89
  103. package/data/docs/types/IconToggleButton.json +71 -71
  104. package/data/docs/types/Image.json +43 -43
  105. package/data/docs/types/Indicator.json +6 -6
  106. package/data/docs/types/InlineSvg.json +2 -2
  107. package/data/docs/types/Item.json +6 -6
  108. package/data/docs/types/ItemActions.json +27 -0
  109. package/data/docs/types/ItemContent.json +27 -0
  110. package/data/docs/types/ItemDescription.json +27 -0
  111. package/data/docs/types/ItemFooter.json +27 -0
  112. package/data/docs/types/ItemGroup.json +12 -0
  113. package/data/docs/types/ItemGroupRoot.json +27 -0
  114. package/data/docs/types/ItemGroupSeparator.json +27 -0
  115. package/data/docs/types/ItemHeader.json +27 -0
  116. package/data/docs/types/ItemMedia.json +56 -0
  117. package/data/docs/types/ItemRoot.json +239 -0
  118. package/data/docs/types/ItemTitle.json +27 -0
  119. package/data/docs/types/Kbd.json +8 -8
  120. package/data/docs/types/Link.json +14 -14
  121. package/data/docs/types/ListIndicator.json +6 -6
  122. package/data/docs/types/ListItem.json +6 -6
  123. package/data/docs/types/ListRoot.json +11 -11
  124. package/data/docs/types/LoadingSpinner.json +2 -2
  125. package/data/docs/types/MakeElementFocusable.json +18 -18
  126. package/data/docs/types/Markdown.json +183 -0
  127. package/data/docs/types/MenuItem.json +62 -62
  128. package/data/docs/types/MenuRoot.json +55 -55
  129. package/data/docs/types/MenuSection.json +30 -30
  130. package/data/docs/types/MenuSubmenuTrigger.json +4 -4
  131. package/data/docs/types/MenuTrigger.json +88 -88
  132. package/data/docs/types/MultilineTextInput.json +104 -104
  133. package/data/docs/types/MultilineTextInputField.json +102 -102
  134. package/data/docs/types/NumberInput.json +86 -86
  135. package/data/docs/types/NumberInputField.json +82 -82
  136. package/data/docs/types/PageContentColumn.json +6 -6
  137. package/data/docs/types/PageContentRoot.json +6 -6
  138. package/data/docs/types/PasswordInput.json +100 -100
  139. package/data/docs/types/PasswordInputField.json +100 -100
  140. package/data/docs/types/ProgressBar.json +13 -13
  141. package/data/docs/types/RadioInputOption.json +56 -56
  142. package/data/docs/types/RadioInputRoot.json +48 -48
  143. package/data/docs/types/RangeCalendar.json +58 -58
  144. package/data/docs/types/RangeSlider.json +337 -0
  145. package/data/docs/types/RangeSliderProps.json +9 -0
  146. package/data/docs/types/Region.json +6 -6
  147. package/data/docs/types/RegionTarget.json +6 -6
  148. package/data/docs/types/RichTextInput.json +2 -2
  149. package/data/docs/types/Root.json +11 -11
  150. package/data/docs/types/Row.json +6 -6
  151. package/data/docs/types/ScrollArea.json +2 -2
  152. package/data/docs/types/SearchInput.json +106 -106
  153. package/data/docs/types/SearchInputField.json +102 -102
  154. package/data/docs/types/SelectOption.json +54 -54
  155. package/data/docs/types/SelectOptionGroup.json +18 -18
  156. package/data/docs/types/SelectOptions.json +64 -64
  157. package/data/docs/types/SelectRoot.json +92 -92
  158. package/data/docs/types/Separator.json +4 -4
  159. package/data/docs/types/SimpleGrid.json +28 -28
  160. package/data/docs/types/Skeleton.json +129 -0
  161. package/data/docs/types/SkeletonCircle.json +103 -0
  162. package/data/docs/types/SkeletonCircleProps.json +9 -0
  163. package/data/docs/types/SkeletonProps.json +9 -0
  164. package/data/docs/types/SkeletonText.json +62 -0
  165. package/data/docs/types/SkeletonTextProps.json +9 -0
  166. package/data/docs/types/Slider.json +337 -0
  167. package/data/docs/types/SlidingIndicatorGeometry.json +9 -0
  168. package/data/docs/types/SlidingIndicatorRects.json +9 -0
  169. package/data/docs/types/SplitButton.json +16 -20
  170. package/data/docs/types/Stack.json +2 -2
  171. package/data/docs/types/StepsRoot.json +2 -2
  172. package/data/docs/types/Switch.json +34 -34
  173. package/data/docs/types/TabNavItem.json +5 -5
  174. package/data/docs/types/TabNavRoot.json +5 -5
  175. package/data/docs/types/TableBody.json +6 -6
  176. package/data/docs/types/TableCaption.json +6 -6
  177. package/data/docs/types/TableCell.json +6 -6
  178. package/data/docs/types/TableColumn.json +6 -6
  179. package/data/docs/types/TableColumnGroup.json +6 -6
  180. package/data/docs/types/TableColumnHeader.json +6 -6
  181. package/data/docs/types/TableFooter.json +6 -6
  182. package/data/docs/types/TableHeader.json +6 -6
  183. package/data/docs/types/TableRoot.json +19 -19
  184. package/data/docs/types/TableRow.json +6 -6
  185. package/data/docs/types/TableScrollArea.json +6 -6
  186. package/data/docs/types/TabsList.json +2 -2
  187. package/data/docs/types/TabsPanel.json +2 -2
  188. package/data/docs/types/TabsPanels.json +2 -2
  189. package/data/docs/types/TabsRoot.json +3 -3
  190. package/data/docs/types/TabsTab.json +2 -2
  191. package/data/docs/types/TagGroupRoot.json +24 -24
  192. package/data/docs/types/TagGroupTag.json +56 -56
  193. package/data/docs/types/TagGroupTagList.json +14 -14
  194. package/data/docs/types/Text.json +8 -8
  195. package/data/docs/types/TextInput.json +102 -102
  196. package/data/docs/types/TextInputField.json +100 -100
  197. package/data/docs/types/TimeInput.json +68 -68
  198. package/data/docs/types/ToggleButton.json +73 -73
  199. package/data/docs/types/ToggleButtonGroupButton.json +30 -30
  200. package/data/docs/types/ToggleButtonGroupRoot.json +20 -20
  201. package/data/docs/types/Toolbar.json +9 -9
  202. package/data/docs/types/TooltipContent.json +28 -28
  203. package/data/docs/types/TooltipRoot.json +16 -16
  204. package/data/docs/types/Tree.json +12 -0
  205. package/data/docs/types/TreeIndicator.json +828 -0
  206. package/data/docs/types/TreeItem.json +559 -0
  207. package/data/docs/types/TreeItemContent.json +27 -0
  208. package/data/docs/types/TreeRoot.json +636 -0
  209. package/data/docs/types/TreeSubTree.json +40 -0
  210. package/data/docs/types/VisuallyHidden.json +6 -6
  211. package/data/docs/types/createItemsFromCsvDrop.json +4 -4
  212. package/data/docs/types/createItemsFromDirectoryDrop.json +4 -4
  213. package/data/docs/types/createItemsFromFileDrop.json +4 -4
  214. package/data/docs/types/createItemsFromImageDrop.json +4 -4
  215. package/data/docs/types/createItemsFromJsonDrop.json +4 -4
  216. package/data/docs/types/manifest.json +50 -0
  217. package/data/docs/types/useRegion.json +2 -2
  218. package/data/docs/types/useSlidingIndicator.json +145 -0
  219. package/data/docs/types/useTree.json +267 -0
  220. package/data/tokens.json +21 -0
  221. package/data/uikit-tokens.json +894 -0
  222. package/dist/index.js +3298 -109
  223. package/package.json +8 -6
package/dist/index.js CHANGED
@@ -83,6 +83,7 @@ var getSearchIndex = lazyJson(
83
83
  var getDocsManifest = lazyJson("docs/docs.json");
84
84
  var getIconCatalog = lazyJson("icons.json");
85
85
  var getFlatTokenData = lazyJson("tokens.json");
86
+ var getUiKitTokenMap = lazyJson("uikit-tokens.json");
86
87
 
87
88
  // src/utils/markdown.ts
88
89
  function stripMarkdown(text) {
@@ -102,7 +103,30 @@ function stripMarkdown(text) {
102
103
  }
103
104
 
104
105
  // src/utils/relevance.ts
105
- var WEIGHTS = { title: 8, description: 4, tags: 4, content: 1 };
106
+ var WEIGHTS = {
107
+ title: 8,
108
+ description: 4,
109
+ tags: 4,
110
+ content: 1
111
+ };
112
+ function toLoweredRouteFields(r) {
113
+ const title = r.title.toLowerCase();
114
+ const description = r.description.toLowerCase();
115
+ const tags = [...r.tags, r.exportName ?? ""].join(" ").toLowerCase();
116
+ return {
117
+ title,
118
+ description,
119
+ tags,
120
+ content: "",
121
+ combined: title + " " + description + " " + tags,
122
+ titleNoSpaces: title.replace(/\s+/g, ""),
123
+ titleWords: title.split(/\s+/).filter(Boolean),
124
+ descriptionNoSpaces: description.replace(/\s+/g, ""),
125
+ descriptionWords: description.split(/\s+/).filter(Boolean),
126
+ tagsNoSpaces: tags.replace(/\s+/g, ""),
127
+ tagsWords: tags.split(/\s+/).filter(Boolean)
128
+ };
129
+ }
106
130
  function filterAndRankPreLowered(items, tokens, getLowered) {
107
131
  if (items.length === 0 || tokens.length === 0) return items;
108
132
  const scored = [];
@@ -252,6 +276,11 @@ function fuzzyResolveName(needle, candidates, getNames) {
252
276
  return bestItem;
253
277
  }
254
278
 
279
+ // src/utils/route.ts
280
+ function routePathToSlug(path) {
281
+ return path.replace(/^\/+|\/+$/g, "").replace(/\//g, "-");
282
+ }
283
+
255
284
  // src/tools/get-component.ts
256
285
  var SECTION_KEYS = [
257
286
  "overview",
@@ -359,9 +388,6 @@ async function resolveComponent(name) {
359
388
  return names;
360
389
  });
361
390
  }
362
- function pathToSlug(path) {
363
- return path.replace(/^\//, "").replace(/\//g, "-");
364
- }
365
391
  function buildMetadataResponse(entry, availableSections) {
366
392
  const meta = {
367
393
  name: entry.title,
@@ -404,7 +430,7 @@ function registerGetComponent(server) {
404
430
  isError: true
405
431
  };
406
432
  }
407
- const slug = pathToSlug(entry.path);
433
+ const slug = routePathToSlug(entry.path);
408
434
  const routeData = await getRouteData(slug);
409
435
  const viewSections = Object.keys(routeData.views ?? {}).map((key) => {
410
436
  const canonical = Object.entries(VIEW_KEY_MAP).find(
@@ -594,7 +620,7 @@ function registerGetTokens(server) {
594
620
  "get_tokens",
595
621
  {
596
622
  title: "Get Tokens",
597
- description: 'Returns Nimbus design tokens. No params: lists all categories with counts. With category: returns tokens in that category (large categories are paginated by default). With value: reverse-lookup to find which tokens resolve to that value (e.g. "16px" \u2192 spacing.400).',
623
+ description: 'Returns Nimbus design tokens. No params: lists all categories with counts. With category: returns tokens in that category (large categories are paginated by default). With value: reverse-lookup to find which tokens resolve to that value (e.g. "16px" \u2192 spacing.400). With uikitToken: resolve a UI Kit token name (e.g. "customProperties.constraint7" or "designTokens.spacingXl") to its CSS value, find matching Nimbus tokens, and recommend the best category.',
598
624
  inputSchema: {
599
625
  category: z2.string().optional().describe(
600
626
  'Token category to retrieve, e.g. "spacing", "color", "fontSize". Use "colorPalettes" to list available palette names for the colorPalette prop. Case-insensitive.'
@@ -602,6 +628,9 @@ function registerGetTokens(server) {
602
628
  value: z2.string().optional().describe(
603
629
  'Reverse-lookup: find tokens whose resolved value matches this string, e.g. "16px" or "#0969DA". Case-insensitive.'
604
630
  ),
631
+ uikitToken: z2.string().optional().describe(
632
+ 'UI Kit token name to resolve, e.g. "constraint7", "spacingXl", "customProperties.constraint7", or "designTokens.spacingXl". Resolves the token to its CSS value, finds matching Nimbus tokens, and recommends the best category. Tokens whose CSS value is a var(...) reference will return an empty tokens array but still provide recommendedCategory.'
633
+ ),
605
634
  offset: z2.number().int().min(0).default(0).describe(
606
635
  "Starting index for paginated results. Only applies when category is provided. Omit or pass 0 for the first page."
607
636
  ),
@@ -610,9 +639,34 @@ function registerGetTokens(server) {
610
639
  )
611
640
  }
612
641
  },
613
- async ({ category, value, offset, limit }) => {
642
+ async ({ category, value, uikitToken, offset, limit }) => {
614
643
  try {
615
644
  const data = await getFlatTokenData();
645
+ if (uikitToken !== void 0) {
646
+ const tokenMap = await getUiKitTokenMap();
647
+ const stripped = uikitToken.replace(/^customProperties\./, "").replace(/^designTokens\./, "");
648
+ const entry = Object.hasOwn(tokenMap, stripped) ? tokenMap[stripped] : void 0;
649
+ if (!entry) {
650
+ return {
651
+ content: [
652
+ {
653
+ type: "text",
654
+ text: `UI Kit token "${stripped}" not found. Pass a camelCase token name like "constraint7", "spacingXl", or "colorPrimary".`
655
+ }
656
+ ]
657
+ };
658
+ }
659
+ const matches = reverseLookup(data, entry.cssValue);
660
+ const payload2 = {
661
+ uikitToken: stripped,
662
+ cssValue: entry.cssValue,
663
+ recommendedCategory: entry.recommendedCategory,
664
+ tokens: matches
665
+ };
666
+ return {
667
+ content: [{ type: "text", text: JSON.stringify(payload2) }]
668
+ };
669
+ }
616
670
  if (value !== void 0) {
617
671
  const matches = reverseLookup(data, value);
618
672
  if (matches.length === 0) {
@@ -727,18 +781,6 @@ function toSummary(route) {
727
781
  if (route.tags.length > 0) summary.tags = route.tags;
728
782
  return summary;
729
783
  }
730
- function toLowered(r) {
731
- const title = r.title.toLowerCase();
732
- const description = r.description.toLowerCase();
733
- const tags = [...r.tags, r.exportName ?? ""].join(" ").toLowerCase();
734
- return {
735
- title,
736
- description,
737
- tags,
738
- content: "",
739
- combined: title + " " + description + " " + tags
740
- };
741
- }
742
784
  function registerListComponents(server) {
743
785
  server.registerTool(
744
786
  "list_components",
@@ -768,7 +810,7 @@ function registerListComponents(server) {
768
810
  const tokens = query.toLowerCase().split(/\s+/).filter(Boolean);
769
811
  const loweredMap = /* @__PURE__ */ new Map();
770
812
  for (const r of routes) {
771
- loweredMap.set(r, toLowered(r));
813
+ loweredMap.set(r, toLoweredRouteFields(r));
772
814
  }
773
815
  const exactMatches = filterAndRankPreLowered(
774
816
  routes,
@@ -821,7 +863,7 @@ function deriveToolHint(route) {
821
863
  if (route.startsWith("components/") || route.startsWith("patterns/"))
822
864
  return "get_component";
823
865
  if (route.startsWith("icons")) return "search_icons";
824
- return void 0;
866
+ return "get_docs_page";
825
867
  }
826
868
  var SNIPPET_LENGTH = 200;
827
869
  var SNIPPET_LEAD = 80;
@@ -879,9 +921,6 @@ function extractSnippet(content, tokens) {
879
921
  if (end < content.length) snippet = snippet + "\u2026";
880
922
  return snippet;
881
923
  }
882
- function routeToSlug(route) {
883
- return route.replace(/\//g, "-");
884
- }
885
924
  var viewContentCache = /* @__PURE__ */ new WeakMap();
886
925
  function getCachedViewContent(viewObj) {
887
926
  let cached = viewContentCache.get(viewObj);
@@ -946,7 +985,7 @@ function findCandidates(index, query, tokens, loweredMap) {
946
985
  }
947
986
  var routeViewsCache = /* @__PURE__ */ new Map();
948
987
  async function getRouteViews(route) {
949
- const slug = routeToSlug(route);
988
+ const slug = routePathToSlug(route);
950
989
  const cached = routeViewsCache.get(slug);
951
990
  if (cached) return cached;
952
991
  let routeData;
@@ -990,7 +1029,7 @@ async function getRouteViews(route) {
990
1029
  return result;
991
1030
  }
992
1031
  function searchRouteViewsSync(route, tokens) {
993
- const slug = routeToSlug(route);
1032
+ const slug = routePathToSlug(route);
994
1033
  const cached = routeViewsCache.get(slug);
995
1034
  if (!cached) return null;
996
1035
  const { views } = cached;
@@ -1026,7 +1065,7 @@ function registerSearchDocs(server) {
1026
1065
  "search_docs",
1027
1066
  {
1028
1067
  title: "Search Docs",
1029
- description: "Search all Nimbus docs (components, patterns, hooks, icons, tokens) including guidelines and accessibility views. Returns matching pages with content snippets. Props are not searchable here \u2014 use get_component with section='props' for prop details. Results include a toolHint field indicating which tool to call for deeper info (e.g. get_component, get_tokens, search_icons).",
1068
+ description: "Search all Nimbus docs (components, patterns, hooks, icons, tokens) including guidelines and accessibility views. Returns matching pages with content snippets. Props are not searchable here \u2014 use get_component with section='props' for prop details. Results include a toolHint field indicating which tool to call for deeper info (e.g. get_component, get_tokens, search_icons, get_docs_page).",
1030
1069
  inputSchema: {
1031
1070
  query: z4.string().describe(
1032
1071
  'Search query to find relevant documentation pages. e.g. "form validation", "color tokens", "accessibility", "onChange".'
@@ -1083,7 +1122,7 @@ function registerSearchDocs(server) {
1083
1122
  ...category ? { category } : {},
1084
1123
  ...viewMatch && viewMatch.viewKey !== "overview" ? { matchedView: viewMatch.viewKey } : {},
1085
1124
  snippet: viewMatch ? extractSnippet(viewMatch.content, tokens) : extractSnippet(stripMarkdown(entry.content), tokens),
1086
- ...toolHint ? { toolHint } : {}
1125
+ toolHint
1087
1126
  };
1088
1127
  });
1089
1128
  return {
@@ -1220,11 +1259,134 @@ function registerSearchIcons(server) {
1220
1259
  );
1221
1260
  }
1222
1261
 
1262
+ // src/tools/get-docs-page.ts
1263
+ import { z as z6 } from "zod";
1264
+ var viewContentCache2 = /* @__PURE__ */ new WeakMap();
1265
+ function getCachedStripped(viewObj) {
1266
+ let cached = viewContentCache2.get(viewObj);
1267
+ if (!cached) {
1268
+ cached = stripMarkdown(viewObj.mdx);
1269
+ viewContentCache2.set(viewObj, cached);
1270
+ }
1271
+ return cached;
1272
+ }
1273
+ function registerGetDocsPage(server) {
1274
+ server.registerTool(
1275
+ "get_docs_page",
1276
+ {
1277
+ title: "Get Docs Page",
1278
+ description: "Returns the full content of a Nimbus documentation page by its route path (as returned by search_docs). For tabbed pages, optionally specify a section to retrieve a single view. Use search_docs first to find the page path.",
1279
+ inputSchema: {
1280
+ path: z6.string().describe(
1281
+ 'Route path from search_docs results, e.g. "home/getting-started/installation".'
1282
+ ),
1283
+ section: z6.string().optional().describe(
1284
+ 'For tabbed pages, which view to return (e.g. "overview", "dev", "guidelines", "a11y"). Omit to get all views concatenated.'
1285
+ )
1286
+ }
1287
+ },
1288
+ async ({ path, section }) => {
1289
+ try {
1290
+ const slug = routePathToSlug(path);
1291
+ let routeData;
1292
+ try {
1293
+ routeData = await getRouteData(slug);
1294
+ } catch {
1295
+ return {
1296
+ content: [
1297
+ {
1298
+ type: "text",
1299
+ text: `Page not found for path "${path}". Use search_docs to find valid page paths.`
1300
+ }
1301
+ ],
1302
+ isError: true
1303
+ };
1304
+ }
1305
+ const { meta } = routeData;
1306
+ const availableSections = Object.keys(routeData.views ?? {});
1307
+ const normalizedSection = section?.toLowerCase();
1308
+ if (normalizedSection) {
1309
+ const view = routeData.views?.[normalizedSection];
1310
+ if (!view) {
1311
+ return {
1312
+ content: [
1313
+ {
1314
+ type: "text",
1315
+ text: `Section "${section}" not found for "${meta.title}". Available sections: ${availableSections.join(", ") || "none (single-page content)"}`
1316
+ }
1317
+ ],
1318
+ isError: true
1319
+ };
1320
+ }
1321
+ const result2 = {
1322
+ title: meta.title,
1323
+ description: meta.description,
1324
+ path: meta.route,
1325
+ sections: availableSections,
1326
+ content: getCachedStripped(view)
1327
+ };
1328
+ return {
1329
+ content: [{ type: "text", text: JSON.stringify(result2) }]
1330
+ };
1331
+ }
1332
+ let content;
1333
+ if (availableSections.length > 0 && routeData.views) {
1334
+ content = Object.entries(routeData.views).map(([key, view]) => `--- ${key} ---
1335
+ ${getCachedStripped(view)}`).join("\n\n");
1336
+ } else if (routeData.mdx) {
1337
+ content = stripMarkdown(routeData.mdx);
1338
+ } else {
1339
+ content = meta.description;
1340
+ }
1341
+ const result = {
1342
+ title: meta.title,
1343
+ description: meta.description,
1344
+ path: meta.route,
1345
+ sections: availableSections,
1346
+ content
1347
+ };
1348
+ return {
1349
+ content: [{ type: "text", text: JSON.stringify(result) }]
1350
+ };
1351
+ } catch {
1352
+ return {
1353
+ content: [
1354
+ {
1355
+ type: "text",
1356
+ text: "Docs data is not available in this environment."
1357
+ }
1358
+ ],
1359
+ isError: true
1360
+ };
1361
+ }
1362
+ }
1363
+ );
1364
+ }
1365
+
1223
1366
  // src/tools/migrate-from-uikit.ts
1224
1367
  import { readFile as readFile3 } from "fs/promises";
1225
- import { z as z6 } from "zod";
1368
+ import { z as z7 } from "zod";
1226
1369
 
1227
1370
  // src/data/uikit-migration.ts
1371
+ var ICON_WRAPPER_BASE = {
1372
+ component: "Icon",
1373
+ importPath: "@commercetools/nimbus",
1374
+ defaultProps: { size: "2xs", color: "neutral.11" }
1375
+ };
1376
+ var ICON_SIZE_MAPPING = [
1377
+ { from: "small", to: "2xs" },
1378
+ { from: "medium", to: "xs" },
1379
+ { from: "big", to: "md" },
1380
+ { from: "10", to: "2xs" },
1381
+ { from: "20", to: "xs" },
1382
+ { from: "30", to: "sm" },
1383
+ { from: "40", to: "md" }
1384
+ ];
1385
+ var ICON_WRAPPER = {
1386
+ ...ICON_WRAPPER_BASE,
1387
+ sizeMapping: ICON_SIZE_MAPPING
1388
+ };
1389
+ var LAYOUT_NESTING_GUIDANCE = "When you encounter nested layout components (e.g. Constraints wrapping Spacings wrapping Card), do NOT migrate each component independently. Instead, analyze the full nesting structure and migrate it as a single unit. Nimbus layout primitives (Stack, Box, Grid) can often collapse multiple nested UIKit wrappers into fewer elements. For example, a Constraints.Horizontal > Spacings.Stack > Spacings.Inset chain can become a single <Box maxWidth={...} gap={...} padding={...}>.";
1228
1390
  var MIGRATION_DATA = [
1229
1391
  // -------------------------------------------------------------------------
1230
1392
  // Buttons
@@ -1238,7 +1400,16 @@ var MIGRATION_DATA = [
1238
1400
  breakingChanges: [
1239
1401
  "Remove AccessibleButton wrapper, use <Button> directly",
1240
1402
  "label prop replaced by children"
1241
- ]
1403
+ ],
1404
+ propMappings: [
1405
+ {
1406
+ uiKitProp: "label",
1407
+ nimbusProp: null,
1408
+ changeType: "structural",
1409
+ notes: "Use children instead."
1410
+ }
1411
+ ],
1412
+ propMigrations: [{ from: "label", to: "children" }]
1242
1413
  },
1243
1414
  {
1244
1415
  uiKitName: "FlatButton",
@@ -1248,9 +1419,51 @@ var MIGRATION_DATA = [
1248
1419
  notes: `Use <Button variant="ghost"> for flat styling. UI Kit tone prop ('primary'|'secondary'|'inverted'|'critical') maps to Nimbus colorPalette/variant.`,
1249
1420
  breakingChanges: [
1250
1421
  "Replace FlatButton with <Button>",
1422
+ "Default color changed: UI Kit FlatButton was blue (tone='primary') by default; Nimbus Button defaults to colorPalette='neutral' (gray). Add colorPalette='primary' to preserve the blue appearance.",
1251
1423
  "label prop replaced by children",
1252
1424
  "tone prop replaced by variant/colorPalette",
1253
1425
  "iconPosition prop removed; pass icon as a child of <Button>"
1426
+ ],
1427
+ propMappings: [
1428
+ {
1429
+ uiKitProp: "_component",
1430
+ nimbusProp: "variant",
1431
+ changeType: "value-mapping",
1432
+ fixedValue: "ghost"
1433
+ },
1434
+ {
1435
+ uiKitProp: "label",
1436
+ nimbusProp: null,
1437
+ changeType: "structural",
1438
+ notes: "Use children instead."
1439
+ },
1440
+ {
1441
+ uiKitProp: "tone",
1442
+ nimbusProp: "colorPalette",
1443
+ changeType: "value-mapping",
1444
+ valueMapping: [
1445
+ { from: "primary", to: "primary" },
1446
+ { from: "secondary", to: "neutral" },
1447
+ { from: "critical", to: "critical" }
1448
+ ],
1449
+ notes: "'inverted' has no direct equivalent; use variant/colorPalette."
1450
+ },
1451
+ {
1452
+ uiKitProp: "icon",
1453
+ nimbusProp: null,
1454
+ changeType: "structural",
1455
+ notes: "Pass icon as a child."
1456
+ },
1457
+ {
1458
+ uiKitProp: "iconPosition",
1459
+ nimbusProp: null,
1460
+ changeType: "removed",
1461
+ notes: "Pass icon as a child."
1462
+ }
1463
+ ],
1464
+ propMigrations: [
1465
+ { from: "label", to: "children" },
1466
+ { from: "icon", to: "children", position: "before" }
1254
1467
  ]
1255
1468
  },
1256
1469
  {
@@ -1265,6 +1478,37 @@ var MIGRATION_DATA = [
1265
1478
  "to prop replaced by href (or use asChild with router Link)",
1266
1479
  "isExternal prop replaced by target='_blank' rel='noopener noreferrer'",
1267
1480
  "iconLeft prop removed; pass icon as a child of <Button>"
1481
+ ],
1482
+ propMappings: [
1483
+ {
1484
+ uiKitProp: "_component",
1485
+ nimbusProp: "variant",
1486
+ changeType: "value-mapping",
1487
+ fixedValue: "link"
1488
+ },
1489
+ {
1490
+ uiKitProp: "label",
1491
+ nimbusProp: null,
1492
+ changeType: "structural",
1493
+ notes: "Use children instead."
1494
+ },
1495
+ { uiKitProp: "to", nimbusProp: "href", changeType: "rename" },
1496
+ {
1497
+ uiKitProp: "isExternal",
1498
+ nimbusProp: null,
1499
+ changeType: "removed",
1500
+ notes: "Use target='_blank' rel='noopener noreferrer' instead."
1501
+ },
1502
+ {
1503
+ uiKitProp: "iconLeft",
1504
+ nimbusProp: null,
1505
+ changeType: "removed",
1506
+ notes: "Pass icon as a child."
1507
+ }
1508
+ ],
1509
+ propMigrations: [
1510
+ { from: "label", to: "children" },
1511
+ { from: "iconLeft", to: "children", position: "before" }
1268
1512
  ]
1269
1513
  },
1270
1514
  {
@@ -1275,9 +1519,51 @@ var MIGRATION_DATA = [
1275
1519
  notes: 'Use <Button variant="solid">. Note: the default Button variant is "subtle", so variant="solid" must be set explicitly. UI Kit used a required label prop; Nimbus uses children for button text.',
1276
1520
  breakingChanges: [
1277
1521
  "Replace PrimaryButton with <Button variant='solid'>",
1522
+ "Default color changed: UI Kit PrimaryButton was blue (tone='primary') by default; Nimbus Button defaults to colorPalette='neutral' (gray). Add colorPalette='primary' to preserve the blue appearance.",
1278
1523
  "label prop replaced by children",
1279
1524
  "iconLeft/iconRight props removed; pass icon as a child of <Button>",
1280
1525
  "tone prop ('urgent'|'primary'|'critical') replaced by colorPalette"
1526
+ ],
1527
+ propMappings: [
1528
+ {
1529
+ uiKitProp: "_component",
1530
+ nimbusProp: "variant",
1531
+ changeType: "value-mapping",
1532
+ fixedValue: "solid"
1533
+ },
1534
+ {
1535
+ uiKitProp: "label",
1536
+ nimbusProp: null,
1537
+ changeType: "structural",
1538
+ notes: "Use children instead."
1539
+ },
1540
+ {
1541
+ uiKitProp: "tone",
1542
+ nimbusProp: "colorPalette",
1543
+ changeType: "value-mapping",
1544
+ valueMapping: [
1545
+ { from: "primary", to: "primary" },
1546
+ { from: "urgent", to: "critical" },
1547
+ { from: "critical", to: "critical" }
1548
+ ]
1549
+ },
1550
+ {
1551
+ uiKitProp: "iconLeft",
1552
+ nimbusProp: null,
1553
+ changeType: "removed",
1554
+ notes: "Pass icon as a child."
1555
+ },
1556
+ {
1557
+ uiKitProp: "iconRight",
1558
+ nimbusProp: null,
1559
+ changeType: "removed",
1560
+ notes: "Pass icon as a child."
1561
+ }
1562
+ ],
1563
+ propMigrations: [
1564
+ { from: "label", to: "children" },
1565
+ { from: "iconLeft", to: "children", position: "before" },
1566
+ { from: "iconRight", to: "children", position: "after" }
1281
1567
  ]
1282
1568
  },
1283
1569
  {
@@ -1288,9 +1574,50 @@ var MIGRATION_DATA = [
1288
1574
  notes: 'Use <Button variant="outline"> for the secondary style. UI Kit used a required label prop; Nimbus uses children.',
1289
1575
  breakingChanges: [
1290
1576
  "Replace SecondaryButton with <Button variant='outline'>",
1577
+ "Default color changed: UI Kit SecondaryButton was blue (theme='default') by default; Nimbus Button defaults to colorPalette='neutral' (gray). Add colorPalette='primary' to preserve the blue appearance.",
1291
1578
  "label prop replaced by children",
1292
1579
  "iconLeft/iconRight props removed; pass icon as a child of <Button>",
1293
1580
  "theme prop ('default'|'info') replaced by colorPalette"
1581
+ ],
1582
+ propMappings: [
1583
+ {
1584
+ uiKitProp: "_component",
1585
+ nimbusProp: "variant",
1586
+ changeType: "value-mapping",
1587
+ fixedValue: "outline"
1588
+ },
1589
+ {
1590
+ uiKitProp: "label",
1591
+ nimbusProp: null,
1592
+ changeType: "structural",
1593
+ notes: "Use children instead."
1594
+ },
1595
+ {
1596
+ uiKitProp: "theme",
1597
+ nimbusProp: "colorPalette",
1598
+ changeType: "value-mapping",
1599
+ valueMapping: [
1600
+ { from: "default", to: "primary" },
1601
+ { from: "info", to: "info" }
1602
+ ]
1603
+ },
1604
+ {
1605
+ uiKitProp: "iconLeft",
1606
+ nimbusProp: null,
1607
+ changeType: "removed",
1608
+ notes: "Pass icon as a child."
1609
+ },
1610
+ {
1611
+ uiKitProp: "iconRight",
1612
+ nimbusProp: null,
1613
+ changeType: "removed",
1614
+ notes: "Pass icon as a child."
1615
+ }
1616
+ ],
1617
+ propMigrations: [
1618
+ { from: "label", to: "children" },
1619
+ { from: "iconLeft", to: "children", position: "before" },
1620
+ { from: "iconRight", to: "children", position: "after" }
1294
1621
  ]
1295
1622
  },
1296
1623
  {
@@ -1303,7 +1630,23 @@ var MIGRATION_DATA = [
1303
1630
  "label prop replaced by aria-label",
1304
1631
  "icon prop replaced by icon as children",
1305
1632
  "theme prop replaced by variant/colorPalette"
1306
- ]
1633
+ ],
1634
+ propMappings: [
1635
+ { uiKitProp: "label", nimbusProp: "aria-label", changeType: "rename" },
1636
+ {
1637
+ uiKitProp: "icon",
1638
+ nimbusProp: null,
1639
+ changeType: "structural",
1640
+ notes: "Pass icon as children."
1641
+ },
1642
+ {
1643
+ uiKitProp: "theme",
1644
+ nimbusProp: "variant",
1645
+ changeType: "structural",
1646
+ notes: "UIKit theme maps to both variant and colorPalette in Nimbus."
1647
+ }
1648
+ ],
1649
+ propMigrations: [{ from: "icon", to: "children" }]
1307
1650
  },
1308
1651
  {
1309
1652
  uiKitName: "SecondaryIconButton",
@@ -1316,7 +1659,28 @@ var MIGRATION_DATA = [
1316
1659
  "color prop ('solid'|'primary'|'info') replaced by variant/colorPalette",
1317
1660
  "icon prop replaced by icon as children",
1318
1661
  "label prop replaced by aria-label"
1319
- ]
1662
+ ],
1663
+ propMappings: [
1664
+ {
1665
+ uiKitProp: "color",
1666
+ nimbusProp: "variant",
1667
+ changeType: "value-mapping",
1668
+ valueMapping: [
1669
+ { from: "solid", to: "solid" },
1670
+ { from: "primary", to: "outline" },
1671
+ { from: "info", to: "outline" }
1672
+ ],
1673
+ notes: "Defaults to variant='outline' when no color prop is specified. 'primary'/'info' also imply a colorPalette; set colorPalette separately."
1674
+ },
1675
+ {
1676
+ uiKitProp: "icon",
1677
+ nimbusProp: null,
1678
+ changeType: "structural",
1679
+ notes: "Pass icon as children."
1680
+ },
1681
+ { uiKitProp: "label", nimbusProp: "aria-label", changeType: "rename" }
1682
+ ],
1683
+ propMigrations: [{ from: "icon", to: "children" }]
1320
1684
  },
1321
1685
  {
1322
1686
  uiKitName: "PrimaryActionDropdown",
@@ -1326,6 +1690,7 @@ var MIGRATION_DATA = [
1326
1690
  notes: "SplitButton combines a primary action button with a dropdown menu. Compose using SplitButton + Menu.",
1327
1691
  breakingChanges: [
1328
1692
  "Rename to SplitButton",
1693
+ "Default color changed: UI Kit PrimaryActionDropdown was blue by default; Nimbus SplitButton defaults to colorPalette='neutral' (gray). Add colorPalette='primary' to preserve the blue appearance.",
1329
1694
  "Menu items now use Nimbus Menu composition pattern"
1330
1695
  ]
1331
1696
  },
@@ -1344,6 +1709,27 @@ var MIGRATION_DATA = [
1344
1709
  "hasWarning prop removed",
1345
1710
  "isAutofocussed replaced by autoFocus",
1346
1711
  "isCondensed prop replaced by size='sm'"
1712
+ ],
1713
+ propMappings: [
1714
+ { uiKitProp: "hasError", nimbusProp: "isInvalid", changeType: "rename" },
1715
+ { uiKitProp: "hasWarning", nimbusProp: null, changeType: "removed" },
1716
+ {
1717
+ uiKitProp: "isAutofocussed",
1718
+ nimbusProp: "autoFocus",
1719
+ changeType: "rename"
1720
+ },
1721
+ {
1722
+ uiKitProp: "isCondensed",
1723
+ nimbusProp: "size",
1724
+ changeType: "value-mapping",
1725
+ valueMapping: [{ from: "true", to: "sm" }]
1726
+ },
1727
+ {
1728
+ uiKitProp: "onChange",
1729
+ nimbusProp: "onChange",
1730
+ changeType: "structural",
1731
+ notes: "Receives string value instead of ChangeEvent."
1732
+ }
1347
1733
  ]
1348
1734
  },
1349
1735
  {
@@ -1360,6 +1746,28 @@ var MIGRATION_DATA = [
1360
1746
  "warnings prop removed",
1361
1747
  "touched prop removed",
1362
1748
  "onChange now receives a string value instead of ChangeEvent<HTMLInputElement>"
1749
+ ],
1750
+ propMappings: [
1751
+ { uiKitProp: "title", nimbusProp: "label", changeType: "rename" },
1752
+ {
1753
+ uiKitProp: "hint",
1754
+ nimbusProp: "description",
1755
+ changeType: "rename"
1756
+ },
1757
+ {
1758
+ uiKitProp: "errors",
1759
+ nimbusProp: "errors",
1760
+ changeType: "structural",
1761
+ notes: "Now expects FieldErrorsData (from FieldErrors) instead of a Record<string, boolean>."
1762
+ },
1763
+ { uiKitProp: "warnings", nimbusProp: null, changeType: "removed" },
1764
+ { uiKitProp: "touched", nimbusProp: null, changeType: "removed" },
1765
+ {
1766
+ uiKitProp: "onChange",
1767
+ nimbusProp: "onChange",
1768
+ changeType: "structural",
1769
+ notes: "Receives string value instead of ChangeEvent."
1770
+ }
1363
1771
  ]
1364
1772
  },
1365
1773
  {
@@ -1373,6 +1781,21 @@ var MIGRATION_DATA = [
1373
1781
  "hasError prop replaced by isInvalid",
1374
1782
  "hasWarning prop removed",
1375
1783
  "isAutofocussed replaced by autoFocus"
1784
+ ],
1785
+ propMappings: [
1786
+ { uiKitProp: "hasError", nimbusProp: "isInvalid", changeType: "rename" },
1787
+ { uiKitProp: "hasWarning", nimbusProp: null, changeType: "removed" },
1788
+ {
1789
+ uiKitProp: "isAutofocussed",
1790
+ nimbusProp: "autoFocus",
1791
+ changeType: "rename"
1792
+ },
1793
+ {
1794
+ uiKitProp: "onChange",
1795
+ nimbusProp: "onChange",
1796
+ changeType: "structural",
1797
+ notes: "Receives string value instead of ChangeEvent."
1798
+ }
1376
1799
  ]
1377
1800
  },
1378
1801
  {
@@ -1388,6 +1811,27 @@ var MIGRATION_DATA = [
1388
1811
  "errors (Record) replaced by passing <FieldErrors> to the errorMessage prop",
1389
1812
  "warnings prop removed",
1390
1813
  "onChange now receives a string value instead of ChangeEvent<HTMLTextAreaElement>"
1814
+ ],
1815
+ propMappings: [
1816
+ { uiKitProp: "title", nimbusProp: "label", changeType: "rename" },
1817
+ {
1818
+ uiKitProp: "hint",
1819
+ nimbusProp: "description",
1820
+ changeType: "rename"
1821
+ },
1822
+ {
1823
+ uiKitProp: "errors",
1824
+ nimbusProp: "errors",
1825
+ changeType: "structural",
1826
+ notes: "Now expects FieldErrorsData (from FieldErrors) instead of a Record<string, boolean>."
1827
+ },
1828
+ { uiKitProp: "warnings", nimbusProp: null, changeType: "removed" },
1829
+ {
1830
+ uiKitProp: "onChange",
1831
+ nimbusProp: "onChange",
1832
+ changeType: "structural",
1833
+ notes: "Receives string value instead of ChangeEvent."
1834
+ }
1391
1835
  ]
1392
1836
  },
1393
1837
  {
@@ -1400,6 +1844,20 @@ var MIGRATION_DATA = [
1400
1844
  "onChange now receives a string value instead of ChangeEvent<HTMLInputElement>",
1401
1845
  "hasError prop replaced by isInvalid",
1402
1846
  "isAutofocussed replaced by autoFocus"
1847
+ ],
1848
+ propMappings: [
1849
+ { uiKitProp: "hasError", nimbusProp: "isInvalid", changeType: "rename" },
1850
+ {
1851
+ uiKitProp: "isAutofocussed",
1852
+ nimbusProp: "autoFocus",
1853
+ changeType: "rename"
1854
+ },
1855
+ {
1856
+ uiKitProp: "onChange",
1857
+ nimbusProp: "onChange",
1858
+ changeType: "structural",
1859
+ notes: "Receives string value instead of ChangeEvent."
1860
+ }
1403
1861
  ]
1404
1862
  },
1405
1863
  {
@@ -1413,6 +1871,20 @@ var MIGRATION_DATA = [
1413
1871
  "title prop renamed to label",
1414
1872
  "hint prop renamed to description",
1415
1873
  "errors (Record) replaced by passing <FieldErrors> to the errorMessage prop"
1874
+ ],
1875
+ propMappings: [
1876
+ { uiKitProp: "title", nimbusProp: "label", changeType: "rename" },
1877
+ {
1878
+ uiKitProp: "hint",
1879
+ nimbusProp: "description",
1880
+ changeType: "rename"
1881
+ },
1882
+ {
1883
+ uiKitProp: "errors",
1884
+ nimbusProp: "errors",
1885
+ changeType: "structural",
1886
+ notes: "Now expects FieldErrorsData (from FieldErrors) instead of a Record<string, boolean>."
1887
+ }
1416
1888
  ]
1417
1889
  },
1418
1890
  {
@@ -1425,6 +1897,20 @@ var MIGRATION_DATA = [
1425
1897
  "Rename to ComboBox",
1426
1898
  "options array replaced by items prop with ComboBox.Item render function",
1427
1899
  "onChange received TCustomEvent; now receives selected key directly"
1900
+ ],
1901
+ propMappings: [
1902
+ {
1903
+ uiKitProp: "loadOptions",
1904
+ nimbusProp: null,
1905
+ changeType: "structural",
1906
+ notes: "Replace loadOptions callback with items prop + ComboBox.Item render function."
1907
+ },
1908
+ {
1909
+ uiKitProp: "onChange",
1910
+ nimbusProp: "onSelectionChange",
1911
+ changeType: "structural",
1912
+ notes: "Receives the selected key directly instead of a TCustomEvent."
1913
+ }
1428
1914
  ]
1429
1915
  },
1430
1916
  {
@@ -1438,6 +1924,26 @@ var MIGRATION_DATA = [
1438
1924
  "title prop replaced by FormField label",
1439
1925
  "hint prop replaced by FormField description",
1440
1926
  "errors (Record) replaced by passing <FieldErrors> as a child of FormField.Error"
1927
+ ],
1928
+ propMappings: [
1929
+ {
1930
+ uiKitProp: "title",
1931
+ nimbusProp: null,
1932
+ changeType: "structural",
1933
+ notes: "Use the FormField label prop instead."
1934
+ },
1935
+ {
1936
+ uiKitProp: "hint",
1937
+ nimbusProp: null,
1938
+ changeType: "structural",
1939
+ notes: "Use the FormField description prop instead."
1940
+ },
1941
+ {
1942
+ uiKitProp: "errors",
1943
+ nimbusProp: null,
1944
+ changeType: "structural",
1945
+ notes: "Pass <FieldErrors> as a child of FormField.Error."
1946
+ }
1441
1947
  ]
1442
1948
  },
1443
1949
  {
@@ -1449,6 +1955,40 @@ var MIGRATION_DATA = [
1449
1955
  breakingChanges: [
1450
1956
  "Rename to ScopedSearchInput",
1451
1957
  "scope options now use items prop with ScopedSearchInput.Item children"
1958
+ ],
1959
+ propMappings: [
1960
+ {
1961
+ uiKitProp: "options",
1962
+ nimbusProp: "options",
1963
+ changeType: "structural",
1964
+ notes: "Shape changed to ScopedSearchInputOption[] | ScopedSearchInputOptionGroup[]."
1965
+ }
1966
+ ]
1967
+ },
1968
+ {
1969
+ uiKitName: "SearchTextInput",
1970
+ nimbusEquivalent: "SearchInput",
1971
+ importPath: "@commercetools/nimbus",
1972
+ mappingType: "direct",
1973
+ notes: "Direct replacement. Nimbus SearchInput provides built-in clear button and search icon.",
1974
+ breakingChanges: [
1975
+ "Rename to SearchInput",
1976
+ "onChange receives a string value instead of ChangeEvent",
1977
+ "onSubmit replaced by onClear for the clear action"
1978
+ ],
1979
+ propMappings: [
1980
+ {
1981
+ uiKitProp: "onChange",
1982
+ nimbusProp: "onChange",
1983
+ changeType: "structural",
1984
+ notes: "Receives string value instead of ChangeEvent."
1985
+ },
1986
+ {
1987
+ uiKitProp: "onSubmit",
1988
+ nimbusProp: "onClear",
1989
+ changeType: "structural",
1990
+ notes: "UIKit onSubmit (search action) has no direct equivalent. Use onClear for the clear button action."
1991
+ }
1452
1992
  ]
1453
1993
  },
1454
1994
  // -------------------------------------------------------------------------
@@ -1466,6 +2006,40 @@ var MIGRATION_DATA = [
1466
2006
  "onChange received TCustomEvent (target.value); now receives selected key directly",
1467
2007
  "isMulti support changed; check Nimbus Select API for multi-select",
1468
2008
  "appearance prop ('default'|'quiet'|'filter') replaced by variant"
2009
+ ],
2010
+ propMappings: [
2011
+ {
2012
+ uiKitProp: "appearance",
2013
+ nimbusProp: "variant",
2014
+ changeType: "value-mapping",
2015
+ valueMapping: [
2016
+ { from: "default", to: "outline" },
2017
+ { from: "quiet", to: "ghost" }
2018
+ ],
2019
+ notes: "appearance='filter' has no direct equivalent."
2020
+ },
2021
+ {
2022
+ uiKitProp: "options",
2023
+ nimbusProp: null,
2024
+ changeType: "structural",
2025
+ notes: "Replace with Select.Option children inside Select.Options."
2026
+ },
2027
+ {
2028
+ uiKitProp: "onChange",
2029
+ nimbusProp: "onChange",
2030
+ changeType: "structural",
2031
+ notes: "Receives selected key instead of TCustomEvent."
2032
+ }
2033
+ ],
2034
+ callbackAdapters: [
2035
+ {
2036
+ prop: "onChange",
2037
+ from: "(event: TCustomEvent) => void \u2014 access event.target.value",
2038
+ to: "(value: Key | null) => void \u2014 single selection only"
2039
+ }
2040
+ ],
2041
+ typeNotes: [
2042
+ "Key type is string | number from @react-types/shared; Nimbus Select is single-selection only \u2014 for multi-select use cases, migrate to ComboBox instead"
1469
2043
  ]
1470
2044
  },
1471
2045
  {
@@ -1479,6 +2053,26 @@ var MIGRATION_DATA = [
1479
2053
  "options array replaced by items prop with ComboBox.Item render function",
1480
2054
  "onCreateOption replaced by allowsCustomOptions + custom onInputChange logic",
1481
2055
  "onChange received TCustomEvent; now receives selected key directly"
2056
+ ],
2057
+ propMappings: [
2058
+ {
2059
+ uiKitProp: "options",
2060
+ nimbusProp: "items",
2061
+ changeType: "structural",
2062
+ notes: "Options array replaced by items collection with a ComboBox.Item render function."
2063
+ },
2064
+ {
2065
+ uiKitProp: "onCreateOption",
2066
+ nimbusProp: null,
2067
+ changeType: "removed",
2068
+ notes: "Use allowsCustomOptions plus custom onInputChange logic instead."
2069
+ },
2070
+ {
2071
+ uiKitProp: "onChange",
2072
+ nimbusProp: "onSelectionChange",
2073
+ changeType: "structural",
2074
+ notes: "Receives the selected key directly instead of a TCustomEvent."
2075
+ }
1482
2076
  ]
1483
2077
  },
1484
2078
  {
@@ -1492,6 +2086,26 @@ var MIGRATION_DATA = [
1492
2086
  "loadOptions callback replaced by onInputChange + external async fetch + items state",
1493
2087
  "onCreateOption replaced by allowsCustomOptions + custom logic",
1494
2088
  "onChange received TCustomEvent; now receives selected key directly"
2089
+ ],
2090
+ propMappings: [
2091
+ {
2092
+ uiKitProp: "loadOptions",
2093
+ nimbusProp: null,
2094
+ changeType: "removed",
2095
+ notes: "Use onInputChange plus an external async fetch that updates the items state."
2096
+ },
2097
+ {
2098
+ uiKitProp: "onCreateOption",
2099
+ nimbusProp: null,
2100
+ changeType: "removed",
2101
+ notes: "Use allowsCustomOptions plus custom onInputChange logic instead."
2102
+ },
2103
+ {
2104
+ uiKitProp: "onChange",
2105
+ nimbusProp: "onSelectionChange",
2106
+ changeType: "structural",
2107
+ notes: "Receives the selected key directly instead of a TCustomEvent."
2108
+ }
1495
2109
  ]
1496
2110
  },
1497
2111
  {
@@ -1504,6 +2118,20 @@ var MIGRATION_DATA = [
1504
2118
  "Rename to ComboBox",
1505
2119
  "loadOptions callback replaced by onInputChange + external async fetch + items state",
1506
2120
  "onChange received TCustomEvent; now receives selected key directly"
2121
+ ],
2122
+ propMappings: [
2123
+ {
2124
+ uiKitProp: "loadOptions",
2125
+ nimbusProp: null,
2126
+ changeType: "removed",
2127
+ notes: "Use onInputChange plus an external async fetch that updates the items state."
2128
+ },
2129
+ {
2130
+ uiKitProp: "onChange",
2131
+ nimbusProp: "onSelectionChange",
2132
+ changeType: "structural",
2133
+ notes: "Receives the selected key directly instead of a TCustomEvent."
2134
+ }
1507
2135
  ]
1508
2136
  },
1509
2137
  // -------------------------------------------------------------------------
@@ -1520,6 +2148,36 @@ var MIGRATION_DATA = [
1520
2148
  "value was string|number; now must be a number",
1521
2149
  "hasError prop replaced by isInvalid",
1522
2150
  "isAutofocussed replaced by autoFocus"
2151
+ ],
2152
+ propMappings: [
2153
+ { uiKitProp: "hasError", nimbusProp: "isInvalid", changeType: "rename" },
2154
+ {
2155
+ uiKitProp: "isAutofocussed",
2156
+ nimbusProp: "autoFocus",
2157
+ changeType: "rename"
2158
+ },
2159
+ {
2160
+ uiKitProp: "onChange",
2161
+ nimbusProp: "onChange",
2162
+ changeType: "structural",
2163
+ notes: "Receives a number instead of ChangeEvent."
2164
+ },
2165
+ {
2166
+ uiKitProp: "value",
2167
+ nimbusProp: "value",
2168
+ changeType: "structural",
2169
+ notes: "Was string|number; now must be a number."
2170
+ }
2171
+ ],
2172
+ callbackAdapters: [
2173
+ {
2174
+ prop: "onChange",
2175
+ from: "(event: ChangeEvent<HTMLInputElement>) => void \u2014 event.target.value is a string",
2176
+ to: "(value: number) => void"
2177
+ }
2178
+ ],
2179
+ typeNotes: [
2180
+ "value was string | number, now must be number; empty string '' is no longer valid \u2014 use NaN or conditional rendering"
1523
2181
  ]
1524
2182
  },
1525
2183
  {
@@ -1532,7 +2190,21 @@ var MIGRATION_DATA = [
1532
2190
  "Rename to NumberInputField",
1533
2191
  "title prop renamed to label",
1534
2192
  "hint prop renamed to description",
1535
- "errors (Record) replaced by passing <FieldErrors> to the errorMessage prop"
2193
+ "errors prop accepts FieldErrorsData; convert UIKit Record<string, boolean> via <FieldErrors>"
2194
+ ],
2195
+ propMappings: [
2196
+ { uiKitProp: "title", nimbusProp: "label", changeType: "rename" },
2197
+ {
2198
+ uiKitProp: "hint",
2199
+ nimbusProp: "description",
2200
+ changeType: "rename"
2201
+ },
2202
+ {
2203
+ uiKitProp: "errors",
2204
+ nimbusProp: "errors",
2205
+ changeType: "structural",
2206
+ notes: "Convert UIKit Record<string, boolean> to FieldErrorsData and pass to the errors prop."
2207
+ }
1536
2208
  ]
1537
2209
  },
1538
2210
  {
@@ -1545,6 +2217,26 @@ var MIGRATION_DATA = [
1545
2217
  "onChange received TCustomEvent; now receives { amount, currencyCode } directly",
1546
2218
  "currencies prop for available currency options unchanged",
1547
2219
  "hasError prop replaced by isInvalid"
2220
+ ],
2221
+ propMappings: [
2222
+ { uiKitProp: "hasError", nimbusProp: "isInvalid", changeType: "rename" },
2223
+ {
2224
+ uiKitProp: "onChange",
2225
+ nimbusProp: "onChange",
2226
+ changeType: "structural",
2227
+ notes: "Receives { amount, currencyCode } directly instead of a TCustomEvent."
2228
+ }
2229
+ ],
2230
+ callbackAdapters: [
2231
+ {
2232
+ prop: "onChange",
2233
+ from: "(event: TCustomEvent) => void \u2014 access event.target.value",
2234
+ to: "(event: CustomEvent) => void \u2014 legacy; prefer onValueChange: (value: MoneyInputValue) => void"
2235
+ }
2236
+ ],
2237
+ typeNotes: [
2238
+ "Prefer onValueChange over onChange; also available: onAmountChange: (amount: string) => void and onCurrencyChange: (currencyCode: CurrencyCode) => void",
2239
+ "MoneyInputValue = { amount: string, currencyCode: CurrencyCode | '' }"
1548
2240
  ]
1549
2241
  },
1550
2242
  {
@@ -1558,6 +2250,20 @@ var MIGRATION_DATA = [
1558
2250
  "title prop renamed to label",
1559
2251
  "hint prop renamed to description",
1560
2252
  "errors (Record) replaced by passing <FieldErrors> to the errorMessage prop"
2253
+ ],
2254
+ propMappings: [
2255
+ { uiKitProp: "title", nimbusProp: "label", changeType: "rename" },
2256
+ {
2257
+ uiKitProp: "hint",
2258
+ nimbusProp: "description",
2259
+ changeType: "rename"
2260
+ },
2261
+ {
2262
+ uiKitProp: "errors",
2263
+ nimbusProp: "errors",
2264
+ changeType: "structural",
2265
+ notes: "Now expects FieldErrorsData (from FieldErrors) instead of a Record<string, boolean>."
2266
+ }
1561
2267
  ]
1562
2268
  },
1563
2269
  // -------------------------------------------------------------------------
@@ -1574,6 +2280,31 @@ var MIGRATION_DATA = [
1574
2280
  "value changed from 'YYYY-MM-DD' string to CalendarDate from @internationalized/date",
1575
2281
  "onChange received TCustomEvent with string; now receives CalendarDate directly",
1576
2282
  "minValue/maxValue changed from strings to CalendarDate objects"
2283
+ ],
2284
+ propMappings: [
2285
+ {
2286
+ uiKitProp: "value",
2287
+ nimbusProp: "value",
2288
+ changeType: "structural",
2289
+ notes: "Changed from a 'YYYY-MM-DD' string to a CalendarDate from @internationalized/date."
2290
+ },
2291
+ {
2292
+ uiKitProp: "onChange",
2293
+ nimbusProp: "onChange",
2294
+ changeType: "structural",
2295
+ notes: "Receives a CalendarDate directly instead of a TCustomEvent with a string."
2296
+ }
2297
+ ],
2298
+ callbackAdapters: [
2299
+ {
2300
+ prop: "onChange",
2301
+ from: "(event: TCustomEvent) => void \u2014 event.target.value is a 'YYYY-MM-DD' string",
2302
+ to: "(value: CalendarDate | null) => void"
2303
+ }
2304
+ ],
2305
+ typeNotes: [
2306
+ "import { CalendarDate } from '@internationalized/date' is required; value and onChange use CalendarDate, not strings",
2307
+ "minValue/maxValue also changed from strings to CalendarDate objects"
1577
2308
  ]
1578
2309
  },
1579
2310
  {
@@ -1586,6 +2317,32 @@ var MIGRATION_DATA = [
1586
2317
  "Rename to DatePicker",
1587
2318
  "value must be a ZonedDateTime or CalendarDateTime",
1588
2319
  "Use granularity prop to enable time fields"
2320
+ ],
2321
+ propMappings: [
2322
+ {
2323
+ uiKitProp: "_component",
2324
+ nimbusProp: "granularity",
2325
+ changeType: "value-mapping",
2326
+ fixedValue: "minute",
2327
+ notes: "Use 'second' instead if second-level precision is required."
2328
+ },
2329
+ {
2330
+ uiKitProp: "value",
2331
+ nimbusProp: "value",
2332
+ changeType: "structural",
2333
+ notes: "Must be a ZonedDateTime or CalendarDateTime from @internationalized/date."
2334
+ }
2335
+ ],
2336
+ callbackAdapters: [
2337
+ {
2338
+ prop: "onChange",
2339
+ from: "(event: TCustomEvent) => void \u2014 string-based date-time value",
2340
+ to: "(value: CalendarDateTime | ZonedDateTime | null) => void"
2341
+ }
2342
+ ],
2343
+ typeNotes: [
2344
+ "import { CalendarDateTime, ZonedDateTime } from '@internationalized/date' is required; use CalendarDateTime for local times, ZonedDateTime for timezone-aware values",
2345
+ "Set granularity='minute' or 'second' on DatePicker to enable time fields"
1589
2346
  ]
1590
2347
  },
1591
2348
  {
@@ -1597,6 +2354,31 @@ var MIGRATION_DATA = [
1597
2354
  breakingChanges: [
1598
2355
  "Rename to DateRangePicker",
1599
2356
  "value shape changed to { start, end } using CalendarDate"
2357
+ ],
2358
+ propMappings: [
2359
+ {
2360
+ uiKitProp: "value",
2361
+ nimbusProp: "value",
2362
+ changeType: "structural",
2363
+ notes: "Shape changed to { start, end } using CalendarDate."
2364
+ },
2365
+ {
2366
+ uiKitProp: "onChange",
2367
+ nimbusProp: "onChange",
2368
+ changeType: "structural",
2369
+ notes: "Receives the { start, end } CalendarDate range directly."
2370
+ }
2371
+ ],
2372
+ callbackAdapters: [
2373
+ {
2374
+ prop: "onChange",
2375
+ from: "(event: TCustomEvent) => void \u2014 string-based date range",
2376
+ to: "(value: RangeValue<CalendarDate> | null) => void \u2014 where RangeValue<T> = { start: T, end: T }"
2377
+ }
2378
+ ],
2379
+ typeNotes: [
2380
+ "import { CalendarDate } from '@internationalized/date' and RangeValue from '@react-types/shared' are required",
2381
+ "Value type is RangeValue<CalendarDate> = { start: CalendarDate, end: CalendarDate } | null"
1600
2382
  ]
1601
2383
  },
1602
2384
  {
@@ -1613,7 +2395,25 @@ var MIGRATION_DATA = [
1613
2395
  importPath: "@commercetools/nimbus",
1614
2396
  mappingType: "direct",
1615
2397
  notes: "Direct replacement. value must be a Time object from @internationalized/date.",
1616
- breakingChanges: ["value must be a Time from @internationalized/date"]
2398
+ breakingChanges: ["value must be a Time from @internationalized/date"],
2399
+ propMappings: [
2400
+ {
2401
+ uiKitProp: "value",
2402
+ nimbusProp: "value",
2403
+ changeType: "structural",
2404
+ notes: "Must be a Time object from @internationalized/date."
2405
+ }
2406
+ ],
2407
+ callbackAdapters: [
2408
+ {
2409
+ prop: "onChange",
2410
+ from: "(event: ChangeEvent<HTMLInputElement>) => void \u2014 event.target.value is a time string",
2411
+ to: "(value: Time | null) => void"
2412
+ }
2413
+ ],
2414
+ typeNotes: [
2415
+ "import { Time } from '@internationalized/date' is required; value and onChange use Time objects, not strings"
2416
+ ]
1617
2417
  },
1618
2418
  // -------------------------------------------------------------------------
1619
2419
  // Form inputs — checkbox / radio / toggle
@@ -1628,6 +2428,26 @@ var MIGRATION_DATA = [
1628
2428
  "Rename to Checkbox",
1629
2429
  "isChecked prop renamed to isSelected",
1630
2430
  "onChange received ChangeEvent<HTMLInputElement>; now receives boolean isSelected directly"
2431
+ ],
2432
+ propMappings: [
2433
+ {
2434
+ uiKitProp: "isChecked",
2435
+ nimbusProp: "isSelected",
2436
+ changeType: "rename"
2437
+ },
2438
+ {
2439
+ uiKitProp: "onChange",
2440
+ nimbusProp: "onChange",
2441
+ changeType: "structural",
2442
+ notes: "Receives boolean isSelected instead of ChangeEvent."
2443
+ }
2444
+ ],
2445
+ callbackAdapters: [
2446
+ {
2447
+ prop: "onChange",
2448
+ from: "(event: ChangeEvent<HTMLInputElement>) => void \u2014 access event.target.checked",
2449
+ to: "(isSelected: boolean) => void"
2450
+ }
1631
2451
  ]
1632
2452
  },
1633
2453
  {
@@ -1649,6 +2469,35 @@ var MIGRATION_DATA = [
1649
2469
  "isChecked prop renamed to isSelected",
1650
2470
  "onChange received ChangeEvent (target.checked); now receives boolean isSelected directly",
1651
2471
  "size prop ('small'|'big') replaced by Nimbus size tokens"
2472
+ ],
2473
+ propMappings: [
2474
+ {
2475
+ uiKitProp: "isChecked",
2476
+ nimbusProp: "isSelected",
2477
+ changeType: "rename"
2478
+ },
2479
+ {
2480
+ uiKitProp: "onChange",
2481
+ nimbusProp: "onChange",
2482
+ changeType: "structural",
2483
+ notes: "Receives boolean isSelected instead of ChangeEvent."
2484
+ },
2485
+ {
2486
+ uiKitProp: "size",
2487
+ nimbusProp: "size",
2488
+ changeType: "value-mapping",
2489
+ valueMapping: [
2490
+ { from: "small", to: "sm" },
2491
+ { from: "big", to: "md" }
2492
+ ]
2493
+ }
2494
+ ],
2495
+ callbackAdapters: [
2496
+ {
2497
+ prop: "onChange",
2498
+ from: "(event: ChangeEvent<HTMLInputElement>) => void \u2014 access event.target.checked",
2499
+ to: "(isSelected: boolean) => void"
2500
+ }
1652
2501
  ]
1653
2502
  },
1654
2503
  // -------------------------------------------------------------------------
@@ -1665,6 +2514,41 @@ var MIGRATION_DATA = [
1665
2514
  "selectedLanguage prop replaced by defaultLocaleOrCurrency",
1666
2515
  "value per locale replaced by valuesByLocaleOrCurrency object",
1667
2516
  "onChange receives a LocalizedFieldChangeEvent with target.locale"
2517
+ ],
2518
+ propMappings: [
2519
+ {
2520
+ uiKitProp: "_component",
2521
+ nimbusProp: "type",
2522
+ changeType: "value-mapping",
2523
+ fixedValue: "text"
2524
+ },
2525
+ {
2526
+ uiKitProp: "selectedLanguage",
2527
+ nimbusProp: "defaultLocaleOrCurrency",
2528
+ changeType: "rename"
2529
+ },
2530
+ {
2531
+ uiKitProp: "value",
2532
+ nimbusProp: "valuesByLocaleOrCurrency",
2533
+ changeType: "structural",
2534
+ notes: "Per-locale value replaced by a single valuesByLocaleOrCurrency object."
2535
+ },
2536
+ {
2537
+ uiKitProp: "onChange",
2538
+ nimbusProp: "onChange",
2539
+ changeType: "structural",
2540
+ notes: "Receives a LocalizedFieldChangeEvent with target.locale."
2541
+ }
2542
+ ],
2543
+ callbackAdapters: [
2544
+ {
2545
+ prop: "onChange",
2546
+ from: "(event: ChangeEvent<HTMLLocalizedInputElement>) => void \u2014 event.target.language identifies the locale",
2547
+ to: "(event: LocalizedFieldChangeEvent) => void \u2014 event.target.locale identifies which locale changed"
2548
+ }
2549
+ ],
2550
+ typeNotes: [
2551
+ "LocalizedFieldChangeEvent has target.locale (string), target.value (string | string[] | null), and optional target.id/name"
1668
2552
  ]
1669
2553
  },
1670
2554
  {
@@ -1679,6 +2563,20 @@ var MIGRATION_DATA = [
1679
2563
  "hint prop renamed to description",
1680
2564
  "errors (Record) replaced by errorsByLocaleOrCurrency",
1681
2565
  "onChange receives a LocalizedFieldChangeEvent with target.locale"
2566
+ ],
2567
+ propMappings: [
2568
+ { uiKitProp: "title", nimbusProp: "label", changeType: "rename" },
2569
+ {
2570
+ uiKitProp: "hint",
2571
+ nimbusProp: "description",
2572
+ changeType: "rename"
2573
+ },
2574
+ {
2575
+ uiKitProp: "errors",
2576
+ nimbusProp: "errorsByLocaleOrCurrency",
2577
+ changeType: "structural",
2578
+ notes: "Record<string, boolean> replaced by errorsByLocaleOrCurrency."
2579
+ }
1682
2580
  ]
1683
2581
  },
1684
2582
  {
@@ -1692,6 +2590,41 @@ var MIGRATION_DATA = [
1692
2590
  "selectedLanguage prop replaced by defaultLocaleOrCurrency",
1693
2591
  "value per locale replaced by valuesByLocaleOrCurrency object",
1694
2592
  "onChange receives a LocalizedFieldChangeEvent with target.locale"
2593
+ ],
2594
+ propMappings: [
2595
+ {
2596
+ uiKitProp: "_component",
2597
+ nimbusProp: "type",
2598
+ changeType: "value-mapping",
2599
+ fixedValue: "multiLine"
2600
+ },
2601
+ {
2602
+ uiKitProp: "selectedLanguage",
2603
+ nimbusProp: "defaultLocaleOrCurrency",
2604
+ changeType: "rename"
2605
+ },
2606
+ {
2607
+ uiKitProp: "value",
2608
+ nimbusProp: "valuesByLocaleOrCurrency",
2609
+ changeType: "structural",
2610
+ notes: "Per-locale value replaced by a single valuesByLocaleOrCurrency object."
2611
+ },
2612
+ {
2613
+ uiKitProp: "onChange",
2614
+ nimbusProp: "onChange",
2615
+ changeType: "structural",
2616
+ notes: "Receives a LocalizedFieldChangeEvent with target.locale."
2617
+ }
2618
+ ],
2619
+ callbackAdapters: [
2620
+ {
2621
+ prop: "onChange",
2622
+ from: "(event: ChangeEvent<HTMLLocalizedInputElement>) => void \u2014 event.target.language identifies the locale",
2623
+ to: "(event: LocalizedFieldChangeEvent) => void \u2014 event.target.locale identifies which locale changed"
2624
+ }
2625
+ ],
2626
+ typeNotes: [
2627
+ "LocalizedFieldChangeEvent has target.locale (string), target.value (string | string[] | null), and optional target.id/name"
1695
2628
  ]
1696
2629
  },
1697
2630
  {
@@ -1706,6 +2639,20 @@ var MIGRATION_DATA = [
1706
2639
  "hint prop renamed to description",
1707
2640
  "errors (Record) replaced by errorsByLocaleOrCurrency",
1708
2641
  "onChange receives a LocalizedFieldChangeEvent with target.locale"
2642
+ ],
2643
+ propMappings: [
2644
+ { uiKitProp: "title", nimbusProp: "label", changeType: "rename" },
2645
+ {
2646
+ uiKitProp: "hint",
2647
+ nimbusProp: "description",
2648
+ changeType: "rename"
2649
+ },
2650
+ {
2651
+ uiKitProp: "errors",
2652
+ nimbusProp: "errorsByLocaleOrCurrency",
2653
+ changeType: "structural",
2654
+ notes: "Record<string, boolean> replaced by errorsByLocaleOrCurrency."
2655
+ }
1709
2656
  ]
1710
2657
  },
1711
2658
  {
@@ -1719,6 +2666,42 @@ var MIGRATION_DATA = [
1719
2666
  "selectedLanguage prop replaced by defaultLocaleOrCurrency (currency code)",
1720
2667
  "value per currency replaced by valuesByLocaleOrCurrency object",
1721
2668
  "onChange receives a LocalizedFieldChangeEvent with target.currency"
2669
+ ],
2670
+ propMappings: [
2671
+ {
2672
+ uiKitProp: "_component",
2673
+ nimbusProp: "type",
2674
+ changeType: "value-mapping",
2675
+ fixedValue: "money"
2676
+ },
2677
+ {
2678
+ uiKitProp: "selectedCurrency",
2679
+ nimbusProp: "defaultLocaleOrCurrency",
2680
+ changeType: "rename",
2681
+ notes: "Represents the default currency code for LocalizedMoneyInput."
2682
+ },
2683
+ {
2684
+ uiKitProp: "value",
2685
+ nimbusProp: "valuesByLocaleOrCurrency",
2686
+ changeType: "structural",
2687
+ notes: "Per-currency value replaced by a single valuesByLocaleOrCurrency object."
2688
+ },
2689
+ {
2690
+ uiKitProp: "onChange",
2691
+ nimbusProp: "onChange",
2692
+ changeType: "structural",
2693
+ notes: "Receives a LocalizedFieldChangeEvent with target.currency."
2694
+ }
2695
+ ],
2696
+ callbackAdapters: [
2697
+ {
2698
+ prop: "onChange",
2699
+ from: "(event: ChangeEvent<HTMLLocalizedInputElement>) => void \u2014 event.target.language identifies the currency",
2700
+ to: "(event: LocalizedFieldChangeEvent) => void \u2014 event.target.currency identifies which currency changed"
2701
+ }
2702
+ ],
2703
+ typeNotes: [
2704
+ "LocalizedFieldChangeEvent has target.currency (CurrencyCode), target.value (string | string[] | null), and optional target.id/name"
1722
2705
  ]
1723
2706
  },
1724
2707
  {
@@ -1732,6 +2715,41 @@ var MIGRATION_DATA = [
1732
2715
  "selectedLanguage prop replaced by defaultLocaleOrCurrency",
1733
2716
  "value per locale replaced by valuesByLocaleOrCurrency object",
1734
2717
  "onChange receives a LocalizedFieldChangeEvent with target.locale"
2718
+ ],
2719
+ propMappings: [
2720
+ {
2721
+ uiKitProp: "_component",
2722
+ nimbusProp: "type",
2723
+ changeType: "value-mapping",
2724
+ fixedValue: "richText"
2725
+ },
2726
+ {
2727
+ uiKitProp: "selectedLanguage",
2728
+ nimbusProp: "defaultLocaleOrCurrency",
2729
+ changeType: "rename"
2730
+ },
2731
+ {
2732
+ uiKitProp: "value",
2733
+ nimbusProp: "valuesByLocaleOrCurrency",
2734
+ changeType: "structural",
2735
+ notes: "Per-locale value replaced by a single valuesByLocaleOrCurrency object."
2736
+ },
2737
+ {
2738
+ uiKitProp: "onChange",
2739
+ nimbusProp: "onChange",
2740
+ changeType: "structural",
2741
+ notes: "Receives a LocalizedFieldChangeEvent with target.locale."
2742
+ }
2743
+ ],
2744
+ callbackAdapters: [
2745
+ {
2746
+ prop: "onChange",
2747
+ from: "(event: ChangeEvent<HTMLLocalizedInputElement>) => void \u2014 event.target.language identifies the locale",
2748
+ to: "(event: LocalizedFieldChangeEvent) => void \u2014 event.target.locale identifies which locale changed"
2749
+ }
2750
+ ],
2751
+ typeNotes: [
2752
+ "LocalizedFieldChangeEvent has target.locale (string), target.value (string | string[] | null), and optional target.id/name"
1735
2753
  ]
1736
2754
  },
1737
2755
  // -------------------------------------------------------------------------
@@ -1753,6 +2771,14 @@ var MIGRATION_DATA = [
1753
2771
  notes: "Compose FormField with a description prop, or use <Text size='sm' color='neutral.500'>.",
1754
2772
  breakingChanges: [
1755
2773
  "Replace AdditionalInfoMessage with FormField description prop or Text component"
2774
+ ],
2775
+ propMappings: [
2776
+ {
2777
+ uiKitProp: "children",
2778
+ nimbusProp: null,
2779
+ changeType: "structural",
2780
+ notes: "Use as the FormField description prop, or as Text children."
2781
+ }
1756
2782
  ]
1757
2783
  },
1758
2784
  {
@@ -1763,6 +2789,14 @@ var MIGRATION_DATA = [
1763
2789
  notes: "Use <FieldErrors> passed to a *Field component's errorMessage prop, or as a child of FormField.Error.",
1764
2790
  breakingChanges: [
1765
2791
  "Replace ErrorMessage with <FieldErrors> inside a Field errorMessage prop or FormField.Error"
2792
+ ],
2793
+ propMappings: [
2794
+ {
2795
+ uiKitProp: "children",
2796
+ nimbusProp: null,
2797
+ changeType: "structural",
2798
+ notes: "Use <FieldErrors> as a child of FormField.Error, or pass to a Field's errorMessage/errors prop."
2799
+ }
1766
2800
  ]
1767
2801
  },
1768
2802
  {
@@ -1773,6 +2807,14 @@ var MIGRATION_DATA = [
1773
2807
  notes: "Use <Text color='warning.500'> or a FormField description for warnings.",
1774
2808
  breakingChanges: [
1775
2809
  "Replace WarningMessage with Text + appropriate color token"
2810
+ ],
2811
+ propMappings: [
2812
+ {
2813
+ uiKitProp: "children",
2814
+ nimbusProp: null,
2815
+ changeType: "removed",
2816
+ notes: "Use <Text color='warning.500'> with the message as children instead."
2817
+ }
1776
2818
  ]
1777
2819
  },
1778
2820
  // -------------------------------------------------------------------------
@@ -1804,14 +2846,44 @@ var MIGRATION_DATA = [
1804
2846
  nimbusEquivalent: "Badge",
1805
2847
  importPath: "@commercetools/nimbus",
1806
2848
  mappingType: "direct",
1807
- notes: "Rename to Badge. Both use a tone prop, but the tone values differ. UI Kit tones: 'critical'|'warning'|'positive'|'information'|'primary'|'secondary'. Nimbus tones: 'danger'|'warning'|'success'|'info'.",
2849
+ notes: "Rename to Badge. UI Kit used a tone prop; Nimbus uses colorPalette instead. UI Kit tones: 'critical'|'warning'|'positive'|'information'|'primary'|'secondary'. Nimbus colorPalette values: 'critical'|'warning'|'positive'|'info'|'primary'|'neutral'.",
1808
2850
  breakingChanges: [
1809
2851
  "Rename to Badge",
1810
- "tone value 'critical' \u2192 'danger'",
1811
- "tone value 'positive' \u2192 'success'",
1812
- "tone value 'information' \u2192 'info'",
1813
- "tone values 'primary' and 'secondary' have no direct equivalent; use 'neutral' or default",
1814
- "isCondensed prop replaced by size='sm'"
2852
+ "Default color changed: UI Kit Stamp was blue (tone='information') by default; Nimbus Badge defaults to colorPalette='neutral' (gray). Add colorPalette='info' to preserve the blue appearance.",
2853
+ "tone prop replaced by colorPalette",
2854
+ "tone value 'positive' stays 'positive' (use colorPalette='positive')",
2855
+ "tone value 'critical' stays 'critical' (use colorPalette='critical')",
2856
+ "tone value 'warning' stays 'warning' (use colorPalette='warning')",
2857
+ "tone value 'information' \u2192 colorPalette='info'",
2858
+ "tone values 'primary' and 'secondary' \u2192 colorPalette='primary' or 'neutral'",
2859
+ "isCondensed prop replaced by size='xs'",
2860
+ "label and icon props removed; pass label text and optionally an icon as children"
2861
+ ],
2862
+ propMappings: [
2863
+ {
2864
+ uiKitProp: "tone",
2865
+ nimbusProp: "colorPalette",
2866
+ changeType: "value-mapping",
2867
+ valueMapping: [
2868
+ { from: "critical", to: "critical" },
2869
+ { from: "warning", to: "warning" },
2870
+ { from: "positive", to: "positive" },
2871
+ { from: "information", to: "info" },
2872
+ { from: "primary", to: "primary" },
2873
+ { from: "secondary", to: "neutral" }
2874
+ ]
2875
+ },
2876
+ {
2877
+ uiKitProp: "isCondensed",
2878
+ nimbusProp: "size",
2879
+ changeType: "value-mapping",
2880
+ valueMapping: [{ from: "true", to: "xs" }],
2881
+ notes: "Default size is 'md'."
2882
+ }
2883
+ ],
2884
+ propMigrations: [
2885
+ { from: "label", to: "children" },
2886
+ { from: "icon", to: "children", position: "before" }
1815
2887
  ]
1816
2888
  },
1817
2889
  {
@@ -1823,6 +2895,24 @@ var MIGRATION_DATA = [
1823
2895
  breakingChanges: [
1824
2896
  "Wrap single Tag in <TagGroup.Root><TagGroup.TagList><TagGroup.Tag>...</TagGroup.Tag></TagGroup.TagList></TagGroup.Root>",
1825
2897
  "onRemove now receives a key-based Set"
2898
+ ],
2899
+ propMappings: [
2900
+ {
2901
+ uiKitProp: "children",
2902
+ nimbusProp: null,
2903
+ changeType: "structural",
2904
+ notes: "Restructure into TagGroup.Root > TagGroup.TagList > TagGroup.Tag."
2905
+ }
2906
+ ],
2907
+ callbackAdapters: [
2908
+ {
2909
+ prop: "onRemove",
2910
+ from: "(event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>) => void \u2014 DOM event from remove button",
2911
+ to: "(keys: Set<Key>) => void \u2014 set of removed tag keys"
2912
+ }
2913
+ ],
2914
+ typeNotes: [
2915
+ "onRemove receives Set<Key> (where Key = string | number), not a single key; must iterate the set or use Set.has()"
1826
2916
  ]
1827
2917
  },
1828
2918
  {
@@ -1834,6 +2924,14 @@ var MIGRATION_DATA = [
1834
2924
  breakingChanges: [
1835
2925
  "Rename to TagGroup (use TagGroup.Root, TagGroup.TagList, TagGroup.Tag)",
1836
2926
  "items array replaced by TagGroup.Tag children inside TagGroup.TagList"
2927
+ ],
2928
+ propMappings: [
2929
+ {
2930
+ uiKitProp: "children",
2931
+ nimbusProp: null,
2932
+ changeType: "structural",
2933
+ notes: "Replace with TagGroup.Tag children inside TagGroup.TagList."
2934
+ }
1837
2935
  ]
1838
2936
  },
1839
2937
  {
@@ -1857,11 +2955,63 @@ var MIGRATION_DATA = [
1857
2955
  nimbusEquivalent: "DataTable",
1858
2956
  importPath: "@commercetools/nimbus",
1859
2957
  mappingType: "direct",
1860
- notes: "Direct replacement. Column definitions use the new columns prop with accessor keys.",
2958
+ notes: "Direct replacement. Column definitions require DataTableColumnItem<RowType>[] generic typing. Sort and selection callbacks have new signatures.",
1861
2959
  breakingChanges: [
1862
- "columns prop shape changed to use accessor and header fields",
1863
- "Row selection API updated to use onSelectionChange with a Set of keys"
1864
- ]
2960
+ "columns prop shape changed: key\u2192id, label\u2192header, accessor required (returns cell content, can be string or JSX)",
2961
+ "DataTableColumnItem<T> is generic \u2014 without <T> accessors return unknown and TS rejects them as ReactNode",
2962
+ "onSortChange signature changed from (key, order) to (descriptor: { column, direction })",
2963
+ "Selection type is 'all' | Set<Key> \u2014 missing the 'all' branch silently drops select-all clicks"
2964
+ ],
2965
+ propMappings: [
2966
+ {
2967
+ uiKitProp: "columns",
2968
+ nimbusProp: "columns",
2969
+ changeType: "structural",
2970
+ notes: "Shape changed: key\u2192id, label\u2192header. accessor is required and serves as both data getter and cell renderer: return a string for plain text or JSX for custom rendering. UI Kit's separate renderItem/render function should be merged into accessor. width must be a number (pixels), percentage string, or fr unit; CSS values like minmax() or max-content are not supported."
2971
+ },
2972
+ {
2973
+ uiKitProp: "onRowClick",
2974
+ nimbusProp: "onSelectionChange",
2975
+ changeType: "structural",
2976
+ notes: "Row interaction via onRowClick replaced by onSelectionChange with Selection = 'all' | Set<Key>."
2977
+ },
2978
+ {
2979
+ uiKitProp: "onSortChange",
2980
+ nimbusProp: "onSortChange",
2981
+ changeType: "structural",
2982
+ notes: "Signature changed from (key, order) to (descriptor: { column, direction: 'ascending' | 'descending' })."
2983
+ }
2984
+ ],
2985
+ propShapeTransforms: [
2986
+ {
2987
+ prop: "columns",
2988
+ rename: { key: "id", label: "header" },
2989
+ addRequired: ["accessor"],
2990
+ drop: [
2991
+ "render/renderItem (merge into accessor instead)",
2992
+ "width if CSS string (minmax, max-content, min-content); use numeric pixels, percentage, or fr"
2993
+ ],
2994
+ genericRequired: "DataTableColumnItem<RowType>[]"
2995
+ }
2996
+ ],
2997
+ callbackAdapters: [
2998
+ {
2999
+ prop: "onSortChange",
3000
+ from: "(key: string, order: 'asc' | 'desc')",
3001
+ to: "(descriptor: { column: string, direction: 'ascending' | 'descending' })"
3002
+ }
3003
+ ],
3004
+ typeNotes: [
3005
+ "Selection = 'all' | Set<Key>; handle 'all' explicitly \u2014 missing the 'all' branch silently drops the select-all header click"
3006
+ ],
3007
+ codeReduction: {
3008
+ type: "selection-model-collapse",
3009
+ deletableFiles: [
3010
+ "**/*-selection-column-cell.tsx",
3011
+ "**/*-selection-column-label.tsx"
3012
+ ],
3013
+ rationale: "Nimbus DataTable provides built-in selection via selectionMode='multiple'."
3014
+ }
1865
3015
  },
1866
3016
  {
1867
3017
  uiKitName: "DataTableManager",
@@ -1881,7 +3031,16 @@ var MIGRATION_DATA = [
1881
3031
  mappingType: "direct",
1882
3032
  notes: "Direct replacement. Use asChild for router library integration.",
1883
3033
  breakingChanges: [
3034
+ "Default color changed: UI Kit Link was blue (tone='primary') by default; Nimbus Link defaults to neutral (dark text). Use fontColor='primary' to preserve blue link styling.",
1884
3035
  "isExternal prop renamed to target='_blank' + rel='noopener'"
3036
+ ],
3037
+ propMappings: [
3038
+ {
3039
+ uiKitProp: "isExternal",
3040
+ nimbusProp: null,
3041
+ changeType: "removed",
3042
+ notes: "Use target='_blank' rel='noopener' instead."
3043
+ }
1885
3044
  ]
1886
3045
  },
1887
3046
  {
@@ -1893,7 +3052,22 @@ var MIGRATION_DATA = [
1893
3052
  breakingChanges: [
1894
3053
  "Rename to Menu (use Menu.Root, Menu.Trigger, Menu.Content, Menu.Item)",
1895
3054
  "options array replaced by Menu.Item children inside Menu.Content",
1896
- "onSelect replaced by onAction on Menu.Item or Menu"
3055
+ "per-item onClick replaced by onAction on Menu.Item or Menu (receives key)"
3056
+ ],
3057
+ propMappings: [
3058
+ {
3059
+ uiKitProp: "children",
3060
+ nimbusProp: null,
3061
+ changeType: "structural",
3062
+ notes: "Compose Menu.Root > Menu.Trigger + Menu.Content > Menu.Item."
3063
+ }
3064
+ ],
3065
+ callbackAdapters: [
3066
+ {
3067
+ prop: "onClick",
3068
+ from: "per-item onClick: () => void \u2014 no arguments, set on each DropdownMenu.ListMenuItem",
3069
+ to: "onAction: (key: Key) => void \u2014 receives the item's key; set on Menu or individual Menu.Item"
3070
+ }
1897
3071
  ]
1898
3072
  },
1899
3073
  {
@@ -1902,7 +3076,41 @@ var MIGRATION_DATA = [
1902
3076
  importPath: "@commercetools/nimbus",
1903
3077
  mappingType: "direct",
1904
3078
  notes: "Direct replacement. page/totalPages prop names are unchanged.",
1905
- breakingChanges: ["onPageChange receives a page number directly"]
3079
+ breakingChanges: ["onPageChange receives a page number directly"],
3080
+ propMappings: [
3081
+ {
3082
+ uiKitProp: "onPageChange",
3083
+ nimbusProp: "onPageChange",
3084
+ changeType: "structural",
3085
+ notes: "Receives the page number directly."
3086
+ }
3087
+ ]
3088
+ },
3089
+ {
3090
+ uiKitName: "ViewSwitcher",
3091
+ nimbusEquivalent: "ToggleButtonGroup",
3092
+ importPath: "@commercetools/nimbus",
3093
+ mappingType: "direct",
3094
+ notes: "Replace ViewSwitcher.Group with ToggleButtonGroup and ViewSwitcher.Button with ToggleButton. Nimbus ToggleButtonGroup uses selectionMode='single' for exclusive view switching.",
3095
+ breakingChanges: [
3096
+ "Replace ViewSwitcher.Group with <ToggleButtonGroup selectionMode='single'>",
3097
+ "Replace ViewSwitcher.Button with <ToggleButton>",
3098
+ "isActive prop replaced by selection state managed via selectedKeys/onSelectionChange"
3099
+ ],
3100
+ propMappings: [
3101
+ {
3102
+ uiKitProp: "isActive",
3103
+ nimbusProp: "selectedKeys",
3104
+ changeType: "structural",
3105
+ notes: "ViewSwitcher.Button isActive is replaced by ToggleButtonGroup's selectedKeys/onSelectionChange controlled state."
3106
+ },
3107
+ {
3108
+ uiKitProp: "onClick",
3109
+ nimbusProp: "onSelectionChange",
3110
+ changeType: "structural",
3111
+ notes: "ViewSwitcher.Button onClick is replaced by ToggleButtonGroup's onSelectionChange callback."
3112
+ }
3113
+ ]
1906
3114
  },
1907
3115
  // -------------------------------------------------------------------------
1908
3116
  // Overlays
@@ -1915,6 +3123,14 @@ var MIGRATION_DATA = [
1915
3123
  notes: "Tooltip wraps a trigger element. Use Tooltip.Root (wraps the trigger child) and Tooltip.Content composition.",
1916
3124
  breakingChanges: [
1917
3125
  "Compositional API: replace single prop with Tooltip.Root + Tooltip.Content"
3126
+ ],
3127
+ propMappings: [
3128
+ {
3129
+ uiKitProp: "children",
3130
+ nimbusProp: null,
3131
+ changeType: "structural",
3132
+ notes: "Restructure into Tooltip.Root (wrapping the trigger) + Tooltip.Content."
3133
+ }
1918
3134
  ]
1919
3135
  },
1920
3136
  // -------------------------------------------------------------------------
@@ -1925,10 +3141,23 @@ var MIGRATION_DATA = [
1925
3141
  nimbusEquivalent: "Alert",
1926
3142
  importPath: "@commercetools/nimbus",
1927
3143
  mappingType: "direct",
1928
- notes: "Rename to Alert. tone prop replaces type prop for semantic intent.",
3144
+ notes: "Rename to Alert. colorPalette prop replaces type prop for semantic intent.",
1929
3145
  breakingChanges: [
1930
3146
  "Rename to Alert",
1931
- "type prop replaced by tone ('info', 'success', 'warning', 'danger')"
3147
+ "type prop replaced by colorPalette ('info', 'positive', 'warning', 'critical')"
3148
+ ],
3149
+ propMappings: [
3150
+ {
3151
+ uiKitProp: "type",
3152
+ nimbusProp: "colorPalette",
3153
+ changeType: "value-mapping",
3154
+ valueMapping: [
3155
+ { from: "info", to: "info" },
3156
+ { from: "success", to: "positive" },
3157
+ { from: "warning", to: "warning" },
3158
+ { from: "danger", to: "critical" }
3159
+ ]
3160
+ }
1932
3161
  ]
1933
3162
  },
1934
3163
  // -------------------------------------------------------------------------
@@ -1951,7 +3180,8 @@ var MIGRATION_DATA = [
1951
3180
  breakingChanges: [
1952
3181
  "Remove Constraints.Horizontal",
1953
3182
  "Use maxWidth prop with design token values on Box or Container"
1954
- ]
3183
+ ],
3184
+ layoutGuidance: LAYOUT_NESTING_GUIDANCE
1955
3185
  },
1956
3186
  {
1957
3187
  uiKitName: "Spacings.Inline",
@@ -1962,7 +3192,8 @@ var MIGRATION_DATA = [
1962
3192
  breakingChanges: [
1963
3193
  "Replace Spacings.Inline with <Stack direction='row'>",
1964
3194
  "Spacing values use design token scale (e.g. gap='300')"
1965
- ]
3195
+ ],
3196
+ layoutGuidance: LAYOUT_NESTING_GUIDANCE
1966
3197
  },
1967
3198
  {
1968
3199
  uiKitName: "Spacings.Inset",
@@ -1973,7 +3204,8 @@ var MIGRATION_DATA = [
1973
3204
  breakingChanges: [
1974
3205
  "Replace Spacings.Inset with padding prop on Box",
1975
3206
  "Spacing values use design token scale"
1976
- ]
3207
+ ],
3208
+ layoutGuidance: LAYOUT_NESTING_GUIDANCE
1977
3209
  },
1978
3210
  {
1979
3211
  uiKitName: "Spacings.InsetSquish",
@@ -1983,7 +3215,8 @@ var MIGRATION_DATA = [
1983
3215
  notes: "Use <Box paddingX={...} paddingY={...}> with asymmetric nimbus spacing tokens.",
1984
3216
  breakingChanges: [
1985
3217
  "Replace Spacings.InsetSquish with paddingX/paddingY props on Box"
1986
- ]
3218
+ ],
3219
+ layoutGuidance: LAYOUT_NESTING_GUIDANCE
1987
3220
  },
1988
3221
  {
1989
3222
  uiKitName: "Spacings.Stack",
@@ -1994,7 +3227,8 @@ var MIGRATION_DATA = [
1994
3227
  breakingChanges: [
1995
3228
  "Replace Spacings.Stack with <Stack direction='column'>",
1996
3229
  "Spacing values use design token scale"
1997
- ]
3230
+ ],
3231
+ layoutGuidance: LAYOUT_NESTING_GUIDANCE
1998
3232
  },
1999
3233
  // -------------------------------------------------------------------------
2000
3234
  // Structure / containers
@@ -2004,9 +3238,17 @@ var MIGRATION_DATA = [
2004
3238
  nimbusEquivalent: "Card",
2005
3239
  importPath: "@commercetools/nimbus",
2006
3240
  mappingType: "direct",
2007
- notes: "Direct replacement. Composable with Card.Root, Card.Header, Card.Content.",
3241
+ notes: "Direct replacement. Composable with Card.Root, Card.Header, Card.Body, Card.Footer.",
2008
3242
  breakingChanges: [
2009
- "Adopt compositional slot API (Card.Root, Card.Header, Card.Content)"
3243
+ "Adopt compositional slot API (Card.Root, Card.Header, Card.Body, Card.Footer)"
3244
+ ],
3245
+ propMappings: [
3246
+ {
3247
+ uiKitProp: "children",
3248
+ nimbusProp: null,
3249
+ changeType: "structural",
3250
+ notes: "Restructure into Card.Root > Card.Header + Card.Body + Card.Footer slots."
3251
+ }
2010
3252
  ]
2011
3253
  },
2012
3254
  {
@@ -2022,6 +3264,33 @@ var MIGRATION_DATA = [
2022
3264
  "header prop replaced by Accordion.Header child",
2023
3265
  "condensed prop removed",
2024
3266
  "tone prop ('urgent'|'primary') replaced by Nimbus design tokens"
3267
+ ],
3268
+ propMappings: [
3269
+ {
3270
+ uiKitProp: "isClosed",
3271
+ nimbusProp: null,
3272
+ changeType: "structural",
3273
+ notes: "Use Accordion.Root's expandedKeys/defaultExpandedKeys + onExpandedChange (React Aria controlled/uncontrolled pattern)."
3274
+ },
3275
+ {
3276
+ uiKitProp: "header",
3277
+ nimbusProp: null,
3278
+ changeType: "structural",
3279
+ notes: "Use an Accordion.Header child instead of a prop."
3280
+ },
3281
+ { uiKitProp: "condensed", nimbusProp: null, changeType: "removed" },
3282
+ { uiKitProp: "tone", nimbusProp: null, changeType: "removed" }
3283
+ ],
3284
+ callbackAdapters: [
3285
+ {
3286
+ prop: "onToggle",
3287
+ from: "() => void \u2014 simple toggle callback",
3288
+ to: "onExpandedChange: (keys: Set<Key>) => void \u2014 receives the full set of expanded item keys"
3289
+ }
3290
+ ],
3291
+ typeNotes: [
3292
+ "Controlled state uses expandedKeys: Iterable<Key> + onExpandedChange: (keys: Set<Key>) => void; each Accordion.Item needs a value (string) prop as its key",
3293
+ "Key type is string | number from @react-types/shared"
2025
3294
  ]
2026
3295
  },
2027
3296
  {
@@ -2033,6 +3302,14 @@ var MIGRATION_DATA = [
2033
3302
  breakingChanges: [
2034
3303
  "Adopt compositional API (CollapsibleMotion.Root, CollapsibleMotion.Trigger, CollapsibleMotion.Content)",
2035
3304
  "Render prop pattern replaced by compound component children"
3305
+ ],
3306
+ propMappings: [
3307
+ {
3308
+ uiKitProp: "children",
3309
+ nimbusProp: null,
3310
+ changeType: "structural",
3311
+ notes: "Render prop (isClosed/toggle) replaced by CollapsibleMotion.Root/Trigger/Content composition."
3312
+ }
2036
3313
  ]
2037
3314
  },
2038
3315
  // -------------------------------------------------------------------------
@@ -2044,7 +3321,16 @@ var MIGRATION_DATA = [
2044
3321
  importPath: "@commercetools/nimbus",
2045
3322
  mappingType: "variant",
2046
3323
  notes: 'Use <Text size="md"> (default size).',
2047
- breakingChanges: ["Replace Text.Body with <Text> (default size is body)"]
3324
+ breakingChanges: ["Replace Text.Body with <Text> (default size is body)"],
3325
+ propMappings: [
3326
+ {
3327
+ uiKitProp: "_component",
3328
+ nimbusProp: null,
3329
+ changeType: "value-mapping",
3330
+ fixedValue: "md",
3331
+ notes: "size='md' is Text's default, so it can usually be omitted."
3332
+ }
3333
+ ]
2048
3334
  },
2049
3335
  {
2050
3336
  uiKitName: "Text.Caption",
@@ -2052,7 +3338,15 @@ var MIGRATION_DATA = [
2052
3338
  importPath: "@commercetools/nimbus",
2053
3339
  mappingType: "variant",
2054
3340
  notes: 'Use <Text size="xs"> for caption-sized text.',
2055
- breakingChanges: ["Replace Text.Caption with <Text size='xs'>"]
3341
+ breakingChanges: ["Replace Text.Caption with <Text size='xs'>"],
3342
+ propMappings: [
3343
+ {
3344
+ uiKitProp: "_component",
3345
+ nimbusProp: null,
3346
+ changeType: "value-mapping",
3347
+ fixedValue: "xs"
3348
+ }
3349
+ ]
2056
3350
  },
2057
3351
  {
2058
3352
  uiKitName: "Text.Detail",
@@ -2060,7 +3354,15 @@ var MIGRATION_DATA = [
2060
3354
  importPath: "@commercetools/nimbus",
2061
3355
  mappingType: "variant",
2062
3356
  notes: 'Use <Text size="sm"> for detail/small text.',
2063
- breakingChanges: ["Replace Text.Detail with <Text size='sm'>"]
3357
+ breakingChanges: ["Replace Text.Detail with <Text size='sm'>"],
3358
+ propMappings: [
3359
+ {
3360
+ uiKitProp: "_component",
3361
+ nimbusProp: null,
3362
+ changeType: "value-mapping",
3363
+ fixedValue: "sm"
3364
+ }
3365
+ ]
2064
3366
  },
2065
3367
  {
2066
3368
  uiKitName: "Text.Headline",
@@ -2070,6 +3372,15 @@ var MIGRATION_DATA = [
2070
3372
  notes: 'Use <Text size="2xl" fontWeight="bold"> or the Heading component.',
2071
3373
  breakingChanges: [
2072
3374
  "Replace Text.Headline with <Text size='2xl' fontWeight='bold'> or <Heading>"
3375
+ ],
3376
+ propMappings: [
3377
+ {
3378
+ uiKitProp: "_component",
3379
+ nimbusProp: null,
3380
+ changeType: "value-mapping",
3381
+ fixedValue: "2xl",
3382
+ notes: "Also set fontWeight='bold', or use <Heading> instead."
3383
+ }
2073
3384
  ]
2074
3385
  },
2075
3386
  {
@@ -2078,7 +3389,15 @@ var MIGRATION_DATA = [
2078
3389
  importPath: "@commercetools/nimbus",
2079
3390
  mappingType: "variant",
2080
3391
  notes: 'Use <Text size="xl">.',
2081
- breakingChanges: ["Replace Text.Subheadline with <Text size='xl'>"]
3392
+ breakingChanges: ["Replace Text.Subheadline with <Text size='xl'>"],
3393
+ propMappings: [
3394
+ {
3395
+ uiKitProp: "_component",
3396
+ nimbusProp: null,
3397
+ changeType: "value-mapping",
3398
+ fixedValue: "xl"
3399
+ }
3400
+ ]
2082
3401
  },
2083
3402
  {
2084
3403
  uiKitName: "Text.Wrap",
@@ -2101,80 +3420,1783 @@ var MIGRATION_DATA = [
2101
3420
  ]
2102
3421
  },
2103
3422
  // -------------------------------------------------------------------------
2104
- // Icons
3423
+ // Icons — specific UI Kit icon → Nimbus icon mappings
2105
3424
  // -------------------------------------------------------------------------
2106
3425
  {
2107
- uiKitName: "CustomIcon",
3426
+ uiKitName: "AngleDownIcon",
2108
3427
  nimbusEquivalent: "Icon",
2109
3428
  importPath: "@commercetools/nimbus",
2110
3429
  mappingType: "variant",
2111
- notes: "Use <Icon> component wrapping an SVG, or use InlineSvg for custom SVGs.",
3430
+ notes: 'Use <Icon as={KeyboardArrowDown} /> from @commercetools/nimbus-icons. Import: import { KeyboardArrowDown } from "@commercetools/nimbus-icons";',
2112
3431
  breakingChanges: [
2113
- "Replace CustomIcon with <Icon> or <InlineSvg>",
2114
- "SVG must be passed as a child or via as prop"
2115
- ]
3432
+ "Replace AngleDownIcon with <Icon as={KeyboardArrowDown} />",
3433
+ "Import KeyboardArrowDown from @commercetools/nimbus-icons",
3434
+ "Wrap with <Icon> component from @commercetools/nimbus"
3435
+ ],
3436
+ iconWrapper: ICON_WRAPPER
2116
3437
  },
2117
3438
  {
2118
- uiKitName: "LeadingIcon",
3439
+ uiKitName: "AngleThinLeftIcon",
2119
3440
  nimbusEquivalent: "Icon",
2120
3441
  importPath: "@commercetools/nimbus",
2121
3442
  mappingType: "variant",
2122
- notes: "Pass icon as a child to the parent component (e.g. as a child of <Button>) rather than using a wrapper.",
3443
+ notes: 'Use <Icon as={ChevronLeft} /> from @commercetools/nimbus-icons. Import: import { ChevronLeft } from "@commercetools/nimbus-icons";',
2123
3444
  breakingChanges: [
2124
- "Remove LeadingIcon wrapper",
2125
- "Pass icon directly to the parent component's icon slot"
2126
- ]
3445
+ "Replace AngleThinLeftIcon with <Icon as={ChevronLeft} />",
3446
+ "Import ChevronLeft from @commercetools/nimbus-icons",
3447
+ "Wrap with <Icon> component from @commercetools/nimbus"
3448
+ ],
3449
+ iconWrapper: ICON_WRAPPER
2127
3450
  },
2128
3451
  {
2129
- uiKitName: "InlineSvg",
2130
- nimbusEquivalent: "InlineSvg",
3452
+ uiKitName: "AngleThinRightIcon",
3453
+ nimbusEquivalent: "Icon",
2131
3454
  importPath: "@commercetools/nimbus",
2132
- mappingType: "direct",
2133
- notes: "Direct replacement for custom SVG icons not in the icon library.",
2134
- breakingChanges: []
3455
+ mappingType: "variant",
3456
+ notes: 'Use <Icon as={ChevronRight} /> from @commercetools/nimbus-icons. Import: import { ChevronRight } from "@commercetools/nimbus-icons";',
3457
+ breakingChanges: [
3458
+ "Replace AngleThinRightIcon with <Icon as={ChevronRight} />",
3459
+ "Import ChevronRight from @commercetools/nimbus-icons",
3460
+ "Wrap with <Icon> component from @commercetools/nimbus"
3461
+ ],
3462
+ iconWrapper: ICON_WRAPPER
2135
3463
  },
2136
3464
  {
2137
- uiKitName: "Icon Library",
2138
- nimbusEquivalent: "Material Icon Library",
2139
- importPath: "@commercetools/nimbus-icons",
2140
- mappingType: "pattern",
2141
- notes: "Import icons from @commercetools/nimbus-icons. Icons are named SvgIconName (e.g. SvgAccountCircle).",
3465
+ uiKitName: "AngleUpDownIcon",
3466
+ nimbusEquivalent: "Icon",
3467
+ importPath: "@commercetools/nimbus",
3468
+ mappingType: "variant",
3469
+ notes: 'Use <Icon as={UnfoldMore} /> from @commercetools/nimbus-icons. Import: import { UnfoldMore } from "@commercetools/nimbus-icons";',
2142
3470
  breakingChanges: [
2143
- "Update import paths to @commercetools/nimbus-icons",
2144
- "Icon names follow Svg prefix convention"
2145
- ]
3471
+ "Replace AngleUpDownIcon with <Icon as={UnfoldMore} />",
3472
+ "Import UnfoldMore from @commercetools/nimbus-icons",
3473
+ "Wrap with <Icon> component from @commercetools/nimbus"
3474
+ ],
3475
+ iconWrapper: ICON_WRAPPER
2146
3476
  },
2147
- // -------------------------------------------------------------------------
2148
- // Accessibility utilities
2149
- // -------------------------------------------------------------------------
2150
3477
  {
2151
- uiKitName: "HiddenInput",
2152
- nimbusEquivalent: "VisuallyHidden",
3478
+ uiKitName: "AngleUpIcon",
3479
+ nimbusEquivalent: "Icon",
2153
3480
  importPath: "@commercetools/nimbus",
2154
- mappingType: "direct",
2155
- notes: "VisuallyHidden renders content that is visually hidden but accessible to screen readers.",
2156
- breakingChanges: ["Rename to VisuallyHidden"]
3481
+ mappingType: "variant",
3482
+ notes: 'Use <Icon as={ExpandLess} /> from @commercetools/nimbus-icons. Import: import { ExpandLess } from "@commercetools/nimbus-icons";',
3483
+ breakingChanges: [
3484
+ "Replace AngleUpIcon with <Icon as={ExpandLess} />",
3485
+ "Import ExpandLess from @commercetools/nimbus-icons",
3486
+ "Wrap with <Icon> component from @commercetools/nimbus"
3487
+ ],
3488
+ iconWrapper: ICON_WRAPPER
2157
3489
  },
2158
3490
  {
2159
- uiKitName: "AccessibleHidden",
2160
- nimbusEquivalent: "VisuallyHidden",
3491
+ uiKitName: "ArrowDownIcon",
3492
+ nimbusEquivalent: "Icon",
2161
3493
  importPath: "@commercetools/nimbus",
2162
3494
  mappingType: "variant",
2163
- notes: "Use VisuallyHidden for content that should be screen-reader accessible only.",
2164
- breakingChanges: ["Replace AccessibleHidden with VisuallyHidden"]
3495
+ notes: 'Use <Icon as={ArrowDownward} /> from @commercetools/nimbus-icons. Import: import { ArrowDownward } from "@commercetools/nimbus-icons";',
3496
+ breakingChanges: [
3497
+ "Replace ArrowDownIcon with <Icon as={ArrowDownward} />",
3498
+ "Import ArrowDownward from @commercetools/nimbus-icons",
3499
+ "Wrap with <Icon> component from @commercetools/nimbus"
3500
+ ],
3501
+ iconWrapper: ICON_WRAPPER
2165
3502
  },
2166
- // -------------------------------------------------------------------------
2167
- // Provider
2168
- // -------------------------------------------------------------------------
2169
3503
  {
2170
- uiKitName: "ThemeProvider",
2171
- nimbusEquivalent: "NimbusProvider",
3504
+ uiKitName: "ArrowLeftIcon",
3505
+ nimbusEquivalent: "Icon",
2172
3506
  importPath: "@commercetools/nimbus",
2173
- mappingType: "direct",
2174
- notes: "Rename to NimbusProvider. Wrap your app root once; passes theme and i18n context.",
3507
+ mappingType: "variant",
3508
+ notes: 'Use <Icon as={ArrowLeft} /> from @commercetools/nimbus-icons. Import: import { ArrowLeft } from "@commercetools/nimbus-icons";',
3509
+ breakingChanges: [
3510
+ "Replace ArrowLeftIcon with <Icon as={ArrowLeft} />",
3511
+ "Import ArrowLeft from @commercetools/nimbus-icons",
3512
+ "Wrap with <Icon> component from @commercetools/nimbus"
3513
+ ],
3514
+ iconWrapper: ICON_WRAPPER
3515
+ },
3516
+ {
3517
+ uiKitName: "ArrowLongDownIcon",
3518
+ nimbusEquivalent: "Icon",
3519
+ importPath: "@commercetools/nimbus",
3520
+ mappingType: "variant",
3521
+ notes: 'Use <Icon as={South} /> from @commercetools/nimbus-icons. Import: import { South } from "@commercetools/nimbus-icons";',
3522
+ breakingChanges: [
3523
+ "Replace ArrowLongDownIcon with <Icon as={South} />",
3524
+ "Import South from @commercetools/nimbus-icons",
3525
+ "Wrap with <Icon> component from @commercetools/nimbus"
3526
+ ],
3527
+ iconWrapper: ICON_WRAPPER
3528
+ },
3529
+ {
3530
+ uiKitName: "ArrowRightIcon",
3531
+ nimbusEquivalent: "Icon",
3532
+ importPath: "@commercetools/nimbus",
3533
+ mappingType: "variant",
3534
+ notes: 'Use <Icon as={ArrowRight} /> from @commercetools/nimbus-icons. Import: import { ArrowRight } from "@commercetools/nimbus-icons";',
3535
+ breakingChanges: [
3536
+ "Replace ArrowRightIcon with <Icon as={ArrowRight} />",
3537
+ "Import ArrowRight from @commercetools/nimbus-icons",
3538
+ "Wrap with <Icon> component from @commercetools/nimbus"
3539
+ ],
3540
+ iconWrapper: ICON_WRAPPER
3541
+ },
3542
+ {
3543
+ uiKitName: "ArrowsIcon",
3544
+ nimbusEquivalent: "Icon",
3545
+ importPath: "@commercetools/nimbus",
3546
+ mappingType: "variant",
3547
+ notes: 'Use <Icon as={SwapVert} /> from @commercetools/nimbus-icons. Import: import { SwapVert } from "@commercetools/nimbus-icons";',
3548
+ breakingChanges: [
3549
+ "Replace ArrowsIcon with <Icon as={SwapVert} />",
3550
+ "Import SwapVert from @commercetools/nimbus-icons",
3551
+ "Wrap with <Icon> component from @commercetools/nimbus"
3552
+ ],
3553
+ iconWrapper: ICON_WRAPPER
3554
+ },
3555
+ {
3556
+ uiKitName: "ArrowsMinimizeIcon",
3557
+ nimbusEquivalent: "Icon",
3558
+ importPath: "@commercetools/nimbus",
3559
+ mappingType: "variant",
3560
+ notes: 'Use <Icon as={UnfoldLess} /> from @commercetools/nimbus-icons. Import: import { UnfoldLess } from "@commercetools/nimbus-icons";',
3561
+ breakingChanges: [
3562
+ "Replace ArrowsMinimizeIcon with <Icon as={UnfoldLess} />",
3563
+ "Import UnfoldLess from @commercetools/nimbus-icons",
3564
+ "Wrap with <Icon> component from @commercetools/nimbus"
3565
+ ],
3566
+ iconWrapper: ICON_WRAPPER
3567
+ },
3568
+ {
3569
+ uiKitName: "ArrowTriangleDownIcon",
3570
+ nimbusEquivalent: "Icon",
3571
+ importPath: "@commercetools/nimbus",
3572
+ mappingType: "variant",
3573
+ notes: 'Use <Icon as={ArrowDropDown} /> from @commercetools/nimbus-icons. Import: import { ArrowDropDown } from "@commercetools/nimbus-icons";',
3574
+ breakingChanges: [
3575
+ "Replace ArrowTriangleDownIcon with <Icon as={ArrowDropDown} />",
3576
+ "Import ArrowDropDown from @commercetools/nimbus-icons",
3577
+ "Wrap with <Icon> component from @commercetools/nimbus"
3578
+ ],
3579
+ iconWrapper: ICON_WRAPPER
3580
+ },
3581
+ {
3582
+ uiKitName: "ArrowTriangleUpIcon",
3583
+ nimbusEquivalent: "Icon",
3584
+ importPath: "@commercetools/nimbus",
3585
+ mappingType: "variant",
3586
+ notes: 'Use <Icon as={ArrowDropUp} /> from @commercetools/nimbus-icons. Import: import { ArrowDropUp } from "@commercetools/nimbus-icons";',
3587
+ breakingChanges: [
3588
+ "Replace ArrowTriangleUpIcon with <Icon as={ArrowDropUp} />",
3589
+ "Import ArrowDropUp from @commercetools/nimbus-icons",
3590
+ "Wrap with <Icon> component from @commercetools/nimbus"
3591
+ ],
3592
+ iconWrapper: ICON_WRAPPER
3593
+ },
3594
+ {
3595
+ uiKitName: "ArrowUpIcon",
3596
+ nimbusEquivalent: "Icon",
3597
+ importPath: "@commercetools/nimbus",
3598
+ mappingType: "variant",
3599
+ notes: 'Use <Icon as={ArrowUpward} /> from @commercetools/nimbus-icons. Import: import { ArrowUpward } from "@commercetools/nimbus-icons";',
3600
+ breakingChanges: [
3601
+ "Replace ArrowUpIcon with <Icon as={ArrowUpward} />",
3602
+ "Import ArrowUpward from @commercetools/nimbus-icons",
3603
+ "Wrap with <Icon> component from @commercetools/nimbus"
3604
+ ],
3605
+ iconWrapper: ICON_WRAPPER
3606
+ },
3607
+ {
3608
+ uiKitName: "BackIcon",
3609
+ nimbusEquivalent: "Icon",
3610
+ importPath: "@commercetools/nimbus",
3611
+ mappingType: "variant",
3612
+ notes: 'Use <Icon as={ArrowBack} /> from @commercetools/nimbus-icons. Import: import { ArrowBack } from "@commercetools/nimbus-icons";',
3613
+ breakingChanges: [
3614
+ "Replace BackIcon with <Icon as={ArrowBack} />",
3615
+ "Import ArrowBack from @commercetools/nimbus-icons",
3616
+ "Wrap with <Icon> component from @commercetools/nimbus"
3617
+ ],
3618
+ iconWrapper: ICON_WRAPPER
3619
+ },
3620
+ {
3621
+ uiKitName: "BagIcon",
3622
+ nimbusEquivalent: "Icon",
3623
+ importPath: "@commercetools/nimbus",
3624
+ mappingType: "variant",
3625
+ notes: 'Use <Icon as={ShoppingBag} /> from @commercetools/nimbus-icons. Import: import { ShoppingBag } from "@commercetools/nimbus-icons";',
3626
+ breakingChanges: [
3627
+ "Replace BagIcon with <Icon as={ShoppingBag} />",
3628
+ "Import ShoppingBag from @commercetools/nimbus-icons",
3629
+ "Wrap with <Icon> component from @commercetools/nimbus"
3630
+ ],
3631
+ iconWrapper: ICON_WRAPPER
3632
+ },
3633
+ {
3634
+ uiKitName: "BidirectionalArrowIcon",
3635
+ nimbusEquivalent: "Icon",
3636
+ importPath: "@commercetools/nimbus",
3637
+ mappingType: "variant",
3638
+ notes: 'Use <Icon as={SwapHoriz} /> from @commercetools/nimbus-icons. Import: import { SwapHoriz } from "@commercetools/nimbus-icons";',
3639
+ breakingChanges: [
3640
+ "Replace BidirectionalArrowIcon with <Icon as={SwapHoriz} />",
3641
+ "Import SwapHoriz from @commercetools/nimbus-icons",
3642
+ "Wrap with <Icon> component from @commercetools/nimbus"
3643
+ ],
3644
+ iconWrapper: ICON_WRAPPER
3645
+ },
3646
+ {
3647
+ uiKitName: "BinFilledIcon",
3648
+ nimbusEquivalent: "Icon",
3649
+ importPath: "@commercetools/nimbus",
3650
+ mappingType: "variant",
3651
+ notes: 'Use <Icon as={Delete} /> from @commercetools/nimbus-icons. Import: import { Delete } from "@commercetools/nimbus-icons";',
3652
+ breakingChanges: [
3653
+ "Replace BinFilledIcon with <Icon as={Delete} />",
3654
+ "Import Delete from @commercetools/nimbus-icons",
3655
+ "Wrap with <Icon> component from @commercetools/nimbus"
3656
+ ],
3657
+ iconWrapper: ICON_WRAPPER
3658
+ },
3659
+ {
3660
+ uiKitName: "BoxIcon",
3661
+ nimbusEquivalent: "Icon",
3662
+ importPath: "@commercetools/nimbus",
3663
+ mappingType: "variant",
3664
+ notes: 'Use <Icon as={Inventory} /> from @commercetools/nimbus-icons. Import: import { Inventory } from "@commercetools/nimbus-icons";',
3665
+ breakingChanges: [
3666
+ "Replace BoxIcon with <Icon as={Inventory} />",
3667
+ "Import Inventory from @commercetools/nimbus-icons",
3668
+ "Wrap with <Icon> component from @commercetools/nimbus"
3669
+ ],
3670
+ iconWrapper: ICON_WRAPPER
3671
+ },
3672
+ {
3673
+ uiKitName: "BrainIcon",
3674
+ nimbusEquivalent: "Icon",
3675
+ importPath: "@commercetools/nimbus",
3676
+ mappingType: "variant",
3677
+ notes: 'Use <Icon as={Psychology} /> from @commercetools/nimbus-icons. Import: import { Psychology } from "@commercetools/nimbus-icons";',
3678
+ breakingChanges: [
3679
+ "Replace BrainIcon with <Icon as={Psychology} />",
3680
+ "Import Psychology from @commercetools/nimbus-icons",
3681
+ "Wrap with <Icon> component from @commercetools/nimbus"
3682
+ ],
3683
+ iconWrapper: ICON_WRAPPER
3684
+ },
3685
+ {
3686
+ uiKitName: "CalendarIcon",
3687
+ nimbusEquivalent: "Icon",
3688
+ importPath: "@commercetools/nimbus",
3689
+ mappingType: "variant",
3690
+ notes: 'Use <Icon as={CalendarToday} /> from @commercetools/nimbus-icons. Import: import { CalendarToday } from "@commercetools/nimbus-icons";',
3691
+ breakingChanges: [
3692
+ "Replace CalendarIcon with <Icon as={CalendarToday} />",
3693
+ "Import CalendarToday from @commercetools/nimbus-icons",
3694
+ "Wrap with <Icon> component from @commercetools/nimbus"
3695
+ ],
3696
+ iconWrapper: ICON_WRAPPER
3697
+ },
3698
+ {
3699
+ uiKitName: "CameraIcon",
3700
+ nimbusEquivalent: "Icon",
3701
+ importPath: "@commercetools/nimbus",
3702
+ mappingType: "variant",
3703
+ notes: 'Use <Icon as={CameraAlt} /> from @commercetools/nimbus-icons. Import: import { CameraAlt } from "@commercetools/nimbus-icons";',
3704
+ breakingChanges: [
3705
+ "Replace CameraIcon with <Icon as={CameraAlt} />",
3706
+ "Import CameraAlt from @commercetools/nimbus-icons",
3707
+ "Wrap with <Icon> component from @commercetools/nimbus"
3708
+ ],
3709
+ iconWrapper: ICON_WRAPPER
3710
+ },
3711
+ {
3712
+ uiKitName: "CaretDownIcon",
3713
+ nimbusEquivalent: "Icon",
3714
+ importPath: "@commercetools/nimbus",
3715
+ mappingType: "variant",
3716
+ notes: 'Use <Icon as={ArrowDropDown} /> from @commercetools/nimbus-icons. Import: import { ArrowDropDown } from "@commercetools/nimbus-icons";',
3717
+ breakingChanges: [
3718
+ "Replace CaretDownIcon with <Icon as={ArrowDropDown} />",
3719
+ "Import ArrowDropDown from @commercetools/nimbus-icons",
3720
+ "Wrap with <Icon> component from @commercetools/nimbus"
3721
+ ],
3722
+ iconWrapper: ICON_WRAPPER
3723
+ },
3724
+ {
3725
+ uiKitName: "CaretDownSmallIcon",
3726
+ nimbusEquivalent: "Icon",
3727
+ importPath: "@commercetools/nimbus",
3728
+ mappingType: "variant",
3729
+ notes: 'Use <Icon as={ArrowDropDown} /> from @commercetools/nimbus-icons. Import: import { ArrowDropDown } from "@commercetools/nimbus-icons";',
3730
+ breakingChanges: [
3731
+ "Replace CaretDownSmallIcon with <Icon as={ArrowDropDown} />",
3732
+ "Import ArrowDropDown from @commercetools/nimbus-icons",
3733
+ "Wrap with <Icon> component from @commercetools/nimbus"
3734
+ ],
3735
+ iconWrapper: ICON_WRAPPER
3736
+ },
3737
+ {
3738
+ uiKitName: "CaretUpIcon",
3739
+ nimbusEquivalent: "Icon",
3740
+ importPath: "@commercetools/nimbus",
3741
+ mappingType: "variant",
3742
+ notes: 'Use <Icon as={ArrowDropUp} /> from @commercetools/nimbus-icons. Import: import { ArrowDropUp } from "@commercetools/nimbus-icons";',
3743
+ breakingChanges: [
3744
+ "Replace CaretUpIcon with <Icon as={ArrowDropUp} />",
3745
+ "Import ArrowDropUp from @commercetools/nimbus-icons",
3746
+ "Wrap with <Icon> component from @commercetools/nimbus"
3747
+ ],
3748
+ iconWrapper: ICON_WRAPPER
3749
+ },
3750
+ {
3751
+ uiKitName: "CaretUpSmallIcon",
3752
+ nimbusEquivalent: "Icon",
3753
+ importPath: "@commercetools/nimbus",
3754
+ mappingType: "variant",
3755
+ notes: 'Use <Icon as={ArrowDropUp} /> from @commercetools/nimbus-icons. Import: import { ArrowDropUp } from "@commercetools/nimbus-icons";',
3756
+ breakingChanges: [
3757
+ "Replace CaretUpSmallIcon with <Icon as={ArrowDropUp} />",
3758
+ "Import ArrowDropUp from @commercetools/nimbus-icons",
3759
+ "Wrap with <Icon> component from @commercetools/nimbus"
3760
+ ],
3761
+ iconWrapper: ICON_WRAPPER
3762
+ },
3763
+ {
3764
+ uiKitName: "CartIcon",
3765
+ nimbusEquivalent: "Icon",
3766
+ importPath: "@commercetools/nimbus",
3767
+ mappingType: "variant",
3768
+ notes: 'Use <Icon as={ShoppingCart} /> from @commercetools/nimbus-icons. Import: import { ShoppingCart } from "@commercetools/nimbus-icons";',
3769
+ breakingChanges: [
3770
+ "Replace CartIcon with <Icon as={ShoppingCart} />",
3771
+ "Import ShoppingCart from @commercetools/nimbus-icons",
3772
+ "Wrap with <Icon> component from @commercetools/nimbus"
3773
+ ],
3774
+ iconWrapper: ICON_WRAPPER
3775
+ },
3776
+ {
3777
+ uiKitName: "ChainBrokenIcon",
3778
+ nimbusEquivalent: "Icon",
3779
+ importPath: "@commercetools/nimbus",
3780
+ mappingType: "variant",
3781
+ notes: 'Use <Icon as={LinkOff} /> from @commercetools/nimbus-icons. Import: import { LinkOff } from "@commercetools/nimbus-icons";',
3782
+ breakingChanges: [
3783
+ "Replace ChainBrokenIcon with <Icon as={LinkOff} />",
3784
+ "Import LinkOff from @commercetools/nimbus-icons",
3785
+ "Wrap with <Icon> component from @commercetools/nimbus"
3786
+ ],
3787
+ iconWrapper: ICON_WRAPPER
3788
+ },
3789
+ {
3790
+ uiKitName: "ChainIcon",
3791
+ nimbusEquivalent: "Icon",
3792
+ importPath: "@commercetools/nimbus",
3793
+ mappingType: "variant",
3794
+ notes: 'Use <Icon as={Link} /> from @commercetools/nimbus-icons. Import: import { Link } from "@commercetools/nimbus-icons";',
3795
+ breakingChanges: [
3796
+ "Replace ChainIcon with <Icon as={Link} />",
3797
+ "Import Link from @commercetools/nimbus-icons",
3798
+ "Wrap with <Icon> component from @commercetools/nimbus"
3799
+ ],
3800
+ iconWrapper: ICON_WRAPPER
3801
+ },
3802
+ {
3803
+ uiKitName: "CheckActiveIcon",
3804
+ nimbusEquivalent: "Icon",
3805
+ importPath: "@commercetools/nimbus",
3806
+ mappingType: "variant",
3807
+ notes: 'Use <Icon as={CheckCircle} /> from @commercetools/nimbus-icons. Import: import { CheckCircle } from "@commercetools/nimbus-icons";',
3808
+ breakingChanges: [
3809
+ "Replace CheckActiveIcon with <Icon as={CheckCircle} />",
3810
+ "Import CheckCircle from @commercetools/nimbus-icons",
3811
+ "Wrap with <Icon> component from @commercetools/nimbus"
3812
+ ],
3813
+ iconWrapper: ICON_WRAPPER
3814
+ },
3815
+ {
3816
+ uiKitName: "CheckBoldIcon",
3817
+ nimbusEquivalent: "Icon",
3818
+ importPath: "@commercetools/nimbus",
3819
+ mappingType: "variant",
3820
+ notes: 'Use <Icon as={Check} /> from @commercetools/nimbus-icons. Import: import { Check } from "@commercetools/nimbus-icons";',
3821
+ breakingChanges: [
3822
+ "Replace CheckBoldIcon with <Icon as={Check} />",
3823
+ "Import Check from @commercetools/nimbus-icons",
3824
+ "Wrap with <Icon> component from @commercetools/nimbus"
3825
+ ],
3826
+ iconWrapper: ICON_WRAPPER
3827
+ },
3828
+ {
3829
+ uiKitName: "CheckInactiveIcon",
3830
+ nimbusEquivalent: "Icon",
3831
+ importPath: "@commercetools/nimbus",
3832
+ mappingType: "variant",
3833
+ notes: 'Use <Icon as={RadioButtonUnchecked} /> from @commercetools/nimbus-icons. Import: import { RadioButtonUnchecked } from "@commercetools/nimbus-icons";',
3834
+ breakingChanges: [
3835
+ "Replace CheckInactiveIcon with <Icon as={RadioButtonUnchecked} />",
3836
+ "Import RadioButtonUnchecked from @commercetools/nimbus-icons",
3837
+ "Wrap with <Icon> component from @commercetools/nimbus"
3838
+ ],
3839
+ iconWrapper: ICON_WRAPPER
3840
+ },
3841
+ {
3842
+ uiKitName: "CheckThinIcon",
3843
+ nimbusEquivalent: "Icon",
3844
+ importPath: "@commercetools/nimbus",
3845
+ mappingType: "variant",
3846
+ notes: 'Use <Icon as={Done} /> from @commercetools/nimbus-icons. Import: import { Done } from "@commercetools/nimbus-icons";',
3847
+ breakingChanges: [
3848
+ "Replace CheckThinIcon with <Icon as={Done} />",
3849
+ "Import Done from @commercetools/nimbus-icons",
3850
+ "Wrap with <Icon> component from @commercetools/nimbus"
3851
+ ],
3852
+ iconWrapper: ICON_WRAPPER
3853
+ },
3854
+ {
3855
+ uiKitName: "CircleIcon",
3856
+ nimbusEquivalent: "Icon",
3857
+ importPath: "@commercetools/nimbus",
3858
+ mappingType: "variant",
3859
+ notes: 'Use <Icon as={FiberManualRecord} /> from @commercetools/nimbus-icons. Import: import { FiberManualRecord } from "@commercetools/nimbus-icons";',
3860
+ breakingChanges: [
3861
+ "Replace CircleIcon with <Icon as={FiberManualRecord} />",
3862
+ "Import FiberManualRecord from @commercetools/nimbus-icons",
3863
+ "Wrap with <Icon> component from @commercetools/nimbus"
3864
+ ],
3865
+ iconWrapper: ICON_WRAPPER
3866
+ },
3867
+ {
3868
+ uiKitName: "ClipboardIcon",
3869
+ nimbusEquivalent: "Icon",
3870
+ importPath: "@commercetools/nimbus",
3871
+ mappingType: "variant",
3872
+ notes: 'Use <Icon as={ContentPaste} /> from @commercetools/nimbus-icons. Import: import { ContentPaste } from "@commercetools/nimbus-icons";',
3873
+ breakingChanges: [
3874
+ "Replace ClipboardIcon with <Icon as={ContentPaste} />",
3875
+ "Import ContentPaste from @commercetools/nimbus-icons",
3876
+ "Wrap with <Icon> component from @commercetools/nimbus"
3877
+ ],
3878
+ iconWrapper: ICON_WRAPPER
3879
+ },
3880
+ {
3881
+ uiKitName: "ClockIcon",
3882
+ nimbusEquivalent: "Icon",
3883
+ importPath: "@commercetools/nimbus",
3884
+ mappingType: "variant",
3885
+ notes: 'Use <Icon as={Schedule} /> from @commercetools/nimbus-icons. Import: import { Schedule } from "@commercetools/nimbus-icons";',
3886
+ breakingChanges: [
3887
+ "Replace ClockIcon with <Icon as={Schedule} />",
3888
+ "Import Schedule from @commercetools/nimbus-icons",
3889
+ "Wrap with <Icon> component from @commercetools/nimbus"
3890
+ ],
3891
+ iconWrapper: ICON_WRAPPER
3892
+ },
3893
+ {
3894
+ uiKitName: "ClockWithArrowIcon",
3895
+ nimbusEquivalent: "Icon",
3896
+ importPath: "@commercetools/nimbus",
3897
+ mappingType: "variant",
3898
+ notes: 'Use <Icon as={History} /> from @commercetools/nimbus-icons. Import: import { History } from "@commercetools/nimbus-icons";',
3899
+ breakingChanges: [
3900
+ "Replace ClockWithArrowIcon with <Icon as={History} />",
3901
+ "Import History from @commercetools/nimbus-icons",
3902
+ "Wrap with <Icon> component from @commercetools/nimbus"
3903
+ ],
3904
+ iconWrapper: ICON_WRAPPER
3905
+ },
3906
+ {
3907
+ uiKitName: "CloseBoldIcon",
3908
+ nimbusEquivalent: "Icon",
3909
+ importPath: "@commercetools/nimbus",
3910
+ mappingType: "variant",
3911
+ notes: 'Use <Icon as={Close} /> from @commercetools/nimbus-icons. Import: import { Close } from "@commercetools/nimbus-icons";',
3912
+ breakingChanges: [
3913
+ "Replace CloseBoldIcon with <Icon as={Close} />",
3914
+ "Import Close from @commercetools/nimbus-icons",
3915
+ "Wrap with <Icon> component from @commercetools/nimbus"
3916
+ ],
3917
+ iconWrapper: ICON_WRAPPER
3918
+ },
3919
+ {
3920
+ uiKitName: "CloseIcon",
3921
+ nimbusEquivalent: "Icon",
3922
+ importPath: "@commercetools/nimbus",
3923
+ mappingType: "variant",
3924
+ notes: 'Use <Icon as={Close} /> from @commercetools/nimbus-icons. Import: import { Close } from "@commercetools/nimbus-icons";',
3925
+ breakingChanges: [
3926
+ "Replace CloseIcon with <Icon as={Close} />",
3927
+ "Import Close from @commercetools/nimbus-icons",
3928
+ "Wrap with <Icon> component from @commercetools/nimbus"
3929
+ ],
3930
+ iconWrapper: ICON_WRAPPER
3931
+ },
3932
+ {
3933
+ uiKitName: "CodeViewIcon",
3934
+ nimbusEquivalent: "Icon",
3935
+ importPath: "@commercetools/nimbus",
3936
+ mappingType: "variant",
3937
+ notes: 'Use <Icon as={Code} /> from @commercetools/nimbus-icons. Import: import { Code } from "@commercetools/nimbus-icons";',
3938
+ breakingChanges: [
3939
+ "Replace CodeViewIcon with <Icon as={Code} />",
3940
+ "Import Code from @commercetools/nimbus-icons",
3941
+ "Wrap with <Icon> component from @commercetools/nimbus"
3942
+ ],
3943
+ iconWrapper: ICON_WRAPPER
3944
+ },
3945
+ {
3946
+ uiKitName: "CoinsIcon",
3947
+ nimbusEquivalent: "Icon",
3948
+ importPath: "@commercetools/nimbus",
3949
+ mappingType: "variant",
3950
+ notes: 'Use <Icon as={MonetizationOn} /> from @commercetools/nimbus-icons. Import: import { MonetizationOn } from "@commercetools/nimbus-icons";',
3951
+ breakingChanges: [
3952
+ "Replace CoinsIcon with <Icon as={MonetizationOn} />",
3953
+ "Import MonetizationOn from @commercetools/nimbus-icons",
3954
+ "Wrap with <Icon> component from @commercetools/nimbus"
3955
+ ],
3956
+ iconWrapper: ICON_WRAPPER
3957
+ },
3958
+ {
3959
+ uiKitName: "ColumnsIcon",
3960
+ nimbusEquivalent: "Icon",
3961
+ importPath: "@commercetools/nimbus",
3962
+ mappingType: "variant",
3963
+ notes: 'Use <Icon as={ViewColumn} /> from @commercetools/nimbus-icons. Import: import { ViewColumn } from "@commercetools/nimbus-icons";',
3964
+ breakingChanges: [
3965
+ "Replace ColumnsIcon with <Icon as={ViewColumn} />",
3966
+ "Import ViewColumn from @commercetools/nimbus-icons",
3967
+ "Wrap with <Icon> component from @commercetools/nimbus"
3968
+ ],
3969
+ iconWrapper: ICON_WRAPPER
3970
+ },
3971
+ {
3972
+ uiKitName: "ConnectedSquareIcon",
3973
+ nimbusEquivalent: "Icon",
3974
+ importPath: "@commercetools/nimbus",
3975
+ mappingType: "variant",
3976
+ notes: 'Use <Icon as={DeviceHub} /> from @commercetools/nimbus-icons. Import: import { DeviceHub } from "@commercetools/nimbus-icons";',
3977
+ breakingChanges: [
3978
+ "Replace ConnectedSquareIcon with <Icon as={DeviceHub} />",
3979
+ "Import DeviceHub from @commercetools/nimbus-icons",
3980
+ "Wrap with <Icon> component from @commercetools/nimbus"
3981
+ ],
3982
+ iconWrapper: ICON_WRAPPER
3983
+ },
3984
+ {
3985
+ uiKitName: "ConnectedTriangleIcon",
3986
+ nimbusEquivalent: "Icon",
3987
+ importPath: "@commercetools/nimbus",
3988
+ mappingType: "variant",
3989
+ notes: 'Use <Icon as={Share} /> from @commercetools/nimbus-icons. Import: import { Share } from "@commercetools/nimbus-icons";',
3990
+ breakingChanges: [
3991
+ "Replace ConnectedTriangleIcon with <Icon as={Share} />",
3992
+ "Import Share from @commercetools/nimbus-icons",
3993
+ "Wrap with <Icon> component from @commercetools/nimbus"
3994
+ ],
3995
+ iconWrapper: ICON_WRAPPER
3996
+ },
3997
+ {
3998
+ uiKitName: "CopyIcon",
3999
+ nimbusEquivalent: "Icon",
4000
+ importPath: "@commercetools/nimbus",
4001
+ mappingType: "variant",
4002
+ notes: 'Use <Icon as={ContentCopy} /> from @commercetools/nimbus-icons. Import: import { ContentCopy } from "@commercetools/nimbus-icons";',
4003
+ breakingChanges: [
4004
+ "Replace CopyIcon with <Icon as={ContentCopy} />",
4005
+ "Import ContentCopy from @commercetools/nimbus-icons",
4006
+ "Wrap with <Icon> component from @commercetools/nimbus"
4007
+ ],
4008
+ iconWrapper: ICON_WRAPPER
4009
+ },
4010
+ {
4011
+ uiKitName: "CtCheckoutIcon",
4012
+ nimbusEquivalent: "Icon",
4013
+ importPath: "@commercetools/nimbus",
4014
+ mappingType: "variant",
4015
+ notes: 'Use <Icon as={ShoppingCartCheckout} /> from @commercetools/nimbus-icons. Import: import { ShoppingCartCheckout } from "@commercetools/nimbus-icons";',
4016
+ breakingChanges: [
4017
+ "Replace CtCheckoutIcon with <Icon as={ShoppingCartCheckout} />",
4018
+ "Import ShoppingCartCheckout from @commercetools/nimbus-icons",
4019
+ "Wrap with <Icon> component from @commercetools/nimbus"
4020
+ ],
4021
+ iconWrapper: ICON_WRAPPER
4022
+ },
4023
+ {
4024
+ uiKitName: "CubeIcon",
4025
+ nimbusEquivalent: "Icon",
4026
+ importPath: "@commercetools/nimbus",
4027
+ mappingType: "variant",
4028
+ notes: 'Use <Icon as={ViewInAr} /> from @commercetools/nimbus-icons. Import: import { ViewInAr } from "@commercetools/nimbus-icons";',
4029
+ breakingChanges: [
4030
+ "Replace CubeIcon with <Icon as={ViewInAr} />",
4031
+ "Import ViewInAr from @commercetools/nimbus-icons",
4032
+ "Wrap with <Icon> component from @commercetools/nimbus"
4033
+ ],
4034
+ iconWrapper: ICON_WRAPPER
4035
+ },
4036
+ {
4037
+ uiKitName: "CubesIcon",
4038
+ nimbusEquivalent: "Icon",
4039
+ importPath: "@commercetools/nimbus",
4040
+ mappingType: "variant",
4041
+ notes: 'Use <Icon as={Widgets} /> from @commercetools/nimbus-icons. Import: import { Widgets } from "@commercetools/nimbus-icons";',
4042
+ breakingChanges: [
4043
+ "Replace CubesIcon with <Icon as={Widgets} />",
4044
+ "Import Widgets from @commercetools/nimbus-icons",
4045
+ "Wrap with <Icon> component from @commercetools/nimbus"
4046
+ ],
4047
+ iconWrapper: ICON_WRAPPER
4048
+ },
4049
+ {
4050
+ uiKitName: "DiamondIcon",
4051
+ nimbusEquivalent: "Icon",
4052
+ importPath: "@commercetools/nimbus",
4053
+ mappingType: "variant",
4054
+ notes: 'Use <Icon as={Diamond} /> from @commercetools/nimbus-icons. Import: import { Diamond } from "@commercetools/nimbus-icons";',
4055
+ breakingChanges: [
4056
+ "Replace DiamondIcon with <Icon as={Diamond} />",
4057
+ "Import Diamond from @commercetools/nimbus-icons",
4058
+ "Wrap with <Icon> component from @commercetools/nimbus"
4059
+ ],
4060
+ iconWrapper: ICON_WRAPPER
4061
+ },
4062
+ {
4063
+ uiKitName: "DomainIcon",
4064
+ nimbusEquivalent: "Icon",
4065
+ importPath: "@commercetools/nimbus",
4066
+ mappingType: "variant",
4067
+ notes: 'Use <Icon as={Domain} /> from @commercetools/nimbus-icons. Import: import { Domain } from "@commercetools/nimbus-icons";',
4068
+ breakingChanges: [
4069
+ "Replace DomainIcon with <Icon as={Domain} />",
4070
+ "Import Domain from @commercetools/nimbus-icons",
4071
+ "Wrap with <Icon> component from @commercetools/nimbus"
4072
+ ],
4073
+ iconWrapper: ICON_WRAPPER
4074
+ },
4075
+ {
4076
+ uiKitName: "DotIcon",
4077
+ nimbusEquivalent: "Icon",
4078
+ importPath: "@commercetools/nimbus",
4079
+ mappingType: "variant",
4080
+ notes: 'Use <Icon as={FiberManualRecord} /> from @commercetools/nimbus-icons. Import: import { FiberManualRecord } from "@commercetools/nimbus-icons";',
4081
+ breakingChanges: [
4082
+ "Replace DotIcon with <Icon as={FiberManualRecord} />",
4083
+ "Import FiberManualRecord from @commercetools/nimbus-icons",
4084
+ "Wrap with <Icon> component from @commercetools/nimbus"
4085
+ ],
4086
+ iconWrapper: ICON_WRAPPER
4087
+ },
4088
+ {
4089
+ uiKitName: "DownloadIcon",
4090
+ nimbusEquivalent: "Icon",
4091
+ importPath: "@commercetools/nimbus",
4092
+ mappingType: "variant",
4093
+ notes: 'Use <Icon as={Download} /> from @commercetools/nimbus-icons. Import: import { Download } from "@commercetools/nimbus-icons";',
4094
+ breakingChanges: [
4095
+ "Replace DownloadIcon with <Icon as={Download} />",
4096
+ "Import Download from @commercetools/nimbus-icons",
4097
+ "Wrap with <Icon> component from @commercetools/nimbus"
4098
+ ],
4099
+ iconWrapper: ICON_WRAPPER
4100
+ },
4101
+ {
4102
+ uiKitName: "EditIcon",
4103
+ nimbusEquivalent: "Icon",
4104
+ importPath: "@commercetools/nimbus",
4105
+ mappingType: "variant",
4106
+ notes: 'Use <Icon as={Edit} /> from @commercetools/nimbus-icons. Import: import { Edit } from "@commercetools/nimbus-icons";',
4107
+ breakingChanges: [
4108
+ "Replace EditIcon with <Icon as={Edit} />",
4109
+ "Import Edit from @commercetools/nimbus-icons",
4110
+ "Wrap with <Icon> component from @commercetools/nimbus"
4111
+ ],
4112
+ iconWrapper: ICON_WRAPPER
4113
+ },
4114
+ {
4115
+ uiKitName: "ErrorIcon",
4116
+ nimbusEquivalent: "Icon",
4117
+ importPath: "@commercetools/nimbus",
4118
+ mappingType: "variant",
4119
+ notes: 'Use <Icon as={Error} /> from @commercetools/nimbus-icons. Import: import { Error } from "@commercetools/nimbus-icons";',
4120
+ breakingChanges: [
4121
+ "Replace ErrorIcon with <Icon as={Error} />",
4122
+ "Import Error from @commercetools/nimbus-icons",
4123
+ "Wrap with <Icon> component from @commercetools/nimbus"
4124
+ ],
4125
+ iconWrapper: ICON_WRAPPER
4126
+ },
4127
+ {
4128
+ uiKitName: "ExpandIcon",
4129
+ nimbusEquivalent: "Icon",
4130
+ importPath: "@commercetools/nimbus",
4131
+ mappingType: "variant",
4132
+ notes: 'Use <Icon as={OpenInFull} /> from @commercetools/nimbus-icons. Import: import { OpenInFull } from "@commercetools/nimbus-icons";',
4133
+ breakingChanges: [
4134
+ "Replace ExpandIcon with <Icon as={OpenInFull} />",
4135
+ "Import OpenInFull from @commercetools/nimbus-icons",
4136
+ "Wrap with <Icon> component from @commercetools/nimbus"
4137
+ ],
4138
+ iconWrapper: ICON_WRAPPER
4139
+ },
4140
+ {
4141
+ uiKitName: "ExternalLinkIcon",
4142
+ nimbusEquivalent: "Icon",
4143
+ importPath: "@commercetools/nimbus",
4144
+ mappingType: "variant",
4145
+ notes: 'Use <Icon as={OpenInNew} /> from @commercetools/nimbus-icons. Import: import { OpenInNew } from "@commercetools/nimbus-icons";',
4146
+ breakingChanges: [
4147
+ "Replace ExternalLinkIcon with <Icon as={OpenInNew} />",
4148
+ "Import OpenInNew from @commercetools/nimbus-icons",
4149
+ "Wrap with <Icon> component from @commercetools/nimbus"
4150
+ ],
4151
+ iconWrapper: ICON_WRAPPER
4152
+ },
4153
+ {
4154
+ uiKitName: "EyeCrossedIcon",
4155
+ nimbusEquivalent: "Icon",
4156
+ importPath: "@commercetools/nimbus",
4157
+ mappingType: "variant",
4158
+ notes: 'Use <Icon as={VisibilityOff} /> from @commercetools/nimbus-icons. Import: import { VisibilityOff } from "@commercetools/nimbus-icons";',
4159
+ breakingChanges: [
4160
+ "Replace EyeCrossedIcon with <Icon as={VisibilityOff} />",
4161
+ "Import VisibilityOff from @commercetools/nimbus-icons",
4162
+ "Wrap with <Icon> component from @commercetools/nimbus"
4163
+ ],
4164
+ iconWrapper: ICON_WRAPPER
4165
+ },
4166
+ {
4167
+ uiKitName: "EyeIcon",
4168
+ nimbusEquivalent: "Icon",
4169
+ importPath: "@commercetools/nimbus",
4170
+ mappingType: "variant",
4171
+ notes: 'Use <Icon as={Visibility} /> from @commercetools/nimbus-icons. Import: import { Visibility } from "@commercetools/nimbus-icons";',
4172
+ breakingChanges: [
4173
+ "Replace EyeIcon with <Icon as={Visibility} />",
4174
+ "Import Visibility from @commercetools/nimbus-icons",
4175
+ "Wrap with <Icon> component from @commercetools/nimbus"
4176
+ ],
4177
+ iconWrapper: ICON_WRAPPER
4178
+ },
4179
+ {
4180
+ uiKitName: "FilterAndListIcon",
4181
+ nimbusEquivalent: "Icon",
4182
+ importPath: "@commercetools/nimbus",
4183
+ mappingType: "variant",
4184
+ notes: 'Use <Icon as={FilterList} /> from @commercetools/nimbus-icons. Import: import { FilterList } from "@commercetools/nimbus-icons";',
4185
+ breakingChanges: [
4186
+ "Replace FilterAndListIcon with <Icon as={FilterList} />",
4187
+ "Import FilterList from @commercetools/nimbus-icons",
4188
+ "Wrap with <Icon> component from @commercetools/nimbus"
4189
+ ],
4190
+ iconWrapper: ICON_WRAPPER
4191
+ },
4192
+ {
4193
+ uiKitName: "FilterIcon",
4194
+ nimbusEquivalent: "Icon",
4195
+ importPath: "@commercetools/nimbus",
4196
+ mappingType: "variant",
4197
+ notes: 'Use <Icon as={FilterAlt} /> from @commercetools/nimbus-icons. Import: import { FilterAlt } from "@commercetools/nimbus-icons";',
4198
+ breakingChanges: [
4199
+ "Replace FilterIcon with <Icon as={FilterAlt} />",
4200
+ "Import FilterAlt from @commercetools/nimbus-icons",
4201
+ "Wrap with <Icon> component from @commercetools/nimbus"
4202
+ ],
4203
+ iconWrapper: ICON_WRAPPER
4204
+ },
4205
+ {
4206
+ uiKitName: "FlagFilledIcon",
4207
+ nimbusEquivalent: "Icon",
4208
+ importPath: "@commercetools/nimbus",
4209
+ mappingType: "variant",
4210
+ notes: 'Use <Icon as={Flag} /> from @commercetools/nimbus-icons. Import: import { Flag } from "@commercetools/nimbus-icons";',
4211
+ breakingChanges: [
4212
+ "Replace FlagFilledIcon with <Icon as={Flag} />",
4213
+ "Import Flag from @commercetools/nimbus-icons",
4214
+ "Wrap with <Icon> component from @commercetools/nimbus"
4215
+ ],
4216
+ iconWrapper: ICON_WRAPPER
4217
+ },
4218
+ {
4219
+ uiKitName: "FlagLinearIcon",
4220
+ nimbusEquivalent: "Icon",
4221
+ importPath: "@commercetools/nimbus",
4222
+ mappingType: "variant",
4223
+ notes: 'Use <Icon as={OutlinedFlag} /> from @commercetools/nimbus-icons. Import: import { OutlinedFlag } from "@commercetools/nimbus-icons";',
4224
+ breakingChanges: [
4225
+ "Replace FlagLinearIcon with <Icon as={OutlinedFlag} />",
4226
+ "Import OutlinedFlag from @commercetools/nimbus-icons",
4227
+ "Wrap with <Icon> component from @commercetools/nimbus"
4228
+ ],
4229
+ iconWrapper: ICON_WRAPPER
4230
+ },
4231
+ {
4232
+ uiKitName: "FlameIcon",
4233
+ nimbusEquivalent: "Icon",
4234
+ importPath: "@commercetools/nimbus",
4235
+ mappingType: "variant",
4236
+ notes: 'Use <Icon as={Whatshot} /> from @commercetools/nimbus-icons. Import: import { Whatshot } from "@commercetools/nimbus-icons";',
4237
+ breakingChanges: [
4238
+ "Replace FlameIcon with <Icon as={Whatshot} />",
4239
+ "Import Whatshot from @commercetools/nimbus-icons",
4240
+ "Wrap with <Icon> component from @commercetools/nimbus"
4241
+ ],
4242
+ iconWrapper: ICON_WRAPPER
4243
+ },
4244
+ {
4245
+ uiKitName: "FractionDigitsIcon",
4246
+ nimbusEquivalent: "Icon",
4247
+ importPath: "@commercetools/nimbus",
4248
+ mappingType: "variant",
4249
+ notes: 'Use <Icon as={Svg123} /> from @commercetools/nimbus-icons. Import: import { Svg123 } from "@commercetools/nimbus-icons";',
4250
+ breakingChanges: [
4251
+ "Replace FractionDigitsIcon with <Icon as={Svg123} />",
4252
+ "Import Svg123 from @commercetools/nimbus-icons",
4253
+ "Wrap with <Icon> component from @commercetools/nimbus"
4254
+ ],
4255
+ iconWrapper: ICON_WRAPPER
4256
+ },
4257
+ {
4258
+ uiKitName: "FrontendStudioIcon",
4259
+ nimbusEquivalent: "Icon",
4260
+ importPath: "@commercetools/nimbus",
4261
+ mappingType: "variant",
4262
+ notes: 'Use <Icon as={Web} /> from @commercetools/nimbus-icons. Import: import { Web } from "@commercetools/nimbus-icons";',
4263
+ breakingChanges: [
4264
+ "Replace FrontendStudioIcon with <Icon as={Web} />",
4265
+ "Import Web from @commercetools/nimbus-icons",
4266
+ "Wrap with <Icon> component from @commercetools/nimbus"
4267
+ ],
4268
+ iconWrapper: ICON_WRAPPER
4269
+ },
4270
+ {
4271
+ uiKitName: "GearIcon",
4272
+ nimbusEquivalent: "Icon",
4273
+ importPath: "@commercetools/nimbus",
4274
+ mappingType: "variant",
4275
+ notes: 'Use <Icon as={Settings} /> from @commercetools/nimbus-icons. Import: import { Settings } from "@commercetools/nimbus-icons";',
4276
+ breakingChanges: [
4277
+ "Replace GearIcon with <Icon as={Settings} />",
4278
+ "Import Settings from @commercetools/nimbus-icons",
4279
+ "Wrap with <Icon> component from @commercetools/nimbus"
4280
+ ],
4281
+ iconWrapper: ICON_WRAPPER
4282
+ },
4283
+ {
4284
+ uiKitName: "GraduationCapIcon",
4285
+ nimbusEquivalent: "Icon",
4286
+ importPath: "@commercetools/nimbus",
4287
+ mappingType: "variant",
4288
+ notes: 'Use <Icon as={School} /> from @commercetools/nimbus-icons. Import: import { School } from "@commercetools/nimbus-icons";',
4289
+ breakingChanges: [
4290
+ "Replace GraduationCapIcon with <Icon as={School} />",
4291
+ "Import School from @commercetools/nimbus-icons",
4292
+ "Wrap with <Icon> component from @commercetools/nimbus"
4293
+ ],
4294
+ iconWrapper: ICON_WRAPPER
4295
+ },
4296
+ {
4297
+ uiKitName: "GraphIcon",
4298
+ nimbusEquivalent: "Icon",
4299
+ importPath: "@commercetools/nimbus",
4300
+ mappingType: "variant",
4301
+ notes: 'Use <Icon as={Analytics} /> from @commercetools/nimbus-icons. Import: import { Analytics } from "@commercetools/nimbus-icons";',
4302
+ breakingChanges: [
4303
+ "Replace GraphIcon with <Icon as={Analytics} />",
4304
+ "Import Analytics from @commercetools/nimbus-icons",
4305
+ "Wrap with <Icon> component from @commercetools/nimbus"
4306
+ ],
4307
+ iconWrapper: ICON_WRAPPER
4308
+ },
4309
+ {
4310
+ uiKitName: "GridIcon",
4311
+ nimbusEquivalent: "Icon",
4312
+ importPath: "@commercetools/nimbus",
4313
+ mappingType: "variant",
4314
+ notes: 'Use <Icon as={GridView} /> from @commercetools/nimbus-icons. Import: import { GridView } from "@commercetools/nimbus-icons";',
4315
+ breakingChanges: [
4316
+ "Replace GridIcon with <Icon as={GridView} />",
4317
+ "Import GridView from @commercetools/nimbus-icons",
4318
+ "Wrap with <Icon> component from @commercetools/nimbus"
4319
+ ],
4320
+ iconWrapper: ICON_WRAPPER
4321
+ },
4322
+ {
4323
+ uiKitName: "GroupAddIcon",
4324
+ nimbusEquivalent: "Icon",
4325
+ importPath: "@commercetools/nimbus",
4326
+ mappingType: "variant",
4327
+ notes: 'Use <Icon as={GroupAdd} /> from @commercetools/nimbus-icons. Import: import { GroupAdd } from "@commercetools/nimbus-icons";',
4328
+ breakingChanges: [
4329
+ "Replace GroupAddIcon with <Icon as={GroupAdd} />",
4330
+ "Import GroupAdd from @commercetools/nimbus-icons",
4331
+ "Wrap with <Icon> component from @commercetools/nimbus"
4332
+ ],
4333
+ iconWrapper: ICON_WRAPPER
4334
+ },
4335
+ {
4336
+ uiKitName: "HeartIcon",
4337
+ nimbusEquivalent: "Icon",
4338
+ importPath: "@commercetools/nimbus",
4339
+ mappingType: "variant",
4340
+ notes: 'Use <Icon as={Favorite} /> from @commercetools/nimbus-icons. Import: import { Favorite } from "@commercetools/nimbus-icons";',
4341
+ breakingChanges: [
4342
+ "Replace HeartIcon with <Icon as={Favorite} />",
4343
+ "Import Favorite from @commercetools/nimbus-icons",
4344
+ "Wrap with <Icon> component from @commercetools/nimbus"
4345
+ ],
4346
+ iconWrapper: ICON_WRAPPER
4347
+ },
4348
+ {
4349
+ uiKitName: "HomeIcon",
4350
+ nimbusEquivalent: "Icon",
4351
+ importPath: "@commercetools/nimbus",
4352
+ mappingType: "variant",
4353
+ notes: 'Use <Icon as={Home} /> from @commercetools/nimbus-icons. Import: import { Home } from "@commercetools/nimbus-icons";',
4354
+ breakingChanges: [
4355
+ "Replace HomeIcon with <Icon as={Home} />",
4356
+ "Import Home from @commercetools/nimbus-icons",
4357
+ "Wrap with <Icon> component from @commercetools/nimbus"
4358
+ ],
4359
+ iconWrapper: ICON_WRAPPER
4360
+ },
4361
+ {
4362
+ uiKitName: "HubIcon",
4363
+ nimbusEquivalent: "Icon",
4364
+ importPath: "@commercetools/nimbus",
4365
+ mappingType: "variant",
4366
+ notes: 'Use <Icon as={Hub} /> from @commercetools/nimbus-icons. Import: import { Hub } from "@commercetools/nimbus-icons";',
4367
+ breakingChanges: [
4368
+ "Replace HubIcon with <Icon as={Hub} />",
4369
+ "Import Hub from @commercetools/nimbus-icons",
4370
+ "Wrap with <Icon> component from @commercetools/nimbus"
4371
+ ],
4372
+ iconWrapper: ICON_WRAPPER
4373
+ },
4374
+ {
4375
+ uiKitName: "InfoIcon",
4376
+ nimbusEquivalent: "Icon",
4377
+ importPath: "@commercetools/nimbus",
4378
+ mappingType: "variant",
4379
+ notes: 'Use <Icon as={Info} /> from @commercetools/nimbus-icons. Import: import { Info } from "@commercetools/nimbus-icons";',
4380
+ breakingChanges: [
4381
+ "Replace InfoIcon with <Icon as={Info} />",
4382
+ "Import Info from @commercetools/nimbus-icons",
4383
+ "Wrap with <Icon> component from @commercetools/nimbus"
4384
+ ],
4385
+ iconWrapper: ICON_WRAPPER
4386
+ },
4387
+ {
4388
+ uiKitName: "LayersIcon",
4389
+ nimbusEquivalent: "Icon",
4390
+ importPath: "@commercetools/nimbus",
4391
+ mappingType: "variant",
4392
+ notes: 'Use <Icon as={Layers} /> from @commercetools/nimbus-icons. Import: import { Layers } from "@commercetools/nimbus-icons";',
4393
+ breakingChanges: [
4394
+ "Replace LayersIcon with <Icon as={Layers} />",
4395
+ "Import Layers from @commercetools/nimbus-icons",
4396
+ "Wrap with <Icon> component from @commercetools/nimbus"
4397
+ ],
4398
+ iconWrapper: ICON_WRAPPER
4399
+ },
4400
+ {
4401
+ uiKitName: "ListIcon",
4402
+ nimbusEquivalent: "Icon",
4403
+ importPath: "@commercetools/nimbus",
4404
+ mappingType: "variant",
4405
+ notes: 'Use <Icon as={List} /> from @commercetools/nimbus-icons. Import: import { List } from "@commercetools/nimbus-icons";',
4406
+ breakingChanges: [
4407
+ "Replace ListIcon with <Icon as={List} />",
4408
+ "Import List from @commercetools/nimbus-icons",
4409
+ "Wrap with <Icon> component from @commercetools/nimbus"
4410
+ ],
4411
+ iconWrapper: ICON_WRAPPER
4412
+ },
4413
+ {
4414
+ uiKitName: "ListWithSearchIcon",
4415
+ nimbusEquivalent: "Icon",
4416
+ importPath: "@commercetools/nimbus",
4417
+ mappingType: "variant",
4418
+ notes: 'Use <Icon as={ManageSearch} /> from @commercetools/nimbus-icons. Import: import { ManageSearch } from "@commercetools/nimbus-icons";',
4419
+ breakingChanges: [
4420
+ "Replace ListWithSearchIcon with <Icon as={ManageSearch} />",
4421
+ "Import ManageSearch from @commercetools/nimbus-icons",
4422
+ "Wrap with <Icon> component from @commercetools/nimbus"
4423
+ ],
4424
+ iconWrapper: ICON_WRAPPER
4425
+ },
4426
+ {
4427
+ uiKitName: "LocationIcon",
4428
+ nimbusEquivalent: "Icon",
4429
+ importPath: "@commercetools/nimbus",
4430
+ mappingType: "variant",
4431
+ notes: 'Use <Icon as={Place} /> from @commercetools/nimbus-icons. Import: import { Place } from "@commercetools/nimbus-icons";',
4432
+ breakingChanges: [
4433
+ "Replace LocationIcon with <Icon as={Place} />",
4434
+ "Import Place from @commercetools/nimbus-icons",
4435
+ "Wrap with <Icon> component from @commercetools/nimbus"
4436
+ ],
4437
+ iconWrapper: ICON_WRAPPER
4438
+ },
4439
+ {
4440
+ uiKitName: "LockIcon",
4441
+ nimbusEquivalent: "Icon",
4442
+ importPath: "@commercetools/nimbus",
4443
+ mappingType: "variant",
4444
+ notes: 'Use <Icon as={Lock} /> from @commercetools/nimbus-icons. Import: import { Lock } from "@commercetools/nimbus-icons";',
4445
+ breakingChanges: [
4446
+ "Replace LockIcon with <Icon as={Lock} />",
4447
+ "Import Lock from @commercetools/nimbus-icons",
4448
+ "Wrap with <Icon> component from @commercetools/nimbus"
4449
+ ],
4450
+ iconWrapper: ICON_WRAPPER
4451
+ },
4452
+ {
4453
+ uiKitName: "LogoutIcon",
4454
+ nimbusEquivalent: "Icon",
4455
+ importPath: "@commercetools/nimbus",
4456
+ mappingType: "variant",
4457
+ notes: 'Use <Icon as={Logout} /> from @commercetools/nimbus-icons. Import: import { Logout } from "@commercetools/nimbus-icons";',
4458
+ breakingChanges: [
4459
+ "Replace LogoutIcon with <Icon as={Logout} />",
4460
+ "Import Logout from @commercetools/nimbus-icons",
4461
+ "Wrap with <Icon> component from @commercetools/nimbus"
4462
+ ],
4463
+ iconWrapper: ICON_WRAPPER
4464
+ },
4465
+ {
4466
+ uiKitName: "MailIcon",
4467
+ nimbusEquivalent: "Icon",
4468
+ importPath: "@commercetools/nimbus",
4469
+ mappingType: "variant",
4470
+ notes: 'Use <Icon as={Mail} /> from @commercetools/nimbus-icons. Import: import { Mail } from "@commercetools/nimbus-icons";',
4471
+ breakingChanges: [
4472
+ "Replace MailIcon with <Icon as={Mail} />",
4473
+ "Import Mail from @commercetools/nimbus-icons",
4474
+ "Wrap with <Icon> component from @commercetools/nimbus"
4475
+ ],
4476
+ iconWrapper: ICON_WRAPPER
4477
+ },
4478
+ {
4479
+ uiKitName: "MinimizeIcon",
4480
+ nimbusEquivalent: "Icon",
4481
+ importPath: "@commercetools/nimbus",
4482
+ mappingType: "variant",
4483
+ notes: 'Use <Icon as={CloseFullscreen} /> from @commercetools/nimbus-icons. Import: import { CloseFullscreen } from "@commercetools/nimbus-icons";',
4484
+ breakingChanges: [
4485
+ "Replace MinimizeIcon with <Icon as={CloseFullscreen} />",
4486
+ "Import CloseFullscreen from @commercetools/nimbus-icons",
4487
+ "Wrap with <Icon> component from @commercetools/nimbus"
4488
+ ],
4489
+ iconWrapper: ICON_WRAPPER
4490
+ },
4491
+ {
4492
+ uiKitName: "NestedViewIcon",
4493
+ nimbusEquivalent: "Icon",
4494
+ importPath: "@commercetools/nimbus",
4495
+ mappingType: "variant",
4496
+ notes: 'Use <Icon as={AccountTree} /> from @commercetools/nimbus-icons. Import: import { AccountTree } from "@commercetools/nimbus-icons";',
4497
+ breakingChanges: [
4498
+ "Replace NestedViewIcon with <Icon as={AccountTree} />",
4499
+ "Import AccountTree from @commercetools/nimbus-icons",
4500
+ "Wrap with <Icon> component from @commercetools/nimbus"
4501
+ ],
4502
+ iconWrapper: ICON_WRAPPER
4503
+ },
4504
+ {
4505
+ uiKitName: "OperationsIcon",
4506
+ nimbusEquivalent: "Icon",
4507
+ importPath: "@commercetools/nimbus",
4508
+ mappingType: "variant",
4509
+ notes: 'Use <Icon as={Engineering} /> from @commercetools/nimbus-icons. Import: import { Engineering } from "@commercetools/nimbus-icons";',
4510
+ breakingChanges: [
4511
+ "Replace OperationsIcon with <Icon as={Engineering} />",
4512
+ "Import Engineering from @commercetools/nimbus-icons",
4513
+ "Wrap with <Icon> component from @commercetools/nimbus"
4514
+ ],
4515
+ iconWrapper: ICON_WRAPPER
4516
+ },
4517
+ {
4518
+ uiKitName: "PageGearIcon",
4519
+ nimbusEquivalent: "Icon",
4520
+ importPath: "@commercetools/nimbus",
4521
+ mappingType: "variant",
4522
+ notes: 'Use <Icon as={SettingsApplications} /> from @commercetools/nimbus-icons. Import: import { SettingsApplications } from "@commercetools/nimbus-icons";',
4523
+ breakingChanges: [
4524
+ "Replace PageGearIcon with <Icon as={SettingsApplications} />",
4525
+ "Import SettingsApplications from @commercetools/nimbus-icons",
4526
+ "Wrap with <Icon> component from @commercetools/nimbus"
4527
+ ],
4528
+ iconWrapper: ICON_WRAPPER
4529
+ },
4530
+ {
4531
+ uiKitName: "PagesIcon",
4532
+ nimbusEquivalent: "Icon",
4533
+ importPath: "@commercetools/nimbus",
4534
+ mappingType: "variant",
4535
+ notes: 'Use <Icon as={Pages} /> from @commercetools/nimbus-icons. Import: import { Pages } from "@commercetools/nimbus-icons";',
4536
+ breakingChanges: [
4537
+ "Replace PagesIcon with <Icon as={Pages} />",
4538
+ "Import Pages from @commercetools/nimbus-icons",
4539
+ "Wrap with <Icon> component from @commercetools/nimbus"
4540
+ ],
4541
+ iconWrapper: ICON_WRAPPER
4542
+ },
4543
+ {
4544
+ uiKitName: "PaidIcon",
4545
+ nimbusEquivalent: "Icon",
4546
+ importPath: "@commercetools/nimbus",
4547
+ mappingType: "variant",
4548
+ notes: 'Use <Icon as={Paid} /> from @commercetools/nimbus-icons. Import: import { Paid } from "@commercetools/nimbus-icons";',
4549
+ breakingChanges: [
4550
+ "Replace PaidIcon with <Icon as={Paid} />",
4551
+ "Import Paid from @commercetools/nimbus-icons",
4552
+ "Wrap with <Icon> component from @commercetools/nimbus"
4553
+ ],
4554
+ iconWrapper: ICON_WRAPPER
4555
+ },
4556
+ {
4557
+ uiKitName: "PaperBillInvertedIcon",
4558
+ nimbusEquivalent: "Icon",
4559
+ importPath: "@commercetools/nimbus",
4560
+ mappingType: "variant",
4561
+ notes: 'Use <Icon as={Receipt} /> from @commercetools/nimbus-icons. Import: import { Receipt } from "@commercetools/nimbus-icons";',
4562
+ breakingChanges: [
4563
+ "Replace PaperBillInvertedIcon with <Icon as={Receipt} />",
4564
+ "Import Receipt from @commercetools/nimbus-icons",
4565
+ "Wrap with <Icon> component from @commercetools/nimbus"
4566
+ ],
4567
+ iconWrapper: ICON_WRAPPER
4568
+ },
4569
+ {
4570
+ uiKitName: "PaperclipIcon",
4571
+ nimbusEquivalent: "Icon",
4572
+ importPath: "@commercetools/nimbus",
4573
+ mappingType: "variant",
4574
+ notes: 'Use <Icon as={AttachFile} /> from @commercetools/nimbus-icons. Import: import { AttachFile } from "@commercetools/nimbus-icons";',
4575
+ breakingChanges: [
4576
+ "Replace PaperclipIcon with <Icon as={AttachFile} />",
4577
+ "Import AttachFile from @commercetools/nimbus-icons",
4578
+ "Wrap with <Icon> component from @commercetools/nimbus"
4579
+ ],
4580
+ iconWrapper: ICON_WRAPPER
4581
+ },
4582
+ {
4583
+ uiKitName: "PinFilledIcon",
4584
+ nimbusEquivalent: "Icon",
4585
+ importPath: "@commercetools/nimbus",
4586
+ mappingType: "variant",
4587
+ notes: 'Use <Icon as={PushPin} /> from @commercetools/nimbus-icons. Import: import { PushPin } from "@commercetools/nimbus-icons";',
4588
+ breakingChanges: [
4589
+ "Replace PinFilledIcon with <Icon as={PushPin} />",
4590
+ "Import PushPin from @commercetools/nimbus-icons",
4591
+ "Wrap with <Icon> component from @commercetools/nimbus"
4592
+ ],
4593
+ iconWrapper: ICON_WRAPPER
4594
+ },
4595
+ {
4596
+ uiKitName: "PinLinearIcon",
4597
+ nimbusEquivalent: "Icon",
4598
+ importPath: "@commercetools/nimbus",
4599
+ mappingType: "variant",
4600
+ notes: 'Use <Icon as={PushPin} /> from @commercetools/nimbus-icons. Import: import { PushPin } from "@commercetools/nimbus-icons";',
4601
+ breakingChanges: [
4602
+ "Replace PinLinearIcon with <Icon as={PushPin} />",
4603
+ "Import PushPin from @commercetools/nimbus-icons",
4604
+ "Wrap with <Icon> component from @commercetools/nimbus"
4605
+ ],
4606
+ iconWrapper: ICON_WRAPPER
4607
+ },
4608
+ {
4609
+ uiKitName: "PluginIcon",
4610
+ nimbusEquivalent: "Icon",
4611
+ importPath: "@commercetools/nimbus",
4612
+ mappingType: "variant",
4613
+ notes: 'Use <Icon as={Extension} /> from @commercetools/nimbus-icons. Import: import { Extension } from "@commercetools/nimbus-icons";',
4614
+ breakingChanges: [
4615
+ "Replace PluginIcon with <Icon as={Extension} />",
4616
+ "Import Extension from @commercetools/nimbus-icons",
4617
+ "Wrap with <Icon> component from @commercetools/nimbus"
4618
+ ],
4619
+ iconWrapper: ICON_WRAPPER
4620
+ },
4621
+ {
4622
+ uiKitName: "PlusThinIcon",
4623
+ nimbusEquivalent: "Icon",
4624
+ importPath: "@commercetools/nimbus",
4625
+ mappingType: "variant",
4626
+ notes: 'Use <Icon as={Add} /> from @commercetools/nimbus-icons. Import: import { Add } from "@commercetools/nimbus-icons";',
4627
+ breakingChanges: [
4628
+ "Replace PlusThinIcon with <Icon as={Add} />",
4629
+ "Import Add from @commercetools/nimbus-icons",
4630
+ "Wrap with <Icon> component from @commercetools/nimbus"
4631
+ ],
4632
+ iconWrapper: ICON_WRAPPER
4633
+ },
4634
+ {
4635
+ uiKitName: "PrivacyPolicyIcon",
4636
+ nimbusEquivalent: "Icon",
4637
+ importPath: "@commercetools/nimbus",
4638
+ mappingType: "variant",
4639
+ notes: 'Use <Icon as={Policy} /> from @commercetools/nimbus-icons. Import: import { Policy } from "@commercetools/nimbus-icons";',
4640
+ breakingChanges: [
4641
+ "Replace PrivacyPolicyIcon with <Icon as={Policy} />",
4642
+ "Import Policy from @commercetools/nimbus-icons",
4643
+ "Wrap with <Icon> component from @commercetools/nimbus"
4644
+ ],
4645
+ iconWrapper: ICON_WRAPPER
4646
+ },
4647
+ {
4648
+ uiKitName: "RestoreIcon",
4649
+ nimbusEquivalent: "Icon",
4650
+ importPath: "@commercetools/nimbus",
4651
+ mappingType: "variant",
4652
+ notes: 'Use <Icon as={SettingsBackupRestore} /> from @commercetools/nimbus-icons. Import: import { SettingsBackupRestore } from "@commercetools/nimbus-icons";',
4653
+ breakingChanges: [
4654
+ "Replace RestoreIcon with <Icon as={SettingsBackupRestore} />",
4655
+ "Import SettingsBackupRestore from @commercetools/nimbus-icons",
4656
+ "Wrap with <Icon> component from @commercetools/nimbus"
4657
+ ],
4658
+ iconWrapper: ICON_WRAPPER
4659
+ },
4660
+ {
4661
+ uiKitName: "ReviewIcon",
4662
+ nimbusEquivalent: "Icon",
4663
+ importPath: "@commercetools/nimbus",
4664
+ mappingType: "variant",
4665
+ notes: 'Use <Icon as={RateReview} /> from @commercetools/nimbus-icons. Import: import { RateReview } from "@commercetools/nimbus-icons";',
4666
+ breakingChanges: [
4667
+ "Replace ReviewIcon with <Icon as={RateReview} />",
4668
+ "Import RateReview from @commercetools/nimbus-icons",
4669
+ "Wrap with <Icon> component from @commercetools/nimbus"
4670
+ ],
4671
+ iconWrapper: ICON_WRAPPER
4672
+ },
4673
+ {
4674
+ uiKitName: "RightTriangleFilledIcon",
4675
+ nimbusEquivalent: "Icon",
4676
+ importPath: "@commercetools/nimbus",
4677
+ mappingType: "variant",
4678
+ notes: 'Use <Icon as={PlayArrow} /> from @commercetools/nimbus-icons. Import: import { PlayArrow } from "@commercetools/nimbus-icons";',
4679
+ breakingChanges: [
4680
+ "Replace RightTriangleFilledIcon with <Icon as={PlayArrow} />",
4681
+ "Import PlayArrow from @commercetools/nimbus-icons",
4682
+ "Wrap with <Icon> component from @commercetools/nimbus"
4683
+ ],
4684
+ iconWrapper: ICON_WRAPPER
4685
+ },
4686
+ {
4687
+ uiKitName: "RightTriangleLinearIcon",
4688
+ nimbusEquivalent: "Icon",
4689
+ importPath: "@commercetools/nimbus",
4690
+ mappingType: "variant",
4691
+ notes: 'Use <Icon as={PlayCircleOutline} /> from @commercetools/nimbus-icons. Import: import { PlayCircleOutline } from "@commercetools/nimbus-icons";',
4692
+ breakingChanges: [
4693
+ "Replace RightTriangleLinearIcon with <Icon as={PlayCircleOutline} />",
4694
+ "Import PlayCircleOutline from @commercetools/nimbus-icons",
4695
+ "Wrap with <Icon> component from @commercetools/nimbus"
4696
+ ],
4697
+ iconWrapper: ICON_WRAPPER
4698
+ },
4699
+ {
4700
+ uiKitName: "RocketIcon",
4701
+ nimbusEquivalent: "Icon",
4702
+ importPath: "@commercetools/nimbus",
4703
+ mappingType: "variant",
4704
+ notes: 'Use <Icon as={RocketLaunch} /> from @commercetools/nimbus-icons. Import: import { RocketLaunch } from "@commercetools/nimbus-icons";',
4705
+ breakingChanges: [
4706
+ "Replace RocketIcon with <Icon as={RocketLaunch} />",
4707
+ "Import RocketLaunch from @commercetools/nimbus-icons",
4708
+ "Wrap with <Icon> component from @commercetools/nimbus"
4709
+ ],
4710
+ iconWrapper: ICON_WRAPPER
4711
+ },
4712
+ {
4713
+ uiKitName: "ScreenGearIcon",
4714
+ nimbusEquivalent: "Icon",
4715
+ importPath: "@commercetools/nimbus",
4716
+ mappingType: "variant",
4717
+ notes: 'Use <Icon as={DisplaySettings} /> from @commercetools/nimbus-icons. Import: import { DisplaySettings } from "@commercetools/nimbus-icons";',
4718
+ breakingChanges: [
4719
+ "Replace ScreenGearIcon with <Icon as={DisplaySettings} />",
4720
+ "Import DisplaySettings from @commercetools/nimbus-icons",
4721
+ "Wrap with <Icon> component from @commercetools/nimbus"
4722
+ ],
4723
+ iconWrapper: ICON_WRAPPER
4724
+ },
4725
+ {
4726
+ uiKitName: "ScreenUserIcon",
4727
+ nimbusEquivalent: "Icon",
4728
+ importPath: "@commercetools/nimbus",
4729
+ mappingType: "variant",
4730
+ notes: 'Use <Icon as={PersonalVideo} /> from @commercetools/nimbus-icons. Import: import { PersonalVideo } from "@commercetools/nimbus-icons";',
4731
+ breakingChanges: [
4732
+ "Replace ScreenUserIcon with <Icon as={PersonalVideo} />",
4733
+ "Import PersonalVideo from @commercetools/nimbus-icons",
4734
+ "Wrap with <Icon> component from @commercetools/nimbus"
4735
+ ],
4736
+ iconWrapper: ICON_WRAPPER
4737
+ },
4738
+ {
4739
+ uiKitName: "SdkIcon",
4740
+ nimbusEquivalent: "Icon",
4741
+ importPath: "@commercetools/nimbus",
4742
+ mappingType: "variant",
4743
+ notes: 'Use <Icon as={Terminal} /> from @commercetools/nimbus-icons. Import: import { Terminal } from "@commercetools/nimbus-icons";',
4744
+ breakingChanges: [
4745
+ "Replace SdkIcon with <Icon as={Terminal} />",
4746
+ "Import Terminal from @commercetools/nimbus-icons",
4747
+ "Wrap with <Icon> component from @commercetools/nimbus"
4748
+ ],
4749
+ iconWrapper: ICON_WRAPPER
4750
+ },
4751
+ {
4752
+ uiKitName: "SidebarCollapseIcon",
4753
+ nimbusEquivalent: "Icon",
4754
+ importPath: "@commercetools/nimbus",
4755
+ mappingType: "variant",
4756
+ notes: 'Use <Icon as={MenuOpen} /> from @commercetools/nimbus-icons. Import: import { MenuOpen } from "@commercetools/nimbus-icons";',
4757
+ breakingChanges: [
4758
+ "Replace SidebarCollapseIcon with <Icon as={MenuOpen} />",
4759
+ "Import MenuOpen from @commercetools/nimbus-icons",
4760
+ "Wrap with <Icon> component from @commercetools/nimbus"
4761
+ ],
4762
+ iconWrapper: ICON_WRAPPER
4763
+ },
4764
+ {
4765
+ uiKitName: "SidebarExpandIcon",
4766
+ nimbusEquivalent: "Icon",
4767
+ importPath: "@commercetools/nimbus",
4768
+ mappingType: "variant",
4769
+ notes: 'Use <Icon as={Menu} /> from @commercetools/nimbus-icons. Import: import { Menu } from "@commercetools/nimbus-icons";',
4770
+ breakingChanges: [
4771
+ "Replace SidebarExpandIcon with <Icon as={Menu} />",
4772
+ "Import Menu from @commercetools/nimbus-icons",
4773
+ "Wrap with <Icon> component from @commercetools/nimbus"
4774
+ ],
4775
+ iconWrapper: ICON_WRAPPER
4776
+ },
4777
+ {
4778
+ uiKitName: "SortingIcon",
4779
+ nimbusEquivalent: "Icon",
4780
+ importPath: "@commercetools/nimbus",
4781
+ mappingType: "variant",
4782
+ notes: 'Use <Icon as={SwapVert} /> from @commercetools/nimbus-icons. Import: import { SwapVert } from "@commercetools/nimbus-icons";',
4783
+ breakingChanges: [
4784
+ "Replace SortingIcon with <Icon as={SwapVert} />",
4785
+ "Import SwapVert from @commercetools/nimbus-icons",
4786
+ "Wrap with <Icon> component from @commercetools/nimbus"
4787
+ ],
4788
+ iconWrapper: ICON_WRAPPER
4789
+ },
4790
+ {
4791
+ uiKitName: "SparklesIcon",
4792
+ nimbusEquivalent: "Icon",
4793
+ importPath: "@commercetools/nimbus",
4794
+ mappingType: "variant",
4795
+ notes: 'Use <Icon as={AutoAwesome} /> from @commercetools/nimbus-icons. Import: import { AutoAwesome } from "@commercetools/nimbus-icons";',
4796
+ breakingChanges: [
4797
+ "Replace SparklesIcon with <Icon as={AutoAwesome} />",
4798
+ "Import AutoAwesome from @commercetools/nimbus-icons",
4799
+ "Wrap with <Icon> component from @commercetools/nimbus"
4800
+ ],
4801
+ iconWrapper: ICON_WRAPPER
4802
+ },
4803
+ {
4804
+ uiKitName: "SpeechBubbleIcon",
4805
+ nimbusEquivalent: "Icon",
4806
+ importPath: "@commercetools/nimbus",
4807
+ mappingType: "variant",
4808
+ notes: 'Use <Icon as={ChatBubble} /> from @commercetools/nimbus-icons. Import: import { ChatBubble } from "@commercetools/nimbus-icons";',
4809
+ breakingChanges: [
4810
+ "Replace SpeechBubbleIcon with <Icon as={ChatBubble} />",
4811
+ "Import ChatBubble from @commercetools/nimbus-icons",
4812
+ "Wrap with <Icon> component from @commercetools/nimbus"
4813
+ ],
4814
+ iconWrapper: ICON_WRAPPER
4815
+ },
4816
+ {
4817
+ uiKitName: "SpeedometerIcon",
4818
+ nimbusEquivalent: "Icon",
4819
+ importPath: "@commercetools/nimbus",
4820
+ mappingType: "variant",
4821
+ notes: 'Use <Icon as={Speed} /> from @commercetools/nimbus-icons. Import: import { Speed } from "@commercetools/nimbus-icons";',
4822
+ breakingChanges: [
4823
+ "Replace SpeedometerIcon with <Icon as={Speed} />",
4824
+ "Import Speed from @commercetools/nimbus-icons",
4825
+ "Wrap with <Icon> component from @commercetools/nimbus"
4826
+ ],
4827
+ iconWrapper: ICON_WRAPPER
4828
+ },
4829
+ {
4830
+ uiKitName: "SplitIcon",
4831
+ nimbusEquivalent: "Icon",
4832
+ importPath: "@commercetools/nimbus",
4833
+ mappingType: "variant",
4834
+ notes: 'Use <Icon as={CallSplit} /> from @commercetools/nimbus-icons. Import: import { CallSplit } from "@commercetools/nimbus-icons";',
4835
+ breakingChanges: [
4836
+ "Replace SplitIcon with <Icon as={CallSplit} />",
4837
+ "Import CallSplit from @commercetools/nimbus-icons",
4838
+ "Wrap with <Icon> component from @commercetools/nimbus"
4839
+ ],
4840
+ iconWrapper: ICON_WRAPPER
4841
+ },
4842
+ {
4843
+ uiKitName: "StackIcon",
4844
+ nimbusEquivalent: "Icon",
4845
+ importPath: "@commercetools/nimbus",
4846
+ mappingType: "variant",
4847
+ notes: 'Use <Icon as={Layers} /> from @commercetools/nimbus-icons. Import: import { Layers } from "@commercetools/nimbus-icons";',
4848
+ breakingChanges: [
4849
+ "Replace StackIcon with <Icon as={Layers} />",
4850
+ "Import Layers from @commercetools/nimbus-icons",
4851
+ "Wrap with <Icon> component from @commercetools/nimbus"
4852
+ ],
4853
+ iconWrapper: ICON_WRAPPER
4854
+ },
4855
+ {
4856
+ uiKitName: "StarIcon",
4857
+ nimbusEquivalent: "Icon",
4858
+ importPath: "@commercetools/nimbus",
4859
+ mappingType: "variant",
4860
+ notes: 'Use <Icon as={Star} /> from @commercetools/nimbus-icons. Import: import { Star } from "@commercetools/nimbus-icons";',
4861
+ breakingChanges: [
4862
+ "Replace StarIcon with <Icon as={Star} />",
4863
+ "Import Star from @commercetools/nimbus-icons",
4864
+ "Wrap with <Icon> component from @commercetools/nimbus"
4865
+ ],
4866
+ iconWrapper: ICON_WRAPPER
4867
+ },
4868
+ {
4869
+ uiKitName: "SubdirectoryArrowIcon",
4870
+ nimbusEquivalent: "Icon",
4871
+ importPath: "@commercetools/nimbus",
4872
+ mappingType: "variant",
4873
+ notes: 'Use <Icon as={SubdirectoryArrowRight} /> from @commercetools/nimbus-icons. Import: import { SubdirectoryArrowRight } from "@commercetools/nimbus-icons";',
4874
+ breakingChanges: [
4875
+ "Replace SubdirectoryArrowIcon with <Icon as={SubdirectoryArrowRight} />",
4876
+ "Import SubdirectoryArrowRight from @commercetools/nimbus-icons",
4877
+ "Wrap with <Icon> component from @commercetools/nimbus"
4878
+ ],
4879
+ iconWrapper: ICON_WRAPPER
4880
+ },
4881
+ {
4882
+ uiKitName: "SupportIcon",
4883
+ nimbusEquivalent: "Icon",
4884
+ importPath: "@commercetools/nimbus",
4885
+ mappingType: "variant",
4886
+ notes: 'Use <Icon as={SupportAgent} /> from @commercetools/nimbus-icons. Import: import { SupportAgent } from "@commercetools/nimbus-icons";',
4887
+ breakingChanges: [
4888
+ "Replace SupportIcon with <Icon as={SupportAgent} />",
4889
+ "Import SupportAgent from @commercetools/nimbus-icons",
4890
+ "Wrap with <Icon> component from @commercetools/nimbus"
4891
+ ],
4892
+ iconWrapper: ICON_WRAPPER
4893
+ },
4894
+ {
4895
+ uiKitName: "SwitcherIcon",
4896
+ nimbusEquivalent: "Icon",
4897
+ importPath: "@commercetools/nimbus",
4898
+ mappingType: "variant",
4899
+ notes: 'Use <Icon as={SwapHoriz} /> from @commercetools/nimbus-icons. Import: import { SwapHoriz } from "@commercetools/nimbus-icons";',
4900
+ breakingChanges: [
4901
+ "Replace SwitcherIcon with <Icon as={SwapHoriz} />",
4902
+ "Import SwapHoriz from @commercetools/nimbus-icons",
4903
+ "Wrap with <Icon> component from @commercetools/nimbus"
4904
+ ],
4905
+ iconWrapper: ICON_WRAPPER
4906
+ },
4907
+ {
4908
+ uiKitName: "TableIcon",
4909
+ nimbusEquivalent: "Icon",
4910
+ importPath: "@commercetools/nimbus",
4911
+ mappingType: "variant",
4912
+ notes: 'Use <Icon as={TableChart} /> from @commercetools/nimbus-icons. Import: import { TableChart } from "@commercetools/nimbus-icons";',
4913
+ breakingChanges: [
4914
+ "Replace TableIcon with <Icon as={TableChart} />",
4915
+ "Import TableChart from @commercetools/nimbus-icons",
4916
+ "Wrap with <Icon> component from @commercetools/nimbus"
4917
+ ],
4918
+ iconWrapper: ICON_WRAPPER
4919
+ },
4920
+ {
4921
+ uiKitName: "TagIcon",
4922
+ nimbusEquivalent: "Icon",
4923
+ importPath: "@commercetools/nimbus",
4924
+ mappingType: "variant",
4925
+ notes: 'Use <Icon as={Label} /> from @commercetools/nimbus-icons. Import: import { Label } from "@commercetools/nimbus-icons";',
4926
+ breakingChanges: [
4927
+ "Replace TagIcon with <Icon as={Label} />",
4928
+ "Import Label from @commercetools/nimbus-icons",
4929
+ "Wrap with <Icon> component from @commercetools/nimbus"
4930
+ ],
4931
+ iconWrapper: ICON_WRAPPER
4932
+ },
4933
+ {
4934
+ uiKitName: "TagMultiIcon",
4935
+ nimbusEquivalent: "Icon",
4936
+ importPath: "@commercetools/nimbus",
4937
+ mappingType: "variant",
4938
+ notes: 'Use <Icon as={Sell} /> from @commercetools/nimbus-icons. Import: import { Sell } from "@commercetools/nimbus-icons";',
4939
+ breakingChanges: [
4940
+ "Replace TagMultiIcon with <Icon as={Sell} />",
4941
+ "Import Sell from @commercetools/nimbus-icons",
4942
+ "Wrap with <Icon> component from @commercetools/nimbus"
4943
+ ],
4944
+ iconWrapper: ICON_WRAPPER
4945
+ },
4946
+ {
4947
+ uiKitName: "TagStackedIcon",
4948
+ nimbusEquivalent: "Icon",
4949
+ importPath: "@commercetools/nimbus",
4950
+ mappingType: "variant",
4951
+ notes: 'Use <Icon as={Bookmarks} /> from @commercetools/nimbus-icons. Import: import { Bookmarks } from "@commercetools/nimbus-icons";',
4952
+ breakingChanges: [
4953
+ "Replace TagStackedIcon with <Icon as={Bookmarks} />",
4954
+ "Import Bookmarks from @commercetools/nimbus-icons",
4955
+ "Wrap with <Icon> component from @commercetools/nimbus"
4956
+ ],
4957
+ iconWrapper: ICON_WRAPPER
4958
+ },
4959
+ {
4960
+ uiKitName: "TerminalIcon",
4961
+ nimbusEquivalent: "Icon",
4962
+ importPath: "@commercetools/nimbus",
4963
+ mappingType: "variant",
4964
+ notes: 'Use <Icon as={Terminal} /> from @commercetools/nimbus-icons. Import: import { Terminal } from "@commercetools/nimbus-icons";',
4965
+ breakingChanges: [
4966
+ "Replace TerminalIcon with <Icon as={Terminal} />",
4967
+ "Import Terminal from @commercetools/nimbus-icons",
4968
+ "Wrap with <Icon> component from @commercetools/nimbus"
4969
+ ],
4970
+ iconWrapper: ICON_WRAPPER
4971
+ },
4972
+ {
4973
+ uiKitName: "TruckIcon",
4974
+ nimbusEquivalent: "Icon",
4975
+ importPath: "@commercetools/nimbus",
4976
+ mappingType: "variant",
4977
+ notes: 'Use <Icon as={LocalShipping} /> from @commercetools/nimbus-icons. Import: import { LocalShipping } from "@commercetools/nimbus-icons";',
4978
+ breakingChanges: [
4979
+ "Replace TruckIcon with <Icon as={LocalShipping} />",
4980
+ "Import LocalShipping from @commercetools/nimbus-icons",
4981
+ "Wrap with <Icon> component from @commercetools/nimbus"
4982
+ ],
4983
+ iconWrapper: ICON_WRAPPER
4984
+ },
4985
+ {
4986
+ uiKitName: "TuneIcon",
4987
+ nimbusEquivalent: "Icon",
4988
+ importPath: "@commercetools/nimbus",
4989
+ mappingType: "variant",
4990
+ notes: 'Use <Icon as={Tune} /> from @commercetools/nimbus-icons. Import: import { Tune } from "@commercetools/nimbus-icons";',
4991
+ breakingChanges: [
4992
+ "Replace TuneIcon with <Icon as={Tune} />",
4993
+ "Import Tune from @commercetools/nimbus-icons",
4994
+ "Wrap with <Icon> component from @commercetools/nimbus"
4995
+ ],
4996
+ iconWrapper: ICON_WRAPPER
4997
+ },
4998
+ {
4999
+ uiKitName: "UserFilledIcon",
5000
+ nimbusEquivalent: "Icon",
5001
+ importPath: "@commercetools/nimbus",
5002
+ mappingType: "variant",
5003
+ notes: 'Use <Icon as={Person} /> from @commercetools/nimbus-icons. Import: import { Person } from "@commercetools/nimbus-icons";',
5004
+ breakingChanges: [
5005
+ "Replace UserFilledIcon with <Icon as={Person} />",
5006
+ "Import Person from @commercetools/nimbus-icons",
5007
+ "Wrap with <Icon> component from @commercetools/nimbus"
5008
+ ],
5009
+ iconWrapper: ICON_WRAPPER
5010
+ },
5011
+ {
5012
+ uiKitName: "UserLinearIcon",
5013
+ nimbusEquivalent: "Icon",
5014
+ importPath: "@commercetools/nimbus",
5015
+ mappingType: "variant",
5016
+ notes: 'Use <Icon as={PersonOutline} /> from @commercetools/nimbus-icons. Import: import { PersonOutline } from "@commercetools/nimbus-icons";',
5017
+ breakingChanges: [
5018
+ "Replace UserLinearIcon with <Icon as={PersonOutline} />",
5019
+ "Import PersonOutline from @commercetools/nimbus-icons",
5020
+ "Wrap with <Icon> component from @commercetools/nimbus"
5021
+ ],
5022
+ iconWrapper: ICON_WRAPPER
5023
+ },
5024
+ {
5025
+ uiKitName: "UsersIcon",
5026
+ nimbusEquivalent: "Icon",
5027
+ importPath: "@commercetools/nimbus",
5028
+ mappingType: "variant",
5029
+ notes: 'Use <Icon as={Group} /> from @commercetools/nimbus-icons. Import: import { Group } from "@commercetools/nimbus-icons";',
5030
+ breakingChanges: [
5031
+ "Replace UsersIcon with <Icon as={Group} />",
5032
+ "Import Group from @commercetools/nimbus-icons",
5033
+ "Wrap with <Icon> component from @commercetools/nimbus"
5034
+ ],
5035
+ iconWrapper: ICON_WRAPPER
5036
+ },
5037
+ {
5038
+ uiKitName: "VerifiedIcon",
5039
+ nimbusEquivalent: "Icon",
5040
+ importPath: "@commercetools/nimbus",
5041
+ mappingType: "variant",
5042
+ notes: 'Use <Icon as={Verified} /> from @commercetools/nimbus-icons. Import: import { Verified } from "@commercetools/nimbus-icons";',
5043
+ breakingChanges: [
5044
+ "Replace VerifiedIcon with <Icon as={Verified} />",
5045
+ "Import Verified from @commercetools/nimbus-icons",
5046
+ "Wrap with <Icon> component from @commercetools/nimbus"
5047
+ ],
5048
+ iconWrapper: ICON_WRAPPER
5049
+ },
5050
+ {
5051
+ uiKitName: "ViewGridPlusIcon",
5052
+ nimbusEquivalent: "Icon",
5053
+ importPath: "@commercetools/nimbus",
5054
+ mappingType: "variant",
5055
+ notes: 'Use <Icon as={DashboardCustomize} /> from @commercetools/nimbus-icons. Import: import { DashboardCustomize } from "@commercetools/nimbus-icons";',
5056
+ breakingChanges: [
5057
+ "Replace ViewGridPlusIcon with <Icon as={DashboardCustomize} />",
5058
+ "Import DashboardCustomize from @commercetools/nimbus-icons",
5059
+ "Wrap with <Icon> component from @commercetools/nimbus"
5060
+ ],
5061
+ iconWrapper: ICON_WRAPPER
5062
+ },
5063
+ {
5064
+ uiKitName: "WindowEyeIcon",
5065
+ nimbusEquivalent: "Icon",
5066
+ importPath: "@commercetools/nimbus",
5067
+ mappingType: "variant",
5068
+ notes: 'Use <Icon as={Preview} /> from @commercetools/nimbus-icons. Import: import { Preview } from "@commercetools/nimbus-icons";',
5069
+ breakingChanges: [
5070
+ "Replace WindowEyeIcon with <Icon as={Preview} />",
5071
+ "Import Preview from @commercetools/nimbus-icons",
5072
+ "Wrap with <Icon> component from @commercetools/nimbus"
5073
+ ],
5074
+ iconWrapper: ICON_WRAPPER
5075
+ },
5076
+ {
5077
+ uiKitName: "WorldIcon",
5078
+ nimbusEquivalent: "Icon",
5079
+ importPath: "@commercetools/nimbus",
5080
+ mappingType: "variant",
5081
+ notes: 'Use <Icon as={Public} /> from @commercetools/nimbus-icons. Import: import { Public } from "@commercetools/nimbus-icons";',
5082
+ breakingChanges: [
5083
+ "Replace WorldIcon with <Icon as={Public} />",
5084
+ "Import Public from @commercetools/nimbus-icons",
5085
+ "Wrap with <Icon> component from @commercetools/nimbus"
5086
+ ],
5087
+ iconWrapper: ICON_WRAPPER
5088
+ },
5089
+ // -------------------------------------------------------------------------
5090
+ // Icons — generic
5091
+ // -------------------------------------------------------------------------
5092
+ {
5093
+ uiKitName: "CustomIcon",
5094
+ nimbusEquivalent: "Icon",
5095
+ importPath: "@commercetools/nimbus",
5096
+ mappingType: "variant",
5097
+ notes: "Use <Icon as={YourSvg}> or <Icon><YourSvg /></Icon> to wrap custom SVGs with design-system sizing and color tokens. Use InlineSvg for raw SVG markup.",
5098
+ breakingChanges: [
5099
+ "Replace CustomIcon with <Icon as={YourSvg}> or <InlineSvg>",
5100
+ "Prefer the as prop for the shorthand form; children also works"
5101
+ ],
5102
+ propMappings: [
5103
+ {
5104
+ uiKitProp: "children",
5105
+ nimbusProp: "children",
5106
+ changeType: "structural",
5107
+ notes: "Prefer the as prop: <Icon as={YourSvg} />. Passing as children also works: <Icon><YourSvg /></Icon>."
5108
+ }
5109
+ ],
5110
+ // Numeric-only sizes: CustomIcon only accepts "10"–"40", not the named aliases ("small"/"medium"/"big").
5111
+ iconWrapper: {
5112
+ ...ICON_WRAPPER_BASE,
5113
+ sizeMapping: [
5114
+ { from: "10", to: "2xs" },
5115
+ { from: "20", to: "xs" },
5116
+ { from: "30", to: "sm" },
5117
+ { from: "40", to: "md" }
5118
+ ]
5119
+ }
5120
+ },
5121
+ {
5122
+ uiKitName: "LeadingIcon",
5123
+ nimbusEquivalent: "Icon",
5124
+ importPath: "@commercetools/nimbus",
5125
+ mappingType: "variant",
5126
+ notes: "Pass icon as a child to the parent component (e.g. as a child of <Button>) rather than using a wrapper.",
5127
+ breakingChanges: [
5128
+ "Remove LeadingIcon wrapper",
5129
+ "Pass icon directly to the parent component's icon slot"
5130
+ ],
5131
+ propMappings: [
5132
+ {
5133
+ uiKitProp: "children",
5134
+ nimbusProp: null,
5135
+ changeType: "structural",
5136
+ notes: "Remove the LeadingIcon wrapper and pass the icon directly as a child of the parent component."
5137
+ }
5138
+ ]
5139
+ },
5140
+ {
5141
+ uiKitName: "InlineSvg",
5142
+ nimbusEquivalent: "InlineSvg",
5143
+ importPath: "@commercetools/nimbus",
5144
+ mappingType: "direct",
5145
+ notes: "Direct replacement for custom SVG icons not in the icon library.",
5146
+ breakingChanges: []
5147
+ },
5148
+ {
5149
+ uiKitName: "Icon Library",
5150
+ nimbusEquivalent: "Nimbus Icon Library",
5151
+ importPath: "@commercetools/nimbus-icons",
5152
+ mappingType: "pattern",
5153
+ notes: 'Always wrap icons in the Icon component: <Icon as={AccountCircle} size="2xs" color="neutral.11" />. Import the icon from @commercetools/nimbus-icons and the Icon wrapper from @commercetools/nimbus. Never use bare icon components \u2014 the unwrapped form skips design-system sizing and color tokens.',
5154
+ breakingChanges: [
5155
+ "Update import paths to @commercetools/nimbus-icons",
5156
+ "Icon names are PascalCase (e.g. Add, ChevronLeft); only icons starting with numbers use a Svg prefix (e.g. Svg123)",
5157
+ "Icons must be wrapped in <Icon as={...}> for correct sizing and theming"
5158
+ ],
5159
+ iconWrapper: ICON_WRAPPER
5160
+ },
5161
+ // -------------------------------------------------------------------------
5162
+ // Accessibility utilities
5163
+ // -------------------------------------------------------------------------
5164
+ {
5165
+ uiKitName: "HiddenInput",
5166
+ nimbusEquivalent: "VisuallyHidden",
5167
+ importPath: "@commercetools/nimbus",
5168
+ mappingType: "direct",
5169
+ notes: "VisuallyHidden renders content that is visually hidden but accessible to screen readers.",
5170
+ breakingChanges: ["Rename to VisuallyHidden"]
5171
+ },
5172
+ {
5173
+ uiKitName: "AccessibleHidden",
5174
+ nimbusEquivalent: "VisuallyHidden",
5175
+ importPath: "@commercetools/nimbus",
5176
+ mappingType: "variant",
5177
+ notes: "Use VisuallyHidden for content that should be screen-reader accessible only.",
5178
+ breakingChanges: ["Replace AccessibleHidden with VisuallyHidden"]
5179
+ },
5180
+ // -------------------------------------------------------------------------
5181
+ // Provider
5182
+ // -------------------------------------------------------------------------
5183
+ {
5184
+ uiKitName: "ThemeProvider",
5185
+ nimbusEquivalent: "NimbusProvider",
5186
+ importPath: "@commercetools/nimbus",
5187
+ mappingType: "direct",
5188
+ notes: "Rename to NimbusProvider. Wrap your app root once; passes theme and i18n context.",
2175
5189
  breakingChanges: [
2176
5190
  "Rename to NimbusProvider",
2177
5191
  "theme prop configuration has changed; see NimbusProvider docs"
5192
+ ],
5193
+ propMappings: [
5194
+ {
5195
+ uiKitProp: "theme",
5196
+ nimbusProp: null,
5197
+ changeType: "structural",
5198
+ notes: "Theme configuration shape changed; see NimbusProvider's themes/forcedTheme/defaultTheme props."
5199
+ }
2178
5200
  ]
2179
5201
  }
2180
5202
  ];
@@ -2322,6 +5344,20 @@ function deriveToolHint2(uiKitName, nimbusEquivalent, importPath, notes) {
2322
5344
  }
2323
5345
  return void 0;
2324
5346
  }
5347
+ function buildTokenRedirect(name) {
5348
+ return {
5349
+ uiKitName: name,
5350
+ nimbusEquivalent: "Nimbus design tokens",
5351
+ importPath: "@commercetools/nimbus-tokens",
5352
+ mappingType: "pattern",
5353
+ notes: `Replace ${name}.tokenName usages with Nimbus design tokens. Use the get_tokens tool with the uikitToken parameter to resolve each token (e.g. get_tokens(uikitToken: "constraint3") or get_tokens(uikitToken: "spacingXl")).`,
5354
+ breakingChanges: [
5355
+ `Remove ${name} import from @commercetools-uikit/design-system or @commercetools-frontend/ui-kit`,
5356
+ "Replace each token reference with the equivalent Nimbus token value or CSS variable"
5357
+ ],
5358
+ hint: `Use the get_tokens tool with the uikitToken parameter to resolve each ${name} token (e.g. get_tokens(uikitToken: "constraint3"))`
5359
+ };
5360
+ }
2325
5361
  function buildComponentResult(uiKitName) {
2326
5362
  const entry = getUiKitMigration(uiKitName);
2327
5363
  if (!entry) return null;
@@ -2333,6 +5369,15 @@ function buildComponentResult(uiKitName) {
2333
5369
  notes: entry.notes,
2334
5370
  breakingChanges: entry.breakingChanges
2335
5371
  };
5372
+ if (entry.propMappings) result.propMappings = entry.propMappings;
5373
+ if (entry.iconWrapper) result.iconWrapper = entry.iconWrapper;
5374
+ if (entry.propMigrations) result.propMigrations = entry.propMigrations;
5375
+ if (entry.codeReduction) result.codeReduction = entry.codeReduction;
5376
+ if (entry.propShapeTransforms)
5377
+ result.propShapeTransforms = entry.propShapeTransforms;
5378
+ if (entry.callbackAdapters) result.callbackAdapters = entry.callbackAdapters;
5379
+ if (entry.typeNotes) result.typeNotes = entry.typeNotes;
5380
+ if (entry.layoutGuidance) result.layoutGuidance = entry.layoutGuidance;
2336
5381
  const hint = deriveToolHint2(
2337
5382
  uiKitName,
2338
5383
  entry.nimbusEquivalent,
@@ -2342,6 +5387,111 @@ function buildComponentResult(uiKitName) {
2342
5387
  if (hint) result.hint = hint;
2343
5388
  return result;
2344
5389
  }
5390
+ function hoistLayoutGuidance(mappings) {
5391
+ const guidance = mappings.find((m) => m.layoutGuidance)?.layoutGuidance;
5392
+ if (guidance) {
5393
+ for (const m of mappings) delete m.layoutGuidance;
5394
+ }
5395
+ return guidance;
5396
+ }
5397
+ var GENERIC_UI_WORDS = /* @__PURE__ */ new Set([
5398
+ "input",
5399
+ "field",
5400
+ "text",
5401
+ "button",
5402
+ "component",
5403
+ "panel",
5404
+ "container",
5405
+ "label",
5406
+ "control",
5407
+ "item",
5408
+ "group",
5409
+ "list",
5410
+ "wrapper",
5411
+ "provider",
5412
+ "manager"
5413
+ ]);
5414
+ function splitPascalCase(name) {
5415
+ return name.replace(/([a-z])([A-Z])/g, "$1 $2").split(/\s+/);
5416
+ }
5417
+ var _componentRoutes;
5418
+ var _componentLowered;
5419
+ async function getComponentCatalog() {
5420
+ if (!_componentRoutes || !_componentLowered) {
5421
+ const manifest = await getRouteManifest();
5422
+ _componentRoutes = manifest.routes.filter(
5423
+ (r) => r.category === "Components" && r.menu.length === 3
5424
+ );
5425
+ _componentLowered = /* @__PURE__ */ new Map();
5426
+ for (const r of _componentRoutes) {
5427
+ _componentLowered.set(r, toLoweredRouteFields(r));
5428
+ }
5429
+ }
5430
+ return { routes: _componentRoutes, lowered: _componentLowered };
5431
+ }
5432
+ function pickClosestByWordOverlap(candidates, uiKitWords) {
5433
+ const wordSet = new Set(uiKitWords);
5434
+ let best = null;
5435
+ let bestRatio = 0;
5436
+ for (const c of candidates) {
5437
+ const exportWords = splitPascalCase(c.exportName ?? c.title).map(
5438
+ (w) => w.toLowerCase()
5439
+ );
5440
+ const overlap = exportWords.filter((w) => wordSet.has(w)).length;
5441
+ const ratio = overlap / exportWords.length;
5442
+ if (ratio > bestRatio) {
5443
+ bestRatio = ratio;
5444
+ best = c;
5445
+ }
5446
+ }
5447
+ return best;
5448
+ }
5449
+ async function findNimbusSuggestion(uiKitName) {
5450
+ const { routes, lowered } = await getComponentCatalog();
5451
+ const allWords = splitPascalCase(uiKitName).map((w) => w.toLowerCase());
5452
+ if (allWords.length === 0) return null;
5453
+ const distinctive = allWords.filter((w) => !GENERIC_UI_WORDS.has(w));
5454
+ const usingGenericFallback = distinctive.length === 0;
5455
+ const tokens = usingGenericFallback ? allWords : distinctive;
5456
+ const exactMatches = filterAndRankPreLowered(
5457
+ routes,
5458
+ tokens,
5459
+ (r) => lowered.get(r)
5460
+ );
5461
+ if (exactMatches.length > 0) {
5462
+ const best = pickClosestByWordOverlap(exactMatches, allWords);
5463
+ if (!best) return null;
5464
+ return {
5465
+ name: best.exportName ?? best.title,
5466
+ confidence: usingGenericFallback ? "medium" : "high"
5467
+ };
5468
+ }
5469
+ const minFuzzyScore = tokens.length * (WEIGHTS.title / 2);
5470
+ const fuzzyScored = [];
5471
+ for (const r of routes) {
5472
+ const score = fuzzyScorePreLowered(lowered.get(r), tokens);
5473
+ if (score > 0) {
5474
+ fuzzyScored.push({ route: r, score });
5475
+ }
5476
+ }
5477
+ fuzzyScored.sort((a, b) => b.score - a.score);
5478
+ if (fuzzyScored.length > 0) {
5479
+ const best = fuzzyScored[0];
5480
+ if (best.score >= minFuzzyScore) {
5481
+ return {
5482
+ name: best.route.exportName ?? best.route.title,
5483
+ confidence: "medium"
5484
+ };
5485
+ }
5486
+ }
5487
+ return null;
5488
+ }
5489
+ async function buildUnmappedComponent(name) {
5490
+ const suggestion = await findNimbusSuggestion(name);
5491
+ const result = { name };
5492
+ if (suggestion) result.suggestion = suggestion;
5493
+ return result;
5494
+ }
2345
5495
  function registerMigrateFromUiKit(server) {
2346
5496
  server.registerTool(
2347
5497
  "migrate_from_uikit",
@@ -2349,10 +5499,10 @@ function registerMigrateFromUiKit(server) {
2349
5499
  title: "Migrate from UI Kit",
2350
5500
  description: "Returns migration mapping data for UI Kit components to their Nimbus equivalents. Use componentName for a single lookup, or filePath to extract all UI Kit imports from a file and get mappings for each. The MCP provides data; the LLM does the actual code rewriting.",
2351
5501
  inputSchema: {
2352
- componentName: z6.string().optional().describe(
5502
+ componentName: z7.string().optional().describe(
2353
5503
  'UI Kit component name to look up, e.g. "PrimaryButton", "TextInput", "CollapsiblePanel".'
2354
5504
  ),
2355
- filePath: z6.string().optional().describe(
5505
+ filePath: z7.string().optional().describe(
2356
5506
  "Absolute path to a source file. Extracts @commercetools-uikit/* imports and returns mappings for all found components."
2357
5507
  )
2358
5508
  }
@@ -2370,6 +5520,16 @@ function registerMigrateFromUiKit(server) {
2370
5520
  };
2371
5521
  }
2372
5522
  if (componentName) {
5523
+ if (componentName === "customProperties" || componentName === "designTokens") {
5524
+ return {
5525
+ content: [
5526
+ {
5527
+ type: "text",
5528
+ text: JSON.stringify(buildTokenRedirect(componentName))
5529
+ }
5530
+ ]
5531
+ };
5532
+ }
2373
5533
  const result = buildComponentResult(componentName);
2374
5534
  if (result) {
2375
5535
  return {
@@ -2383,13 +5543,16 @@ function registerMigrateFromUiKit(server) {
2383
5543
  }
2384
5544
  const compoundEntries = getUiKitCompoundMigrations(componentName);
2385
5545
  if (compoundEntries) {
5546
+ const mappings2 = compoundEntries.map(
5547
+ (e) => buildComponentResult(e.uiKitName)
5548
+ );
2386
5549
  const response2 = {
2387
5550
  compoundRoot: componentName,
2388
5551
  note: `"${componentName}" is used as a namespace (e.g. ${compoundEntries.map((e) => e.uiKitName).join(", ")}). Each sub-component has its own mapping.`,
2389
- mappings: compoundEntries.map(
2390
- (e) => buildComponentResult(e.uiKitName)
2391
- )
5552
+ mappings: mappings2
2392
5553
  };
5554
+ const guidance = hoistLayoutGuidance(mappings2);
5555
+ if (guidance) response2.layoutGuidance = guidance;
2393
5556
  return {
2394
5557
  content: [
2395
5558
  {
@@ -2410,6 +5573,22 @@ function registerMigrateFromUiKit(server) {
2410
5573
  ]
2411
5574
  };
2412
5575
  }
5576
+ const suggestion = await findNimbusSuggestion(componentName);
5577
+ if (suggestion) {
5578
+ const response2 = {
5579
+ uiKitName: componentName,
5580
+ suggestion
5581
+ };
5582
+ response2.hint = `Use the get_component tool to see full API docs (e.g. get_component(name: "${suggestion.name}"))`;
5583
+ return {
5584
+ content: [
5585
+ {
5586
+ type: "text",
5587
+ text: JSON.stringify(response2)
5588
+ }
5589
+ ]
5590
+ };
5591
+ }
2413
5592
  return {
2414
5593
  content: [
2415
5594
  {
@@ -2451,8 +5630,12 @@ function registerMigrateFromUiKit(server) {
2451
5630
  };
2452
5631
  }
2453
5632
  const mappings = [];
2454
- const unmapped = [];
5633
+ const unmappedNames = [];
2455
5634
  for (const name of componentNames) {
5635
+ if (name === "customProperties" || name === "designTokens") {
5636
+ mappings.push(buildTokenRedirect(name));
5637
+ continue;
5638
+ }
2456
5639
  const result = buildComponentResult(name);
2457
5640
  if (result) {
2458
5641
  mappings.push(result);
@@ -2469,13 +5652,18 @@ function registerMigrateFromUiKit(server) {
2469
5652
  }
2470
5653
  continue;
2471
5654
  }
2472
- unmapped.push(name);
5655
+ unmappedNames.push(name);
2473
5656
  }
5657
+ const unmapped = await Promise.all(
5658
+ unmappedNames.map(buildUnmappedComponent)
5659
+ );
2474
5660
  const response = {
2475
5661
  filePath,
2476
5662
  mappings,
2477
5663
  unmapped
2478
5664
  };
5665
+ const fileGuidance = hoistLayoutGuidance(mappings);
5666
+ if (fileGuidance) response.layoutGuidance = fileGuidance;
2479
5667
  return {
2480
5668
  content: [
2481
5669
  {
@@ -2502,6 +5690,7 @@ function createServer() {
2502
5690
  }
2503
5691
  );
2504
5692
  registerGetComponent(server);
5693
+ registerGetDocsPage(server);
2505
5694
  registerGetTokens(server);
2506
5695
  registerListComponents(server);
2507
5696
  registerSearchDocs(server);