@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
@@ -0,0 +1,275 @@
1
+ type PluginApi = {
2
+ addVariant: (name: string, selector: string | string[]) => void;
3
+ };
4
+ export declare const monarchPreset: {
5
+ darkMode: (string | string[])[];
6
+ theme: {
7
+ screens: {
8
+ sm: "640px";
9
+ md: "768px";
10
+ lg: "1024px";
11
+ xl: "1280px";
12
+ '2xl': "1536px";
13
+ };
14
+ container: {
15
+ center: boolean;
16
+ padding: string;
17
+ screens: {
18
+ '2xl': string;
19
+ };
20
+ };
21
+ extend: {
22
+ colors: {
23
+ mn: {
24
+ canvas: string;
25
+ surface: string;
26
+ raised: string;
27
+ subtle: string;
28
+ muted: string;
29
+ emphasis: string;
30
+ inverse: string;
31
+ fg: {
32
+ DEFAULT: string;
33
+ muted: string;
34
+ subtle: string;
35
+ disabled: string;
36
+ inverse: string;
37
+ link: string;
38
+ };
39
+ line: {
40
+ DEFAULT: string;
41
+ subtle: string;
42
+ strong: string;
43
+ input: string;
44
+ };
45
+ focus: string;
46
+ accent: {
47
+ DEFAULT: string;
48
+ solid: string;
49
+ 'solid-hover': string;
50
+ 'solid-active': string;
51
+ 'on-solid': string;
52
+ subtle: string;
53
+ 'subtle-hover': string;
54
+ strong: string;
55
+ 'on-strong': string;
56
+ border: string;
57
+ };
58
+ danger: {
59
+ DEFAULT: string;
60
+ solid: string;
61
+ 'solid-hover': string;
62
+ 'solid-active': string;
63
+ 'on-solid': string;
64
+ subtle: string;
65
+ 'subtle-hover': string;
66
+ strong: string;
67
+ 'on-strong': string;
68
+ border: string;
69
+ };
70
+ success: {
71
+ DEFAULT: string;
72
+ solid: string;
73
+ 'solid-hover': string;
74
+ 'solid-active': string;
75
+ 'on-solid': string;
76
+ subtle: string;
77
+ 'subtle-hover': string;
78
+ strong: string;
79
+ 'on-strong': string;
80
+ border: string;
81
+ };
82
+ warning: {
83
+ DEFAULT: string;
84
+ solid: string;
85
+ 'solid-hover': string;
86
+ 'solid-active': string;
87
+ 'on-solid': string;
88
+ subtle: string;
89
+ 'subtle-hover': string;
90
+ strong: string;
91
+ 'on-strong': string;
92
+ border: string;
93
+ };
94
+ info: {
95
+ DEFAULT: string;
96
+ solid: string;
97
+ 'solid-hover': string;
98
+ 'solid-active': string;
99
+ 'on-solid': string;
100
+ subtle: string;
101
+ 'subtle-hover': string;
102
+ strong: string;
103
+ 'on-strong': string;
104
+ border: string;
105
+ };
106
+ data: {
107
+ [k: string]: string;
108
+ };
109
+ };
110
+ border: string;
111
+ input: string;
112
+ ring: string;
113
+ background: string;
114
+ foreground: string;
115
+ primary: {
116
+ DEFAULT: string;
117
+ foreground: string;
118
+ };
119
+ secondary: {
120
+ DEFAULT: string;
121
+ foreground: string;
122
+ };
123
+ success: {
124
+ DEFAULT: string;
125
+ foreground: string;
126
+ };
127
+ warning: {
128
+ DEFAULT: string;
129
+ foreground: string;
130
+ };
131
+ destructive: {
132
+ DEFAULT: string;
133
+ foreground: string;
134
+ };
135
+ muted: {
136
+ DEFAULT: string;
137
+ foreground: string;
138
+ };
139
+ accent: {
140
+ DEFAULT: string;
141
+ foreground: string;
142
+ };
143
+ popover: {
144
+ DEFAULT: string;
145
+ foreground: string;
146
+ };
147
+ card: {
148
+ DEFAULT: string;
149
+ foreground: string;
150
+ };
151
+ sidebar: {
152
+ DEFAULT: string;
153
+ foreground: string;
154
+ primary: string;
155
+ 'primary-foreground': string;
156
+ accent: string;
157
+ 'accent-foreground': string;
158
+ border: string;
159
+ ring: string;
160
+ };
161
+ };
162
+ fontFamily: {
163
+ sans: string[];
164
+ mono: string[];
165
+ };
166
+ fontSize: {
167
+ '2xs': (string | {
168
+ lineHeight: string;
169
+ })[];
170
+ };
171
+ borderRadius: {
172
+ xs: string;
173
+ sm: string;
174
+ md: string;
175
+ lg: string;
176
+ xl: string;
177
+ '2xl': string;
178
+ };
179
+ boxShadow: {
180
+ [k: string]: string;
181
+ };
182
+ height: {
183
+ [k: string]: string;
184
+ };
185
+ spacing: {
186
+ rail: string;
187
+ 'rail-expanded': string;
188
+ };
189
+ maxWidth: {
190
+ content: string;
191
+ reading: string;
192
+ };
193
+ transitionDuration: {
194
+ fast: string;
195
+ base: string;
196
+ slow: string;
197
+ };
198
+ transitionTimingFunction: {
199
+ standard: string;
200
+ enter: string;
201
+ exit: string;
202
+ emphasized: string;
203
+ };
204
+ zIndex: {
205
+ sticky: string;
206
+ rail: string;
207
+ dropdown: string;
208
+ overlay: string;
209
+ modal: string;
210
+ popover: string;
211
+ toast: string;
212
+ tooltip: string;
213
+ };
214
+ backgroundImage: {
215
+ 'mn-spectrum': string;
216
+ };
217
+ keyframes: {
218
+ fadeIn: {
219
+ '0%': {
220
+ opacity: string;
221
+ };
222
+ '100%': {
223
+ opacity: string;
224
+ };
225
+ };
226
+ slideUp: {
227
+ '0%': {
228
+ opacity: string;
229
+ transform: string;
230
+ };
231
+ '100%': {
232
+ opacity: string;
233
+ transform: string;
234
+ };
235
+ };
236
+ scaleIn: {
237
+ '0%': {
238
+ opacity: string;
239
+ transform: string;
240
+ };
241
+ '100%': {
242
+ opacity: string;
243
+ transform: string;
244
+ };
245
+ };
246
+ 'accordion-down': {
247
+ from: {
248
+ height: string;
249
+ };
250
+ to: {
251
+ height: string;
252
+ };
253
+ };
254
+ 'accordion-up': {
255
+ from: {
256
+ height: string;
257
+ };
258
+ to: {
259
+ height: string;
260
+ };
261
+ };
262
+ };
263
+ animation: {
264
+ 'fade-in': string;
265
+ 'slide-up': string;
266
+ 'scale-in': string;
267
+ 'accordion-down': string;
268
+ 'accordion-up': string;
269
+ };
270
+ };
271
+ };
272
+ plugins: (({ addVariant }: PluginApi) => void)[];
273
+ };
274
+ export default monarchPreset;
275
+ //# sourceMappingURL=tailwind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.d.ts","sourceRoot":"","sources":["../src/tailwind.ts"],"names":[],"mappings":"AAwCA,KAAK,SAAS,GAAG;IAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAA;CAAE,CAAC;AAErF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA4IL,SAAS;CAK7B,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Tailwind CSS v3 preset.
3
+ *
4
+ * // tailwind.config.ts
5
+ * import monarch from '@rookcom/monarch-tokens/tailwind';
6
+ * export default { presets: [monarch], content: ['./src/**\/*.{ts,tsx}'] };
7
+ *
8
+ * Two colour namespaces:
9
+ * - `mn-*` (Monarch-native): `bg-mn-surface`, `text-mn-fg-muted`, `border-mn-line`.
10
+ * - legacy shadcn names (`bg-primary`, `text-muted-foreground`) backed by the
11
+ * generated legacy bridge, so existing apps keep working during migration.
12
+ *
13
+ * Written without importing Tailwind, so this package has no Tailwind dependency.
14
+ */
15
+ import { breakpoint } from './primitives.js';
16
+ const mn = (name) => `color-mix(in srgb, var(--mn-color-${name}) calc(<alpha-value> * 100%), transparent)`;
17
+ const legacy = (name) => `hsl(var(--${name}) / <alpha-value>)`;
18
+ function intent(id) {
19
+ return {
20
+ DEFAULT: mn(`${id}-solid`),
21
+ solid: mn(`${id}-solid`),
22
+ 'solid-hover': mn(`${id}-solid-hover`),
23
+ 'solid-active': mn(`${id}-solid-active`),
24
+ 'on-solid': mn(`${id}-on-solid`),
25
+ subtle: mn(`${id}-subtle`),
26
+ 'subtle-hover': mn(`${id}-subtle-hover`),
27
+ strong: mn(`${id}-strong`),
28
+ 'on-strong': mn(`${id}-on-strong`),
29
+ border: mn(`${id}-border`),
30
+ };
31
+ }
32
+ const legacyPair = (name) => ({
33
+ DEFAULT: legacy(name),
34
+ foreground: legacy(`${name}-foreground`),
35
+ });
36
+ export const monarchPreset = {
37
+ darkMode: ['variant', ['&:is(.dark *)', '&:is([data-mn-theme="dark"] *)']],
38
+ theme: {
39
+ screens: { ...breakpoint },
40
+ container: { center: true, padding: '2rem', screens: { '2xl': '1400px' } },
41
+ extend: {
42
+ colors: {
43
+ mn: {
44
+ canvas: mn('bg-canvas'),
45
+ surface: mn('bg-surface'),
46
+ raised: mn('bg-raised'),
47
+ subtle: mn('bg-subtle'),
48
+ muted: mn('bg-muted'),
49
+ emphasis: mn('bg-emphasis'),
50
+ inverse: mn('bg-inverse'),
51
+ fg: {
52
+ DEFAULT: mn('text-default'),
53
+ muted: mn('text-muted'),
54
+ subtle: mn('text-subtle'),
55
+ disabled: mn('text-disabled'),
56
+ inverse: mn('text-inverse'),
57
+ link: mn('text-link'),
58
+ },
59
+ line: {
60
+ DEFAULT: mn('border-default'),
61
+ subtle: mn('border-subtle'),
62
+ strong: mn('border-strong'),
63
+ input: mn('border-input'),
64
+ },
65
+ focus: mn('focus-ring'),
66
+ accent: intent('accent'),
67
+ danger: intent('danger'),
68
+ success: intent('success'),
69
+ warning: intent('warning'),
70
+ info: intent('info'),
71
+ data: Object.fromEntries([1, 2, 3, 4, 5].map((i) => [i, mn(`data-${i}`)])),
72
+ },
73
+ border: legacy('border'),
74
+ input: legacy('input'),
75
+ ring: legacy('ring'),
76
+ background: legacy('background'),
77
+ foreground: legacy('foreground'),
78
+ primary: legacyPair('primary'),
79
+ secondary: legacyPair('secondary'),
80
+ success: legacyPair('success'),
81
+ warning: legacyPair('warning'),
82
+ destructive: legacyPair('destructive'),
83
+ muted: legacyPair('muted'),
84
+ accent: legacyPair('accent'),
85
+ popover: legacyPair('popover'),
86
+ card: legacyPair('card'),
87
+ sidebar: {
88
+ DEFAULT: legacy('sidebar-background'),
89
+ foreground: legacy('sidebar-foreground'),
90
+ primary: legacy('sidebar-primary'),
91
+ 'primary-foreground': legacy('sidebar-primary-foreground'),
92
+ accent: legacy('sidebar-accent'),
93
+ 'accent-foreground': legacy('sidebar-accent-foreground'),
94
+ border: legacy('sidebar-border'),
95
+ ring: legacy('sidebar-ring'),
96
+ },
97
+ },
98
+ fontFamily: {
99
+ sans: ['var(--mn-font-sans)'],
100
+ mono: ['var(--mn-font-mono)'],
101
+ },
102
+ fontSize: { '2xs': ['var(--mn-text-2xs)', { lineHeight: '1rem' }] },
103
+ borderRadius: {
104
+ xs: 'var(--mn-radius-xs)',
105
+ sm: 'var(--mn-radius-sm)',
106
+ md: 'var(--mn-radius-md)',
107
+ lg: 'var(--mn-radius-lg)',
108
+ xl: 'var(--mn-radius-xl)',
109
+ '2xl': 'var(--mn-radius-2xl)',
110
+ },
111
+ boxShadow: Object.fromEntries(['xs', 'sm', 'md', 'lg', 'xl'].map((k) => [`mn-${k}`, `var(--mn-shadow-${k})`])),
112
+ height: Object.fromEntries(['xs', 'sm', 'md', 'lg', 'xl'].map((k) => [`control-${k}`, `var(--mn-control-${k})`])),
113
+ spacing: {
114
+ rail: 'var(--mn-layout-rail-collapsed)',
115
+ 'rail-expanded': 'var(--mn-layout-rail-expanded)',
116
+ },
117
+ maxWidth: {
118
+ content: 'var(--mn-layout-content-max)',
119
+ reading: 'var(--mn-layout-reading-max)',
120
+ },
121
+ transitionDuration: {
122
+ fast: 'var(--mn-duration-fast)',
123
+ base: 'var(--mn-duration-base)',
124
+ slow: 'var(--mn-duration-slow)',
125
+ },
126
+ transitionTimingFunction: {
127
+ standard: 'var(--mn-ease-standard)',
128
+ enter: 'var(--mn-ease-enter)',
129
+ exit: 'var(--mn-ease-exit)',
130
+ emphasized: 'var(--mn-ease-emphasized)',
131
+ },
132
+ zIndex: {
133
+ sticky: 'var(--mn-z-sticky)',
134
+ rail: 'var(--mn-z-rail)',
135
+ dropdown: 'var(--mn-z-dropdown)',
136
+ overlay: 'var(--mn-z-overlay)',
137
+ modal: 'var(--mn-z-modal)',
138
+ popover: 'var(--mn-z-popover)',
139
+ toast: 'var(--mn-z-toast)',
140
+ tooltip: 'var(--mn-z-tooltip)',
141
+ },
142
+ backgroundImage: { 'mn-spectrum': 'var(--mn-gradient-spectrum)' },
143
+ keyframes: {
144
+ fadeIn: { '0%': { opacity: '0' }, '100%': { opacity: '1' } },
145
+ slideUp: {
146
+ '0%': { opacity: '0', transform: 'translateY(8px)' },
147
+ '100%': { opacity: '1', transform: 'translateY(0)' },
148
+ },
149
+ scaleIn: {
150
+ '0%': { opacity: '0', transform: 'scale(0.97)' },
151
+ '100%': { opacity: '1', transform: 'scale(1)' },
152
+ },
153
+ 'accordion-down': {
154
+ from: { height: '0' },
155
+ to: { height: 'var(--radix-accordion-content-height)' },
156
+ },
157
+ 'accordion-up': {
158
+ from: { height: 'var(--radix-accordion-content-height)' },
159
+ to: { height: '0' },
160
+ },
161
+ },
162
+ animation: {
163
+ 'fade-in': 'fadeIn var(--mn-duration-slow) var(--mn-ease-enter)',
164
+ 'slide-up': 'slideUp var(--mn-duration-slow) var(--mn-ease-enter)',
165
+ 'scale-in': 'scaleIn var(--mn-duration-base) var(--mn-ease-enter)',
166
+ 'accordion-down': 'accordion-down var(--mn-duration-base) var(--mn-ease-standard)',
167
+ 'accordion-up': 'accordion-up var(--mn-duration-base) var(--mn-ease-standard)',
168
+ },
169
+ },
170
+ },
171
+ plugins: [
172
+ ({ addVariant }) => {
173
+ // Matches the existing RookRail contract (<html data-rook-rail="expanded">).
174
+ addVariant('rail-expanded', 'html[data-rook-rail="expanded"] &');
175
+ },
176
+ ],
177
+ };
178
+ export default monarchPreset;
179
+ //# sourceMappingURL=tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../src/tailwind.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
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 { type Hsl } from './color.js';
10
+ export type ThemeId = 'light' | 'dark' | 'hc-light' | 'hc-dark';
11
+ export declare const THEME_IDS: readonly ThemeId[];
12
+ export interface NeutralRoles {
13
+ readonly 'bg-canvas': Hsl;
14
+ readonly 'bg-surface': Hsl;
15
+ readonly 'bg-raised': Hsl;
16
+ readonly 'bg-subtle': Hsl;
17
+ readonly 'bg-muted': Hsl;
18
+ readonly 'bg-emphasis': Hsl;
19
+ readonly 'bg-inverse': Hsl;
20
+ readonly 'text-default': Hsl;
21
+ readonly 'text-muted': Hsl;
22
+ readonly 'text-subtle': Hsl;
23
+ readonly 'text-disabled': Hsl;
24
+ readonly 'text-inverse': Hsl;
25
+ readonly 'border-subtle': Hsl;
26
+ readonly 'border-default': Hsl;
27
+ readonly 'border-strong': Hsl;
28
+ readonly 'border-input': Hsl;
29
+ }
30
+ export interface ThemeDefinition {
31
+ readonly id: ThemeId;
32
+ readonly scheme: 'light' | 'dark';
33
+ readonly contrast: 'standard' | 'more';
34
+ /** Minimum ratios this theme guarantees. */
35
+ readonly targets: {
36
+ readonly text: number;
37
+ readonly ui: number;
38
+ };
39
+ readonly neutrals: NeutralRoles;
40
+ readonly shadow: Readonly<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', string>>;
41
+ readonly scrim: string;
42
+ }
43
+ export declare const themes: Readonly<Record<ThemeId, ThemeDefinition>>;
44
+ export type IntentId = 'accent' | 'danger' | 'success' | 'warning' | 'info';
45
+ export declare const INTENT_IDS: readonly IntentId[];
46
+ export type IntentRole = 'solid' | 'solid-hover' | 'solid-active' | 'on-solid' | 'subtle' | 'subtle-hover' | 'strong' | 'on-strong' | 'border';
47
+ export type IntentScale = Readonly<Record<IntentRole, Hsl>>;
48
+ export interface IntentReport {
49
+ readonly base: string;
50
+ /** Human-readable notes about every adjustment made to meet contrast. */
51
+ readonly adjustments: readonly string[];
52
+ readonly ratios: Readonly<{
53
+ onSolid: number;
54
+ strongOnCanvas: number;
55
+ strongOnSurface: number;
56
+ strongOnSubtle: number;
57
+ }>;
58
+ }
59
+ /**
60
+ * Derives the nine colours an intent needs in one theme, each meeting the
61
+ * theme's contrast targets.
62
+ */
63
+ export declare function deriveIntent(base: Hsl, theme: ThemeDefinition): {
64
+ scale: IntentScale;
65
+ report: IntentReport;
66
+ };
67
+ export interface ResolvedTheme {
68
+ readonly theme: ThemeDefinition;
69
+ readonly intents: Readonly<Record<IntentId, IntentScale>>;
70
+ readonly reports: Readonly<Record<IntentId, IntentReport>>;
71
+ }
72
+ /** Resolves every semantic colour for one theme and accent. */
73
+ export declare function resolveTheme(theme: ThemeDefinition, accent: Hsl): ResolvedTheme;
74
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}