@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.
@@ -268,6 +268,10 @@ var th = {
268
268
  pageN: function(p) {
269
269
  return "\u0E2B\u0E19\u0E49\u0E32 " + p;
270
270
  },
271
+ progressReserved: function(v, r, max) {
272
+ return "\u0E43\u0E0A\u0E49\u0E41\u0E25\u0E49\u0E27 " + n(v) + " \u0E08\u0E32\u0E01 " + n(max) + " \u0E08\u0E2D\u0E07\u0E44\u0E27\u0E49 " + n(r);
273
+ },
274
+ breadcrumbMore: "\u0E41\u0E2A\u0E14\u0E07\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14",
271
275
  accepts: function(list, max) {
272
276
  return [list, max && "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 " + max + " \u0E15\u0E48\u0E2D\u0E44\u0E1F\u0E25\u0E4C"].filter(Boolean).join(" \xB7 ");
273
277
  }
@@ -394,6 +398,10 @@ var sv = {
394
398
  pageN: function(p) {
395
399
  return "Sida " + p;
396
400
  },
401
+ progressReserved: function(v, r, max) {
402
+ return nsv(v) + " av " + nsv(max) + " anv\xE4nda, " + nsv(r) + " reserverade";
403
+ },
404
+ breadcrumbMore: "Visa hela s\xF6kv\xE4gen",
397
405
  accepts: function(list, max) {
398
406
  return [list, max && "h\xF6gst " + max + " per fil"].filter(Boolean).join(", ");
399
407
  }
@@ -521,6 +529,10 @@ var STRINGS = {
521
529
  pageN: function(p) {
522
530
  return "Page " + p;
523
531
  },
532
+ progressReserved: function(v, r, max) {
533
+ return n2(v) + " of " + n2(max) + " used, " + n2(r) + " reserved";
534
+ },
535
+ breadcrumbMore: "Show the full path",
524
536
  accepts: function(list, max) {
525
537
  return [list, max && "up to " + max + " each"].filter(Boolean).join(", ");
526
538
  }
@@ -1047,8 +1059,11 @@ function cardElement(props, ref) {
1047
1059
  "interactive",
1048
1060
  "as",
1049
1061
  "className",
1050
- "titleId"
1062
+ "titleId",
1063
+ "header",
1064
+ "flushBelow"
1051
1065
  ]);
1066
+ const head = props.header !== void 0 && props.header !== null && props.header !== false;
1052
1067
  return h2(
1053
1068
  props.as || "section",
1054
1069
  Object.assign({}, rest, {
@@ -1057,12 +1072,13 @@ function cardElement(props, ref) {
1057
1072
  "aura-card",
1058
1073
  creative && "aura-card--creative",
1059
1074
  props.interactive && "is-interactive",
1075
+ props.flushBelow && "aura-card--flush-below-" + props.flushBelow,
1060
1076
  props.className
1061
1077
  ),
1062
1078
  /* A titled card is labelled by its title; otherwise the caller's aria-labelledby stays (5.8). */
1063
- "aria-labelledby": props.title && props.titleId ? props.titleId : props["aria-labelledby"]
1079
+ "aria-labelledby": !head && props.title && props.titleId ? props.titleId : props["aria-labelledby"]
1064
1080
  }),
1065
- 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,
1081
+ 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,
1066
1082
  props.children ? /* @__PURE__ */ React3.createElement("div", { className: "aura-card__body" }, props.children) : null,
1067
1083
  props.footer ? /* @__PURE__ */ React3.createElement("div", { className: "aura-card__foot" }, props.footer) : null
1068
1084
  );
@@ -1197,6 +1213,7 @@ function buttonClass(opts = {}) {
1197
1213
  "aura-btn--" + (opts.variant || "primary"),
1198
1214
  opts.size === "sm" && "aura-btn--sm",
1199
1215
  opts.fullWidth && "aura-btn--full",
1216
+ opts.touchHeight && "aura-btn--touch",
1200
1217
  opts.loading && "is-loading",
1201
1218
  opts.className
1202
1219
  );
package/dist/styles.css CHANGED
@@ -312,6 +312,12 @@ a.aura-icon-btn { text-decoration: none; }
312
312
  .aura-icon-btn--danger:hover { background: var(--aura-alert-danger-bg); }
313
313
  .aura-icon-btn:disabled { opacity: var(--aura-disabled-opacity); pointer-events: none; }
314
314
  .aura-icon-btn:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
315
+ /* 5.15 (Chamber-OS 100): touchHeight — visibly 44px on phones, for buttons and icon buttons a phone design wants full size. */
316
+ @media (max-width: 639.98px) {
317
+ .aura-btn.aura-btn--touch { height: var(--aura-touch-target); }
318
+ .aura-btn.aura-btn--touch.aura-btn--full { height: auto; min-height: var(--aura-touch-target); }
319
+ .aura-icon-btn.aura-icon-btn--touch { width: var(--aura-touch-target); height: var(--aura-touch-target); }
320
+ }
315
321
  /* Touch: same 32px look, a 44px hit area around it (WCAG 2.5.5). */
316
322
  @media (pointer: coarse) {
317
323
  .aura-icon-btn { position: relative; }
@@ -345,6 +351,9 @@ a.aura-icon-btn { text-decoration: none; }
345
351
  /* Checkbox — 16px, 4px corners, ink when checked */
346
352
  .aura-check { position: relative; display: inline-flex; width: var(--aura-icon-sm); height: var(--aura-icon-sm); flex: none; cursor: pointer; }
347
353
  .aura-check__input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer; }
354
+ /* 5.15 (Chamber-OS 99): hitArea — the input reaches past the box. */
355
+ .aura-check.has-hit { isolation: isolate; } /* the larger input stays inside the checkbox's own stacking */
356
+ .aura-check.has-hit .aura-check__input { inset: calc(-1 * var(--aura-check-hit-y)) calc(-1 * var(--aura-check-hit-x)); z-index: 1; }
348
357
  .aura-check__box {
349
358
  box-sizing: border-box; width: 100%; height: 100%;
350
359
  display: inline-flex; align-items: center; justify-content: center;
@@ -632,6 +641,10 @@ a.aura-icon-btn { text-decoration: none; }
632
641
  }
633
642
  .aura-card.is-interactive { cursor: pointer; transition: border-color var(--aura-duration-fast) var(--aura-ease); }
634
643
  .aura-card.is-interactive:hover { border-color: var(--aura-border-control); }
644
+ /* 5.15 (Chamber-OS 93): frameless below a width — the rows inside become cards of their own. */
645
+ @media (max-width: 639.98px) { .aura-card.aura-card--flush-below-sm, .aura-card.aura-card--flush-below-sm:hover { border-color: transparent; background: transparent; box-shadow: none; } }
646
+ @media (max-width: 767.98px) { .aura-card.aura-card--flush-below-md, .aura-card.aura-card--flush-below-md:hover { border-color: transparent; background: transparent; box-shadow: none; } }
647
+ @media (max-width: 1023.98px) { .aura-card.aura-card--flush-below-lg, .aura-card.aura-card--flush-below-lg:hover { border-color: transparent; background: transparent; box-shadow: none; } }
635
648
  .aura-card--creative { border: 2px solid var(--aura-border-strong); box-shadow: var(--aura-card-shadow-creative); }
636
649
  .aura-card__head { display: flex; align-items: flex-start; gap: var(--aura-space-3); }
637
650
  .aura-card__heading { flex: 1; min-width: 0; }
@@ -749,6 +762,21 @@ a.aura-tab { text-decoration: none; }
749
762
  /* 5.7: a segment with no page of its own — the links' colour, not interactive. */
750
763
  .aura-crumbs__text { color: var(--aura-fg-secondary); }
751
764
  .aura-crumbs__sep { color: var(--aura-fg-tertiary); }
765
+ /* 5.15 (Chamber-OS 94): first, "…", last below a width. */
766
+ .aura-crumbs li.aura-crumbs__more { display: none; }
767
+ /* "…" is the only way to the hidden items: a 24px target, 44px on touch screens. */
768
+ .aura-crumbs__more > button { position: relative; min-width: 24px; min-height: 24px; display: inline-flex; align-items: center; justify-content: center; }
769
+ @media (pointer: coarse) {
770
+ .aura-crumbs__more > button::after { content: ''; position: absolute; top: 50%; left: 50%; width: var(--aura-touch-target); height: var(--aura-touch-target); transform: translate(-50%, -50%); }
771
+ }
772
+ @media (max-width: 639.98px) {
773
+ .aura-crumbs--collapse-sm li.aura-crumbs__more { display: inline-flex; }
774
+ .aura-crumbs--collapse-sm .aura-crumbs__middle { display: none; }
775
+ }
776
+ @media (max-width: 767.98px) {
777
+ .aura-crumbs--collapse-md li.aura-crumbs__more { display: inline-flex; }
778
+ .aura-crumbs--collapse-md .aura-crumbs__middle { display: none; }
779
+ }
752
780
 
753
781
  /* ---------- Avatar ---------- */
754
782
  .aura-avatar {
@@ -1083,6 +1111,12 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1083
1111
  .aura-progress--warning .aura-progress__bar { background: var(--aura-alert-warning-fg); }
1084
1112
  .aura-progress--danger .aura-progress__bar { background: var(--aura-fg-danger); }
1085
1113
  .aura-progress--neutral .aura-progress__bar { background: var(--aura-fg-secondary); }
1114
+ /* 5.15 (Chamber-OS 89): a reserved amount after the value — the same tone, striped, so it reads without colour. */
1115
+ .aura-progress__bar--reserved {
1116
+ transition: left var(--aura-duration-base) var(--aura-ease), width var(--aura-duration-base) var(--aura-ease);
1117
+ -webkit-mask-image: repeating-linear-gradient(135deg, currentColor 0 3px, transparent 3px 6px);
1118
+ mask-image: repeating-linear-gradient(135deg, currentColor 0 3px, transparent 3px 6px);
1119
+ }
1086
1120
  .aura-progress__track.is-indeterminate .aura-progress__bar { width: 35%; animation: aura-progress-slide var(--aura-duration-pulse) var(--aura-ease) infinite; }
1087
1121
  @keyframes aura-progress-slide { from { left: -35%; } to { left: 100%; } }
1088
1122
  @media (prefers-reduced-motion: reduce) { .aura-progress__track.is-indeterminate .aura-progress__bar { animation-duration: calc(var(--aura-duration-pulse) * 3); } }
@@ -1265,6 +1299,30 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1265
1299
  .aura-tabs--segmented .aura-tabs__list.aura-segmented { gap: 2px; }
1266
1300
  .aura-tabs--segmented .aura-tabs__list.aura-segmented.is-full .aura-tab { min-width: max-content; }
1267
1301
  .aura-tabs--segmented .aura-tab.aura-segmented__option { margin-bottom: 0; }
1302
+ /* 5.15 (Chamber-OS 90): underline tabs sharing the width, always or below a breakpoint; the segmented track below one. */
1303
+ .aura-tabs__list.is-fill { gap: 0; }
1304
+ .aura-tabs__list.is-fill > .aura-tab { flex: 1 1 0; min-width: max-content; justify-content: center; padding: 0 var(--aura-space-3); }
1305
+ @media (max-width: 639.98px) {
1306
+ .aura-tabs__list.is-fill-below-sm { gap: 0; }
1307
+ .aura-tabs__list.is-fill-below-sm > .aura-tab { flex: 1 1 0; min-width: max-content; justify-content: center; padding: 0 var(--aura-space-3); }
1308
+ .aura-segmented.is-full-below-sm { display: flex; width: 100%; }
1309
+ .aura-segmented.is-full-below-sm .aura-segmented__option { flex: 1 1 0; min-width: 0; }
1310
+ .aura-tabs--segmented .aura-segmented.is-full-below-sm .aura-tab { min-width: max-content; }
1311
+ }
1312
+ @media (max-width: 767.98px) {
1313
+ .aura-tabs__list.is-fill-below-md { gap: 0; }
1314
+ .aura-tabs__list.is-fill-below-md > .aura-tab { flex: 1 1 0; min-width: max-content; justify-content: center; padding: 0 var(--aura-space-3); }
1315
+ .aura-segmented.is-full-below-md { display: flex; width: 100%; }
1316
+ .aura-segmented.is-full-below-md .aura-segmented__option { flex: 1 1 0; min-width: 0; }
1317
+ .aura-tabs--segmented .aura-segmented.is-full-below-md .aura-tab { min-width: max-content; }
1318
+ }
1319
+ @media (max-width: 1023.98px) {
1320
+ .aura-tabs__list.is-fill-below-lg { gap: 0; }
1321
+ .aura-tabs__list.is-fill-below-lg > .aura-tab { flex: 1 1 0; min-width: max-content; justify-content: center; padding: 0 var(--aura-space-3); }
1322
+ .aura-segmented.is-full-below-lg { display: flex; width: 100%; }
1323
+ .aura-segmented.is-full-below-lg .aura-segmented__option { flex: 1 1 0; min-width: 0; }
1324
+ .aura-tabs--segmented .aura-segmented.is-full-below-lg .aura-tab { min-width: max-content; }
1325
+ }
1268
1326
  .aura-tabs--segmented .aura-tab.aura-segmented__option:focus-visible { border-radius: var(--aura-radius-full); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
1269
1327
  .aura-tabs--segmented .aura-tab.aura-segmented__option:disabled,
1270
1328
  .aura-tabs--segmented .aura-tab.aura-segmented__option.is-disabled { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
@@ -1391,6 +1449,16 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1391
1449
  /* 5.12 searchGrow: the search fills what the controls leave. */
1392
1450
  .aura-filterbar--grow .aura-filterbar__search { max-width: none; }
1393
1451
  .aura-filterbar--grow .aura-filterbar__search ~ .aura-filterbar__spacer { display: none; }
1452
+ /* 5.15 (Chamber-OS 92): the search on its own row up to 1024px; controls sharing their row in equal columns. */
1453
+ @media (max-width: 1023.98px) {
1454
+ .aura-filterbar--stack-lg .aura-filterbar__search { flex-basis: 100%; max-width: none; }
1455
+ .aura-filterbar--stack-lg .aura-filterbar__spacer { display: none; }
1456
+ }
1457
+ .aura-filterbar--fill .aura-filterbar__spacer { display: none; }
1458
+ .aura-filterbar--fill .aura-filterbar__controls { flex: 1 1 auto; min-width: 0; }
1459
+ .aura-filterbar--fill .aura-filterbar__controls > * { flex: 1 1 0; min-width: 120px; max-width: none; width: auto; }
1460
+ .aura-filterbar--fill .aura-filterbar__controls > .aura-filterselect .aura-filterselect__face { width: 100%; }
1461
+ .aura-filterbar--fill .aura-filterbar__controls > .aura-filterselect .aura-filterselect__chevron { margin-inline-start: auto; }
1394
1462
  /* Compact filters sit closer together than full fields. */
1395
1463
  .aura-filterbar__controls:has(> .aura-filterselect) { gap: var(--aura-space-2); }
1396
1464
 
@@ -1631,6 +1699,34 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1631
1699
  }
1632
1700
  }
1633
1701
 
1702
+ /* 5.15 (Chamber-OS 85): stackStyle="cards" — each stacked row its own card (DataTable's card spacing), no outer frame.
1703
+ * .aura-tbl-cards is the container here, so the wrap's own frame can be dropped while stacked. */
1704
+ .aura-tbl-cards { container: aura-tbl / inline-size; width: 100%; }
1705
+ @container aura-tbl (width < 768px) {
1706
+ .aura-tbl-cards--md > .aura-tbl-wrap { border: 0; border-radius: 0; background: transparent; overflow: visible; }
1707
+ .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
1708
+ .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row, .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__foot > .aura-tbl__row {
1709
+ margin-bottom: var(--aura-space-2); padding: var(--aura-space-4);
1710
+ border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); background: var(--aura-bg-surface);
1711
+ }
1712
+ .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__foot > .aura-tbl__row { background: var(--aura-bg-canvas); }
1713
+ .aura-tbl--cards.aura-tbl--stack-md > :last-child > .aura-tbl__row:last-child { margin-bottom: 0; }
1714
+ .aura-tbl-wrap[data-density='compact'] > .aura-tbl--cards.aura-tbl--stack-md > * > .aura-tbl__row { padding-top: var(--aura-space-2); padding-bottom: var(--aura-space-2); }
1715
+ .aura-tbl-wrap.is-flush > .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
1716
+ }
1717
+ @container aura-tbl (width < 640px) {
1718
+ .aura-tbl-cards--sm > .aura-tbl-wrap { border: 0; border-radius: 0; background: transparent; overflow: visible; }
1719
+ .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
1720
+ .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row, .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__foot > .aura-tbl__row {
1721
+ margin-bottom: var(--aura-space-2); padding: var(--aura-space-4);
1722
+ border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); background: var(--aura-bg-surface);
1723
+ }
1724
+ .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__foot > .aura-tbl__row { background: var(--aura-bg-canvas); }
1725
+ .aura-tbl--cards.aura-tbl--stack-sm > :last-child > .aura-tbl__row:last-child { margin-bottom: 0; }
1726
+ .aura-tbl-wrap[data-density='compact'] > .aura-tbl--cards.aura-tbl--stack-sm > * > .aura-tbl__row { padding-top: var(--aura-space-2); padding-bottom: var(--aura-space-2); }
1727
+ .aura-tbl-wrap.is-flush > .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
1728
+ }
1729
+
1634
1730
  /* ---------- 4.20: DataTable width queries and cards, one markup ---------- */
1635
1731
  /* Each .aura-table-q is the table's width × 10000 / its threshold (DataTable.tsx, Q), so `(width < 9999.5px)` is true
1636
1732
  * exactly when the table is narrower than stackBelow or a hideBelow width — before hydration, at any width. */
@@ -314,6 +314,12 @@ a.aura-icon-btn { text-decoration: none; }
314
314
  .aura-icon-btn--danger:hover { background: var(--aura-alert-danger-bg); }
315
315
  .aura-icon-btn:disabled { opacity: var(--aura-disabled-opacity); pointer-events: none; }
316
316
  .aura-icon-btn:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
317
+ /* 5.15 (Chamber-OS 100): touchHeight — visibly 44px on phones, for buttons and icon buttons a phone design wants full size. */
318
+ @media (max-width: 639.98px) {
319
+ .aura-btn.aura-btn--touch { height: var(--aura-touch-target); }
320
+ .aura-btn.aura-btn--touch.aura-btn--full { height: auto; min-height: var(--aura-touch-target); }
321
+ .aura-icon-btn.aura-icon-btn--touch { width: var(--aura-touch-target); height: var(--aura-touch-target); }
322
+ }
317
323
  /* Touch: same 32px look, a 44px hit area around it (WCAG 2.5.5). */
318
324
  @media (pointer: coarse) {
319
325
  .aura-icon-btn { position: relative; }
@@ -347,6 +353,9 @@ a.aura-icon-btn { text-decoration: none; }
347
353
  /* Checkbox — 16px, 4px corners, ink when checked */
348
354
  .aura-check { position: relative; display: inline-flex; width: var(--aura-icon-sm); height: var(--aura-icon-sm); flex: none; cursor: pointer; }
349
355
  .aura-check__input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: pointer; }
356
+ /* 5.15 (Chamber-OS 99): hitArea — the input reaches past the box. */
357
+ .aura-check.has-hit { isolation: isolate; } /* the larger input stays inside the checkbox's own stacking */
358
+ .aura-check.has-hit .aura-check__input { inset: calc(-1 * var(--aura-check-hit-y)) calc(-1 * var(--aura-check-hit-x)); z-index: 1; }
350
359
  .aura-check__box {
351
360
  box-sizing: border-box; width: 100%; height: 100%;
352
361
  display: inline-flex; align-items: center; justify-content: center;
@@ -634,6 +643,10 @@ a.aura-icon-btn { text-decoration: none; }
634
643
  }
635
644
  .aura-card.is-interactive { cursor: pointer; transition: border-color var(--aura-duration-fast) var(--aura-ease); }
636
645
  .aura-card.is-interactive:hover { border-color: var(--aura-border-control); }
646
+ /* 5.15 (Chamber-OS 93): frameless below a width — the rows inside become cards of their own. */
647
+ @media (max-width: 639.98px) { .aura-card.aura-card--flush-below-sm, .aura-card.aura-card--flush-below-sm:hover { border-color: transparent; background: transparent; box-shadow: none; } }
648
+ @media (max-width: 767.98px) { .aura-card.aura-card--flush-below-md, .aura-card.aura-card--flush-below-md:hover { border-color: transparent; background: transparent; box-shadow: none; } }
649
+ @media (max-width: 1023.98px) { .aura-card.aura-card--flush-below-lg, .aura-card.aura-card--flush-below-lg:hover { border-color: transparent; background: transparent; box-shadow: none; } }
637
650
  .aura-card--creative { border: 2px solid var(--aura-border-strong); box-shadow: var(--aura-card-shadow-creative); }
638
651
  .aura-card__head { display: flex; align-items: flex-start; gap: var(--aura-space-3); }
639
652
  .aura-card__heading { flex: 1; min-width: 0; }
@@ -751,6 +764,21 @@ a.aura-tab { text-decoration: none; }
751
764
  /* 5.7: a segment with no page of its own — the links' colour, not interactive. */
752
765
  .aura-crumbs__text { color: var(--aura-fg-secondary); }
753
766
  .aura-crumbs__sep { color: var(--aura-fg-tertiary); }
767
+ /* 5.15 (Chamber-OS 94): first, "…", last below a width. */
768
+ .aura-crumbs li.aura-crumbs__more { display: none; }
769
+ /* "…" is the only way to the hidden items: a 24px target, 44px on touch screens. */
770
+ .aura-crumbs__more > button { position: relative; min-width: 24px; min-height: 24px; display: inline-flex; align-items: center; justify-content: center; }
771
+ @media (pointer: coarse) {
772
+ .aura-crumbs__more > button::after { content: ''; position: absolute; top: 50%; left: 50%; width: var(--aura-touch-target); height: var(--aura-touch-target); transform: translate(-50%, -50%); }
773
+ }
774
+ @media (max-width: 639.98px) {
775
+ .aura-crumbs--collapse-sm li.aura-crumbs__more { display: inline-flex; }
776
+ .aura-crumbs--collapse-sm .aura-crumbs__middle { display: none; }
777
+ }
778
+ @media (max-width: 767.98px) {
779
+ .aura-crumbs--collapse-md li.aura-crumbs__more { display: inline-flex; }
780
+ .aura-crumbs--collapse-md .aura-crumbs__middle { display: none; }
781
+ }
754
782
 
755
783
  /* ---------- Avatar ---------- */
756
784
  .aura-avatar {
@@ -1085,6 +1113,12 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1085
1113
  .aura-progress--warning .aura-progress__bar { background: var(--aura-alert-warning-fg); }
1086
1114
  .aura-progress--danger .aura-progress__bar { background: var(--aura-fg-danger); }
1087
1115
  .aura-progress--neutral .aura-progress__bar { background: var(--aura-fg-secondary); }
1116
+ /* 5.15 (Chamber-OS 89): a reserved amount after the value — the same tone, striped, so it reads without colour. */
1117
+ .aura-progress__bar--reserved {
1118
+ transition: left var(--aura-duration-base) var(--aura-ease), width var(--aura-duration-base) var(--aura-ease);
1119
+ -webkit-mask-image: repeating-linear-gradient(135deg, currentColor 0 3px, transparent 3px 6px);
1120
+ mask-image: repeating-linear-gradient(135deg, currentColor 0 3px, transparent 3px 6px);
1121
+ }
1088
1122
  .aura-progress__track.is-indeterminate .aura-progress__bar { width: 35%; animation: aura-progress-slide var(--aura-duration-pulse) var(--aura-ease) infinite; }
1089
1123
  @keyframes aura-progress-slide { from { left: -35%; } to { left: 100%; } }
1090
1124
  @media (prefers-reduced-motion: reduce) { .aura-progress__track.is-indeterminate .aura-progress__bar { animation-duration: calc(var(--aura-duration-pulse) * 3); } }
@@ -1267,6 +1301,30 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1267
1301
  .aura-tabs--segmented .aura-tabs__list.aura-segmented { gap: 2px; }
1268
1302
  .aura-tabs--segmented .aura-tabs__list.aura-segmented.is-full .aura-tab { min-width: max-content; }
1269
1303
  .aura-tabs--segmented .aura-tab.aura-segmented__option { margin-bottom: 0; }
1304
+ /* 5.15 (Chamber-OS 90): underline tabs sharing the width, always or below a breakpoint; the segmented track below one. */
1305
+ .aura-tabs__list.is-fill { gap: 0; }
1306
+ .aura-tabs__list.is-fill > .aura-tab { flex: 1 1 0; min-width: max-content; justify-content: center; padding: 0 var(--aura-space-3); }
1307
+ @media (max-width: 639.98px) {
1308
+ .aura-tabs__list.is-fill-below-sm { gap: 0; }
1309
+ .aura-tabs__list.is-fill-below-sm > .aura-tab { flex: 1 1 0; min-width: max-content; justify-content: center; padding: 0 var(--aura-space-3); }
1310
+ .aura-segmented.is-full-below-sm { display: flex; width: 100%; }
1311
+ .aura-segmented.is-full-below-sm .aura-segmented__option { flex: 1 1 0; min-width: 0; }
1312
+ .aura-tabs--segmented .aura-segmented.is-full-below-sm .aura-tab { min-width: max-content; }
1313
+ }
1314
+ @media (max-width: 767.98px) {
1315
+ .aura-tabs__list.is-fill-below-md { gap: 0; }
1316
+ .aura-tabs__list.is-fill-below-md > .aura-tab { flex: 1 1 0; min-width: max-content; justify-content: center; padding: 0 var(--aura-space-3); }
1317
+ .aura-segmented.is-full-below-md { display: flex; width: 100%; }
1318
+ .aura-segmented.is-full-below-md .aura-segmented__option { flex: 1 1 0; min-width: 0; }
1319
+ .aura-tabs--segmented .aura-segmented.is-full-below-md .aura-tab { min-width: max-content; }
1320
+ }
1321
+ @media (max-width: 1023.98px) {
1322
+ .aura-tabs__list.is-fill-below-lg { gap: 0; }
1323
+ .aura-tabs__list.is-fill-below-lg > .aura-tab { flex: 1 1 0; min-width: max-content; justify-content: center; padding: 0 var(--aura-space-3); }
1324
+ .aura-segmented.is-full-below-lg { display: flex; width: 100%; }
1325
+ .aura-segmented.is-full-below-lg .aura-segmented__option { flex: 1 1 0; min-width: 0; }
1326
+ .aura-tabs--segmented .aura-segmented.is-full-below-lg .aura-tab { min-width: max-content; }
1327
+ }
1270
1328
  .aura-tabs--segmented .aura-tab.aura-segmented__option:focus-visible { border-radius: var(--aura-radius-full); outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
1271
1329
  .aura-tabs--segmented .aura-tab.aura-segmented__option:disabled,
1272
1330
  .aura-tabs--segmented .aura-tab.aura-segmented__option.is-disabled { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
@@ -1393,6 +1451,16 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1393
1451
  /* 5.12 searchGrow: the search fills what the controls leave. */
1394
1452
  .aura-filterbar--grow .aura-filterbar__search { max-width: none; }
1395
1453
  .aura-filterbar--grow .aura-filterbar__search ~ .aura-filterbar__spacer { display: none; }
1454
+ /* 5.15 (Chamber-OS 92): the search on its own row up to 1024px; controls sharing their row in equal columns. */
1455
+ @media (max-width: 1023.98px) {
1456
+ .aura-filterbar--stack-lg .aura-filterbar__search { flex-basis: 100%; max-width: none; }
1457
+ .aura-filterbar--stack-lg .aura-filterbar__spacer { display: none; }
1458
+ }
1459
+ .aura-filterbar--fill .aura-filterbar__spacer { display: none; }
1460
+ .aura-filterbar--fill .aura-filterbar__controls { flex: 1 1 auto; min-width: 0; }
1461
+ .aura-filterbar--fill .aura-filterbar__controls > * { flex: 1 1 0; min-width: 120px; max-width: none; width: auto; }
1462
+ .aura-filterbar--fill .aura-filterbar__controls > .aura-filterselect .aura-filterselect__face { width: 100%; }
1463
+ .aura-filterbar--fill .aura-filterbar__controls > .aura-filterselect .aura-filterselect__chevron { margin-inline-start: auto; }
1396
1464
  /* Compact filters sit closer together than full fields. */
1397
1465
  .aura-filterbar__controls:has(> .aura-filterselect) { gap: var(--aura-space-2); }
1398
1466
 
@@ -1633,6 +1701,34 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1633
1701
  }
1634
1702
  }
1635
1703
 
1704
+ /* 5.15 (Chamber-OS 85): stackStyle="cards" — each stacked row its own card (DataTable's card spacing), no outer frame.
1705
+ * .aura-tbl-cards is the container here, so the wrap's own frame can be dropped while stacked. */
1706
+ .aura-tbl-cards { container: aura-tbl / inline-size; width: 100%; }
1707
+ @container aura-tbl (width < 768px) {
1708
+ .aura-tbl-cards--md > .aura-tbl-wrap { border: 0; border-radius: 0; background: transparent; overflow: visible; }
1709
+ .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
1710
+ .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row, .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__foot > .aura-tbl__row {
1711
+ margin-bottom: var(--aura-space-2); padding: var(--aura-space-4);
1712
+ border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); background: var(--aura-bg-surface);
1713
+ }
1714
+ .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__foot > .aura-tbl__row { background: var(--aura-bg-canvas); }
1715
+ .aura-tbl--cards.aura-tbl--stack-md > :last-child > .aura-tbl__row:last-child { margin-bottom: 0; }
1716
+ .aura-tbl-wrap[data-density='compact'] > .aura-tbl--cards.aura-tbl--stack-md > * > .aura-tbl__row { padding-top: var(--aura-space-2); padding-bottom: var(--aura-space-2); }
1717
+ .aura-tbl-wrap.is-flush > .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
1718
+ }
1719
+ @container aura-tbl (width < 640px) {
1720
+ .aura-tbl-cards--sm > .aura-tbl-wrap { border: 0; border-radius: 0; background: transparent; overflow: visible; }
1721
+ .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
1722
+ .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row, .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__foot > .aura-tbl__row {
1723
+ margin-bottom: var(--aura-space-2); padding: var(--aura-space-4);
1724
+ border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); background: var(--aura-bg-surface);
1725
+ }
1726
+ .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__foot > .aura-tbl__row { background: var(--aura-bg-canvas); }
1727
+ .aura-tbl--cards.aura-tbl--stack-sm > :last-child > .aura-tbl__row:last-child { margin-bottom: 0; }
1728
+ .aura-tbl-wrap[data-density='compact'] > .aura-tbl--cards.aura-tbl--stack-sm > * > .aura-tbl__row { padding-top: var(--aura-space-2); padding-bottom: var(--aura-space-2); }
1729
+ .aura-tbl-wrap.is-flush > .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
1730
+ }
1731
+
1636
1732
  /* ---------- 4.20: DataTable width queries and cards, one markup ---------- */
1637
1733
  /* Each .aura-table-q is the table's width × 10000 / its threshold (DataTable.tsx, Q), so `(width < 9999.5px)` is true
1638
1734
  * exactly when the table is narrower than stackBelow or a hideBelow width — before hydration, at any width. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jirawatpyk/aura-react",
3
- "version": "5.14.0",
3
+ "version": "5.15.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",