@pantheon-systems/pds-toolkit-react 2.0.0-alpha.74 → 2.0.0-alpha.76
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/Table/Table.d.ts +73 -7
- package/dist/components/buttons/MenuButton/MenuButton.d.ts +9 -6
- package/dist/components/buttons/SelectButton/SelectButton.d.ts +81 -0
- package/dist/components/icons/Icon/generated-icon-data.d.ts +16 -2
- package/dist/components/navigation/UserMenu/UserMenu.d.ts +5 -4
- package/dist/components/navigation/WorkspaceSelector/WorkspaceSelector.d.ts +5 -4
- package/dist/components/notifications/SectionMessage/SectionMessage.d.ts +7 -1
- package/dist/components/overlays/BottomSheet/BottomSheet.d.ts +66 -0
- package/dist/components/overlays/BulkActionBar/BulkActionBar.d.ts +48 -0
- package/dist/components/pagination/PaginationCompact/PaginationCompact.d.ts +7 -2
- package/dist/css/component-css/pds-bottom-sheet.css +1 -0
- package/dist/css/component-css/pds-bulk-action-bar.css +1 -0
- package/dist/css/component-css/pds-dropdown.css +1 -1
- package/dist/css/component-css/pds-filter-button.css +1 -1
- package/dist/css/component-css/pds-icon-button.css +21 -15
- package/dist/css/component-css/pds-index.css +30 -22
- package/dist/css/component-css/pds-pagination-compact.css +1 -1
- package/dist/css/component-css/pds-section-message.css +1 -1
- package/dist/css/component-css/pds-select-button.css +1 -0
- package/dist/css/component-css/pds-table.css +4 -2
- package/dist/css/component-css/pds-user-menu.css +1 -1
- package/dist/css/component-css/pds-utility-bar.css +1 -1
- package/dist/css/design-tokens/variables.dark.css +1 -18
- package/dist/css/design-tokens/variables.light.css +1 -18
- package/dist/css/pds-components.css +30 -22
- package/dist/css/pds-core.css +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1621 -1367
- package/dist/index.js.map +1 -1
- package/dist/index.source.d.ts +3 -0
- package/dist/svg/arrowDownWideShort.svg +3 -0
- package/dist/svg/arrowUpShortWide.svg +3 -0
- package/package.json +2 -2
|
@@ -3,20 +3,50 @@ import { PaginationCompactProps } from '../pagination/PaginationCompact/Paginati
|
|
|
3
3
|
import './table.css';
|
|
4
4
|
export type SortOrder = 'asc' | 'desc';
|
|
5
5
|
export type DetailPanelContext = {
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* 1-based position of the inspected row among `totalCount`. Reflects the
|
|
8
|
+
* sorted (but not paginated) row order — the same set Prev/Next step
|
|
9
|
+
* through, which continues across page boundaries rather than stopping
|
|
10
|
+
* at the current page.
|
|
11
|
+
*/
|
|
12
|
+
currentIndex: number;
|
|
13
|
+
/**
|
|
14
|
+
* Whether calling `onNext` would go anywhere. Prev/Next loop — Next from
|
|
15
|
+
* the last row wraps to the first — so this is only false when there's a
|
|
16
|
+
* single row (nowhere to navigate to at all).
|
|
17
|
+
*/
|
|
7
18
|
hasNext: boolean;
|
|
8
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Whether calling `onPrev` would go anywhere. Prev/Next loop — Prev from
|
|
21
|
+
* the first row wraps to the last — so this is only false when there's a
|
|
22
|
+
* single row (nowhere to navigate to at all).
|
|
23
|
+
*/
|
|
9
24
|
hasPrev: boolean;
|
|
10
25
|
/** Close the detail panel. */
|
|
11
26
|
onClose: () => void;
|
|
12
|
-
/** Navigate to the next row. */
|
|
27
|
+
/** Navigate to the next row, looping from the last back to the first. */
|
|
13
28
|
onNext: () => void;
|
|
14
|
-
/** Navigate to the previous row. */
|
|
29
|
+
/** Navigate to the previous row, looping from the first back to the last. */
|
|
15
30
|
onPrev: () => void;
|
|
16
31
|
/** Stable ID of the currently inspected row. */
|
|
17
32
|
rowId: string;
|
|
33
|
+
/**
|
|
34
|
+
* Total number of rows `currentIndex` counts among — the same sorted,
|
|
35
|
+
* unpaginated set Prev/Next step through.
|
|
36
|
+
*/
|
|
37
|
+
totalCount: number;
|
|
18
38
|
};
|
|
19
39
|
export interface TableColumn {
|
|
40
|
+
/**
|
|
41
|
+
* When true, this column's cell content is shown on the compact card
|
|
42
|
+
* rendered at mobile widths, in addition to the full detail view. The
|
|
43
|
+
* first card-visible column reads as the card's title; any further ones
|
|
44
|
+
* render as a secondary line. Columns without this flag are omitted from
|
|
45
|
+
* the card front but still appear in the full detail view (the row's
|
|
46
|
+
* `renderDetailPanel` content, or the auto-generated one — see
|
|
47
|
+
* `hasMobileDetailSheet`). Has no effect above the mobile breakpoint.
|
|
48
|
+
*/
|
|
49
|
+
cardVisible?: boolean;
|
|
20
50
|
/** Content to display in the header cell. */
|
|
21
51
|
header: ReactNode;
|
|
22
52
|
/** Stable identifier used for rendering cell content from rowData. */
|
|
@@ -64,7 +94,9 @@ export interface TableProps extends ComponentPropsWithoutRef<'table'> {
|
|
|
64
94
|
detailPanelNav?: boolean;
|
|
65
95
|
/**
|
|
66
96
|
* Optional title displayed in the detail panel header, to the left of the
|
|
67
|
-
* close button.
|
|
97
|
+
* close button. Also titles the mobile detail sheet — including when it's
|
|
98
|
+
* showing the auto-generated column list (no `renderDetailPanel`
|
|
99
|
+
* provided), a case with no desktop panel of its own to title.
|
|
68
100
|
*/
|
|
69
101
|
detailPanelTitle?: ReactNode;
|
|
70
102
|
/**
|
|
@@ -92,6 +124,14 @@ export interface TableProps extends ComponentPropsWithoutRef<'table'> {
|
|
|
92
124
|
* independently of and below the pagination footer when both are present.
|
|
93
125
|
*/
|
|
94
126
|
footer?: ReactNode;
|
|
127
|
+
/**
|
|
128
|
+
* Returns the position counter text shown between the Prev/Next buttons
|
|
129
|
+
* in the built-in detail panel/mobile sheet footer. Defaults to
|
|
130
|
+
* `(current, total) => \`${current} of ${total}\``. Override for
|
|
131
|
+
* translation. Has no effect when `renderDetailPanelFooter` is provided —
|
|
132
|
+
* use the context's `currentIndex`/`totalCount` there instead.
|
|
133
|
+
*/
|
|
134
|
+
getDetailPanelPositionLabel?: (current: number, total: number) => string;
|
|
95
135
|
/**
|
|
96
136
|
* Returns the accessible label for each option in the rows-per-page selector.
|
|
97
137
|
* Defaults to `(size) => \`Show ${size} rows per page\``.
|
|
@@ -134,6 +174,30 @@ export interface TableProps extends ComponentPropsWithoutRef<'table'> {
|
|
|
134
174
|
* Override for translation.
|
|
135
175
|
*/
|
|
136
176
|
getSortLabel?: (columnHeader: string) => string;
|
|
177
|
+
/**
|
|
178
|
+
* When `true`, the table renders as a list of tappable cards at the
|
|
179
|
+
* mobile breakpoint instead of a `<table>`. Defaults to `false` — an
|
|
180
|
+
* existing table keeps its desktop `<table>` layout (horizontally
|
|
181
|
+
* scrollable) at every breakpoint until explicitly opted in, so
|
|
182
|
+
* upgrading the package never silently changes how a table already in
|
|
183
|
+
* use looks or behaves. Opt in per table, tuning `cardVisible` on its
|
|
184
|
+
* columns as you go. When `false` (or unset), none of the
|
|
185
|
+
* mobile-specific behavior applies: `cardVisible` has no effect, and row
|
|
186
|
+
* detail (if any) still uses the desktop side panel, not a sheet.
|
|
187
|
+
*/
|
|
188
|
+
hasMobileCards?: boolean;
|
|
189
|
+
/**
|
|
190
|
+
* When `true` (default), tapping a card at the mobile breakpoint opens a
|
|
191
|
+
* bottom sheet with that row's detail — `renderDetailPanel`'s content when
|
|
192
|
+
* provided, or an auto-generated label/value list of every column when
|
|
193
|
+
* not (so data omitted from the compact card, via `cardVisible`, is never
|
|
194
|
+
* completely inaccessible). Set to `false` to suppress the mobile sheet
|
|
195
|
+
* entirely — appropriate for a table with too few columns to make one
|
|
196
|
+
* useful. Has no effect when a row is inspectable only via `onRowInspect`
|
|
197
|
+
* with no `renderDetailPanel` — that case already has nothing to show in
|
|
198
|
+
* a sheet and keeps calling `onRowInspect` directly, matching desktop.
|
|
199
|
+
*/
|
|
200
|
+
hasMobileDetailSheet?: boolean;
|
|
137
201
|
/**
|
|
138
202
|
* ID of the currently inspected row. When provided, that row receives a
|
|
139
203
|
* highlighted background. Use the same ID space as `getRowId`. Only
|
|
@@ -246,7 +310,9 @@ export interface TableProps extends ComponentPropsWithoutRef<'table'> {
|
|
|
246
310
|
/**
|
|
247
311
|
* When true, renders the table inside a Panel with no padding. Automatically
|
|
248
312
|
* applies first-column spacing and removes the last row's bottom border so
|
|
249
|
-
* it doesn't double up against the footer border.
|
|
313
|
+
* it doesn't double up against the footer border. Has no effect at the
|
|
314
|
+
* mobile breakpoint (see `hasMobileCards`) — cards sit flush against the
|
|
315
|
+
* page background instead of inside a Panel.
|
|
250
316
|
*/
|
|
251
317
|
panel?: boolean;
|
|
252
318
|
/**
|
|
@@ -297,4 +363,4 @@ export interface TableProps extends ComponentPropsWithoutRef<'table'> {
|
|
|
297
363
|
*/
|
|
298
364
|
totalItemCount?: number;
|
|
299
365
|
}
|
|
300
|
-
export declare const Table: ({ className, closeDetailPanelLabel, columns, currentPage, defaultSortKey, defaultSortOrder, detailPanelNav, detailPanelTitle, detailPanelWidth, emptyState, emptyStateHeading, emptyStateMessage, footer, getPageSizeLabel, getRowClassName, getRowId, getRowSelectDisabledReason, getSelectRowLabel, getSortLabel, inspectedRowId, isLoading, isRowSelectable, itemsPerPage, loadingRowCount, maxHeight, minHeight, nextDetailPanelRowLabel, onDetailPanelNext, onDetailPanelPrev, onPageChange, onPageSizeChange, onRowInspect, onRowSelectionChange, onSort, pageSizeOptions, pageSizeSelectLabel, paginationLabels, panel, prevDetailPanelRowLabel, renderDetailPanel, renderDetailPanelFooter, rowData, selectAllLabel, selectedRows, sortKey, sortOrder, totalItemCount, ...props }: TableProps) => import("react/jsx-runtime").JSX.Element;
|
|
366
|
+
export declare const Table: ({ className, closeDetailPanelLabel, columns, currentPage, defaultSortKey, defaultSortOrder, detailPanelNav, detailPanelTitle, detailPanelWidth, emptyState, emptyStateHeading, emptyStateMessage, footer, getDetailPanelPositionLabel, getPageSizeLabel, getRowClassName, getRowId, getRowSelectDisabledReason, getSelectRowLabel, getSortLabel, hasMobileCards, hasMobileDetailSheet, inspectedRowId, isLoading, isRowSelectable, itemsPerPage, loadingRowCount, maxHeight, minHeight, nextDetailPanelRowLabel, onDetailPanelNext, onDetailPanelPrev, onPageChange, onPageSizeChange, onRowInspect, onRowSelectionChange, onSort, pageSizeOptions, pageSizeSelectLabel, paginationLabels, panel, prevDetailPanelRowLabel, renderDetailPanel, renderDetailPanelFooter, rowData, selectAllLabel, selectedRows, sortKey, sortOrder, totalItemCount, ...props }: TableProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -34,10 +34,11 @@ export interface MenuButtonProps extends ComponentPropsWithRef<'span'> {
|
|
|
34
34
|
* Opt in to swapping the trigger + floating dropdown panel for an inline
|
|
35
35
|
* accordion at the mobile breakpoint. Defaults to `false` — MenuButton
|
|
36
36
|
* always renders its normal trigger + dropdown otherwise, regardless of
|
|
37
|
-
* viewport.
|
|
38
|
-
* provides the accordion's expected layout (e.g. `Navbar`
|
|
39
|
-
*
|
|
40
|
-
*
|
|
37
|
+
* viewport. Set this explicitly when placing MenuButton inside a mobile
|
|
38
|
+
* nav menu that provides the accordion's expected layout (e.g. `Navbar`'s
|
|
39
|
+
* own mobile menu) — typically `isMobileAccordion={useIsMobile()}`, using
|
|
40
|
+
* the `useIsMobile` hook, so the swap only takes effect at the mobile
|
|
41
|
+
* breakpoint.
|
|
41
42
|
*/
|
|
42
43
|
isMobileAccordion?: boolean;
|
|
43
44
|
/**
|
|
@@ -83,9 +84,11 @@ export interface MenuButtonProps extends ComponentPropsWithRef<'span'> {
|
|
|
83
84
|
* Which variant of button to render. Not available in `iconOnly` mode.
|
|
84
85
|
* `navbar` is visually identical to `subtle` except it has no background
|
|
85
86
|
* at rest — only on hover/expanded — for triggers that sit directly on a
|
|
86
|
-
* nav/toolbar surface rather than a plain page background.
|
|
87
|
+
* nav/toolbar surface rather than a plain page background. `reverse-secondary`
|
|
88
|
+
* is for triggers on a dark/reverse surface — passed straight through to
|
|
89
|
+
* the underlying `Button`, which already supports it.
|
|
87
90
|
*/
|
|
88
|
-
variant?: Extract<ButtonVariant, 'primary' | 'secondary' | 'subtle'> | 'navbar';
|
|
91
|
+
variant?: Extract<ButtonVariant, 'primary' | 'secondary' | 'subtle' | 'reverse-secondary'> | 'navbar';
|
|
89
92
|
}
|
|
90
93
|
/**
|
|
91
94
|
* MenuButton UI component
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import './select-button.css';
|
|
2
|
+
/**
|
|
3
|
+
* A single option the SelectButton can choose between.
|
|
4
|
+
*/
|
|
5
|
+
export interface SelectButtonOption {
|
|
6
|
+
/**
|
|
7
|
+
* Whether this option is disabled.
|
|
8
|
+
*/
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Visible label for the option.
|
|
12
|
+
*/
|
|
13
|
+
label: string;
|
|
14
|
+
/**
|
|
15
|
+
* Unique value used for selection.
|
|
16
|
+
*/
|
|
17
|
+
value: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Prop types for SelectButton
|
|
21
|
+
*/
|
|
22
|
+
export interface SelectButtonProps {
|
|
23
|
+
/**
|
|
24
|
+
* Additional class names.
|
|
25
|
+
*/
|
|
26
|
+
className?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Disable the entire control.
|
|
29
|
+
*/
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* id applied to the trigger button.
|
|
33
|
+
*/
|
|
34
|
+
id?: string;
|
|
35
|
+
/**
|
|
36
|
+
* The dimension name shown in the trigger (e.g. "Sort").
|
|
37
|
+
*/
|
|
38
|
+
keyLabel: string;
|
|
39
|
+
/**
|
|
40
|
+
* Show the in-menu search input once the number of options reaches this
|
|
41
|
+
* threshold. Defaults to `8`. Set to `0` to always show it.
|
|
42
|
+
*/
|
|
43
|
+
minFilterItems?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Text shown when the search finds no matching options.
|
|
46
|
+
*/
|
|
47
|
+
noResultsText?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Called with the next value whenever the selection changes.
|
|
50
|
+
*/
|
|
51
|
+
onChange: (value: string) => void;
|
|
52
|
+
/**
|
|
53
|
+
* Options the user can choose between.
|
|
54
|
+
*/
|
|
55
|
+
options: SelectButtonOption[];
|
|
56
|
+
/**
|
|
57
|
+
* Accessible label for the search input.
|
|
58
|
+
*/
|
|
59
|
+
searchLabel?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Placeholder for the search input.
|
|
62
|
+
*/
|
|
63
|
+
searchPlaceholder?: string;
|
|
64
|
+
/**
|
|
65
|
+
* The currently selected value (controlled). Exactly one option is always
|
|
66
|
+
* selected — there is no "cleared" state.
|
|
67
|
+
*/
|
|
68
|
+
value: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* SelectButton — a trigger + menu for choosing exactly one value out of a
|
|
72
|
+
* small fixed set, for controls where a value is always active (e.g. sort
|
|
73
|
+
* field, group-by, time range, page size). Composes the same `Dropdown` +
|
|
74
|
+
* radio-item-with-checkmark pattern as `FilterButton`, but without
|
|
75
|
+
* `FilterButton`'s optional/clearable semantics — there is no empty state and
|
|
76
|
+
* no clear affordance, because unlike a filter, this kind of control can
|
|
77
|
+
* never have "nothing" selected.
|
|
78
|
+
*
|
|
79
|
+
* Selection is controlled: pass `value` and handle `onChange`.
|
|
80
|
+
*/
|
|
81
|
+
export declare const SelectButton: ({ className, disabled, id, keyLabel, minFilterItems, noResultsText, onChange, options, searchLabel, searchPlaceholder, value, }: SelectButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -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-26T17:15:13.189Z
|
|
7
7
|
*/
|
|
8
8
|
import { customIcons } from './custom-icons';
|
|
9
9
|
export { customIcons };
|
|
@@ -71,6 +71,13 @@ export declare const iconData: {
|
|
|
71
71
|
readonly svgPathData: "M360 512c13.3 0 24-10.7 24-24s-10.7-24-24-24L24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24l336 0zM175 377c9.4 9.4 24.6 9.4 33.9 0L345 241c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-95 95 0-278.1c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 278.1-95-95c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L175 377z";
|
|
72
72
|
readonly width: 384;
|
|
73
73
|
};
|
|
74
|
+
readonly arrowDownWideShort: {
|
|
75
|
+
readonly aliases: readonly ["sort descending", "sort z to a"];
|
|
76
|
+
readonly categories: readonly ["arrows", "data"];
|
|
77
|
+
readonly height: 512;
|
|
78
|
+
readonly svgPathData: "M249 369L145 473c-9.4 9.4-24.6 9.4-33.9 0L7 369c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l63 63 0-342.1c0-13.3 10.7-24 24-24s24 10.7 24 24l0 342.1 63-63c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zm63 111c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-48 0zm0-128c-13.3 0-24-10.7-24-24s10.7-24 24-24l112 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-112 0zm0-128c-13.3 0-24-10.7-24-24s10.7-24 24-24l176 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-176 0zm0-128c-13.3 0-24-10.7-24-24s10.7-24 24-24l240 0c13.3 0 24 10.7 24 24s-10.7 24-24 24L312 96z";
|
|
79
|
+
readonly width: 576;
|
|
80
|
+
};
|
|
74
81
|
readonly arrowLeft: {
|
|
75
82
|
readonly aliases: readonly ["back", "previous"];
|
|
76
83
|
readonly categories: readonly ["arrows", "navigation"];
|
|
@@ -92,6 +99,13 @@ export declare const iconData: {
|
|
|
92
99
|
readonly svgPathData: "M463 473c9.4 9.4 24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-31 31 0-270.1c0-53-43-96-96-96L280 32c-13.3 0-24 10.7-24 24s10.7 24 24 24l128 0c26.5 0 48 21.5 48 48l0 270.1-31-31c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72zM113 39c-9.4-9.4-24.6-9.4-33.9 0L7 111c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l31-31 0 270.1c0 53 43 96 96 96l128 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-128 0c-26.5 0-48-21.5-48-48l0-270.1 31 31c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L113 39z";
|
|
93
100
|
readonly width: 576;
|
|
94
101
|
};
|
|
102
|
+
readonly arrowUpShortWide: {
|
|
103
|
+
readonly aliases: readonly ["sort ascending", "sort a to z"];
|
|
104
|
+
readonly categories: readonly ["arrows", "data"];
|
|
105
|
+
readonly height: 512;
|
|
106
|
+
readonly svgPathData: "M145 39c-9.4-9.4-24.6-9.4-33.9 0L7 143c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l63-63 0 342.1c0 13.3 10.7 24 24 24s24-10.7 24-24l0-342.1 63 63c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L145 39zm167 9c-13.3 0-24 10.7-24 24s10.7 24 24 24l48 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-48 0zm0 128c-13.3 0-24 10.7-24 24s10.7 24 24 24l112 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-112 0zm0 128c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0zm0 128c-13.3 0-24 10.7-24 24s10.7 24 24 24l240 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-240 0z";
|
|
107
|
+
readonly width: 576;
|
|
108
|
+
};
|
|
95
109
|
readonly asterisk: {
|
|
96
110
|
readonly aliases: readonly ["required", "star"];
|
|
97
111
|
readonly categories: readonly ["objects"];
|
|
@@ -1619,7 +1633,7 @@ export declare const iconData: {
|
|
|
1619
1633
|
readonly width: 576;
|
|
1620
1634
|
};
|
|
1621
1635
|
};
|
|
1622
|
-
export declare const iconList: readonly ["angleDown", "angleLeft", "angleRight", "anglesDown", "anglesLeft", "anglesRight", "anglesUp", "angleUp", "arrowDownToLine", "arrowLeft", "arrowRight", "arrowsRetweet", "asterisk", "banBug", "bars", "barsFilter", "barsStaggered", "bell", "billboard", "bitbucket", "bluesky", "bolt", "boltPantheon", "boltSolid", "book", "bookmark", "bookmarkSolid", "books", "box", "bracketRight", "bracketsSquare", "brainCircuit", "broomWide", "building", "buildings", "bullhorn", "calendarDays", "caretDown", "caretLeft", "caretRight", "caretUp", "ccAmex", "ccApplePay", "ccDiscover", "ccGeneric", "ccMC", "ccPaypal", "ccVisa", "chartLine", "chartNetwork", "chartSimple", "check", "circle", "circleCheck", "circleExclamation", "circleExclamationSolid", "circleHalfStroke", "circleInfo", "circleInfoSolid", "circleMinus", "circleNotch", "circlePlus", "circleQuestion", "circleQuestionSolid", "circleUser", "circleXmark", "claude", "clock", "cloud", "cloudArrowDown", "cloudArrowUp", "cloudPlus", "code", "codeBranch", "codeMerge", "collapseToCenter", "command", "comment", "compress", "copy", "desktop", "diagramVenn", "diamondExclamation", "diamonds4", "discourse", "display", "dollarSign", "download", "drupal", "ellipsis", "ellipsisVertical", "emptySet", "envelope", "envelopeOpen", "exclamation", "expand", "expandFromCenter", "externalLink", "eye", "eyeSlash", "facebook", "file", "fileCheck", "fileContract", "fileCSV", "fileDiff", "fileExport", "fileImport", "fileLines", "filePDF", "fileZip", "floppyDisk", "folder", "folderTree", "gear", "gem", "github", "gitlab", "globe", "graduationCap", "grid", "grid2", "gripDots", "gripDotsVertical", "heart", "heartSolid", "house", "idCard", "image", "inputText", "instagram", "keySkeleton", "landmark", "laptop", "laptopCode", "leaf", "lifeRing", "link", "linkedin", "listCheck", "locationCrosshairs", "lock", "lockOpen", "magnifyingGlass", "medal", "memo", "messages", "minus", "moon", "move", "nextJs", "octagonExclamation", "openai", "paperclip", "paperPlane", "pause", "pen", "penField", "penPaintbrush", "phone", "play", "plus", "question", "quotesLeft", "quotesRight", "rectangleList", "reply", "robot", "rocketLaunch", "rotate", "rotateClock", "rotateLeft", "rotateRight", "rss", "save", "server", "shareNodes", "shield", "shieldQuartered", "shovel", "sidebar", "siren", "sirenOn", "sitemap", "slack", "slashForward", "slider", "slidersSimple", "snowflake", "sparkles", "squareCheck", "squareCode", "squareDashed", "squareMinus", "squarePen", "squareQuestion", "squareTerminal", "star", "starSolid", "sun", "sunBright", "table", "tableColumns", "tableRows", "terminal", "text", "threads", "thumbsDown", "thumbsUp", "trash", "triangleExclamation", "twitter", "unlink", "upload", "user", "userAstronaut", "userGear", "userPlus", "users", "userSolid", "video", "wavePulse", "windowRestore", "wordpress", "wreathLaurel", "wrench", "xmark", "xmarkLarge", "xTwitter", "youtube"];
|
|
1636
|
+
export declare const iconList: readonly ["angleDown", "angleLeft", "angleRight", "anglesDown", "anglesLeft", "anglesRight", "anglesUp", "angleUp", "arrowDownToLine", "arrowDownWideShort", "arrowLeft", "arrowRight", "arrowsRetweet", "arrowUpShortWide", "asterisk", "banBug", "bars", "barsFilter", "barsStaggered", "bell", "billboard", "bitbucket", "bluesky", "bolt", "boltPantheon", "boltSolid", "book", "bookmark", "bookmarkSolid", "books", "box", "bracketRight", "bracketsSquare", "brainCircuit", "broomWide", "building", "buildings", "bullhorn", "calendarDays", "caretDown", "caretLeft", "caretRight", "caretUp", "ccAmex", "ccApplePay", "ccDiscover", "ccGeneric", "ccMC", "ccPaypal", "ccVisa", "chartLine", "chartNetwork", "chartSimple", "check", "circle", "circleCheck", "circleExclamation", "circleExclamationSolid", "circleHalfStroke", "circleInfo", "circleInfoSolid", "circleMinus", "circleNotch", "circlePlus", "circleQuestion", "circleQuestionSolid", "circleUser", "circleXmark", "claude", "clock", "cloud", "cloudArrowDown", "cloudArrowUp", "cloudPlus", "code", "codeBranch", "codeMerge", "collapseToCenter", "command", "comment", "compress", "copy", "desktop", "diagramVenn", "diamondExclamation", "diamonds4", "discourse", "display", "dollarSign", "download", "drupal", "ellipsis", "ellipsisVertical", "emptySet", "envelope", "envelopeOpen", "exclamation", "expand", "expandFromCenter", "externalLink", "eye", "eyeSlash", "facebook", "file", "fileCheck", "fileContract", "fileCSV", "fileDiff", "fileExport", "fileImport", "fileLines", "filePDF", "fileZip", "floppyDisk", "folder", "folderTree", "gear", "gem", "github", "gitlab", "globe", "graduationCap", "grid", "grid2", "gripDots", "gripDotsVertical", "heart", "heartSolid", "house", "idCard", "image", "inputText", "instagram", "keySkeleton", "landmark", "laptop", "laptopCode", "leaf", "lifeRing", "link", "linkedin", "listCheck", "locationCrosshairs", "lock", "lockOpen", "magnifyingGlass", "medal", "memo", "messages", "minus", "moon", "move", "nextJs", "octagonExclamation", "openai", "paperclip", "paperPlane", "pause", "pen", "penField", "penPaintbrush", "phone", "play", "plus", "question", "quotesLeft", "quotesRight", "rectangleList", "reply", "robot", "rocketLaunch", "rotate", "rotateClock", "rotateLeft", "rotateRight", "rss", "save", "server", "shareNodes", "shield", "shieldQuartered", "shovel", "sidebar", "siren", "sirenOn", "sitemap", "slack", "slashForward", "slider", "slidersSimple", "snowflake", "sparkles", "squareCheck", "squareCode", "squareDashed", "squareMinus", "squarePen", "squareQuestion", "squareTerminal", "star", "starSolid", "sun", "sunBright", "table", "tableColumns", "tableRows", "terminal", "text", "threads", "thumbsDown", "thumbsUp", "trash", "triangleExclamation", "twitter", "unlink", "upload", "user", "userAstronaut", "userGear", "userPlus", "users", "userSolid", "video", "wavePulse", "windowRestore", "wordpress", "wreathLaurel", "wrench", "xmark", "xmarkLarge", "xTwitter", "youtube"];
|
|
1623
1637
|
export type PDSIconName = (typeof iconList)[number];
|
|
1624
1638
|
export declare const categoryList: readonly ["actions", "arrows", "brands", "communication", "custom", "data", "development", "documents", "financial", "media", "navigation", "objects", "security", "status", "users"];
|
|
1625
1639
|
export type IconCategory = (typeof categoryList)[number];
|
|
@@ -47,10 +47,11 @@ export interface UserMenuProps extends ComponentPropsWithoutRef<'span'> {
|
|
|
47
47
|
* Opt in to swapping the trigger + floating dropdown panel for an inline
|
|
48
48
|
* accordion at the mobile breakpoint. Defaults to `false` — UserMenu
|
|
49
49
|
* always renders its normal trigger + dropdown otherwise, regardless of
|
|
50
|
-
* viewport.
|
|
51
|
-
* provides the accordion's expected layout (e.g. `Navbar`
|
|
52
|
-
*
|
|
53
|
-
*
|
|
50
|
+
* viewport. Set this explicitly when placing UserMenu inside a mobile nav
|
|
51
|
+
* menu that provides the accordion's expected layout (e.g. `Navbar`'s own
|
|
52
|
+
* mobile menu) — typically `isMobileAccordion={useIsMobile()}`, using the
|
|
53
|
+
* `useIsMobile` hook, so the swap only takes effect at the mobile
|
|
54
|
+
* breakpoint.
|
|
54
55
|
*/
|
|
55
56
|
isMobileAccordion?: boolean;
|
|
56
57
|
/**
|
|
@@ -69,10 +69,11 @@ export interface WorkspaceSelectorProps extends ComponentPropsWithoutRef<'span'>
|
|
|
69
69
|
* Opt in to swapping the trigger + floating dropdown panel for an inline
|
|
70
70
|
* accordion at the mobile breakpoint. Defaults to `false` — WorkspaceSelector
|
|
71
71
|
* always renders its normal trigger + dropdown otherwise, regardless of
|
|
72
|
-
* viewport.
|
|
73
|
-
* provides the accordion's expected layout (e.g.
|
|
74
|
-
*
|
|
75
|
-
*
|
|
72
|
+
* viewport. Set this explicitly when placing WorkspaceSelector inside a
|
|
73
|
+
* mobile nav menu that provides the accordion's expected layout (e.g.
|
|
74
|
+
* `Navbar`'s own mobile menu) — typically `isMobileAccordion={useIsMobile()}`,
|
|
75
|
+
* using the `useIsMobile` hook, so the swap only takes effect at the
|
|
76
|
+
* mobile breakpoint.
|
|
76
77
|
*/
|
|
77
78
|
isMobileAccordion?: boolean;
|
|
78
79
|
/**
|
|
@@ -40,6 +40,12 @@ export interface SectionMessageProps extends ComponentPropsWithoutRef<'div'> {
|
|
|
40
40
|
* Callback function when message is dismissed.
|
|
41
41
|
*/
|
|
42
42
|
onDismiss?: (event: MouseEvent<HTMLButtonElement>, id: string) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Props for an optional secondary action, rendered before `ctaButton` so the
|
|
45
|
+
* more prominent action sits on the outside. Can include any Button props
|
|
46
|
+
* except for size. Defaults to the `link` variant.
|
|
47
|
+
*/
|
|
48
|
+
secondaryCta?: ComponentPropsWithoutRef<typeof Button>;
|
|
43
49
|
/**
|
|
44
50
|
* Message title.
|
|
45
51
|
*/
|
|
@@ -56,5 +62,5 @@ export interface SectionMessageProps extends ComponentPropsWithoutRef<'div'> {
|
|
|
56
62
|
/**
|
|
57
63
|
* SectionMessage UI component
|
|
58
64
|
*/
|
|
59
|
-
export declare const SectionMessage: ({ className, ctaButton, ctaIcon, dismissLabel, id, isDismissible, message, onDismiss, title, type, typeLabels, ...props }: SectionMessageProps) => import("react/jsx-runtime").JSX.Element;
|
|
65
|
+
export declare const SectionMessage: ({ className, ctaButton, ctaIcon, dismissLabel, id, isDismissible, message, onDismiss, secondaryCta, title, type, typeLabels, ...props }: SectionMessageProps) => import("react/jsx-runtime").JSX.Element;
|
|
60
66
|
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
+
import './bottom-sheet.css';
|
|
3
|
+
export interface BottomSheetProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {
|
|
4
|
+
/**
|
|
5
|
+
* Aria label that describes the sheet. Falls back to `title` if not provided.
|
|
6
|
+
*/
|
|
7
|
+
ariaLabel?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Main content for the sheet. Pass a `slot="footer"` child for footer content
|
|
10
|
+
* (e.g. Prev/Next navigation), same pattern as `Drawer`.
|
|
11
|
+
*/
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
/**
|
|
14
|
+
* Additional class names
|
|
15
|
+
*/
|
|
16
|
+
className?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Text for the close button's aria-label attribute. Defaults to `'Close'`.
|
|
19
|
+
*/
|
|
20
|
+
closeButtonLabel?: string;
|
|
21
|
+
/**
|
|
22
|
+
* If true, clicking the scrim will not close the sheet.
|
|
23
|
+
*/
|
|
24
|
+
disableOutsideClick?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Height while expanded (dragged past the expand threshold, or the grabber
|
|
27
|
+
* tapped/activated once). Accepts any valid CSS value. Defaults to `'96dvh'`.
|
|
28
|
+
* Pass `null` to disable expansion entirely — the sheet can then only be
|
|
29
|
+
* dragged smaller (toward dismissal), never past its default `height`.
|
|
30
|
+
*/
|
|
31
|
+
expandedHeight?: string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Indicates if the built-in close button will be shown.
|
|
34
|
+
*/
|
|
35
|
+
hasCloseButton?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Default (collapsed) height. Accepts any valid CSS value. Defaults to `'62dvh'`.
|
|
38
|
+
*/
|
|
39
|
+
height?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Is the sheet open?
|
|
42
|
+
*/
|
|
43
|
+
isOpen?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Accessible label for the drag handle. Dragging resizes the sheet, but
|
|
46
|
+
* that's a pointer-only enhancement — for keyboard/screen reader users,
|
|
47
|
+
* activating this handle (Enter/Space) closes the sheet outright, the
|
|
48
|
+
* same as dragging it down past the dismiss threshold. Defaults to
|
|
49
|
+
* `'Close sheet'`.
|
|
50
|
+
*/
|
|
51
|
+
resizeLabel?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Function to set the sheet's open state.
|
|
54
|
+
*/
|
|
55
|
+
setIsOpen?: (isOpen: boolean) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Title for the sheet. Accepts a string or ReactNode. Leave empty for no title.
|
|
58
|
+
*/
|
|
59
|
+
title?: ReactNode;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* BottomSheet UI component. A mobile-oriented overlay that slides up from the
|
|
63
|
+
* bottom of the viewport, with a draggable handle to resize between a default
|
|
64
|
+
* and an expanded height, or drag down past a threshold to dismiss.
|
|
65
|
+
*/
|
|
66
|
+
export declare const BottomSheet: ({ ariaLabel, children, className, closeButtonLabel, disableOutsideClick, expandedHeight, hasCloseButton, height, isOpen: isOpenProp, resizeLabel, setIsOpen: setIsOpenProp, title, ...props }: BottomSheetProps) => any;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
+
import './bulk-action-bar.css';
|
|
3
|
+
/**
|
|
4
|
+
* Prop types for BulkActionBar
|
|
5
|
+
*/
|
|
6
|
+
export interface BulkActionBarProps extends ComponentPropsWithoutRef<'div'> {
|
|
7
|
+
/**
|
|
8
|
+
* Action content (e.g. `MenuButton`s) rendered between the count and the
|
|
9
|
+
* clear button. Not opinionated about what it contains — this component
|
|
10
|
+
* only owns the count, the clear button, and the surrounding chrome.
|
|
11
|
+
* Since the bar always renders on a reverse (dark) surface, content
|
|
12
|
+
* should use variants suited to that — e.g. `MenuButton`'s
|
|
13
|
+
* `reverse-secondary`, `IconButton`'s `reverse`.
|
|
14
|
+
*/
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
/**
|
|
17
|
+
* Additional class names
|
|
18
|
+
*/
|
|
19
|
+
className?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Accessible label for the built-in clear button. Defaults to `'Clear
|
|
22
|
+
* selection'`. Override for translation.
|
|
23
|
+
*/
|
|
24
|
+
clearLabel?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Number of items currently selected.
|
|
27
|
+
*/
|
|
28
|
+
count: number;
|
|
29
|
+
/**
|
|
30
|
+
* Returns the visible count label. Defaults to `(count) => \`${count} selected\``.
|
|
31
|
+
* Override for translation, or to describe what's selected (e.g. "3 sites selected").
|
|
32
|
+
*/
|
|
33
|
+
getCountLabel?: (count: number) => string;
|
|
34
|
+
/**
|
|
35
|
+
* Called when the clear button is activated. Typically clears the
|
|
36
|
+
* selection; whether that also exits any "select mode" the consumer has
|
|
37
|
+
* is up to them — this component has no opinion on that state.
|
|
38
|
+
*/
|
|
39
|
+
onClear: () => void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* BulkActionBar UI component — a floating bar that surfaces a selection
|
|
43
|
+
* count and bulk actions once at least one item is selected. Pinned to the
|
|
44
|
+
* bottom of the viewport, content scrolls behind it. Mounting/unmounting
|
|
45
|
+
* based on selection state is the consumer's responsibility; this component
|
|
46
|
+
* always renders what it's given.
|
|
47
|
+
*/
|
|
48
|
+
export declare const BulkActionBar: ({ children, className, clearLabel, count, getCountLabel, onClear, ...props }: BulkActionBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentPropsWithoutRef } from 'react';
|
|
2
2
|
import { HeadingLevelCommon } from '../../../libs/types/custom-types';
|
|
3
3
|
import './pagination-compact.css';
|
|
4
|
-
export type PaginationCompactPageControlType = 'dropdown' | 'input';
|
|
4
|
+
export type PaginationCompactPageControlType = 'dropdown' | 'input' | 'static';
|
|
5
5
|
/**
|
|
6
6
|
* Prop types for PaginationCompact
|
|
7
7
|
*/
|
|
@@ -48,7 +48,12 @@ export interface PaginationCompactProps extends ComponentPropsWithoutRef<'nav'>
|
|
|
48
48
|
*/
|
|
49
49
|
onPageChange?: (page: number) => void;
|
|
50
50
|
/**
|
|
51
|
-
* Which control to use for jumping to a page: a dropdown select or a typed
|
|
51
|
+
* Which control to use for jumping to a page: a dropdown select or a typed
|
|
52
|
+
* number input. `'static'` renders the current page as plain text instead
|
|
53
|
+
* — no direct jump-to-page at all, just Prev/Next — for contexts where
|
|
54
|
+
* that control isn't worth the space (e.g. a mobile card list, where
|
|
55
|
+
* search/filter is the more realistic way to narrow a large result set
|
|
56
|
+
* down, not paging through it one page at a time). Defaults to `'dropdown'`.
|
|
52
57
|
*/
|
|
53
58
|
pageControlType?: PaginationCompactPageControlType;
|
|
54
59
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer pds-v1, pds-v2;@layer pds-v2{.pds-bottom-sheet__wrapper{inset:0;position:fixed;z-index:var(--pds-z-index-modal)}.pds-bottom-sheet__scrim{background-color:var(--pds-color-overlay-subtle);inset:0;opacity:0;position:fixed;transition:opacity .3s ease}.pds-bottom-sheet__scrim--visible{opacity:1}.pds-bottom-sheet{background-color:var(--pds-color-surface-default);border-radius:var(--pds-border-radius-panel) var(--pds-border-radius-panel) 0 0;bottom:0;box-shadow:var(--pds-elevation-overlay);display:flex;flex-direction:column;height:var(--pds-bottom-sheet-height,62dvh);left:0;max-height:96dvh;overflow:hidden;position:fixed;right:0;transform:translateY(105%);transition:height .2s var(--pds-animation-timing-function-default),transform .3s var(--pds-animation-timing-function-default)}.pds-bottom-sheet--open{transform:translateY(0)}.pds-bottom-sheet--expanded{height:var(--pds-bottom-sheet-expanded-height,96dvh)}.pds-bottom-sheet--dragging{transition:none}.pds-bottom-sheet__header{border-block-end:1px solid var(--pds-color-border-default);flex-shrink:0;padding:var(--pds-spacing-s) var(--pds-spacing-l) var(--pds-spacing-m);position:relative}.pds-bottom-sheet__grabber{background:transparent;border:0;cursor:grab;inset:0;position:absolute;touch-action:none;-webkit-user-select:none;user-select:none}.pds-bottom-sheet__grabber:active{cursor:grabbing}.pds-bottom-sheet__grabber:focus{outline:none}.pds-bottom-sheet__grabber-bar{background-color:var(--pds-color-border-default);border-radius:var(--pds-border-radius-button);display:block;height:.3125rem;margin-block-end:var(--pds-spacing-2xs);margin-inline:auto;width:2.75rem}.pds-bottom-sheet__grabber:focus-visible~.pds-bottom-sheet__grabber-bar{outline:2px solid var(--pds-color-interactive-foreground-current);outline-offset:2px}.pds-bottom-sheet__title-row{align-items:center;display:flex;gap:var(--pds-spacing-s);justify-content:flex-end}.pds-bottom-sheet__title{flex:1;font-family:var(--pds-typography-ff-compact);font-size:var(--pds-typography-size-l);font-weight:var(--pds-typography-fw-semibold);line-height:var(--pds-typography-lh-s)}.pds-bottom-sheet__close-button{position:relative}.pds-bottom-sheet__content{flex:1;overflow-y:auto;padding:var(--pds-spacing-m) var(--pds-spacing-l) var(--pds-spacing-l)}.pds-bottom-sheet__footer{align-items:center;border-top:1px solid var(--pds-color-border-default);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--pds-spacing-m) var(--pds-spacing-l)}.pds-bottom-sheet__footer>*{width:100%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer pds-v1, pds-v2;@layer pds-v2{.pds-bulk-action-bar{align-items:center;background-color:var(--pds-color-surface-reverse);border:var(--pds-border-width-default) solid var(--pds-color-surface-reverse);border-radius:var(--pds-border-radius-card);bottom:var(--pds-spacing-m);box-shadow:var(--pds-elevation-overlay);display:flex;flex-wrap:wrap;gap:var(--pds-spacing-s);left:50%;padding:var(--pds-spacing-s) var(--pds-spacing-m);position:fixed;transform:translateX(-50%);width:calc(100% - var(--pds-spacing-xl));z-index:10}.pds-bulk-action-bar__count{color:var(--pds-color-foreground-reverse);flex-shrink:0;font-size:var(--pds-typography-size-s)}.pds-bulk-action-bar__actions{display:flex;flex-wrap:wrap;gap:var(--pds-spacing-s);margin-inline-start:auto}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
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__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
|
-
.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-
|
|
2
|
+
.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}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer pds-v1, pds-v2;@layer pds-v2{.pds-filter-button{--fb-bg:var(--pds-color-button-secondary-background-default);--fb-bg-hover:var(--pds-color-button-secondary-background-hover);--fb-border:var(--pds-color-button-secondary-border);--fb-clear-size:1.5rem;--fb-fg:var(--pds-color-button-secondary-foreground-default)}.pds-filter-button__panel{min-width:12rem;width:max-content}.pds-filter-button--has-search .pds-filter-button__panel{min-width:14rem}.pds-filter-button__trigger{background:var(--fb-bg);block-size:var(--pds-spacing-button-height-s);border:var(--pds-border-width-default) solid var(--fb-border);border-radius:var(--pds-border-radius-button);color:var(--fb-fg);font-family:var(--pds-typography-ff-default);font-size:var(--pds-typography-size-s);gap:var(--pds-spacing-3xs);padding-block:0;padding-inline-end:var(--pds-spacing-s);padding-inline-start:calc(var(--pds-spacing-s) + var(--pds-spacing-5xs));white-space:nowrap}.pds-filter-button__trigger:hover{background-color:var(--fb-bg-hover)}.pds-filter-button--multiple .pds-filter-button__trigger,.pds-filter-button--single .pds-filter-button__trigger{padding-inline-start:calc(var(--pds-spacing-s) + var(--fb-clear-size) + var(--pds-spacing-4xs))}.pds-filter-button__label{align-items:center;display:inline-flex;gap:var(--pds-spacing-3xs)}.pds-filter-button__divider{background-color:var(--pds-color-border-separator);block-size:.75rem;inline-size:var(--pds-border-width-default)}.pds-filter-button__clear{align-items:center;background:transparent;block-size:var(--fb-clear-size);border:none;border-radius:50%;color:var(--fb-fg);cursor:pointer;display:inline-flex;inline-size:var(--fb-clear-size);inset-block-start:50%;inset-inline-start:var(--pds-spacing-s);justify-content:center;padding:var(--pds-spacing-5xs);position:absolute;transform:translateY(-50%)}.pds-filter-button__clear:hover{background-color:var(--fb-bg-hover)}.pds-filter-button__clear:focus-visible{outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:0}.pds-filter-button__clear:disabled{cursor:not-allowed;opacity:.5}}
|
|
1
|
+
@layer pds-v1, pds-v2;@layer pds-v2{.pds-filter-button{--fb-bg:var(--pds-color-button-secondary-background-default);--fb-bg-hover:var(--pds-color-button-secondary-background-hover);--fb-border:var(--pds-color-button-secondary-border);--fb-clear-size:1.5rem;--fb-fg:var(--pds-color-button-secondary-foreground-default)}.pds-filter-button__panel{min-width:12rem;width:max-content}.pds-filter-button--has-search .pds-filter-button__panel{min-width:14rem}.pds-filter-button__trigger{background:var(--fb-bg);block-size:var(--pds-spacing-button-height-s);border:var(--pds-border-width-default) solid var(--fb-border);border-radius:var(--pds-border-radius-button);color:var(--fb-fg);font-family:var(--pds-typography-ff-default);font-size:var(--pds-typography-size-s);gap:var(--pds-spacing-3xs);padding-block:0;padding-inline-end:var(--pds-spacing-s);padding-inline-start:calc(var(--pds-spacing-s) + var(--pds-spacing-5xs));white-space:nowrap}.pds-filter-button__trigger:hover{background-color:var(--fb-bg-hover)}.pds-filter-button__trigger:disabled{cursor:not-allowed;opacity:40%}.pds-filter-button--multiple .pds-filter-button__trigger,.pds-filter-button--single .pds-filter-button__trigger{padding-inline-start:calc(var(--pds-spacing-s) + var(--fb-clear-size) + var(--pds-spacing-4xs))}.pds-filter-button__label{align-items:center;display:inline-flex;gap:var(--pds-spacing-3xs)}.pds-filter-button__divider{background-color:var(--pds-color-border-separator);block-size:.75rem;inline-size:var(--pds-border-width-default)}.pds-filter-button__clear{align-items:center;background:transparent;block-size:var(--fb-clear-size);border:none;border-radius:50%;color:var(--fb-fg);cursor:pointer;display:inline-flex;inline-size:var(--fb-clear-size);inset-block-start:50%;inset-inline-start:var(--pds-spacing-s);justify-content:center;padding:var(--pds-spacing-5xs);position:absolute;transform:translateY(-50%)}.pds-filter-button__clear:hover{background-color:var(--fb-bg-hover)}.pds-filter-button__clear:focus-visible{outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus);outline-offset:0}.pds-filter-button__clear:disabled{cursor:not-allowed;opacity:.5}}
|
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
@layer pds-v1, pds-v2;@layer pds-v2{.pds-icon-button{--icon-button-size:var(--pds-spacing-button-height-s);--icon-button-
|
|
2
|
-
--pds-color-
|
|
1
|
+
@layer pds-v1, pds-v2;@layer pds-v2{.pds-icon-button{--icon-button-size:var(--pds-spacing-button-height-s);--icon-button-background:var(
|
|
2
|
+
--pds-color-button-secondary-background-default
|
|
3
3
|
);--icon-button-background-hover:var(
|
|
4
|
-
--pds-color-
|
|
5
|
-
);--icon-button-border:var(--pds-color-
|
|
6
|
-
--pds-color-
|
|
7
|
-
)
|
|
8
|
-
--pds-color-
|
|
4
|
+
--pds-color-button-secondary-background-hover
|
|
5
|
+
);--icon-button-border:var(--pds-color-button-secondary-border);--icon-button-border-hover:var(--pds-color-button-secondary-border);--icon-button-foreground:var(
|
|
6
|
+
--pds-color-button-secondary-foreground-default
|
|
7
|
+
);background-color:var(--icon-button-background);border:var(--pds-border-width-default) solid transparent;border-radius:var(--pds-border-radius-input);box-sizing:border-box;color:var(--icon-button-foreground);cursor:pointer;height:var(--icon-button-size);text-decoration:none;transition:var(--pds-animation-transition-button);width:var(--icon-button-size)}.pds-icon-button,.pds-icon-button__content{align-items:center;display:flex;justify-content:center}.pds-icon-button__content{align-content:stretch;height:100%}.pds-icon-button:disabled{cursor:not-allowed;opacity:70%}.pds-icon-button:disabled .pds-icon-button__content{opacity:30%}.pds-icon-button:hover:enabled,a.pds-icon-button:hover{background-color:var(--icon-button-background-hover);color:var(--icon-button-foreground);text-decoration:none}.pds-icon-button--has-border{border-color:var(--icon-button-border)}.pds-icon-button--has-border:hover:enabled,a.pds-icon-button--has-border:hover{border-color:var(--icon-button-border-hover)}.pds-icon-button:focus-visible{outline:var(--pds-border-width-outline) solid var(--pds-color-interactive-focus)}.pds-icon-button--reverse{--icon-button-background:var(
|
|
8
|
+
--pds-color-button-reverse-secondary-background-default
|
|
9
9
|
);--icon-button-background-hover:var(
|
|
10
|
-
--pds-color-
|
|
11
|
-
);--icon-button-border:var(--pds-color-
|
|
12
|
-
--pds-color-
|
|
10
|
+
--pds-color-button-reverse-secondary-background-hover
|
|
11
|
+
);--icon-button-border:var(--pds-color-button-reverse-secondary-border);--icon-button-border-hover:var(--pds-color-button-reverse-secondary-border);--icon-button-foreground:var(
|
|
12
|
+
--pds-color-button-reverse-secondary-foreground
|
|
13
|
+
)}.pds-icon-button--reverse:focus-visible{outline-color:var(--pds-color-interactive-reverse-focus)}.pds-icon-button--critical{--icon-button-background:var(
|
|
14
|
+
--pds-color-button-critical-secondary-background-default
|
|
13
15
|
);--icon-button-background-hover:var(
|
|
14
|
-
--pds-color-
|
|
15
|
-
);--icon-button-border:var(
|
|
16
|
-
--pds-color-
|
|
17
|
-
);--icon-button-
|
|
16
|
+
--pds-color-button-critical-secondary-background-hover
|
|
17
|
+
);--icon-button-border:var(
|
|
18
|
+
--pds-color-button-critical-secondary-border-default
|
|
19
|
+
);--icon-button-border-hover:var(
|
|
20
|
+
--pds-color-button-critical-secondary-border-hover
|
|
21
|
+
);--icon-button-foreground:var(
|
|
22
|
+
--pds-color-button-critical-secondary-foreground
|
|
23
|
+
)}.pds-icon-button--pressed:not(.pds-icon-button--critical),.pds-icon-button--pressed:not(.pds-icon-button--critical):hover:enabled{background-color:var(--icon-button-border);border-color:var(--icon-button-border);box-shadow:var(--pds-elevation-icon-button-pressed)}.pds-icon-button:active:enabled,a.pds-icon-button:active{background-color:var(--pds-color-button-secondary-background-active);box-shadow:var(--pds-elevation-button-secondary-active)}.pds-icon-button--critical:active:enabled,a.pds-icon-button--critical:active{background-color:var(
|
|
18
24
|
--pds-color-button-critical-secondary-background-active
|
|
19
|
-
);box-shadow:var(--pds-elevation-button-critical-secondary-active)}.pds-icon-button--
|
|
25
|
+
);box-shadow:var(--pds-elevation-button-critical-secondary-active)}.pds-icon-button--reverse:active:enabled,a.pds-icon-button--reverse:active{background-color:var(--pds-color-button-reverse-secondary-background-active);box-shadow:var(--pds-elevation-button-reverse-secondary-active)}.pds-icon-button--m{--icon-button-size:var(--pds-spacing-button-height-m)}.pds-icon-button__icon-wrapper{align-items:center;display:flex;justify-content:center;position:absolute}.pds-icon-button--fadeOut{-webkit-animation:scale-down-center .4s cubic-bezier(.25,.46,.45,.94) both;animation:scale-down-center .4s cubic-bezier(.25,.46,.45,.94) both;opacity:0;transition:.2s ease-in}.pds-icon-button--hide{display:none}.pds-icon-button--scaleIn{-webkit-animation:scale-in-center .2s cubic-bezier(.175,.885,.32,1.275) both;animation:scale-in-center .2s cubic-bezier(.175,.885,.32,1.275) both}.pds-icon--copy.pds-icon--copy.pds-icon-button__icon{transform:translateX(8%) translateY(-2%)}@keyframes scale-in-center{0%{opacity:1;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}}
|