@jirawatpyk/aura-react 5.68.0 → 5.70.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.
package/dist/styles.css CHANGED
@@ -251,6 +251,12 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
251
251
  transition: color var(--aura-duration-fast) var(--aura-ease);
252
252
  }
253
253
  .aura-table__sort:hover, .aura-table__sort.is-active { color: var(--aura-fg-primary); }
254
+ /* 5.70 (Chamber-OS 188): the same control in a plain Table's Th — a button or a link, with its own focus ring (a
255
+ * DataTable header ring is on the cell, which roves). */
256
+ a.aura-table__sort { text-decoration: none; }
257
+ .aura-tbl__th .aura-table__sort { white-space: normal; text-align: inherit; }
258
+ .aura-tbl__th .aura-table__sort:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
259
+ .aura-tbl__th.is-end .aura-table__sort { flex-direction: row-reverse; }
254
260
 
255
261
  /* Column menu trigger — shows on header hover or focus */
256
262
  .aura-table__menu-btn {
@@ -363,6 +369,9 @@ a.aura-icon-btn { text-decoration: none; }
363
369
  .aura-icon-btn--outline { box-sizing: border-box; border: 1px solid var(--aura-button-secondary-border); } /* 5.44 (Chamber-OS 149): reads as a button beside outlined ones */
364
370
  .aura-icon-btn--danger:hover { background: var(--aura-alert-danger-bg); }
365
371
  .aura-icon-btn:disabled { opacity: var(--aura-disabled-opacity); pointer-events: none; }
372
+ /* 5.70 (Chamber-OS 186): aria-disabled keeps it focusable (a cooldown); it looks unavailable and hover changes nothing. */
373
+ .aura-icon-btn[aria-disabled="true"] { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
374
+ .aura-icon-btn[aria-disabled="true"]:hover { background: transparent; }
366
375
  /* 5.65 (Chamber-OS 180): a toggle (aria-pressed="true", or the pressed prop) looks on — the selected fill and the
367
376
  * accent icon — and hover still shows on top of it (an accent hairline inside). Outline toggles take an accent border.
368
377
  * The focus ring is unchanged. Not inside a field: PasswordField's reveal eye (aria-pressed) stays quiet (5.30 #14).
@@ -482,6 +491,8 @@ a.aura-icon-btn { text-decoration: none; }
482
491
  /* Loading spinner */
483
492
  @keyframes aura-spin { to { transform: rotate(360deg); } }
484
493
  .aura-spin { animation: aura-spin var(--aura-duration-spin) linear infinite; }
494
+ /* 5.70 (Chamber-OS 189): Spinner — the same glyph and spin, inline with the text. */
495
+ .aura-spinner { display: inline-flex; flex: none; vertical-align: middle; color: inherit; line-height: 0; }
485
496
  @media (prefers-reduced-motion: reduce) {
486
497
  .aura-spin { animation-duration: calc(var(--aura-duration-spin) * 3); }
487
498
  }
@@ -1513,6 +1524,10 @@ button.aura-stat { font: inherit; width: 100%; cursor: pointer; }
1513
1524
  .aura-time__option { min-height: 36px; font-variant-numeric: tabular-nums; }
1514
1525
 
1515
1526
  /* ---------- FileUpload ---------- */
1527
+ /* 5.70 (Chamber-OS 190): FileUpload variant="button" — the Button, the accepted types and size beside it (wrapping
1528
+ * under on a narrow field), an optional Progress under them. */
1529
+ .aura-upload-button { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2) var(--aura-space-3); }
1530
+ .aura-upload-button > .aura-upload__note { flex-basis: auto; font-size: max(12px, .75rem); color: var(--aura-fg-secondary); }
1516
1531
  .aura-upload {
1517
1532
  position: relative; box-sizing: border-box; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--aura-space-2);
1518
1533
  min-height: 96px; padding: var(--aura-space-5); text-align: center; cursor: pointer;
@@ -1649,6 +1664,14 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1649
1664
  .aura-page:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
1650
1665
  .aura-pagination__gap { min-width: 24px; text-align: center; color: var(--aura-fg-secondary); }
1651
1666
  .aura-pagination__compact { display: none; padding: 0 var(--aura-space-2); color: var(--aura-fg-secondary); font-variant-numeric: tabular-nums; }
1667
+ /* 5.70 (Chamber-OS 187): cursor mode — a status line at the start, First / Previous / Next at the end, each an
1668
+ * .aura-page with text (44px on touch, as the numbers); a disabled end is dimmed and takes no clicks. */
1669
+ .aura-pagination--cursor { flex-wrap: wrap; justify-content: flex-end; gap: var(--aura-space-1) var(--aura-space-3); }
1670
+ .aura-pagination__status { flex: 1 1 auto; min-width: 0; color: var(--aura-fg-secondary); font-variant-numeric: tabular-nums; }
1671
+ .aura-pagination__steps { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; margin-inline-start: auto; }
1672
+ .aura-page--step { gap: var(--aura-space-1); padding: 0 var(--aura-space-3); white-space: nowrap; }
1673
+ .aura-page--step:is(:disabled, [aria-disabled="true"]) { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
1674
+ .aura-page--step:is(:disabled, [aria-disabled="true"]):hover { background: transparent; }
1652
1675
  @media (max-width: 639.98px) {
1653
1676
  .aura-pagination__list { display: none; }
1654
1677
  .aura-pagination__compact { display: inline; }
@@ -2270,6 +2293,32 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
2270
2293
  .aura-actionbar__start:empty { display: none; }
2271
2294
  @container aura-actionbar (min-width: 640px) { .aura-actionbar__start { order: -1; } }
2272
2295
  @container aura-actionbar (max-width: 639.98px) { .aura-actionbar__inner.has-start > .aura-actionbar__status:not(:empty) { flex-basis: 100%; } }
2296
+ /* 5.69 (Chamber-OS 185): look="edge" / edgeBelow — PageHeader's edge strip (5.48): the screen's full width, on the
2297
+ * bottom edge or on a BottomNav, a top border only, the home-indicator inset inside it. Fixed, so it spans the screen
2298
+ * and not its parent; as PageHeader's bar, the page gains its height at the end (the shell's content, else the body)
2299
+ * and as scroll-padding — --aura-actionbar-height, measured on the client, 60px until then — so the page's end and a
2300
+ * focused field scroll clear of it. On a screen 30rem tall or less it is static, in the flow, as every bar (5.48/5.49). */
2301
+ .aura-actionbar--edge:not(.is-idle) { border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; }
2302
+ @media (min-height: 30.00125rem) {
2303
+ .aura-actionbar--edge:not(.is-idle) { position: fixed; left: 0; right: 0; width: auto; bottom: var(--aura-bottomnav-offset, 0px); margin: 0; padding-bottom: max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px)); }
2304
+ :root:has(.aura-actionbar--edge:not(.is-idle)) { --aura-actionbar-space: calc(var(--aura-actionbar-height, 60px) + var(--aura-bottomnav-offset, 0px) + var(--aura-space-3)); scroll-padding-bottom: var(--aura-actionbar-space); }
2305
+ :root:has(.aura-actionbar--edge:not(.is-idle)) .aura-shell__content { padding-bottom: calc(var(--aura-space-6) + var(--aura-actionbar-space)); }
2306
+ :root:has(.aura-actionbar--edge:not(.is-idle)):not(:has(.aura-shell__content)) body { padding-bottom: var(--aura-actionbar-space); }
2307
+ }
2308
+ @media (max-width: 639.98px) { .aura-actionbar--edge-below-sm:not(.is-idle) { border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; } }
2309
+ @media (max-width: 639.98px) and (min-height: 30.00125rem) {
2310
+ .aura-actionbar--edge-below-sm:not(.is-idle) { position: fixed; left: 0; right: 0; width: auto; bottom: var(--aura-bottomnav-offset, 0px); margin: 0; padding-bottom: max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px)); }
2311
+ :root:has(.aura-actionbar--edge-below-sm:not(.is-idle)) { --aura-actionbar-space: calc(var(--aura-actionbar-height, 60px) + var(--aura-bottomnav-offset, 0px) + var(--aura-space-3)); scroll-padding-bottom: var(--aura-actionbar-space); }
2312
+ :root:has(.aura-actionbar--edge-below-sm:not(.is-idle)) .aura-shell__content { padding-bottom: calc(var(--aura-space-6) + var(--aura-actionbar-space)); }
2313
+ :root:has(.aura-actionbar--edge-below-sm:not(.is-idle)):not(:has(.aura-shell__content)) body { padding-bottom: var(--aura-actionbar-space); }
2314
+ }
2315
+ @media (max-width: 767.98px) { .aura-actionbar--edge-below-md:not(.is-idle) { border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; } }
2316
+ @media (max-width: 767.98px) and (min-height: 30.00125rem) {
2317
+ .aura-actionbar--edge-below-md:not(.is-idle) { position: fixed; left: 0; right: 0; width: auto; bottom: var(--aura-bottomnav-offset, 0px); margin: 0; padding-bottom: max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px)); }
2318
+ :root:has(.aura-actionbar--edge-below-md:not(.is-idle)) { --aura-actionbar-space: calc(var(--aura-actionbar-height, 60px) + var(--aura-bottomnav-offset, 0px) + var(--aura-space-3)); scroll-padding-bottom: var(--aura-actionbar-space); }
2319
+ :root:has(.aura-actionbar--edge-below-md:not(.is-idle)) .aura-shell__content { padding-bottom: calc(var(--aura-space-6) + var(--aura-actionbar-space)); }
2320
+ :root:has(.aura-actionbar--edge-below-md:not(.is-idle)):not(:has(.aura-shell__content)) body { padding-bottom: var(--aura-actionbar-space); }
2321
+ }
2273
2322
 
2274
2323
  /* ---------- 4.20: Separator ---------- */
2275
2324
  .aura-separator { flex: none; align-self: stretch; height: 1px; margin: var(--aura-separator-space, 0) 0; background: var(--aura-border-default); border: 0; }
@@ -253,6 +253,12 @@ button.aura-btn--creative[aria-disabled='true']:hover { box-shadow: var(--aura-s
253
253
  transition: color var(--aura-duration-fast) var(--aura-ease);
254
254
  }
255
255
  .aura-table__sort:hover, .aura-table__sort.is-active { color: var(--aura-fg-primary); }
256
+ /* 5.70 (Chamber-OS 188): the same control in a plain Table's Th — a button or a link, with its own focus ring (a
257
+ * DataTable header ring is on the cell, which roves). */
258
+ a.aura-table__sort { text-decoration: none; }
259
+ .aura-tbl__th .aura-table__sort { white-space: normal; text-align: inherit; }
260
+ .aura-tbl__th .aura-table__sort:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
261
+ .aura-tbl__th.is-end .aura-table__sort { flex-direction: row-reverse; }
256
262
 
257
263
  /* Column menu trigger — shows on header hover or focus */
258
264
  .aura-table__menu-btn {
@@ -365,6 +371,9 @@ a.aura-icon-btn { text-decoration: none; }
365
371
  .aura-icon-btn--outline { box-sizing: border-box; border: 1px solid var(--aura-button-secondary-border); } /* 5.44 (Chamber-OS 149): reads as a button beside outlined ones */
366
372
  .aura-icon-btn--danger:hover { background: var(--aura-alert-danger-bg); }
367
373
  .aura-icon-btn:disabled { opacity: var(--aura-disabled-opacity); pointer-events: none; }
374
+ /* 5.70 (Chamber-OS 186): aria-disabled keeps it focusable (a cooldown); it looks unavailable and hover changes nothing. */
375
+ .aura-icon-btn[aria-disabled="true"] { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
376
+ .aura-icon-btn[aria-disabled="true"]:hover { background: transparent; }
368
377
  /* 5.65 (Chamber-OS 180): a toggle (aria-pressed="true", or the pressed prop) looks on — the selected fill and the
369
378
  * accent icon — and hover still shows on top of it (an accent hairline inside). Outline toggles take an accent border.
370
379
  * The focus ring is unchanged. Not inside a field: PasswordField's reveal eye (aria-pressed) stays quiet (5.30 #14).
@@ -484,6 +493,8 @@ a.aura-icon-btn { text-decoration: none; }
484
493
  /* Loading spinner */
485
494
  @keyframes aura-spin { to { transform: rotate(360deg); } }
486
495
  .aura-spin { animation: aura-spin var(--aura-duration-spin) linear infinite; }
496
+ /* 5.70 (Chamber-OS 189): Spinner — the same glyph and spin, inline with the text. */
497
+ .aura-spinner { display: inline-flex; flex: none; vertical-align: middle; color: inherit; line-height: 0; }
487
498
  @media (prefers-reduced-motion: reduce) {
488
499
  .aura-spin { animation-duration: calc(var(--aura-duration-spin) * 3); }
489
500
  }
@@ -1515,6 +1526,10 @@ button.aura-stat { font: inherit; width: 100%; cursor: pointer; }
1515
1526
  .aura-time__option { min-height: 36px; font-variant-numeric: tabular-nums; }
1516
1527
 
1517
1528
  /* ---------- FileUpload ---------- */
1529
+ /* 5.70 (Chamber-OS 190): FileUpload variant="button" — the Button, the accepted types and size beside it (wrapping
1530
+ * under on a narrow field), an optional Progress under them. */
1531
+ .aura-upload-button { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2) var(--aura-space-3); }
1532
+ .aura-upload-button > .aura-upload__note { flex-basis: auto; font-size: max(12px, .75rem); color: var(--aura-fg-secondary); }
1518
1533
  .aura-upload {
1519
1534
  position: relative; box-sizing: border-box; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: var(--aura-space-2);
1520
1535
  min-height: 96px; padding: var(--aura-space-5); text-align: center; cursor: pointer;
@@ -1651,6 +1666,14 @@ a.aura-upload__name:focus-visible { outline: var(--aura-focus-ring-width) solid
1651
1666
  .aura-page:focus-visible { outline: var(--aura-focus-ring-width) solid var(--aura-focus-ring); outline-offset: var(--aura-focus-ring-offset); }
1652
1667
  .aura-pagination__gap { min-width: 24px; text-align: center; color: var(--aura-fg-secondary); }
1653
1668
  .aura-pagination__compact { display: none; padding: 0 var(--aura-space-2); color: var(--aura-fg-secondary); font-variant-numeric: tabular-nums; }
1669
+ /* 5.70 (Chamber-OS 187): cursor mode — a status line at the start, First / Previous / Next at the end, each an
1670
+ * .aura-page with text (44px on touch, as the numbers); a disabled end is dimmed and takes no clicks. */
1671
+ .aura-pagination--cursor { flex-wrap: wrap; justify-content: flex-end; gap: var(--aura-space-1) var(--aura-space-3); }
1672
+ .aura-pagination__status { flex: 1 1 auto; min-width: 0; color: var(--aura-fg-secondary); font-variant-numeric: tabular-nums; }
1673
+ .aura-pagination__steps { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; margin-inline-start: auto; }
1674
+ .aura-page--step { gap: var(--aura-space-1); padding: 0 var(--aura-space-3); white-space: nowrap; }
1675
+ .aura-page--step:is(:disabled, [aria-disabled="true"]) { opacity: var(--aura-disabled-opacity); cursor: not-allowed; }
1676
+ .aura-page--step:is(:disabled, [aria-disabled="true"]):hover { background: transparent; }
1654
1677
  @media (max-width: 639.98px) {
1655
1678
  .aura-pagination__list { display: none; }
1656
1679
  .aura-pagination__compact { display: inline; }
@@ -2272,6 +2295,32 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
2272
2295
  .aura-actionbar__start:empty { display: none; }
2273
2296
  @container aura-actionbar (min-width: 640px) { .aura-actionbar__start { order: -1; } }
2274
2297
  @container aura-actionbar (max-width: 639.98px) { .aura-actionbar__inner.has-start > .aura-actionbar__status:not(:empty) { flex-basis: 100%; } }
2298
+ /* 5.69 (Chamber-OS 185): look="edge" / edgeBelow — PageHeader's edge strip (5.48): the screen's full width, on the
2299
+ * bottom edge or on a BottomNav, a top border only, the home-indicator inset inside it. Fixed, so it spans the screen
2300
+ * and not its parent; as PageHeader's bar, the page gains its height at the end (the shell's content, else the body)
2301
+ * and as scroll-padding — --aura-actionbar-height, measured on the client, 60px until then — so the page's end and a
2302
+ * focused field scroll clear of it. On a screen 30rem tall or less it is static, in the flow, as every bar (5.48/5.49). */
2303
+ .aura-actionbar--edge:not(.is-idle) { border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; }
2304
+ @media (min-height: 30.00125rem) {
2305
+ .aura-actionbar--edge:not(.is-idle) { position: fixed; left: 0; right: 0; width: auto; bottom: var(--aura-bottomnav-offset, 0px); margin: 0; padding-bottom: max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px)); }
2306
+ :root:has(.aura-actionbar--edge:not(.is-idle)) { --aura-actionbar-space: calc(var(--aura-actionbar-height, 60px) + var(--aura-bottomnav-offset, 0px) + var(--aura-space-3)); scroll-padding-bottom: var(--aura-actionbar-space); }
2307
+ :root:has(.aura-actionbar--edge:not(.is-idle)) .aura-shell__content { padding-bottom: calc(var(--aura-space-6) + var(--aura-actionbar-space)); }
2308
+ :root:has(.aura-actionbar--edge:not(.is-idle)):not(:has(.aura-shell__content)) body { padding-bottom: var(--aura-actionbar-space); }
2309
+ }
2310
+ @media (max-width: 639.98px) { .aura-actionbar--edge-below-sm:not(.is-idle) { border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; } }
2311
+ @media (max-width: 639.98px) and (min-height: 30.00125rem) {
2312
+ .aura-actionbar--edge-below-sm:not(.is-idle) { position: fixed; left: 0; right: 0; width: auto; bottom: var(--aura-bottomnav-offset, 0px); margin: 0; padding-bottom: max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px)); }
2313
+ :root:has(.aura-actionbar--edge-below-sm:not(.is-idle)) { --aura-actionbar-space: calc(var(--aura-actionbar-height, 60px) + var(--aura-bottomnav-offset, 0px) + var(--aura-space-3)); scroll-padding-bottom: var(--aura-actionbar-space); }
2314
+ :root:has(.aura-actionbar--edge-below-sm:not(.is-idle)) .aura-shell__content { padding-bottom: calc(var(--aura-space-6) + var(--aura-actionbar-space)); }
2315
+ :root:has(.aura-actionbar--edge-below-sm:not(.is-idle)):not(:has(.aura-shell__content)) body { padding-bottom: var(--aura-actionbar-space); }
2316
+ }
2317
+ @media (max-width: 767.98px) { .aura-actionbar--edge-below-md:not(.is-idle) { border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; } }
2318
+ @media (max-width: 767.98px) and (min-height: 30.00125rem) {
2319
+ .aura-actionbar--edge-below-md:not(.is-idle) { position: fixed; left: 0; right: 0; width: auto; bottom: var(--aura-bottomnav-offset, 0px); margin: 0; padding-bottom: max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px)); }
2320
+ :root:has(.aura-actionbar--edge-below-md:not(.is-idle)) { --aura-actionbar-space: calc(var(--aura-actionbar-height, 60px) + var(--aura-bottomnav-offset, 0px) + var(--aura-space-3)); scroll-padding-bottom: var(--aura-actionbar-space); }
2321
+ :root:has(.aura-actionbar--edge-below-md:not(.is-idle)) .aura-shell__content { padding-bottom: calc(var(--aura-space-6) + var(--aura-actionbar-space)); }
2322
+ :root:has(.aura-actionbar--edge-below-md:not(.is-idle)):not(:has(.aura-shell__content)) body { padding-bottom: var(--aura-actionbar-space); }
2323
+ }
2275
2324
 
2276
2325
  /* ---------- 4.20: Separator ---------- */
2277
2326
  .aura-separator { flex: none; align-self: stretch; height: 1px; margin: var(--aura-separator-space, 0) 0; background: var(--aura-border-default); border: 0; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jirawatpyk/aura-react",
3
- "version": "5.68.0",
3
+ "version": "5.70.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",