@pantheon-systems/pds-toolkit-react 2.0.0-alpha.76 → 2.0.0-alpha.78
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/dist/components/Dropdown/Dropdown.d.ts +67 -2
- package/dist/components/RowActionsMenu/RowActionsMenu.d.ts +46 -0
- package/dist/components/buttons/MenuButton/MenuButton.d.ts +16 -2
- package/dist/components/cards/Card/Card.d.ts +2 -2
- package/dist/components/empty-states/VerticalEmptyState/VerticalEmptyState.d.ts +3 -2
- package/dist/components/icons/Icon/generated-icon-data.d.ts +1 -1
- package/dist/components/links/CTALink/CTALink.d.ts +2 -2
- package/dist/components/links/LinkNewWindow/LinkNewWindow.d.ts +1 -1
- package/dist/components/panels/FeaturePanel/FeaturePanel.d.ts +72 -0
- package/dist/components/panels/WidgetPanel/WidgetPanel.d.ts +39 -0
- package/dist/css/component-css/pds-cta-link.css +1 -1
- package/dist/css/component-css/pds-dropdown.css +2 -1
- package/dist/css/component-css/pds-feature-panel.css +15 -0
- package/dist/css/component-css/pds-index.css +21 -5
- package/dist/css/component-css/pds-link-new-window.css +1 -1
- package/dist/css/component-css/pds-row-actions-menu.css +2 -0
- package/dist/css/component-css/pds-widget-panel.css +1 -0
- package/dist/css/layout-css/pds-sidebar-layout.css +11 -3
- package/dist/css/pds-components.css +21 -5
- package/dist/css/pds-core.css +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +1954 -1804
- package/dist/index.js.map +1 -1
- package/dist/index.source.d.ts +4 -0
- package/dist/layouts/SidebarLayout/SidebarLayout.d.ts +22 -3
- package/dist/libs/types/layout-types.d.ts +1 -0
- package/dist/utilities/auto-grid/AutoGrid.d.ts +48 -0
- package/dist/utilities/hooks/useDropdown/useDropdown.d.ts +11 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
1
|
+
import React, { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
2
|
import { UseDropdownOptions } from '../../utilities/hooks/useDropdown';
|
|
3
|
+
import { MenuButtonProps } from '../buttons/MenuButton/MenuButton';
|
|
3
4
|
import './dropdown.css';
|
|
4
5
|
export interface DropdownProps extends UseDropdownOptions {
|
|
5
6
|
/**
|
|
@@ -19,12 +20,19 @@ export interface DropdownProps extends UseDropdownOptions {
|
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* Root Dropdown component. Provides dropdown context to sub-components.
|
|
23
|
+
*
|
|
24
|
+
* Wraps the actual implementation in a Floating UI tree boundary: when
|
|
25
|
+
* nested inside another floating panel, it joins that panel's tree so
|
|
26
|
+
* outside-clicks and Escape inside this dropdown resolve to this (innermost)
|
|
27
|
+
* dropdown without wrongly dismissing the parent. When not nested, it
|
|
28
|
+
* provides its own single-node tree — no consumer opt-in needed.
|
|
22
29
|
*/
|
|
23
30
|
export declare const Dropdown: {
|
|
24
|
-
(
|
|
31
|
+
(props: DropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
25
32
|
Trigger: ({ children, className, showTriggerIcon, ...props }: DropdownTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
|
26
33
|
Panel: ({ children, className, ...props }: DropdownPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
27
34
|
Item: ({ children, className, closeOnSelect, description, disabled, icon, index, isActive, isCritical, onClick, onKeyDown, trailingIcon, ...props }: DropdownItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
ActionItem: ({ children, className, closeOnSelect, description, disabled, icon, index, isActive, linkContent, menuAriaLabel, menuItems, onClick, onKeyDown, ...props }: DropdownActionItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
28
36
|
CheckboxItem: ({ checked, children, className, description, disabled, indeterminate, index, onCheckedChange, onClick, onKeyDown, ...props }: DropdownCheckboxItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
37
|
Heading: ({ children, className, ...props }: DropdownHeadingProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
38
|
Separator: ({ className, ...props }: DropdownSeparatorProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -99,6 +107,63 @@ export interface DropdownItemProps extends ComponentPropsWithoutRef<'li'> {
|
|
|
99
107
|
*/
|
|
100
108
|
trailingIcon?: ReactNode;
|
|
101
109
|
}
|
|
110
|
+
export interface DropdownActionItemProps extends Omit<ComponentPropsWithoutRef<'li'>, 'onClick'> {
|
|
111
|
+
/**
|
|
112
|
+
* Item content — label text. Rendered inside `linkContent` when provided.
|
|
113
|
+
*/
|
|
114
|
+
children?: ReactNode;
|
|
115
|
+
/**
|
|
116
|
+
* Additional class names.
|
|
117
|
+
*/
|
|
118
|
+
className?: string;
|
|
119
|
+
/**
|
|
120
|
+
* Close the dropdown when the row is selected (default: true).
|
|
121
|
+
*/
|
|
122
|
+
closeOnSelect?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Secondary text displayed below the label.
|
|
125
|
+
*/
|
|
126
|
+
description?: ReactNode;
|
|
127
|
+
/**
|
|
128
|
+
* Disabled state. Disables row selection only — the trailing kebab menu
|
|
129
|
+
* stays available.
|
|
130
|
+
*/
|
|
131
|
+
disabled?: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Leading content — PDSIcon name, or custom ReactNode (Avatar, etc.).
|
|
134
|
+
*/
|
|
135
|
+
icon?: ReactNode;
|
|
136
|
+
/**
|
|
137
|
+
* Index of this item in the list (required for keyboard navigation).
|
|
138
|
+
*/
|
|
139
|
+
index: number;
|
|
140
|
+
/**
|
|
141
|
+
* Selected or current state.
|
|
142
|
+
*/
|
|
143
|
+
isActive?: boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Link element to navigate to on selection (e.g. `<a href='...'>` or a
|
|
146
|
+
* router `Link`). Takes precedence over `onClick` when both are given —
|
|
147
|
+
* pass whichever matches how selecting this row should behave.
|
|
148
|
+
*/
|
|
149
|
+
linkContent?: ReactNode;
|
|
150
|
+
/**
|
|
151
|
+
* Contextual label for the row's kebab menu, e.g. `Actions for ${item.title}`.
|
|
152
|
+
* Supplied per-row by the consumer — required, since a plain "Actions"
|
|
153
|
+
* label isn't distinguishable between rows for screen reader users.
|
|
154
|
+
*/
|
|
155
|
+
menuAriaLabel: string;
|
|
156
|
+
/**
|
|
157
|
+
* Menu items for the kebab's menu — passed straight through to the
|
|
158
|
+
* underlying `MenuButton`.
|
|
159
|
+
*/
|
|
160
|
+
menuItems: MenuButtonProps['menuItems'];
|
|
161
|
+
/**
|
|
162
|
+
* Callback fired when the row is selected. Ignored when `linkContent` is
|
|
163
|
+
* given — the link's own navigation is the selection behavior.
|
|
164
|
+
*/
|
|
165
|
+
onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;
|
|
166
|
+
}
|
|
102
167
|
export interface DropdownCheckboxItemProps extends Omit<ComponentPropsWithoutRef<'li'>, 'onChange'> {
|
|
103
168
|
/**
|
|
104
169
|
* Checked state of the item.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
+
import { MenuButton } from '../buttons/MenuButton/MenuButton';
|
|
3
|
+
import './row-actions-menu.css';
|
|
4
|
+
/**
|
|
5
|
+
* Prop types for RowActionsMenu
|
|
6
|
+
*/
|
|
7
|
+
export interface RowActionsMenuProps extends ComponentPropsWithoutRef<'div'> {
|
|
8
|
+
/**
|
|
9
|
+
* Arbitrary leading row content.
|
|
10
|
+
*/
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* Additional class names
|
|
14
|
+
*/
|
|
15
|
+
className?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Contextual label for the row's kebab menu, e.g. `Actions for ${item.title}`.
|
|
18
|
+
* Supplied per-row by the consumer — required, since a plain "Actions"
|
|
19
|
+
* label isn't distinguishable between rows for screen reader users.
|
|
20
|
+
*/
|
|
21
|
+
menuAriaLabel: string;
|
|
22
|
+
/**
|
|
23
|
+
* Menu items for the kebab's menu — passed straight through to the
|
|
24
|
+
* underlying `MenuButton`. Use `isCritical`/`criticalLabel` on an item
|
|
25
|
+
* for a destructive action (e.g. "Remove").
|
|
26
|
+
*/
|
|
27
|
+
menuItems: ComponentPropsWithoutRef<typeof MenuButton>['menuItems'];
|
|
28
|
+
/**
|
|
29
|
+
* Where this row is being used, for the hover/active fill style. `dropdown`
|
|
30
|
+
* (default) is an inset rounded pill, matching a floating menu's own items
|
|
31
|
+
* (e.g. nested inside `Dropdown`). `panel` fills edge-to-edge with square
|
|
32
|
+
* corners, matching a flush list inside a panel/widget (e.g. `WidgetPanel`).
|
|
33
|
+
*/
|
|
34
|
+
variant?: 'dropdown' | 'panel';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* RowActionsMenu UI component.
|
|
38
|
+
*
|
|
39
|
+
* A generic row primitive: arbitrary leading content plus a trailing kebab
|
|
40
|
+
* button that's visually revealed on hover and keyboard focus, opening a
|
|
41
|
+
* `MenuButton` actions menu. Not specific to any one consumer — meant to be
|
|
42
|
+
* reused anywhere a list needs a per-row actions menu (e.g. bookmarks,
|
|
43
|
+
* recent sites). Safe to nest inside another floating panel (e.g. a
|
|
44
|
+
* `Dropdown`) — see `MenuButton`/`Dropdown`'s Floating UI tree handling.
|
|
45
|
+
*/
|
|
46
|
+
export declare const RowActionsMenu: ({ children, className, menuAriaLabel, menuItems, variant, ...props }: RowActionsMenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -57,6 +57,14 @@ export interface MenuButtonProps extends ComponentPropsWithRef<'span'> {
|
|
|
57
57
|
* Optional callback function for when the button is clicked or activated by the keyboard.
|
|
58
58
|
*/
|
|
59
59
|
onClick?: () => void;
|
|
60
|
+
/**
|
|
61
|
+
* Optional callback fired whenever the menu's open state changes. Use
|
|
62
|
+
* this to manage focus deliberately when this MenuButton is nested
|
|
63
|
+
* inside another floating panel — e.g. return focus to the row that
|
|
64
|
+
* owns this menu when it closes, rather than leaving it to Floating UI's
|
|
65
|
+
* default (which can otherwise leave focus on an ancestor panel).
|
|
66
|
+
*/
|
|
67
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
60
68
|
/**
|
|
61
69
|
* Which size of button to render.
|
|
62
70
|
*/
|
|
@@ -91,7 +99,13 @@ export interface MenuButtonProps extends ComponentPropsWithRef<'span'> {
|
|
|
91
99
|
variant?: Extract<ButtonVariant, 'primary' | 'secondary' | 'subtle' | 'reverse-secondary'> | 'navbar';
|
|
92
100
|
}
|
|
93
101
|
/**
|
|
94
|
-
* MenuButton UI component
|
|
102
|
+
* MenuButton UI component.
|
|
103
|
+
*
|
|
104
|
+
* Wraps the actual implementation in a Floating UI tree boundary: when
|
|
105
|
+
* nested inside another floating panel (e.g. a `Dropdown`'s panel), it joins
|
|
106
|
+
* that panel's tree so outside-clicks and Escape inside this menu resolve to
|
|
107
|
+
* this (innermost) menu without wrongly dismissing the parent. When not
|
|
108
|
+
* nested, it provides its own single-node tree — no consumer opt-in needed.
|
|
95
109
|
*/
|
|
96
|
-
export declare const MenuButton: (
|
|
110
|
+
export declare const MenuButton: (props: MenuButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
97
111
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
-
import { CardBackground, CardPaddingScale } from '../../../libs/types/layout-types';
|
|
2
|
+
import { CardBackground, CardPaddingScale, ImageDisplayVariant } from '../../../libs/types/layout-types';
|
|
3
3
|
import './card.css';
|
|
4
|
-
export type CardImageVariant =
|
|
4
|
+
export type CardImageVariant = ImageDisplayVariant;
|
|
5
5
|
/**
|
|
6
6
|
* Prop types for Card
|
|
7
7
|
*/
|
|
@@ -24,10 +24,11 @@ export interface VerticalEmptyStateProps extends ComponentPropsWithoutRef<'div'>
|
|
|
24
24
|
headingLevel?: HeadingLevel;
|
|
25
25
|
/**
|
|
26
26
|
* PDS illustration image to display above the heading.
|
|
27
|
-
*
|
|
27
|
+
* Can be a string (a link to an SVG file, either from Brandfolder or
|
|
28
|
+
* local) or a React node (e.g. a Spinner, for in-progress empty states).
|
|
28
29
|
* See full documentation for details.
|
|
29
30
|
*/
|
|
30
|
-
image?: string;
|
|
31
|
+
image?: string | ReactNode;
|
|
31
32
|
/**
|
|
32
33
|
* Height of the image (CSS value like '200px', '50%', etc.)
|
|
33
34
|
*/
|
|
@@ -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-08-
|
|
6
|
+
* Generated: 2026-08-31T17:35:35.642Z
|
|
7
7
|
*/
|
|
8
8
|
import { customIcons } from './custom-icons';
|
|
9
9
|
export { customIcons };
|
|
@@ -10,9 +10,9 @@ export interface CTALinkProps extends ComponentPropsWithoutRef<'div'> {
|
|
|
10
10
|
*/
|
|
11
11
|
linkContent?: ReactNode;
|
|
12
12
|
/**
|
|
13
|
-
* Size of link
|
|
13
|
+
* Size of link. `s` (default) is 14px text; `m` is 16px text.
|
|
14
14
|
*/
|
|
15
|
-
size?: '
|
|
15
|
+
size?: 's' | 'm';
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* CTA Link UI component
|
|
@@ -15,7 +15,7 @@ export interface LinkNewWindowProps extends ComponentPropsWithoutRef<'a'> {
|
|
|
15
15
|
/**
|
|
16
16
|
* Optional font size for the LinkNewWindow. If not provided, the font size will be inherited from the parent element.
|
|
17
17
|
*/
|
|
18
|
-
fontSize?: 's' | 'm'
|
|
18
|
+
fontSize?: 's' | 'm';
|
|
19
19
|
/**
|
|
20
20
|
* Is the link in the process of loading?
|
|
21
21
|
*/
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
+
import { ImageDisplayVariant } from '../../../libs/types/layout-types';
|
|
3
|
+
import { Button } from '../../buttons/Button/Button';
|
|
4
|
+
import { ButtonLink } from '../../buttons/ButtonLink/ButtonLink';
|
|
5
|
+
import './feature-panel.css';
|
|
6
|
+
/**
|
|
7
|
+
* Prop types for FeaturePanel
|
|
8
|
+
*/
|
|
9
|
+
export interface FeaturePanelProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {
|
|
10
|
+
/**
|
|
11
|
+
* Additional class names
|
|
12
|
+
*/
|
|
13
|
+
className?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Body content.
|
|
16
|
+
*/
|
|
17
|
+
content: string;
|
|
18
|
+
/**
|
|
19
|
+
* Props for an optional call to action. Pass `ButtonLink` props (must
|
|
20
|
+
* include `linkContent`) to render a link, or `Button` props to render a
|
|
21
|
+
* button. Always renders at `variant="brand"` `size="sm"` regardless of
|
|
22
|
+
* what's passed in.
|
|
23
|
+
*/
|
|
24
|
+
cta?: ComponentPropsWithoutRef<typeof Button> | ComponentPropsWithoutRef<typeof ButtonLink>;
|
|
25
|
+
/**
|
|
26
|
+
* Label for the close button. Provide a translation string if needed.
|
|
27
|
+
*/
|
|
28
|
+
dismissLabel?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Heading text. Rendered as an `h2`.
|
|
31
|
+
*/
|
|
32
|
+
heading: string;
|
|
33
|
+
/**
|
|
34
|
+
* An optional image. Pass the full element, e.g.
|
|
35
|
+
* `<img alt="..." src="..." />`. Aspect ratio isn't enforced, but
|
|
36
|
+
* `1:1`–`3:2` works best in `vertical` layout, and `1:1` is a reasonable
|
|
37
|
+
* starting point for `horizontal` (see the MDX docs for why — that one
|
|
38
|
+
* shifts with panel width and copy length, so preview it for real).
|
|
39
|
+
*/
|
|
40
|
+
image?: ReactNode;
|
|
41
|
+
/**
|
|
42
|
+
* Controls how the image fills its side of the panel. Only relevant when
|
|
43
|
+
* an image is provided.
|
|
44
|
+
* - `bleed` (default): image extends to the panel edges, corners rounded
|
|
45
|
+
* only where it meets the panel's own edge.
|
|
46
|
+
* - `inset`: image has padding on all sides, all corners rounded.
|
|
47
|
+
*/
|
|
48
|
+
imageVariant?: ImageDisplayVariant;
|
|
49
|
+
/**
|
|
50
|
+
* Shows a close button in the upper-right corner that calls `onDismiss`
|
|
51
|
+
* when clicked. The panel does not remove or hide itself — that's up to
|
|
52
|
+
* the consumer.
|
|
53
|
+
*/
|
|
54
|
+
isDismissible?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Which way the panel lays out its image and content.
|
|
57
|
+
* - `vertical` (default): image on top, content below.
|
|
58
|
+
* - `horizontal`: image on the left, content on the right. Only takes
|
|
59
|
+
* effect at the `bp-m` breakpoint and up — below that it collapses to
|
|
60
|
+
* the same stacked layout as `vertical`.
|
|
61
|
+
*/
|
|
62
|
+
layout?: 'horizontal' | 'vertical';
|
|
63
|
+
/**
|
|
64
|
+
* Called when the close button is clicked. Required in practice when
|
|
65
|
+
* `isDismissible` is true.
|
|
66
|
+
*/
|
|
67
|
+
onDismiss?: () => void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* FeaturePanel UI component
|
|
71
|
+
*/
|
|
72
|
+
export declare const FeaturePanel: ({ className, content, cta, dismissLabel, heading, image, imageVariant, isDismissible, layout, onDismiss, ...props }: FeaturePanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
+
import { PDSIcon } from '../../icons/Icon/Icon';
|
|
3
|
+
import './widget-panel.css';
|
|
4
|
+
/**
|
|
5
|
+
* Prop types for WidgetPanel
|
|
6
|
+
*/
|
|
7
|
+
export interface WidgetPanelProps extends ComponentPropsWithoutRef<'div'> {
|
|
8
|
+
/**
|
|
9
|
+
* Main content. Unslotted -- fully composable (list rows, a search
|
|
10
|
+
* input, inline CTAs, dividers, etc). Pass a child with `slot="footer"`
|
|
11
|
+
* to render it in the footer instead.
|
|
12
|
+
*/
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
/**
|
|
15
|
+
* Additional class names
|
|
16
|
+
*/
|
|
17
|
+
className?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Caps the height of the content region only -- the header and footer
|
|
20
|
+
* stay fixed-size. Set in `vh`, `rem`, or `px`. Without it, the content
|
|
21
|
+
* region fills and scrolls within whatever height a parent container
|
|
22
|
+
* constrains the panel to.
|
|
23
|
+
*/
|
|
24
|
+
contentMaxHeight?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Heading text. Always rendered as an `h2`, but sized smaller than an
|
|
27
|
+
* `h2` default -- semantic level and visual size are decoupled here.
|
|
28
|
+
*/
|
|
29
|
+
heading: string;
|
|
30
|
+
/**
|
|
31
|
+
* An optional icon shown before the heading. Encouraged, but not
|
|
32
|
+
* required.
|
|
33
|
+
*/
|
|
34
|
+
icon?: PDSIcon;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* WidgetPanel UI component
|
|
38
|
+
*/
|
|
39
|
+
export declare const WidgetPanel: ({ children, className, contentMaxHeight, heading, icon, ...props }: WidgetPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer pds-v1, pds-v2;@layer pds-v2{.pds-cta-link{--cta-link-size:var(--pds-typography-size-
|
|
1
|
+
@layer pds-v1, pds-v2;@layer pds-v2{.pds-cta-link{--cta-link-size:var(--pds-typography-size-s);--cta-link-color:var(--pds-color-interactive-link-default);--cta-link-gap:var(--pds-spacing-3xs);align-items:center;display:inline-flex;gap:var(--cta-link-gap);padding:.25rem 0}.pds-cta-link a,.pds-cta-link button{color:var(--cta-link-color);font-family:var(--pds-typography-ff-default);font-size:var(--cta-link-size);font-weight:var(--pds-typography-fw-medium);letter-spacing:var(--pds-typography-ls-s);line-height:var(--pds-typography-lh-s);text-decoration:none;transition:var(--pds-animation-transition-link)}.pds-cta-link a:hover,.pds-cta-link button:hover{color:var(--cta-link-color)}.pds-cta-link a:focus-visible,.pds-cta-link button:focus-visible{border-radius:var(--pds-border-radius-default);outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:.25rem;text-decoration:none}.pds-cta-link button{background:none;border:none;cursor:pointer;padding:0}.pds-cta-link .pds-cta-link__icon{color:var(--cta-link-color);transition:var(--pds-animation-transition-link)}.pds-cta-link:hover{--cta-link-color:var(--pds-color-interactive-link-hover)}.pds-cta-link:active{--cta-link-color:var(--pds-color-interactive-link-active);outline:none;text-decoration:none}.pds-cta-link--m{--cta-link-gap:var(--pds-spacing-2xs);--cta-link-size:var(--pds-typography-size-m)}.pds-link-group{display:flex;flex-direction:column;row-gap:var(--pds-spacing-m)}}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
@layer pds-v1, pds-v2;@layer pds-v2{.pds-dropdown{position:relative}.pds-dropdown--inline{display:inline-block}.pds-dropdown__trigger{align-items:center;background:transparent;border:none;border-radius:var(--pds-border-radius-container);color:inherit;cursor:pointer;display:inline-flex;font-family:inherit;gap:var(--pds-spacing-3xs);padding:var(--pds-spacing-3xs) var(--pds-spacing-2xs);transition:background-color .15s ease}.pds-dropdown__trigger:hover{background-color:var(--pds-color-interactive-background-hover)}.pds-dropdown__trigger:focus-visible{outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:1px}.pds-dropdown__trigger-icon{color:var(--pds-color-foreground-default-secondary);transition:var(--pds-animation-transition-rotation)}.pds-dropdown__trigger[aria-expanded=true] .pds-dropdown__trigger-icon{transform:rotate(180deg)}.pds-dropdown__panel{background-color:var(--pds-color-dropdown-background);box-shadow:var(--pds-elevation-overlay);flex-direction:column;gap:var(--pds-spacing-4xs);margin:0;min-width:10rem;overflow-y:auto;padding-inline:var(--pds-spacing-2xs);z-index:var(--pds-z-index-dropdown)}.pds-dropdown__item,.pds-dropdown__panel{border-radius:var(--pds-border-radius-container);display:flex;list-style:none;outline:none;padding-block:var(--pds-spacing-2xs)}.pds-dropdown__item{align-items:center;color:var(--pds-color-dropdown-foreground);cursor:pointer;font-size:var(--pds-typography-size-s);gap:var(--pds-spacing-s);justify-content:space-between;min-height:var(--pds-spacing-2xl);padding-inline:var(--pds-spacing-xs)}.pds-dropdown__item:focus-visible:not(:hover){outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:-1px}.pds-dropdown__item--focused,.pds-dropdown__item:hover{background-color:var(--pds-color-dropdown-item-background-hover)}.pds-dropdown__item:active{background-color:var(--pds-color-dropdown-item-background-active)}.pds-dropdown__selected-icon{align-self:center;color:var(--pds-color-foreground-default);display:flex;flex-shrink:0;height:.875em;width:.875em}.pds-dropdown__item--critical{color:var(--pds-color-status-critical-foreground)}.pds-dropdown__item--critical.pds-dropdown__item--focused,.pds-dropdown__item--critical:hover{background-color:var(--pds-color-status-critical-background)}.pds-dropdown__item--disabled{cursor:not-allowed;opacity:.5;pointer-events:none}.pds-dropdown__item-content{align-items:center;display:flex;gap:var(--pds-spacing-2xs)}.pds-dropdown__item-icon{display:flex;flex-shrink:0}.pds-dropdown__item-label{display:flex;flex-direction:column}.pds-dropdown__item-description{color:var(--pds-color-foreground-default-secondary);font-size:var(--pds-typography-size-xs);line-height:var(--pds-typography-lh-s);margin-block-start:var(--pds-spacing-4xs)}.pds-dropdown__item-trailing{display:flex;flex-shrink:0}.pds-
|
|
1
|
+
@layer pds-v1, pds-v2;@layer pds-v2{.pds-dropdown{position:relative}.pds-dropdown--inline{display:inline-block}.pds-dropdown__trigger{align-items:center;background:transparent;border:none;border-radius:var(--pds-border-radius-container);color:inherit;cursor:pointer;display:inline-flex;font-family:inherit;gap:var(--pds-spacing-3xs);padding:var(--pds-spacing-3xs) var(--pds-spacing-2xs);transition:background-color .15s ease}.pds-dropdown__trigger:hover{background-color:var(--pds-color-interactive-background-hover)}.pds-dropdown__trigger:focus-visible{outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:1px}.pds-dropdown__trigger-icon{color:var(--pds-color-foreground-default-secondary);transition:var(--pds-animation-transition-rotation)}.pds-dropdown__trigger[aria-expanded=true] .pds-dropdown__trigger-icon{transform:rotate(180deg)}.pds-dropdown__panel{background-color:var(--pds-color-dropdown-background);box-shadow:var(--pds-elevation-overlay);flex-direction:column;gap:var(--pds-spacing-4xs);margin:0;min-width:10rem;overflow-y:auto;padding-inline:var(--pds-spacing-2xs);z-index:var(--pds-z-index-dropdown)}.pds-dropdown__item,.pds-dropdown__panel{border-radius:var(--pds-border-radius-container);display:flex;list-style:none;outline:none;padding-block:var(--pds-spacing-2xs)}.pds-dropdown__item{align-items:center;color:var(--pds-color-dropdown-foreground);cursor:pointer;font-size:var(--pds-typography-size-s);gap:var(--pds-spacing-s);justify-content:space-between;min-height:var(--pds-spacing-2xl);padding-inline:var(--pds-spacing-xs)}.pds-dropdown__item:focus-visible:not(:hover){outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:-1px}.pds-dropdown__item--focused,.pds-dropdown__item:hover{background-color:var(--pds-color-dropdown-item-background-hover)}.pds-dropdown__item:active{background-color:var(--pds-color-dropdown-item-background-active)}.pds-dropdown__selected-icon{align-self:center;color:var(--pds-color-foreground-default);display:flex;flex-shrink:0;height:.875em;width:.875em}.pds-dropdown__item--critical{color:var(--pds-color-status-critical-foreground)}.pds-dropdown__item--critical.pds-dropdown__item--focused,.pds-dropdown__item--critical:hover{background-color:var(--pds-color-status-critical-background)}.pds-dropdown__item--disabled{cursor:not-allowed;opacity:.5;pointer-events:none}.pds-dropdown__item-content{align-items:center;display:flex;gap:var(--pds-spacing-2xs)}.pds-dropdown__item-icon{display:flex;flex-shrink:0}.pds-dropdown__item-label{display:flex;flex-direction:column}.pds-dropdown__item-description{color:var(--pds-color-foreground-default-secondary);font-size:var(--pds-typography-size-xs);line-height:var(--pds-typography-lh-s);margin-block-start:var(--pds-spacing-4xs)}.pds-dropdown__item-trailing{display:flex;flex-shrink:0}.pds-dropdown__action-item .pds-dropdown__item-label a{color:inherit;text-decoration:none}.pds-dropdown__action-item{padding-block:var(--pds-spacing-4xs)}.pds-dropdown__action-item-trigger{display:flex;flex-shrink:0;opacity:0;pointer-events:none;transition:opacity .15s ease}.pds-dropdown__action-item:focus-within .pds-dropdown__action-item-trigger,.pds-dropdown__action-item:has(.pds-menu-button--expanded)
|
|
2
|
+
.pds-dropdown__action-item-trigger,.pds-dropdown__action-item:hover .pds-dropdown__action-item-trigger{opacity:1;pointer-events:auto}.pds-dropdown__checkbox-box{align-items:center;background-color:transparent;border:var(--pds-border-width-default) solid var(--pds-color-foreground-default);border-radius:var(--pds-border-radius-default);color:var(--pds-color-input-selected-foreground);display:flex;flex-shrink:0;height:1rem;justify-content:center;padding:.0625rem;transition:var(--pds-animation-transition-default);width:1rem}.pds-dropdown__checkbox-box--checked,.pds-dropdown__checkbox-box--indeterminate{background-color:var(--pds-color-input-selected-background);border-color:var(--pds-color-input-selected-background)}.pds-dropdown__checkbox-icon{height:100%;width:100%}.pds-dropdown__heading{color:var(--pds-color-dropdown-heading);font-family:var(--pds-typography-ff-compact);font-size:var(--pds-typography-size-xs);font-weight:var(--pds-typography-fw-regular);line-height:var(--pds-typography-lh-s);list-style:none;padding:var(--pds-spacing-xs) var(--pds-spacing-xs) var(--pds-spacing-3xs)}.pds-dropdown__separator{border-block-end:var(--pds-border-width-default) solid var(--pds-color-dropdown-separator);list-style:none;margin-block-end:2px;margin-inline:calc(var(--pds-spacing-2xs)*-1);padding-block:2px}.pds-dropdown__filter{list-style:none;margin-block-start:calc(var(--pds-spacing-2xs)*-1);margin-inline:calc(var(--pds-spacing-2xs)*-1);padding:0}.pds-dropdown__filter-wrapper{align-items:center;display:flex;position:relative}.pds-dropdown__filter-icon{block-size:.875rem;color:var(--pds-color-foreground-default-secondary);inline-size:.875rem;left:var(--pds-spacing-s);pointer-events:none;position:absolute}.pds-dropdown__filter-wrapper:has(.pds-dropdown__filter-icon)
|
|
2
3
|
.pds-dropdown__filter-input{padding-inline-start:calc(var(--pds-spacing-s) + var(--pds-spacing-xl))}.pds-dropdown__filter-input{background-color:transparent;border:none;border-block-end:var(--pds-border-width-default) solid var(--pds-color-dropdown-separator);border-radius:0;box-sizing:border-box;color:var(--pds-color-foreground-default);font-family:inherit;font-size:var(--pds-typography-size-s);padding:var(--pds-spacing-s);width:100%}.pds-dropdown__filter-input::placeholder{color:var(--pds-color-input-placeholder);font-size:var(--pds-typography-size-s)}.pds-dropdown__filter-input:focus-visible{border-radius:var(--pds-border-radius-container) var(--pds-border-radius-container) 0 0;outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:-3px}.pds-dropdown__no-results{color:var(--pds-color-foreground-default-secondary);font-size:var(--pds-typography-size-s);padding-block-end:var(--pds-spacing-s);padding-block-start:var(--pds-spacing-xs);padding-inline:var(--pds-spacing-s)}.pds-dropdown__footer{background-color:var(--pds-color-dropdown-background);border-block-start:var(--pds-border-width-default) solid var(--pds-color-dropdown-separator);bottom:calc(var(--pds-spacing-2xs)*-1);list-style:none;margin-block-end:calc(var(--pds-spacing-2xs)*-1);margin-block-start:var(--pds-spacing-3xs);margin-inline:calc(var(--pds-spacing-2xs)*-1);padding:var(--pds-spacing-s);position:sticky}.pds-dropdown__footer a,.pds-dropdown__footer button{align-items:center;background:none;border:none;color:var(--pds-color-interactive-link-default);cursor:pointer;display:flex;font:inherit;gap:var(--pds-spacing-3xs);padding:0;text-decoration:none;width:100%}.pds-dropdown__footer a:hover,.pds-dropdown__footer button:hover{color:var(--pds-color-interactive-link-hover);text-decoration:underline}.pds-dropdown__footer a:focus-visible,.pds-dropdown__footer button:focus-visible{outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:2px}}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
@layer pds-v1, pds-v2;@layer pds-v2{.pds-feature-panel{--bg-color:var(--pds-color-surface-default);--body-padding:var(--pds-spacing-m);background:linear-gradient(var(--bg-color),var(--bg-color)) padding-box,var(--pds-gradient-avatar-12) border-box;border:var(--pds-border-width-default) solid transparent;border-radius:var(--pds-border-radius-panel);display:flex;flex-direction:column;position:relative}.pds-feature-panel__dismiss{inset-block-start:var(--pds-spacing-s);inset-inline-end:var(--pds-spacing-s);position:absolute;z-index:1}.pds-feature-panel__image{border-radius:var(--pds-border-radius-panel) var(--pds-border-radius-panel) 0 0;display:block;overflow:hidden}.pds-feature-panel__image img{display:block;height:100%;object-fit:cover;object-position:top;width:100%}.pds-feature-panel__body{display:flex;flex-direction:column;padding:var(--body-padding);width:100%}.pds-feature-panel__heading{font-size:var(--pds-typography-size-l)}.pds-feature-panel__content{font-size:var(--pds-typography-size-s);margin:0;margin-block-start:var(--pds-spacing-2xs)}.pds-feature-panel__cta{align-self:flex-start;margin-block-start:var(--pds-spacing-l)}.pds-feature-panel--hasDismiss .pds-feature-panel__heading{padding-inline-end:var(--pds-spacing-xl)}.pds-feature-panel--image-inset .pds-feature-panel__image{border-radius:var(--pds-border-radius-panel);margin:var(--body-padding) var(--body-padding) 0;width:auto}.pds-feature-panel--image-inset .pds-feature-panel__dismiss{inset-block-start:var(--pds-spacing-xl);inset-inline-end:var(--pds-spacing-xl)}.pds-feature-panel--has-image{--dismiss-scrim:rgba(0,0,0,.35);--dismiss-scrim-hover:rgba(0,0,0,.5);--dismiss-scrim-active:rgba(0,0,0,.6)}.pds-feature-panel--has-image:not(.pds-feature-panel--horizontal)
|
|
2
|
+
.pds-feature-panel__dismiss
|
|
3
|
+
.pds-close-button{background-color:var(--dismiss-scrim);color:#fff}.pds-feature-panel--has-image:not(.pds-feature-panel--horizontal)
|
|
4
|
+
.pds-feature-panel__dismiss
|
|
5
|
+
.pds-close-button:hover{background-color:var(--dismiss-scrim-hover)}.pds-feature-panel--has-image:not(.pds-feature-panel--horizontal)
|
|
6
|
+
.pds-feature-panel__dismiss
|
|
7
|
+
.pds-close-button:active:enabled{background-color:var(--dismiss-scrim-active);box-shadow:none}@media (max-width:767px){.pds-feature-panel--has-image.pds-feature-panel--horizontal
|
|
8
|
+
.pds-feature-panel__dismiss
|
|
9
|
+
.pds-close-button{background-color:var(--dismiss-scrim);color:#fff}.pds-feature-panel--has-image.pds-feature-panel--horizontal
|
|
10
|
+
.pds-feature-panel__dismiss
|
|
11
|
+
.pds-close-button:hover{background-color:var(--dismiss-scrim-hover)}.pds-feature-panel--has-image.pds-feature-panel--horizontal
|
|
12
|
+
.pds-feature-panel__dismiss
|
|
13
|
+
.pds-close-button:active:enabled{background-color:var(--dismiss-scrim-active);box-shadow:none}}@media (min-width:768px){.pds-feature-panel--horizontal{flex-direction:row;gap:var(--pds-spacing-3xs)}.pds-feature-panel--horizontal .pds-feature-panel__image{border-radius:var(--pds-border-radius-panel) 0 0 var(--pds-border-radius-panel);flex:0 1 40%;max-width:50%;min-width:30%;position:relative}.pds-feature-panel--horizontal .pds-feature-panel__image img{height:100%;inset:0;position:absolute;width:100%}.pds-feature-panel--horizontal.pds-feature-panel--image-inset
|
|
14
|
+
.pds-feature-panel__image{border-radius:var(--pds-border-radius-panel);margin:var(--body-padding) 0 var(--body-padding) var(--body-padding)}.pds-feature-panel--horizontal .pds-feature-panel__body{flex:1}.pds-feature-panel--horizontal.pds-feature-panel--image-inset
|
|
15
|
+
.pds-feature-panel__dismiss{inset-block-start:var(--pds-spacing-s);inset-inline-end:var(--pds-spacing-s)}}}
|