@jirawatpyk/aura-react 5.77.0 → 5.78.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 +12 -0
- package/dist/aura.bundle.js +107 -10
- package/dist/cjs/index.cjs +107 -10
- package/dist/esm/DataTable.js +27 -1
- package/dist/esm/PageHeader.js +10 -1
- package/dist/esm/Table.js +5 -0
- package/dist/esm/Tabs.js +10 -3
- package/dist/esm/classes.js +8 -6
- package/dist/esm/internal.js +46 -2
- package/dist/esm/tiles.js +16 -1
- package/dist/server/index.cjs +33 -8
- package/dist/server/index.js +33 -8
- package/dist/styles.css +57 -3
- package/dist/styles.layer.css +57 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -186,6 +186,18 @@ 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.78 — visual audit, set 2 (phones)
|
|
190
|
+
|
|
191
|
+
- **Bottom strips on a phone follow one rule:** ActionBar's edge strip (`look="edge"`, `edgeBelow`) now lays out as PageHeader's bar (5.48) — the status on its own row at the top, the actions sharing the row under it (an IconButton keeps its square; labels too long to share take a row each, as PageHeader's) — and both strips are 16px from either side, the page's phone gutter (they were 16 and 12). `edgeBelow="md"` follows it up to 768px. A single label wider than the screen still overflows, as in PageHeader's strip — keep bar labels short.
|
|
192
|
+
- **PageHeader `actionsFullWidthBelow`:** on a phone its buttons are `--aura-radius-md` boxes, so a label that wraps to two lines is a rounded box, not a lozenge (the ⋯ IconButton stays round) — also the header's own actions beside an `actionsBar` strip. The bottom strip keeps its pill buttons.
|
|
193
|
+
- **A document number in a PageHeader title stays whole:** in a plain-text title, a short token with a digit and a hyphen ("Invoice SC-2026-900001") never breaks at its hyphens; the line breaks before it. The text is unchanged (a `.aura-nowrap` span, a utility you can use too).
|
|
194
|
+
- **DataTable cards with `columnControls`:** the column picker's slot no longer squeezes the card's title (it took 48px of the first line).
|
|
195
|
+
- **StatusTile:** a host or a path in a plain-text title ("api.example.co.th") breaks after a dot or a slash, not in the middle of a label.
|
|
196
|
+
- **Tabs:** a tab list wider than its box fades the end that has more tabs (both ends once scrolled; mirrored in RTL), so a cut tab reads as "scroll for more". `data-aura-more="start" | "end" | "start end"` on the list.
|
|
197
|
+
- **Combobox and TimePicker:** room is kept for the clear button only while there is one — an empty TimePicker in a narrow column showed "hh:m".
|
|
198
|
+
- **Development warning:** a `DataTable` or `Table` that scrolls sideways on a screen under 640px without `stackBelow` warns once — its last columns are off screen. `stackBelow` stays opt-in in 5.x (it changes the layout) and becomes the default in 6.0.
|
|
199
|
+
- **Stories:** the examples that scrolled the page sideways at 390px (fixed grids, rows that didn't wrap, fixed-width demo boxes) and the demo tables now fit a phone.
|
|
200
|
+
|
|
189
201
|
## 5.77 — Chamber-OS addendum 95 follow-up (#194)
|
|
190
202
|
|
|
191
203
|
- **A confirmation opens at its top on a short screen:** when a Dialog scrolls as one box (5.76) and its first focus lands in the footer — `data-autofocus` on Cancel, or a dialog with nothing to fill in — it no longer scrolls to its end on open: the title, the description and the summary of what is being confirmed are what show first, with Cancel focused below. Tab or a scroll reaches the buttons as before. A field in the body that takes the first focus is still scrolled into view (it is what you type in next). By design the focused Cancel then starts below the fold: focus is in the dialog, on the safe action, and a screen reader reads the title and description first. Above 30rem nothing changes — where the panel can't scroll, the browser keeps the focused button in view as before; a Drawer is unaffected. With `autoFocus={false}`, a footer button you focus yourself scrolls as the browser does.
|
package/dist/aura.bundle.js
CHANGED
|
@@ -174,15 +174,16 @@ window.Aura = (() => {
|
|
|
174
174
|
return TONES.indexOf(t) >= 0 ? t : "neutral";
|
|
175
175
|
}
|
|
176
176
|
var warned = {};
|
|
177
|
-
function
|
|
178
|
-
if (warned[key]) return;
|
|
179
|
-
let dev = false;
|
|
177
|
+
function isDev() {
|
|
180
178
|
try {
|
|
181
|
-
|
|
179
|
+
return true;
|
|
182
180
|
} catch (e) {
|
|
183
|
-
|
|
181
|
+
return false;
|
|
184
182
|
}
|
|
185
|
-
|
|
183
|
+
}
|
|
184
|
+
function devWarnOnce(key, message) {
|
|
185
|
+
if (warned[key]) return;
|
|
186
|
+
if (!isDev()) return;
|
|
186
187
|
warned[key] = true;
|
|
187
188
|
console.warn("[AURA] " + message);
|
|
188
189
|
}
|
|
@@ -518,6 +519,48 @@ window.Aura = (() => {
|
|
|
518
519
|
function pointerModality() {
|
|
519
520
|
setModality("pointer");
|
|
520
521
|
}
|
|
522
|
+
function useScrollEdges(r2, key) {
|
|
523
|
+
React3.useEffect(
|
|
524
|
+
function() {
|
|
525
|
+
const el = r2.current;
|
|
526
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
527
|
+
let raf = 0;
|
|
528
|
+
const mark = function() {
|
|
529
|
+
raf = 0;
|
|
530
|
+
const max = el.scrollWidth - el.clientWidth;
|
|
531
|
+
const x = Math.abs(el.scrollLeft);
|
|
532
|
+
const v = ((x > 1 ? "start " : "") + (x < max - 1 ? "end" : "")).trim();
|
|
533
|
+
if ((el.getAttribute("data-aura-more") || "") === v) return;
|
|
534
|
+
if (v) el.setAttribute("data-aura-more", v);
|
|
535
|
+
else el.removeAttribute("data-aura-more");
|
|
536
|
+
};
|
|
537
|
+
const on = function() {
|
|
538
|
+
if (!raf) raf = requestAnimationFrame(mark);
|
|
539
|
+
};
|
|
540
|
+
mark();
|
|
541
|
+
el.addEventListener("scroll", on, { passive: true });
|
|
542
|
+
const ro = new ResizeObserver(on);
|
|
543
|
+
ro.observe(el);
|
|
544
|
+
Array.prototype.forEach.call(el.children, function(c) {
|
|
545
|
+
ro.observe(c);
|
|
546
|
+
});
|
|
547
|
+
const mo = new MutationObserver(function() {
|
|
548
|
+
Array.prototype.forEach.call(el.children, function(c) {
|
|
549
|
+
ro.observe(c);
|
|
550
|
+
});
|
|
551
|
+
on();
|
|
552
|
+
});
|
|
553
|
+
mo.observe(el, { childList: true });
|
|
554
|
+
return function() {
|
|
555
|
+
cancelAnimationFrame(raf);
|
|
556
|
+
el.removeEventListener("scroll", on);
|
|
557
|
+
ro.disconnect();
|
|
558
|
+
mo.disconnect();
|
|
559
|
+
};
|
|
560
|
+
},
|
|
561
|
+
[key]
|
|
562
|
+
);
|
|
563
|
+
}
|
|
521
564
|
|
|
522
565
|
// src/display.tsx
|
|
523
566
|
var React4 = __toESM(require_react(), 1);
|
|
@@ -6199,6 +6242,24 @@ window.Aura = (() => {
|
|
|
6199
6242
|
[measure, levelShape]
|
|
6200
6243
|
);
|
|
6201
6244
|
const stacked = !!props.stackBelow && boxWidth[0] != null && below(boxWidth[0], props.stackBelow);
|
|
6245
|
+
React34.useEffect(
|
|
6246
|
+
function() {
|
|
6247
|
+
if (!isDev() || props.stackBelow || typeof window === "undefined" || window.innerWidth >= 640 || !wrapRef.current)
|
|
6248
|
+
return;
|
|
6249
|
+
const sc = wrapRef.current.querySelector(".aura-table__scroll");
|
|
6250
|
+
const raf = requestAnimationFrame(function() {
|
|
6251
|
+
if (sc && sc.scrollWidth > sc.clientWidth + 1)
|
|
6252
|
+
devWarnOnce(
|
|
6253
|
+
"datatable-no-stack",
|
|
6254
|
+
'DataTable "' + props.label + '" scrolls sideways at ' + window.innerWidth + "px wide, so its last columns are off screen. On a phone pass stackBelow={640} to show each row as a card. It becomes the default in 6.0."
|
|
6255
|
+
);
|
|
6256
|
+
});
|
|
6257
|
+
return function() {
|
|
6258
|
+
cancelAnimationFrame(raf);
|
|
6259
|
+
};
|
|
6260
|
+
},
|
|
6261
|
+
[props.stackBelow]
|
|
6262
|
+
);
|
|
6202
6263
|
const noCardSel = !!props.hideSelectionInCards && selectable;
|
|
6203
6264
|
useIsoLayoutEffect(
|
|
6204
6265
|
function() {
|
|
@@ -7593,6 +7654,8 @@ window.Aura = (() => {
|
|
|
7593
7654
|
};
|
|
7594
7655
|
const rootCls = cx("aura-tabs", seg && "aura-tabs--segmented", touchClass(props.touchHeight));
|
|
7595
7656
|
const [focusId, setFocusId] = React36.useState(null);
|
|
7657
|
+
const listRef = React36.useRef(null);
|
|
7658
|
+
useScrollEdges(listRef, asLinks);
|
|
7596
7659
|
items2.forEach(function(t) {
|
|
7597
7660
|
const al = t.tabProps && t.tabProps["aria-label"];
|
|
7598
7661
|
if (al && al.toLowerCase().indexOf(String(t.label).toLowerCase()) !== 0)
|
|
@@ -7609,7 +7672,7 @@ window.Aura = (() => {
|
|
|
7609
7672
|
"aria-label": props.label,
|
|
7610
7673
|
className: cx(rootCls, "aura-tabs--links", props.className)
|
|
7611
7674
|
},
|
|
7612
|
-
/* @__PURE__ */ React36.createElement("div", { className: listCls }, items2.map(function(t) {
|
|
7675
|
+
/* @__PURE__ */ React36.createElement("div", { ref: listRef, className: listCls }, items2.map(function(t) {
|
|
7613
7676
|
const on = t.id === cur2;
|
|
7614
7677
|
const inner = [
|
|
7615
7678
|
t.icon ? /* @__PURE__ */ React36.createElement(Icon, { key: "i", name: t.icon }) : null,
|
|
@@ -7662,7 +7725,11 @@ window.Aura = (() => {
|
|
|
7662
7725
|
const t = enabled[(i + enabled.length) % enabled.length];
|
|
7663
7726
|
if (manual) setFocusId(t.id);
|
|
7664
7727
|
else st[1](t.id);
|
|
7665
|
-
if (refs.current[t.id])
|
|
7728
|
+
if (refs.current[t.id]) {
|
|
7729
|
+
refs.current[t.id].focus();
|
|
7730
|
+
const tab = refs.current[t.id];
|
|
7731
|
+
if (typeof tab.scrollIntoView === "function") tab.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
7732
|
+
}
|
|
7666
7733
|
}
|
|
7667
7734
|
const stop2 = manual && focusId && items2.filter(function(t) {
|
|
7668
7735
|
return t.id === focusId && !t.disabled;
|
|
@@ -7670,6 +7737,7 @@ window.Aura = (() => {
|
|
|
7670
7737
|
return /* @__PURE__ */ React36.createElement("div", { ref, className: cx(rootCls, props.className) }, /* @__PURE__ */ React36.createElement(
|
|
7671
7738
|
"div",
|
|
7672
7739
|
{
|
|
7740
|
+
ref: listRef,
|
|
7673
7741
|
role: "tablist",
|
|
7674
7742
|
"aria-label": props.label,
|
|
7675
7743
|
className: listCls,
|
|
@@ -8182,6 +8250,15 @@ window.Aura = (() => {
|
|
|
8182
8250
|
var React44 = __toESM(require_react(), 1);
|
|
8183
8251
|
var h8 = React44.createElement;
|
|
8184
8252
|
var LAZY = Symbol.for("react.lazy");
|
|
8253
|
+
var ID = /([A-Za-z0-9]+(?:-[A-Za-z0-9]+)+)/;
|
|
8254
|
+
function keepIds(title) {
|
|
8255
|
+
if (typeof title !== "string" || title.indexOf("-") < 0) return title;
|
|
8256
|
+
const parts = title.split(ID);
|
|
8257
|
+
if (parts.length < 2) return title;
|
|
8258
|
+
return parts.map(function(p, i) {
|
|
8259
|
+
return i % 2 && /\d/.test(p) && p.length <= 24 ? h8("span", { key: i, className: "aura-nowrap" }, p) : p;
|
|
8260
|
+
});
|
|
8261
|
+
}
|
|
8185
8262
|
function chipsOnly(node) {
|
|
8186
8263
|
let el = 0;
|
|
8187
8264
|
const walk = function(n3) {
|
|
@@ -8233,7 +8310,7 @@ window.Aura = (() => {
|
|
|
8233
8310
|
tabIndex: props.focusTitleOnMount ? -1 : void 0,
|
|
8234
8311
|
"data-aura-focus-on-mount": props.focusTitleOnMount ? "" : void 0
|
|
8235
8312
|
},
|
|
8236
|
-
props.title
|
|
8313
|
+
keepIds(props.title)
|
|
8237
8314
|
);
|
|
8238
8315
|
const hasActions = props.actions != null && props.actions !== false;
|
|
8239
8316
|
const hasBarActions = props.actionsBar != null && props.actionsBar !== false;
|
|
@@ -8415,6 +8492,21 @@ window.Aura = (() => {
|
|
|
8415
8492
|
ok: "statusOk",
|
|
8416
8493
|
unknown: "statusUnknown"
|
|
8417
8494
|
};
|
|
8495
|
+
function breakAtDots(title) {
|
|
8496
|
+
if (typeof title !== "string" || !/[./][A-Za-z]/.test(title)) return title;
|
|
8497
|
+
const out = [];
|
|
8498
|
+
let run = "";
|
|
8499
|
+
for (let i = 0; i < title.length; i++) {
|
|
8500
|
+
const c = title.charAt(i);
|
|
8501
|
+
run += c;
|
|
8502
|
+
if ((c === "." || c === "/") && i + 1 < title.length && /[A-Za-z]/.test(title.charAt(i + 1))) {
|
|
8503
|
+
out.push(run, h9("wbr", { key: i }));
|
|
8504
|
+
run = "";
|
|
8505
|
+
}
|
|
8506
|
+
}
|
|
8507
|
+
if (run) out.push(run);
|
|
8508
|
+
return out;
|
|
8509
|
+
}
|
|
8418
8510
|
function statusWord(status, t) {
|
|
8419
8511
|
return String(t[STATUS_WORD[status]] || STATUS_WORD[status]);
|
|
8420
8512
|
}
|
|
@@ -8453,7 +8545,7 @@ window.Aura = (() => {
|
|
|
8453
8545
|
"span",
|
|
8454
8546
|
{ className: "aura-status-tile__head" },
|
|
8455
8547
|
h9(Icon, { name: h9(STATUS_ICON[status]), size: 16, className: "aura-status-tile__icon" }),
|
|
8456
|
-
h9("span", { className: "aura-status-tile__title", ref: titleRef }, props.title, comma),
|
|
8548
|
+
h9("span", { className: "aura-status-tile__title", ref: titleRef }, breakAtDots(props.title), comma),
|
|
8457
8549
|
h9("span", { className: "aura-sr-only" }, word + (hasValue || hasMeta || markers.length ? "," : "")),
|
|
8458
8550
|
hasValue ? h9(
|
|
8459
8551
|
"span",
|
|
@@ -9284,6 +9376,11 @@ window.Aura = (() => {
|
|
|
9284
9376
|
function check() {
|
|
9285
9377
|
const sideways = el.scrollWidth > el.clientWidth + 1;
|
|
9286
9378
|
wide[1](sideways);
|
|
9379
|
+
if (sideways && !stackBelow && !outer && typeof window !== "undefined" && window.innerWidth < 640)
|
|
9380
|
+
devWarnOnce(
|
|
9381
|
+
"table-no-stack",
|
|
9382
|
+
"Table" + (rest["aria-label"] ? ' "' + rest["aria-label"] + '"' : "") + " scrolls sideways at " + window.innerWidth + "px wide, so its last columns are off screen. On a phone pass stackBelow={640} (cards or rows). It becomes the default in 6.0."
|
|
9383
|
+
);
|
|
9287
9384
|
sc[1](sideways || el.scrollHeight > el.clientHeight + 1);
|
|
9288
9385
|
}
|
|
9289
9386
|
check();
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -156,15 +156,16 @@ function tone(t) {
|
|
|
156
156
|
return TONES.indexOf(t) >= 0 ? t : "neutral";
|
|
157
157
|
}
|
|
158
158
|
var warned = {};
|
|
159
|
-
function
|
|
160
|
-
if (warned[key]) return;
|
|
161
|
-
let dev = false;
|
|
159
|
+
function isDev() {
|
|
162
160
|
try {
|
|
163
|
-
|
|
161
|
+
return process.env.NODE_ENV !== "production";
|
|
164
162
|
} catch (e) {
|
|
165
|
-
|
|
163
|
+
return false;
|
|
166
164
|
}
|
|
167
|
-
|
|
165
|
+
}
|
|
166
|
+
function devWarnOnce(key, message) {
|
|
167
|
+
if (warned[key]) return;
|
|
168
|
+
if (!isDev()) return;
|
|
168
169
|
warned[key] = true;
|
|
169
170
|
console.warn("[AURA] " + message);
|
|
170
171
|
}
|
|
@@ -500,6 +501,48 @@ function useInputModality() {
|
|
|
500
501
|
function pointerModality() {
|
|
501
502
|
setModality("pointer");
|
|
502
503
|
}
|
|
504
|
+
function useScrollEdges(r2, key) {
|
|
505
|
+
React3.useEffect(
|
|
506
|
+
function() {
|
|
507
|
+
const el = r2.current;
|
|
508
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
509
|
+
let raf = 0;
|
|
510
|
+
const mark = function() {
|
|
511
|
+
raf = 0;
|
|
512
|
+
const max = el.scrollWidth - el.clientWidth;
|
|
513
|
+
const x = Math.abs(el.scrollLeft);
|
|
514
|
+
const v = ((x > 1 ? "start " : "") + (x < max - 1 ? "end" : "")).trim();
|
|
515
|
+
if ((el.getAttribute("data-aura-more") || "") === v) return;
|
|
516
|
+
if (v) el.setAttribute("data-aura-more", v);
|
|
517
|
+
else el.removeAttribute("data-aura-more");
|
|
518
|
+
};
|
|
519
|
+
const on = function() {
|
|
520
|
+
if (!raf) raf = requestAnimationFrame(mark);
|
|
521
|
+
};
|
|
522
|
+
mark();
|
|
523
|
+
el.addEventListener("scroll", on, { passive: true });
|
|
524
|
+
const ro = new ResizeObserver(on);
|
|
525
|
+
ro.observe(el);
|
|
526
|
+
Array.prototype.forEach.call(el.children, function(c) {
|
|
527
|
+
ro.observe(c);
|
|
528
|
+
});
|
|
529
|
+
const mo = new MutationObserver(function() {
|
|
530
|
+
Array.prototype.forEach.call(el.children, function(c) {
|
|
531
|
+
ro.observe(c);
|
|
532
|
+
});
|
|
533
|
+
on();
|
|
534
|
+
});
|
|
535
|
+
mo.observe(el, { childList: true });
|
|
536
|
+
return function() {
|
|
537
|
+
cancelAnimationFrame(raf);
|
|
538
|
+
el.removeEventListener("scroll", on);
|
|
539
|
+
ro.disconnect();
|
|
540
|
+
mo.disconnect();
|
|
541
|
+
};
|
|
542
|
+
},
|
|
543
|
+
[key]
|
|
544
|
+
);
|
|
545
|
+
}
|
|
503
546
|
|
|
504
547
|
// src/display.tsx
|
|
505
548
|
var React4 = __toESM(require("react"), 1);
|
|
@@ -6181,6 +6224,24 @@ var DataTableImpl = React34.forwardRef(function DataTable(props, ref) {
|
|
|
6181
6224
|
[measure, levelShape]
|
|
6182
6225
|
);
|
|
6183
6226
|
const stacked = !!props.stackBelow && boxWidth[0] != null && below(boxWidth[0], props.stackBelow);
|
|
6227
|
+
React34.useEffect(
|
|
6228
|
+
function() {
|
|
6229
|
+
if (!isDev() || props.stackBelow || typeof window === "undefined" || window.innerWidth >= 640 || !wrapRef.current)
|
|
6230
|
+
return;
|
|
6231
|
+
const sc = wrapRef.current.querySelector(".aura-table__scroll");
|
|
6232
|
+
const raf = requestAnimationFrame(function() {
|
|
6233
|
+
if (sc && sc.scrollWidth > sc.clientWidth + 1)
|
|
6234
|
+
devWarnOnce(
|
|
6235
|
+
"datatable-no-stack",
|
|
6236
|
+
'DataTable "' + props.label + '" scrolls sideways at ' + window.innerWidth + "px wide, so its last columns are off screen. On a phone pass stackBelow={640} to show each row as a card. It becomes the default in 6.0."
|
|
6237
|
+
);
|
|
6238
|
+
});
|
|
6239
|
+
return function() {
|
|
6240
|
+
cancelAnimationFrame(raf);
|
|
6241
|
+
};
|
|
6242
|
+
},
|
|
6243
|
+
[props.stackBelow]
|
|
6244
|
+
);
|
|
6184
6245
|
const noCardSel = !!props.hideSelectionInCards && selectable;
|
|
6185
6246
|
useIsoLayoutEffect(
|
|
6186
6247
|
function() {
|
|
@@ -7575,6 +7636,8 @@ var Tabs = React36.forwardRef(function Tabs2(props, ref) {
|
|
|
7575
7636
|
};
|
|
7576
7637
|
const rootCls = cx("aura-tabs", seg && "aura-tabs--segmented", touchClass(props.touchHeight));
|
|
7577
7638
|
const [focusId, setFocusId] = React36.useState(null);
|
|
7639
|
+
const listRef = React36.useRef(null);
|
|
7640
|
+
useScrollEdges(listRef, asLinks);
|
|
7578
7641
|
items2.forEach(function(t) {
|
|
7579
7642
|
const al = t.tabProps && t.tabProps["aria-label"];
|
|
7580
7643
|
if (al && al.toLowerCase().indexOf(String(t.label).toLowerCase()) !== 0)
|
|
@@ -7591,7 +7654,7 @@ var Tabs = React36.forwardRef(function Tabs2(props, ref) {
|
|
|
7591
7654
|
"aria-label": props.label,
|
|
7592
7655
|
className: cx(rootCls, "aura-tabs--links", props.className)
|
|
7593
7656
|
},
|
|
7594
|
-
/* @__PURE__ */ React36.createElement("div", { className: listCls }, items2.map(function(t) {
|
|
7657
|
+
/* @__PURE__ */ React36.createElement("div", { ref: listRef, className: listCls }, items2.map(function(t) {
|
|
7595
7658
|
const on = t.id === cur2;
|
|
7596
7659
|
const inner = [
|
|
7597
7660
|
t.icon ? /* @__PURE__ */ React36.createElement(Icon, { key: "i", name: t.icon }) : null,
|
|
@@ -7644,7 +7707,11 @@ var Tabs = React36.forwardRef(function Tabs2(props, ref) {
|
|
|
7644
7707
|
const t = enabled[(i + enabled.length) % enabled.length];
|
|
7645
7708
|
if (manual) setFocusId(t.id);
|
|
7646
7709
|
else st[1](t.id);
|
|
7647
|
-
if (refs.current[t.id])
|
|
7710
|
+
if (refs.current[t.id]) {
|
|
7711
|
+
refs.current[t.id].focus();
|
|
7712
|
+
const tab = refs.current[t.id];
|
|
7713
|
+
if (typeof tab.scrollIntoView === "function") tab.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
7714
|
+
}
|
|
7648
7715
|
}
|
|
7649
7716
|
const stop2 = manual && focusId && items2.filter(function(t) {
|
|
7650
7717
|
return t.id === focusId && !t.disabled;
|
|
@@ -7652,6 +7719,7 @@ var Tabs = React36.forwardRef(function Tabs2(props, ref) {
|
|
|
7652
7719
|
return /* @__PURE__ */ React36.createElement("div", { ref, className: cx(rootCls, props.className) }, /* @__PURE__ */ React36.createElement(
|
|
7653
7720
|
"div",
|
|
7654
7721
|
{
|
|
7722
|
+
ref: listRef,
|
|
7655
7723
|
role: "tablist",
|
|
7656
7724
|
"aria-label": props.label,
|
|
7657
7725
|
className: listCls,
|
|
@@ -8164,6 +8232,15 @@ var React45 = __toESM(require("react"), 1);
|
|
|
8164
8232
|
var React44 = __toESM(require("react"), 1);
|
|
8165
8233
|
var h8 = React44.createElement;
|
|
8166
8234
|
var LAZY = Symbol.for("react.lazy");
|
|
8235
|
+
var ID = /([A-Za-z0-9]+(?:-[A-Za-z0-9]+)+)/;
|
|
8236
|
+
function keepIds(title) {
|
|
8237
|
+
if (typeof title !== "string" || title.indexOf("-") < 0) return title;
|
|
8238
|
+
const parts = title.split(ID);
|
|
8239
|
+
if (parts.length < 2) return title;
|
|
8240
|
+
return parts.map(function(p, i) {
|
|
8241
|
+
return i % 2 && /\d/.test(p) && p.length <= 24 ? h8("span", { key: i, className: "aura-nowrap" }, p) : p;
|
|
8242
|
+
});
|
|
8243
|
+
}
|
|
8167
8244
|
function chipsOnly(node) {
|
|
8168
8245
|
let el = 0;
|
|
8169
8246
|
const walk = function(n3) {
|
|
@@ -8215,7 +8292,7 @@ var PageHeader = React44.forwardRef(function PageHeader2(props, ref) {
|
|
|
8215
8292
|
tabIndex: props.focusTitleOnMount ? -1 : void 0,
|
|
8216
8293
|
"data-aura-focus-on-mount": props.focusTitleOnMount ? "" : void 0
|
|
8217
8294
|
},
|
|
8218
|
-
props.title
|
|
8295
|
+
keepIds(props.title)
|
|
8219
8296
|
);
|
|
8220
8297
|
const hasActions = props.actions != null && props.actions !== false;
|
|
8221
8298
|
const hasBarActions = props.actionsBar != null && props.actionsBar !== false;
|
|
@@ -8397,6 +8474,21 @@ var STATUS_WORD = {
|
|
|
8397
8474
|
ok: "statusOk",
|
|
8398
8475
|
unknown: "statusUnknown"
|
|
8399
8476
|
};
|
|
8477
|
+
function breakAtDots(title) {
|
|
8478
|
+
if (typeof title !== "string" || !/[./][A-Za-z]/.test(title)) return title;
|
|
8479
|
+
const out = [];
|
|
8480
|
+
let run = "";
|
|
8481
|
+
for (let i = 0; i < title.length; i++) {
|
|
8482
|
+
const c = title.charAt(i);
|
|
8483
|
+
run += c;
|
|
8484
|
+
if ((c === "." || c === "/") && i + 1 < title.length && /[A-Za-z]/.test(title.charAt(i + 1))) {
|
|
8485
|
+
out.push(run, h9("wbr", { key: i }));
|
|
8486
|
+
run = "";
|
|
8487
|
+
}
|
|
8488
|
+
}
|
|
8489
|
+
if (run) out.push(run);
|
|
8490
|
+
return out;
|
|
8491
|
+
}
|
|
8400
8492
|
function statusWord(status, t) {
|
|
8401
8493
|
return String(t[STATUS_WORD[status]] || STATUS_WORD[status]);
|
|
8402
8494
|
}
|
|
@@ -8435,7 +8527,7 @@ function statusTileElement(props, ref, Link, t, titleRef) {
|
|
|
8435
8527
|
"span",
|
|
8436
8528
|
{ className: "aura-status-tile__head" },
|
|
8437
8529
|
h9(Icon, { name: h9(STATUS_ICON[status]), size: 16, className: "aura-status-tile__icon" }),
|
|
8438
|
-
h9("span", { className: "aura-status-tile__title", ref: titleRef }, props.title, comma),
|
|
8530
|
+
h9("span", { className: "aura-status-tile__title", ref: titleRef }, breakAtDots(props.title), comma),
|
|
8439
8531
|
h9("span", { className: "aura-sr-only" }, word + (hasValue || hasMeta || markers.length ? "," : "")),
|
|
8440
8532
|
hasValue ? h9(
|
|
8441
8533
|
"span",
|
|
@@ -9266,6 +9358,11 @@ var Table = React53.forwardRef(function Table2(props, ref) {
|
|
|
9266
9358
|
function check() {
|
|
9267
9359
|
const sideways = el.scrollWidth > el.clientWidth + 1;
|
|
9268
9360
|
wide[1](sideways);
|
|
9361
|
+
if (sideways && !stackBelow && !outer && typeof window !== "undefined" && window.innerWidth < 640)
|
|
9362
|
+
devWarnOnce(
|
|
9363
|
+
"table-no-stack",
|
|
9364
|
+
"Table" + (rest["aria-label"] ? ' "' + rest["aria-label"] + '"' : "") + " scrolls sideways at " + window.innerWidth + "px wide, so its last columns are off screen. On a phone pass stackBelow={640} (cards or rows). It becomes the default in 6.0."
|
|
9365
|
+
);
|
|
9269
9366
|
sc[1](sideways || el.scrollHeight > el.clientHeight + 1);
|
|
9270
9367
|
}
|
|
9271
9368
|
check();
|
package/dist/esm/DataTable.js
CHANGED
|
@@ -2,7 +2,15 @@
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { createPortal } from "react-dom";
|
|
4
4
|
import { useStrings, useLinkComponent } from "./locale.js";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
cx,
|
|
7
|
+
devWarnOnce,
|
|
8
|
+
isDev,
|
|
9
|
+
useMaybeControlled,
|
|
10
|
+
compare,
|
|
11
|
+
useIsoLayoutEffect,
|
|
12
|
+
useMergedRef
|
|
13
|
+
} from "./internal.js";
|
|
6
14
|
import { Icon } from "./Icon.js";
|
|
7
15
|
import { IconButton } from "./IconButton.js";
|
|
8
16
|
import { Checkbox } from "./Checkbox.js";
|
|
@@ -177,6 +185,24 @@ const DataTableImpl = React.forwardRef(function DataTable(props, ref) {
|
|
|
177
185
|
[measure, levelShape]
|
|
178
186
|
);
|
|
179
187
|
const stacked = !!props.stackBelow && boxWidth[0] != null && below(boxWidth[0], props.stackBelow);
|
|
188
|
+
React.useEffect(
|
|
189
|
+
function() {
|
|
190
|
+
if (!isDev() || props.stackBelow || typeof window === "undefined" || window.innerWidth >= 640 || !wrapRef.current)
|
|
191
|
+
return;
|
|
192
|
+
const sc = wrapRef.current.querySelector(".aura-table__scroll");
|
|
193
|
+
const raf = requestAnimationFrame(function() {
|
|
194
|
+
if (sc && sc.scrollWidth > sc.clientWidth + 1)
|
|
195
|
+
devWarnOnce(
|
|
196
|
+
"datatable-no-stack",
|
|
197
|
+
'DataTable "' + props.label + '" scrolls sideways at ' + window.innerWidth + "px wide, so its last columns are off screen. On a phone pass stackBelow={640} to show each row as a card. It becomes the default in 6.0."
|
|
198
|
+
);
|
|
199
|
+
});
|
|
200
|
+
return function() {
|
|
201
|
+
cancelAnimationFrame(raf);
|
|
202
|
+
};
|
|
203
|
+
},
|
|
204
|
+
[props.stackBelow]
|
|
205
|
+
);
|
|
180
206
|
const noCardSel = !!props.hideSelectionInCards && selectable;
|
|
181
207
|
useIsoLayoutEffect(
|
|
182
208
|
function() {
|
package/dist/esm/PageHeader.js
CHANGED
|
@@ -3,6 +3,15 @@ import * as React from "react";
|
|
|
3
3
|
import { cx } from "./classes.js";
|
|
4
4
|
const h = React.createElement;
|
|
5
5
|
const LAZY = Symbol.for("react.lazy");
|
|
6
|
+
const ID = /([A-Za-z0-9]+(?:-[A-Za-z0-9]+)+)/;
|
|
7
|
+
function keepIds(title) {
|
|
8
|
+
if (typeof title !== "string" || title.indexOf("-") < 0) return title;
|
|
9
|
+
const parts = title.split(ID);
|
|
10
|
+
if (parts.length < 2) return title;
|
|
11
|
+
return parts.map(function(p, i) {
|
|
12
|
+
return i % 2 && /\d/.test(p) && p.length <= 24 ? h("span", { key: i, className: "aura-nowrap" }, p) : p;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
6
15
|
function chipsOnly(node) {
|
|
7
16
|
let el = 0;
|
|
8
17
|
const walk = function(n) {
|
|
@@ -54,7 +63,7 @@ const PageHeader = React.forwardRef(function PageHeader2(props, ref) {
|
|
|
54
63
|
tabIndex: props.focusTitleOnMount ? -1 : void 0,
|
|
55
64
|
"data-aura-focus-on-mount": props.focusTitleOnMount ? "" : void 0
|
|
56
65
|
},
|
|
57
|
-
props.title
|
|
66
|
+
keepIds(props.title)
|
|
58
67
|
);
|
|
59
68
|
const hasActions = props.actions != null && props.actions !== false;
|
|
60
69
|
const hasBarActions = props.actionsBar != null && props.actionsBar !== false;
|
package/dist/esm/Table.js
CHANGED
|
@@ -133,6 +133,11 @@ const Table = React.forwardRef(function Table2(props, ref) {
|
|
|
133
133
|
function check() {
|
|
134
134
|
const sideways = el.scrollWidth > el.clientWidth + 1;
|
|
135
135
|
wide[1](sideways);
|
|
136
|
+
if (sideways && !stackBelow && !outer && typeof window !== "undefined" && window.innerWidth < 640)
|
|
137
|
+
devWarnOnce(
|
|
138
|
+
"table-no-stack",
|
|
139
|
+
"Table" + (rest["aria-label"] ? ' "' + rest["aria-label"] + '"' : "") + " scrolls sideways at " + window.innerWidth + "px wide, so its last columns are off screen. On a phone pass stackBelow={640} (cards or rows). It becomes the default in 6.0."
|
|
140
|
+
);
|
|
136
141
|
sc[1](sideways || el.scrollHeight > el.clientHeight + 1);
|
|
137
142
|
}
|
|
138
143
|
check();
|
package/dist/esm/Tabs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Icon } from "./Icon.js";
|
|
4
|
-
import { cx, devWarnOnce, omit, touchClass, uid, useMaybeControlled } from "./internal.js";
|
|
4
|
+
import { cx, devWarnOnce, omit, touchClass, uid, useMaybeControlled, useScrollEdges } from "./internal.js";
|
|
5
5
|
import { useLinkComponent } from "./locale.js";
|
|
6
6
|
const Tabs = React.forwardRef(function Tabs2(props, ref) {
|
|
7
7
|
const items = props.tabs || [], base = uid();
|
|
@@ -36,6 +36,8 @@ const Tabs = React.forwardRef(function Tabs2(props, ref) {
|
|
|
36
36
|
};
|
|
37
37
|
const rootCls = cx("aura-tabs", seg && "aura-tabs--segmented", touchClass(props.touchHeight));
|
|
38
38
|
const [focusId, setFocusId] = React.useState(null);
|
|
39
|
+
const listRef = React.useRef(null);
|
|
40
|
+
useScrollEdges(listRef, asLinks);
|
|
39
41
|
items.forEach(function(t) {
|
|
40
42
|
const al = t.tabProps && t.tabProps["aria-label"];
|
|
41
43
|
if (al && al.toLowerCase().indexOf(String(t.label).toLowerCase()) !== 0)
|
|
@@ -52,7 +54,7 @@ const Tabs = React.forwardRef(function Tabs2(props, ref) {
|
|
|
52
54
|
"aria-label": props.label,
|
|
53
55
|
className: cx(rootCls, "aura-tabs--links", props.className)
|
|
54
56
|
},
|
|
55
|
-
/* @__PURE__ */ React.createElement("div", { className: listCls }, items.map(function(t) {
|
|
57
|
+
/* @__PURE__ */ React.createElement("div", { ref: listRef, className: listCls }, items.map(function(t) {
|
|
56
58
|
const on = t.id === cur;
|
|
57
59
|
const inner = [
|
|
58
60
|
t.icon ? /* @__PURE__ */ React.createElement(Icon, { key: "i", name: t.icon }) : null,
|
|
@@ -105,7 +107,11 @@ const Tabs = React.forwardRef(function Tabs2(props, ref) {
|
|
|
105
107
|
const t = enabled[(i + enabled.length) % enabled.length];
|
|
106
108
|
if (manual) setFocusId(t.id);
|
|
107
109
|
else st[1](t.id);
|
|
108
|
-
if (refs.current[t.id])
|
|
110
|
+
if (refs.current[t.id]) {
|
|
111
|
+
refs.current[t.id].focus();
|
|
112
|
+
const tab = refs.current[t.id];
|
|
113
|
+
if (typeof tab.scrollIntoView === "function") tab.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
114
|
+
}
|
|
109
115
|
}
|
|
110
116
|
const stop = manual && focusId && items.filter(function(t) {
|
|
111
117
|
return t.id === focusId && !t.disabled;
|
|
@@ -113,6 +119,7 @@ const Tabs = React.forwardRef(function Tabs2(props, ref) {
|
|
|
113
119
|
return /* @__PURE__ */ React.createElement("div", { ref, className: cx(rootCls, props.className) }, /* @__PURE__ */ React.createElement(
|
|
114
120
|
"div",
|
|
115
121
|
{
|
|
122
|
+
ref: listRef,
|
|
116
123
|
role: "tablist",
|
|
117
124
|
"aria-label": props.label,
|
|
118
125
|
className: listCls,
|
package/dist/esm/classes.js
CHANGED
|
@@ -16,21 +16,23 @@ function tone(t) {
|
|
|
16
16
|
return TONES.indexOf(t) >= 0 ? t : "neutral";
|
|
17
17
|
}
|
|
18
18
|
const warned = {};
|
|
19
|
-
function
|
|
20
|
-
if (warned[key]) return;
|
|
21
|
-
let dev = false;
|
|
19
|
+
function isDev() {
|
|
22
20
|
try {
|
|
23
|
-
|
|
21
|
+
return true;
|
|
24
22
|
} catch (e) {
|
|
25
|
-
|
|
23
|
+
return false;
|
|
26
24
|
}
|
|
27
|
-
|
|
25
|
+
}
|
|
26
|
+
function devWarnOnce(key, message) {
|
|
27
|
+
if (warned[key]) return;
|
|
28
|
+
if (!isDev()) return;
|
|
28
29
|
warned[key] = true;
|
|
29
30
|
console.warn("[AURA] " + message);
|
|
30
31
|
}
|
|
31
32
|
export {
|
|
32
33
|
cx,
|
|
33
34
|
devWarnOnce,
|
|
35
|
+
isDev,
|
|
34
36
|
omit,
|
|
35
37
|
tone,
|
|
36
38
|
touchClass
|
package/dist/esm/internal.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { cx, omit, tone, devWarnOnce, touchClass } from "./classes.js";
|
|
3
|
+
import { cx, omit, tone, devWarnOnce, isDev, touchClass } from "./classes.js";
|
|
4
4
|
function useMaybeControlled(value, initial, onChange) {
|
|
5
5
|
const s = React.useState(initial);
|
|
6
6
|
const wasSet = React.useState(value !== void 0);
|
|
@@ -217,6 +217,48 @@ function useInputModality() {
|
|
|
217
217
|
function pointerModality() {
|
|
218
218
|
setModality("pointer");
|
|
219
219
|
}
|
|
220
|
+
function useScrollEdges(r, key) {
|
|
221
|
+
React.useEffect(
|
|
222
|
+
function() {
|
|
223
|
+
const el = r.current;
|
|
224
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
225
|
+
let raf = 0;
|
|
226
|
+
const mark = function() {
|
|
227
|
+
raf = 0;
|
|
228
|
+
const max = el.scrollWidth - el.clientWidth;
|
|
229
|
+
const x = Math.abs(el.scrollLeft);
|
|
230
|
+
const v = ((x > 1 ? "start " : "") + (x < max - 1 ? "end" : "")).trim();
|
|
231
|
+
if ((el.getAttribute("data-aura-more") || "") === v) return;
|
|
232
|
+
if (v) el.setAttribute("data-aura-more", v);
|
|
233
|
+
else el.removeAttribute("data-aura-more");
|
|
234
|
+
};
|
|
235
|
+
const on = function() {
|
|
236
|
+
if (!raf) raf = requestAnimationFrame(mark);
|
|
237
|
+
};
|
|
238
|
+
mark();
|
|
239
|
+
el.addEventListener("scroll", on, { passive: true });
|
|
240
|
+
const ro = new ResizeObserver(on);
|
|
241
|
+
ro.observe(el);
|
|
242
|
+
Array.prototype.forEach.call(el.children, function(c) {
|
|
243
|
+
ro.observe(c);
|
|
244
|
+
});
|
|
245
|
+
const mo = new MutationObserver(function() {
|
|
246
|
+
Array.prototype.forEach.call(el.children, function(c) {
|
|
247
|
+
ro.observe(c);
|
|
248
|
+
});
|
|
249
|
+
on();
|
|
250
|
+
});
|
|
251
|
+
mo.observe(el, { childList: true });
|
|
252
|
+
return function() {
|
|
253
|
+
cancelAnimationFrame(raf);
|
|
254
|
+
el.removeEventListener("scroll", on);
|
|
255
|
+
ro.disconnect();
|
|
256
|
+
mo.disconnect();
|
|
257
|
+
};
|
|
258
|
+
},
|
|
259
|
+
[key]
|
|
260
|
+
);
|
|
261
|
+
}
|
|
220
262
|
export {
|
|
221
263
|
FOCUSABLE,
|
|
222
264
|
FilterSheet,
|
|
@@ -229,6 +271,7 @@ export {
|
|
|
229
271
|
fixedTrapped,
|
|
230
272
|
focusFirst,
|
|
231
273
|
inClosedDetails,
|
|
274
|
+
isDev,
|
|
232
275
|
isTabStop,
|
|
233
276
|
omit,
|
|
234
277
|
plainClick,
|
|
@@ -241,5 +284,6 @@ export {
|
|
|
241
284
|
useIsoLayoutEffect,
|
|
242
285
|
useMaybeControlled,
|
|
243
286
|
useMergedRef,
|
|
244
|
-
useMounted
|
|
287
|
+
useMounted,
|
|
288
|
+
useScrollEdges
|
|
245
289
|
};
|
package/dist/esm/tiles.js
CHANGED
|
@@ -27,6 +27,21 @@ const STATUS_WORD = {
|
|
|
27
27
|
ok: "statusOk",
|
|
28
28
|
unknown: "statusUnknown"
|
|
29
29
|
};
|
|
30
|
+
function breakAtDots(title) {
|
|
31
|
+
if (typeof title !== "string" || !/[./][A-Za-z]/.test(title)) return title;
|
|
32
|
+
const out = [];
|
|
33
|
+
let run = "";
|
|
34
|
+
for (let i = 0; i < title.length; i++) {
|
|
35
|
+
const c = title.charAt(i);
|
|
36
|
+
run += c;
|
|
37
|
+
if ((c === "." || c === "/") && i + 1 < title.length && /[A-Za-z]/.test(title.charAt(i + 1))) {
|
|
38
|
+
out.push(run, h("wbr", { key: i }));
|
|
39
|
+
run = "";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (run) out.push(run);
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
30
45
|
function statusWord(status, t) {
|
|
31
46
|
return String(t[STATUS_WORD[status]] || STATUS_WORD[status]);
|
|
32
47
|
}
|
|
@@ -65,7 +80,7 @@ function statusTileElement(props, ref, Link, t, titleRef) {
|
|
|
65
80
|
"span",
|
|
66
81
|
{ className: "aura-status-tile__head" },
|
|
67
82
|
h(Icon, { name: h(STATUS_ICON[status]), size: 16, className: "aura-status-tile__icon" }),
|
|
68
|
-
h("span", { className: "aura-status-tile__title", ref: titleRef }, props.title, comma),
|
|
83
|
+
h("span", { className: "aura-status-tile__title", ref: titleRef }, breakAtDots(props.title), comma),
|
|
69
84
|
h("span", { className: "aura-sr-only" }, word + (hasValue || hasMeta || markers.length ? "," : "")),
|
|
70
85
|
hasValue ? h(
|
|
71
86
|
"span",
|
package/dist/server/index.cjs
CHANGED
|
@@ -997,15 +997,16 @@ function tone(t) {
|
|
|
997
997
|
return TONES.indexOf(t) >= 0 ? t : "neutral";
|
|
998
998
|
}
|
|
999
999
|
var warned = {};
|
|
1000
|
-
function
|
|
1001
|
-
if (warned[key]) return;
|
|
1002
|
-
let dev = false;
|
|
1000
|
+
function isDev() {
|
|
1003
1001
|
try {
|
|
1004
|
-
|
|
1002
|
+
return process.env.NODE_ENV !== "production";
|
|
1005
1003
|
} catch (e) {
|
|
1006
|
-
|
|
1004
|
+
return false;
|
|
1007
1005
|
}
|
|
1008
|
-
|
|
1006
|
+
}
|
|
1007
|
+
function devWarnOnce(key, message) {
|
|
1008
|
+
if (warned[key]) return;
|
|
1009
|
+
if (!isDev()) return;
|
|
1009
1010
|
warned[key] = true;
|
|
1010
1011
|
console.warn("[AURA] " + message);
|
|
1011
1012
|
}
|
|
@@ -1669,6 +1670,15 @@ function TableSkeleton(props) {
|
|
|
1669
1670
|
var React6 = __toESM(require("react"), 1);
|
|
1670
1671
|
var h5 = React6.createElement;
|
|
1671
1672
|
var LAZY = Symbol.for("react.lazy");
|
|
1673
|
+
var ID = /([A-Za-z0-9]+(?:-[A-Za-z0-9]+)+)/;
|
|
1674
|
+
function keepIds(title) {
|
|
1675
|
+
if (typeof title !== "string" || title.indexOf("-") < 0) return title;
|
|
1676
|
+
const parts = title.split(ID);
|
|
1677
|
+
if (parts.length < 2) return title;
|
|
1678
|
+
return parts.map(function(p, i) {
|
|
1679
|
+
return i % 2 && /\d/.test(p) && p.length <= 24 ? h5("span", { key: i, className: "aura-nowrap" }, p) : p;
|
|
1680
|
+
});
|
|
1681
|
+
}
|
|
1672
1682
|
function chipsOnly(node) {
|
|
1673
1683
|
let el = 0;
|
|
1674
1684
|
const walk = function(n3) {
|
|
@@ -1720,7 +1730,7 @@ var PageHeader = React6.forwardRef(function PageHeader2(props, ref) {
|
|
|
1720
1730
|
tabIndex: props.focusTitleOnMount ? -1 : void 0,
|
|
1721
1731
|
"data-aura-focus-on-mount": props.focusTitleOnMount ? "" : void 0
|
|
1722
1732
|
},
|
|
1723
|
-
props.title
|
|
1733
|
+
keepIds(props.title)
|
|
1724
1734
|
);
|
|
1725
1735
|
const hasActions = props.actions != null && props.actions !== false;
|
|
1726
1736
|
const hasBarActions = props.actionsBar != null && props.actionsBar !== false;
|
|
@@ -1791,6 +1801,21 @@ var STATUS_WORD = {
|
|
|
1791
1801
|
ok: "statusOk",
|
|
1792
1802
|
unknown: "statusUnknown"
|
|
1793
1803
|
};
|
|
1804
|
+
function breakAtDots(title) {
|
|
1805
|
+
if (typeof title !== "string" || !/[./][A-Za-z]/.test(title)) return title;
|
|
1806
|
+
const out = [];
|
|
1807
|
+
let run = "";
|
|
1808
|
+
for (let i = 0; i < title.length; i++) {
|
|
1809
|
+
const c = title.charAt(i);
|
|
1810
|
+
run += c;
|
|
1811
|
+
if ((c === "." || c === "/") && i + 1 < title.length && /[A-Za-z]/.test(title.charAt(i + 1))) {
|
|
1812
|
+
out.push(run, h6("wbr", { key: i }));
|
|
1813
|
+
run = "";
|
|
1814
|
+
}
|
|
1815
|
+
}
|
|
1816
|
+
if (run) out.push(run);
|
|
1817
|
+
return out;
|
|
1818
|
+
}
|
|
1794
1819
|
function statusWord(status, t) {
|
|
1795
1820
|
return String(t[STATUS_WORD[status]] || STATUS_WORD[status]);
|
|
1796
1821
|
}
|
|
@@ -1829,7 +1854,7 @@ function statusTileElement(props, ref, Link, t, titleRef) {
|
|
|
1829
1854
|
"span",
|
|
1830
1855
|
{ className: "aura-status-tile__head" },
|
|
1831
1856
|
h6(Icon, { name: h6(STATUS_ICON[status]), size: 16, className: "aura-status-tile__icon" }),
|
|
1832
|
-
h6("span", { className: "aura-status-tile__title", ref: titleRef }, props.title, comma),
|
|
1857
|
+
h6("span", { className: "aura-status-tile__title", ref: titleRef }, breakAtDots(props.title), comma),
|
|
1833
1858
|
h6("span", { className: "aura-sr-only" }, word + (hasValue || hasMeta || markers.length ? "," : "")),
|
|
1834
1859
|
hasValue ? h6(
|
|
1835
1860
|
"span",
|
package/dist/server/index.js
CHANGED
|
@@ -930,15 +930,16 @@ function tone(t) {
|
|
|
930
930
|
return TONES.indexOf(t) >= 0 ? t : "neutral";
|
|
931
931
|
}
|
|
932
932
|
var warned = {};
|
|
933
|
-
function
|
|
934
|
-
if (warned[key]) return;
|
|
935
|
-
let dev = false;
|
|
933
|
+
function isDev() {
|
|
936
934
|
try {
|
|
937
|
-
|
|
935
|
+
return process.env.NODE_ENV !== "production";
|
|
938
936
|
} catch (e) {
|
|
939
|
-
|
|
937
|
+
return false;
|
|
940
938
|
}
|
|
941
|
-
|
|
939
|
+
}
|
|
940
|
+
function devWarnOnce(key, message) {
|
|
941
|
+
if (warned[key]) return;
|
|
942
|
+
if (!isDev()) return;
|
|
942
943
|
warned[key] = true;
|
|
943
944
|
console.warn("[AURA] " + message);
|
|
944
945
|
}
|
|
@@ -1602,6 +1603,15 @@ function TableSkeleton(props) {
|
|
|
1602
1603
|
import * as React6 from "react";
|
|
1603
1604
|
var h5 = React6.createElement;
|
|
1604
1605
|
var LAZY = Symbol.for("react.lazy");
|
|
1606
|
+
var ID = /([A-Za-z0-9]+(?:-[A-Za-z0-9]+)+)/;
|
|
1607
|
+
function keepIds(title) {
|
|
1608
|
+
if (typeof title !== "string" || title.indexOf("-") < 0) return title;
|
|
1609
|
+
const parts = title.split(ID);
|
|
1610
|
+
if (parts.length < 2) return title;
|
|
1611
|
+
return parts.map(function(p, i) {
|
|
1612
|
+
return i % 2 && /\d/.test(p) && p.length <= 24 ? h5("span", { key: i, className: "aura-nowrap" }, p) : p;
|
|
1613
|
+
});
|
|
1614
|
+
}
|
|
1605
1615
|
function chipsOnly(node) {
|
|
1606
1616
|
let el = 0;
|
|
1607
1617
|
const walk = function(n3) {
|
|
@@ -1653,7 +1663,7 @@ var PageHeader = React6.forwardRef(function PageHeader2(props, ref) {
|
|
|
1653
1663
|
tabIndex: props.focusTitleOnMount ? -1 : void 0,
|
|
1654
1664
|
"data-aura-focus-on-mount": props.focusTitleOnMount ? "" : void 0
|
|
1655
1665
|
},
|
|
1656
|
-
props.title
|
|
1666
|
+
keepIds(props.title)
|
|
1657
1667
|
);
|
|
1658
1668
|
const hasActions = props.actions != null && props.actions !== false;
|
|
1659
1669
|
const hasBarActions = props.actionsBar != null && props.actionsBar !== false;
|
|
@@ -1724,6 +1734,21 @@ var STATUS_WORD = {
|
|
|
1724
1734
|
ok: "statusOk",
|
|
1725
1735
|
unknown: "statusUnknown"
|
|
1726
1736
|
};
|
|
1737
|
+
function breakAtDots(title) {
|
|
1738
|
+
if (typeof title !== "string" || !/[./][A-Za-z]/.test(title)) return title;
|
|
1739
|
+
const out = [];
|
|
1740
|
+
let run = "";
|
|
1741
|
+
for (let i = 0; i < title.length; i++) {
|
|
1742
|
+
const c = title.charAt(i);
|
|
1743
|
+
run += c;
|
|
1744
|
+
if ((c === "." || c === "/") && i + 1 < title.length && /[A-Za-z]/.test(title.charAt(i + 1))) {
|
|
1745
|
+
out.push(run, h6("wbr", { key: i }));
|
|
1746
|
+
run = "";
|
|
1747
|
+
}
|
|
1748
|
+
}
|
|
1749
|
+
if (run) out.push(run);
|
|
1750
|
+
return out;
|
|
1751
|
+
}
|
|
1727
1752
|
function statusWord(status, t) {
|
|
1728
1753
|
return String(t[STATUS_WORD[status]] || STATUS_WORD[status]);
|
|
1729
1754
|
}
|
|
@@ -1762,7 +1787,7 @@ function statusTileElement(props, ref, Link, t, titleRef) {
|
|
|
1762
1787
|
"span",
|
|
1763
1788
|
{ className: "aura-status-tile__head" },
|
|
1764
1789
|
h6(Icon, { name: h6(STATUS_ICON[status]), size: 16, className: "aura-status-tile__icon" }),
|
|
1765
|
-
h6("span", { className: "aura-status-tile__title", ref: titleRef }, props.title, comma),
|
|
1790
|
+
h6("span", { className: "aura-status-tile__title", ref: titleRef }, breakAtDots(props.title), comma),
|
|
1766
1791
|
h6("span", { className: "aura-sr-only" }, word + (hasValue || hasMeta || markers.length ? "," : "")),
|
|
1767
1792
|
hasValue ? h6(
|
|
1768
1793
|
"span",
|
package/dist/styles.css
CHANGED
|
@@ -820,6 +820,20 @@ a.aura-icon-btn { text-decoration: none; }
|
|
|
820
820
|
* indicator paints over its bottom row. The list scrolls sideways (overflow-x), and a scroll container clips at its
|
|
821
821
|
* padding box: an indicator pulled 1px over a border (as up to 5.22) showed only half its height. Same box height. */
|
|
822
822
|
.aura-tabs__list { display: flex; gap: var(--aura-space-6); box-shadow: inset 0 -1px 0 var(--aura-border-default); overflow-x: auto; scrollbar-width: none; }
|
|
823
|
+
/* 5.78 (visual audit 24): a list wider than its box fades the end (or ends) with more tabs, so a cut tab reads as
|
|
824
|
+
* "scroll for more", not as a broken label. Logical: in RTL the fades swap sides. */
|
|
825
|
+
.aura-tabs__list[data-aura-more] {
|
|
826
|
+
--aura-fade-s: 0px; --aura-fade-e: 0px;
|
|
827
|
+
-webkit-mask-image: linear-gradient(to right, transparent, black var(--aura-fade-s), black calc(100% - var(--aura-fade-e)), transparent);
|
|
828
|
+
mask-image: linear-gradient(to right, transparent, black var(--aura-fade-s), black calc(100% - var(--aura-fade-e)), transparent);
|
|
829
|
+
}
|
|
830
|
+
.aura-tabs__list[data-aura-more] { scroll-padding-inline: var(--aura-space-8); } /* a focused tab scrolls clear of the fade */
|
|
831
|
+
.aura-tabs__list[data-aura-more~='start'] { --aura-fade-s: var(--aura-space-8); }
|
|
832
|
+
.aura-tabs__list[data-aura-more~='end'] { --aura-fade-e: var(--aura-space-8); }
|
|
833
|
+
[dir='rtl'] .aura-tabs__list[data-aura-more], .aura-tabs__list[data-aura-more][dir='rtl'] {
|
|
834
|
+
-webkit-mask-image: linear-gradient(to left, transparent, black var(--aura-fade-s), black calc(100% - var(--aura-fade-e)), transparent);
|
|
835
|
+
mask-image: linear-gradient(to left, transparent, black var(--aura-fade-s), black calc(100% - var(--aura-fade-e)), transparent);
|
|
836
|
+
}
|
|
823
837
|
.aura-tab {
|
|
824
838
|
position: relative; display: inline-flex; align-items: center; gap: var(--aura-space-2); flex: none;
|
|
825
839
|
box-sizing: border-box; /* 5.39: a link tab (<a>) was 2px taller than a button tab — its underline sat outside the height */
|
|
@@ -999,6 +1013,9 @@ a.aura-tab { text-decoration: none; }
|
|
|
999
1013
|
/* ---------- Combobox ---------- */
|
|
1000
1014
|
.aura-combo { cursor: text; }
|
|
1001
1015
|
.aura-combo .aura-input__control { padding-right: calc(var(--aura-space-2) + 2 * var(--aura-control-sm)); }
|
|
1016
|
+
/* 5.78 (visual audit 25): room for the clear button only while there is one — an empty TimePicker in a narrow column
|
|
1017
|
+
* showed "hh:m". (Also on a coarse pointer and with touchHeight, below.) */
|
|
1018
|
+
.aura-combo:not(.is-multi):not(:has(.aura-combo__clear)) .aura-input__control { padding-right: calc(var(--aura-space-2) + var(--aura-control-sm)); }
|
|
1002
1019
|
.aura-combo__clear, .aura-combo__toggle, .aura-date__toggle {
|
|
1003
1020
|
position: absolute; display: inline-flex; align-items: center; justify-content: center;
|
|
1004
1021
|
width: var(--aura-control-sm); height: var(--aura-control-sm); padding: 0; border: 0; border-radius: var(--aura-radius-full);
|
|
@@ -1294,6 +1311,9 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1294
1311
|
.aura-page-header { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--aura-space-4) var(--aura-space-6); min-width: 0; font-family: var(--font-sans); }
|
|
1295
1312
|
.aura-page-header__text { display: flex; flex-direction: column; gap: var(--aura-space-1); flex: 1 1 320px; min-width: 0; }
|
|
1296
1313
|
.aura-page-header__eyebrow { margin: 0; font-family: var(--font-mono); font-size: max(12px, .75rem); line-height: 1.7; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
|
|
1314
|
+
.aura-nowrap { white-space: nowrap; } /* 5.78: a code or document number kept on one line */
|
|
1315
|
+
/* …in a PageHeader title the number moves to the next line whole, and still breaks if it is longer than a line. */
|
|
1316
|
+
.aura-page-header__title .aura-nowrap { display: inline-block; max-width: 100%; white-space: normal; }
|
|
1297
1317
|
.aura-page-header__title { margin: 0; font-family: var(--font-display); font-size: var(--aura-page-header-title-size, max(28px, 1.75rem)); line-height: var(--aura-page-header-title-line-height, 1.15); font-weight: 600; letter-spacing: -0.01em; color: var(--aura-fg-primary); overflow-wrap: anywhere; }
|
|
1298
1318
|
.aura-page-header__breadcrumb { min-width: 0; } /* 5.33 (DxT Monitor #7): Breadcrumb keeps its own type */
|
|
1299
1319
|
.aura-page-header__meta { min-width: 0; font-size: max(13px, .8125rem); line-height: 1.5; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
|
|
@@ -1323,6 +1343,8 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1323
1343
|
* span as wide as its text and the page scrolled sideways. :where keeps the selector's weight as before. */
|
|
1324
1344
|
@media (max-width: 639.98px) {
|
|
1325
1345
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1346
|
+
.aura-page-header--actions-full-below-sm:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11): a label that wraps to two lines is a rounded box, not a lozenge */
|
|
1347
|
+
.aura-page-header--actions-full-below-sm:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78: actionsBar's split — the header's own actions, not the strip */
|
|
1326
1348
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > :where(:not(.sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; }
|
|
1327
1349
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1328
1350
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > .aura-page-header__bar > :where(:not(.aura-page-header__status, .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; } /* 5.71: actionsBar in the row, as the actions (5.61) */
|
|
@@ -1333,10 +1355,14 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1333
1355
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) { flex-wrap: nowrap; align-items: stretch; }
|
|
1334
1356
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > * { min-width: 0; }
|
|
1335
1357
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { height: auto; min-height: var(--aura-button-height); white-space: normal; padding: var(--aura-space-2) var(--aura-space-3); line-height: 1.35; text-align: center; overflow-wrap: anywhere; hyphens: auto; border-radius: min(var(--aura-button-radius), 22px); }
|
|
1358
|
+
.aura-page-header--actions-full-below-sm:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11) */
|
|
1359
|
+
.aura-page-header--actions-full-below-sm:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); }
|
|
1336
1360
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-icon-btn, :has(> .aura-icon-btn)) { align-self: center; } /* 5.45 (Chamber-OS addendum 52): centred on a taller button */
|
|
1337
1361
|
}
|
|
1338
1362
|
@media (max-width: 767.98px) {
|
|
1339
1363
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1364
|
+
.aura-page-header--actions-full-below-md:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11): a label that wraps to two lines is a rounded box, not a lozenge */
|
|
1365
|
+
.aura-page-header--actions-full-below-md:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78: actionsBar's split — the header's own actions, not the strip */
|
|
1340
1366
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions > :where(:not(.sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; }
|
|
1341
1367
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1342
1368
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions > .aura-page-header__bar > :where(:not(.aura-page-header__status, .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; } /* 5.71: actionsBar in the row, as the actions (5.61) */
|
|
@@ -1346,10 +1372,14 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1346
1372
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) { flex-wrap: nowrap; align-items: stretch; }
|
|
1347
1373
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > * { min-width: 0; }
|
|
1348
1374
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { height: auto; min-height: var(--aura-button-height); white-space: normal; padding: var(--aura-space-2) var(--aura-space-3); line-height: 1.35; text-align: center; overflow-wrap: anywhere; hyphens: auto; border-radius: min(var(--aura-button-radius), 22px); }
|
|
1375
|
+
.aura-page-header--actions-full-below-md:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11) */
|
|
1376
|
+
.aura-page-header--actions-full-below-md:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); }
|
|
1349
1377
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-icon-btn, :has(> .aura-icon-btn)) { align-self: center; } /* 5.45 (Chamber-OS addendum 52): centred on a taller button */
|
|
1350
1378
|
}
|
|
1351
1379
|
@media (max-width: 1023.98px) {
|
|
1352
1380
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1381
|
+
.aura-page-header--actions-full-below-lg:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11): a label that wraps to two lines is a rounded box, not a lozenge */
|
|
1382
|
+
.aura-page-header--actions-full-below-lg:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78: actionsBar's split — the header's own actions, not the strip */
|
|
1353
1383
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > :where(:not(.sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; }
|
|
1354
1384
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1355
1385
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > .aura-page-header__bar > :where(:not(.aura-page-header__status, .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; } /* 5.71: actionsBar in the row, as the actions (5.61) */
|
|
@@ -1359,6 +1389,8 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1359
1389
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) { flex-wrap: nowrap; align-items: stretch; }
|
|
1360
1390
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > * { min-width: 0; }
|
|
1361
1391
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { height: auto; min-height: var(--aura-button-height); white-space: normal; padding: var(--aura-space-2) var(--aura-space-3); line-height: 1.35; text-align: center; overflow-wrap: anywhere; hyphens: auto; border-radius: min(var(--aura-button-radius), 22px); }
|
|
1392
|
+
.aura-page-header--actions-full-below-lg:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11) */
|
|
1393
|
+
.aura-page-header--actions-full-below-lg:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); }
|
|
1362
1394
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-icon-btn, :has(> .aura-icon-btn)) { align-self: center; } /* 5.45 (Chamber-OS addendum 52): centred on a taller button */
|
|
1363
1395
|
}
|
|
1364
1396
|
/* 5.48 (Chamber-OS 154): only on a screen taller than 30rem (5.49: 480px at the default text size) — on a short one (400% zoom, a phone held sideways) the
|
|
@@ -1379,7 +1411,7 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1379
1411
|
.aura-page-header--actions-bar-below-sm[data-aura-bar="empty"] > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm[data-aura-bar="empty"] > .aura-page-header__actions > .aura-page-header__bar { display: none; }
|
|
1380
1412
|
/* …and before hydration, from the markup alone (actionsBar's strip whose element children but the status are all `hidden` or visually hidden): it already goes; the page padding follows once the client has looked. */
|
|
1381
1413
|
.aura-page-header--actions-bar-below-sm:not([data-aura-bar="shown"]) > .aura-page-header__actions > .aura-page-header__bar:not(:has(> :not(.aura-page-header__status, [hidden], .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text))):has(> *) { display: none; }
|
|
1382
|
-
:is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) { position: fixed; z-index: var(--aura-z-bar); left: 0; right: 0; bottom: var(--aura-bottomnav-offset, 0px); box-sizing: border-box; min-height: 60px; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin: 0; padding: var(--aura-space-2) var(--aura-space-
|
|
1414
|
+
:is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) { position: fixed; z-index: var(--aura-z-bar); left: 0; right: 0; bottom: var(--aura-bottomnav-offset, 0px); box-sizing: border-box; min-height: 60px; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin: 0; padding: var(--aura-space-2) var(--aura-space-4) calc(var(--aura-space-2) + max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px))) var(--aura-space-4); /* 5.78 (audit 9): 16px both sides, the phone gutter */ background: var(--aura-bg-surface); color: var(--aura-fg-primary); border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; transition: bottom var(--aura-duration-base) var(--aura-ease); }
|
|
1383
1415
|
/* 5.54 (Chamber-OS 166): the bar's buttons are 44px whatever the density, as ActionBar's on a phone. */
|
|
1384
1416
|
:is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) { --aura-button-height: var(--aura-touch-target); --aura-button-height-sm: var(--aura-touch-target); }
|
|
1385
1417
|
:is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) > .aura-icon-btn, :is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) > * > .aura-icon-btn:only-child { width: var(--aura-touch-target); height: var(--aura-touch-target); }
|
|
@@ -1405,7 +1437,7 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1405
1437
|
.aura-page-header--actions-bar-below-md[data-aura-bar="empty"] > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md[data-aura-bar="empty"] > .aura-page-header__actions > .aura-page-header__bar { display: none; }
|
|
1406
1438
|
/* …and before hydration, from the markup alone (actionsBar's strip whose element children but the status are all `hidden` or visually hidden): it already goes; the page padding follows once the client has looked. */
|
|
1407
1439
|
.aura-page-header--actions-bar-below-md:not([data-aura-bar="shown"]) > .aura-page-header__actions > .aura-page-header__bar:not(:has(> :not(.aura-page-header__status, [hidden], .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text))):has(> *) { display: none; }
|
|
1408
|
-
:is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) { position: fixed; z-index: var(--aura-z-bar); left: 0; right: 0; bottom: var(--aura-bottomnav-offset, 0px); box-sizing: border-box; min-height: 60px; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin: 0; padding: var(--aura-space-2) var(--aura-space-
|
|
1440
|
+
:is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) { position: fixed; z-index: var(--aura-z-bar); left: 0; right: 0; bottom: var(--aura-bottomnav-offset, 0px); box-sizing: border-box; min-height: 60px; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin: 0; padding: var(--aura-space-2) var(--aura-space-4) calc(var(--aura-space-2) + max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px))) var(--aura-space-4); /* 5.78 (audit 9): 16px both sides, the phone gutter */ background: var(--aura-bg-surface); color: var(--aura-fg-primary); border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; transition: bottom var(--aura-duration-base) var(--aura-ease); }
|
|
1409
1441
|
/* 5.54 (Chamber-OS 166): the bar's buttons are 44px whatever the density, as ActionBar's on a phone. */
|
|
1410
1442
|
:is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) { --aura-button-height: var(--aura-touch-target); --aura-button-height-sm: var(--aura-touch-target); }
|
|
1411
1443
|
:is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) > .aura-icon-btn, :is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) > * > .aura-icon-btn:only-child { width: var(--aura-touch-target); height: var(--aura-touch-target); }
|
|
@@ -1913,6 +1945,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1913
1945
|
.aura-combo__toggle, .aura-date__toggle { right: 0; }
|
|
1914
1946
|
.aura-combo__clear, .aura-date .aura-combo__clear { right: var(--aura-touch-target); }
|
|
1915
1947
|
.aura-combo .aura-input__control, .aura-date .aura-input__control { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
1948
|
+
.aura-combo:not(.is-multi):not(:has(.aura-combo__clear)) .aura-input__control { padding-right: calc(var(--aura-space-1) + var(--aura-touch-target)); }
|
|
1916
1949
|
.aura-combo__clear::after, .aura-combo__toggle::after, .aura-date__toggle::after, .aura-tag__remove::after {
|
|
1917
1950
|
content: ''; position: absolute; top: 50%; left: 50%; width: max(100%, var(--aura-touch-target)); height: max(100%, var(--aura-touch-target)); transform: translate(-50%, -50%);
|
|
1918
1951
|
}
|
|
@@ -1983,6 +2016,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1983
2016
|
:is(.aura-field, .aura-filterbar).is-touch-always :is(.aura-combo__toggle, .aura-date__toggle) { right: 0; }
|
|
1984
2017
|
:is(.aura-field, .aura-filterbar).is-touch-always .aura-combo__clear { right: var(--aura-touch-target); }
|
|
1985
2018
|
:is(.aura-field, .aura-filterbar).is-touch-always :is(.aura-combo, .aura-date) .aura-input__control { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
2019
|
+
:is(.aura-field, .aura-filterbar).is-touch-always .aura-combo:not(.is-multi):not(:has(.aura-combo__clear)) .aura-input__control { padding-right: calc(var(--aura-space-1) + var(--aura-touch-target)); }
|
|
1986
2020
|
:is(.aura-field, .aura-filterbar).is-touch-always .aura-combo.is-multi { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
1987
2021
|
:is(.aura-field, .aura-filterbar).is-touch-always .aura-combo.is-multi :is(.aura-combo__clear, .aura-combo__toggle) { top: calc((var(--aura-input-height) - 2px - 40px) / 2); }
|
|
1988
2022
|
:is(.aura-field, .aura-filterbar).is-touch-always .aura-number__step { width: var(--aura-touch-target); }
|
|
@@ -1991,6 +2025,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1991
2025
|
:is(.aura-field, .aura-filterbar).is-touch :is(.aura-combo__toggle, .aura-date__toggle) { right: 0; }
|
|
1992
2026
|
:is(.aura-field, .aura-filterbar).is-touch .aura-combo__clear { right: var(--aura-touch-target); }
|
|
1993
2027
|
:is(.aura-field, .aura-filterbar).is-touch :is(.aura-combo, .aura-date) .aura-input__control { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
2028
|
+
:is(.aura-field, .aura-filterbar).is-touch .aura-combo:not(.is-multi):not(:has(.aura-combo__clear)) .aura-input__control { padding-right: calc(var(--aura-space-1) + var(--aura-touch-target)); }
|
|
1994
2029
|
:is(.aura-field, .aura-filterbar).is-touch .aura-combo.is-multi { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
1995
2030
|
:is(.aura-field, .aura-filterbar).is-touch .aura-combo.is-multi :is(.aura-combo__clear, .aura-combo__toggle) { top: calc((var(--aura-input-height) - 2px - 40px) / 2); }
|
|
1996
2031
|
:is(.aura-field, .aura-filterbar).is-touch .aura-number__step { width: var(--aura-touch-target); }
|
|
@@ -2358,6 +2393,25 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
2358
2393
|
:root:has(.aura-actionbar--edge:not(.is-idle)) .aura-shell__content { padding-bottom: calc(var(--aura-space-6) + var(--aura-actionbar-space)); }
|
|
2359
2394
|
:root:has(.aura-actionbar--edge:not(.is-idle)):not(:has(.aura-shell__content)) body { padding-bottom: var(--aura-actionbar-space); }
|
|
2360
2395
|
}
|
|
2396
|
+
/* 5.78 (visual audit 9): one rule for the bottom strips on a phone, as PageHeader's (5.48) — the status on its own row
|
|
2397
|
+
* at the top, the actions sharing the row under it (an IconButton keeps its square; labels too long to share take a row
|
|
2398
|
+
* each), 16px both sides as the page. edgeBelow="md" follows it up to 768px, as PageHeader's md strip. */
|
|
2399
|
+
@media (max-width: 639.98px) {
|
|
2400
|
+
@container aura-actionbar (max-width: 639.98px) {
|
|
2401
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) > .aura-actionbar__inner { padding-inline: var(--aura-space-4); }
|
|
2402
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) > .aura-actionbar__inner > .aura-actionbar__status:not(:empty) { flex-basis: 100%; }
|
|
2403
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) .aura-actionbar__actions { flex: 1 1 auto; min-width: 0; margin-inline-start: 0; }
|
|
2404
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) .aura-actionbar__actions > :not(.aura-icon-btn, :has(> .aura-icon-btn)) { flex: 1 1 0; min-width: max-content; } /* as PageHeader's strip (5.61): shares, a long label takes its own row */
|
|
2405
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) .aura-actionbar__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor):not(:has(> .aura-icon-btn)) > .aura-btn { width: 100%; }
|
|
2406
|
+
}
|
|
2407
|
+
}
|
|
2408
|
+
@media (min-width: 640px) and (max-width: 767.98px) {
|
|
2409
|
+
.aura-actionbar--edge-below-md:not(.is-idle) > .aura-actionbar__inner { padding-inline: var(--aura-space-4); }
|
|
2410
|
+
.aura-actionbar--edge-below-md:not(.is-idle) > .aura-actionbar__inner > .aura-actionbar__status:not(:empty) { flex-basis: 100%; }
|
|
2411
|
+
.aura-actionbar--edge-below-md:not(.is-idle) .aura-actionbar__actions { flex: 1 1 auto; min-width: 0; margin-inline-start: 0; }
|
|
2412
|
+
.aura-actionbar--edge-below-md:not(.is-idle) .aura-actionbar__actions > :not(.aura-icon-btn, :has(> .aura-icon-btn)) { flex: 1 1 0; min-width: max-content; } /* as PageHeader's strip (5.61): shares, a long label takes its own row */
|
|
2413
|
+
.aura-actionbar--edge-below-md:not(.is-idle) .aura-actionbar__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor):not(:has(> .aura-icon-btn)) > .aura-btn { width: 100%; }
|
|
2414
|
+
}
|
|
2361
2415
|
@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; } }
|
|
2362
2416
|
@media (max-width: 639.98px) and (min-height: 30.00125rem) {
|
|
2363
2417
|
.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)); }
|
|
@@ -2581,7 +2635,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
2581
2635
|
.aura-table__head:not(.has-select-all) { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); }
|
|
2582
2636
|
.aura-table__head > .aura-table__sel { position: static; width: auto; gap: var(--aura-space-3); padding: 0 var(--aura-space-4); }
|
|
2583
2637
|
.aura-table__sel-text { display: inline; color: var(--aura-fg-secondary); }
|
|
2584
|
-
.aura-table__gutter { display: none; }
|
|
2638
|
+
.aura-table__gutter, .aura-table__gutter--end.has-picker { display: none; } /* 5.78 (audit 20): the column picker's slot too, which squeezed the card's title */
|
|
2585
2639
|
.aura-table__row, .aura-table__row:last-child {
|
|
2586
2640
|
height: auto; min-width: 0; flex-wrap: wrap; align-items: center; gap: var(--aura-space-1) var(--aura-space-4);
|
|
2587
2641
|
margin-bottom: var(--aura-space-2); padding: var(--aura-space-4);
|
package/dist/styles.layer.css
CHANGED
|
@@ -822,6 +822,20 @@ a.aura-icon-btn { text-decoration: none; }
|
|
|
822
822
|
* indicator paints over its bottom row. The list scrolls sideways (overflow-x), and a scroll container clips at its
|
|
823
823
|
* padding box: an indicator pulled 1px over a border (as up to 5.22) showed only half its height. Same box height. */
|
|
824
824
|
.aura-tabs__list { display: flex; gap: var(--aura-space-6); box-shadow: inset 0 -1px 0 var(--aura-border-default); overflow-x: auto; scrollbar-width: none; }
|
|
825
|
+
/* 5.78 (visual audit 24): a list wider than its box fades the end (or ends) with more tabs, so a cut tab reads as
|
|
826
|
+
* "scroll for more", not as a broken label. Logical: in RTL the fades swap sides. */
|
|
827
|
+
.aura-tabs__list[data-aura-more] {
|
|
828
|
+
--aura-fade-s: 0px; --aura-fade-e: 0px;
|
|
829
|
+
-webkit-mask-image: linear-gradient(to right, transparent, black var(--aura-fade-s), black calc(100% - var(--aura-fade-e)), transparent);
|
|
830
|
+
mask-image: linear-gradient(to right, transparent, black var(--aura-fade-s), black calc(100% - var(--aura-fade-e)), transparent);
|
|
831
|
+
}
|
|
832
|
+
.aura-tabs__list[data-aura-more] { scroll-padding-inline: var(--aura-space-8); } /* a focused tab scrolls clear of the fade */
|
|
833
|
+
.aura-tabs__list[data-aura-more~='start'] { --aura-fade-s: var(--aura-space-8); }
|
|
834
|
+
.aura-tabs__list[data-aura-more~='end'] { --aura-fade-e: var(--aura-space-8); }
|
|
835
|
+
[dir='rtl'] .aura-tabs__list[data-aura-more], .aura-tabs__list[data-aura-more][dir='rtl'] {
|
|
836
|
+
-webkit-mask-image: linear-gradient(to left, transparent, black var(--aura-fade-s), black calc(100% - var(--aura-fade-e)), transparent);
|
|
837
|
+
mask-image: linear-gradient(to left, transparent, black var(--aura-fade-s), black calc(100% - var(--aura-fade-e)), transparent);
|
|
838
|
+
}
|
|
825
839
|
.aura-tab {
|
|
826
840
|
position: relative; display: inline-flex; align-items: center; gap: var(--aura-space-2); flex: none;
|
|
827
841
|
box-sizing: border-box; /* 5.39: a link tab (<a>) was 2px taller than a button tab — its underline sat outside the height */
|
|
@@ -1001,6 +1015,9 @@ a.aura-tab { text-decoration: none; }
|
|
|
1001
1015
|
/* ---------- Combobox ---------- */
|
|
1002
1016
|
.aura-combo { cursor: text; }
|
|
1003
1017
|
.aura-combo .aura-input__control { padding-right: calc(var(--aura-space-2) + 2 * var(--aura-control-sm)); }
|
|
1018
|
+
/* 5.78 (visual audit 25): room for the clear button only while there is one — an empty TimePicker in a narrow column
|
|
1019
|
+
* showed "hh:m". (Also on a coarse pointer and with touchHeight, below.) */
|
|
1020
|
+
.aura-combo:not(.is-multi):not(:has(.aura-combo__clear)) .aura-input__control { padding-right: calc(var(--aura-space-2) + var(--aura-control-sm)); }
|
|
1004
1021
|
.aura-combo__clear, .aura-combo__toggle, .aura-date__toggle {
|
|
1005
1022
|
position: absolute; display: inline-flex; align-items: center; justify-content: center;
|
|
1006
1023
|
width: var(--aura-control-sm); height: var(--aura-control-sm); padding: 0; border: 0; border-radius: var(--aura-radius-full);
|
|
@@ -1296,6 +1313,9 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1296
1313
|
.aura-page-header { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--aura-space-4) var(--aura-space-6); min-width: 0; font-family: var(--font-sans); }
|
|
1297
1314
|
.aura-page-header__text { display: flex; flex-direction: column; gap: var(--aura-space-1); flex: 1 1 320px; min-width: 0; }
|
|
1298
1315
|
.aura-page-header__eyebrow { margin: 0; font-family: var(--font-mono); font-size: max(12px, .75rem); line-height: 1.7; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
|
|
1316
|
+
.aura-nowrap { white-space: nowrap; } /* 5.78: a code or document number kept on one line */
|
|
1317
|
+
/* …in a PageHeader title the number moves to the next line whole, and still breaks if it is longer than a line. */
|
|
1318
|
+
.aura-page-header__title .aura-nowrap { display: inline-block; max-width: 100%; white-space: normal; }
|
|
1299
1319
|
.aura-page-header__title { margin: 0; font-family: var(--font-display); font-size: var(--aura-page-header-title-size, max(28px, 1.75rem)); line-height: var(--aura-page-header-title-line-height, 1.15); font-weight: 600; letter-spacing: -0.01em; color: var(--aura-fg-primary); overflow-wrap: anywhere; }
|
|
1300
1320
|
.aura-page-header__breadcrumb { min-width: 0; } /* 5.33 (DxT Monitor #7): Breadcrumb keeps its own type */
|
|
1301
1321
|
.aura-page-header__meta { min-width: 0; font-size: max(13px, .8125rem); line-height: 1.5; color: var(--aura-fg-secondary); overflow-wrap: anywhere; }
|
|
@@ -1325,6 +1345,8 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1325
1345
|
* span as wide as its text and the page scrolled sideways. :where keeps the selector's weight as before. */
|
|
1326
1346
|
@media (max-width: 639.98px) {
|
|
1327
1347
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1348
|
+
.aura-page-header--actions-full-below-sm:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11): a label that wraps to two lines is a rounded box, not a lozenge */
|
|
1349
|
+
.aura-page-header--actions-full-below-sm:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78: actionsBar's split — the header's own actions, not the strip */
|
|
1328
1350
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > :where(:not(.sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; }
|
|
1329
1351
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1330
1352
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions > .aura-page-header__bar > :where(:not(.aura-page-header__status, .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; } /* 5.71: actionsBar in the row, as the actions (5.61) */
|
|
@@ -1335,10 +1357,14 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1335
1357
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) { flex-wrap: nowrap; align-items: stretch; }
|
|
1336
1358
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > * { min-width: 0; }
|
|
1337
1359
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { height: auto; min-height: var(--aura-button-height); white-space: normal; padding: var(--aura-space-2) var(--aura-space-3); line-height: 1.35; text-align: center; overflow-wrap: anywhere; hyphens: auto; border-radius: min(var(--aura-button-radius), 22px); }
|
|
1360
|
+
.aura-page-header--actions-full-below-sm:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11) */
|
|
1361
|
+
.aura-page-header--actions-full-below-sm:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); }
|
|
1338
1362
|
.aura-page-header--actions-full-below-sm > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-icon-btn, :has(> .aura-icon-btn)) { align-self: center; } /* 5.45 (Chamber-OS addendum 52): centred on a taller button */
|
|
1339
1363
|
}
|
|
1340
1364
|
@media (max-width: 767.98px) {
|
|
1341
1365
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1366
|
+
.aura-page-header--actions-full-below-md:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11): a label that wraps to two lines is a rounded box, not a lozenge */
|
|
1367
|
+
.aura-page-header--actions-full-below-md:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78: actionsBar's split — the header's own actions, not the strip */
|
|
1342
1368
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions > :where(:not(.sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; }
|
|
1343
1369
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1344
1370
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions > .aura-page-header__bar > :where(:not(.aura-page-header__status, .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; } /* 5.71: actionsBar in the row, as the actions (5.61) */
|
|
@@ -1348,10 +1374,14 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1348
1374
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) { flex-wrap: nowrap; align-items: stretch; }
|
|
1349
1375
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > * { min-width: 0; }
|
|
1350
1376
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { height: auto; min-height: var(--aura-button-height); white-space: normal; padding: var(--aura-space-2) var(--aura-space-3); line-height: 1.35; text-align: center; overflow-wrap: anywhere; hyphens: auto; border-radius: min(var(--aura-button-radius), 22px); }
|
|
1377
|
+
.aura-page-header--actions-full-below-md:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11) */
|
|
1378
|
+
.aura-page-header--actions-full-below-md:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); }
|
|
1351
1379
|
.aura-page-header--actions-full-below-md > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-icon-btn, :has(> .aura-icon-btn)) { align-self: center; } /* 5.45 (Chamber-OS addendum 52): centred on a taller button */
|
|
1352
1380
|
}
|
|
1353
1381
|
@media (max-width: 1023.98px) {
|
|
1354
1382
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions { flex: 1 1 100%; gap: var(--aura-space-3); }
|
|
1383
|
+
.aura-page-header--actions-full-below-lg:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11): a label that wraps to two lines is a rounded box, not a lozenge */
|
|
1384
|
+
.aura-page-header--actions-full-below-lg:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78: actionsBar's split — the header's own actions, not the strip */
|
|
1355
1385
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > :where(:not(.sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; }
|
|
1356
1386
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor) > * { flex: 1 1 auto; }
|
|
1357
1387
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions > .aura-page-header__bar > :where(:not(.aura-page-header__status, .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text, [hidden], [style*="position: absolute"], [style*="position:absolute"])) { flex: 1 1 0; min-width: max-content; } /* 5.71: actionsBar in the row, as the actions (5.61) */
|
|
@@ -1361,6 +1391,8 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1361
1391
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) { flex-wrap: nowrap; align-items: stretch; }
|
|
1362
1392
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > * { min-width: 0; }
|
|
1363
1393
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { height: auto; min-height: var(--aura-button-height); white-space: normal; padding: var(--aura-space-2) var(--aura-space-3); line-height: 1.35; text-align: center; overflow-wrap: anywhere; hyphens: auto; border-radius: min(var(--aura-button-radius), 22px); }
|
|
1394
|
+
.aura-page-header--actions-full-below-lg:not(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, * > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); } /* 5.78 (visual audit 11) */
|
|
1395
|
+
.aura-page-header--actions-full-below-lg:is(.aura-page-header--actions-bar-below-sm, .aura-page-header--actions-bar-below-md) > .aura-page-header__actions.is-split:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-btn, :not(.aura-page-header__bar) > .aura-btn):not(.aura-icon-btn) { border-radius: var(--aura-radius-md); }
|
|
1364
1396
|
.aura-page-header--actions-full-below-lg > .aura-page-header__actions:has(> .aura-icon-btn, > :not(.aura-page-header__bar) > .aura-icon-btn) > :is(.aura-icon-btn, :has(> .aura-icon-btn)) { align-self: center; } /* 5.45 (Chamber-OS addendum 52): centred on a taller button */
|
|
1365
1397
|
}
|
|
1366
1398
|
/* 5.48 (Chamber-OS 154): only on a screen taller than 30rem (5.49: 480px at the default text size) — on a short one (400% zoom, a phone held sideways) the
|
|
@@ -1381,7 +1413,7 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1381
1413
|
.aura-page-header--actions-bar-below-sm[data-aura-bar="empty"] > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm[data-aura-bar="empty"] > .aura-page-header__actions > .aura-page-header__bar { display: none; }
|
|
1382
1414
|
/* …and before hydration, from the markup alone (actionsBar's strip whose element children but the status are all `hidden` or visually hidden): it already goes; the page padding follows once the client has looked. */
|
|
1383
1415
|
.aura-page-header--actions-bar-below-sm:not([data-aura-bar="shown"]) > .aura-page-header__actions > .aura-page-header__bar:not(:has(> :not(.aura-page-header__status, [hidden], .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text))):has(> *) { display: none; }
|
|
1384
|
-
:is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) { position: fixed; z-index: var(--aura-z-bar); left: 0; right: 0; bottom: var(--aura-bottomnav-offset, 0px); box-sizing: border-box; min-height: 60px; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin: 0; padding: var(--aura-space-2) var(--aura-space-
|
|
1416
|
+
:is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) { position: fixed; z-index: var(--aura-z-bar); left: 0; right: 0; bottom: var(--aura-bottomnav-offset, 0px); box-sizing: border-box; min-height: 60px; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin: 0; padding: var(--aura-space-2) var(--aura-space-4) calc(var(--aura-space-2) + max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px))) var(--aura-space-4); /* 5.78 (audit 9): 16px both sides, the phone gutter */ background: var(--aura-bg-surface); color: var(--aura-fg-primary); border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; transition: bottom var(--aura-duration-base) var(--aura-ease); }
|
|
1385
1417
|
/* 5.54 (Chamber-OS 166): the bar's buttons are 44px whatever the density, as ActionBar's on a phone. */
|
|
1386
1418
|
:is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) { --aura-button-height: var(--aura-touch-target); --aura-button-height-sm: var(--aura-touch-target); }
|
|
1387
1419
|
:is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) > .aura-icon-btn, :is(.aura-page-header--actions-bar-below-sm > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-sm > .aura-page-header__actions > .aura-page-header__bar) > * > .aura-icon-btn:only-child { width: var(--aura-touch-target); height: var(--aura-touch-target); }
|
|
@@ -1407,7 +1439,7 @@ summary.aura-link::-webkit-details-marker { display: none; }
|
|
|
1407
1439
|
.aura-page-header--actions-bar-below-md[data-aura-bar="empty"] > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md[data-aura-bar="empty"] > .aura-page-header__actions > .aura-page-header__bar { display: none; }
|
|
1408
1440
|
/* …and before hydration, from the markup alone (actionsBar's strip whose element children but the status are all `hidden` or visually hidden): it already goes; the page padding follows once the client has looked. */
|
|
1409
1441
|
.aura-page-header--actions-bar-below-md:not([data-aura-bar="shown"]) > .aura-page-header__actions > .aura-page-header__bar:not(:has(> :not(.aura-page-header__status, [hidden], .sr-only, .aura-sr-only, .visually-hidden, .screen-reader-text))):has(> *) { display: none; }
|
|
1410
|
-
:is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) { position: fixed; z-index: var(--aura-z-bar); left: 0; right: 0; bottom: var(--aura-bottomnav-offset, 0px); box-sizing: border-box; min-height: 60px; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin: 0; padding: var(--aura-space-2) var(--aura-space-
|
|
1442
|
+
:is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) { position: fixed; z-index: var(--aura-z-bar); left: 0; right: 0; bottom: var(--aura-bottomnav-offset, 0px); box-sizing: border-box; min-height: 60px; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--aura-space-2); margin: 0; padding: var(--aura-space-2) var(--aura-space-4) calc(var(--aura-space-2) + max(0px, env(safe-area-inset-bottom, 0px) - var(--aura-bottomnav-offset, 0px))) var(--aura-space-4); /* 5.78 (audit 9): 16px both sides, the phone gutter */ background: var(--aura-bg-surface); color: var(--aura-fg-primary); border: 0; border-top: 1px solid var(--aura-border-default); border-radius: 0; box-shadow: none; transition: bottom var(--aura-duration-base) var(--aura-ease); }
|
|
1411
1443
|
/* 5.54 (Chamber-OS 166): the bar's buttons are 44px whatever the density, as ActionBar's on a phone. */
|
|
1412
1444
|
:is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) { --aura-button-height: var(--aura-touch-target); --aura-button-height-sm: var(--aura-touch-target); }
|
|
1413
1445
|
:is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) > .aura-icon-btn, :is(.aura-page-header--actions-bar-below-md > .aura-page-header__actions:not(.is-split), .aura-page-header--actions-bar-below-md > .aura-page-header__actions > .aura-page-header__bar) > * > .aura-icon-btn:only-child { width: var(--aura-touch-target); height: var(--aura-touch-target); }
|
|
@@ -1915,6 +1947,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1915
1947
|
.aura-combo__toggle, .aura-date__toggle { right: 0; }
|
|
1916
1948
|
.aura-combo__clear, .aura-date .aura-combo__clear { right: var(--aura-touch-target); }
|
|
1917
1949
|
.aura-combo .aura-input__control, .aura-date .aura-input__control { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
1950
|
+
.aura-combo:not(.is-multi):not(:has(.aura-combo__clear)) .aura-input__control { padding-right: calc(var(--aura-space-1) + var(--aura-touch-target)); }
|
|
1918
1951
|
.aura-combo__clear::after, .aura-combo__toggle::after, .aura-date__toggle::after, .aura-tag__remove::after {
|
|
1919
1952
|
content: ''; position: absolute; top: 50%; left: 50%; width: max(100%, var(--aura-touch-target)); height: max(100%, var(--aura-touch-target)); transform: translate(-50%, -50%);
|
|
1920
1953
|
}
|
|
@@ -1985,6 +2018,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1985
2018
|
:is(.aura-field, .aura-filterbar).is-touch-always :is(.aura-combo__toggle, .aura-date__toggle) { right: 0; }
|
|
1986
2019
|
:is(.aura-field, .aura-filterbar).is-touch-always .aura-combo__clear { right: var(--aura-touch-target); }
|
|
1987
2020
|
:is(.aura-field, .aura-filterbar).is-touch-always :is(.aura-combo, .aura-date) .aura-input__control { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
2021
|
+
:is(.aura-field, .aura-filterbar).is-touch-always .aura-combo:not(.is-multi):not(:has(.aura-combo__clear)) .aura-input__control { padding-right: calc(var(--aura-space-1) + var(--aura-touch-target)); }
|
|
1988
2022
|
:is(.aura-field, .aura-filterbar).is-touch-always .aura-combo.is-multi { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
1989
2023
|
:is(.aura-field, .aura-filterbar).is-touch-always .aura-combo.is-multi :is(.aura-combo__clear, .aura-combo__toggle) { top: calc((var(--aura-input-height) - 2px - 40px) / 2); }
|
|
1990
2024
|
:is(.aura-field, .aura-filterbar).is-touch-always .aura-number__step { width: var(--aura-touch-target); }
|
|
@@ -1993,6 +2027,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1993
2027
|
:is(.aura-field, .aura-filterbar).is-touch :is(.aura-combo__toggle, .aura-date__toggle) { right: 0; }
|
|
1994
2028
|
:is(.aura-field, .aura-filterbar).is-touch .aura-combo__clear { right: var(--aura-touch-target); }
|
|
1995
2029
|
:is(.aura-field, .aura-filterbar).is-touch :is(.aura-combo, .aura-date) .aura-input__control { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
2030
|
+
:is(.aura-field, .aura-filterbar).is-touch .aura-combo:not(.is-multi):not(:has(.aura-combo__clear)) .aura-input__control { padding-right: calc(var(--aura-space-1) + var(--aura-touch-target)); }
|
|
1996
2031
|
:is(.aura-field, .aura-filterbar).is-touch .aura-combo.is-multi { padding-right: calc(var(--aura-space-1) + 2 * var(--aura-touch-target)); }
|
|
1997
2032
|
:is(.aura-field, .aura-filterbar).is-touch .aura-combo.is-multi :is(.aura-combo__clear, .aura-combo__toggle) { top: calc((var(--aura-input-height) - 2px - 40px) / 2); }
|
|
1998
2033
|
:is(.aura-field, .aura-filterbar).is-touch .aura-number__step { width: var(--aura-touch-target); }
|
|
@@ -2360,6 +2395,25 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
2360
2395
|
:root:has(.aura-actionbar--edge:not(.is-idle)) .aura-shell__content { padding-bottom: calc(var(--aura-space-6) + var(--aura-actionbar-space)); }
|
|
2361
2396
|
:root:has(.aura-actionbar--edge:not(.is-idle)):not(:has(.aura-shell__content)) body { padding-bottom: var(--aura-actionbar-space); }
|
|
2362
2397
|
}
|
|
2398
|
+
/* 5.78 (visual audit 9): one rule for the bottom strips on a phone, as PageHeader's (5.48) — the status on its own row
|
|
2399
|
+
* at the top, the actions sharing the row under it (an IconButton keeps its square; labels too long to share take a row
|
|
2400
|
+
* each), 16px both sides as the page. edgeBelow="md" follows it up to 768px, as PageHeader's md strip. */
|
|
2401
|
+
@media (max-width: 639.98px) {
|
|
2402
|
+
@container aura-actionbar (max-width: 639.98px) {
|
|
2403
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) > .aura-actionbar__inner { padding-inline: var(--aura-space-4); }
|
|
2404
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) > .aura-actionbar__inner > .aura-actionbar__status:not(:empty) { flex-basis: 100%; }
|
|
2405
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) .aura-actionbar__actions { flex: 1 1 auto; min-width: 0; margin-inline-start: 0; }
|
|
2406
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) .aura-actionbar__actions > :not(.aura-icon-btn, :has(> .aura-icon-btn)) { flex: 1 1 0; min-width: max-content; } /* as PageHeader's strip (5.61): shares, a long label takes its own row */
|
|
2407
|
+
:is(.aura-actionbar--edge, .aura-actionbar--edge-below-sm, .aura-actionbar--edge-below-md):not(.is-idle) .aura-actionbar__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor):not(:has(> .aura-icon-btn)) > .aura-btn { width: 100%; }
|
|
2408
|
+
}
|
|
2409
|
+
}
|
|
2410
|
+
@media (min-width: 640px) and (max-width: 767.98px) {
|
|
2411
|
+
.aura-actionbar--edge-below-md:not(.is-idle) > .aura-actionbar__inner { padding-inline: var(--aura-space-4); }
|
|
2412
|
+
.aura-actionbar--edge-below-md:not(.is-idle) > .aura-actionbar__inner > .aura-actionbar__status:not(:empty) { flex-basis: 100%; }
|
|
2413
|
+
.aura-actionbar--edge-below-md:not(.is-idle) .aura-actionbar__actions { flex: 1 1 auto; min-width: 0; margin-inline-start: 0; }
|
|
2414
|
+
.aura-actionbar--edge-below-md:not(.is-idle) .aura-actionbar__actions > :not(.aura-icon-btn, :has(> .aura-icon-btn)) { flex: 1 1 0; min-width: max-content; } /* as PageHeader's strip (5.61): shares, a long label takes its own row */
|
|
2415
|
+
.aura-actionbar--edge-below-md:not(.is-idle) .aura-actionbar__actions > :is(.aura-dropdown, .aura-tooltip-anchor, .aura-popover-anchor):not(:has(> .aura-icon-btn)) > .aura-btn { width: 100%; }
|
|
2416
|
+
}
|
|
2363
2417
|
@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; } }
|
|
2364
2418
|
@media (max-width: 639.98px) and (min-height: 30.00125rem) {
|
|
2365
2419
|
.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)); }
|
|
@@ -2583,7 +2637,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
2583
2637
|
.aura-table__head:not(.has-select-all) { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); }
|
|
2584
2638
|
.aura-table__head > .aura-table__sel { position: static; width: auto; gap: var(--aura-space-3); padding: 0 var(--aura-space-4); }
|
|
2585
2639
|
.aura-table__sel-text { display: inline; color: var(--aura-fg-secondary); }
|
|
2586
|
-
.aura-table__gutter { display: none; }
|
|
2640
|
+
.aura-table__gutter, .aura-table__gutter--end.has-picker { display: none; } /* 5.78 (audit 20): the column picker's slot too, which squeezed the card's title */
|
|
2587
2641
|
.aura-table__row, .aura-table__row:last-child {
|
|
2588
2642
|
height: auto; min-width: 0; flex-wrap: wrap; align-items: center; gap: var(--aura-space-1) var(--aura-space-4);
|
|
2589
2643
|
margin-bottom: var(--aura-space-2); padding: var(--aura-space-4);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jirawatpyk/aura-react",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.78.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",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"test:hydrate": "node scripts/hydrate-test.ts",
|
|
89
89
|
"size": "node scripts/size-check.ts",
|
|
90
90
|
"preexamples": "node scripts/build.ts",
|
|
91
|
-
"test:layout": "node scripts/layout-test.ts"
|
|
91
|
+
"test:layout": "node scripts/layout-test.ts && node scripts/dev-warn-test.ts"
|
|
92
92
|
},
|
|
93
93
|
"peerDependencies": {
|
|
94
94
|
"react": ">=18",
|