@jirawatpyk/aura-react 5.14.0 → 5.15.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.
@@ -52,8 +52,11 @@ function cardElement(props, ref) {
52
52
  "interactive",
53
53
  "as",
54
54
  "className",
55
- "titleId"
55
+ "titleId",
56
+ "header",
57
+ "flushBelow"
56
58
  ]);
59
+ const head = props.header !== void 0 && props.header !== null && props.header !== false;
57
60
  return h(
58
61
  props.as || "section",
59
62
  Object.assign({}, rest, {
@@ -62,12 +65,13 @@ function cardElement(props, ref) {
62
65
  "aura-card",
63
66
  creative && "aura-card--creative",
64
67
  props.interactive && "is-interactive",
68
+ props.flushBelow && "aura-card--flush-below-" + props.flushBelow,
65
69
  props.className
66
70
  ),
67
71
  /* A titled card is labelled by its title; otherwise the caller's aria-labelledby stays (5.8). */
68
- "aria-labelledby": props.title && props.titleId ? props.titleId : props["aria-labelledby"]
72
+ "aria-labelledby": !head && props.title && props.titleId ? props.titleId : props["aria-labelledby"]
69
73
  }),
70
- props.title || props.actions ? /* @__PURE__ */ React.createElement("div", { className: "aura-card__head" }, /* @__PURE__ */ React.createElement("div", { className: "aura-card__heading" }, props.title ? h("h" + (props.headingLevel || 3), { className: "aura-card__title", id: props.titleId }, props.title) : null, props.description ? /* @__PURE__ */ React.createElement("p", { className: "aura-card__desc" }, props.description) : null), props.actions ? /* @__PURE__ */ React.createElement("div", { className: "aura-card__actions" }, props.actions) : null) : null,
74
+ head || props.title || props.actions ? /* @__PURE__ */ React.createElement("div", { className: "aura-card__head" }, /* @__PURE__ */ React.createElement("div", { className: "aura-card__heading" }, head ? props.header : null, !head && props.title ? h("h" + (props.headingLevel || 3), { className: "aura-card__title", id: props.titleId }, props.title) : null, !head && props.description ? /* @__PURE__ */ React.createElement("p", { className: "aura-card__desc" }, props.description) : null), props.actions ? /* @__PURE__ */ React.createElement("div", { className: "aura-card__actions" }, props.actions) : null) : null,
71
75
  props.children ? /* @__PURE__ */ React.createElement("div", { className: "aura-card__body" }, props.children) : null,
72
76
  props.footer ? /* @__PURE__ */ React.createElement("div", { className: "aura-card__foot" }, props.footer) : null
73
77
  );
@@ -202,6 +206,7 @@ function buttonClass(opts = {}) {
202
206
  "aura-btn--" + (opts.variant || "primary"),
203
207
  opts.size === "sm" && "aura-btn--sm",
204
208
  opts.fullWidth && "aura-btn--full",
209
+ opts.touchHeight && "aura-btn--touch",
205
210
  opts.loading && "is-loading",
206
211
  opts.className
207
212
  );
@@ -122,6 +122,10 @@ const STRINGS = {
122
122
  pageN: function(p) {
123
123
  return "Page " + p;
124
124
  },
125
+ progressReserved: function(v, r, max) {
126
+ return n(v) + " of " + n(max) + " used, " + n(r) + " reserved";
127
+ },
128
+ breadcrumbMore: "Show the full path",
125
129
  accepts: function(list, max) {
126
130
  return [list, max && "up to " + max + " each"].filter(Boolean).join(", ");
127
131
  }
@@ -118,6 +118,10 @@ const sv = {
118
118
  pageN: function(p) {
119
119
  return "Sida " + p;
120
120
  },
121
+ progressReserved: function(v, r, max) {
122
+ return nsv(v) + " av " + nsv(max) + " anv\xE4nda, " + nsv(r) + " reserverade";
123
+ },
124
+ breadcrumbMore: "Visa hela s\xF6kv\xE4gen",
121
125
  accepts: function(list, max) {
122
126
  return [list, max && "h\xF6gst " + max + " per fil"].filter(Boolean).join(", ");
123
127
  }
@@ -118,6 +118,10 @@ const th = {
118
118
  pageN: function(p) {
119
119
  return "\u0E2B\u0E19\u0E49\u0E32 " + p;
120
120
  },
121
+ progressReserved: function(v, r, max) {
122
+ return "\u0E43\u0E0A\u0E49\u0E41\u0E25\u0E49\u0E27 " + n(v) + " \u0E08\u0E32\u0E01 " + n(max) + " \u0E08\u0E2D\u0E07\u0E44\u0E27\u0E49 " + n(r);
123
+ },
124
+ breadcrumbMore: "\u0E41\u0E2A\u0E14\u0E07\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14",
121
125
  accepts: function(list, max) {
122
126
  return [list, max && "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 " + max + " \u0E15\u0E48\u0E2D\u0E44\u0E1F\u0E25\u0E4C"].filter(Boolean).join(" \xB7 ");
123
127
  }
package/dist/index.d.cts CHANGED
@@ -20,6 +20,9 @@ export interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElem
20
20
  fullWidth?: boolean | undefined;
21
21
  /** `sm` is 32px with tighter padding, for toolbars, table rows and card footers. Default `md` (44px). */
22
22
  size?: ButtonSize | undefined;
23
+ /** 44px tall below 640px (the viewport's), whatever `size` — a small button that phones get at full touch height
24
+ * (5.15, Chamber-OS 100). From 640px up it keeps its size. */
25
+ touchHeight?: boolean | undefined;
23
26
  }
24
27
  /** A link that looks like a Button: give `Button` an `href` and it renders an `<a>` (navigation, not actions). */
25
28
  export interface ButtonLinkProps extends Omit<React$1.AnchorHTMLAttributes<HTMLAnchorElement>, "children"> {
@@ -38,6 +41,9 @@ export interface ButtonLinkProps extends Omit<React$1.AnchorHTMLAttributes<HTMLA
38
41
  fullWidth?: boolean | undefined;
39
42
  /** `sm` is 32px with tighter padding. Default `md` (44px). */
40
43
  size?: ButtonSize | undefined;
44
+ /** 44px tall below 640px (the viewport's), whatever `size` — a small button that phones get at full touch height
45
+ * (5.15, Chamber-OS 100). From 640px up it keeps its size. */
46
+ touchHeight?: boolean | undefined;
41
47
  /** A router's link to render instead of `<a>`, e.g. `Link` from `next/link` (client-side navigation). It gets `href`, `className`, the children and the ref. */
42
48
  linkComponent?: React$1.ElementType | undefined;
43
49
  }
@@ -279,6 +285,13 @@ export interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInpu
279
285
  disabled?: boolean | undefined;
280
286
  tabIndex?: number | undefined;
281
287
  className?: string | undefined;
288
+ /** How far a click counts around a box without visible text (5.15, Chamber-OS 99): `box` (default, 16×16),
289
+ * `target` (24×24, WCAG 2.5.8, as DataTable's selection column) or `{ x, y }` — px added on each side, so
290
+ * `{ x: 12, y: 8 }` is a 40×32 area. The box looks the same; a labelled checkbox's whole label is its target. */
291
+ hitArea?: "box" | "target" | {
292
+ x: number;
293
+ y: number;
294
+ } | undefined;
282
295
  }
283
296
  /** 32px round button holding one icon. */
284
297
  export interface IconButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -289,6 +302,9 @@ export interface IconButtonProps extends React$1.ButtonHTMLAttributes<HTMLButton
289
302
  label: string;
290
303
  /** Icon size. Default `sm` (16). */
291
304
  size?: "sm" | "md" | undefined;
305
+ /** 44×44 below 640px (the viewport's) instead of 32×32 — a phone sheet's close button, a card's ⋯ trigger
306
+ * (5.15, Chamber-OS 100). */
307
+ touchHeight?: boolean | undefined;
292
308
  }
293
309
  export interface MenuItem {
294
310
  label?: string | undefined;
@@ -415,6 +431,12 @@ export interface FilterBarProps {
415
431
  /** The search takes all the room the controls leave in its row, instead of stopping at 360px with the count and
416
432
  * actions pushed to the end (5.12). */
417
433
  searchGrow?: boolean | undefined;
434
+ /** `fill`: the filter controls share their row in equal columns (at least 120px each, wrapping when they can't),
435
+ * and the count and actions keep to the end (5.15, Chamber-OS 92). Default `auto`: each at its own width. */
436
+ controlsLayout?: "auto" | "fill" | undefined;
437
+ /** Below this width (the viewport's) the search takes a row of its own above the controls. Default `md` (768px);
438
+ * `lg` (1024px) for bars with several filters (5.15, Chamber-OS 92). */
439
+ stackBelow?: "md" | "lg" | undefined;
418
440
  className?: string | undefined;
419
441
  }
420
442
  /** One command in the palette. */
@@ -623,6 +645,12 @@ export interface CardProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "ti
623
645
  className?: string | undefined;
624
646
  /** id for the title element; the card is then labelled by it (aria-labelledby). */
625
647
  titleId?: string | undefined;
648
+ /** Free head content in place of `title` and `description` (5.15, Chamber-OS 87): skeleton bars while the card
649
+ * loads, a status pill above a title you mark up yourself. No heading is added; `actions` still sit top-right. */
650
+ header?: React$1.ReactNode | undefined;
651
+ /** Below this width (the viewport's) the card drops its border, surface and shadow — a list whose rows become
652
+ * cards of their own on a phone, so there are no cards in a card (5.15, Chamber-OS 93). Padding is kept. */
653
+ flushBelow?: "sm" | "md" | "lg" | undefined;
626
654
  }
627
655
  export interface TabItem {
628
656
  id: string;
@@ -658,8 +686,10 @@ export interface TabsProps {
658
686
  /** `underline` (default) or `segmented`: the tabs as a pill track with the selected one raised, like
659
687
  * SegmentedControl, keeping every Tabs behaviour (panels, keepMounted, activation, tabProps). (5.10, Chamber-OS 72) */
660
688
  variant?: "underline" | "segmented" | undefined;
661
- /** With `variant="segmented"`: stretch the track to the full width, tabs sharing it equally. (5.10) */
662
- fullWidth?: boolean | undefined;
689
+ /** Tabs share the full width equally: the segmented track (5.10), or underline tabs (5.15, Chamber-OS 90).
690
+ * `'below-sm' | 'below-md' | 'below-lg'` only below that width (the viewport's) — `below-lg` for phone and tablet
691
+ * layouts, tabs at their own width on a desktop. */
692
+ fullWidth?: boolean | "below-sm" | "below-md" | "below-lg" | undefined;
663
693
  /** Link tabs: what the current link is (5.14). `page` (default) for routes; `location` for links to sections of
664
694
  * this page (`#contacts`). */
665
695
  current?: "page" | "location" | undefined;
@@ -713,8 +743,16 @@ export interface BreadcrumbProps {
713
743
  label: string;
714
744
  href?: string | undefined;
715
745
  onClick?: (() => void) | undefined;
746
+ /** Attributes for this item's `<li>` — `data-slot`, `data-testid` (5.15, Chamber-OS 94). */
747
+ itemProps?: (React$1.LiHTMLAttributes<HTMLLIElement> & DataAttributes) | undefined;
748
+ /** Attributes for the item's link, button or text (5.15): `data-*`, `target`, `rel`… Its `onClick` runs before
749
+ * the item's own. */
750
+ linkProps?: (React$1.AnchorHTMLAttributes<HTMLAnchorElement> & Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, keyof React$1.AnchorHTMLAttributes<HTMLAnchorElement>> & DataAttributes) | undefined;
716
751
  }>;
717
752
  label?: string | undefined;
753
+ /** Below this width (the viewport's) a trail of three or more shows the first item, "…" and the last; the "…"
754
+ * button shows the rest (5.15, Chamber-OS 94). Decided in CSS, so the server's HTML is already right. */
755
+ collapseBelow?: "sm" | "md" | undefined;
718
756
  /** Your router's link (e.g. `Link` from `next/link`) for this component; defaults to AuraProvider's `linkComponent`, then `<a>`. */
719
757
  linkComponent?: React$1.ElementType | undefined;
720
758
  className?: string | undefined;
@@ -956,8 +994,11 @@ export interface DrawerProps extends Pick<React$1.HTMLAttributes<HTMLDivElement>
956
994
  /** The close button's accessible name and tooltip, saying what it closes ("Close payment drawer"). Default: the
957
995
  * built-in "Close" in the provider's language. (5.9) */
958
996
  closeLabel?: string | undefined;
959
- /** Attributes for the close button, e.g. `{ 'data-testid': 'pay-sheet-close' }`. (5.9) */
960
- closeProps?: ButtonAttributes | undefined;
997
+ /** Attributes for the close button, e.g. `{ 'data-testid': 'pay-sheet-close' }` (5.9), or `touchHeight: true` for a
998
+ * 44px close button on phones (5.15). */
999
+ closeProps?: (ButtonAttributes & {
1000
+ touchHeight?: boolean | undefined;
1001
+ }) | undefined;
961
1002
  }
962
1003
  export type Breakpoint = "base" | "sm" | "md" | "lg" | "xl";
963
1004
  export type Responsive<T> = T | Partial<Record<Breakpoint, T>>;
@@ -1027,6 +1068,10 @@ export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableEl
1027
1068
  /** `false` (5.13) drops the frame — border, radius, background — and the outer cells' side padding, so the table
1028
1069
  * lines up with the content around it, e.g. flush inside a Card under its heading. Default `true`. */
1029
1070
  bordered?: boolean | undefined;
1071
+ /** How stacked rows look (5.15, Chamber-OS 85): `list` (default) — one frame, rows divided by rules; `cards` —
1072
+ * each row its own framed card, spaced like DataTable's cards, with no frame around them. From the `stackBelow`
1073
+ * width up the table is unchanged. The table then sits in one more `div` (`.aura-tbl-cards`). */
1074
+ stackStyle?: "list" | "cards" | undefined;
1030
1075
  className?: string | undefined;
1031
1076
  children?: React$1.ReactNode | undefined;
1032
1077
  }
@@ -1213,6 +1258,9 @@ export interface ProgressProps {
1213
1258
  showValue?: boolean | undefined;
1214
1259
  /** Replaces the % text, e.g. "3 of 5 files". Also read out as aria-valuetext. */
1215
1260
  valueLabel?: React$1.ReactNode | undefined;
1261
+ /** A reserved amount drawn after `value` as a striped segment of the same tone — queued sends on a quota
1262
+ * (5.15, Chamber-OS 89). Both counts are read out ("2 of 6 used, 1 reserved") unless `valueLabel` is given. */
1263
+ secondaryValue?: number | undefined;
1216
1264
  hint?: React$1.ReactNode | undefined;
1217
1265
  tone?: Tone | undefined;
1218
1266
  size?: "sm" | "md" | undefined;
@@ -1429,6 +1477,7 @@ export declare function buttonClass(opts?: {
1429
1477
  size?: ButtonProps["size"];
1430
1478
  fullWidth?: boolean | undefined;
1431
1479
  loading?: boolean | undefined;
1480
+ touchHeight?: boolean | undefined;
1432
1481
  className?: string | undefined;
1433
1482
  }): string;
1434
1483
  export declare const Alert: React$1.ForwardRefExoticComponent<AlertProps & React$1.RefAttributes<HTMLDivElement>>;
@@ -1612,6 +1661,10 @@ export interface AuraStrings {
1612
1661
  pagination: string;
1613
1662
  pageN: (p: number) => string;
1614
1663
  accepts: (list?: string, max?: number | string) => string;
1664
+ /** Progress with a reserved segment (5.15): "2 of 6 used, 1 reserved". */
1665
+ progressReserved: (value: number, reserved: number, max: number) => string;
1666
+ /** The collapsed middle of a Breadcrumb (5.15). */
1667
+ breadcrumbMore: string;
1615
1668
  }
1616
1669
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
1617
1670
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */
package/dist/index.d.ts CHANGED
@@ -20,6 +20,9 @@ export interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElem
20
20
  fullWidth?: boolean | undefined;
21
21
  /** `sm` is 32px with tighter padding, for toolbars, table rows and card footers. Default `md` (44px). */
22
22
  size?: ButtonSize | undefined;
23
+ /** 44px tall below 640px (the viewport's), whatever `size` — a small button that phones get at full touch height
24
+ * (5.15, Chamber-OS 100). From 640px up it keeps its size. */
25
+ touchHeight?: boolean | undefined;
23
26
  }
24
27
  /** A link that looks like a Button: give `Button` an `href` and it renders an `<a>` (navigation, not actions). */
25
28
  export interface ButtonLinkProps extends Omit<React$1.AnchorHTMLAttributes<HTMLAnchorElement>, "children"> {
@@ -38,6 +41,9 @@ export interface ButtonLinkProps extends Omit<React$1.AnchorHTMLAttributes<HTMLA
38
41
  fullWidth?: boolean | undefined;
39
42
  /** `sm` is 32px with tighter padding. Default `md` (44px). */
40
43
  size?: ButtonSize | undefined;
44
+ /** 44px tall below 640px (the viewport's), whatever `size` — a small button that phones get at full touch height
45
+ * (5.15, Chamber-OS 100). From 640px up it keeps its size. */
46
+ touchHeight?: boolean | undefined;
41
47
  /** A router's link to render instead of `<a>`, e.g. `Link` from `next/link` (client-side navigation). It gets `href`, `className`, the children and the ref. */
42
48
  linkComponent?: React$1.ElementType | undefined;
43
49
  }
@@ -279,6 +285,13 @@ export interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInpu
279
285
  disabled?: boolean | undefined;
280
286
  tabIndex?: number | undefined;
281
287
  className?: string | undefined;
288
+ /** How far a click counts around a box without visible text (5.15, Chamber-OS 99): `box` (default, 16×16),
289
+ * `target` (24×24, WCAG 2.5.8, as DataTable's selection column) or `{ x, y }` — px added on each side, so
290
+ * `{ x: 12, y: 8 }` is a 40×32 area. The box looks the same; a labelled checkbox's whole label is its target. */
291
+ hitArea?: "box" | "target" | {
292
+ x: number;
293
+ y: number;
294
+ } | undefined;
282
295
  }
283
296
  /** 32px round button holding one icon. */
284
297
  export interface IconButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -289,6 +302,9 @@ export interface IconButtonProps extends React$1.ButtonHTMLAttributes<HTMLButton
289
302
  label: string;
290
303
  /** Icon size. Default `sm` (16). */
291
304
  size?: "sm" | "md" | undefined;
305
+ /** 44×44 below 640px (the viewport's) instead of 32×32 — a phone sheet's close button, a card's ⋯ trigger
306
+ * (5.15, Chamber-OS 100). */
307
+ touchHeight?: boolean | undefined;
292
308
  }
293
309
  export interface MenuItem {
294
310
  label?: string | undefined;
@@ -415,6 +431,12 @@ export interface FilterBarProps {
415
431
  /** The search takes all the room the controls leave in its row, instead of stopping at 360px with the count and
416
432
  * actions pushed to the end (5.12). */
417
433
  searchGrow?: boolean | undefined;
434
+ /** `fill`: the filter controls share their row in equal columns (at least 120px each, wrapping when they can't),
435
+ * and the count and actions keep to the end (5.15, Chamber-OS 92). Default `auto`: each at its own width. */
436
+ controlsLayout?: "auto" | "fill" | undefined;
437
+ /** Below this width (the viewport's) the search takes a row of its own above the controls. Default `md` (768px);
438
+ * `lg` (1024px) for bars with several filters (5.15, Chamber-OS 92). */
439
+ stackBelow?: "md" | "lg" | undefined;
418
440
  className?: string | undefined;
419
441
  }
420
442
  /** One command in the palette. */
@@ -623,6 +645,12 @@ export interface CardProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "ti
623
645
  className?: string | undefined;
624
646
  /** id for the title element; the card is then labelled by it (aria-labelledby). */
625
647
  titleId?: string | undefined;
648
+ /** Free head content in place of `title` and `description` (5.15, Chamber-OS 87): skeleton bars while the card
649
+ * loads, a status pill above a title you mark up yourself. No heading is added; `actions` still sit top-right. */
650
+ header?: React$1.ReactNode | undefined;
651
+ /** Below this width (the viewport's) the card drops its border, surface and shadow — a list whose rows become
652
+ * cards of their own on a phone, so there are no cards in a card (5.15, Chamber-OS 93). Padding is kept. */
653
+ flushBelow?: "sm" | "md" | "lg" | undefined;
626
654
  }
627
655
  export interface TabItem {
628
656
  id: string;
@@ -658,8 +686,10 @@ export interface TabsProps {
658
686
  /** `underline` (default) or `segmented`: the tabs as a pill track with the selected one raised, like
659
687
  * SegmentedControl, keeping every Tabs behaviour (panels, keepMounted, activation, tabProps). (5.10, Chamber-OS 72) */
660
688
  variant?: "underline" | "segmented" | undefined;
661
- /** With `variant="segmented"`: stretch the track to the full width, tabs sharing it equally. (5.10) */
662
- fullWidth?: boolean | undefined;
689
+ /** Tabs share the full width equally: the segmented track (5.10), or underline tabs (5.15, Chamber-OS 90).
690
+ * `'below-sm' | 'below-md' | 'below-lg'` only below that width (the viewport's) — `below-lg` for phone and tablet
691
+ * layouts, tabs at their own width on a desktop. */
692
+ fullWidth?: boolean | "below-sm" | "below-md" | "below-lg" | undefined;
663
693
  /** Link tabs: what the current link is (5.14). `page` (default) for routes; `location` for links to sections of
664
694
  * this page (`#contacts`). */
665
695
  current?: "page" | "location" | undefined;
@@ -713,8 +743,16 @@ export interface BreadcrumbProps {
713
743
  label: string;
714
744
  href?: string | undefined;
715
745
  onClick?: (() => void) | undefined;
746
+ /** Attributes for this item's `<li>` — `data-slot`, `data-testid` (5.15, Chamber-OS 94). */
747
+ itemProps?: (React$1.LiHTMLAttributes<HTMLLIElement> & DataAttributes) | undefined;
748
+ /** Attributes for the item's link, button or text (5.15): `data-*`, `target`, `rel`… Its `onClick` runs before
749
+ * the item's own. */
750
+ linkProps?: (React$1.AnchorHTMLAttributes<HTMLAnchorElement> & Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, keyof React$1.AnchorHTMLAttributes<HTMLAnchorElement>> & DataAttributes) | undefined;
716
751
  }>;
717
752
  label?: string | undefined;
753
+ /** Below this width (the viewport's) a trail of three or more shows the first item, "…" and the last; the "…"
754
+ * button shows the rest (5.15, Chamber-OS 94). Decided in CSS, so the server's HTML is already right. */
755
+ collapseBelow?: "sm" | "md" | undefined;
718
756
  /** Your router's link (e.g. `Link` from `next/link`) for this component; defaults to AuraProvider's `linkComponent`, then `<a>`. */
719
757
  linkComponent?: React$1.ElementType | undefined;
720
758
  className?: string | undefined;
@@ -956,8 +994,11 @@ export interface DrawerProps extends Pick<React$1.HTMLAttributes<HTMLDivElement>
956
994
  /** The close button's accessible name and tooltip, saying what it closes ("Close payment drawer"). Default: the
957
995
  * built-in "Close" in the provider's language. (5.9) */
958
996
  closeLabel?: string | undefined;
959
- /** Attributes for the close button, e.g. `{ 'data-testid': 'pay-sheet-close' }`. (5.9) */
960
- closeProps?: ButtonAttributes | undefined;
997
+ /** Attributes for the close button, e.g. `{ 'data-testid': 'pay-sheet-close' }` (5.9), or `touchHeight: true` for a
998
+ * 44px close button on phones (5.15). */
999
+ closeProps?: (ButtonAttributes & {
1000
+ touchHeight?: boolean | undefined;
1001
+ }) | undefined;
961
1002
  }
962
1003
  export type Breakpoint = "base" | "sm" | "md" | "lg" | "xl";
963
1004
  export type Responsive<T> = T | Partial<Record<Breakpoint, T>>;
@@ -1027,6 +1068,10 @@ export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableEl
1027
1068
  /** `false` (5.13) drops the frame — border, radius, background — and the outer cells' side padding, so the table
1028
1069
  * lines up with the content around it, e.g. flush inside a Card under its heading. Default `true`. */
1029
1070
  bordered?: boolean | undefined;
1071
+ /** How stacked rows look (5.15, Chamber-OS 85): `list` (default) — one frame, rows divided by rules; `cards` —
1072
+ * each row its own framed card, spaced like DataTable's cards, with no frame around them. From the `stackBelow`
1073
+ * width up the table is unchanged. The table then sits in one more `div` (`.aura-tbl-cards`). */
1074
+ stackStyle?: "list" | "cards" | undefined;
1030
1075
  className?: string | undefined;
1031
1076
  children?: React$1.ReactNode | undefined;
1032
1077
  }
@@ -1213,6 +1258,9 @@ export interface ProgressProps {
1213
1258
  showValue?: boolean | undefined;
1214
1259
  /** Replaces the % text, e.g. "3 of 5 files". Also read out as aria-valuetext. */
1215
1260
  valueLabel?: React$1.ReactNode | undefined;
1261
+ /** A reserved amount drawn after `value` as a striped segment of the same tone — queued sends on a quota
1262
+ * (5.15, Chamber-OS 89). Both counts are read out ("2 of 6 used, 1 reserved") unless `valueLabel` is given. */
1263
+ secondaryValue?: number | undefined;
1216
1264
  hint?: React$1.ReactNode | undefined;
1217
1265
  tone?: Tone | undefined;
1218
1266
  size?: "sm" | "md" | undefined;
@@ -1429,6 +1477,7 @@ export declare function buttonClass(opts?: {
1429
1477
  size?: ButtonProps["size"];
1430
1478
  fullWidth?: boolean | undefined;
1431
1479
  loading?: boolean | undefined;
1480
+ touchHeight?: boolean | undefined;
1432
1481
  className?: string | undefined;
1433
1482
  }): string;
1434
1483
  export declare const Alert: React$1.ForwardRefExoticComponent<AlertProps & React$1.RefAttributes<HTMLDivElement>>;
@@ -1612,6 +1661,10 @@ export interface AuraStrings {
1612
1661
  pagination: string;
1613
1662
  pageN: (p: number) => string;
1614
1663
  accepts: (list?: string, max?: number | string) => string;
1664
+ /** Progress with a reserved segment (5.15): "2 of 6 used, 1 reserved". */
1665
+ progressReserved: (value: number, reserved: number, max: number) => string;
1666
+ /** The collapsed middle of a Breadcrumb (5.15). */
1667
+ breadcrumbMore: string;
1615
1668
  }
1616
1669
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
1617
1670
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */
@@ -143,6 +143,10 @@ var sv = {
143
143
  pageN: function(p) {
144
144
  return "Sida " + p;
145
145
  },
146
+ progressReserved: function(v, r, max) {
147
+ return nsv(v) + " av " + nsv(max) + " anv\xE4nda, " + nsv(r) + " reserverade";
148
+ },
149
+ breadcrumbMore: "Visa hela s\xF6kv\xE4gen",
146
150
  accepts: function(list, max) {
147
151
  return [list, max && "h\xF6gst " + max + " per fil"].filter(Boolean).join(", ");
148
152
  }
@@ -83,6 +83,10 @@ export interface AuraStrings {
83
83
  pagination: string;
84
84
  pageN: (p: number) => string;
85
85
  accepts: (list?: string, max?: number | string) => string;
86
+ /** Progress with a reserved segment (5.15): "2 of 6 used, 1 reserved". */
87
+ progressReserved: (value: number, reserved: number, max: number) => string;
88
+ /** The collapsed middle of a Breadcrumb (5.15). */
89
+ breadcrumbMore: string;
86
90
  }
87
91
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
88
92
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */
@@ -83,6 +83,10 @@ export interface AuraStrings {
83
83
  pagination: string;
84
84
  pageN: (p: number) => string;
85
85
  accepts: (list?: string, max?: number | string) => string;
86
+ /** Progress with a reserved segment (5.15): "2 of 6 used, 1 reserved". */
87
+ progressReserved: (value: number, reserved: number, max: number) => string;
88
+ /** The collapsed middle of a Breadcrumb (5.15). */
89
+ breadcrumbMore: string;
86
90
  }
87
91
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
88
92
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */
@@ -143,6 +143,10 @@ var th = {
143
143
  pageN: function(p) {
144
144
  return "\u0E2B\u0E19\u0E49\u0E32 " + p;
145
145
  },
146
+ progressReserved: function(v, r, max) {
147
+ return "\u0E43\u0E0A\u0E49\u0E41\u0E25\u0E49\u0E27 " + n(v) + " \u0E08\u0E32\u0E01 " + n(max) + " \u0E08\u0E2D\u0E07\u0E44\u0E27\u0E49 " + n(r);
148
+ },
149
+ breadcrumbMore: "\u0E41\u0E2A\u0E14\u0E07\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14",
146
150
  accepts: function(list, max) {
147
151
  return [list, max && "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 " + max + " \u0E15\u0E48\u0E2D\u0E44\u0E1F\u0E25\u0E4C"].filter(Boolean).join(" \xB7 ");
148
152
  }
@@ -83,6 +83,10 @@ export interface AuraStrings {
83
83
  pagination: string;
84
84
  pageN: (p: number) => string;
85
85
  accepts: (list?: string, max?: number | string) => string;
86
+ /** Progress with a reserved segment (5.15): "2 of 6 used, 1 reserved". */
87
+ progressReserved: (value: number, reserved: number, max: number) => string;
88
+ /** The collapsed middle of a Breadcrumb (5.15). */
89
+ breadcrumbMore: string;
86
90
  }
87
91
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
88
92
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */
@@ -83,6 +83,10 @@ export interface AuraStrings {
83
83
  pagination: string;
84
84
  pageN: (p: number) => string;
85
85
  accepts: (list?: string, max?: number | string) => string;
86
+ /** Progress with a reserved segment (5.15): "2 of 6 used, 1 reserved". */
87
+ progressReserved: (value: number, reserved: number, max: number) => string;
88
+ /** The collapsed middle of a Breadcrumb (5.15). */
89
+ breadcrumbMore: string;
86
90
  }
87
91
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
88
92
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */
@@ -327,6 +327,10 @@ var th = {
327
327
  pageN: function(p) {
328
328
  return "\u0E2B\u0E19\u0E49\u0E32 " + p;
329
329
  },
330
+ progressReserved: function(v, r, max) {
331
+ return "\u0E43\u0E0A\u0E49\u0E41\u0E25\u0E49\u0E27 " + n(v) + " \u0E08\u0E32\u0E01 " + n(max) + " \u0E08\u0E2D\u0E07\u0E44\u0E27\u0E49 " + n(r);
332
+ },
333
+ breadcrumbMore: "\u0E41\u0E2A\u0E14\u0E07\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14",
330
334
  accepts: function(list, max) {
331
335
  return [list, max && "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 " + max + " \u0E15\u0E48\u0E2D\u0E44\u0E1F\u0E25\u0E4C"].filter(Boolean).join(" \xB7 ");
332
336
  }
@@ -453,6 +457,10 @@ var sv = {
453
457
  pageN: function(p) {
454
458
  return "Sida " + p;
455
459
  },
460
+ progressReserved: function(v, r, max) {
461
+ return nsv(v) + " av " + nsv(max) + " anv\xE4nda, " + nsv(r) + " reserverade";
462
+ },
463
+ breadcrumbMore: "Visa hela s\xF6kv\xE4gen",
456
464
  accepts: function(list, max) {
457
465
  return [list, max && "h\xF6gst " + max + " per fil"].filter(Boolean).join(", ");
458
466
  }
@@ -580,6 +588,10 @@ var STRINGS = {
580
588
  pageN: function(p) {
581
589
  return "Page " + p;
582
590
  },
591
+ progressReserved: function(v, r, max) {
592
+ return n2(v) + " of " + n2(max) + " used, " + n2(r) + " reserved";
593
+ },
594
+ breadcrumbMore: "Show the full path",
583
595
  accepts: function(list, max) {
584
596
  return [list, max && "up to " + max + " each"].filter(Boolean).join(", ");
585
597
  }
@@ -1106,8 +1118,11 @@ function cardElement(props, ref) {
1106
1118
  "interactive",
1107
1119
  "as",
1108
1120
  "className",
1109
- "titleId"
1121
+ "titleId",
1122
+ "header",
1123
+ "flushBelow"
1110
1124
  ]);
1125
+ const head = props.header !== void 0 && props.header !== null && props.header !== false;
1111
1126
  return h2(
1112
1127
  props.as || "section",
1113
1128
  Object.assign({}, rest, {
@@ -1116,12 +1131,13 @@ function cardElement(props, ref) {
1116
1131
  "aura-card",
1117
1132
  creative && "aura-card--creative",
1118
1133
  props.interactive && "is-interactive",
1134
+ props.flushBelow && "aura-card--flush-below-" + props.flushBelow,
1119
1135
  props.className
1120
1136
  ),
1121
1137
  /* A titled card is labelled by its title; otherwise the caller's aria-labelledby stays (5.8). */
1122
- "aria-labelledby": props.title && props.titleId ? props.titleId : props["aria-labelledby"]
1138
+ "aria-labelledby": !head && props.title && props.titleId ? props.titleId : props["aria-labelledby"]
1123
1139
  }),
1124
- props.title || props.actions ? /* @__PURE__ */ React3.createElement("div", { className: "aura-card__head" }, /* @__PURE__ */ React3.createElement("div", { className: "aura-card__heading" }, props.title ? h2("h" + (props.headingLevel || 3), { className: "aura-card__title", id: props.titleId }, props.title) : null, props.description ? /* @__PURE__ */ React3.createElement("p", { className: "aura-card__desc" }, props.description) : null), props.actions ? /* @__PURE__ */ React3.createElement("div", { className: "aura-card__actions" }, props.actions) : null) : null,
1140
+ head || props.title || props.actions ? /* @__PURE__ */ React3.createElement("div", { className: "aura-card__head" }, /* @__PURE__ */ React3.createElement("div", { className: "aura-card__heading" }, head ? props.header : null, !head && props.title ? h2("h" + (props.headingLevel || 3), { className: "aura-card__title", id: props.titleId }, props.title) : null, !head && props.description ? /* @__PURE__ */ React3.createElement("p", { className: "aura-card__desc" }, props.description) : null), props.actions ? /* @__PURE__ */ React3.createElement("div", { className: "aura-card__actions" }, props.actions) : null) : null,
1125
1141
  props.children ? /* @__PURE__ */ React3.createElement("div", { className: "aura-card__body" }, props.children) : null,
1126
1142
  props.footer ? /* @__PURE__ */ React3.createElement("div", { className: "aura-card__foot" }, props.footer) : null
1127
1143
  );
@@ -1256,6 +1272,7 @@ function buttonClass(opts = {}) {
1256
1272
  "aura-btn--" + (opts.variant || "primary"),
1257
1273
  opts.size === "sm" && "aura-btn--sm",
1258
1274
  opts.fullWidth && "aura-btn--full",
1275
+ opts.touchHeight && "aura-btn--touch",
1259
1276
  opts.loading && "is-loading",
1260
1277
  opts.className
1261
1278
  );
@@ -20,6 +20,9 @@ export interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElem
20
20
  fullWidth?: boolean | undefined;
21
21
  /** `sm` is 32px with tighter padding, for toolbars, table rows and card footers. Default `md` (44px). */
22
22
  size?: ButtonSize | undefined;
23
+ /** 44px tall below 640px (the viewport's), whatever `size` — a small button that phones get at full touch height
24
+ * (5.15, Chamber-OS 100). From 640px up it keeps its size. */
25
+ touchHeight?: boolean | undefined;
23
26
  }
24
27
  /** An AURA icon name, or any icon element (e.g. `<Building />` from lucide-react). AURA sizes it and hides it from screen readers. */
25
28
  export type IconInput = IconName | React$1.ReactElement;
@@ -80,6 +83,12 @@ export interface CardProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "ti
80
83
  className?: string | undefined;
81
84
  /** id for the title element; the card is then labelled by it (aria-labelledby). */
82
85
  titleId?: string | undefined;
86
+ /** Free head content in place of `title` and `description` (5.15, Chamber-OS 87): skeleton bars while the card
87
+ * loads, a status pill above a title you mark up yourself. No heading is added; `actions` still sit top-right. */
88
+ header?: React$1.ReactNode | undefined;
89
+ /** Below this width (the viewport's) the card drops its border, surface and shadow — a list whose rows become
90
+ * cards of their own on a phone, so there are no cards in a card (5.15, Chamber-OS 93). Padding is kept. */
91
+ flushBelow?: "sm" | "md" | "lg" | undefined;
83
92
  }
84
93
  export interface AvatarProps {
85
94
  /** Accessible name; also gives the initials and a stable colour. */
@@ -281,6 +290,10 @@ export interface AuraStrings {
281
290
  pagination: string;
282
291
  pageN: (p: number) => string;
283
292
  accepts: (list?: string, max?: number | string) => string;
293
+ /** Progress with a reserved segment (5.15): "2 of 6 used, 1 reserved". */
294
+ progressReserved: (value: number, reserved: number, max: number) => string;
295
+ /** The collapsed middle of a Breadcrumb (5.15). */
296
+ breadcrumbMore: string;
284
297
  }
285
298
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
286
299
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */
@@ -338,6 +351,7 @@ export declare function buttonClass(opts?: {
338
351
  size?: ButtonProps["size"];
339
352
  fullWidth?: boolean | undefined;
340
353
  loading?: boolean | undefined;
354
+ touchHeight?: boolean | undefined;
341
355
  className?: string | undefined;
342
356
  }): string;
343
357
  declare function ServerAlert(props: Omit<AlertProps, "onDismiss">): React$1.ReactElement;
@@ -20,6 +20,9 @@ export interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElem
20
20
  fullWidth?: boolean | undefined;
21
21
  /** `sm` is 32px with tighter padding, for toolbars, table rows and card footers. Default `md` (44px). */
22
22
  size?: ButtonSize | undefined;
23
+ /** 44px tall below 640px (the viewport's), whatever `size` — a small button that phones get at full touch height
24
+ * (5.15, Chamber-OS 100). From 640px up it keeps its size. */
25
+ touchHeight?: boolean | undefined;
23
26
  }
24
27
  /** An AURA icon name, or any icon element (e.g. `<Building />` from lucide-react). AURA sizes it and hides it from screen readers. */
25
28
  export type IconInput = IconName | React$1.ReactElement;
@@ -80,6 +83,12 @@ export interface CardProps extends Omit<React$1.HTMLAttributes<HTMLElement>, "ti
80
83
  className?: string | undefined;
81
84
  /** id for the title element; the card is then labelled by it (aria-labelledby). */
82
85
  titleId?: string | undefined;
86
+ /** Free head content in place of `title` and `description` (5.15, Chamber-OS 87): skeleton bars while the card
87
+ * loads, a status pill above a title you mark up yourself. No heading is added; `actions` still sit top-right. */
88
+ header?: React$1.ReactNode | undefined;
89
+ /** Below this width (the viewport's) the card drops its border, surface and shadow — a list whose rows become
90
+ * cards of their own on a phone, so there are no cards in a card (5.15, Chamber-OS 93). Padding is kept. */
91
+ flushBelow?: "sm" | "md" | "lg" | undefined;
83
92
  }
84
93
  export interface AvatarProps {
85
94
  /** Accessible name; also gives the initials and a stable colour. */
@@ -281,6 +290,10 @@ export interface AuraStrings {
281
290
  pagination: string;
282
291
  pageN: (p: number) => string;
283
292
  accepts: (list?: string, max?: number | string) => string;
293
+ /** Progress with a reserved segment (5.15): "2 of 6 used, 1 reserved". */
294
+ progressReserved: (value: number, reserved: number, max: number) => string;
295
+ /** The collapsed middle of a Breadcrumb (5.15). */
296
+ breadcrumbMore: string;
284
297
  }
285
298
  /** Built-in strings by locale. th and sv also ship as packs (`@jirawatpyk/aura-react/locales/th`, `/sv`, 5.9); in 6.0
286
299
  * only en stays built in and a Thai or Swedish app passes its pack to AuraProvider `strings`. */
@@ -338,6 +351,7 @@ export declare function buttonClass(opts?: {
338
351
  size?: ButtonProps["size"];
339
352
  fullWidth?: boolean | undefined;
340
353
  loading?: boolean | undefined;
354
+ touchHeight?: boolean | undefined;
341
355
  className?: string | undefined;
342
356
  }): string;
343
357
  declare function ServerAlert(props: Omit<AlertProps, "onDismiss">): React$1.ReactElement;