@jirawatpyk/aura-tokens 5.0.0 → 5.1.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/GOVERNANCE.md CHANGED
@@ -43,6 +43,7 @@ Semver `MAJOR.MINOR.PATCH`:
43
43
  Made by the design-system owner in one pass, instead of separate Proposals. Each change is marked ADDED in its token note.
44
44
 
45
45
  - **Status palette adopted.** Four tones (neutral, progress, ready, blocked). `aura-red-700` is the only warm hue for state, chosen dark so Ready (lime-200) and Blocked differ by lightness (5.5:1), not only by hue.
46
+ - **5.1: a fifth tone, warning** (from DxT Monitor: a monitored host with a problem that still works). Solid amber — amber-600 light, amber-500 dark, ink label — so it differs from Ready and Blocked by lightness as well as hue (light 2.7:1 and 2.0:1). Amber stays the warning hue only: the warning alert and this pill.
46
47
  - **Alert palette adopted.** Info (violet), success (lime), warning (amber), danger (red), each with its own fill, edge and text for light and dark. Amber is limited to warning.
47
48
  - **Lucide adopted** as the only icon set, 52 icons. New icons come from Lucide unchanged.
48
49
  - **Focus ring adopted**: 2px violet, 2px offset, on every interactive element.
package/aura-tailwind.css CHANGED
@@ -1,4 +1,4 @@
1
- /* AURA v5.0.0 — Tailwind v4 theme. GENERATED by scripts/build-tokens.js from tokens.json. Do not edit by hand.
1
+ /* AURA v5.1.0 — Tailwind v4 theme. GENERATED by scripts/build-tokens.js from tokens.json. Do not edit by hand.
2
2
  * @import "tailwindcss";
3
3
  * @import "@jirawatpyk/aura-tokens/tailwind.css";
4
4
  * Gives bg-bg-surface, text-fg-primary, border-border-strong, p-aura-6, rounded-aura-xl, shadow-aura-overlay,
@@ -50,6 +50,8 @@
50
50
  --color-aura-amber-50: var(--aura-amber-50);
51
51
  --color-aura-amber-200: var(--aura-amber-200);
52
52
  --color-aura-amber-300: var(--aura-amber-300);
53
+ --color-aura-amber-500: var(--aura-amber-500);
54
+ --color-aura-amber-600: var(--aura-amber-600);
53
55
  --color-aura-amber-800: var(--aura-amber-800);
54
56
  --color-aura-ink: var(--aura-ink);
55
57
  --color-aura-white: var(--aura-white);
@@ -89,6 +91,8 @@
89
91
  --color-status-ready-fg: var(--aura-status-ready-fg);
90
92
  --color-status-blocked-bg: var(--aura-status-blocked-bg);
91
93
  --color-status-blocked-fg: var(--aura-status-blocked-fg);
94
+ --color-status-warning-bg: var(--aura-status-warning-bg);
95
+ --color-status-warning-fg: var(--aura-status-warning-fg);
92
96
  --color-chart-1: var(--aura-chart-1);
93
97
  --color-chart-2: var(--aura-chart-2);
94
98
  --color-chart-3: var(--aura-chart-3);
@@ -1,4 +1,4 @@
1
- /* AURA v5.0.0 — Tailwind v4 theme with aura- prefixed names. GENERATED by scripts/build-tokens.js. Do not edit by hand.
1
+ /* AURA v5.1.0 — Tailwind v4 theme with aura- prefixed names. GENERATED by scripts/build-tokens.js. Do not edit by hand.
2
2
  * For apps that already have a Tailwind theme (shadcn): nothing here redefines an existing name.
3
3
  * @layer aura-tokens, theme, base, aura, components, utilities;
4
4
  * @import "tailwindcss";
@@ -50,6 +50,8 @@
50
50
  --color-aura-amber-50: var(--aura-amber-50);
51
51
  --color-aura-amber-200: var(--aura-amber-200);
52
52
  --color-aura-amber-300: var(--aura-amber-300);
53
+ --color-aura-amber-500: var(--aura-amber-500);
54
+ --color-aura-amber-600: var(--aura-amber-600);
53
55
  --color-aura-amber-800: var(--aura-amber-800);
54
56
  --color-aura-ink: var(--aura-ink);
55
57
  --color-aura-white: var(--aura-white);
@@ -89,6 +91,8 @@
89
91
  --color-aura-status-ready-fg: var(--aura-status-ready-fg);
90
92
  --color-aura-status-blocked-bg: var(--aura-status-blocked-bg);
91
93
  --color-aura-status-blocked-fg: var(--aura-status-blocked-fg);
94
+ --color-aura-status-warning-bg: var(--aura-status-warning-bg);
95
+ --color-aura-status-warning-fg: var(--aura-status-warning-fg);
92
96
  --color-aura-chart-1: var(--aura-chart-1);
93
97
  --color-aura-chart-2: var(--aura-chart-2);
94
98
  --color-aura-chart-3: var(--aura-chart-3);
package/aura.css CHANGED
@@ -1,4 +1,4 @@
1
- /* AURA v5.0.0 — GENERATED by scripts/build-tokens.js from tokens.json. Do not edit by hand. */
1
+ /* AURA v5.1.0 — GENERATED by scripts/build-tokens.js from tokens.json. Do not edit by hand. */
2
2
  /* Fonts: load aura-fonts.css (or the <link> tags in README) separately, so a blocked Google Fonts never breaks this file. */
3
3
 
4
4
  :root, [data-theme="light"] {
@@ -43,6 +43,8 @@
43
43
  --aura-amber-50: #fffbeb;
44
44
  --aura-amber-200: #fde68a;
45
45
  --aura-amber-300: #fcd34d;
46
+ --aura-amber-500: #f59e0b;
47
+ --aura-amber-600: #d97706;
46
48
  --aura-amber-800: #92400e;
47
49
  --aura-ink: #08080a;
48
50
  --aura-white: #ffffff;
@@ -76,6 +78,8 @@
76
78
  --aura-status-ready-fg: var(--aura-ink);
77
79
  --aura-status-blocked-bg: var(--aura-red-700);
78
80
  --aura-status-blocked-fg: var(--aura-white);
81
+ --aura-status-warning-bg: var(--aura-amber-600);
82
+ --aura-status-warning-fg: var(--aura-ink);
79
83
  --aura-bg-selected: var(--aura-violet-50);
80
84
  --aura-border-control: var(--aura-zinc-500);
81
85
  --aura-bg-skeleton: var(--aura-zinc-200);
@@ -154,6 +158,7 @@
154
158
  --aura-status-progress-fg: var(--aura-violet-300);
155
159
  --aura-status-ready-bg: #2b351f;
156
160
  --aura-status-ready-fg: var(--aura-lime-300);
161
+ --aura-status-warning-bg: var(--aura-amber-500);
157
162
  --aura-bg-selected: #2c283a;
158
163
  --aura-border-control: var(--aura-zinc-400);
159
164
  --aura-bg-skeleton: var(--aura-zinc-700);
@@ -223,6 +228,7 @@
223
228
  --aura-status-progress-fg: var(--aura-violet-300);
224
229
  --aura-status-ready-bg: #2b351f;
225
230
  --aura-status-ready-fg: var(--aura-lime-300);
231
+ --aura-status-warning-bg: var(--aura-amber-500);
226
232
  --aura-bg-selected: #2c283a;
227
233
  --aura-border-control: var(--aura-zinc-400);
228
234
  --aura-bg-skeleton: var(--aura-zinc-700);
@@ -227,10 +227,23 @@ window.Aura = (() => {
227
227
  function tone(t) {
228
228
  return TONES.indexOf(t) >= 0 ? t : "neutral";
229
229
  }
230
+ var warned = {};
231
+ function devWarnOnce(key, message) {
232
+ if (warned[key]) return;
233
+ let dev = false;
234
+ try {
235
+ dev = true;
236
+ } catch (e) {
237
+ dev = false;
238
+ }
239
+ if (!dev) return;
240
+ warned[key] = true;
241
+ console.warn("[AURA] " + message);
242
+ }
230
243
 
231
244
  // src/Icon.tsx
232
245
  var h = React2.createElement;
233
- var ICONS = { "check": [["path", { "d": "M20 6 9 17l-5-5" }]], "x": [["path", { "d": "M18 6 6 18" }], ["path", { "d": "m6 6 12 12" }]], "plus": [["path", { "d": "M5 12h14" }], ["path", { "d": "M12 5v14" }]], "minus": [["path", { "d": "M5 12h14" }]], "search": [["path", { "d": "m21 21-4.34-4.34" }], ["circle", { "cx": "11", "cy": "11", "r": "8" }]], "chevron-down": [["path", { "d": "m6 9 6 6 6-6" }]], "chevron-up": [["path", { "d": "m18 15-6-6-6 6" }]], "chevron-left": [["path", { "d": "m15 18-6-6 6-6" }]], "chevron-right": [["path", { "d": "m9 18 6-6-6-6" }]], "arrow-right": [["path", { "d": "M5 12h14" }], ["path", { "d": "m12 5 7 7-7 7" }]], "arrow-up-right": [["path", { "d": "M7 7h10v10" }], ["path", { "d": "M7 17 17 7" }]], "arrow-up-down": [["path", { "d": "m21 16-4 4-4-4" }], ["path", { "d": "M17 20V4" }], ["path", { "d": "m3 8 4-4 4 4" }], ["path", { "d": "M7 4v16" }]], "loader-circle": [["path", { "d": "M21 12a9 9 0 1 1-6.219-8.56" }]], "circle-alert": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["line", { "x1": "12", "x2": "12", "y1": "8", "y2": "12" }], ["line", { "x1": "12", "x2": "12.01", "y1": "16", "y2": "16" }]], "circle-check": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "m16 9-5.5 5.5L8 12" }]], "info": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 16v-4" }], ["path", { "d": "M12 8h.01" }]], "triangle-alert": [["path", { "d": "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }], ["path", { "d": "M12 9v4" }], ["path", { "d": "M12 17h.01" }]], "settings": [["path", { "d": "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }]], "user": [["path", { "d": "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }], ["circle", { "cx": "12", "cy": "7", "r": "4" }]], "users": [["path", { "d": "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }], ["path", { "d": "M16 3.128a4 4 0 0 1 0 7.744" }], ["path", { "d": "M22 21v-2a4 4 0 0 0-3-3.87" }], ["circle", { "cx": "9", "cy": "7", "r": "4" }]], "filter": [["path", { "d": "M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z" }]], "ellipsis": [["circle", { "cx": "12", "cy": "12", "r": "1" }], ["circle", { "cx": "19", "cy": "12", "r": "1" }], ["circle", { "cx": "5", "cy": "12", "r": "1" }]], "external-link": [["path", { "d": "M15 3h6v6" }], ["path", { "d": "M10 14 21 3" }], ["path", { "d": "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }]], "copy": [["rect", { "width": "14", "height": "14", "x": "8", "y": "8", "rx": "2", "ry": "2" }], ["path", { "d": "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" }]], "trash-2": [["path", { "d": "M10 11v6" }], ["path", { "d": "M14 11v6" }], ["path", { "d": "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }], ["path", { "d": "M3 6h18" }], ["path", { "d": "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }]], "pencil": [["path", { "d": "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" }], ["path", { "d": "m15 5 4 4" }]], "download": [["path", { "d": "M12 15V3" }], ["path", { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }], ["path", { "d": "m7 10 5 5 5-5" }]], "upload": [["path", { "d": "M12 3v12" }], ["path", { "d": "m17 8-5-5-5 5" }], ["path", { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }]], "calendar": [["path", { "d": "M8 2v3" }], ["path", { "d": "M16 2v3" }], ["rect", { "x": "3", "y": "3", "width": "18", "height": "18", "rx": "2" }], ["path", { "d": "M3 9h18" }]], "bell": [["path", { "d": "M10.268 21a2 2 0 0 0 3.464 0" }], ["path", { "d": "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" }]], "menu": [["path", { "d": "M4 5h16" }], ["path", { "d": "M4 12h16" }], ["path", { "d": "M4 19h16" }]], "eye": [["path", { "d": "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }]], "log-out": [["path", { "d": "m16 17 5-5-5-5" }], ["path", { "d": "M21 12H9" }], ["path", { "d": "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }]], "circle": [["circle", { "cx": "12", "cy": "12", "r": "10" }]], "circle-dot-dashed": [["path", { "d": "M10.1 2.18a9.93 9.93 0 0 1 3.8 0" }], ["path", { "d": "M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7" }], ["path", { "d": "M21.82 10.1a9.93 9.93 0 0 1 0 3.8" }], ["path", { "d": "M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69" }], ["path", { "d": "M13.9 21.82a9.94 9.94 0 0 1-3.8 0" }], ["path", { "d": "M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7" }], ["path", { "d": "M2.18 13.9a9.93 9.93 0 0 1 0-3.8" }], ["path", { "d": "M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69" }], ["circle", { "cx": "12", "cy": "12", "r": "1" }]], "ban": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M4.929 4.929 19.07 19.071" }]], "arrow-up": [["path", { "d": "m5 12 7-7 7 7" }], ["path", { "d": "M12 19V5" }]], "arrow-down": [["path", { "d": "M12 5v14" }], ["path", { "d": "m19 12-7 7-7-7" }]], "inbox": [["polyline", { "points": "22 12 16 12 14 15 10 15 8 12 2 12" }], ["path", { "d": "M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" }]], "pin": [["path", { "d": "M12 17v5" }], ["path", { "d": "M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z" }]], "pin-off": [["path", { "d": "M12 17v5" }], ["path", { "d": "M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89" }], ["path", { "d": "m2 2 20 20" }], ["path", { "d": "M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11" }]], "eye-off": [["path", { "d": "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" }], ["path", { "d": "M14.084 14.158a3 3 0 0 1-4.242-4.242" }], ["path", { "d": "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" }], ["path", { "d": "m2 2 20 20" }]], "columns-3": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "M15 3v18" }]], "arrow-left": [["path", { "d": "m12 19-7-7 7-7" }], ["path", { "d": "M19 12H5" }]], "rotate-ccw": [["path", { "d": "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }], ["path", { "d": "M3 3v5h5" }]], "house": [["path", { "d": "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" }], ["path", { "d": "M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }]], "layout-dashboard": [["rect", { "width": "7", "height": "9", "x": "3", "y": "3", "rx": "1" }], ["rect", { "width": "7", "height": "5", "x": "14", "y": "3", "rx": "1" }], ["rect", { "width": "7", "height": "9", "x": "14", "y": "12", "rx": "1" }], ["rect", { "width": "7", "height": "5", "x": "3", "y": "16", "rx": "1" }]], "folder": [["path", { "d": "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }]], "chart-column": [["path", { "d": "M3 3v16a2 2 0 0 0 2 2h16" }], ["path", { "d": "M18 17V9" }], ["path", { "d": "M13 17V5" }], ["path", { "d": "M8 17v-3" }]], "file-text": [["path", { "d": "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }], ["path", { "d": "M14 2v5a1 1 0 0 0 1 1h5" }], ["path", { "d": "M10 9H8" }], ["path", { "d": "M16 13H8" }], ["path", { "d": "M16 17H8" }]], "mail": [["path", { "d": "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" }], ["rect", { "x": "2", "y": "4", "width": "20", "height": "16", "rx": "2" }]], "lock": [["rect", { "width": "18", "height": "11", "x": "3", "y": "11", "rx": "2", "ry": "2" }], ["path", { "d": "M7 11V7a5 5 0 0 1 10 0v4" }]], "clock": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 6v6l4 2" }]], "trending-up": [["path", { "d": "M16 7h6v6" }], ["path", { "d": "m22 7-8.5 8.5-5-5L2 17" }]], "trending-down": [["path", { "d": "M16 17h6v-6" }], ["path", { "d": "m22 17-8.5-8.5-5 5L2 7" }]], "image": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2", "ry": "2" }], ["circle", { "cx": "9", "cy": "9", "r": "2" }], ["path", { "d": "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" }]], "paperclip": [["path", { "d": "m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551" }]], "cloud-upload": [["path", { "d": "M12 13v8" }], ["path", { "d": "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }], ["path", { "d": "m8 17 4-4 4 4" }]], "file": [["path", { "d": "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }], ["path", { "d": "M14 2v5a1 1 0 0 0 1 1h5" }]], "sun": [["circle", { "cx": "12", "cy": "12", "r": "4" }], ["path", { "d": "M12 2v2" }], ["path", { "d": "M12 20v2" }], ["path", { "d": "m4.93 4.93 1.41 1.41" }], ["path", { "d": "m17.66 17.66 1.41 1.41" }], ["path", { "d": "M2 12h2" }], ["path", { "d": "M20 12h2" }], ["path", { "d": "m6.34 17.66-1.41 1.41" }], ["path", { "d": "m19.07 4.93-1.41 1.41" }]], "moon": [["path", { "d": "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }]], "monitor": [["rect", { "width": "20", "height": "14", "x": "2", "y": "3", "rx": "2" }], ["line", { "x1": "8", "x2": "16", "y1": "21", "y2": "21" }], ["line", { "x1": "12", "x2": "12", "y1": "17", "y2": "21" }]], "panel-left-close": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "m16 15-3-3 3-3" }]], "panel-left-open": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "m14 9 3 3-3 3" }]] };
246
+ var ICONS = { "check": [["path", { "d": "M20 6 9 17l-5-5" }]], "x": [["path", { "d": "M18 6 6 18" }], ["path", { "d": "m6 6 12 12" }]], "plus": [["path", { "d": "M5 12h14" }], ["path", { "d": "M12 5v14" }]], "minus": [["path", { "d": "M5 12h14" }]], "search": [["path", { "d": "m21 21-4.34-4.34" }], ["circle", { "cx": "11", "cy": "11", "r": "8" }]], "chevron-down": [["path", { "d": "m6 9 6 6 6-6" }]], "chevron-up": [["path", { "d": "m18 15-6-6-6 6" }]], "chevron-left": [["path", { "d": "m15 18-6-6 6-6" }]], "chevron-right": [["path", { "d": "m9 18 6-6-6-6" }]], "arrow-right": [["path", { "d": "M5 12h14" }], ["path", { "d": "m12 5 7 7-7 7" }]], "arrow-up-right": [["path", { "d": "M7 7h10v10" }], ["path", { "d": "M7 17 17 7" }]], "arrow-up-down": [["path", { "d": "m21 16-4 4-4-4" }], ["path", { "d": "M17 20V4" }], ["path", { "d": "m3 8 4-4 4 4" }], ["path", { "d": "M7 4v16" }]], "loader-circle": [["path", { "d": "M21 12a9 9 0 1 1-6.219-8.56" }]], "circle-alert": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["line", { "x1": "12", "x2": "12", "y1": "8", "y2": "12" }], ["line", { "x1": "12", "x2": "12.01", "y1": "16", "y2": "16" }]], "circle-check": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "m16 9-5.5 5.5L8 12" }]], "info": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 16v-4" }], ["path", { "d": "M12 8h.01" }]], "triangle-alert": [["path", { "d": "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }], ["path", { "d": "M12 9v4" }], ["path", { "d": "M12 17h.01" }]], "settings": [["path", { "d": "M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }]], "user": [["path", { "d": "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }], ["circle", { "cx": "12", "cy": "7", "r": "4" }]], "users": [["path", { "d": "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }], ["path", { "d": "M16 3.128a4 4 0 0 1 0 7.744" }], ["path", { "d": "M22 21v-2a4 4 0 0 0-3-3.87" }], ["circle", { "cx": "9", "cy": "7", "r": "4" }]], "filter": [["path", { "d": "M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z" }]], "ellipsis": [["circle", { "cx": "12", "cy": "12", "r": "1" }], ["circle", { "cx": "19", "cy": "12", "r": "1" }], ["circle", { "cx": "5", "cy": "12", "r": "1" }]], "external-link": [["path", { "d": "M15 3h6v6" }], ["path", { "d": "M10 14 21 3" }], ["path", { "d": "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }]], "copy": [["rect", { "width": "14", "height": "14", "x": "8", "y": "8", "rx": "2", "ry": "2" }], ["path", { "d": "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" }]], "trash-2": [["path", { "d": "M10 11v6" }], ["path", { "d": "M14 11v6" }], ["path", { "d": "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }], ["path", { "d": "M3 6h18" }], ["path", { "d": "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }]], "pencil": [["path", { "d": "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" }], ["path", { "d": "m15 5 4 4" }]], "download": [["path", { "d": "M12 15V3" }], ["path", { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }], ["path", { "d": "m7 10 5 5 5-5" }]], "upload": [["path", { "d": "M12 3v12" }], ["path", { "d": "m17 8-5-5-5 5" }], ["path", { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }]], "calendar": [["path", { "d": "M8 2v3" }], ["path", { "d": "M16 2v3" }], ["rect", { "x": "3", "y": "3", "width": "18", "height": "18", "rx": "2" }], ["path", { "d": "M3 9h18" }]], "bell": [["path", { "d": "M10.268 21a2 2 0 0 0 3.464 0" }], ["path", { "d": "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" }]], "menu": [["path", { "d": "M4 5h16" }], ["path", { "d": "M4 12h16" }], ["path", { "d": "M4 19h16" }]], "eye": [["path", { "d": "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }]], "log-out": [["path", { "d": "m16 17 5-5-5-5" }], ["path", { "d": "M21 12H9" }], ["path", { "d": "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }]], "circle": [["circle", { "cx": "12", "cy": "12", "r": "10" }]], "circle-dot-dashed": [["path", { "d": "M10.1 2.18a9.93 9.93 0 0 1 3.8 0" }], ["path", { "d": "M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7" }], ["path", { "d": "M21.82 10.1a9.93 9.93 0 0 1 0 3.8" }], ["path", { "d": "M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69" }], ["path", { "d": "M13.9 21.82a9.94 9.94 0 0 1-3.8 0" }], ["path", { "d": "M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7" }], ["path", { "d": "M2.18 13.9a9.93 9.93 0 0 1 0-3.8" }], ["path", { "d": "M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69" }], ["circle", { "cx": "12", "cy": "12", "r": "1" }]], "ban": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M4.929 4.929 19.07 19.071" }]], "arrow-up": [["path", { "d": "m5 12 7-7 7 7" }], ["path", { "d": "M12 19V5" }]], "arrow-down": [["path", { "d": "M12 5v14" }], ["path", { "d": "m19 12-7 7-7-7" }]], "inbox": [["polyline", { "points": "22 12 16 12 14 15 10 15 8 12 2 12" }], ["path", { "d": "M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" }]], "pin": [["path", { "d": "M12 17v5" }], ["path", { "d": "M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z" }]], "pin-off": [["path", { "d": "M12 17v5" }], ["path", { "d": "M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89" }], ["path", { "d": "m2 2 20 20" }], ["path", { "d": "M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11" }]], "eye-off": [["path", { "d": "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" }], ["path", { "d": "M14.084 14.158a3 3 0 0 1-4.242-4.242" }], ["path", { "d": "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" }], ["path", { "d": "m2 2 20 20" }]], "columns-3": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "M15 3v18" }]], "arrow-left": [["path", { "d": "m12 19-7-7 7-7" }], ["path", { "d": "M19 12H5" }]], "rotate-ccw": [["path", { "d": "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }], ["path", { "d": "M3 3v5h5" }]], "house": [["path", { "d": "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" }], ["path", { "d": "M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }]], "layout-dashboard": [["rect", { "width": "7", "height": "9", "x": "3", "y": "3", "rx": "1" }], ["rect", { "width": "7", "height": "5", "x": "14", "y": "3", "rx": "1" }], ["rect", { "width": "7", "height": "9", "x": "14", "y": "12", "rx": "1" }], ["rect", { "width": "7", "height": "5", "x": "3", "y": "16", "rx": "1" }]], "folder": [["path", { "d": "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }]], "chart-column": [["path", { "d": "M3 3v16a2 2 0 0 0 2 2h16" }], ["path", { "d": "M18 17V9" }], ["path", { "d": "M13 17V5" }], ["path", { "d": "M8 17v-3" }]], "file-text": [["path", { "d": "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }], ["path", { "d": "M14 2v5a1 1 0 0 0 1 1h5" }], ["path", { "d": "M10 9H8" }], ["path", { "d": "M16 13H8" }], ["path", { "d": "M16 17H8" }]], "mail": [["path", { "d": "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" }], ["rect", { "x": "2", "y": "4", "width": "20", "height": "16", "rx": "2" }]], "lock": [["rect", { "width": "18", "height": "11", "x": "3", "y": "11", "rx": "2", "ry": "2" }], ["path", { "d": "M7 11V7a5 5 0 0 1 10 0v4" }]], "clock": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 6v6l4 2" }]], "trending-up": [["path", { "d": "M16 7h6v6" }], ["path", { "d": "m22 7-8.5 8.5-5-5L2 17" }]], "trending-down": [["path", { "d": "M16 17h6v-6" }], ["path", { "d": "m22 17-8.5-8.5-5 5L2 7" }]], "image": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2", "ry": "2" }], ["circle", { "cx": "9", "cy": "9", "r": "2" }], ["path", { "d": "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" }]], "paperclip": [["path", { "d": "m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551" }]], "cloud-upload": [["path", { "d": "M12 13v8" }], ["path", { "d": "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242" }], ["path", { "d": "m8 17 4-4 4 4" }]], "file": [["path", { "d": "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" }], ["path", { "d": "M14 2v5a1 1 0 0 0 1 1h5" }]], "sun": [["circle", { "cx": "12", "cy": "12", "r": "4" }], ["path", { "d": "M12 2v2" }], ["path", { "d": "M12 20v2" }], ["path", { "d": "m4.93 4.93 1.41 1.41" }], ["path", { "d": "m17.66 17.66 1.41 1.41" }], ["path", { "d": "M2 12h2" }], ["path", { "d": "M20 12h2" }], ["path", { "d": "m6.34 17.66-1.41 1.41" }], ["path", { "d": "m19.07 4.93-1.41 1.41" }]], "moon": [["path", { "d": "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }]], "monitor": [["rect", { "width": "20", "height": "14", "x": "2", "y": "3", "rx": "2" }], ["line", { "x1": "8", "x2": "16", "y1": "21", "y2": "21" }], ["line", { "x1": "12", "x2": "12", "y1": "17", "y2": "21" }]], "panel-left-close": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "m16 15-3-3 3-3" }]], "panel-left-open": [["rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }], ["path", { "d": "M9 3v18" }], ["path", { "d": "m14 9 3 3-3 3" }]], "server": [["rect", { "width": "20", "height": "8", "x": "2", "y": "2", "rx": "2", "ry": "2" }], ["rect", { "width": "20", "height": "8", "x": "2", "y": "14", "rx": "2", "ry": "2" }], ["line", { "x1": "6", "x2": "6.01", "y1": "6", "y2": "6" }], ["line", { "x1": "6", "x2": "6.01", "y1": "18", "y2": "18" }]], "globe": [["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" }], ["path", { "d": "M2 12h20" }]], "activity": [["path", { "d": "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2" }]], "shield-alert": [["path", { "d": "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" }], ["path", { "d": "M12 8v4" }], ["path", { "d": "M12 16h.01" }]], "phone": [["path", { "d": "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384" }]], "wrench": [["path", { "d": "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z" }]] };
234
247
  var SIZES = { sm: 16, md: 20, lg: 24 };
235
248
  var Icon = React2.forwardRef(function Icon2(props, ref) {
236
249
  const size = SIZES[props.size] || props.size || 16;
@@ -968,13 +981,20 @@ window.Aura = (() => {
968
981
  "onChange",
969
982
  "indeterminate",
970
983
  "label",
984
+ "hideLabel",
971
985
  "children",
972
986
  "description",
973
987
  "className",
974
988
  "tabIndex",
975
989
  "disabled"
976
990
  ]);
977
- const labelled = props.children != null;
991
+ const text = props.children;
992
+ const labelled = text != null && text !== "";
993
+ if (!labelled && props.label && !props.hideLabel)
994
+ devWarnOnce(
995
+ "checkbox-label",
996
+ "Checkbox `label` is only the accessible name: it is not shown. In 6.0 it will be shown beside the box, like Switch and TextField. For visible text now pass it as children; for a bare box (a table row) add `hideLabel`."
997
+ );
978
998
  const descId = props.description && props.id ? props.id + "-desc" : void 0;
979
999
  return /* @__PURE__ */ React8.createElement(
980
1000
  "label",
@@ -1002,7 +1022,8 @@ window.Aura = (() => {
1002
1022
  }
1003
1023
  ),
1004
1024
  /* @__PURE__ */ React8.createElement("span", { className: "aura-check__box", "aria-hidden": true }, props.indeterminate ? /* @__PURE__ */ React8.createElement(Icon, { name: "minus", size: 12, strokeWidth: 3 }) : on ? /* @__PURE__ */ React8.createElement(Icon, { name: "check", size: 12, strokeWidth: 3 }) : null),
1005
- labelled ? /* @__PURE__ */ React8.createElement("span", { className: "aura-check__text" }, /* @__PURE__ */ React8.createElement("span", { className: "aura-check__label" }, props.children), props.description ? /* @__PURE__ */ React8.createElement("span", { className: "aura-check__desc", id: descId }, props.description) : null) : null
1025
+ !labelled && props.description ? /* @__PURE__ */ React8.createElement("span", { className: "aura-sr-only", id: descId }, props.description) : null,
1026
+ labelled ? /* @__PURE__ */ React8.createElement("span", { className: "aura-check__text" }, /* @__PURE__ */ React8.createElement("span", { className: "aura-check__label" }, text), props.description ? /* @__PURE__ */ React8.createElement("span", { className: "aura-check__desc", id: descId }, props.description) : null) : null
1006
1027
  );
1007
1028
  });
1008
1029
 
@@ -1013,6 +1034,7 @@ window.Aura = (() => {
1013
1034
  var TONE_WORDS = {
1014
1035
  ready: ["ready", "done", "complete", "completed", "approved", "live", "passed"],
1015
1036
  progress: ["in progress", "in review", "review", "syncing", "running", "pending"],
1037
+ warning: ["warning", "problem", "degraded", "at risk"],
1016
1038
  blocked: ["blocked", "failed", "error", "rejected", "on hold", "cancelled"]
1017
1039
  };
1018
1040
  function toneFor(status) {
@@ -1020,13 +1042,14 @@ window.Aura = (() => {
1020
1042
  for (const t in TONE_WORDS) if (TONE_WORDS[t].indexOf(s) >= 0) return t;
1021
1043
  return "neutral";
1022
1044
  }
1023
- var TONE_ORDER = { neutral: 0, progress: 1, ready: 2, blocked: 3 };
1045
+ var TONE_ORDER = { neutral: 0, progress: 1, ready: 2, warning: 3, blocked: 4 };
1024
1046
 
1025
1047
  // src/StatusPill.tsx
1026
1048
  var TONE_ICON = {
1027
1049
  neutral: "circle",
1028
1050
  progress: "circle-dot-dashed",
1029
1051
  ready: "circle-check",
1052
+ warning: "triangle-alert",
1030
1053
  blocked: "ban"
1031
1054
  };
1032
1055
  var StatusPill = React9.forwardRef(function StatusPill2(props, ref) {
@@ -1757,12 +1780,16 @@ window.Aura = (() => {
1757
1780
  function todayIn(timeZone) {
1758
1781
  const now = /* @__PURE__ */ new Date();
1759
1782
  if (!timeZone) return toISO(now);
1760
- return new Intl.DateTimeFormat("en-CA", {
1761
- timeZone,
1762
- year: "numeric",
1763
- month: "2-digit",
1764
- day: "2-digit"
1765
- }).format(now);
1783
+ try {
1784
+ return new Intl.DateTimeFormat("en-CA", {
1785
+ timeZone,
1786
+ year: "numeric",
1787
+ month: "2-digit",
1788
+ day: "2-digit"
1789
+ }).format(now);
1790
+ } catch (e) {
1791
+ return toISO(now);
1792
+ }
1766
1793
  }
1767
1794
 
1768
1795
  // src/DatePicker.tsx
@@ -1785,7 +1812,7 @@ window.Aura = (() => {
1785
1812
  var Calendar = React17.forwardRef(function Calendar2(props, ref) {
1786
1813
  const ctx = useAuraLocale(), locale = props.locale || ctx.locale || "en", calendar = props.calendar || ctx.calendar || defaultCalendar(locale), tag = localeTag(locale, calendar);
1787
1814
  const weekStart = props.weekStartsOn == null ? locale === "sv" ? 1 : 0 : props.weekStartsOn;
1788
- const todayISO = props.today || todayIn(props.timeZone || ctx.timeZone);
1815
+ const todayISO = (props.today && fromISO(props.today) ? props.today : null) || todayIn(props.timeZone || ctx.timeZone);
1789
1816
  const today = fromISO(todayISO);
1790
1817
  const min = fromISO(props.min === "today" ? todayISO : props.min), max = fromISO(props.max === "today" ? todayISO : props.max);
1791
1818
  const start = fromISO(props.start), end = fromISO(props.end);
@@ -2807,7 +2834,17 @@ window.Aura = (() => {
2807
2834
  const body = document.body, overflow = body.style.overflow;
2808
2835
  body.style.overflow = "hidden";
2809
2836
  const el = ref.current;
2810
- const target = el && (el.querySelector("[data-autofocus]") || el.querySelector(o.bodySelector + " " + FOCUSABLE) || el.querySelector(o.footSelector + " " + FOCUSABLE) || el);
2837
+ const firstIn = function(scope) {
2838
+ if (!scope || !el) return null;
2839
+ const sel = FOCUSABLE.split(",").map(function(s) {
2840
+ return scope + " " + s;
2841
+ }).join(",");
2842
+ const list = el.querySelectorAll(sel);
2843
+ for (let i = 0; i < list.length; i++)
2844
+ if (list[i].tabIndex >= 0 && list[i].getClientRects().length > 0) return list[i];
2845
+ return null;
2846
+ };
2847
+ const target = el && (el.querySelector("[data-autofocus]") || firstIn(o.bodySelector) || firstIn(o.footSelector) || el);
2811
2848
  if (target && o.autoFocus !== false) target.focus();
2812
2849
  return function() {
2813
2850
  body.style.overflow = overflow;
@@ -3106,7 +3143,7 @@ window.Aura = (() => {
3106
3143
  };
3107
3144
  let top, left;
3108
3145
  if (side === "top" || side === "bottom") {
3109
- top = side === "top" ? r.top - t.height - gap : r.bottom + gap;
3146
+ top = clampY(side === "top" ? r.top - t.height - gap : r.bottom + gap);
3110
3147
  left = clampX(r.left + r.width / 2 - t.width / 2);
3111
3148
  } else {
3112
3149
  left = side === "left" ? r.left - t.width - gap : r.right + gap;
@@ -3333,6 +3370,12 @@ window.Aura = (() => {
3333
3370
  const measure = !!props.stackBelow || columns.some(function(c) {
3334
3371
  return c.hideBelow != null;
3335
3372
  });
3373
+ const levelShape = (props.stackBelow ? "s" : "") + Math.min(
3374
+ MAX_HIDE_LEVELS,
3375
+ columns.map(hidePx).filter(function(px, i, a) {
3376
+ return px != null && a.indexOf(px) === i;
3377
+ }).length
3378
+ );
3336
3379
  React28.useEffect(
3337
3380
  function() {
3338
3381
  if (!measure || !wrapRef.current || typeof ResizeObserver === "undefined") return;
@@ -3345,14 +3388,14 @@ window.Aura = (() => {
3345
3388
  ro.disconnect();
3346
3389
  };
3347
3390
  },
3348
- [measure]
3391
+ [measure, levelShape]
3349
3392
  );
3350
3393
  const stacked = !!props.stackBelow && boxWidth[0] != null && below(boxWidth[0], props.stackBelow);
3351
3394
  useIsoLayoutEffect(
3352
3395
  function() {
3353
- if (measure && boxWidth[0] == null && wrapRef.current) boxWidth[1](wrapRef.current.getBoundingClientRect().width);
3396
+ if (measure && wrapRef.current) boxWidth[1](wrapRef.current.getBoundingClientRect().width);
3354
3397
  },
3355
- [measure]
3398
+ [measure, levelShape]
3356
3399
  );
3357
3400
  const hideLevels = [];
3358
3401
  columns.forEach(function(c) {
@@ -3613,6 +3656,7 @@ window.Aura = (() => {
3613
3656
  function focusCell(r, c) {
3614
3657
  r = Math.max(0, Math.min(r, nRows));
3615
3658
  c = Math.max(0, Math.min(c, nCols - 1));
3659
+ if (stacked && r === 0 && nRows > 0 && !(selectable && c === 0)) r = 1;
3616
3660
  activeState[1]({ r, c });
3617
3661
  pending.current = { r, c };
3618
3662
  if (virtual && r > 0) {
@@ -3922,6 +3966,7 @@ window.Aura = (() => {
3922
3966
  nRows ? /* @__PURE__ */ React28.createElement(
3923
3967
  Checkbox,
3924
3968
  {
3969
+ hideLabel: true,
3925
3970
  checked: all,
3926
3971
  indeterminate: nSel > 0 && !all,
3927
3972
  tabIndex: -1,
@@ -4075,6 +4120,7 @@ window.Aura = (() => {
4075
4120
  /* @__PURE__ */ React28.createElement(
4076
4121
  Checkbox,
4077
4122
  {
4123
+ hideLabel: true,
4078
4124
  checked: isSel,
4079
4125
  tabIndex: -1,
4080
4126
  label: t.selectRow(k),
@@ -4172,7 +4218,9 @@ window.Aura = (() => {
4172
4218
  } else {
4173
4219
  const bodyRows = body = [];
4174
4220
  if (virtual && start > 0)
4175
- bodyRows.push(/* @__PURE__ */ React28.createElement("div", { key: "__top", style: { height: start * ROW_H + "px" }, "aria-hidden": true }));
4221
+ bodyRows.push(
4222
+ /* @__PURE__ */ React28.createElement("div", { key: "__top", className: "aura-table__spacer", style: { height: start * ROW_H + "px" }, "aria-hidden": true })
4223
+ );
4176
4224
  for (let ri = start; ri < end; ri++) {
4177
4225
  (function(r, i) {
4178
4226
  const k = r[rowKey], isSel = !!selSet[k];
@@ -4203,7 +4251,17 @@ window.Aura = (() => {
4203
4251
  })(pageRows[ri], ri);
4204
4252
  }
4205
4253
  if (virtual && end < pageRows.length)
4206
- bodyRows.push(/* @__PURE__ */ React28.createElement("div", { key: "__bot", style: { height: (pageRows.length - end) * ROW_H + "px" }, "aria-hidden": true }));
4254
+ bodyRows.push(
4255
+ /* @__PURE__ */ React28.createElement(
4256
+ "div",
4257
+ {
4258
+ key: "__bot",
4259
+ className: "aura-table__spacer",
4260
+ style: { height: (pageRows.length - end) * ROW_H + "px" },
4261
+ "aria-hidden": true
4262
+ }
4263
+ )
4264
+ );
4207
4265
  }
4208
4266
  let foot = null;
4209
4267
  function pagerButton(dir) {
@@ -4438,7 +4496,7 @@ window.Aura = (() => {
4438
4496
  className: cx("aura-tabs aura-tabs--links", props.className)
4439
4497
  },
4440
4498
  /* @__PURE__ */ React30.createElement("div", { className: "aura-tabs__list" }, items2.map(function(t) {
4441
- const on = current2 && t.id === current2.id;
4499
+ const on = t.id === st[0];
4442
4500
  const inner = [
4443
4501
  t.icon ? /* @__PURE__ */ React30.createElement(Icon, { key: "i", name: t.icon }) : null,
4444
4502
  t.label,
@@ -4451,7 +4509,8 @@ window.Aura = (() => {
4451
4509
  href: t.href,
4452
4510
  className: cx("aura-tab", on && "is-active"),
4453
4511
  "aria-current": on ? "page" : void 0,
4454
- onClick: function() {
4512
+ onClick: function(e) {
4513
+ if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return;
4455
4514
  st[1](t.id);
4456
4515
  }
4457
4516
  },
@@ -4696,7 +4755,12 @@ window.Aura = (() => {
4696
4755
  if (typeof ref === "function") ref(el);
4697
4756
  else if (ref) ref.current = el;
4698
4757
  },
4699
- className: cx("aura-nav", collapsed && "aura-nav--collapsed", props.className),
4758
+ className: cx(
4759
+ "aura-nav",
4760
+ collapsed && "aura-nav--collapsed",
4761
+ props.bordered === false && "aura-nav--borderless",
4762
+ props.className
4763
+ ),
4700
4764
  "data-collapsed": collapsed ? "" : void 0,
4701
4765
  "aria-label": props.label || t.mainNav,
4702
4766
  onKeyDown
@@ -334,6 +334,7 @@ a.aura-icon-btn { text-decoration: none; }
334
334
  }
335
335
  .aura-pill--progress { background: var(--aura-status-progress-bg); color: var(--aura-status-progress-fg); }
336
336
  .aura-pill--ready { background: var(--aura-status-ready-bg); color: var(--aura-status-ready-fg); }
337
+ .aura-pill--warning { background: var(--aura-status-warning-bg); color: var(--aura-status-warning-fg); }
337
338
  .aura-pill--blocked { background: var(--aura-status-blocked-bg); color: var(--aura-status-blocked-fg); }
338
339
 
339
340
  /* Icon — Lucide, 24-grid, stroke in currentColor */
@@ -596,6 +597,9 @@ a.aura-tab { text-decoration: none; }
596
597
  }
597
598
  .aura-nav__header { padding: var(--aura-space-5) var(--aura-space-4) var(--aura-space-4); }
598
599
  .aura-nav__scroll { flex: 1; overflow-y: auto; padding: 0 var(--aura-space-3); }
600
+ /* No header: keep the first item off the top edge (5.0.2). */
601
+ .aura-nav > .aura-nav__scroll:first-child { padding-top: var(--aura-space-3); }
602
+ .aura-nav--borderless { border-right: 0; }
599
603
  .aura-nav__section + .aura-nav__section { margin-top: var(--aura-space-5); }
600
604
  .aura-nav__title { margin: 0 0 var(--aura-space-1); padding: 0 var(--aura-space-3); font-family: var(--font-mono); font-size: 11px; line-height: 20px; color: var(--aura-fg-tertiary); text-transform: uppercase; letter-spacing: 0.04em; }
601
605
  .aura-nav__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
@@ -1365,6 +1369,8 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1365
1369
  @media (max-width: 767.98px) { :root:has(.aura-bottomnav--below-md) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1366
1370
  @media (max-width: 1023.98px) { :root:has(.aura-bottomnav--below-lg) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1367
1371
  @media (max-width: 1279.98px) { :root:has(.aura-bottomnav--below-xl) { --aura-bottomnav-offset: calc(var(--aura-bottomnav-height) + env(safe-area-inset-bottom, 0px)); } }
1372
+ /* Toasts clear a BottomNav wherever it shows (phones and tablets). */
1373
+ .aura-toaster:not(.is-top) { bottom: calc(var(--aura-space-6) + var(--aura-bottomnav-offset, 0px)); }
1368
1374
  @media (max-width: 639.98px) { .aura-toaster:not(.is-top) { bottom: calc(var(--aura-space-4) + var(--aura-bottomnav-offset, 0px)); } }
1369
1375
 
1370
1376
  /* ---------- 4.19: ActionBar ---------- */
@@ -1459,7 +1465,8 @@ button.aura-stepper__step:hover .aura-stepper__label { text-decoration: underlin
1459
1465
  margin-bottom: var(--aura-space-1);
1460
1466
  padding: 0; line-height: normal;
1461
1467
  }
1462
- .aura-table__td[data-hide] { display: block; }
1468
+ .aura-table__td[data-hide], .aura-table__head > .aura-table__th[data-hide] { display: block; }
1469
+ .aura-table__spacer { display: none; }
1463
1470
  .aura-table__td[data-label]::before {
1464
1471
  content: attr(data-label); content: attr(data-label) / '';
1465
1472
  display: block; margin-bottom: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: start;
@@ -171,13 +171,13 @@ export interface DataTableProps {
171
171
  onPinnedColumnsChange?: ((keys: string[]) => void) | undefined;
172
172
  /** `compact` = 40px rows (48px on touch screens). Default: the surrounding density. */
173
173
  density?: "comfortable" | "compact" | undefined;
174
- /** 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. */
174
+ /** 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. */
175
175
  stackBelow?: number | undefined;
176
176
  className?: string | undefined;
177
177
  }
178
178
  /** An AURA icon name, or any icon element (e.g. `<Building />` from lucide-react). AURA sizes it and hides it from screen readers. */
179
179
  export type IconInput = IconName | React$1.ReactElement;
180
- export type IconName = "check" | "x" | "plus" | "minus" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-right" | "arrow-up-right" | "arrow-up-down" | "loader-circle" | "circle-alert" | "circle-check" | "info" | "triangle-alert" | "settings" | "user" | "users" | "filter" | "ellipsis" | "external-link" | "copy" | "trash-2" | "pencil" | "download" | "upload" | "calendar" | "bell" | "menu" | "eye" | "log-out" | "circle" | "circle-dot-dashed" | "ban" | "arrow-up" | "arrow-down" | "inbox" | "pin" | "pin-off" | "eye-off" | "columns-3" | "arrow-left" | "rotate-ccw" | "house" | "layout-dashboard" | "folder" | "chart-column" | "file-text" | "mail" | "lock" | "clock" | "trending-up" | "trending-down" | "image" | "paperclip" | "cloud-upload" | "file" | "sun" | "moon" | "monitor" | "panel-left-close" | "panel-left-open";
180
+ export type IconName = "check" | "x" | "plus" | "minus" | "search" | "chevron-down" | "chevron-up" | "chevron-left" | "chevron-right" | "arrow-right" | "arrow-up-right" | "arrow-up-down" | "loader-circle" | "circle-alert" | "circle-check" | "info" | "triangle-alert" | "settings" | "user" | "users" | "filter" | "ellipsis" | "external-link" | "copy" | "trash-2" | "pencil" | "download" | "upload" | "calendar" | "bell" | "menu" | "eye" | "log-out" | "circle" | "circle-dot-dashed" | "ban" | "arrow-up" | "arrow-down" | "inbox" | "pin" | "pin-off" | "eye-off" | "columns-3" | "arrow-left" | "rotate-ccw" | "house" | "layout-dashboard" | "folder" | "chart-column" | "file-text" | "mail" | "lock" | "clock" | "trending-up" | "trending-down" | "image" | "paperclip" | "cloud-upload" | "file" | "sun" | "moon" | "monitor" | "panel-left-close" | "panel-left-open" | "server" | "globe" | "activity" | "shield-alert" | "phone" | "wrench";
181
181
  /** Lucide stroke icon drawn inline in currentColor. */
182
182
  export interface IconProps {
183
183
  /** A name from the set, or an icon element of your own (sized and styled the same way). */
@@ -214,12 +214,13 @@ export interface AuraProviderProps {
214
214
  linkComponent?: React$1.ElementType | undefined;
215
215
  children?: React$1.ReactNode | undefined;
216
216
  }
217
- export type StatusTone = "neutral" | "progress" | "ready" | "blocked";
217
+ /** `warning` (5.1): needs attention but still works — Warning, Problem, Degraded, At risk. */
218
+ export type StatusTone = "neutral" | "progress" | "ready" | "warning" | "blocked";
218
219
  /** Status pill: tone fill + icon + the status word. Tone comes from the word unless given. */
219
220
  export interface StatusPillProps {
220
221
  /** The status word shown, e.g. "In Progress". */
221
222
  children: React$1.ReactNode;
222
- /** Force a tone. Default: matched from the word (Ready/Done → ready, In Progress/In Review → progress, Blocked/Failed → blocked, anything else → neutral). */
223
+ /** Force a tone. Default: matched from the word (Ready/Done → ready, In Progress/In Review → progress, Warning/Problem/Degraded/At risk → warning (5.1), Blocked/Failed → blocked, anything else → neutral). */
223
224
  tone?: StatusTone | undefined;
224
225
  className?: string | undefined;
225
226
  }
@@ -229,9 +230,12 @@ export interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInpu
229
230
  checked?: boolean | undefined;
230
231
  defaultChecked?: boolean | undefined;
231
232
  indeterminate?: boolean | undefined;
232
- /** Accessible name for a bare box (tables). Not needed when children give a visible label. */
233
+ /** Accessible name. In 5.x it is shown only when given as children; **6.0 shows `label` beside the box** like
234
+ * Switch and TextField. Without children and without `hideLabel` it warns once in development. */
233
235
  label?: string | undefined;
234
- /** Visible label beside the box (form use). */
236
+ /** A bare box named by `label`, e.g. in a table row: keeps it hidden in 6.0 and silences the 5.1 notice. */
237
+ hideLabel?: boolean | undefined;
238
+ /** The visible label beside the box. */
235
239
  children?: React$1.ReactNode | undefined;
236
240
  /** Second line under the visible label (needs an id to be linked). */
237
241
  description?: React$1.ReactNode | undefined;
@@ -590,6 +594,9 @@ export interface SideNavProps {
590
594
  onCollapsedChange?: ((collapsed: boolean) => void) | undefined;
591
595
  /** Adds a collapse / expand button at the bottom. AppShell hides it in its phone drawer. */
592
596
  collapsible?: boolean | undefined;
597
+ /** The 1px right edge that divides the nav from the page. Default true; `false` when your layout draws its own
598
+ * divider. (5.1) */
599
+ bordered?: boolean | undefined;
593
600
  className?: string | undefined;
594
601
  }
595
602
  export interface BreadcrumbProps {
@@ -40,6 +40,8 @@ primitive/red/800,color,light,#991b1b,Primitive red 800. Danger button hover onl
40
40
  primitive/amber/50,color,light,#fffbeb,Primitive. Warning alert fill (light). ADDED.,
41
41
  primitive/amber/200,color,light,#fde68a,Primitive. Warning alert edge (light). ADDED.,
42
42
  primitive/amber/300,color,light,#fcd34d,"Primitive. Warning alert text (dark), 9.6:1. ADDED.",
43
+ primitive/amber/500,color,light,#f59e0b,Primitive. Warning status pill fill (dark). ADDED 5.1.,
44
+ primitive/amber/600,color,light,#d97706,Primitive. Warning status pill fill (light). ADDED 5.1.,
43
45
  primitive/amber/800,color,light,#92400e,"Primitive. Warning alert text (light), 6.8:1 on amber-50. ADDED.",
44
46
  primitive/ink,color,light,#08080a,Primitive ink (= zinc-950). Text on lime fills: the Ready status label (15:1 on aura-lime-200).,
45
47
  primitive/white,color,light,#ffffff,Primitive white. The Creative button fill in every theme.,
@@ -73,6 +75,8 @@ semantic/status-ready-bg,color,light,{primitive/lime/200},"Status pill fill for
73
75
  semantic/status-ready-fg,color,light,{primitive/ink},"Label and icon on aura-status-ready-bg (light 15.2:1; dark lime-300, 9.9:1).",ALL_FILLS
74
76
  semantic/status-blocked-bg,color,light,{primitive/red/700},"Status pill fill for stopped / failed states (Blocked, Failed). Dark on purpose: 5.5:1 lighter-to-darker against the lime Ready fill, so Ready and Blocked differ by lightness, not only red vs green. ADDED.",ALL_FILLS
75
77
  semantic/status-blocked-fg,color,light,{primitive/white},Label and icon on aura-status-blocked-bg (6.5:1).,ALL_FILLS
78
+ semantic/status-warning-bg,color,light,{primitive/amber/600},"Status pill fill for states that need attention but still work (Warning, Problem, Degraded, At risk). A solid amber (amber-600 light, amber-500 dark) that differs from Ready and Blocked by lightness too, not only hue: 2.7:1 from lime-200 and 2.0:1 from red-700 in light; 6.0:1 from the dark Ready fill and 3.0:1 from red-700 in dark. Always with the word and the triangle-alert icon. ADDED 5.1.",ALL_FILLS
79
+ semantic/status-warning-fg,color,light,{primitive/ink},"Label and icon on aura-status-warning-bg: ink, 6.3:1 light, 9.3:1 dark.",ALL_FILLS
76
80
  semantic/bg-selected,color,light,{primitive/violet/50},"Selected table rows and list items. Opaque so pinned columns can sit on it (dark = a 14% violet-400 wash over zinc-900, flattened). aura-fg-primary on it ≥14.2:1, aura-fg-secondary ≥5.5:1, focus ring ≥5.2:1 in both themes. ADDED.",FRAME_FILL
77
81
  semantic/border-control,color,light,{primitive/zinc/500},"Outline of unchecked checkboxes and other small controls that must be seen: ≥4.4:1 on aura-bg-surface, -canvas and aura-bg-selected (the 3:1 a control boundary needs). ADDED.",STROKE_COLOR
78
82
  semantic/bg-skeleton,color,light,{primitive/zinc/200},zinc-200 light / zinc-700 dark so bars read on white and on zinc-900 surfaces. Skeleton placeholder bars while a table or list loads. Decorative; the table carries aria-busy and a 'Loading rows' status for screen readers. ADDED.,FRAME_FILL
@@ -139,6 +143,8 @@ semantic/status-ready-bg,color,dark,#2b351f,"Status pill fill for finished / goo
139
143
  semantic/status-ready-fg,color,dark,{primitive/lime/300},"Label and icon on aura-status-ready-bg (light 15.2:1; dark lime-300, 9.9:1).",ALL_FILLS
140
144
  semantic/status-blocked-bg,color,dark,{primitive/red/700},"Status pill fill for stopped / failed states (Blocked, Failed). Dark on purpose: 5.5:1 lighter-to-darker against the lime Ready fill, so Ready and Blocked differ by lightness, not only red vs green. ADDED.",ALL_FILLS
141
145
  semantic/status-blocked-fg,color,dark,{primitive/white},Label and icon on aura-status-blocked-bg (6.5:1).,ALL_FILLS
146
+ semantic/status-warning-bg,color,dark,{primitive/amber/500},"Status pill fill for states that need attention but still work (Warning, Problem, Degraded, At risk). A solid amber (amber-600 light, amber-500 dark) that differs from Ready and Blocked by lightness too, not only hue: 2.7:1 from lime-200 and 2.0:1 from red-700 in light; 6.0:1 from the dark Ready fill and 3.0:1 from red-700 in dark. Always with the word and the triangle-alert icon. ADDED 5.1.",ALL_FILLS
147
+ semantic/status-warning-fg,color,dark,{primitive/ink},"Label and icon on aura-status-warning-bg: ink, 6.3:1 light, 9.3:1 dark.",ALL_FILLS
142
148
  semantic/bg-selected,color,dark,#2c283a,"Selected table rows and list items. Opaque so pinned columns can sit on it (dark = a 14% violet-400 wash over zinc-900, flattened). aura-fg-primary on it ≥14.2:1, aura-fg-secondary ≥5.5:1, focus ring ≥5.2:1 in both themes. ADDED.",FRAME_FILL
143
149
  semantic/border-control,color,dark,{primitive/zinc/400},"Outline of unchecked checkboxes and other small controls that must be seen: ≥4.4:1 on aura-bg-surface, -canvas and aura-bg-selected (the 3:1 a control boundary needs). ADDED.",STROKE_COLOR
144
150
  semantic/bg-skeleton,color,dark,{primitive/zinc/700},zinc-200 light / zinc-700 dark so bars read on white and on zinc-900 surfaces. Skeleton placeholder bars while a table or list loads. Decorative; the table carries aria-busy and a 'Loading rows' status for screen readers. ADDED.,FRAME_FILL
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jirawatpyk/aura-tokens",
3
- "version": "5.0.0",
3
+ "version": "5.1.0",
4
4
  "description": "AURA Design System — tokens (CSS variables, Tailwind preset, Figma variables), theme contrast checks and token lint.",
5
5
  "main": "tailwind.tokens.cjs",
6
6
  "types": "components/index.d.ts",
@@ -48,7 +48,7 @@ for (const fg of ['fg-primary', 'fg-secondary', 'fg-tertiary', 'fg-accent', 'fg-
48
48
  pairs.push(['fg-primary', 'bg-selected', TEXT], ['fg-secondary', 'bg-selected', TEXT]);
49
49
  pairs.push(['fg-inverted', 'bg-surface-strong', TEXT], ['fg-inverted', 'bg-inverted', TEXT]);
50
50
  pairs.push(['button-primary-fg', 'button-primary-bg', TEXT], ['button-primary-fg', 'button-primary-bg-hover', TEXT]);
51
- for (const t of ['neutral', 'progress', 'ready', 'blocked']) pairs.push([`status-${t}-fg`, `status-${t}-bg`, TEXT]);
51
+ for (const t of ['neutral', 'progress', 'ready', 'warning', 'blocked']) pairs.push([`status-${t}-fg`, `status-${t}-bg`, TEXT]);
52
52
  for (const t of ['info', 'success', 'warning', 'danger']) pairs.push([`alert-${t}-fg`, `alert-${t}-bg`, TEXT], ['fg-primary', `alert-${t}-bg`, TEXT]);
53
53
  pairs.push(['on-texture', 'mesh-from', TEXT], ['on-texture', 'mesh-to', TEXT]);
54
54
  for (const bg of ['bg-surface', 'bg-canvas', 'bg-input', 'bg-selected']) pairs.push(['border-control', bg, UI]);
@@ -67,6 +67,8 @@ for (const bg of ['bg-surface', 'bg-canvas']) {
67
67
  pairs.push(['chart-axis', bg, TEXT]);
68
68
  }
69
69
  for (let i = 1; i < 8; i++) pairs.push([`chart-${i}`, `chart-${i + 1}`, NEIGHBOUR]);
70
+ /* Status fills that sit side by side in a column must also differ in lightness, not only hue (5.1: warning). */
71
+ pairs.push(['status-warning-bg', 'status-ready-bg', NEIGHBOUR], ['status-warning-bg', 'status-blocked-bg', NEIGHBOUR]);
70
72
  /* Progress / upload tracks: the edge shows the empty part at 3:1; the bar colours also clear 3:1 on the track fill. */
71
73
  for (const bg of ['bg-surface', 'bg-canvas']) pairs.push(['progress-track-edge', bg, UI]);
72
74
  for (const fg of ['fg-accent', 'fg-positive', 'fg-danger', 'fg-secondary']) pairs.push([fg, 'progress-track', UI]);
@@ -52,6 +52,8 @@ module.exports = {
52
52
  "50": "var(--aura-amber-50)",
53
53
  "200": "var(--aura-amber-200)",
54
54
  "300": "var(--aura-amber-300)",
55
+ "500": "var(--aura-amber-500)",
56
+ "600": "var(--aura-amber-600)",
55
57
  "800": "var(--aura-amber-800)"
56
58
  },
57
59
  "ink": "var(--aura-ink)",
@@ -101,7 +103,9 @@ module.exports = {
101
103
  "ready-bg": "var(--aura-status-ready-bg)",
102
104
  "ready-fg": "var(--aura-status-ready-fg)",
103
105
  "blocked-bg": "var(--aura-status-blocked-bg)",
104
- "blocked-fg": "var(--aura-status-blocked-fg)"
106
+ "blocked-fg": "var(--aura-status-blocked-fg)",
107
+ "warning-bg": "var(--aura-status-warning-bg)",
108
+ "warning-fg": "var(--aura-status-warning-fg)"
105
109
  },
106
110
  "chart": {
107
111
  "1": "var(--aura-chart-1)",
package/tokens.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "5.0.0",
2
+ "version": "5.1.0",
3
3
  "meta": {
4
4
  "name": "AURA Design System",
5
5
  "tier": "3-tier",
@@ -61,6 +61,8 @@
61
61
  "50": "#fffbeb",
62
62
  "200": "#fde68a",
63
63
  "300": "#fcd34d",
64
+ "500": "#f59e0b",
65
+ "600": "#d97706",
64
66
  "800": "#92400e"
65
67
  },
66
68
  "ink": "#08080a",
@@ -98,6 +100,8 @@
98
100
  "status-ready-fg": "{primitive.ink}",
99
101
  "status-blocked-bg": "{primitive.red.700}",
100
102
  "status-blocked-fg": "{primitive.white}",
103
+ "status-warning-bg": "{primitive.amber.600}",
104
+ "status-warning-fg": "{primitive.ink}",
101
105
  "bg-selected": "{primitive.violet.50}",
102
106
  "border-control": "{primitive.zinc.500}",
103
107
  "bg-skeleton": "{primitive.zinc.200}",
@@ -166,6 +170,8 @@
166
170
  "status-ready-fg": "{primitive.lime.300}",
167
171
  "status-blocked-bg": "{primitive.red.700}",
168
172
  "status-blocked-fg": "{primitive.white}",
173
+ "status-warning-bg": "{primitive.amber.500}",
174
+ "status-warning-fg": "{primitive.ink}",
169
175
  "bg-selected": "#2c283a",
170
176
  "border-control": "{primitive.zinc.400}",
171
177
  "bg-skeleton": "{primitive.zinc.700}",
@@ -464,6 +470,8 @@
464
470
  "amber-50": "Primitive. Warning alert fill (light). ADDED.",
465
471
  "amber-200": "Primitive. Warning alert edge (light). ADDED.",
466
472
  "amber-300": "Primitive. Warning alert text (dark), 9.6:1. ADDED.",
473
+ "amber-500": "Primitive. Warning status pill fill (dark). ADDED 5.1.",
474
+ "amber-600": "Primitive. Warning status pill fill (light). ADDED 5.1.",
467
475
  "amber-800": "Primitive. Warning alert text (light), 6.8:1 on amber-50. ADDED.",
468
476
  "ink": "Primitive ink (= zinc-950). Text on lime fills: the Ready status label (15:1 on aura-lime-200).",
469
477
  "white": "Primitive white. The Creative button fill in every theme.",
@@ -503,6 +511,8 @@
503
511
  "status-ready-fg": "Label and icon on aura-status-ready-bg (light 15.2:1; dark lime-300, 9.9:1).",
504
512
  "status-blocked-bg": "Status pill fill for stopped / failed states (Blocked, Failed). Dark on purpose: 5.5:1 lighter-to-darker against the lime Ready fill, so Ready and Blocked differ by lightness, not only red vs green. ADDED.",
505
513
  "status-blocked-fg": "Label and icon on aura-status-blocked-bg (6.5:1).",
514
+ "status-warning-bg": "Status pill fill for states that need attention but still work (Warning, Problem, Degraded, At risk). A solid amber (amber-600 light, amber-500 dark) that differs from Ready and Blocked by lightness too, not only hue: 2.7:1 from lime-200 and 2.0:1 from red-700 in light; 6.0:1 from the dark Ready fill and 3.0:1 from red-700 in dark. Always with the word and the triangle-alert icon. ADDED 5.1.",
515
+ "status-warning-fg": "Label and icon on aura-status-warning-bg: ink, 6.3:1 light, 9.3:1 dark.",
506
516
  "bg-selected": "Selected table rows and list items. Opaque so pinned columns can sit on it (dark = a 14% violet-400 wash over zinc-900, flattened). aura-fg-primary on it ≥14.2:1, aura-fg-secondary ≥5.5:1, focus ring ≥5.2:1 in both themes. ADDED.",
507
517
  "border-control": "Outline of unchecked checkboxes and other small controls that must be seen: ≥4.4:1 on aura-bg-surface, -canvas and aura-bg-selected (the 3:1 a control boundary needs). ADDED.",
508
518
  "bg-skeleton": "zinc-200 light / zinc-700 dark so bars read on white and on zinc-900 surfaces. Skeleton placeholder bars while a table or list loads. Decorative; the table carries aria-busy and a 'Loading rows' status for screen readers. ADDED.",