@ecopages/radiant-themes 0.2.1 → 0.2.2

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 (39) hide show
  1. package/README.md +27 -15
  2. package/dist/compiled/themes/cloudflare/compact.css +40 -12
  3. package/dist/compiled/themes/cloudflare.css +40 -12
  4. package/dist/compiled/themes/github/compact.css +264 -67
  5. package/dist/compiled/themes/github.css +264 -67
  6. package/dist/compiled/themes/high-contrast/compact.css +88 -5
  7. package/dist/compiled/themes/high-contrast.css +88 -5
  8. package/dist/compiled/themes/macos/compact.css +674 -294
  9. package/dist/compiled/themes/macos-classic/compact.css +197 -25
  10. package/dist/compiled/themes/macos-classic.css +197 -25
  11. package/dist/compiled/themes/macos.css +674 -294
  12. package/dist/compiled/themes/material/compact.css +447 -132
  13. package/dist/compiled/themes/material.css +447 -132
  14. package/dist/compiled/themes/vercel/compact.css +104 -62
  15. package/dist/compiled/themes/vercel.css +104 -62
  16. package/dist/compiled/themes/vscode/compact.css +255 -40
  17. package/dist/compiled/themes/vscode.css +255 -40
  18. package/dist/compiled/themes/windows95/compact.css +260 -22
  19. package/dist/compiled/themes/windows95.css +260 -22
  20. package/dist/tokens/colors/github.css +32 -0
  21. package/dist/tokens/colors/macos.css +65 -25
  22. package/dist/tokens/colors/material.css +61 -20
  23. package/dist/tokens/colors/vercel.css +43 -39
  24. package/dist/tokens/colors/vscode.css +48 -4
  25. package/dist/tokens/colors/windows95.css +10 -5
  26. package/dist/tokens/components/cloudflare.css +55 -5
  27. package/dist/tokens/components/github.css +258 -40
  28. package/dist/tokens/components/high-contrast.css +93 -5
  29. package/dist/tokens/components/macos-classic.css +262 -24
  30. package/dist/tokens/components/macos.css +537 -106
  31. package/dist/tokens/components/material.css +354 -25
  32. package/dist/tokens/components/vercel.css +77 -15
  33. package/dist/tokens/components/vscode.css +248 -27
  34. package/dist/tokens/components/windows95.css +304 -19
  35. package/dist/tokens/roles/github.css +12 -12
  36. package/dist/tokens/roles/macos.css +97 -93
  37. package/dist/tokens/roles/material.css +65 -65
  38. package/dist/tokens/roles/vercel.css +3 -3
  39. package/package.json +3 -3
@@ -1,53 +1,156 @@
1
1
  @reference 'tailwindcss';
2
2
 
3
+ /**
4
+ * @remarks Primer uses its accent blue for selection, checked, current, and focus states, so `--primary` is blue.
5
+ * Green belongs only to the primary button and progress, which these rules set directly.
6
+ */
3
7
  :root,
4
8
  :root[data-rui-theme='github'] {
5
- --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
6
- --font-heading: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
7
- --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
9
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
10
+ --font-heading: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
11
+ --font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
8
12
  --rui-border-alpha: 100%;
9
- --border-radius-xs: 0.25rem;
13
+ --border-radius-xs: 0.1875rem;
10
14
  --border-radius-sm: 0.375rem;
11
- --border-radius-md: 0.5rem;
15
+ --border-radius-md: 0.375rem;
12
16
  --border-radius-lg: 0.75rem;
13
- --border-radius-xl: 1rem;
14
- --border-radius-2xl: 1.25rem;
17
+ --border-radius-xl: 0.75rem;
18
+ --border-radius-2xl: 1rem;
15
19
  --border-radius-3xl: 1.5rem;
16
20
  --radius-control: var(--border-radius-sm);
17
21
  --radius-container: var(--border-radius-md);
22
+ --size-control-sm: 1.75rem;
23
+ --size-control-md: 2rem;
24
+ --size-control-lg: 2.5rem;
18
25
  }
19
26
 
20
27
  @layer components {
28
+ :root rui-tabs {
29
+ --rui-tabs-indicator-color: #fd8c73;
30
+ }
31
+
32
+ :root.dark rui-tabs {
33
+ --rui-tabs-indicator-color: #f78166;
34
+ }
35
+
36
+ :root .rui-meter {
37
+ --rui-meter-fill-color: var(--color-github-green);
38
+ }
39
+
40
+ :root .rui-switch {
41
+ --rui-switch-width: 3rem;
42
+ --rui-switch-height: 1.5rem;
43
+ --rui-switch-thumb-size: 1.5rem;
44
+ --rui-switch-track: var(--color-github-track);
45
+ --rui-switch-track-hover: var(--color-github-button-active);
46
+ --rui-switch-track-on-hover: var(--primary-dark);
47
+ --rui-switch-thumb: var(--color-github-canvas);
48
+ --rui-switch-thumb-on: var(--color-github-canvas);
49
+ }
50
+
51
+ /**
52
+ * @remarks Primer's toggle switch is a 6px rounded track with a full-height bordered knob, not a pill.
53
+ */
54
+ :root .rui-switch__track {
55
+ @apply rounded-control p-0;
56
+ }
57
+
58
+ :root .rui-switch__thumb,
59
+ :root .rui-switch__input:checked + .rui-switch__track .rui-switch__thumb {
60
+ @apply rounded-control;
61
+ border: 1px solid var(--color-github-knob-border);
62
+ }
63
+
64
+ :root .rui-switch__thumb {
65
+ left: 0;
66
+ }
67
+
68
+ :root .rui-switch__input:checked + .rui-switch__track .rui-switch__thumb {
69
+ right: 0;
70
+ left: auto;
71
+ border-color: var(--primary);
72
+ }
73
+
21
74
  /**
22
- * @remarks Primer fills dark destructive buttons with a saturated red and white text; `--error` stays the lighter
23
- * red used for error text on dark surfaces.
75
+ * Buttons follow Primer's variants: a grey default button, a green primary button, and a danger button that keeps the
76
+ * default face with red text until hovered.
24
77
  */
25
- :root.dark .rui-button--destructive {
26
- background-color: #da3633;
78
+ :root .rui-button {
79
+ @apply rounded-control border border-transparent font-medium shadow-none;
80
+ }
81
+
82
+ :root .rui-button--outline {
83
+ border-color: var(--color-github-border);
84
+ background-color: var(--color-github-button-bg);
85
+ color: var(--color-github-fg);
86
+ box-shadow: 0 1px 0 0 rgb(31 35 40 / 0.04);
87
+ }
88
+
89
+ :root .rui-button--outline:hover:not(:disabled) {
90
+ background-color: var(--color-github-button-hover);
91
+ }
92
+
93
+ :root .rui-button--outline:active:not(:disabled) {
94
+ background-color: var(--color-github-button-active);
95
+ }
96
+
97
+ :root .rui-button--filled,
98
+ :root .rui-button--primary {
99
+ border-color: rgb(31 35 40 / 0.15);
100
+ background-color: var(--color-github-button-primary);
101
+ background-image: none;
27
102
  color: #ffffff;
103
+ box-shadow: 0 1px 0 0 rgb(31 35 40 / 0.1);
28
104
  }
29
105
 
30
- :root.dark .rui-button--destructive:hover:not(:disabled) {
31
- background-color: #b62324;
106
+ :root .rui-button--filled:hover:not(:disabled),
107
+ :root .rui-button--primary:hover:not(:disabled) {
108
+ background-color: var(--color-github-button-primary-hover);
32
109
  }
33
110
 
34
- :root.dark .rui-button--destructive:active:not(:disabled) {
111
+ :root .rui-button--filled:active:not(:disabled),
112
+ :root .rui-button--primary:active:not(:disabled) {
113
+ background-color: var(--color-github-button-primary-active);
114
+ }
115
+
116
+ :root .rui-button--destructive {
117
+ border-color: var(--color-github-border);
118
+ background-color: var(--color-github-button-bg);
119
+ background-image: none;
120
+ color: var(--color-github-danger-fg);
121
+ }
122
+
123
+ :root .rui-button--destructive:hover:not(:disabled) {
124
+ border-color: rgb(31 35 40 / 0.15);
35
125
  background-color: #a40e26;
126
+ color: #ffffff;
36
127
  }
37
128
 
38
- :root rui-tabs {
39
- --rui-tabs-indicator-color: #fd8c73;
129
+ :root .rui-button--destructive:active:not(:disabled) {
130
+ background-color: #8b0820;
131
+ color: #ffffff;
40
132
  }
41
133
 
42
- :root.dark rui-tabs {
43
- --rui-tabs-indicator-color: #f78166;
134
+ :root .rui-button--ghost {
135
+ color: var(--color-github-fg);
44
136
  }
45
137
 
46
- :root .rui-button {
47
- @apply rounded-control border border-transparent font-medium shadow-none;
138
+ :root .rui-button--ghost:hover:not(:disabled) {
139
+ background-color: var(--color-github-transparent-hover);
140
+ }
141
+
142
+ :root .rui-button--ghost:active:not(:disabled) {
143
+ background-color: var(--color-github-transparent-selected);
144
+ }
145
+
146
+ :root .rui-pagination__link[aria-current='page'],
147
+ :root .rui-pagination__link[aria-current='page']:hover:not(:disabled) {
148
+ border-color: transparent;
149
+ background-color: var(--primary);
150
+ color: var(--on-primary);
151
+ box-shadow: none;
48
152
  }
49
153
 
50
- :root .rui-button--outline,
51
154
  :root .rui-input,
52
155
  :root .rui-textarea,
53
156
  :root .rui-combobox__control,
@@ -57,25 +160,123 @@
57
160
  :root .rui-number-field__group,
58
161
  :root rui-date-input:where(:not([data-date-field-input], [data-range-start], [data-range-end])),
59
162
  :root .rui-select__control {
60
- @apply border-border bg-surface text-on-surface shadow-none;
163
+ @apply bg-surface text-on-surface shadow-none;
61
164
  border-color: var(--rui-control-border-color);
62
165
  }
63
166
 
64
- :root .rui-button--outline:hover:not(:disabled),
65
- :root .rui-button--ghost:hover:not(:disabled) {
66
- @apply bg-surface-container-low;
167
+ /**
168
+ * @remarks Primer's select is a default button with a caret, so it shares the button face instead of the field fill.
169
+ */
170
+ :root .rui-select__control {
171
+ background-color: var(--color-github-button-bg);
172
+ }
173
+
174
+ :root .rui-select__control:hover:not(:disabled) {
175
+ background-color: var(--color-github-button-hover);
67
176
  }
68
177
 
69
178
  :root .rui-checkbox__control {
70
- @apply rounded-xs border-border bg-surface;
179
+ @apply rounded-xs bg-surface;
180
+ border-color: var(--rui-control-border-color);
181
+ }
182
+
183
+ :root .rui-radio__control {
71
184
  border-color: var(--rui-control-border-color);
72
185
  }
73
186
 
187
+ /**
188
+ * @remarks A checked Primer radio is a thick accent ring around a white center rather than a centered dot.
189
+ */
190
+ :root .rui-radio__input:checked + .rui-radio__control {
191
+ border-width: 0.3125rem;
192
+ background-color: var(--on-primary);
193
+ }
194
+
195
+ :root .rui-radio__input:checked + .rui-radio__control::after {
196
+ display: none;
197
+ }
198
+
74
199
  :root .rui-dialog__surface,
75
- :root .rui-popover-host,
76
- :root .rui-select__listbox,
200
+ :root .rui-hover-card__content,
77
201
  :root .rui-calendar {
78
- @apply rounded-container border border-border bg-surface shadow-lg;
202
+ @apply rounded-xl border border-border shadow-lg;
203
+ background-color: var(--color-github-overlay);
204
+ }
205
+
206
+ :root .rui-popover {
207
+ --rui-popover-radius: var(--border-radius-lg);
208
+ --rui-popover-surface: var(--color-github-overlay);
209
+ --rui-popover-border-color: var(--color-github-border);
210
+ --rui-popover-shadow: 0 6px 12px -3px rgb(37 41 46 / 0.04), 0 6px 18px 0 rgb(37 41 46 / 0.12);
211
+ }
212
+
213
+ :root .rui-tooltip__content {
214
+ --rui-tooltip-surface: #25292e;
215
+ --rui-tooltip-color: #ffffff;
216
+ --rui-tooltip-radius: var(--border-radius-sm);
217
+ --rui-tooltip-padding-x: 0.5rem;
218
+ --rui-tooltip-padding-y: 0.25rem;
219
+ }
220
+
221
+ :root.dark .rui-tooltip__content {
222
+ --rui-tooltip-surface: #3d444d;
223
+ }
224
+
225
+ :root .rui-select__listbox .rui-listbox,
226
+ :root .rui-combobox__listbox .rui-listbox {
227
+ @apply bg-transparent p-0;
228
+ }
229
+
230
+ /**
231
+ * Action menus: a 12px floating overlay whose items are rounded rows with a neutral hover and selected fill.
232
+ */
233
+ :root .rui-menu-button__menu,
234
+ :root .rui-menubar__menu,
235
+ :root .rui-select__listbox,
236
+ :root .rui-combobox__listbox {
237
+ @apply rounded-xl border-0 p-2;
238
+ background-color: var(--color-github-overlay);
239
+ box-shadow:
240
+ 0 0 0 1px var(--color-github-border),
241
+ 0 6px 12px -3px rgb(37 41 46 / 0.04),
242
+ 0 6px 18px 0 rgb(37 41 46 / 0.12);
243
+ }
244
+
245
+ :root .rui-listbox__option,
246
+ :root .rui-menu-button__item,
247
+ :root .rui-menubar__menu-item {
248
+ @apply rounded-control;
249
+ }
250
+
251
+ :root .rui-listbox__option:hover:not([aria-disabled='true']),
252
+ :root .rui-listbox__option[data-active]:not([aria-disabled='true']),
253
+ :root .rui-menu-button__item:hover:not([aria-disabled='true']),
254
+ :root .rui-menubar__menu-item:hover:not([aria-disabled='true']) {
255
+ background-color: var(--color-github-transparent-hover);
256
+ }
257
+
258
+ /**
259
+ * @remarks Primer marks a selected single-select item with a check on a neutral fill, so the indicator uses the
260
+ * foreground color instead of the filled-primary `on-primary`.
261
+ */
262
+ :root .rui-listbox__option[aria-selected='true']:not([aria-disabled='true']),
263
+ :root .rui-listbox__option[aria-selected='true']:focus-visible,
264
+ :root .rui-menu-button__item[aria-checked='true'],
265
+ :root .rui-sidebar__menu-button[aria-current='page'],
266
+ :root .rui-sidebar__menu-button--active,
267
+ :root .rui-tree__node[aria-selected='true'] {
268
+ @apply rounded-control font-semibold;
269
+ background-color: var(--color-github-transparent-selected);
270
+ background-image: none;
271
+ color: var(--color-github-fg);
272
+ }
273
+
274
+ :root .rui-listbox__option[aria-selected='true'] .rui-listbox__option-indicator {
275
+ color: var(--color-github-fg);
276
+ }
277
+
278
+ :root .rui-listbox__option[aria-selected='true'][data-active]:not([aria-disabled='true']) {
279
+ --tw-ring-color: transparent;
79
280
  }
80
281
 
81
282
  :root rui-tabs[variant='boxed'] {
@@ -87,7 +288,7 @@
87
288
  }
88
289
 
89
290
  :root rui-tabs[variant='boxed'] .rui-tabs__tab {
90
- @apply rounded-none text-on-surface-container-low;
291
+ @apply rounded-none text-sm text-on-surface opacity-100;
91
292
  }
92
293
 
93
294
  :root rui-tabs[variant='boxed'] .rui-tabs__tab[aria-selected='true'] {
@@ -96,25 +297,42 @@
96
297
  }
97
298
 
98
299
  /**
99
- * @remarks Primer's underline nav has no panel, but Radiant tabs own one. A subtle surface with a divider border keeps
100
- * the panel distinct from the white page. It clips its content so square code blocks respect the rounded corners.
300
+ * @remarks Primer's underline nav has no panel, but Radiant tabs own one. A bordered box keeps the panel distinct
301
+ * from the page and clips its content so square code blocks respect the rounded corners.
101
302
  */
102
303
  :root rui-tabs[variant='boxed'] .rui-tabs__panel {
103
304
  @apply mt-3 overflow-hidden rounded-container border border-border bg-surface;
104
305
  }
105
306
 
106
- :root .rui-listbox__option[aria-selected='true'],
107
- :root .rui-menu-button__item[aria-checked='true'],
108
- :root .rui-sidebar__menu-button--active {
109
- @apply rounded-control bg-info-container text-on-info-container;
307
+ /**
308
+ * @remarks Primer labels are outlined pills on a transparent fill; the variant tints only the border and text.
309
+ */
310
+ :root .rui-badge {
311
+ @apply rounded-pill border border-border font-medium;
110
312
  }
111
313
 
112
- :root .rui-badge,
113
- :root .rui-chip,
114
- :root .rui-pagination__link {
314
+ :root .rui-badge--filled {
315
+ @apply border-primary bg-transparent text-primary;
316
+ }
317
+
318
+ :root .rui-badge--destructive {
319
+ @apply border-error bg-transparent;
320
+ color: var(--color-github-danger-fg);
321
+ }
322
+
323
+ :root .rui-badge--muted {
324
+ @apply bg-transparent;
325
+ color: var(--color-github-muted-fg);
326
+ }
327
+
328
+ :root .rui-chip {
115
329
  @apply rounded-pill;
116
330
  }
117
331
 
332
+ :root .rui-feed__article {
333
+ @apply rounded-container border border-border bg-surface shadow-none;
334
+ }
335
+
118
336
  /**
119
337
  * @remarks Primer's file list uses one bordered surface with horizontal row separators and no vertical cell rules.
120
338
  */
@@ -136,6 +354,6 @@
136
354
  }
137
355
 
138
356
  :root .rui-treegrid__cell[aria-selected='true'] {
139
- @apply bg-info-container text-on-info-container;
357
+ @apply bg-primary-container text-on-primary-container;
140
358
  }
141
359
  }
@@ -18,6 +18,30 @@
18
18
  --focus-ring-width: 3px;
19
19
  --focus-ring-offset: 3px;
20
20
  --opacity-disabled: 1;
21
+ --opacity-muted: 0.75;
22
+ --radius-pill: 0;
23
+ --sheen-image: none;
24
+ --shadow-control: none;
25
+ --shadow-overlay: none;
26
+ --shadow-modal: none;
27
+ }
28
+
29
+ /**
30
+ * @remarks Component knobs are declared unlayered on the host elements, so these overrides stay unlayered too.
31
+ */
32
+ :root rui-tooltip {
33
+ --rui-tooltip-surface: var(--background);
34
+ --rui-tooltip-color: var(--on-background);
35
+ }
36
+
37
+ :root rui-tabs {
38
+ --rui-tabs-indicator-width: 3px;
39
+ }
40
+
41
+ :root rui-slider {
42
+ --rui-slider-thumb-background: var(--background);
43
+ --rui-slider-thumb-border-color: var(--on-background);
44
+ --rui-slider-focus-ring-width: 3px;
21
45
  }
22
46
 
23
47
  @layer components {
@@ -58,21 +82,83 @@
58
82
  @apply rounded-none border-2 border-on-background bg-background;
59
83
  }
60
84
 
85
+ /**
86
+ * @remarks Radios stay round so they never read as check boxes; the checked state adds a dot, not just a color.
87
+ */
88
+ :root .rui-radio__control {
89
+ @apply rounded-full;
90
+ }
91
+
61
92
  :root .rui-switch__thumb {
62
93
  @apply rounded-none;
63
94
  }
64
95
 
65
96
  :root .rui-checkbox__input:checked + .rui-checkbox__control,
66
- :root .rui-radio__input:checked + .rui-radio__control,
67
97
  :root .rui-switch__input:checked + .rui-switch__track {
68
98
  @apply border-2 border-primary bg-primary;
69
99
  }
70
100
 
101
+ :root .rui-radio__input:checked + .rui-radio__control {
102
+ @apply border-2 border-primary bg-background;
103
+ }
104
+
105
+ :root .rui-radio__input:checked + .rui-radio__control::after {
106
+ @apply size-2.5 bg-primary;
107
+ }
108
+
109
+ :root .rui-switch__thumb {
110
+ @apply border-2 border-on-background;
111
+ }
112
+
113
+ :root .rui-switch__input:checked + .rui-switch__track .rui-switch__thumb {
114
+ @apply border-on-primary;
115
+ }
116
+
117
+ :root .rui-input::placeholder,
118
+ :root .rui-textarea::placeholder {
119
+ color: var(--on-background);
120
+ opacity: var(--opacity-muted);
121
+ }
122
+
123
+ :root .rui-toc__label,
124
+ :root .rui-toc__link,
125
+ :root .rui-breadcrumb__separator,
126
+ :root .rui-breadcrumb__ellipsis {
127
+ color: var(--on-background);
128
+ }
129
+
130
+ :root .rui-toc__link--active {
131
+ @apply font-bold underline decoration-2 underline-offset-4;
132
+ color: var(--primary);
133
+ }
134
+
135
+ :root rui-tabs[variant='boxed'] .rui-tabs__tab:not([aria-selected='true']) {
136
+ opacity: 1;
137
+ }
138
+
139
+ :root .rui-popover {
140
+ --rui-popover-radius: 0;
141
+ --rui-popover-surface: var(--background);
142
+ --rui-popover-border-color: var(--on-background);
143
+ border-width: 2px;
144
+ color: var(--on-background);
145
+ }
146
+
147
+ :root .rui-tooltip__content {
148
+ @apply border-2 border-on-background;
149
+ }
150
+
151
+ :root .rui-avatar {
152
+ --rui-avatar-radius: 9999px;
153
+ @apply border-2 border-on-background;
154
+ }
155
+
71
156
  :root .rui-listbox__option[aria-selected='true'],
72
157
  :root .rui-menu-button__item[aria-checked='true'],
73
158
  :root .rui-menubar__menu-item[aria-checked='true'],
74
159
  :root .rui-tree__node[aria-selected='true'],
75
- :root .rui-calendar__day[aria-selected='true'] {
160
+ :root .rui-calendar__day[aria-selected='true'],
161
+ :root .rui-sidebar__menu-button[aria-current='page'] {
76
162
  @apply border-2 border-primary bg-primary text-on-primary font-semibold;
77
163
  }
78
164
 
@@ -83,10 +169,11 @@
83
169
  }
84
170
 
85
171
  :root .rui-alert,
86
- :root .rui-toast__content,
172
+ :root .rui-toast,
87
173
  :root .rui-dialog__surface,
88
- :root .rui-popover-host,
89
174
  :root .rui-hover-card__content,
175
+ :root .rui-menu-button__menu,
176
+ :root .rui-menubar__menu,
90
177
  :root .rui-calendar,
91
178
  :root rui-tabs[variant='boxed'] {
92
179
  @apply rounded-none border-2 border-on-background bg-background text-on-background shadow-none;
@@ -94,6 +181,7 @@
94
181
 
95
182
  :root .rui-badge,
96
183
  :root .rui-chip,
184
+ :root .rui-tag,
97
185
  :root .rui-separator,
98
186
  :root .rui-meter__track,
99
187
  :root .rui-slider__range-track,
@@ -101,7 +189,7 @@
101
189
  @apply border border-on-background;
102
190
  }
103
191
 
104
- :root .rui-table__header,
192
+ :root .rui-table__column,
105
193
  :root .rui-treegrid__row--header,
106
194
  :root .rui-calendar__weekdays {
107
195
  @apply border-b-2 border-on-background font-bold;