@rookcom/monarch-tokens 0.0.0-stage → 0.2.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.
Files changed (60) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +7 -2
  3. package/dist/appearance.d.ts +36 -0
  4. package/dist/appearance.d.ts.map +1 -0
  5. package/dist/appearance.js +42 -0
  6. package/dist/appearance.js.map +1 -0
  7. package/dist/color.d.ts +42 -0
  8. package/dist/color.d.ts.map +1 -0
  9. package/dist/color.js +121 -0
  10. package/dist/color.js.map +1 -0
  11. package/dist/contrast-report.json +1333 -0
  12. package/dist/css/base.css +31 -0
  13. package/dist/css/compat.css +149 -0
  14. package/dist/css/monarch.css +429 -0
  15. package/dist/css/products/app.css +85 -0
  16. package/dist/css/products/atlas.css +85 -0
  17. package/dist/css/products/base.css +85 -0
  18. package/dist/css/products/calendar.css +85 -0
  19. package/dist/css/products/chat.css +85 -0
  20. package/dist/css/products/developers.css +85 -0
  21. package/dist/css/products/dossier.css +85 -0
  22. package/dist/css/products/dots.css +85 -0
  23. package/dist/css/products/friends.css +85 -0
  24. package/dist/css/products/gtm.css +85 -0
  25. package/dist/css/products/id.css +85 -0
  26. package/dist/css/products/intellect.css +85 -0
  27. package/dist/css/products/links.css +85 -0
  28. package/dist/css/products/people.css +85 -0
  29. package/dist/css/products/pulse.css +85 -0
  30. package/dist/css/products/ranker.css +85 -0
  31. package/dist/css/products/recruit.css +85 -0
  32. package/dist/css/products/signal.css +85 -0
  33. package/dist/css/products/stride.css +85 -0
  34. package/dist/css/products/tickets.css +85 -0
  35. package/dist/css.d.ts +36 -0
  36. package/dist/css.d.ts.map +1 -0
  37. package/dist/css.js +242 -0
  38. package/dist/css.js.map +1 -0
  39. package/dist/generated/products.d.ts +111 -0
  40. package/dist/generated/products.d.ts.map +1 -0
  41. package/dist/generated/products.js +26 -0
  42. package/dist/generated/products.js.map +1 -0
  43. package/dist/index.d.ts +8 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +8 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/primitives.d.ts +190 -0
  48. package/dist/primitives.d.ts.map +1 -0
  49. package/dist/primitives.js +210 -0
  50. package/dist/primitives.js.map +1 -0
  51. package/dist/tailwind.d.ts +275 -0
  52. package/dist/tailwind.d.ts.map +1 -0
  53. package/dist/tailwind.js +179 -0
  54. package/dist/tailwind.js.map +1 -0
  55. package/dist/themes.d.ts +74 -0
  56. package/dist/themes.d.ts.map +1 -0
  57. package/dist/themes.js +292 -0
  58. package/dist/themes.js.map +1 -0
  59. package/dist/tokens.json +2455 -0
  60. package/package.json +60 -4
package/dist/themes.js ADDED
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Semantic tokens and themes.
3
+ *
4
+ * A theme maps meaning ("the page background", "muted text") to concrete
5
+ * colours. Intent colours (accent and the four statuses) are derived from one
6
+ * base colour per theme by `deriveIntent`, which guarantees WCAG contrast. That
7
+ * is what lets 16+ products each bring their own brand accent safely.
8
+ */
9
+ import { bestForeground, contrast, ensureContrast, hsl, toChannels } from './color.js';
10
+ import { neutral, statusBase } from './primitives.js';
11
+ export const THEME_IDS = ['light', 'dark', 'hc-light', 'hc-dark'];
12
+ const lightShadow = (a) => `hsl(222 30% 10% / ${a})`;
13
+ const darkShadow = (a) => `hsl(0 0% 0% / ${a})`;
14
+ export const themes = {
15
+ light: {
16
+ id: 'light',
17
+ scheme: 'light',
18
+ contrast: 'standard',
19
+ targets: { text: 4.5, ui: 3 },
20
+ neutrals: {
21
+ 'bg-canvas': neutral[25],
22
+ 'bg-surface': neutral[0],
23
+ 'bg-raised': neutral[0],
24
+ 'bg-subtle': neutral[50],
25
+ 'bg-muted': neutral[100],
26
+ 'bg-emphasis': neutral[150],
27
+ 'bg-inverse': neutral[900],
28
+ 'text-default': neutral[850],
29
+ 'text-muted': neutral[600],
30
+ 'text-subtle': neutral[500],
31
+ 'text-disabled': neutral[400],
32
+ 'text-inverse': neutral[0],
33
+ 'border-subtle': neutral[150],
34
+ 'border-default': neutral[200],
35
+ 'border-strong': neutral[300],
36
+ 'border-input': hsl(220, 9, 56),
37
+ },
38
+ shadow: {
39
+ xs: `0 1px 2px ${lightShadow(0.06)}`,
40
+ sm: `0 1px 3px ${lightShadow(0.08)}, 0 1px 2px ${lightShadow(0.04)}`,
41
+ md: `0 4px 12px -2px ${lightShadow(0.08)}, 0 2px 4px -2px ${lightShadow(0.05)}`,
42
+ lg: `0 12px 32px -8px ${lightShadow(0.14)}, 0 4px 8px -4px ${lightShadow(0.06)}`,
43
+ xl: `0 24px 64px -16px ${lightShadow(0.22)}, 0 8px 16px -8px ${lightShadow(0.08)}`,
44
+ },
45
+ scrim: 'hsl(222 25% 8% / 0.42)',
46
+ },
47
+ dark: {
48
+ id: 'dark',
49
+ scheme: 'dark',
50
+ contrast: 'standard',
51
+ targets: { text: 4.5, ui: 3 },
52
+ neutrals: {
53
+ 'bg-canvas': neutral[950],
54
+ 'bg-surface': neutral[900],
55
+ 'bg-raised': neutral[850],
56
+ 'bg-subtle': neutral[900],
57
+ 'bg-muted': neutral[800],
58
+ 'bg-emphasis': neutral[700],
59
+ 'bg-inverse': neutral[50],
60
+ 'text-default': neutral[50],
61
+ 'text-muted': neutral[300],
62
+ 'text-subtle': neutral[400],
63
+ 'text-disabled': neutral[600],
64
+ 'text-inverse': neutral[900],
65
+ 'border-subtle': neutral[850],
66
+ 'border-default': neutral[800],
67
+ 'border-strong': neutral[700],
68
+ 'border-input': hsl(220, 9, 45),
69
+ },
70
+ shadow: {
71
+ xs: `0 1px 2px ${darkShadow(0.4)}`,
72
+ sm: `0 1px 3px ${darkShadow(0.45)}, 0 1px 2px ${darkShadow(0.3)}`,
73
+ md: `0 4px 12px -2px ${darkShadow(0.5)}, 0 2px 4px -2px ${darkShadow(0.35)}`,
74
+ lg: `0 12px 32px -8px ${darkShadow(0.6)}, 0 4px 8px -4px ${darkShadow(0.4)}`,
75
+ xl: `0 24px 64px -16px ${darkShadow(0.7)}, 0 8px 16px -8px ${darkShadow(0.45)}`,
76
+ },
77
+ scrim: 'hsl(0 0% 0% / 0.62)',
78
+ },
79
+ 'hc-light': {
80
+ id: 'hc-light',
81
+ scheme: 'light',
82
+ contrast: 'more',
83
+ targets: { text: 7, ui: 4.5 },
84
+ neutrals: {
85
+ 'bg-canvas': neutral[0],
86
+ 'bg-surface': neutral[0],
87
+ 'bg-raised': neutral[0],
88
+ 'bg-subtle': neutral[50],
89
+ 'bg-muted': neutral[100],
90
+ 'bg-emphasis': neutral[150],
91
+ 'bg-inverse': neutral[1000],
92
+ 'text-default': neutral[1000],
93
+ 'text-muted': neutral[800],
94
+ 'text-subtle': neutral[700],
95
+ 'text-disabled': neutral[500],
96
+ 'text-inverse': neutral[0],
97
+ 'border-subtle': neutral[500],
98
+ 'border-default': neutral[600],
99
+ 'border-strong': neutral[800],
100
+ 'border-input': neutral[700],
101
+ },
102
+ shadow: {
103
+ xs: 'none',
104
+ sm: 'none',
105
+ md: '0 0 0 1px hsl(0 0% 0%)',
106
+ lg: '0 0 0 2px hsl(0 0% 0%)',
107
+ xl: '0 0 0 2px hsl(0 0% 0%)',
108
+ },
109
+ scrim: 'hsl(0 0% 0% / 0.7)',
110
+ },
111
+ 'hc-dark': {
112
+ id: 'hc-dark',
113
+ scheme: 'dark',
114
+ contrast: 'more',
115
+ targets: { text: 7, ui: 4.5 },
116
+ neutrals: {
117
+ 'bg-canvas': neutral[1000],
118
+ 'bg-surface': neutral[1000],
119
+ 'bg-raised': neutral[950],
120
+ 'bg-subtle': neutral[950],
121
+ 'bg-muted': neutral[900],
122
+ 'bg-emphasis': neutral[800],
123
+ 'bg-inverse': neutral[0],
124
+ 'text-default': neutral[0],
125
+ 'text-muted': neutral[150],
126
+ 'text-subtle': neutral[200],
127
+ 'text-disabled': neutral[400],
128
+ 'text-inverse': neutral[1000],
129
+ 'border-subtle': neutral[500],
130
+ 'border-default': neutral[400],
131
+ 'border-strong': neutral[200],
132
+ 'border-input': neutral[300],
133
+ },
134
+ shadow: {
135
+ xs: 'none',
136
+ sm: 'none',
137
+ md: '0 0 0 1px hsl(0 0% 100%)',
138
+ lg: '0 0 0 2px hsl(0 0% 100%)',
139
+ xl: '0 0 0 2px hsl(0 0% 100%)',
140
+ },
141
+ scrim: 'hsl(0 0% 0% / 0.8)',
142
+ },
143
+ };
144
+ export const INTENT_IDS = ['accent', 'danger', 'success', 'warning', 'info'];
145
+ const WHITE = neutral[0];
146
+ const INK = neutral[950];
147
+ /** How far a brand fill may be darkened to keep white text before we switch to dark text. */
148
+ const SOLID_DARKEN_BUDGET = 10;
149
+ /** A filled control must at least be distinguishable from the page behind it. */
150
+ const SOLID_CANVAS_FLOOR = 1.5;
151
+ /**
152
+ * Derives the nine colours an intent needs in one theme, each meeting the
153
+ * theme's contrast targets.
154
+ */
155
+ export function deriveIntent(base, theme) {
156
+ const n = theme.neutrals;
157
+ const dark = theme.scheme === 'dark';
158
+ const hc = theme.contrast === 'more';
159
+ const target = theme.targets.text;
160
+ const adjustments = [];
161
+ const achromatic = base.s < 8;
162
+ // Solid fill (primary buttons, selected states). Preference order keeps
163
+ // the brand colour whenever it can carry readable text:
164
+ // 1. brand fill + white text
165
+ // 2. brand fill + dark text (Rook Yellow, orange, light accents)
166
+ // 3. fill darkened within budget + white text
167
+ // 4. fill moved away from the canvas with whichever text works
168
+ // The fill must also stay visible against the canvas: WCAG 1.4.11 does not
169
+ // require 3:1 for a filled button with readable text, so the standard floor
170
+ // is a distinguishability threshold; high contrast raises it to the UI target.
171
+ const away = dark ? 'lighten' : 'darken';
172
+ const ui = theme.targets.ui;
173
+ const canvasFloor = hc ? ui : SOLID_CANVAS_FLOOR;
174
+ let solid = base;
175
+ if (dark && achromatic) {
176
+ solid = hsl(base.h, base.s, 94);
177
+ adjustments.push('achromatic brand inverted to a light fill for dark theme');
178
+ }
179
+ if (contrast(solid, n['bg-canvas']) < canvasFloor) {
180
+ solid = ensureContrast(solid, [n['bg-canvas']], canvasFloor, away);
181
+ adjustments.push(`solid moved to ${toChannels(solid)} to stay visible (${canvasFloor}:1) against the canvas`);
182
+ }
183
+ let onSolid;
184
+ let darkened;
185
+ if (contrast(WHITE, solid) < target) {
186
+ try {
187
+ const candidate = ensureContrast(solid, [WHITE], target, 'darken');
188
+ if (solid.l - candidate.l <= SOLID_DARKEN_BUDGET)
189
+ darkened = candidate;
190
+ }
191
+ catch {
192
+ darkened = undefined;
193
+ }
194
+ }
195
+ if (contrast(WHITE, solid) >= target) {
196
+ onSolid = WHITE;
197
+ }
198
+ else if (darkened && contrast(darkened, n['bg-canvas']) >= canvasFloor) {
199
+ adjustments.push(`solid darkened ${toChannels(solid)} → ${toChannels(darkened)} so white text meets ${target}:1`);
200
+ solid = darkened;
201
+ onSolid = WHITE;
202
+ }
203
+ else if (contrast(INK, solid) >= target) {
204
+ onSolid = INK;
205
+ adjustments.push('dark text used on solid (white would fail contrast)');
206
+ }
207
+ else {
208
+ {
209
+ const fg = dark ? INK : WHITE;
210
+ solid = ensureContrast(solid, [fg, n['bg-canvas']], target, away);
211
+ onSolid = fg;
212
+ adjustments.push(`solid moved to ${toChannels(solid)} so ${fg === WHITE ? 'white' : 'dark'} text meets ${target}:1`);
213
+ }
214
+ }
215
+ // Hover/active shift lightness while keeping both guarantees. Prefer the
216
+ // direction that increases text contrast; fall back to the other, then to
217
+ // smaller steps.
218
+ const shade = (steps) => {
219
+ const ok = (c) => contrast(onSolid, c) >= target && contrast(c, n['bg-canvas']) >= canvasFloor;
220
+ const prefer = onSolid === WHITE ? -1 : 1;
221
+ for (const magnitude of [steps, steps / 2]) {
222
+ for (const dir of [prefer, -prefer]) {
223
+ const c = hsl(solid.h, solid.s, solid.l + dir * magnitude);
224
+ if (ok(c))
225
+ return c;
226
+ }
227
+ }
228
+ return solid;
229
+ };
230
+ const solidHover = shade(5);
231
+ const solidActive = shade(9);
232
+ const subtle = dark
233
+ ? hsl(base.h, base.s * 0.4, hc ? 10 : 14)
234
+ : hsl(base.h, Math.min(base.s, 90) * 0.9, hc ? 97 : 96.5);
235
+ const subtleHover = dark
236
+ ? hsl(base.h, base.s * 0.4, hc ? 14 : 18)
237
+ : hsl(base.h, Math.min(base.s, 90) * 0.9, hc ? 94 : 93.5);
238
+ // Strong: the accessible version of the brand for text, icons, focus rings
239
+ // and state indicators (checkbox fill, switch track).
240
+ const strongAgainst = [n['bg-canvas'], n['bg-surface'], n['bg-subtle'], subtle, subtleHover];
241
+ const strongSeed = dark && achromatic ? hsl(base.h, base.s, 80) : base;
242
+ const strong = ensureContrast(strongSeed, strongAgainst, target, dark ? 'lighten' : 'darken');
243
+ if (Math.abs(strong.l - strongSeed.l) >= 0.5) {
244
+ adjustments.push(`strong set to ${toChannels(strong)} for ${target}:1 text contrast`);
245
+ }
246
+ const onStrong = bestForeground(strong, [WHITE, INK]).color;
247
+ const border = hc
248
+ ? strong
249
+ : dark
250
+ ? hsl(base.h, base.s * 0.45, 32)
251
+ : hsl(base.h, base.s * 0.6, 84);
252
+ const scale = {
253
+ solid,
254
+ 'solid-hover': solidHover,
255
+ 'solid-active': solidActive,
256
+ 'on-solid': onSolid,
257
+ subtle,
258
+ 'subtle-hover': subtleHover,
259
+ strong,
260
+ 'on-strong': onStrong,
261
+ border,
262
+ };
263
+ return {
264
+ scale,
265
+ report: {
266
+ base: toChannels(base),
267
+ adjustments,
268
+ ratios: {
269
+ onSolid: round2(contrast(onSolid, solid)),
270
+ strongOnCanvas: round2(contrast(strong, n['bg-canvas'])),
271
+ strongOnSurface: round2(contrast(strong, n['bg-surface'])),
272
+ strongOnSubtle: round2(contrast(strong, subtle)),
273
+ },
274
+ },
275
+ };
276
+ }
277
+ function round2(n) {
278
+ return Math.round(n * 100) / 100;
279
+ }
280
+ /** Resolves every semantic colour for one theme and accent. */
281
+ export function resolveTheme(theme, accent) {
282
+ const bases = { accent, ...statusBase };
283
+ const intents = {};
284
+ const reports = {};
285
+ for (const id of INTENT_IDS) {
286
+ const { scale, report } = deriveIntent(bases[id], theme);
287
+ intents[id] = scale;
288
+ reports[id] = report;
289
+ }
290
+ return { theme, intents, reports };
291
+ }
292
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}