@pantheon-systems/pds-toolkit-react 2.0.0-alpha.34 → 2.0.0-alpha.36
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.
- package/bin/pds-codemod.cjs +58 -0
- package/codemods/v1-to-v2/mappings.json +1281 -0
- package/codemods/v1-to-v2/transforms/__testfixtures__/prop-value-standardization/basic.input.tsx +36 -0
- package/codemods/v1-to-v2/transforms/__testfixtures__/prop-value-standardization/basic.output.tsx +36 -0
- package/codemods/v1-to-v2/transforms/__tests__/prop-value-standardization.test.js +6 -0
- package/codemods/v1-to-v2/transforms/prop-value-standardization.js +112 -0
- package/dist/components/Table/Table.d.ts +107 -1
- package/dist/components/buttons/Button/Button.d.ts +15 -0
- package/dist/components/buttons/MenuButton/MenuButton.d.ts +20 -7
- package/dist/components/buttons/SegmentedButton/SegmentedButton.d.ts +6 -5
- package/dist/components/buttons/SplitButton/SplitButton.d.ts +1 -1
- package/dist/components/icons/Icon/generated-icon-data.d.ts +16 -2
- package/dist/components/inputs/Datepicker/Datepicker.d.ts +22 -13
- package/dist/css/component-css/pds-button-nav.css +1 -1
- package/dist/css/component-css/pds-button.css +6 -6
- package/dist/css/component-css/pds-datepicker.css +2 -2
- package/dist/css/component-css/pds-drawer.css +1 -1
- package/dist/css/component-css/pds-dropdown-menu.css +1 -1
- package/dist/css/component-css/pds-index.css +27 -23
- package/dist/css/component-css/pds-input-utilities.css +1 -1
- package/dist/css/component-css/pds-menu-button.css +1 -1
- package/dist/css/component-css/pds-nav-menu.css +1 -1
- package/dist/css/component-css/pds-navbar.css +1 -1
- package/dist/css/component-css/pds-pagination-mini.css +1 -1
- package/dist/css/component-css/pds-panel-list.css +1 -1
- package/dist/css/component-css/pds-panel.css +1 -1
- package/dist/css/component-css/pds-segmented-button.css +1 -1
- package/dist/css/component-css/pds-side-nav-global.css +1 -1
- package/dist/css/component-css/pds-side-nav.css +1 -1
- package/dist/css/component-css/pds-site-footer.css +1 -1
- package/dist/css/component-css/pds-sortable-list.css +1 -1
- package/dist/css/component-css/pds-split-button.css +1 -1
- package/dist/css/component-css/pds-status-checker.css +1 -1
- package/dist/css/component-css/pds-stepper.css +3 -1
- package/dist/css/component-css/pds-tab-menu.css +1 -1
- package/dist/css/component-css/pds-table-of-contents.css +1 -1
- package/dist/css/component-css/pds-table.css +3 -1
- package/dist/css/component-css/pds-tabs.css +1 -1
- package/dist/css/component-css/pds-tally.css +1 -1
- package/dist/css/component-css/pds-theme-switcher.css +1 -1
- package/dist/css/component-css/pds-tree-nav.css +1 -1
- package/dist/css/component-css/pds-user-menu.css +2 -2
- package/dist/css/component-css/pds-utility-button.css +1 -1
- package/dist/css/component-css/pds-vertical-stepper.css +1 -1
- package/dist/css/component-css/pds-workspace-selector.css +1 -1
- package/dist/css/design-tokens/variables.dark.css +43 -33
- package/dist/css/design-tokens/variables.light.css +33 -23
- package/dist/css/pds-components.css +27 -23
- package/dist/css/pds-core.css +2 -2
- package/dist/index.css +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1411 -1052
- package/dist/index.js.map +1 -1
- package/dist/libs/components/StatusDot/StatusDot.d.ts +15 -0
- package/dist/libs/types/layout-types.d.ts +1 -1
- package/dist/svg/anglesDown.svg +3 -0
- package/dist/svg/anglesUp.svg +3 -0
- package/dist/utilities/FlexContainer/FlexContainer.d.ts +2 -1
- package/package.json +17 -2
|
@@ -0,0 +1,1281 @@
|
|
|
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 \u2014 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
|
+
"additions": [
|
|
81
|
+
{
|
|
82
|
+
"component": "PaginationMini",
|
|
83
|
+
"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.",
|
|
84
|
+
"usage": "Use when navigating linearly through a series of pages such as blog posts, documentation chapters, or wizard steps."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"component": "PaginationCompact",
|
|
88
|
+
"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.",
|
|
89
|
+
"usage": "Use when horizontal space is limited or the total page count is high and users need direct access to any page."
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"deprecations": [
|
|
93
|
+
{
|
|
94
|
+
"component": "DashboardGlobal",
|
|
95
|
+
"reason": "DashboardGlobal has been removed in v2. Use AppLayout instead, which provides a more flexible and composable application shell.",
|
|
96
|
+
"replacement": "Replace <DashboardGlobal> with <AppLayout>. See the AppLayout documentation for slot-based composition."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"component": "DashboardInner",
|
|
100
|
+
"reason": "DashboardInner has been removed in v2. It is no longer necessary as a dedicated inner content wrapper.",
|
|
101
|
+
"replacement": "No direct replacement. Structure your page content directly within AppLayout's content area."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"component": "DashboardNav",
|
|
105
|
+
"reason": "DashboardNav has been removed in v2. Use SideNavGlobal instead, which provides a more flexible sidebar navigation pattern.",
|
|
106
|
+
"replacement": "Replace <DashboardNav> with <SideNavGlobal>. See the SideNavGlobal documentation for menu item configuration."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"component": "CTASlice",
|
|
110
|
+
"reason": "CTASlice has been removed in v2 and is no longer published as a component.",
|
|
111
|
+
"replacement": "No replacement. Remove usage of <CTASlice> from your application."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"component": "FooterHeading",
|
|
115
|
+
"reason": "FooterHeading has been removed in v2.",
|
|
116
|
+
"replacement": "No direct replacement. Contact the design team for guidance on how to handle footer headings in your application."
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"component": "FooterLinks",
|
|
120
|
+
"reason": "FooterLinks has been removed in v2.",
|
|
121
|
+
"replacement": "No direct replacement. Contact the design team for guidance on how to handle footer link groups in your application."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"component": "PullQuote",
|
|
125
|
+
"reason": "PullQuote has been removed in v2 and is no longer published as a component.",
|
|
126
|
+
"replacement": "No replacement. Remove usage of <PullQuote> from your application."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"component": "AvatarTileList",
|
|
130
|
+
"reason": "AvatarTileList has been removed in v2 and is no longer published as a component.",
|
|
131
|
+
"replacement": "No replacement. Remove usage of <AvatarTileList> from your application."
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"component": "Tile",
|
|
135
|
+
"reason": "Tile has been removed in v2 and is no longer published as a component.",
|
|
136
|
+
"replacement": "No replacement. Remove usage of <Tile> from your application."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"component": "TileGrid",
|
|
140
|
+
"reason": "TileGrid has been removed in v2 and is no longer published as a component.",
|
|
141
|
+
"replacement": "No replacement. Remove usage of <TileGrid> from your application."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"component": "SocialLinks",
|
|
145
|
+
"reason": "SocialLinks has been removed in v2 and is no longer published as a component.",
|
|
146
|
+
"replacement": "No replacement. Remove usage of <SocialLinks> from your application."
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
"props": {
|
|
151
|
+
"renames": [
|
|
152
|
+
{
|
|
153
|
+
"component": "GlobalWrapper",
|
|
154
|
+
"from": "mobileMenuMaxWidth",
|
|
155
|
+
"to": "mobileMaxWidth",
|
|
156
|
+
"reason": "Renamed for clarity \u2014 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)."
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"component": "ComboboxMultiselect",
|
|
160
|
+
"from": "auxiliaryPanel",
|
|
161
|
+
"to": "aiSuggestions",
|
|
162
|
+
"reason": "Renamed for clarity \u2014 the auxiliary panel is specifically for AI suggestions. General-purpose floating panels can now be built with the Dropdown compound component."
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"component": "Button",
|
|
166
|
+
"from": "isLoading",
|
|
167
|
+
"to": "isWorking",
|
|
168
|
+
"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."
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"component": "Icon",
|
|
172
|
+
"from": "iconSize",
|
|
173
|
+
"to": "size",
|
|
174
|
+
"reason": "The iconSize prop has been renamed to size for consistency across V2 icon components. The available size values and defaults remain unchanged."
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"component": "CloseButton",
|
|
178
|
+
"from": "iconSize",
|
|
179
|
+
"to": "size",
|
|
180
|
+
"reason": "The iconSize prop has been renamed to size for consistency with other button components. The available size values remain the same ('m', 'l', 'xl')."
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"component": "PlatformIcon",
|
|
184
|
+
"from": "iconSize",
|
|
185
|
+
"to": "size",
|
|
186
|
+
"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 \u2014 'xs', 's', 'm', 'l', 'xl', '2xl', '3xl' \u2014 replacing the previous 1.2\u00d7 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)."
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"component": "FileDiff",
|
|
190
|
+
"from": "labelStrings",
|
|
191
|
+
"to": "translationStrings",
|
|
192
|
+
"reason": "Renamed for consistency with other V2 components."
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"component": "DocsLayout",
|
|
196
|
+
"from": "sidebarMinWidth",
|
|
197
|
+
"to": "sidebarWidthMin",
|
|
198
|
+
"reason": "Renamed for consistency with the sidebarWidth/sidebarWidthMax/sidebarWidthMin naming convention used across layout components."
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"component": "CardSelect",
|
|
202
|
+
"from": "options[].description",
|
|
203
|
+
"to": "options[].children",
|
|
204
|
+
"description": "Each option now accepts children (ReactNode) instead of description (string | ReactNode), enabling richer composition inside card options."
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"additions": [
|
|
208
|
+
{
|
|
209
|
+
"component": "Card",
|
|
210
|
+
"prop": "imageVariant",
|
|
211
|
+
"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.",
|
|
212
|
+
"usage": "Use imageVariant='inset' when the image should appear contained within the card rather than bleeding to the edges."
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"component": "Card",
|
|
216
|
+
"prop": "footer slot",
|
|
217
|
+
"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.",
|
|
218
|
+
"usage": "Pass content with slot='footer' to place it in the footer area. Use for CTAs such as ButtonLink."
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"component": "Button",
|
|
222
|
+
"prop": "isLoading",
|
|
223
|
+
"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.",
|
|
224
|
+
"usage": "Use isLoading for initial loads, use isWorking when performing an action like form submission."
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"component": "IconButton",
|
|
228
|
+
"prop": "hasBorder",
|
|
229
|
+
"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.",
|
|
230
|
+
"usage": "Use hasBorder={true} when the button needs a visible border for emphasis or grouping. Omit (or set false) for a borderless icon button."
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"component": "Select",
|
|
234
|
+
"prop": "size",
|
|
235
|
+
"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.",
|
|
236
|
+
"usage": "Use size='s' (default) for standard form controls, size='m' for more prominent inputs, size='l' for large/prominent form layouts."
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"component": "Combobox",
|
|
240
|
+
"prop": "size",
|
|
241
|
+
"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.",
|
|
242
|
+
"usage": "Use size='s' (default) for standard form controls, size='m' for more prominent inputs, size='l' for large/prominent form layouts."
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"component": "Pagination",
|
|
246
|
+
"prop": "size",
|
|
247
|
+
"description": "New size prop adds two height/font-size variants. Defaults to 'm' (40px). 's' gives 20px items for compact layouts.",
|
|
248
|
+
"usage": "Use size='m' (default) for standard pagination, size='s' for compact or dense layouts."
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"component": "Tabs",
|
|
252
|
+
"prop": "size",
|
|
253
|
+
"description": "New size prop adds two tab height variants. Defaults to 's' (32px). 'm' gives 40px tabs with larger text and icons.",
|
|
254
|
+
"usage": "Use size='s' (default) for standard tabs, size='m' for more prominent tab bars."
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"component": "TabMenu",
|
|
258
|
+
"prop": "size",
|
|
259
|
+
"description": "New size prop adds two tab height variants. Defaults to 's' (32px). 'm' gives 40px tabs with larger text and icons.",
|
|
260
|
+
"usage": "Use size='s' (default) for standard navigation, size='m' for more prominent tab navigation."
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"component": "ComboboxMultiselect",
|
|
264
|
+
"prop": "size",
|
|
265
|
+
"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.",
|
|
266
|
+
"usage": "Use size='s' (default) for standard form controls, size='m' for more prominent inputs, size='l' for large/prominent form layouts."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"component": "ComparisonList",
|
|
270
|
+
"prop": "size",
|
|
271
|
+
"description": "New size prop adds two density variants affecting font size, row spacing, column gap, and icon size. Defaults to 's'.",
|
|
272
|
+
"usage": "Use size='s' (default) for compact lists, size='m' for a larger, more spacious layout."
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"component": "PaymentIcon",
|
|
276
|
+
"prop": "size",
|
|
277
|
+
"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.",
|
|
278
|
+
"usage": "Use size='2xl' (default) for standard usage. Adjust as needed to match surrounding content scale."
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"component": "Tag",
|
|
282
|
+
"prop": "size",
|
|
283
|
+
"type": "'xs' | 's' | 'm'",
|
|
284
|
+
"default": "'s'",
|
|
285
|
+
"description": "Controls the size of the tag.",
|
|
286
|
+
"usage": "Use size='s' (default), size='xs' for compact, or size='m' for large."
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"component": "FileUpload",
|
|
290
|
+
"prop": "size",
|
|
291
|
+
"description": "New size prop controls the height and padding of the file upload input. Accepts 's' | 'm'.",
|
|
292
|
+
"usage": "Use size='s' (default) for compact forms, size='m' for standard forms."
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"component": "SidebarLayout",
|
|
296
|
+
"prop": "sidebarWidthMin",
|
|
297
|
+
"description": "New prop that sets the minimum width of the sidebar in rems. Ensures the sidebar remains usable on medium-sized screens. Default: 15.",
|
|
298
|
+
"usage": "Use to prevent the sidebar from becoming too narrow as the viewport shrinks."
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"component": "SidebarLayout",
|
|
302
|
+
"prop": "sidebarWidthMax",
|
|
303
|
+
"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.",
|
|
304
|
+
"usage": "Use to cap the sidebar width on wide viewports when using a large percentage value."
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"component": "DocsLayout",
|
|
308
|
+
"prop": "sidebarWidthMax",
|
|
309
|
+
"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.",
|
|
310
|
+
"usage": "Use to cap the sidebar width on wide viewports."
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"component": "Table",
|
|
314
|
+
"prop": "columns",
|
|
315
|
+
"description": "Replaces `headers`. An array of column definition objects, each with a required `id` (stable string identifier), `header` (ReactNode), and optional `sortable` (boolean).",
|
|
316
|
+
"usage": "columns={[{ id: 'name', header: 'Site name', sortable: true }]}"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"component": "Table",
|
|
320
|
+
"prop": "isLoading",
|
|
321
|
+
"description": "When true, renders skeleton rows in place of data. Use while data is fetching.",
|
|
322
|
+
"usage": "Use isLoading={true} during data fetches. Pair with loadingRowCount to control how many skeleton rows appear."
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"component": "Table",
|
|
326
|
+
"prop": "loadingRowCount",
|
|
327
|
+
"description": "Number of skeleton rows to render when isLoading is true. Defaults to 5.",
|
|
328
|
+
"usage": "Set to approximate the expected row count to reduce layout shift when data loads."
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"component": "Table",
|
|
332
|
+
"prop": "emptyState",
|
|
333
|
+
"description": "Custom ReactNode rendered when rowData is empty and isLoading is false. Defaults to a CompactEmptyState with heading 'No results found.'",
|
|
334
|
+
"usage": "Pass a custom <CompactEmptyState> or any ReactNode for a tailored empty experience."
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"component": "Table",
|
|
338
|
+
"prop": "itemsPerPage",
|
|
339
|
+
"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.",
|
|
340
|
+
"usage": "Set itemsPerPage={25} for uncontrolled paging. Pair with onPageChange, currentPage, and totalItemCount for controlled mode."
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"component": "Table",
|
|
344
|
+
"prop": "currentPage",
|
|
345
|
+
"description": "Current 1-based page number for controlled pagination. Pair with onPageChange.",
|
|
346
|
+
"usage": "Required in controlled pagination mode alongside onPageChange and totalItemCount."
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"component": "Table",
|
|
350
|
+
"prop": "totalItemCount",
|
|
351
|
+
"description": "Total number of items across all pages. Required in controlled pagination mode so the Pagination component can compute the page count.",
|
|
352
|
+
"usage": "Pass the total count from your API response, not the length of the current page slice."
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"component": "Table",
|
|
356
|
+
"prop": "onPageChange",
|
|
357
|
+
"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.",
|
|
358
|
+
"usage": "onPageChange={(page) => fetchPage(page)}"
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"component": "Table",
|
|
362
|
+
"prop": "onRowSelectionChange",
|
|
363
|
+
"description": "Enables the checkbox column. Fires with the full array of currently selected row IDs on every selection change.",
|
|
364
|
+
"usage": "onRowSelectionChange={(ids) => setSelectedRows(ids)}"
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"component": "Table",
|
|
368
|
+
"prop": "selectedRows",
|
|
369
|
+
"description": "Controlled selected row IDs. When provided alongside onRowSelectionChange, enables controlled selection mode.",
|
|
370
|
+
"usage": "selectedRows={selectedRows}"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"component": "Table",
|
|
374
|
+
"prop": "getRowId",
|
|
375
|
+
"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.",
|
|
376
|
+
"usage": "getRowId={(row) => String(row.id)}"
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"component": "Table",
|
|
380
|
+
"prop": "selectAllLabel",
|
|
381
|
+
"description": "Visually hidden accessible label for the select-all header checkbox. Defaults to 'Select all rows'.",
|
|
382
|
+
"usage": "Override for translation."
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"component": "Table",
|
|
386
|
+
"prop": "getSelectRowLabel",
|
|
387
|
+
"description": "Returns the visually hidden accessible label for each row's checkbox. Defaults to () => 'Select row'.",
|
|
388
|
+
"usage": "Override for translation."
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"component": "TagsInput",
|
|
392
|
+
"prop": "size",
|
|
393
|
+
"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.",
|
|
394
|
+
"usage": "Use size='s' (default) for standard form controls, size='m' for more prominent inputs, size='l' for large/prominent form layouts."
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"component": "SideNav",
|
|
398
|
+
"prop": "hasMobileDropdown",
|
|
399
|
+
"description": "New hasMobileDropdown prop opts in to rendering a dropdown menu in place of the standard navigation at mobile viewports. Defaults to false \u2014 the standard navigation is shown at all breakpoints.",
|
|
400
|
+
"usage": "Use hasMobileDropdown={true} if your layout requires a dropdown menu at mobile. The mobile breakpoint is controlled by the mobileBreakpoint prop on GlobalWrapper."
|
|
401
|
+
}
|
|
402
|
+
],
|
|
403
|
+
"removals": [
|
|
404
|
+
{
|
|
405
|
+
"component": "SiteSearch",
|
|
406
|
+
"prop": "horizontalOffset",
|
|
407
|
+
"replacement": "Remove the prop. It was deprecated and had no effect.",
|
|
408
|
+
"reason": "Deprecated prop removed in v2. Absolute positioning was removed from the component in an earlier release, making this prop a no-op."
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
"component": "Card",
|
|
412
|
+
"prop": "background",
|
|
413
|
+
"removedValues": [
|
|
414
|
+
"mint-gradient",
|
|
415
|
+
"sundown-gradient",
|
|
416
|
+
"yellow-gradient"
|
|
417
|
+
],
|
|
418
|
+
"replacement": "No direct replacement. Remove the prop or use background='default'.",
|
|
419
|
+
"reason": "Gradient background options removed from Card in v2. Only 'default' and 'transparent' are supported."
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"component": "Button",
|
|
423
|
+
"prop": "variant",
|
|
424
|
+
"oldValue": "brand-secondary",
|
|
425
|
+
"replacement": "Use variant=\"secondary\"",
|
|
426
|
+
"reason": "The brand-secondary variant has been removed in v2. Use the standard secondary variant instead."
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"component": "Button",
|
|
430
|
+
"prop": "variant",
|
|
431
|
+
"oldValue": "navbar",
|
|
432
|
+
"replacement": "Use variant=\"subtle\"",
|
|
433
|
+
"reason": "The navbar variant has been removed in v2. It was visually identical to subtle \u2014 replace with subtle."
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
"component": "MenuButton",
|
|
437
|
+
"prop": "variant",
|
|
438
|
+
"oldValue": "navbar",
|
|
439
|
+
"replacement": "Use variant=\"subtle\"",
|
|
440
|
+
"reason": "The navbar variant has been removed in v2. Use subtle instead. The expanded-state transparency and icon-color behavior previously specific to the navbar variant now applies to all subtle MenuButton triggers automatically."
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
"component": "IconButton",
|
|
444
|
+
"prop": "variant",
|
|
445
|
+
"oldValue": "critical-hover",
|
|
446
|
+
"replacement": "Use variant=\"critical\"",
|
|
447
|
+
"reason": "The critical-hover variant has been removed in v2. Use the standard critical variant instead."
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
"component": "Avatar",
|
|
451
|
+
"prop": "size",
|
|
452
|
+
"oldValue": "xl",
|
|
453
|
+
"replacement": "Use size=\"l\"",
|
|
454
|
+
"reason": "The 'xl' size has been removed in v2. The largest available size is now 'l' (40px)."
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
"component": "Panel",
|
|
458
|
+
"prop": "hasStatusIndicator",
|
|
459
|
+
"replacement": "Remove this prop. Status indicators have been removed from Panel in v2.",
|
|
460
|
+
"reason": "Panel no longer supports status indicators. Use an alternate approach to communicate status to screen readers."
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
"component": "Panel",
|
|
464
|
+
"prop": "statusType",
|
|
465
|
+
"replacement": "Remove this prop. Status indicators have been removed from Panel in v2.",
|
|
466
|
+
"reason": "Panel no longer supports status indicators. Use an alternate approach to communicate status to screen readers."
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"component": "Panel",
|
|
470
|
+
"prop": "typeLabels",
|
|
471
|
+
"replacement": "Remove this prop. Status indicators have been removed from Panel in v2.",
|
|
472
|
+
"reason": "Panel no longer supports status indicators. Use an alternate approach to communicate status to screen readers."
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"component": "SideNavGlobal",
|
|
476
|
+
"prop": "hasLogo",
|
|
477
|
+
"replacement": "Remove this prop. Use the IdentityBlock component in the AppLayout identity slot instead.",
|
|
478
|
+
"reason": "Logo display is now handled by the IdentityBlock component, which is placed in the AppLayout identity slot."
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"component": "SideNavGlobal",
|
|
482
|
+
"prop": "logoLinkContent",
|
|
483
|
+
"replacement": "Remove this prop. Use the IdentityBlock component in the AppLayout identity slot instead.",
|
|
484
|
+
"reason": "Logo display is now handled by the IdentityBlock component, which is placed in the AppLayout identity slot."
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"component": "SideNavGlobal",
|
|
488
|
+
"prop": "mobileMenuSelectTextFallback",
|
|
489
|
+
"replacement": "Remove this prop. SideNavGlobal no longer switches to a dropdown menu on mobile.",
|
|
490
|
+
"reason": "The sidebar navigation now renders the same at all breakpoints. Mobile behavior is handled by AppLayout."
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"component": "Switch",
|
|
494
|
+
"prop": "showStatusLabel",
|
|
495
|
+
"replacement": "Remove the prop. The on/off state is now communicated to screen readers via a visually-hidden element. Use onLabel/offLabel to customize the screen-reader text.",
|
|
496
|
+
"reason": "The visual status label (On/Off text next to the switch) has been removed in V2. State is still accessible to screen readers via a visually-hidden element controlled by onLabel and offLabel."
|
|
497
|
+
},
|
|
498
|
+
{
|
|
499
|
+
"component": "Switch",
|
|
500
|
+
"prop": "statusLabelPlacement",
|
|
501
|
+
"replacement": "Remove the prop. No replacement \u2014 the status label is no longer rendered visually.",
|
|
502
|
+
"reason": "The visual status label has been removed in V2, making its placement prop obsolete."
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
"component": "Switch",
|
|
506
|
+
"prop": "onLabel",
|
|
507
|
+
"replacement": "Remove the prop. Screen readers announce the on/off state natively via role=\"switch\".",
|
|
508
|
+
"reason": "onLabel was used for visual and screen-reader status text. The visual label has been removed in V2, and role=\"switch\" already communicates state to screen readers without a custom label."
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"component": "Switch",
|
|
512
|
+
"prop": "offLabel",
|
|
513
|
+
"replacement": "Remove the prop. Screen readers announce the on/off state natively via role=\"switch\".",
|
|
514
|
+
"reason": "offLabel was used for visual and screen-reader status text. The visual label has been removed in V2, and role=\"switch\" already communicates state to screen readers without a custom label."
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"component": "MenuButton",
|
|
518
|
+
"prop": "withinNavbar",
|
|
519
|
+
"reason": "Removed in V2. The dropdown no longer adjusts its border radius based on navbar context \u2014 it floats normally regardless of placement.",
|
|
520
|
+
"migration": "Remove the withinNavbar prop. No replacement needed."
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"component": "UserMenu",
|
|
524
|
+
"prop": "withinNavbar",
|
|
525
|
+
"reason": "Removed in V2. Mobile accordion behavior is now driven by DOM context ([data-pds-mobile] .pds-navbar__mobile) rather than this prop.",
|
|
526
|
+
"migration": "Remove the withinNavbar prop. No replacement needed."
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
"component": "WorkspaceSelector",
|
|
530
|
+
"prop": "withinNavbar",
|
|
531
|
+
"reason": "Removed in V2. Mobile accordion behavior is now driven by DOM context ([data-pds-mobile] .pds-navbar__mobile) rather than this prop.",
|
|
532
|
+
"migration": "Remove the withinNavbar prop. No replacement needed."
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
"component": "NotificationsPopover",
|
|
536
|
+
"prop": "withinNavbar",
|
|
537
|
+
"reason": "Removed in V2. Mobile accordion behavior is now driven by DOM context ([data-pds-mobile] .pds-navbar__mobile) rather than this prop.",
|
|
538
|
+
"migration": "Remove the withinNavbar prop. No replacement needed."
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"component": "SiteMenu",
|
|
542
|
+
"prop": "mobileMenuMaxWidth",
|
|
543
|
+
"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.",
|
|
544
|
+
"migration": "Remove the mobileMenuMaxWidth prop. Configure the mobile breakpoint via the mobileMaxWidth prop on GlobalWrapper instead."
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"component": "Table",
|
|
548
|
+
"prop": "headers",
|
|
549
|
+
"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`."
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
"component": "TreeNav",
|
|
553
|
+
"prop": "mobileMenuMaxWidth",
|
|
554
|
+
"reason": "Removed in V2. The mobile breakpoint is now controlled globally by the mobileBreakpoint prop on GlobalWrapper.",
|
|
555
|
+
"replacement": "Use the mobileBreakpoint prop on GlobalWrapper to configure the mobile breakpoint."
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
"component": "TreeNav",
|
|
559
|
+
"prop": "hasMobileMenu",
|
|
560
|
+
"reason": "Removed in V2. TreeNav renders at all breakpoints without switching to a dropdown menu.",
|
|
561
|
+
"replacement": "Remove this prop. TreeNav always renders the full tree navigation."
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
"component": "TreeNav",
|
|
565
|
+
"prop": "mobileMenuSelectTextFallback",
|
|
566
|
+
"reason": "Removed in V2 along with the mobile dropdown functionality.",
|
|
567
|
+
"replacement": "Remove this prop."
|
|
568
|
+
}
|
|
569
|
+
],
|
|
570
|
+
"deprecations": [],
|
|
571
|
+
"defaultValueChanges": [
|
|
572
|
+
{
|
|
573
|
+
"component": "GlobalWrapper",
|
|
574
|
+
"prop": "mobileMaxWidth",
|
|
575
|
+
"v1Default": "640",
|
|
576
|
+
"v2Default": "767",
|
|
577
|
+
"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.",
|
|
578
|
+
"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."
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"component": "Spinner",
|
|
582
|
+
"prop": "size",
|
|
583
|
+
"v1Default": "'m'",
|
|
584
|
+
"v2Default": "'3xl'",
|
|
585
|
+
"reason": "Default size increased to '3xl' to better match design system specifications. The small 'm' spinner was too subtle in most UI contexts.",
|
|
586
|
+
"migration": "If you relied on the default spinner size being small, explicitly pass size='m' to maintain the v1 appearance."
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"component": "MenuButton",
|
|
590
|
+
"prop": "size",
|
|
591
|
+
"v1Default": "'md'",
|
|
592
|
+
"v2Default": "'s'",
|
|
593
|
+
"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).",
|
|
594
|
+
"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."
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
"component": "SplitButton",
|
|
598
|
+
"prop": "size",
|
|
599
|
+
"v1Default": "'md'",
|
|
600
|
+
"v2Default": "'s'",
|
|
601
|
+
"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).",
|
|
602
|
+
"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."
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"component": "IconButton",
|
|
606
|
+
"prop": "size",
|
|
607
|
+
"v1Default": "'md'",
|
|
608
|
+
"v2Default": "'s'",
|
|
609
|
+
"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).",
|
|
610
|
+
"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'."
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
"component": "Tooltip",
|
|
614
|
+
"prop": "triggerIconSize",
|
|
615
|
+
"v1Default": "'sm'",
|
|
616
|
+
"v2Default": "'m'",
|
|
617
|
+
"reason": "Default trigger icon size changed from 'sm' to 'm' to align with new standardized size naming and provide better default visibility.",
|
|
618
|
+
"migration": "If you relied on the default trigger icon size being small, explicitly pass triggerIconSize='s' to maintain the v1 appearance."
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"component": "ComparisonList",
|
|
622
|
+
"prop": "showBorder",
|
|
623
|
+
"v1Default": "true",
|
|
624
|
+
"v2Default": "false",
|
|
625
|
+
"reason": "Borders are now opt-in. The borderless style is the new default as it suits the most common use cases.",
|
|
626
|
+
"migration": "Add showBorder={true} to preserve the bordered appearance from V1."
|
|
627
|
+
}
|
|
628
|
+
],
|
|
629
|
+
"typeChanges": [
|
|
630
|
+
{
|
|
631
|
+
"component": "StepList",
|
|
632
|
+
"prop": "steps",
|
|
633
|
+
"description": "The steps item type has been renamed from FlowStep to StepListItem to match the component rename.",
|
|
634
|
+
"v1Type": "FlowStep[]",
|
|
635
|
+
"v2Type": "StepListItem[]",
|
|
636
|
+
"migration": {
|
|
637
|
+
"note": "Update any FlowStep type imports to StepListItem. The shape of the type is unchanged \u2014 { header: string | ReactNode, content?: string | ReactNode }."
|
|
638
|
+
},
|
|
639
|
+
"reason": "Renamed alongside the FlowSteps \u2192 StepList component rename for naming consistency."
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
"component": "CloseButton",
|
|
643
|
+
"prop": "onClick",
|
|
644
|
+
"description": "onClick callback now receives a MouseEvent parameter",
|
|
645
|
+
"v1Type": "() => void",
|
|
646
|
+
"v2Type": "(e: React.MouseEvent<HTMLButtonElement>) => void",
|
|
647
|
+
"migration": {
|
|
648
|
+
"note": "Backwards compatible \u2014 existing handlers that ignore the event parameter continue to work. Update handlers if you need access to the event."
|
|
649
|
+
},
|
|
650
|
+
"reason": "Updated to allow consumers to call e.stopPropagation() or access other event properties when needed."
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
"component": "Spinner",
|
|
654
|
+
"prop": "size",
|
|
655
|
+
"description": "Size naming convention updated to match Button and Icon components",
|
|
656
|
+
"v1Type": "'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
|
|
657
|
+
"v2Type": "'s' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'",
|
|
658
|
+
"migration": {
|
|
659
|
+
"sm": "s",
|
|
660
|
+
"md": "m",
|
|
661
|
+
"lg": "l"
|
|
662
|
+
},
|
|
663
|
+
"reason": "Standardized size naming across all components. The 'sm', 'md', and 'lg' values have been shortened to 's', 'm', and 'l' for consistency."
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
"component": "MenuButton",
|
|
667
|
+
"prop": "size",
|
|
668
|
+
"description": "Size naming convention updated and reduced to two sizes",
|
|
669
|
+
"v1Type": "Exclude<ButtonSize, 'lg'> (which was 'xs' | 'sm' | 'md')",
|
|
670
|
+
"v2Type": "'s' | 'm'",
|
|
671
|
+
"migration": {
|
|
672
|
+
"xs": "s (removed, use 's' instead)",
|
|
673
|
+
"sm": "s",
|
|
674
|
+
"md": "m"
|
|
675
|
+
},
|
|
676
|
+
"reason": "Standardized size naming to match Button component v2 conventions. MenuButton now only supports 's' and 'm' sizes. The 'xs' size has been removed."
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
"component": "SplitButton",
|
|
680
|
+
"prop": "size",
|
|
681
|
+
"description": "Size naming convention updated and reduced to two sizes",
|
|
682
|
+
"v1Type": "Exclude<ButtonSize, 'lg'> (which was 'xs' | 'sm' | 'md')",
|
|
683
|
+
"v2Type": "'s' | 'm'",
|
|
684
|
+
"migration": {
|
|
685
|
+
"xs": "s (removed, use 's' instead)",
|
|
686
|
+
"sm": "s",
|
|
687
|
+
"md": "m"
|
|
688
|
+
},
|
|
689
|
+
"reason": "Standardized size naming to match Button component v2 conventions. SplitButton now only supports 's' and 'm' sizes. The 'xs' size has been removed."
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
"component": "IconButton",
|
|
693
|
+
"prop": "size",
|
|
694
|
+
"description": "Size naming convention updated and reduced to two sizes",
|
|
695
|
+
"v1Type": "ButtonSize (which was 'xs' | 'sm' | 'md' | 'lg')",
|
|
696
|
+
"v2Type": "'s' | 'm'",
|
|
697
|
+
"migration": {
|
|
698
|
+
"xs": "s (removed, use 's' instead)",
|
|
699
|
+
"sm": "s",
|
|
700
|
+
"md": "m",
|
|
701
|
+
"lg": "m (removed, use 'm' instead)"
|
|
702
|
+
},
|
|
703
|
+
"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."
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
"component": "CloseButton",
|
|
707
|
+
"prop": "size",
|
|
708
|
+
"description": "Prop renamed from iconSize to size, and size naming convention updated to match standardized naming",
|
|
709
|
+
"v1Type": "'md' | 'lg' | 'xl' (on iconSize prop)",
|
|
710
|
+
"v2Type": "'m' | 'l' | 'xl' (on size prop)",
|
|
711
|
+
"migration": {
|
|
712
|
+
"md": "m",
|
|
713
|
+
"lg": "l",
|
|
714
|
+
"xl": "xl (unchanged)"
|
|
715
|
+
},
|
|
716
|
+
"reason": "Prop renamed from iconSize to size for consistency with other button components. Size value naming also standardized - the 'md' and 'lg' values have been shortened to 'm' and 'l' for consistency."
|
|
717
|
+
},
|
|
718
|
+
{
|
|
719
|
+
"component": "Icon",
|
|
720
|
+
"prop": "iconName",
|
|
721
|
+
"description": "Several icon names have been removed. Their outlined variants are now the default style.",
|
|
722
|
+
"migration": {
|
|
723
|
+
"circlePlusOutline": "circlePlus",
|
|
724
|
+
"circleMinusOutline": "circleMinus",
|
|
725
|
+
"globeLine": "globe"
|
|
726
|
+
},
|
|
727
|
+
"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."
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"component": "Tooltip",
|
|
731
|
+
"prop": "triggerIconSize",
|
|
732
|
+
"description": "Size naming convention updated to match standardized naming",
|
|
733
|
+
"v1Type": "'sm' | 'md' | 'lg'",
|
|
734
|
+
"v2Type": "'s' | 'm' | 'l'",
|
|
735
|
+
"migration": {
|
|
736
|
+
"sm": "s",
|
|
737
|
+
"md": "m",
|
|
738
|
+
"lg": "l"
|
|
739
|
+
},
|
|
740
|
+
"reason": "Standardized size naming across all components. The 'sm', 'md', and 'lg' values have been shortened to 's', 'm', and 'l' for consistency."
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
"component": "Badge",
|
|
744
|
+
"prop": "color",
|
|
745
|
+
"description": "IndicatorBadge renamed to Badge with new color system based on design token naming. Colors now use named palettes instead of semantic/tier names.",
|
|
746
|
+
"v1Type": "'ai' | 'critical' | 'info' | 'success' | 'warning' | 'neutral' | 'brand' | 'silver' | 'gold' | 'platinum' | 'diamond' | 'default'",
|
|
747
|
+
"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'",
|
|
748
|
+
"migration": {
|
|
749
|
+
"ai": "discovery-secondary",
|
|
750
|
+
"neutral": "stone",
|
|
751
|
+
"brand": "discovery",
|
|
752
|
+
"silver": "silver",
|
|
753
|
+
"gold": "sand",
|
|
754
|
+
"platinum": "slate",
|
|
755
|
+
"diamond": "sky",
|
|
756
|
+
"default": "gaia",
|
|
757
|
+
"critical": "critical",
|
|
758
|
+
"info": "info",
|
|
759
|
+
"success": "success",
|
|
760
|
+
"warning": "warning"
|
|
761
|
+
},
|
|
762
|
+
"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."
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
"component": "Badge",
|
|
766
|
+
"prop": "size",
|
|
767
|
+
"description": "Size naming convention updated and xs size added",
|
|
768
|
+
"v1Type": "'sm' | 'md'",
|
|
769
|
+
"v2Type": "'xs' | 's' | 'm'",
|
|
770
|
+
"migration": {
|
|
771
|
+
"sm": "s",
|
|
772
|
+
"md": "m"
|
|
773
|
+
},
|
|
774
|
+
"reason": "Standardized size naming to match other v2 components. New 'xs' size added for compact contexts."
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
"component": "StatusIndicator",
|
|
778
|
+
"prop": "size",
|
|
779
|
+
"description": "Size naming convention updated",
|
|
780
|
+
"v1Type": "'sm' | 'md'",
|
|
781
|
+
"v2Type": "'xs' | 's'",
|
|
782
|
+
"migration": {
|
|
783
|
+
"sm": "xs",
|
|
784
|
+
"md": "s"
|
|
785
|
+
},
|
|
786
|
+
"reason": "Standardized size naming to match other v2 components."
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
"component": "StatusIndicator",
|
|
790
|
+
"prop": "type",
|
|
791
|
+
"description": "Type values updated to align with design token naming",
|
|
792
|
+
"v1Type": "'critical' | 'info' | 'neutral' | 'new' | 'success' | 'warning' | 'working'",
|
|
793
|
+
"v2Type": "'critical' | 'disabled' | 'discovery' | 'info' | 'neutral' | 'success' | 'warning' | 'working'",
|
|
794
|
+
"migration": {
|
|
795
|
+
"new": "discovery"
|
|
796
|
+
},
|
|
797
|
+
"reason": "The 'new' type has been renamed to 'discovery' to match design token naming. A 'disabled' type has been added."
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
"component": "Avatar",
|
|
801
|
+
"prop": "size",
|
|
802
|
+
"description": "Size naming convention updated and reduced to four sizes",
|
|
803
|
+
"v1Type": "'xs' | 'sm' | 'md' | 'lg' | 'xl'",
|
|
804
|
+
"v2Type": "'xs' | 's' | 'm' | 'l'",
|
|
805
|
+
"migration": {
|
|
806
|
+
"xs": "xs",
|
|
807
|
+
"sm": "s",
|
|
808
|
+
"md": "s",
|
|
809
|
+
"lg": "m",
|
|
810
|
+
"xl": "l"
|
|
811
|
+
},
|
|
812
|
+
"reason": "Standardized size naming and reduced to four sizes with updated pixel values (16, 24, 32, 40px)."
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
"component": "CTALink",
|
|
816
|
+
"prop": "size",
|
|
817
|
+
"description": "Size naming convention updated and default changed",
|
|
818
|
+
"v1Type": "'sm' | 'md'",
|
|
819
|
+
"v2Type": "'s' | 'm'",
|
|
820
|
+
"migration": {
|
|
821
|
+
"sm": "s",
|
|
822
|
+
"md": "m"
|
|
823
|
+
},
|
|
824
|
+
"reason": "Standardized size naming. Default changed from 'md' to 's'."
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
"component": "LinkNewWindow",
|
|
828
|
+
"prop": "fontSize",
|
|
829
|
+
"description": "Size naming convention updated",
|
|
830
|
+
"v1Type": "'sm' | 'md' | 'lg'",
|
|
831
|
+
"v2Type": "'s' | 'm' | 'l'",
|
|
832
|
+
"migration": {
|
|
833
|
+
"sm": "s",
|
|
834
|
+
"md": "m",
|
|
835
|
+
"lg": "l"
|
|
836
|
+
},
|
|
837
|
+
"reason": "Standardized size naming across all components."
|
|
838
|
+
},
|
|
839
|
+
{
|
|
840
|
+
"component": "PanelList",
|
|
841
|
+
"prop": "paddingSize",
|
|
842
|
+
"description": "Size naming convention updated, two smallest sizes removed, and token mapping corrected",
|
|
843
|
+
"v1Type": "'4xs' | '3xs' | '2xs' | 'xs' | 'sm' | 'md' | 'lg'",
|
|
844
|
+
"v2Type": "'2xs' | 'xs' | 's' | 'm' | 'l'",
|
|
845
|
+
"migration": {
|
|
846
|
+
"4xs": "2xs",
|
|
847
|
+
"3xs": "2xs",
|
|
848
|
+
"2xs": "2xs",
|
|
849
|
+
"xs": "xs",
|
|
850
|
+
"sm": "s",
|
|
851
|
+
"md": "m",
|
|
852
|
+
"lg": "l"
|
|
853
|
+
},
|
|
854
|
+
"reason": "Standardized size naming. The '4xs' and '3xs' sizes have been removed \u2014 use '2xs' instead. Default changed from 'md' to 'm'."
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
"component": "StatusChecker",
|
|
858
|
+
"prop": "state",
|
|
859
|
+
"description": "The RefreshCheckerState enum has been replaced with the StatusCheckerState string union type",
|
|
860
|
+
"v1Type": "`${RefreshCheckerState}` (enum: RefreshCheckerState.DEFAULT | RefreshCheckerState.WORKING | RefreshCheckerState.CHECKED)",
|
|
861
|
+
"v2Type": "StatusCheckerState ('default' | 'working' | 'checked')",
|
|
862
|
+
"migration": {
|
|
863
|
+
"RefreshCheckerState.DEFAULT": "'default'",
|
|
864
|
+
"RefreshCheckerState.WORKING": "'working'",
|
|
865
|
+
"RefreshCheckerState.CHECKED": "'checked'"
|
|
866
|
+
},
|
|
867
|
+
"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."
|
|
868
|
+
},
|
|
869
|
+
{
|
|
870
|
+
"component": "Tag",
|
|
871
|
+
"prop": "tagColor",
|
|
872
|
+
"oldType": "'color-1' | 'color-2' | ... | 'color-20'",
|
|
873
|
+
"newType": "'apollo' | 'iris' | 'hypnos' | 'gaia' | 'aether' | 'success' | 'warning' | 'critical' | 'info' | 'discovery' | 'amber' | 'orange' | 'lime' | 'teal' | 'sky' | 'indigo' | 'rose' | 'slate' | 'sand' | 'mint' | 'silver' | 'stone'",
|
|
874
|
+
"description": "Tag color values are now named instead of numbered. Two new colors added: silver and stone.",
|
|
875
|
+
"migration": "Replace numbered color values with their named equivalents: color-1\u2192apollo, color-2\u2192iris, color-3\u2192hypnos, color-4\u2192gaia, color-5\u2192aether, color-6\u2192success, color-7\u2192warning, color-8\u2192critical, color-9\u2192info, color-10\u2192discovery, color-11\u2192amber, color-12\u2192orange, color-13\u2192lime, color-14\u2192teal, color-15\u2192sky, color-16\u2192indigo, color-17\u2192rose, color-18\u2192slate, color-19\u2192sand, color-20\u2192mint. Two new values (silver, stone) have no v1 equivalent."
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
"component": "SidebarLayout",
|
|
879
|
+
"prop": "sidebarWidth",
|
|
880
|
+
"v1Type": "'narrow' | 'standard' | 'wide'",
|
|
881
|
+
"v2Type": "string",
|
|
882
|
+
"description": "sidebarWidth is now a percentage string instead of a preset option.",
|
|
883
|
+
"migration": "Replace preset values with percentage equivalents: 'narrow' \u2192 '25%', 'standard' \u2192 '33%', 'wide' \u2192 '42%'. Adjust as needed for your layout."
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
"component": "Table",
|
|
887
|
+
"prop": "rowData",
|
|
888
|
+
"oldType": "Array<Array<string | ReactNode>>",
|
|
889
|
+
"newType": "Array<Record<string, ReactNode>>",
|
|
890
|
+
"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."
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
"component": "Table",
|
|
894
|
+
"prop": "sortKey",
|
|
895
|
+
"oldType": "number",
|
|
896
|
+
"newType": "string",
|
|
897
|
+
"reason": "Sort key is now a column id string instead of a positional index. Update to pass the column's `id` value."
|
|
898
|
+
},
|
|
899
|
+
{
|
|
900
|
+
"component": "Table",
|
|
901
|
+
"prop": "defaultSortKey",
|
|
902
|
+
"oldType": "number",
|
|
903
|
+
"newType": "string",
|
|
904
|
+
"reason": "Default sort key is now a column id string instead of a positional index."
|
|
905
|
+
},
|
|
906
|
+
{
|
|
907
|
+
"component": "Table",
|
|
908
|
+
"prop": "onSort",
|
|
909
|
+
"oldType": "(key: number, order: SortOrder) => void",
|
|
910
|
+
"newType": "(key: string, order: SortOrder) => void",
|
|
911
|
+
"reason": "The sort callback now receives a column id string instead of a positional index."
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
"component": "CTALink",
|
|
915
|
+
"prop": "size",
|
|
916
|
+
"description": "Added xs size variant. The size prop now accepts xs | s | m (previously s | m).",
|
|
917
|
+
"v1Type": "'s' | 'm'",
|
|
918
|
+
"v2Type": "'xs' | 's' | 'm'",
|
|
919
|
+
"migration": {
|
|
920
|
+
"note": "Backwards compatible \u2014 existing size values are unchanged. Use size=\"xs\" when a smaller CTA link is needed."
|
|
921
|
+
},
|
|
922
|
+
"reason": "Added to support compact contexts such as the Payment Card pattern footer."
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
"component": "MenuButton",
|
|
926
|
+
"prop": "displayType",
|
|
927
|
+
"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}`.",
|
|
928
|
+
"v1Type": "'icon-end' | 'icon-only'",
|
|
929
|
+
"v2Type": "boolean",
|
|
930
|
+
"migration": {
|
|
931
|
+
"note": "Remove `displayType='icon-end'` (no-op, it was the default). Replace `displayType='icon-only'` with `iconOnly`."
|
|
932
|
+
},
|
|
933
|
+
"reason": "The displayType prop offered only two modes and the name implied richer configurability than existed. A boolean is clearer."
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
"component": "Datepicker",
|
|
937
|
+
"prop": "presets",
|
|
938
|
+
"replacement": "Use the exported getPresetDateRange utility alongside an external SegmentedButton, Select, or other control. See the Datepicker With Presets pattern for composition examples.",
|
|
939
|
+
"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."
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
"component": "Datepicker",
|
|
943
|
+
"prop": "onInitialize",
|
|
944
|
+
"replacement": "Initialize date range state directly using getPresetDateRange in your component's useState initializer.",
|
|
945
|
+
"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."
|
|
946
|
+
}
|
|
947
|
+
]
|
|
948
|
+
},
|
|
949
|
+
"imports": {
|
|
950
|
+
"pathChanges": [
|
|
951
|
+
{
|
|
952
|
+
"component": "Badge",
|
|
953
|
+
"from": "components/badges/IndicatorBadge/IndicatorBadge",
|
|
954
|
+
"to": "components/badges/Badge/Badge",
|
|
955
|
+
"reason": "IndicatorBadge renamed to Badge with new directory structure."
|
|
956
|
+
}
|
|
957
|
+
]
|
|
958
|
+
},
|
|
959
|
+
"cssClasses": {
|
|
960
|
+
"renames": [
|
|
961
|
+
{
|
|
962
|
+
"old": "pds-overline-text",
|
|
963
|
+
"new": "pds-overline-m",
|
|
964
|
+
"reason": "Overline text moved from foundations to typography style utilities with size-based naming. The default overline-text maps to overline-m."
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
"old": "pds-overline-text--sm",
|
|
968
|
+
"new": "pds-overline-s",
|
|
969
|
+
"reason": "Overline text size variants replaced with standalone size-based classes."
|
|
970
|
+
},
|
|
971
|
+
{
|
|
972
|
+
"old": "pds-overline-text--lg",
|
|
973
|
+
"new": "pds-overline-l",
|
|
974
|
+
"reason": "Overline text size variants replaced with standalone size-based classes."
|
|
975
|
+
}
|
|
976
|
+
],
|
|
977
|
+
"removals": [
|
|
978
|
+
{
|
|
979
|
+
"old": "pds-button--navbar",
|
|
980
|
+
"replacement": "pds-button--subtle",
|
|
981
|
+
"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."
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
"old": "pds-color-bg-brand",
|
|
985
|
+
"replacement": "Use component-specific brand colors or custom styling",
|
|
986
|
+
"reason": "Generic brand color utilities removed in v2. The underlying token --pds-color-brand-primary-default no longer exists."
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
"old": "pds-color-fg-brand",
|
|
990
|
+
"replacement": "Use component-specific brand colors or custom styling",
|
|
991
|
+
"reason": "Generic brand color utilities removed in v2. The underlying token --pds-color-brand-primary-default no longer exists."
|
|
992
|
+
},
|
|
993
|
+
{
|
|
994
|
+
"old": "pds-ts-9xl",
|
|
995
|
+
"replacement": "Use pds-ts-8xl (new maximum size is 72px)",
|
|
996
|
+
"reason": "Typography scale updated to pragmatic hand-picked sizes. New scale includes 2XS through 8XL (10px-72px)."
|
|
997
|
+
},
|
|
998
|
+
{
|
|
999
|
+
"old": "pds-typography--product",
|
|
1000
|
+
"replacement": "No class needed (product is now the default context). Use data-context=\"product\" attribute only when explicitly mixing product and marketing contexts.",
|
|
1001
|
+
"reason": "Typography context system changed from CSS classes to data-context attribute. Product context is the default, so the class is no longer needed."
|
|
1002
|
+
},
|
|
1003
|
+
{
|
|
1004
|
+
"old": "pds-lead-text",
|
|
1005
|
+
"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))",
|
|
1006
|
+
"reason": "Lead text foundation removed in v2. Use component-specific styling with design tokens instead of a global utility class."
|
|
1007
|
+
},
|
|
1008
|
+
{
|
|
1009
|
+
"old": "pds-lead-text--sm",
|
|
1010
|
+
"replacement": "Apply custom typography styles using design tokens with font-size: var(--pds-typography-size-xl)",
|
|
1011
|
+
"reason": "Lead text foundation and all size variants removed in v2. Use component-specific styling with design tokens."
|
|
1012
|
+
},
|
|
1013
|
+
{
|
|
1014
|
+
"old": "pds-quote-text",
|
|
1015
|
+
"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))",
|
|
1016
|
+
"reason": "Quote text foundation removed in v2. Use component-specific styling with design tokens instead of a global utility class."
|
|
1017
|
+
},
|
|
1018
|
+
{
|
|
1019
|
+
"old": "pds-quote-text--sm",
|
|
1020
|
+
"replacement": "Apply custom typography styles using design tokens with font-size: var(--pds-typography-size-xl)",
|
|
1021
|
+
"reason": "Quote text foundation and all size variants removed in v2. Use component-specific styling with design tokens."
|
|
1022
|
+
},
|
|
1023
|
+
{
|
|
1024
|
+
"old": "pds-quote-text--lg",
|
|
1025
|
+
"replacement": "Apply custom typography styles using design tokens with font-size: var(--pds-typography-size-3xl)",
|
|
1026
|
+
"reason": "Quote text foundation and all size variants removed in v2. Use component-specific styling with design tokens."
|
|
1027
|
+
}
|
|
1028
|
+
],
|
|
1029
|
+
"additions": [
|
|
1030
|
+
{
|
|
1031
|
+
"new": "pds-ts-2xs",
|
|
1032
|
+
"description": "New typography size utility for 10px text (smallest size in new scale)",
|
|
1033
|
+
"usage": "Apply to elements needing metadata or tiny label text"
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
"new": "pds-color-border-info",
|
|
1037
|
+
"description": "Border color utility for info status",
|
|
1038
|
+
"usage": "Apply info status border color to elements"
|
|
1039
|
+
},
|
|
1040
|
+
{
|
|
1041
|
+
"new": "pds-color-border-warning",
|
|
1042
|
+
"description": "Border color utility for warning status",
|
|
1043
|
+
"usage": "Apply warning status border color to elements"
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"new": "pds-color-border-discovery",
|
|
1047
|
+
"description": "Border color utility for discovery status",
|
|
1048
|
+
"usage": "Apply discovery status border color to elements"
|
|
1049
|
+
}
|
|
1050
|
+
]
|
|
1051
|
+
},
|
|
1052
|
+
"utilities": {
|
|
1053
|
+
"renames": [],
|
|
1054
|
+
"removals": []
|
|
1055
|
+
},
|
|
1056
|
+
"behaviorChanges": [
|
|
1057
|
+
{
|
|
1058
|
+
"component": "TextInput, RadioGroup, FileUpload, Combobox, ComboboxMultiselect, Select, Textarea, Checkbox, Switch, TagsInput, Datepicker",
|
|
1059
|
+
"prop": "inputWidth",
|
|
1060
|
+
"description": "inputWidth now sets element width instead of max-width",
|
|
1061
|
+
"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.",
|
|
1062
|
+
"v2Behavior": "inputWidth sets width on the input wrapper, so the input is always exactly the specified size.",
|
|
1063
|
+
"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.",
|
|
1064
|
+
"affectedAreas": ["All text-based input components", "Form layouts"]
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
"component": "Button",
|
|
1068
|
+
"description": "Button loading states split into two distinct props with different behaviors",
|
|
1069
|
+
"v1Behavior": "Single isLoading prop showed a spinner and disabled the button, used for all async operations.",
|
|
1070
|
+
"v2Behavior": "Two separate props: isLoading (pulsing skeleton for initial loads) and isWorking (spinner for actions). Both disable the button but have different visual treatments.",
|
|
1071
|
+
"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.",
|
|
1072
|
+
"affectedAreas": ["Button component", "Loading states", "User experience"]
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
"component": "Build Configuration",
|
|
1076
|
+
"description": "Build output directory renamed from `_dist` to `dist`",
|
|
1077
|
+
"v1Behavior": "Package contents were output to `_dist/` directory",
|
|
1078
|
+
"v2Behavior": "Package contents are now output to `dist/` directory",
|
|
1079
|
+
"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.",
|
|
1080
|
+
"affectedAreas": ["Build configuration", "CI/CD scripts", "Documentation"]
|
|
1081
|
+
},
|
|
1082
|
+
{
|
|
1083
|
+
"component": "Headings (h1-h6)",
|
|
1084
|
+
"description": "Typography scale system replaced with pragmatic sizing and contextual styling",
|
|
1085
|
+
"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.",
|
|
1086
|
+
"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).",
|
|
1087
|
+
"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.",
|
|
1088
|
+
"affectedAreas": [
|
|
1089
|
+
"Headings",
|
|
1090
|
+
"Typography",
|
|
1091
|
+
"Marketing pages",
|
|
1092
|
+
"Product UIs"
|
|
1093
|
+
]
|
|
1094
|
+
},
|
|
1095
|
+
{
|
|
1096
|
+
"component": "Typography Line Heights",
|
|
1097
|
+
"description": "Line height token values updated for better readability",
|
|
1098
|
+
"v1Behavior": "Line heights: S=120%, M=140%",
|
|
1099
|
+
"v2Behavior": "Line heights: XS=120% (new, for tight headings), S=130% (updated, for medium headings), M=150% (updated, meets WCAG AA for body text)",
|
|
1100
|
+
"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.",
|
|
1101
|
+
"affectedAreas": ["Typography", "Headings", "Body text", "Readability"]
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
"component": "Panel",
|
|
1105
|
+
"description": "Panel simplified \u2014 status indicators removed",
|
|
1106
|
+
"v1Behavior": "Panel supported hasStatusIndicator, statusType, and typeLabels props which rendered a colored bar on the left side of the panel.",
|
|
1107
|
+
"v2Behavior": "Panel is now a general-purpose container with five variants: default, sunken, raised, overlay, and critical. Status indicators have been removed.",
|
|
1108
|
+
"migration": "Remove hasStatusIndicator, statusType, and typeLabels props. Remove any custom CSS targeting .pds-panel__status elements.",
|
|
1109
|
+
"affectedAreas": ["Panel component", "Visual design", "Status indicators"]
|
|
1110
|
+
},
|
|
1111
|
+
{
|
|
1112
|
+
"component": "IconButton",
|
|
1113
|
+
"description": "IconButton now supports an optional visible border via the hasBorder prop. In V1 the button was always borderless.",
|
|
1114
|
+
"v1Behavior": "IconButton always had a 1px border and used --pds-border-radius-button (fully rounded/pill shape).",
|
|
1115
|
+
"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.",
|
|
1116
|
+
"migration": "No code changes required. Add hasBorder={true} if you want a visible border on the button.",
|
|
1117
|
+
"affectedAreas": [
|
|
1118
|
+
"IconButton component",
|
|
1119
|
+
"Visual design",
|
|
1120
|
+
"Border radius"
|
|
1121
|
+
]
|
|
1122
|
+
},
|
|
1123
|
+
{
|
|
1124
|
+
"component": "Pagination",
|
|
1125
|
+
"description": "Previous and next arrow buttons now hidden when at boundaries instead of disabled",
|
|
1126
|
+
"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.",
|
|
1127
|
+
"v2Behavior": "Previous button is not rendered when on the first page. Next button is not rendered when on the last page.",
|
|
1128
|
+
"migration": "No prop changes required. Remove any custom CSS targeting .pds-pagination__item--disabled \u2014 that class no longer exists.",
|
|
1129
|
+
"affectedAreas": [
|
|
1130
|
+
"Pagination component",
|
|
1131
|
+
"Visual design",
|
|
1132
|
+
"Accessibility"
|
|
1133
|
+
]
|
|
1134
|
+
},
|
|
1135
|
+
{
|
|
1136
|
+
"component": "TabMenu",
|
|
1137
|
+
"description": "Dropdown positioning may shift slightly from V1. Custom CSS targeting fixed position values or the closed menu element should be reviewed.",
|
|
1138
|
+
"v1Behavior": "TabMenuDropdown used a bespoke Floating UI implementation with hardcoded CSS positioning (position: absolute, fixed top/left values).",
|
|
1139
|
+
"v2Behavior": "TabMenuDropdown now uses the shared useDropdown hook (same as Select, Combobox, etc.) with Floating UI floatingStyles for positioning.",
|
|
1140
|
+
"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.",
|
|
1141
|
+
"affectedAreas": [
|
|
1142
|
+
"TabMenu component",
|
|
1143
|
+
"Dropdown positioning",
|
|
1144
|
+
"Consistency"
|
|
1145
|
+
]
|
|
1146
|
+
},
|
|
1147
|
+
{
|
|
1148
|
+
"component": "MenuButton",
|
|
1149
|
+
"description": "Dropdown positioning may shift slightly from V1. The menu is no longer in the DOM when closed.",
|
|
1150
|
+
"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.",
|
|
1151
|
+
"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.",
|
|
1152
|
+
"migration": "No prop changes required. If you relied on aria-activedescendant for screen readers, test with the updated component \u2014 it now uses a roving tabIndex pattern.",
|
|
1153
|
+
"affectedAreas": [
|
|
1154
|
+
"MenuButton component",
|
|
1155
|
+
"Keyboard navigation",
|
|
1156
|
+
"Accessibility",
|
|
1157
|
+
"Focus management"
|
|
1158
|
+
]
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
"component": "Tag",
|
|
1162
|
+
"description": "Auto-assigned tag colors will change for all tags not using an explicit tagColor prop",
|
|
1163
|
+
"v1Behavior": "When tagColor is omitted, a color is chosen by hashing the label text modulo 20 (the number of available colors).",
|
|
1164
|
+
"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.",
|
|
1165
|
+
"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.",
|
|
1166
|
+
"affectedAreas": [
|
|
1167
|
+
"Tag component",
|
|
1168
|
+
"Auto-color assignment",
|
|
1169
|
+
"Visual consistency"
|
|
1170
|
+
]
|
|
1171
|
+
},
|
|
1172
|
+
{
|
|
1173
|
+
"component": "InputGroup",
|
|
1174
|
+
"description": "Buttons inside InputGroup now have consistent rounded corners on the right side, matching the input border radius regardless of button variant.",
|
|
1175
|
+
"migration": "No code changes needed."
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
"component": "Skeleton",
|
|
1179
|
+
"description": "Skeleton now fully supports dark mode. Colors switch automatically based on the active theme.",
|
|
1180
|
+
"migration": "No code changes needed."
|
|
1181
|
+
},
|
|
1182
|
+
{
|
|
1183
|
+
"component": "Popover",
|
|
1184
|
+
"description": "Popover container now has a more defined border in both light and dark mode.",
|
|
1185
|
+
"migration": "No code changes needed."
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
"component": "BranchDiff",
|
|
1189
|
+
"description": "Minor visual refinements: small gap added between commit numbers and bars, and corrected bar colors in both light and dark mode.",
|
|
1190
|
+
"migration": "No code changes needed."
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
"component": "FileDiff",
|
|
1194
|
+
"description": "Bar colors corrected in both light and dark mode. Minor visual refinements to spacing and border radius.",
|
|
1195
|
+
"migration": "BREAKING: Rename labelStrings prop to translationStrings."
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
"component": "Foundational Table Styles",
|
|
1199
|
+
"description": "Bare table elements no longer receive foundational styles automatically",
|
|
1200
|
+
"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.",
|
|
1201
|
+
"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.",
|
|
1202
|
+
"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.",
|
|
1203
|
+
"affectedAreas": [
|
|
1204
|
+
"Foundational table styles",
|
|
1205
|
+
"Prose content",
|
|
1206
|
+
"Markdown rendering"
|
|
1207
|
+
]
|
|
1208
|
+
},
|
|
1209
|
+
{
|
|
1210
|
+
"component": "CompactEmptyState",
|
|
1211
|
+
"description": "V2 style update \u2014 typography tokens and color token correction",
|
|
1212
|
+
"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.",
|
|
1213
|
+
"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.",
|
|
1214
|
+
"migration": "No prop changes. Visual appearance is the same. Remove any overrides targeting pds-color-text-default-secondary on this component.",
|
|
1215
|
+
"affectedAreas": [
|
|
1216
|
+
"CompactEmptyState component",
|
|
1217
|
+
"Typography",
|
|
1218
|
+
"Color tokens"
|
|
1219
|
+
]
|
|
1220
|
+
},
|
|
1221
|
+
{
|
|
1222
|
+
"component": "VerticalEmptyState",
|
|
1223
|
+
"description": "V2 style update \u2014 typography tokens and color token correction",
|
|
1224
|
+
"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.",
|
|
1225
|
+
"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.",
|
|
1226
|
+
"migration": "No prop changes. Visual appearance is the same. Remove any overrides targeting pds-color-text-default on this component.",
|
|
1227
|
+
"affectedAreas": [
|
|
1228
|
+
"VerticalEmptyState component",
|
|
1229
|
+
"Typography",
|
|
1230
|
+
"Color tokens"
|
|
1231
|
+
]
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
"component": "TreeNav",
|
|
1235
|
+
"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.",
|
|
1236
|
+
"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)."
|
|
1237
|
+
}
|
|
1238
|
+
],
|
|
1239
|
+
"categories": [
|
|
1240
|
+
{
|
|
1241
|
+
"id": "components",
|
|
1242
|
+
"name": "Components",
|
|
1243
|
+
"description": "Component renames, removals, and deprecations"
|
|
1244
|
+
},
|
|
1245
|
+
{
|
|
1246
|
+
"id": "props",
|
|
1247
|
+
"name": "Props",
|
|
1248
|
+
"description": "Component prop changes"
|
|
1249
|
+
},
|
|
1250
|
+
{
|
|
1251
|
+
"id": "imports",
|
|
1252
|
+
"name": "Import Paths",
|
|
1253
|
+
"description": "Import path changes"
|
|
1254
|
+
},
|
|
1255
|
+
{
|
|
1256
|
+
"id": "css-classes",
|
|
1257
|
+
"name": "CSS Classes",
|
|
1258
|
+
"description": "CSS class name changes"
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
"id": "utilities",
|
|
1262
|
+
"name": "Utilities",
|
|
1263
|
+
"description": "Utility function changes"
|
|
1264
|
+
},
|
|
1265
|
+
{
|
|
1266
|
+
"id": "design-tokens",
|
|
1267
|
+
"name": "Design Tokens",
|
|
1268
|
+
"description": "Design token usage changes"
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
"id": "behavior",
|
|
1272
|
+
"name": "Behavior Changes",
|
|
1273
|
+
"description": "Breaking changes in component behavior"
|
|
1274
|
+
}
|
|
1275
|
+
],
|
|
1276
|
+
"notes": {
|
|
1277
|
+
"testing": "All components should be tested after migration to ensure expected behavior.",
|
|
1278
|
+
"peerDependencies": "Ensure React version is compatible (16-19 supported).",
|
|
1279
|
+
"designTokens": "This toolkit's major version must match @pantheon-systems/pds-design-tokens major version."
|
|
1280
|
+
}
|
|
1281
|
+
}
|