@jirawatpyk/aura-react 5.11.0 → 5.13.0
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 +30 -2
- package/dist/aura.bundle.js +784 -622
- package/dist/cjs/index.cjs +783 -621
- package/dist/esm/DataTable.js +82 -22
- package/dist/esm/FilterBar.js +1 -1
- package/dist/esm/FilterSelect.js +17 -0
- package/dist/esm/Select.js +82 -20
- package/dist/esm/Table.js +14 -6
- package/dist/esm/display.js +20 -1
- package/dist/esm/index.js +2 -0
- package/dist/index.d.cts +45 -2
- package/dist/index.d.ts +45 -2
- package/dist/server/index.cjs +20 -1
- package/dist/server/index.d.cts +4 -1
- package/dist/server/index.d.ts +4 -1
- package/dist/server/index.js +20 -1
- package/dist/styles.css +66 -0
- package/dist/styles.layer.css +66 -0
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -89,6 +89,13 @@ export interface DataTableColumn<Row extends Record<string, any> = Record<string
|
|
|
89
89
|
hideBelow?: number | "sm" | "md" | "lg" | "xl" | undefined;
|
|
90
90
|
/** Row actions (a DropdownMenu or IconButton). In stacked cards it sits top-right instead of in the field list. Give it an empty label. */
|
|
91
91
|
actions?: boolean | undefined;
|
|
92
|
+
/** Its place in a stacked card (5.13): `'hide'` leaves it out of the card (the grid keeps it), `'title'` / `'pill'`
|
|
93
|
+
* make it the card's title or the pill beside it (instead of the first column / first pill column), `'field'` a
|
|
94
|
+
* label/value field. Default: today's rule. */
|
|
95
|
+
card?: "hide" | "field" | "title" | "pill" | undefined;
|
|
96
|
+
/** The order of fields in a stacked card (5.13), lowest first; the grid's column order is unchanged. Fields
|
|
97
|
+
* without one sort by their column index (0-based). Screen readers and arrow keys follow the grid's order. */
|
|
98
|
+
cardOrder?: number | undefined;
|
|
92
99
|
/** `end` right-aligns header and cells (amounts, counts) and uses tabular figures. Default `start`. */
|
|
93
100
|
align?: "start" | "end" | undefined;
|
|
94
101
|
}
|
|
@@ -178,6 +185,9 @@ export interface DataTableProps<Row extends Record<string, any> = Record<string,
|
|
|
178
185
|
onRowActivate?: RowCallback<void, Row> | undefined;
|
|
179
186
|
/** Fixed height in px: sticky header, and only the rows in view are rendered. */
|
|
180
187
|
height?: number | undefined;
|
|
188
|
+
/** Stacked cards (`stackBelow`) without the row checkboxes and the select-all box (5.13). The grid keeps them and
|
|
189
|
+
* the selection is kept; Space doesn't change it while the cards show. */
|
|
190
|
+
hideSelectionInCards?: boolean | undefined;
|
|
181
191
|
/** `'auto'` (5.11): rows grow to fit content that wraps (two badges, a long name); cells stay vertically centred and
|
|
182
192
|
* rows keep at least the density's row height. Needs every row in the DOM, so it is ignored with `height`
|
|
183
193
|
* (virtualized rows are one fixed height). Default: one fixed-height line per row, long text ends in an ellipsis. */
|
|
@@ -387,6 +397,7 @@ export interface FilterBarProps {
|
|
|
387
397
|
onSearchChange?: ((value: string) => void) | undefined;
|
|
388
398
|
/** ms to wait after the last keystroke. Default 300. */
|
|
389
399
|
searchDelay?: number | undefined;
|
|
400
|
+
/** The search field's name. Default "Search". */
|
|
390
401
|
searchLabel?: string | undefined;
|
|
391
402
|
searchPlaceholder?: string | undefined;
|
|
392
403
|
/** Filter controls beside the search: Select, SegmentedControl, a Popover of options… */
|
|
@@ -401,6 +412,9 @@ export interface FilterBarProps {
|
|
|
401
412
|
actions?: React$1.ReactNode | undefined;
|
|
402
413
|
/** Accessible name of the region. Default "Filters". */
|
|
403
414
|
label?: string | undefined;
|
|
415
|
+
/** The search takes all the room the controls leave in its row, instead of stopping at 360px with the count and
|
|
416
|
+
* actions pushed to the end (5.12). */
|
|
417
|
+
searchGrow?: boolean | undefined;
|
|
404
418
|
className?: string | undefined;
|
|
405
419
|
}
|
|
406
420
|
/** One command in the palette. */
|
|
@@ -467,6 +481,20 @@ export interface SelectProps extends Omit<FieldProps, "label">, Omit<React$1.Sel
|
|
|
467
481
|
placeholder?: string | undefined;
|
|
468
482
|
icon?: IconInput | undefined;
|
|
469
483
|
}
|
|
484
|
+
/** A compact filter for FilterBar (5.12): "Status All ▾", as wide as its words. */
|
|
485
|
+
export interface FilterSelectProps extends Omit<React$1.SelectHTMLAttributes<HTMLSelectElement>, "onChange" | "value" | "defaultValue" | "multiple" | "size" | "placeholder" | "required" | "children"> {
|
|
486
|
+
/** The filter's name: shown first on the face ("Status") and its accessible name. */
|
|
487
|
+
label: string;
|
|
488
|
+
/** The choices; the first is the "all" choice. Or pass `<option>` children. */
|
|
489
|
+
options?: SelectOption[] | undefined;
|
|
490
|
+
children?: React$1.ReactNode | undefined;
|
|
491
|
+
value?: string | undefined;
|
|
492
|
+
defaultValue?: string | undefined;
|
|
493
|
+
onChange?: ((value: string) => void) | undefined;
|
|
494
|
+
/** A shorter word the face shows while the first option is chosen ("All" for "All statuses"). The list and screen
|
|
495
|
+
* readers keep the option's own text. */
|
|
496
|
+
allLabel?: string | undefined;
|
|
497
|
+
}
|
|
470
498
|
export type ChoiceOption = string | {
|
|
471
499
|
value: string;
|
|
472
500
|
label: string;
|
|
@@ -979,7 +1007,7 @@ export interface SeparatorProps {
|
|
|
979
1007
|
spacing?: 1 | 2 | 3 | 4 | 5 | 6 | 8 | undefined;
|
|
980
1008
|
className?: string | undefined;
|
|
981
1009
|
}
|
|
982
|
-
export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableElement>, "className"> {
|
|
1010
|
+
export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableElement>, "className" | "align"> {
|
|
983
1011
|
/** The table's name (a `<caption>`). Give every table one; `captionHidden` keeps it for screen readers only. */
|
|
984
1012
|
caption?: React$1.ReactNode | undefined;
|
|
985
1013
|
captionHidden?: boolean | undefined;
|
|
@@ -989,6 +1017,11 @@ export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableEl
|
|
|
989
1017
|
* cell shows its column's header as a label: a `Td`'s `label`, else the text of the matching `Th` in `THead`.
|
|
990
1018
|
* Done in CSS (a container query), so the server's HTML is already right; table semantics are kept. */
|
|
991
1019
|
stackBelow?: "sm" | "md" | undefined;
|
|
1020
|
+
/** `middle` centres every body and footer cell on its row (5.13); default `top`, so wrapped text starts level. */
|
|
1021
|
+
align?: "top" | "middle" | undefined;
|
|
1022
|
+
/** `false` (5.13) drops the frame — border, radius, background — and the outer cells' side padding, so the table
|
|
1023
|
+
* lines up with the content around it, e.g. flush inside a Card under its heading. Default `true`. */
|
|
1024
|
+
bordered?: boolean | undefined;
|
|
992
1025
|
className?: string | undefined;
|
|
993
1026
|
children?: React$1.ReactNode | undefined;
|
|
994
1027
|
}
|
|
@@ -1009,6 +1042,10 @@ export interface TableCellProps extends Omit<React$1.TdHTMLAttributes<HTMLTableC
|
|
|
1009
1042
|
scope?: "col" | "row" | "colgroup" | "rowgroup" | undefined;
|
|
1010
1043
|
/** The label this cell shows when its table is stacked (`stackBelow`, 5.8). Default: the matching header's text. */
|
|
1011
1044
|
label?: string | undefined;
|
|
1045
|
+
/** Its place in a stacked row (5.13), on a Td or a row header (`Th scope="row"`). `title` takes the first line,
|
|
1046
|
+
* without a label; `action` sits at the end of that line at its natural size; `field` (default) is a labelled field,
|
|
1047
|
+
* two to a line under them. */
|
|
1048
|
+
card?: "title" | "action" | "field" | undefined;
|
|
1012
1049
|
className?: string | undefined;
|
|
1013
1050
|
}
|
|
1014
1051
|
export interface ActionBarProps {
|
|
@@ -1184,7 +1221,7 @@ export interface SkeletonProps {
|
|
|
1184
1221
|
size?: number | undefined;
|
|
1185
1222
|
className?: string | undefined;
|
|
1186
1223
|
}
|
|
1187
|
-
export interface EmptyStateProps {
|
|
1224
|
+
export interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "children"> {
|
|
1188
1225
|
title: React$1.ReactNode;
|
|
1189
1226
|
description?: React$1.ReactNode | undefined;
|
|
1190
1227
|
icon?: IconInput | undefined;
|
|
@@ -1192,6 +1229,9 @@ export interface EmptyStateProps {
|
|
|
1192
1229
|
action?: React$1.ReactNode | undefined;
|
|
1193
1230
|
size?: "sm" | "md" | undefined;
|
|
1194
1231
|
bordered?: boolean | undefined;
|
|
1232
|
+
/** `danger` (5.13) for a failure — the data couldn't load: the danger tint, a danger-coloured icon, and a solid
|
|
1233
|
+
* danger frame with `bordered`. It stays quiet; pass `role="alert"` if it must interrupt. Default `neutral`. */
|
|
1234
|
+
tone?: "neutral" | "danger" | undefined;
|
|
1195
1235
|
headingLevel?: 2 | 3 | 4 | 5 | 6 | undefined;
|
|
1196
1236
|
className?: string | undefined;
|
|
1197
1237
|
}
|
|
@@ -1338,6 +1378,9 @@ export declare const TextField: React$1.ForwardRefExoticComponent<TextFieldProps
|
|
|
1338
1378
|
export declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
|
|
1339
1379
|
/** A select field: a button that opens an AURA list (5.3), over a real <select> that keeps forms, refs and events. */
|
|
1340
1380
|
export declare const Select: React$1.ForwardRefExoticComponent<SelectProps & React$1.RefAttributes<HTMLSelectElement>>;
|
|
1381
|
+
/** A compact filter for FilterBar (5.12): a small button reading "Status All ▾" that opens Select's list. The name
|
|
1382
|
+
* is the accessible name, the chosen option its value; forms, refs and the keyboard work as in Select. */
|
|
1383
|
+
export declare const FilterSelect: React$1.ForwardRefExoticComponent<FilterSelectProps & React$1.RefAttributes<HTMLSelectElement>>;
|
|
1341
1384
|
export declare const RadioGroup: React$1.ForwardRefExoticComponent<RadioGroupProps & React$1.RefAttributes<HTMLFieldSetElement>>;
|
|
1342
1385
|
export declare const Switch: React$1.ForwardRefExoticComponent<SwitchProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
1343
1386
|
/** One value, or with `multiple` any number (chips). Two call signatures so value/onChange are typed for each. */
|
package/dist/index.d.ts
CHANGED
|
@@ -89,6 +89,13 @@ export interface DataTableColumn<Row extends Record<string, any> = Record<string
|
|
|
89
89
|
hideBelow?: number | "sm" | "md" | "lg" | "xl" | undefined;
|
|
90
90
|
/** Row actions (a DropdownMenu or IconButton). In stacked cards it sits top-right instead of in the field list. Give it an empty label. */
|
|
91
91
|
actions?: boolean | undefined;
|
|
92
|
+
/** Its place in a stacked card (5.13): `'hide'` leaves it out of the card (the grid keeps it), `'title'` / `'pill'`
|
|
93
|
+
* make it the card's title or the pill beside it (instead of the first column / first pill column), `'field'` a
|
|
94
|
+
* label/value field. Default: today's rule. */
|
|
95
|
+
card?: "hide" | "field" | "title" | "pill" | undefined;
|
|
96
|
+
/** The order of fields in a stacked card (5.13), lowest first; the grid's column order is unchanged. Fields
|
|
97
|
+
* without one sort by their column index (0-based). Screen readers and arrow keys follow the grid's order. */
|
|
98
|
+
cardOrder?: number | undefined;
|
|
92
99
|
/** `end` right-aligns header and cells (amounts, counts) and uses tabular figures. Default `start`. */
|
|
93
100
|
align?: "start" | "end" | undefined;
|
|
94
101
|
}
|
|
@@ -178,6 +185,9 @@ export interface DataTableProps<Row extends Record<string, any> = Record<string,
|
|
|
178
185
|
onRowActivate?: RowCallback<void, Row> | undefined;
|
|
179
186
|
/** Fixed height in px: sticky header, and only the rows in view are rendered. */
|
|
180
187
|
height?: number | undefined;
|
|
188
|
+
/** Stacked cards (`stackBelow`) without the row checkboxes and the select-all box (5.13). The grid keeps them and
|
|
189
|
+
* the selection is kept; Space doesn't change it while the cards show. */
|
|
190
|
+
hideSelectionInCards?: boolean | undefined;
|
|
181
191
|
/** `'auto'` (5.11): rows grow to fit content that wraps (two badges, a long name); cells stay vertically centred and
|
|
182
192
|
* rows keep at least the density's row height. Needs every row in the DOM, so it is ignored with `height`
|
|
183
193
|
* (virtualized rows are one fixed height). Default: one fixed-height line per row, long text ends in an ellipsis. */
|
|
@@ -387,6 +397,7 @@ export interface FilterBarProps {
|
|
|
387
397
|
onSearchChange?: ((value: string) => void) | undefined;
|
|
388
398
|
/** ms to wait after the last keystroke. Default 300. */
|
|
389
399
|
searchDelay?: number | undefined;
|
|
400
|
+
/** The search field's name. Default "Search". */
|
|
390
401
|
searchLabel?: string | undefined;
|
|
391
402
|
searchPlaceholder?: string | undefined;
|
|
392
403
|
/** Filter controls beside the search: Select, SegmentedControl, a Popover of options… */
|
|
@@ -401,6 +412,9 @@ export interface FilterBarProps {
|
|
|
401
412
|
actions?: React$1.ReactNode | undefined;
|
|
402
413
|
/** Accessible name of the region. Default "Filters". */
|
|
403
414
|
label?: string | undefined;
|
|
415
|
+
/** The search takes all the room the controls leave in its row, instead of stopping at 360px with the count and
|
|
416
|
+
* actions pushed to the end (5.12). */
|
|
417
|
+
searchGrow?: boolean | undefined;
|
|
404
418
|
className?: string | undefined;
|
|
405
419
|
}
|
|
406
420
|
/** One command in the palette. */
|
|
@@ -467,6 +481,20 @@ export interface SelectProps extends Omit<FieldProps, "label">, Omit<React$1.Sel
|
|
|
467
481
|
placeholder?: string | undefined;
|
|
468
482
|
icon?: IconInput | undefined;
|
|
469
483
|
}
|
|
484
|
+
/** A compact filter for FilterBar (5.12): "Status All ▾", as wide as its words. */
|
|
485
|
+
export interface FilterSelectProps extends Omit<React$1.SelectHTMLAttributes<HTMLSelectElement>, "onChange" | "value" | "defaultValue" | "multiple" | "size" | "placeholder" | "required" | "children"> {
|
|
486
|
+
/** The filter's name: shown first on the face ("Status") and its accessible name. */
|
|
487
|
+
label: string;
|
|
488
|
+
/** The choices; the first is the "all" choice. Or pass `<option>` children. */
|
|
489
|
+
options?: SelectOption[] | undefined;
|
|
490
|
+
children?: React$1.ReactNode | undefined;
|
|
491
|
+
value?: string | undefined;
|
|
492
|
+
defaultValue?: string | undefined;
|
|
493
|
+
onChange?: ((value: string) => void) | undefined;
|
|
494
|
+
/** A shorter word the face shows while the first option is chosen ("All" for "All statuses"). The list and screen
|
|
495
|
+
* readers keep the option's own text. */
|
|
496
|
+
allLabel?: string | undefined;
|
|
497
|
+
}
|
|
470
498
|
export type ChoiceOption = string | {
|
|
471
499
|
value: string;
|
|
472
500
|
label: string;
|
|
@@ -979,7 +1007,7 @@ export interface SeparatorProps {
|
|
|
979
1007
|
spacing?: 1 | 2 | 3 | 4 | 5 | 6 | 8 | undefined;
|
|
980
1008
|
className?: string | undefined;
|
|
981
1009
|
}
|
|
982
|
-
export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableElement>, "className"> {
|
|
1010
|
+
export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableElement>, "className" | "align"> {
|
|
983
1011
|
/** The table's name (a `<caption>`). Give every table one; `captionHidden` keeps it for screen readers only. */
|
|
984
1012
|
caption?: React$1.ReactNode | undefined;
|
|
985
1013
|
captionHidden?: boolean | undefined;
|
|
@@ -989,6 +1017,11 @@ export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableEl
|
|
|
989
1017
|
* cell shows its column's header as a label: a `Td`'s `label`, else the text of the matching `Th` in `THead`.
|
|
990
1018
|
* Done in CSS (a container query), so the server's HTML is already right; table semantics are kept. */
|
|
991
1019
|
stackBelow?: "sm" | "md" | undefined;
|
|
1020
|
+
/** `middle` centres every body and footer cell on its row (5.13); default `top`, so wrapped text starts level. */
|
|
1021
|
+
align?: "top" | "middle" | undefined;
|
|
1022
|
+
/** `false` (5.13) drops the frame — border, radius, background — and the outer cells' side padding, so the table
|
|
1023
|
+
* lines up with the content around it, e.g. flush inside a Card under its heading. Default `true`. */
|
|
1024
|
+
bordered?: boolean | undefined;
|
|
992
1025
|
className?: string | undefined;
|
|
993
1026
|
children?: React$1.ReactNode | undefined;
|
|
994
1027
|
}
|
|
@@ -1009,6 +1042,10 @@ export interface TableCellProps extends Omit<React$1.TdHTMLAttributes<HTMLTableC
|
|
|
1009
1042
|
scope?: "col" | "row" | "colgroup" | "rowgroup" | undefined;
|
|
1010
1043
|
/** The label this cell shows when its table is stacked (`stackBelow`, 5.8). Default: the matching header's text. */
|
|
1011
1044
|
label?: string | undefined;
|
|
1045
|
+
/** Its place in a stacked row (5.13), on a Td or a row header (`Th scope="row"`). `title` takes the first line,
|
|
1046
|
+
* without a label; `action` sits at the end of that line at its natural size; `field` (default) is a labelled field,
|
|
1047
|
+
* two to a line under them. */
|
|
1048
|
+
card?: "title" | "action" | "field" | undefined;
|
|
1012
1049
|
className?: string | undefined;
|
|
1013
1050
|
}
|
|
1014
1051
|
export interface ActionBarProps {
|
|
@@ -1184,7 +1221,7 @@ export interface SkeletonProps {
|
|
|
1184
1221
|
size?: number | undefined;
|
|
1185
1222
|
className?: string | undefined;
|
|
1186
1223
|
}
|
|
1187
|
-
export interface EmptyStateProps {
|
|
1224
|
+
export interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "children"> {
|
|
1188
1225
|
title: React$1.ReactNode;
|
|
1189
1226
|
description?: React$1.ReactNode | undefined;
|
|
1190
1227
|
icon?: IconInput | undefined;
|
|
@@ -1192,6 +1229,9 @@ export interface EmptyStateProps {
|
|
|
1192
1229
|
action?: React$1.ReactNode | undefined;
|
|
1193
1230
|
size?: "sm" | "md" | undefined;
|
|
1194
1231
|
bordered?: boolean | undefined;
|
|
1232
|
+
/** `danger` (5.13) for a failure — the data couldn't load: the danger tint, a danger-coloured icon, and a solid
|
|
1233
|
+
* danger frame with `bordered`. It stays quiet; pass `role="alert"` if it must interrupt. Default `neutral`. */
|
|
1234
|
+
tone?: "neutral" | "danger" | undefined;
|
|
1195
1235
|
headingLevel?: 2 | 3 | 4 | 5 | 6 | undefined;
|
|
1196
1236
|
className?: string | undefined;
|
|
1197
1237
|
}
|
|
@@ -1338,6 +1378,9 @@ export declare const TextField: React$1.ForwardRefExoticComponent<TextFieldProps
|
|
|
1338
1378
|
export declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
|
|
1339
1379
|
/** A select field: a button that opens an AURA list (5.3), over a real <select> that keeps forms, refs and events. */
|
|
1340
1380
|
export declare const Select: React$1.ForwardRefExoticComponent<SelectProps & React$1.RefAttributes<HTMLSelectElement>>;
|
|
1381
|
+
/** A compact filter for FilterBar (5.12): a small button reading "Status All ▾" that opens Select's list. The name
|
|
1382
|
+
* is the accessible name, the chosen option its value; forms, refs and the keyboard work as in Select. */
|
|
1383
|
+
export declare const FilterSelect: React$1.ForwardRefExoticComponent<FilterSelectProps & React$1.RefAttributes<HTMLSelectElement>>;
|
|
1341
1384
|
export declare const RadioGroup: React$1.ForwardRefExoticComponent<RadioGroupProps & React$1.RefAttributes<HTMLFieldSetElement>>;
|
|
1342
1385
|
export declare const Switch: React$1.ForwardRefExoticComponent<SwitchProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
1343
1386
|
/** One value, or with `multiple` any number (chips). Two call signatures so value/onChange are typed for each. */
|
package/dist/server/index.cjs
CHANGED
|
@@ -1148,11 +1148,30 @@ function badgeElement(props, ref) {
|
|
|
1148
1148
|
}
|
|
1149
1149
|
function emptyStateElement(props, ref) {
|
|
1150
1150
|
const HT = "h" + (props.headingLevel || 3);
|
|
1151
|
+
const rest = omit(props, [
|
|
1152
|
+
"title",
|
|
1153
|
+
"description",
|
|
1154
|
+
"icon",
|
|
1155
|
+
"action",
|
|
1156
|
+
"size",
|
|
1157
|
+
"bordered",
|
|
1158
|
+
"headingLevel",
|
|
1159
|
+
"tone",
|
|
1160
|
+
"className",
|
|
1161
|
+
"children"
|
|
1162
|
+
]);
|
|
1151
1163
|
return /* @__PURE__ */ React3.createElement(
|
|
1152
1164
|
"div",
|
|
1153
1165
|
{
|
|
1166
|
+
...rest,
|
|
1154
1167
|
ref,
|
|
1155
|
-
className: cx(
|
|
1168
|
+
className: cx(
|
|
1169
|
+
"aura-empty",
|
|
1170
|
+
props.size === "sm" && "is-sm",
|
|
1171
|
+
props.bordered && "is-bordered",
|
|
1172
|
+
props.tone === "danger" && "is-danger",
|
|
1173
|
+
props.className
|
|
1174
|
+
)
|
|
1156
1175
|
},
|
|
1157
1176
|
/* @__PURE__ */ React3.createElement("span", { className: "aura-empty__icon", "aria-hidden": true }, /* @__PURE__ */ React3.createElement(Icon, { name: props.icon || /* @__PURE__ */ React3.createElement(IconInbox, null), size: props.size === "sm" ? "md" : "lg" })),
|
|
1158
1177
|
/* @__PURE__ */ React3.createElement(HT, { className: "aura-empty__title" }, props.title),
|
package/dist/server/index.d.cts
CHANGED
|
@@ -96,7 +96,7 @@ export interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
|
|
|
96
96
|
variant?: "soft" | "solid" | "outline" | undefined;
|
|
97
97
|
icon?: IconInput | undefined;
|
|
98
98
|
}
|
|
99
|
-
export interface EmptyStateProps {
|
|
99
|
+
export interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "children"> {
|
|
100
100
|
title: React$1.ReactNode;
|
|
101
101
|
description?: React$1.ReactNode | undefined;
|
|
102
102
|
icon?: IconInput | undefined;
|
|
@@ -104,6 +104,9 @@ export interface EmptyStateProps {
|
|
|
104
104
|
action?: React$1.ReactNode | undefined;
|
|
105
105
|
size?: "sm" | "md" | undefined;
|
|
106
106
|
bordered?: boolean | undefined;
|
|
107
|
+
/** `danger` (5.13) for a failure — the data couldn't load: the danger tint, a danger-coloured icon, and a solid
|
|
108
|
+
* danger frame with `bordered`. It stays quiet; pass `role="alert"` if it must interrupt. Default `neutral`. */
|
|
109
|
+
tone?: "neutral" | "danger" | undefined;
|
|
107
110
|
headingLevel?: 2 | 3 | 4 | 5 | 6 | undefined;
|
|
108
111
|
className?: string | undefined;
|
|
109
112
|
}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -96,7 +96,7 @@ export interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
|
|
|
96
96
|
variant?: "soft" | "solid" | "outline" | undefined;
|
|
97
97
|
icon?: IconInput | undefined;
|
|
98
98
|
}
|
|
99
|
-
export interface EmptyStateProps {
|
|
99
|
+
export interface EmptyStateProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title" | "children"> {
|
|
100
100
|
title: React$1.ReactNode;
|
|
101
101
|
description?: React$1.ReactNode | undefined;
|
|
102
102
|
icon?: IconInput | undefined;
|
|
@@ -104,6 +104,9 @@ export interface EmptyStateProps {
|
|
|
104
104
|
action?: React$1.ReactNode | undefined;
|
|
105
105
|
size?: "sm" | "md" | undefined;
|
|
106
106
|
bordered?: boolean | undefined;
|
|
107
|
+
/** `danger` (5.13) for a failure — the data couldn't load: the danger tint, a danger-coloured icon, and a solid
|
|
108
|
+
* danger frame with `bordered`. It stays quiet; pass `role="alert"` if it must interrupt. Default `neutral`. */
|
|
109
|
+
tone?: "neutral" | "danger" | undefined;
|
|
107
110
|
headingLevel?: 2 | 3 | 4 | 5 | 6 | undefined;
|
|
108
111
|
className?: string | undefined;
|
|
109
112
|
}
|
package/dist/server/index.js
CHANGED
|
@@ -1091,11 +1091,30 @@ function badgeElement(props, ref) {
|
|
|
1091
1091
|
}
|
|
1092
1092
|
function emptyStateElement(props, ref) {
|
|
1093
1093
|
const HT = "h" + (props.headingLevel || 3);
|
|
1094
|
+
const rest = omit(props, [
|
|
1095
|
+
"title",
|
|
1096
|
+
"description",
|
|
1097
|
+
"icon",
|
|
1098
|
+
"action",
|
|
1099
|
+
"size",
|
|
1100
|
+
"bordered",
|
|
1101
|
+
"headingLevel",
|
|
1102
|
+
"tone",
|
|
1103
|
+
"className",
|
|
1104
|
+
"children"
|
|
1105
|
+
]);
|
|
1094
1106
|
return /* @__PURE__ */ React3.createElement(
|
|
1095
1107
|
"div",
|
|
1096
1108
|
{
|
|
1109
|
+
...rest,
|
|
1097
1110
|
ref,
|
|
1098
|
-
className: cx(
|
|
1111
|
+
className: cx(
|
|
1112
|
+
"aura-empty",
|
|
1113
|
+
props.size === "sm" && "is-sm",
|
|
1114
|
+
props.bordered && "is-bordered",
|
|
1115
|
+
props.tone === "danger" && "is-danger",
|
|
1116
|
+
props.className
|
|
1117
|
+
)
|
|
1099
1118
|
},
|
|
1100
1119
|
/* @__PURE__ */ React3.createElement("span", { className: "aura-empty__icon", "aria-hidden": true }, /* @__PURE__ */ React3.createElement(Icon, { name: props.icon || /* @__PURE__ */ React3.createElement(IconInbox, null), size: props.size === "sm" ? "md" : "lg" })),
|
|
1101
1120
|
/* @__PURE__ */ React3.createElement(HT, { className: "aura-empty__title" }, props.title),
|
package/dist/styles.css
CHANGED
|
@@ -1083,6 +1083,10 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
|
|
|
1083
1083
|
.aura-empty__title { margin: 0; font-size: 16px; line-height: 1.5; font-weight: 600; }
|
|
1084
1084
|
.aura-empty__text { margin: 0; max-width: 44ch; font-size: 14px; line-height: 1.6; color: var(--aura-fg-secondary); }
|
|
1085
1085
|
.aura-empty__action { margin-top: var(--aura-space-3); display: flex; gap: var(--aura-space-3); flex-wrap: wrap; justify-content: center; }
|
|
1086
|
+
/* 5.13 (Chamber-OS 82): tone="danger" — a load failure. */
|
|
1087
|
+
.aura-empty.is-danger { background: var(--aura-alert-danger-bg); border-radius: var(--aura-radius-lg); }
|
|
1088
|
+
.aura-empty.is-danger.is-bordered { border: 1px solid var(--aura-border-danger); }
|
|
1089
|
+
.aura-empty.is-danger .aura-empty__icon { background: var(--aura-bg-surface); color: var(--aura-fg-danger); }
|
|
1086
1090
|
|
|
1087
1091
|
/* ---------- Pagination ---------- */
|
|
1088
1092
|
.aura-pagination { display: flex; align-items: center; gap: var(--aura-space-1); font-family: var(--font-sans); font-size: 13px; }
|
|
@@ -1363,6 +1367,37 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1363
1367
|
.aura-filterbar__search { flex-basis: 100%; max-width: none; }
|
|
1364
1368
|
.aura-filterbar__spacer { display: none; }
|
|
1365
1369
|
}
|
|
1370
|
+
/* 5.12 searchGrow: the search fills what the controls leave. */
|
|
1371
|
+
.aura-filterbar--grow .aura-filterbar__search { max-width: none; }
|
|
1372
|
+
.aura-filterbar--grow .aura-filterbar__search ~ .aura-filterbar__spacer { display: none; }
|
|
1373
|
+
/* Compact filters sit closer together than full fields. */
|
|
1374
|
+
.aura-filterbar__controls:has(> .aura-filterselect) { gap: var(--aura-space-2); }
|
|
1375
|
+
|
|
1376
|
+
/* 5.12 FilterSelect: a compact face — "Status All ▾" — as wide as its words, over Select's machinery and list. */
|
|
1377
|
+
.aura-filterselect { position: relative; display: inline-flex; width: fit-content; max-width: 100%; vertical-align: middle; font-family: var(--font-sans); }
|
|
1378
|
+
.aura-filterselect__face {
|
|
1379
|
+
box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--aura-space-1); width: auto; max-width: 100%;
|
|
1380
|
+
min-height: var(--aura-input-height); padding-block: 0; padding-inline: var(--aura-space-2) var(--aura-space-1);
|
|
1381
|
+
background: var(--aura-bg-input); color: var(--aura-fg-primary);
|
|
1382
|
+
border: 1px solid var(--aura-border-control); border-radius: var(--aura-radius-md);
|
|
1383
|
+
font: inherit; font-size: 13px; line-height: 18px; text-align: start; cursor: pointer;
|
|
1384
|
+
transition: border-color var(--aura-duration-fast) var(--aura-ease);
|
|
1385
|
+
}
|
|
1386
|
+
.aura-filterselect__face:hover { border-color: var(--aura-fg-secondary); }
|
|
1387
|
+
.aura-filterselect__name { flex: none; white-space: nowrap; color: var(--aura-fg-secondary); }
|
|
1388
|
+
.aura-filterselect__value { min-width: 0; font-weight: 500; overflow-wrap: anywhere; }
|
|
1389
|
+
.aura-filterselect__chevron { flex: none; width: 14px; height: 14px; color: var(--aura-fg-secondary); }
|
|
1390
|
+
.aura-filterselect.is-open .aura-filterselect__chevron { transform: rotate(180deg); }
|
|
1391
|
+
.aura-filterselect__face:focus-visible, .aura-filterselect:has(.aura-filterselect__native:focus-visible) .aura-filterselect__face {
|
|
1392
|
+
outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 1px; border-color: var(--aura-border-strong);
|
|
1393
|
+
}
|
|
1394
|
+
.aura-filterselect__face:focus { outline-style: none; }
|
|
1395
|
+
.aura-filterselect__face:focus-visible { outline-style: solid; }
|
|
1396
|
+
/* Before hydration: the real <select>, invisible, over the face (16px so iOS doesn't zoom when it opens). */
|
|
1397
|
+
.aura-filterselect__native { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; padding: 0; border: 0; opacity: 0; font-size: 16px; cursor: pointer; appearance: none; }
|
|
1398
|
+
.aura-filterselect.is-disabled .aura-filterselect__face { background: var(--aura-bg-input-disabled); color: var(--aura-fg-secondary); border-color: var(--aura-border-default); cursor: not-allowed; }
|
|
1399
|
+
.aura-filterselect.is-disabled .aura-filterselect__native { cursor: not-allowed; }
|
|
1400
|
+
@media (forced-colors: active) { .aura-filterselect__face { border-color: ButtonText; } }
|
|
1366
1401
|
|
|
1367
1402
|
/* Command palette: a search field over a grouped list, above everything else (it can open from a Dialog) */
|
|
1368
1403
|
.aura-dialog-layer.aura-command-layer { z-index: var(--aura-z-menu); align-items: flex-start; padding: 12vh var(--aura-space-4) var(--aura-space-4); }
|
|
@@ -1517,6 +1552,13 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1517
1552
|
.aura-tbl .is-numeric { font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
1518
1553
|
.aura-tbl-wrap[data-density='compact'] .aura-tbl__th, .aura-tbl-wrap[data-density='compact'] .aura-tbl__td { padding-top: var(--aura-space-2); padding-bottom: var(--aura-space-2); }
|
|
1519
1554
|
.aura-tbl-wrap:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 2px; }
|
|
1555
|
+
/* 5.13 (Chamber-OS 81): align="middle" centres body and footer cells on their row; bordered={false} drops the frame and
|
|
1556
|
+
* the outer cells' side padding, so the table lines up with what's around it (a Card's heading). */
|
|
1557
|
+
.aura-tbl--middle > .aura-tbl__body > .aura-tbl__row > *, .aura-tbl--middle > .aura-tbl__foot > .aura-tbl__row > * { vertical-align: middle; }
|
|
1558
|
+
.aura-tbl-wrap.is-flush { border: 0; border-radius: 0; background: transparent; }
|
|
1559
|
+
.aura-tbl-wrap.is-flush > .aura-tbl > * > .aura-tbl__row > :first-child { padding-inline-start: 0; }
|
|
1560
|
+
.aura-tbl-wrap.is-flush > .aura-tbl > * > .aura-tbl__row > :last-child { padding-inline-end: 0; }
|
|
1561
|
+
.aura-tbl-wrap.is-flush > .aura-tbl > .aura-tbl__caption { padding-inline: 0; }
|
|
1520
1562
|
/* Stacked rows (5.8, Chamber-OS 67): below `stackBelow` (the table's own box: sm 640px, md 768px) each body row is a
|
|
1521
1563
|
* card and each cell shows its column label. The column headers stay for screen readers (visually hidden) and the
|
|
1522
1564
|
* table keeps explicit roles. The box is a size container, so it needs a width of its own. */
|
|
@@ -1531,6 +1573,14 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1531
1573
|
.aura-tbl--stack-md > * > .aura-tbl__row > .aura-tbl__th, .aura-tbl--stack-md > * > .aura-tbl__row > .aura-tbl__td { padding: 0; border-top: 0; background: none; text-align: start; white-space: normal; }
|
|
1532
1574
|
.aura-tbl--stack-md > * > .aura-tbl__row > * + * { margin-top: var(--aura-space-2); }
|
|
1533
1575
|
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row > .aura-tbl__th { font-size: 14px; font-weight: 600; }
|
|
1576
|
+
/* 5.13 (Chamber-OS 84): a row with a title or action cell — title and action share the first line, fields two to a line under them. */
|
|
1577
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) { display: flex; flex-wrap: wrap; align-items: flex-start; column-gap: var(--aura-space-4); }
|
|
1578
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card])::after { content: ''; order: 3; flex: 0 0 100%; }
|
|
1579
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > * { order: 4; flex: 0 0 calc(50% - var(--aura-space-4) / 2); min-width: 0; margin-top: var(--aura-space-2); }
|
|
1580
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card] { margin-top: 0; }
|
|
1581
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card='title'] { order: 1; flex: 1 1 0; font-size: 14px; font-weight: 600; }
|
|
1582
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card='action'] { order: 2; flex: none; margin-inline-start: auto; }
|
|
1583
|
+
.aura-tbl-wrap.is-flush > .aura-tbl--stack-md > .aura-tbl__caption { padding-inline: var(--aura-space-4); }
|
|
1534
1584
|
.aura-tbl--stack-md > * > .aura-tbl__row > .aura-tbl__td[data-label]::before {
|
|
1535
1585
|
content: attr(data-label); content: attr(data-label) / '';
|
|
1536
1586
|
display: block; margin-bottom: 2px; font-family: var(--font-mono); font-size: 11px; line-height: 16px; font-weight: 400; color: var(--aura-fg-secondary);
|
|
@@ -1546,6 +1596,14 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1546
1596
|
.aura-tbl--stack-sm > * > .aura-tbl__row > .aura-tbl__th, .aura-tbl--stack-sm > * > .aura-tbl__row > .aura-tbl__td { padding: 0; border-top: 0; background: none; text-align: start; white-space: normal; }
|
|
1547
1597
|
.aura-tbl--stack-sm > * > .aura-tbl__row > * + * { margin-top: var(--aura-space-2); }
|
|
1548
1598
|
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row > .aura-tbl__th { font-size: 14px; font-weight: 600; }
|
|
1599
|
+
/* 5.13 (Chamber-OS 84): a row with a title or action cell — title and action share the first line, fields two to a line under them. */
|
|
1600
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) { display: flex; flex-wrap: wrap; align-items: flex-start; column-gap: var(--aura-space-4); }
|
|
1601
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card])::after { content: ''; order: 3; flex: 0 0 100%; }
|
|
1602
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > * { order: 4; flex: 0 0 calc(50% - var(--aura-space-4) / 2); min-width: 0; margin-top: var(--aura-space-2); }
|
|
1603
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card] { margin-top: 0; }
|
|
1604
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card='title'] { order: 1; flex: 1 1 0; font-size: 14px; font-weight: 600; }
|
|
1605
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card='action'] { order: 2; flex: none; margin-inline-start: auto; }
|
|
1606
|
+
.aura-tbl-wrap.is-flush > .aura-tbl--stack-sm > .aura-tbl__caption { padding-inline: var(--aura-space-4); }
|
|
1549
1607
|
.aura-tbl--stack-sm > * > .aura-tbl__row > .aura-tbl__td[data-label]::before {
|
|
1550
1608
|
content: attr(data-label); content: attr(data-label) / '';
|
|
1551
1609
|
display: block; margin-bottom: 2px; font-family: var(--font-mono); font-size: 11px; line-height: 16px; font-weight: 400; color: var(--aura-fg-secondary);
|
|
@@ -1598,6 +1656,14 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1598
1656
|
padding: 0; line-height: normal;
|
|
1599
1657
|
}
|
|
1600
1658
|
.aura-table__td[data-hide], .aura-table__head > .aura-table__th[data-hide] { display: block; }
|
|
1659
|
+
/* 5.13 (Chamber-OS 80): card: 'hide' leaves a column out of the card; cardOrder orders the fields. */
|
|
1660
|
+
.aura-table__td[data-card='hide'], .aura-table__head > .aura-table__th[data-card='hide'],
|
|
1661
|
+
.aura-table__row--skeleton .aura-table__td[data-card='hide'] { display: none; }
|
|
1662
|
+
.aura-table__td[data-card='field'] { order: var(--aura-card-order, 5); }
|
|
1663
|
+
/* hideSelectionInCards: no row boxes, no select-all line. */
|
|
1664
|
+
.aura-table--cards-nosel .aura-table__row > .aura-table__sel { display: none; }
|
|
1665
|
+
.aura-table--cards-nosel .aura-table__head { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); }
|
|
1666
|
+
.aura-table--cards-nosel .aura-table__head > .aura-table__sel { display: none; }
|
|
1601
1667
|
/* 5.11: rowHeight="auto" leaves cards as they are. */
|
|
1602
1668
|
.aura-table__td--auto { display: block; white-space: nowrap; }
|
|
1603
1669
|
.aura-table__td--auto .aura-table__cell > .aura-badge, .aura-table__td--auto .aura-table__cell > .aura-pill { margin: 0; }
|
package/dist/styles.layer.css
CHANGED
|
@@ -1085,6 +1085,10 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
|
|
|
1085
1085
|
.aura-empty__title { margin: 0; font-size: 16px; line-height: 1.5; font-weight: 600; }
|
|
1086
1086
|
.aura-empty__text { margin: 0; max-width: 44ch; font-size: 14px; line-height: 1.6; color: var(--aura-fg-secondary); }
|
|
1087
1087
|
.aura-empty__action { margin-top: var(--aura-space-3); display: flex; gap: var(--aura-space-3); flex-wrap: wrap; justify-content: center; }
|
|
1088
|
+
/* 5.13 (Chamber-OS 82): tone="danger" — a load failure. */
|
|
1089
|
+
.aura-empty.is-danger { background: var(--aura-alert-danger-bg); border-radius: var(--aura-radius-lg); }
|
|
1090
|
+
.aura-empty.is-danger.is-bordered { border: 1px solid var(--aura-border-danger); }
|
|
1091
|
+
.aura-empty.is-danger .aura-empty__icon { background: var(--aura-bg-surface); color: var(--aura-fg-danger); }
|
|
1088
1092
|
|
|
1089
1093
|
/* ---------- Pagination ---------- */
|
|
1090
1094
|
.aura-pagination { display: flex; align-items: center; gap: var(--aura-space-1); font-family: var(--font-sans); font-size: 13px; }
|
|
@@ -1365,6 +1369,37 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1365
1369
|
.aura-filterbar__search { flex-basis: 100%; max-width: none; }
|
|
1366
1370
|
.aura-filterbar__spacer { display: none; }
|
|
1367
1371
|
}
|
|
1372
|
+
/* 5.12 searchGrow: the search fills what the controls leave. */
|
|
1373
|
+
.aura-filterbar--grow .aura-filterbar__search { max-width: none; }
|
|
1374
|
+
.aura-filterbar--grow .aura-filterbar__search ~ .aura-filterbar__spacer { display: none; }
|
|
1375
|
+
/* Compact filters sit closer together than full fields. */
|
|
1376
|
+
.aura-filterbar__controls:has(> .aura-filterselect) { gap: var(--aura-space-2); }
|
|
1377
|
+
|
|
1378
|
+
/* 5.12 FilterSelect: a compact face — "Status All ▾" — as wide as its words, over Select's machinery and list. */
|
|
1379
|
+
.aura-filterselect { position: relative; display: inline-flex; width: fit-content; max-width: 100%; vertical-align: middle; font-family: var(--font-sans); }
|
|
1380
|
+
.aura-filterselect__face {
|
|
1381
|
+
box-sizing: border-box; display: inline-flex; align-items: center; gap: var(--aura-space-1); width: auto; max-width: 100%;
|
|
1382
|
+
min-height: var(--aura-input-height); padding-block: 0; padding-inline: var(--aura-space-2) var(--aura-space-1);
|
|
1383
|
+
background: var(--aura-bg-input); color: var(--aura-fg-primary);
|
|
1384
|
+
border: 1px solid var(--aura-border-control); border-radius: var(--aura-radius-md);
|
|
1385
|
+
font: inherit; font-size: 13px; line-height: 18px; text-align: start; cursor: pointer;
|
|
1386
|
+
transition: border-color var(--aura-duration-fast) var(--aura-ease);
|
|
1387
|
+
}
|
|
1388
|
+
.aura-filterselect__face:hover { border-color: var(--aura-fg-secondary); }
|
|
1389
|
+
.aura-filterselect__name { flex: none; white-space: nowrap; color: var(--aura-fg-secondary); }
|
|
1390
|
+
.aura-filterselect__value { min-width: 0; font-weight: 500; overflow-wrap: anywhere; }
|
|
1391
|
+
.aura-filterselect__chevron { flex: none; width: 14px; height: 14px; color: var(--aura-fg-secondary); }
|
|
1392
|
+
.aura-filterselect.is-open .aura-filterselect__chevron { transform: rotate(180deg); }
|
|
1393
|
+
.aura-filterselect__face:focus-visible, .aura-filterselect:has(.aura-filterselect__native:focus-visible) .aura-filterselect__face {
|
|
1394
|
+
outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 1px; border-color: var(--aura-border-strong);
|
|
1395
|
+
}
|
|
1396
|
+
.aura-filterselect__face:focus { outline-style: none; }
|
|
1397
|
+
.aura-filterselect__face:focus-visible { outline-style: solid; }
|
|
1398
|
+
/* Before hydration: the real <select>, invisible, over the face (16px so iOS doesn't zoom when it opens). */
|
|
1399
|
+
.aura-filterselect__native { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; padding: 0; border: 0; opacity: 0; font-size: 16px; cursor: pointer; appearance: none; }
|
|
1400
|
+
.aura-filterselect.is-disabled .aura-filterselect__face { background: var(--aura-bg-input-disabled); color: var(--aura-fg-secondary); border-color: var(--aura-border-default); cursor: not-allowed; }
|
|
1401
|
+
.aura-filterselect.is-disabled .aura-filterselect__native { cursor: not-allowed; }
|
|
1402
|
+
@media (forced-colors: active) { .aura-filterselect__face { border-color: ButtonText; } }
|
|
1368
1403
|
|
|
1369
1404
|
/* Command palette: a search field over a grouped list, above everything else (it can open from a Dialog) */
|
|
1370
1405
|
.aura-dialog-layer.aura-command-layer { z-index: var(--aura-z-menu); align-items: flex-start; padding: 12vh var(--aura-space-4) var(--aura-space-4); }
|
|
@@ -1519,6 +1554,13 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1519
1554
|
.aura-tbl .is-numeric { font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
1520
1555
|
.aura-tbl-wrap[data-density='compact'] .aura-tbl__th, .aura-tbl-wrap[data-density='compact'] .aura-tbl__td { padding-top: var(--aura-space-2); padding-bottom: var(--aura-space-2); }
|
|
1521
1556
|
.aura-tbl-wrap:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 2px; }
|
|
1557
|
+
/* 5.13 (Chamber-OS 81): align="middle" centres body and footer cells on their row; bordered={false} drops the frame and
|
|
1558
|
+
* the outer cells' side padding, so the table lines up with what's around it (a Card's heading). */
|
|
1559
|
+
.aura-tbl--middle > .aura-tbl__body > .aura-tbl__row > *, .aura-tbl--middle > .aura-tbl__foot > .aura-tbl__row > * { vertical-align: middle; }
|
|
1560
|
+
.aura-tbl-wrap.is-flush { border: 0; border-radius: 0; background: transparent; }
|
|
1561
|
+
.aura-tbl-wrap.is-flush > .aura-tbl > * > .aura-tbl__row > :first-child { padding-inline-start: 0; }
|
|
1562
|
+
.aura-tbl-wrap.is-flush > .aura-tbl > * > .aura-tbl__row > :last-child { padding-inline-end: 0; }
|
|
1563
|
+
.aura-tbl-wrap.is-flush > .aura-tbl > .aura-tbl__caption { padding-inline: 0; }
|
|
1522
1564
|
/* Stacked rows (5.8, Chamber-OS 67): below `stackBelow` (the table's own box: sm 640px, md 768px) each body row is a
|
|
1523
1565
|
* card and each cell shows its column label. The column headers stay for screen readers (visually hidden) and the
|
|
1524
1566
|
* table keeps explicit roles. The box is a size container, so it needs a width of its own. */
|
|
@@ -1533,6 +1575,14 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1533
1575
|
.aura-tbl--stack-md > * > .aura-tbl__row > .aura-tbl__th, .aura-tbl--stack-md > * > .aura-tbl__row > .aura-tbl__td { padding: 0; border-top: 0; background: none; text-align: start; white-space: normal; }
|
|
1534
1576
|
.aura-tbl--stack-md > * > .aura-tbl__row > * + * { margin-top: var(--aura-space-2); }
|
|
1535
1577
|
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row > .aura-tbl__th { font-size: 14px; font-weight: 600; }
|
|
1578
|
+
/* 5.13 (Chamber-OS 84): a row with a title or action cell — title and action share the first line, fields two to a line under them. */
|
|
1579
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) { display: flex; flex-wrap: wrap; align-items: flex-start; column-gap: var(--aura-space-4); }
|
|
1580
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card])::after { content: ''; order: 3; flex: 0 0 100%; }
|
|
1581
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > * { order: 4; flex: 0 0 calc(50% - var(--aura-space-4) / 2); min-width: 0; margin-top: var(--aura-space-2); }
|
|
1582
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card] { margin-top: 0; }
|
|
1583
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card='title'] { order: 1; flex: 1 1 0; font-size: 14px; font-weight: 600; }
|
|
1584
|
+
.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card='action'] { order: 2; flex: none; margin-inline-start: auto; }
|
|
1585
|
+
.aura-tbl-wrap.is-flush > .aura-tbl--stack-md > .aura-tbl__caption { padding-inline: var(--aura-space-4); }
|
|
1536
1586
|
.aura-tbl--stack-md > * > .aura-tbl__row > .aura-tbl__td[data-label]::before {
|
|
1537
1587
|
content: attr(data-label); content: attr(data-label) / '';
|
|
1538
1588
|
display: block; margin-bottom: 2px; font-family: var(--font-mono); font-size: 11px; line-height: 16px; font-weight: 400; color: var(--aura-fg-secondary);
|
|
@@ -1548,6 +1598,14 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1548
1598
|
.aura-tbl--stack-sm > * > .aura-tbl__row > .aura-tbl__th, .aura-tbl--stack-sm > * > .aura-tbl__row > .aura-tbl__td { padding: 0; border-top: 0; background: none; text-align: start; white-space: normal; }
|
|
1549
1599
|
.aura-tbl--stack-sm > * > .aura-tbl__row > * + * { margin-top: var(--aura-space-2); }
|
|
1550
1600
|
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row > .aura-tbl__th { font-size: 14px; font-weight: 600; }
|
|
1601
|
+
/* 5.13 (Chamber-OS 84): a row with a title or action cell — title and action share the first line, fields two to a line under them. */
|
|
1602
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) { display: flex; flex-wrap: wrap; align-items: flex-start; column-gap: var(--aura-space-4); }
|
|
1603
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card])::after { content: ''; order: 3; flex: 0 0 100%; }
|
|
1604
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > * { order: 4; flex: 0 0 calc(50% - var(--aura-space-4) / 2); min-width: 0; margin-top: var(--aura-space-2); }
|
|
1605
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card] { margin-top: 0; }
|
|
1606
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card='title'] { order: 1; flex: 1 1 0; font-size: 14px; font-weight: 600; }
|
|
1607
|
+
.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row:has(> [data-card]) > [data-card='action'] { order: 2; flex: none; margin-inline-start: auto; }
|
|
1608
|
+
.aura-tbl-wrap.is-flush > .aura-tbl--stack-sm > .aura-tbl__caption { padding-inline: var(--aura-space-4); }
|
|
1551
1609
|
.aura-tbl--stack-sm > * > .aura-tbl__row > .aura-tbl__td[data-label]::before {
|
|
1552
1610
|
content: attr(data-label); content: attr(data-label) / '';
|
|
1553
1611
|
display: block; margin-bottom: 2px; font-family: var(--font-mono); font-size: 11px; line-height: 16px; font-weight: 400; color: var(--aura-fg-secondary);
|
|
@@ -1600,6 +1658,14 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1600
1658
|
padding: 0; line-height: normal;
|
|
1601
1659
|
}
|
|
1602
1660
|
.aura-table__td[data-hide], .aura-table__head > .aura-table__th[data-hide] { display: block; }
|
|
1661
|
+
/* 5.13 (Chamber-OS 80): card: 'hide' leaves a column out of the card; cardOrder orders the fields. */
|
|
1662
|
+
.aura-table__td[data-card='hide'], .aura-table__head > .aura-table__th[data-card='hide'],
|
|
1663
|
+
.aura-table__row--skeleton .aura-table__td[data-card='hide'] { display: none; }
|
|
1664
|
+
.aura-table__td[data-card='field'] { order: var(--aura-card-order, 5); }
|
|
1665
|
+
/* hideSelectionInCards: no row boxes, no select-all line. */
|
|
1666
|
+
.aura-table--cards-nosel .aura-table__row > .aura-table__sel { display: none; }
|
|
1667
|
+
.aura-table--cards-nosel .aura-table__head { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); }
|
|
1668
|
+
.aura-table--cards-nosel .aura-table__head > .aura-table__sel { display: none; }
|
|
1603
1669
|
/* 5.11: rowHeight="auto" leaves cards as they are. */
|
|
1604
1670
|
.aura-table__td--auto { display: block; white-space: nowrap; }
|
|
1605
1671
|
.aura-table__td--auto .aura-table__cell > .aura-badge, .aura-table__td--auto .aura-table__cell > .aura-pill { margin: 0; }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jirawatpyk/aura-react",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.13.0",
|
|
4
4
|
"description": "AURA Design System — React components (Enterprise Standard, Human Creative). Thai-first: Buddhist-era dates, Thai collation.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|