@jirawatpyk/aura-react 5.34.0 → 5.36.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.
@@ -277,6 +277,7 @@ var th = {
277
277
  statusProblem: "\u0E21\u0E35\u0E1B\u0E31\u0E0D\u0E2B\u0E32",
278
278
  statusMaintenance: "\u0E1B\u0E34\u0E14\u0E1B\u0E23\u0E31\u0E1A\u0E1B\u0E23\u0E38\u0E07",
279
279
  statusOk: "\u0E1B\u0E01\u0E15\u0E34",
280
+ statusUnknown: "\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25",
280
281
  accepts: function(list, max) {
281
282
  return [list, max && "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 " + max + " \u0E15\u0E48\u0E2D\u0E44\u0E1F\u0E25\u0E4C"].filter(Boolean).join(" \xB7 ");
282
283
  }
@@ -412,6 +413,7 @@ var sv = {
412
413
  statusProblem: "Problem",
413
414
  statusMaintenance: "Underh\xE5ll",
414
415
  statusOk: "OK",
416
+ statusUnknown: "Ingen data",
415
417
  accepts: function(list, max) {
416
418
  return [list, max && "h\xF6gst " + max + " per fil"].filter(Boolean).join(", ");
417
419
  }
@@ -548,6 +550,7 @@ var STRINGS = {
548
550
  statusProblem: "Problem",
549
551
  statusMaintenance: "Maintenance",
550
552
  statusOk: "OK",
553
+ statusUnknown: "No data",
551
554
  accepts: function(list, max) {
552
555
  return [list, max && "up to " + max + " each"].filter(Boolean).join(", ");
553
556
  }
@@ -1380,19 +1383,22 @@ var STATUS_ICON = {
1380
1383
  down: IconCircleAlert,
1381
1384
  problem: IconTriangleAlert,
1382
1385
  maintenance: IconWrench,
1383
- ok: IconCircleCheck
1386
+ ok: IconCircleCheck,
1387
+ unknown: IconCircleDotDashed
1384
1388
  };
1385
1389
  var STATUS_TONE = {
1386
1390
  down: "danger",
1387
1391
  problem: "warning",
1388
1392
  maintenance: "accent",
1389
- ok: "default"
1393
+ ok: "default",
1394
+ unknown: "default"
1390
1395
  };
1391
1396
  var STATUS_WORD = {
1392
1397
  down: "statusDown",
1393
1398
  problem: "statusProblem",
1394
1399
  maintenance: "statusMaintenance",
1395
- ok: "statusOk"
1400
+ ok: "statusOk",
1401
+ unknown: "statusUnknown"
1396
1402
  };
1397
1403
  function statusWord(status, t) {
1398
1404
  return String(t[STATUS_WORD[status]] || STATUS_WORD[status]);
@@ -1407,7 +1413,12 @@ function attrs(props) {
1407
1413
  }
1408
1414
  var comma = h5("span", { className: "aura-status-tile__sep" }, ",");
1409
1415
  function statusTileElement(props, ref, Link, t, titleRef) {
1410
- const status = STATUS_ICON[props.status] ? props.status : "ok";
1416
+ const status = STATUS_ICON[props.status] ? props.status : "unknown";
1417
+ if (status !== props.status)
1418
+ devWarnOnce(
1419
+ "status-tile-status-" + String(props.status),
1420
+ 'StatusTile status="' + String(props.status) + '" is not down, problem, maintenance, ok or unknown: it shows as unknown ("No data"). Map your value first.'
1421
+ );
1411
1422
  const valueTone = props.valueTone || STATUS_TONE[status];
1412
1423
  const word = props.statusLabel || statusWord(status, t);
1413
1424
  const markers = (props.markers || []).filter(Boolean);
package/dist/styles.css CHANGED
@@ -161,6 +161,22 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
161
161
  box-sizing: border-box; height: 100%; line-height: calc(var(--aura-table-row-height) - 1px);
162
162
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-right: var(--aura-space-4);
163
163
  }
164
+ /* 5.36 (DxT Monitor 15): the cell clips its text, not the focus ring of a link or button in it (2px wide, 2px out,
165
+ * so 4px). A cell's start edge is its content edge, so a ring there lost its start side. In the first data column the
166
+ * row's sticky start gutter (or pinned checkbox column) painted over it too: there a focused link or button is lifted
167
+ * just above them — not while the table is scrolled sideways (it would cover the pinned columns), and never above the
168
+ * sticky header or totals (z-index 3). Where the browser can't give the clip a margin (Safari), rings in cells are
169
+ * drawn inside instead. */
170
+ .aura-table:not(.is-scrolled-x) :is(.aura-table__gutter, .aura-table__sel) + .aura-table__td :is(a, button, [role="button"]):focus-visible { position: relative; z-index: 2; }
171
+ /* A plain link or button of yours in a cell gets AURA's ring rather than the browser's (no specificity: your own focus
172
+ * style wins). */
173
+ :where(.aura-table__td) :where(a, button):focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 2px; border-radius: var(--aura-radius-xs); }
174
+ @supports (overflow-clip-margin: 1px) {
175
+ .aura-table__td { overflow: clip; overflow-clip-margin: var(--aura-space-1); }
176
+ }
177
+ @supports not (overflow-clip-margin: 1px) {
178
+ .aura-table__td :focus-visible { outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
179
+ }
164
180
  /* 5.11 rowHeight="auto" (never virtualized): a row grows to fit what wraps in it; each cell centres its content.
165
181
  * The padding only shows once content is taller than the row: a small Button or IconButton (32px), a pill or one line
166
182
  * still fits the density's row height (7.5px above and below at 48px, 3.5px compact). */
@@ -864,8 +880,14 @@ a.aura-tab { text-decoration: none; }
864
880
  .aura-crumbs li.aura-crumbs__more { display: none; }
865
881
  /* "…" is the only way to the hidden items: a 24px target, 44px on touch screens. */
866
882
  .aura-crumbs__more > button { position: relative; min-width: 24px; min-height: 24px; display: inline-flex; align-items: center; justify-content: center; }
883
+ /* 5.35 (DxT Monitor 11): on a touch screen every crumb link and button (and "…") gets a 44px-tall hit area; the text
884
+ * doesn't move. The area reaches 12px into the gutter on each side (the gutter is 28px, so neighbours never overlap)
885
+ * and only 4px below the text, so it stops short of a PageHeader title 4px under the crumbs; the rest of the 44px is
886
+ * above. Wrapped rows sit 24px apart on touch screens so one row's areas never cover the next. */
867
887
  @media (pointer: coarse) {
868
- .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%); }
888
+ .aura-crumbs ol { row-gap: 24px; }
889
+ .aura-crumbs li > a, .aura-crumbs li > button { position: relative; }
890
+ .aura-crumbs li > a::after, .aura-crumbs li > button::after { content: ''; position: absolute; left: -12px; right: -12px; bottom: -4px; height: max(100% + 4px, var(--aura-touch-target)); }
869
891
  }
870
892
  @media (max-width: 639.98px) {
871
893
  .aura-crumbs--collapse-sm li.aura-crumbs__more { display: inline-flex; }
@@ -1072,6 +1094,10 @@ a.aura-tab { text-decoration: none; }
1072
1094
  --aura-shell-bar-height: 56px; /* 5.14 (Chamber-OS 104): the top bar's height, for sticky offsets under it */
1073
1095
  }
1074
1096
  .aura-shell--no-bar { --aura-shell-bar-height: 0px; }
1097
+ /* 5.35 (DxT Monitor 13): headerHideOnScroll — below lg the bar slides up out of view while the page scrolls down (its
1098
+ * shadow too); AppShell sets the bar-height token to 0 meanwhile. */
1099
+ .aura-shell__bar--hides { transition: transform var(--aura-duration-base) var(--aura-ease); }
1100
+ @media (max-width: 1023.98px) { .aura-shell__bar.is-away { transform: translateY(calc(-100% - 8px)); } }
1075
1101
  @media (min-width: 1024px) { .aura-shell--menu-bar { --aura-shell-bar-height: 0px; } }
1076
1102
  .aura-shell__nav { position: sticky; top: 0; height: 100vh; height: 100dvh; flex: none; }
1077
1103
  .aura-shell__main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
@@ -1187,6 +1213,7 @@ button.aura-stat { font: inherit; width: 100%; cursor: pointer; }
1187
1213
  .aura-status-tile--down .aura-status-tile__icon { color: var(--aura-alert-danger-fg); }
1188
1214
  .aura-status-tile--problem .aura-status-tile__icon { color: var(--aura-alert-warning-fg); }
1189
1215
  .aura-status-tile--maintenance .aura-status-tile__icon { color: var(--aura-alert-info-fg); }
1216
+ .aura-status-tile--unknown .aura-status-tile__icon { color: var(--aura-fg-tertiary); } /* 5.35: no data yet */
1190
1217
  /* Two lines at most: similar names stay apart. */
1191
1218
  .aura-status-tile__title {
1192
1219
  flex: 1 1 0; min-width: 0; font-weight: 600; overflow-wrap: break-word;
@@ -1845,10 +1872,18 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1845
1872
  @media (min-width: 1024px) { .aura-bottomnav.aura-bottomnav--below-lg, .aura-bottomnav-spacer.aura-bottomnav--below-lg { display: none; } }
1846
1873
  @media (min-width: 1280px) { .aura-bottomnav.aura-bottomnav--below-xl, .aura-bottomnav-spacer.aura-bottomnav--below-xl { display: none; } }
1847
1874
  /* While a BottomNav shows, viewport ActionBars and phone toasts sit on top of it. */
1848
- :root:has(.aura-bottomnav--always) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); }
1849
- @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)); } }
1850
- @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)); } }
1851
- @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)); } }
1875
+ /* 5.35: not while it has slid away on scroll, nor on a page that hides it (data-aura-hide-bottomnav). */
1876
+ :root:has(nav.aura-bottomnav--always:not(.is-away)):not(:has([data-aura-hide-bottomnav])) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); }
1877
+ @media (max-width: 767.98px) { :root:has(nav.aura-bottomnav--below-md:not(.is-away)):not(:has([data-aura-hide-bottomnav])) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1878
+ @media (max-width: 1023.98px) { :root:has(nav.aura-bottomnav--below-lg:not(.is-away)):not(:has([data-aura-hide-bottomnav])) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1879
+ @media (max-width: 1279.98px) { :root:has(nav.aura-bottomnav--below-xl:not(.is-away)):not(:has([data-aura-hide-bottomnav])) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1880
+ /* 5.35 (DxT Monitor 14): hideOnScroll slides it down out of view (the spacer stays, so nothing shifts); a page with its
1881
+ * own bottom bar (ActionBar hidesBottomNav, or data-aura-hide-bottomnav on any element) has no BottomNav or spacer. */
1882
+ .aura-bottomnav--hides { transition: transform var(--aura-duration-base) var(--aura-ease); }
1883
+ .aura-bottomnav.is-away { transform: translateY(100%); }
1884
+ :root:has([data-aura-hide-bottomnav]) .aura-bottomnav, :root:has([data-aura-hide-bottomnav]) .aura-bottomnav-spacer { display: none; }
1885
+ .aura-actionbar--viewport { transition: bottom var(--aura-duration-base) var(--aura-ease); }
1886
+ @media (prefers-reduced-motion: reduce) { .aura-bottomnav--hides, .aura-actionbar--viewport, .aura-shell__bar--hides { transition: none; } }
1852
1887
  /* Toasts clear a BottomNav wherever it shows (phones and tablets), else the bottom safe-area inset (5.6). */
1853
1888
  .aura-toaster:not(.is-top) { bottom: calc(var(--aura-toaster-offset, var(--aura-space-6)) + var(--aura-bottomnav-offset, env(safe-area-inset-bottom, 0px))); }
1854
1889
  @media (max-width: 639.98px) { .aura-toaster:not(.is-top) { bottom: calc(var(--aura-toaster-offset, var(--aura-space-4)) + var(--aura-bottomnav-offset, env(safe-area-inset-bottom, 0px))); } }
@@ -163,6 +163,22 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
163
163
  box-sizing: border-box; height: 100%; line-height: calc(var(--aura-table-row-height) - 1px);
164
164
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-right: var(--aura-space-4);
165
165
  }
166
+ /* 5.36 (DxT Monitor 15): the cell clips its text, not the focus ring of a link or button in it (2px wide, 2px out,
167
+ * so 4px). A cell's start edge is its content edge, so a ring there lost its start side. In the first data column the
168
+ * row's sticky start gutter (or pinned checkbox column) painted over it too: there a focused link or button is lifted
169
+ * just above them — not while the table is scrolled sideways (it would cover the pinned columns), and never above the
170
+ * sticky header or totals (z-index 3). Where the browser can't give the clip a margin (Safari), rings in cells are
171
+ * drawn inside instead. */
172
+ .aura-table:not(.is-scrolled-x) :is(.aura-table__gutter, .aura-table__sel) + .aura-table__td :is(a, button, [role="button"]):focus-visible { position: relative; z-index: 2; }
173
+ /* A plain link or button of yours in a cell gets AURA's ring rather than the browser's (no specificity: your own focus
174
+ * style wins). */
175
+ :where(.aura-table__td) :where(a, button):focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: 2px; border-radius: var(--aura-radius-xs); }
176
+ @supports (overflow-clip-margin: 1px) {
177
+ .aura-table__td { overflow: clip; overflow-clip-margin: var(--aura-space-1); }
178
+ }
179
+ @supports not (overflow-clip-margin: 1px) {
180
+ .aura-table__td :focus-visible { outline-offset: calc(-1 * var(--aura-focus-ring-width)); }
181
+ }
166
182
  /* 5.11 rowHeight="auto" (never virtualized): a row grows to fit what wraps in it; each cell centres its content.
167
183
  * The padding only shows once content is taller than the row: a small Button or IconButton (32px), a pill or one line
168
184
  * still fits the density's row height (7.5px above and below at 48px, 3.5px compact). */
@@ -866,8 +882,14 @@ a.aura-tab { text-decoration: none; }
866
882
  .aura-crumbs li.aura-crumbs__more { display: none; }
867
883
  /* "…" is the only way to the hidden items: a 24px target, 44px on touch screens. */
868
884
  .aura-crumbs__more > button { position: relative; min-width: 24px; min-height: 24px; display: inline-flex; align-items: center; justify-content: center; }
885
+ /* 5.35 (DxT Monitor 11): on a touch screen every crumb link and button (and "…") gets a 44px-tall hit area; the text
886
+ * doesn't move. The area reaches 12px into the gutter on each side (the gutter is 28px, so neighbours never overlap)
887
+ * and only 4px below the text, so it stops short of a PageHeader title 4px under the crumbs; the rest of the 44px is
888
+ * above. Wrapped rows sit 24px apart on touch screens so one row's areas never cover the next. */
869
889
  @media (pointer: coarse) {
870
- .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%); }
890
+ .aura-crumbs ol { row-gap: 24px; }
891
+ .aura-crumbs li > a, .aura-crumbs li > button { position: relative; }
892
+ .aura-crumbs li > a::after, .aura-crumbs li > button::after { content: ''; position: absolute; left: -12px; right: -12px; bottom: -4px; height: max(100% + 4px, var(--aura-touch-target)); }
871
893
  }
872
894
  @media (max-width: 639.98px) {
873
895
  .aura-crumbs--collapse-sm li.aura-crumbs__more { display: inline-flex; }
@@ -1074,6 +1096,10 @@ a.aura-tab { text-decoration: none; }
1074
1096
  --aura-shell-bar-height: 56px; /* 5.14 (Chamber-OS 104): the top bar's height, for sticky offsets under it */
1075
1097
  }
1076
1098
  .aura-shell--no-bar { --aura-shell-bar-height: 0px; }
1099
+ /* 5.35 (DxT Monitor 13): headerHideOnScroll — below lg the bar slides up out of view while the page scrolls down (its
1100
+ * shadow too); AppShell sets the bar-height token to 0 meanwhile. */
1101
+ .aura-shell__bar--hides { transition: transform var(--aura-duration-base) var(--aura-ease); }
1102
+ @media (max-width: 1023.98px) { .aura-shell__bar.is-away { transform: translateY(calc(-100% - 8px)); } }
1077
1103
  @media (min-width: 1024px) { .aura-shell--menu-bar { --aura-shell-bar-height: 0px; } }
1078
1104
  .aura-shell__nav { position: sticky; top: 0; height: 100vh; height: 100dvh; flex: none; }
1079
1105
  .aura-shell__main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
@@ -1189,6 +1215,7 @@ button.aura-stat { font: inherit; width: 100%; cursor: pointer; }
1189
1215
  .aura-status-tile--down .aura-status-tile__icon { color: var(--aura-alert-danger-fg); }
1190
1216
  .aura-status-tile--problem .aura-status-tile__icon { color: var(--aura-alert-warning-fg); }
1191
1217
  .aura-status-tile--maintenance .aura-status-tile__icon { color: var(--aura-alert-info-fg); }
1218
+ .aura-status-tile--unknown .aura-status-tile__icon { color: var(--aura-fg-tertiary); } /* 5.35: no data yet */
1192
1219
  /* Two lines at most: similar names stay apart. */
1193
1220
  .aura-status-tile__title {
1194
1221
  flex: 1 1 0; min-width: 0; font-weight: 600; overflow-wrap: break-word;
@@ -1847,10 +1874,18 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1847
1874
  @media (min-width: 1024px) { .aura-bottomnav.aura-bottomnav--below-lg, .aura-bottomnav-spacer.aura-bottomnav--below-lg { display: none; } }
1848
1875
  @media (min-width: 1280px) { .aura-bottomnav.aura-bottomnav--below-xl, .aura-bottomnav-spacer.aura-bottomnav--below-xl { display: none; } }
1849
1876
  /* While a BottomNav shows, viewport ActionBars and phone toasts sit on top of it. */
1850
- :root:has(.aura-bottomnav--always) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); }
1851
- @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)); } }
1852
- @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)); } }
1853
- @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)); } }
1877
+ /* 5.35: not while it has slid away on scroll, nor on a page that hides it (data-aura-hide-bottomnav). */
1878
+ :root:has(nav.aura-bottomnav--always:not(.is-away)):not(:has([data-aura-hide-bottomnav])) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); }
1879
+ @media (max-width: 767.98px) { :root:has(nav.aura-bottomnav--below-md:not(.is-away)):not(:has([data-aura-hide-bottomnav])) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1880
+ @media (max-width: 1023.98px) { :root:has(nav.aura-bottomnav--below-lg:not(.is-away)):not(:has([data-aura-hide-bottomnav])) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1881
+ @media (max-width: 1279.98px) { :root:has(nav.aura-bottomnav--below-xl:not(.is-away)):not(:has([data-aura-hide-bottomnav])) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1882
+ /* 5.35 (DxT Monitor 14): hideOnScroll slides it down out of view (the spacer stays, so nothing shifts); a page with its
1883
+ * own bottom bar (ActionBar hidesBottomNav, or data-aura-hide-bottomnav on any element) has no BottomNav or spacer. */
1884
+ .aura-bottomnav--hides { transition: transform var(--aura-duration-base) var(--aura-ease); }
1885
+ .aura-bottomnav.is-away { transform: translateY(100%); }
1886
+ :root:has([data-aura-hide-bottomnav]) .aura-bottomnav, :root:has([data-aura-hide-bottomnav]) .aura-bottomnav-spacer { display: none; }
1887
+ .aura-actionbar--viewport { transition: bottom var(--aura-duration-base) var(--aura-ease); }
1888
+ @media (prefers-reduced-motion: reduce) { .aura-bottomnav--hides, .aura-actionbar--viewport, .aura-shell__bar--hides { transition: none; } }
1854
1889
  /* Toasts clear a BottomNav wherever it shows (phones and tablets), else the bottom safe-area inset (5.6). */
1855
1890
  .aura-toaster:not(.is-top) { bottom: calc(var(--aura-toaster-offset, var(--aura-space-6)) + var(--aura-bottomnav-offset, env(safe-area-inset-bottom, 0px))); }
1856
1891
  @media (max-width: 639.98px) { .aura-toaster:not(.is-top) { bottom: calc(var(--aura-toaster-offset, var(--aura-space-4)) + var(--aura-bottomnav-offset, env(safe-area-inset-bottom, 0px))); } }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jirawatpyk/aura-react",
3
- "version": "5.34.0",
3
+ "version": "5.36.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",