@kcascend/liquid-ui 0.0.5 → 0.0.6
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/README.md +66 -66
- package/dist/components/DataTable/DataTable.d.ts +1 -1
- package/dist/components/DataTable/DataTable.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.js +12 -12
- package/dist/components/GridLayout/layoutPatterns.d.ts +5 -2
- package/dist/components/GridLayout/layoutPatterns.d.ts.map +1 -1
- package/dist/components/GridLayout/layoutPatterns.js +227 -0
- package/dist/components/HeaderShell/HeaderShell.d.ts +1 -1
- package/dist/components/HeaderShell/HeaderShell.d.ts.map +1 -1
- package/dist/components/HeaderShell/HeaderShell.js +46 -17
- package/dist/governance/gridLayoutGovernance.d.ts.map +1 -1
- package/dist/governance/gridLayoutGovernance.js +6 -5
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/styles.css +3682 -3658
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +33 -33
package/README.md
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
# Liquid UI Package
|
|
2
|
-
|
|
3
|
-
`@kcascend/liquid-ui` is the reusable UI package for Liquid Design System consumers.
|
|
4
|
-
|
|
5
|
-
## Local development
|
|
6
|
-
|
|
7
|
-
1. Run `npm install` from the repository root to install the local file dependency.
|
|
8
|
-
2. Run `npm run build:ui` to rebuild the package outputs in `packages/liquid-ui/dist`.
|
|
9
|
-
3. Run `npm run storybook` to rebuild the package and launch Storybook against the package boundary.
|
|
10
|
-
|
|
11
|
-
## Grid usage
|
|
12
|
-
|
|
13
|
-
The package exposes a grid primitive through `GridLayout` and `GridColumn`, plus an approved layout catalog for application shells and content regions.
|
|
14
|
-
|
|
15
|
-
```tsx
|
|
16
|
-
import {
|
|
17
|
-
approvedContentLayoutPatterns,
|
|
18
|
-
GridColumn,
|
|
19
|
-
GridLayout,
|
|
20
|
-
} from '@kcascend/liquid-ui';
|
|
21
|
-
|
|
22
|
-
export function Example() {
|
|
23
|
-
const layout = approvedContentLayoutPatterns.sidebarEnd;
|
|
24
|
-
|
|
25
|
-
return (
|
|
26
|
-
<GridLayout as="div">
|
|
27
|
-
<GridColumn {...layout.regions.primary}>Primary</GridColumn>
|
|
28
|
-
<GridColumn {...layout.regions.secondary}>Secondary</GridColumn>
|
|
29
|
-
</GridLayout>
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Supported layout features:
|
|
35
|
-
|
|
36
|
-
- Responsive spans through `sm`, `md`, `lg`, `xlg`, and `max`.
|
|
37
|
-
- Offset columns with object values like `md={{ span: 4, offset: 2 }}`.
|
|
38
|
-
- Gutter modes with `narrow` and `condensed`.
|
|
39
|
-
- `withRowGap` to keep vertical spacing aligned with the active gutter.
|
|
40
|
-
- `fullWidth` for viewport-spanning layouts.
|
|
41
|
-
- `subgrid` for nested grids that inherit the parent column scaffold.
|
|
42
|
-
- Auto columns when a `GridColumn` is rendered without explicit breakpoint props.
|
|
43
|
-
|
|
44
|
-
Approved layout guidance:
|
|
45
|
-
|
|
46
|
-
- Start application shells from `approvedShellRows`.
|
|
47
|
-
- Start page content from `approvedContentLayoutPatterns`.
|
|
48
|
-
- Introduce a bespoke breakpoint map only when a screen cannot be expressed by the approved patterns and that exception is documented in a spec.
|
|
49
|
-
|
|
50
|
-
## Figma governance
|
|
51
|
-
|
|
52
|
-
Every reusable component must record an approved Figma reference in story metadata or component documentation before it is considered ready for review. The initial workflow example in this package uses the Liquid token source in Figma
|
|
53
|
-
|
|
54
|
-
Storybook now demonstrates both patterns:
|
|
55
|
-
|
|
56
|
-
- a package-consumed button component with Figma and accessibility metadata
|
|
57
|
-
- a token values reference story that reads directly from the generated `tokens` export
|
|
58
|
-
|
|
59
|
-
## Accessibility verification
|
|
60
|
-
|
|
61
|
-
Each component review must include:
|
|
62
|
-
|
|
63
|
-
- Keyboard interaction expectations when the component is interactive.
|
|
64
|
-
- Name, role, and state guidance for assistive technologies.
|
|
65
|
-
- Color contrast and focus treatment verification.
|
|
66
|
-
- Storybook documentation that explains any usage constraints needed to stay WCAG 2.1 aligned.
|
|
1
|
+
# Liquid UI Package
|
|
2
|
+
|
|
3
|
+
`@kcascend/liquid-ui` is the reusable UI package for Liquid Design System consumers.
|
|
4
|
+
|
|
5
|
+
## Local development
|
|
6
|
+
|
|
7
|
+
1. Run `npm install` from the repository root to install the local file dependency.
|
|
8
|
+
2. Run `npm run build:ui` to rebuild the package outputs in `packages/liquid-ui/dist`.
|
|
9
|
+
3. Run `npm run storybook` to rebuild the package and launch Storybook against the package boundary.
|
|
10
|
+
|
|
11
|
+
## Grid usage
|
|
12
|
+
|
|
13
|
+
The package exposes a grid primitive through `GridLayout` and `GridColumn`, plus an approved layout catalog for application shells and content regions.
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import {
|
|
17
|
+
approvedContentLayoutPatterns,
|
|
18
|
+
GridColumn,
|
|
19
|
+
GridLayout,
|
|
20
|
+
} from '@kcascend/liquid-ui';
|
|
21
|
+
|
|
22
|
+
export function Example() {
|
|
23
|
+
const layout = approvedContentLayoutPatterns.sidebarEnd;
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<GridLayout as="div">
|
|
27
|
+
<GridColumn {...layout.regions.primary}>Primary</GridColumn>
|
|
28
|
+
<GridColumn {...layout.regions.secondary}>Secondary</GridColumn>
|
|
29
|
+
</GridLayout>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Supported layout features:
|
|
35
|
+
|
|
36
|
+
- Responsive spans through `sm`, `md`, `lg`, `xlg`, and `max`.
|
|
37
|
+
- Offset columns with object values like `md={{ span: 4, offset: 2 }}`.
|
|
38
|
+
- Gutter modes with `narrow` and `condensed`.
|
|
39
|
+
- `withRowGap` to keep vertical spacing aligned with the active gutter.
|
|
40
|
+
- `fullWidth` for viewport-spanning layouts.
|
|
41
|
+
- `subgrid` for nested grids that inherit the parent column scaffold.
|
|
42
|
+
- Auto columns when a `GridColumn` is rendered without explicit breakpoint props.
|
|
43
|
+
|
|
44
|
+
Approved layout guidance:
|
|
45
|
+
|
|
46
|
+
- Start application shells from `approvedShellRows`.
|
|
47
|
+
- Start page content from `approvedContentLayoutPatterns`.
|
|
48
|
+
- Introduce a bespoke breakpoint map only when a screen cannot be expressed by the approved patterns and that exception is documented in a spec.
|
|
49
|
+
|
|
50
|
+
## Figma governance
|
|
51
|
+
|
|
52
|
+
Every reusable component must record an approved Figma reference in story metadata or component documentation before it is considered ready for review. The initial workflow example in this package uses the Liquid token source in Figma
|
|
53
|
+
|
|
54
|
+
Storybook now demonstrates both patterns:
|
|
55
|
+
|
|
56
|
+
- a package-consumed button component with Figma and accessibility metadata
|
|
57
|
+
- a token values reference story that reads directly from the generated `tokens` export
|
|
58
|
+
|
|
59
|
+
## Accessibility verification
|
|
60
|
+
|
|
61
|
+
Each component review must include:
|
|
62
|
+
|
|
63
|
+
- Keyboard interaction expectations when the component is interactive.
|
|
64
|
+
- Name, role, and state guidance for assistive technologies.
|
|
65
|
+
- Color contrast and focus treatment verification.
|
|
66
|
+
- Storybook documentation that explains any usage constraints needed to stay WCAG 2.1 aligned.
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { DataTableProps } from
|
|
1
|
+
import type { DataTableProps } from "../../types";
|
|
2
2
|
export declare function DataTable({ captionDescription, captionTitle, className, columns, onRowSelectChange, onSelectAllChange, rowCheckboxLabel, rows, selectable, selectAllLabel, style, ...props }: DataTableProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=DataTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,wBAAgB,SAAS,CAAC,EACxB,kBAAmE,EACnE,YAA4B,EAC5B,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,IAAI,EACJ,UAAkB,EAClB,cAAkC,EAClC,KAAK,EACL,GAAG,KAAK,EACT,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,wBAAgB,SAAS,CAAC,EACxB,kBAAmE,EACnE,YAA4B,EAC5B,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,IAAI,EACJ,UAAkB,EAClB,cAAkC,EAClC,KAAK,EACL,GAAG,KAAK,EACT,EAAE,cAAc,2CAkGhB"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Checkbox } from
|
|
2
|
+
import { Checkbox } from "../Checkbox/Checkbox";
|
|
3
3
|
function getClassName(className) {
|
|
4
|
-
return [
|
|
4
|
+
return ["liquid-data-table", className].filter(Boolean).join(" ");
|
|
5
5
|
}
|
|
6
|
-
export function DataTable({ captionDescription =
|
|
6
|
+
export function DataTable({ captionDescription = "Brief description of what the table contains", captionTitle = "Table title", className, columns, onRowSelectChange, onSelectAllChange, rowCheckboxLabel, rows, selectable = false, selectAllLabel = "Select all rows", style, ...props }) {
|
|
7
7
|
const selectableRows = rows.filter((row) => !row.selectionDisabled);
|
|
8
8
|
const selectedCount = selectableRows.filter((row) => row.selected).length;
|
|
9
9
|
const allSelected = selectableRows.length > 0 && selectedCount === selectableRows.length;
|
|
10
10
|
const partiallySelected = selectedCount > 0 && !allSelected;
|
|
11
|
-
return (_jsxs("section", { ...props, className: getClassName(className), style: style, children: [_jsxs("header", { className: "liquid-data-table__header", children: [_jsx("h2", { className: "liquid-data-table__title", children: captionTitle }), _jsx("p", { className: "liquid-data-table__description", children: captionDescription })] }), _jsxs("table", { className: "liquid-data-table__table", children: [_jsx("thead", { children: _jsxs("tr", { className: "liquid-data-table__column-row", children: [selectable ? (_jsx("th", { className: "liquid-data-table__column-header liquid-data-table__checkbox-column", scope: "col", children: _jsx(Checkbox, { checked: allSelected, indeterminate: partiallySelected, label: selectAllLabel, hideLabel: true, onChange: (event) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
return (_jsxs("section", { ...props, className: getClassName(className), style: style, children: [_jsxs("header", { className: "liquid-data-table__header", children: [_jsx("h2", { className: "liquid-data-table__title", children: captionTitle }), _jsx("p", { className: "liquid-data-table__description", children: captionDescription })] }), _jsx("div", { className: "liquid-data-table__scroll-container", children: _jsxs("table", { className: "liquid-data-table__table", children: [_jsx("thead", { children: _jsxs("tr", { className: "liquid-data-table__column-row", children: [selectable ? (_jsx("th", { className: "liquid-data-table__column-header liquid-data-table__checkbox-column", scope: "col", children: _jsx(Checkbox, { checked: allSelected, indeterminate: partiallySelected, label: selectAllLabel, hideLabel: true, onChange: (event) => {
|
|
12
|
+
onSelectAllChange?.(event.currentTarget.checked);
|
|
13
|
+
} }) })) : null, columns.map((column) => (_jsx("th", { className: "liquid-data-table__column-header", "data-align": column.align ?? "left", scope: "col", children: column.header }, column.id)))] }) }), _jsx("tbody", { children: rows.map((row, rowIndex) => {
|
|
14
|
+
const resolvedId = row.id ?? rowIndex;
|
|
15
|
+
return (_jsxs("tr", { className: "liquid-data-table__row", "data-selected": row.selected || undefined, children: [selectable ? (_jsx("td", { className: "liquid-data-table__cell liquid-data-table__checkbox-column", children: _jsx(Checkbox, { checked: Boolean(row.selected), disabled: row.selectionDisabled, hideLabel: true, label: rowCheckboxLabel?.(row, rowIndex) ??
|
|
16
|
+
`Select row ${rowIndex + 1}`, onChange: (event) => {
|
|
17
|
+
onRowSelectChange?.(resolvedId, event.currentTarget.checked);
|
|
18
|
+
} }) })) : null, columns.map((column, columnIndex) => (_jsx("td", { className: "liquid-data-table__cell", "data-align": column.align ?? "left", children: row.cells[columnIndex] ?? null }, `${String(resolvedId)}:${column.id}`)))] }, String(resolvedId)));
|
|
19
|
+
}) })] }) })] }));
|
|
20
20
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type { GridColumnProps, ApprovedContentLayoutPattern, ApprovedShellRowConfig } from '../../types';
|
|
1
|
+
import type { ApprovedLegacyContentLayoutPatternName, CanonicalLayoutPattern, CanonicalLayoutPatternName, GridColumnProps, ApprovedContentLayoutPattern, ApprovedShellRowConfig } from '../../types';
|
|
2
2
|
export declare const approvedShellRows: Record<'header' | 'search' | 'results' | 'footer', ApprovedShellRowConfig>;
|
|
3
|
-
export declare const approvedContentLayoutPatterns: Record<
|
|
3
|
+
export declare const approvedContentLayoutPatterns: Record<ApprovedLegacyContentLayoutPatternName, ApprovedContentLayoutPattern>;
|
|
4
|
+
export declare const canonicalModernizationLayoutPatterns: Record<CanonicalLayoutPatternName, CanonicalLayoutPattern>;
|
|
5
|
+
export declare const legacyToCanonicalLayoutPatternMap: Record<ApprovedLegacyContentLayoutPatternName, CanonicalLayoutPatternName[]>;
|
|
6
|
+
export declare function getCanonicalModernizationLayoutPattern(patternName: CanonicalLayoutPatternName): CanonicalLayoutPattern;
|
|
4
7
|
export declare function getApprovedContentLayoutColumns(patternName: keyof typeof approvedContentLayoutPatterns): Record<'primary' | 'secondary' | 'tertiary', GridColumnProps | undefined>;
|
|
5
8
|
//# sourceMappingURL=layoutPatterns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutPatterns.d.ts","sourceRoot":"","sources":["../../../src/components/GridLayout/layoutPatterns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGf,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAoBrB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,EAC1C,sBAAsB,CAqBvB,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAChD,
|
|
1
|
+
{"version":3,"file":"layoutPatterns.d.ts","sourceRoot":"","sources":["../../../src/components/GridLayout/layoutPatterns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sCAAsC,EACtC,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EAGf,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAoBrB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,EAC1C,sBAAsB,CAqBvB,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAChD,sCAAsC,EACtC,4BAA4B,CA0D7B,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,MAAM,CACvD,0BAA0B,EAC1B,sBAAsB,CAoOvB,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,MAAM,CACpD,sCAAsC,EACtC,0BAA0B,EAAE,CAW7B,CAAC;AAEF,wBAAgB,sCAAsC,CACpD,WAAW,EAAE,0BAA0B,GACtC,sBAAsB,CAExB;AAED,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,MAAM,OAAO,6BAA6B,GACtD,MAAM,CAAC,SAAS,GAAG,WAAW,GAAG,UAAU,EAAE,eAAe,GAAG,SAAS,CAAC,CAY3E"}
|
|
@@ -76,6 +76,233 @@ export const approvedContentLayoutPatterns = {
|
|
|
76
76
|
},
|
|
77
77
|
},
|
|
78
78
|
};
|
|
79
|
+
export const canonicalModernizationLayoutPatterns = {
|
|
80
|
+
'single-column-task-flow': {
|
|
81
|
+
description: 'Single readable task flow where users complete one primary progression of work.',
|
|
82
|
+
bestFit: 'Forms, guided tasks, and simple detail experiences.',
|
|
83
|
+
avoidWhen: 'Dense side-by-side comparison or persistent tool panels are required.',
|
|
84
|
+
geometryMode: 'wide',
|
|
85
|
+
regions: [
|
|
86
|
+
{
|
|
87
|
+
label: 'primary-task-column',
|
|
88
|
+
spans: {
|
|
89
|
+
sm: '1-4',
|
|
90
|
+
md: '1-6',
|
|
91
|
+
lg: '1-8',
|
|
92
|
+
xlg: 'span-controlled',
|
|
93
|
+
max: 'span-controlled',
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
adaptiveBehaviors: ['stack'],
|
|
98
|
+
scrollOwner: 'page',
|
|
99
|
+
runtimeValidationNotes: [
|
|
100
|
+
'Meet reflow requirements at 320 CSS px with one-dimensional page scrolling.',
|
|
101
|
+
'Keep DOM and focus order aligned with task order across breakpoints.',
|
|
102
|
+
],
|
|
103
|
+
legacyCompatiblePatterns: ['single'],
|
|
104
|
+
},
|
|
105
|
+
'content-plus-aside': {
|
|
106
|
+
description: 'Primary content with a supporting aside that does not outrank the primary task.',
|
|
107
|
+
bestFit: 'Main workflow plus metadata, summary, or contextual help.',
|
|
108
|
+
avoidWhen: 'Users must complete aside content before understanding the primary task.',
|
|
109
|
+
geometryMode: 'wide',
|
|
110
|
+
regions: [
|
|
111
|
+
{
|
|
112
|
+
label: 'primary',
|
|
113
|
+
spans: { sm: 'full', md: '1-5', lg: '1-10', xlg: '1-10', max: '1-10' },
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
label: 'aside',
|
|
117
|
+
spans: {
|
|
118
|
+
sm: 'stack-below',
|
|
119
|
+
md: '6-8',
|
|
120
|
+
lg: '11-16',
|
|
121
|
+
xlg: '11-16',
|
|
122
|
+
max: '11-16',
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
adaptiveBehaviors: ['stack'],
|
|
127
|
+
scrollOwner: 'page',
|
|
128
|
+
runtimeValidationNotes: [
|
|
129
|
+
'Ensure focus order matches reading order when the aside stacks on smaller screens.',
|
|
130
|
+
'Do not trap keyboard users in supporting panes.',
|
|
131
|
+
],
|
|
132
|
+
legacyCompatiblePatterns: ['sidebarEnd'],
|
|
133
|
+
},
|
|
134
|
+
'search-results-index': {
|
|
135
|
+
description: 'Search and browse index where results remain the primary region across breakpoints.',
|
|
136
|
+
bestFit: 'Directories and filtered collections without persistent detail panes.',
|
|
137
|
+
avoidWhen: 'Selected record detail must remain persistently visible with the list.',
|
|
138
|
+
geometryMode: 'wide',
|
|
139
|
+
regions: [
|
|
140
|
+
{
|
|
141
|
+
label: 'filters',
|
|
142
|
+
spans: {
|
|
143
|
+
sm: 'disclosure',
|
|
144
|
+
md: 'disclosure',
|
|
145
|
+
lg: '1-4',
|
|
146
|
+
xlg: '1-4',
|
|
147
|
+
max: '1-4',
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
label: 'results',
|
|
152
|
+
spans: { sm: 'full', md: 'full', lg: '5-16', xlg: '5-16', max: '5-16' },
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
adaptiveBehaviors: ['disclosure', 'stack'],
|
|
156
|
+
scrollOwner: 'named-region',
|
|
157
|
+
runtimeValidationNotes: [
|
|
158
|
+
'Only the labeled data/table region may own horizontal overflow.',
|
|
159
|
+
'Retain result count, pagination, and empty state semantics at all breakpoints.',
|
|
160
|
+
],
|
|
161
|
+
legacyCompatiblePatterns: ['sidebarStart'],
|
|
162
|
+
},
|
|
163
|
+
'list-detail': {
|
|
164
|
+
description: 'Two-region list and selected-detail workflow with drill-in behavior on smaller screens.',
|
|
165
|
+
bestFit: 'Cases, records, and scan-then-inspect workflows.',
|
|
166
|
+
avoidWhen: 'Content groups are unrelated or many details must be compared at once.',
|
|
167
|
+
geometryMode: 'narrow',
|
|
168
|
+
regions: [
|
|
169
|
+
{
|
|
170
|
+
label: 'list',
|
|
171
|
+
spans: {
|
|
172
|
+
sm: 'list-first',
|
|
173
|
+
md: '1-3',
|
|
174
|
+
lg: '1-5',
|
|
175
|
+
xlg: '1-5',
|
|
176
|
+
max: '1-5',
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
label: 'detail',
|
|
181
|
+
spans: {
|
|
182
|
+
sm: 'after-selection',
|
|
183
|
+
md: '4-8',
|
|
184
|
+
lg: '6-16',
|
|
185
|
+
xlg: '6-16',
|
|
186
|
+
max: '6-16',
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
adaptiveBehaviors: ['drill-in', 'stack'],
|
|
191
|
+
scrollOwner: 'page',
|
|
192
|
+
runtimeValidationNotes: [
|
|
193
|
+
'Preserve selection state and return orientation when switching between list and detail.',
|
|
194
|
+
'Ensure truncated list labels expose full text through accessible naming.',
|
|
195
|
+
],
|
|
196
|
+
legacyCompatiblePatterns: ['sidebarStart', 'sidebarEnd'],
|
|
197
|
+
},
|
|
198
|
+
'dashboard-overview': {
|
|
199
|
+
description: 'Comparison-first operational overview with status tiles and queue snapshots.',
|
|
200
|
+
bestFit: 'Status cards, metrics, and operational queue overviews.',
|
|
201
|
+
avoidWhen: 'Long-form instructional reading is the dominant task.',
|
|
202
|
+
geometryMode: 'condensed',
|
|
203
|
+
regions: [
|
|
204
|
+
{
|
|
205
|
+
label: 'tile-grid',
|
|
206
|
+
spans: {
|
|
207
|
+
sm: 'stack-priority-order',
|
|
208
|
+
md: '2-up',
|
|
209
|
+
lg: 'nested-condensed',
|
|
210
|
+
xlg: 'nested-condensed',
|
|
211
|
+
max: 'nested-condensed',
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
adaptiveBehaviors: ['stack'],
|
|
216
|
+
scrollOwner: 'page',
|
|
217
|
+
runtimeValidationNotes: [
|
|
218
|
+
'Do not rely on position or color alone to convey tile state.',
|
|
219
|
+
'Keep text from hanging into condensed 1px gutters.',
|
|
220
|
+
],
|
|
221
|
+
legacyCompatiblePatterns: ['splitEqual'],
|
|
222
|
+
},
|
|
223
|
+
'high-density-workspace': {
|
|
224
|
+
description: 'Dense operational workspace with controls and a separately scrollable data region.',
|
|
225
|
+
bestFit: 'Data tables, filters, and bulk-action workflows.',
|
|
226
|
+
avoidWhen: 'Public-facing workflows prioritize comprehension over operator density.',
|
|
227
|
+
geometryMode: 'condensed',
|
|
228
|
+
regions: [
|
|
229
|
+
{
|
|
230
|
+
label: 'controls-wrapper',
|
|
231
|
+
spans: {
|
|
232
|
+
sm: 'full',
|
|
233
|
+
md: 'full',
|
|
234
|
+
lg: 'wide-wrapper',
|
|
235
|
+
xlg: 'wide-wrapper',
|
|
236
|
+
max: 'wide-wrapper',
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
label: 'dense-data-region',
|
|
241
|
+
spans: {
|
|
242
|
+
sm: 'local-overflow-region',
|
|
243
|
+
md: 'full',
|
|
244
|
+
lg: 'nested-condensed',
|
|
245
|
+
xlg: 'nested-condensed',
|
|
246
|
+
max: 'nested-condensed',
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
adaptiveBehaviors: ['stack', 'resize'],
|
|
251
|
+
scrollOwner: 'named-region',
|
|
252
|
+
runtimeValidationNotes: [
|
|
253
|
+
'Horizontal overflow must be constrained to the labeled data region only.',
|
|
254
|
+
'Keep controls before the data region for keyboard traversal.',
|
|
255
|
+
],
|
|
256
|
+
legacyCompatiblePatterns: ['sidebarStart', 'splitEqual'],
|
|
257
|
+
},
|
|
258
|
+
'shell-influenced-layout': {
|
|
259
|
+
description: 'Main page layout that reflows within persistent shell chrome contexts.',
|
|
260
|
+
bestFit: 'Apps with persistent header, left navigation, and optional utility panels.',
|
|
261
|
+
avoidWhen: 'Shell chrome is treated as page content or IA labels change on collapse.',
|
|
262
|
+
geometryMode: 'wide',
|
|
263
|
+
regions: [
|
|
264
|
+
{
|
|
265
|
+
label: 'shell-chrome',
|
|
266
|
+
spans: {
|
|
267
|
+
sm: 'header-trigger-nav',
|
|
268
|
+
md: 'compact-rail',
|
|
269
|
+
lg: 'expanded-nav',
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
label: 'content-grid',
|
|
274
|
+
spans: {
|
|
275
|
+
sm: 'responsive',
|
|
276
|
+
md: 'responsive',
|
|
277
|
+
lg: 'responsive',
|
|
278
|
+
xlg: 'responsive',
|
|
279
|
+
max: 'responsive',
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
],
|
|
283
|
+
adaptiveBehaviors: ['overlay', 'push', 'resize'],
|
|
284
|
+
scrollOwner: 'page',
|
|
285
|
+
runtimeValidationNotes: [
|
|
286
|
+
'Keep skip links and route meaning stable as shell panels open and close.',
|
|
287
|
+
'Treat panel dimensions as provisional until component contracts are finalized.',
|
|
288
|
+
],
|
|
289
|
+
legacyCompatiblePatterns: ['single', 'sidebarStart', 'sidebarEnd'],
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
export const legacyToCanonicalLayoutPatternMap = {
|
|
293
|
+
single: ['single-column-task-flow', 'shell-influenced-layout'],
|
|
294
|
+
sidebarStart: [
|
|
295
|
+
'search-results-index',
|
|
296
|
+
'list-detail',
|
|
297
|
+
'high-density-workspace',
|
|
298
|
+
'shell-influenced-layout',
|
|
299
|
+
],
|
|
300
|
+
sidebarEnd: ['content-plus-aside', 'list-detail', 'shell-influenced-layout'],
|
|
301
|
+
splitEqual: ['dashboard-overview', 'high-density-workspace'],
|
|
302
|
+
};
|
|
303
|
+
export function getCanonicalModernizationLayoutPattern(patternName) {
|
|
304
|
+
return canonicalModernizationLayoutPatterns[patternName];
|
|
305
|
+
}
|
|
79
306
|
export function getApprovedContentLayoutColumns(patternName) {
|
|
80
307
|
const pattern = approvedContentLayoutPatterns[patternName];
|
|
81
308
|
return {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { HeaderShellProps } from
|
|
1
|
+
import type { HeaderShellProps } from "../../types";
|
|
2
2
|
export declare function HeaderShell({ activeNavigationItemId, actions, brand, className, defaultActiveNavigationItemId, menuTriggerLabel, navigationItems, navLabel, onAction, onMenuTriggerClick, onNavigationChange, showMenuTrigger, style, ...props }: HeaderShellProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=HeaderShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderShell.d.ts","sourceRoot":"","sources":["../../../src/components/HeaderShell/HeaderShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"HeaderShell.d.ts","sourceRoot":"","sources":["../../../src/components/HeaderShell/HeaderShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,aAAa,CAAC;AA2HrB,wBAAgB,WAAW,CAAC,EAC1B,sBAAsB,EACtB,OAAO,EACP,KAAK,EACL,SAAS,EACT,6BAA6B,EAC7B,gBAA8B,EAC9B,eAAe,EACf,QAAoB,EACpB,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,KAAK,EACL,GAAG,KAAK,EACT,EAAE,gBAAgB,2CAgMlB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
2
|
-
import { useId, useMemo, useState } from
|
|
3
|
-
import { Icon } from
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useId, useMemo, useState } from "react";
|
|
3
|
+
import { Icon } from "../Icon/Icon";
|
|
4
4
|
function getClassName(className) {
|
|
5
|
-
return [
|
|
5
|
+
return ["liquid-header-shell", className].filter(Boolean).join(" ");
|
|
6
6
|
}
|
|
7
7
|
function getFirstEnabledNavigationItem(items) {
|
|
8
8
|
return items?.find((item) => !item.disabled)?.id;
|
|
@@ -10,61 +10,90 @@ function getFirstEnabledNavigationItem(items) {
|
|
|
10
10
|
function HeaderNavigationLink({ activeItemId, item, onSelect, }) {
|
|
11
11
|
const isSelected = item.id === activeItemId;
|
|
12
12
|
if (item.href) {
|
|
13
|
-
return (_jsx("a", { className: "liquid-header-shell__nav-link", "data-selected": isSelected ?
|
|
13
|
+
return (_jsx("a", { className: "liquid-header-shell__nav-link", "data-selected": isSelected ? "true" : undefined, href: item.href, onClick: (event) => {
|
|
14
14
|
if (item.disabled) {
|
|
15
15
|
event.preventDefault();
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
onSelect(item);
|
|
19
|
-
}, "aria-current": isSelected ?
|
|
19
|
+
}, "aria-current": isSelected ? "page" : undefined, "aria-disabled": item.disabled ? true : undefined, children: item.label }));
|
|
20
20
|
}
|
|
21
|
-
return (_jsx("button", { className: "liquid-header-shell__nav-link", "data-selected": isSelected ?
|
|
21
|
+
return (_jsx("button", { className: "liquid-header-shell__nav-link", "data-selected": isSelected ? "true" : undefined, disabled: item.disabled, onClick: () => {
|
|
22
22
|
if (!item.disabled) {
|
|
23
23
|
onSelect(item);
|
|
24
24
|
}
|
|
25
|
-
}, type: "button", "aria-current": isSelected ?
|
|
25
|
+
}, type: "button", "aria-current": isSelected ? "page" : undefined, children: item.label }));
|
|
26
26
|
}
|
|
27
|
-
function HeaderUtilityAction({ action, onAction, }) {
|
|
27
|
+
function HeaderUtilityAction({ action, showLabel = false, onAction, }) {
|
|
28
28
|
const icon = _jsx(Icon, { name: action.icon, size: action.iconSize ?? 20 });
|
|
29
29
|
if (action.href) {
|
|
30
|
-
return (
|
|
30
|
+
return (_jsxs("a", { "aria-label": action.label, className: "liquid-header-shell__action", href: action.href, onClick: (event) => {
|
|
31
31
|
if (action.disabled) {
|
|
32
32
|
event.preventDefault();
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
35
|
onAction(action);
|
|
36
|
-
}, "aria-disabled": action.disabled ? true : undefined, children: icon }));
|
|
36
|
+
}, "aria-disabled": action.disabled ? true : undefined, children: [icon, showLabel ? (_jsx("span", { className: "liquid-header-shell__action-label", children: action.label })) : null] }));
|
|
37
37
|
}
|
|
38
|
-
return (
|
|
38
|
+
return (_jsxs("button", { "aria-label": action.label, className: "liquid-header-shell__action", disabled: action.disabled, onClick: () => {
|
|
39
39
|
if (!action.disabled) {
|
|
40
40
|
onAction(action);
|
|
41
41
|
}
|
|
42
|
-
}, type: "button", children: icon }));
|
|
42
|
+
}, type: "button", children: [icon, showLabel ? (_jsx("span", { className: "liquid-header-shell__action-label", children: action.label })) : null] }));
|
|
43
43
|
}
|
|
44
|
-
export function HeaderShell({ activeNavigationItemId, actions, brand, className, defaultActiveNavigationItemId, menuTriggerLabel =
|
|
44
|
+
export function HeaderShell({ activeNavigationItemId, actions, brand, className, defaultActiveNavigationItemId, menuTriggerLabel = "Open menu", navigationItems, navLabel = "Primary", onAction, onMenuTriggerClick, onNavigationChange, showMenuTrigger, style, ...props }) {
|
|
45
45
|
const fallbackActiveId = useMemo(() => getFirstEnabledNavigationItem(navigationItems), [navigationItems]);
|
|
46
46
|
const [internalActiveId, setInternalActiveId] = useState(defaultActiveNavigationItemId ?? fallbackActiveId);
|
|
47
47
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
|
48
48
|
const mobileAccordionId = useId();
|
|
49
49
|
const shouldShowMenuTrigger = showMenuTrigger ?? true;
|
|
50
50
|
const resolvedActiveId = activeNavigationItemId ?? internalActiveId ?? fallbackActiveId;
|
|
51
|
+
const closeMobileMenu = () => {
|
|
52
|
+
setIsMobileMenuOpen(false);
|
|
53
|
+
};
|
|
51
54
|
const handleNavigationSelect = (item) => {
|
|
52
55
|
if (activeNavigationItemId === undefined) {
|
|
53
56
|
setInternalActiveId(item.id);
|
|
54
57
|
}
|
|
55
58
|
onNavigationChange?.(item.id, item);
|
|
56
|
-
|
|
59
|
+
closeMobileMenu();
|
|
57
60
|
};
|
|
58
61
|
const handleAction = (action) => {
|
|
59
62
|
onAction?.(action.id, action);
|
|
60
63
|
action.onClick?.();
|
|
61
|
-
|
|
64
|
+
closeMobileMenu();
|
|
62
65
|
};
|
|
63
66
|
const handleMenuTriggerClick = () => {
|
|
64
67
|
setIsMobileMenuOpen((current) => !current);
|
|
65
68
|
onMenuTriggerClick?.();
|
|
66
69
|
};
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (!isMobileMenuOpen) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const handleEscape = (event) => {
|
|
75
|
+
if (event.key === "Escape") {
|
|
76
|
+
closeMobileMenu();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const previousOverflow = document.body.style.overflow;
|
|
80
|
+
document.body.style.overflow = "hidden";
|
|
81
|
+
window.addEventListener("keydown", handleEscape);
|
|
82
|
+
return () => {
|
|
83
|
+
document.body.style.overflow = previousOverflow;
|
|
84
|
+
window.removeEventListener("keydown", handleEscape);
|
|
85
|
+
};
|
|
86
|
+
}, [isMobileMenuOpen]);
|
|
67
87
|
const navigationContent = (_jsx(_Fragment, { children: navigationItems.map((item) => (_jsx(HeaderNavigationLink, { activeItemId: resolvedActiveId, item: item, onSelect: handleNavigationSelect }, item.id))) }));
|
|
68
88
|
const actionsContent = actions?.length ? (_jsx(_Fragment, { children: actions.map((action) => (_jsx(HeaderUtilityAction, { action: action, onAction: handleAction }, action.id))) })) : null;
|
|
69
|
-
|
|
89
|
+
const mobileActionsContent = actions?.length ? (_jsx(_Fragment, { children: actions.map((action) => (_jsx(HeaderUtilityAction, { action: action, showLabel: true, onAction: handleAction }, `mobile:${action.id}`))) })) : null;
|
|
90
|
+
return (_jsxs("header", { ...props, className: getClassName(className), "data-mobile-menu-enabled": shouldShowMenuTrigger ? "true" : undefined, style: style, children: [_jsxs("div", { className: "liquid-header-shell__inner", children: [_jsxs("div", { className: "liquid-header-shell__left", children: [shouldShowMenuTrigger ? (_jsx("button", { "aria-label": menuTriggerLabel, "aria-controls": mobileAccordionId, "aria-expanded": isMobileMenuOpen, className: "liquid-header-shell__action liquid-header-shell__menu-trigger", onClick: handleMenuTriggerClick, type: "button", children: _jsx(Icon, { name: isMobileMenuOpen ? "close" : "menu", size: 20 }) })) : null, _jsx("div", { className: "liquid-header-shell__brand", children: brand }), _jsx("nav", { "aria-label": navLabel, className: "liquid-header-shell__nav", children: _jsx("div", { className: "liquid-header-shell__nav-list", children: navigationContent }) })] }), actionsContent ? (_jsx("div", { className: "liquid-header-shell__actions", children: actionsContent })) : null, shouldShowMenuTrigger ? (_jsx("div", { "aria-hidden": "true", className: "liquid-header-shell__right-spacer" })) : null] }), shouldShowMenuTrigger ? (_jsxs("div", { className: "liquid-header-shell__mobile-layer", "data-open": isMobileMenuOpen ? "true" : undefined, hidden: !isMobileMenuOpen, children: [_jsx("button", { "aria-label": "Close menu", className: "liquid-header-shell__mobile-backdrop", onClick: () => {
|
|
91
|
+
closeMobileMenu();
|
|
92
|
+
}, type: "button" }), _jsxs("aside", { className: "liquid-header-shell__mobile-panel", id: mobileAccordionId, role: "dialog", "aria-modal": "true", "aria-label": navLabel, onClick: (event) => {
|
|
93
|
+
const target = event.target;
|
|
94
|
+
if (target.closest(".liquid-header-shell__nav-link") ||
|
|
95
|
+
target.closest(".liquid-header-shell__action")) {
|
|
96
|
+
closeMobileMenu();
|
|
97
|
+
}
|
|
98
|
+
}, children: [_jsx("nav", { "aria-label": navLabel, className: "liquid-header-shell__mobile-nav", children: _jsx("div", { className: "liquid-header-shell__mobile-nav-list", children: navigationContent }) }), mobileActionsContent ? (_jsx("div", { className: "liquid-header-shell__mobile-actions", children: mobileActionsContent })) : null] })] })) : null] }));
|
|
70
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridLayoutGovernance.d.ts","sourceRoot":"","sources":["../../src/governance/gridLayoutGovernance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"gridLayoutGovernance.d.ts","sourceRoot":"","sources":["../../src/governance/gridLayoutGovernance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,eAAO,MAAM,oBAAoB,EAAE,mBAUlC,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export const gridLayoutGovernance = {
|
|
2
|
-
figmaUrl: 'https://www.figma.com/design/a9SMb2IjyRedfsaUMGXIyP/Liquid-DS---01-Components?node-id=
|
|
3
|
-
figmaNodeId: '
|
|
2
|
+
figmaUrl: 'https://www.figma.com/design/a9SMb2IjyRedfsaUMGXIyP/Liquid-DS---01-Components?node-id=1764-4&m=dev',
|
|
3
|
+
figmaNodeId: '1764:4',
|
|
4
4
|
accessibilityNotes: [
|
|
5
|
-
'Treat
|
|
6
|
-
'
|
|
7
|
-
'
|
|
5
|
+
'Treat layout examples as reference-only intent; validate runtime behavior in code for focus order, keyboard interaction, zoom, reflow, and localization.',
|
|
6
|
+
'Use geometry terminology consistently: Wide = 32px gutters, Narrow = 16px gutters, and Condensed = 1px gutters.',
|
|
7
|
+
'Do not allow page-level horizontal overflow; constrain horizontal scrolling to labeled data regions only when required.',
|
|
8
|
+
'Preserve DOM, reading, and task order alignment when layouts stack, drill in, or disclose at smaller breakpoints.',
|
|
8
9
|
],
|
|
9
10
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { DataTable } from './components/DataTable/DataTable';
|
|
|
8
8
|
export { DescriptionList } from './components/DescriptionList/DescriptionList';
|
|
9
9
|
export { Form, FormItem, FormRow } from './components/Form/Form';
|
|
10
10
|
export { GridColumn, GridLayout } from './components/GridLayout/GridLayout';
|
|
11
|
-
export { approvedContentLayoutPatterns, approvedShellRows, getApprovedContentLayoutColumns, } from './components/GridLayout/layoutPatterns';
|
|
11
|
+
export { approvedContentLayoutPatterns, approvedShellRows, canonicalModernizationLayoutPatterns, getApprovedContentLayoutColumns, getCanonicalModernizationLayoutPattern, legacyToCanonicalLayoutPatternMap, } from './components/GridLayout/layoutPatterns';
|
|
12
12
|
export { HeaderShell } from './components/HeaderShell/HeaderShell';
|
|
13
13
|
export { Icon, iconNames } from './components/Icon/Icon';
|
|
14
14
|
export { Index } from './components/Index/Index';
|
|
@@ -54,6 +54,6 @@ export { tooltipGovernance } from './governance/tooltipGovernance';
|
|
|
54
54
|
export { toggleInputGovernance } from './governance/toggleInputGovernance';
|
|
55
55
|
export { tokens } from './generated/tokens';
|
|
56
56
|
export type { Tokens } from './generated/tokens';
|
|
57
|
-
export type { AccordionItem, AccordionProps, BreadcrumbItem, BreadcrumbProps, ButtonProps, ButtonSize, ButtonVariant, CardDetailItem, CardProps, CheckboxGroupProps, CheckboxProps, ContainedListItem, ContainedListProps, ContainedListVariant, DataTableCellAlignment, DataTableColumn, DataTableProps, DataTableRow, DescriptionListItem, DescriptionListProps, FormItemProps, FormProps, FormRowProps, GridBreakpoint, GridColumnProps, GridColumnSpan, GridColumnValue, GridLayoutProps, GridResponsiveColumnProps, ApprovedContentLayoutPattern, ApprovedShellRowConfig, HeaderShellNavigationItem, HeaderShellProps, HeaderShellUtilityAction, InlineNotificationKind, InlineNotificationProps, InlineNotificationStatus, IndexItem, IndexProps, LinkAppearance, LinkProps, LinkSize, LinkState, ModalFooterLayout, ModalProps, ModalTone, PaginationProps, ComponentGovernance, RadioProps, SearchInputProps, SelectInputOption, SelectInputProps, SelectInputSize, SelectInputTone, StructuredListCellAlignment, StructuredListColumn, StructuredListProps, StructuredListRow, TagColor, TagProps, TagSize, TabsItem, TabsOrientation, TabsProps, TooltipAlignment, TooltipPosition, TooltipProps, ToggleInputProps, ToggleInputSize, TokenShowcaseCardProps, TextInputProps, TextInputSize, TextInputTone, TextAreaProps, TextAreaSize, TextAreaTone, } from './types';
|
|
57
|
+
export type { AccordionItem, AccordionProps, BreadcrumbItem, BreadcrumbProps, ButtonProps, ButtonSize, ButtonVariant, CardDetailItem, CardProps, CheckboxGroupProps, CheckboxProps, ContainedListItem, ContainedListProps, ContainedListVariant, DataTableCellAlignment, DataTableColumn, DataTableProps, DataTableRow, DescriptionListItem, DescriptionListProps, FormItemProps, FormProps, FormRowProps, GridBreakpoint, GridColumnProps, GridColumnSpan, GridColumnValue, GridLayoutProps, GridResponsiveColumnProps, ApprovedContentLayoutPattern, ApprovedLegacyContentLayoutPatternName, ApprovedShellRowConfig, CanonicalLayoutPattern, CanonicalLayoutPatternName, GridGeometryMode, HeaderShellNavigationItem, HeaderShellProps, HeaderShellUtilityAction, InlineNotificationKind, InlineNotificationProps, InlineNotificationStatus, IndexItem, IndexProps, LinkAppearance, LinkProps, LinkSize, LinkState, ModalFooterLayout, ModalProps, ModalTone, LayoutAdaptiveBehavior, LayoutScrollOwner, LayoutPatternBreakpoint, CanonicalLayoutPatternRegion, PaginationProps, ComponentGovernance, RadioProps, SearchInputProps, SelectInputOption, SelectInputProps, SelectInputSize, SelectInputTone, StructuredListCellAlignment, StructuredListColumn, StructuredListProps, StructuredListRow, TagColor, TagProps, TagSize, TabsItem, TabsOrientation, TabsProps, TooltipAlignment, TooltipPosition, TooltipProps, ToggleInputProps, ToggleInputSize, TokenShowcaseCardProps, TextInputProps, TextInputSize, TextInputTone, TextAreaProps, TextAreaSize, TextAreaTone, } from './types';
|
|
58
58
|
export type { IconName, IconProps } from './components/Icon/Icon';
|
|
59
59
|
//# sourceMappingURL=index.d.ts.map
|