@varialkit/colorpicker 0.1.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.
@@ -0,0 +1,471 @@
1
+ .solara-colorpicker {
2
+ --colorpicker-swatch-size: 28px;
3
+ --colorpicker-swatch-radius: var(--radius-2);
4
+ --colorpicker-grid-gap: 10px;
5
+ --colorpicker-spectrum-height: 176px;
6
+ --colorpicker-slider-gradient: var(--color-surface-300);
7
+ --colorpicker-presets-max-height: 208px;
8
+
9
+ display: flex;
10
+ flex-direction: column;
11
+ height: 100%;
12
+ }
13
+
14
+ .solara-colorpicker[data-size="sm"] {
15
+ --colorpicker-swatch-size: 22px;
16
+ }
17
+
18
+ .solara-colorpicker[data-size="md"] {
19
+ --colorpicker-swatch-size: 28px;
20
+ }
21
+
22
+ .solara-colorpicker[data-size="lg"] {
23
+ --colorpicker-swatch-size: 36px;
24
+ }
25
+
26
+ .solara-colorpicker__wrapper {
27
+ display: inline-flex;
28
+ }
29
+
30
+ .solara-colorpicker__menu {
31
+ --menu-padding: 0px;
32
+ width: var(--colorpicker-menu-width, auto);
33
+ height: var(--colorpicker-menu-height, auto);
34
+ min-width: 280px;
35
+ overflow: hidden;
36
+ }
37
+
38
+ .solara-colorpicker__section {
39
+ padding: calc(var(--space-2) * var(--spacing-multiplier));
40
+ }
41
+
42
+ .solara-colorpicker__section + .solara-colorpicker__section {
43
+ border-top: 1px solid var(--color-surface-400);
44
+ }
45
+
46
+ .solara-colorpicker__subhead {
47
+ margin-bottom: calc(var(--space-2) * var(--spacing-multiplier));
48
+ color: var(--color-text-secondary);
49
+ font-size: var(--font-size-caption-scaled);
50
+ font-weight: 600;
51
+ letter-spacing: 0.02em;
52
+ text-transform: uppercase;
53
+ }
54
+
55
+ .solara-colorpicker__grid {
56
+ display: grid;
57
+ grid-template-columns: repeat(auto-fill, minmax(var(--colorpicker-swatch-size), var(--colorpicker-swatch-size)));
58
+ gap: var(--colorpicker-grid-gap);
59
+ align-content: start;
60
+ justify-content: start;
61
+ }
62
+
63
+ .solara-colorpicker__swatch {
64
+ width: var(--colorpicker-swatch-size);
65
+ height: var(--colorpicker-swatch-size);
66
+ border: none;
67
+ border-radius: var(--colorpicker-swatch-radius);
68
+ cursor: pointer;
69
+ position: relative;
70
+ padding: 0;
71
+ margin: 0;
72
+ box-sizing: border-box;
73
+ display: block;
74
+ aspect-ratio: 1 / 1;
75
+ overflow: hidden;
76
+ box-shadow: inset 0px 0px 2px rgba(0, 0, 0, 0.35);
77
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
78
+
79
+ &:hover {
80
+ transform: scale(1.05);
81
+ box-shadow: inset 0px 0px 4px rgba(0, 0, 0, 0.5);
82
+ }
83
+
84
+ &:focus-visible {
85
+ outline: none;
86
+ box-shadow: 0 0 0 3px var(--color-focus-halo);
87
+ }
88
+
89
+ &.is-selected,
90
+ &[data-selected="true"] {
91
+ box-shadow: 0 0 0 2px var(--color-surface-0), 0 0 0 4px var(--color-divider-accent);
92
+ }
93
+
94
+ &:disabled {
95
+ cursor: not-allowed;
96
+ opacity: 0.5;
97
+
98
+ &:hover {
99
+ transform: none;
100
+ box-shadow: none;
101
+ }
102
+ }
103
+ }
104
+
105
+ .solara-colorpicker__swatch[data-size="sm"] {
106
+ --colorpicker-swatch-size: 22px;
107
+ }
108
+
109
+ .solara-colorpicker__swatch[data-size="md"] {
110
+ --colorpicker-swatch-size: 28px;
111
+ }
112
+
113
+ .solara-colorpicker__swatch[data-size="lg"] {
114
+ --colorpicker-swatch-size: 36px;
115
+ }
116
+
117
+ .solara-colorpicker__swatch-content {
118
+ position: absolute;
119
+ inset: 0;
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ pointer-events: none;
124
+ color: var(--color-text-inverse);
125
+ font-size: var(--font-size-caption-scaled);
126
+ font-weight: 600;
127
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
128
+ }
129
+
130
+ .solara-colorpicker__controls {
131
+ display: flex;
132
+ flex-direction: column;
133
+ gap: calc(var(--space-2) * var(--spacing-multiplier));
134
+ }
135
+
136
+ .solara-colorpicker__control-row {
137
+ display: grid;
138
+ grid-template-columns: 1fr;
139
+ gap: calc(var(--space-2) * var(--spacing-multiplier));
140
+ align-items: end;
141
+ }
142
+
143
+ .solara-colorpicker__control-row--with-eyedropper {
144
+ grid-template-columns: auto 1fr;
145
+ }
146
+
147
+ .solara-colorpicker__eyedropper {
148
+ display: flex;
149
+ align-items: flex-end;
150
+ padding-bottom: 2px;
151
+ }
152
+
153
+ .solara-colorpicker__eyedropper-button {
154
+ width: 28px;
155
+ height: 28px;
156
+ display: inline-flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ border: none;
160
+ border-radius: 999px;
161
+ background: transparent;
162
+ color: var(--color-text-primary);
163
+ cursor: pointer;
164
+ padding: 0;
165
+ transition: color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;
166
+ }
167
+
168
+ .solara-colorpicker__eyedropper-button:hover:not(:disabled) {
169
+ color: var(--color-accent-primary);
170
+ background: color-mix(in srgb, var(--color-accent-primary) 10%, transparent);
171
+ }
172
+
173
+ .solara-colorpicker__eyedropper-button:focus-visible {
174
+ outline: none;
175
+ box-shadow: 0 0 0 3px var(--color-focus-halo);
176
+ }
177
+
178
+ .solara-colorpicker__eyedropper-button:disabled {
179
+ cursor: not-allowed;
180
+ opacity: 0.5;
181
+ }
182
+
183
+ .solara-colorpicker__eyedropper-icon {
184
+ width: 14px;
185
+ height: 14px;
186
+ }
187
+
188
+ .solara-colorpicker__control-stack {
189
+ display: flex;
190
+ flex-direction: column;
191
+ gap: calc(var(--space-2) * var(--spacing-multiplier));
192
+ }
193
+
194
+ .solara-colorpicker__spectrum {
195
+ position: relative;
196
+ width: 100%;
197
+ height: var(--colorpicker-spectrum-height);
198
+ border-radius: var(--radius-3);
199
+ background:
200
+ linear-gradient(to top, rgb(0 0 0) 0%, transparent 100%),
201
+ linear-gradient(to right, rgb(255 255 255) 0%, var(--colorpicker-spectrum-hue) 100%);
202
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--color-surface-500) 55%, transparent), var(--elevation-1);
203
+ cursor: crosshair;
204
+ outline: none;
205
+ }
206
+
207
+ .solara-colorpicker__spectrum:focus-visible {
208
+ box-shadow:
209
+ inset 0 0 0 1px color-mix(in srgb, var(--color-surface-500) 55%, transparent),
210
+ 0 0 0 3px var(--color-focus-halo);
211
+ }
212
+
213
+ .solara-colorpicker__spectrum-thumb {
214
+ position: absolute;
215
+ width: 18px;
216
+ height: 18px;
217
+ border-radius: 999px;
218
+ border: 3px solid var(--color-surface-0);
219
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.18), var(--elevation-2);
220
+ transform: translate(-50%, -50%);
221
+ pointer-events: none;
222
+ }
223
+
224
+ .solara-colorpicker__slider-row {
225
+ width: 100%;
226
+ }
227
+
228
+ .solara-colorpicker__section--presets {
229
+ flex: 1 1 auto;
230
+ min-height: 0;
231
+ overflow-y: auto;
232
+ max-height: var(--colorpicker-presets-max-height);
233
+ scrollbar-gutter: stable;
234
+ }
235
+
236
+ .solara-colorpicker__slider {
237
+ width: 100%;
238
+ height: 14px;
239
+ margin: 0;
240
+ appearance: none;
241
+ border-radius: 999px;
242
+ background: var(--colorpicker-slider-gradient);
243
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--color-surface-500) 55%, transparent);
244
+ cursor: pointer;
245
+ }
246
+
247
+ .solara-colorpicker__slider::-webkit-slider-thumb {
248
+ appearance: none;
249
+ width: 24px;
250
+ height: 24px;
251
+ border-radius: 999px;
252
+ border: 2px solid var(--color-surface-0);
253
+ background: var(--color-surface-0);
254
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.18), var(--elevation-2);
255
+ }
256
+
257
+ .solara-colorpicker__slider::-moz-range-thumb {
258
+ width: 24px;
259
+ height: 24px;
260
+ border-radius: 999px;
261
+ border: 2px solid var(--color-surface-0);
262
+ background: var(--color-surface-0);
263
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.18), var(--elevation-2);
264
+ }
265
+
266
+ .solara-colorpicker__slider::-moz-range-track {
267
+ height: 14px;
268
+ border: none;
269
+ border-radius: 999px;
270
+ background: transparent;
271
+ }
272
+
273
+ .solara-colorpicker__slider:focus-visible {
274
+ outline: none;
275
+ box-shadow:
276
+ inset 0 0 0 1px color-mix(in srgb, var(--color-surface-500) 55%, transparent),
277
+ 0 0 0 3px var(--color-focus-halo);
278
+ }
279
+
280
+ .solara-colorpicker__slider:disabled {
281
+ cursor: not-allowed;
282
+ }
283
+
284
+ .solara-colorpicker__slider--alpha {
285
+ background-image:
286
+ linear-gradient(45deg, rgba(0, 0, 0, 0.08) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.08) 75%, rgba(0, 0, 0, 0.08) 100%),
287
+ linear-gradient(45deg, rgba(0, 0, 0, 0.08) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.08) 75%, rgba(0, 0, 0, 0.08) 100%),
288
+ var(--colorpicker-slider-gradient);
289
+ background-position: 0 0, 8px 8px, 0 0;
290
+ background-size: 16px 16px, 16px 16px, 100% 100%;
291
+ }
292
+
293
+ .solara-colorpicker__value-row {
294
+ display: grid;
295
+ grid-template-columns: minmax(88px, 116px) minmax(0, 1fr) minmax(84px, 108px);
296
+ gap: calc(var(--space-2) * var(--spacing-multiplier));
297
+ align-items: center;
298
+ }
299
+
300
+ .solara-colorpicker__value-format,
301
+ .solara-colorpicker__value-input,
302
+ .solara-colorpicker__opacity-input {
303
+ min-width: 0;
304
+ }
305
+
306
+ .solara-colorpicker__value-format,
307
+ .solara-colorpicker__value-input .solara-textfield-wrapper,
308
+ .solara-colorpicker__opacity-input .solara-textfield-wrapper {
309
+ width: 100%;
310
+ }
311
+
312
+ .solara-colorpicker__value-format,
313
+ .solara-colorpicker__value-input .solara-textfield-container,
314
+ .solara-colorpicker__opacity-input .solara-textfield-container {
315
+ width: 100%;
316
+ }
317
+
318
+ .solara-colorpicker__format-select,
319
+ .solara-colorpicker__value-input .solara-textfield,
320
+ .solara-colorpicker__opacity-input .solara-textfield {
321
+ width: 100%;
322
+ }
323
+
324
+ .solara-colorpicker__format-select {
325
+ height: 100%;
326
+ min-height: 38px;
327
+ padding: 0 calc(var(--space-3) * var(--spacing-multiplier));
328
+ border: 1px solid var(--color-surface-400);
329
+ border-radius: var(--radius-2);
330
+ background: var(--color-surface-100);
331
+ color: var(--color-text-primary);
332
+ font: inherit;
333
+ }
334
+
335
+ .solara-colorpicker__format-select:focus-visible {
336
+ outline: none;
337
+ box-shadow: 0 0 0 3px var(--color-focus-halo);
338
+ }
339
+
340
+ .solara-colorpicker__opacity-input {
341
+ position: relative;
342
+ }
343
+
344
+ .solara-colorpicker__opacity-input .solara-textfield {
345
+ padding-right: calc(var(--space-5) * var(--spacing-multiplier));
346
+ }
347
+
348
+ .solara-colorpicker__percent {
349
+ position: absolute;
350
+ top: 50%;
351
+ right: calc(var(--space-2) * var(--spacing-multiplier));
352
+ transform: translateY(-50%);
353
+ color: var(--color-text-secondary);
354
+ font-size: var(--font-size-caption-scaled);
355
+ pointer-events: none;
356
+ }
357
+
358
+ .solara-colorpicker[data-disabled="true"] .solara-colorpicker__spectrum,
359
+ .solara-colorpicker[data-disabled="true"] .solara-colorpicker__slider-row,
360
+ .solara-colorpicker[data-disabled="true"] .solara-colorpicker__value-row {
361
+ opacity: 0.6;
362
+ }
363
+
364
+ .solara-color-preview {
365
+ display: inline-flex;
366
+ align-items: center;
367
+ gap: calc(var(--space-2) * var(--spacing-multiplier));
368
+ background: none;
369
+ border: none;
370
+ padding: 0;
371
+ cursor: pointer;
372
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
373
+ }
374
+
375
+ .solara-color-preview[data-disabled="true"],
376
+ .solara-color-preview:disabled {
377
+ cursor: not-allowed;
378
+ opacity: 0.5;
379
+ }
380
+
381
+ .solara-color-preview[data-size="sm"] {
382
+ --colorpreview-swatch-size: 20px;
383
+ gap: calc(var(--space-1) * var(--spacing-multiplier));
384
+ }
385
+
386
+ .solara-color-preview[data-size="md"] {
387
+ --colorpreview-swatch-size: 28px;
388
+ gap: calc(var(--space-2) * var(--spacing-multiplier));
389
+ }
390
+
391
+ .solara-color-preview[data-size="lg"] {
392
+ --colorpreview-swatch-size: 36px;
393
+ gap: calc(var(--space-3) * var(--spacing-multiplier));
394
+ }
395
+
396
+ .solara-color-preview[data-label-position="left"] {
397
+ flex-direction: row-reverse;
398
+ }
399
+
400
+ .solara-color-preview[data-label-position="right"] {
401
+ flex-direction: row;
402
+ }
403
+
404
+ .solara-color-preview[data-label-position="top"] {
405
+ flex-direction: column-reverse;
406
+ align-items: center;
407
+ }
408
+
409
+ .solara-color-preview[data-label-position="bottom"] {
410
+ flex-direction: column;
411
+ align-items: center;
412
+ }
413
+
414
+ .solara-color-preview__swatch {
415
+ width: var(--colorpreview-swatch-size, 28px);
416
+ height: var(--colorpreview-swatch-size, 28px);
417
+ border-radius: var(--radius-2);
418
+ box-shadow: inset 0px 0px 2px rgba(0, 0, 0, 0.4);
419
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
420
+ }
421
+
422
+ .solara-color-preview[data-shape="circle"] .solara-color-preview__swatch {
423
+ border-radius: 9999px;
424
+ }
425
+
426
+ .solara-color-preview[data-border="false"] .solara-color-preview__swatch {
427
+ box-shadow: none;
428
+ }
429
+
430
+ .solara-color-preview:hover .solara-color-preview__swatch {
431
+ transform: scale(1.1);
432
+ box-shadow: var(--elevation-2);
433
+ }
434
+
435
+ .solara-color-preview:focus-visible .solara-color-preview__swatch {
436
+ box-shadow: 0 0 0 3px var(--color-focus-halo);
437
+ }
438
+
439
+ .solara-color-preview[data-disabled="true"]:hover .solara-color-preview__swatch,
440
+ .solara-color-preview:disabled:hover .solara-color-preview__swatch {
441
+ transform: none;
442
+ box-shadow: none;
443
+ }
444
+
445
+ .solara-color-preview__label {
446
+ font-size: var(--font-size-body-scaled);
447
+ font-weight: 500;
448
+ color: var(--color-text-primary);
449
+ line-height: var(--line-height-body-scaled);
450
+ user-select: none;
451
+ }
452
+
453
+ .solara-color-preview[data-disabled="true"] .solara-color-preview__label,
454
+ .solara-color-preview:disabled .solara-color-preview__label {
455
+ color: var(--color-text-tertiary);
456
+ }
457
+
458
+ @media (max-width: 520px) {
459
+ .solara-colorpicker__control-row--with-eyedropper {
460
+ grid-template-columns: 1fr;
461
+ }
462
+
463
+ .solara-colorpicker__eyedropper {
464
+ justify-content: flex-start;
465
+ padding-bottom: 0;
466
+ }
467
+
468
+ .solara-colorpicker__value-row {
469
+ grid-template-columns: 1fr;
470
+ }
471
+ }