@jirawatpyk/aura-react 5.35.0 → 5.37.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 +10 -0
- package/dist/aura.bundle.js +11 -1
- package/dist/cjs/index.cjs +11 -1
- package/dist/esm/PageHeader.js +10 -1
- package/dist/esm/SegmentedControl.js +2 -0
- package/dist/index.d.cts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/server/index.cjs +10 -1
- package/dist/server/index.d.cts +5 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.js +10 -1
- package/dist/styles.css +47 -0
- package/dist/styles.layer.css +47 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -186,6 +186,16 @@ 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.37 — DxT Monitor requests 17–18
|
|
190
|
+
|
|
191
|
+
- **PageHeader `actionsFullWidthBelow`** (request 17): `'sm'`, `'md'` or `'lg'` — below 640px, 768px or 1024px the actions take the whole row under the text, 12px apart, and the buttons share each line in equal widths (unless a label needs more), so they reach the page's edge: three buttons on a phone fill two rows (two halves, then one across) when their labels don't fit on one, and a single button spans the row. A button inside a DropdownMenu, Tooltip or Popover fills its share too; an IconButton (bare, or as a menu's trigger) keeps its square size — so a line with only IconButtons on it doesn't reach the edge (one that wraps alone sits at the start); put them on the first line. Labels don't wrap: a label wider than the row overflows, as before — keep phone labels short, or give that one Button `fullWidth`. For a fixed arrangement, pass your own grid as the one child — it spans the row too. Wider than the breakpoint, the actions hug their content at the end, 8px apart, as before. A class on the root, so it works from `/server` too. Apps that stretched the actions with their own selector (e.g. `max-md:[&>:last-child]:w-full`) can drop it.
|
|
192
|
+
- **SegmentedControl `touchHeight`** (request 18): 44px options — `size="sm"` too, icon-only options 44px square — with `true` below 640px or on a coarse pointer (the same rule as Button's and TextField's `touchHeight`), or `'always'` at every width. A phone-sized viewport with a mouse (or an emulated phone in end-to-end tests) now gets the touch size too. Without it nothing changes: options are as tall as a field beside them with a mouse, and 44px on a coarse pointer. DxT asked for "below md"; it follows AURA's other `touchHeight` props (below 640px) so a form's fields, buttons and choices change size together — at 390px it is the same.
|
|
193
|
+
|
|
194
|
+
## 5.36 — DxT Monitor requests 15–16
|
|
195
|
+
|
|
196
|
+
- **Focus rings in table cells** (request 15): a DataTable cell clips its text (ellipsis) but no longer the focus ring of a link or button in it. The clip has a 4px margin (`overflow: clip` + `overflow-clip-margin`), so content wider than its cell (a pill, a button) now shows up to 4px past its edge. In the first data column a focused link or button sits just above the row's sticky start gutter or pinned checkbox column (which painted over the ring's start side) — not while the table is scrolled sideways, and never above the sticky header, totals or pinned columns — and a plain `<a>` or `<button>` of yours in a cell gets AURA's ring instead of the browser's (zero specificity, so your own focus style wins). Safari has no `overflow-clip-margin`: there rings in cells are drawn just inside the control, whole. Apps that set `overflow: clip` on `.aura-table__td` themselves can drop it.
|
|
197
|
+
- **Right-aligned DataTable columns** (request 16): already there — `align: 'end'` on a column right-aligns its header (label and sort arrow) and every cell, with tabular figures, in default and `rowHeight="auto"` rows, totals and skeleton rows. Stacked cards keep each value under its label, start-aligned, by design. Now covered by tests and documented here.
|
|
198
|
+
|
|
189
199
|
## 5.35 — DxT Monitor requests 11–14
|
|
190
200
|
|
|
191
201
|
- **Breadcrumb touch targets** (request 11): on a touch screen (`pointer: coarse`) every crumb link or button (and "…") gets a hit area 44px tall and as wide as its text plus 24px; the text doesn't move. It reaches 12px into the gutter on each side, so short neighbours never share a spot, and only 4px below the text, so it stops short of a PageHeader title right underneath — the rest of the height is above, so keep about 20px clear above a breadcrumb (AppShell's content padding already is). When the crumbs wrap, the rows sit 24px apart on touch screens so one row never covers the next. The current page (not a link) gets none; a link component must render its `<a>` directly in the crumb's `li`. Apps that added their own `.aura-crumbs a::after` rule should drop it.
|
package/dist/aura.bundle.js
CHANGED
|
@@ -7663,9 +7663,18 @@ window.Aura = (() => {
|
|
|
7663
7663
|
attrs2[k] = props[k];
|
|
7664
7664
|
});
|
|
7665
7665
|
const level = props.headingLevel || 1;
|
|
7666
|
+
const below2 = props.actionsFullWidthBelow;
|
|
7666
7667
|
return h8(
|
|
7667
7668
|
"div",
|
|
7668
|
-
Object.assign(attrs2, {
|
|
7669
|
+
Object.assign(attrs2, {
|
|
7670
|
+
ref,
|
|
7671
|
+
className: cx(
|
|
7672
|
+
"aura-page-header",
|
|
7673
|
+
(below2 === "sm" || below2 === "md" || below2 === "lg") && "aura-page-header--actions-full-below-" + below2,
|
|
7674
|
+
props.className
|
|
7675
|
+
),
|
|
7676
|
+
style: props.style
|
|
7677
|
+
}),
|
|
7669
7678
|
h8(
|
|
7670
7679
|
"div",
|
|
7671
7680
|
{ className: "aura-page-header__text" },
|
|
@@ -10239,6 +10248,7 @@ window.Aura = (() => {
|
|
|
10239
10248
|
"aura-segmented",
|
|
10240
10249
|
props.size === "sm" && "aura-segmented--sm",
|
|
10241
10250
|
props.fullWidth && "is-full",
|
|
10251
|
+
touchClass(props.touchHeight),
|
|
10242
10252
|
props.disabled && "is-disabled",
|
|
10243
10253
|
props.className
|
|
10244
10254
|
)
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -7645,9 +7645,18 @@ var PageHeader = React43.forwardRef(function PageHeader2(props, ref) {
|
|
|
7645
7645
|
attrs2[k] = props[k];
|
|
7646
7646
|
});
|
|
7647
7647
|
const level = props.headingLevel || 1;
|
|
7648
|
+
const below2 = props.actionsFullWidthBelow;
|
|
7648
7649
|
return h8(
|
|
7649
7650
|
"div",
|
|
7650
|
-
Object.assign(attrs2, {
|
|
7651
|
+
Object.assign(attrs2, {
|
|
7652
|
+
ref,
|
|
7653
|
+
className: cx(
|
|
7654
|
+
"aura-page-header",
|
|
7655
|
+
(below2 === "sm" || below2 === "md" || below2 === "lg") && "aura-page-header--actions-full-below-" + below2,
|
|
7656
|
+
props.className
|
|
7657
|
+
),
|
|
7658
|
+
style: props.style
|
|
7659
|
+
}),
|
|
7651
7660
|
h8(
|
|
7652
7661
|
"div",
|
|
7653
7662
|
{ className: "aura-page-header__text" },
|
|
@@ -10221,6 +10230,7 @@ var SegmentedControl = React67.forwardRef(
|
|
|
10221
10230
|
"aura-segmented",
|
|
10222
10231
|
props.size === "sm" && "aura-segmented--sm",
|
|
10223
10232
|
props.fullWidth && "is-full",
|
|
10233
|
+
touchClass(props.touchHeight),
|
|
10224
10234
|
props.disabled && "is-disabled",
|
|
10225
10235
|
props.className
|
|
10226
10236
|
)
|
package/dist/esm/PageHeader.js
CHANGED
|
@@ -9,9 +9,18 @@ const PageHeader = React.forwardRef(function PageHeader2(props, ref) {
|
|
|
9
9
|
attrs[k] = props[k];
|
|
10
10
|
});
|
|
11
11
|
const level = props.headingLevel || 1;
|
|
12
|
+
const below = props.actionsFullWidthBelow;
|
|
12
13
|
return h(
|
|
13
14
|
"div",
|
|
14
|
-
Object.assign(attrs, {
|
|
15
|
+
Object.assign(attrs, {
|
|
16
|
+
ref,
|
|
17
|
+
className: cx(
|
|
18
|
+
"aura-page-header",
|
|
19
|
+
(below === "sm" || below === "md" || below === "lg") && "aura-page-header--actions-full-below-" + below,
|
|
20
|
+
props.className
|
|
21
|
+
),
|
|
22
|
+
style: props.style
|
|
23
|
+
}),
|
|
15
24
|
h(
|
|
16
25
|
"div",
|
|
17
26
|
{ className: "aura-page-header__text" },
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Icon } from "./Icon.js";
|
|
4
4
|
import { cx, uid, useMaybeControlled } from "./internal.js";
|
|
5
|
+
import { touchClass } from "./classes.js";
|
|
5
6
|
import { useAutoTip } from "./autoTip.js";
|
|
6
7
|
function toOpt(o) {
|
|
7
8
|
return typeof o === "object" ? o : { value: o, label: o };
|
|
@@ -65,6 +66,7 @@ const SegmentedControl = React.forwardRef(
|
|
|
65
66
|
"aura-segmented",
|
|
66
67
|
props.size === "sm" && "aura-segmented--sm",
|
|
67
68
|
props.fullWidth && "is-full",
|
|
69
|
+
touchClass(props.touchHeight),
|
|
68
70
|
props.disabled && "is-disabled",
|
|
69
71
|
props.className
|
|
70
72
|
)
|
package/dist/index.d.cts
CHANGED
|
@@ -1036,6 +1036,10 @@ export interface SegmentedControlProps {
|
|
|
1036
1036
|
size?: "sm" | "md" | undefined;
|
|
1037
1037
|
/** Stretch across the container, segments equal width. */
|
|
1038
1038
|
fullWidth?: boolean | undefined;
|
|
1039
|
+
/** 5.37 (DxT Monitor #18): 44px options (`sm` too; icon-only options 44px square). `true`: below 640px or on a
|
|
1040
|
+
* coarse pointer, as Button's and TextField's `touchHeight`; `'always'`: at every width. Without it, options are
|
|
1041
|
+
* 44px on a coarse pointer only. */
|
|
1042
|
+
touchHeight?: TouchHeight | undefined;
|
|
1039
1043
|
disabled?: boolean | undefined;
|
|
1040
1044
|
id?: string | undefined;
|
|
1041
1045
|
className?: string | undefined;
|
|
@@ -1893,6 +1897,11 @@ export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement
|
|
|
1893
1897
|
meta?: React$1.ReactNode | undefined;
|
|
1894
1898
|
/** Buttons for the page, bottom-aligned at the end; they wrap below the text on a narrow screen. */
|
|
1895
1899
|
actions?: React$1.ReactNode | undefined;
|
|
1900
|
+
/** 5.37 (DxT Monitor #17): below this breakpoint (`sm` 640px, `md` 768px, `lg` 1024px) the actions take the whole
|
|
1901
|
+
* row under the text, 12px apart, and its buttons share each line in equal widths unless a label needs more (a trigger inside a DropdownMenu,
|
|
1902
|
+
* Tooltip or Popover too; IconButtons keep their size) — a single Button or your own grid spans the row. Wider
|
|
1903
|
+
* than that, the actions hug their content at the end as before. */
|
|
1904
|
+
actionsFullWidthBelow?: "sm" | "md" | "lg" | undefined;
|
|
1896
1905
|
/** Default 1. Use 2 when the page already has an h1 (e.g. in the AppShell bar). */
|
|
1897
1906
|
headingLevel?: 1 | 2 | 3 | undefined;
|
|
1898
1907
|
/** The heading's id, for `aria-labelledby` on the page's region. */
|
package/dist/index.d.ts
CHANGED
|
@@ -1036,6 +1036,10 @@ export interface SegmentedControlProps {
|
|
|
1036
1036
|
size?: "sm" | "md" | undefined;
|
|
1037
1037
|
/** Stretch across the container, segments equal width. */
|
|
1038
1038
|
fullWidth?: boolean | undefined;
|
|
1039
|
+
/** 5.37 (DxT Monitor #18): 44px options (`sm` too; icon-only options 44px square). `true`: below 640px or on a
|
|
1040
|
+
* coarse pointer, as Button's and TextField's `touchHeight`; `'always'`: at every width. Without it, options are
|
|
1041
|
+
* 44px on a coarse pointer only. */
|
|
1042
|
+
touchHeight?: TouchHeight | undefined;
|
|
1039
1043
|
disabled?: boolean | undefined;
|
|
1040
1044
|
id?: string | undefined;
|
|
1041
1045
|
className?: string | undefined;
|
|
@@ -1893,6 +1897,11 @@ export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement
|
|
|
1893
1897
|
meta?: React$1.ReactNode | undefined;
|
|
1894
1898
|
/** Buttons for the page, bottom-aligned at the end; they wrap below the text on a narrow screen. */
|
|
1895
1899
|
actions?: React$1.ReactNode | undefined;
|
|
1900
|
+
/** 5.37 (DxT Monitor #17): below this breakpoint (`sm` 640px, `md` 768px, `lg` 1024px) the actions take the whole
|
|
1901
|
+
* row under the text, 12px apart, and its buttons share each line in equal widths unless a label needs more (a trigger inside a DropdownMenu,
|
|
1902
|
+
* Tooltip or Popover too; IconButtons keep their size) — a single Button or your own grid spans the row. Wider
|
|
1903
|
+
* than that, the actions hug their content at the end as before. */
|
|
1904
|
+
actionsFullWidthBelow?: "sm" | "md" | "lg" | undefined;
|
|
1896
1905
|
/** Default 1. Use 2 when the page already has an h1 (e.g. in the AppShell bar). */
|
|
1897
1906
|
headingLevel?: 1 | 2 | 3 | undefined;
|
|
1898
1907
|
/** The heading's id, for `aria-labelledby` on the page's region. */
|
package/dist/server/index.cjs
CHANGED
|
@@ -1425,9 +1425,18 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
|
|
|
1425
1425
|
attrs2[k] = props[k];
|
|
1426
1426
|
});
|
|
1427
1427
|
const level = props.headingLevel || 1;
|
|
1428
|
+
const below = props.actionsFullWidthBelow;
|
|
1428
1429
|
return h4(
|
|
1429
1430
|
"div",
|
|
1430
|
-
Object.assign(attrs2, {
|
|
1431
|
+
Object.assign(attrs2, {
|
|
1432
|
+
ref,
|
|
1433
|
+
className: cx(
|
|
1434
|
+
"aura-page-header",
|
|
1435
|
+
(below === "sm" || below === "md" || below === "lg") && "aura-page-header--actions-full-below-" + below,
|
|
1436
|
+
props.className
|
|
1437
|
+
),
|
|
1438
|
+
style: props.style
|
|
1439
|
+
}),
|
|
1431
1440
|
h4(
|
|
1432
1441
|
"div",
|
|
1433
1442
|
{ className: "aura-page-header__text" },
|
package/dist/server/index.d.cts
CHANGED
|
@@ -496,6 +496,11 @@ export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement
|
|
|
496
496
|
meta?: React$1.ReactNode | undefined;
|
|
497
497
|
/** Buttons for the page, bottom-aligned at the end; they wrap below the text on a narrow screen. */
|
|
498
498
|
actions?: React$1.ReactNode | undefined;
|
|
499
|
+
/** 5.37 (DxT Monitor #17): below this breakpoint (`sm` 640px, `md` 768px, `lg` 1024px) the actions take the whole
|
|
500
|
+
* row under the text, 12px apart, and its buttons share each line in equal widths unless a label needs more (a trigger inside a DropdownMenu,
|
|
501
|
+
* Tooltip or Popover too; IconButtons keep their size) — a single Button or your own grid spans the row. Wider
|
|
502
|
+
* than that, the actions hug their content at the end as before. */
|
|
503
|
+
actionsFullWidthBelow?: "sm" | "md" | "lg" | undefined;
|
|
499
504
|
/** Default 1. Use 2 when the page already has an h1 (e.g. in the AppShell bar). */
|
|
500
505
|
headingLevel?: 1 | 2 | 3 | undefined;
|
|
501
506
|
/** The heading's id, for `aria-labelledby` on the page's region. */
|
package/dist/server/index.d.ts
CHANGED
|
@@ -496,6 +496,11 @@ export interface PageHeaderProps extends Pick<React$1.HTMLAttributes<HTMLElement
|
|
|
496
496
|
meta?: React$1.ReactNode | undefined;
|
|
497
497
|
/** Buttons for the page, bottom-aligned at the end; they wrap below the text on a narrow screen. */
|
|
498
498
|
actions?: React$1.ReactNode | undefined;
|
|
499
|
+
/** 5.37 (DxT Monitor #17): below this breakpoint (`sm` 640px, `md` 768px, `lg` 1024px) the actions take the whole
|
|
500
|
+
* row under the text, 12px apart, and its buttons share each line in equal widths unless a label needs more (a trigger inside a DropdownMenu,
|
|
501
|
+
* Tooltip or Popover too; IconButtons keep their size) — a single Button or your own grid spans the row. Wider
|
|
502
|
+
* than that, the actions hug their content at the end as before. */
|
|
503
|
+
actionsFullWidthBelow?: "sm" | "md" | "lg" | undefined;
|
|
499
504
|
/** Default 1. Use 2 when the page already has an h1 (e.g. in the AppShell bar). */
|
|
500
505
|
headingLevel?: 1 | 2 | 3 | undefined;
|
|
501
506
|
/** The heading's id, for `aria-labelledby` on the page's region. */
|
package/dist/server/index.js
CHANGED
|
@@ -1361,9 +1361,18 @@ var PageHeader = React5.forwardRef(function PageHeader2(props, ref) {
|
|
|
1361
1361
|
attrs2[k] = props[k];
|
|
1362
1362
|
});
|
|
1363
1363
|
const level = props.headingLevel || 1;
|
|
1364
|
+
const below = props.actionsFullWidthBelow;
|
|
1364
1365
|
return h4(
|
|
1365
1366
|
"div",
|
|
1366
|
-
Object.assign(attrs2, {
|
|
1367
|
+
Object.assign(attrs2, {
|
|
1368
|
+
ref,
|
|
1369
|
+
className: cx(
|
|
1370
|
+
"aura-page-header",
|
|
1371
|
+
(below === "sm" || below === "md" || below === "lg") && "aura-page-header--actions-full-below-" + below,
|
|
1372
|
+
props.className
|
|
1373
|
+
),
|
|
1374
|
+
style: props.style
|
|
1375
|
+
}),
|
|
1367
1376
|
h4(
|
|
1368
1377
|
"div",
|
|
1369
1378
|
{ className: "aura-page-header__text" },
|
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). */
|
|
@@ -1122,6 +1138,30 @@ a.aura-tab { text-decoration: none; }
|
|
|
1122
1138
|
.aura-page-header__breadcrumb { min-width: 0; } /* 5.33 (DxT Monitor #7): Breadcrumb keeps its own type */
|
|
1123
1139
|
.aura-page-header__meta { min-width: 0; font-size: 13px; line-height: 1.5; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
|
|
1124
1140
|
.aura-page-header__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2); }
|
|
1141
|
+
/* 5.37 (DxT Monitor #17): actionsFullWidthBelow — the actions take the row under the text; their children share
|
|
1142
|
+
* each line equally (wrapping when a label won't fit), a trigger inside a DropdownMenu, Tooltip or Popover wrapper
|
|
1143
|
+
* fills it, and icon buttons keep their size. The :has rule is alone so older browsers drop only it. */
|
|
1144
|
+
@media (max-width: 639.98px) {
|
|
1145
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1146
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
|
|
1147
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1148
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > .aura-icon-btn { flex: none; }
|
|
1149
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
|
|
1150
|
+
}
|
|
1151
|
+
@media (max-width: 767.98px) {
|
|
1152
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1153
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
|
|
1154
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1155
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions > .aura-icon-btn { flex: none; }
|
|
1156
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
|
|
1157
|
+
}
|
|
1158
|
+
@media (max-width: 1023.98px) {
|
|
1159
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1160
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
|
|
1161
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1162
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > .aura-icon-btn { flex: none; }
|
|
1163
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
|
|
1164
|
+
}
|
|
1125
1165
|
@media (min-width: 640px) { .aura-page-header__title { font-size: 36px; } }
|
|
1126
1166
|
/* Thai marks need the room a 1.15 line takes away. */
|
|
1127
1167
|
.aura-page-header__title:lang(th) { line-height: 1.4; letter-spacing: 0; }
|
|
@@ -1514,6 +1554,13 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1514
1554
|
.aura-segmented--sm .aura-segmented__option { height: 24px; padding: 0 var(--aura-space-3); font-size: 12px; }
|
|
1515
1555
|
.aura-segmented--sm .aura-segmented__option.is-icon { width: 28px; padding: 0; }
|
|
1516
1556
|
.aura-segmented.is-disabled { opacity: var(--aura-disabled-opacity); }
|
|
1557
|
+
/* 5.37 (DxT Monitor #18): touchHeight — 44px options below 640px or on a coarse pointer (is-touch), or always. */
|
|
1558
|
+
.aura-segmented.is-touch-always .aura-segmented__option { height: var(--aura-touch-target); }
|
|
1559
|
+
.aura-segmented.is-touch-always .aura-segmented__option.is-icon { width: var(--aura-touch-target); }
|
|
1560
|
+
@media (max-width: 639.98px), (pointer: coarse) {
|
|
1561
|
+
.aura-segmented.is-touch .aura-segmented__option { height: var(--aura-touch-target); }
|
|
1562
|
+
.aura-segmented.is-touch .aura-segmented__option.is-icon { width: var(--aura-touch-target); }
|
|
1563
|
+
}
|
|
1517
1564
|
/* 5.10 (Chamber-OS 72): Tabs variant="segmented" — the tablist wears SegmentedControl's track and pills. The focus
|
|
1518
1565
|
* ring is drawn inside the pill, so neither the scrolling list (many tabs on a phone) nor the next pill can cover it;
|
|
1519
1566
|
* full-width tabs share the track but never shrink below their label (the track scrolls instead). The phone rule's
|
package/dist/styles.layer.css
CHANGED
|
@@ -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). */
|
|
@@ -1124,6 +1140,30 @@ a.aura-tab { text-decoration: none; }
|
|
|
1124
1140
|
.aura-page-header__breadcrumb { min-width: 0; } /* 5.33 (DxT Monitor #7): Breadcrumb keeps its own type */
|
|
1125
1141
|
.aura-page-header__meta { min-width: 0; font-size: 13px; line-height: 1.5; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
|
|
1126
1142
|
.aura-page-header__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2); }
|
|
1143
|
+
/* 5.37 (DxT Monitor #17): actionsFullWidthBelow — the actions take the row under the text; their children share
|
|
1144
|
+
* each line equally (wrapping when a label won't fit), a trigger inside a DropdownMenu, Tooltip or Popover wrapper
|
|
1145
|
+
* fills it, and icon buttons keep their size. The :has rule is alone so older browsers drop only it. */
|
|
1146
|
+
@media (max-width: 639.98px) {
|
|
1147
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1148
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
|
|
1149
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1150
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > .aura-icon-btn { flex: none; }
|
|
1151
|
+
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
|
|
1152
|
+
}
|
|
1153
|
+
@media (max-width: 767.98px) {
|
|
1154
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1155
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
|
|
1156
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1157
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions > .aura-icon-btn { flex: none; }
|
|
1158
|
+
.aura-page-header--actions-full-below-md > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
|
|
1159
|
+
}
|
|
1160
|
+
@media (max-width: 1023.98px) {
|
|
1161
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1162
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > * { flex: 1 1 0; min-width: max-content; }
|
|
1163
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1164
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > .aura-icon-btn { flex: none; }
|
|
1165
|
+
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > :has(> .aura-icon-btn) { flex: none; }
|
|
1166
|
+
}
|
|
1127
1167
|
@media (min-width: 640px) { .aura-page-header__title { font-size: 36px; } }
|
|
1128
1168
|
/* Thai marks need the room a 1.15 line takes away. */
|
|
1129
1169
|
.aura-page-header__title:lang(th) { line-height: 1.4; letter-spacing: 0; }
|
|
@@ -1516,6 +1556,13 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1516
1556
|
.aura-segmented--sm .aura-segmented__option { height: 24px; padding: 0 var(--aura-space-3); font-size: 12px; }
|
|
1517
1557
|
.aura-segmented--sm .aura-segmented__option.is-icon { width: 28px; padding: 0; }
|
|
1518
1558
|
.aura-segmented.is-disabled { opacity: var(--aura-disabled-opacity); }
|
|
1559
|
+
/* 5.37 (DxT Monitor #18): touchHeight — 44px options below 640px or on a coarse pointer (is-touch), or always. */
|
|
1560
|
+
.aura-segmented.is-touch-always .aura-segmented__option { height: var(--aura-touch-target); }
|
|
1561
|
+
.aura-segmented.is-touch-always .aura-segmented__option.is-icon { width: var(--aura-touch-target); }
|
|
1562
|
+
@media (max-width: 639.98px), (pointer: coarse) {
|
|
1563
|
+
.aura-segmented.is-touch .aura-segmented__option { height: var(--aura-touch-target); }
|
|
1564
|
+
.aura-segmented.is-touch .aura-segmented__option.is-icon { width: var(--aura-touch-target); }
|
|
1565
|
+
}
|
|
1519
1566
|
/* 5.10 (Chamber-OS 72): Tabs variant="segmented" — the tablist wears SegmentedControl's track and pills. The focus
|
|
1520
1567
|
* ring is drawn inside the pill, so neither the scrolling list (many tabs on a phone) nor the next pill can cover it;
|
|
1521
1568
|
* full-width tabs share the track but never shrink below their label (the track scrolls instead). The phone rule's
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jirawatpyk/aura-react",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.37.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",
|