@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/README.md CHANGED
@@ -186,6 +186,20 @@ DataTable with sort and page in the URL (4.17): `onStateChange={({ sort, page })
186
186
  - **Time zone**: `timeZone` on AuraProvider, DatePicker, DateRangePicker and Calendar decides "today" (the marker, `min`/`max="today"`, the first month shown); or pass `today` as an ISO date. `todayIn('Asia/Bangkok')` is exported from the root and `/server`.
187
187
  - **Toasts** queue past three instead of dropping: six in a row all show, in order, three at a time.
188
188
 
189
+ ## 5.70 — Chamber-OS addenda 87–91 (#186–#190)
190
+
191
+ - **Button merges a passed `aria-busy`** (#186), as it has merged `aria-disabled` since 5.14: `aria-busy` is your value or `loading`, so a caller's busy state is no longer dropped. (`<Button aria-disabled>` with or without `loading` already kept `aria-disabled="true"` and swallowed clicks and Enter.) **A link Button (`href`) now keeps a passed `aria-disabled` too** — it dropped it — staying a focusable link, announced as unavailable, whose click does nothing; `disabled` still removes the link. **IconButton now honours `aria-disabled`** as Button does: it stays focusable and announced as unavailable, looks unavailable and ignores clicks and Enter — a cooldown on a Resend icon.
192
+ - **Pagination `mode="cursor"`** (#187) for keyset lists that know no page count: First / Previous / Next, each from an href (`firstHref`, `previousHref`, `nextHref`, real links through `linkComponent`, `rel="prev"`/`"next"`) or a callback (`onFirst`, `onPrevious`, `onNext`; with an href too, it runs instead on a plain click). An end with neither, or with `hasFirst` / `hasPrevious` / `hasNext` set to `false`, is disabled — a `role="link"` `aria-disabled` span in a list of links, a disabled button in a list of buttons — out of the tab order. `status` ("Showing 50 of 1,240") sits at the start; `showFirst={false}` leaves First out. Same `label`, same 44px targets on touch; no page numbers. New string `firstPage` (EN, TH, SV). `PaginationProps` is still the numbered one (wrappers that extend it keep compiling); the cursor props are `CursorPaginationProps`, either is `AnyPaginationProps`.
193
+ - **A sortable `Th`** (#188) for a plain Table: `sort` (`ascending` / `descending` / `none`) sets `aria-sort` on the `th`; with `onSort` the label becomes a button, with `sortHref` a link (through `linkComponent`), holding DataTable's sort icon (up, down, or both ways) with a focus ring of its own. `sort` alone only says the order; a long label wraps. Without the props the markup is unchanged.
194
+ - **`Spinner`** (#189), from the root and `/server`: Button's loading glyph on its own, `sm` 16px (Button's) · `md` 20px (default) · `lg` 24px, in the text colour. `aria-hidden` by default — the words beside it, or your live region, announce — and `role="status"` with a visually hidden text when you pass `label` (that names it in browse mode; a status inserted with its text is often not announced, so to announce a change keep a live region on the page and put the words there). Under reduced motion it follows Button's spinner: it still turns, three times slower, so it still reads as busy. **`StatusPill busy`** puts the spinner in the pill's icon slot ("Waiting for payment").
195
+ - **FileUpload `variant="button"`** (#190): an AURA Button (secondary, an upload icon, `buttonLabel`, `touchHeight`) opens the picker; the real input stays in the page (out of the tab order, still carrying `name`). `accept` and `maxSize` are checked with FileUpload's messages — a refused file shows the error line and is not passed — and `onSelect(files)` gets the accepted files; no list is kept. With a `name` the input posts only the accepted files and `required` is checked on submit — the error line says "Choose a file" and focus moves to the Button; the forwarded ref is the input, but its `focus()` moves to the Button (a form library focusing an invalid field). Label, hint, error and `required` / `optional` are Field's; the Button is named by the label and its own text and described by the hint or error and the accepted types. `progress` (0–100, or `null` for indeterminate) shows an AURA Progress under it. The dropzone is unchanged.
196
+
197
+ ## 5.69 — Chamber-OS addendum 86 (#185)
198
+
199
+ - **ActionBar's edge look:** a `position="viewport"` bar takes `look="edge"` (every width) or `edgeBelow="sm"` / `"md"` (the strip below 640px / 768px, the card at and above it — as PageHeader's `actionsBarBelow`) and draws PageHeader's edge strip: the screen's full width, on the bottom edge or directly on a BottomNav, a top border only (no radius, shadow or top margin), the home-indicator inset as padding inside it. `look="floating"` (default) is the inset card, unchanged; a `container` bar ignores both props.
200
+ - **Its promises hold:** the strip is `position: fixed`, so it stays on screen for the whole page, not only while its form is. As PageHeader's bar, `<html>` gets its measured height as `--aura-actionbar-height` (60px before hydration; the home-indicator padding counts), the page's end is padded by it (AppShell's content, else the `body`) and `scroll-padding-bottom` keeps a focused field clear — so the last field, and anything after the form, scroll clear. The ActionBar root is the strip, so `getBoundingClientRect()` on it measures the strip. On a screen 30rem tall or less it is static, in the flow, as every bar. An idle bulk bar (`selected={0}`) stays folded away and adds no room. Drop your own clearance (a hook adding the bar's height to `scroll-padding-bottom` or page padding) when you adopt `look` / `edgeBelow`, or it is counted twice. Buttons stay 44px on a phone; `start`, `status`, `children`, the region and its label are unchanged.
201
+ - **Mind:** a transform, filter, `will-change` or paint containment on an ancestor places a fixed strip against that ancestor instead of the screen (a dev warning says so), and `look="edge"` at desktop widths spans the screen under a side nav — use `edgeBelow` for a phone-only strip. Passing both `look="edge"` and `edgeBelow` warns in development (`look` wins). Replace a hand-built `position: fixed` pay band with `<ActionBar edgeBelow="sm">`.
202
+
189
203
  ## 5.68 — Chamber-OS addendum 85 (#184)
190
204
 
191
205
  - **A disabled group dims its legend:** `RadioGroup` and `CheckboxGroup` with `disabled` add `is-disabled` to the fieldset, so the legend takes the disabled colour (`fg-secondary`) a disabled `Field`'s label has — a form that disables its fields while submitting no longer shows group legends at full contrast over dimmed controls.