@jirawatpyk/aura-react 5.51.0 → 5.52.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.
@@ -576,14 +576,14 @@ var STRINGS = {
576
576
 
577
577
  // src/theme.ts
578
578
  function hexToRgb(hex) {
579
- let h6 = String(hex).trim().replace("#", "");
580
- if (h6.length === 3)
581
- h6 = h6.split("").map(function(c) {
579
+ let h7 = String(hex).trim().replace("#", "");
580
+ if (h7.length === 3)
581
+ h7 = h7.split("").map(function(c) {
582
582
  return c + c;
583
583
  }).join("");
584
- if (!/^[0-9a-f]{6}$/i.test(h6)) throw new Error('createTheme: "' + hex + '" is not a #rgb or #rrggbb colour');
584
+ if (!/^[0-9a-f]{6}$/i.test(h7)) throw new Error('createTheme: "' + hex + '" is not a #rgb or #rrggbb colour');
585
585
  return [0, 2, 4].map(function(i) {
586
- return parseInt(h6.slice(i, i + 2), 16) / 255;
586
+ return parseInt(h7.slice(i, i + 2), 16) / 255;
587
587
  });
588
588
  }
589
589
  function rgbToHex(rgb) {
@@ -1375,10 +1375,171 @@ var Container = React4.forwardRef(function Container2(props, ref) {
1375
1375
  );
1376
1376
  });
1377
1377
 
1378
- // src/PageHeader.tsx
1378
+ // src/TableSkeleton.tsx
1379
1379
  import * as React5 from "react";
1380
1380
  var h4 = React5.createElement;
1381
- var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
1381
+ function inertProps() {
1382
+ return { inert: parseInt(React5.version, 10) >= 19 ? true : "", "aria-hidden": true };
1383
+ }
1384
+ function widthOf(w) {
1385
+ return w == null || w === "" ? void 0 : typeof w === "number" ? w + "px" : w;
1386
+ }
1387
+ function skeletonColgroup(cols) {
1388
+ return h4(
1389
+ "colgroup",
1390
+ null,
1391
+ cols.map(function(c, i) {
1392
+ const w = widthOf(c.width);
1393
+ return h4("col", { key: i, style: w ? { width: w } : void 0 });
1394
+ })
1395
+ );
1396
+ }
1397
+ function placeholder(c) {
1398
+ const s = c.skeleton || {};
1399
+ if (s.kind === "pill") return h4("span", { className: "aura-skel aura-skel--pill" });
1400
+ if (s.kind === "action") return h4("span", { className: cx("aura-skel aura-skel--action", s.touch && "is-touch") });
1401
+ if (s.lines === 2)
1402
+ return h4(
1403
+ "span",
1404
+ { className: "aura-skel-lines" },
1405
+ h4("span", { className: "aura-skel aura-skel--text", style: { width: "100%" } }),
1406
+ h4("span", { className: "aura-skel aura-skel--text", style: { width: "60%" } })
1407
+ );
1408
+ return h4("span", { className: "aura-skel aura-skel--text", style: { width: "80%" } });
1409
+ }
1410
+ function cellCls(base, c) {
1411
+ const align = c.align || (c.numeric ? "end" : void 0);
1412
+ return cx(base, align === "end" && "is-end", align === "center" && "is-center", c.numeric && "is-numeric");
1413
+ }
1414
+ function skeletonBody(cols, n3, stacked) {
1415
+ const rows = [];
1416
+ for (let r2 = 0; r2 < n3; r2++)
1417
+ rows.push(
1418
+ h4(
1419
+ "tr",
1420
+ { key: r2, className: "aura-tbl__row aura-tbl__row--skeleton", role: stacked ? "row" : void 0 },
1421
+ cols.map(function(c, i) {
1422
+ const slot = stacked && (c.card === "title" || c.card === "action") ? c.card : void 0;
1423
+ return h4(
1424
+ "td",
1425
+ {
1426
+ key: i,
1427
+ className: cellCls("aura-tbl__td", c),
1428
+ role: stacked ? "cell" : void 0,
1429
+ "data-label": stacked && !slot && c.label ? c.label : void 0,
1430
+ "data-card": slot
1431
+ },
1432
+ placeholder(c)
1433
+ );
1434
+ })
1435
+ )
1436
+ );
1437
+ return h4(
1438
+ "tbody",
1439
+ { key: "aura-skeleton", className: "aura-tbl__body", role: stacked ? "rowgroup" : void 0 },
1440
+ rows
1441
+ );
1442
+ }
1443
+ function tableWrapClass(p) {
1444
+ return cx(
1445
+ "aura-tbl-wrap",
1446
+ p.stackBelow && "is-stackable",
1447
+ p.bordered === false && "is-flush",
1448
+ p.bleed && "aura-bleed-frame",
1449
+ p.bleed && !p.cards && "aura-bleed",
1450
+ p.bleed && p.bleedEnd && !p.cards && "aura-bleed-end"
1451
+ );
1452
+ }
1453
+ function tableClass(p) {
1454
+ return cx(
1455
+ "aura-tbl",
1456
+ p.stackBelow && "aura-tbl--stack-" + p.stackBelow,
1457
+ (p.align === "middle" || p.rowHeight === "density" && p.align !== "top") && "aura-tbl--middle",
1458
+ p.rowHeight === "density" && "aura-tbl--row-density",
1459
+ p.cards && "aura-tbl--cards",
1460
+ p.className
1461
+ );
1462
+ }
1463
+ function cardsFrame(el, p) {
1464
+ return p.cards ? h4(
1465
+ "div",
1466
+ {
1467
+ className: cx(
1468
+ "aura-tbl-cards aura-tbl-cards--" + p.stackBelow,
1469
+ p.bleed && "aura-bleed",
1470
+ p.bleed && p.bleedEnd && "aura-bleed-end"
1471
+ )
1472
+ },
1473
+ el
1474
+ ) : el;
1475
+ }
1476
+ function TableSkeleton(props) {
1477
+ const cols = props.columns || [];
1478
+ const n3 = props.rows != null ? Math.max(0, props.rows) : 5;
1479
+ const stacked = !!props.stackBelow;
1480
+ const cards = stacked && props.stackStyle === "cards";
1481
+ const head = h4(
1482
+ "thead",
1483
+ { className: "aura-tbl__head", role: stacked ? "rowgroup" : void 0 },
1484
+ h4(
1485
+ "tr",
1486
+ { className: "aura-tbl__row", role: stacked ? "row" : void 0 },
1487
+ cols.map(function(c, i) {
1488
+ return h4(
1489
+ "th",
1490
+ { key: i, scope: "col", className: cellCls("aura-tbl__th", c), role: stacked ? "columnheader" : void 0 },
1491
+ c.label
1492
+ );
1493
+ })
1494
+ )
1495
+ );
1496
+ const table = h4(
1497
+ "div",
1498
+ Object.assign(
1499
+ {
1500
+ className: tableWrapClass({
1501
+ stackBelow: props.stackBelow,
1502
+ bordered: props.bordered,
1503
+ bleed: props.bleed,
1504
+ bleedEnd: props.bleedEnd,
1505
+ cards
1506
+ }),
1507
+ "data-density": props.density || "comfortable"
1508
+ },
1509
+ inertProps()
1510
+ ),
1511
+ h4(
1512
+ "table",
1513
+ {
1514
+ className: cx(
1515
+ tableClass({
1516
+ stackBelow: props.stackBelow,
1517
+ align: props.align,
1518
+ rowHeight: props.rowHeight,
1519
+ cards,
1520
+ className: props.className
1521
+ }),
1522
+ "aura-tbl--skeleton"
1523
+ ),
1524
+ role: stacked ? "table" : void 0
1525
+ },
1526
+ skeletonColgroup(cols),
1527
+ head,
1528
+ skeletonBody(cols, n3, stacked)
1529
+ )
1530
+ );
1531
+ return cardsFrame(table, {
1532
+ stackBelow: props.stackBelow,
1533
+ bleed: props.bleed,
1534
+ bleedEnd: props.bleedEnd,
1535
+ cards
1536
+ });
1537
+ }
1538
+
1539
+ // src/PageHeader.tsx
1540
+ import * as React6 from "react";
1541
+ var h5 = React6.createElement;
1542
+ var PageHeader = React6.forwardRef(function PageHeader2(props, ref) {
1382
1543
  const attrs2 = {};
1383
1544
  Object.keys(props).forEach(function(k) {
1384
1545
  if (k === "id" || k === "lang" || k === "dir" || k === "role" || /^(aria|data)-/.test(k))
@@ -1394,7 +1555,7 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
1394
1555
  const size = props.size === "compact" || props.size === "hero" || props.size === "hero-lg" ? props.size : null;
1395
1556
  const eyebrow = props.eyebrow;
1396
1557
  const plainEyebrow = typeof eyebrow === "string" || typeof eyebrow === "number";
1397
- const heading = h4(
1558
+ const heading = h5(
1398
1559
  "h" + level,
1399
1560
  {
1400
1561
  className: "aura-page-header__title",
@@ -1406,7 +1567,7 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
1406
1567
  );
1407
1568
  const hasActions = props.actions != null && props.actions !== false;
1408
1569
  const bar = hasActions && (props.actionsBarBelow === "sm" || props.actionsBarBelow === "md") ? props.actionsBarBelow : null;
1409
- return h4(
1570
+ return h5(
1410
1571
  "div",
1411
1572
  Object.assign(attrs2, {
1412
1573
  ref,
@@ -1423,32 +1584,32 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
1423
1584
  ),
1424
1585
  style: props.style
1425
1586
  }),
1426
- h4(
1587
+ h5(
1427
1588
  "div",
1428
1589
  { className: "aura-page-header__text" },
1429
- props.breadcrumb != null && props.breadcrumb !== false ? h4("div", { className: "aura-page-header__breadcrumb" }, props.breadcrumb) : null,
1430
- shown(eyebrow) ? plainEyebrow ? h4("p", { className: "aura-page-header__eyebrow" }, eyebrow) : h4("div", { className: "aura-page-header__eyebrow aura-page-header__eyebrow--rich" }, eyebrow) : null,
1431
- shown(props.titleAddon) ? h4(
1590
+ props.breadcrumb != null && props.breadcrumb !== false ? h5("div", { className: "aura-page-header__breadcrumb" }, props.breadcrumb) : null,
1591
+ shown(eyebrow) ? plainEyebrow ? h5("p", { className: "aura-page-header__eyebrow" }, eyebrow) : h5("div", { className: "aura-page-header__eyebrow aura-page-header__eyebrow--rich" }, eyebrow) : null,
1592
+ shown(props.titleAddon) ? h5(
1432
1593
  "div",
1433
1594
  { className: "aura-page-header__title-row" },
1434
1595
  heading,
1435
- h4("div", { className: "aura-page-header__title-addon" }, props.titleAddon)
1596
+ h5("div", { className: "aura-page-header__title-addon" }, props.titleAddon)
1436
1597
  ) : heading,
1437
- shown(props.subtitle) ? h4("div", { className: "aura-page-header__subtitle" }, props.subtitle) : null,
1438
- props.meta != null && props.meta !== false ? h4("div", { className: "aura-page-header__meta" }, props.meta) : null
1598
+ shown(props.subtitle) ? h5("div", { className: "aura-page-header__subtitle" }, props.subtitle) : null,
1599
+ props.meta != null && props.meta !== false ? h5("div", { className: "aura-page-header__meta" }, props.meta) : null
1439
1600
  ),
1440
- props.actions != null && props.actions !== false ? h4(
1601
+ props.actions != null && props.actions !== false ? h5(
1441
1602
  "div",
1442
1603
  { className: "aura-page-header__actions" },
1443
- bar && props.actionsStatus != null && props.actionsStatus !== false ? h4("div", { className: "aura-page-header__status", role: "status" }, props.actionsStatus) : null,
1604
+ bar && props.actionsStatus != null && props.actionsStatus !== false ? h5("div", { className: "aura-page-header__status", role: "status" }, props.actionsStatus) : null,
1444
1605
  props.actions
1445
1606
  ) : null
1446
1607
  );
1447
1608
  });
1448
1609
 
1449
1610
  // src/tiles.tsx
1450
- import * as React6 from "react";
1451
- var h5 = React6.createElement;
1611
+ import * as React7 from "react";
1612
+ var h6 = React7.createElement;
1452
1613
  var STATUS_ICON = {
1453
1614
  down: IconCircleAlert,
1454
1615
  problem: IconTriangleAlert,
@@ -1481,7 +1642,7 @@ function attrs(props) {
1481
1642
  });
1482
1643
  return out;
1483
1644
  }
1484
- var comma = h5("span", { className: "aura-status-tile__sep" }, ",");
1645
+ var comma = h6("span", { className: "aura-status-tile__sep" }, ",");
1485
1646
  function statusTileElement(props, ref, Link, t, titleRef) {
1486
1647
  const status = STATUS_ICON[props.status] ? props.status : "unknown";
1487
1648
  if (status !== props.status)
@@ -1497,43 +1658,43 @@ function statusTileElement(props, ref, Link, t, titleRef) {
1497
1658
  };
1498
1659
  const hasValue = has(props.value), hasMeta = has(props.meta);
1499
1660
  const Tag = props.href ? Link : "div";
1500
- return h5(
1661
+ return h6(
1501
1662
  Tag,
1502
1663
  Object.assign(attrs(props), {
1503
1664
  ref,
1504
1665
  href: props.href,
1505
1666
  className: cx("aura-status-tile", "aura-status-tile--" + status, props.href && "is-interactive", props.className)
1506
1667
  }),
1507
- h5(
1668
+ h6(
1508
1669
  "span",
1509
1670
  { className: "aura-status-tile__head" },
1510
- h5(Icon, { name: h5(STATUS_ICON[status]), size: 16, className: "aura-status-tile__icon" }),
1511
- h5("span", { className: "aura-status-tile__title", ref: titleRef }, props.title, comma),
1512
- h5("span", { className: "aura-sr-only" }, word + (hasValue || hasMeta || markers.length ? "," : "")),
1513
- hasValue ? h5(
1671
+ h6(Icon, { name: h6(STATUS_ICON[status]), size: 16, className: "aura-status-tile__icon" }),
1672
+ h6("span", { className: "aura-status-tile__title", ref: titleRef }, props.title, comma),
1673
+ h6("span", { className: "aura-sr-only" }, word + (hasValue || hasMeta || markers.length ? "," : "")),
1674
+ hasValue ? h6(
1514
1675
  "span",
1515
1676
  { className: cx("aura-status-tile__value", "is-" + valueTone) },
1516
1677
  props.value,
1517
1678
  hasMeta || markers.length ? comma : null
1518
1679
  ) : null
1519
1680
  ),
1520
- hasMeta || markers.length ? h5(
1681
+ hasMeta || markers.length ? h6(
1521
1682
  "span",
1522
1683
  { className: "aura-status-tile__foot" },
1523
- hasMeta ? h5("span", { className: "aura-status-tile__meta" }, props.meta, markers.length ? comma : null) : null,
1524
- markers.length ? h5(
1684
+ hasMeta ? h6("span", { className: "aura-status-tile__meta" }, props.meta, markers.length ? comma : null) : null,
1685
+ markers.length ? h6(
1525
1686
  "span",
1526
1687
  { className: "aura-status-tile__markers" },
1527
1688
  markers.map(function(m, i) {
1528
- return h5(
1689
+ return h6(
1529
1690
  "span",
1530
1691
  {
1531
1692
  key: i,
1532
1693
  className: cx("aura-status-tile__marker", "is-" + (m.tone || "neutral")),
1533
1694
  "data-aura-tip": m.label
1534
1695
  },
1535
- h5(Icon, { name: m.icon, size: 14 }),
1536
- h5("span", { className: "aura-sr-only" }, m.label + (i < markers.length - 1 ? "," : ""))
1696
+ h6(Icon, { name: m.icon, size: 14 }),
1697
+ h6("span", { className: "aura-sr-only" }, m.label + (i < markers.length - 1 ? "," : ""))
1537
1698
  );
1538
1699
  })
1539
1700
  ) : null
@@ -1543,13 +1704,13 @@ function statusTileElement(props, ref, Link, t, titleRef) {
1543
1704
  function ServerStatusTile(props) {
1544
1705
  return statusTileElement(props, void 0, props.linkComponent || "a", STRINGS.en);
1545
1706
  }
1546
- var TileGrid = React6.forwardRef(function TileGrid2(props, ref) {
1707
+ var TileGrid = React7.forwardRef(function TileGrid2(props, ref) {
1547
1708
  const style = Object.assign(
1548
1709
  {},
1549
1710
  respVars("aura-grid-cols", props.columns == null ? { base: 2, md: 3 } : props.columns),
1550
1711
  props.style
1551
1712
  );
1552
- return h5(
1713
+ return h6(
1553
1714
  "ul",
1554
1715
  Object.assign(attrs(props), {
1555
1716
  ref,
@@ -1559,16 +1720,16 @@ var TileGrid = React6.forwardRef(function TileGrid2(props, ref) {
1559
1720
  }),
1560
1721
  /* toArray drops null and booleans and keys each element; a Fragment's children are items too. */
1561
1722
  flat(props.children).map(function(c, i) {
1562
- return h5("li", { key: React6.isValidElement(c) && c.key != null ? c.key : i }, c);
1723
+ return h6("li", { key: React7.isValidElement(c) && c.key != null ? c.key : i }, c);
1563
1724
  })
1564
1725
  );
1565
1726
  });
1566
1727
  function flat(children) {
1567
1728
  const out = [];
1568
- React6.Children.toArray(children).forEach(function(c) {
1569
- if (React6.isValidElement(c) && c.type === React6.Fragment)
1729
+ React7.Children.toArray(children).forEach(function(c) {
1730
+ if (React7.isValidElement(c) && c.type === React7.Fragment)
1570
1731
  flat(c.props.children).forEach(function(x) {
1571
- out.push(React6.isValidElement(x) ? React6.cloneElement(x, { key: String(c.key) + "/" + String(x.key) }) : x);
1732
+ out.push(React7.isValidElement(x) ? React7.cloneElement(x, { key: String(c.key) + "/" + String(x.key) }) : x);
1572
1733
  });
1573
1734
  else if (c !== "") out.push(c);
1574
1735
  });
@@ -1582,7 +1743,7 @@ function r(n3) {
1582
1743
  function num(v) {
1583
1744
  return typeof v === "number" && isFinite(v) ? v : null;
1584
1745
  }
1585
- var Sparkline = React6.forwardRef(function Sparkline2(props, ref) {
1746
+ var Sparkline = React7.forwardRef(function Sparkline2(props, ref) {
1586
1747
  const wh = SIZES2[props.size || "sm"] || SIZES2.sm;
1587
1748
  const W = wh[0], H = wh[1];
1588
1749
  const data = (props.data || []).map(num);
@@ -1612,7 +1773,7 @@ var Sparkline = React6.forwardRef(function Sparkline2(props, ref) {
1612
1773
  data.forEach(function(v, i) {
1613
1774
  if (v == null) return;
1614
1775
  const prev = i > 0 && data[i - 1] != null, next = i < n3 - 1 && data[i + 1] != null;
1615
- if (!prev && !next) dots.push(h5("circle", { key: "d" + i, cx: r(x(i)), cy: r(y(v)), r: 1.5 }));
1776
+ if (!prev && !next) dots.push(h6("circle", { key: "d" + i, cx: r(x(i)), cy: r(y(v)), r: 1.5 }));
1616
1777
  else d += (prev ? "L" : "M") + r(x(i)) + " " + r(y(v));
1617
1778
  });
1618
1779
  const mode = props.failures || "none";
@@ -1622,10 +1783,10 @@ var Sparkline = React6.forwardRef(function Sparkline2(props, ref) {
1622
1783
  if (!props.failed[i]) return;
1623
1784
  if (mode === "band") {
1624
1785
  const w = Math.max(2, step || W), left = Math.max(0, x(i) - w / 2), right = Math.min(W, x(i) + w / 2);
1625
- fails.push(h5("rect", { key: "f" + i, x: r(left), y: 0, width: r(right - left), height: H }));
1786
+ fails.push(h6("rect", { key: "f" + i, x: r(left), y: 0, width: r(right - left), height: H }));
1626
1787
  } else
1627
1788
  fails.push(
1628
- h5("rect", {
1789
+ h6("rect", {
1629
1790
  key: "f" + i,
1630
1791
  x: r(Math.max(0, Math.min(W - 1.5, x(i) - 0.75))),
1631
1792
  y: H - 6,
@@ -1635,7 +1796,7 @@ var Sparkline = React6.forwardRef(function Sparkline2(props, ref) {
1635
1796
  );
1636
1797
  });
1637
1798
  const named = !!props.label;
1638
- return h5(
1799
+ return h6(
1639
1800
  "svg",
1640
1801
  Object.assign(attrs(props), {
1641
1802
  ref,
@@ -1648,10 +1809,10 @@ var Sparkline = React6.forwardRef(function Sparkline2(props, ref) {
1648
1809
  "aria-hidden": named ? void 0 : true,
1649
1810
  focusable: "false"
1650
1811
  }),
1651
- fails.length && mode === "band" ? h5("g", { className: "aura-sparkline__band" }, fails) : null,
1652
- d ? h5("path", { className: "aura-sparkline__line", d }) : null,
1653
- dots.length ? h5("g", { className: "aura-sparkline__dots" }, dots) : null,
1654
- fails.length && mode === "ticks" ? h5("g", { className: "aura-sparkline__ticks" }, fails) : null
1812
+ fails.length && mode === "band" ? h6("g", { className: "aura-sparkline__band" }, fails) : null,
1813
+ d ? h6("path", { className: "aura-sparkline__line", d }) : null,
1814
+ dots.length ? h6("g", { className: "aura-sparkline__dots" }, dots) : null,
1815
+ fails.length && mode === "ticks" ? h6("g", { className: "aura-sparkline__ticks" }, fails) : null
1655
1816
  );
1656
1817
  });
1657
1818
  export {
@@ -1668,6 +1829,7 @@ export {
1668
1829
  ServerStat as Stat,
1669
1830
  ServerStatusPill as StatusPill,
1670
1831
  ServerStatusTile as StatusTile,
1832
+ TableSkeleton,
1671
1833
  TileGrid,
1672
1834
  scale as brandScale,
1673
1835
  breakpoints,
package/dist/styles.css CHANGED
@@ -2168,6 +2168,12 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
2168
2168
  var(--aura-tbl-bg, var(--aura-bg-surface));
2169
2169
  }
2170
2170
  .aura-tbl { width: 100%; border-collapse: collapse; border-spacing: 0; font-size: max(13px, .8125rem); line-height: max(20px, 1.25rem); }
2171
+ /* 5.52 (Chamber-OS 164): a loading Table has no content to size its columns from, so they take the head's widths
2172
+ * (or even shares); each placeholder bar sits on the row's 20px line, so a skeleton row is as tall as a text row. */
2173
+ .aura-tbl--skeleton { table-layout: fixed; }
2174
+ .aura-tbl__row--skeleton .aura-skel--text { display: block; margin: 5px 0; margin: calc((1lh - 10px) / 2) 0; }
2175
+ .aura-tbl__row--skeleton .aura-tbl__td.is-end > .aura-skel--text { margin-inline-start: auto; }
2176
+ .aura-tbl__row--skeleton .aura-tbl__td.is-end > .aura-skel-lines { align-items: flex-end; }
2171
2177
  .aura-tbl__caption { caption-side: top; padding: var(--aura-space-4) var(--aura-space-6) var(--aura-space-3); text-align: left; font-size: max(14px, .875rem); font-weight: 600; }
2172
2178
  /* 5.30: from 640px a cell is at least 10ch wide, so the table never squeezes a column to one letter; a longer word (an
2173
2179
  * email, a URL) still breaks to fit instead of widening the table. Phones keep fitting the box: use stackBelow there. */
@@ -2170,6 +2170,12 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
2170
2170
  var(--aura-tbl-bg, var(--aura-bg-surface));
2171
2171
  }
2172
2172
  .aura-tbl { width: 100%; border-collapse: collapse; border-spacing: 0; font-size: max(13px, .8125rem); line-height: max(20px, 1.25rem); }
2173
+ /* 5.52 (Chamber-OS 164): a loading Table has no content to size its columns from, so they take the head's widths
2174
+ * (or even shares); each placeholder bar sits on the row's 20px line, so a skeleton row is as tall as a text row. */
2175
+ .aura-tbl--skeleton { table-layout: fixed; }
2176
+ .aura-tbl__row--skeleton .aura-skel--text { display: block; margin: 5px 0; margin: calc((1lh - 10px) / 2) 0; }
2177
+ .aura-tbl__row--skeleton .aura-tbl__td.is-end > .aura-skel--text { margin-inline-start: auto; }
2178
+ .aura-tbl__row--skeleton .aura-tbl__td.is-end > .aura-skel-lines { align-items: flex-end; }
2173
2179
  .aura-tbl__caption { caption-side: top; padding: var(--aura-space-4) var(--aura-space-6) var(--aura-space-3); text-align: left; font-size: max(14px, .875rem); font-weight: 600; }
2174
2180
  /* 5.30: from 640px a cell is at least 10ch wide, so the table never squeezes a column to one letter; a longer word (an
2175
2181
  * email, a URL) still breaks to fit instead of widening the table. Phones keep fitting the box: use stackBelow there. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jirawatpyk/aura-react",
3
- "version": "5.51.0",
3
+ "version": "5.52.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",