@tensor_1/tokens 2.11.0 → 2.12.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 +2 -0
- package/build/css/components.css +1 -1847
- package/build/css/styles.css +1 -2188
- package/package.json +12 -2
- package/styles/components/alert.css +16 -0
- package/styles/components/app-shell.css +37 -0
- package/styles/components/attachment.css +10 -0
- package/styles/components/audit-log.css +11 -0
- package/styles/components/avatar.css +25 -0
- package/styles/components/breadcrumbs.css +10 -0
- package/styles/components/button.css +49 -0
- package/styles/components/calendar.css +13 -0
- package/styles/components/card.css +9 -0
- package/styles/components/chart.css +9 -0
- package/styles/components/checkbox.css +20 -0
- package/styles/components/combobox.css +16 -0
- package/styles/components/command-palette.css +14 -0
- package/styles/components/comments.css +17 -0
- package/styles/components/contact-card.css +12 -0
- package/styles/components/description-list.css +6 -0
- package/styles/components/detail-layout.css +7 -0
- package/styles/components/drawer.css +24 -0
- package/styles/components/editorial-home.css +185 -0
- package/styles/components/file-upload.css +14 -0
- package/styles/components/flow.css +196 -0
- package/styles/components/form.css +14 -0
- package/styles/components/heartbeat.css +12 -0
- package/styles/components/inbox.css +13 -0
- package/styles/components/input.css +39 -0
- package/styles/components/kanban.css +14 -0
- package/styles/components/kbd.css +8 -0
- package/styles/components/labels.css +13 -0
- package/styles/components/lightbox.css +13 -0
- package/styles/components/link.css +98 -0
- package/styles/components/list.css +10 -0
- package/styles/components/media.css +9 -0
- package/styles/components/menu.css +15 -0
- package/styles/components/meter.css +9 -0
- package/styles/components/modal.css +31 -0
- package/styles/components/notification-center.css +14 -0
- package/styles/components/page-header.css +9 -0
- package/styles/components/pagination.css +14 -0
- package/styles/components/peek.css +46 -0
- package/styles/components/pipeline.css +9 -0
- package/styles/components/popover.css +11 -0
- package/styles/components/progress.css +12 -0
- package/styles/components/prose.css +27 -0
- package/styles/components/radio.css +20 -0
- package/styles/components/reactions.css +22 -0
- package/styles/components/segmented.css +12 -0
- package/styles/components/select.css +23 -0
- package/styles/components/sidebar.css +102 -0
- package/styles/components/sla.css +8 -0
- package/styles/components/slider.css +16 -0
- package/styles/components/spinner.css +10 -0
- package/styles/components/stat-tile.css +11 -0
- package/styles/components/states.css +13 -0
- package/styles/components/status-pill.css +37 -0
- package/styles/components/stepper.css +13 -0
- package/styles/components/steps.css +18 -0
- package/styles/components/switch.css +19 -0
- package/styles/components/table-toolbar.css +20 -0
- package/styles/components/table.css +160 -0
- package/styles/components/tabs.css +31 -0
- package/styles/components/tag-input.css +16 -0
- package/styles/components/textarea.css +15 -0
- package/styles/components/timeline.css +11 -0
- package/styles/components/toast.css +21 -0
- package/styles/components/tooltip.css +35 -0
- package/styles/components/tree.css +17 -0
- package/styles/components/typography.css +45 -0
- package/styles/components/utility-bits.css +14 -0
- package/styles/components/view-menu.css +14 -0
- package/styles/motion.css +35 -0
- package/styles/utilities.css +26 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* uix progress bar + ring — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-progress { height: 8px; background: var(--uix-bg-active); border-radius: var(--uix-radius-pill); overflow: hidden; }
|
|
4
|
+
.uix-progress__bar { height: 100%; background: var(--uix-accent); border-radius: inherit; transition: width var(--uix-dur) var(--uix-ease-out); }
|
|
5
|
+
.uix-progress--indeterminate { position: relative; }
|
|
6
|
+
.uix-progress--indeterminate .uix-progress__bar { width: 40%; animation: uix-progress-slide 1.2s var(--uix-ease-in-out) infinite; }
|
|
7
|
+
@keyframes uix-progress-slide { 0% { transform: translateX(-110%); } 100% { transform: translateX(280%); } }
|
|
8
|
+
|
|
9
|
+
.uix-ring { width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center;
|
|
10
|
+
background: conic-gradient(var(--uix-accent) calc(var(--val, .66) * 360deg), var(--uix-bg-active) 0); }
|
|
11
|
+
.uix-ring__inner { width: 32px; height: 32px; border-radius: 50%; background: var(--uix-surface); display: grid; place-items: center; font-size: var(--uix-text-meta); font-weight: 600; }
|
|
12
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* uix prose content card + note callouts — for KB articles, descriptions, release notes. Depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-prose { max-width: 66ch; color: var(--uix-text); }
|
|
4
|
+
.uix-prose > * + * { margin-top: var(--uix-space-3); }
|
|
5
|
+
.uix-prose h3 { font-size: var(--uix-text-h2); font-weight: 600; }
|
|
6
|
+
.uix-prose h4 { font-size: var(--uix-text-h3); font-weight: 600; margin-top: var(--uix-space-5); }
|
|
7
|
+
.uix-prose p { line-height: var(--uix-leading-body); color: var(--uix-text-hushed); }
|
|
8
|
+
.uix-prose a { color: var(--uix-link); }
|
|
9
|
+
.uix-prose ul, .uix-prose ol { padding-left: var(--uix-space-5); }
|
|
10
|
+
.uix-prose li + li { margin-top: var(--uix-space-1); }
|
|
11
|
+
.uix-prose code { font-family: var(--uix-font-mono); font-size: .9em; background: var(--uix-bg-subtle); padding: 1px var(--uix-space-2); border-radius: var(--uix-radius-xs); }
|
|
12
|
+
.uix-prose blockquote { border-left: 3px solid var(--uix-border-strong); padding-left: var(--uix-space-3); color: var(--uix-text-muted); }
|
|
13
|
+
|
|
14
|
+
.uix-note { display: flex; gap: var(--uix-space-3); padding: var(--uix-space-3) var(--uix-space-4); border-radius: var(--uix-radius-md); border: 1px solid var(--uix-border); background: var(--uix-surface); }
|
|
15
|
+
.uix-note__icon { flex: none; }
|
|
16
|
+
.uix-note__icon svg { width: var(--uix-icon-md); height: var(--uix-icon-md); }
|
|
17
|
+
.uix-note__body { font-size: var(--uix-text-body); color: var(--uix-text); }
|
|
18
|
+
.uix-note__body > * + * { margin-top: var(--uix-space-2); }
|
|
19
|
+
.uix-note--info { background: var(--uix-info-bg); border-color: color-mix(in srgb, var(--uix-info) 30%, transparent); }
|
|
20
|
+
.uix-note--info .uix-note__icon { color: var(--uix-info); }
|
|
21
|
+
.uix-note--success { background: var(--uix-success-bg); border-color: color-mix(in srgb, var(--uix-success) 30%, transparent); }
|
|
22
|
+
.uix-note--success .uix-note__icon { color: var(--uix-success); }
|
|
23
|
+
.uix-note--warning { background: var(--uix-warning-bg); border-color: color-mix(in srgb, var(--uix-warning) 30%, transparent); }
|
|
24
|
+
.uix-note--warning .uix-note__icon { color: var(--uix-warning); }
|
|
25
|
+
.uix-note--danger { background: var(--uix-danger-bg); border-color: color-mix(in srgb, var(--uix-danger) 30%, transparent); }
|
|
26
|
+
.uix-note--danger .uix-note__icon { color: var(--uix-danger); }
|
|
27
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/* uix radio + radio-group — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-radio-group { display: flex; flex-direction: column; gap: var(--uix-space-2); }
|
|
4
|
+
.uix-radio { display: inline-flex; align-items: center; gap: var(--uix-space-2); cursor: pointer; font-size: var(--uix-text-body); color: var(--uix-text); }
|
|
5
|
+
.uix-radio > input { position: absolute; opacity: 0; width: 1px; height: 1px; }
|
|
6
|
+
.uix-radio__dot {
|
|
7
|
+
width: 18px; height: 18px; flex: none; border-radius: 50%;
|
|
8
|
+
border: 1px solid var(--uix-border-strong); background: var(--uix-surface);
|
|
9
|
+
display: grid; place-items: center;
|
|
10
|
+
transition: border-color var(--uix-dur-fast) var(--uix-ease-out);
|
|
11
|
+
}
|
|
12
|
+
.uix-radio__dot::after {
|
|
13
|
+
content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--uix-accent);
|
|
14
|
+
opacity: 0; transform: scale(.4); transition: opacity var(--uix-dur-fast) var(--uix-ease-out), transform var(--uix-dur-fast) var(--uix-ease-spring);
|
|
15
|
+
}
|
|
16
|
+
.uix-radio > input:checked + .uix-radio__dot { border-color: var(--uix-accent); }
|
|
17
|
+
.uix-radio > input:checked + .uix-radio__dot::after { opacity: 1; transform: none; }
|
|
18
|
+
.uix-radio > input:focus-visible + .uix-radio__dot { outline: 2px solid var(--uix-ring); outline-offset: 2px; }
|
|
19
|
+
.uix-radio > input:disabled ~ * { opacity: .5; }
|
|
20
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* uix emoji reactions — pills with counts + an add-reaction picker popover. Depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-reactions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--uix-space-2); margin-top: var(--uix-space-2); }
|
|
4
|
+
.uix-reaction {
|
|
5
|
+
display: inline-flex; align-items: center; gap: var(--uix-space-2); padding: 1px var(--uix-space-2); line-height: 1.7;
|
|
6
|
+
border-radius: var(--uix-radius-pill); border: 1px solid var(--uix-border); background: var(--uix-surface);
|
|
7
|
+
color: var(--uix-text-hushed); font: inherit; font-size: var(--uix-text-meta); cursor: pointer;
|
|
8
|
+
}
|
|
9
|
+
.uix-reaction:hover { border-color: var(--uix-border-strong); }
|
|
10
|
+
.uix-reaction[data-mine] { background: var(--uix-brand-muted); border-color: var(--uix-accent); color: var(--uix-accent); }
|
|
11
|
+
.uix-reaction__count { font-variant-numeric: tabular-nums; }
|
|
12
|
+
.uix-reaction-add {
|
|
13
|
+
display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 24px;
|
|
14
|
+
border-radius: var(--uix-radius-pill); border: 1px dashed var(--uix-border-strong); background: transparent;
|
|
15
|
+
color: var(--uix-text-muted); cursor: pointer;
|
|
16
|
+
}
|
|
17
|
+
.uix-reaction-add:hover { color: var(--uix-text); border-color: var(--uix-text-muted); }
|
|
18
|
+
.uix-reaction-add svg { width: var(--uix-icon-sm); height: var(--uix-icon-sm); }
|
|
19
|
+
.uix-emoji-picker { display: flex; flex-wrap: wrap; gap: var(--uix-space-1); width: 196px; }
|
|
20
|
+
.uix-emoji-picker__btn { font-size: 18px; line-height: 1; padding: var(--uix-space-2); border: 0; background: transparent; border-radius: var(--uix-radius-sm); cursor: pointer; }
|
|
21
|
+
.uix-emoji-picker__btn:hover { background: var(--uix-bg-hover); }
|
|
22
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* uix segmented control — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-segmented { display: inline-flex; padding: var(--uix-space-1); gap: var(--uix-space-1); background: var(--uix-bg-subtle); border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md); }
|
|
4
|
+
.uix-segmented__option {
|
|
5
|
+
border: 0; background: transparent; color: var(--uix-text-hushed); font: inherit; font-size: var(--uix-text-meta); font-weight: 500;
|
|
6
|
+
padding: var(--uix-space-2) var(--uix-space-3); border-radius: calc(var(--uix-radius-md) - 3px); cursor: pointer;
|
|
7
|
+
transition: background-color var(--uix-dur-fast) var(--uix-ease-out), color var(--uix-dur-fast) var(--uix-ease-out);
|
|
8
|
+
}
|
|
9
|
+
.uix-segmented__option:hover { color: var(--uix-text); }
|
|
10
|
+
.uix-segmented__option[aria-selected="true"], .uix-segmented__option[aria-pressed="true"] { background: var(--uix-surface); color: var(--uix-text); box-shadow: var(--uix-shadow-sm); }
|
|
11
|
+
.uix-segmented__option:focus-visible { outline: 2px solid var(--uix-ring); outline-offset: 1px; }
|
|
12
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* uix select (native, styled) — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-select {
|
|
4
|
+
height: var(--uix-control-h); width: 100%; padding: 0 var(--uix-space-8) 0 var(--uix-space-3); appearance: none;
|
|
5
|
+
border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md);
|
|
6
|
+
background-color: var(--uix-surface); color: var(--uix-text); font: inherit; font-size: var(--uix-text-body); cursor: pointer;
|
|
7
|
+
background-repeat: no-repeat; background-position: right 12px center;
|
|
8
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23737373' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
|
|
9
|
+
transition: border-color var(--uix-dur-fast) var(--uix-ease-out), box-shadow var(--uix-dur-fast) var(--uix-ease-out);
|
|
10
|
+
}
|
|
11
|
+
.uix-select:hover { border-color: var(--uix-border-strong); }
|
|
12
|
+
.uix-select:focus { outline: none; border-color: var(--uix-ring); box-shadow: 0 0 0 3px var(--uix-brand-muted); }
|
|
13
|
+
.uix-select:disabled { opacity: .55; cursor: not-allowed; background-color: var(--uix-bg-subtle); }
|
|
14
|
+
.uix-select--sm { height: 28px; font-size: var(--uix-text-meta); }
|
|
15
|
+
|
|
16
|
+
/* command-palette-style rich select: a trigger that opens a .uix-cmdk popover (search + options) */
|
|
17
|
+
.uix-select-trigger { display: inline-flex; align-items: center; gap: var(--uix-space-2); height: var(--uix-control-h); padding: 0 var(--uix-space-3); min-width: 220px;
|
|
18
|
+
border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md); background: var(--uix-surface); color: var(--uix-text);
|
|
19
|
+
font: inherit; font-size: var(--uix-text-body); cursor: pointer; transition: border-color var(--uix-dur-fast) var(--uix-ease-out); }
|
|
20
|
+
.uix-select-trigger:hover { border-color: var(--uix-border-strong); }
|
|
21
|
+
.uix-select-trigger:focus-visible { outline: 2px solid var(--uix-ring); outline-offset: 2px; }
|
|
22
|
+
.uix-select-trigger__chevron { margin-left: auto; color: var(--uix-text-muted); width: var(--uix-icon-sm); height: var(--uix-icon-sm); }
|
|
23
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/* uix sidebar nav — items, favorites, collapsible sub-items, collapsed rail. Depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-sidebar { width: var(--uix-sidebar-w); background: var(--uix-bg-subtle); display: flex; flex-direction: column; gap: var(--uix-space-1); padding: var(--uix-space-2); overflow-x: hidden; overflow-y: auto; }
|
|
4
|
+
.uix-sidebar__eyebrow {
|
|
5
|
+
font-size: var(--uix-text-eyebrow); letter-spacing: var(--uix-tracking-eyebrow); text-transform: uppercase;
|
|
6
|
+
color: var(--uix-text-muted); padding: var(--uix-space-3) var(--uix-space-3) var(--uix-space-1);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* brand header */
|
|
10
|
+
.uix-sidebar__head { display: flex; align-items: center; justify-content: space-between; gap: var(--uix-space-2); padding: var(--uix-space-1) var(--uix-space-2) var(--uix-space-2); }
|
|
11
|
+
.uix-sidebar__brand { min-width: 0; font-size: var(--uix-text-h3); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
12
|
+
.uix-sidebar__toggle {
|
|
13
|
+
display: grid; place-items: center; width: 28px; height: 28px; flex: none;
|
|
14
|
+
border: 0; background: transparent; color: var(--uix-text-muted); cursor: pointer; border-radius: var(--uix-radius-sm);
|
|
15
|
+
transition: background-color var(--uix-dur-fast) var(--uix-ease-out), color var(--uix-dur-fast) var(--uix-ease-out);
|
|
16
|
+
}
|
|
17
|
+
.uix-sidebar__toggle:hover { background: var(--uix-bg-hover); color: var(--uix-text); }
|
|
18
|
+
.uix-sidebar__toggle svg { width: 18px; height: 18px; }
|
|
19
|
+
|
|
20
|
+
.uix-navitem {
|
|
21
|
+
display: flex; align-items: center; gap: var(--uix-space-3); height: 36px; padding: 0 var(--uix-space-3);
|
|
22
|
+
border-radius: var(--uix-radius-sm); color: var(--uix-text-hushed); cursor: pointer; text-decoration: none;
|
|
23
|
+
border: 0; background: transparent; font: inherit; font-size: var(--uix-text-body); width: 100%; text-align: left;
|
|
24
|
+
transition: background-color var(--uix-dur-fast) var(--uix-ease-out), color var(--uix-dur-fast) var(--uix-ease-out);
|
|
25
|
+
}
|
|
26
|
+
.uix-navitem:hover { background: var(--uix-bg-hover); color: var(--uix-text); text-decoration: none; }
|
|
27
|
+
/* active uses --uix-link (the brightened-on-dark accent) not raw --uix-accent: the deep accent
|
|
28
|
+
fails AA as text on the brand-muted tint in dark; link reads legibly in both themes. */
|
|
29
|
+
.uix-navitem[aria-current="page"] { background: var(--uix-brand-muted); color: var(--uix-link); font-weight: 500; }
|
|
30
|
+
.uix-navitem__icon { width: var(--uix-icon-md); height: var(--uix-icon-md); flex: none; }
|
|
31
|
+
.uix-navitem__label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
32
|
+
.uix-navitem__badge { font-size: var(--uix-text-meta); color: var(--uix-text-muted); }
|
|
33
|
+
/* on the active tint, muted badge dips below AA — hushed composites darker on the tint */
|
|
34
|
+
.uix-navitem[aria-current="page"] .uix-navitem__badge { color: var(--uix-text-hushed); }
|
|
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
|
+
.uix-navitem__star svg { width: 15px; height: 15px; }
|
|
37
|
+
.uix-navitem:hover .uix-navitem__star { opacity: 1; }
|
|
38
|
+
.uix-navitem__star[data-on] { opacity: 1; color: var(--uix-warning); }
|
|
39
|
+
.uix-navitem__star[data-on] svg { fill: currentColor; }
|
|
40
|
+
|
|
41
|
+
/* controlled favourites disclosure */
|
|
42
|
+
.uix-favourites { margin-bottom: var(--uix-space-1); }
|
|
43
|
+
.uix-favourites__chevron { flex-shrink: 0; }
|
|
44
|
+
.uix-favourites__heading {
|
|
45
|
+
display: flex; width: 100%; align-items: center; gap: calc(var(--uix-space-1) * 1.5);
|
|
46
|
+
padding: var(--uix-space-2) var(--uix-space-1) var(--uix-space-1);
|
|
47
|
+
border: 0; background: transparent; cursor: pointer; color: inherit;
|
|
48
|
+
}
|
|
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: color-mix(in srgb, var(--uix-text) 50%, transparent); }
|
|
51
|
+
.uix-favourites__row { position: relative; display: flex; align-items: center; }
|
|
52
|
+
.uix-favourites__link { min-width: 0; flex: 1; }
|
|
53
|
+
.uix-favourites__menu-trigger {
|
|
54
|
+
margin-left: auto; display: inline-flex; height: 20px; width: 20px; flex-shrink: 0;
|
|
55
|
+
align-items: center; justify-content: center; border: 0; border-radius: calc(var(--uix-radius-xs) / 2);
|
|
56
|
+
background: transparent; cursor: pointer; color: color-mix(in srgb, var(--uix-text) 50%, transparent);
|
|
57
|
+
opacity: 0; transition: opacity var(--uix-dur-fast) var(--uix-ease-out);
|
|
58
|
+
}
|
|
59
|
+
.uix-favourites__row:hover .uix-favourites__menu-trigger,
|
|
60
|
+
.uix-favourites__row:focus-within .uix-favourites__menu-trigger,
|
|
61
|
+
.uix-favourites__menu-trigger[aria-expanded="true"] { opacity: 1; }
|
|
62
|
+
.uix-favourites__backdrop { position: fixed; inset: 0; cursor: default; background: transparent; z-index: calc(var(--uix-z-tooltip) + 10); }
|
|
63
|
+
.uix-favourites__menu {
|
|
64
|
+
position: absolute; right: 0; top: calc(100% + 2px); z-index: calc(var(--uix-z-tooltip) + 20); min-width: 160px;
|
|
65
|
+
overflow: hidden; margin: 0; padding: var(--uix-space-1) 0; list-style: none;
|
|
66
|
+
border-radius: calc((var(--uix-radius-xs) + var(--uix-radius-sm)) / 2);
|
|
67
|
+
border: 1px solid var(--uix-border); background: var(--uix-surface); box-shadow: var(--uix-shadow-popover);
|
|
68
|
+
}
|
|
69
|
+
.uix-favourites__menu-item {
|
|
70
|
+
display: flex; width: 100%; align-items: center;
|
|
71
|
+
padding: calc(var(--uix-space-1) * 1.5) var(--uix-space-3); border: 0;
|
|
72
|
+
background: transparent; cursor: pointer; text-align: left;
|
|
73
|
+
font-size: calc(var(--uix-text-body) * 0.9285714286);
|
|
74
|
+
color: color-mix(in srgb, var(--uix-text) 85%, transparent);
|
|
75
|
+
transition: background-color var(--uix-dur-fast) var(--uix-ease-out);
|
|
76
|
+
}
|
|
77
|
+
.uix-favourites__menu-item:hover { background: var(--uix-bg-hover); }
|
|
78
|
+
|
|
79
|
+
/* collapsible group */
|
|
80
|
+
.uix-navgroup { }
|
|
81
|
+
.uix-navgroup__trigger .uix-navgroup__chevron { margin-left: auto; transition: transform var(--uix-dur) var(--uix-ease-out); }
|
|
82
|
+
.uix-navgroup__trigger[aria-expanded="false"] .uix-navgroup__chevron { transform: rotate(-90deg); }
|
|
83
|
+
.uix-navgroup__chevron { width: var(--uix-icon-sm); height: var(--uix-icon-sm); }
|
|
84
|
+
.uix-navgroup__panel { display: grid; grid-template-rows: 1fr; transition: grid-template-rows var(--uix-dur) var(--uix-ease-out); }
|
|
85
|
+
.uix-navgroup__trigger[aria-expanded="false"] + .uix-navgroup__panel { grid-template-rows: 0fr; }
|
|
86
|
+
.uix-navgroup__panel > div { overflow: hidden; }
|
|
87
|
+
.uix-subitem { padding-left: var(--uix-space-5); }
|
|
88
|
+
.uix-subitem .uix-navitem__label::before { content: ""; display: inline-block; width: 4px; height: 4px; border-radius: 50%; background: var(--uix-text-muted); margin-right: var(--uix-space-3); vertical-align: middle; }
|
|
89
|
+
|
|
90
|
+
/* collapsed rail */
|
|
91
|
+
.uix-sidebar[data-collapsed], .uix-sidebar[data-nav="rail"] { width: var(--uix-sidebar-w-rail); }
|
|
92
|
+
.uix-sidebar[data-collapsed] .uix-navitem__label,
|
|
93
|
+
.uix-sidebar[data-collapsed] .uix-navitem__badge,
|
|
94
|
+
.uix-sidebar[data-collapsed] .uix-navitem__star,
|
|
95
|
+
.uix-sidebar[data-collapsed] .uix-sidebar__eyebrow,
|
|
96
|
+
.uix-sidebar[data-collapsed] .uix-sidebar__brand,
|
|
97
|
+
.uix-sidebar[data-collapsed] .uix-navgroup__chevron,
|
|
98
|
+
.uix-sidebar[data-collapsed] .uix-navgroup__panel { display: none; }
|
|
99
|
+
/* center the icon-only rail; head keeps just the toggle, centered */
|
|
100
|
+
.uix-sidebar[data-collapsed] .uix-navitem { justify-content: center; padding: 0; gap: 0; }
|
|
101
|
+
.uix-sidebar[data-collapsed] .uix-sidebar__head { justify-content: center; padding-inline: 0; }
|
|
102
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* uix SLA indicator / timer (breach states) — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-sla { display: inline-flex; align-items: center; gap: var(--uix-space-2); font-size: var(--uix-text-meta); font-weight: 500; color: var(--uix-text-hushed); }
|
|
4
|
+
.uix-sla svg { width: 14px; height: 14px; }
|
|
5
|
+
.uix-sla[data-state="ok"] { color: var(--uix-success); }
|
|
6
|
+
.uix-sla[data-state="at-risk"] { color: var(--uix-warning-text); }
|
|
7
|
+
.uix-sla[data-state="breach"] { color: var(--uix-danger-text); }
|
|
8
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* uix slider (native range, styled) — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-slider { -webkit-appearance: none; appearance: none; width: 220px; height: 20px; background: transparent; cursor: pointer; }
|
|
4
|
+
.uix-slider::-webkit-slider-runnable-track { height: 6px; border-radius: var(--uix-radius-pill); background: var(--uix-bg-active); }
|
|
5
|
+
.uix-slider::-moz-range-track { height: 6px; border-radius: var(--uix-radius-pill); background: var(--uix-bg-active); }
|
|
6
|
+
.uix-slider::-moz-range-progress { height: 6px; border-radius: var(--uix-radius-pill); background: var(--uix-accent); }
|
|
7
|
+
.uix-slider::-webkit-slider-thumb {
|
|
8
|
+
-webkit-appearance: none; appearance: none; margin-top: -6px; width: 18px; height: 18px; border-radius: 50%;
|
|
9
|
+
background: var(--uix-surface); border: 2px solid var(--uix-accent); box-shadow: var(--uix-shadow-sm);
|
|
10
|
+
transition: transform var(--uix-dur-fast) var(--uix-ease-out);
|
|
11
|
+
}
|
|
12
|
+
.uix-slider::-moz-range-thumb { width: 18px; height: 18px; border: 2px solid var(--uix-accent); border-radius: 50%; background: var(--uix-surface); box-shadow: var(--uix-shadow-sm); }
|
|
13
|
+
.uix-slider:active::-webkit-slider-thumb { transform: scale(1.12); }
|
|
14
|
+
.uix-slider:focus-visible::-webkit-slider-thumb { outline: 2px solid var(--uix-ring); outline-offset: 2px; }
|
|
15
|
+
.uix-slider:disabled { opacity: .5; cursor: not-allowed; }
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/* uix spinner + progress overlay — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-spinner { width: 20px; height: 20px; border: 2px solid var(--uix-border-strong); border-right-color: transparent; border-radius: 50%; display: inline-block; animation: uix-spin .6s linear infinite; }
|
|
4
|
+
.uix-spinner--accent { border-color: var(--uix-accent); border-right-color: transparent; }
|
|
5
|
+
.uix-spinner--lg { width: 32px; height: 32px; border-width: 3px; }
|
|
6
|
+
.uix-overlay-progress {
|
|
7
|
+
position: absolute; inset: 0; display: grid; place-items: center; border-radius: inherit;
|
|
8
|
+
background: color-mix(in srgb, var(--uix-bg-app) 60%, transparent); backdrop-filter: blur(2px);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* uix KPI / stat tile — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-stat { background: var(--uix-surface); border: 1px solid var(--uix-border); border-radius: var(--uix-radius-lg); padding: var(--uix-space-6); }
|
|
4
|
+
.uix-stat__label { font-size: var(--uix-text-eyebrow); letter-spacing: var(--uix-tracking-eyebrow); text-transform: uppercase; color: var(--uix-text-muted); display: flex; align-items: center; justify-content: space-between; gap: var(--uix-space-2); }
|
|
5
|
+
.uix-stat__label svg { width: var(--uix-icon-md); height: var(--uix-icon-md); }
|
|
6
|
+
.uix-stat__value { font-size: var(--uix-text-data-hero); font-weight: 600; line-height: var(--uix-leading-data-hero); margin-top: var(--uix-space-3); }
|
|
7
|
+
.uix-stat__meta { font-size: var(--uix-text-meta); color: var(--uix-text-muted); margin-top: var(--uix-space-2); display: flex; align-items: center; gap: var(--uix-space-2); }
|
|
8
|
+
.uix-stat__trend { display: inline-flex; align-items: center; gap: var(--uix-space-1); font-size: var(--uix-text-meta); font-weight: 600; padding: var(--uix-space-1) var(--uix-space-2); border-radius: var(--uix-radius-pill); }
|
|
9
|
+
.uix-stat__trend--up { color: var(--uix-success); background: var(--uix-success-bg); }
|
|
10
|
+
.uix-stat__trend--down { color: var(--uix-danger-text); background: var(--uix-danger-bg); }
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* uix states — empty + skeleton loaders. Depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-empty { display: flex; flex-direction: column; align-items: center; gap: var(--uix-space-3); text-align: center; padding: var(--uix-space-8); color: var(--uix-text-muted); }
|
|
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
|
+
.uix-empty__icon svg { width: 22px; height: 22px; }
|
|
6
|
+
.uix-empty__title { font-size: var(--uix-text-h3); font-weight: 600; color: var(--uix-text); }
|
|
7
|
+
/* error tone — ErrorState reuses .uix-empty with a danger-toned icon */
|
|
8
|
+
.uix-empty__icon--danger { background: var(--uix-danger-bg); color: var(--uix-danger); }
|
|
9
|
+
|
|
10
|
+
.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
|
+
.uix-skeleton--text { height: 12px; border-radius: var(--uix-radius-pill); }
|
|
12
|
+
.uix-skeleton--circle { border-radius: 50%; }
|
|
13
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* uix status pill — tone API (status / priority / SLA). Depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-pill {
|
|
4
|
+
display: inline-flex; align-items: center; gap: var(--uix-space-2); padding: var(--uix-space-1) var(--uix-space-3); border-radius: var(--uix-radius-pill);
|
|
5
|
+
font-size: var(--uix-text-meta); font-weight: 500; line-height: 1.4;
|
|
6
|
+
background: var(--tone-bg, var(--uix-bg-active)); color: var(--tone-fg, var(--uix-text-hushed));
|
|
7
|
+
}
|
|
8
|
+
.uix-pill__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--tone-dot, currentColor); flex: none; }
|
|
9
|
+
.uix-pill--neutral { --tone-bg: var(--uix-bg-active); --tone-fg: var(--uix-text-hushed); --tone-dot: var(--uix-text-muted); }
|
|
10
|
+
.uix-pill--success { --tone-bg: var(--uix-success-bg); --tone-fg: var(--uix-success); --tone-dot: var(--uix-success); }
|
|
11
|
+
.uix-pill--info { --tone-bg: var(--uix-info-bg); --tone-fg: var(--uix-info-text); --tone-dot: var(--uix-info); }
|
|
12
|
+
.uix-pill--warning { --tone-bg: var(--uix-warning-bg); --tone-fg: var(--uix-warning-text); --tone-dot: var(--uix-warning); }
|
|
13
|
+
.uix-pill--danger { --tone-bg: var(--uix-danger-bg); --tone-fg: var(--uix-danger-text); --tone-dot: var(--uix-danger); }
|
|
14
|
+
/* critical = the one SOLID fill (most urgent); muted = a quiet, chrome-less label */
|
|
15
|
+
.uix-pill--critical { --tone-bg: var(--uix-danger); --tone-fg: var(--uix-danger-fg); --tone-dot: var(--uix-danger-fg); }
|
|
16
|
+
.uix-pill--muted { --tone-bg: transparent; --tone-fg: var(--uix-text-muted); --tone-dot: var(--uix-text-muted); }
|
|
17
|
+
/* time-pressure tones (U1 tokens — distinct from severity and validation-error) */
|
|
18
|
+
.uix-pill--attention { --tone-bg: var(--uix-attention-bg); --tone-fg: var(--uix-attention-text); --tone-dot: var(--uix-attention); }
|
|
19
|
+
.uix-pill--overdue { --tone-bg: var(--uix-overdue-bg); --tone-fg: var(--uix-overdue-text); --tone-dot: var(--uix-overdue); }
|
|
20
|
+
/* SLA tones — ok=success, at-risk=attention, breached=overdue */
|
|
21
|
+
.uix-pill--sla-ok { --tone-bg: var(--uix-success-bg); --tone-fg: var(--uix-success); --tone-dot: var(--uix-success); }
|
|
22
|
+
.uix-pill--sla-at-risk { --tone-bg: var(--uix-attention-bg); --tone-fg: var(--uix-attention-text); --tone-dot: var(--uix-attention); }
|
|
23
|
+
.uix-pill--sla-breached { --tone-bg: var(--uix-overdue-bg); --tone-fg: var(--uix-overdue-text); --tone-dot: var(--uix-overdue); }
|
|
24
|
+
/* Priority/severity tones — P1=danger, P2=warning, P3=amber, P4=info, P5=neutral (complete 5-tier ramp) */
|
|
25
|
+
.uix-pill--p1 { --tone-bg: var(--uix-danger-bg); --tone-fg: var(--uix-danger-text); --tone-dot: var(--uix-danger); }
|
|
26
|
+
.uix-pill--p2 { --tone-bg: var(--uix-warning-bg); --tone-fg: var(--uix-warning-text); --tone-dot: var(--uix-warning); }
|
|
27
|
+
.uix-pill--p3 { --tone-bg: var(--uix-amber-bg); --tone-fg: var(--uix-amber-text); --tone-dot: var(--uix-amber); }
|
|
28
|
+
.uix-pill--p4 { --tone-bg: var(--uix-info-bg); --tone-fg: var(--uix-info-text); --tone-dot: var(--uix-info); }
|
|
29
|
+
.uix-pill--p5 { --tone-bg: var(--uix-bg-active); --tone-fg: var(--uix-text-hushed); --tone-dot: var(--uix-text-muted); }
|
|
30
|
+
|
|
31
|
+
/* outline treatment — transparent fill, tone-tinted border, tone-colored text. The border tints
|
|
32
|
+
the tone hue (--tone-fg) at 40%; neutral/muted use the structural borders, critical reads strongest. */
|
|
33
|
+
.uix-pill--outline { background: transparent; border: 1px solid var(--tone-line, color-mix(in srgb, var(--tone-fg) 40%, transparent)); }
|
|
34
|
+
.uix-pill--outline.uix-pill--neutral { --tone-line: var(--uix-border-strong); }
|
|
35
|
+
.uix-pill--outline.uix-pill--muted { --tone-line: var(--uix-border); }
|
|
36
|
+
.uix-pill--outline.uix-pill--critical { color: var(--uix-danger-text); --tone-dot: var(--uix-danger); --tone-line: color-mix(in srgb, var(--uix-danger) 60%, transparent); }
|
|
37
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* uix number stepper — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-stepper { display: inline-flex; align-items: center; height: var(--uix-control-h); overflow: hidden;
|
|
4
|
+
border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md); background: var(--uix-surface); }
|
|
5
|
+
.uix-stepper__btn { width: 32px; align-self: stretch; border: 0; background: transparent; color: var(--uix-text); cursor: pointer;
|
|
6
|
+
display: grid; place-items: center; transition: background-color var(--uix-dur-fast) var(--uix-ease-out); }
|
|
7
|
+
.uix-stepper__btn:hover { background: var(--uix-bg-hover); }
|
|
8
|
+
.uix-stepper__btn svg { width: var(--uix-icon-sm); height: var(--uix-icon-sm); }
|
|
9
|
+
.uix-stepper__input { width: 52px; text-align: center; border: 0; height: 100%; background: transparent; color: var(--uix-text);
|
|
10
|
+
font: inherit; border-inline: 1px solid var(--uix-border); -moz-appearance: textfield; }
|
|
11
|
+
.uix-stepper__input::-webkit-outer-spin-button, .uix-stepper__input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
|
|
12
|
+
.uix-stepper:focus-within { border-color: var(--uix-ring); box-shadow: 0 0 0 3px var(--uix-brand-muted); }
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* uix steps / wizard — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-steps { display: flex; align-items: center; gap: 0; }
|
|
4
|
+
.uix-step { display: flex; align-items: center; gap: var(--uix-space-3); color: var(--uix-text-muted); }
|
|
5
|
+
.uix-step__marker {
|
|
6
|
+
width: 26px; height: 26px; flex: none; border-radius: 50%; display: grid; place-items: center;
|
|
7
|
+
border: 1px solid var(--uix-border-strong); background: var(--uix-surface); font-size: var(--uix-text-meta); font-weight: 600;
|
|
8
|
+
line-height: 1; /* hug the glyph so place-items:center truly centers single digits/symbols */
|
|
9
|
+
}
|
|
10
|
+
.uix-step__label { font-size: var(--uix-text-meta); font-weight: 500; }
|
|
11
|
+
.uix-step__connector { flex: 1; height: 1px; min-width: 28px; background: var(--uix-border); margin: 0 var(--uix-space-3); }
|
|
12
|
+
.uix-step[data-state="active"] { color: var(--uix-text); }
|
|
13
|
+
.uix-step[data-state="active"] .uix-step__marker { border-color: var(--uix-accent); color: var(--uix-accent); box-shadow: 0 0 0 3px var(--uix-brand-muted); }
|
|
14
|
+
.uix-step[data-state="done"] { color: var(--uix-text); }
|
|
15
|
+
.uix-step[data-state="done"] .uix-step__marker { background: var(--uix-accent); border-color: var(--uix-accent); color: var(--uix-accent-fg); }
|
|
16
|
+
.uix-step[data-state="done"] + .uix-step__connector,
|
|
17
|
+
.uix-step__connector[data-done] { background: var(--uix-accent); }
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* uix switch — depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-switch { display: inline-flex; align-items: center; gap: var(--uix-space-2); cursor: pointer; color: var(--uix-text); font-size: var(--uix-text-body); }
|
|
4
|
+
.uix-switch > input { position: absolute; opacity: 0; width: 1px; height: 1px; }
|
|
5
|
+
.uix-switch__track {
|
|
6
|
+
width: 36px; height: 20px; flex: none; border-radius: var(--uix-radius-pill);
|
|
7
|
+
background: var(--uix-bg-active); position: relative;
|
|
8
|
+
transition: background-color var(--uix-dur) var(--uix-ease-out);
|
|
9
|
+
}
|
|
10
|
+
.uix-switch__track::after {
|
|
11
|
+
content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%;
|
|
12
|
+
background: var(--uix-text-reverse); box-shadow: var(--uix-shadow-sm);
|
|
13
|
+
transition: transform var(--uix-dur) var(--uix-ease-out);
|
|
14
|
+
}
|
|
15
|
+
.uix-switch > input:checked + .uix-switch__track { background: var(--uix-accent); }
|
|
16
|
+
.uix-switch > input:checked + .uix-switch__track::after { transform: translateX(16px); }
|
|
17
|
+
.uix-switch > input:focus-visible + .uix-switch__track { outline: 2px solid var(--uix-ring); outline-offset: 2px; }
|
|
18
|
+
.uix-switch > input:disabled + .uix-switch__track { opacity: .5; }
|
|
19
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/* uix table toolbar + two-row filter bar (status / type). Depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--uix-space-2); margin-bottom: var(--uix-space-3); }
|
|
4
|
+
.uix-toolbar__spacer { flex: 1; }
|
|
5
|
+
|
|
6
|
+
/* responsive: the status + type groups sit on ONE line when they fit, wrap to two only when cramped */
|
|
7
|
+
.uix-filterbar { display: flex; flex-wrap: wrap; gap: var(--uix-space-2) var(--uix-space-5); margin-bottom: var(--uix-space-3); }
|
|
8
|
+
.uix-filterrow { display: flex; flex-wrap: wrap; align-items: center; gap: var(--uix-space-2); }
|
|
9
|
+
.uix-filterrow__label { font-size: var(--uix-text-meta); color: var(--uix-text-muted); width: 54px; flex: none; }
|
|
10
|
+
|
|
11
|
+
.uix-chip {
|
|
12
|
+
display: inline-flex; align-items: center; gap: var(--uix-space-2); padding: var(--uix-space-1) var(--uix-space-3); border-radius: var(--uix-radius-pill);
|
|
13
|
+
border: 1px solid var(--uix-border); background: var(--uix-surface); color: var(--uix-text-hushed);
|
|
14
|
+
font: inherit; font-size: var(--uix-text-meta); cursor: pointer;
|
|
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
|
+
}
|
|
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); }
|
|
19
|
+
.uix-chip__count { font-variant-numeric: tabular-nums; opacity: .7; }
|
|
20
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/* uix data table — zebra, sticky header, sort, selection, density, pinned rows,
|
|
2
|
+
column sizing, bulk actions, row actions, expandable rows, inline edit, resize,
|
|
3
|
+
search highlight, responsive ladder + compare. Depends only on --uix-* tokens. */
|
|
4
|
+
@layer uix.components {
|
|
5
|
+
.uix-table-wrap { overflow: auto; max-height: 460px; border: 1px solid var(--uix-border); border-radius: var(--uix-radius-lg); background: var(--uix-surface); }
|
|
6
|
+
.uix-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: var(--uix-text-body); }
|
|
7
|
+
|
|
8
|
+
.uix-table thead th {
|
|
9
|
+
position: sticky; top: 0; z-index: var(--uix-z-raised); background: var(--uix-surface); text-align: left;
|
|
10
|
+
font-size: var(--uix-text-meta); font-weight: 600; color: var(--uix-text-hushed);
|
|
11
|
+
padding: 0 var(--uix-space-4); height: 44px; border-bottom: 1px solid var(--uix-border); white-space: nowrap;
|
|
12
|
+
}
|
|
13
|
+
.uix-table th[data-sort] { cursor: pointer; user-select: none; }
|
|
14
|
+
.uix-table th[data-sort]:hover { color: var(--uix-text); }
|
|
15
|
+
.uix-table th[data-sort]::after { content: " ↕"; opacity: .35; }
|
|
16
|
+
.uix-table th[aria-sort="ascending"]::after { content: " ↑"; opacity: 1; color: var(--uix-accent); }
|
|
17
|
+
.uix-table th[aria-sort="descending"]::after { content: " ↓"; opacity: 1; color: var(--uix-accent); }
|
|
18
|
+
/* multi-column sort ordinal (⇧+click adds a secondary key) */
|
|
19
|
+
.uix-table th[data-sort-order]::before { content: attr(data-sort-order); display: inline-block; margin-right: var(--uix-space-1); font-size: var(--uix-text-eyebrow); font-variant-numeric: tabular-nums; color: var(--uix-accent); }
|
|
20
|
+
|
|
21
|
+
.uix-table td { padding: 0 var(--uix-space-4); height: var(--uix-row-h); border-bottom: 1px solid var(--uix-border); color: var(--uix-text); vertical-align: middle; }
|
|
22
|
+
.uix-table tbody tr { background: var(--uix-row); }
|
|
23
|
+
.uix-table tbody tr:nth-child(even) { background: var(--uix-row-alt); }
|
|
24
|
+
.uix-table--no-zebra tbody tr, .uix-table--no-zebra tbody tr:nth-child(even) { background: var(--uix-row); }
|
|
25
|
+
.uix-table tbody tr[data-pinned] { background: var(--uix-row-pinned-bg); }
|
|
26
|
+
.uix-table tbody tr[aria-selected="true"] { background: var(--uix-row-selected-bg); }
|
|
27
|
+
.uix-table tbody tr:hover { background: var(--uix-bg-hover); }
|
|
28
|
+
.uix-table[data-density="compact"] td, .uix-table--compact td { height: var(--uix-row-h-compact); }
|
|
29
|
+
.uix-table[data-density="comfortable"] td { height: var(--uix-row-h-comfortable); }
|
|
30
|
+
|
|
31
|
+
.uix-table__pin { border: 0; background: transparent; color: var(--uix-text-muted); cursor: pointer; padding: var(--uix-space-1); border-radius: var(--uix-radius-xs); opacity: 0; transition: opacity var(--uix-dur-fast) var(--uix-ease-out); }
|
|
32
|
+
.uix-table tbody tr:hover .uix-table__pin, .uix-table__pin[data-on] { opacity: 1; }
|
|
33
|
+
.uix-table__pin:hover { background: var(--uix-bg-active); color: var(--uix-text); }
|
|
34
|
+
.uix-table__pin[data-on] { color: var(--uix-accent); }
|
|
35
|
+
.uix-table__pin svg { width: 15px; height: 15px; }
|
|
36
|
+
.uix-table__pin[data-on] svg { fill: currentColor; }
|
|
37
|
+
|
|
38
|
+
/* frozen first column (opt-in via .uix-table--pinned-col) */
|
|
39
|
+
.uix-table--pinned-col th:first-child, .uix-table--pinned-col td:first-child { position: sticky; left: 0; z-index: var(--uix-z-raised); box-shadow: 1px 0 0 var(--uix-border); }
|
|
40
|
+
.uix-table--pinned-col thead th:first-child { z-index: var(--uix-z-sticky); background: var(--uix-surface); }
|
|
41
|
+
.uix-table--pinned-col tbody tr td:first-child { background: var(--uix-row); }
|
|
42
|
+
.uix-table--pinned-col tbody tr:nth-child(even) td:first-child { background: var(--uix-row-alt); }
|
|
43
|
+
.uix-table--pinned-col.uix-table--no-zebra tbody tr td:first-child,
|
|
44
|
+
.uix-table--pinned-col.uix-table--no-zebra tbody tr:nth-child(even) td:first-child { background: var(--uix-row); }
|
|
45
|
+
.uix-table--pinned-col tbody tr[data-pinned] td:first-child { background: var(--uix-row-pinned-bg); }
|
|
46
|
+
.uix-table--pinned-col tbody tr[aria-selected="true"] td:first-child { background: var(--uix-row-selected-bg); }
|
|
47
|
+
.uix-table--pinned-col tbody tr:hover td:first-child { background: var(--uix-bg-hover); }
|
|
48
|
+
|
|
49
|
+
/* ── column sizing + cell behaviour (a shared vocabulary, not per-app px) ──────── */
|
|
50
|
+
.uix-table--fixed { table-layout: fixed; width: 100%; }
|
|
51
|
+
.uix-col--w-xs { width: var(--uix-col-w-xs); }
|
|
52
|
+
.uix-col--w-sm { width: var(--uix-col-w-sm); }
|
|
53
|
+
.uix-col--w-md { width: var(--uix-col-w-md); }
|
|
54
|
+
.uix-col--w-lg { width: var(--uix-col-w-lg); }
|
|
55
|
+
.uix-col--w-xl { width: var(--uix-col-w-xl); }
|
|
56
|
+
.uix-col--flex,
|
|
57
|
+
.uix-col--primary { width: auto; min-width: var(--uix-col-title-min); }
|
|
58
|
+
.uix-col--truncate { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
59
|
+
.uix-col--wrap { white-space: normal; overflow-wrap: anywhere; }
|
|
60
|
+
.uix-col--num { font-variant-numeric: tabular-nums; }
|
|
61
|
+
.uix-table th.uix-col--num, .uix-table td.uix-col--num { text-align: right; }
|
|
62
|
+
|
|
63
|
+
/* ── cell content vocabulary — a fixed set of renderers keeps tables consistent ── */
|
|
64
|
+
.uix-cell-strong { font-weight: 600; }
|
|
65
|
+
.uix-cell-sub { display: block; font-size: var(--uix-text-meta); color: var(--uix-text-muted); }
|
|
66
|
+
.uix-cell-mono { font-family: var(--uix-font-mono); font-size: var(--uix-text-meta); }
|
|
67
|
+
|
|
68
|
+
/* ── id cell — the canonical row click-through (row → peek, ↗ → full record) ───── */
|
|
69
|
+
.uix-id-cell__btn {
|
|
70
|
+
border: 0; background: transparent; cursor: pointer; padding: 0;
|
|
71
|
+
color: var(--uix-text); font: inherit;
|
|
72
|
+
display: inline-flex; align-items: center; gap: var(--uix-space-1); white-space: nowrap;
|
|
73
|
+
}
|
|
74
|
+
.uix-id-cell__btn:hover { color: var(--uix-accent); }
|
|
75
|
+
.uix-id-cell__btn:focus-visible { outline: 2px solid var(--uix-ring); outline-offset: 2px; border-radius: var(--uix-radius-xs); }
|
|
76
|
+
.uix-id-cell__arrow {
|
|
77
|
+
width: var(--uix-icon-sm); height: var(--uix-icon-sm); flex-shrink: 0; color: var(--uix-text-muted);
|
|
78
|
+
opacity: 0; transition: opacity var(--uix-dur-fast) var(--uix-ease-out);
|
|
79
|
+
}
|
|
80
|
+
.uix-table tbody tr:hover .uix-id-cell__arrow { opacity: 1; }
|
|
81
|
+
|
|
82
|
+
/* ── selection column + select-all ────────────────────────────────────────────── */
|
|
83
|
+
.uix-table th.uix-table__selcol, .uix-table td.uix-table__selcell { width: 44px; padding-left: var(--uix-space-3); padding-right: 0; text-align: center; }
|
|
84
|
+
|
|
85
|
+
/* contextual bulk-action bar — appears when >=1 row is selected */
|
|
86
|
+
.uix-bulkbar {
|
|
87
|
+
display: flex; align-items: center; gap: var(--uix-space-3);
|
|
88
|
+
padding: var(--uix-space-2) var(--uix-space-3); margin-bottom: var(--uix-space-3);
|
|
89
|
+
border: 1px solid var(--uix-accent); border-radius: var(--uix-radius-md);
|
|
90
|
+
background: var(--uix-brand-muted); color: var(--uix-text);
|
|
91
|
+
animation: uix-bulkbar-in var(--uix-dur) var(--uix-ease-out);
|
|
92
|
+
}
|
|
93
|
+
.uix-bulkbar[hidden] { display: none; }
|
|
94
|
+
.uix-bulkbar__count { font-size: var(--uix-text-meta); font-weight: 600; color: var(--uix-accent); font-variant-numeric: tabular-nums; }
|
|
95
|
+
.uix-bulkbar__spacer { flex: 1; }
|
|
96
|
+
@keyframes uix-bulkbar-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
|
|
97
|
+
@media (prefers-reduced-motion: reduce) { .uix-bulkbar { animation: none; } }
|
|
98
|
+
|
|
99
|
+
/* ── row hover actions + kebab ─────────────────────────────────────────────────── */
|
|
100
|
+
.uix-table__actions { width: 84px; text-align: right; white-space: nowrap; }
|
|
101
|
+
.uix-rowact { border: 0; background: transparent; color: var(--uix-text-muted); cursor: pointer; padding: var(--uix-space-1); border-radius: var(--uix-radius-sm); opacity: 0; transition: opacity var(--uix-dur-fast) var(--uix-ease-out), background-color var(--uix-dur-fast) var(--uix-ease-out); }
|
|
102
|
+
.uix-rowact svg { width: 16px; height: 16px; display: block; }
|
|
103
|
+
.uix-table tbody tr:hover .uix-rowact, .uix-rowact:focus-visible, .uix-rowact[aria-expanded="true"] { opacity: 1; }
|
|
104
|
+
.uix-rowact:hover { background: var(--uix-bg-active); color: var(--uix-text); }
|
|
105
|
+
|
|
106
|
+
/* ── expandable inline row ─────────────────────────────────────────────────────── */
|
|
107
|
+
.uix-table__expand { border: 0; background: transparent; cursor: pointer; color: var(--uix-text-muted); padding: var(--uix-space-1); border-radius: var(--uix-radius-xs); display: inline-grid; place-items: center; }
|
|
108
|
+
.uix-table__expand svg { width: 16px; height: 16px; transition: transform var(--uix-dur-fast) var(--uix-ease-out); }
|
|
109
|
+
.uix-table__expand[aria-expanded="true"] svg { transform: rotate(90deg); }
|
|
110
|
+
.uix-table__expand:hover { background: var(--uix-bg-active); color: var(--uix-text); }
|
|
111
|
+
tr.uix-table__detail > td { background: var(--uix-bg-subtle); padding: 0 var(--uix-space-4); }
|
|
112
|
+
.uix-table__detail-inner { padding: var(--uix-space-4) var(--uix-space-1) var(--uix-space-5); display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: var(--uix-space-4) var(--uix-space-7); }
|
|
113
|
+
.uix-kv { font-size: var(--uix-text-meta); }
|
|
114
|
+
.uix-kv__k { color: var(--uix-text-muted); margin-bottom: var(--uix-space-1); }
|
|
115
|
+
.uix-kv__v { color: var(--uix-text); }
|
|
116
|
+
@media (prefers-reduced-motion: reduce) { .uix-table__expand svg { transition: none; } }
|
|
117
|
+
|
|
118
|
+
/* ── inline cell edit ──────────────────────────────────────────────────────────── */
|
|
119
|
+
.uix-cell-edit { display: inline-flex; align-items: center; gap: var(--uix-space-2); cursor: text; border-radius: var(--uix-radius-sm); padding: var(--uix-space-1) var(--uix-space-2); margin: calc(-1 * var(--uix-space-1)) calc(-1 * var(--uix-space-2)); transition: background-color var(--uix-dur-fast) var(--uix-ease-out), box-shadow var(--uix-dur-fast) var(--uix-ease-out); }
|
|
120
|
+
.uix-cell-edit:hover { background: var(--uix-bg-active); }
|
|
121
|
+
.uix-cell-edit__pencil { width: 13px; height: 13px; color: var(--uix-text-muted); opacity: 0; transition: opacity var(--uix-dur-fast) var(--uix-ease-out); }
|
|
122
|
+
.uix-table tbody tr:hover .uix-cell-edit__pencil { opacity: 1; }
|
|
123
|
+
.uix-cell-edit[data-editing] { background: var(--uix-surface); box-shadow: 0 0 0 2px var(--uix-ring); cursor: default; }
|
|
124
|
+
.uix-cell-edit__ok { color: var(--uix-success); width: 14px; height: 14px; opacity: 0; transition: opacity var(--uix-dur-fast) var(--uix-ease-out); }
|
|
125
|
+
.uix-cell-edit[data-saved] .uix-cell-edit__ok { opacity: 1; }
|
|
126
|
+
.uix-cell-edit input, .uix-cell-edit select { border: 0; background: transparent; font: inherit; color: inherit; outline: none; }
|
|
127
|
+
|
|
128
|
+
/* ── column resize grip (drag the header's right edge) ─────────────────────────── */
|
|
129
|
+
.uix-table__resize { position: absolute; top: 0; right: -3px; width: 8px; height: 100%; cursor: col-resize; z-index: var(--uix-z-raised); user-select: none; touch-action: none; }
|
|
130
|
+
.uix-table__resize::after { content: ""; position: absolute; top: 25%; right: 3px; width: 2px; height: 50%; background: transparent; border-radius: var(--uix-radius-pill); transition: background-color var(--uix-dur-fast) var(--uix-ease-out); }
|
|
131
|
+
.uix-table thead th:hover .uix-table__resize::after, .uix-table__resize[data-drag]::after { background: var(--uix-accent); }
|
|
132
|
+
|
|
133
|
+
/* ── search match highlight ────────────────────────────────────────────────────── */
|
|
134
|
+
.uix-mark { background: var(--uix-warning-bg); color: var(--uix-text); border-radius: var(--uix-radius-xs); padding: 0 0.15em; box-shadow: inset 0 -1px 0 color-mix(in srgb, var(--uix-warning) 60%, transparent); }
|
|
135
|
+
|
|
136
|
+
/* ── responsive ladder — priority-column drop, then card transform ─────────────── */
|
|
137
|
+
.uix-table--priority th[data-priority="low"], .uix-table--priority td[data-priority="low"] { display: none; }
|
|
138
|
+
.uix-table--priority-mid th[data-priority="low"], .uix-table--priority-mid td[data-priority="low"],
|
|
139
|
+
.uix-table--priority-mid th[data-priority="mid"], .uix-table--priority-mid td[data-priority="mid"] { display: none; }
|
|
140
|
+
|
|
141
|
+
.uix-table--cards { display: block; }
|
|
142
|
+
.uix-table--cards thead { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
|
|
143
|
+
.uix-table--cards tbody, .uix-table--cards tr, .uix-table--cards td { display: block; width: auto; }
|
|
144
|
+
.uix-table--cards tbody tr { border: 1px solid var(--uix-border); border-radius: var(--uix-radius-md); background: var(--uix-surface); margin: 0 0 var(--uix-space-3); padding: var(--uix-space-1) var(--uix-space-4); box-shadow: var(--uix-shadow-sm); }
|
|
145
|
+
.uix-table--cards tbody tr[aria-selected="true"] { box-shadow: 0 0 0 2px var(--uix-accent); }
|
|
146
|
+
.uix-table--cards td { height: auto; display: flex; justify-content: space-between; align-items: center; gap: var(--uix-space-5); padding: var(--uix-space-2) 0; border-bottom: 1px solid var(--uix-border); text-align: right; white-space: normal; }
|
|
147
|
+
.uix-table--cards td:last-child { border-bottom: 0; }
|
|
148
|
+
.uix-table--cards td::before { content: attr(data-label); color: var(--uix-text-muted); font-size: var(--uix-text-meta); font-weight: 500; text-align: left; flex: none; }
|
|
149
|
+
.uix-table--cards td[data-col="id"] { font-size: var(--uix-text-h3); font-weight: 600; border-bottom: 1px solid var(--uix-border); padding-bottom: var(--uix-space-3); }
|
|
150
|
+
.uix-table--cards td[data-col="id"]::before { display: none; }
|
|
151
|
+
.uix-table--cards td[data-col="select"], .uix-table--cards td[data-col="actions"], .uix-table--cards td[data-col="expand"] { display: none; }
|
|
152
|
+
|
|
153
|
+
/* ── compare view — two records field-by-field on a narrow screen ──────────────── */
|
|
154
|
+
.uix-compare { border: 1px solid var(--uix-border); border-radius: var(--uix-radius-lg); overflow: hidden; font-size: var(--uix-text-meta); }
|
|
155
|
+
.uix-compare__head, .uix-compare__row { display: grid; grid-template-columns: 1fr 1fr; }
|
|
156
|
+
.uix-compare__head > div, .uix-compare__cell { padding: var(--uix-space-3); background: var(--uix-surface); border-top: 1px solid var(--uix-border); }
|
|
157
|
+
.uix-compare__head > div { font-weight: 600; border-top: 0; }
|
|
158
|
+
.uix-compare__head > div + div, .uix-compare__cell + .uix-compare__cell { border-left: 1px solid var(--uix-border); }
|
|
159
|
+
.uix-compare__attr { grid-column: 1 / -1; background: var(--uix-bg-subtle); padding: var(--uix-space-1) var(--uix-space-3); border-top: 1px solid var(--uix-border); font-size: var(--uix-text-eyebrow); letter-spacing: var(--uix-tracking-eyebrow); text-transform: uppercase; color: var(--uix-text-muted); }
|
|
160
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* uix tabs — line / enclosed / pill. Depends only on --uix-* tokens. */
|
|
2
|
+
@layer uix.components {
|
|
3
|
+
.uix-tabs { display: flex; gap: var(--uix-space-1); }
|
|
4
|
+
.uix-tab {
|
|
5
|
+
border: 0; background: transparent; font: inherit; font-size: var(--uix-text-body); font-weight: 500;
|
|
6
|
+
color: var(--uix-text-hushed); padding: var(--uix-space-3) var(--uix-space-3); cursor: pointer; position: relative;
|
|
7
|
+
transition: color var(--uix-dur-fast) var(--uix-ease-out), background-color var(--uix-dur-fast) var(--uix-ease-out);
|
|
8
|
+
}
|
|
9
|
+
.uix-tab:hover { color: var(--uix-text); }
|
|
10
|
+
.uix-tab[aria-selected="true"] { color: var(--uix-text); }
|
|
11
|
+
.uix-tab:focus-visible { outline: 2px solid var(--uix-ring); outline-offset: -2px; border-radius: var(--uix-radius-sm); }
|
|
12
|
+
|
|
13
|
+
/* line */
|
|
14
|
+
.uix-tabs--line { border-bottom: 1px solid var(--uix-border); }
|
|
15
|
+
.uix-tabs--line .uix-tab::after {
|
|
16
|
+
content: ""; position: absolute; left: 8px; right: 8px; bottom: -1px; height: 2px;
|
|
17
|
+
background: var(--uix-accent); border-radius: var(--uix-radius-pill);
|
|
18
|
+
transform: scaleX(0); transition: transform var(--uix-dur) var(--uix-ease-out);
|
|
19
|
+
}
|
|
20
|
+
.uix-tabs--line .uix-tab[aria-selected="true"]::after { transform: scaleX(1); }
|
|
21
|
+
|
|
22
|
+
/* enclosed */
|
|
23
|
+
.uix-tabs--enclosed { gap: 0; border-bottom: 1px solid var(--uix-border); }
|
|
24
|
+
.uix-tabs--enclosed .uix-tab { border: 1px solid transparent; border-top-left-radius: var(--uix-radius-md); border-top-right-radius: var(--uix-radius-md); margin-bottom: -1px; }
|
|
25
|
+
.uix-tabs--enclosed .uix-tab[aria-selected="true"] { border-color: var(--uix-border); border-bottom-color: var(--uix-bg-app); background: var(--uix-bg-app); }
|
|
26
|
+
|
|
27
|
+
/* pill */
|
|
28
|
+
.uix-tabs--pill { display: inline-flex; background: var(--uix-bg-subtle); padding: var(--uix-space-1); border-radius: var(--uix-radius-md); }
|
|
29
|
+
.uix-tabs--pill .uix-tab { padding: var(--uix-space-2) var(--uix-space-4); border-radius: calc(var(--uix-radius-md) - 3px); }
|
|
30
|
+
.uix-tabs--pill .uix-tab[aria-selected="true"] { background: var(--uix-surface); box-shadow: var(--uix-shadow-sm); }
|
|
31
|
+
}
|