@assure-one/design-system 1.36.0 → 1.38.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 +45 -16
- package/codemods/README.md +93 -0
- package/codemods/lib/registry.mjs +3 -0
- package/codemods/transforms/cm-09-side-drawer-to-sheet.mjs +348 -0
- package/codemods/transforms/cm-13-tooltip-delay.mjs +99 -0
- package/codemods/transforms/cm-18-data-table-parts.mjs +234 -0
- package/dist/css/components.css +1 -1
- package/dist/css/legacy-aliases.css +33 -1
- package/dist/css/shadcn.css +2 -2
- package/dist/css/tailwind.css +9 -0
- package/dist/css/tokens.css +72 -38
- package/dist/design-system-provider-B5MbvbRc.d.ts +609 -0
- package/dist/icons/index.d.ts +2 -2
- package/dist/icons/index.js +6 -2
- package/dist/icons/index.js.map +1 -1
- package/dist/{index-CQwzTm0v.d.ts → index-vztxMSfl.d.ts} +7 -4
- package/dist/index.d.ts +1757 -303
- package/dist/index.js +4125 -1956
- package/dist/index.js.map +1 -1
- package/dist/next/index.d.ts +1 -1
- package/dist/styles.css +1 -1
- package/dist/{system-BDU18fVg.d.ts → system-CyAVbHhM.d.ts} +16 -16
- package/dist/tokens/index.d.ts +1 -1
- package/dist/tokens/index.js +8 -8
- package/dist/tokens/index.js.map +1 -1
- package/docs/components.md +47 -14
- package/docs/components.registry.json +2415 -461
- package/docs/for-ai-agents.md +2 -0
- package/eslint-config/index.mjs +210 -0
- package/eslint-config/stylelint-rules.mjs +54 -0
- package/eslint-config/stylelint.mjs +73 -0
- package/package.json +8 -1
- package/dist/design-system-provider-cPUklDJv.d.ts +0 -220
|
@@ -33,7 +33,7 @@ declare const colors: {
|
|
|
33
33
|
readonly proDisabled: "#b7a7f3";
|
|
34
34
|
readonly proLine: "#7b5bd8";
|
|
35
35
|
readonly fgDisabled: "#a7a7ac";
|
|
36
|
-
readonly bgDisabled: "#
|
|
36
|
+
readonly bgDisabled: "#f1f2f6";
|
|
37
37
|
readonly successFg: "#1f7a3d";
|
|
38
38
|
readonly successBg: "#eaf6ee";
|
|
39
39
|
readonly successLine: "#c5e5cf";
|
|
@@ -58,7 +58,7 @@ declare const typography: {
|
|
|
58
58
|
readonly semibold: 600;
|
|
59
59
|
readonly bold: 700;
|
|
60
60
|
};
|
|
61
|
-
readonly ease: "cubic-bezier(0.
|
|
61
|
+
readonly ease: "cubic-bezier(0.25, 1, 0.5, 1)";
|
|
62
62
|
};
|
|
63
63
|
declare const radii: {
|
|
64
64
|
readonly btn: "7px";
|
|
@@ -69,14 +69,14 @@ declare const radii: {
|
|
|
69
69
|
readonly full: "9999px";
|
|
70
70
|
};
|
|
71
71
|
declare const shadows: {
|
|
72
|
-
readonly quiet: "0 1px
|
|
73
|
-
readonly card: "0 1px 2px rgba(16, 20, 36, 0.04), 0 4px
|
|
74
|
-
readonly pop: "0 0 0 1px rgba(16, 20, 36, 0.
|
|
72
|
+
readonly quiet: "0 1px 1px rgba(16, 20, 36, 0.03), 0 1px 3px rgba(16, 20, 36, 0.05)";
|
|
73
|
+
readonly card: "0 1px 2px rgba(16, 20, 36, 0.04), 0 2px 4px -2px rgba(16, 20, 36, 0.04), 0 8px 16px -6px rgba(16, 20, 36, 0.08)";
|
|
74
|
+
readonly pop: "0 0 0 1px rgba(16, 20, 36, 0.04), 0 2px 4px -1px rgba(16, 20, 36, 0.05), 0 6px 12px -3px rgba(16, 20, 36, 0.07), 0 16px 32px -8px rgba(16, 20, 36, 0.12)";
|
|
75
75
|
readonly focusRing: "0 0 0 2px #ffffff, 0 0 0 4px #6c42f8";
|
|
76
76
|
};
|
|
77
77
|
declare const overlays: {
|
|
78
|
-
readonly hover: "rgba(
|
|
79
|
-
readonly active: "rgba(
|
|
78
|
+
readonly hover: "rgba(16, 20, 36, 0.04)";
|
|
79
|
+
readonly active: "rgba(16, 20, 36, 0.07)";
|
|
80
80
|
};
|
|
81
81
|
declare const layout: {
|
|
82
82
|
readonly shellSidebarWidth: "200px";
|
|
@@ -115,7 +115,7 @@ declare const surfaces: {
|
|
|
115
115
|
};
|
|
116
116
|
declare const motion: {
|
|
117
117
|
readonly ease: {
|
|
118
|
-
readonly outQuart: "cubic-bezier(0.
|
|
118
|
+
readonly outQuart: "cubic-bezier(0.25, 1, 0.5, 1)";
|
|
119
119
|
readonly out: "cubic-bezier(0.16, 1, 0.3, 1)";
|
|
120
120
|
readonly in: "cubic-bezier(0.7, 0, 0.84, 0)";
|
|
121
121
|
readonly inOut: "cubic-bezier(0.65, 0, 0.35, 1)";
|
|
@@ -195,7 +195,7 @@ declare const reference: {
|
|
|
195
195
|
readonly proDisabled: "#b7a7f3";
|
|
196
196
|
readonly proLine: "#7b5bd8";
|
|
197
197
|
readonly fgDisabled: "#a7a7ac";
|
|
198
|
-
readonly bgDisabled: "#
|
|
198
|
+
readonly bgDisabled: "#f1f2f6";
|
|
199
199
|
readonly successFg: "#1f7a3d";
|
|
200
200
|
readonly successBg: "#eaf6ee";
|
|
201
201
|
readonly successLine: "#c5e5cf";
|
|
@@ -220,7 +220,7 @@ declare const reference: {
|
|
|
220
220
|
readonly semibold: 600;
|
|
221
221
|
readonly bold: 700;
|
|
222
222
|
};
|
|
223
|
-
readonly ease: "cubic-bezier(0.
|
|
223
|
+
readonly ease: "cubic-bezier(0.25, 1, 0.5, 1)";
|
|
224
224
|
};
|
|
225
225
|
readonly radii: {
|
|
226
226
|
readonly btn: "7px";
|
|
@@ -231,14 +231,14 @@ declare const reference: {
|
|
|
231
231
|
readonly full: "9999px";
|
|
232
232
|
};
|
|
233
233
|
readonly shadows: {
|
|
234
|
-
readonly quiet: "0 1px
|
|
235
|
-
readonly card: "0 1px 2px rgba(16, 20, 36, 0.04), 0 4px
|
|
236
|
-
readonly pop: "0 0 0 1px rgba(16, 20, 36, 0.
|
|
234
|
+
readonly quiet: "0 1px 1px rgba(16, 20, 36, 0.03), 0 1px 3px rgba(16, 20, 36, 0.05)";
|
|
235
|
+
readonly card: "0 1px 2px rgba(16, 20, 36, 0.04), 0 2px 4px -2px rgba(16, 20, 36, 0.04), 0 8px 16px -6px rgba(16, 20, 36, 0.08)";
|
|
236
|
+
readonly pop: "0 0 0 1px rgba(16, 20, 36, 0.04), 0 2px 4px -1px rgba(16, 20, 36, 0.05), 0 6px 12px -3px rgba(16, 20, 36, 0.07), 0 16px 32px -8px rgba(16, 20, 36, 0.12)";
|
|
237
237
|
readonly focusRing: "0 0 0 2px #ffffff, 0 0 0 4px #6c42f8";
|
|
238
238
|
};
|
|
239
239
|
readonly overlays: {
|
|
240
|
-
readonly hover: "rgba(
|
|
241
|
-
readonly active: "rgba(
|
|
240
|
+
readonly hover: "rgba(16, 20, 36, 0.04)";
|
|
241
|
+
readonly active: "rgba(16, 20, 36, 0.07)";
|
|
242
242
|
};
|
|
243
243
|
readonly layout: {
|
|
244
244
|
readonly shellSidebarWidth: "200px";
|
|
@@ -247,7 +247,7 @@ declare const reference: {
|
|
|
247
247
|
};
|
|
248
248
|
readonly motion: {
|
|
249
249
|
readonly ease: {
|
|
250
|
-
readonly outQuart: "cubic-bezier(0.
|
|
250
|
+
readonly outQuart: "cubic-bezier(0.25, 1, 0.5, 1)";
|
|
251
251
|
readonly out: "cubic-bezier(0.16, 1, 0.3, 1)";
|
|
252
252
|
readonly in: "cubic-bezier(0.7, 0, 0.84, 0)";
|
|
253
253
|
readonly inOut: "cubic-bezier(0.65, 0, 0.35, 1)";
|
package/dist/tokens/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as ColorName, R as ReferenceTokens, S as SystemTokens, f as breakpoints, c as colors, i as iconSizes, l as layout, m as motion, o as overlays, r as radii, a as reference, s as shadows, b as spacing, d as surfaces, e as systemTokens, t as typography, z as zIndex } from '../system-
|
|
1
|
+
export { C as ColorName, R as ReferenceTokens, S as SystemTokens, f as breakpoints, c as colors, i as iconSizes, l as layout, m as motion, o as overlays, r as radii, a as reference, s as shadows, b as spacing, d as surfaces, e as systemTokens, t as typography, z as zIndex } from '../system-CyAVbHhM.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* The seed a host supplies per tenant.
|
package/dist/tokens/index.js
CHANGED
|
@@ -33,7 +33,7 @@ var colors = {
|
|
|
33
33
|
proLine: "#7b5bd8",
|
|
34
34
|
/* Disabled */
|
|
35
35
|
fgDisabled: "#a7a7ac",
|
|
36
|
-
bgDisabled: "#
|
|
36
|
+
bgDisabled: "#f1f2f6",
|
|
37
37
|
/* Status */
|
|
38
38
|
successFg: "#1f7a3d",
|
|
39
39
|
successBg: "#eaf6ee",
|
|
@@ -61,7 +61,7 @@ var typography = {
|
|
|
61
61
|
bold: 700
|
|
62
62
|
},
|
|
63
63
|
/* Universal entrance ease — applies to every motion primitive */
|
|
64
|
-
ease: "cubic-bezier(0.
|
|
64
|
+
ease: "cubic-bezier(0.25, 1, 0.5, 1)"
|
|
65
65
|
};
|
|
66
66
|
var radii = {
|
|
67
67
|
btn: "7px",
|
|
@@ -72,14 +72,14 @@ var radii = {
|
|
|
72
72
|
full: "9999px"
|
|
73
73
|
};
|
|
74
74
|
var shadows = {
|
|
75
|
-
quiet: "0 1px
|
|
76
|
-
card: "0 1px 2px rgba(16, 20, 36, 0.04), 0 4px
|
|
77
|
-
pop: "0 0 0 1px rgba(16, 20, 36, 0.
|
|
75
|
+
quiet: "0 1px 1px rgba(16, 20, 36, 0.03), 0 1px 3px rgba(16, 20, 36, 0.05)",
|
|
76
|
+
card: "0 1px 2px rgba(16, 20, 36, 0.04), 0 2px 4px -2px rgba(16, 20, 36, 0.04), 0 8px 16px -6px rgba(16, 20, 36, 0.08)",
|
|
77
|
+
pop: "0 0 0 1px rgba(16, 20, 36, 0.04), 0 2px 4px -1px rgba(16, 20, 36, 0.05), 0 6px 12px -3px rgba(16, 20, 36, 0.07), 0 16px 32px -8px rgba(16, 20, 36, 0.12)",
|
|
78
78
|
focusRing: "0 0 0 2px #ffffff, 0 0 0 4px #6c42f8"
|
|
79
79
|
};
|
|
80
80
|
var overlays = {
|
|
81
|
-
hover: "rgba(
|
|
82
|
-
active: "rgba(
|
|
81
|
+
hover: "rgba(16, 20, 36, 0.04)",
|
|
82
|
+
active: "rgba(16, 20, 36, 0.07)"
|
|
83
83
|
};
|
|
84
84
|
var layout = {
|
|
85
85
|
shellSidebarWidth: "200px",
|
|
@@ -110,7 +110,7 @@ var surfaces = {
|
|
|
110
110
|
};
|
|
111
111
|
var motion = {
|
|
112
112
|
ease: {
|
|
113
|
-
outQuart: "cubic-bezier(0.
|
|
113
|
+
outQuart: "cubic-bezier(0.25, 1, 0.5, 1)",
|
|
114
114
|
out: "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
115
115
|
in: "cubic-bezier(0.7, 0, 0.84, 0)",
|
|
116
116
|
inOut: "cubic-bezier(0.65, 0, 0.35, 1)"
|
package/dist/tokens/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tokens/reference.ts","../../src/tokens/system.ts","../../src/foundation/theme/srgb.ts","../../src/foundation/theme/brand-theme.ts"],"names":[],"mappings":"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O,KAAA;AAAA,EAC3F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAC3F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAC3F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACtF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,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","file":"index.js","sourcesContent":["/* GENERATED FILE — do not edit.\n * Source: tokens/src (DTCG, ADR-003).\n * Generator: tokens/build/lib/generate-ts.mjs, template tokens/build/templates/reference.ts.tmpl.\n * Change the token files and run `pnpm tokens:build`; `pnpm tokens:check`\n * fails when this file is out of date. */\n/**\n * Reference tokens — raw palette.\n *\n * Programmatic access for theme switching, Figma sync, design tools, etc.\n * Components should NOT consume these directly; use system tokens (./system.ts)\n * or the CSS variables in ./tokens.css.\n */\n\nexport const colors = {\n /* Surfaces */\n bg: \"#ffffff\",\n bg2: \"#f1f3f8\",\n bg3: \"#e7eaf1\",\n surface: \"#ffffff\",\n surface2: \"#f7f8fc\",\n\n /* Foreground */\n fg: \"#0a0a0a\",\n fg2: \"#38383b\",\n fg3: \"#5f5f64\",\n fg4: \"#6b6b70\",\n fg5: \"#9a9aa0\",\n\n /* Rules */\n rule: \"#e4e7ef\",\n ruleSoft: \"#eef0f5\",\n ruleStrong: \"#d3d8e3\",\n\n /* Accent (cyan) */\n accent: \"#6c42f8\",\n accent2: \"#5127e8\",\n accentTint: \"#efeaff\",\n accentHover: \"#5e35f2\",\n accentActive: \"#5127e8\",\n\n /* Pro (purple) */\n proBg: \"#f4f1ff\",\n proBgHover: \"#eee9ff\",\n proBgActive: \"#e4ddff\",\n proFg: \"#6c42f8\",\n proHover: \"#5e35f2\",\n proActive: \"#5127e8\",\n proDisabled: \"#b7a7f3\",\n proLine: \"#7b5bd8\",\n\n /* Disabled */\n fgDisabled: \"#a7a7ac\",\n bgDisabled: \"#f3f3f1\",\n\n /* Status */\n successFg: \"#1f7a3d\",\n successBg: \"#eaf6ee\",\n successLine: \"#c5e5cf\",\n warningFg: \"#8a4606\",\n warningBg: \"#fff3e5\",\n warningLine: \"#f5d5a8\",\n dangerFg: \"#c43838\",\n dangerBg: \"#fbeaea\",\n dangerLine: \"#ecc5c5\",\n\n /* On-brand */\n fgOnAccent: \"#ffffff\",\n fgOnPro: \"#ffffff\",\n} as const;\n\nexport const typography = {\n family: {\n display: '\"Plus Jakarta Sans\", -apple-system, system-ui, sans-serif',\n body: '\"Plus Jakarta Sans\", -apple-system, system-ui, sans-serif',\n mono: '\"Plus Jakarta Sans\", -apple-system, system-ui, sans-serif',\n },\n weight: {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n /* Universal entrance ease — applies to every motion primitive */\n ease: \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n} as const;\n\nexport const radii = {\n btn: \"7px\",\n input: \"7px\",\n pill: \"5px\",\n card: \"12px\",\n icon: \"4px\",\n full: \"9999px\",\n} as const;\n\nexport const shadows = {\n quiet: \"0 1px 2px rgba(16, 20, 36, 0.05)\",\n card: \"0 1px 2px rgba(16, 20, 36, 0.04), 0 4px 12px -4px rgba(16, 20, 36, 0.08)\",\n pop: \"0 0 0 1px rgba(16, 20, 36, 0.03), 0 2px 4px -1px rgba(16, 20, 36, 0.06), 0 12px 28px -6px rgba(16, 20, 36, 0.14)\",\n focusRing: \"0 0 0 2px #ffffff, 0 0 0 4px #6c42f8\",\n} as const;\n\nexport const overlays = {\n hover: \"rgba(10, 10, 10, 0.03)\",\n active: \"rgba(10, 10, 10, 0.05)\",\n} as const;\n\nexport const layout = {\n shellSidebarWidth: \"200px\",\n shellHeaderHeight: \"56px\",\n contentPad: \"32px\",\n} as const;\n\n/**\n * Spacing — 4px base scale. Components mostly use arbitrary values;\n * this scale is exposed for programmatic access (e.g. design-tool sync).\n */\nexport const spacing = {\n unit: \"4px\",\n 4: \"4px\",\n 8: \"8px\",\n 12: \"12px\",\n 16: \"16px\",\n 20: \"20px\",\n 24: \"24px\",\n 28: \"28px\",\n 32: \"32px\",\n 36: \"36px\",\n 40: \"40px\",\n 64: \"64px\",\n 80: \"80px\",\n 180: \"180px\",\n} as const;\n\n/**\n * Surface palette — the four canonical layers. Mirrors --color-bg / -2 /\n * --color-surface / --color-surface-2.\n */\nexport const surfaces = {\n bg: \"#ffffff\",\n bg2: \"#f1f3f8\",\n surface: \"#ffffff\",\n surface2: \"#f7f8fc\",\n} as const;\n\nexport const motion = {\n ease: {\n outQuart: \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n out: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n in: \"cubic-bezier(0.7, 0, 0.84, 0)\",\n inOut: \"cubic-bezier(0.65, 0, 0.35, 1)\",\n },\n duration: {\n instant: \"100ms\",\n fast: \"150ms\",\n normal: \"250ms\",\n slow: \"400ms\",\n },\n} as const;\n\n/**\n * Icon boxes — the four sizes of target architecture §9.3. These are the boxes\n * the library actually draws; `Icon`'s `size` prop maps onto them (W3-18).\n */\nexport const iconSizes = {\n xs: \"12px\",\n sm: \"14px\",\n md: \"16px\",\n lg: \"20px\",\n} as const;\n\n/**\n * Global stacking layers — target architecture §21. Use them only for\n * portalled surfaces and page chrome; anything else creates a local stacking\n * context and uses small local integers.\n *\n * `popover` is the layer the CSS still spells `--z-dropdown`; the legacy name\n * keeps working and resolves to the same value.\n */\nexport const zIndex = {\n base: 0,\n sticky: 100,\n overlay: 200,\n modal: 300,\n popover: 400,\n toast: 500,\n tooltip: 600,\n} as const;\n\n/**\n * Breakpoints — Tailwind's defaults, restated so a media query built in JS\n * (`useBreakpoint`, a chart's responsive config) reads the same numbers the\n * `sm:`…`2xl:` variants do.\n */\nexport const breakpoints = {\n sm: \"40rem\",\n md: \"48rem\",\n lg: \"64rem\",\n xl: \"80rem\",\n \"2xl\": \"96rem\",\n} as const;\n\nexport const reference = {\n colors,\n typography,\n radii,\n shadows,\n overlays,\n layout,\n motion,\n spacing,\n surfaces,\n iconSizes,\n zIndex,\n breakpoints,\n} as const;\n\nexport type ReferenceTokens = typeof reference;\nexport type ColorName = keyof typeof colors;\n","/* GENERATED FILE — do not edit.\n * Source: tokens/src (DTCG, ADR-003).\n * Generator: tokens/build/lib/generate-ts.mjs, template tokens/build/templates/system.ts.tmpl.\n * Change the token files and run `pnpm tokens:build`; `pnpm tokens:check`\n * fails when this file is out of date. */\n/**\n * System tokens — suite semantic mappings as CSS variable references.\n *\n * Use these from JS (e.g. inline styles, Storybook decorators, motion configs)\n * when you can't use a Tailwind utility class. Component CSS should prefer the\n * generated utilities (`bg-bg`, `text-fg-2`, `border-rule`, `bg-pro-fg`, etc.)\n * which Tailwind 4 emits from `--color-*` tokens declared in ./tokens.css.\n *\n * Themes (.dark) re-map the underlying CSS variables; these references stay valid.\n */\n\nexport const systemTokens = {\n color: {\n /* Surfaces */\n bg: \"var(--color-bg)\",\n bg2: \"var(--color-bg-2)\",\n bg3: \"var(--color-bg-3)\",\n surface: \"var(--color-surface)\",\n surface2: \"var(--color-surface-2)\",\n\n /* Foreground */\n fg: \"var(--color-fg)\",\n fg2: \"var(--color-fg-2)\",\n fg3: \"var(--color-fg-3)\",\n fg4: \"var(--color-fg-4)\",\n fg5: \"var(--color-fg-5)\",\n\n /* Rules */\n rule: \"var(--color-rule)\",\n ruleSoft: \"var(--color-rule-soft)\",\n ruleStrong: \"var(--color-rule-strong)\",\n\n /* Accent (purple) */\n accent: \"var(--color-accent)\",\n accent2: \"var(--color-accent-2)\",\n accentTint: \"var(--color-accent-tint)\",\n accentHover: \"var(--color-accent-hover)\",\n accentActive: \"var(--color-accent-active)\",\n accentRing: \"var(--color-accent-ring)\",\n\n /* Stable cross-product CTA; deliberately independent of [data-brand]. */\n suiteAction: \"var(--color-suite-action)\",\n suiteActionHover: \"var(--color-suite-action-hover)\",\n suiteActionActive: \"var(--color-suite-action-active)\",\n fgOnSuiteAction: \"var(--color-fg-on-suite-action)\",\n\n /* Brand — ambient product family; follows the active [data-brand] scope,\n defaulting to Pro. Prefer these (and the generated bg-brand / text-brand\n / border-brand-line / text-fg-on-brand utilities) for scope-aware chrome\n so the product never appears in a class name. */\n brand: \"var(--color-brand)\",\n brandHover: \"var(--color-brand-hover)\",\n brandActive: \"var(--color-brand-active)\",\n brandDisabled: \"var(--color-brand-disabled)\",\n brandBg: \"var(--color-brand-bg)\",\n brandBgHover: \"var(--color-brand-bg-hover)\",\n brandBgActive: \"var(--color-brand-bg-active)\",\n brandLine: \"var(--color-brand-line)\",\n brandRing: \"var(--color-brand-ring)\",\n fgOnBrand: \"var(--color-fg-on-brand)\",\n\n /* Pro (purple) */\n proBg: \"var(--color-pro-bg)\",\n proBgHover: \"var(--color-pro-bg-hover)\",\n proBgActive: \"var(--color-pro-bg-active)\",\n proFg: \"var(--color-pro-fg)\",\n proHover: \"var(--color-pro-hover)\",\n proActive: \"var(--color-pro-active)\",\n proDisabled: \"var(--color-pro-disabled)\",\n proLine: \"var(--color-pro-line)\",\n proRing: \"var(--color-pro-ring)\",\n auditFg: \"var(--color-audit-fg)\",\n auditHover: \"var(--color-audit-hover)\",\n auditActive: \"var(--color-audit-active)\",\n auditDisabled: \"var(--color-audit-disabled)\",\n auditBg: \"var(--color-audit-bg)\",\n auditBgHover: \"var(--color-audit-bg-hover)\",\n auditBgActive: \"var(--color-audit-bg-active)\",\n auditLine: \"var(--color-audit-line)\",\n auditRing: \"var(--color-audit-ring)\",\n booksFg: \"var(--color-books-fg)\",\n booksHover: \"var(--color-books-hover)\",\n booksActive: \"var(--color-books-active)\",\n booksDisabled: \"var(--color-books-disabled)\",\n booksBg: \"var(--color-books-bg)\",\n booksBgHover: \"var(--color-books-bg-hover)\",\n booksBgActive: \"var(--color-books-bg-active)\",\n booksLine: \"var(--color-books-line)\",\n booksRing: \"var(--color-books-ring)\",\n taxFg: \"var(--color-tax-fg)\",\n taxHover: \"var(--color-tax-hover)\",\n taxActive: \"var(--color-tax-active)\",\n taxDisabled: \"var(--color-tax-disabled)\",\n taxBg: \"var(--color-tax-bg)\",\n taxBgHover: \"var(--color-tax-bg-hover)\",\n taxBgActive: \"var(--color-tax-bg-active)\",\n taxLine: \"var(--color-tax-line)\",\n taxRing: \"var(--color-tax-ring)\",\n\n /* On-brand — text/icon color on a filled brand/product surface */\n fgOnAccent: \"var(--color-fg-on-accent)\",\n fgOnPro: \"var(--color-fg-on-pro)\",\n fgOnAudit: \"var(--color-fg-on-audit)\",\n fgOnBooks: \"var(--color-fg-on-books)\",\n fgOnTax: \"var(--color-fg-on-tax)\",\n\n /* Disabled */\n fgDisabled: \"var(--color-fg-disabled)\",\n bgDisabled: \"var(--color-bg-disabled)\",\n\n /* Overlays */\n overlayHover: \"var(--color-overlay-hover)\",\n overlayActive: \"var(--color-overlay-active)\",\n\n /* Status */\n successFg: \"var(--color-success-fg)\",\n successBg: \"var(--color-success-bg)\",\n successLine: \"var(--color-success-line)\",\n warningFg: \"var(--color-warning-fg)\",\n warningBg: \"var(--color-warning-bg)\",\n warningLine: \"var(--color-warning-line)\",\n dangerFg: \"var(--color-danger-fg)\",\n dangerBg: \"var(--color-danger-bg)\",\n dangerLine: \"var(--color-danger-line)\",\n\n /* Data-viz — chart series ramp + area gradient stops */\n chart1: \"var(--color-chart-1)\",\n chart2: \"var(--color-chart-2)\",\n chart3: \"var(--color-chart-3)\",\n chart4: \"var(--color-chart-4)\",\n chartLine: \"var(--color-chart-line)\",\n chartAreaFrom: \"var(--color-chart-area-from)\",\n chartAreaTo: \"var(--color-chart-area-to)\",\n\n /* Practice service tones — fill + track tint */\n serviceTax: \"var(--color-service-tax)\",\n serviceTaxBg: \"var(--color-service-tax-bg)\",\n serviceAudit: \"var(--color-service-audit)\",\n serviceAuditBg: \"var(--color-service-audit-bg)\",\n serviceAccounting: \"var(--color-service-accounting)\",\n serviceAccountingBg: \"var(--color-service-accounting-bg)\",\n },\n\n /** Ordered chart series ramp — index a series by position, cycle with `% 4`. */\n chart: [\n \"var(--color-chart-1)\",\n \"var(--color-chart-2)\",\n \"var(--color-chart-3)\",\n \"var(--color-chart-4)\",\n ],\n\n gradient: {\n brand: \"var(--gradient-brand)\",\n pro: \"var(--gradient-pro)\",\n audit: \"var(--gradient-audit)\",\n books: \"var(--gradient-books)\",\n tax: \"var(--gradient-tax)\",\n },\n\n shadow: {\n quiet: \"var(--shadow-quiet)\",\n card: \"var(--shadow-card)\",\n pop: \"var(--shadow-pop)\",\n focusRing: \"var(--shadow-focus-ring)\",\n xs: \"var(--shadow-xs)\",\n sm: \"var(--shadow-sm)\",\n md: \"var(--shadow-md)\",\n lg: \"var(--shadow-lg)\",\n xl: \"var(--shadow-xl)\",\n \"2xl\": \"var(--shadow-2xl)\",\n },\n\n radius: {\n btn: \"var(--radius-btn)\",\n input: \"var(--radius-input)\",\n pill: \"var(--radius-pill)\",\n card: \"var(--radius-card)\",\n icon: \"var(--radius-icon)\",\n full: \"var(--radius-full)\",\n },\n\n type: {\n family: {\n display: \"var(--font-display)\",\n body: \"var(--font-body)\",\n mono: \"var(--font-mono)\",\n },\n weight: {\n regular: \"var(--font-weight-regular)\",\n medium: \"var(--font-weight-medium)\",\n semibold: \"var(--font-weight-semibold)\",\n bold: \"var(--font-weight-bold)\",\n },\n },\n\n motion: {\n ease: {\n outQuart: \"var(--ease-out-quart)\",\n out: \"var(--ease-out)\",\n in: \"var(--ease-in)\",\n inOut: \"var(--ease-in-out)\",\n },\n duration: {\n instant: \"var(--duration-instant)\",\n fast: \"var(--duration-fast)\",\n normal: \"var(--duration-normal)\",\n slow: \"var(--duration-slow)\",\n },\n semantic: {\n duration: {\n press: \"var(--motion-duration-press)\",\n feedback: \"var(--motion-duration-feedback)\",\n overlay: \"var(--motion-duration-overlay)\",\n spatial: \"var(--motion-duration-spatial)\",\n deliberate: \"var(--motion-duration-deliberate)\",\n },\n ease: {\n enter: \"var(--motion-ease-enter)\",\n exit: \"var(--motion-ease-exit)\",\n move: \"var(--motion-ease-move)\",\n },\n },\n },\n\n /**\n * Control sizing (amendment A1, W2-03). One outer height per size name, with\n * the padding, gap, label size and glyph size derived from it.\n *\n * **Nothing reads these yet** and the numbers are gated on decision D5\n * (implementation plan §3) — what each control renders *today* is in\n * `docs/design-system/control-sizes.md`, and W2-05 is the task that unifies\n * them. Referencing the scale here is also what keeps the custom properties\n * in the published stylesheet, so `[data-ds-density=\"compact\"]` has something\n * to re-point.\n */\n control: {\n height: {\n xs: \"var(--control-height-xs)\",\n sm: \"var(--control-height-sm)\",\n md: \"var(--control-height-md)\",\n lg: \"var(--control-height-lg)\",\n xl: \"var(--control-height-xl)\",\n },\n paddingX: {\n xs: \"var(--control-padding-x-xs)\",\n sm: \"var(--control-padding-x-sm)\",\n md: \"var(--control-padding-x-md)\",\n lg: \"var(--control-padding-x-lg)\",\n xl: \"var(--control-padding-x-xl)\",\n },\n gap: {\n xs: \"var(--control-gap-xs)\",\n sm: \"var(--control-gap-sm)\",\n md: \"var(--control-gap-md)\",\n lg: \"var(--control-gap-lg)\",\n xl: \"var(--control-gap-xl)\",\n },\n fontSize: {\n xs: \"var(--control-font-size-xs)\",\n sm: \"var(--control-font-size-sm)\",\n md: \"var(--control-font-size-md)\",\n lg: \"var(--control-font-size-lg)\",\n xl: \"var(--control-font-size-xl)\",\n },\n icon: {\n xs: \"var(--control-icon-xs)\",\n sm: \"var(--control-icon-sm)\",\n md: \"var(--control-icon-md)\",\n lg: \"var(--control-icon-lg)\",\n xl: \"var(--control-icon-xl)\",\n },\n },\n\n layout: {\n shellSidebarWidth: \"var(--shell-sidebar-w)\",\n shellSidebarRailWidth: \"var(--shell-sidebar-w-rail)\",\n shellHeaderHeight: \"var(--shell-header-h)\",\n contentPad: \"var(--content-pad)\",\n },\n\n z: {\n base: \"var(--z-base)\",\n dropdown: \"var(--z-dropdown)\",\n sticky: \"var(--z-sticky)\",\n overlay: \"var(--z-overlay)\",\n modal: \"var(--z-modal)\",\n toast: \"var(--z-toast)\",\n tooltip: \"var(--z-tooltip)\",\n },\n} as const;\n\nexport type SystemTokens = typeof systemTokens;\n","/**\n * sRGB colour arithmetic for the runtime brand contract (W1-20).\n *\n * Everything here is integer or IEEE-754 arithmetic over committed constants.\n * In particular the sRGB transfer function is a **committed lookup table**\n * rather than a call to `Math.pow`: `Math.pow` is implementation-approximated,\n * so two engines may return doubles that differ in the last bit, and a\n * comparison sitting exactly on a contrast threshold could then resolve one way\n * in Node and the other way in a browser. Addition, multiplication, division\n * and `Math.round` are exactly specified, so with the table as the only source\n * of transferred values every result below is bit-identical on every conforming\n * engine (amendment A3 — SSR determinism).\n *\n * `__tests__/srgb.test.ts` checks the table against the formula, so the\n * constants stay auditable.\n */\n\n/** A colour as three integer sRGB channels, 0–255. */\nexport type Rgb = readonly [number, number, number];\n\n/**\n * The sRGB transfer function applied to each of the 256 channel bytes, scaled\n * by 1e6 and rounded to the nearest integer. Index = channel byte.\n *\n * Six decimal places is far finer than the two the WCAG contrast thresholds are\n * quoted to — the worst-case effect on a ratio is about 2e-5 — and keeps the\n * table small enough to ship on a data entry point.\n */\nconst SRGB_TO_LINEAR_1E6: readonly number[] = [\n 0, 304, 607, 911, 1214, 1518, 1821, 2125, 2428, 2732, 3035, 3347, 3677, 4025, 4391, 4777, 5182,\n 5605, 6049, 6512, 6995, 7499, 8023, 8568, 9134, 9721, 10330, 10960, 11612, 12286, 12983, 13702,\n 14444, 15209, 15996, 16807, 17642, 18500, 19382, 20289, 21219, 22174, 23153, 24158, 25187, 26241,\n 27321, 28426, 29557, 30713, 31896, 33105, 34340, 35601, 36889, 38204, 39546, 40915, 42311, 43735,\n 45186, 46665, 48172, 49707, 51269, 52861, 54480, 56128, 57805, 59511, 61246, 63010, 64803, 66626,\n 68478, 70360, 72272, 74214, 76185, 78187, 80220, 82283, 84376, 86500, 88656, 90842, 93059, 95307,\n 97587, 99899, 102242, 104616, 107023, 109462, 111932, 114435, 116971, 119538, 122139, 124772,\n 127438, 130136, 132868, 135633, 138432, 141263, 144128, 147027, 149960, 152926, 155926, 158961,\n 162029, 165132, 168269, 171441, 174647, 177888, 181164, 184475, 187821, 191202, 194618, 198069,\n 201556, 205079, 208637, 212231, 215861, 219526, 223228, 226966, 230740, 234551, 238398, 242281,\n 246201, 250158, 254152, 258183, 262251, 266356, 270498, 274677, 278894, 283149, 287441, 291771,\n 296138, 300544, 304987, 309469, 313989, 318547, 323143, 327778, 332452, 337164, 341914, 346704,\n 351533, 356400, 361307, 366253, 371238, 376262, 381326, 386429, 391572, 396755, 401978, 407240,\n 412543, 417885, 423268, 428690, 434154, 439657, 445201, 450786, 456411, 462077, 467784, 473531,\n 479320, 485150, 491021, 496933, 502886, 508881, 514918, 520996, 527115, 533276, 539479, 545724,\n 552011, 558340, 564712, 571125, 577580, 584078, 590619, 597202, 603827, 610496, 617207, 623960,\n 630757, 637597, 644480, 651406, 658375, 665387, 672443, 679542, 686685, 693872, 701102, 708376,\n 715694, 723055, 730461, 737910, 745404, 752942, 760525, 768151, 775822, 783538, 791298, 799103,\n 806952, 814847, 822786, 830770, 838799, 846873, 854993, 863157, 871367, 879622, 887923, 896269,\n 904661, 913099, 921582, 930111, 938686, 947307, 955973, 964686, 973445, 982251, 991102, 1000000,\n];\n\nconst HEX_3 = /^#[0-9a-fA-F]{3}$/;\nconst HEX_6 = /^#[0-9a-fA-F]{6}$/;\nconst HEX_DIGITS = \"0123456789abcdef\";\n\n/** `#rgb` and `#rrggbb`, in either case. Returns `null` for anything else. */\nexport function parseHexColor(value: string): Rgb | null {\n if (HEX_6.test(value)) {\n const n = Number.parseInt(value.slice(1), 16);\n return [(n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff];\n }\n if (HEX_3.test(value)) {\n const n = Number.parseInt(value.slice(1), 16);\n const r = (n >> 8) & 0xf;\n const g = (n >> 4) & 0xf;\n const b = n & 0xf;\n return [r * 17, g * 17, b * 17];\n }\n return null;\n}\n\n/** Lower-case `#rrggbb`. Built by table lookup so no locale or `toString`\n * radix behaviour can enter the output. */\nexport function formatHexColor([r, g, b]: Rgb): string {\n const byte = (v: number) => HEX_DIGITS[(v >> 4) & 0xf] + HEX_DIGITS[v & 0xf];\n return `#${byte(r)}${byte(g)}${byte(b)}`;\n}\n\n/** WCAG relative luminance, from the committed transfer table. */\nexport function relativeLuminance([r, g, b]: Rgb): number {\n const lr = SRGB_TO_LINEAR_1E6[r] / 1e6;\n const lg = SRGB_TO_LINEAR_1E6[g] / 1e6;\n const lb = SRGB_TO_LINEAR_1E6[b] / 1e6;\n return 0.2126 * lr + 0.7152 * lg + 0.0722 * lb;\n}\n\n/** WCAG 2.2 contrast ratio between two opaque colours (1–21). */\nexport function contrastRatio(a: Rgb, b: Rgb): number {\n const la = relativeLuminance(a);\n const lb = relativeLuminance(b);\n const lighter = la > lb ? la : lb;\n const darker = la > lb ? lb : la;\n return (lighter + 0.05) / (darker + 0.05);\n}\n\n/**\n * `color-mix(in srgb, <a> <percent>%, <b>)` evaluated on integer channels.\n * `percent` is an integer 0–100; sRGB mixing is a straight interpolation in the\n * gamma-encoded space, which is what the browser does for `in srgb`.\n */\nexport function mixSrgb(a: Rgb, b: Rgb, percent: number): Rgb {\n const mix = (x: number, y: number) => Math.round((x * percent + y * (100 - percent)) / 100);\n return [mix(a[0], b[0]), mix(a[1], b[1]), mix(a[2], b[2])];\n}\n\nexport const WHITE: Rgb = [255, 255, 255];\nexport const BLACK: Rgb = [0, 0, 0];\n\n/**\n * Pure black or pure white, whichever has more contrast against `fill`.\n *\n * The two endpoints cross over at a luminance of about 0.1791, where both reach\n * 4.58:1, so the winner is **always** at or above 4.58:1 — WCAG 2.2 AA for\n * normal text (4.5:1) with margin, for every possible fill. Any near-black ink\n * short of `#000000` loses that property, which is why this returns the\n * extremes rather than a token value.\n */\nexport function readableInk(fill: Rgb): Rgb {\n return contrastRatio(BLACK, fill) >= contrastRatio(WHITE, fill) ? BLACK : WHITE;\n}\n\n/**\n * The least-darkened mix of `colour` towards black that reaches `minRatio`\n * against `against`, searched over the 101 integer mix percentages from 100\n * (untouched) downwards. 0% is black, so the search terminates whenever\n * `against` is light enough for black to pass — true for every background this\n * module uses.\n */\nexport function darkenUntilContrast(colour: Rgb, against: Rgb, minRatio: number): Rgb {\n for (let percent = 100; percent >= 0; percent -= 1) {\n const candidate = mixSrgb(colour, BLACK, percent);\n if (contrastRatio(candidate, against) >= minRatio) return candidate;\n }\n return BLACK;\n}\n","/**\n * `createBrandTheme()` — the runtime brand contract (W1-20, experimental).\n *\n * A white-label host has one or two colours per tenant and needs the design\n * system's brand family to follow them. Today that is done by writing the\n * design system's *legacy* variable names from application code (Assure\n * Portal's `src/lib/brand-theme.ts` writes about thirty of them onto `<body>`),\n * which couples the application to names the design system owns and gives no\n * guarantee that the result is legible.\n *\n * This function is the supported replacement: a validated seed in, a plain\n * object of `--ds-*` custom properties out, to spread into a `style` attribute\n * on whatever element scopes the brand (target architecture §12.1 rule 6 (iv)).\n *\n * Contract:\n *\n * - **Pure.** No `document`, no `window`, no clock, no randomness, no module\n * state. The same seed always yields the same object.\n * - **SSR-deterministic** (amendment A3). Every number comes from integer\n * arithmetic over a committed transfer table (`./srgb`), so server-rendered\n * markup and the first client render agree byte for byte. Asserted in Node\n * (`__tests__/brand-theme.test.ts`) and in a real browser\n * (`tests/browser/brand-theme-ssr-determinism.test.ts`) against the same\n * committed vectors.\n * - **Legible.** The fills are clamped to at least 3:1 against the light canvas\n * (WCAG 2.2 SC 1.4.11, non-text contrast), and every foreground the function\n * emits reaches at least 4.5:1 against the fill it sits on (SC 1.4.3 AA).\n * - **Shaped like a built-in brand.** The ramp uses the same percentages as the\n * generated `[data-ds-brand]` scopes in `css/tokens.css`, and the steps that\n * depend on the colour scheme stay as `color-mix(… var(--ds-color-content))`\n * exactly as those scopes do, so a runtime brand keeps working in dark mode.\n *\n * @experimental The seed shape is gated by decision D7 (white-label scope:\n * brand, plus optional accent). It may change while D7 is open.\n */\nimport {\n BLACK,\n WHITE,\n contrastRatio,\n darkenUntilContrast,\n formatHexColor,\n mixSrgb,\n parseHexColor,\n readableInk,\n type Rgb,\n} from \"./srgb\";\n\n/**\n * The seed a host supplies per tenant.\n *\n * @experimental Gated by decision D7.\n */\nexport interface BrandThemeSeed {\n /**\n * The brand fill, as `#rgb` or `#rrggbb`. Drives the `action.brand` family,\n * the focus ring and the brand gradient.\n */\n brand: string;\n /**\n * An optional second hue for the `action.accent` family, as `#rgb` or\n * `#rrggbb`. `undefined` or `null` means \"the same as `brand`\", which is what\n * the built-in `[data-ds-brand]` scopes do.\n */\n accent?: string | null;\n}\n\n/** Every custom property `createBrandTheme()` sets, in output order. */\nexport const BRAND_THEME_PROPERTIES = [\n \"--ds-color-action-brand-bg\",\n \"--ds-color-action-brand-bg-hover\",\n \"--ds-color-action-brand-bg-active\",\n \"--ds-color-action-brand-bg-disabled\",\n \"--ds-color-action-brand-subtle-bg\",\n \"--ds-color-action-brand-subtle-bg-hover\",\n \"--ds-color-action-brand-subtle-bg-active\",\n \"--ds-color-action-brand-border\",\n \"--ds-color-action-brand-ring\",\n \"--ds-color-action-brand-fg\",\n \"--ds-color-action-accent-bg\",\n \"--ds-color-action-accent-bg-strong\",\n \"--ds-color-action-accent-bg-hover\",\n \"--ds-color-action-accent-bg-active\",\n \"--ds-color-action-accent-subtle-bg\",\n \"--ds-color-action-accent-ring\",\n \"--ds-color-action-accent-fg\",\n \"--ds-color-border-focus\",\n \"--ds-focus-ring-color\",\n \"--ds-focus-ring-border\",\n \"--ds-gradient-brand\",\n \"--ds-compat-color-brand-soft\",\n \"--ds-compat-color-brand-soft-foreground\",\n] as const;\n\n/** One of the custom properties `createBrandTheme()` sets. */\nexport type BrandThemeProperty = (typeof BRAND_THEME_PROPERTIES)[number];\n\n/**\n * The style object `createBrandTheme()` returns: every property of\n * {@link BRAND_THEME_PROPERTIES} with a CSS value.\n *\n * React types `style` as `CSSProperties`, which has no index signature for\n * custom properties, so spread it or cast it at the call site:\n * `style={{ ...createBrandTheme(seed) }}`.\n *\n * @experimental Gated by decision D7.\n */\nexport type BrandTheme = { readonly [P in BrandThemeProperty]: string };\n\n/** Minimum contrast a fill must reach against the light canvas (SC 1.4.11). */\nconst MIN_FILL_CONTRAST = 3;\n/** Minimum contrast a foreground must reach against its fill (SC 1.4.3 AA). */\nconst MIN_TEXT_CONTRAST = 4.5;\n\n/** The light canvas (`--ds-color-canvas`), the surface a fill sits on. */\nconst CANVAS: Rgb = WHITE;\n\n/**\n * Ramp percentages, copied from the generated brand scopes in\n * `tokens/build/generate-ds-css.mjs`, so a runtime brand and a built-in one are\n * the same shape.\n */\nconst RAMP = {\n hover: 88,\n active: 74,\n disabled: 42,\n subtle: 8,\n subtleHover: 13,\n subtleActive: 20,\n border: 45,\n ring: 20,\n /** The soft tint and its ink, which the app-vocabulary bridge reads. */\n soft: 12,\n softInk: 68,\n} as const;\n\n/** `color-mix(in srgb, <colour> <percent>%, var(--ds-color-content))` — the\n * scheme-aware steps, left unresolved exactly as the built-in scopes leave\n * them, so a runtime brand still darkens in light mode and lightens in dark. */\nconst towardsInk = (colour: string, percent: number) =>\n `color-mix(in srgb, ${colour} ${percent}%, var(--ds-color-content))`;\n\n/** `color-mix(in srgb, <colour> <percent>%, transparent)`. */\nconst towardsTransparent = (colour: string, percent: number) =>\n `color-mix(in srgb, ${colour} ${percent}%, transparent)`;\n\nconst ACCEPTED = '#rgb or #rrggbb, for example \"#6c42f8\"';\nconst SEED_KEYS = new Set([\"brand\", \"accent\"]);\n\nfunction describe(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"an array\";\n return typeof value;\n}\n\nfunction readColour(key: \"brand\" | \"accent\", value: unknown): Rgb {\n if (typeof value !== \"string\") {\n throw new TypeError(\n `createBrandTheme: \"${key}\" must be a hex colour string (${ACCEPTED}), received ${describe(value)}.`,\n );\n }\n const rgb = parseHexColor(value);\n if (!rgb) {\n throw new TypeError(\n `createBrandTheme: \"${key}\" must be a hex colour (${ACCEPTED}), received ${describe(value)}. ` +\n \"Named colours, rgb()/hsl() and eight-digit hex with alpha are not accepted — a brand seed must be opaque and unambiguous.\",\n );\n }\n return rgb;\n}\n\nfunction validateSeed(seed: BrandThemeSeed): void {\n if (seed === null || typeof seed !== \"object\" || Array.isArray(seed)) {\n throw new TypeError(\n `createBrandTheme: expected a seed object with a \"brand\" colour, received ${describe(seed)}.`,\n );\n }\n const unknown = Object.keys(seed).filter((key) => !SEED_KEYS.has(key));\n if (unknown.length) {\n throw new TypeError(\n `createBrandTheme: unknown seed ${unknown.length === 1 ? \"key\" : \"keys\"} ${unknown\n .map((key) => JSON.stringify(key))\n .join(\", \")}. The seed accepts \"brand\" and an optional \"accent\" (decision D7).`,\n );\n }\n}\n\n/**\n * Clamp a seed so it reads as a UI fill: at least 3:1 against the light canvas\n * (WCAG 2.2 SC 1.4.11). A seed that already passes is returned untouched, so\n * the common case is exact — `createBrandTheme({ brand: \"#6c42f8\" })` emits\n * `#6c42f8`. A pale seed is darkened by the smallest whole-percent mix towards\n * black that passes, which keeps the hue and gives up only lightness.\n */\nfunction clampFill(seed: Rgb): Rgb {\n if (contrastRatio(seed, CANVAS) >= MIN_FILL_CONTRAST) return seed;\n return darkenUntilContrast(seed, CANVAS, MIN_FILL_CONTRAST);\n}\n\n/**\n * Turn a tenant's colours into the design system's brand and accent tokens.\n *\n * ```tsx\n * const theme = createBrandTheme({ brand: firm.primaryColor, accent: firm.accentColor });\n * return <div style={{ ...theme }}>{children}</div>;\n * ```\n *\n * Apply it to the element that scopes the brand — `<body>` for a whole-tenant\n * theme, a wrapper for a preview. The properties are the same ones a built-in\n * `[data-ds-brand]` scope declares, so anything reading them (every design\n * system component, and any application CSS reading `--ds-*`) follows.\n *\n * @param seed - `brand`, and optionally `accent` (decision D7).\n * @returns A frozen object of custom property names to CSS values.\n * @throws TypeError when the seed is not an object, carries an unknown key, or\n * a colour is missing or not `#rgb`/`#rrggbb`.\n *\n * @experimental Gated by decision D7. The property set may grow, and the seed\n * shape may change, until D7 is resolved.\n */\nexport function createBrandTheme(seed: BrandThemeSeed): BrandTheme {\n validateSeed(seed);\n const brandSeed = readColour(\"brand\", seed.brand);\n const accentSeed =\n seed.accent === undefined || seed.accent === null\n ? brandSeed\n : readColour(\"accent\", seed.accent);\n\n const brand = clampFill(brandSeed);\n const accent = clampFill(accentSeed);\n const brandHex = formatHexColor(brand);\n const accentHex = formatHexColor(accent);\n\n const soft = mixSrgb(brand, WHITE, RAMP.soft);\n const softInk = darkenUntilContrast(mixSrgb(brand, BLACK, RAMP.softInk), soft, MIN_TEXT_CONTRAST);\n\n return Object.freeze({\n \"--ds-color-action-brand-bg\": brandHex,\n \"--ds-color-action-brand-bg-hover\": towardsInk(brandHex, RAMP.hover),\n \"--ds-color-action-brand-bg-active\": towardsInk(brandHex, RAMP.active),\n \"--ds-color-action-brand-bg-disabled\": formatHexColor(mixSrgb(brand, WHITE, RAMP.disabled)),\n \"--ds-color-action-brand-subtle-bg\": formatHexColor(mixSrgb(brand, WHITE, RAMP.subtle)),\n \"--ds-color-action-brand-subtle-bg-hover\": formatHexColor(\n mixSrgb(brand, WHITE, RAMP.subtleHover),\n ),\n \"--ds-color-action-brand-subtle-bg-active\": formatHexColor(\n mixSrgb(brand, WHITE, RAMP.subtleActive),\n ),\n \"--ds-color-action-brand-border\": formatHexColor(mixSrgb(brand, WHITE, RAMP.border)),\n \"--ds-color-action-brand-ring\": towardsTransparent(brandHex, RAMP.ring),\n \"--ds-color-action-brand-fg\": formatHexColor(readableInk(brand)),\n \"--ds-color-action-accent-bg\": accentHex,\n \"--ds-color-action-accent-bg-strong\": towardsInk(accentHex, RAMP.active),\n \"--ds-color-action-accent-bg-hover\": towardsInk(accentHex, RAMP.hover),\n \"--ds-color-action-accent-bg-active\": towardsInk(accentHex, RAMP.active),\n \"--ds-color-action-accent-subtle-bg\": formatHexColor(mixSrgb(accent, WHITE, RAMP.subtle)),\n \"--ds-color-action-accent-ring\": towardsTransparent(accentHex, RAMP.ring),\n \"--ds-color-action-accent-fg\": formatHexColor(readableInk(accent)),\n \"--ds-color-border-focus\": accentHex,\n \"--ds-focus-ring-color\": towardsTransparent(brandHex, RAMP.ring),\n \"--ds-focus-ring-border\": brandHex,\n \"--ds-gradient-brand\": `linear-gradient(135deg, ${brandHex}, ${towardsInk(brandHex, RAMP.hover)})`,\n \"--ds-compat-color-brand-soft\": formatHexColor(soft),\n \"--ds-compat-color-brand-soft-foreground\": formatHexColor(softInk),\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/tokens/reference.ts","../../src/tokens/system.ts","../../src/foundation/theme/srgb.ts","../../src/foundation/theme/brand-theme.ts"],"names":[],"mappings":"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O,KAAA;AAAA,EAC3F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAC3F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAC3F,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACtF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EACxF,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,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","file":"index.js","sourcesContent":["/* GENERATED FILE — do not edit.\n * Source: tokens/src (DTCG, ADR-003).\n * Generator: tokens/build/lib/generate-ts.mjs, template tokens/build/templates/reference.ts.tmpl.\n * Change the token files and run `pnpm tokens:build`; `pnpm tokens:check`\n * fails when this file is out of date. */\n/**\n * Reference tokens — raw palette.\n *\n * Programmatic access for theme switching, Figma sync, design tools, etc.\n * Components should NOT consume these directly; use system tokens (./system.ts)\n * or the CSS variables in ./tokens.css.\n */\n\nexport const colors = {\n /* Surfaces */\n bg: \"#ffffff\",\n bg2: \"#f1f3f8\",\n bg3: \"#e7eaf1\",\n surface: \"#ffffff\",\n surface2: \"#f7f8fc\",\n\n /* Foreground */\n fg: \"#0a0a0a\",\n fg2: \"#38383b\",\n fg3: \"#5f5f64\",\n fg4: \"#6b6b70\",\n fg5: \"#9a9aa0\",\n\n /* Rules */\n rule: \"#e4e7ef\",\n ruleSoft: \"#eef0f5\",\n ruleStrong: \"#d3d8e3\",\n\n /* Accent (cyan) */\n accent: \"#6c42f8\",\n accent2: \"#5127e8\",\n accentTint: \"#efeaff\",\n accentHover: \"#5e35f2\",\n accentActive: \"#5127e8\",\n\n /* Pro (purple) */\n proBg: \"#f4f1ff\",\n proBgHover: \"#eee9ff\",\n proBgActive: \"#e4ddff\",\n proFg: \"#6c42f8\",\n proHover: \"#5e35f2\",\n proActive: \"#5127e8\",\n proDisabled: \"#b7a7f3\",\n proLine: \"#7b5bd8\",\n\n /* Disabled */\n fgDisabled: \"#a7a7ac\",\n bgDisabled: \"#f1f2f6\",\n\n /* Status */\n successFg: \"#1f7a3d\",\n successBg: \"#eaf6ee\",\n successLine: \"#c5e5cf\",\n warningFg: \"#8a4606\",\n warningBg: \"#fff3e5\",\n warningLine: \"#f5d5a8\",\n dangerFg: \"#c43838\",\n dangerBg: \"#fbeaea\",\n dangerLine: \"#ecc5c5\",\n\n /* On-brand */\n fgOnAccent: \"#ffffff\",\n fgOnPro: \"#ffffff\",\n} as const;\n\nexport const typography = {\n family: {\n display: '\"Plus Jakarta Sans\", -apple-system, system-ui, sans-serif',\n body: '\"Plus Jakarta Sans\", -apple-system, system-ui, sans-serif',\n mono: '\"Plus Jakarta Sans\", -apple-system, system-ui, sans-serif',\n },\n weight: {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n /* Universal entrance ease — applies to every motion primitive */\n ease: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n} as const;\n\nexport const radii = {\n btn: \"7px\",\n input: \"7px\",\n pill: \"5px\",\n card: \"12px\",\n icon: \"4px\",\n full: \"9999px\",\n} as const;\n\nexport const shadows = {\n quiet: \"0 1px 1px rgba(16, 20, 36, 0.03), 0 1px 3px rgba(16, 20, 36, 0.05)\",\n card: \"0 1px 2px rgba(16, 20, 36, 0.04), 0 2px 4px -2px rgba(16, 20, 36, 0.04), 0 8px 16px -6px rgba(16, 20, 36, 0.08)\",\n pop: \"0 0 0 1px rgba(16, 20, 36, 0.04), 0 2px 4px -1px rgba(16, 20, 36, 0.05), 0 6px 12px -3px rgba(16, 20, 36, 0.07), 0 16px 32px -8px rgba(16, 20, 36, 0.12)\",\n focusRing: \"0 0 0 2px #ffffff, 0 0 0 4px #6c42f8\",\n} as const;\n\nexport const overlays = {\n hover: \"rgba(16, 20, 36, 0.04)\",\n active: \"rgba(16, 20, 36, 0.07)\",\n} as const;\n\nexport const layout = {\n shellSidebarWidth: \"200px\",\n shellHeaderHeight: \"56px\",\n contentPad: \"32px\",\n} as const;\n\n/**\n * Spacing — 4px base scale. Components mostly use arbitrary values;\n * this scale is exposed for programmatic access (e.g. design-tool sync).\n */\nexport const spacing = {\n unit: \"4px\",\n 4: \"4px\",\n 8: \"8px\",\n 12: \"12px\",\n 16: \"16px\",\n 20: \"20px\",\n 24: \"24px\",\n 28: \"28px\",\n 32: \"32px\",\n 36: \"36px\",\n 40: \"40px\",\n 64: \"64px\",\n 80: \"80px\",\n 180: \"180px\",\n} as const;\n\n/**\n * Surface palette — the four canonical layers. Mirrors --color-bg / -2 /\n * --color-surface / --color-surface-2.\n */\nexport const surfaces = {\n bg: \"#ffffff\",\n bg2: \"#f1f3f8\",\n surface: \"#ffffff\",\n surface2: \"#f7f8fc\",\n} as const;\n\nexport const motion = {\n ease: {\n outQuart: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n out: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n in: \"cubic-bezier(0.7, 0, 0.84, 0)\",\n inOut: \"cubic-bezier(0.65, 0, 0.35, 1)\",\n },\n duration: {\n instant: \"100ms\",\n fast: \"150ms\",\n normal: \"250ms\",\n slow: \"400ms\",\n },\n} as const;\n\n/**\n * Icon boxes — the four sizes of target architecture §9.3. These are the boxes\n * the library actually draws; `Icon`'s `size` prop maps onto them (W3-18).\n */\nexport const iconSizes = {\n xs: \"12px\",\n sm: \"14px\",\n md: \"16px\",\n lg: \"20px\",\n} as const;\n\n/**\n * Global stacking layers — target architecture §21. Use them only for\n * portalled surfaces and page chrome; anything else creates a local stacking\n * context and uses small local integers.\n *\n * `popover` is the layer the CSS still spells `--z-dropdown`; the legacy name\n * keeps working and resolves to the same value.\n */\nexport const zIndex = {\n base: 0,\n sticky: 100,\n overlay: 200,\n modal: 300,\n popover: 400,\n toast: 500,\n tooltip: 600,\n} as const;\n\n/**\n * Breakpoints — Tailwind's defaults, restated so a media query built in JS\n * (`useBreakpoint`, a chart's responsive config) reads the same numbers the\n * `sm:`…`2xl:` variants do.\n */\nexport const breakpoints = {\n sm: \"40rem\",\n md: \"48rem\",\n lg: \"64rem\",\n xl: \"80rem\",\n \"2xl\": \"96rem\",\n} as const;\n\nexport const reference = {\n colors,\n typography,\n radii,\n shadows,\n overlays,\n layout,\n motion,\n spacing,\n surfaces,\n iconSizes,\n zIndex,\n breakpoints,\n} as const;\n\nexport type ReferenceTokens = typeof reference;\nexport type ColorName = keyof typeof colors;\n","/* GENERATED FILE — do not edit.\n * Source: tokens/src (DTCG, ADR-003).\n * Generator: tokens/build/lib/generate-ts.mjs, template tokens/build/templates/system.ts.tmpl.\n * Change the token files and run `pnpm tokens:build`; `pnpm tokens:check`\n * fails when this file is out of date. */\n/**\n * System tokens — suite semantic mappings as CSS variable references.\n *\n * Use these from JS (e.g. inline styles, Storybook decorators, motion configs)\n * when you can't use a Tailwind utility class. Component CSS should prefer the\n * generated utilities (`bg-bg`, `text-fg-2`, `border-rule`, `bg-pro-fg`, etc.)\n * which Tailwind 4 emits from `--color-*` tokens declared in ./tokens.css.\n *\n * Themes (.dark) re-map the underlying CSS variables; these references stay valid.\n */\n\nexport const systemTokens = {\n color: {\n /* Surfaces */\n bg: \"var(--color-bg)\",\n bg2: \"var(--color-bg-2)\",\n bg3: \"var(--color-bg-3)\",\n surface: \"var(--color-surface)\",\n surface2: \"var(--color-surface-2)\",\n\n /* Foreground */\n fg: \"var(--color-fg)\",\n fg2: \"var(--color-fg-2)\",\n fg3: \"var(--color-fg-3)\",\n fg4: \"var(--color-fg-4)\",\n fg5: \"var(--color-fg-5)\",\n\n /* Rules */\n rule: \"var(--color-rule)\",\n ruleSoft: \"var(--color-rule-soft)\",\n ruleStrong: \"var(--color-rule-strong)\",\n\n /* Accent (purple) */\n accent: \"var(--color-accent)\",\n accent2: \"var(--color-accent-2)\",\n accentTint: \"var(--color-accent-tint)\",\n accentHover: \"var(--color-accent-hover)\",\n accentActive: \"var(--color-accent-active)\",\n accentRing: \"var(--color-accent-ring)\",\n\n /* Stable cross-product CTA; deliberately independent of [data-brand]. */\n suiteAction: \"var(--color-suite-action)\",\n suiteActionHover: \"var(--color-suite-action-hover)\",\n suiteActionActive: \"var(--color-suite-action-active)\",\n fgOnSuiteAction: \"var(--color-fg-on-suite-action)\",\n\n /* Brand — ambient product family; follows the active [data-brand] scope,\n defaulting to Pro. Prefer these (and the generated bg-brand / text-brand\n / border-brand-line / text-fg-on-brand utilities) for scope-aware chrome\n so the product never appears in a class name. */\n brand: \"var(--color-brand)\",\n brandHover: \"var(--color-brand-hover)\",\n brandActive: \"var(--color-brand-active)\",\n brandDisabled: \"var(--color-brand-disabled)\",\n brandBg: \"var(--color-brand-bg)\",\n brandBgHover: \"var(--color-brand-bg-hover)\",\n brandBgActive: \"var(--color-brand-bg-active)\",\n brandLine: \"var(--color-brand-line)\",\n brandRing: \"var(--color-brand-ring)\",\n fgOnBrand: \"var(--color-fg-on-brand)\",\n\n /* Pro (purple) */\n proBg: \"var(--color-pro-bg)\",\n proBgHover: \"var(--color-pro-bg-hover)\",\n proBgActive: \"var(--color-pro-bg-active)\",\n proFg: \"var(--color-pro-fg)\",\n proHover: \"var(--color-pro-hover)\",\n proActive: \"var(--color-pro-active)\",\n proDisabled: \"var(--color-pro-disabled)\",\n proLine: \"var(--color-pro-line)\",\n proRing: \"var(--color-pro-ring)\",\n auditFg: \"var(--color-audit-fg)\",\n auditHover: \"var(--color-audit-hover)\",\n auditActive: \"var(--color-audit-active)\",\n auditDisabled: \"var(--color-audit-disabled)\",\n auditBg: \"var(--color-audit-bg)\",\n auditBgHover: \"var(--color-audit-bg-hover)\",\n auditBgActive: \"var(--color-audit-bg-active)\",\n auditLine: \"var(--color-audit-line)\",\n auditRing: \"var(--color-audit-ring)\",\n booksFg: \"var(--color-books-fg)\",\n booksHover: \"var(--color-books-hover)\",\n booksActive: \"var(--color-books-active)\",\n booksDisabled: \"var(--color-books-disabled)\",\n booksBg: \"var(--color-books-bg)\",\n booksBgHover: \"var(--color-books-bg-hover)\",\n booksBgActive: \"var(--color-books-bg-active)\",\n booksLine: \"var(--color-books-line)\",\n booksRing: \"var(--color-books-ring)\",\n taxFg: \"var(--color-tax-fg)\",\n taxHover: \"var(--color-tax-hover)\",\n taxActive: \"var(--color-tax-active)\",\n taxDisabled: \"var(--color-tax-disabled)\",\n taxBg: \"var(--color-tax-bg)\",\n taxBgHover: \"var(--color-tax-bg-hover)\",\n taxBgActive: \"var(--color-tax-bg-active)\",\n taxLine: \"var(--color-tax-line)\",\n taxRing: \"var(--color-tax-ring)\",\n\n /* On-brand — text/icon color on a filled brand/product surface */\n fgOnAccent: \"var(--color-fg-on-accent)\",\n fgOnPro: \"var(--color-fg-on-pro)\",\n fgOnAudit: \"var(--color-fg-on-audit)\",\n fgOnBooks: \"var(--color-fg-on-books)\",\n fgOnTax: \"var(--color-fg-on-tax)\",\n\n /* Disabled */\n fgDisabled: \"var(--color-fg-disabled)\",\n bgDisabled: \"var(--color-bg-disabled)\",\n\n /* Overlays */\n overlayHover: \"var(--color-overlay-hover)\",\n overlayActive: \"var(--color-overlay-active)\",\n\n /* Status */\n successFg: \"var(--color-success-fg)\",\n successBg: \"var(--color-success-bg)\",\n successLine: \"var(--color-success-line)\",\n warningFg: \"var(--color-warning-fg)\",\n warningBg: \"var(--color-warning-bg)\",\n warningLine: \"var(--color-warning-line)\",\n dangerFg: \"var(--color-danger-fg)\",\n dangerBg: \"var(--color-danger-bg)\",\n dangerLine: \"var(--color-danger-line)\",\n\n /* Data-viz — chart series ramp + area gradient stops */\n chart1: \"var(--color-chart-1)\",\n chart2: \"var(--color-chart-2)\",\n chart3: \"var(--color-chart-3)\",\n chart4: \"var(--color-chart-4)\",\n chartLine: \"var(--color-chart-line)\",\n chartAreaFrom: \"var(--color-chart-area-from)\",\n chartAreaTo: \"var(--color-chart-area-to)\",\n\n /* Practice service tones — fill + track tint */\n serviceTax: \"var(--color-service-tax)\",\n serviceTaxBg: \"var(--color-service-tax-bg)\",\n serviceAudit: \"var(--color-service-audit)\",\n serviceAuditBg: \"var(--color-service-audit-bg)\",\n serviceAccounting: \"var(--color-service-accounting)\",\n serviceAccountingBg: \"var(--color-service-accounting-bg)\",\n },\n\n /** Ordered chart series ramp — index a series by position, cycle with `% 4`. */\n chart: [\n \"var(--color-chart-1)\",\n \"var(--color-chart-2)\",\n \"var(--color-chart-3)\",\n \"var(--color-chart-4)\",\n ],\n\n gradient: {\n brand: \"var(--gradient-brand)\",\n pro: \"var(--gradient-pro)\",\n audit: \"var(--gradient-audit)\",\n books: \"var(--gradient-books)\",\n tax: \"var(--gradient-tax)\",\n },\n\n shadow: {\n quiet: \"var(--shadow-quiet)\",\n card: \"var(--shadow-card)\",\n pop: \"var(--shadow-pop)\",\n focusRing: \"var(--shadow-focus-ring)\",\n xs: \"var(--shadow-xs)\",\n sm: \"var(--shadow-sm)\",\n md: \"var(--shadow-md)\",\n lg: \"var(--shadow-lg)\",\n xl: \"var(--shadow-xl)\",\n \"2xl\": \"var(--shadow-2xl)\",\n },\n\n radius: {\n btn: \"var(--radius-btn)\",\n input: \"var(--radius-input)\",\n pill: \"var(--radius-pill)\",\n card: \"var(--radius-card)\",\n icon: \"var(--radius-icon)\",\n full: \"var(--radius-full)\",\n },\n\n type: {\n family: {\n display: \"var(--font-display)\",\n body: \"var(--font-body)\",\n mono: \"var(--font-mono)\",\n },\n weight: {\n regular: \"var(--font-weight-regular)\",\n medium: \"var(--font-weight-medium)\",\n semibold: \"var(--font-weight-semibold)\",\n bold: \"var(--font-weight-bold)\",\n },\n },\n\n motion: {\n ease: {\n outQuart: \"var(--ease-out-quart)\",\n out: \"var(--ease-out)\",\n in: \"var(--ease-in)\",\n inOut: \"var(--ease-in-out)\",\n },\n duration: {\n instant: \"var(--duration-instant)\",\n fast: \"var(--duration-fast)\",\n normal: \"var(--duration-normal)\",\n slow: \"var(--duration-slow)\",\n },\n semantic: {\n duration: {\n press: \"var(--motion-duration-press)\",\n feedback: \"var(--motion-duration-feedback)\",\n overlay: \"var(--motion-duration-overlay)\",\n spatial: \"var(--motion-duration-spatial)\",\n deliberate: \"var(--motion-duration-deliberate)\",\n },\n ease: {\n enter: \"var(--motion-ease-enter)\",\n exit: \"var(--motion-ease-exit)\",\n move: \"var(--motion-ease-move)\",\n },\n },\n },\n\n /**\n * Control sizing (amendment A1, W2-03). One outer height per size name, with\n * the padding, gap, label size and glyph size derived from it.\n *\n * **Nothing reads these yet** and the numbers are gated on decision D5\n * (implementation plan §3) — what each control renders *today* is in\n * `docs/design-system/control-sizes.md`, and W2-05 is the task that unifies\n * them. Referencing the scale here is also what keeps the custom properties\n * in the published stylesheet, so `[data-ds-density=\"compact\"]` has something\n * to re-point.\n */\n control: {\n height: {\n xs: \"var(--control-height-xs)\",\n sm: \"var(--control-height-sm)\",\n md: \"var(--control-height-md)\",\n lg: \"var(--control-height-lg)\",\n xl: \"var(--control-height-xl)\",\n },\n paddingX: {\n xs: \"var(--control-padding-x-xs)\",\n sm: \"var(--control-padding-x-sm)\",\n md: \"var(--control-padding-x-md)\",\n lg: \"var(--control-padding-x-lg)\",\n xl: \"var(--control-padding-x-xl)\",\n },\n gap: {\n xs: \"var(--control-gap-xs)\",\n sm: \"var(--control-gap-sm)\",\n md: \"var(--control-gap-md)\",\n lg: \"var(--control-gap-lg)\",\n xl: \"var(--control-gap-xl)\",\n },\n fontSize: {\n xs: \"var(--control-font-size-xs)\",\n sm: \"var(--control-font-size-sm)\",\n md: \"var(--control-font-size-md)\",\n lg: \"var(--control-font-size-lg)\",\n xl: \"var(--control-font-size-xl)\",\n },\n icon: {\n xs: \"var(--control-icon-xs)\",\n sm: \"var(--control-icon-sm)\",\n md: \"var(--control-icon-md)\",\n lg: \"var(--control-icon-lg)\",\n xl: \"var(--control-icon-xl)\",\n },\n },\n\n layout: {\n shellSidebarWidth: \"var(--shell-sidebar-w)\",\n shellSidebarRailWidth: \"var(--shell-sidebar-w-rail)\",\n shellHeaderHeight: \"var(--shell-header-h)\",\n contentPad: \"var(--content-pad)\",\n },\n\n z: {\n base: \"var(--z-base)\",\n dropdown: \"var(--z-dropdown)\",\n sticky: \"var(--z-sticky)\",\n overlay: \"var(--z-overlay)\",\n modal: \"var(--z-modal)\",\n toast: \"var(--z-toast)\",\n tooltip: \"var(--z-tooltip)\",\n },\n} as const;\n\nexport type SystemTokens = typeof systemTokens;\n","/**\n * sRGB colour arithmetic for the runtime brand contract (W1-20).\n *\n * Everything here is integer or IEEE-754 arithmetic over committed constants.\n * In particular the sRGB transfer function is a **committed lookup table**\n * rather than a call to `Math.pow`: `Math.pow` is implementation-approximated,\n * so two engines may return doubles that differ in the last bit, and a\n * comparison sitting exactly on a contrast threshold could then resolve one way\n * in Node and the other way in a browser. Addition, multiplication, division\n * and `Math.round` are exactly specified, so with the table as the only source\n * of transferred values every result below is bit-identical on every conforming\n * engine (amendment A3 — SSR determinism).\n *\n * `__tests__/srgb.test.ts` checks the table against the formula, so the\n * constants stay auditable.\n */\n\n/** A colour as three integer sRGB channels, 0–255. */\nexport type Rgb = readonly [number, number, number];\n\n/**\n * The sRGB transfer function applied to each of the 256 channel bytes, scaled\n * by 1e6 and rounded to the nearest integer. Index = channel byte.\n *\n * Six decimal places is far finer than the two the WCAG contrast thresholds are\n * quoted to — the worst-case effect on a ratio is about 2e-5 — and keeps the\n * table small enough to ship on a data entry point.\n */\nconst SRGB_TO_LINEAR_1E6: readonly number[] = [\n 0, 304, 607, 911, 1214, 1518, 1821, 2125, 2428, 2732, 3035, 3347, 3677, 4025, 4391, 4777, 5182,\n 5605, 6049, 6512, 6995, 7499, 8023, 8568, 9134, 9721, 10330, 10960, 11612, 12286, 12983, 13702,\n 14444, 15209, 15996, 16807, 17642, 18500, 19382, 20289, 21219, 22174, 23153, 24158, 25187, 26241,\n 27321, 28426, 29557, 30713, 31896, 33105, 34340, 35601, 36889, 38204, 39546, 40915, 42311, 43735,\n 45186, 46665, 48172, 49707, 51269, 52861, 54480, 56128, 57805, 59511, 61246, 63010, 64803, 66626,\n 68478, 70360, 72272, 74214, 76185, 78187, 80220, 82283, 84376, 86500, 88656, 90842, 93059, 95307,\n 97587, 99899, 102242, 104616, 107023, 109462, 111932, 114435, 116971, 119538, 122139, 124772,\n 127438, 130136, 132868, 135633, 138432, 141263, 144128, 147027, 149960, 152926, 155926, 158961,\n 162029, 165132, 168269, 171441, 174647, 177888, 181164, 184475, 187821, 191202, 194618, 198069,\n 201556, 205079, 208637, 212231, 215861, 219526, 223228, 226966, 230740, 234551, 238398, 242281,\n 246201, 250158, 254152, 258183, 262251, 266356, 270498, 274677, 278894, 283149, 287441, 291771,\n 296138, 300544, 304987, 309469, 313989, 318547, 323143, 327778, 332452, 337164, 341914, 346704,\n 351533, 356400, 361307, 366253, 371238, 376262, 381326, 386429, 391572, 396755, 401978, 407240,\n 412543, 417885, 423268, 428690, 434154, 439657, 445201, 450786, 456411, 462077, 467784, 473531,\n 479320, 485150, 491021, 496933, 502886, 508881, 514918, 520996, 527115, 533276, 539479, 545724,\n 552011, 558340, 564712, 571125, 577580, 584078, 590619, 597202, 603827, 610496, 617207, 623960,\n 630757, 637597, 644480, 651406, 658375, 665387, 672443, 679542, 686685, 693872, 701102, 708376,\n 715694, 723055, 730461, 737910, 745404, 752942, 760525, 768151, 775822, 783538, 791298, 799103,\n 806952, 814847, 822786, 830770, 838799, 846873, 854993, 863157, 871367, 879622, 887923, 896269,\n 904661, 913099, 921582, 930111, 938686, 947307, 955973, 964686, 973445, 982251, 991102, 1000000,\n];\n\nconst HEX_3 = /^#[0-9a-fA-F]{3}$/;\nconst HEX_6 = /^#[0-9a-fA-F]{6}$/;\nconst HEX_DIGITS = \"0123456789abcdef\";\n\n/** `#rgb` and `#rrggbb`, in either case. Returns `null` for anything else. */\nexport function parseHexColor(value: string): Rgb | null {\n if (HEX_6.test(value)) {\n const n = Number.parseInt(value.slice(1), 16);\n return [(n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff];\n }\n if (HEX_3.test(value)) {\n const n = Number.parseInt(value.slice(1), 16);\n const r = (n >> 8) & 0xf;\n const g = (n >> 4) & 0xf;\n const b = n & 0xf;\n return [r * 17, g * 17, b * 17];\n }\n return null;\n}\n\n/** Lower-case `#rrggbb`. Built by table lookup so no locale or `toString`\n * radix behaviour can enter the output. */\nexport function formatHexColor([r, g, b]: Rgb): string {\n const byte = (v: number) => HEX_DIGITS[(v >> 4) & 0xf] + HEX_DIGITS[v & 0xf];\n return `#${byte(r)}${byte(g)}${byte(b)}`;\n}\n\n/** WCAG relative luminance, from the committed transfer table. */\nexport function relativeLuminance([r, g, b]: Rgb): number {\n const lr = SRGB_TO_LINEAR_1E6[r] / 1e6;\n const lg = SRGB_TO_LINEAR_1E6[g] / 1e6;\n const lb = SRGB_TO_LINEAR_1E6[b] / 1e6;\n return 0.2126 * lr + 0.7152 * lg + 0.0722 * lb;\n}\n\n/** WCAG 2.2 contrast ratio between two opaque colours (1–21). */\nexport function contrastRatio(a: Rgb, b: Rgb): number {\n const la = relativeLuminance(a);\n const lb = relativeLuminance(b);\n const lighter = la > lb ? la : lb;\n const darker = la > lb ? lb : la;\n return (lighter + 0.05) / (darker + 0.05);\n}\n\n/**\n * `color-mix(in srgb, <a> <percent>%, <b>)` evaluated on integer channels.\n * `percent` is an integer 0–100; sRGB mixing is a straight interpolation in the\n * gamma-encoded space, which is what the browser does for `in srgb`.\n */\nexport function mixSrgb(a: Rgb, b: Rgb, percent: number): Rgb {\n const mix = (x: number, y: number) => Math.round((x * percent + y * (100 - percent)) / 100);\n return [mix(a[0], b[0]), mix(a[1], b[1]), mix(a[2], b[2])];\n}\n\nexport const WHITE: Rgb = [255, 255, 255];\nexport const BLACK: Rgb = [0, 0, 0];\n\n/**\n * Pure black or pure white, whichever has more contrast against `fill`.\n *\n * The two endpoints cross over at a luminance of about 0.1791, where both reach\n * 4.58:1, so the winner is **always** at or above 4.58:1 — WCAG 2.2 AA for\n * normal text (4.5:1) with margin, for every possible fill. Any near-black ink\n * short of `#000000` loses that property, which is why this returns the\n * extremes rather than a token value.\n */\nexport function readableInk(fill: Rgb): Rgb {\n return contrastRatio(BLACK, fill) >= contrastRatio(WHITE, fill) ? BLACK : WHITE;\n}\n\n/**\n * The least-darkened mix of `colour` towards black that reaches `minRatio`\n * against `against`, searched over the 101 integer mix percentages from 100\n * (untouched) downwards. 0% is black, so the search terminates whenever\n * `against` is light enough for black to pass — true for every background this\n * module uses.\n */\nexport function darkenUntilContrast(colour: Rgb, against: Rgb, minRatio: number): Rgb {\n for (let percent = 100; percent >= 0; percent -= 1) {\n const candidate = mixSrgb(colour, BLACK, percent);\n if (contrastRatio(candidate, against) >= minRatio) return candidate;\n }\n return BLACK;\n}\n","/**\n * `createBrandTheme()` — the runtime brand contract (W1-20, experimental).\n *\n * A white-label host has one or two colours per tenant and needs the design\n * system's brand family to follow them. Today that is done by writing the\n * design system's *legacy* variable names from application code (Assure\n * Portal's `src/lib/brand-theme.ts` writes about thirty of them onto `<body>`),\n * which couples the application to names the design system owns and gives no\n * guarantee that the result is legible.\n *\n * This function is the supported replacement: a validated seed in, a plain\n * object of `--ds-*` custom properties out, to spread into a `style` attribute\n * on whatever element scopes the brand (target architecture §12.1 rule 6 (iv)).\n *\n * Contract:\n *\n * - **Pure.** No `document`, no `window`, no clock, no randomness, no module\n * state. The same seed always yields the same object.\n * - **SSR-deterministic** (amendment A3). Every number comes from integer\n * arithmetic over a committed transfer table (`./srgb`), so server-rendered\n * markup and the first client render agree byte for byte. Asserted in Node\n * (`__tests__/brand-theme.test.ts`) and in a real browser\n * (`tests/browser/brand-theme-ssr-determinism.test.ts`) against the same\n * committed vectors.\n * - **Legible.** The fills are clamped to at least 3:1 against the light canvas\n * (WCAG 2.2 SC 1.4.11, non-text contrast), and every foreground the function\n * emits reaches at least 4.5:1 against the fill it sits on (SC 1.4.3 AA).\n * - **Shaped like a built-in brand.** The ramp uses the same percentages as the\n * generated `[data-ds-brand]` scopes in `css/tokens.css`, and the steps that\n * depend on the colour scheme stay as `color-mix(… var(--ds-color-content))`\n * exactly as those scopes do, so a runtime brand keeps working in dark mode.\n *\n * @experimental The seed shape is gated by decision D7 (white-label scope:\n * brand, plus optional accent). It may change while D7 is open.\n */\nimport {\n BLACK,\n WHITE,\n contrastRatio,\n darkenUntilContrast,\n formatHexColor,\n mixSrgb,\n parseHexColor,\n readableInk,\n type Rgb,\n} from \"./srgb\";\n\n/**\n * The seed a host supplies per tenant.\n *\n * @experimental Gated by decision D7.\n */\nexport interface BrandThemeSeed {\n /**\n * The brand fill, as `#rgb` or `#rrggbb`. Drives the `action.brand` family,\n * the focus ring and the brand gradient.\n */\n brand: string;\n /**\n * An optional second hue for the `action.accent` family, as `#rgb` or\n * `#rrggbb`. `undefined` or `null` means \"the same as `brand`\", which is what\n * the built-in `[data-ds-brand]` scopes do.\n */\n accent?: string | null;\n}\n\n/** Every custom property `createBrandTheme()` sets, in output order. */\nexport const BRAND_THEME_PROPERTIES = [\n \"--ds-color-action-brand-bg\",\n \"--ds-color-action-brand-bg-hover\",\n \"--ds-color-action-brand-bg-active\",\n \"--ds-color-action-brand-bg-disabled\",\n \"--ds-color-action-brand-subtle-bg\",\n \"--ds-color-action-brand-subtle-bg-hover\",\n \"--ds-color-action-brand-subtle-bg-active\",\n \"--ds-color-action-brand-border\",\n \"--ds-color-action-brand-ring\",\n \"--ds-color-action-brand-fg\",\n \"--ds-color-action-accent-bg\",\n \"--ds-color-action-accent-bg-strong\",\n \"--ds-color-action-accent-bg-hover\",\n \"--ds-color-action-accent-bg-active\",\n \"--ds-color-action-accent-subtle-bg\",\n \"--ds-color-action-accent-ring\",\n \"--ds-color-action-accent-fg\",\n \"--ds-color-border-focus\",\n \"--ds-focus-ring-color\",\n \"--ds-focus-ring-border\",\n \"--ds-gradient-brand\",\n \"--ds-compat-color-brand-soft\",\n \"--ds-compat-color-brand-soft-foreground\",\n] as const;\n\n/** One of the custom properties `createBrandTheme()` sets. */\nexport type BrandThemeProperty = (typeof BRAND_THEME_PROPERTIES)[number];\n\n/**\n * The style object `createBrandTheme()` returns: every property of\n * {@link BRAND_THEME_PROPERTIES} with a CSS value.\n *\n * React types `style` as `CSSProperties`, which has no index signature for\n * custom properties, so spread it or cast it at the call site:\n * `style={{ ...createBrandTheme(seed) }}`.\n *\n * @experimental Gated by decision D7.\n */\nexport type BrandTheme = { readonly [P in BrandThemeProperty]: string };\n\n/** Minimum contrast a fill must reach against the light canvas (SC 1.4.11). */\nconst MIN_FILL_CONTRAST = 3;\n/** Minimum contrast a foreground must reach against its fill (SC 1.4.3 AA). */\nconst MIN_TEXT_CONTRAST = 4.5;\n\n/** The light canvas (`--ds-color-canvas`), the surface a fill sits on. */\nconst CANVAS: Rgb = WHITE;\n\n/**\n * Ramp percentages, copied from the generated brand scopes in\n * `tokens/build/generate-ds-css.mjs`, so a runtime brand and a built-in one are\n * the same shape.\n */\nconst RAMP = {\n hover: 88,\n active: 74,\n disabled: 42,\n subtle: 8,\n subtleHover: 13,\n subtleActive: 20,\n border: 45,\n ring: 20,\n /** The soft tint and its ink, which the app-vocabulary bridge reads. */\n soft: 12,\n softInk: 68,\n} as const;\n\n/** `color-mix(in srgb, <colour> <percent>%, var(--ds-color-content))` — the\n * scheme-aware steps, left unresolved exactly as the built-in scopes leave\n * them, so a runtime brand still darkens in light mode and lightens in dark. */\nconst towardsInk = (colour: string, percent: number) =>\n `color-mix(in srgb, ${colour} ${percent}%, var(--ds-color-content))`;\n\n/** `color-mix(in srgb, <colour> <percent>%, transparent)`. */\nconst towardsTransparent = (colour: string, percent: number) =>\n `color-mix(in srgb, ${colour} ${percent}%, transparent)`;\n\nconst ACCEPTED = '#rgb or #rrggbb, for example \"#6c42f8\"';\nconst SEED_KEYS = new Set([\"brand\", \"accent\"]);\n\nfunction describe(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"an array\";\n return typeof value;\n}\n\nfunction readColour(key: \"brand\" | \"accent\", value: unknown): Rgb {\n if (typeof value !== \"string\") {\n throw new TypeError(\n `createBrandTheme: \"${key}\" must be a hex colour string (${ACCEPTED}), received ${describe(value)}.`,\n );\n }\n const rgb = parseHexColor(value);\n if (!rgb) {\n throw new TypeError(\n `createBrandTheme: \"${key}\" must be a hex colour (${ACCEPTED}), received ${describe(value)}. ` +\n \"Named colours, rgb()/hsl() and eight-digit hex with alpha are not accepted — a brand seed must be opaque and unambiguous.\",\n );\n }\n return rgb;\n}\n\nfunction validateSeed(seed: BrandThemeSeed): void {\n if (seed === null || typeof seed !== \"object\" || Array.isArray(seed)) {\n throw new TypeError(\n `createBrandTheme: expected a seed object with a \"brand\" colour, received ${describe(seed)}.`,\n );\n }\n const unknown = Object.keys(seed).filter((key) => !SEED_KEYS.has(key));\n if (unknown.length) {\n throw new TypeError(\n `createBrandTheme: unknown seed ${unknown.length === 1 ? \"key\" : \"keys\"} ${unknown\n .map((key) => JSON.stringify(key))\n .join(\", \")}. The seed accepts \"brand\" and an optional \"accent\" (decision D7).`,\n );\n }\n}\n\n/**\n * Clamp a seed so it reads as a UI fill: at least 3:1 against the light canvas\n * (WCAG 2.2 SC 1.4.11). A seed that already passes is returned untouched, so\n * the common case is exact — `createBrandTheme({ brand: \"#6c42f8\" })` emits\n * `#6c42f8`. A pale seed is darkened by the smallest whole-percent mix towards\n * black that passes, which keeps the hue and gives up only lightness.\n */\nfunction clampFill(seed: Rgb): Rgb {\n if (contrastRatio(seed, CANVAS) >= MIN_FILL_CONTRAST) return seed;\n return darkenUntilContrast(seed, CANVAS, MIN_FILL_CONTRAST);\n}\n\n/**\n * Turn a tenant's colours into the design system's brand and accent tokens.\n *\n * ```tsx\n * const theme = createBrandTheme({ brand: firm.primaryColor, accent: firm.accentColor });\n * return <div style={{ ...theme }}>{children}</div>;\n * ```\n *\n * Apply it to the element that scopes the brand — `<body>` for a whole-tenant\n * theme, a wrapper for a preview. The properties are the same ones a built-in\n * `[data-ds-brand]` scope declares, so anything reading them (every design\n * system component, and any application CSS reading `--ds-*`) follows.\n *\n * @param seed - `brand`, and optionally `accent` (decision D7).\n * @returns A frozen object of custom property names to CSS values.\n * @throws TypeError when the seed is not an object, carries an unknown key, or\n * a colour is missing or not `#rgb`/`#rrggbb`.\n *\n * @experimental Gated by decision D7. The property set may grow, and the seed\n * shape may change, until D7 is resolved.\n */\nexport function createBrandTheme(seed: BrandThemeSeed): BrandTheme {\n validateSeed(seed);\n const brandSeed = readColour(\"brand\", seed.brand);\n const accentSeed =\n seed.accent === undefined || seed.accent === null\n ? brandSeed\n : readColour(\"accent\", seed.accent);\n\n const brand = clampFill(brandSeed);\n const accent = clampFill(accentSeed);\n const brandHex = formatHexColor(brand);\n const accentHex = formatHexColor(accent);\n\n const soft = mixSrgb(brand, WHITE, RAMP.soft);\n const softInk = darkenUntilContrast(mixSrgb(brand, BLACK, RAMP.softInk), soft, MIN_TEXT_CONTRAST);\n\n return Object.freeze({\n \"--ds-color-action-brand-bg\": brandHex,\n \"--ds-color-action-brand-bg-hover\": towardsInk(brandHex, RAMP.hover),\n \"--ds-color-action-brand-bg-active\": towardsInk(brandHex, RAMP.active),\n \"--ds-color-action-brand-bg-disabled\": formatHexColor(mixSrgb(brand, WHITE, RAMP.disabled)),\n \"--ds-color-action-brand-subtle-bg\": formatHexColor(mixSrgb(brand, WHITE, RAMP.subtle)),\n \"--ds-color-action-brand-subtle-bg-hover\": formatHexColor(\n mixSrgb(brand, WHITE, RAMP.subtleHover),\n ),\n \"--ds-color-action-brand-subtle-bg-active\": formatHexColor(\n mixSrgb(brand, WHITE, RAMP.subtleActive),\n ),\n \"--ds-color-action-brand-border\": formatHexColor(mixSrgb(brand, WHITE, RAMP.border)),\n \"--ds-color-action-brand-ring\": towardsTransparent(brandHex, RAMP.ring),\n \"--ds-color-action-brand-fg\": formatHexColor(readableInk(brand)),\n \"--ds-color-action-accent-bg\": accentHex,\n \"--ds-color-action-accent-bg-strong\": towardsInk(accentHex, RAMP.active),\n \"--ds-color-action-accent-bg-hover\": towardsInk(accentHex, RAMP.hover),\n \"--ds-color-action-accent-bg-active\": towardsInk(accentHex, RAMP.active),\n \"--ds-color-action-accent-subtle-bg\": formatHexColor(mixSrgb(accent, WHITE, RAMP.subtle)),\n \"--ds-color-action-accent-ring\": towardsTransparent(accentHex, RAMP.ring),\n \"--ds-color-action-accent-fg\": formatHexColor(readableInk(accent)),\n \"--ds-color-border-focus\": accentHex,\n \"--ds-focus-ring-color\": towardsTransparent(brandHex, RAMP.ring),\n \"--ds-focus-ring-border\": brandHex,\n \"--ds-gradient-brand\": `linear-gradient(135deg, ${brandHex}, ${towardsInk(brandHex, RAMP.hover)})`,\n \"--ds-compat-color-brand-soft\": formatHexColor(soft),\n \"--ds-compat-color-brand-soft-foreground\": formatHexColor(softInk),\n });\n}\n"]}
|