@jirawatpyk/aura-react 5.26.0 → 5.28.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 +13 -2
- package/dist/aura.bundle.js +238 -185
- package/dist/cjs/index.cjs +238 -185
- package/dist/esm/Container.js +1 -1
- package/dist/esm/DataTable.js +14 -1
- package/dist/esm/Table.js +13 -1
- package/dist/esm/Tag.js +42 -15
- package/dist/index.d.cts +21 -10
- package/dist/index.d.ts +21 -10
- package/dist/server/index.cjs +31 -5
- package/dist/server/index.d.cts +18 -0
- package/dist/server/index.d.ts +18 -0
- package/dist/server/index.js +31 -5
- package/dist/styles.css +25 -17
- package/dist/styles.layer.css +25 -17
- package/package.json +1 -1
package/dist/esm/DataTable.js
CHANGED
|
@@ -1321,6 +1321,7 @@ const DataTableImpl = React.forwardRef(function DataTable(props, ref) {
|
|
|
1321
1321
|
/* 5.26 (Chamber-OS 127): bleed and bordered={false}; the outermost element carries aura-bleed. */
|
|
1322
1322
|
props.bleed && "aura-bleed-frame",
|
|
1323
1323
|
props.bleed && !levels.length && "aura-bleed",
|
|
1324
|
+
props.bleed && props.bleedEnd && !levels.length && "aura-bleed-end",
|
|
1324
1325
|
props.bordered === false && "aura-table--borderless",
|
|
1325
1326
|
stacked && "aura-table--stacked",
|
|
1326
1327
|
noCardSel && "aura-table--cards-nosel",
|
|
@@ -1419,7 +1420,19 @@ const DataTableImpl = React.forwardRef(function DataTable(props, ref) {
|
|
|
1419
1420
|
out
|
|
1420
1421
|
);
|
|
1421
1422
|
}
|
|
1422
|
-
return /* @__PURE__ */ React.createElement(
|
|
1423
|
+
return /* @__PURE__ */ React.createElement(
|
|
1424
|
+
"div",
|
|
1425
|
+
{
|
|
1426
|
+
ref,
|
|
1427
|
+
className: cx(
|
|
1428
|
+
"aura-table-box",
|
|
1429
|
+
props.bleed && "aura-bleed",
|
|
1430
|
+
props.bleed && props.bleedEnd && "aura-bleed-end",
|
|
1431
|
+
props.className
|
|
1432
|
+
)
|
|
1433
|
+
},
|
|
1434
|
+
out
|
|
1435
|
+
);
|
|
1423
1436
|
});
|
|
1424
1437
|
const DataTable2 = DataTableImpl;
|
|
1425
1438
|
export {
|
package/dist/esm/Table.js
CHANGED
|
@@ -56,6 +56,7 @@ const Table = React.forwardRef(function Table2(props, ref) {
|
|
|
56
56
|
align,
|
|
57
57
|
bordered,
|
|
58
58
|
bleed,
|
|
59
|
+
bleedEnd,
|
|
59
60
|
stickyHeader,
|
|
60
61
|
maxHeight,
|
|
61
62
|
stackStyle,
|
|
@@ -109,6 +110,7 @@ const Table = React.forwardRef(function Table2(props, ref) {
|
|
|
109
110
|
/* 5.26 (Chamber-OS 127): the frame that bleeds; the outermost element carries aura-bleed. */
|
|
110
111
|
bleed && "aura-bleed-frame",
|
|
111
112
|
bleed && !cards && "aura-bleed",
|
|
113
|
+
bleed && bleedEnd && !cards && "aura-bleed-end",
|
|
112
114
|
/* 5.26 (Chamber-OS 129): stickyHeader pins to the page, or inside the box when it has a maxHeight. */
|
|
113
115
|
stickyHeader && (maxHeight != null ? "is-sticky-box" : "is-sticky-page"),
|
|
114
116
|
maxHeight != null && "has-max",
|
|
@@ -141,7 +143,17 @@ const Table = React.forwardRef(function Table2(props, ref) {
|
|
|
141
143
|
labels ? /* @__PURE__ */ React.createElement(StackLabels.Provider, { value: labels }, children) : outer ? /* @__PURE__ */ React.createElement(StackLabels.Provider, { value: null }, children) : children
|
|
142
144
|
)
|
|
143
145
|
);
|
|
144
|
-
return cards ? /* @__PURE__ */ React.createElement(
|
|
146
|
+
return cards ? /* @__PURE__ */ React.createElement(
|
|
147
|
+
"div",
|
|
148
|
+
{
|
|
149
|
+
className: cx(
|
|
150
|
+
"aura-tbl-cards aura-tbl-cards--" + stackBelow,
|
|
151
|
+
bleed && "aura-bleed",
|
|
152
|
+
bleed && bleedEnd && "aura-bleed-end"
|
|
153
|
+
)
|
|
154
|
+
},
|
|
155
|
+
table
|
|
156
|
+
) : table;
|
|
145
157
|
});
|
|
146
158
|
function section(tag, cls) {
|
|
147
159
|
const C = React.forwardRef(function TableSection(props, ref) {
|
package/dist/esm/Tag.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Icon } from "./Icon.js";
|
|
4
|
-
import { cx, devWarnOnce, omit } from "./internal.js";
|
|
4
|
+
import { cx, devWarnOnce, omit, useIsoLayoutEffect } from "./internal.js";
|
|
5
|
+
import { Tooltip } from "./Tooltip.js";
|
|
5
6
|
import { useStrings } from "./locale.js";
|
|
6
7
|
import { IconCheck, IconX } from "./icons.js";
|
|
7
|
-
function textOf(node) {
|
|
8
|
+
function textOf(node, all) {
|
|
8
9
|
if (node == null || typeof node === "boolean") return "";
|
|
9
10
|
if (typeof node === "string" || typeof node === "number") return String(node);
|
|
10
|
-
if (Array.isArray(node))
|
|
11
|
+
if (Array.isArray(node))
|
|
12
|
+
return node.map(function(n) {
|
|
13
|
+
return textOf(n, all);
|
|
14
|
+
}).join("");
|
|
11
15
|
if (React.isValidElement(node)) {
|
|
12
16
|
const p = node.props;
|
|
13
|
-
return p["aria-hidden"] === true || p["aria-hidden"] === "true" ? "" : textOf(p.children);
|
|
17
|
+
return !all && (p["aria-hidden"] === true || p["aria-hidden"] === "true") ? "" : textOf(p.children, all);
|
|
14
18
|
}
|
|
15
19
|
return "";
|
|
16
20
|
}
|
|
@@ -27,9 +31,29 @@ const Tag = React.forwardRef(function Tag2(props, ref) {
|
|
|
27
31
|
"removeLabel",
|
|
28
32
|
"touchHeight"
|
|
29
33
|
]);
|
|
34
|
+
const textRef = React.useRef(null);
|
|
35
|
+
const cutState = React.useState(false), isCut = cutState[0];
|
|
36
|
+
const check = React.useCallback(function() {
|
|
37
|
+
const el = textRef.current;
|
|
38
|
+
if (el) cutState[1](el.scrollWidth > el.clientWidth + 1);
|
|
39
|
+
}, []);
|
|
40
|
+
useIsoLayoutEffect(check);
|
|
41
|
+
useIsoLayoutEffect(
|
|
42
|
+
function() {
|
|
43
|
+
const el = textRef.current;
|
|
44
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
45
|
+
const ro = new ResizeObserver(check);
|
|
46
|
+
ro.observe(el);
|
|
47
|
+
return function() {
|
|
48
|
+
ro.disconnect();
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
[check]
|
|
52
|
+
);
|
|
53
|
+
const fullText = isCut ? textOf(props.children, true).replace(/\s+/g, " ").trim() : "";
|
|
30
54
|
const inner = [
|
|
31
55
|
props.icon ? /* @__PURE__ */ React.createElement(Icon, { key: "i", name: props.icon, size: 14 }) : null,
|
|
32
|
-
/* @__PURE__ */ React.createElement("span", { key: "t", className: "aura-tag__text" }, props.children)
|
|
56
|
+
/* @__PURE__ */ React.createElement("span", { key: "t", ref: textRef, className: "aura-tag__text", title: fullText || void 0 }, props.children)
|
|
33
57
|
];
|
|
34
58
|
if (selectable) {
|
|
35
59
|
return /* @__PURE__ */ React.createElement(
|
|
@@ -57,16 +81,19 @@ const Tag = React.forwardRef(function Tag2(props, ref) {
|
|
|
57
81
|
"tag-remove-label",
|
|
58
82
|
'Tag: the remove button has no name \u2014 its children have no text. Pass removeLabel (e.g. "Remove Acme AB").'
|
|
59
83
|
);
|
|
60
|
-
return /* @__PURE__ */ React.createElement("span", { ...rest, ref, className: cx("aura-tag", props.disabled && "is-disabled", props.className) }, inner, props.onRemove && !props.disabled ?
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
84
|
+
return /* @__PURE__ */ React.createElement("span", { ...rest, ref, className: cx("aura-tag", props.disabled && "is-disabled", props.className) }, inner, props.onRemove && !props.disabled ? function() {
|
|
85
|
+
const btn = /* @__PURE__ */ React.createElement(
|
|
86
|
+
"button",
|
|
87
|
+
{
|
|
88
|
+
type: "button",
|
|
89
|
+
className: "aura-tag__remove",
|
|
90
|
+
"aria-label": props.removeLabel || t.remove(name),
|
|
91
|
+
onClick: props.onRemove
|
|
92
|
+
},
|
|
93
|
+
/* @__PURE__ */ React.createElement(Icon, { name: /* @__PURE__ */ React.createElement(IconX, null), size: 12 })
|
|
94
|
+
);
|
|
95
|
+
return /* @__PURE__ */ React.createElement(Tooltip, { content: fullText, open: fullText ? void 0 : false }, btn);
|
|
96
|
+
}() : null);
|
|
70
97
|
});
|
|
71
98
|
export {
|
|
72
99
|
Tag
|
package/dist/index.d.cts
CHANGED
|
@@ -236,11 +236,15 @@ export interface DataTableProps<Row extends Record<string, any> = Record<string,
|
|
|
236
236
|
density?: "comfortable" | "compact" | undefined;
|
|
237
237
|
/** Table width in px below which rows render as stacked cards (phones). Try 640. It follows the table's own width, not the window. Since 4.20 the cards are the same markup as the grid, laid out by a container query, so any width is right before hydration and each row is in the HTML once. With `height` (virtual rows) the server can only send the first screenful; the rest of the cards arrive on hydration. */
|
|
238
238
|
stackBelow?: number | undefined;
|
|
239
|
-
/** Edge to edge inside a Card (5.26, Chamber-OS 127):
|
|
240
|
-
*
|
|
241
|
-
*
|
|
239
|
+
/** Edge to edge inside a Card (5.26, Chamber-OS 127): anywhere in a Card's content — also inside your own wrappers,
|
|
240
|
+
* as long as they add no padding or frame and don't clip or scroll (5.27, 130) — the table spans the card's full inner width, no side borders
|
|
241
|
+
* or radius, keeping its header band and top rule. As a direct child that is the card's last content (no footer,
|
|
242
|
+
* nothing after it), or with `bleedEnd`, it drops its bottom rule and the card's radius closes it. Below the Card's
|
|
242
243
|
* `flushBelow` width, and outside a Card, it does nothing. */
|
|
243
244
|
bleed?: boolean | undefined;
|
|
245
|
+
/** With `bleed`: the table ends the card even though it sits inside your wrappers — no bottom rule, the card's radius
|
|
246
|
+
* closes it. Only when nothing follows it in the card and the Card has no `footer` (5.27). */
|
|
247
|
+
bleedEnd?: boolean | undefined;
|
|
244
248
|
/** `false` drops the frame — border and radius — keeping the header band and the 24px gutter, for a table that sits
|
|
245
249
|
* in a section without bleeding (5.26). Default `true`. */
|
|
246
250
|
bordered?: boolean | undefined;
|
|
@@ -433,6 +437,8 @@ export interface FormErrorSummaryProps {
|
|
|
433
437
|
/** An applied filter, shown as a removable chip. */
|
|
434
438
|
export interface ActiveFilter {
|
|
435
439
|
id: string;
|
|
440
|
+
/** The chip's text, "{filter}: {value}". It takes its own width in the chips row; only a chip wider than the row is
|
|
441
|
+
* cut, and then its full text shows on hover and on the remove button's focus (5.28). */
|
|
436
442
|
label: React$1.ReactNode;
|
|
437
443
|
onRemove: () => void;
|
|
438
444
|
}
|
|
@@ -1195,12 +1201,16 @@ export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableEl
|
|
|
1195
1201
|
/** `false` (5.13) drops the frame — border, radius, background — and the outer cells' side padding, so the table
|
|
1196
1202
|
* lines up with the content around it, e.g. flush inside a Card under its heading. Default `true`. */
|
|
1197
1203
|
bordered?: boolean | undefined;
|
|
1198
|
-
/** Edge to edge inside a Card (5.26, Chamber-OS 127):
|
|
1199
|
-
*
|
|
1200
|
-
*
|
|
1201
|
-
*
|
|
1202
|
-
*
|
|
1204
|
+
/** Edge to edge inside a Card (5.26, Chamber-OS 127): anywhere in a Card's content — also inside your own wrappers,
|
|
1205
|
+
* as long as they add no padding or frame and don't clip or scroll (5.27, 130) — the table spans the card's full inner width, no side borders
|
|
1206
|
+
* or radius, keeping its header band and top rule, and its 24px outer cells keep the text level with the card's
|
|
1207
|
+
* content. As a direct child that is the card's last content, or with `bleedEnd`, it drops its bottom rule and the
|
|
1208
|
+
* card's radius closes it. Below the Card's `flushBelow` width, and outside a Card, it does nothing. With
|
|
1209
|
+
* `bordered={false}` too, the outer cells take the card's padding while it bleeds. */
|
|
1203
1210
|
bleed?: boolean | undefined;
|
|
1211
|
+
/** With `bleed`: the table ends the card even though it sits inside your wrappers — only when nothing follows it in
|
|
1212
|
+
* the card and the Card has no `footer` (5.27). */
|
|
1213
|
+
bleedEnd?: boolean | undefined;
|
|
1204
1214
|
/** Keep the header row in view while the rows scroll (5.26, Chamber-OS 129), with its band, its bottom rule and
|
|
1205
1215
|
* above the body. Without `maxHeight` it pins to the page's scroll, under an AppShell's top bar
|
|
1206
1216
|
* (`--aura-shell-bar-height`; set `--aura-table-sticky-top` for another offset). A table wider than its box
|
|
@@ -1720,8 +1730,9 @@ export interface ContainerProps extends Pick<React$1.HTMLAttributes<HTMLElement>
|
|
|
1720
1730
|
* the page's start (5.26, Chamber-OS 126). Default `center`. */
|
|
1721
1731
|
align?: "center" | "start" | undefined;
|
|
1722
1732
|
as?: keyof React$1.JSX.IntrinsicElements | undefined;
|
|
1723
|
-
/** Utilities that set `max-width` or `
|
|
1724
|
-
* where a utility beats `.aura-container` (5.26).
|
|
1733
|
+
/** Utilities that set `max-width`, `margin` or `padding` (e.g. `max-w-[672px] mx-0`, your own gutter) are supported
|
|
1734
|
+
* with `styles.layer.css`, where a utility beats `.aura-container` (5.26; padding 5.27). Also exported from
|
|
1735
|
+
* `/server` for Server Components (5.27). */
|
|
1725
1736
|
className?: string | undefined;
|
|
1726
1737
|
style?: React$1.CSSProperties | undefined;
|
|
1727
1738
|
children?: React$1.ReactNode | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -236,11 +236,15 @@ export interface DataTableProps<Row extends Record<string, any> = Record<string,
|
|
|
236
236
|
density?: "comfortable" | "compact" | undefined;
|
|
237
237
|
/** Table width in px below which rows render as stacked cards (phones). Try 640. It follows the table's own width, not the window. Since 4.20 the cards are the same markup as the grid, laid out by a container query, so any width is right before hydration and each row is in the HTML once. With `height` (virtual rows) the server can only send the first screenful; the rest of the cards arrive on hydration. */
|
|
238
238
|
stackBelow?: number | undefined;
|
|
239
|
-
/** Edge to edge inside a Card (5.26, Chamber-OS 127):
|
|
240
|
-
*
|
|
241
|
-
*
|
|
239
|
+
/** Edge to edge inside a Card (5.26, Chamber-OS 127): anywhere in a Card's content — also inside your own wrappers,
|
|
240
|
+
* as long as they add no padding or frame and don't clip or scroll (5.27, 130) — the table spans the card's full inner width, no side borders
|
|
241
|
+
* or radius, keeping its header band and top rule. As a direct child that is the card's last content (no footer,
|
|
242
|
+
* nothing after it), or with `bleedEnd`, it drops its bottom rule and the card's radius closes it. Below the Card's
|
|
242
243
|
* `flushBelow` width, and outside a Card, it does nothing. */
|
|
243
244
|
bleed?: boolean | undefined;
|
|
245
|
+
/** With `bleed`: the table ends the card even though it sits inside your wrappers — no bottom rule, the card's radius
|
|
246
|
+
* closes it. Only when nothing follows it in the card and the Card has no `footer` (5.27). */
|
|
247
|
+
bleedEnd?: boolean | undefined;
|
|
244
248
|
/** `false` drops the frame — border and radius — keeping the header band and the 24px gutter, for a table that sits
|
|
245
249
|
* in a section without bleeding (5.26). Default `true`. */
|
|
246
250
|
bordered?: boolean | undefined;
|
|
@@ -433,6 +437,8 @@ export interface FormErrorSummaryProps {
|
|
|
433
437
|
/** An applied filter, shown as a removable chip. */
|
|
434
438
|
export interface ActiveFilter {
|
|
435
439
|
id: string;
|
|
440
|
+
/** The chip's text, "{filter}: {value}". It takes its own width in the chips row; only a chip wider than the row is
|
|
441
|
+
* cut, and then its full text shows on hover and on the remove button's focus (5.28). */
|
|
436
442
|
label: React$1.ReactNode;
|
|
437
443
|
onRemove: () => void;
|
|
438
444
|
}
|
|
@@ -1195,12 +1201,16 @@ export interface TableProps extends Omit<React$1.TableHTMLAttributes<HTMLTableEl
|
|
|
1195
1201
|
/** `false` (5.13) drops the frame — border, radius, background — and the outer cells' side padding, so the table
|
|
1196
1202
|
* lines up with the content around it, e.g. flush inside a Card under its heading. Default `true`. */
|
|
1197
1203
|
bordered?: boolean | undefined;
|
|
1198
|
-
/** Edge to edge inside a Card (5.26, Chamber-OS 127):
|
|
1199
|
-
*
|
|
1200
|
-
*
|
|
1201
|
-
*
|
|
1202
|
-
*
|
|
1204
|
+
/** Edge to edge inside a Card (5.26, Chamber-OS 127): anywhere in a Card's content — also inside your own wrappers,
|
|
1205
|
+
* as long as they add no padding or frame and don't clip or scroll (5.27, 130) — the table spans the card's full inner width, no side borders
|
|
1206
|
+
* or radius, keeping its header band and top rule, and its 24px outer cells keep the text level with the card's
|
|
1207
|
+
* content. As a direct child that is the card's last content, or with `bleedEnd`, it drops its bottom rule and the
|
|
1208
|
+
* card's radius closes it. Below the Card's `flushBelow` width, and outside a Card, it does nothing. With
|
|
1209
|
+
* `bordered={false}` too, the outer cells take the card's padding while it bleeds. */
|
|
1203
1210
|
bleed?: boolean | undefined;
|
|
1211
|
+
/** With `bleed`: the table ends the card even though it sits inside your wrappers — only when nothing follows it in
|
|
1212
|
+
* the card and the Card has no `footer` (5.27). */
|
|
1213
|
+
bleedEnd?: boolean | undefined;
|
|
1204
1214
|
/** Keep the header row in view while the rows scroll (5.26, Chamber-OS 129), with its band, its bottom rule and
|
|
1205
1215
|
* above the body. Without `maxHeight` it pins to the page's scroll, under an AppShell's top bar
|
|
1206
1216
|
* (`--aura-shell-bar-height`; set `--aura-table-sticky-top` for another offset). A table wider than its box
|
|
@@ -1720,8 +1730,9 @@ export interface ContainerProps extends Pick<React$1.HTMLAttributes<HTMLElement>
|
|
|
1720
1730
|
* the page's start (5.26, Chamber-OS 126). Default `center`. */
|
|
1721
1731
|
align?: "center" | "start" | undefined;
|
|
1722
1732
|
as?: keyof React$1.JSX.IntrinsicElements | undefined;
|
|
1723
|
-
/** Utilities that set `max-width` or `
|
|
1724
|
-
* where a utility beats `.aura-container` (5.26).
|
|
1733
|
+
/** Utilities that set `max-width`, `margin` or `padding` (e.g. `max-w-[672px] mx-0`, your own gutter) are supported
|
|
1734
|
+
* with `styles.layer.css`, where a utility beats `.aura-container` (5.26; padding 5.27). Also exported from
|
|
1735
|
+
* `/server` for Server Components (5.27). */
|
|
1725
1736
|
className?: string | undefined;
|
|
1726
1737
|
style?: React$1.CSSProperties | undefined;
|
|
1727
1738
|
children?: React$1.ReactNode | undefined;
|
package/dist/server/index.cjs
CHANGED
|
@@ -34,6 +34,7 @@ __export(server_exports, {
|
|
|
34
34
|
Avatar: () => ServerAvatar,
|
|
35
35
|
Badge: () => ServerBadge,
|
|
36
36
|
Card: () => ServerCard,
|
|
37
|
+
Container: () => Container,
|
|
37
38
|
EmptyState: () => ServerEmptyState,
|
|
38
39
|
Icon: () => Icon,
|
|
39
40
|
STRINGS: () => STRINGS,
|
|
@@ -605,14 +606,14 @@ var STRINGS = {
|
|
|
605
606
|
|
|
606
607
|
// src/theme.ts
|
|
607
608
|
function hexToRgb(hex) {
|
|
608
|
-
let
|
|
609
|
-
if (
|
|
610
|
-
|
|
609
|
+
let h4 = String(hex).trim().replace("#", "");
|
|
610
|
+
if (h4.length === 3)
|
|
611
|
+
h4 = h4.split("").map(function(c) {
|
|
611
612
|
return c + c;
|
|
612
613
|
}).join("");
|
|
613
|
-
if (!/^[0-9a-f]{6}$/i.test(
|
|
614
|
+
if (!/^[0-9a-f]{6}$/i.test(h4)) throw new Error('createTheme: "' + hex + '" is not a #rgb or #rrggbb colour');
|
|
614
615
|
return [0, 2, 4].map(function(i) {
|
|
615
|
-
return parseInt(
|
|
616
|
+
return parseInt(h4.slice(i, i + 2), 16) / 255;
|
|
616
617
|
});
|
|
617
618
|
}
|
|
618
619
|
function rgbToHex(rgb) {
|
|
@@ -1318,3 +1319,28 @@ function ServerStat(props) {
|
|
|
1318
1319
|
function ServerAvatar(props) {
|
|
1319
1320
|
return avatarElement(props, void 0, null, void 0);
|
|
1320
1321
|
}
|
|
1322
|
+
|
|
1323
|
+
// src/Container.tsx
|
|
1324
|
+
var React4 = __toESM(require("react"), 1);
|
|
1325
|
+
var h3 = React4.createElement;
|
|
1326
|
+
var Container = React4.forwardRef(function Container2(props, ref) {
|
|
1327
|
+
const attrs = {};
|
|
1328
|
+
Object.keys(props).forEach(function(k) {
|
|
1329
|
+
if (k === "id" || k === "lang" || k === "dir" || /^(aria|data)-/.test(k))
|
|
1330
|
+
attrs[k] = props[k];
|
|
1331
|
+
});
|
|
1332
|
+
return h3(
|
|
1333
|
+
props.as || "div",
|
|
1334
|
+
Object.assign(attrs, {
|
|
1335
|
+
ref,
|
|
1336
|
+
className: cx(
|
|
1337
|
+
"aura-container",
|
|
1338
|
+
props.size === "narrow" && "is-narrow",
|
|
1339
|
+
props.align === "start" && "is-start",
|
|
1340
|
+
props.className
|
|
1341
|
+
),
|
|
1342
|
+
style: props.style
|
|
1343
|
+
}),
|
|
1344
|
+
props.children
|
|
1345
|
+
);
|
|
1346
|
+
});
|
package/dist/server/index.d.cts
CHANGED
|
@@ -386,6 +386,24 @@ declare function ServerAvatar(props: AvatarProps): React$1.ReactElement;
|
|
|
386
386
|
* render names with `/server`'s Icon (the two entries keep separate registries). */
|
|
387
387
|
export declare function registerIcons(icons: readonly AuraIcon[]): void;
|
|
388
388
|
export declare const Icon: React$1.ForwardRefExoticComponent<IconProps & React$1.RefAttributes<SVGSVGElement>>;
|
|
389
|
+
/** Centred page column. To name it (`aria-label`), render a landmark with `as="section"` (or `main`, `nav`): a
|
|
390
|
+
* plain `div` may not carry a name. */
|
|
391
|
+
export interface ContainerProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir">, React$1.AriaAttributes, DataAttributes {
|
|
392
|
+
/** `narrow` caps it at aura-container-narrow (720px). Default `default` (1280px). */
|
|
393
|
+
size?: "default" | "narrow" | undefined;
|
|
394
|
+
/** `start` puts the column at the start edge (left; right in RTL) instead of centring it — a form board beside
|
|
395
|
+
* the page's start (5.26, Chamber-OS 126). Default `center`. */
|
|
396
|
+
align?: "center" | "start" | undefined;
|
|
397
|
+
as?: keyof React$1.JSX.IntrinsicElements | undefined;
|
|
398
|
+
/** Utilities that set `max-width`, `margin` or `padding` (e.g. `max-w-[672px] mx-0`, your own gutter) are supported
|
|
399
|
+
* with `styles.layer.css`, where a utility beats `.aura-container` (5.26; padding 5.27). Also exported from
|
|
400
|
+
* `/server` for Server Components (5.27). */
|
|
401
|
+
className?: string | undefined;
|
|
402
|
+
style?: React$1.CSSProperties | undefined;
|
|
403
|
+
children?: React$1.ReactNode | undefined;
|
|
404
|
+
}
|
|
405
|
+
/** Container — centres content up to aura-container-max (1280px) with responsive side padding. */
|
|
406
|
+
export declare const Container: React$1.ForwardRefExoticComponent<ContainerProps & React$1.RefAttributes<HTMLElement>>;
|
|
389
407
|
|
|
390
408
|
export {
|
|
391
409
|
ServerAlert as Alert,
|
package/dist/server/index.d.ts
CHANGED
|
@@ -386,6 +386,24 @@ declare function ServerAvatar(props: AvatarProps): React$1.ReactElement;
|
|
|
386
386
|
* render names with `/server`'s Icon (the two entries keep separate registries). */
|
|
387
387
|
export declare function registerIcons(icons: readonly AuraIcon[]): void;
|
|
388
388
|
export declare const Icon: React$1.ForwardRefExoticComponent<IconProps & React$1.RefAttributes<SVGSVGElement>>;
|
|
389
|
+
/** Centred page column. To name it (`aria-label`), render a landmark with `as="section"` (or `main`, `nav`): a
|
|
390
|
+
* plain `div` may not carry a name. */
|
|
391
|
+
export interface ContainerProps extends Pick<React$1.HTMLAttributes<HTMLElement>, "id" | "lang" | "dir">, React$1.AriaAttributes, DataAttributes {
|
|
392
|
+
/** `narrow` caps it at aura-container-narrow (720px). Default `default` (1280px). */
|
|
393
|
+
size?: "default" | "narrow" | undefined;
|
|
394
|
+
/** `start` puts the column at the start edge (left; right in RTL) instead of centring it — a form board beside
|
|
395
|
+
* the page's start (5.26, Chamber-OS 126). Default `center`. */
|
|
396
|
+
align?: "center" | "start" | undefined;
|
|
397
|
+
as?: keyof React$1.JSX.IntrinsicElements | undefined;
|
|
398
|
+
/** Utilities that set `max-width`, `margin` or `padding` (e.g. `max-w-[672px] mx-0`, your own gutter) are supported
|
|
399
|
+
* with `styles.layer.css`, where a utility beats `.aura-container` (5.26; padding 5.27). Also exported from
|
|
400
|
+
* `/server` for Server Components (5.27). */
|
|
401
|
+
className?: string | undefined;
|
|
402
|
+
style?: React$1.CSSProperties | undefined;
|
|
403
|
+
children?: React$1.ReactNode | undefined;
|
|
404
|
+
}
|
|
405
|
+
/** Container — centres content up to aura-container-max (1280px) with responsive side padding. */
|
|
406
|
+
export declare const Container: React$1.ForwardRefExoticComponent<ContainerProps & React$1.RefAttributes<HTMLElement>>;
|
|
389
407
|
|
|
390
408
|
export {
|
|
391
409
|
ServerAlert as Alert,
|
package/dist/server/index.js
CHANGED
|
@@ -546,14 +546,14 @@ var STRINGS = {
|
|
|
546
546
|
|
|
547
547
|
// src/theme.ts
|
|
548
548
|
function hexToRgb(hex) {
|
|
549
|
-
let
|
|
550
|
-
if (
|
|
551
|
-
|
|
549
|
+
let h4 = String(hex).trim().replace("#", "");
|
|
550
|
+
if (h4.length === 3)
|
|
551
|
+
h4 = h4.split("").map(function(c) {
|
|
552
552
|
return c + c;
|
|
553
553
|
}).join("");
|
|
554
|
-
if (!/^[0-9a-f]{6}$/i.test(
|
|
554
|
+
if (!/^[0-9a-f]{6}$/i.test(h4)) throw new Error('createTheme: "' + hex + '" is not a #rgb or #rrggbb colour');
|
|
555
555
|
return [0, 2, 4].map(function(i) {
|
|
556
|
-
return parseInt(
|
|
556
|
+
return parseInt(h4.slice(i, i + 2), 16) / 255;
|
|
557
557
|
});
|
|
558
558
|
}
|
|
559
559
|
function rgbToHex(rgb) {
|
|
@@ -1259,11 +1259,37 @@ function ServerStat(props) {
|
|
|
1259
1259
|
function ServerAvatar(props) {
|
|
1260
1260
|
return avatarElement(props, void 0, null, void 0);
|
|
1261
1261
|
}
|
|
1262
|
+
|
|
1263
|
+
// src/Container.tsx
|
|
1264
|
+
import * as React4 from "react";
|
|
1265
|
+
var h3 = React4.createElement;
|
|
1266
|
+
var Container = React4.forwardRef(function Container2(props, ref) {
|
|
1267
|
+
const attrs = {};
|
|
1268
|
+
Object.keys(props).forEach(function(k) {
|
|
1269
|
+
if (k === "id" || k === "lang" || k === "dir" || /^(aria|data)-/.test(k))
|
|
1270
|
+
attrs[k] = props[k];
|
|
1271
|
+
});
|
|
1272
|
+
return h3(
|
|
1273
|
+
props.as || "div",
|
|
1274
|
+
Object.assign(attrs, {
|
|
1275
|
+
ref,
|
|
1276
|
+
className: cx(
|
|
1277
|
+
"aura-container",
|
|
1278
|
+
props.size === "narrow" && "is-narrow",
|
|
1279
|
+
props.align === "start" && "is-start",
|
|
1280
|
+
props.className
|
|
1281
|
+
),
|
|
1282
|
+
style: props.style
|
|
1283
|
+
}),
|
|
1284
|
+
props.children
|
|
1285
|
+
);
|
|
1286
|
+
});
|
|
1262
1287
|
export {
|
|
1263
1288
|
ServerAlert as Alert,
|
|
1264
1289
|
ServerAvatar as Avatar,
|
|
1265
1290
|
ServerBadge as Badge,
|
|
1266
1291
|
ServerCard as Card,
|
|
1292
|
+
Container,
|
|
1267
1293
|
ServerEmptyState as EmptyState,
|
|
1268
1294
|
Icon,
|
|
1269
1295
|
STRINGS,
|
package/dist/styles.css
CHANGED
|
@@ -321,6 +321,7 @@ a.aura-icon-btn { text-decoration: none; }
|
|
|
321
321
|
.aura-btn.aura-btn--touch.aura-btn--full { height: auto; min-height: var(--aura-touch-target); }
|
|
322
322
|
.aura-icon-btn.aura-icon-btn--touch { width: var(--aura-touch-target); height: var(--aura-touch-target); }
|
|
323
323
|
.aura-tag.aura-tag--touch { min-height: var(--aura-touch-target); }
|
|
324
|
+
.aura-filterbar__clear { min-height: var(--aura-touch-target); } /* 5.28 (Chamber-OS 133) */
|
|
324
325
|
}
|
|
325
326
|
/* Touch: same 32px look, a 44px hit area around it (WCAG 2.5.5). */
|
|
326
327
|
@media (pointer: coarse) {
|
|
@@ -662,21 +663,22 @@ a.aura-icon-btn { text-decoration: none; }
|
|
|
662
663
|
@media (max-width: 639.98px) { .aura-card.aura-card--flush-below-sm, .aura-card.aura-card--flush-below-sm:hover { border-color: transparent; background: transparent; box-shadow: none; --aura-card-bleed: 0px; } }
|
|
663
664
|
@media (max-width: 767.98px) { .aura-card.aura-card--flush-below-md, .aura-card.aura-card--flush-below-md:hover { border-color: transparent; background: transparent; box-shadow: none; --aura-card-bleed: 0px; } }
|
|
664
665
|
@media (max-width: 1023.98px) { .aura-card.aura-card--flush-below-lg, .aura-card.aura-card--flush-below-lg:hover { border-color: transparent; background: transparent; box-shadow: none; --aura-card-bleed: 0px; } }
|
|
665
|
-
/* 5.26 (Chamber-OS 127): bleed — a table
|
|
666
|
+
/* 5.26 (Chamber-OS 127): bleed — a table anywhere in a Card's content (5.27, 130: through the app's own unpadded
|
|
667
|
+
* wrappers; a nested Card resets the reach) spans its inner width; the side
|
|
666
668
|
* borders and radius go (a 0px bleed — a flush card — keeps them: 1px - min(1px, 0) = 1px). As the card's last content
|
|
667
669
|
* it also drops its bottom rule and the card's radius closes it. */
|
|
668
670
|
/* Two classes deep so it beats a stackable Table's width: 100%. `* 1000` turns any bleed into a 0 radius; 0 keeps it. */
|
|
669
|
-
.aura-card .aura-card__body
|
|
671
|
+
.aura-card .aura-card__body .aura-bleed { margin-inline: calc(-1 * var(--aura-card-bleed)); width: auto; }
|
|
670
672
|
/* A Table with bordered={false} too: its outer cells take the bleed (0 where the card is flush, as before). */
|
|
671
|
-
.aura-card__body
|
|
672
|
-
.aura-card__body
|
|
673
|
-
.aura-card__body
|
|
674
|
-
.aura-card__body
|
|
675
|
-
.aura-card__body
|
|
673
|
+
.aura-card__body .aura-bleed .aura-tbl-wrap.is-flush > .aura-tbl > * > .aura-tbl__row > :first-child,
|
|
674
|
+
.aura-card__body .aura-bleed.aura-tbl-wrap.is-flush > .aura-tbl > * > .aura-tbl__row > :first-child { padding-inline-start: var(--aura-card-bleed); }
|
|
675
|
+
.aura-card__body .aura-bleed .aura-tbl-wrap.is-flush > .aura-tbl > * > .aura-tbl__row > :last-child,
|
|
676
|
+
.aura-card__body .aura-bleed.aura-tbl-wrap.is-flush > .aura-tbl > * > .aura-tbl__row > :last-child { padding-inline-end: var(--aura-card-bleed); }
|
|
677
|
+
.aura-card__body .aura-bleed.aura-bleed-frame, .aura-card__body .aura-bleed .aura-bleed-frame {
|
|
676
678
|
border-inline-width: calc(1px - min(1px, var(--aura-card-bleed))); border-radius: max(0px, var(--aura-card-radius) - var(--aura-card-bleed) * 1000);
|
|
677
679
|
}
|
|
678
|
-
.aura-card__body:last-child > .aura-bleed:last-child { margin-bottom: calc(-1 * var(--aura-card-bleed)); }
|
|
679
|
-
.aura-card__body:last-child > .aura-bleed:last-child.aura-bleed-frame, .aura-card__body:last-child > .aura-bleed:last-child .aura-bleed-frame {
|
|
680
|
+
:is(.aura-card__body:last-child > .aura-bleed:last-child, .aura-card__body:last-child .aura-bleed.aura-bleed-end) { margin-bottom: calc(-1 * var(--aura-card-bleed)); }
|
|
681
|
+
:is(.aura-card__body:last-child > .aura-bleed:last-child, .aura-card__body:last-child .aura-bleed.aura-bleed-end).aura-bleed-frame, :is(.aura-card__body:last-child > .aura-bleed:last-child, .aura-card__body:last-child .aura-bleed.aura-bleed-end) .aura-bleed-frame {
|
|
680
682
|
border-bottom-width: calc(1px - min(1px, var(--aura-card-bleed)));
|
|
681
683
|
border-bottom-left-radius: calc(var(--aura-card-radius) - min(1px, var(--aura-card-bleed)));
|
|
682
684
|
border-bottom-right-radius: calc(var(--aura-card-radius) - min(1px, var(--aura-card-bleed)));
|
|
@@ -1502,6 +1504,12 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1502
1504
|
.aura-filterbar__count { font-size: 13px; color: var(--aura-fg-secondary); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
1503
1505
|
.aura-filterbar__actions { display: flex; align-items: center; gap: var(--aura-space-2); }
|
|
1504
1506
|
.aura-filterbar__chips { display: flex; flex-wrap: wrap; align-items: center; gap: var(--aura-space-2); }
|
|
1507
|
+
/* 5.28 (Chamber-OS 132): an applied-filter chip takes its text's width, cut only when it is wider than the row. */
|
|
1508
|
+
.aura-filterbar__chips > .aura-tag { max-width: 100%; min-width: 0; }
|
|
1509
|
+
/* A long chip mustn't widen the bar or anything around it: the row's width comes from the bar, never from its chips.
|
|
1510
|
+
* (So a FilterBar with only chips needs a width from its parent — it is full width in a block.) */
|
|
1511
|
+
.aura-filterbar__chips { contain: inline-size; }
|
|
1512
|
+
.aura-filterbar__chips > .aura-tag .aura-tag__text { max-width: none; min-width: 0; }
|
|
1505
1513
|
.aura-filterbar__clear {
|
|
1506
1514
|
border: 0; background: transparent; padding: 4px var(--aura-space-2); border-radius: var(--aura-radius-sm);
|
|
1507
1515
|
font: inherit; font-size: 13px; font-weight: 500; color: var(--aura-fg-accent); cursor: pointer; text-decoration: underline; text-underline-offset: 2px;
|
|
@@ -1788,7 +1796,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1788
1796
|
display: block; margin-bottom: 2px; font-family: var(--font-mono); font-size: 11px; line-height: 16px; font-weight: 400; color: var(--aura-fg-secondary);
|
|
1789
1797
|
}
|
|
1790
1798
|
/* 5.26: a bleeding list keeps its rows' text level with the Card's content (16px where it doesn't bleed). */
|
|
1791
|
-
.aura-card__body
|
|
1799
|
+
.aura-card__body .aura-bleed.aura-bleed-frame > .aura-tbl--stack-md:not(.aura-tbl--cards) > * > .aura-tbl__row, .aura-card__body .aura-bleed > .aura-bleed-frame > .aura-tbl--stack-md:not(.aura-tbl--cards) > * > .aura-tbl__row { padding-inline: max(var(--aura-card-bleed), var(--aura-space-4) - var(--aura-card-bleed) * 1000); }
|
|
1792
1800
|
}
|
|
1793
1801
|
@container aura-tbl (width < 640px) {
|
|
1794
1802
|
.aura-tbl--stack-sm, .aura-tbl--stack-sm > .aura-tbl__body, .aura-tbl--stack-sm > .aura-tbl__foot, .aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row, .aura-tbl--stack-sm > .aura-tbl__foot > .aura-tbl__row, .aura-tbl--stack-sm > * > .aura-tbl__row > .aura-tbl__th, .aura-tbl--stack-sm > * > .aura-tbl__row > .aura-tbl__td { display: block; }
|
|
@@ -1812,7 +1820,7 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1812
1820
|
display: block; margin-bottom: 2px; font-family: var(--font-mono); font-size: 11px; line-height: 16px; font-weight: 400; color: var(--aura-fg-secondary);
|
|
1813
1821
|
}
|
|
1814
1822
|
/* 5.26: a bleeding list keeps its rows' text level with the Card's content (16px where it doesn't bleed). */
|
|
1815
|
-
.aura-card__body
|
|
1823
|
+
.aura-card__body .aura-bleed.aura-bleed-frame > .aura-tbl--stack-sm:not(.aura-tbl--cards) > * > .aura-tbl__row, .aura-card__body .aura-bleed > .aura-bleed-frame > .aura-tbl--stack-sm:not(.aura-tbl--cards) > * > .aura-tbl__row { padding-inline: max(var(--aura-card-bleed), var(--aura-space-4) - var(--aura-card-bleed) * 1000); }
|
|
1816
1824
|
}
|
|
1817
1825
|
|
|
1818
1826
|
/* 5.15 (Chamber-OS 85): stackStyle="cards" — each stacked row its own card (DataTable's card spacing), no outer frame.
|
|
@@ -1820,8 +1828,8 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1820
1828
|
.aura-tbl-cards { container: aura-tbl / inline-size; width: 100%; }
|
|
1821
1829
|
@container aura-tbl (width < 768px) {
|
|
1822
1830
|
.aura-tbl-cards--md > .aura-tbl-wrap { border: 0; border-radius: 0; background: transparent; overflow: visible; }
|
|
1823
|
-
.aura-card__body
|
|
1824
|
-
.aura-card__body:last-child > .aura-bleed:last-child .aura-bleed-frame > .aura-tbl--cards.aura-tbl--stack-md { padding-bottom: var(--aura-card-bleed); }
|
|
1831
|
+
.aura-card__body .aura-bleed.aura-bleed-frame > .aura-tbl--cards.aura-tbl--stack-md, .aura-card__body .aura-bleed > .aura-bleed-frame > .aura-tbl--cards.aura-tbl--stack-md { padding-inline: var(--aura-card-bleed); }
|
|
1832
|
+
:is(.aura-card__body:last-child > .aura-bleed:last-child, .aura-card__body:last-child .aura-bleed.aura-bleed-end) .aura-bleed-frame > .aura-tbl--cards.aura-tbl--stack-md { padding-bottom: var(--aura-card-bleed); }
|
|
1825
1833
|
.aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
|
|
1826
1834
|
.aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__body > .aura-tbl__row, .aura-tbl--cards.aura-tbl--stack-md > .aura-tbl__foot > .aura-tbl__row {
|
|
1827
1835
|
margin-bottom: var(--aura-space-2); padding: var(--aura-tbl-card-py, var(--aura-space-4)) var(--aura-space-4);
|
|
@@ -1833,8 +1841,8 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1833
1841
|
}
|
|
1834
1842
|
@container aura-tbl (width < 640px) {
|
|
1835
1843
|
.aura-tbl-cards--sm > .aura-tbl-wrap { border: 0; border-radius: 0; background: transparent; overflow: visible; }
|
|
1836
|
-
.aura-card__body
|
|
1837
|
-
.aura-card__body:last-child > .aura-bleed:last-child .aura-bleed-frame > .aura-tbl--cards.aura-tbl--stack-sm { padding-bottom: var(--aura-card-bleed); }
|
|
1844
|
+
.aura-card__body .aura-bleed.aura-bleed-frame > .aura-tbl--cards.aura-tbl--stack-sm, .aura-card__body .aura-bleed > .aura-bleed-frame > .aura-tbl--cards.aura-tbl--stack-sm { padding-inline: var(--aura-card-bleed); }
|
|
1845
|
+
:is(.aura-card__body:last-child > .aura-bleed:last-child, .aura-card__body:last-child .aura-bleed.aura-bleed-end) .aura-bleed-frame > .aura-tbl--cards.aura-tbl--stack-sm { padding-bottom: var(--aura-card-bleed); }
|
|
1838
1846
|
.aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__caption { padding: 0 0 var(--aura-space-3); }
|
|
1839
1847
|
.aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__body > .aura-tbl__row, .aura-tbl--cards.aura-tbl--stack-sm > .aura-tbl__foot > .aura-tbl__row {
|
|
1840
1848
|
margin-bottom: var(--aura-space-2); padding: var(--aura-tbl-card-py, var(--aura-space-4)) var(--aura-space-4);
|
|
@@ -1865,8 +1873,8 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
|
|
|
1865
1873
|
@container aura-stack (width < 9999.5px) {
|
|
1866
1874
|
.aura-table { background: transparent; border: 0; border-radius: 0; overflow: visible; }
|
|
1867
1875
|
/* 5.26: stacked cards inside a framed Card keep its padding (0 where the Card is flush). */
|
|
1868
|
-
.aura-card__body
|
|
1869
|
-
.aura-card__body:last-child > .aura-bleed:last-child .aura-bleed-frame { padding-bottom: var(--aura-card-bleed); }
|
|
1876
|
+
.aura-card__body .aura-bleed .aura-bleed-frame { padding-inline: var(--aura-card-bleed); }
|
|
1877
|
+
:is(.aura-card__body:last-child > .aura-bleed:last-child, .aura-card__body:last-child .aura-bleed.aura-bleed-end) .aura-bleed-frame { padding-bottom: var(--aura-card-bleed); }
|
|
1870
1878
|
.aura-table__scroll { overflow: visible; height: auto; }
|
|
1871
1879
|
.aura-table__busy-bar { top: 0; }
|
|
1872
1880
|
.aura-table__picker { display: none; }
|