@tensor_1/tokens 2.14.2 → 2.16.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 +3 -1
- package/build/css/components.css +1 -1
- package/build/css/styles.css +1 -1
- package/build/css/tokens.css +2 -0
- package/build/tailwind/preset.cjs +1 -0
- package/build/tailwind/theme.css +1 -0
- package/build/ts/tokens.d.ts +1 -1
- package/build/ts/tokens.js +3 -0
- package/package.json +1 -1
- package/styles/components/breadcrumbs.css +1 -1
- package/styles/components/card.css +11 -0
- package/styles/components/chart.css +81 -7
- package/styles/components/combobox.css +3 -0
- package/styles/components/detail-layout.css +6 -0
- package/styles/components/flow.css +27 -0
- package/styles/components/form.css +5 -0
- package/styles/components/link.css +6 -0
- package/styles/components/modal.css +5 -0
- package/styles/components/pipeline.css +140 -5
- package/styles/components/sidebar.css +12 -3
- package/styles/components/states.css +10 -0
- package/styles/components/table-toolbar.css +5 -1
- package/styles/components/view-menu.css +5 -0
- package/tokens/base/color.json +1 -0
- package/tokens/dark/color.json +1 -0
package/build/css/tokens.css
CHANGED
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
--uix-accent-hover: color-mix(in srgb, var(--uix-accent) 88%, #000000);
|
|
24
24
|
--uix-accent-fg: var(--uix-brand-fg,#FFFFFF);
|
|
25
25
|
--uix-link: var(--uix-brand,#1447E6);
|
|
26
|
+
--uix-accent-text: color-mix(in srgb, var(--uix-accent) 65%, #000000);
|
|
26
27
|
--uix-ring: var(--uix-brand,#1447E6);
|
|
27
28
|
--uix-brand-muted: color-mix(in srgb, var(--uix-accent) 12%, transparent);
|
|
28
29
|
--uix-success: #047857;
|
|
@@ -172,6 +173,7 @@
|
|
|
172
173
|
--uix-accent: var(--uix-brand,#2563EB);
|
|
173
174
|
--uix-accent-hover: color-mix(in srgb, var(--uix-accent) 82%, #FFFFFF);
|
|
174
175
|
--uix-link: color-mix(in srgb, var(--uix-brand,#5B8DEF) 70%, #FFFFFF);
|
|
176
|
+
--uix-accent-text: color-mix(in srgb, var(--uix-accent) 70%, #FFFFFF);
|
|
175
177
|
--uix-ring: var(--uix-brand,#3080FF);
|
|
176
178
|
--uix-brand-muted: color-mix(in srgb, var(--uix-accent) 16%, transparent);
|
|
177
179
|
--uix-success: #00D294;
|
|
@@ -24,6 +24,7 @@ module.exports = {
|
|
|
24
24
|
"uix-accent-hover": "var(--uix-accent-hover)",
|
|
25
25
|
"uix-accent-fg": "var(--uix-accent-fg)",
|
|
26
26
|
"uix-link": "var(--uix-link)",
|
|
27
|
+
"uix-accent-text": "var(--uix-accent-text)",
|
|
27
28
|
"uix-ring": "var(--uix-ring)",
|
|
28
29
|
"uix-brand-muted": "var(--uix-brand-muted)",
|
|
29
30
|
"uix-success": "var(--uix-success)",
|
package/build/tailwind/theme.css
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
--color-uix-accent-hover: var(--uix-accent-hover);
|
|
22
22
|
--color-uix-accent-fg: var(--uix-accent-fg);
|
|
23
23
|
--color-uix-link: var(--uix-link);
|
|
24
|
+
--color-uix-accent-text: var(--uix-accent-text);
|
|
24
25
|
--color-uix-ring: var(--uix-ring);
|
|
25
26
|
--color-uix-brand-muted: var(--uix-brand-muted);
|
|
26
27
|
--color-uix-success: var(--uix-success);
|
package/build/ts/tokens.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* GENERATED — do not edit. */
|
|
2
|
-
export type UixTokenName = "bg-app" | "bg-subtle" | "bg-hover" | "bg-active" | "surface" | "surface-2" | "surface-3" | "border" | "border-strong" | "text" | "text-hushed" | "text-muted" | "text-reverse" | "text-hushed-reverse" | "accent" | "accent-dark" | "accent-light" | "accent-hover" | "accent-fg" | "link" | "ring" | "brand-muted" | "success" | "success-fg" | "success-bg" | "warning" | "warning-fg" | "warning-bg" | "warning-text" | "info" | "info-fg" | "info-bg" | "info-text" | "danger" | "danger-fg" | "danger-bg" | "danger-text" | "amber" | "amber-text" | "amber-bg" | "attention" | "attention-bg" | "attention-text" | "attention-solid" | "overdue" | "overdue-bg" | "overdue-text" | "overdue-solid" | "sev-4" | "sev-4-bg" | "sev-4-text" | "sev-5" | "sev-5-bg" | "sev-5-text" | "success-solid" | "warning-solid" | "info-solid" | "danger-solid" | "chart-1" | "chart-2" | "chart-3" | "chart-4" | "chart-5" | "chart-6" | "chart-7" | "chart-8" | "chart-neutral" | "row" | "row-alt" | "row-pinned-bg" | "row-selected-bg" | "scrollbar-thumb" | "scrollbar-thumb-hover" | "scrollbar-track" | "scrim" | "scrim-strong" | "shadow-sm" | "shadow-popover" | "shadow-overlay" | "highlight-top" | "ease-out" | "ease-out-strong" | "ease-in" | "ease-in-out" | "ease-spring" | "dur-fast" | "dur" | "dur-slow" | "dur-slower" | "lift" | "z-raised" | "z-sticky" | "z-dropdown" | "z-overlay" | "z-tooltip" | "z-toast" | "radius-xs" | "radius-sm" | "radius-md" | "radius-lg" | "radius-pill" | "row-h" | "row-h-compact" | "row-h-comfortable" | "control-h" | "sidebar-w" | "sidebar-w-rail" | "topbar-h" | "scrollbar-size" | "icon-sm" | "icon-md" | "icon-lg" | "peek-w" | "col-w-xs" | "col-w-sm" | "col-w-md" | "col-w-lg" | "col-w-xl" | "col-title-min" | "space-0" | "space-1" | "space-2" | "space-3" | "space-4" | "space-5" | "space-6" | "space-7" | "space-8" | "space-9" | "space-10" | "space-11" | "space-12" | "font-sans" | "font-heading" | "font-mono" | "text-display" | "leading-display" | "text-data-hero" | "leading-data-hero" | "text-h2" | "leading-h2" | "text-h3" | "leading-h3" | "text-body" | "leading-body" | "text-meta" | "leading-meta" | "text-eyebrow" | "leading-eyebrow" | "tracking-tight" | "tracking-eyebrow";
|
|
2
|
+
export type UixTokenName = "bg-app" | "bg-subtle" | "bg-hover" | "bg-active" | "surface" | "surface-2" | "surface-3" | "border" | "border-strong" | "text" | "text-hushed" | "text-muted" | "text-reverse" | "text-hushed-reverse" | "accent" | "accent-dark" | "accent-light" | "accent-hover" | "accent-fg" | "link" | "accent-text" | "ring" | "brand-muted" | "success" | "success-fg" | "success-bg" | "warning" | "warning-fg" | "warning-bg" | "warning-text" | "info" | "info-fg" | "info-bg" | "info-text" | "danger" | "danger-fg" | "danger-bg" | "danger-text" | "amber" | "amber-text" | "amber-bg" | "attention" | "attention-bg" | "attention-text" | "attention-solid" | "overdue" | "overdue-bg" | "overdue-text" | "overdue-solid" | "sev-4" | "sev-4-bg" | "sev-4-text" | "sev-5" | "sev-5-bg" | "sev-5-text" | "success-solid" | "warning-solid" | "info-solid" | "danger-solid" | "chart-1" | "chart-2" | "chart-3" | "chart-4" | "chart-5" | "chart-6" | "chart-7" | "chart-8" | "chart-neutral" | "row" | "row-alt" | "row-pinned-bg" | "row-selected-bg" | "scrollbar-thumb" | "scrollbar-thumb-hover" | "scrollbar-track" | "scrim" | "scrim-strong" | "shadow-sm" | "shadow-popover" | "shadow-overlay" | "highlight-top" | "ease-out" | "ease-out-strong" | "ease-in" | "ease-in-out" | "ease-spring" | "dur-fast" | "dur" | "dur-slow" | "dur-slower" | "lift" | "z-raised" | "z-sticky" | "z-dropdown" | "z-overlay" | "z-tooltip" | "z-toast" | "radius-xs" | "radius-sm" | "radius-md" | "radius-lg" | "radius-pill" | "row-h" | "row-h-compact" | "row-h-comfortable" | "control-h" | "sidebar-w" | "sidebar-w-rail" | "topbar-h" | "scrollbar-size" | "icon-sm" | "icon-md" | "icon-lg" | "peek-w" | "col-w-xs" | "col-w-sm" | "col-w-md" | "col-w-lg" | "col-w-xl" | "col-title-min" | "space-0" | "space-1" | "space-2" | "space-3" | "space-4" | "space-5" | "space-6" | "space-7" | "space-8" | "space-9" | "space-10" | "space-11" | "space-12" | "font-sans" | "font-heading" | "font-mono" | "text-display" | "leading-display" | "text-data-hero" | "leading-data-hero" | "text-h2" | "leading-h2" | "text-h3" | "leading-h3" | "text-body" | "leading-body" | "text-meta" | "leading-meta" | "text-eyebrow" | "leading-eyebrow" | "tracking-tight" | "tracking-eyebrow";
|
|
3
3
|
export declare const cssVar: Record<UixTokenName, string>;
|
|
4
4
|
export declare const light: Record<UixTokenName, string>;
|
|
5
5
|
export declare const dark: Partial<Record<UixTokenName, string>>;
|
package/build/ts/tokens.js
CHANGED
|
@@ -24,6 +24,7 @@ export const cssVar = {
|
|
|
24
24
|
"accent-hover": "var(--uix-accent-hover)",
|
|
25
25
|
"accent-fg": "var(--uix-accent-fg)",
|
|
26
26
|
"link": "var(--uix-link)",
|
|
27
|
+
"accent-text": "var(--uix-accent-text)",
|
|
27
28
|
"ring": "var(--uix-ring)",
|
|
28
29
|
"brand-muted": "var(--uix-brand-muted)",
|
|
29
30
|
"success": "var(--uix-success)",
|
|
@@ -178,6 +179,7 @@ export const light = {
|
|
|
178
179
|
"accent-hover": "color-mix(in srgb, var(--uix-accent) 88%, #000000)",
|
|
179
180
|
"accent-fg": "#FFFFFF",
|
|
180
181
|
"link": "#1447E6",
|
|
182
|
+
"accent-text": "color-mix(in srgb, var(--uix-accent) 65%, #000000)",
|
|
181
183
|
"ring": "#1447E6",
|
|
182
184
|
"brand-muted": "color-mix(in srgb, var(--uix-accent) 12%, transparent)",
|
|
183
185
|
"success": "#047857",
|
|
@@ -327,6 +329,7 @@ export const dark = {
|
|
|
327
329
|
"accent": "#2563EB",
|
|
328
330
|
"accent-hover": "color-mix(in srgb, var(--uix-accent) 82%, #FFFFFF)",
|
|
329
331
|
"link": "#5B8DEF",
|
|
332
|
+
"accent-text": "color-mix(in srgb, var(--uix-accent) 70%, #FFFFFF)",
|
|
330
333
|
"ring": "#3080FF",
|
|
331
334
|
"brand-muted": "color-mix(in srgb, var(--uix-accent) 16%, transparent)",
|
|
332
335
|
"success": "#00D294",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tensor_1/tokens",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.16.0",
|
|
4
4
|
"description": "UIx v2 design tokens — the --uix-* contract for house products (Tensor, POSx, SHOPx). One DTCG source -> CSS variables, Tailwind theme, and typed TS constants.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* uix breadcrumbs — depends only on --uix-* tokens. */
|
|
2
2
|
@layer uix.components {
|
|
3
|
-
.uix-breadcrumbs { display: flex; align-items: center; gap: var(--uix-space-2); flex-wrap: wrap; font-size: var(--uix-text-meta); color: var(--uix-text-muted); }
|
|
3
|
+
.uix-breadcrumbs { display: flex; align-items: center; gap: var(--uix-space-2); flex-wrap: wrap; margin: 0; padding: 0; list-style: none; font-size: var(--uix-text-meta); color: var(--uix-text-muted); }
|
|
4
4
|
.uix-breadcrumbs a { color: var(--uix-text-muted); text-decoration: none; }
|
|
5
5
|
/* already a quiet link by its own design — hover/focus parity with the quiet-link
|
|
6
6
|
contract in link.css, so the keyboard state matches the pointer state. */
|
|
@@ -6,4 +6,15 @@
|
|
|
6
6
|
.uix-card__subtitle { font-size: var(--uix-text-meta); color: var(--uix-text-muted); margin-top: var(--uix-space-1); }
|
|
7
7
|
.uix-card__body { padding: var(--uix-space-6); }
|
|
8
8
|
.uix-card__footer { padding: var(--uix-space-4) var(--uix-space-6); border-top: 1px solid var(--uix-border); display: flex; gap: var(--uix-space-2); justify-content: flex-end; }
|
|
9
|
+
.uix-card--interactive { display: block; color: inherit; text-decoration: none; cursor: pointer; transition: border-color var(--uix-dur-fast) var(--uix-ease-out), box-shadow var(--uix-dur-fast) var(--uix-ease-out), transform var(--uix-dur-fast) var(--uix-ease-out); }
|
|
10
|
+
.uix-card--interactive:is(:hover, :focus-visible) { border-color: var(--uix-border-strong); box-shadow: var(--uix-shadow-md); text-decoration: none; transform: translateY(-1px); }
|
|
11
|
+
.uix-card--interactive:focus-visible { outline: 2px solid var(--uix-ring); outline-offset: 2px; }
|
|
12
|
+
.uix-collapsible { border: 1px solid var(--uix-border); border-radius: var(--uix-radius-lg); background: var(--uix-surface); }
|
|
13
|
+
.uix-collapsible__summary { display: flex; align-items: center; justify-content: space-between; gap: var(--uix-space-3); padding: var(--uix-space-4) var(--uix-space-5); cursor: pointer; list-style: none; }
|
|
14
|
+
.uix-collapsible__summary::-webkit-details-marker { display: none; }
|
|
15
|
+
.uix-collapsible__title { color: var(--uix-text); font-weight: 600; }
|
|
16
|
+
.uix-collapsible__meta { margin-left: var(--uix-space-2); color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
|
|
17
|
+
.uix-collapsible__chevron { transition: transform var(--uix-dur-fast) var(--uix-ease-out); }
|
|
18
|
+
.uix-collapsible[open] .uix-collapsible__chevron { transform: rotate(180deg); }
|
|
19
|
+
.uix-collapsible__body { padding: 0 var(--uix-space-5) var(--uix-space-5); }
|
|
9
20
|
}
|
|
@@ -1,9 +1,83 @@
|
|
|
1
|
-
/* uix chart
|
|
1
|
+
/* uix chart — analytical card chrome and token-aware legend/annotation primitives.
|
|
2
|
+
Pair with semantic SVG/canvas output or the optional @tensor_1/react chart adapter. */
|
|
2
3
|
@layer uix.components {
|
|
3
|
-
.uix-chart {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
.uix-
|
|
4
|
+
.uix-chart {
|
|
5
|
+
position: relative; min-width: 0; overflow: hidden; padding: var(--uix-space-5);
|
|
6
|
+
border: 1px solid var(--uix-border); border-radius: var(--uix-radius-lg);
|
|
7
|
+
background: var(--uix-surface); box-shadow: var(--uix-shadow-sm);
|
|
8
|
+
}
|
|
9
|
+
.uix-chart--flat { box-shadow: none; }
|
|
10
|
+
.uix-chart--hero { padding: var(--uix-space-6); }
|
|
11
|
+
.uix-chart__header {
|
|
12
|
+
display: flex; align-items: flex-start; justify-content: space-between;
|
|
13
|
+
gap: var(--uix-space-4); min-width: 0; margin-bottom: var(--uix-space-4);
|
|
14
|
+
}
|
|
15
|
+
.uix-chart__heading { min-width: 0; }
|
|
16
|
+
.uix-chart__eyebrow {
|
|
17
|
+
margin-bottom: var(--uix-space-2); color: var(--uix-text-muted);
|
|
18
|
+
font-size: var(--uix-text-eyebrow); font-weight: 600;
|
|
19
|
+
letter-spacing: var(--uix-tracking-eyebrow); text-transform: uppercase;
|
|
20
|
+
}
|
|
21
|
+
.uix-chart__title { color: var(--uix-text); font-size: var(--uix-text-h3); font-weight: 600; }
|
|
22
|
+
.uix-chart__subtitle { color: var(--uix-text-muted); font-size: var(--uix-text-meta); line-height: var(--uix-leading-meta); }
|
|
23
|
+
.uix-chart__title + .uix-chart__subtitle { margin-top: var(--uix-space-1); }
|
|
24
|
+
.uix-chart__metric { flex: none; text-align: right; }
|
|
25
|
+
.uix-chart__metric-value {
|
|
26
|
+
color: var(--uix-text); font-family: var(--uix-font-mono); font-size: var(--uix-text-h2);
|
|
27
|
+
font-weight: 600; letter-spacing: var(--uix-tracking-tight); line-height: var(--uix-leading-h2);
|
|
28
|
+
}
|
|
29
|
+
.uix-chart__metric-label { margin-top: var(--uix-space-1); color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
|
|
30
|
+
.uix-chart__delta {
|
|
31
|
+
display: inline-flex; align-items: center; gap: var(--uix-space-1);
|
|
32
|
+
margin-top: var(--uix-space-2); color: var(--uix-text-hushed); font-size: var(--uix-text-meta); font-weight: 600;
|
|
33
|
+
}
|
|
34
|
+
.uix-chart__delta[data-tone="positive"] { color: var(--uix-success); }
|
|
35
|
+
.uix-chart__delta[data-tone="negative"] { color: var(--uix-danger-text); }
|
|
36
|
+
.uix-chart__delta[data-tone="warning"] { color: var(--uix-warning-text); }
|
|
37
|
+
.uix-chart__plot { position: relative; min-width: 0; }
|
|
38
|
+
.uix-chart__plot[data-loading] { display: grid; min-height: 180px; place-items: center; border-radius: var(--uix-radius-md); background: var(--uix-bg-subtle); }
|
|
39
|
+
.uix-chart__plot[data-loading]::after { content: "Loading chart…"; color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
|
|
40
|
+
.uix-chart__plot[data-loading] > * { position: absolute; opacity: 0; pointer-events: none; }
|
|
41
|
+
.uix-chart__plot[data-empty] {
|
|
42
|
+
display: grid; min-height: 180px; place-items: center; padding: var(--uix-space-6);
|
|
43
|
+
border: 1px dashed var(--uix-border-strong); border-radius: var(--uix-radius-md);
|
|
44
|
+
color: var(--uix-text-muted); text-align: center;
|
|
45
|
+
}
|
|
46
|
+
.uix-chart__annotation {
|
|
47
|
+
display: flex; align-items: flex-start; gap: var(--uix-space-2);
|
|
48
|
+
margin-top: var(--uix-space-3); padding: var(--uix-space-3);
|
|
49
|
+
border-left: 3px solid var(--uix-accent); border-radius: 0 var(--uix-radius-sm) var(--uix-radius-sm) 0;
|
|
50
|
+
background: var(--uix-brand-muted); color: var(--uix-text-hushed);
|
|
51
|
+
font-size: var(--uix-text-meta); line-height: var(--uix-leading-meta);
|
|
52
|
+
}
|
|
53
|
+
.uix-chart__footer {
|
|
54
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
55
|
+
gap: var(--uix-space-4); min-width: 0; margin-top: var(--uix-space-4);
|
|
56
|
+
padding-top: var(--uix-space-3); border-top: 1px solid var(--uix-border);
|
|
57
|
+
color: var(--uix-text-muted); font-size: var(--uix-text-meta);
|
|
58
|
+
}
|
|
59
|
+
.uix-chart__source { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
60
|
+
.uix-legend { display: flex; flex-wrap: wrap; gap: var(--uix-space-2) var(--uix-space-4); margin: 0; padding: 0; list-style: none; }
|
|
61
|
+
.uix-legend__item { display: inline-flex; align-items: center; gap: var(--uix-space-2); color: var(--uix-text-hushed); font-size: var(--uix-text-meta); }
|
|
62
|
+
.uix-legend__swatch { width: 10px; height: 10px; flex: none; border-radius: var(--uix-radius-xs); background: var(--legend-color, var(--uix-chart-1)); }
|
|
63
|
+
.uix-legend__swatch--line { width: 18px; height: 3px; border-radius: var(--uix-radius-pill); }
|
|
64
|
+
.uix-legend__swatch--dash { width: 18px; height: 0; border-top: 2px dashed var(--legend-color, var(--uix-chart-1)); border-radius: 0; background: transparent; }
|
|
65
|
+
|
|
66
|
+
/* Runtime-free throughput/history strip. Put its accessible summary on the parent figure. */
|
|
67
|
+
.uix-chart-ticks { display: grid; grid-template-columns: repeat(var(--tick-count, 12), minmax(3px, 1fr)); align-items: end; gap: var(--uix-space-1); height: 72px; }
|
|
68
|
+
.uix-chart-tick {
|
|
69
|
+
min-height: 4px; height: calc(var(--tick-value, .25) * 100%);
|
|
70
|
+
border-radius: var(--uix-radius-xs) var(--uix-radius-xs) 0 0;
|
|
71
|
+
background: var(--tick-color, var(--uix-chart-1));
|
|
72
|
+
}
|
|
73
|
+
.uix-chart-tick[data-state="quiet"] { --tick-color: var(--uix-bg-active); }
|
|
74
|
+
.uix-chart-tick[data-state="warning"] { --tick-color: var(--uix-warning); }
|
|
75
|
+
.uix-chart-tick[data-state="danger"] { --tick-color: var(--uix-danger); }
|
|
76
|
+
.uix-chart-tick[data-current] { box-shadow: 0 0 0 2px var(--uix-surface), 0 0 0 4px var(--uix-ring); }
|
|
77
|
+
@media (max-width: 520px) {
|
|
78
|
+
.uix-chart, .uix-chart--hero { padding: var(--uix-space-4); }
|
|
79
|
+
.uix-chart__header { flex-direction: column; }
|
|
80
|
+
.uix-chart__metric { text-align: left; }
|
|
81
|
+
.uix-chart__footer { align-items: flex-start; flex-direction: column; gap: var(--uix-space-2); }
|
|
82
|
+
}
|
|
9
83
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/* uix combobox / listbox surface — depends only on --uix-* tokens. */
|
|
2
2
|
@layer uix.components {
|
|
3
3
|
.uix-combobox { position: relative; }
|
|
4
|
+
.uix-combobox > .uix-input { width: 100%; }
|
|
5
|
+
.uix-combobox__listbox { position: absolute; z-index: var(--uix-z-dropdown); inset-inline: 0; top: calc(100% + var(--uix-space-1)); max-height: 240px; overflow-y: auto; }
|
|
4
6
|
.uix-listbox {
|
|
5
7
|
list-style: none; margin: 0; padding: var(--uix-space-1); min-width: 200px;
|
|
6
8
|
background: var(--uix-surface-2); border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md);
|
|
@@ -11,6 +13,7 @@
|
|
|
11
13
|
cursor: pointer; display: flex; align-items: center; gap: var(--uix-space-2);
|
|
12
14
|
}
|
|
13
15
|
.uix-listbox__option:hover, .uix-listbox__option[aria-selected="true"], .uix-listbox__option[data-active] { background: var(--uix-bg-hover); }
|
|
16
|
+
.uix-listbox__option[aria-disabled="true"] { cursor: not-allowed; opacity: .55; }
|
|
14
17
|
.uix-listbox__option[aria-selected="true"] { color: var(--uix-link); }
|
|
15
18
|
.uix-listbox__empty { padding: var(--uix-space-3); text-align: center; color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
|
|
16
19
|
}
|
|
@@ -3,5 +3,11 @@
|
|
|
3
3
|
.uix-detail { display: grid; grid-template-columns: 1fr 280px; gap: var(--uix-space-5); align-items: start; }
|
|
4
4
|
.uix-detail__main { min-width: 0; display: flex; flex-direction: column; gap: var(--uix-space-4); }
|
|
5
5
|
.uix-detail__side { display: flex; flex-direction: column; gap: var(--uix-space-4); }
|
|
6
|
+
.uix-detail-page { display: flex; flex-direction: column; gap: var(--uix-space-5); }
|
|
7
|
+
.uix-detail-page__back { align-self: flex-start; }
|
|
8
|
+
.uix-detail-page__metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--uix-space-3); margin: 0; }
|
|
9
|
+
.uix-detail-page__metrics > div { padding: var(--uix-space-3) var(--uix-space-4); border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md); background: var(--uix-surface); }
|
|
10
|
+
.uix-detail-page__metrics dt { color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
|
|
11
|
+
.uix-detail-page__metrics dd { margin: var(--uix-space-1) 0 0; color: var(--uix-text); font-size: var(--uix-text-h3); font-weight: 600; }
|
|
6
12
|
@media (max-width: 820px) { .uix-detail { grid-template-columns: 1fr; } }
|
|
7
13
|
}
|
|
@@ -22,9 +22,22 @@
|
|
|
22
22
|
color: var(--tone-fg, var(--uix-text-muted));
|
|
23
23
|
}
|
|
24
24
|
.uix-node__icon svg { width: var(--uix-icon-sm); height: var(--uix-icon-sm); }
|
|
25
|
+
.uix-node--no-icon { grid-template-columns: 1fr; }
|
|
25
26
|
.uix-node__body { min-width: 0; }
|
|
27
|
+
.uix-node__eyebrow {
|
|
28
|
+
margin-bottom: var(--uix-space-1); color: var(--tone-fg, var(--uix-text-muted));
|
|
29
|
+
font-size: var(--uix-text-eyebrow); font-weight: 600;
|
|
30
|
+
letter-spacing: var(--uix-tracking-eyebrow); text-transform: uppercase;
|
|
31
|
+
}
|
|
26
32
|
.uix-node__title { font-weight: 500; line-height: 1.25; }
|
|
27
33
|
.uix-node__meta { font-size: var(--uix-text-meta); color: var(--uix-text-muted); }
|
|
34
|
+
.uix-node__footer {
|
|
35
|
+
grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between;
|
|
36
|
+
gap: var(--uix-space-3); min-width: 0; margin-top: var(--uix-space-1);
|
|
37
|
+
padding-top: var(--uix-space-2); border-top: 1px solid var(--uix-border);
|
|
38
|
+
color: var(--uix-text-hushed); font-size: var(--uix-text-meta);
|
|
39
|
+
}
|
|
40
|
+
.uix-node--wide { min-width: 208px; max-width: 280px; }
|
|
28
41
|
.uix-node__status {
|
|
29
42
|
display: inline-flex; align-items: center; gap: var(--uix-space-2); margin-top: var(--uix-space-1);
|
|
30
43
|
font-size: var(--uix-text-eyebrow); letter-spacing: var(--uix-tracking-eyebrow);
|
|
@@ -87,6 +100,12 @@
|
|
|
87
100
|
position: relative; width: 100%;
|
|
88
101
|
color: var(--uix-border-strong); /* edges inherit via currentColor */
|
|
89
102
|
}
|
|
103
|
+
.uix-flow--panel {
|
|
104
|
+
padding: var(--uix-space-6); border: 1px solid var(--uix-border);
|
|
105
|
+
border-radius: var(--uix-radius-lg); background-color: var(--uix-bg-subtle);
|
|
106
|
+
background-image: radial-gradient(var(--uix-border) 1px, transparent 1px);
|
|
107
|
+
background-size: 22px 22px; box-shadow: inset 0 1px 0 var(--uix-surface);
|
|
108
|
+
}
|
|
90
109
|
.uix-flow__edges {
|
|
91
110
|
position: absolute; inset: 0; width: 100%; height: 100%;
|
|
92
111
|
overflow: visible; pointer-events: none; /* never block node hover/focus */
|
|
@@ -120,6 +139,8 @@
|
|
|
120
139
|
}
|
|
121
140
|
.uix-flow__connector[data-done] { border-color: var(--uix-success); }
|
|
122
141
|
.uix-flow__connector[data-done]::after { border-color: var(--uix-success); }
|
|
142
|
+
.uix-flow__connector[data-running] { border-color: var(--uix-accent); border-top-style: dashed; }
|
|
143
|
+
.uix-flow__connector[data-running]::after { border-color: var(--uix-accent); }
|
|
123
144
|
|
|
124
145
|
/* ---- branch / loop / mindmap: absolutely-positioned nodes over an SVG edge layer.
|
|
125
146
|
Container aspect-ratio matches each SVG viewBox so % node positions and path
|
|
@@ -193,4 +214,10 @@
|
|
|
193
214
|
.uix-flow:hover .uix-flow__edge,
|
|
194
215
|
.uix-flow:focus-within .uix-flow__edge { animation: none; }
|
|
195
216
|
}
|
|
217
|
+
|
|
218
|
+
@media (max-width: 720px) {
|
|
219
|
+
.uix-flow--panel { padding: var(--uix-space-4); overflow-x: auto; }
|
|
220
|
+
.uix-flow--linear .uix-flow__row { min-width: max-content; flex-wrap: nowrap; }
|
|
221
|
+
.uix-flow--linear .uix-flow__connector { flex-basis: 38px; }
|
|
222
|
+
}
|
|
196
223
|
}
|
|
@@ -11,4 +11,9 @@
|
|
|
11
11
|
.uix-validation-summary strong { color: var(--uix-danger-text); }
|
|
12
12
|
.uix-validation-summary ul { margin: var(--uix-space-2) 0 0; padding-left: var(--uix-space-5); }
|
|
13
13
|
.uix-validation-summary a { color: var(--uix-danger-text); text-decoration: underline; }
|
|
14
|
+
.uix-toggle-row { display: flex; align-items: center; justify-content: space-between; gap: var(--uix-space-5); padding-block: var(--uix-space-3); }
|
|
15
|
+
.uix-toggle-row + .uix-toggle-row { border-top: 1px solid var(--uix-border); }
|
|
16
|
+
.uix-toggle-row__copy { min-width: 0; }
|
|
17
|
+
.uix-toggle-row__label { color: var(--uix-text); font-weight: 500; }
|
|
18
|
+
.uix-toggle-row__description { margin-top: var(--uix-space-1); color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
|
|
14
19
|
}
|
|
@@ -96,3 +96,9 @@
|
|
|
96
96
|
link.css is imported last, so a blanket display here would flatten them. */
|
|
97
97
|
a:is(.uix-card, .uix-stat, .uix-kanban__card) { display: block; }
|
|
98
98
|
}
|
|
99
|
+
|
|
100
|
+
@layer uix.components {
|
|
101
|
+
.uix-related-links__title { margin: 0 0 var(--uix-space-3); font-size: var(--uix-text-h3); }
|
|
102
|
+
.uix-related-links__list { display: grid; gap: var(--uix-space-2); margin: 0; padding: 0; list-style: none; }
|
|
103
|
+
.uix-related-links__list li { display: flex; justify-content: space-between; gap: var(--uix-space-3); color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
|
|
104
|
+
}
|
|
@@ -29,3 +29,8 @@
|
|
|
29
29
|
.uix-dialog__body { padding: var(--uix-space-5); color: var(--uix-text-hushed); }
|
|
30
30
|
.uix-dialog__footer { display: flex; gap: var(--uix-space-2); justify-content: flex-end; padding: var(--uix-space-4) var(--uix-space-5); border-top: 1px solid var(--uix-border); }
|
|
31
31
|
}
|
|
32
|
+
|
|
33
|
+
@layer uix.components {
|
|
34
|
+
.uix-prompt { display: grid; gap: var(--uix-space-3); }
|
|
35
|
+
.uix-prompt__actions { margin: var(--uix-space-3) calc(var(--uix-space-5) * -1) calc(var(--uix-space-5) * -1); }
|
|
36
|
+
}
|
|
@@ -1,9 +1,144 @@
|
|
|
1
|
-
/* uix
|
|
1
|
+
/* uix pipeline — compact stage bar + detailed operational stage rail.
|
|
2
|
+
Depends only on --uix-* tokens; state is always repeated in visible text. */
|
|
2
3
|
@layer uix.components {
|
|
3
|
-
.uix-pipeline {
|
|
4
|
-
|
|
4
|
+
.uix-pipeline {
|
|
5
|
+
display: flex;
|
|
6
|
+
gap: var(--uix-space-1);
|
|
7
|
+
min-width: 0;
|
|
8
|
+
margin: 0;
|
|
9
|
+
padding: 0;
|
|
10
|
+
list-style: none;
|
|
11
|
+
}
|
|
12
|
+
.uix-pipeline__stage {
|
|
13
|
+
position: relative;
|
|
14
|
+
flex: 1;
|
|
15
|
+
min-width: 0;
|
|
16
|
+
padding: var(--uix-space-2);
|
|
17
|
+
text-align: center;
|
|
18
|
+
font-size: var(--uix-text-meta);
|
|
19
|
+
color: var(--stage-fg, var(--uix-text-muted));
|
|
20
|
+
background: var(--stage-bg, var(--uix-bg-subtle));
|
|
21
|
+
border-color: var(--stage-border, transparent);
|
|
22
|
+
}
|
|
5
23
|
.uix-pipeline__stage:first-child { border-radius: var(--uix-radius-pill) 0 0 var(--uix-radius-pill); }
|
|
6
24
|
.uix-pipeline__stage:last-child { border-radius: 0 var(--uix-radius-pill) var(--uix-radius-pill) 0; }
|
|
7
|
-
.uix-pipeline__stage[data-state="done"]
|
|
8
|
-
.uix-pipeline__stage[data-state="
|
|
25
|
+
.uix-pipeline__stage[data-state="done"],
|
|
26
|
+
.uix-pipeline__stage[data-state="complete"] {
|
|
27
|
+
--stage-bg: var(--uix-accent); --stage-fg: var(--uix-accent-fg); --stage-dot: var(--uix-success);
|
|
28
|
+
}
|
|
29
|
+
.uix-pipeline__stage[data-state="active"],
|
|
30
|
+
.uix-pipeline__stage[data-state="current"],
|
|
31
|
+
.uix-pipeline__stage[data-state="running"] {
|
|
32
|
+
--stage-bg: var(--uix-brand-muted); --stage-fg: var(--uix-link);
|
|
33
|
+
--stage-border: var(--uix-accent); --stage-dot: var(--uix-accent); font-weight: 600;
|
|
34
|
+
}
|
|
35
|
+
.uix-pipeline__stage[data-state="failed"],
|
|
36
|
+
.uix-pipeline__stage[data-state="error"] {
|
|
37
|
+
--stage-bg: var(--uix-danger-bg); --stage-fg: var(--uix-danger-text);
|
|
38
|
+
--stage-border: var(--uix-danger); --stage-dot: var(--uix-danger);
|
|
39
|
+
}
|
|
40
|
+
.uix-pipeline__stage[data-state="blocked"] {
|
|
41
|
+
--stage-bg: var(--uix-warning-bg); --stage-fg: var(--uix-warning-text);
|
|
42
|
+
--stage-border: var(--uix-warning); --stage-dot: var(--uix-warning);
|
|
43
|
+
}
|
|
44
|
+
.uix-pipeline__stage[data-state="waiting"],
|
|
45
|
+
.uix-pipeline__stage[data-state="pending"] { --stage-dot: var(--uix-text-muted); }
|
|
46
|
+
|
|
47
|
+
/* Detailed mode scrolls at narrow widths instead of crushing timing and state. */
|
|
48
|
+
.uix-pipeline--detailed {
|
|
49
|
+
position: relative;
|
|
50
|
+
gap: 0;
|
|
51
|
+
overflow-x: auto;
|
|
52
|
+
padding: var(--uix-space-1) var(--uix-space-1) var(--uix-space-4);
|
|
53
|
+
scrollbar-width: thin;
|
|
54
|
+
scrollbar-color: var(--uix-border-strong) transparent;
|
|
55
|
+
scroll-snap-type: x proximity;
|
|
56
|
+
}
|
|
57
|
+
.uix-pipeline--detailed::before {
|
|
58
|
+
content: "";
|
|
59
|
+
position: absolute;
|
|
60
|
+
top: calc(var(--uix-space-1) + 21px);
|
|
61
|
+
right: var(--uix-space-8);
|
|
62
|
+
left: var(--uix-space-8);
|
|
63
|
+
height: 2px;
|
|
64
|
+
background: var(--uix-border);
|
|
65
|
+
}
|
|
66
|
+
.uix-pipeline--detailed .uix-pipeline__stage {
|
|
67
|
+
flex: 1 0 168px;
|
|
68
|
+
display: grid;
|
|
69
|
+
grid-template-rows: 42px auto;
|
|
70
|
+
gap: var(--uix-space-3);
|
|
71
|
+
padding: 0 var(--uix-space-2);
|
|
72
|
+
text-align: left;
|
|
73
|
+
color: var(--uix-text);
|
|
74
|
+
background: transparent;
|
|
75
|
+
border: 0;
|
|
76
|
+
border-radius: 0;
|
|
77
|
+
scroll-snap-align: start;
|
|
78
|
+
}
|
|
79
|
+
.uix-pipeline__marker {
|
|
80
|
+
position: relative;
|
|
81
|
+
z-index: var(--uix-z-raised);
|
|
82
|
+
display: grid;
|
|
83
|
+
place-items: center;
|
|
84
|
+
align-self: start;
|
|
85
|
+
width: 42px;
|
|
86
|
+
height: 42px;
|
|
87
|
+
border: 1px solid var(--stage-border, var(--uix-border-strong));
|
|
88
|
+
border-radius: var(--uix-radius-pill);
|
|
89
|
+
background: var(--stage-bg, var(--uix-surface));
|
|
90
|
+
color: var(--stage-fg, var(--uix-text-muted));
|
|
91
|
+
box-shadow: 0 0 0 var(--uix-space-1) var(--uix-surface), var(--uix-shadow-sm);
|
|
92
|
+
font-family: var(--uix-font-mono);
|
|
93
|
+
font-size: var(--uix-text-meta);
|
|
94
|
+
font-weight: 600;
|
|
95
|
+
}
|
|
96
|
+
.uix-pipeline__marker svg { width: var(--uix-icon-sm); height: var(--uix-icon-sm); }
|
|
97
|
+
.uix-pipeline__content {
|
|
98
|
+
min-width: 0;
|
|
99
|
+
padding: var(--uix-space-3);
|
|
100
|
+
border: 1px solid var(--stage-border, var(--uix-border));
|
|
101
|
+
border-radius: var(--uix-radius-md);
|
|
102
|
+
background: var(--uix-surface);
|
|
103
|
+
box-shadow: var(--uix-shadow-sm);
|
|
104
|
+
}
|
|
105
|
+
.uix-pipeline__stage[data-state="active"] .uix-pipeline__content,
|
|
106
|
+
.uix-pipeline__stage[data-state="current"] .uix-pipeline__content,
|
|
107
|
+
.uix-pipeline__stage[data-state="running"] .uix-pipeline__content {
|
|
108
|
+
box-shadow: var(--uix-shadow-sm), 0 0 0 3px var(--uix-brand-muted);
|
|
109
|
+
}
|
|
110
|
+
.uix-pipeline__eyebrow {
|
|
111
|
+
display: flex; align-items: center; justify-content: space-between; gap: var(--uix-space-2);
|
|
112
|
+
margin-bottom: var(--uix-space-2); color: var(--stage-fg, var(--uix-text-muted));
|
|
113
|
+
font-size: var(--uix-text-eyebrow); font-weight: 600;
|
|
114
|
+
letter-spacing: var(--uix-tracking-eyebrow); text-transform: uppercase;
|
|
115
|
+
}
|
|
116
|
+
.uix-pipeline__state { display: inline-flex; align-items: center; gap: var(--uix-space-2); }
|
|
117
|
+
.uix-pipeline__state::before {
|
|
118
|
+
content: ""; width: 7px; height: 7px; flex: none; border-radius: 50%;
|
|
119
|
+
background: var(--stage-dot, var(--uix-text-muted));
|
|
120
|
+
}
|
|
121
|
+
.uix-pipeline__stage[data-state="blocked"] .uix-pipeline__state::before { border-radius: var(--uix-radius-xs); }
|
|
122
|
+
.uix-pipeline__title {
|
|
123
|
+
overflow: hidden; color: var(--uix-text); font-size: var(--uix-text-body); font-weight: 600;
|
|
124
|
+
line-height: var(--uix-leading-body); text-overflow: ellipsis; white-space: nowrap;
|
|
125
|
+
}
|
|
126
|
+
.uix-pipeline__description {
|
|
127
|
+
margin-top: var(--uix-space-1); color: var(--uix-text-muted);
|
|
128
|
+
font-size: var(--uix-text-meta); font-weight: 400; line-height: var(--uix-leading-meta);
|
|
129
|
+
}
|
|
130
|
+
.uix-pipeline__meta {
|
|
131
|
+
display: flex; align-items: center; gap: var(--uix-space-2); min-width: 0;
|
|
132
|
+
margin-top: var(--uix-space-3); padding-top: var(--uix-space-3); border-top: 1px solid var(--uix-border);
|
|
133
|
+
color: var(--uix-text-hushed); font-size: var(--uix-text-meta); font-weight: 400;
|
|
134
|
+
}
|
|
135
|
+
.uix-pipeline__meta > :last-child { margin-left: auto; }
|
|
136
|
+
.uix-pipeline__stage:focus-visible,
|
|
137
|
+
.uix-pipeline__stage:has(:focus-visible) .uix-pipeline__content {
|
|
138
|
+
outline: none; border-color: var(--uix-ring);
|
|
139
|
+
box-shadow: 0 0 0 2px var(--uix-surface), 0 0 0 4px var(--uix-ring);
|
|
140
|
+
}
|
|
141
|
+
@media (max-width: 640px) {
|
|
142
|
+
.uix-pipeline--detailed .uix-pipeline__stage { flex-basis: min(78vw, 240px); }
|
|
143
|
+
}
|
|
9
144
|
}
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
.uix-navitem[aria-current="page"] .uix-navitem__badge { color: var(--uix-text-hushed); }
|
|
35
35
|
.uix-navitem__star { display: grid; place-items: center; width: 22px; height: 22px; border: 0; background: transparent; color: var(--uix-text-muted); cursor: pointer; border-radius: var(--uix-radius-xs); opacity: 0; transition: opacity var(--uix-dur-fast) var(--uix-ease-out); }
|
|
36
36
|
.uix-navitem__star svg { width: 15px; height: 15px; }
|
|
37
|
-
.uix-navitem:hover .uix-navitem__star { opacity: 1; }
|
|
37
|
+
.uix-navitem:hover .uix-navitem__star, .uix-navitem:focus-within .uix-navitem__star, .uix-navitem__star:focus-visible { opacity: 1; }
|
|
38
38
|
.uix-navitem__star[data-on] { opacity: 1; color: var(--uix-warning); }
|
|
39
39
|
.uix-navitem__star[data-on] svg { fill: currentColor; }
|
|
40
40
|
|
|
@@ -47,13 +47,13 @@
|
|
|
47
47
|
border: 0; background: transparent; cursor: pointer; color: inherit;
|
|
48
48
|
}
|
|
49
49
|
.uix-favourites__list { display: flex; flex-direction: column; gap: calc(var(--uix-space-1) / 4); list-style: none; margin: 0; padding: 0; }
|
|
50
|
-
.uix-favourites__empty { padding: calc(var(--uix-space-1) * 1.5) var(--uix-space-2); color:
|
|
50
|
+
.uix-favourites__empty { padding: calc(var(--uix-space-1) * 1.5) var(--uix-space-2); color: var(--uix-text-hushed); }
|
|
51
51
|
.uix-favourites__row { position: relative; display: flex; align-items: center; }
|
|
52
52
|
.uix-favourites__link { min-width: 0; flex: 1; }
|
|
53
53
|
.uix-favourites__menu-trigger {
|
|
54
54
|
margin-left: auto; display: inline-flex; height: 20px; width: 20px; flex-shrink: 0;
|
|
55
55
|
align-items: center; justify-content: center; border: 0; border-radius: calc(var(--uix-radius-xs) / 2);
|
|
56
|
-
background: transparent; cursor: pointer; color:
|
|
56
|
+
background: transparent; cursor: pointer; color: var(--uix-text-muted);
|
|
57
57
|
opacity: 0; transition: opacity var(--uix-dur-fast) var(--uix-ease-out);
|
|
58
58
|
}
|
|
59
59
|
.uix-favourites__row:hover .uix-favourites__menu-trigger,
|
|
@@ -96,7 +96,16 @@
|
|
|
96
96
|
.uix-sidebar[data-collapsed] .uix-sidebar__brand,
|
|
97
97
|
.uix-sidebar[data-collapsed] .uix-navgroup__chevron,
|
|
98
98
|
.uix-sidebar[data-collapsed] .uix-navgroup__panel { display: none; }
|
|
99
|
+
.uix-sidebar[data-nav="rail"] .uix-navitem__label,
|
|
100
|
+
.uix-sidebar[data-nav="rail"] .uix-navitem__badge,
|
|
101
|
+
.uix-sidebar[data-nav="rail"] .uix-navitem__star,
|
|
102
|
+
.uix-sidebar[data-nav="rail"] .uix-sidebar__eyebrow,
|
|
103
|
+
.uix-sidebar[data-nav="rail"] .uix-sidebar__brand,
|
|
104
|
+
.uix-sidebar[data-nav="rail"] .uix-navgroup__chevron,
|
|
105
|
+
.uix-sidebar[data-nav="rail"] .uix-navgroup__panel { display: none; }
|
|
99
106
|
/* center the icon-only rail; head keeps just the toggle, centered */
|
|
100
107
|
.uix-sidebar[data-collapsed] .uix-navitem { justify-content: center; padding: 0; gap: 0; }
|
|
101
108
|
.uix-sidebar[data-collapsed] .uix-sidebar__head { justify-content: center; padding-inline: 0; }
|
|
109
|
+
.uix-sidebar[data-nav="rail"] .uix-navitem { justify-content: center; padding: 0; gap: 0; }
|
|
110
|
+
.uix-sidebar[data-nav="rail"] .uix-sidebar__head { justify-content: center; padding-inline: 0; }
|
|
102
111
|
}
|
|
@@ -4,10 +4,20 @@
|
|
|
4
4
|
.uix-empty__icon { width: 44px; height: 44px; display: grid; place-items: center; border-radius: 50%; background: var(--uix-bg-subtle); color: var(--uix-text-muted); }
|
|
5
5
|
.uix-empty__icon svg { width: 22px; height: 22px; }
|
|
6
6
|
.uix-empty__title { font-size: var(--uix-text-h3); font-weight: 600; color: var(--uix-text); }
|
|
7
|
+
.uix-empty > p { max-width: 52ch; margin: 0; }
|
|
8
|
+
.uix-empty--drawer { padding: var(--uix-space-5); }
|
|
9
|
+
.uix-empty--inline { align-items: flex-start; padding: var(--uix-space-4); text-align: left; }
|
|
10
|
+
.uix-empty--page, .uix-empty--full-page { min-height: min(55vh, 520px); justify-content: center; }
|
|
7
11
|
/* error tone — ErrorState reuses .uix-empty with a danger-toned icon */
|
|
8
12
|
.uix-empty__icon--danger { background: var(--uix-danger-bg); color: var(--uix-danger); }
|
|
13
|
+
.uix-empty__icon--warning { background: var(--uix-warning-bg); color: var(--uix-warning-text); }
|
|
14
|
+
.uix-stack--compact { gap: var(--uix-space-2); }
|
|
9
15
|
|
|
10
16
|
.uix-skeleton { background: linear-gradient(90deg, var(--uix-bg-subtle) 25%, var(--uix-bg-hover) 50%, var(--uix-bg-subtle) 75%); background-size: 200% 100%; animation: uix-shimmer 1.4s linear infinite; border-radius: var(--uix-radius-sm); }
|
|
11
17
|
.uix-skeleton--text { height: 12px; border-radius: var(--uix-radius-pill); }
|
|
12
18
|
.uix-skeleton--circle { border-radius: 50%; }
|
|
19
|
+
.uix-operation { display: grid; gap: var(--uix-space-3); padding: var(--uix-space-4); border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md); background: var(--uix-surface); }
|
|
20
|
+
.uix-operation__head { display: flex; align-items: center; justify-content: space-between; gap: var(--uix-space-3); }
|
|
21
|
+
.uix-operation__description { color: var(--uix-text-muted); font-size: var(--uix-text-meta); }
|
|
22
|
+
.uix-operation__action { justify-self: start; }
|
|
13
23
|
}
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
transition: background-color var(--uix-dur-fast) var(--uix-ease-out), border-color var(--uix-dur-fast) var(--uix-ease-out), color var(--uix-dur-fast) var(--uix-ease-out);
|
|
16
16
|
}
|
|
17
17
|
.uix-chip:hover { border-color: var(--uix-border-strong); color: var(--uix-text); }
|
|
18
|
-
.uix-chip[data-on] { background: var(--uix-brand-muted); border-color: var(--uix-accent); color: var(--uix-accent); }
|
|
18
|
+
.uix-chip[data-on] { background: var(--uix-brand-muted); border-color: var(--uix-accent); color: var(--uix-accent-text); }
|
|
19
|
+
.uix-chip:focus-visible { outline: 2px solid var(--uix-ring); outline-offset: 2px; }
|
|
19
20
|
.uix-chip__count { font-variant-numeric: tabular-nums; opacity: .7; }
|
|
21
|
+
.uix-filter-popover { display: grid; gap: var(--uix-space-4); min-width: 260px; padding: var(--uix-space-4); }
|
|
22
|
+
.uix-filter-popover .uix-label { display: grid; gap: var(--uix-space-2); }
|
|
23
|
+
.uix-filter-popover__actions { display: flex; justify-content: flex-end; gap: var(--uix-space-2); }
|
|
20
24
|
}
|
|
@@ -11,4 +11,9 @@
|
|
|
11
11
|
.uix-view-menu .uix-segmented__option { flex: 1; text-align: center; }
|
|
12
12
|
.uix-view-menu__cols { display: flex; flex-direction: column; gap: var(--uix-space-1); max-height: 180px; overflow: auto; }
|
|
13
13
|
.uix-view-menu__cols .uix-menu__item { font-size: var(--uix-text-meta); }
|
|
14
|
+
.uix-saved-views__row { display: flex; align-items: center; }
|
|
15
|
+
.uix-saved-views__row > .uix-menu__item { min-width: 0; flex: 1; }
|
|
16
|
+
.uix-saved-views__pin { display: grid; place-items: center; width: 28px; height: 28px; border: 0; border-radius: var(--uix-radius-sm); background: transparent; color: var(--uix-text-muted); cursor: pointer; }
|
|
17
|
+
.uix-saved-views__pin:is(:hover, :focus-visible), .uix-saved-views__pin[data-on] { color: var(--uix-warning-text); background: var(--uix-bg-hover); }
|
|
18
|
+
.uix-saved-views__footer { border-top: 1px solid var(--uix-border); margin-top: var(--uix-space-1); padding: var(--uix-space-2); }
|
|
14
19
|
}
|
package/tokens/base/color.json
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"accent-hover": { "$type": "color", "$value": "color-mix(in srgb, var(--uix-accent) 88%, #000000)", "$description": "Primary-button hover. Theme-aware: derived from the live accent so it tracks the brand override (light darkens, dark lightens — see tokens/dark)." },
|
|
22
22
|
"accent-fg": { "$type": "color", "$value": "var(--uix-brand-fg,#FFFFFF)", "$description": "Runtime: chains through --uix-brand-fg." },
|
|
23
23
|
"link": { "$type": "color", "$value": "var(--uix-brand,#1447E6)", "$description": "Runtime: chains through --uix-brand." },
|
|
24
|
+
"accent-text": { "$type": "color", "$value": "color-mix(in srgb, var(--uix-accent) 65%, #000000)", "$description": "The brand hue as TEXT on a neutral or --uix-brand-muted surface (a selected filter chip, an active tab label). The raw accent is a fill colour: a bright brand (POSx green, mission-control blue) reads below 3:1 as text on its own tint. Darkened from the live accent so it tracks the brand override; the worst shipped theme is 5.5:1 on brand-muted. Not for text ON a solid accent fill, which is --uix-accent-fg." },
|
|
24
25
|
"ring": { "$type": "color", "$value": "var(--uix-brand,#1447E6)", "$description": "Runtime: chains through --uix-brand." },
|
|
25
26
|
"brand-muted": { "$type": "color", "$value": "color-mix(in srgb, var(--uix-accent) 12%, transparent)", "$description": "Runtime: color-mix of the live accent." },
|
|
26
27
|
|
package/tokens/dark/color.json
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"accent": { "$type": "color", "$value": "var(--uix-brand,#2563EB)" },
|
|
17
17
|
"accent-hover": { "$type": "color", "$value": "color-mix(in srgb, var(--uix-accent) 82%, #FFFFFF)", "$description": "On dark, primary-button hover LIGHTENS the accent (the light-theme value darkens). Tracks the live brand override." },
|
|
18
18
|
"link": { "$type": "color", "$value": "color-mix(in srgb, var(--uix-brand,#5B8DEF) 70%, #FFFFFF)", "$description": "Brightened on dark so links read clearly as links and stay distinct from the solid accent button background." },
|
|
19
|
+
"accent-text": { "$type": "color", "$value": "color-mix(in srgb, var(--uix-accent) 70%, #FFFFFF)", "$description": "On dark, accent-hued text LIGHTENS the accent (the light-theme value darkens): the solid dark accent measured 3.2:1 on its own 16% tint. Same 70% weight as --uix-link." },
|
|
19
20
|
"ring": { "$type": "color", "$value": "var(--uix-brand,#3080FF)" },
|
|
20
21
|
"brand-muted": { "$type": "color", "$value": "color-mix(in srgb, var(--uix-accent) 16%, transparent)" },
|
|
21
22
|
|