@pantheon-systems/pds-toolkit-react 2.0.0-alpha.40 → 2.0.0-alpha.42
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/codemods/v1-to-v2/mappings.json +50 -20
- package/dist/components/StatusIndicator/StatusIndicator.d.ts +7 -4
- package/dist/components/ThemeSwitcher/ThemeSwitcher.d.ts +16 -1
- package/dist/components/buttons/SegmentedButton/SegmentedButton.d.ts +15 -4
- package/dist/components/icons/Icon/generated-icon-data.d.ts +1 -1
- package/dist/components/navigation/ButtonNav/ButtonNav.d.ts +5 -1
- package/dist/components/navigation/SiteMenu/SiteMenu.d.ts +1 -5
- package/dist/components/navigation/UserMenu/UserMenu.d.ts +20 -1
- package/dist/css/component-css/pds-button-nav.css +1 -1
- package/dist/css/component-css/pds-compact-empty-state.css +1 -1
- package/dist/css/component-css/pds-index.css +7 -7
- package/dist/css/component-css/pds-nav-menu.css +1 -1
- package/dist/css/component-css/pds-segmented-button.css +2 -2
- package/dist/css/component-css/pds-status-indicator.css +1 -1
- package/dist/css/component-css/pds-user-menu.css +1 -1
- package/dist/css/pds-components.css +7 -7
- package/dist/index.css +1 -1
- package/dist/index.js +826 -789
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -352,8 +352,44 @@
|
|
|
352
352
|
{
|
|
353
353
|
"component": "SegmentedButton",
|
|
354
354
|
"prop": "size",
|
|
355
|
-
"description": "New size prop adds
|
|
356
|
-
"usage": "Use size='
|
|
355
|
+
"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).",
|
|
356
|
+
"usage": "Use size='m' (default) for standard usage, size='s' for dense or space-constrained layouts, size='l' for a more prominent control."
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"component": "SegmentedButton",
|
|
360
|
+
"prop": "border",
|
|
361
|
+
"description": "New boolean prop that draws a border around the track. Defaults to false — the track has no border.",
|
|
362
|
+
"usage": "Set border to add a visible border around the control."
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"component": "SegmentedButton",
|
|
366
|
+
"prop": "iconOnly",
|
|
367
|
+
"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.",
|
|
368
|
+
"usage": "Set iconOnly for compact, icon-only controls (for example, a theme toggle)."
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
"component": "ButtonNav",
|
|
372
|
+
"prop": "border",
|
|
373
|
+
"description": "New boolean prop that draws a border around the track, matching the SegmentedButton component. Defaults to false — the track has no border.",
|
|
374
|
+
"usage": "Set border to add a visible border around the navigation track."
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"component": "UserMenu",
|
|
378
|
+
"prop": "theme",
|
|
379
|
+
"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.",
|
|
380
|
+
"usage": "Provide theme and onThemeChange to surface theme switching directly in the user menu."
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"component": "UserMenu",
|
|
384
|
+
"prop": "onThemeChange",
|
|
385
|
+
"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.",
|
|
386
|
+
"usage": "Use to update and persist your application's theme state when the user changes it from the menu."
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"component": "StatusIndicator",
|
|
390
|
+
"prop": "linkContent",
|
|
391
|
+
"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.",
|
|
392
|
+
"usage": "Provide linkContent to link the status indicator, following the same router-agnostic link pattern used across the toolkit."
|
|
357
393
|
},
|
|
358
394
|
{
|
|
359
395
|
"component": "ComboboxMultiselect",
|
|
@@ -509,6 +545,12 @@
|
|
|
509
545
|
"replacement": "Remove the prop. CodeBlock now renders in a single unified style.",
|
|
510
546
|
"reason": "The colorType prop ('dark' | 'light') has been removed in v2. CodeBlock now renders in one consistent style that works across both page themes."
|
|
511
547
|
},
|
|
548
|
+
{
|
|
549
|
+
"component": "SiteMenu",
|
|
550
|
+
"prop": "colorType",
|
|
551
|
+
"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).",
|
|
552
|
+
"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."
|
|
553
|
+
},
|
|
512
554
|
{
|
|
513
555
|
"component": "Tabs",
|
|
514
556
|
"prop": "size",
|
|
@@ -527,6 +569,12 @@
|
|
|
527
569
|
"replacement": "Remove the prop. ButtonNav now renders at a single size equivalent to the former size='s'.",
|
|
528
570
|
"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."
|
|
529
571
|
},
|
|
572
|
+
{
|
|
573
|
+
"component": "StatusIndicator",
|
|
574
|
+
"prop": "size",
|
|
575
|
+
"replacement": "Remove the prop. StatusIndicator now renders at a single size (equivalent to the former size='s' / v1 'md').",
|
|
576
|
+
"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."
|
|
577
|
+
},
|
|
530
578
|
{
|
|
531
579
|
"component": "SiteSearch",
|
|
532
580
|
"prop": "horizontalOffset",
|
|
@@ -664,12 +712,6 @@
|
|
|
664
712
|
"reason": "Removed in V2. Mobile accordion behavior is now driven by DOM context ([data-pds-mobile] .pds-navbar__mobile) rather than this prop.",
|
|
665
713
|
"migration": "Remove the withinNavbar prop. No replacement needed."
|
|
666
714
|
},
|
|
667
|
-
{
|
|
668
|
-
"component": "NotificationsPopover",
|
|
669
|
-
"prop": "withinNavbar",
|
|
670
|
-
"reason": "Removed in V2. Mobile accordion behavior is now driven by DOM context ([data-pds-mobile] .pds-navbar__mobile) rather than this prop.",
|
|
671
|
-
"migration": "Remove the withinNavbar prop. No replacement needed."
|
|
672
|
-
},
|
|
673
715
|
{
|
|
674
716
|
"component": "SiteMenu",
|
|
675
717
|
"prop": "mobileMenuMaxWidth",
|
|
@@ -1044,18 +1086,6 @@
|
|
|
1044
1086
|
},
|
|
1045
1087
|
"reason": "Standardized size naming to match other v2 components. New 'xs' size added for compact contexts."
|
|
1046
1088
|
},
|
|
1047
|
-
{
|
|
1048
|
-
"component": "StatusIndicator",
|
|
1049
|
-
"prop": "size",
|
|
1050
|
-
"description": "Size naming convention updated",
|
|
1051
|
-
"v1Type": "'sm' | 'md'",
|
|
1052
|
-
"v2Type": "'xs' | 's'",
|
|
1053
|
-
"migration": {
|
|
1054
|
-
"sm": "xs",
|
|
1055
|
-
"md": "s"
|
|
1056
|
-
},
|
|
1057
|
-
"reason": "Standardized size naming to match other v2 components."
|
|
1058
|
-
},
|
|
1059
1089
|
{
|
|
1060
1090
|
"component": "StatusIndicator",
|
|
1061
1091
|
"prop": "type",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComponentPropsWithoutRef } from 'react';
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
2
|
import { StatusType } from '../../libs/types/custom-types';
|
|
3
3
|
import './status-indicator.css';
|
|
4
4
|
export interface StatusIndicatorProps extends ComponentPropsWithoutRef<'div'> {
|
|
@@ -11,9 +11,12 @@ export interface StatusIndicatorProps extends ComponentPropsWithoutRef<'div'> {
|
|
|
11
11
|
*/
|
|
12
12
|
label: string;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Optionally makes the status indicator a link. Pass a fully-formed,
|
|
15
|
+
* router-agnostic link element (e.g. an anchor or your router's link
|
|
16
|
+
* component); the indicator's dot and label render as its children, so the
|
|
17
|
+
* whole indicator becomes clickable.
|
|
15
18
|
*/
|
|
16
|
-
|
|
19
|
+
linkContent?: ReactNode;
|
|
17
20
|
/**
|
|
18
21
|
* Sets status type
|
|
19
22
|
*/
|
|
@@ -22,4 +25,4 @@ export interface StatusIndicatorProps extends ComponentPropsWithoutRef<'div'> {
|
|
|
22
25
|
/**
|
|
23
26
|
* StatusIndicator UI component
|
|
24
27
|
*/
|
|
25
|
-
export declare const StatusIndicator: ({ className, label,
|
|
28
|
+
export declare const StatusIndicator: ({ className, label, linkContent, type, ...props }: StatusIndicatorProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import { SegmentedButtonSize } from '../buttons/SegmentedButton/SegmentedButton';
|
|
2
3
|
import './theme-switcher.css';
|
|
3
4
|
type Theme = 'light' | 'dark' | 'system';
|
|
5
|
+
type ThemeSwitcherVariant = 'dropdown' | 'toggle';
|
|
4
6
|
/**
|
|
5
7
|
* Prop types for ThemeSwitcher
|
|
6
8
|
*/
|
|
@@ -26,13 +28,26 @@ export interface ThemeSwitcherProps extends Omit<ComponentPropsWithoutRef<'div'>
|
|
|
26
28
|
* Callback triggered when the theme changes
|
|
27
29
|
*/
|
|
28
30
|
onChange?: (theme: Theme) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Size of the control. Only applies to the `'toggle'` variant, where it is
|
|
33
|
+
* passed through to the underlying SegmentedButton. Defaults to `'m'`.
|
|
34
|
+
*/
|
|
35
|
+
size?: SegmentedButtonSize;
|
|
29
36
|
/**
|
|
30
37
|
* The current theme
|
|
31
38
|
*/
|
|
32
39
|
theme?: Theme;
|
|
40
|
+
/**
|
|
41
|
+
* Presentation of the switcher. `'toggle'` (default) renders an icon-only
|
|
42
|
+
* segmented control — best for authenticated apps where the choice persists
|
|
43
|
+
* (for example, nested in the user menu). `'dropdown'` renders an icon-only
|
|
44
|
+
* menu button with a tooltip — best for global navigation and anonymous
|
|
45
|
+
* users who can't persist a preference.
|
|
46
|
+
*/
|
|
47
|
+
variant?: ThemeSwitcherVariant;
|
|
33
48
|
}
|
|
34
49
|
/**
|
|
35
50
|
* ThemeSwitcher UI component
|
|
36
51
|
*/
|
|
37
|
-
export declare const ThemeSwitcher: ({ className, id, labelStrings, onChange, theme, ...props }: ThemeSwitcherProps) => import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
export declare const ThemeSwitcher: ({ className, id, labelStrings, onChange, size, theme, variant, ...props }: ThemeSwitcherProps) => import("react/jsx-runtime").JSX.Element;
|
|
38
53
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PDSIcon } from '../../icons/Icon/Icon';
|
|
2
2
|
import './segmented-button.css';
|
|
3
|
-
export type SegmentedButtonSize = 's' | '
|
|
3
|
+
export type SegmentedButtonSize = 's' | 'm' | 'l';
|
|
4
4
|
/**
|
|
5
5
|
* Structure for each option in the SegmentedButton component.
|
|
6
6
|
*/
|
|
@@ -41,6 +41,10 @@ interface OptionType {
|
|
|
41
41
|
* Prop types for SegmentedButton
|
|
42
42
|
*/
|
|
43
43
|
export interface SegmentedButtonProps {
|
|
44
|
+
/**
|
|
45
|
+
* Renders a border around the track. Off by default.
|
|
46
|
+
*/
|
|
47
|
+
border?: boolean;
|
|
44
48
|
/**
|
|
45
49
|
* Additional class names.
|
|
46
50
|
*/
|
|
@@ -53,6 +57,13 @@ export interface SegmentedButtonProps {
|
|
|
53
57
|
* Disables all options in the SegmentedButton.
|
|
54
58
|
*/
|
|
55
59
|
disabled?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Renders each option as an icon-only, square segment with a circular
|
|
62
|
+
* selected pill. Each option's `iconName` is required and its `label` is
|
|
63
|
+
* used as the accessible name (visually hidden) and shown in a tooltip on
|
|
64
|
+
* hover. Works at any size; the icon and pill scale with the size.
|
|
65
|
+
*/
|
|
66
|
+
iconOnly?: boolean;
|
|
56
67
|
/**
|
|
57
68
|
* Unique ID for the SegmentedButton.
|
|
58
69
|
*/
|
|
@@ -71,8 +82,8 @@ export interface SegmentedButtonProps {
|
|
|
71
82
|
*/
|
|
72
83
|
options: OptionType[];
|
|
73
84
|
/**
|
|
74
|
-
* Size of the segmented button
|
|
75
|
-
* `'
|
|
85
|
+
* Size of the segmented button: `'s'` (20px), `'m'` (24px, default), or
|
|
86
|
+
* `'l'` (32px). The icon scales with the size.
|
|
76
87
|
*/
|
|
77
88
|
size?: SegmentedButtonSize;
|
|
78
89
|
/**
|
|
@@ -83,5 +94,5 @@ export interface SegmentedButtonProps {
|
|
|
83
94
|
/**
|
|
84
95
|
* SegmentedButton UI component
|
|
85
96
|
*/
|
|
86
|
-
export declare const SegmentedButton: ({ className, defaultValue, disabled, id, label, onChange, options, size, value, ...props }: SegmentedButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
97
|
+
export declare const SegmentedButton: ({ border, className, defaultValue, disabled, iconOnly, id, label, onChange, options, size, value, ...props }: SegmentedButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
87
98
|
export {};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generated by: npm run generate:icon-data
|
|
5
5
|
* Source: icon-registry.ts + Font Awesome packages + custom-icons.tsx
|
|
6
|
-
* Generated: 2026-07-
|
|
6
|
+
* Generated: 2026-07-16T17:05:24.429Z
|
|
7
7
|
*/
|
|
8
8
|
import { customIcons } from './custom-icons';
|
|
9
9
|
export { customIcons };
|
|
@@ -10,6 +10,10 @@ export interface ButtonNavProps extends ComponentPropsWithRef<'nav'> {
|
|
|
10
10
|
* Aria label for the navigation.
|
|
11
11
|
*/
|
|
12
12
|
ariaLabel: string;
|
|
13
|
+
/**
|
|
14
|
+
* Renders a border around the track. Off by default.
|
|
15
|
+
*/
|
|
16
|
+
border?: boolean;
|
|
13
17
|
/**
|
|
14
18
|
* Additional class names
|
|
15
19
|
*/
|
|
@@ -22,4 +26,4 @@ export interface ButtonNavProps extends ComponentPropsWithRef<'nav'> {
|
|
|
22
26
|
/**
|
|
23
27
|
* ButtonNav UI component
|
|
24
28
|
*/
|
|
25
|
-
export declare const ButtonNav: ({ ariaLabel, className, menuItems, ...props }: ButtonNavProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export declare const ButtonNav: ({ ariaLabel, border, className, menuItems, ...props }: ButtonNavProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -14,10 +14,6 @@ interface SiteMenuProps extends ComponentPropsWithoutRef<'nav'> {
|
|
|
14
14
|
* Additional class names
|
|
15
15
|
*/
|
|
16
16
|
className?: string;
|
|
17
|
-
/**
|
|
18
|
-
* Color scheme.
|
|
19
|
-
*/
|
|
20
|
-
colorType?: 'default' | 'reverse';
|
|
21
17
|
/**
|
|
22
18
|
* Menu Items.
|
|
23
19
|
*/
|
|
@@ -26,5 +22,5 @@ interface SiteMenuProps extends ComponentPropsWithoutRef<'nav'> {
|
|
|
26
22
|
/**
|
|
27
23
|
* SiteMenu UI component
|
|
28
24
|
*/
|
|
29
|
-
export declare const SiteMenu: ({ ariaLabel, className,
|
|
25
|
+
export declare const SiteMenu: ({ ariaLabel, className, menuItems, ...props }: SiteMenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
26
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
2
|
import { PDSIcon } from '../../icons/Icon/Icon';
|
|
3
|
+
import { ThemeSwitcherProps } from '../../ThemeSwitcher/ThemeSwitcher';
|
|
3
4
|
import './user-menu.css';
|
|
4
5
|
/**
|
|
5
6
|
* Prop types for UserMenuItem
|
|
@@ -46,6 +47,24 @@ export interface UserMenuProps extends ComponentPropsWithoutRef<'span'> {
|
|
|
46
47
|
* Array of menu items.
|
|
47
48
|
*/
|
|
48
49
|
menuItems?: UserMenuItem[];
|
|
50
|
+
/**
|
|
51
|
+
* Callback fired when the theme changes. Provide together with `theme` to
|
|
52
|
+
* render the theme switcher row at the top of the menu.
|
|
53
|
+
*/
|
|
54
|
+
onThemeChange?: ThemeSwitcherProps['onChange'];
|
|
55
|
+
/**
|
|
56
|
+
* The currently active theme. Provide together with `onThemeChange` to
|
|
57
|
+
* render the theme switcher row at the top of the menu.
|
|
58
|
+
*/
|
|
59
|
+
theme?: ThemeSwitcherProps['theme'];
|
|
60
|
+
/**
|
|
61
|
+
* Label for the theme switcher row. Defaults to `'Theme'`.
|
|
62
|
+
*/
|
|
63
|
+
themeLabel?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Translation strings for the theme switcher options.
|
|
66
|
+
*/
|
|
67
|
+
themeLabelStrings?: ThemeSwitcherProps['labelStrings'];
|
|
49
68
|
/**
|
|
50
69
|
* User email address.
|
|
51
70
|
*/
|
|
@@ -62,4 +81,4 @@ export interface UserMenuProps extends ComponentPropsWithoutRef<'span'> {
|
|
|
62
81
|
/**
|
|
63
82
|
* UserMenu UI component
|
|
64
83
|
*/
|
|
65
|
-
export declare const UserMenu: ({ ariaLabel, className, menuItems, userEmail, userImageSrc, userName, ...props }: UserMenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
84
|
+
export declare const UserMenu: ({ ariaLabel, className, menuItems, onThemeChange, theme, themeLabel, themeLabelStrings, userEmail, userImageSrc, userName, ...props }: UserMenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.pds-button-nav{display:inline-block}.pds-button-nav__menu{align-items:center;background-color:var(--pds-color-segmented-control-track-background);border
|
|
1
|
+
.pds-button-nav{display:inline-block}.pds-button-nav__menu{align-items:center;background-color:var(--pds-color-segmented-control-track-background);border-radius:var(--pds-border-radius-button);display:inline-flex;gap:var(--pds-spacing-5xs);list-style:none;margin:0;padding:3px}.pds-button-nav--bordered .pds-button-nav__menu{box-shadow:inset 0 0 0 var(--pds-border-width-default) var(--pds-color-border-default-secondary)}.pds-button-nav__item{display:flex;flex-shrink:0}.pds-button-nav__item a{align-items:center;block-size:var(--pds-spacing-button-height-s);border-radius:var(--pds-border-radius-button);color:var(--pds-color-foreground-default);display:flex;font-family:var(--pds-typography-ff-default);font-size:var(--pds-typography-size-s);font-weight:var(--pds-typography-fw-medium);gap:var(--pds-spacing-2xs);justify-content:center;line-height:0;padding-inline:var(--pds-spacing-m);text-decoration:none;transition:var(--pds-animation-transition-button);white-space:nowrap}.pds-button-nav__item:not(.pds-button-nav__item--active):hover a{color:var(--pds-color-interactive-foreground-hover)}.pds-button-nav__item a:focus-visible{outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:-1px}.pds-button-nav__item--active a{background-color:var(--pds-color-segmented-control-selected-background)}.pds-button-nav__mobile{display:none}[data-pds-mobile] .pds-button-nav__mobile{display:block}[data-pds-mobile] .pds-button-nav__menu{display:none}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.pds-compact-empty-state{align-items:center;display:flex;flex-direction:column;font-family:var(--pds-typography-ff-default);padding-block:var(--pds-spacing-5xl);row-gap:var(--pds-spacing-xl);text-align:center;width:100%}.pds-compact-empty-state__icon{color:var(--pds-color-foreground-default-secondary)}.pds-compact-empty-state__heading{display:block;font-size:var(--pds-typography-size-l);font-weight:var(--pds-typography-fw-bold);margin-block-end:var(--pds-spacing-3xs)}.pds-compact-empty-state__message{color:var(--pds-color-foreground-default-secondary);font-size:var(--pds-typography-size-m);margin-block-end:0;margin-inline:auto;max-width:600px;text-wrap:pretty}
|
|
1
|
+
.pds-compact-empty-state{align-items:center;display:flex;flex-direction:column;font-family:var(--pds-typography-ff-default);padding-block:var(--pds-spacing-5xl);row-gap:var(--pds-spacing-xl);text-align:center;width:100%}.pds-compact-empty-state__icon{color:var(--pds-color-foreground-default-secondary)}.pds-compact-empty-state__heading{display:block;font-family:var(--pds-typography-ff-compact);font-size:var(--pds-typography-size-l);font-weight:var(--pds-typography-fw-bold);margin-block-end:var(--pds-spacing-3xs)}.pds-compact-empty-state__message{color:var(--pds-color-foreground-default-secondary);font-size:var(--pds-typography-size-m);margin-block-end:0;margin-inline:auto;max-width:600px;text-wrap:pretty}
|