cursedbelt 5.62.0 → 5.63.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/dist/react/master-detail/MasterDetail.d.ts.map +1 -1
- package/dist/react/master-detail/MasterDetail.js +1 -1
- package/dist/react/master-detail/MasterDetail.js.map +1 -1
- package/dist/styles-areas/master-detail.css +2 -2
- package/dist/styles-utilities.css +3 -0
- package/dist/theme.css +23 -20
- package/package.json +3 -3
- package/src/react/master-detail/MasterDetail.spec.tsx +21 -0
- package/src/react/master-detail/MasterDetail.tsx +7 -3
- package/src/styles-areas/master-detail.css +2 -2
- package/src/styles-utilities.css +3 -0
- package/src/theme.css +23 -20
- package/src/themeDarkScopeAliases.spec.ts +30 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MasterDetail.d.ts","sourceRoot":"","sources":["../../../src/react/master-detail/MasterDetail.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,KAAK,EAAE,SAAS,CAAC;IACjB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;mCAC+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,wDAAwD;IACxD,MAAM,EAAE,SAAS,CAAC;IAClB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;8CAI0C;IAC1C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"MasterDetail.d.ts","sourceRoot":"","sources":["../../../src/react/master-detail/MasterDetail.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,KAAK,EAAE,SAAS,CAAC;IACjB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;mCAC+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,wDAAwD;IACxD,MAAM,EAAE,SAAS,CAAC;IAClB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;8CAI0C;IAC1C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAqDD,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,UAAU,EACV,QAAQ,EACR,MAAM,EACN,OAAO,EACP,YAAmB,EACnB,cAAc,EACd,UAAkB,EAClB,iBAA6B,EAC7B,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,GACT,EAAE,iBAAiB,+BA+JnB"}
|
|
@@ -50,7 +50,7 @@ function ItemRow({ item, selected, onSelect, }) {
|
|
|
50
50
|
// guardrails-ignore no-raw-action-button: presentational master-list selection, no data mutation
|
|
51
51
|
ref: ref, type: "button", onClick: onSelect, "aria-current": selected ? "true" : undefined, className: cn(RAW_BUTTON, `flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left transition-colors ${selected
|
|
52
52
|
? "bg-[var(--accent)]/12 text-[var(--foreground)] ring-1 ring-[var(--accent)]/40"
|
|
53
|
-
: "hover:bg-[var(--muted)]"}`), children: [_jsx("span", { className: "min-w-0 flex-1", children: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx("span", { className: "truncate text-sm font-medium", children: item.title }), item.subtitle ? (_jsx("span", { className: "truncate text-xs text-[var(--muted-foreground)]", children: item.subtitle })) : null] }) }), item.badges ? (_jsx("span", { className: "flex flex-none items-center gap-1", children: item.badges })) : null] }));
|
|
53
|
+
: "hover:bg-[var(--muted)]"}`), children: [_jsx("span", { className: "min-w-0 flex-1", children: _jsxs("span", { className: "flex min-w-0 items-center gap-2", children: [_jsx("span", { className: "min-w-0 truncate text-sm font-medium", children: item.title }), item.subtitle ? (_jsx("span", { "data-slot": "master-detail-subtitle", className: "min-w-0 shrink-[1000] truncate text-xs text-[var(--muted-foreground)]", children: item.subtitle })) : null] }) }), item.badges ? (_jsx("span", { className: "flex flex-none items-center gap-1", children: item.badges })) : null] }));
|
|
54
54
|
}
|
|
55
55
|
export function MasterDetail({ items, selectedId, onSelect, detail, filters, activeFilter = null, onFilterChange, searchable = false, searchPlaceholder = "Search…", emptyDetail, emptyList, emptyAll, storageKey, listHeader, className, }) {
|
|
56
56
|
const [query, setQuery] = useState("");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MasterDetail.js","sourceRoot":"","sources":["../../../src/react/master-detail/MasterDetail.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAsD9C,MAAM,KAAK,GAAG,CAAC,IAAe,EAAU,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAElF,SAAS,OAAO,CAAC,EAChB,IAAI,EACJ,QAAQ,EACR,QAAQ,GAKR;IACA,MAAM,GAAG,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACnD,2EAA2E;IAC3E,6EAA6E;IAC7E,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,QAAQ;YAAE,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,CACN;QACC,iGAAiG;QACjG,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,kBACH,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC3C,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,qFACzB,QAAQ;YACP,CAAC,CAAC,+EAA+E;YACjF,CAAC,CAAC,yBACJ,EAAE,CAAC,aAEH,eAAM,SAAS,EAAC,gBAAgB,YAC/B,gBAAM,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"MasterDetail.js","sourceRoot":"","sources":["../../../src/react/master-detail/MasterDetail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 25 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -28,4 +28,4 @@
|
|
|
28
28
|
@source inline("bg-accent/15 border-[var(--border)] flex-row focus-within:border-field-ring focus-within:ring-2");
|
|
29
29
|
@source inline("focus-within:ring-field-ring/30 has-[[aria-invalid=true]]:border-field-error");
|
|
30
30
|
@source inline("hover:bg-[var(--muted)] hover:bg-muted/80 mb-1.5 mb-4 min-h min-h-full pb-0.5 pr-1 ring-1");
|
|
31
|
-
@source inline("ring-[var(--accent)]/40 ring-accent/30 ring-inset self-stretch");
|
|
31
|
+
@source inline("ring-[var(--accent)]/40 ring-accent/30 ring-inset self-stretch shrink-[1000]");
|
package/dist/theme.css
CHANGED
|
@@ -785,26 +785,29 @@
|
|
|
785
785
|
|
|
786
786
|
.cb-aurora.dark,
|
|
787
787
|
.dark .cb-aurora {
|
|
788
|
-
/*
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
--
|
|
798
|
-
--
|
|
799
|
-
--
|
|
800
|
-
--card
|
|
801
|
-
--
|
|
802
|
-
--
|
|
803
|
-
--
|
|
804
|
-
--
|
|
805
|
-
--
|
|
806
|
-
--
|
|
807
|
-
--
|
|
788
|
+
/* 🔴 NEUTRAL since 5.63.0 — the same ramp as `.dark` above, value for value. 5.58.0 moved
|
|
789
|
+
`.dark` to Linear's ramp so "the chrome recedes and the hues that mean something are the
|
|
790
|
+
only colour on the page", and its report said every app had changed — but ten of the
|
|
791
|
+
eleven apps put `cb-aurora` on <html>, and this block re-bound them straight back to an
|
|
792
|
+
indigo ladder (#080b16 / #111830 / #2f3b5c). Seen on vault-stage, dark, 2026-10-05 (forge
|
|
793
|
+
task 2849): the neutral ramp had reached desk and binary-server and nothing else. The
|
|
794
|
+
scope keeps what makes it aurora — the glass, the ambient field, the lifted shadows —
|
|
795
|
+
and its grounds are the belt's grounds. `themeDarkScopeAliases.spec.ts` holds the pair
|
|
796
|
+
equal, so the two cannot drift apart again. */
|
|
797
|
+
--background: #08090a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
798
|
+
--foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
799
|
+
--surface: #101113; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
800
|
+
--card: #101113; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
801
|
+
--card-foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
802
|
+
--card-raised: #16171a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
803
|
+
--card-overlay: #1d1e22; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
804
|
+
--popover: #17181b; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
805
|
+
--popover-foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
806
|
+
--muted: #202126; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
807
|
+
--muted-foreground: #9b9ea7; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
808
|
+
--surface-sunken: #0b0c0d; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
809
|
+
--border: #31333a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
810
|
+
--border-strong: #62666f; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
808
811
|
--rule: color-mix(in srgb, var(--border) 55%, transparent);
|
|
809
812
|
/* The "lift the panel off the page" shadow the dark look needs; a near-black
|
|
810
813
|
canvas swallows the default 1px anchor entirely. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cursedbelt",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.63.0",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The React design system of the cursedbelt split — components, styles, theme. cursedbelt-core below it; server tier in cursedbelt-server.",
|
|
@@ -920,7 +920,7 @@
|
|
|
920
920
|
"@vidstack/react": "1.15.6",
|
|
921
921
|
"@vitejs/plugin-react": "^5.2.0",
|
|
922
922
|
"cursedbelt-server": "^4.43.1",
|
|
923
|
-
"cursedops": "^0.
|
|
923
|
+
"cursedops": "^0.15.0",
|
|
924
924
|
"diff": "^9.0.0",
|
|
925
925
|
"emoji-mart": "^5.6.0",
|
|
926
926
|
"hls.js": "^1.5.0",
|
|
@@ -985,7 +985,7 @@
|
|
|
985
985
|
},
|
|
986
986
|
"repository": {
|
|
987
987
|
"type": "git",
|
|
988
|
-
"url": "git+https://github.com/
|
|
988
|
+
"url": "git+https://github.com/wizardmordamir/cursedforge-cursedbelt.git"
|
|
989
989
|
},
|
|
990
990
|
"gate": {
|
|
991
991
|
"stages": [
|
|
@@ -59,3 +59,24 @@ describe('MasterDetail — DESIGN.md §2 empty states', () => {
|
|
|
59
59
|
expect(getByText('Nothing matches.')).toBeTruthy();
|
|
60
60
|
});
|
|
61
61
|
});
|
|
62
|
+
|
|
63
|
+
describe('MasterDetail — a row keeps its title before its subtitle', () => {
|
|
64
|
+
test('the subtitle shrinks first, and the title can still truncate once it is gone', () => {
|
|
65
|
+
// 🔴 Seen on station's queue at 390 (forge task 2849): title and file name shrank equally,
|
|
66
|
+
// so every title read "A session t…" beside its whole file name. happy-dom draws no layout,
|
|
67
|
+
// so this pins the two classes that decide the split.
|
|
68
|
+
const { getByText } = render(
|
|
69
|
+
<MasterDetail
|
|
70
|
+
items={[{ id: 'q', title: 'A session task', subtitle: '102-a-session-task.md' }]}
|
|
71
|
+
selectedId={null}
|
|
72
|
+
onSelect={() => {}}
|
|
73
|
+
detail={<p>detail</p>}
|
|
74
|
+
/>,
|
|
75
|
+
);
|
|
76
|
+
const subtitle = getByText('102-a-session-task.md');
|
|
77
|
+
expect(subtitle.getAttribute('data-slot')).toBe('master-detail-subtitle');
|
|
78
|
+
expect(subtitle.className).toContain('shrink-[1000]');
|
|
79
|
+
expect(subtitle.className).toContain('min-w-0');
|
|
80
|
+
expect(getByText('A session task').className).toContain('min-w-0');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
@@ -122,10 +122,14 @@ function ItemRow({
|
|
|
122
122
|
}`)}
|
|
123
123
|
>
|
|
124
124
|
<span className="min-w-0 flex-1">
|
|
125
|
-
<span className="flex items-center gap-2">
|
|
126
|
-
|
|
125
|
+
<span className="flex min-w-0 items-center gap-2">
|
|
126
|
+
{/* The subtitle gives way FIRST: shrinking both equally cut a queue's titles to
|
|
127
|
+
"A session t…" at 390 beside the full file name (station, forge task 2849). */}
|
|
128
|
+
<span className="min-w-0 truncate text-sm font-medium">{item.title}</span>
|
|
127
129
|
{item.subtitle ? (
|
|
128
|
-
<span className="truncate text-xs text-[var(--muted-foreground)]">
|
|
130
|
+
<span data-slot="master-detail-subtitle" className="min-w-0 shrink-[1000] truncate text-xs text-[var(--muted-foreground)]">
|
|
131
|
+
{item.subtitle}
|
|
132
|
+
</span>
|
|
129
133
|
) : null}
|
|
130
134
|
</span>
|
|
131
135
|
</span>
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 25 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -28,4 +28,4 @@
|
|
|
28
28
|
@source inline("bg-accent/15 border-[var(--border)] flex-row focus-within:border-field-ring focus-within:ring-2");
|
|
29
29
|
@source inline("focus-within:ring-field-ring/30 has-[[aria-invalid=true]]:border-field-error");
|
|
30
30
|
@source inline("hover:bg-[var(--muted)] hover:bg-muted/80 mb-1.5 mb-4 min-h min-h-full pb-0.5 pr-1 ring-1");
|
|
31
|
-
@source inline("ring-[var(--accent)]/40 ring-accent/30 ring-inset self-stretch");
|
|
31
|
+
@source inline("ring-[var(--accent)]/40 ring-accent/30 ring-inset self-stretch shrink-[1000]");
|
package/src/styles-utilities.css
CHANGED
package/src/theme.css
CHANGED
|
@@ -785,26 +785,29 @@
|
|
|
785
785
|
|
|
786
786
|
.cb-aurora.dark,
|
|
787
787
|
.dark .cb-aurora {
|
|
788
|
-
/*
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
--
|
|
798
|
-
--
|
|
799
|
-
--
|
|
800
|
-
--card
|
|
801
|
-
--
|
|
802
|
-
--
|
|
803
|
-
--
|
|
804
|
-
--
|
|
805
|
-
--
|
|
806
|
-
--
|
|
807
|
-
--
|
|
788
|
+
/* 🔴 NEUTRAL since 5.63.0 — the same ramp as `.dark` above, value for value. 5.58.0 moved
|
|
789
|
+
`.dark` to Linear's ramp so "the chrome recedes and the hues that mean something are the
|
|
790
|
+
only colour on the page", and its report said every app had changed — but ten of the
|
|
791
|
+
eleven apps put `cb-aurora` on <html>, and this block re-bound them straight back to an
|
|
792
|
+
indigo ladder (#080b16 / #111830 / #2f3b5c). Seen on vault-stage, dark, 2026-10-05 (forge
|
|
793
|
+
task 2849): the neutral ramp had reached desk and binary-server and nothing else. The
|
|
794
|
+
scope keeps what makes it aurora — the glass, the ambient field, the lifted shadows —
|
|
795
|
+
and its grounds are the belt's grounds. `themeDarkScopeAliases.spec.ts` holds the pair
|
|
796
|
+
equal, so the two cannot drift apart again. */
|
|
797
|
+
--background: #08090a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
798
|
+
--foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
799
|
+
--surface: #101113; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
800
|
+
--card: #101113; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
801
|
+
--card-foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
802
|
+
--card-raised: #16171a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
803
|
+
--card-overlay: #1d1e22; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
804
|
+
--popover: #17181b; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
805
|
+
--popover-foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
806
|
+
--muted: #202126; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
807
|
+
--muted-foreground: #9b9ea7; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
808
|
+
--surface-sunken: #0b0c0d; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
809
|
+
--border: #31333a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
810
|
+
--border-strong: #62666f; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
|
|
808
811
|
--rule: color-mix(in srgb, var(--border) 55%, transparent);
|
|
809
812
|
/* The "lift the panel off the page" shadow the dark look needs; a near-black
|
|
810
813
|
canvas swallows the default 1px anchor entirely. */
|
|
@@ -63,3 +63,33 @@ describe('a nested .dark scope re-resolves every alias of a token it re-binds',
|
|
|
63
63
|
expect(staleInNestedDark(readFileSync(join(import.meta.dir, 'theme.css'), 'utf8'))).toEqual([]);
|
|
64
64
|
});
|
|
65
65
|
});
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The grounds `cb-aurora` paints in dark ARE `.dark`'s grounds (5.63.0, forge task 2849). Ten of
|
|
69
|
+
* the eleven apps wear `cb-aurora` on <html>, so when 5.58.0 moved `.dark` to the neutral ramp and
|
|
70
|
+
* this scope kept its indigo ladder, the ramp reached desk and binary-server only. The scope may
|
|
71
|
+
* add glass and ambient light; it may not hand the fleet a second set of grounds.
|
|
72
|
+
*/
|
|
73
|
+
const GROUNDS = [
|
|
74
|
+
'--background', '--foreground', '--surface', '--card', '--card-foreground', '--card-raised', '--card-overlay',
|
|
75
|
+
'--popover', '--popover-foreground', '--muted', '--muted-foreground', '--surface-sunken', '--border', '--border-strong',
|
|
76
|
+
] as const;
|
|
77
|
+
|
|
78
|
+
function groundsDiffering(css: string): string[] {
|
|
79
|
+
const flat = css.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\s*,\s*/g, ', ');
|
|
80
|
+
const dark = declarationsOf(flat, '.dark');
|
|
81
|
+
const aurora = declarationsOf(flat, '.cb-aurora.dark, .dark .cb-aurora');
|
|
82
|
+
if (aurora.size === 0) return ['(no `.cb-aurora.dark, .dark .cb-aurora` rule)'];
|
|
83
|
+
return GROUNDS.filter((g) => aurora.has(g) && aurora.get(g) !== dark.get(g)).map((g) => `${g}: aurora ${aurora.get(g)} ≠ .dark ${dark.get(g)}`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
describe('the aurora scope in dark paints the belt’s own grounds', () => {
|
|
87
|
+
test('the check sees a scope that keeps its own ground', () => {
|
|
88
|
+
const css = '.dark { --background: #08090a; --card: #101113; }\n.cb-aurora.dark,\n.dark .cb-aurora { --background: #080b16; --card: #101113; }';
|
|
89
|
+
expect(groundsDiffering(css)).toEqual(['--background: aurora #080b16 ≠ .dark #08090a']);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test('theme.css: every ground the aurora scope declares in dark equals `.dark`’s', () => {
|
|
93
|
+
expect(groundsDiffering(readFileSync(join(import.meta.dir, 'theme.css'), 'utf8'))).toEqual([]);
|
|
94
|
+
});
|
|
95
|
+
});
|