@jirawatpyk/aura-react 5.25.0 → 5.27.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/dist/index.d.cts CHANGED
@@ -236,6 +236,18 @@ export interface DataTableProps<Row extends Record<string, any> = Record<string,
236
236
  density?: "comfortable" | "compact" | undefined;
237
237
  /** Table width in px below which rows render as stacked cards (phones). Try 640. It follows the table's own width, not the window. Since 4.20 the cards are the same markup as the grid, laid out by a container query, so any width is right before hydration and each row is in the HTML once. With `height` (virtual rows) the server can only send the first screenful; the rest of the cards arrive on hydration. */
238
238
  stackBelow?: number | undefined;
239
+ /** Edge to edge inside a Card (5.26, Chamber-OS 127): anywhere in a Card's content — also inside your own wrappers,
240
+ * as long as they add no padding or frame and don't clip or scroll (5.27, 130) — the table spans the card's full inner width, no side borders
241
+ * or radius, keeping its header band and top rule. As a direct child that is the card's last content (no footer,
242
+ * nothing after it), or with `bleedEnd`, it drops its bottom rule and the card's radius closes it. Below the Card's
243
+ * `flushBelow` width, and outside a Card, it does nothing. */
244
+ bleed?: boolean | undefined;
245
+ /** With `bleed`: the table ends the card even though it sits inside your wrappers — no bottom rule, the card's radius
246
+ * closes it. Only when nothing follows it in the card and the Card has no `footer` (5.27). */
247
+ bleedEnd?: boolean | undefined;
248
+ /** `false` drops the frame — border and radius — keeping the header band and the 24px gutter, for a table that sits
249
+ * in a section without bleeding (5.26). Default `true`. */
250
+ bordered?: boolean | undefined;
239
251
  className?: string | undefined;
240
252
  }
241
253
  /** An AURA icon name, or any icon element (e.g. `<Building />` from lucide-react). AURA sizes it and hides it from screen readers. */
@@ -300,7 +312,9 @@ export interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInpu
300
312
  hideLabel?: boolean | undefined;
301
313
  /** The visible label beside the box. */
302
314
  children?: React$1.ReactNode | undefined;
303
- /** Second line under the visible label, linked by `aria-describedby` after any id you pass there (5.11). */
315
+ /** Second line under the visible label, linked by `aria-describedby` after any id you pass there (5.11). Since 5.26
316
+ * it is not part of the name: the box is named by the visible label alone, or by your `aria-label` /
317
+ * `aria-labelledby` (Chamber-OS 125). */
304
318
  description?: React$1.ReactNode | undefined;
305
319
  onChange?: ((checked: boolean) => void) | undefined;
306
320
  disabled?: boolean | undefined;
@@ -468,6 +482,7 @@ export interface CommandItem {
468
482
  /** Items with the same group are listed together under its heading, in first-seen order. */
469
483
  group?: string | undefined;
470
484
  icon?: IconInput | undefined;
485
+ /** A second line; read after the item's name (label and shortcut), not as part of it (5.26). */
471
486
  description?: string | undefined;
472
487
  /** Extra words that find it ("invoice" → Billing). */
473
488
  keywords?: string[] | undefined;
@@ -542,6 +557,8 @@ export interface FilterSelectProps extends Omit<React$1.SelectHTMLAttributes<HTM
542
557
  * readers keep the option's own text. */
543
558
  allLabel?: string | undefined;
544
559
  }
560
+ /** A RadioGroup option. `description` is a second line under the label; since 5.26 the radio is named by `label`
561
+ * alone and the description is read after it (`aria-describedby`), also when the option is disabled (Chamber-OS 125). */
545
562
  export type ChoiceOption = string | {
546
563
  value: string;
547
564
  label: string;
@@ -841,7 +858,7 @@ export interface DropdownMenuProps {
841
858
  export interface ComboboxOption {
842
859
  value: string;
843
860
  label: string;
844
- /** Second line in the list; also searched. */
861
+ /** Second line in the list; also searched. Read after the option's name, not as part of it (5.26). */
845
862
  description?: string | undefined;
846
863
  /** Extra search terms (English name, phone, code…). */
847
864
  keywords?: string[] | undefined;
@@ -1035,6 +1052,39 @@ export interface DateRange {
1035
1052
  start: ISODate | null;
1036
1053
  end: ISODate | null;
1037
1054
  }
1055
+ /** A FilterDateRange preset: a name and the range it sets (5.26). */
1056
+ export interface DateRangePreset {
1057
+ label: string;
1058
+ range: DateRange;
1059
+ }
1060
+ /** A compact date-range filter for FilterBar (5.26, Chamber-OS 128): "Submitted Any time ▾", one click to the range
1061
+ * calendar. Dates as DateRangePicker: `locale` / `calendar` from the provider (Thai shows Buddhist-era years), `min`,
1062
+ * `max`, `timeZone`, `weekStartsOn`. */
1063
+ export interface FilterDateRangeProps extends DateDisplayOptions, Pick<React$1.HTMLAttributes<HTMLButtonElement>, "style">, React$1.AriaAttributes, DataAttributes {
1064
+ /** The filter's name: first on the face ("Submitted"), the popover's name, and the start of the face's accessible
1065
+ * name ("Submitted: Any time"). */
1066
+ label: string;
1067
+ value?: DateRange | undefined;
1068
+ defaultValue?: DateRange | undefined;
1069
+ /** Runs once a range is complete, a preset is picked, or "Any time" clears it — never on a lone start day, and
1070
+ * not when the same range is picked again. There is no form field: write the range to the URL or state here. */
1071
+ onChange?: ((value: DateRange) => void) | undefined;
1072
+ /** Choices beside the calendar (Last 7 days, This month…), each setting a whole range; one that reaches past
1073
+ * `min` / `max` or onto an `isDateDisabled` day is shown disabled. */
1074
+ presets?: DateRangePreset[] | undefined;
1075
+ /** The empty value and the choice that clears it. Default "Any time" in the date locale. */
1076
+ anyLabel?: string | undefined;
1077
+ min?: ISODate | "today" | undefined;
1078
+ max?: ISODate | "today" | undefined;
1079
+ isDateDisabled?: ((iso: ISODate) => boolean) | undefined;
1080
+ weekStartsOn?: 0 | 1 | undefined;
1081
+ timeZone?: string | undefined;
1082
+ /** Today, given outright (ISO); wins over `timeZone`. */
1083
+ today?: ISODate | undefined;
1084
+ disabled?: boolean | undefined;
1085
+ id?: string | undefined;
1086
+ className?: string | undefined;
1087
+ }
1038
1088
  export interface DateRangePickerProps extends DateFieldProps {
1039
1089
  value?: DateRange | undefined;
1040
1090
  defaultValue?: DateRange | undefined;
@@ -1149,6 +1199,26 @@ export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableEl
1149
1199
  /** `false` (5.13) drops the frame — border, radius, background — and the outer cells' side padding, so the table
1150
1200
  * lines up with the content around it, e.g. flush inside a Card under its heading. Default `true`. */
1151
1201
  bordered?: boolean | undefined;
1202
+ /** Edge to edge inside a Card (5.26, Chamber-OS 127): anywhere in a Card's content — also inside your own wrappers,
1203
+ * as long as they add no padding or frame and don't clip or scroll (5.27, 130) — the table spans the card's full inner width, no side borders
1204
+ * or radius, keeping its header band and top rule, and its 24px outer cells keep the text level with the card's
1205
+ * content. As a direct child that is the card's last content, or with `bleedEnd`, it drops its bottom rule and the
1206
+ * card's radius closes it. Below the Card's `flushBelow` width, and outside a Card, it does nothing. With
1207
+ * `bordered={false}` too, the outer cells take the card's padding while it bleeds. */
1208
+ bleed?: boolean | undefined;
1209
+ /** With `bleed`: the table ends the card even though it sits inside your wrappers — only when nothing follows it in
1210
+ * the card and the Card has no `footer` (5.27). */
1211
+ bleedEnd?: boolean | undefined;
1212
+ /** Keep the header row in view while the rows scroll (5.26, Chamber-OS 129), with its band, its bottom rule and
1213
+ * above the body. Without `maxHeight` it pins to the page's scroll, under an AppShell's top bar
1214
+ * (`--aura-shell-bar-height`; set `--aura-table-sticky-top` for another offset). A table wider than its box
1215
+ * scrolls sideways instead and its header can't pin to the page then: give it `maxHeight`. Inside your own scroll
1216
+ * container within an AppShell set `--aura-table-sticky-top: 0px` or use `maxHeight`. With `maxHeight` the box
1217
+ * scrolls both ways and the header pins to its top. One header row. Stacked rows (`stackBelow`) have no visible header, so it
1218
+ * does nothing there. Default off. */
1219
+ stickyHeader?: boolean | undefined;
1220
+ /** Caps the table's box (px, or any CSS length such as `60vh`); the rows scroll inside it. (5.26) */
1221
+ maxHeight?: number | string | undefined;
1152
1222
  /** How stacked rows look (5.15, Chamber-OS 85): `list` (default) — one frame, rows divided by rules; `cards` —
1153
1223
  * each row its own framed card, spaced like DataTable's cards, with no frame around them. From the `stackBelow`
1154
1224
  * width up the table is unchanged. The table then sits in one more `div` (`.aura-tbl-cards`). */
@@ -1421,6 +1491,7 @@ export interface PaginationProps {
1421
1491
  export interface AccordionItem {
1422
1492
  id: string;
1423
1493
  title: React$1.ReactNode;
1494
+ /** A second line under the title; read as the header button's description, not its name (5.26). */
1424
1495
  description?: React$1.ReactNode | undefined;
1425
1496
  content: React$1.ReactNode;
1426
1497
  icon?: IconInput | undefined;
@@ -1548,6 +1619,10 @@ export declare const Select: React$1.ForwardRefExoticComponent<SelectProps & Rea
1548
1619
  /** A compact filter for FilterBar (5.12): a small button reading "Status All ▾" that opens Select's list. The name
1549
1620
  * is the accessible name, the chosen option its value; forms, refs and the keyboard work as in Select. */
1550
1621
  export declare const FilterSelect: React$1.ForwardRefExoticComponent<FilterSelectProps & React$1.RefAttributes<HTMLSelectElement>>;
1622
+ /** A compact date-range filter for FilterBar (5.26, Chamber-OS 128): a face like FilterSelect's — "Submitted Any
1623
+ * time ▾" — that opens the range calendar, with optional presets, in one click. `onChange` runs once a range is
1624
+ * complete, a preset is picked or the range is cleared; never on a lone start day. */
1625
+ export declare const FilterDateRange: React$1.ForwardRefExoticComponent<FilterDateRangeProps & React$1.RefAttributes<HTMLButtonElement>>;
1551
1626
  export declare const RadioGroup: React$1.ForwardRefExoticComponent<RadioGroupProps & React$1.RefAttributes<HTMLFieldSetElement>>;
1552
1627
  export declare const Switch: React$1.ForwardRefExoticComponent<SwitchProps & React$1.RefAttributes<HTMLButtonElement>>;
1553
1628
  /** One value, or with `multiple` any number (chips). Two call signatures so value/onChange are typed for each. */
@@ -1644,11 +1719,18 @@ export declare const Avatar: React$1.ForwardRefExoticComponent<AvatarProps & Rea
1644
1719
  export declare const Stack: React$1.ForwardRefExoticComponent<StackProps & React$1.RefAttributes<HTMLElement>>;
1645
1720
  /** Grid — equal columns. columns may be responsive ({ base: 1, md: 2, lg: 3 }), or use minItemWidth to fit as many as fit. */
1646
1721
  export declare const Grid: React$1.ForwardRefExoticComponent<GridProps & React$1.RefAttributes<HTMLElement>>;
1647
- /** Centred page column. */
1648
- export interface ContainerProps {
1722
+ /** Centred page column. To name it (`aria-label`), render a landmark with `as="section"` (or `main`, `nav`): a
1723
+ * plain `div` may not carry a name. */
1724
+ export interface ContainerProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir">, React$1.AriaAttributes, DataAttributes {
1649
1725
  /** `narrow` caps it at aura-container-narrow (720px). Default `default` (1280px). */
1650
1726
  size?: "default" | "narrow" | undefined;
1727
+ /** `start` puts the column at the start edge (left; right in RTL) instead of centring it — a form board beside
1728
+ * the page's start (5.26, Chamber-OS 126). Default `center`. */
1729
+ align?: "center" | "start" | undefined;
1651
1730
  as?: keyof React$1.JSX.IntrinsicElements | undefined;
1731
+ /** Utilities that set `max-width`, `margin` or `padding` (e.g. `max-w-[672px] mx-0`, your own gutter) are supported
1732
+ * with `styles.layer.css`, where a utility beats `.aura-container` (5.26; padding 5.27). Also exported from
1733
+ * `/server` for Server Components (5.27). */
1652
1734
  className?: string | undefined;
1653
1735
  style?: React$1.CSSProperties | undefined;
1654
1736
  children?: React$1.ReactNode | undefined;
package/dist/index.d.ts CHANGED
@@ -236,6 +236,18 @@ export interface DataTableProps<Row extends Record<string, any> = Record<string,
236
236
  density?: "comfortable" | "compact" | undefined;
237
237
  /** Table width in px below which rows render as stacked cards (phones). Try 640. It follows the table's own width, not the window. Since 4.20 the cards are the same markup as the grid, laid out by a container query, so any width is right before hydration and each row is in the HTML once. With `height` (virtual rows) the server can only send the first screenful; the rest of the cards arrive on hydration. */
238
238
  stackBelow?: number | undefined;
239
+ /** Edge to edge inside a Card (5.26, Chamber-OS 127): anywhere in a Card's content — also inside your own wrappers,
240
+ * as long as they add no padding or frame and don't clip or scroll (5.27, 130) — the table spans the card's full inner width, no side borders
241
+ * or radius, keeping its header band and top rule. As a direct child that is the card's last content (no footer,
242
+ * nothing after it), or with `bleedEnd`, it drops its bottom rule and the card's radius closes it. Below the Card's
243
+ * `flushBelow` width, and outside a Card, it does nothing. */
244
+ bleed?: boolean | undefined;
245
+ /** With `bleed`: the table ends the card even though it sits inside your wrappers — no bottom rule, the card's radius
246
+ * closes it. Only when nothing follows it in the card and the Card has no `footer` (5.27). */
247
+ bleedEnd?: boolean | undefined;
248
+ /** `false` drops the frame — border and radius — keeping the header band and the 24px gutter, for a table that sits
249
+ * in a section without bleeding (5.26). Default `true`. */
250
+ bordered?: boolean | undefined;
239
251
  className?: string | undefined;
240
252
  }
241
253
  /** An AURA icon name, or any icon element (e.g. `<Building />` from lucide-react). AURA sizes it and hides it from screen readers. */
@@ -300,7 +312,9 @@ export interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInpu
300
312
  hideLabel?: boolean | undefined;
301
313
  /** The visible label beside the box. */
302
314
  children?: React$1.ReactNode | undefined;
303
- /** Second line under the visible label, linked by `aria-describedby` after any id you pass there (5.11). */
315
+ /** Second line under the visible label, linked by `aria-describedby` after any id you pass there (5.11). Since 5.26
316
+ * it is not part of the name: the box is named by the visible label alone, or by your `aria-label` /
317
+ * `aria-labelledby` (Chamber-OS 125). */
304
318
  description?: React$1.ReactNode | undefined;
305
319
  onChange?: ((checked: boolean) => void) | undefined;
306
320
  disabled?: boolean | undefined;
@@ -468,6 +482,7 @@ export interface CommandItem {
468
482
  /** Items with the same group are listed together under its heading, in first-seen order. */
469
483
  group?: string | undefined;
470
484
  icon?: IconInput | undefined;
485
+ /** A second line; read after the item's name (label and shortcut), not as part of it (5.26). */
471
486
  description?: string | undefined;
472
487
  /** Extra words that find it ("invoice" → Billing). */
473
488
  keywords?: string[] | undefined;
@@ -542,6 +557,8 @@ export interface FilterSelectProps extends Omit<React$1.SelectHTMLAttributes<HTM
542
557
  * readers keep the option's own text. */
543
558
  allLabel?: string | undefined;
544
559
  }
560
+ /** A RadioGroup option. `description` is a second line under the label; since 5.26 the radio is named by `label`
561
+ * alone and the description is read after it (`aria-describedby`), also when the option is disabled (Chamber-OS 125). */
545
562
  export type ChoiceOption = string | {
546
563
  value: string;
547
564
  label: string;
@@ -841,7 +858,7 @@ export interface DropdownMenuProps {
841
858
  export interface ComboboxOption {
842
859
  value: string;
843
860
  label: string;
844
- /** Second line in the list; also searched. */
861
+ /** Second line in the list; also searched. Read after the option's name, not as part of it (5.26). */
845
862
  description?: string | undefined;
846
863
  /** Extra search terms (English name, phone, code…). */
847
864
  keywords?: string[] | undefined;
@@ -1035,6 +1052,39 @@ export interface DateRange {
1035
1052
  start: ISODate | null;
1036
1053
  end: ISODate | null;
1037
1054
  }
1055
+ /** A FilterDateRange preset: a name and the range it sets (5.26). */
1056
+ export interface DateRangePreset {
1057
+ label: string;
1058
+ range: DateRange;
1059
+ }
1060
+ /** A compact date-range filter for FilterBar (5.26, Chamber-OS 128): "Submitted Any time ▾", one click to the range
1061
+ * calendar. Dates as DateRangePicker: `locale` / `calendar` from the provider (Thai shows Buddhist-era years), `min`,
1062
+ * `max`, `timeZone`, `weekStartsOn`. */
1063
+ export interface FilterDateRangeProps extends DateDisplayOptions, Pick<React$1.HTMLAttributes<HTMLButtonElement>, "style">, React$1.AriaAttributes, DataAttributes {
1064
+ /** The filter's name: first on the face ("Submitted"), the popover's name, and the start of the face's accessible
1065
+ * name ("Submitted: Any time"). */
1066
+ label: string;
1067
+ value?: DateRange | undefined;
1068
+ defaultValue?: DateRange | undefined;
1069
+ /** Runs once a range is complete, a preset is picked, or "Any time" clears it — never on a lone start day, and
1070
+ * not when the same range is picked again. There is no form field: write the range to the URL or state here. */
1071
+ onChange?: ((value: DateRange) => void) | undefined;
1072
+ /** Choices beside the calendar (Last 7 days, This month…), each setting a whole range; one that reaches past
1073
+ * `min` / `max` or onto an `isDateDisabled` day is shown disabled. */
1074
+ presets?: DateRangePreset[] | undefined;
1075
+ /** The empty value and the choice that clears it. Default "Any time" in the date locale. */
1076
+ anyLabel?: string | undefined;
1077
+ min?: ISODate | "today" | undefined;
1078
+ max?: ISODate | "today" | undefined;
1079
+ isDateDisabled?: ((iso: ISODate) => boolean) | undefined;
1080
+ weekStartsOn?: 0 | 1 | undefined;
1081
+ timeZone?: string | undefined;
1082
+ /** Today, given outright (ISO); wins over `timeZone`. */
1083
+ today?: ISODate | undefined;
1084
+ disabled?: boolean | undefined;
1085
+ id?: string | undefined;
1086
+ className?: string | undefined;
1087
+ }
1038
1088
  export interface DateRangePickerProps extends DateFieldProps {
1039
1089
  value?: DateRange | undefined;
1040
1090
  defaultValue?: DateRange | undefined;
@@ -1149,6 +1199,26 @@ export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableEl
1149
1199
  /** `false` (5.13) drops the frame — border, radius, background — and the outer cells' side padding, so the table
1150
1200
  * lines up with the content around it, e.g. flush inside a Card under its heading. Default `true`. */
1151
1201
  bordered?: boolean | undefined;
1202
+ /** Edge to edge inside a Card (5.26, Chamber-OS 127): anywhere in a Card's content — also inside your own wrappers,
1203
+ * as long as they add no padding or frame and don't clip or scroll (5.27, 130) — the table spans the card's full inner width, no side borders
1204
+ * or radius, keeping its header band and top rule, and its 24px outer cells keep the text level with the card's
1205
+ * content. As a direct child that is the card's last content, or with `bleedEnd`, it drops its bottom rule and the
1206
+ * card's radius closes it. Below the Card's `flushBelow` width, and outside a Card, it does nothing. With
1207
+ * `bordered={false}` too, the outer cells take the card's padding while it bleeds. */
1208
+ bleed?: boolean | undefined;
1209
+ /** With `bleed`: the table ends the card even though it sits inside your wrappers — only when nothing follows it in
1210
+ * the card and the Card has no `footer` (5.27). */
1211
+ bleedEnd?: boolean | undefined;
1212
+ /** Keep the header row in view while the rows scroll (5.26, Chamber-OS 129), with its band, its bottom rule and
1213
+ * above the body. Without `maxHeight` it pins to the page's scroll, under an AppShell's top bar
1214
+ * (`--aura-shell-bar-height`; set `--aura-table-sticky-top` for another offset). A table wider than its box
1215
+ * scrolls sideways instead and its header can't pin to the page then: give it `maxHeight`. Inside your own scroll
1216
+ * container within an AppShell set `--aura-table-sticky-top: 0px` or use `maxHeight`. With `maxHeight` the box
1217
+ * scrolls both ways and the header pins to its top. One header row. Stacked rows (`stackBelow`) have no visible header, so it
1218
+ * does nothing there. Default off. */
1219
+ stickyHeader?: boolean | undefined;
1220
+ /** Caps the table's box (px, or any CSS length such as `60vh`); the rows scroll inside it. (5.26) */
1221
+ maxHeight?: number | string | undefined;
1152
1222
  /** How stacked rows look (5.15, Chamber-OS 85): `list` (default) — one frame, rows divided by rules; `cards` —
1153
1223
  * each row its own framed card, spaced like DataTable's cards, with no frame around them. From the `stackBelow`
1154
1224
  * width up the table is unchanged. The table then sits in one more `div` (`.aura-tbl-cards`). */
@@ -1421,6 +1491,7 @@ export interface PaginationProps {
1421
1491
  export interface AccordionItem {
1422
1492
  id: string;
1423
1493
  title: React$1.ReactNode;
1494
+ /** A second line under the title; read as the header button's description, not its name (5.26). */
1424
1495
  description?: React$1.ReactNode | undefined;
1425
1496
  content: React$1.ReactNode;
1426
1497
  icon?: IconInput | undefined;
@@ -1548,6 +1619,10 @@ export declare const Select: React$1.ForwardRefExoticComponent<SelectProps & Rea
1548
1619
  /** A compact filter for FilterBar (5.12): a small button reading "Status All ▾" that opens Select's list. The name
1549
1620
  * is the accessible name, the chosen option its value; forms, refs and the keyboard work as in Select. */
1550
1621
  export declare const FilterSelect: React$1.ForwardRefExoticComponent<FilterSelectProps & React$1.RefAttributes<HTMLSelectElement>>;
1622
+ /** A compact date-range filter for FilterBar (5.26, Chamber-OS 128): a face like FilterSelect's — "Submitted Any
1623
+ * time ▾" — that opens the range calendar, with optional presets, in one click. `onChange` runs once a range is
1624
+ * complete, a preset is picked or the range is cleared; never on a lone start day. */
1625
+ export declare const FilterDateRange: React$1.ForwardRefExoticComponent<FilterDateRangeProps & React$1.RefAttributes<HTMLButtonElement>>;
1551
1626
  export declare const RadioGroup: React$1.ForwardRefExoticComponent<RadioGroupProps & React$1.RefAttributes<HTMLFieldSetElement>>;
1552
1627
  export declare const Switch: React$1.ForwardRefExoticComponent<SwitchProps & React$1.RefAttributes<HTMLButtonElement>>;
1553
1628
  /** One value, or with `multiple` any number (chips). Two call signatures so value/onChange are typed for each. */
@@ -1644,11 +1719,18 @@ export declare const Avatar: React$1.ForwardRefExoticComponent<AvatarProps & Rea
1644
1719
  export declare const Stack: React$1.ForwardRefExoticComponent<StackProps & React$1.RefAttributes<HTMLElement>>;
1645
1720
  /** Grid — equal columns. columns may be responsive ({ base: 1, md: 2, lg: 3 }), or use minItemWidth to fit as many as fit. */
1646
1721
  export declare const Grid: React$1.ForwardRefExoticComponent<GridProps & React$1.RefAttributes<HTMLElement>>;
1647
- /** Centred page column. */
1648
- export interface ContainerProps {
1722
+ /** Centred page column. To name it (`aria-label`), render a landmark with `as="section"` (or `main`, `nav`): a
1723
+ * plain `div` may not carry a name. */
1724
+ export interface ContainerProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir">, React$1.AriaAttributes, DataAttributes {
1649
1725
  /** `narrow` caps it at aura-container-narrow (720px). Default `default` (1280px). */
1650
1726
  size?: "default" | "narrow" | undefined;
1727
+ /** `start` puts the column at the start edge (left; right in RTL) instead of centring it — a form board beside
1728
+ * the page's start (5.26, Chamber-OS 126). Default `center`. */
1729
+ align?: "center" | "start" | undefined;
1651
1730
  as?: keyof React$1.JSX.IntrinsicElements | undefined;
1731
+ /** Utilities that set `max-width`, `margin` or `padding` (e.g. `max-w-[672px] mx-0`, your own gutter) are supported
1732
+ * with `styles.layer.css`, where a utility beats `.aura-container` (5.26; padding 5.27). Also exported from
1733
+ * `/server` for Server Components (5.27). */
1652
1734
  className?: string | undefined;
1653
1735
  style?: React$1.CSSProperties | undefined;
1654
1736
  children?: React$1.ReactNode | undefined;
@@ -34,6 +34,7 @@ __export(server_exports, {
34
34
  Avatar: () => ServerAvatar,
35
35
  Badge: () => ServerBadge,
36
36
  Card: () => ServerCard,
37
+ Container: () => Container,
37
38
  EmptyState: () => ServerEmptyState,
38
39
  Icon: () => Icon,
39
40
  STRINGS: () => STRINGS,
@@ -605,14 +606,14 @@ var STRINGS = {
605
606
 
606
607
  // src/theme.ts
607
608
  function hexToRgb(hex) {
608
- let h3 = String(hex).trim().replace("#", "");
609
- if (h3.length === 3)
610
- h3 = h3.split("").map(function(c) {
609
+ let h4 = String(hex).trim().replace("#", "");
610
+ if (h4.length === 3)
611
+ h4 = h4.split("").map(function(c) {
611
612
  return c + c;
612
613
  }).join("");
613
- if (!/^[0-9a-f]{6}$/i.test(h3)) throw new Error('createTheme: "' + hex + '" is not a #rgb or #rrggbb colour');
614
+ if (!/^[0-9a-f]{6}$/i.test(h4)) throw new Error('createTheme: "' + hex + '" is not a #rgb or #rrggbb colour');
614
615
  return [0, 2, 4].map(function(i) {
615
- return parseInt(h3.slice(i, i + 2), 16) / 255;
616
+ return parseInt(h4.slice(i, i + 2), 16) / 255;
616
617
  });
617
618
  }
618
619
  function rgbToHex(rgb) {
@@ -1318,3 +1319,28 @@ function ServerStat(props) {
1318
1319
  function ServerAvatar(props) {
1319
1320
  return avatarElement(props, void 0, null, void 0);
1320
1321
  }
1322
+
1323
+ // src/Container.tsx
1324
+ var React4 = __toESM(require("react"), 1);
1325
+ var h3 = React4.createElement;
1326
+ var Container = React4.forwardRef(function Container2(props, ref) {
1327
+ const attrs = {};
1328
+ Object.keys(props).forEach(function(k) {
1329
+ if (k === "id" || k === "lang" || k === "dir" || /^(aria|data)-/.test(k))
1330
+ attrs[k] = props[k];
1331
+ });
1332
+ return h3(
1333
+ props.as || "div",
1334
+ Object.assign(attrs, {
1335
+ ref,
1336
+ className: cx(
1337
+ "aura-container",
1338
+ props.size === "narrow" && "is-narrow",
1339
+ props.align === "start" && "is-start",
1340
+ props.className
1341
+ ),
1342
+ style: props.style
1343
+ }),
1344
+ props.children
1345
+ );
1346
+ });
@@ -386,6 +386,24 @@ declare function ServerAvatar(props: AvatarProps): React$1.ReactElement;
386
386
  * render names with `/server`'s Icon (the two entries keep separate registries). */
387
387
  export declare function registerIcons(icons: readonly AuraIcon[]): void;
388
388
  export declare const Icon: React$1.ForwardRefExoticComponent<IconProps & React$1.RefAttributes<SVGSVGElement>>;
389
+ /** Centred page column. To name it (`aria-label`), render a landmark with `as="section"` (or `main`, `nav`): a
390
+ * plain `div` may not carry a name. */
391
+ export interface ContainerProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir">, React$1.AriaAttributes, DataAttributes {
392
+ /** `narrow` caps it at aura-container-narrow (720px). Default `default` (1280px). */
393
+ size?: "default" | "narrow" | undefined;
394
+ /** `start` puts the column at the start edge (left; right in RTL) instead of centring it — a form board beside
395
+ * the page's start (5.26, Chamber-OS 126). Default `center`. */
396
+ align?: "center" | "start" | undefined;
397
+ as?: keyof React$1.JSX.IntrinsicElements | undefined;
398
+ /** Utilities that set `max-width`, `margin` or `padding` (e.g. `max-w-[672px] mx-0`, your own gutter) are supported
399
+ * with `styles.layer.css`, where a utility beats `.aura-container` (5.26; padding 5.27). Also exported from
400
+ * `/server` for Server Components (5.27). */
401
+ className?: string | undefined;
402
+ style?: React$1.CSSProperties | undefined;
403
+ children?: React$1.ReactNode | undefined;
404
+ }
405
+ /** Container — centres content up to aura-container-max (1280px) with responsive side padding. */
406
+ export declare const Container: React$1.ForwardRefExoticComponent<ContainerProps & React$1.RefAttributes<HTMLElement>>;
389
407
 
390
408
  export {
391
409
  ServerAlert as Alert,
@@ -386,6 +386,24 @@ declare function ServerAvatar(props: AvatarProps): React$1.ReactElement;
386
386
  * render names with `/server`'s Icon (the two entries keep separate registries). */
387
387
  export declare function registerIcons(icons: readonly AuraIcon[]): void;
388
388
  export declare const Icon: React$1.ForwardRefExoticComponent<IconProps & React$1.RefAttributes<SVGSVGElement>>;
389
+ /** Centred page column. To name it (`aria-label`), render a landmark with `as="section"` (or `main`, `nav`): a
390
+ * plain `div` may not carry a name. */
391
+ export interface ContainerProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir">, React$1.AriaAttributes, DataAttributes {
392
+ /** `narrow` caps it at aura-container-narrow (720px). Default `default` (1280px). */
393
+ size?: "default" | "narrow" | undefined;
394
+ /** `start` puts the column at the start edge (left; right in RTL) instead of centring it — a form board beside
395
+ * the page's start (5.26, Chamber-OS 126). Default `center`. */
396
+ align?: "center" | "start" | undefined;
397
+ as?: keyof React$1.JSX.IntrinsicElements | undefined;
398
+ /** Utilities that set `max-width`, `margin` or `padding` (e.g. `max-w-[672px] mx-0`, your own gutter) are supported
399
+ * with `styles.layer.css`, where a utility beats `.aura-container` (5.26; padding 5.27). Also exported from
400
+ * `/server` for Server Components (5.27). */
401
+ className?: string | undefined;
402
+ style?: React$1.CSSProperties | undefined;
403
+ children?: React$1.ReactNode | undefined;
404
+ }
405
+ /** Container — centres content up to aura-container-max (1280px) with responsive side padding. */
406
+ export declare const Container: React$1.ForwardRefExoticComponent<ContainerProps & React$1.RefAttributes<HTMLElement>>;
389
407
 
390
408
  export {
391
409
  ServerAlert as Alert,
@@ -546,14 +546,14 @@ var STRINGS = {
546
546
 
547
547
  // src/theme.ts
548
548
  function hexToRgb(hex) {
549
- let h3 = String(hex).trim().replace("#", "");
550
- if (h3.length === 3)
551
- h3 = h3.split("").map(function(c) {
549
+ let h4 = String(hex).trim().replace("#", "");
550
+ if (h4.length === 3)
551
+ h4 = h4.split("").map(function(c) {
552
552
  return c + c;
553
553
  }).join("");
554
- if (!/^[0-9a-f]{6}$/i.test(h3)) throw new Error('createTheme: "' + hex + '" is not a #rgb or #rrggbb colour');
554
+ if (!/^[0-9a-f]{6}$/i.test(h4)) throw new Error('createTheme: "' + hex + '" is not a #rgb or #rrggbb colour');
555
555
  return [0, 2, 4].map(function(i) {
556
- return parseInt(h3.slice(i, i + 2), 16) / 255;
556
+ return parseInt(h4.slice(i, i + 2), 16) / 255;
557
557
  });
558
558
  }
559
559
  function rgbToHex(rgb) {
@@ -1259,11 +1259,37 @@ function ServerStat(props) {
1259
1259
  function ServerAvatar(props) {
1260
1260
  return avatarElement(props, void 0, null, void 0);
1261
1261
  }
1262
+
1263
+ // src/Container.tsx
1264
+ import * as React4 from "react";
1265
+ var h3 = React4.createElement;
1266
+ var Container = React4.forwardRef(function Container2(props, ref) {
1267
+ const attrs = {};
1268
+ Object.keys(props).forEach(function(k) {
1269
+ if (k === "id" || k === "lang" || k === "dir" || /^(aria|data)-/.test(k))
1270
+ attrs[k] = props[k];
1271
+ });
1272
+ return h3(
1273
+ props.as || "div",
1274
+ Object.assign(attrs, {
1275
+ ref,
1276
+ className: cx(
1277
+ "aura-container",
1278
+ props.size === "narrow" && "is-narrow",
1279
+ props.align === "start" && "is-start",
1280
+ props.className
1281
+ ),
1282
+ style: props.style
1283
+ }),
1284
+ props.children
1285
+ );
1286
+ });
1262
1287
  export {
1263
1288
  ServerAlert as Alert,
1264
1289
  ServerAvatar as Avatar,
1265
1290
  ServerBadge as Badge,
1266
1291
  ServerCard as Card,
1292
+ Container,
1267
1293
  ServerEmptyState as EmptyState,
1268
1294
  Icon,
1269
1295
  STRINGS,