@jirawatpyk/aura-react 4.18.0 → 4.20.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.
@@ -84,16 +84,17 @@ a.aura-btn { text-decoration: none; }
84
84
  background: var(--aura-bg-surface);
85
85
  color: var(--aura-fg-primary);
86
86
  }
87
- .aura-table__scroll { position: relative; overflow: auto; overscroll-behavior: contain; }
87
+ .aura-table__scroll { position: relative; overflow: auto; overscroll-behavior: contain; height: var(--aura-table-h, auto); }
88
88
  .aura-table__head {
89
89
  position: sticky; top: 0; z-index: 3; box-sizing: border-box; /* the hairline is inside the row height */
90
- display: flex; height: var(--aura-table-row-height);
90
+ display: flex; height: var(--aura-table-row-height); min-width: var(--aura-row-min, 0);
91
91
  background: var(--aura-bg-canvas);
92
92
  border-bottom: 1px solid var(--aura-border-default);
93
93
  font-family: var(--font-mono); font-size: 12px; color: var(--aura-fg-secondary);
94
94
  }
95
95
  .aura-table__row {
96
96
  box-sizing: border-box; display: flex; height: var(--aura-table-row-height); /* exactly the virtual row height */
97
+ min-width: var(--aura-row-min, 0);
97
98
  background: var(--aura-bg-surface);
98
99
  border-bottom: 1px solid var(--aura-border-default);
99
100
  font-size: 13px;
@@ -112,15 +113,14 @@ a.aura-btn { text-decoration: none; }
112
113
  .aura-table__row--skeleton .aura-table__td.is-end { justify-content: flex-end; }
113
114
  /* Row links (getRowHref): the first cell's text is the link; the whole row is the click target */
114
115
  .aura-table__row-link { color: inherit; text-decoration: none; }
115
- .aura-table__row-link:hover, .aura-table__row:hover .aura-table__row-link, .aura-table__card:hover .aura-table__row-link { text-decoration: underline; text-underline-offset: 2px; }
116
+ .aura-table__row-link:hover, .aura-table__row:hover .aura-table__row-link { text-decoration: underline; text-underline-offset: 2px; }
116
117
  .aura-table__row-link:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 2px; border-radius: var(--aura-radius-xs); }
117
118
  /* Server mode refresh: the previous page stays, inactive, under a progress bar until the next one arrives */
118
- .aura-table.is-refreshing .aura-table__row, .aura-table.is-refreshing .aura-table__card { opacity: 0.6; pointer-events: none; }
119
+ .aura-table.is-refreshing .aura-table__row { opacity: 0.6; pointer-events: none; }
119
120
  .aura-table__busy-bar {
120
121
  position: absolute; z-index: 6; top: calc(var(--aura-table-row-height) - 2px); left: 0; right: 0; height: 2px; overflow: hidden;
121
122
  border-radius: var(--aura-radius-full); pointer-events: none;
122
123
  }
123
- .aura-table--stacked .aura-table__busy-bar { top: 0; }
124
124
  .aura-table__busy-bar::after {
125
125
  content: ''; position: absolute; top: 0; bottom: 0; width: 35%; background: var(--aura-fg-accent);
126
126
  animation: aura-progress-slide var(--aura-duration-pulse) var(--aura-ease) infinite;
@@ -134,6 +134,9 @@ a.aura-btn { text-decoration: none; }
134
134
  }
135
135
  .aura-table__td .aura-pill, .aura-table__td .aura-dropdown, .aura-table__td > .aura-icon-btn, .aura-table__td > .aura-btn { vertical-align: middle; }
136
136
  .aura-table__th { position: relative; box-sizing: border-box; display: flex; align-items: center; padding-right: var(--aura-space-2); }
137
+ /* Column sizes come from custom properties set per cell (4.20), so the card layout can override them. */
138
+ .aura-table__th, .aura-table__td { flex: var(--aura-cell-flex, none); width: var(--aura-cell-w, auto); min-width: var(--aura-cell-min, 0); }
139
+ .aura-table__break, .aura-table__sel-text { display: none; }
137
140
  .aura-table__th-inner { display: flex; align-items: center; gap: var(--aura-space-1); min-width: 0; width: 100%; }
138
141
  .aura-table__th-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
139
142
  .aura-table__pin-icon { color: var(--aura-fg-secondary); }
@@ -155,7 +158,7 @@ a.aura-btn { text-decoration: none; }
155
158
  .aura-table__sel.is-pinned { position: sticky; left: var(--aura-space-6); z-index: 2; }
156
159
 
157
160
  /* Pinned columns */
158
- .aura-table__th.is-pinned, .aura-table__td.is-pinned { position: sticky; z-index: 2; background: inherit; }
161
+ .aura-table__th.is-pinned, .aura-table__td.is-pinned { position: sticky; left: var(--aura-cell-left, auto); z-index: 2; background: inherit; }
159
162
  .aura-table.is-scrolled-x .is-pin-edge { box-shadow: inset -1px 0 0 var(--aura-border-default); }
160
163
 
161
164
  /* Cell focus — the grid's single tab stop moves cell by cell */
@@ -236,6 +239,16 @@ a.aura-btn { text-decoration: none; }
236
239
  }
237
240
  .aura-menu__check.is-on { background: var(--aura-button-primary-bg); border-color: var(--aura-button-primary-bg); color: var(--aura-button-primary-fg); }
238
241
  .aura-menu__check.is-on .aura-icon { color: inherit; }
242
+ .aura-menu__item--danger, .aura-menu__item--danger .aura-icon { color: var(--aura-fg-danger); }
243
+ .aura-menu__item--danger:hover, .aura-menu__item--danger:focus { background: var(--aura-alert-danger-bg); color: var(--aura-alert-danger-fg); }
244
+ .aura-menu__item--danger:hover .aura-icon, .aura-menu__item--danger:focus .aura-icon { color: var(--aura-alert-danger-fg); }
245
+ a.aura-menu__item { text-decoration: none; box-sizing: border-box; }
246
+ .aura-menu__radio {
247
+ flex: none; box-sizing: border-box; width: 16px; height: 16px; border-radius: var(--aura-radius-full);
248
+ border: 1px solid var(--aura-border-control); display: inline-flex; align-items: center; justify-content: center;
249
+ }
250
+ .aura-menu__radio.is-on { border-color: var(--aura-button-primary-bg); }
251
+ .aura-menu__radio.is-on::after { content: ''; width: 8px; height: 8px; border-radius: var(--aura-radius-full); background: var(--aura-button-primary-bg); }
239
252
  .aura-menu__sep { height: 1px; margin: var(--aura-space-1) calc(-1 * var(--aura-space-1)); background: var(--aura-border-default); }
240
253
 
241
254
  /* Footer + pager */
@@ -566,7 +579,8 @@ a.aura-icon-btn { text-decoration: none; }
566
579
  }
567
580
  .aura-tab:hover { color: var(--aura-fg-primary); }
568
581
  .aura-tab.is-active { color: var(--aura-fg-primary); border-bottom-color: var(--aura-fg-primary); }
569
- .aura-tab:disabled { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
582
+ .aura-tab:disabled, .aura-tab.is-disabled { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
583
+ a.aura-tab { text-decoration: none; }
570
584
  .aura-tab:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: -4px; border-radius: var(--aura-radius-xs); }
571
585
  .aura-tab__count {
572
586
  min-width: 18px; padding: 0 6px; box-sizing: border-box; border-radius: var(--aura-radius-full);
@@ -841,25 +855,11 @@ a.aura-icon-btn { text-decoration: none; }
841
855
  /* The shell already pads its content: a Container directly inside only caps the width. */
842
856
  .aura-shell__content > .aura-container { padding-left: 0; padding-right: 0; }
843
857
 
844
- /* ---------- DataTable: stacked cards ---------- */
845
- .aura-table--stacked { background: transparent; border: 0; border-radius: 0; overflow: visible; }
846
- .aura-table__stack-bar { display: flex; align-items: center; gap: var(--aura-space-3); padding: 0 var(--aura-space-4) var(--aura-space-3); font-size: 13px; color: var(--aura-fg-secondary); }
847
- .aura-table__cards { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--aura-space-2); }
848
- .aura-table__card {
849
- display: flex; flex-direction: column; gap: var(--aura-space-3); padding: var(--aura-space-4);
850
- background: var(--aura-bg-surface); border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); font-size: 13px;
851
- }
852
- .aura-table__card.is-selected { background: var(--aura-bg-selected); }
853
- .aura-table__card.is-actionable { cursor: pointer; }
854
- .aura-table__card:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
855
- .aura-table__card-head { display: flex; align-items: center; gap: var(--aura-space-3); }
856
- .aura-table__card-title { flex: 1; min-width: 0; font-size: 14px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
857
- .aura-table__card-actions { display: inline-flex; margin: calc(-1 * var(--aura-space-1)) calc(-1 * var(--aura-space-2)) calc(-1 * var(--aura-space-1)) 0; }
858
- .aura-table__card-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--aura-space-2) var(--aura-space-4); margin: 0; }
859
- .aura-table__card-fields dt { font-family: var(--font-mono); font-size: 11px; color: var(--aura-fg-secondary); }
860
- .aura-table__card-fields dd { margin: 2px 0 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
861
- .aura-table--stacked .aura-table__foot { border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); margin-top: var(--aura-space-2); }
862
- .aura-table--stacked .aura-table__empty { background: var(--aura-bg-surface); border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); }
858
+ /* Totals row (4.19): under the body, a strong top edge; sticky at the bottom of a `height` table with stickyFooter. */
859
+ .aura-table__total { background: var(--aura-bg-canvas); border-top: 1px solid var(--aura-border-strong); font-weight: 600; }
860
+ .aura-table__total.is-sticky { position: sticky; bottom: 0; z-index: 3; }
861
+ .aura-table__total .aura-table__td.is-end { font-variant-numeric: tabular-nums; }
862
+ .aura-tooltip--above { transform: translateY(-100%); max-width: min(var(--aura-tooltip-max), 90vw); white-space: normal; }
863
863
 
864
864
  /* ---------- Stat ---------- */
865
865
  .aura-stat {
@@ -1322,34 +1322,163 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1322
1322
  .aura-density { display: contents; }
1323
1323
 
1324
1324
 
1325
- /* DataTable: cards before hydration (4.16). While a stackBelow table hasn't measured itself yet (server HTML, first
1326
- * client render) it holds both layouts; these container queries show one, so a phone never sees the grid first. */
1327
- .aura-table-dual { container-type: inline-size; }
1328
- @container (min-width: 360px) { .aura-table-dual[data-stack-below='360'] > .aura-table--stacked { display: none; } }
1329
- @container (max-width: 359.98px) { .aura-table-dual[data-stack-below='360'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1330
- @container (min-width: 400px) { .aura-table-dual[data-stack-below='400'] > .aura-table--stacked { display: none; } }
1331
- @container (max-width: 399.98px) { .aura-table-dual[data-stack-below='400'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1332
- @container (min-width: 480px) { .aura-table-dual[data-stack-below='480'] > .aura-table--stacked { display: none; } }
1333
- @container (max-width: 479.98px) { .aura-table-dual[data-stack-below='480'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1334
- @container (min-width: 520px) { .aura-table-dual[data-stack-below='520'] > .aura-table--stacked { display: none; } }
1335
- @container (max-width: 519.98px) { .aura-table-dual[data-stack-below='520'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1336
- @container (min-width: 560px) { .aura-table-dual[data-stack-below='560'] > .aura-table--stacked { display: none; } }
1337
- @container (max-width: 559.98px) { .aura-table-dual[data-stack-below='560'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1338
- @container (min-width: 600px) { .aura-table-dual[data-stack-below='600'] > .aura-table--stacked { display: none; } }
1339
- @container (max-width: 599.98px) { .aura-table-dual[data-stack-below='600'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1340
- @container (min-width: 640px) { .aura-table-dual[data-stack-below='640'] > .aura-table--stacked { display: none; } }
1341
- @container (max-width: 639.98px) { .aura-table-dual[data-stack-below='640'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1342
- @container (min-width: 720px) { .aura-table-dual[data-stack-below='720'] > .aura-table--stacked { display: none; } }
1343
- @container (max-width: 719.98px) { .aura-table-dual[data-stack-below='720'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1344
- @container (min-width: 768px) { .aura-table-dual[data-stack-below='768'] > .aura-table--stacked { display: none; } }
1345
- @container (max-width: 767.98px) { .aura-table-dual[data-stack-below='768'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1346
- @container (min-width: 800px) { .aura-table-dual[data-stack-below='800'] > .aura-table--stacked { display: none; } }
1347
- @container (max-width: 799.98px) { .aura-table-dual[data-stack-below='800'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1348
- @container (min-width: 900px) { .aura-table-dual[data-stack-below='900'] > .aura-table--stacked { display: none; } }
1349
- @container (max-width: 899.98px) { .aura-table-dual[data-stack-below='900'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1350
- @container (min-width: 960px) { .aura-table-dual[data-stack-below='960'] > .aura-table--stacked { display: none; } }
1351
- @container (max-width: 959.98px) { .aura-table-dual[data-stack-below='960'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1352
- @container (min-width: 1024px) { .aura-table-dual[data-stack-below='1024'] > .aura-table--stacked { display: none; } }
1353
- @container (max-width: 1023.98px) { .aura-table-dual[data-stack-below='1024'] > .aura-table:not(.aura-table--stacked) { display: none; } }
1325
+ /* ---------- 4.19: BottomNav ---------- */
1326
+ /* Fixed to the bottom and padded for the home indicator; the spacer before it holds the same height in the flow.
1327
+ * Shown below its breakpoint in CSS, so the server's HTML is right before hydration. */
1328
+ .aura-bottomnav-spacer { height: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); flex: none; }
1329
+ .aura-bottomnav {
1330
+ position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--aura-z-bar); box-sizing: border-box;
1331
+ padding-bottom: env(safe-area-inset-bottom, 0px);
1332
+ background: var(--aura-bg-surface); border-top: 1px solid var(--aura-border-default); font-family: var(--font-sans);
1333
+ }
1334
+ .aura-bottomnav__list { display: flex; margin: 0; padding: 0; list-style: none; }
1335
+ .aura-bottomnav__cell { flex: 1 1 0; min-width: 0; }
1336
+ .aura-bottomnav__item {
1337
+ box-sizing: border-box; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
1338
+ width: 100%; height: var(--aura-bottomnav-height); padding: 0 2px; border: 0; background: transparent;
1339
+ color: var(--aura-fg-secondary); font: inherit; font-size: 11px; font-weight: 500; line-height: 14px;
1340
+ text-decoration: none; cursor: pointer; -webkit-tap-highlight-color: transparent;
1341
+ }
1342
+ .aura-bottomnav__item:hover { color: var(--aura-fg-primary); }
1343
+ .aura-bottomnav__item.is-active { color: var(--aura-fg-primary); font-weight: 600; }
1344
+ .aura-bottomnav__item.is-active .aura-icon { color: var(--aura-fg-accent); }
1345
+ .aura-bottomnav__item:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: -2px; border-radius: var(--aura-radius-sm); }
1346
+ .aura-bottomnav__icon {
1347
+ position: relative; display: inline-flex; align-items: center; justify-content: center;
1348
+ width: 48px; height: 28px; border-radius: var(--aura-radius-full);
1349
+ }
1350
+ .aura-bottomnav__item.is-active .aura-bottomnav__icon { background: var(--aura-bg-selected); }
1351
+ .aura-bottomnav__label { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1352
+ .aura-bottomnav__count {
1353
+ position: absolute; top: -2px; left: calc(50% + 4px); min-width: 16px; height: 16px; box-sizing: border-box; padding: 0 4px;
1354
+ border-radius: var(--aura-radius-full); background: var(--aura-bg-inverted); color: var(--aura-fg-inverted);
1355
+ font-size: 10px; font-weight: 600; line-height: 16px; text-align: center; font-variant-numeric: tabular-nums;
1356
+ box-shadow: 0 0 0 2px var(--aura-bg-surface);
1357
+ }
1358
+ .aura-bottomnav__dot {
1359
+ position: absolute; top: 2px; left: calc(50% + 6px); width: 8px; height: 8px; border-radius: var(--aura-radius-full);
1360
+ background: var(--aura-fg-accent); box-shadow: 0 0 0 2px var(--aura-bg-surface);
1361
+ }
1362
+ @media (min-width: 768px) { .aura-bottomnav.aura-bottomnav--below-md, .aura-bottomnav-spacer.aura-bottomnav--below-md { display: none; } }
1363
+ @media (min-width: 1024px) { .aura-bottomnav.aura-bottomnav--below-lg, .aura-bottomnav-spacer.aura-bottomnav--below-lg { display: none; } }
1364
+ @media (min-width: 1280px) { .aura-bottomnav.aura-bottomnav--below-xl, .aura-bottomnav-spacer.aura-bottomnav--below-xl { display: none; } }
1365
+ /* While a BottomNav shows, viewport ActionBars and phone toasts sit on top of it. */
1366
+ :root:has(.aura-bottomnav--always) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); }
1367
+ @media (max-width: 767.98px) { :root:has(.aura-bottomnav--below-md) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1368
+ @media (max-width: 1023.98px) { :root:has(.aura-bottomnav--below-lg) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1369
+ @media (max-width: 1279.98px) { :root:has(.aura-bottomnav--below-xl) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1370
+ @media (max-width: 639.98px) { .aura-toaster:not(.is-top) { bottom: calc(var(--aura-space-4) + var(--aura-bottomnav-offset, 0px)); } }
1371
+
1372
+ /* ---------- 4.19: ActionBar ---------- */
1373
+ /* Sticky, not fixed: it keeps its place at the end of its parent, so it never covers the last field. */
1374
+ .aura-actionbar { position: sticky; z-index: var(--aura-z-bar); box-sizing: border-box; background: var(--aura-bg-surface); color: var(--aura-fg-primary); font-family: var(--font-sans); }
1375
+ .aura-actionbar--viewport {
1376
+ bottom: calc(var(--aura-bottomnav-offset, 0px) + max(var(--aura-space-3), env(safe-area-inset-bottom, 0px)));
1377
+ margin-top: var(--aura-space-6);
1378
+ border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); box-shadow: var(--aura-shadow-overlay);
1379
+ }
1380
+ .aura-actionbar--container { bottom: 0; border-top: 1px solid var(--aura-border-default); }
1381
+ .aura-actionbar__inner { display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2) var(--aura-space-3); min-height: 60px; box-sizing: border-box; padding: var(--aura-space-2) var(--aura-space-3) var(--aura-space-2) var(--aura-space-4); }
1382
+ .aura-actionbar__status { flex: 1 1 8rem; min-width: 0; font-size: 14px; color: var(--aura-fg-secondary); font-variant-numeric: tabular-nums; }
1383
+ .aura-actionbar__status:empty { flex-basis: 0; }
1384
+ .aura-actionbar__actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin-left: auto; }
1385
+ /* Bulk bar with nothing selected: out of sight and out of the tab order, its live region still in the page. */
1386
+ .aura-actionbar.is-idle { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; box-shadow: none; }
1387
+ .aura-actionbar--container > .aura-actionbar__inner { padding-left: 0; padding-right: 0; }
1388
+
1389
+ /* ---------- 4.20: Separator ---------- */
1390
+ .aura-separator { flex: none; align-self: stretch; height: 1px; margin: var(--aura-separator-space, 0) 0; background: var(--aura-border-default); border: 0; }
1391
+ .aura-separator--vertical { width: 1px; height: auto; min-height: 1em; margin: 0 var(--aura-separator-space, 0); }
1392
+
1393
+ /* ---------- 4.20: Table (static) ---------- */
1394
+ /* DataTable's grid look — mono header band, hairlines, 20px outer radius — on plain <table> markup, with wrapping text. */
1395
+ .aura-tbl-wrap {
1396
+ overflow-x: auto; border: 1px solid var(--aura-border-default); border-radius: var(--aura-card-radius);
1397
+ background: var(--aura-bg-surface); color: var(--aura-fg-primary); font-family: var(--font-sans);
1398
+ }
1399
+ .aura-tbl { width: 100%; border-collapse: collapse; border-spacing: 0; font-size: 13px; line-height: 20px; }
1400
+ .aura-tbl__caption { caption-side: top; padding: var(--aura-space-4) var(--aura-space-6) 0; text-align: left; font-size: 14px; font-weight: 600; }
1401
+ .aura-tbl__th, .aura-tbl__td { padding: var(--aura-space-3) var(--aura-space-4); text-align: left; vertical-align: top; overflow-wrap: anywhere; }
1402
+ .aura-tbl__th:first-child, .aura-tbl__td:first-child { padding-left: var(--aura-space-6); }
1403
+ .aura-tbl__th:last-child, .aura-tbl__td:last-child { padding-right: var(--aura-space-6); }
1404
+ .aura-tbl__head .aura-tbl__th {
1405
+ background: var(--aura-bg-canvas); border-bottom: 1px solid var(--aura-border-default);
1406
+ font-family: var(--font-mono); font-size: 12px; font-weight: 400; color: var(--aura-fg-secondary); white-space: nowrap;
1407
+ }
1408
+ .aura-tbl__body .aura-tbl__row + .aura-tbl__row > * { border-top: 1px solid var(--aura-border-default); }
1409
+ .aura-tbl__body .aura-tbl__th { font-weight: 500; }
1410
+ .aura-tbl__foot > .aura-tbl__row > * { background: var(--aura-bg-canvas); font-weight: 600; }
1411
+ .aura-tbl__foot > .aura-tbl__row:first-child > * { border-top: 1px solid var(--aura-border-strong); }
1412
+ .aura-tbl__foot > .aura-tbl__row + .aura-tbl__row > * { border-top: 1px solid var(--aura-border-default); }
1413
+ .aura-tbl .is-end { text-align: right; }
1414
+ .aura-tbl .is-center { text-align: center; }
1415
+ .aura-tbl .is-numeric { font-variant-numeric: tabular-nums; white-space: nowrap; }
1416
+ .aura-tbl-wrap[data-density='compact'] .aura-tbl__th, .aura-tbl-wrap[data-density='compact'] .aura-tbl__td { padding-top: var(--aura-space-2); padding-bottom: var(--aura-space-2); }
1417
+ .aura-tbl-wrap:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 2px; }
1418
+
1419
+ /* ---------- 4.20: DataTable width queries and cards, one markup ---------- */
1420
+ /* Each .aura-table-q is the table's width × 10000 / its threshold (DataTable.tsx, Q), so `(width < 9999.5px)` is true
1421
+ * exactly when the table is narrower than stackBelow or a hideBelow width — before hydration, at any width. */
1422
+ .aura-table-box { overflow-x: clip; }
1423
+ .aura-table-q { width: calc(100% * var(--aura-q-scale)); container-type: inline-size; }
1424
+ .aura-table-q--stack { container-name: aura-stack; }
1425
+ .aura-table-q--h1 { container-name: aura-h1; }
1426
+ .aura-table-q--h2 { container-name: aura-h2; }
1427
+ .aura-table-q--h3 { container-name: aura-h3; }
1428
+ .aura-table-q .aura-table { width: calc(100% * var(--aura-q-back)); box-sizing: border-box; }
1429
+ @container aura-h1 (width < 9999.5px) { .aura-table { --aura-h1-on: 0; } .aura-table [data-hide='1'] { display: none; } }
1430
+ @container aura-h2 (width < 9999.5px) { .aura-table { --aura-h2-on: 0; } .aura-table [data-hide='2'] { display: none; } }
1431
+ @container aura-h3 (width < 9999.5px) { .aura-table { --aura-h3-on: 0; } .aura-table [data-hide='3'] { display: none; } }
1432
+
1433
+ /* Below stackBelow the same grid lays out as cards: the first column is the title, the first other pill column sits
1434
+ * beside it, `actions` columns go top-right, the rest are label/value fields two to a line. Column headers stay for
1435
+ * screen readers; the labels are generated content with empty alt text, so they aren't read twice. */
1436
+ @container aura-stack (width < 9999.5px) {
1437
+ .aura-table { background: transparent; border: 0; border-radius: 0; overflow: visible; }
1438
+ .aura-table__scroll { overflow: visible; height: auto; }
1439
+ .aura-table__busy-bar { top: 0; }
1440
+ .aura-table__picker { display: none; }
1441
+ .aura-table__head {
1442
+ position: static; height: auto; min-width: 0; padding: 0 0 var(--aura-space-3); border: 0; background: none;
1443
+ font-family: var(--font-sans); font-size: 13px;
1444
+ }
1445
+ .aura-table__head > .aura-table__th {
1446
+ position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
1447
+ }
1448
+ .aura-table__head:not(.has-select-all) { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); }
1449
+ .aura-table__head > .aura-table__sel { position: static; width: auto; gap: var(--aura-space-3); padding: 0 var(--aura-space-4); }
1450
+ .aura-table__sel-text { display: inline; color: var(--aura-fg-secondary); }
1451
+ .aura-table__gutter { display: none; }
1452
+ .aura-table__row, .aura-table__row:last-child {
1453
+ height: auto; min-width: 0; flex-wrap: wrap; align-items: center; gap: var(--aura-space-1) var(--aura-space-4);
1454
+ margin-bottom: var(--aura-space-2); padding: var(--aura-space-4);
1455
+ border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg);
1456
+ }
1457
+ .aura-table__sel, .aura-table__th.is-pinned, .aura-table__td.is-pinned, .aura-table__total.is-sticky { position: static; box-shadow: none; }
1458
+ .aura-table__row > .aura-table__sel { order: 0; width: auto; margin-right: calc(-1 * var(--aura-space-1)); }
1459
+ .aura-table__td {
1460
+ order: 5; flex: 0 0 calc(50% - var(--aura-space-4) / 2); align-self: flex-start; width: auto; min-width: 0; height: auto;
1461
+ margin-bottom: var(--aura-space-1);
1462
+ padding: 0; line-height: normal;
1463
+ }
1464
+ .aura-table__td[data-hide] { display: block; }
1465
+ .aura-table__td[data-label]::before {
1466
+ content: attr(data-label); content: attr(data-label) / '';
1467
+ display: block; margin-bottom: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: start;
1468
+ font-family: var(--font-mono); font-size: 11px; line-height: normal; font-weight: 400; color: var(--aura-fg-secondary);
1469
+ }
1470
+ .aura-table__td[data-card='title'], .aura-table__td[data-card='pill'], .aura-table__td[data-card='actions'] { align-self: center; margin-bottom: 0; }
1471
+ .aura-table__td[data-card='title'] { order: 1; flex: 1 1 0; font-size: 14px; font-weight: 600; }
1472
+ .aura-table__td[data-card='pill'] { order: 2; flex: none; }
1473
+ .aura-table__td[data-card='actions'] { order: 3; flex: none; margin: calc(-1 * var(--aura-space-1)) calc(-1 * var(--aura-space-2)) calc(-1 * var(--aura-space-1)) 0; }
1474
+ /* Spacing: 12px under the title line, 8px between field lines (row gap 4 + the break's 4 + each field's 4 below). */
1475
+ .aura-table__break { display: block; order: 4; flex: 0 0 100%; height: var(--aura-space-1); }
1476
+ .aura-table__row:has(> .aura-table__break) { padding-bottom: calc(var(--aura-space-4) - var(--aura-space-1)); }
1477
+ .aura-table__row--skeleton .aura-table__td { display: flex; }
1478
+ .aura-table__total { background: var(--aura-bg-canvas); }
1479
+ .aura-table__total > .is-blank { display: none; }
1480
+ .aura-table__foot { border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); margin-top: var(--aura-space-2); background: var(--aura-bg-surface); }
1481
+ .aura-table__empty { background: var(--aura-bg-surface); border: 1px solid var(--aura-border-default); border-radius: var(--aura-radius-lg); }
1482
+ }
1354
1483
 
1355
1484
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jirawatpyk/aura-react",
3
- "version": "4.18.0",
3
+ "version": "4.20.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",