@pantheon-systems/pds-toolkit-react 2.0.0-alpha.7 → 2.0.0-alpha.70

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 (403) hide show
  1. package/bin/pds-codemod.cjs +58 -0
  2. package/codemods/v1-to-v2/css-token-renames.js +186 -0
  3. package/codemods/v1-to-v2/mappings.json +1787 -0
  4. package/codemods/v1-to-v2/transforms/__testfixtures__/component-renames/basic.input.tsx +33 -0
  5. package/codemods/v1-to-v2/transforms/__testfixtures__/component-renames/basic.output.tsx +33 -0
  6. package/codemods/v1-to-v2/transforms/__testfixtures__/component-renames/only.input.tsx +8 -0
  7. package/codemods/v1-to-v2/transforms/__testfixtures__/component-renames/only.output.tsx +8 -0
  8. package/codemods/v1-to-v2/transforms/__testfixtures__/css-class-removals/basic.input.tsx +55 -0
  9. package/codemods/v1-to-v2/transforms/__testfixtures__/css-class-removals/basic.output.tsx +55 -0
  10. package/codemods/v1-to-v2/transforms/__testfixtures__/css-class-renames/basic.input.tsx +60 -0
  11. package/codemods/v1-to-v2/transforms/__testfixtures__/css-class-renames/basic.output.tsx +60 -0
  12. package/codemods/v1-to-v2/transforms/__testfixtures__/icon-name-updates/basic.input.tsx +35 -0
  13. package/codemods/v1-to-v2/transforms/__testfixtures__/icon-name-updates/basic.output.tsx +35 -0
  14. package/codemods/v1-to-v2/transforms/__testfixtures__/icon-name-updates/only.input.tsx +8 -0
  15. package/codemods/v1-to-v2/transforms/__testfixtures__/icon-name-updates/only.output.tsx +8 -0
  16. package/codemods/v1-to-v2/transforms/__testfixtures__/prop-renames/basic.input.tsx +28 -0
  17. package/codemods/v1-to-v2/transforms/__testfixtures__/prop-renames/basic.output.tsx +28 -0
  18. package/codemods/v1-to-v2/transforms/__testfixtures__/prop-renames/only.input.tsx +8 -0
  19. package/codemods/v1-to-v2/transforms/__testfixtures__/prop-renames/only.output.tsx +8 -0
  20. package/codemods/v1-to-v2/transforms/__testfixtures__/prop-value-standardization/basic.input.tsx +37 -0
  21. package/codemods/v1-to-v2/transforms/__testfixtures__/prop-value-standardization/basic.output.tsx +37 -0
  22. package/codemods/v1-to-v2/transforms/__testfixtures__/prop-value-standardization/only.input.tsx +21 -0
  23. package/codemods/v1-to-v2/transforms/__testfixtures__/prop-value-standardization/only.output.tsx +21 -0
  24. package/codemods/v1-to-v2/transforms/__testfixtures__/removed-prop-values/basic.input.tsx +60 -0
  25. package/codemods/v1-to-v2/transforms/__testfixtures__/removed-prop-values/basic.output.tsx +51 -0
  26. package/codemods/v1-to-v2/transforms/__testfixtures__/removed-prop-values/only.input.tsx +8 -0
  27. package/codemods/v1-to-v2/transforms/__testfixtures__/removed-prop-values/only.output.tsx +8 -0
  28. package/codemods/v1-to-v2/transforms/__tests__/component-renames.test.js +15 -0
  29. package/codemods/v1-to-v2/transforms/__tests__/css-class-removals.test.js +6 -0
  30. package/codemods/v1-to-v2/transforms/__tests__/css-class-renames.test.js +6 -0
  31. package/codemods/v1-to-v2/transforms/__tests__/icon-name-updates.test.js +15 -0
  32. package/codemods/v1-to-v2/transforms/__tests__/prop-renames.test.js +15 -0
  33. package/codemods/v1-to-v2/transforms/__tests__/prop-value-standardization.test.js +16 -0
  34. package/codemods/v1-to-v2/transforms/__tests__/removed-prop-values.test.js +15 -0
  35. package/codemods/v1-to-v2/transforms/component-renames.js +166 -0
  36. package/codemods/v1-to-v2/transforms/css-class-removals.js +262 -0
  37. package/codemods/v1-to-v2/transforms/css-class-renames.js +178 -0
  38. package/codemods/v1-to-v2/transforms/icon-name-updates.js +124 -0
  39. package/codemods/v1-to-v2/transforms/prop-renames.js +109 -0
  40. package/codemods/v1-to-v2/transforms/prop-value-standardization.js +143 -0
  41. package/codemods/v1-to-v2/transforms/removed-prop-values.js +206 -0
  42. package/dist/components/Avatar/Avatar.d.ts +5 -1
  43. package/dist/components/Callout/Callout.d.ts +6 -2
  44. package/dist/components/CodeBlock/CodeBlock.d.ts +10 -5
  45. package/dist/components/CodeBlock/code-examples.d.ts +2 -1
  46. package/dist/components/CodeBlock/prism-setup.d.ts +2 -0
  47. package/dist/components/CodeBlock/themes/index.d.ts +1 -2
  48. package/dist/components/CodeBlock/themes/{pdsDark.d.ts → pds.d.ts} +1 -1
  49. package/dist/components/ComparisonList/ComparisonList.d.ts +6 -1
  50. package/dist/components/Dropdown/Dropdown.d.ts +192 -0
  51. package/dist/components/Dropdown/DropdownSelectedIcon.d.ts +7 -0
  52. package/dist/components/FileDiff/FileDiff.d.ts +2 -2
  53. package/dist/components/IdentityBlock/IdentityBlock.d.ts +37 -0
  54. package/dist/components/PantheonLogo/PantheonLogo.d.ts +5 -4
  55. package/dist/components/Popover/Popover.d.ts +5 -1
  56. package/dist/components/ResultCount/ResultCount.d.ts +53 -0
  57. package/dist/components/SiteFooter/SiteFooter.d.ts +45 -0
  58. package/dist/components/{navigation/DashboardSearch/DashboardSearch.d.ts → SiteSearch/SiteSearch.d.ts} +6 -11
  59. package/dist/components/SortableList/SortableList.d.ts +8 -0
  60. package/dist/components/SortableList/SortableListHeader.d.ts +7 -0
  61. package/dist/components/SortableList/SortableRow.d.ts +16 -0
  62. package/dist/components/SortableList/sortable-utils.d.ts +19 -0
  63. package/dist/components/SortableList/types.d.ts +142 -0
  64. package/dist/components/SortableList/useSortableTree.d.ts +18 -0
  65. package/dist/components/{RefreshChecker/RefreshChecker.d.ts → StatusChecker/StatusChecker.d.ts} +6 -19
  66. package/dist/components/StatusIndicator/StatusIndicator.d.ts +7 -4
  67. package/dist/components/Table/Table.d.ts +290 -17
  68. package/dist/components/TableOfContents/TableOfContents.d.ts +1 -5
  69. package/dist/components/Tag/Tag.d.ts +21 -3
  70. package/dist/components/ThemeSwitcher/ThemeSwitcher.d.ts +29 -8
  71. package/dist/components/Tooltip/Tooltip.d.ts +6 -2
  72. package/dist/components/UtilityBar/UtilityBar.d.ts +26 -0
  73. package/dist/components/badges/Badge/Badge.d.ts +1 -1
  74. package/dist/components/badges/StatusBadge/StatusBadge.d.ts +2 -1
  75. package/dist/components/buttons/Button/Button.d.ts +15 -0
  76. package/dist/components/buttons/ButtonLink/ButtonLink.d.ts +1 -3
  77. package/dist/components/buttons/ClipboardButton/ClipboardButton.d.ts +5 -1
  78. package/dist/components/buttons/CloseButton/CloseButton.d.ts +4 -4
  79. package/dist/components/buttons/FilterButton/FilterButton.d.ts +92 -0
  80. package/dist/components/buttons/IconButton/IconButton.d.ts +12 -0
  81. package/dist/components/buttons/MenuButton/MenuButton.d.ts +24 -17
  82. package/dist/components/buttons/SSOButton/SSOButton.d.ts +9 -1
  83. package/dist/components/buttons/SegmentedButton/SegmentedButton.d.ts +44 -8
  84. package/dist/components/cards/ActionCard/ActionCard.d.ts +64 -0
  85. package/dist/components/cards/Card/Card.d.ts +10 -4
  86. package/dist/components/cards/CardSelect/CardSelect.d.ts +100 -0
  87. package/dist/components/charts/BarChart/BarChart.d.ts +21 -0
  88. package/dist/components/charts/LineChart/LineChart.d.ts +22 -0
  89. package/dist/components/charts/PieChart/PieChart.d.ts +59 -0
  90. package/dist/components/charts/ProportionBar/ProportionBar.d.ts +57 -0
  91. package/dist/components/charts/shared/ChartAccessibleTable.d.ts +17 -0
  92. package/dist/components/charts/shared/ChartLegend.d.ts +31 -0
  93. package/dist/components/charts/shared/ChartSkeleton.d.ts +11 -0
  94. package/dist/components/charts/shared/chart-colors.d.ts +30 -0
  95. package/dist/components/charts/shared/chart-styles.d.ts +24 -0
  96. package/dist/components/charts/shared/formatters.d.ts +12 -0
  97. package/dist/components/charts/shared/types.d.ts +128 -0
  98. package/dist/components/empty-states/HorizontalEmptyState/HorizontalEmptyState.d.ts +13 -8
  99. package/dist/components/icons/Icon/Icon.d.ts +2 -2
  100. package/dist/components/icons/Icon/custom-icons.d.ts +1 -1
  101. package/dist/components/icons/Icon/generated-icon-data.d.ts +212 -16
  102. package/dist/components/icons/PaymentIcon/PaymentIcon.d.ts +7 -3
  103. package/dist/components/icons/PlatformIcon/PlatformIcon.d.ts +6 -6
  104. package/dist/components/inputs/Checkbox/Checkbox.d.ts +3 -3
  105. package/dist/components/inputs/CheckboxFieldset/CheckboxFieldset.d.ts +9 -1
  106. package/dist/components/inputs/CheckboxGroup/CheckboxGroup.d.ts +9 -1
  107. package/dist/components/inputs/Combobox/Combobox.d.ts +17 -7
  108. package/dist/components/inputs/ComboboxMultiselect/ComboboxMultiselect.d.ts +10 -5
  109. package/dist/components/inputs/Datepicker/Datepicker.d.ts +217 -14
  110. package/dist/components/inputs/FileUpload/FileUpload.d.ts +6 -1
  111. package/dist/components/inputs/RadioGroup/RadioGroup.d.ts +10 -2
  112. package/dist/components/inputs/Select/Select.d.ts +11 -2
  113. package/dist/components/inputs/Switch/Switch.d.ts +5 -5
  114. package/dist/components/inputs/TagsInput/TagsInput.d.ts +6 -1
  115. package/dist/components/inputs/TextInput/TextInput.d.ts +4 -4
  116. package/dist/components/inputs/Textarea/Textarea.d.ts +2 -2
  117. package/dist/components/inputs/Timepicker/Timepicker.d.ts +94 -0
  118. package/dist/components/inputs/input-utilities.d.ts +12 -2
  119. package/dist/components/{CTALink → links/CTALink}/CTALink.d.ts +1 -1
  120. package/dist/components/{LinkNewWindow → links/LinkNewWindow}/LinkNewWindow.d.ts +1 -1
  121. package/dist/components/loading-indicators/Spinner/Spinner.d.ts +5 -4
  122. package/dist/components/navigation/ButtonNav/ButtonNav.d.ts +11 -5
  123. package/dist/components/navigation/DropdownMenu/DropdownMenu.d.ts +1 -0
  124. package/dist/components/navigation/Navbar/Navbar.d.ts +9 -21
  125. package/dist/components/navigation/SideNav/SideNav.d.ts +7 -1
  126. package/dist/components/navigation/SideNavGlobal/SideNavGlobal.d.ts +5 -15
  127. package/dist/components/navigation/SideNavGlobal/SideNavGlobalItem.d.ts +15 -1
  128. package/dist/components/navigation/SiteMenu/SiteMenu.d.ts +26 -0
  129. package/dist/components/navigation/SiteMenu/SiteMenuDropdown.d.ts +23 -0
  130. package/dist/components/navigation/TreeNav/TreeNav.d.ts +48 -0
  131. package/dist/components/navigation/UserMenu/UserMenu.d.ts +20 -5
  132. package/dist/components/navigation/WorkspaceSelector/WorkspaceSelector.d.ts +2 -16
  133. package/dist/components/navigation/navigation-utilities.d.ts +12 -0
  134. package/dist/components/notifications/Toaster/Toast.d.ts +12 -1
  135. package/dist/components/notifications/Toaster/Toaster.d.ts +16 -7
  136. package/dist/components/notifications/Toaster/useToast.d.ts +2 -0
  137. package/dist/components/overlays/Drawer/Drawer.d.ts +58 -0
  138. package/dist/components/overlays/FullScreenOverlay/FullScreenOverlay.d.ts +45 -0
  139. package/dist/components/{Modal → overlays/Modal}/Modal.d.ts +2 -2
  140. package/dist/components/{Pagination → pagination/Pagination}/Pagination.d.ts +7 -2
  141. package/dist/components/pagination/PaginationChapter/PaginationChapter.d.ts +55 -0
  142. package/dist/components/pagination/PaginationCompact/PaginationCompact.d.ts +62 -0
  143. package/dist/components/panels/ExpansionPanel/ExpansionPanel.d.ts +1 -2
  144. package/dist/components/panels/ExpansionPanelGroup/ExpansionPanelGroup.d.ts +1 -2
  145. package/dist/components/panels/Panel/Panel.d.ts +4 -21
  146. package/dist/components/panels/PanelList/PanelList.d.ts +1 -1
  147. package/dist/components/panels/PanelStack/PanelStack.d.ts +19 -0
  148. package/dist/components/progress-indicators/ProgressBar/ProgressBar.d.ts +4 -5
  149. package/dist/components/progress-indicators/ProgressRing/ProgressRing.d.ts +12 -4
  150. package/dist/components/{FlowSteps/FlowSteps.d.ts → steppers/StepList/StepList.d.ts} +7 -7
  151. package/dist/css/component-css/pds-action-card.css +1 -0
  152. package/dist/css/component-css/pds-avatar.css +1 -1
  153. package/dist/css/component-css/pds-badge.css +1 -1
  154. package/dist/css/component-css/pds-banner.css +1 -1
  155. package/dist/css/component-css/pds-bar-chart.css +1 -0
  156. package/dist/css/component-css/pds-branch-diff.css +1 -1
  157. package/dist/css/component-css/pds-breadcrumb.css +1 -1
  158. package/dist/css/component-css/pds-button-link.css +1 -1
  159. package/dist/css/component-css/pds-button-nav.css +1 -1
  160. package/dist/css/component-css/pds-button.css +45 -13
  161. package/dist/css/component-css/pds-callout.css +1 -1
  162. package/dist/css/component-css/pds-card-select.css +2 -0
  163. package/dist/css/component-css/pds-card.css +1 -1
  164. package/dist/css/component-css/pds-chart-legend.css +1 -0
  165. package/dist/css/component-css/pds-chart-wrapper.css +1 -0
  166. package/dist/css/component-css/pds-checkbox-group.css +1 -1
  167. package/dist/css/component-css/pds-checkbox.css +1 -1
  168. package/dist/css/component-css/pds-close-button.css +1 -1
  169. package/dist/css/component-css/pds-code-block-legacy.css +1 -1
  170. package/dist/css/component-css/pds-code-block.css +1 -1
  171. package/dist/css/component-css/pds-combobox-multiselect.css +3 -2
  172. package/dist/css/component-css/pds-combobox.css +1 -1
  173. package/dist/css/component-css/pds-compact-empty-state.css +1 -1
  174. package/dist/css/component-css/pds-comparison-list.css +1 -1
  175. package/dist/css/component-css/pds-cta-link.css +1 -1
  176. package/dist/css/component-css/pds-datepicker.css +1 -3
  177. package/dist/css/component-css/pds-drawer.css +1 -0
  178. package/dist/css/component-css/pds-dropdown-menu.css +2 -2
  179. package/dist/css/component-css/pds-dropdown.css +2 -0
  180. package/dist/css/component-css/pds-expansion-panel-group.css +1 -1
  181. package/dist/css/component-css/pds-expansion-panel.css +2 -1
  182. package/dist/css/component-css/pds-file-diff.css +1 -1
  183. package/dist/css/component-css/pds-file-upload.css +3 -3
  184. package/dist/css/component-css/pds-filter-button.css +1 -0
  185. package/dist/css/component-css/pds-full-screen-overlay.css +1 -0
  186. package/dist/css/component-css/pds-horizontal-empty-state.css +1 -1
  187. package/dist/css/component-css/pds-icon-button.css +5 -3
  188. package/dist/css/component-css/pds-icon-story-only.css +1 -1
  189. package/dist/css/component-css/pds-icon.css +1 -1
  190. package/dist/css/component-css/pds-identity-block.css +1 -0
  191. package/dist/css/component-css/pds-index.css +152 -45
  192. package/dist/css/component-css/pds-inline-message.css +1 -1
  193. package/dist/css/component-css/pds-input-group.css +1 -1
  194. package/dist/css/component-css/pds-input-utilities.css +1 -1
  195. package/dist/css/component-css/pds-line-chart.css +1 -0
  196. package/dist/css/component-css/pds-link-new-window.css +1 -1
  197. package/dist/css/component-css/pds-menu-button.css +7 -1
  198. package/dist/css/component-css/pds-modal.css +1 -1
  199. package/dist/css/component-css/pds-nav-menu.css +1 -5
  200. package/dist/css/component-css/pds-navbar.css +4 -1
  201. package/dist/css/component-css/pds-pagination-chapter.css +3 -0
  202. package/dist/css/component-css/pds-pagination-compact.css +1 -0
  203. package/dist/css/component-css/pds-pagination.css +1 -1
  204. package/dist/css/component-css/pds-panel-list.css +1 -1
  205. package/dist/css/component-css/pds-panel-stack.css +1 -0
  206. package/dist/css/component-css/pds-panel.css +2 -1
  207. package/dist/css/component-css/pds-pantheon-logo.css +1 -1
  208. package/dist/css/component-css/pds-payment-icon.css +1 -1
  209. package/dist/css/component-css/pds-picture.css +1 -1
  210. package/dist/css/component-css/pds-pie-chart.css +1 -0
  211. package/dist/css/component-css/pds-platform-icon.css +1 -1
  212. package/dist/css/component-css/pds-popover.css +1 -1
  213. package/dist/css/component-css/pds-progress-bar.css +1 -1
  214. package/dist/css/component-css/pds-progress-ring.css +1 -1
  215. package/dist/css/component-css/pds-proportion-bar.css +1 -0
  216. package/dist/css/component-css/pds-radio-group.css +1 -1
  217. package/dist/css/component-css/pds-result-count.css +1 -0
  218. package/dist/css/component-css/pds-section-message.css +1 -1
  219. package/dist/css/component-css/pds-segmented-button.css +2 -1
  220. package/dist/css/component-css/pds-select.css +1 -1
  221. package/dist/css/component-css/pds-side-nav-global.css +3 -5
  222. package/dist/css/component-css/pds-side-nav.css +3 -1
  223. package/dist/css/component-css/pds-site-footer.css +1 -1
  224. package/dist/css/component-css/pds-site-search.css +1 -0
  225. package/dist/css/component-css/pds-skeleton.css +1 -1
  226. package/dist/css/component-css/pds-skiplink.css +1 -1
  227. package/dist/css/component-css/pds-sortable-list.css +8 -0
  228. package/dist/css/component-css/pds-spinner.css +1 -1
  229. package/dist/css/component-css/pds-split-button.css +1 -1
  230. package/dist/css/component-css/pds-sso-button.css +2 -2
  231. package/dist/css/component-css/pds-status-badge.css +1 -1
  232. package/dist/css/component-css/pds-status-checker.css +1 -0
  233. package/dist/css/component-css/pds-status-indicator.css +1 -1
  234. package/dist/css/component-css/pds-step-list.css +1 -0
  235. package/dist/css/component-css/pds-stepper.css +3 -1
  236. package/dist/css/component-css/pds-switch.css +6 -11
  237. package/dist/css/component-css/pds-tab-menu.css +2 -2
  238. package/dist/css/component-css/pds-table-of-contents.css +1 -1
  239. package/dist/css/component-css/pds-table.css +5 -1
  240. package/dist/css/component-css/pds-tabs.css +1 -1
  241. package/dist/css/component-css/pds-tag.css +1 -1
  242. package/dist/css/component-css/pds-tags-input.css +1 -1
  243. package/dist/css/component-css/pds-tally.css +1 -1
  244. package/dist/css/component-css/pds-text-input.css +1 -1
  245. package/dist/css/component-css/pds-textarea.css +1 -1
  246. package/dist/css/component-css/pds-theme-switcher.css +1 -1
  247. package/dist/css/component-css/pds-timepicker.css +1 -0
  248. package/dist/css/component-css/pds-toaster.css +1 -1
  249. package/dist/css/component-css/pds-tooltip.css +1 -1
  250. package/dist/css/component-css/pds-tree-nav.css +1 -0
  251. package/dist/css/component-css/pds-user-menu-story-only.css +1 -1
  252. package/dist/css/component-css/pds-user-menu.css +32 -1
  253. package/dist/css/component-css/pds-utility-bar.css +1 -0
  254. package/dist/css/component-css/pds-utility-button.css +3 -1
  255. package/dist/css/component-css/pds-vertical-empty-state.css +1 -1
  256. package/dist/css/component-css/pds-vertical-stepper.css +1 -1
  257. package/dist/css/component-css/pds-video-embed.css +1 -1
  258. package/dist/css/component-css/pds-workspace-selector.css +26 -1
  259. package/dist/css/design-tokens/variables.dark.css +385 -338
  260. package/dist/css/design-tokens/variables.global.css +10 -18
  261. package/dist/css/design-tokens/variables.light.css +376 -309
  262. package/dist/css/design-tokens/variables.typography.css +1 -2
  263. package/dist/css/layout-css/pds-app-layout.css +3 -2
  264. package/dist/css/layout-css/pds-docs-layout.css +1 -1
  265. package/dist/css/layout-css/pds-index.css +3 -9
  266. package/dist/css/layout-css/pds-sidebar-layout.css +5 -0
  267. package/dist/css/layout-css/pds-stepper-layout.css +1 -1
  268. package/dist/css/layout-css/pds-three-item-layout.css +1 -1
  269. package/dist/css/layout-css/pds-two-item-layout.css +1 -1
  270. package/dist/css/pds-components.css +152 -45
  271. package/dist/css/pds-core.css +3 -2
  272. package/dist/css/pds-layouts.css +3 -9
  273. package/dist/index.css +5 -1
  274. package/dist/index.d.ts +95 -7
  275. package/dist/index.js +12738 -4787
  276. package/dist/index.js.map +1 -1
  277. package/dist/index.source.d.ts +44 -41
  278. package/dist/layouts/AppLayout/AppLayout.d.ts +85 -10
  279. package/dist/layouts/DocsLayout/DocsLayout.d.ts +9 -7
  280. package/dist/layouts/SidebarLayout/SidebarLayout.d.ts +16 -6
  281. package/dist/layouts/StepperLayout/StepperLayout.d.ts +13 -1
  282. package/dist/layouts/ThreeItemLayout/ThreeItemLayout.d.ts +3 -3
  283. package/dist/layouts/TwoItemLayout/TwoItemLayout.d.ts +3 -3
  284. package/dist/libs/components/NavAccordion/NavAccordion.d.ts +27 -0
  285. package/dist/libs/components/StatusDot/StatusDot.d.ts +15 -0
  286. package/dist/libs/components/utils.d.ts +1 -1
  287. package/dist/libs/types/custom-types.d.ts +11 -5
  288. package/dist/libs/types/layout-types.d.ts +4 -1
  289. package/dist/libs/types/navigation-types.d.ts +17 -1
  290. package/dist/svg/anglesDown.svg +3 -0
  291. package/dist/svg/anglesUp.svg +3 -0
  292. package/dist/svg/barsStaggered.svg +3 -0
  293. package/dist/svg/bookmark.svg +3 -0
  294. package/dist/svg/bookmarkSolid.svg +3 -0
  295. package/dist/svg/box.svg +3 -0
  296. package/dist/svg/circleExclamationSolid.svg +3 -0
  297. package/dist/svg/circleHalfStroke.svg +3 -0
  298. package/dist/svg/circleInfoSolid.svg +3 -0
  299. package/dist/svg/circleQuestionSolid.svg +3 -0
  300. package/dist/svg/claude.svg +3 -0
  301. package/dist/svg/clock.svg +3 -0
  302. package/dist/svg/collapseToCenter.svg +3 -0
  303. package/dist/svg/compress.svg +3 -0
  304. package/dist/svg/diagramVenn.svg +3 -0
  305. package/dist/svg/floppyDisk.svg +3 -0
  306. package/dist/svg/grid.svg +2 -2
  307. package/dist/svg/grid2.svg +3 -0
  308. package/dist/svg/landmark.svg +3 -0
  309. package/dist/svg/move.svg +3 -0
  310. package/dist/svg/octagonExclamation.svg +3 -0
  311. package/dist/svg/openai.svg +3 -0
  312. package/dist/svg/pause.svg +3 -0
  313. package/dist/svg/penPaintbrush.svg +3 -0
  314. package/dist/svg/sidebar.svg +3 -0
  315. package/dist/svg/slider.svg +3 -0
  316. package/dist/svg/squareDashed.svg +3 -0
  317. package/dist/svg/tableColumns.svg +3 -0
  318. package/dist/svg/userSolid.svg +3 -0
  319. package/dist/{layouts → utilities}/FlexContainer/FlexContainer.d.ts +6 -6
  320. package/dist/utilities/GlobalWrapper/GlobalWrapper.d.ts +35 -0
  321. package/dist/utilities/context-providers/ThemeContext/ThemeContext.d.ts +113 -0
  322. package/dist/utilities/grid/Grid.d.ts +58 -0
  323. package/dist/utilities/grid/GridItem.d.ts +57 -0
  324. package/dist/utilities/hooks/useDropdown/index.d.ts +1 -0
  325. package/dist/utilities/hooks/useDropdown/useDropdown.d.ts +138 -0
  326. package/dist/utilities/hooks/useIsMobile/useIsMobile.d.ts +16 -0
  327. package/dist/utilities/hooks/useKeyPress/useKeyPress.d.ts +6 -0
  328. package/dist/utilities/hooks/useKeyboardShortcut/useKeyboardShortcut.d.ts +29 -0
  329. package/package.json +83 -47
  330. package/tailwind/README.md +220 -0
  331. package/tailwind/TESTING.md +457 -0
  332. package/tailwind/v3/preset.cjs +258 -0
  333. package/tailwind/v4/theme.css +230 -0
  334. package/dist/components/CTASlice/CTASlice.d.ts +0 -43
  335. package/dist/components/CodeBlock/themes/pdsLight.d.ts +0 -2
  336. package/dist/components/DashboardStat/DashboardStat.d.ts +0 -28
  337. package/dist/components/PullQuote/PullQuote.d.ts +0 -34
  338. package/dist/components/SiteDashboardHeading/SiteDashboardHeading.d.ts +0 -62
  339. package/dist/components/SocialLinks/SocialLinks.d.ts +0 -23
  340. package/dist/components/cards/CardHeading/CardHeading.d.ts +0 -31
  341. package/dist/components/cards/CardSelectGroup/CardSelectGroup.d.ts +0 -60
  342. package/dist/components/cards/EmptyStateCard/EmptyStateCard.d.ts +0 -36
  343. package/dist/components/cards/LinksCard/LinksCard.d.ts +0 -29
  344. package/dist/components/cards/LinksCard/links-card-sample-data.d.ts +0 -2
  345. package/dist/components/cards/NewSiteCard/NewSiteCard.d.ts +0 -61
  346. package/dist/components/cards/PaymentCard/PaymentCard.d.ts +0 -47
  347. package/dist/components/cards/PricingCard/PricingCard.d.ts +0 -95
  348. package/dist/components/cards/SiteCard/SiteCard.d.ts +0 -50
  349. package/dist/components/footer/FooterHeading/FooterHeading.d.ts +0 -22
  350. package/dist/components/footer/FooterLinks/FooterLinks.d.ts +0 -26
  351. package/dist/components/footer/SiteFooter/SiteFooter.d.ts +0 -34
  352. package/dist/components/footer/SiteFooter/footer-content.d.ts +0 -1
  353. package/dist/components/navigation/DashboardNav/DashboardNav.d.ts +0 -35
  354. package/dist/components/navigation/DashboardNav/DashboardNavItem.d.ts +0 -24
  355. package/dist/components/navigation/NavMenu/NavMenu.d.ts +0 -33
  356. package/dist/components/navigation/NavMenu/NavMenuDropdown.d.ts +0 -24
  357. package/dist/components/navigation/SideNavCompact/SideNavCompact.d.ts +0 -53
  358. package/dist/components/notifications/NotificationHubIcon/NotificationHubIcon.d.ts +0 -38
  359. package/dist/components/notifications/NotificationsPopover/NotificationsPopover.d.ts +0 -118
  360. package/dist/components/tiles/AvatarTileList/AvatarTileList.d.ts +0 -28
  361. package/dist/components/tiles/Tile/Tile.d.ts +0 -42
  362. package/dist/components/tiles/TileGrid/TileGrid.d.ts +0 -29
  363. package/dist/css/component-css/pds-avatar-tile-list.css +0 -1
  364. package/dist/css/component-css/pds-card-heading.css +0 -1
  365. package/dist/css/component-css/pds-card-select-group.css +0 -1
  366. package/dist/css/component-css/pds-cta-slice.css +0 -1
  367. package/dist/css/component-css/pds-dashboard-nav.css +0 -5
  368. package/dist/css/component-css/pds-dashboard-search.css +0 -1
  369. package/dist/css/component-css/pds-dashboard-stat.css +0 -1
  370. package/dist/css/component-css/pds-empty-state-card.css +0 -1
  371. package/dist/css/component-css/pds-flow-steps.css +0 -1
  372. package/dist/css/component-css/pds-footer-heading.css +0 -1
  373. package/dist/css/component-css/pds-footer-links.css +0 -1
  374. package/dist/css/component-css/pds-links-card.css +0 -1
  375. package/dist/css/component-css/pds-new-site-card.css +0 -1
  376. package/dist/css/component-css/pds-notification-hub-icon.css +0 -1
  377. package/dist/css/component-css/pds-notifications-popover.css +0 -1
  378. package/dist/css/component-css/pds-payment-card.css +0 -1
  379. package/dist/css/component-css/pds-pricing-card-local.css +0 -1
  380. package/dist/css/component-css/pds-pricing-card.css +0 -1
  381. package/dist/css/component-css/pds-pull-quote.css +0 -1
  382. package/dist/css/component-css/pds-refresh-checker.css +0 -1
  383. package/dist/css/component-css/pds-side-nav-compact.css +0 -1
  384. package/dist/css/component-css/pds-site-card.css +0 -1
  385. package/dist/css/component-css/pds-site-dashboard-heading.css +0 -1
  386. package/dist/css/component-css/pds-social-links.css +0 -1
  387. package/dist/css/component-css/pds-tile.css +0 -1
  388. package/dist/css/component-css/pds-tiles-common.css +0 -1
  389. package/dist/css/layout-css/pds-dashboard-global.css +0 -8
  390. package/dist/css/layout-css/pds-dashboard-inner.css +0 -1
  391. package/dist/css/layout-css/pds-flex-container.css +0 -1
  392. package/dist/layouts/DashboardGlobal/DashboardGlobal.d.ts +0 -57
  393. package/dist/layouts/DashboardInner/DashboardInner.d.ts +0 -30
  394. package/dist/layouts/GlobalWrapper/GlobalWrapper.d.ts +0 -19
  395. package/dist/utilities/context-providers/ResponsiveContext/ResponsiveContext.d.ts +0 -6
  396. /package/dist/components/{Skiplink → links/Skiplink}/Skiplink.d.ts +0 -0
  397. /package/dist/components/{Picture → media/Picture}/Picture.d.ts +0 -0
  398. /package/dist/components/{VideoEmbed → media/VideoEmbed}/VideoEmbed.d.ts +0 -0
  399. /package/dist/components/{Pagination → pagination/Pagination}/usePagination.d.ts +0 -0
  400. /package/dist/components/{FlowSteps → steppers/StepList}/example-steps.d.ts +0 -0
  401. /package/dist/svg/{linkSimple.svg → link.svg} +0 -0
  402. /package/dist/svg/{linkSimpleSlash.svg → unlink.svg} +0 -0
  403. /package/dist/{layouts → utilities}/Container/Container.d.ts +0 -0
@@ -0,0 +1,1787 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "description": "Mappings for migrating from v1.x to v2.x of PDS Toolkit React",
4
+ "components": {
5
+ "renames": [
6
+ {
7
+ "from": "IndicatorBadge",
8
+ "to": "Badge",
9
+ "reason": "IndicatorBadge has been renamed to Badge in v2. The component API has also changed — see props.typeChanges for color and size migration details."
10
+ },
11
+ {
12
+ "from": "NavMenu",
13
+ "to": "SiteMenu",
14
+ "reason": "NavMenu has been renamed to SiteMenu in v2 to better reflect its purpose as a website navigation menu. The component now uses the Disclosure Navigation pattern instead of ARIA menu roles, making it semantically correct for navigation links. The internal NavMenuDropdown subcomponent is now SiteMenuDropdown but was never publicly exported."
15
+ },
16
+ {
17
+ "from": "RefreshChecker",
18
+ "to": "StatusChecker",
19
+ "reason": "RefreshChecker has been renamed to StatusChecker in v2 to better reflect its purpose as a general-purpose status display and polling trigger, not limited to page refresh."
20
+ },
21
+ {
22
+ "from": "FlowSteps",
23
+ "to": "StepList",
24
+ "reason": "FlowSteps has been renamed to StepList in v2. The FlowStep item type has also been renamed to StepListItem. All props remain the same."
25
+ },
26
+ {
27
+ "from": "CardSelectGroup",
28
+ "to": "CardSelect",
29
+ "description": "Renamed for clarity. The Group suffix was redundant since the component is inherently a group."
30
+ },
31
+ {
32
+ "from": "DashboardSearch",
33
+ "to": "SiteSearch",
34
+ "reason": "Renamed to SiteSearch to better reflect its purpose as a general-purpose site search input, not limited to dashboard navigation. The component has also moved out of the navigation subdirectory."
35
+ },
36
+ {
37
+ "from": "SideNavCompact",
38
+ "to": "TreeNav",
39
+ "description": "SideNavCompact has been renamed to TreeNav in V2 to better reflect its purpose as a multi-level tree navigation for documentation sites. It now implements the ARIA tree view pattern."
40
+ }
41
+ ],
42
+ "removals": [
43
+ {
44
+ "component": "DashboardStat",
45
+ "reason": "DashboardStat has been removed in v2 and is not being carried forward. Remove any usage from your application."
46
+ },
47
+ {
48
+ "component": "CardHeading",
49
+ "reason": "Component removed. Use a semantic heading element (h2, h3, h4, etc.) with a pds-heading-* utility class to control visual size (e.g. <h3 className='pds-heading-xl'>Card title</h3>)."
50
+ },
51
+ {
52
+ "component": "EmptyStateCard",
53
+ "reason": "Component removed. Use Card with a footer slot. See Patterns/Cards/Empty State Card in Storybook for the recipe."
54
+ },
55
+ {
56
+ "component": "LinksCard",
57
+ "reason": "Component removed. Use Card. See Patterns/Cards/Links Card in Storybook for the recipe."
58
+ },
59
+ {
60
+ "component": "NewSiteCard",
61
+ "reason": "Component removed. Use ActionCard. See Patterns/Cards/New Site Card in Storybook for the recipe."
62
+ },
63
+ {
64
+ "component": "PaymentCard",
65
+ "reason": "Component removed. Use ActionCard. See Patterns/Cards/Payment Card in Storybook for the recipe."
66
+ },
67
+ {
68
+ "component": "PricingCard",
69
+ "reason": "Component removed. Use Card with a footer slot. See Patterns/Cards/Pricing Card in Storybook for the recipe."
70
+ },
71
+ {
72
+ "component": "SiteCard",
73
+ "reason": "Component removed. Use ActionCard. See Patterns/Cards/Site Card in Storybook for the recipe."
74
+ },
75
+ {
76
+ "component": "SiteDashboardHeading",
77
+ "reason": "Component removed. Compose locally using Icon, Badge, Button, and optionally Popover with SiteTypeIcon from custom-types. See Patterns/Site Dashboard Heading in Storybook for the recipe."
78
+ },
79
+ {
80
+ "component": "Navbar",
81
+ "prop": "hideLogo",
82
+ "reason": "Removed in V2. The logo is now passed via the logo slot. Omit the slot to show no logo.",
83
+ "replacement": "Remove this prop. To hide the logo, simply omit the logo slot."
84
+ },
85
+ {
86
+ "component": "Navbar",
87
+ "prop": "logoDisplayType",
88
+ "reason": "Removed in V2. Logo display type is now controlled by the PantheonLogo component's displayType prop, passed directly into the logo slot.",
89
+ "replacement": "Pass <PantheonLogo displayType='...' slot='logo' /> into the Navbar children."
90
+ },
91
+ {
92
+ "component": "Navbar",
93
+ "prop": "logoLinkContent",
94
+ "reason": "Removed in V2. Logo link is now passed via the PantheonLogo component in the logo slot.",
95
+ "replacement": "Pass <PantheonLogo linkContent={<a href='...'>...</a>} slot='logo' /> into the Navbar children."
96
+ },
97
+ {
98
+ "component": "Navbar",
99
+ "prop": "logoSrc",
100
+ "reason": "Removed in V2. Custom logo images should be placed directly in the logo slot.",
101
+ "replacement": "Place your logo image element directly in the logo slot: <img src='...' slot='logo' />."
102
+ },
103
+ {
104
+ "component": "Navbar",
105
+ "prop": "logoSubBrand",
106
+ "reason": "Removed in V2 along with sub-brand logo support.",
107
+ "replacement": "Remove this prop. Sub-brand display is no longer supported in Navbar."
108
+ },
109
+ {
110
+ "component": "PantheonLogo",
111
+ "prop": "subBrand",
112
+ "reason": "Removed in V2. Sub-brand display has been removed from the PantheonLogo component.",
113
+ "replacement": "Remove this prop. Compose your own sub-brand treatment using a separator and text element alongside PantheonLogo."
114
+ },
115
+ {
116
+ "component": "PantheonLogo",
117
+ "prop": "displayType",
118
+ "reason": "The sub-brand and sub-brand-small values have been removed in V2.",
119
+ "replacement": "Use 'full', 'icon', or 'wordmark' instead. Remove any usage of displayType='sub-brand' or displayType='sub-brand-small'."
120
+ },
121
+ {
122
+ "component": "WorkspaceSelector",
123
+ "prop": "planTier (on WorkspaceSelectorItem)",
124
+ "reason": "Removed in V2. Plan tier badges are no longer displayed in the workspace selector trigger button.",
125
+ "replacement": "Remove the planTier field from WorkspaceSelectorItem objects."
126
+ }
127
+ ],
128
+ "additions": [
129
+ {
130
+ "component": "ThemeContextProvider",
131
+ "description": "New for V2. A context provider that owns the color-mode preference (light, dark, or system), applies the resolved theme to the data-theme attribute, and persists it to localStorage. Exposes the useTheme hook and a controlled mode for app-managed persistence. Enable via GlobalWrapper's enableThemeSwitching prop or render it directly.",
132
+ "usage": "Use to add light/dark/system theme switching to an app. Pair with the ThemeSwitcher component and consume state with useTheme."
133
+ },
134
+ {
135
+ "component": "PaginationChapter",
136
+ "description": "New for V2. A previous/next navigation control with descriptive page labels. Suited for article or document navigation where page numbers are less relevant than content names.",
137
+ "usage": "Use when navigating linearly through a series of pages such as blog posts, documentation chapters, or wizard steps."
138
+ },
139
+ {
140
+ "component": "PaginationCompact",
141
+ "description": "New for V2. A space-efficient pagination control combining a page selector dropdown with previous/next buttons. Suited for dense layouts such as table toolbars or sidebars.",
142
+ "usage": "Use when horizontal space is limited or the total page count is high and users need direct access to any page."
143
+ },
144
+ {
145
+ "component": "Navbar",
146
+ "prop": "logo slot",
147
+ "description": "New logo named slot renders the logo in both the desktop bar and the mobile top bar. Replaces the logoLinkContent, logoSrc, logoDisplayType, logoSubBrand, and hideLogo props.",
148
+ "usage": "Pass <PantheonLogo linkContent={<a href='...'>...</a>} slot='logo' /> as a child of Navbar."
149
+ },
150
+ {
151
+ "component": "Navbar",
152
+ "prop": "items-center slot",
153
+ "description": "New items-center named slot renders content in the center of the desktop navbar, truly centered using CSS grid. On mobile, the slot content collapses into the slide-out panel alongside items-left and items-right.",
154
+ "usage": "Pass content with slot='items-center' to place it in the center of the navbar (e.g. a search input)."
155
+ },
156
+ {
157
+ "component": "PantheonLogo",
158
+ "prop": "size",
159
+ "description": "New size prop controls logo scale. The wordmark height is the sizing basis and maps to PDS typography size tokens: s = --pds-typography-size-s, m = --pds-typography-size-m, l = --pds-typography-size-l. The full and icon variants scale proportionally so the fist matches the wordmark height.",
160
+ "usage": "Use size='s' for compact contexts (e.g. navbar), size='m' for default, size='l' for hero or marketing use."
161
+ },
162
+ {
163
+ "component": "AppLayout",
164
+ "prop": "header slot",
165
+ "description": "New header named slot renders a full-width region (typically a Navbar) above the sidebar and main content. When present, AppLayout stacks the header on top and positions the sidebar directly below it, so consumers no longer need an external flex-column wrapper to combine a Navbar with AppLayout.",
166
+ "usage": "Pass a component such as <Navbar slot='header'>...</Navbar> as a child of AppLayout."
167
+ },
168
+ {
169
+ "component": "AppLayout",
170
+ "prop": "footer slot",
171
+ "description": "New footer named slot renders a region (typically a SiteFooter) below the main content and aligned with it, while the sidebar spans the full height alongside the main + footer column. Gives the footer its own landmark instead of nesting it inside the main element.",
172
+ "usage": "Pass a component such as <SiteFooter as='footer' slot='footer' /> as a child of AppLayout."
173
+ },
174
+ {
175
+ "component": "Navbar",
176
+ "prop": "inlinePadding",
177
+ "description": "New inlinePadding prop overrides the desktop bar's horizontal (inline) padding with any CSS length, applied symmetrically. Defaults to the Container's standard gutter, so existing navbars are unaffected.",
178
+ "usage": "Set inlinePadding (e.g. 'var(--pds-spacing-m)') to align the navbar content with an adjacent app shell, such as the AppLayout sidebar when the navbar is in a header slot."
179
+ }
180
+ ],
181
+ "deprecations": [
182
+ {
183
+ "component": "DashboardGlobal",
184
+ "reason": "DashboardGlobal has been removed in v2. Use AppLayout instead, which provides a more flexible and composable application shell.",
185
+ "replacement": "Replace <DashboardGlobal> with <AppLayout>. See the AppLayout documentation for slot-based composition."
186
+ },
187
+ {
188
+ "component": "DashboardInner",
189
+ "reason": "DashboardInner has been removed in v2. It is no longer necessary as a dedicated inner content wrapper.",
190
+ "replacement": "No direct replacement. Structure your page content directly within AppLayout's content area."
191
+ },
192
+ {
193
+ "component": "DashboardNav",
194
+ "reason": "DashboardNav has been removed in v2. Use SideNavGlobal instead, which provides a more flexible sidebar navigation pattern.",
195
+ "replacement": "Replace <DashboardNav> with <SideNavGlobal>. The v1 secondaryMenuItems/secondaryMenuLabel props have no direct equivalent; instead, add the secondary group to the single menuItems array, preceded by a separator ({ isSeparator: true }) and a section heading ({ isHeading: true, label: '…' }). See the SideNavGlobal documentation for menu item configuration."
196
+ },
197
+ {
198
+ "component": "CTASlice",
199
+ "reason": "CTASlice has been removed in v2 and is no longer published as a component.",
200
+ "replacement": "No replacement. Remove usage of <CTASlice> from your application."
201
+ },
202
+ {
203
+ "component": "FooterHeading",
204
+ "reason": "FooterHeading has been removed in v2.",
205
+ "replacement": "No direct replacement. Contact the design team for guidance on how to handle footer headings in your application."
206
+ },
207
+ {
208
+ "component": "FooterLinks",
209
+ "reason": "FooterLinks has been removed in v2.",
210
+ "replacement": "No direct replacement. Contact the design team for guidance on how to handle footer link groups in your application."
211
+ },
212
+ {
213
+ "component": "PullQuote",
214
+ "reason": "PullQuote has been removed in v2 and is no longer published as a component.",
215
+ "replacement": "No replacement. Remove usage of <PullQuote> from your application."
216
+ },
217
+ {
218
+ "component": "AvatarTileList",
219
+ "reason": "AvatarTileList has been removed in v2 and is no longer published as a component.",
220
+ "replacement": "No replacement. Remove usage of <AvatarTileList> from your application."
221
+ },
222
+ {
223
+ "component": "Tile",
224
+ "reason": "Tile has been removed in v2 and is no longer published as a component.",
225
+ "replacement": "No replacement. Remove usage of <Tile> from your application."
226
+ },
227
+ {
228
+ "component": "TileGrid",
229
+ "reason": "TileGrid has been removed in v2 and is no longer published as a component.",
230
+ "replacement": "No replacement. Remove usage of <TileGrid> from your application."
231
+ },
232
+ {
233
+ "component": "SocialLinks",
234
+ "reason": "SocialLinks has been removed in v2 and is no longer published as a component.",
235
+ "replacement": "No replacement. Remove usage of <SocialLinks> from your application."
236
+ }
237
+ ]
238
+ },
239
+ "props": {
240
+ "renames": [
241
+ {
242
+ "component": "GlobalWrapper",
243
+ "from": "mobileMenuMaxWidth",
244
+ "to": "mobileMaxWidth",
245
+ "reason": "Renamed for clarity — the value is the maximum viewport width at which mobile styles are active. The prop now drives the data-pds-mobile attribute on :root used by component CSS to apply mobile styles, replacing the ResponsiveContext isMobile pattern. The default value has changed from 640 to 767 to align exactly with --pds-bp-s-only (max-width: 767px)."
246
+ },
247
+ {
248
+ "component": "ComboboxMultiselect",
249
+ "from": "auxiliaryPanel",
250
+ "to": "aiSuggestions",
251
+ "reason": "Renamed for clarity — the auxiliary panel is specifically for AI suggestions. General-purpose floating panels can now be built with the Dropdown compound component."
252
+ },
253
+ {
254
+ "component": "Button",
255
+ "from": "isLoading",
256
+ "to": "isWorking",
257
+ "reason": "The v1 isLoading prop (which showed a spinner and disabled the button) has been renamed to isWorking. A new isLoading prop has been added with different behavior - it displays a pulsing skeleton loader for initial page/section loads, while isWorking shows a spinner for action completion."
258
+ },
259
+ {
260
+ "component": "Icon",
261
+ "from": "iconSize",
262
+ "to": "size",
263
+ "reason": "The iconSize prop has been renamed to size for consistency across V2 icon components. The default ('l') is unchanged, but the 'xs' (10px) value has been removed (see props.typeChanges) — use 's' instead."
264
+ },
265
+ {
266
+ "component": "CloseButton",
267
+ "from": "iconSize",
268
+ "to": "size",
269
+ "reason": "The iconSize prop has been renamed to size for consistency with other button components. Size values have also been standardized to 's', 'm', 'l' (see props.typeChanges)."
270
+ },
271
+ {
272
+ "component": "PlatformIcon",
273
+ "from": "iconSize",
274
+ "to": "size",
275
+ "reason": "The iconSize prop has been renamed to size for consistency with V2 component conventions. Size values have also changed to align with the Icon component scale — 'xs', 's', 'm', 'l', 'xl', '2xl', '3xl' — replacing the previous 1.2× ratio scale. The pixel sizes for 'l', 'xl', and '2xl' are different: l is now 1.25rem (was 1.2rem), xl is 1.5rem (was 1.44rem), 2xl is 2rem (was 1.728rem)."
276
+ },
277
+ {
278
+ "component": "FileDiff",
279
+ "from": "labelStrings",
280
+ "to": "translationStrings",
281
+ "reason": "Renamed for consistency with other V2 components."
282
+ },
283
+ {
284
+ "component": "DocsLayout",
285
+ "from": "sidebarMinWidth",
286
+ "to": "sidebarWidthMin",
287
+ "reason": "Renamed for consistency with the sidebarWidth/sidebarWidthMax/sidebarWidthMin naming convention used across layout components."
288
+ },
289
+ {
290
+ "component": "CardSelect",
291
+ "from": "options[].description",
292
+ "to": "options[].children",
293
+ "description": "Each option now accepts children (ReactNode) instead of description (string | ReactNode), enabling richer composition inside card options."
294
+ }
295
+ ],
296
+ "additions": [
297
+ {
298
+ "component": "Panel",
299
+ "prop": "variant",
300
+ "description": "variant added four semantic values — 'info', 'warning', 'success', and 'discovery' — alongside the existing 'critical', bringing Panel to nine variants total. Semantic variants tint the whole panel and are the v2 replacement for the removed hasStatusIndicator + statusType status bar.",
301
+ "usage": "Use a semantic variant (e.g. variant='warning') to give a panel a status appearance. When migrating a v1 status panel, map statusType to the same-named variant (neutral → default)."
302
+ },
303
+ {
304
+ "component": "ButtonLink",
305
+ "prop": "variant",
306
+ "description": "ButtonLink now supports the full Button variant set, including the new 'link' variant (a text-link appearance on a real anchor). Previously the 'inline' variant was excluded.",
307
+ "usage": "Use variant=\"link\" for an anchor styled as an inline text link — e.g. the account-tier links in a dashboard workspace header."
308
+ },
309
+ {
310
+ "component": "Card",
311
+ "prop": "imageVariant",
312
+ "description": "New imageVariant prop controls how the image slot is presented. bleed (default) extends the image to the card edges; inset adds padding around the image with all corners rounded. Note: the padding prop does not affect image padding.",
313
+ "usage": "Use imageVariant='inset' when the image should appear contained within the card rather than bleeding to the edges."
314
+ },
315
+ {
316
+ "component": "Card",
317
+ "prop": "footer slot",
318
+ "description": "New footer named slot renders a bottom-aligned content area below the main slot. The footer is pinned to the bottom of the card regardless of main content length, enabling CTA alignment across cards of varying heights in a grid.",
319
+ "usage": "Pass content with slot='footer' to place it in the footer area. Use for CTAs such as ButtonLink."
320
+ },
321
+ {
322
+ "component": "CardSelect",
323
+ "prop": "padding",
324
+ "description": "New padding prop controls each card's content padding: 'condensed' | 'standard' (default) | 'spacious', matching Card and ActionCard.",
325
+ "usage": "Use padding='condensed' for denser card grids such as the site selection cards."
326
+ },
327
+ {
328
+ "component": "Card",
329
+ "prop": "background",
330
+ "description": "background gained a 'secondary' option, alongside the existing 'default' and 'transparent'. It fills the card with the secondary surface token (--pds-color-surface-default-secondary).",
331
+ "usage": "Use background='secondary' to set a card apart from default-surface cards on the same page."
332
+ },
333
+ {
334
+ "component": "ActionCard",
335
+ "prop": "background",
336
+ "description": "background gained a 'secondary' option, alongside the existing 'default' and 'transparent'. It fills the card with the secondary surface token (--pds-color-surface-default-secondary).",
337
+ "usage": "Use background='secondary' to set a card apart from default-surface cards on the same page."
338
+ },
339
+ {
340
+ "component": "CardSelect",
341
+ "prop": "background",
342
+ "description": "New background prop ('default' | 'secondary' | 'transparent') sets each card's surface fill, matching Card and ActionCard.",
343
+ "usage": "Use background='secondary' or 'transparent' when the cards sit on a surface that needs contrast from the default card background."
344
+ },
345
+ {
346
+ "component": "CardSelect",
347
+ "prop": "showCardLabels",
348
+ "description": "New showCardLabels prop (boolean, default true) controls the per-card label text. When false, each card's label is visually hidden but stays in the DOM as the accessible name for its radio input (still required) — for cards that compose their own visible titles. labelDisplay now controls only the group legend.",
349
+ "usage": "Set showCardLabels={false} when each card provides its own visible title, as in the Site Selection Cards pattern."
350
+ },
351
+ {
352
+ "component": "Button",
353
+ "prop": "isLoading",
354
+ "description": "New isLoading prop displays a pulsing skeleton loader effect (hides all button content) and is used during initial page or section loads. This is different from the v1 isLoading which showed a spinner - that functionality is now the isWorking prop.",
355
+ "usage": "Use isLoading for initial loads, use isWorking when performing an action like form submission."
356
+ },
357
+ {
358
+ "component": "IconButton",
359
+ "prop": "hasBorder",
360
+ "description": "New hasBorder prop controls border visibility. Defaults to false (no border). When true, shows a border using variant-specific border color tokens. Hover background is identical in both states.",
361
+ "usage": "Use hasBorder={true} when the button needs a visible border for emphasis or grouping. Omit (or set false) for a borderless icon button."
362
+ },
363
+ {
364
+ "component": "Select",
365
+ "prop": "size",
366
+ "description": "New size prop adds three height/padding/font-size variants. Defaults to 's' (32px). 'm' gives 40px and 'l' gives 48px, matching the TextInput size scale.",
367
+ "usage": "Use size='s' (default) for standard form controls, size='m' for more prominent inputs, size='l' for large/prominent form layouts."
368
+ },
369
+ {
370
+ "component": "Combobox",
371
+ "prop": "size",
372
+ "description": "New size prop adds three height/padding/font-size variants. Defaults to 's' (32px). 'm' gives 40px and 'l' gives 48px, matching the TextInput and Select size scale.",
373
+ "usage": "Use size='s' (default) for standard form controls, size='m' for more prominent inputs, size='l' for large/prominent form layouts."
374
+ },
375
+ {
376
+ "component": "Pagination",
377
+ "prop": "size",
378
+ "description": "New size prop adds two height/font-size variants. Defaults to 'm' (40px). 's' gives 20px items for compact layouts.",
379
+ "usage": "Use size='m' (default) for standard pagination, size='s' for compact or dense layouts."
380
+ },
381
+ {
382
+ "component": "Tabs",
383
+ "prop": "size",
384
+ "description": "New size prop adds two tab height variants. Defaults to 's' (32px). 'm' gives 40px tabs with larger text and icons.",
385
+ "usage": "Use size='s' (default) for standard tabs, size='m' for more prominent tab bars."
386
+ },
387
+ {
388
+ "component": "TabMenu",
389
+ "prop": "size",
390
+ "description": "New size prop adds two tab height variants. Defaults to 's' (32px). 'm' gives 40px tabs with larger text and icons.",
391
+ "usage": "Use size='s' (default) for standard navigation, size='m' for more prominent tab navigation."
392
+ },
393
+ {
394
+ "component": "SegmentedButton",
395
+ "prop": "size",
396
+ "description": "New size prop adds three self-contained height/font-size variants, independent of the button size scale: 's' (20px), 'm' (24px, default), and 'l' (32px). The icon scales with the size (s → 12px, m → 14px, l → 16px).",
397
+ "usage": "Use size='m' (default) for standard usage, size='s' for dense or space-constrained layouts, size='l' for a more prominent control."
398
+ },
399
+ {
400
+ "component": "SegmentedButton",
401
+ "prop": "border",
402
+ "description": "New boolean prop that draws a border around the track. Defaults to false — the track has no border.",
403
+ "usage": "Set border to add a visible border around the control."
404
+ },
405
+ {
406
+ "component": "SegmentedButton",
407
+ "prop": "iconOnly",
408
+ "description": "New boolean prop that renders each option as a square, icon-only segment with a circular selected pill. Defaults to false. Each option must include an iconName; its label is used as the visually hidden accessible name and shown in a tooltip on hover. Works at any size; the icon and pill scale with the size prop.",
409
+ "usage": "Set iconOnly for compact, icon-only controls (for example, a theme toggle)."
410
+ },
411
+ {
412
+ "component": "ButtonNav",
413
+ "prop": "border",
414
+ "description": "New boolean prop that draws a border around the track, matching the SegmentedButton component. Defaults to false — the track has no border.",
415
+ "usage": "Set border to add a visible border around the navigation track."
416
+ },
417
+ {
418
+ "component": "UserMenu",
419
+ "prop": "theme",
420
+ "description": "New prop for the currently active theme ('light' | 'dark' | 'system'). When provided together with onThemeChange, a theme switcher row (ThemeSwitcher 'toggle' variant) renders at the top of the menu.",
421
+ "usage": "Provide theme and onThemeChange to surface theme switching directly in the user menu."
422
+ },
423
+ {
424
+ "component": "UserMenu",
425
+ "prop": "onThemeChange",
426
+ "description": "New callback fired with the newly selected theme. Provide together with theme to render the theme switcher row. Optional themeLabel and themeLabelStrings props localize the row.",
427
+ "usage": "Use to update and persist your application's theme state when the user changes it from the menu."
428
+ },
429
+ {
430
+ "component": "StatusIndicator",
431
+ "prop": "linkContent",
432
+ "description": "New optional prop that makes the status indicator a link. Pass a fully-formed, router-agnostic link element (for example, an anchor or your router's link component); the indicator's dot and label render as its children, so the whole indicator becomes clickable.",
433
+ "usage": "Provide linkContent to link the status indicator, following the same router-agnostic link pattern used across the toolkit."
434
+ },
435
+ {
436
+ "component": "ComboboxMultiselect",
437
+ "prop": "size",
438
+ "description": "New size prop adds three height/padding/font-size variants. Defaults to 's' (32px). 'm' gives 40px and 'l' gives 48px, matching the TextInput and Select size scale.",
439
+ "usage": "Use size='s' (default) for standard form controls, size='m' for more prominent inputs, size='l' for large/prominent form layouts."
440
+ },
441
+ {
442
+ "component": "ComparisonList",
443
+ "prop": "size",
444
+ "description": "New size prop adds two density variants affecting font size, row spacing, column gap, and icon size. Defaults to 's'.",
445
+ "usage": "Use size='s' (default) for compact lists, size='m' for a larger, more spacious layout."
446
+ },
447
+ {
448
+ "component": "PaymentIcon",
449
+ "prop": "size",
450
+ "description": "New size prop controls icon height using the standard icon scale: 'xs' (0.625rem), 's' (0.75rem), 'm' (1rem), 'l' (1.25rem), 'xl' (1.5rem), '2xl' (2rem, default), '3xl' (2.5rem). Width scales automatically to preserve aspect ratio. Previously the icon had a fixed width of 4rem with no size control.",
451
+ "usage": "Use size='2xl' (default) for standard usage. Adjust as needed to match surrounding content scale."
452
+ },
453
+ {
454
+ "component": "Tag",
455
+ "prop": "size",
456
+ "type": "'xs' | 's' | 'm'",
457
+ "default": "'s'",
458
+ "description": "Controls the size of the tag.",
459
+ "usage": "Use size='s' (default), size='xs' for compact, or size='m' for large."
460
+ },
461
+ {
462
+ "component": "FileUpload",
463
+ "prop": "size",
464
+ "description": "New size prop controls the height and padding of the file upload input. Accepts 's' | 'm'.",
465
+ "usage": "Use size='s' (default) for compact forms, size='m' for standard forms."
466
+ },
467
+ {
468
+ "component": "SidebarLayout",
469
+ "prop": "sidebarWidthMin",
470
+ "description": "New prop that sets the minimum width of the sidebar in rems. Ensures the sidebar remains usable on medium-sized screens. Default: 15.",
471
+ "usage": "Use to prevent the sidebar from becoming too narrow as the viewport shrinks."
472
+ },
473
+ {
474
+ "component": "SidebarLayout",
475
+ "prop": "sidebarWidthMax",
476
+ "description": "New prop that sets the maximum width of the sidebar in rems. Prevents the sidebar from growing too wide on large screens. Default: 25.",
477
+ "usage": "Use to cap the sidebar width on wide viewports when using a large percentage value."
478
+ },
479
+ {
480
+ "component": "DocsLayout",
481
+ "prop": "sidebarWidthMax",
482
+ "description": "New prop that sets the maximum width of the sidebar in rems. Prevents the sidebar from growing too wide on large screens. Default: 20.",
483
+ "usage": "Use to cap the sidebar width on wide viewports."
484
+ },
485
+ {
486
+ "component": "Table",
487
+ "prop": "columns",
488
+ "description": "Replaces `headers`. An array of column definition objects, each with a required `id` (stable string identifier), `header` (ReactNode), and optional `sortable` (boolean).",
489
+ "usage": "columns={[{ id: 'name', header: 'Site name', sortable: true }]}"
490
+ },
491
+ {
492
+ "component": "Table",
493
+ "prop": "isLoading",
494
+ "description": "When true, renders skeleton rows in place of data. Use while data is fetching.",
495
+ "usage": "Use isLoading={true} during data fetches. Pair with loadingRowCount to control how many skeleton rows appear."
496
+ },
497
+ {
498
+ "component": "Table",
499
+ "prop": "loadingRowCount",
500
+ "description": "Number of skeleton rows to render when isLoading is true. Defaults to 5.",
501
+ "usage": "Set to approximate the expected row count to reduce layout shift when data loads."
502
+ },
503
+ {
504
+ "component": "Table",
505
+ "prop": "emptyState",
506
+ "description": "Custom ReactNode rendered when rowData is empty and isLoading is false. Defaults to a CompactEmptyState with heading 'No results found.'",
507
+ "usage": "Pass a custom <CompactEmptyState> or any ReactNode for a tailored empty experience."
508
+ },
509
+ {
510
+ "component": "Table",
511
+ "prop": "itemsPerPage",
512
+ "description": "Enables pagination. In uncontrolled mode the Table slices rowData internally. In controlled mode (with onPageChange) the consumer passes the current page slice as rowData.",
513
+ "usage": "Set itemsPerPage={25} for uncontrolled paging. Pair with onPageChange, currentPage, and totalItemCount for controlled mode."
514
+ },
515
+ {
516
+ "component": "Table",
517
+ "prop": "currentPage",
518
+ "description": "Current 1-based page number for controlled pagination. Pair with onPageChange.",
519
+ "usage": "Required in controlled pagination mode alongside onPageChange and totalItemCount."
520
+ },
521
+ {
522
+ "component": "Table",
523
+ "prop": "totalItemCount",
524
+ "description": "Total number of items across all pages. Required in controlled pagination mode so the Pagination component can compute the page count.",
525
+ "usage": "Pass the total count from your API response, not the length of the current page slice."
526
+ },
527
+ {
528
+ "component": "Table",
529
+ "prop": "onPageChange",
530
+ "description": "Callback fired when the user navigates to a new page. Receives the new 1-based page number. Providing this prop activates controlled pagination mode.",
531
+ "usage": "onPageChange={(page) => fetchPage(page)}"
532
+ },
533
+ {
534
+ "component": "Table",
535
+ "prop": "onRowSelectionChange",
536
+ "description": "Enables the checkbox column. Fires with the full array of currently selected row IDs on every selection change.",
537
+ "usage": "onRowSelectionChange={(ids) => setSelectedRows(ids)}"
538
+ },
539
+ {
540
+ "component": "Table",
541
+ "prop": "selectedRows",
542
+ "description": "Controlled selected row IDs. When provided alongside onRowSelectionChange, enables controlled selection mode.",
543
+ "usage": "selectedRows={selectedRows}"
544
+ },
545
+ {
546
+ "component": "Table",
547
+ "prop": "getRowId",
548
+ "description": "Derives a stable string ID from a row object for selection tracking. Defaults to array index. Required when using pagination to preserve selection across page changes.",
549
+ "usage": "getRowId={(row) => String(row.id)}"
550
+ },
551
+ {
552
+ "component": "Table",
553
+ "prop": "selectAllLabel",
554
+ "description": "Visually hidden accessible label for the select-all header checkbox. Defaults to 'Select all rows'.",
555
+ "usage": "Override for translation."
556
+ },
557
+ {
558
+ "component": "Table",
559
+ "prop": "getSelectRowLabel",
560
+ "description": "Returns the visually hidden accessible label for each row's checkbox. Defaults to () => 'Select row'.",
561
+ "usage": "Override for translation."
562
+ },
563
+ {
564
+ "component": "Table",
565
+ "prop": "isRowSelectable",
566
+ "description": "Predicate (row, rowId) => boolean that returns false to disable selection for specific rows. When omitted, all rows are selectable. Non-selectable rows render a disabled checkbox and are excluded from the select-all checkbox's state and toggle.",
567
+ "usage": "isRowSelectable={(row) => row.status !== 'locked'}"
568
+ },
569
+ {
570
+ "component": "Table",
571
+ "prop": "getRowSelectDisabledReason",
572
+ "description": "Returns the reason a row's selection checkbox is disabled. Only called for rows where isRowSelectable returns false. The reason is appended to the checkbox's accessible label (so screen readers announce why) and set as a native title tooltip. A disabled checkbox is not focusable, so a focus/hover-only tooltip would be missed — embedding the reason in the accessible name ensures it is conveyed.",
573
+ "usage": "getRowSelectDisabledReason={() => 'Locked sites cannot be selected'}"
574
+ },
575
+ {
576
+ "component": "Table",
577
+ "prop": "paginationLabels",
578
+ "description": "Translatable labels for the built-in pagination controls: the previous/next buttons, the page selector, and the page-count separator ('of'). Forwarded to the internal PaginationCompact. When omitted, English defaults are used.",
579
+ "usage": "paginationLabels={{ previous: 'Página anterior', next: 'Página siguiente', pageSelect: 'Ir a la página', of: 'de' }}"
580
+ },
581
+ {
582
+ "component": "Table",
583
+ "prop": "pageSizeSelectLabel",
584
+ "description": "Accessible label for the rows-per-page selector. Defaults to 'Rows per page'.",
585
+ "usage": "Override for translation, e.g. pageSizeSelectLabel='Filas por página'."
586
+ },
587
+ {
588
+ "component": "TagsInput",
589
+ "prop": "size",
590
+ "description": "New size prop adds three height/padding/font-size variants for the tag pills and input wrapper. Defaults to 's' (compact, 12px chip font). 'm' gives more padding. 'l' gives 14px chip font and larger input text, matching the ComboboxMultiselect size scale.",
591
+ "usage": "Use size='s' (default) for standard form controls, size='m' for more prominent inputs, size='l' for large/prominent form layouts."
592
+ },
593
+ {
594
+ "component": "SideNav",
595
+ "prop": "hasMobileDropdown",
596
+ "description": "New hasMobileDropdown prop opts in to rendering a dropdown menu in place of the standard navigation at mobile viewports. Defaults to false — the standard navigation is shown at all breakpoints.",
597
+ "usage": "Use hasMobileDropdown={true} if your layout requires a dropdown menu at mobile. The mobile breakpoint is controlled by the mobileBreakpoint prop on GlobalWrapper."
598
+ },
599
+ {
600
+ "component": "GlobalWrapper",
601
+ "prop": "enableThemeSwitching",
602
+ "description": "New opt-in prop that wraps children in a ThemeContextProvider, which owns the color-mode preference and applies the resolved theme to the data-theme attribute. Defaults to false. Configure the provider via the themeProps prop (defaultTheme, storageKey, controlled theme/onThemeChange, nodeRef).",
603
+ "usage": "Set enableThemeSwitching to add color-mode theme switching to an app, then consume the value with the useTheme hook (for example, to drive a ThemeSwitcher)."
604
+ },
605
+ {
606
+ "component": "HorizontalEmptyState",
607
+ "prop": "hasIndentedContent",
608
+ "description": "New opt-in prop that adds inline-start padding to the content block so its text aligns with the content of cards placed below it. Defaults to false. The image/video stays flush with the container edge either way.",
609
+ "usage": "Set hasIndentedContent={true} when this empty state sits directly above a row of cards (see the Horizontal Empty State pattern). Omit it when the component is used on its own."
610
+ },
611
+ {
612
+ "component": "Datepicker",
613
+ "prop": "allowCustomRange",
614
+ "description": "New opt-out prop that removes the 'Custom' entry (and the divider above it) from the built-in presets list, leaving only the fixed presets. Defaults to true, so existing preset lists are unchanged.",
615
+ "usage": "Set allowCustomRange={false} when the surface can only serve a known set of windows and an arbitrary range would be a dead end. On its own it only removes the entry; pair it with showPresetCalendar={false} for a popover that is nothing but the preset list."
616
+ },
617
+ {
618
+ "component": "Datepicker",
619
+ "prop": "allowDateRangeSelection",
620
+ "description": "New prop controlling whether range mode may select a span of days. Defaults to true (unchanged two-click behavior). Set to false to constrain the calendar to a single day per selection: one click picks that day as both the start and the end. The emitted value stays a DateRange, covering the whole day when showTime is set.",
621
+ "usage": "Set allowDateRangeSelection={false} on a mode='range' picker where a multi-day span is meaningless or unsupported. It composes with presets (whose entries still compute their own multi-day ranges) and has no effect in single mode."
622
+ }
623
+ ],
624
+ "removals": [
625
+ {
626
+ "component": "MenuButton",
627
+ "prop": "menuPosition",
628
+ "replacement": "Remove the prop. The menu always opens start-aligned to the trigger. Remove any menuPosition='start' (redundant) or menuPosition='end' usage.",
629
+ "reason": "The menuPosition prop ('start' | 'end') has been removed in v2. The 'end' alignment never positioned correctly and was unused; the menu now always aligns to the start of the trigger. A right-aligned option may be reintroduced later if a need arises."
630
+ },
631
+ {
632
+ "component": "Spinner",
633
+ "prop": "colorType",
634
+ "replacement": "Replace with the `color` prop — pass any CSS color string or `var(--token)` reference. Use `'var(--pds-color-foreground-reverse)'` in place of `'monochromatic-reverse'`, and omit the prop entirely in place of `'monochromatic'` or `'full-color'` (the default is now foreground default).",
635
+ "reason": "The colorType prop ('full-color' | 'monochromatic' | 'monochromatic-reverse') has been removed in v2. The spinner now accepts a single `color` prop; the track ring renders at 30% opacity of the same color automatically. The default color is now the foreground default token."
636
+ },
637
+ {
638
+ "component": "CodeBlock",
639
+ "prop": "colorType",
640
+ "replacement": "Remove the prop. CodeBlock now renders in a single unified style.",
641
+ "reason": "The colorType prop ('dark' | 'light') has been removed in v2. CodeBlock now renders in one consistent style that works across both page themes."
642
+ },
643
+ {
644
+ "component": "SiteMenu",
645
+ "prop": "colorType",
646
+ "replacement": "No direct replacement — consult design for a different approach. The reverse color scheme is not being carried forward in v2; remove any colorType='reverse' usage (the default light-background rendering is unchanged).",
647
+ "reason": "The colorType prop ('default' | 'reverse') has been removed in v2. The reverse color scheme has been dropped and there is no replacement — reach out to design if you need a dark-background treatment."
648
+ },
649
+ {
650
+ "component": "Tabs",
651
+ "prop": "size",
652
+ "replacement": "Remove the prop. Tabs now render at a single size equivalent to the former size='m'.",
653
+ "reason": "The size prop has been removed in v2. The component now renders at one size only. Remove any size='s' or size='m' usage."
654
+ },
655
+ {
656
+ "component": "TabMenu",
657
+ "prop": "size",
658
+ "replacement": "Remove the prop. TabMenu now renders at a single size equivalent to the former size='m'.",
659
+ "reason": "The size prop has been removed in v2. The component now renders at one size only. Remove any size='s' or size='m' usage."
660
+ },
661
+ {
662
+ "component": "ButtonNav",
663
+ "prop": "size",
664
+ "replacement": "Remove the prop. ButtonNav now renders at a single size equivalent to the former size='s'.",
665
+ "reason": "The size prop and the medium size have been removed in v2. The component now renders at one size only. Remove any size='s' or size='m' usage. A smaller size may be reintroduced later if a need arises."
666
+ },
667
+ {
668
+ "component": "StatusIndicator",
669
+ "prop": "size",
670
+ "replacement": "Remove the prop. StatusIndicator now renders at a single size (equivalent to the former size='s' / v1 'md').",
671
+ "reason": "The size prop has been removed in v2. StatusIndicator renders at one size only; the small ('xs') size is no longer available. Remove any size prop usage."
672
+ },
673
+ {
674
+ "component": "SiteSearch",
675
+ "prop": "horizontalOffset",
676
+ "replacement": "Remove the prop. It was deprecated and had no effect.",
677
+ "reason": "Deprecated prop removed in v2. Absolute positioning was removed from the component in an earlier release, making this prop a no-op."
678
+ },
679
+ {
680
+ "component": "Card",
681
+ "prop": "background",
682
+ "removedValues": [
683
+ "mint-gradient",
684
+ "sundown-gradient",
685
+ "yellow-gradient"
686
+ ],
687
+ "replacement": "No direct replacement. Remove the prop or use background='default'.",
688
+ "reason": "Gradient background options removed from Card in v2. Only 'default', 'secondary', and 'transparent' are supported."
689
+ },
690
+ {
691
+ "component": "Button",
692
+ "prop": "variant",
693
+ "oldValue": "brand-secondary",
694
+ "replacement": "Use variant=\"secondary\"",
695
+ "reason": "The brand-secondary variant has been removed in v2. Use the standard secondary variant instead."
696
+ },
697
+ {
698
+ "component": "Button",
699
+ "prop": "variant",
700
+ "oldValue": "navbar",
701
+ "replacement": "Use variant=\"subtle\"",
702
+ "reason": "The navbar variant has been removed in v2. It was visually identical to subtle — replace with subtle."
703
+ },
704
+ {
705
+ "component": "Button",
706
+ "prop": "variant",
707
+ "oldValue": "inline",
708
+ "replacement": "Use variant=\"link\"",
709
+ "reason": "The 'inline' button variant has been renamed to 'link' to describe its appearance (a text link) rather than its placement, and is no longer treated as legacy."
710
+ },
711
+ {
712
+ "component": "IconButton",
713
+ "prop": "variant",
714
+ "oldValue": "critical-hover",
715
+ "replacement": "Use variant=\"critical\"",
716
+ "reason": "The critical-hover variant has been removed in v2. Use the standard critical variant instead."
717
+ },
718
+ {
719
+ "component": "Avatar",
720
+ "prop": "size",
721
+ "oldValue": "xl",
722
+ "replacement": "Use size=\"l\"",
723
+ "reason": "The 'xl' size has been removed in v2. The largest available size is now 'l' (40px)."
724
+ },
725
+ {
726
+ "component": "Panel",
727
+ "prop": "hasStatusIndicator",
728
+ "replacement": "Remove this prop. Where you showed a status indicator, use the matching semantic variant instead (see statusType).",
729
+ "reason": "The standalone status-indicator bar was removed. To keep a status appearance, use the matching semantic `variant` (e.g. variant='warning'), which tints the whole panel — see the `statusType` mapping."
730
+ },
731
+ {
732
+ "component": "Panel",
733
+ "prop": "statusType",
734
+ "replacement": "Replace with the equivalent semantic variant: critical→variant='critical', warning→variant='warning', success→variant='success', info→variant='info', neutral→variant='default'.",
735
+ "reason": "Status is now expressed through `variant` rather than a separate status bar. Map the old value to the equivalent semantic variant: `critical`→`variant='critical'`, `warning`→`variant='warning'`, `success`→`variant='success'`, `info`→`variant='info'`, and `neutral`→`variant='default'` (there is no neutral variant)."
736
+ },
737
+ {
738
+ "component": "Panel",
739
+ "prop": "typeLabels",
740
+ "replacement": "Remove this prop. Status indicators have been removed from Panel in v2.",
741
+ "reason": "The status-indicator bar and its screen-reader labels no longer exist, so per-status labels are unnecessary. Semantic `variant` styling is decorative — convey status in the panel content where assistive tech needs it."
742
+ },
743
+ {
744
+ "component": "SideNavGlobal",
745
+ "prop": "hasLogo",
746
+ "replacement": "Remove this prop. Use the IdentityBlock component in the AppLayout identity slot instead.",
747
+ "reason": "Logo display is now handled by the IdentityBlock component, which is placed in the AppLayout identity slot."
748
+ },
749
+ {
750
+ "component": "SideNavGlobal",
751
+ "prop": "logoLinkContent",
752
+ "replacement": "Remove this prop. Use the IdentityBlock component in the AppLayout identity slot instead.",
753
+ "reason": "Logo display is now handled by the IdentityBlock component, which is placed in the AppLayout identity slot."
754
+ },
755
+ {
756
+ "component": "SideNavGlobal",
757
+ "prop": "mobileMenuSelectTextFallback",
758
+ "replacement": "Remove this prop. SideNavGlobal no longer switches to a dropdown menu on mobile.",
759
+ "reason": "The sidebar navigation now renders the same at all breakpoints. Mobile behavior is handled by AppLayout."
760
+ },
761
+ {
762
+ "component": "MenuButton",
763
+ "prop": "withinNavbar",
764
+ "reason": "Removed in V2. The dropdown no longer adjusts its border radius based on navbar context — it floats normally regardless of placement.",
765
+ "migration": "Remove the withinNavbar prop. No replacement needed."
766
+ },
767
+ {
768
+ "component": "UserMenu",
769
+ "prop": "withinNavbar",
770
+ "reason": "Removed in V2. Mobile accordion behavior is now driven by DOM context ([data-pds-mobile] .pds-navbar__mobile) rather than this prop.",
771
+ "migration": "Remove the withinNavbar prop. No replacement needed."
772
+ },
773
+ {
774
+ "component": "WorkspaceSelector",
775
+ "prop": "withinNavbar",
776
+ "reason": "Removed in V2. Mobile accordion behavior is now driven by DOM context ([data-pds-mobile] .pds-navbar__mobile) rather than this prop.",
777
+ "migration": "Remove the withinNavbar prop. No replacement needed."
778
+ },
779
+ {
780
+ "component": "SiteMenu",
781
+ "prop": "mobileMenuMaxWidth",
782
+ "reason": "Removed in V2. Mobile behavior is now driven by the data-pds-mobile attribute set by GlobalWrapper, so per-component breakpoint configuration is no longer supported.",
783
+ "migration": "Remove the mobileMenuMaxWidth prop. Configure the mobile breakpoint via the mobileMaxWidth prop on GlobalWrapper instead."
784
+ },
785
+ {
786
+ "component": "Table",
787
+ "prop": "headers",
788
+ "reason": "Replaced by `columns`. Each column now requires a stable `id` field used for sort keys and cell lookup. Rename each header object to include an `id`, rename `title` to `header`."
789
+ },
790
+ {
791
+ "component": "TreeNav",
792
+ "prop": "mobileMenuMaxWidth",
793
+ "reason": "Removed in V2. The mobile breakpoint is now controlled globally by the mobileBreakpoint prop on GlobalWrapper.",
794
+ "replacement": "Use the mobileBreakpoint prop on GlobalWrapper to configure the mobile breakpoint."
795
+ },
796
+ {
797
+ "component": "TreeNav",
798
+ "prop": "hasMobileMenu",
799
+ "reason": "Removed in V2. TreeNav renders at all breakpoints without switching to a dropdown menu.",
800
+ "replacement": "Remove this prop. TreeNav always renders the full tree navigation."
801
+ },
802
+ {
803
+ "component": "TreeNav",
804
+ "prop": "mobileMenuSelectTextFallback",
805
+ "reason": "Removed in V2 along with the mobile dropdown functionality.",
806
+ "replacement": "Remove this prop."
807
+ },
808
+ {
809
+ "component": "HorizontalEmptyState",
810
+ "prop": "isWithinPanel",
811
+ "reason": "Removed in V2 per design direction — HorizontalEmptyState is no longer scaled down for use inside a Panel.",
812
+ "replacement": "Remove this prop. If a special case still requires panel-scaled sizing, apply the styling manually via className rather than a component prop."
813
+ }
814
+ ],
815
+ "deprecations": [],
816
+ "defaultValueChanges": [
817
+ {
818
+ "component": "GlobalWrapper",
819
+ "prop": "mobileMaxWidth",
820
+ "v1Default": "640",
821
+ "v2Default": "767",
822
+ "reason": "Default updated to 767 to align exactly with --pds-bp-s-only (max-width: 767px), so the JS-driven data-pds-mobile attribute and the CSS media query fire at the same threshold.",
823
+ "migration": "If your site was relying on the 640px default, pass mobileMaxWidth={640} explicitly to preserve v1 behavior. Note that the prop was also renamed from mobileMenuMaxWidth to mobileMaxWidth."
824
+ },
825
+ {
826
+ "component": "Spinner",
827
+ "prop": "size",
828
+ "v1Default": "'m'",
829
+ "v2Default": "'3xl'",
830
+ "reason": "Default size increased to '3xl' to better match design system specifications. The small 'm' spinner was too subtle in most UI contexts.",
831
+ "migration": "If you relied on the default spinner size being small, explicitly pass size='m' to maintain the v1 appearance."
832
+ },
833
+ {
834
+ "component": "MenuButton",
835
+ "prop": "size",
836
+ "v1Default": "'md'",
837
+ "v2Default": "'s'",
838
+ "reason": "Default size changed from 'md' to 's' to align with new standardized size naming. In v2, 's' is equivalent to v1's 'md' (medium size).",
839
+ "migration": "If you relied on the default MenuButton size, no changes needed as 's' in v2 visually matches 'md' in v1. If you explicitly passed size='md', update to size='s' or size='m' based on desired appearance."
840
+ },
841
+ {
842
+ "component": "SplitButton",
843
+ "prop": "size",
844
+ "v1Default": "'md'",
845
+ "v2Default": "'s'",
846
+ "reason": "Default size changed from 'md' to 's' to align with new standardized size naming. In v2, 's' is equivalent to v1's 'md' (medium size).",
847
+ "migration": "If you relied on the default SplitButton size, no changes needed as 's' in v2 visually matches 'md' in v1. If you explicitly passed size='md', update to size='s' or size='m' based on desired appearance."
848
+ },
849
+ {
850
+ "component": "IconButton",
851
+ "prop": "size",
852
+ "v1Default": "'md'",
853
+ "v2Default": "'s'",
854
+ "reason": "Default size changed from 'md' to 's' to align with new standardized size naming. In v2, 's' is equivalent to v1's 'sm' (small size).",
855
+ "migration": "If you relied on the default IconButton size, note that 's' in v2 is smaller than v1's 'md'. Explicitly pass size='m' to match the v1 'md' size. If you explicitly passed size='md', update to size='m'. If you passed size='sm', update to size='s'."
856
+ },
857
+ {
858
+ "component": "Tooltip",
859
+ "prop": "triggerIconSize",
860
+ "v1Default": "'sm'",
861
+ "v2Default": "'m'",
862
+ "reason": "Default trigger icon size changed from 'sm' to 'm' to align with new standardized size naming and provide better default visibility.",
863
+ "migration": "If you relied on the default trigger icon size being small, explicitly pass triggerIconSize='s' to maintain the v1 appearance."
864
+ },
865
+ {
866
+ "component": "ComparisonList",
867
+ "prop": "showBorder",
868
+ "v1Default": "true",
869
+ "v2Default": "false",
870
+ "reason": "Borders are now opt-in. The borderless style is the new default as it suits the most common use cases.",
871
+ "migration": "Add showBorder={true} to preserve the bordered appearance from V1."
872
+ },
873
+ {
874
+ "component": "HorizontalEmptyState",
875
+ "prop": "maxWidth",
876
+ "v1Default": "'1200px'",
877
+ "v2Default": "'100%'",
878
+ "reason": "The component now fills its container by default rather than imposing its own width cap. It's always used inside the dashboard's AppLayout, which already constrains page content width — the old 1200px default was a leftover from the V1 standalone-page convention and fought the outer layout's own max-width.",
879
+ "migration": "If you relied on the 1200px cap (e.g. a true standalone full-page usage with no other width constraint), pass maxWidth='1200px' explicitly."
880
+ }
881
+ ],
882
+ "typeChanges": [
883
+ {
884
+ "component": "Icon",
885
+ "prop": "size",
886
+ "description": "The 'xs' size value has been removed",
887
+ "v1Type": "'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl'",
888
+ "v2Type": "'s' | 'm' | 'l' | 'xl' | '2xl' | '3xl'",
889
+ "migration": {
890
+ "xs": "s (removed, use 's' instead)"
891
+ },
892
+ "reason": "The 10px 'xs' icon size has been removed in v2. It had a single internal usage (the TagsInput remove button, now 's'/12px) and is superseded by 's'. Use size='s' instead."
893
+ },
894
+ {
895
+ "component": "FlexContainer",
896
+ "prop": "gap",
897
+ "description": "The named gap scale was replaced by the numbered spacing scale (`GapScale`). Fixed at all breakpoints; use `mobileGap` to change the gap on small screens.",
898
+ "v1Type": "'minimal' | 'narrow' | 'standard' | 'wide' | 'none'",
899
+ "v2Type": "'none' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
900
+ "migration": {
901
+ "minimal": "s",
902
+ "narrow": "m",
903
+ "standard": "xl",
904
+ "wide": "3xl"
905
+ },
906
+ "reason": "Unifies gap onto one predictable, fixed spacing scale across FlexContainer, Grid, and the layout components."
907
+ },
908
+ {
909
+ "component": "FlexContainer",
910
+ "prop": "mobileGap",
911
+ "description": "The named gap scale was replaced by the numbered spacing scale (`GapScale`).",
912
+ "v1Type": "'minimal' | 'narrow' | 'standard' | 'wide' | 'none'",
913
+ "v2Type": "'none' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
914
+ "migration": {
915
+ "minimal": "s",
916
+ "narrow": "m",
917
+ "standard": "xl",
918
+ "wide": "3xl"
919
+ },
920
+ "reason": "Unifies gap onto one predictable, fixed spacing scale across FlexContainer, Grid, and the layout components."
921
+ },
922
+ {
923
+ "component": "SidebarLayout",
924
+ "prop": "gridGap",
925
+ "description": "The named gap scale was replaced by the numbered spacing scale (`GapScale`).",
926
+ "v1Type": "'narrow' | 'standard' | 'wide' | 'none'",
927
+ "v2Type": "'none' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
928
+ "migration": {
929
+ "narrow": "m",
930
+ "standard": "xl",
931
+ "wide": "3xl"
932
+ },
933
+ "reason": "Unifies gap onto one predictable, fixed spacing scale across FlexContainer, Grid, and the layout components."
934
+ },
935
+ {
936
+ "component": "TwoItemLayout",
937
+ "prop": "gridGap",
938
+ "description": "The named gap scale was replaced by the numbered spacing scale (`GapScale`).",
939
+ "v1Type": "'narrow' | 'standard' | 'wide' | 'none'",
940
+ "v2Type": "'none' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
941
+ "migration": {
942
+ "narrow": "m",
943
+ "standard": "xl",
944
+ "wide": "3xl"
945
+ },
946
+ "reason": "Unifies gap onto one predictable, fixed spacing scale across FlexContainer, Grid, and the layout components."
947
+ },
948
+ {
949
+ "component": "ThreeItemLayout",
950
+ "prop": "gridGap",
951
+ "description": "The named gap scale was replaced by the numbered spacing scale (`GapScale`).",
952
+ "v1Type": "'narrow' | 'standard' | 'wide' | 'none'",
953
+ "v2Type": "'none' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
954
+ "migration": {
955
+ "narrow": "m",
956
+ "standard": "xl",
957
+ "wide": "3xl"
958
+ },
959
+ "reason": "Unifies gap onto one predictable, fixed spacing scale across FlexContainer, Grid, and the layout components."
960
+ },
961
+ {
962
+ "component": "Panel",
963
+ "prop": "padding",
964
+ "description": "The padding prop moved from the shared GridGapOptions scale to a dedicated, curated PaddingScale. Values were renamed: narrow → condensed, wide → spacious. standard and none are unchanged. The underlying spacing values are preserved.",
965
+ "v1Type": "'wide' | 'standard' | 'narrow' | 'none'",
966
+ "v2Type": "'none' | 'condensed' | 'standard' | 'spacious'",
967
+ "migration": {
968
+ "narrow": "condensed",
969
+ "wide": "spacious"
970
+ },
971
+ "reason": "Padding is a container-internal concern with its own curated semantic scale, separated from the numbered gap scale used for layout spacing."
972
+ },
973
+ {
974
+ "component": "Card",
975
+ "prop": "padding",
976
+ "description": "The padding prop moved from the shared GridGapOptions scale to a dedicated, curated PaddingScale. Values were renamed: narrow → condensed, wide → spacious. standard and none are unchanged. The underlying spacing values are preserved.",
977
+ "v1Type": "'wide' | 'standard' | 'narrow' | 'none'",
978
+ "v2Type": "'none' | 'condensed' | 'standard' | 'spacious'",
979
+ "migration": {
980
+ "narrow": "condensed",
981
+ "wide": "spacious"
982
+ },
983
+ "reason": "Padding is a container-internal concern with its own curated semantic scale, separated from the numbered gap scale used for layout spacing."
984
+ },
985
+ {
986
+ "component": "ActionCard",
987
+ "prop": "padding",
988
+ "description": "The padding prop moved from the shared GridGapOptions scale to a dedicated, curated PaddingScale. Values were renamed: narrow → condensed, wide → spacious. standard and none are unchanged. The underlying spacing values are preserved.",
989
+ "v1Type": "'wide' | 'standard' | 'narrow' | 'none'",
990
+ "v2Type": "'none' | 'condensed' | 'standard' | 'spacious'",
991
+ "migration": {
992
+ "narrow": "condensed",
993
+ "wide": "spacious"
994
+ },
995
+ "reason": "Padding is a container-internal concern with its own curated semantic scale, separated from the numbered gap scale used for layout spacing."
996
+ },
997
+ {
998
+ "component": "UtilityBar",
999
+ "prop": "padding",
1000
+ "description": "The padding prop moved from the shared GridGapOptions scale to a dedicated, curated PaddingScale. Values were renamed: narrow → condensed, wide → spacious. standard and none are unchanged. The underlying spacing values are preserved.",
1001
+ "v1Type": "'wide' | 'standard' | 'narrow' | 'none'",
1002
+ "v2Type": "'none' | 'condensed' | 'standard' | 'spacious'",
1003
+ "migration": {
1004
+ "narrow": "condensed",
1005
+ "wide": "spacious"
1006
+ },
1007
+ "reason": "Padding is a container-internal concern with its own curated semantic scale, separated from the numbered gap scale used for layout spacing."
1008
+ },
1009
+ {
1010
+ "component": "StepList",
1011
+ "prop": "steps",
1012
+ "description": "The steps item type has been renamed from FlowStep to StepListItem to match the component rename.",
1013
+ "v1Type": "FlowStep[]",
1014
+ "v2Type": "StepListItem[]",
1015
+ "migration": {
1016
+ "note": "Update any FlowStep type imports to StepListItem. The shape of the type is unchanged — { header: string | ReactNode, content?: string | ReactNode }."
1017
+ },
1018
+ "reason": "Renamed alongside the FlowSteps → StepList component rename for naming consistency."
1019
+ },
1020
+ {
1021
+ "component": "CloseButton",
1022
+ "prop": "onClick",
1023
+ "description": "onClick callback now receives a MouseEvent parameter",
1024
+ "v1Type": "() => void",
1025
+ "v2Type": "(e: React.MouseEvent<HTMLButtonElement>) => void",
1026
+ "migration": {
1027
+ "note": "Backwards compatible — existing handlers that ignore the event parameter continue to work. Update handlers if you need access to the event."
1028
+ },
1029
+ "reason": "Updated to allow consumers to call e.stopPropagation() or access other event properties when needed."
1030
+ },
1031
+ {
1032
+ "component": "Spinner",
1033
+ "prop": "size",
1034
+ "description": "Size naming convention updated to match Button and Icon components",
1035
+ "v1Type": "'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
1036
+ "v2Type": "'s' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
1037
+ "migration": {
1038
+ "sm": "s",
1039
+ "md": "m",
1040
+ "lg": "l"
1041
+ },
1042
+ "reason": "Standardized size naming across all components. The 'sm', 'md', and 'lg' values have been shortened to 's', 'm', and 'l' for consistency."
1043
+ },
1044
+ {
1045
+ "component": "Modal",
1046
+ "prop": "size",
1047
+ "description": "Size naming convention updated to match standardized naming",
1048
+ "v1Type": "'sm' | 'md' | 'lg' | 'xl'",
1049
+ "v2Type": "'s' | 'm' | 'l' | 'xl'",
1050
+ "migration": {
1051
+ "sm": "s",
1052
+ "md": "m",
1053
+ "lg": "l"
1054
+ },
1055
+ "reason": "Standardized size naming across all components. The 'sm', 'md', and 'lg' values have been shortened to 's', 'm', and 'l' for consistency. The 'xl' size is unchanged in both label and appearance."
1056
+ },
1057
+ {
1058
+ "component": "MenuButton",
1059
+ "prop": "size",
1060
+ "description": "Size naming convention updated and reduced to two sizes",
1061
+ "v1Type": "Exclude<ButtonSize, 'lg'> (which was 'xs' | 'sm' | 'md')",
1062
+ "v2Type": "'s' | 'm'",
1063
+ "migration": {
1064
+ "xs": "s (removed, use 's' instead)",
1065
+ "sm": "s",
1066
+ "md": "m"
1067
+ },
1068
+ "reason": "Standardized size naming to match Button component v2 conventions. MenuButton now only supports 's' and 'm' sizes. The 'xs' size has been removed."
1069
+ },
1070
+ {
1071
+ "component": "SplitButton",
1072
+ "prop": "size",
1073
+ "description": "Size naming convention updated and reduced to two sizes",
1074
+ "v1Type": "Exclude<ButtonSize, 'lg'> (which was 'xs' | 'sm' | 'md')",
1075
+ "v2Type": "'s' | 'm'",
1076
+ "migration": {
1077
+ "xs": "s (removed, use 's' instead)",
1078
+ "sm": "s",
1079
+ "md": "m"
1080
+ },
1081
+ "reason": "Standardized size naming to match Button component v2 conventions. SplitButton now only supports 's' and 'm' sizes. The 'xs' size has been removed."
1082
+ },
1083
+ {
1084
+ "component": "IconButton",
1085
+ "prop": "size",
1086
+ "description": "Size naming convention updated and reduced to two sizes",
1087
+ "v1Type": "ButtonSize (which was 'xs' | 'sm' | 'md' | 'lg')",
1088
+ "v2Type": "'s' | 'm'",
1089
+ "migration": {
1090
+ "xs": "s (removed, use 's' instead)",
1091
+ "sm": "s",
1092
+ "md": "m",
1093
+ "lg": "m (removed, use 'm' instead)"
1094
+ },
1095
+ "reason": "Standardized size naming to match other button components. IconButton now only supports 's' and 'm' sizes. The 'xs' and 'lg' sizes have been removed."
1096
+ },
1097
+ {
1098
+ "component": "CloseButton",
1099
+ "prop": "size",
1100
+ "description": "Prop renamed from iconSize to size, and size naming convention standardized to s/m/l",
1101
+ "v1Type": "'md' | 'lg' | 'xl' (on iconSize prop)",
1102
+ "v2Type": "'s' | 'm' | 'l' (on size prop)",
1103
+ "migration": {
1104
+ "md": "s",
1105
+ "lg": "m",
1106
+ "xl": "l"
1107
+ },
1108
+ "reason": "Prop renamed from iconSize to size for consistency with other button components. Size values standardized to the single-letter s/m/l scale used across V2 (smallest rung is now 's'); pixel sizes are unchanged, only the labels shifted (md→s, lg→m, xl→l)."
1109
+ },
1110
+ {
1111
+ "component": "Icon",
1112
+ "prop": "iconName",
1113
+ "description": "Several icon names have been removed or shortened. Removed 'Outline'/'Line' suffixed names now render as the default style; other verbose names were shortened for clarity.",
1114
+ "migration": {
1115
+ "circlePlusOutline": "circlePlus",
1116
+ "circleMinusOutline": "circleMinus",
1117
+ "globeLine": "globe",
1118
+ "arrowDownLeftAndArrowUpRightToCenter": "collapseToCenter",
1119
+ "arrowsUpDownLeftRight": "move",
1120
+ "linkSimple": "link",
1121
+ "linkSimpleSlash": "unlink"
1122
+ },
1123
+ "reason": "The 'Outline' and 'Line' suffixed icon names have been removed — the base names (circlePlus, circleMinus, globe) now render the outlined/regular style by default. Other verbose names were shortened for brevity and clarity: 'arrowDownLeftAndArrowUpRightToCenter' → 'collapseToCenter' (pairs with 'expandFromCenter'), 'arrowsUpDownLeftRight' → 'move', 'linkSimple' → 'link', 'linkSimpleSlash' → 'unlink'. Run the icon-name-updates codemod to migrate."
1124
+ },
1125
+ {
1126
+ "component": "Tooltip",
1127
+ "prop": "triggerIconSize",
1128
+ "description": "Size naming convention updated to match standardized naming",
1129
+ "v1Type": "'sm' | 'md' | 'lg'",
1130
+ "v2Type": "'s' | 'm' | 'l'",
1131
+ "migration": {
1132
+ "sm": "s",
1133
+ "md": "m",
1134
+ "lg": "l"
1135
+ },
1136
+ "reason": "Standardized size naming across all components. The 'sm', 'md', and 'lg' values have been shortened to 's', 'm', and 'l' for consistency."
1137
+ },
1138
+ {
1139
+ "component": "Badge",
1140
+ "prop": "color",
1141
+ "description": "IndicatorBadge renamed to Badge with new color system based on design token naming. Colors now use named palettes instead of semantic/tier names.",
1142
+ "v1Type": "'ai' | 'critical' | 'info' | 'success' | 'warning' | 'neutral' | 'brand' | 'silver' | 'gold' | 'platinum' | 'diamond' | 'default'",
1143
+ "v2Type": "'aether' | 'aether-secondary' | 'amber' | 'amber-secondary' | 'apollo' | 'apollo-secondary' | 'critical' | 'critical-secondary' | 'discovery' | 'discovery-secondary' | 'gaia' | 'gaia-secondary' | 'hypnos' | 'hypnos-secondary' | 'indigo' | 'indigo-secondary' | 'info' | 'info-secondary' | 'iris' | 'iris-secondary' | 'lime' | 'lime-secondary' | 'mint' | 'mint-secondary' | 'orange' | 'orange-secondary' | 'rose' | 'rose-secondary' | 'sand' | 'sand-secondary' | 'silver' | 'silver-secondary' | 'sky' | 'sky-secondary' | 'slate' | 'slate-secondary' | 'stone' | 'stone-secondary' | 'success' | 'success-secondary' | 'teal' | 'teal-secondary' | 'warning' | 'warning-secondary' | 'feature'",
1144
+ "migration": {
1145
+ "ai": "discovery-secondary",
1146
+ "neutral": "stone",
1147
+ "brand": "discovery",
1148
+ "silver": "silver",
1149
+ "gold": "sand",
1150
+ "platinum": "slate",
1151
+ "diamond": "sky",
1152
+ "default": "gaia",
1153
+ "critical": "critical",
1154
+ "info": "info",
1155
+ "success": "success",
1156
+ "warning": "warning"
1157
+ },
1158
+ "reason": "Color names updated to use the design token palette naming system. Semantic and tier-based names replaced with palette names. Many new colors added including secondary variants."
1159
+ },
1160
+ {
1161
+ "component": "Badge",
1162
+ "prop": "size",
1163
+ "description": "Size naming convention updated and xs size added",
1164
+ "v1Type": "'sm' | 'md'",
1165
+ "v2Type": "'xs' | 's' | 'm'",
1166
+ "migration": {
1167
+ "sm": "s",
1168
+ "md": "m"
1169
+ },
1170
+ "reason": "Standardized size naming to match other v2 components. New 'xs' size added for compact contexts."
1171
+ },
1172
+ {
1173
+ "component": "StatusIndicator",
1174
+ "prop": "type",
1175
+ "description": "Type values updated to align with design token naming",
1176
+ "v1Type": "'critical' | 'info' | 'neutral' | 'new' | 'success' | 'warning' | 'working'",
1177
+ "v2Type": "'critical' | 'disabled' | 'discovery' | 'info' | 'neutral' | 'success' | 'warning' | 'working'",
1178
+ "migration": {
1179
+ "new": "discovery"
1180
+ },
1181
+ "reason": "The 'new' type has been renamed to 'discovery' to match design token naming. A 'disabled' type has been added."
1182
+ },
1183
+ {
1184
+ "component": "Avatar",
1185
+ "prop": "size",
1186
+ "description": "Size naming convention updated and reduced to four sizes",
1187
+ "v1Type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
1188
+ "v2Type": "'xs' | 's' | 'm' | 'l'",
1189
+ "migration": {
1190
+ "xs": "xs",
1191
+ "sm": "s",
1192
+ "md": "s",
1193
+ "lg": "m",
1194
+ "xl": "l"
1195
+ },
1196
+ "reason": "Standardized size naming and reduced to four sizes with updated pixel values (16, 24, 32, 40px)."
1197
+ },
1198
+ {
1199
+ "component": "CTALink",
1200
+ "prop": "size",
1201
+ "description": "Size naming convention updated (sm → s, md → m), default changed from 'md' to 's', and an 'xs' variant added. v2 accepts 'xs' | 's' | 'm'.",
1202
+ "v1Type": "'sm' | 'md'",
1203
+ "v2Type": "'xs' | 's' | 'm'",
1204
+ "migration": {
1205
+ "sm": "s",
1206
+ "md": "m"
1207
+ },
1208
+ "reason": "Standardized size naming and added 'xs' to support compact contexts such as the Payment Card pattern footer."
1209
+ },
1210
+ {
1211
+ "component": "LinkNewWindow",
1212
+ "prop": "fontSize",
1213
+ "description": "Size naming convention updated",
1214
+ "v1Type": "'sm' | 'md' | 'lg'",
1215
+ "v2Type": "'s' | 'm' | 'l'",
1216
+ "migration": {
1217
+ "sm": "s",
1218
+ "md": "m",
1219
+ "lg": "l"
1220
+ },
1221
+ "reason": "Standardized size naming across all components."
1222
+ },
1223
+ {
1224
+ "component": "PanelList",
1225
+ "prop": "paddingSize",
1226
+ "description": "Size naming convention updated, two smallest sizes removed, and token mapping corrected",
1227
+ "v1Type": "'4xs' | '3xs' | '2xs' | 'xs' | 'sm' | 'md' | 'lg'",
1228
+ "v2Type": "'2xs' | 'xs' | 's' | 'm' | 'l'",
1229
+ "migration": {
1230
+ "4xs": "2xs",
1231
+ "3xs": "2xs",
1232
+ "2xs": "2xs",
1233
+ "xs": "xs",
1234
+ "sm": "s",
1235
+ "md": "m",
1236
+ "lg": "l"
1237
+ },
1238
+ "reason": "Standardized size naming. The '4xs' and '3xs' sizes have been removed — use '2xs' instead. Default changed from 'md' to 'm'."
1239
+ },
1240
+ {
1241
+ "component": "StatusChecker",
1242
+ "prop": "state",
1243
+ "description": "The RefreshCheckerState enum has been replaced with the StatusCheckerState string union type",
1244
+ "v1Type": "`${RefreshCheckerState}` (enum: RefreshCheckerState.DEFAULT | RefreshCheckerState.WORKING | RefreshCheckerState.CHECKED)",
1245
+ "v2Type": "StatusCheckerState ('default' | 'working' | 'checked')",
1246
+ "migration": {
1247
+ "RefreshCheckerState.DEFAULT": "'default'",
1248
+ "RefreshCheckerState.WORKING": "'working'",
1249
+ "RefreshCheckerState.CHECKED": "'checked'"
1250
+ },
1251
+ "reason": "Enum replaced with a string union type following v2 component conventions. The string values are unchanged, so consumers already passing string literals require no updates. Only those importing and using the RefreshCheckerState enum need to migrate."
1252
+ },
1253
+ {
1254
+ "component": "Tag",
1255
+ "prop": "tagColor",
1256
+ "oldType": "'color-1' | 'color-2' | ... | 'color-20'",
1257
+ "newType": "'apollo' | 'iris' | 'hypnos' | 'gaia' | 'aether' | 'success' | 'warning' | 'critical' | 'info' | 'discovery' | 'amber' | 'orange' | 'lime' | 'teal' | 'sky' | 'indigo' | 'rose' | 'slate' | 'sand' | 'mint' | 'silver' | 'stone'",
1258
+ "description": "Tag color values are now named instead of numbered. Two new colors added: silver and stone.",
1259
+ "migration": "Replace numbered color values with their named equivalents: color-1→apollo, color-2→iris, color-3→hypnos, color-4→gaia, color-5→aether, color-6→success, color-7→warning, color-8→critical, color-9→info, color-10→discovery, color-11→amber, color-12→orange, color-13→lime, color-14→teal, color-15→sky, color-16→indigo, color-17→rose, color-18→slate, color-19→sand, color-20→mint. Two new values (silver, stone) have no v1 equivalent."
1260
+ },
1261
+ {
1262
+ "component": "SidebarLayout",
1263
+ "prop": "sidebarWidth",
1264
+ "v1Type": "'narrow' | 'standard' | 'wide'",
1265
+ "v2Type": "string",
1266
+ "description": "sidebarWidth is now a percentage string instead of a preset option.",
1267
+ "migration": "Replace preset values with percentage equivalents: 'narrow' → '25%', 'standard' → '33%', 'wide' → '42%'. Adjust as needed for your layout."
1268
+ },
1269
+ {
1270
+ "component": "Table",
1271
+ "prop": "rowData",
1272
+ "oldType": "Array<Array<string | ReactNode>>",
1273
+ "newType": "Array<Record<string, ReactNode>>",
1274
+ "reason": "Row data is now keyed by column id rather than position, enabling stable column identity for sort, pagination, and loading states. Each row object key must match a column's `id` field."
1275
+ },
1276
+ {
1277
+ "component": "Table",
1278
+ "prop": "sortKey",
1279
+ "oldType": "number",
1280
+ "newType": "string",
1281
+ "reason": "Sort key is now a column id string instead of a positional index. Update to pass the column's `id` value."
1282
+ },
1283
+ {
1284
+ "component": "Table",
1285
+ "prop": "defaultSortKey",
1286
+ "oldType": "number",
1287
+ "newType": "string",
1288
+ "reason": "Default sort key is now a column id string instead of a positional index."
1289
+ },
1290
+ {
1291
+ "component": "Table",
1292
+ "prop": "onSort",
1293
+ "oldType": "(key: number, order: SortOrder) => void",
1294
+ "newType": "(key: string, order: SortOrder) => void",
1295
+ "reason": "The sort callback now receives a column id string instead of a positional index."
1296
+ },
1297
+ {
1298
+ "component": "MenuButton",
1299
+ "prop": "displayType",
1300
+ "description": "Replaced with the boolean `iconOnly` prop. `displayType='icon-end'` (the default) becomes `iconOnly={false}` or simply omitting the prop. `displayType='icon-only'` becomes `iconOnly={true}`.",
1301
+ "v1Type": "'icon-end' | 'icon-only'",
1302
+ "v2Type": "boolean",
1303
+ "migration": {
1304
+ "note": "Remove `displayType='icon-end'` (no-op, it was the default). Replace `displayType='icon-only'` with `iconOnly`."
1305
+ },
1306
+ "reason": "The displayType prop offered only two modes and the name implied richer configurability than existed. A boolean is clearer."
1307
+ },
1308
+ {
1309
+ "component": "Datepicker",
1310
+ "prop": "presets",
1311
+ "replacement": "Use the exported getPresetDateRange utility alongside an external SegmentedButton, Select, or other control. See the Datepicker With Presets pattern for composition examples.",
1312
+ "reason": "Preset management has been decoupled from the Datepicker in v2 so consuming apps can use any control (SegmentedButton, Select, custom) and own their own preset state."
1313
+ },
1314
+ {
1315
+ "component": "Datepicker",
1316
+ "prop": "onInitialize",
1317
+ "replacement": "Initialize date range state directly using getPresetDateRange in your component's useState initializer.",
1318
+ "reason": "Removed along with the presets prop. Since preset state is now owned externally, the consuming component already knows the initial value and does not need a callback."
1319
+ }
1320
+ ]
1321
+ },
1322
+ "imports": {
1323
+ "pathChanges": [
1324
+ {
1325
+ "component": "Badge",
1326
+ "from": "components/badges/IndicatorBadge/IndicatorBadge",
1327
+ "to": "components/badges/Badge/Badge",
1328
+ "reason": "IndicatorBadge renamed to Badge with new directory structure."
1329
+ }
1330
+ ]
1331
+ },
1332
+ "cssClasses": {
1333
+ "renames": [
1334
+ {
1335
+ "old": "pds-grid--narrow",
1336
+ "new": "pds-grid--gap-m",
1337
+ "reason": "The grid gap moved to the numbered spacing scale. The old responsive `narrow` gutter maps to a fixed `m` (16px) gap."
1338
+ },
1339
+ {
1340
+ "old": "pds-grid--wide",
1341
+ "new": "pds-grid--gap-3xl",
1342
+ "reason": "The grid gap moved to the numbered spacing scale. The old responsive `wide` gutter maps to a fixed `3xl` (40px) gap."
1343
+ },
1344
+ {
1345
+ "old": "pds-overline-text",
1346
+ "new": "pds-overline-m",
1347
+ "reason": "Overline text moved from foundations to typography style utilities with size-based naming. The default overline-text maps to overline-m."
1348
+ },
1349
+ {
1350
+ "old": "pds-overline-text--sm",
1351
+ "new": "pds-overline-s",
1352
+ "reason": "Overline text size variants replaced with standalone size-based classes."
1353
+ },
1354
+ {
1355
+ "old": "pds-overline-text--lg",
1356
+ "new": "pds-overline-l",
1357
+ "reason": "Overline text size variants replaced with standalone size-based classes."
1358
+ },
1359
+ {
1360
+ "old": "pds-color-bg-default",
1361
+ "new": "pds-color-surface-default",
1362
+ "reason": "Background utility classes renamed to the surface naming convention. Mirrors the CSS custom property rename of the same name."
1363
+ },
1364
+ {
1365
+ "old": "pds-color-bg-default-secondary",
1366
+ "new": "pds-color-surface-default-secondary",
1367
+ "reason": "Background utility classes renamed to the surface naming convention. Mirrors the CSS custom property rename of the same name."
1368
+ },
1369
+ {
1370
+ "old": "pds-color-bg-reverse",
1371
+ "new": "pds-color-surface-reverse",
1372
+ "reason": "Background utility classes renamed to the surface naming convention. Mirrors the CSS custom property rename of the same name."
1373
+ },
1374
+ {
1375
+ "old": "pds-color-bg-transparent",
1376
+ "new": "pds-color-surface-transparent",
1377
+ "reason": "Background utility classes renamed to the surface naming convention."
1378
+ },
1379
+ {
1380
+ "old": "pds-color-bg-info",
1381
+ "new": "pds-color-surface-info",
1382
+ "reason": "Status background utility classes renamed to the surface naming convention."
1383
+ },
1384
+ {
1385
+ "old": "pds-color-bg-success",
1386
+ "new": "pds-color-surface-success",
1387
+ "reason": "Status background utility classes renamed to the surface naming convention."
1388
+ },
1389
+ {
1390
+ "old": "pds-color-bg-warning",
1391
+ "new": "pds-color-surface-warning",
1392
+ "reason": "Status background utility classes renamed to the surface naming convention."
1393
+ },
1394
+ {
1395
+ "old": "pds-color-bg-critical",
1396
+ "new": "pds-color-surface-critical",
1397
+ "reason": "Status background utility classes renamed to the surface naming convention."
1398
+ },
1399
+ {
1400
+ "old": "pds-color-bg-discovery",
1401
+ "new": "pds-color-surface-discovery",
1402
+ "reason": "Status background utility classes renamed to the surface naming convention."
1403
+ },
1404
+ {
1405
+ "old": "pds-color-fg-default",
1406
+ "new": "pds-color-foreground-default",
1407
+ "reason": "Foreground utility classes renamed to the foreground naming convention. Mirrors the CSS custom property rename of the same name."
1408
+ },
1409
+ {
1410
+ "old": "pds-color-fg-default-secondary",
1411
+ "new": "pds-color-foreground-default-secondary",
1412
+ "reason": "Foreground utility classes renamed to the foreground naming convention. Mirrors the CSS custom property rename of the same name."
1413
+ },
1414
+ {
1415
+ "old": "pds-color-fg-reverse",
1416
+ "new": "pds-color-foreground-reverse",
1417
+ "reason": "Foreground utility classes renamed to the foreground naming convention. Mirrors the CSS custom property rename of the same name."
1418
+ },
1419
+ {
1420
+ "old": "pds-color-fg-info",
1421
+ "new": "pds-color-foreground-info",
1422
+ "reason": "Status foreground utility classes renamed to the foreground naming convention."
1423
+ },
1424
+ {
1425
+ "old": "pds-color-fg-success",
1426
+ "new": "pds-color-foreground-success",
1427
+ "reason": "Status foreground utility classes renamed to the foreground naming convention."
1428
+ },
1429
+ {
1430
+ "old": "pds-color-fg-warning",
1431
+ "new": "pds-color-foreground-warning",
1432
+ "reason": "Status foreground utility classes renamed to the foreground naming convention."
1433
+ },
1434
+ {
1435
+ "old": "pds-color-fg-critical",
1436
+ "new": "pds-color-foreground-critical",
1437
+ "reason": "Status foreground utility classes renamed to the foreground naming convention."
1438
+ },
1439
+ {
1440
+ "old": "pds-color-fg-discovery",
1441
+ "new": "pds-color-foreground-discovery",
1442
+ "reason": "Status foreground utility classes renamed to the foreground naming convention."
1443
+ }
1444
+ ],
1445
+ "removals": [
1446
+ {
1447
+ "old": "pds-button--navbar",
1448
+ "replacement": "pds-button--subtle",
1449
+ "reason": "The navbar button variant has been removed in v2. Replace the pds-button--navbar class with pds-button--subtle anywhere it is applied directly in CSS or markup."
1450
+ },
1451
+ {
1452
+ "old": "pds-color-bg-brand",
1453
+ "replacement": "Use component-specific brand colors or custom styling",
1454
+ "reason": "Generic brand color utilities removed in v2. The underlying token --pds-color-brand-primary-default no longer exists."
1455
+ },
1456
+ {
1457
+ "old": "pds-color-fg-brand",
1458
+ "replacement": "Use component-specific brand colors or custom styling",
1459
+ "reason": "Generic brand color utilities removed in v2. The underlying token --pds-color-brand-primary-default no longer exists."
1460
+ },
1461
+ {
1462
+ "old": "pds-ts-9xl",
1463
+ "replacement": "Use pds-ts-8xl (new maximum size is 72px)",
1464
+ "reason": "Typography scale updated to pragmatic hand-picked sizes. New scale includes 2XS through 8XL (10px-72px)."
1465
+ },
1466
+ {
1467
+ "old": "pds-typography--product",
1468
+ "replacement": "No class needed (product is now the default context). Use data-context=\"product\" attribute only when explicitly mixing product and marketing contexts.",
1469
+ "reason": "Typography context system changed from CSS classes to data-context attribute. Product context is the default, so the class is no longer needed."
1470
+ },
1471
+ {
1472
+ "old": "pds-lead-text",
1473
+ "replacement": "Apply custom typography styles using design tokens (font-family: var(--pds-typography-ff-secondary), font-size: var(--pds-typography-size-2xl), line-height: var(--pds-typography-lh-m), color: var(--pds-color-fg-default-secondary))",
1474
+ "reason": "Lead text foundation removed in v2. Use component-specific styling with design tokens instead of a global utility class."
1475
+ },
1476
+ {
1477
+ "old": "pds-lead-text--sm",
1478
+ "replacement": "Apply custom typography styles using design tokens with font-size: var(--pds-typography-size-xl)",
1479
+ "reason": "Lead text foundation and all size variants removed in v2. Use component-specific styling with design tokens."
1480
+ },
1481
+ {
1482
+ "old": "pds-quote-text",
1483
+ "replacement": "Apply custom typography styles using design tokens (font-family: var(--pds-typography-ff-secondary), font-size: var(--pds-typography-size-2xl), font-style: italic, line-height: var(--pds-typography-lh-m))",
1484
+ "reason": "Quote text foundation removed in v2. Use component-specific styling with design tokens instead of a global utility class."
1485
+ },
1486
+ {
1487
+ "old": "pds-quote-text--sm",
1488
+ "replacement": "Apply custom typography styles using design tokens with font-size: var(--pds-typography-size-xl)",
1489
+ "reason": "Quote text foundation and all size variants removed in v2. Use component-specific styling with design tokens."
1490
+ },
1491
+ {
1492
+ "old": "pds-quote-text--lg",
1493
+ "replacement": "Apply custom typography styles using design tokens with font-size: var(--pds-typography-size-3xl)",
1494
+ "reason": "Quote text foundation and all size variants removed in v2. Use component-specific styling with design tokens."
1495
+ }
1496
+ ],
1497
+ "additions": [
1498
+ {
1499
+ "new": "pds-ts-2xs",
1500
+ "description": "New typography size utility for 10px text (smallest size in new scale)",
1501
+ "usage": "Apply to elements needing metadata or tiny label text"
1502
+ },
1503
+ {
1504
+ "new": "pds-color-border-info",
1505
+ "description": "Border color utility for info status",
1506
+ "usage": "Apply info status border color to elements"
1507
+ },
1508
+ {
1509
+ "new": "pds-color-border-warning",
1510
+ "description": "Border color utility for warning status",
1511
+ "usage": "Apply warning status border color to elements"
1512
+ },
1513
+ {
1514
+ "new": "pds-color-border-discovery",
1515
+ "description": "Border color utility for discovery status",
1516
+ "usage": "Apply discovery status border color to elements"
1517
+ }
1518
+ ]
1519
+ },
1520
+ "utilities": {
1521
+ "renames": [
1522
+ {
1523
+ "from": "useKeyPress",
1524
+ "to": "useKeyboardShortcut"
1525
+ }
1526
+ ],
1527
+ "removals": []
1528
+ },
1529
+ "behaviorChanges": [
1530
+ {
1531
+ "component": "Container",
1532
+ "prop": "full width",
1533
+ "description": "The 'full' container width is now edge-to-edge with no inline padding.",
1534
+ "v1Behavior": "containerWidth='full' (class pds-container--full) removed the max-width but kept the standard 2xl inline padding, so full-width sections still had a gutter.",
1535
+ "v2Behavior": "The 'full' width now has no inline padding (padding-inline: 0), so content spans edge-to-edge. Add your own padding for full-width sections that need a gutter.",
1536
+ "migration": "If you used containerWidth='full' (or the pds-container--full class) and relied on its inline padding, add the padding yourself (e.g. a spacing utility or wrapper).",
1537
+ "affectedAreas": [
1538
+ "Container",
1539
+ "Any full-width sections using pds-container--full"
1540
+ ]
1541
+ },
1542
+ {
1543
+ "component": "SiteFooter",
1544
+ "prop": "containerWidth",
1545
+ "description": "Default containerWidth changed from 'standard' to 'full'; the footer no longer applies its own inline padding or max-width by default.",
1546
+ "v1Behavior": "SiteFooter wrapped its content in a standard Container, applying a max-width and inline padding (gutter) by default, plus 2xl vertical padding.",
1547
+ "v2Behavior": "SiteFooter defaults to containerWidth='full', which is now edge-to-edge (no max-width, no inline padding); the containing layout or app provides the gutter. Vertical padding is reduced to xl.",
1548
+ "migration": "If you relied on the footer's built-in gutter or max-width, set containerWidth explicitly (e.g. 'x-wide') or wrap the footer in your layout's container. When placing SiteFooter in AppLayout's footer slot, the region provides the inline padding.",
1549
+ "affectedAreas": ["SiteFooter", "Footers in app and docs layouts"]
1550
+ },
1551
+ {
1552
+ "component": "TextInput, RadioGroup, FileUpload, Combobox, ComboboxMultiselect, Select, Textarea, Checkbox, Switch, TagsInput, Datepicker",
1553
+ "prop": "inputWidth",
1554
+ "description": "inputWidth now sets element width instead of max-width",
1555
+ "v1Behavior": "inputWidth set maxWidth on the input wrapper. If the input's natural size was already below the value, the prop had no visible effect.",
1556
+ "v2Behavior": "inputWidth sets width on the input wrapper, so the input is always exactly the specified size.",
1557
+ "migration": "If you relied on inputWidth as a maximum constraint (allowing the input to be smaller than the value), review your usage. If the input should be allowed to shrink below the specified width at smaller viewports, wrap it in a container with overflow or max-width handling.",
1558
+ "affectedAreas": ["All text-based input components", "Form layouts"]
1559
+ },
1560
+ {
1561
+ "component": "Button",
1562
+ "description": "Button loading states split into two distinct props with different behaviors",
1563
+ "v1Behavior": "Single isLoading prop showed a spinner and disabled the button, used for all async operations.",
1564
+ "v2Behavior": "Two separate props: isLoading (pulsing skeleton for initial loads) and isWorking (spinner for actions). Both disable the button but have different visual treatments.",
1565
+ "migration": "Replace v1 isLoading with isWorking for action-based loading (form submissions, button actions). Use the new isLoading prop only for initial page/section load states where a skeleton loader is appropriate.",
1566
+ "affectedAreas": ["Button component", "Loading states", "User experience"]
1567
+ },
1568
+ {
1569
+ "component": "Build Configuration",
1570
+ "description": "Build output directory renamed from `_dist` to `dist`",
1571
+ "v1Behavior": "Package contents were output to `_dist/` directory",
1572
+ "v2Behavior": "Package contents are now output to `dist/` directory",
1573
+ "migration": "Update any direct references to the build output directory in your build scripts, tooling configuration, or documentation. Most users importing from the package should not be affected as the package.json exports are updated automatically.",
1574
+ "affectedAreas": ["Build configuration", "CI/CD scripts", "Documentation"]
1575
+ },
1576
+ {
1577
+ "component": "Headings (h1-h6)",
1578
+ "description": "Typography scale system replaced with pragmatic sizing and contextual styling",
1579
+ "v1Behavior": "Used `pds-typography--product` class with dual ratio-based scales. Product context used compact scale (14px base, 1.25 ratio) with h1 at ~40px.",
1580
+ "v2Behavior": "Uses single pragmatic hand-picked scale with `data-context=\"product\"` (default) or `data-context=\"marketing\"` attributes. Product context: h1=28px (standard) or 36px (hero/empty states). Marketing context: h1=48px (standard).",
1581
+ "migration": "Remove `pds-typography--product` class (no longer needed, product is default). For marketing content, add `data-context=\"marketing\"` to parent element instead. Review all heading usage as sizes have changed significantly. See heading documentation for complete size reference table.",
1582
+ "affectedAreas": [
1583
+ "Headings",
1584
+ "Typography",
1585
+ "Marketing pages",
1586
+ "Product UIs"
1587
+ ]
1588
+ },
1589
+ {
1590
+ "component": "Typography Line Heights",
1591
+ "description": "Line height token values updated for better readability",
1592
+ "v1Behavior": "Line heights: S=120%, M=140%",
1593
+ "v2Behavior": "Line heights: XS=120% (new, for tight headings), S=130% (updated, for medium headings), M=150% (updated, meets WCAG AA for body text)",
1594
+ "migration": "Visual review recommended. Body text will have slightly more generous line-height (1.5 instead of 1.4). Headings using lh-s will be slightly more open (1.3 instead of 1.2). h1 and h2 now use lh-xs (1.2) for tighter spacing.",
1595
+ "affectedAreas": ["Typography", "Headings", "Body text", "Readability"]
1596
+ },
1597
+ {
1598
+ "component": "Panel",
1599
+ "description": "Panel status indicators removed; status is now expressed through semantic variants",
1600
+ "v1Behavior": "Panel supported hasStatusIndicator, statusType, and typeLabels props which rendered a colored bar on the left side of the panel.",
1601
+ "v2Behavior": "Panel now has nine variants: four structural (default, sunken, raised, overlay) and five semantic (critical, info, warning, success, discovery). The standalone status-indicator bar has been removed — the semantic variants tint the whole panel instead.",
1602
+ "migration": "Remove the hasStatusIndicator, statusType, and typeLabels props, plus any custom CSS targeting .pds-panel__status elements. Where you previously showed a status indicator, use the matching semantic variant instead: statusType 'critical' → variant='critical', 'warning' → variant='warning', 'success' → variant='success', 'info' → variant='info', and 'neutral' → variant='default' (or omit variant, as there is no neutral variant).",
1603
+ "affectedAreas": ["Panel component", "Visual design", "Status indicators"]
1604
+ },
1605
+ {
1606
+ "component": "IconButton",
1607
+ "description": "IconButton now supports an optional visible border via the hasBorder prop. In V1 the button was always borderless.",
1608
+ "v1Behavior": "IconButton always had a 1px border and used --pds-border-radius-button (fully rounded/pill shape).",
1609
+ "v2Behavior": "IconButton now uses --pds-border-radius-input (4px rounded rectangle) and has no visible border by default. Border is opt-in via hasBorder prop.",
1610
+ "migration": "No code changes required. Add hasBorder={true} if you want a visible border on the button.",
1611
+ "affectedAreas": [
1612
+ "IconButton component",
1613
+ "Visual design",
1614
+ "Border radius"
1615
+ ]
1616
+ },
1617
+ {
1618
+ "component": "Pagination",
1619
+ "description": "Previous and next arrow buttons now hidden when at boundaries instead of disabled",
1620
+ "v1Behavior": "Previous button rendered with aria-disabled and reduced opacity when on the first page. Next button rendered with aria-disabled and reduced opacity when on the last page.",
1621
+ "v2Behavior": "Previous button is not rendered when on the first page. Next button is not rendered when on the last page.",
1622
+ "migration": "No prop changes required. Remove any custom CSS targeting .pds-pagination__item--disabled — that class no longer exists.",
1623
+ "affectedAreas": [
1624
+ "Pagination component",
1625
+ "Visual design",
1626
+ "Accessibility"
1627
+ ]
1628
+ },
1629
+ {
1630
+ "component": "TabMenu",
1631
+ "description": "Dropdown positioning may shift slightly from V1. Custom CSS targeting fixed position values or the closed menu element should be reviewed.",
1632
+ "v1Behavior": "TabMenuDropdown used a bespoke Floating UI implementation with hardcoded CSS positioning (position: absolute, fixed top/left values).",
1633
+ "v2Behavior": "TabMenuDropdown now uses the shared useDropdown hook (same as Select, Combobox, etc.) with Floating UI floatingStyles for positioning.",
1634
+ "migration": "No prop changes required. If you have custom CSS targeting .pds-tab-menu__dropdown when closed, note that it is no longer in the DOM when closed.",
1635
+ "affectedAreas": [
1636
+ "TabMenu component",
1637
+ "Dropdown positioning",
1638
+ "Consistency"
1639
+ ]
1640
+ },
1641
+ {
1642
+ "component": "MenuButton",
1643
+ "description": "Dropdown positioning may shift slightly from V1. The menu is no longer in the DOM when closed.",
1644
+ "v1Behavior": "MenuButton used manual keyboard handling, aria-activedescendant focus management, and a custom click-outside handler. The menu element was always present in the DOM with visibility toggled via inline styles.",
1645
+ "v2Behavior": "MenuButton now uses the shared useDropdown hook with roving tabIndex focus management (useListNavigation), built-in typeahead (useTypeahead), and automatic dismiss handling (useDismiss). The menu unmounts from the DOM when closed.",
1646
+ "migration": "No prop changes required. If you relied on aria-activedescendant for screen readers, test with the updated component — it now uses a roving tabIndex pattern.",
1647
+ "affectedAreas": [
1648
+ "MenuButton component",
1649
+ "Keyboard navigation",
1650
+ "Accessibility",
1651
+ "Focus management"
1652
+ ]
1653
+ },
1654
+ {
1655
+ "component": "Tag",
1656
+ "description": "Auto-assigned tag colors will change for all tags not using an explicit tagColor prop",
1657
+ "v1Behavior": "When tagColor is omitted, a color is chosen by hashing the label text modulo 20 (the number of available colors).",
1658
+ "v2Behavior": "When tagColor is omitted, a color is still chosen by hashing the label text, but modulo 22 (the new color count). Because both the array length and contents changed, the same label will map to a different color than it did in V1.",
1659
+ "migration": "If consistent color identity matters for specific tags (e.g. users associate a color with a category), set tagColor explicitly on those tags rather than relying on auto-assignment.",
1660
+ "affectedAreas": [
1661
+ "Tag component",
1662
+ "Auto-color assignment",
1663
+ "Visual consistency"
1664
+ ]
1665
+ },
1666
+ {
1667
+ "component": "InputGroup",
1668
+ "description": "Buttons inside InputGroup now have consistent rounded corners on the right side, matching the input border radius regardless of button variant.",
1669
+ "migration": "No code changes needed."
1670
+ },
1671
+ {
1672
+ "component": "Skeleton",
1673
+ "description": "Skeleton now fully supports dark mode. Colors switch automatically based on the active theme.",
1674
+ "migration": "No code changes needed."
1675
+ },
1676
+ {
1677
+ "component": "Popover",
1678
+ "description": "Popover container now has a more defined border in both light and dark mode.",
1679
+ "migration": "No code changes needed."
1680
+ },
1681
+ {
1682
+ "component": "BranchDiff",
1683
+ "description": "Minor visual refinements: small gap added between commit numbers and bars, and corrected bar colors in both light and dark mode.",
1684
+ "migration": "No code changes needed."
1685
+ },
1686
+ {
1687
+ "component": "FileDiff",
1688
+ "description": "Bar colors corrected in both light and dark mode. Minor visual refinements to spacing and border radius.",
1689
+ "migration": "BREAKING: Rename labelStrings prop to translationStrings."
1690
+ },
1691
+ {
1692
+ "component": "Foundational Table Styles",
1693
+ "description": "Bare table elements no longer receive foundational styles automatically",
1694
+ "v1Behavior": "Foundational table styles applied to any <table> element without a class (table:not([class])) as well as table.pds-table. This caused breakage in frameworks that inject classes onto table elements.",
1695
+ "v2Behavior": "Foundational table styles only apply to table.pds-table (explicit opt-in) and .pds-prose table (for prose/markdown content contexts). Bare tables without a class receive no foundational styles.",
1696
+ "migration": "Add the pds-table class to any standalone <table> elements that should receive PDS foundational styles. For tables inside long-form or markdown content, wrap the content in a pds-prose container instead.",
1697
+ "affectedAreas": [
1698
+ "Foundational table styles",
1699
+ "Prose content",
1700
+ "Markdown rendering"
1701
+ ]
1702
+ },
1703
+ {
1704
+ "component": "CompactEmptyState",
1705
+ "description": "V2 style update — typography tokens and color token correction",
1706
+ "v1Behavior": "Heading font size and weight applied via pds-ts-l and pds-fw-bold utility classes on the element. Message color used the deprecated pds-color-text-default-secondary token.",
1707
+ "v2Behavior": "Heading font size and weight defined in component CSS using pds-typography-size-l and pds-typography-fw-bold tokens. Message color uses the correct pds-color-fg-default-secondary token.",
1708
+ "migration": "No prop changes. Visual appearance is the same. Remove any overrides targeting pds-color-text-default-secondary on this component.",
1709
+ "affectedAreas": [
1710
+ "CompactEmptyState component",
1711
+ "Typography",
1712
+ "Color tokens"
1713
+ ]
1714
+ },
1715
+ {
1716
+ "component": "VerticalEmptyState",
1717
+ "description": "V2 style update — typography tokens and color token correction",
1718
+ "v1Behavior": "Heading font size and weight applied via pds-ts-2xl and pds-fw-bold utility classes on the element. Root color used the deprecated pds-color-text-default token.",
1719
+ "v2Behavior": "Heading font size and weight defined in component CSS using pds-typography-size-2xl and pds-typography-fw-bold tokens. Root color uses the correct pds-color-fg-default token.",
1720
+ "migration": "No prop changes. Visual appearance is the same. Remove any overrides targeting pds-color-text-default on this component.",
1721
+ "affectedAreas": [
1722
+ "VerticalEmptyState component",
1723
+ "Typography",
1724
+ "Color tokens"
1725
+ ]
1726
+ },
1727
+ {
1728
+ "component": "TreeNav",
1729
+ "description": "The path property on TreeNavItem (formerly SideNavCompactItem) is now required on any item that has children (a links array). In V1, the path property existed but nested submenu expanded state did not survive re-renders regardless. In V2 this bug is fixed, and path is used to restore expanded state after re-renders. Omitting path from an expandable item will cause user-opened submenus to collapse on any re-render.",
1730
+ "action": "Ensure all items with a links array have a unique path set, typically the route or URL path of that section (e.g. /guides/overview)."
1731
+ },
1732
+ {
1733
+ "component": "Datepicker",
1734
+ "prop": "showTime",
1735
+ "description": "In range mode with showTime, the start and end time fields now render as soon as the calendar opens and default to 00:00 and 23:59, so a range committed without editing them spans whole days rather than midnight to midnight. Pressing Done with only one day clicked also now commits that day as a single-day range instead of discarding the selection. Single mode and pickers without showTime are unaffected.",
1736
+ "action": "Review any range-mode consumer that read the end of an emitted range: a value that previously arrived as midnight on the last day now arrives as 23:59 unless the end time field was edited. If your query or display depends on an exclusive end bound, adjust it to expect the end of the day."
1737
+ },
1738
+ {
1739
+ "component": "Datepicker",
1740
+ "prop": "timeZone",
1741
+ "description": "The trigger text, the calendar's own highlight, and screen-reader announcements now resolve the selected day in the configured timeZone rather than the browser's own zone. Previously a picker pinned to a different zone (e.g. timeZone=\"UTC\") displayed and highlighted the neighbouring calendar day to any viewer whose local zone was behind it - selecting a single day appeared to select two - even though the emitted value was correct.",
1742
+ "action": "No action needed when timeZone is unset, which is the default and formats in the browser's zone exactly as before. If you worked around the old behaviour by shifting dates before display, remove that adjustment."
1743
+ }
1744
+ ],
1745
+ "categories": [
1746
+ {
1747
+ "id": "components",
1748
+ "name": "Components",
1749
+ "description": "Component renames, removals, and deprecations"
1750
+ },
1751
+ {
1752
+ "id": "props",
1753
+ "name": "Props",
1754
+ "description": "Component prop changes"
1755
+ },
1756
+ {
1757
+ "id": "imports",
1758
+ "name": "Import Paths",
1759
+ "description": "Import path changes"
1760
+ },
1761
+ {
1762
+ "id": "css-classes",
1763
+ "name": "CSS Classes",
1764
+ "description": "CSS class name changes"
1765
+ },
1766
+ {
1767
+ "id": "utilities",
1768
+ "name": "Utilities",
1769
+ "description": "Utility function changes"
1770
+ },
1771
+ {
1772
+ "id": "design-tokens",
1773
+ "name": "Design Tokens",
1774
+ "description": "Design token usage changes"
1775
+ },
1776
+ {
1777
+ "id": "behavior",
1778
+ "name": "Behavior Changes",
1779
+ "description": "Breaking changes in component behavior"
1780
+ }
1781
+ ],
1782
+ "notes": {
1783
+ "testing": "All components should be tested after migration to ensure expected behavior.",
1784
+ "peerDependencies": "Ensure React version is compatible (16-19 supported).",
1785
+ "designTokens": "This toolkit's major version must match @pantheon-systems/pds-design-tokens major version."
1786
+ }
1787
+ }