@warmio/design 1.5.1 → 1.5.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.
- package/components.css +111 -82
- package/dist/logo.js +2 -2
- package/interfaces.css +4 -1
- package/package.json +1 -1
- package/theme.css +2 -2
package/components.css
CHANGED
|
@@ -41,12 +41,12 @@
|
|
|
41
41
|
/* border handled by variant shadows/tokens; no default regression border */
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
45
44
|
[data-warm-button]:focus-visible {
|
|
46
|
-
box-shadow: 0 0 0 var(--button-focus-ring)
|
|
45
|
+
box-shadow: 0 0 0 var(--button-focus-ring)
|
|
46
|
+
color-mix(in oklab, var(--ring) var(--button-mix-50), transparent);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
[data-warm-button][data-width=
|
|
49
|
+
[data-warm-button][data-width='full'] {
|
|
50
50
|
width: var(--button-width-full);
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -65,78 +65,78 @@
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
/* Variants (from cva + overrides + edge; tokens for color/shadow/radius) */
|
|
68
|
-
[data-warm-button][data-variant=
|
|
68
|
+
[data-warm-button][data-variant='default'] {
|
|
69
69
|
background-color: var(--button-primary-bg);
|
|
70
70
|
background-image: var(--button-primary-gradient);
|
|
71
71
|
color: var(--button-primary-foreground);
|
|
72
72
|
box-shadow: var(--button-primary-shadow);
|
|
73
73
|
/* no explicit border to avoid regression; shadow provides chrome */
|
|
74
74
|
}
|
|
75
|
-
[data-warm-button][data-variant=
|
|
75
|
+
[data-warm-button][data-variant='default']:hover {
|
|
76
76
|
background-color: var(--button-primary-hover);
|
|
77
77
|
background-image: var(--button-primary-gradient-hover);
|
|
78
78
|
}
|
|
79
|
-
[data-warm-button][data-variant=
|
|
79
|
+
[data-warm-button][data-variant='default']:active {
|
|
80
80
|
background-color: var(--button-primary-active);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
[data-warm-button][data-variant=
|
|
83
|
+
[data-warm-button][data-variant='outline'] {
|
|
84
84
|
background-color: var(--background);
|
|
85
85
|
box-shadow: var(--button-outline-shadow);
|
|
86
86
|
border-style: none;
|
|
87
87
|
}
|
|
88
|
-
[data-warm-button][data-variant=
|
|
88
|
+
[data-warm-button][data-variant='outline']:hover {
|
|
89
89
|
background-color: var(--muted);
|
|
90
90
|
color: var(--foreground);
|
|
91
91
|
}
|
|
92
|
-
.dark [data-warm-button][data-variant=
|
|
92
|
+
.dark [data-warm-button][data-variant='outline'] {
|
|
93
93
|
background-color: var(--warm-surface-raised-dark, var(--input));
|
|
94
94
|
box-shadow: var(--button-outline-shadow-inset);
|
|
95
95
|
}
|
|
96
|
-
.dark [data-warm-button][data-variant=
|
|
96
|
+
.dark [data-warm-button][data-variant='outline']:hover {
|
|
97
97
|
background-color: var(--warm-surface-raised-hover-dark, var(--muted));
|
|
98
98
|
}
|
|
99
|
-
[data-warm-button][data-variant=
|
|
99
|
+
[data-warm-button][data-variant='outline']:disabled {
|
|
100
100
|
opacity: 1;
|
|
101
101
|
background-color: var(--muted);
|
|
102
102
|
color: var(--muted-foreground);
|
|
103
103
|
box-shadow: var(--button-outline-shadow);
|
|
104
104
|
}
|
|
105
|
-
.dark [data-warm-button][data-variant=
|
|
105
|
+
.dark [data-warm-button][data-variant='outline']:disabled {
|
|
106
106
|
background-color: color-mix(in oklab, var(--input) var(--button-mix-20), transparent);
|
|
107
107
|
box-shadow: var(--button-outline-shadow-inset);
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
[data-warm-button][data-variant=
|
|
110
|
+
[data-warm-button][data-variant='ghost'] {
|
|
111
111
|
/* `background-color` (not the `background` shorthand): the shorthand
|
|
112
112
|
implicitly resets `background-clip` to its initial `border-box`,
|
|
113
113
|
diverging from the base recipe's `padding-box` (origin: `bg-clip-padding`
|
|
114
114
|
with no resting-state Tailwind `bg-*` utility on ghost). */
|
|
115
115
|
background-color: transparent;
|
|
116
116
|
}
|
|
117
|
-
[data-warm-button][data-variant=
|
|
117
|
+
[data-warm-button][data-variant='ghost']:hover {
|
|
118
118
|
background-color: var(--muted);
|
|
119
119
|
color: var(--foreground);
|
|
120
120
|
}
|
|
121
|
-
.dark [data-warm-button][data-variant=
|
|
121
|
+
.dark [data-warm-button][data-variant='ghost']:hover {
|
|
122
122
|
background-color: color-mix(in oklab, var(--muted) var(--button-mix-50), transparent);
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
[data-warm-button][data-variant=
|
|
125
|
+
[data-warm-button][data-variant='destructive'] {
|
|
126
126
|
background-color: color-mix(in oklab, var(--destructive) var(--button-mix-10), transparent);
|
|
127
127
|
color: var(--destructive);
|
|
128
128
|
}
|
|
129
|
-
[data-warm-button][data-variant=
|
|
129
|
+
[data-warm-button][data-variant='destructive']:hover {
|
|
130
130
|
background-color: color-mix(in oklab, var(--destructive) var(--button-mix-20), transparent);
|
|
131
131
|
}
|
|
132
|
-
.dark [data-warm-button][data-variant=
|
|
132
|
+
.dark [data-warm-button][data-variant='destructive'] {
|
|
133
133
|
background-color: color-mix(in oklab, var(--destructive) var(--button-mix-20), transparent);
|
|
134
134
|
}
|
|
135
|
-
.dark [data-warm-button][data-variant=
|
|
135
|
+
.dark [data-warm-button][data-variant='destructive']:hover {
|
|
136
136
|
background-color: color-mix(in oklab, var(--destructive) var(--button-mix-30), transparent);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
[data-warm-button][data-variant=
|
|
139
|
+
[data-warm-button][data-variant='apple'] {
|
|
140
140
|
/* `!important` on color/background: legacy's `buttonVariantClasses.apple`
|
|
141
141
|
overlay always applies after any presentation overlay in `cn()` order
|
|
142
142
|
(e.g. promptCategory's own `bg-background`/`text-foreground`,
|
|
@@ -152,51 +152,58 @@
|
|
|
152
152
|
color: var(--apple-button-foreground) !important;
|
|
153
153
|
box-shadow: var(--button-outline-shadow);
|
|
154
154
|
}
|
|
155
|
-
button[data-warm-button][data-variant=
|
|
155
|
+
button[data-warm-button][data-variant='apple'] {
|
|
156
156
|
appearance: button;
|
|
157
157
|
background-clip: padding-box;
|
|
158
158
|
}
|
|
159
|
-
[data-warm-button][data-variant=
|
|
160
|
-
background-color: color-mix(
|
|
159
|
+
[data-warm-button][data-variant='apple']:hover {
|
|
160
|
+
background-color: color-mix(
|
|
161
|
+
in oklab,
|
|
162
|
+
var(--apple-button-hover) var(--button-mix-90),
|
|
163
|
+
transparent
|
|
164
|
+
);
|
|
161
165
|
color: var(--apple-button-foreground);
|
|
162
166
|
}
|
|
163
|
-
[data-warm-button][data-variant=
|
|
167
|
+
[data-warm-button][data-variant='arrow'] {
|
|
164
168
|
border-width: 0;
|
|
165
169
|
text-decoration: underline;
|
|
166
170
|
text-underline-offset: var(--button-underline-offset);
|
|
167
171
|
}
|
|
168
|
-
[data-warm-button][data-variant=
|
|
172
|
+
[data-warm-button][data-variant='arrow'] svg {
|
|
169
173
|
width: var(--button-icon-size);
|
|
170
174
|
height: var(--button-icon-size);
|
|
171
175
|
transition: transform calc(var(--motion-duration-fast) * 2);
|
|
172
176
|
}
|
|
173
|
-
[data-warm-button][data-variant=
|
|
174
|
-
transform: translate(
|
|
177
|
+
[data-warm-button][data-variant='arrow']:hover svg {
|
|
178
|
+
transform: translate(
|
|
179
|
+
calc(var(--motion-distance-sm) / 2),
|
|
180
|
+
calc(-1 * var(--motion-distance-sm) / 2)
|
|
181
|
+
);
|
|
175
182
|
}
|
|
176
183
|
@media (prefers-reduced-motion: reduce) {
|
|
177
|
-
[data-warm-button][data-variant=
|
|
184
|
+
[data-warm-button][data-variant='arrow']:hover svg {
|
|
178
185
|
transform: none;
|
|
179
186
|
transition: none;
|
|
180
187
|
}
|
|
181
188
|
}
|
|
182
189
|
|
|
183
190
|
/* Sizes (public only; presentation overrides suppressed by explicit size via data attr, matches old resolveButton) */
|
|
184
|
-
[data-warm-button][data-size=
|
|
191
|
+
[data-warm-button][data-size='default'] {
|
|
185
192
|
height: var(--button-height-default);
|
|
186
193
|
padding-left: var(--button-padding-x);
|
|
187
194
|
padding-right: var(--button-padding-x);
|
|
188
195
|
gap: var(--button-gap);
|
|
189
196
|
}
|
|
190
|
-
[data-warm-button][data-size=
|
|
197
|
+
[data-warm-button][data-size='jumbo'] {
|
|
191
198
|
height: var(--button-height-jumbo);
|
|
192
|
-
padding-left: var(--button-padding-x);
|
|
193
|
-
padding-right: var(--button-padding-x);
|
|
199
|
+
padding-left: var(--button-padding-x-lg);
|
|
200
|
+
padding-right: var(--button-padding-x-lg);
|
|
194
201
|
font-size: var(--button-font-size-jumbo);
|
|
195
202
|
font-weight: 700;
|
|
196
203
|
line-height: var(--button-line-height-jumbo);
|
|
197
204
|
gap: var(--button-gap);
|
|
198
205
|
}
|
|
199
|
-
[data-warm-button][data-size=
|
|
206
|
+
[data-warm-button][data-size='icon'] {
|
|
200
207
|
width: var(--button-height-icon);
|
|
201
208
|
height: var(--button-height-icon);
|
|
202
209
|
}
|
|
@@ -204,45 +211,47 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
204
211
|
buttonInputAlignmentClasses.default = 'bg-clip-border py-2'); this only
|
|
205
212
|
applies when the caller passes size="default" explicitly, never when
|
|
206
213
|
'default' is reached through presentation-driven implicit sizing. */
|
|
207
|
-
[data-warm-button][data-size=
|
|
214
|
+
[data-warm-button][data-size='default'][data-explicit-size] {
|
|
208
215
|
padding-top: var(--button-padding-y-md);
|
|
209
216
|
padding-bottom: var(--button-padding-y-md);
|
|
210
217
|
background-clip: border-box;
|
|
211
218
|
}
|
|
212
219
|
|
|
213
220
|
/* Presentations: private legacy maps drive resolve to public data-size; geometry only when !data-explicit-size. Exact from old buttonPresentationClasses + primitive sizes (icon-round=36px etc) + edge + variants. */
|
|
214
|
-
[data-warm-button][data-presentation=
|
|
221
|
+
[data-warm-button][data-presentation='assistantIcon']:not([data-explicit-size]) {
|
|
215
222
|
width: var(--button-size-xs);
|
|
216
223
|
height: var(--button-size-xs);
|
|
217
224
|
padding: var(--button-padding-y-md);
|
|
218
225
|
}
|
|
219
|
-
[data-warm-button][data-presentation=
|
|
226
|
+
[data-warm-button][data-presentation='assistantIcon']:not([data-explicit-size]):active:not(
|
|
227
|
+
[aria-haspopup]
|
|
228
|
+
) {
|
|
220
229
|
transform: scale(0.9);
|
|
221
230
|
}
|
|
222
231
|
@media (prefers-reduced-motion: reduce) {
|
|
223
|
-
[data-warm-button][data-presentation=
|
|
224
|
-
|
|
225
|
-
|
|
232
|
+
[data-warm-button][data-presentation='assistantIcon']:not([data-explicit-size]):active:not(
|
|
233
|
+
[aria-haspopup]
|
|
234
|
+
) {
|
|
226
235
|
transform: none;
|
|
227
236
|
}
|
|
228
237
|
}
|
|
229
|
-
[data-warm-button][data-presentation=
|
|
238
|
+
[data-warm-button][data-presentation='assistantRoundIcon']:not([data-explicit-size]) {
|
|
230
239
|
/* old icon-round 36px */
|
|
231
240
|
width: var(--button-height-icon);
|
|
232
241
|
height: var(--button-height-icon);
|
|
233
242
|
}
|
|
234
|
-
[data-warm-button][data-presentation=
|
|
243
|
+
[data-warm-button][data-presentation='composerIcon']:not([data-explicit-size]) {
|
|
235
244
|
width: var(--button-size-sm);
|
|
236
245
|
height: var(--button-size-sm);
|
|
237
246
|
padding: var(--button-padding-y-md);
|
|
238
247
|
}
|
|
239
|
-
[data-warm-button][data-presentation=
|
|
248
|
+
[data-warm-button][data-presentation='editPill']:not([data-explicit-size]) {
|
|
240
249
|
/* old sm 32px */
|
|
241
250
|
height: var(--button-size-md);
|
|
242
251
|
padding-left: var(--button-padding-x);
|
|
243
252
|
padding-right: var(--button-padding-x);
|
|
244
253
|
}
|
|
245
|
-
[data-warm-button][data-presentation=
|
|
254
|
+
[data-warm-button][data-presentation='hero']:not([data-explicit-size]) {
|
|
246
255
|
height: var(--button-size-lg);
|
|
247
256
|
padding-left: var(--button-padding-x);
|
|
248
257
|
padding-right: var(--button-padding-x);
|
|
@@ -253,7 +262,7 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
253
262
|
line-height: var(--button-line-height-base);
|
|
254
263
|
background-clip: border-box;
|
|
255
264
|
}
|
|
256
|
-
[data-warm-button][data-presentation=
|
|
265
|
+
[data-warm-button][data-presentation='promptCategory']:not([data-explicit-size]) {
|
|
257
266
|
height: var(--button-height-default);
|
|
258
267
|
gap: var(--button-gap);
|
|
259
268
|
background-color: var(--background);
|
|
@@ -268,7 +277,7 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
268
277
|
important modifier) to every `default`-variant promptCategory button
|
|
269
278
|
regardless of explicit/implicit sizing, overriding the default variant's
|
|
270
279
|
own gradient shadow unconditionally; mirror that with `!important` here. */
|
|
271
|
-
[data-warm-button][data-presentation=
|
|
280
|
+
[data-warm-button][data-presentation='promptCategory'][data-variant='default'] {
|
|
272
281
|
box-shadow: var(--shadow-xs) !important;
|
|
273
282
|
}
|
|
274
283
|
/* buttonPresentationClasses.promptCategory's own (non-!important) `shadow-xs`
|
|
@@ -276,13 +285,15 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
276
285
|
branch), and only survives the cascade for variants without their own
|
|
277
286
|
later shadow override — arrow forces `shadow-none` and must keep winning;
|
|
278
287
|
default is already covered, unconditionally, by the rule above. */
|
|
279
|
-
[data-warm-button][data-presentation=
|
|
288
|
+
[data-warm-button][data-presentation='promptCategory']:not([data-explicit-size]):not(
|
|
289
|
+
[data-variant='arrow']
|
|
290
|
+
) {
|
|
280
291
|
box-shadow: var(--shadow-xs) !important;
|
|
281
292
|
}
|
|
282
|
-
[data-warm-button][data-presentation=
|
|
293
|
+
[data-warm-button][data-presentation='promptCategory']:hover {
|
|
283
294
|
background-color: var(--muted);
|
|
284
295
|
}
|
|
285
|
-
[data-warm-button][data-presentation=
|
|
296
|
+
[data-warm-button][data-presentation='promptOption']:not([data-explicit-size]) {
|
|
286
297
|
height: auto;
|
|
287
298
|
min-height: var(--button-min-height-option);
|
|
288
299
|
align-items: flex-start;
|
|
@@ -291,15 +302,15 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
291
302
|
padding: var(--button-padding-x);
|
|
292
303
|
font-size: var(--button-font-size);
|
|
293
304
|
}
|
|
294
|
-
[data-warm-button][data-presentation=
|
|
305
|
+
[data-warm-button][data-presentation='sidebarIcon']:not([data-explicit-size]) {
|
|
295
306
|
color: var(--sidebar-foreground);
|
|
296
307
|
background-clip: border-box;
|
|
297
308
|
}
|
|
298
|
-
[data-warm-button][data-presentation=
|
|
309
|
+
[data-warm-button][data-presentation='sidebarIcon']:hover {
|
|
299
310
|
background-color: var(--sidebar-accent);
|
|
300
311
|
color: var(--sidebar-accent-foreground);
|
|
301
312
|
}
|
|
302
|
-
[data-warm-button][data-presentation=
|
|
313
|
+
[data-warm-button][data-presentation='tableHeader']:not([data-explicit-size]) {
|
|
303
314
|
height: auto;
|
|
304
315
|
min-height: 0;
|
|
305
316
|
width: var(--button-width-full);
|
|
@@ -314,19 +325,19 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
314
325
|
line-height: var(--button-line-height);
|
|
315
326
|
color: var(--muted-foreground);
|
|
316
327
|
}
|
|
317
|
-
[data-warm-button][data-presentation=
|
|
328
|
+
[data-warm-button][data-presentation='tableHeader']:hover {
|
|
318
329
|
background-color: transparent;
|
|
319
330
|
color: var(--foreground);
|
|
320
331
|
}
|
|
321
|
-
[data-warm-button][data-presentation=
|
|
332
|
+
[data-warm-button][data-presentation='touch']:not([data-explicit-size]) {
|
|
322
333
|
min-height: var(--button-min-height-touch);
|
|
323
334
|
}
|
|
324
|
-
[data-warm-button][data-presentation=
|
|
335
|
+
[data-warm-button][data-presentation='threadMore']:not([data-explicit-size]) {
|
|
325
336
|
width: var(--button-size-xs);
|
|
326
337
|
height: var(--button-size-xs);
|
|
327
338
|
padding: 0;
|
|
328
339
|
}
|
|
329
|
-
[data-warm-button][data-presentation=
|
|
340
|
+
[data-warm-button][data-presentation='threadNew']:not([data-explicit-size]) {
|
|
330
341
|
height: var(--button-size-md);
|
|
331
342
|
justify-content: flex-start;
|
|
332
343
|
gap: var(--button-gap);
|
|
@@ -335,10 +346,10 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
335
346
|
font-size: var(--button-font-size);
|
|
336
347
|
font-weight: 400;
|
|
337
348
|
}
|
|
338
|
-
[data-warm-button][data-presentation=
|
|
349
|
+
[data-warm-button][data-presentation='threadNew']:hover {
|
|
339
350
|
background-color: var(--muted);
|
|
340
351
|
}
|
|
341
|
-
[data-warm-button][data-presentation=
|
|
352
|
+
[data-warm-button][data-presentation='compact']:not([data-explicit-size]) {
|
|
342
353
|
height: var(--button-size-md);
|
|
343
354
|
padding-left: var(--button-padding-x-sm);
|
|
344
355
|
padding-right: var(--button-padding-x-sm);
|
|
@@ -350,13 +361,13 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
350
361
|
`[data-size="default"][data-explicit-size]` rule below only fires once a
|
|
351
362
|
caller passes size="default" explicitly, so implicit 'default'/'controlPeer'
|
|
352
363
|
need their own copy of the same two properties). */
|
|
353
|
-
[data-warm-button][data-presentation=
|
|
354
|
-
[data-warm-button][data-presentation=
|
|
364
|
+
[data-warm-button][data-presentation='default']:not([data-explicit-size]),
|
|
365
|
+
[data-warm-button][data-presentation='controlPeer']:not([data-explicit-size]) {
|
|
355
366
|
padding-top: var(--button-padding-y-md);
|
|
356
367
|
padding-bottom: var(--button-padding-y-md);
|
|
357
368
|
background-clip: border-box;
|
|
358
369
|
}
|
|
359
|
-
[data-warm-button][data-presentation=
|
|
370
|
+
[data-warm-button][data-presentation='menuOption']:not([data-explicit-size]) {
|
|
360
371
|
/* old option min-height/auto 64px */
|
|
361
372
|
height: auto;
|
|
362
373
|
min-height: var(--button-min-height-option);
|
|
@@ -379,7 +390,7 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
379
390
|
specificity of the `:not([data-explicit-size])` presentation rules and the
|
|
380
391
|
`[data-size][data-explicit-size]` size rule above, so this later rule wins
|
|
381
392
|
the cascade instead of losing on specificity. */
|
|
382
|
-
[data-warm-button][data-variant=
|
|
393
|
+
[data-warm-button][data-variant='arrow'][data-variant='arrow'] {
|
|
383
394
|
height: auto;
|
|
384
395
|
padding: 0;
|
|
385
396
|
gap: var(--button-gap);
|
|
@@ -405,11 +416,11 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
405
416
|
pointer-events: none;
|
|
406
417
|
flex-shrink: 0;
|
|
407
418
|
}
|
|
408
|
-
[data-warm-button] svg:not([class*=
|
|
419
|
+
[data-warm-button] svg:not([class*='size-']) {
|
|
409
420
|
width: var(--button-icon-size);
|
|
410
421
|
height: var(--button-icon-size);
|
|
411
422
|
}
|
|
412
|
-
[data-warm-button][data-size=
|
|
423
|
+
[data-warm-button][data-size='jumbo'] svg:not([class*='size-']) {
|
|
413
424
|
width: var(--button-icon-size-jumbo);
|
|
414
425
|
height: var(--button-icon-size-jumbo);
|
|
415
426
|
}
|
|
@@ -424,7 +435,7 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
424
435
|
private `lg` behavior. `:not([data-explicit-size])` also raises this rule's
|
|
425
436
|
specificity above the plain jumbo rule above, so it wins unconditionally
|
|
426
437
|
whenever it matches. */
|
|
427
|
-
[data-warm-button][data-presentation=
|
|
438
|
+
[data-warm-button][data-presentation='hero']:not([data-explicit-size]) svg:not([class*='size-']) {
|
|
428
439
|
width: var(--button-icon-size);
|
|
429
440
|
height: var(--button-icon-size);
|
|
430
441
|
}
|
|
@@ -434,26 +445,30 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
434
445
|
(`[&_svg:not([class*='size-'])]:size-5`) carries one more selector
|
|
435
446
|
component than arrow's (`[&_svg]:size-4`), so jumbo's larger glyph size
|
|
436
447
|
wins whenever both apply (verified against the real compiled recipe). */
|
|
437
|
-
[data-warm-button][data-variant=
|
|
448
|
+
[data-warm-button][data-variant='arrow'] svg {
|
|
438
449
|
width: var(--button-icon-size);
|
|
439
450
|
height: var(--button-icon-size);
|
|
440
451
|
}
|
|
441
452
|
/* icon-xs primitive size (assistantIcon, threadMore) shrinks the icon glyph;
|
|
442
453
|
suppressed when the caller passes an explicit public size. */
|
|
443
|
-
[data-warm-button][data-presentation=
|
|
444
|
-
|
|
454
|
+
[data-warm-button][data-presentation='assistantIcon']:not([data-explicit-size])
|
|
455
|
+
svg:not([class*='size-']),
|
|
456
|
+
[data-warm-button][data-presentation='threadMore']:not([data-explicit-size])
|
|
457
|
+
svg:not([class*='size-']) {
|
|
445
458
|
width: var(--button-icon-size-xs);
|
|
446
459
|
height: var(--button-icon-size-xs);
|
|
447
460
|
}
|
|
448
461
|
/* Aria states (from cva aria-invalid + aria-expanded + dark) */
|
|
449
462
|
[data-warm-button][aria-invalid] {
|
|
450
|
-
box-shadow: 0 0 0 var(--button-focus-ring)
|
|
463
|
+
box-shadow: 0 0 0 var(--button-focus-ring)
|
|
464
|
+
color-mix(in oklab, var(--destructive) var(--button-mix-20), transparent);
|
|
451
465
|
}
|
|
452
466
|
.dark [data-warm-button][aria-invalid] {
|
|
453
|
-
box-shadow: 0 0 0 var(--button-focus-ring)
|
|
467
|
+
box-shadow: 0 0 0 var(--button-focus-ring)
|
|
468
|
+
color-mix(in oklab, var(--destructive) var(--button-mix-40), transparent);
|
|
454
469
|
}
|
|
455
|
-
[data-warm-button][data-variant=
|
|
456
|
-
[data-warm-button][data-variant=
|
|
470
|
+
[data-warm-button][data-variant='ghost'][aria-expanded='true'],
|
|
471
|
+
[data-warm-button][data-variant='outline'][aria-expanded='true'] {
|
|
457
472
|
background-color: var(--muted);
|
|
458
473
|
color: var(--foreground);
|
|
459
474
|
}
|
|
@@ -463,8 +478,8 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
463
478
|
pointer-events: none;
|
|
464
479
|
opacity: 0.5;
|
|
465
480
|
}
|
|
466
|
-
[data-warm-button][data-variant=
|
|
467
|
-
[data-warm-button][data-variant=
|
|
481
|
+
[data-warm-button][data-variant='apple']:disabled,
|
|
482
|
+
[data-warm-button][data-variant='outline']:disabled {
|
|
468
483
|
opacity: 1;
|
|
469
484
|
}
|
|
470
485
|
|
|
@@ -480,16 +495,30 @@ button[data-warm-button][data-variant="apple"] {
|
|
|
480
495
|
letter-spacing: var(--logo-letter-spacing);
|
|
481
496
|
}
|
|
482
497
|
svg[data-warm-logo] {
|
|
483
|
-
display:
|
|
484
|
-
vertical-align: middle;
|
|
498
|
+
display: block;
|
|
485
499
|
fill: currentColor;
|
|
486
500
|
flex-shrink: 0;
|
|
487
501
|
}
|
|
488
|
-
[data-warm-logo][data-size=
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
502
|
+
[data-warm-logo][data-size='badge'] svg[data-warm-logo] {
|
|
503
|
+
width: var(--logo-size-badge);
|
|
504
|
+
height: var(--logo-size-badge);
|
|
505
|
+
}
|
|
506
|
+
[data-warm-logo][data-size='default'] svg[data-warm-logo] {
|
|
507
|
+
width: var(--logo-size-default);
|
|
508
|
+
height: var(--logo-size-default);
|
|
509
|
+
}
|
|
510
|
+
[data-warm-logo][data-size='feature'] svg[data-warm-logo] {
|
|
511
|
+
width: var(--logo-size-feature);
|
|
512
|
+
height: var(--logo-size-feature);
|
|
513
|
+
}
|
|
514
|
+
[data-warm-logo][data-size='hero'] svg[data-warm-logo] {
|
|
515
|
+
width: var(--logo-size-hero);
|
|
516
|
+
height: var(--logo-size-hero);
|
|
517
|
+
}
|
|
495
518
|
|
|
519
|
+
[data-warm-logo][data-tone='foreground'] {
|
|
520
|
+
color: var(--foreground);
|
|
521
|
+
}
|
|
522
|
+
[data-warm-logo][data-tone='sidebar'] {
|
|
523
|
+
color: var(--sidebar-foreground);
|
|
524
|
+
}
|
package/dist/logo.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
const WShape = (_jsxs("g", { fill: "currentColor", children: [_jsx("path", { d: "M 33.500 40.660 C 20.206 42.744, 0 48.560, -0 50.302 C -0 51.759, 123.955 348.889, 127.738 356.500 C 142.182 385.561, 169.450 410.275, 198.946 421.040 C 218.922 428.330, 243.683 430.825, 264.526 427.648 C 277.151 425.724, 294.628 420.011, 294.194 417.952 C 293.790 416.040, 172.732 124.599, 168.522 115.405 C 161.779 100.679, 149.168 84.171, 135.093 71.646 C 119.358 57.644, 98.880 47.362, 77 42.478 C 69.645 40.836, 40.220 39.606, 33.500 40.660" }), _jsx("path", { d: "M 229.651 41.597 C 217.916 43.718, 202.443 49.144, 202.744 51.035 C 203.418 55.268, 329.689 356.584, 333.687 363.500 C 340.525 375.327, 345.293 381.483, 355.408 391.538 C 374.603 410.619, 398.878 423.014, 425.907 427.533 C 439.649 429.831, 463.594 429.132, 476 426.072 C 489.892 422.645, 497.188 419.815, 496.703 418.043 C 495.416 413.331, 371.058 116.094, 367.406 109 C 349.467 74.149, 313.008 47.875, 273.752 41.509 C 262.281 39.648, 240.195 39.693, 229.651 41.597" }), _jsx("path", { d: "M 463 40.593 C 451.670 42.545, 447.288 43.569, 439 46.203 C 433.775 47.864, 429.338 49.372, 429.140 49.555 C 428.942 49.737, 434.670 64.021, 441.868 81.297 C 455.574 114.190, 462.215 131.660, 468.447 151.208 C 475.360 172.892, 486.124 186.213, 503.834 194.997 C 530.956 208.450, 564.982 201.679, 583.654 179.112 C 604.399 154.041, 605.407 121.944, 586.291 95.155 C 567.827 69.280, 539.107 50.114, 508 42.907 C 500.680 41.212, 494.713 40.644, 482 40.434 C 472.925 40.284, 464.375 40.356, 463 40.593" })] }));
|
|
3
|
+
const WShape = (_jsxs("g", { fill: "currentColor", transform: "translate(0 108)", children: [_jsx("path", { d: "M 33.500 40.660 C 20.206 42.744, 0 48.560, -0 50.302 C -0 51.759, 123.955 348.889, 127.738 356.500 C 142.182 385.561, 169.450 410.275, 198.946 421.040 C 218.922 428.330, 243.683 430.825, 264.526 427.648 C 277.151 425.724, 294.628 420.011, 294.194 417.952 C 293.790 416.040, 172.732 124.599, 168.522 115.405 C 161.779 100.679, 149.168 84.171, 135.093 71.646 C 119.358 57.644, 98.880 47.362, 77 42.478 C 69.645 40.836, 40.220 39.606, 33.500 40.660" }), _jsx("path", { d: "M 229.651 41.597 C 217.916 43.718, 202.443 49.144, 202.744 51.035 C 203.418 55.268, 329.689 356.584, 333.687 363.500 C 340.525 375.327, 345.293 381.483, 355.408 391.538 C 374.603 410.619, 398.878 423.014, 425.907 427.533 C 439.649 429.831, 463.594 429.132, 476 426.072 C 489.892 422.645, 497.188 419.815, 496.703 418.043 C 495.416 413.331, 371.058 116.094, 367.406 109 C 349.467 74.149, 313.008 47.875, 273.752 41.509 C 262.281 39.648, 240.195 39.693, 229.651 41.597" }), _jsx("path", { d: "M 463 40.593 C 451.670 42.545, 447.288 43.569, 439 46.203 C 433.775 47.864, 429.338 49.372, 429.140 49.555 C 428.942 49.737, 434.670 64.021, 441.868 81.297 C 455.574 114.190, 462.215 131.660, 468.447 151.208 C 475.360 172.892, 486.124 186.213, 503.834 194.997 C 530.956 208.450, 564.982 201.679, 583.654 179.112 C 604.399 154.041, 605.407 121.944, 586.291 95.155 C 567.827 69.280, 539.107 50.114, 508 42.907 C 500.680 41.212, 494.713 40.644, 482 40.434 C 472.925 40.284, 464.375 40.356, 463 40.593" })] }));
|
|
4
4
|
export function WarmLogoIcon({ size = 'default', tone = 'default', decorative = false, className: _className, style: _style, asChild: _asChild, render: _render, ...props }) {
|
|
5
5
|
const label = decorative ? undefined : 'Warm logo';
|
|
6
|
-
return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 600
|
|
6
|
+
return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 600 600", "data-warm-logo": true, "data-size": size, "data-tone": tone, width: size === 'hero' ? 56 : size === 'feature' ? 32 : size === 'default' ? 28 : 12, height: size === 'hero' ? 56 : size === 'feature' ? 32 : size === 'default' ? 28 : 12, "aria-hidden": decorative ? true : undefined, "aria-label": label, ...props, children: WShape }));
|
|
7
7
|
}
|
|
8
8
|
export const Logo = React.forwardRef(function Logo({ size = 'default', tone = 'default', showText = true, className: _className, style: _style, textClass: _textClass, asChild: _asChild, render: _render, ...props }, ref) {
|
|
9
9
|
return (_jsxs("div", { ref: ref, "data-warm-logo": true, "data-size": size, "data-tone": tone, ...props, children: [_jsx(WarmLogoIcon, { size: size, tone: tone, decorative: showText }), showText ? _jsx("span", { children: "Warm" }) : null] }));
|
package/interfaces.css
CHANGED
|
@@ -52,7 +52,10 @@ html.theme-switching *::after {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
.interface-concentric {
|
|
55
|
-
border-radius: max(
|
|
55
|
+
border-radius: max(
|
|
56
|
+
0px,
|
|
57
|
+
calc(var(--interface-outer-radius, var(--radius-xl)) - var(--interface-inset, 0px))
|
|
58
|
+
);
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
.interface-icon-crossfade {
|
package/package.json
CHANGED
package/theme.css
CHANGED
|
@@ -228,7 +228,7 @@
|
|
|
228
228
|
--button-padding-y-sm: 0.25rem;
|
|
229
229
|
--button-padding-x-md: 0.75rem;
|
|
230
230
|
--button-padding-y-md: 0.5rem;
|
|
231
|
-
--button-padding-x-lg:
|
|
231
|
+
--button-padding-x-lg: 1.75rem;
|
|
232
232
|
--button-padding-y-lg: 0.75rem;
|
|
233
233
|
--button-font-size: 0.875rem;
|
|
234
234
|
--button-gap: 0.5rem;
|
|
@@ -271,7 +271,7 @@
|
|
|
271
271
|
--button-height-icon: 2.25rem;
|
|
272
272
|
--button-min-height-touch: 2.75rem;
|
|
273
273
|
--button-min-height-option: 4rem;
|
|
274
|
-
--button-padding-x:
|
|
274
|
+
--button-padding-x: 1.25rem;
|
|
275
275
|
--button-font-size-base: 1rem;
|
|
276
276
|
--button-font-size-jumbo: 1.125rem;
|
|
277
277
|
--button-line-height-base: 1.5rem;
|