@jolly-pixel/ui 1.0.1 → 2.0.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 (117) hide show
  1. package/LICENSE +44 -44
  2. package/NOTICE +9 -0
  3. package/README.md +194 -194
  4. package/dist/containers/Dialog.js +11 -11
  5. package/dist/containers/Dialog.styles.js +48 -48
  6. package/dist/containers/Dock.js +11 -11
  7. package/dist/containers/Dock.styles.js +351 -351
  8. package/dist/containers/DockLayout.js +4 -4
  9. package/dist/containers/Floating.js +23 -23
  10. package/dist/containers/Floating.styles.js +116 -116
  11. package/dist/containers/Folder.js +28 -28
  12. package/dist/containers/Folder.styles.js +221 -221
  13. package/dist/containers/Pane.js +50 -50
  14. package/dist/containers/Pane.styles.js +186 -186
  15. package/dist/containers/Rail.js +18 -18
  16. package/dist/containers/Tab.js +10 -10
  17. package/dist/containers/Tabs.js +26 -26
  18. package/dist/containers/Tabs.styles.js +93 -93
  19. package/dist/containers/Toolbar.js +25 -25
  20. package/dist/containers/resize.js +5 -5
  21. package/dist/controls/Button.js +9 -9
  22. package/dist/controls/Button.styles.js +79 -79
  23. package/dist/controls/ButtonGroup.js +28 -28
  24. package/dist/controls/ButtonGroup.styles.js +98 -98
  25. package/dist/controls/Checkbox.js +14 -14
  26. package/dist/controls/Checkbox.styles.js +111 -111
  27. package/dist/controls/Color.js +51 -51
  28. package/dist/controls/Color.styles.js +83 -83
  29. package/dist/controls/ColorPicker.js +104 -104
  30. package/dist/controls/ColorPicker.styles.js +296 -296
  31. package/dist/controls/Control.js +33 -33
  32. package/dist/controls/Control.styles.js +102 -102
  33. package/dist/controls/Controls.js +11 -11
  34. package/dist/controls/Controls.styles.js +98 -98
  35. package/dist/controls/Flags.js +18 -18
  36. package/dist/controls/Flags.styles.js +59 -59
  37. package/dist/controls/Number.js +21 -21
  38. package/dist/controls/Number.styles.js +44 -44
  39. package/dist/controls/PropertyRow.js +13 -13
  40. package/dist/controls/PropertyRow.styles.js +105 -105
  41. package/dist/controls/Range.js +24 -24
  42. package/dist/controls/Range.styles.js +25 -25
  43. package/dist/controls/Select.js +23 -23
  44. package/dist/controls/Select.styles.js +47 -47
  45. package/dist/controls/Separator.js +11 -11
  46. package/dist/controls/Separator.styles.js +45 -45
  47. package/dist/controls/Slider.js +36 -36
  48. package/dist/controls/Slider.styles.js +161 -161
  49. package/dist/controls/Text.js +17 -17
  50. package/dist/data/Tree.d.ts +0 -14
  51. package/dist/data/Tree.d.ts.map +1 -1
  52. package/dist/data/Tree.js +90 -120
  53. package/dist/data/Tree.js.map +1 -1
  54. package/dist/data/Tree.styles.d.ts.map +1 -1
  55. package/dist/data/Tree.styles.js +220 -237
  56. package/dist/data/Tree.styles.js.map +1 -1
  57. package/dist/data/dropZone.d.ts +0 -10
  58. package/dist/data/dropZone.d.ts.map +1 -1
  59. package/dist/data/dropZone.js +0 -10
  60. package/dist/data/dropZone.js.map +1 -1
  61. package/dist/data/resolveRename.d.ts +0 -3
  62. package/dist/data/resolveRename.d.ts.map +1 -1
  63. package/dist/data/resolveRename.js +0 -3
  64. package/dist/data/resolveRename.js.map +1 -1
  65. package/dist/data/resolveReparent.d.ts +0 -7
  66. package/dist/data/resolveReparent.d.ts.map +1 -1
  67. package/dist/data/resolveReparent.js +0 -6
  68. package/dist/data/resolveReparent.js.map +1 -1
  69. package/dist/data/rowDragSession.d.ts +0 -8
  70. package/dist/data/rowDragSession.d.ts.map +1 -1
  71. package/dist/data/rowDragSession.js +0 -6
  72. package/dist/data/rowDragSession.js.map +1 -1
  73. package/dist/data/treeNodes.d.ts +0 -6
  74. package/dist/data/treeNodes.d.ts.map +1 -1
  75. package/dist/data/treeNodes.js +2 -7
  76. package/dist/data/treeNodes.js.map +1 -1
  77. package/dist/feedback/JollyPixelLogo.js +84 -84
  78. package/dist/feedback/Loading.js +29 -29
  79. package/dist/feedback/Loading.styles.js +230 -230
  80. package/dist/feedback/Log.js +8 -8
  81. package/dist/feedback/Log.styles.js +61 -61
  82. package/dist/feedback/Progress.js +17 -17
  83. package/dist/feedback/Progress.styles.js +146 -146
  84. package/dist/field/JollyField.js +51 -51
  85. package/dist/field/JollyField.styles.js +429 -429
  86. package/dist/icon/Icon.js +24 -24
  87. package/dist/icon/builtins.js +126 -126
  88. package/dist/interaction/drag/DragSession.js +6 -6
  89. package/dist/interaction/scrub/ScrubController.js +6 -6
  90. package/dist/math/AxisController.js +22 -22
  91. package/dist/math/Point2d.js +12 -12
  92. package/dist/math/Point2d.styles.js +49 -49
  93. package/dist/math/Quaternion.js +4 -4
  94. package/dist/math/Transform.js +40 -40
  95. package/dist/math/Transform.styles.js +17 -17
  96. package/dist/math/VectorField.js +4 -4
  97. package/dist/math/VectorField.styles.js +102 -102
  98. package/dist/monitors/Graph.js +8 -8
  99. package/dist/monitors/Graph.styles.js +42 -42
  100. package/dist/monitors/Monitor.js +5 -5
  101. package/dist/monitors/Monitor.styles.js +31 -31
  102. package/dist/peer/Presence.js +33 -33
  103. package/dist/peer/Presence.styles.js +82 -82
  104. package/dist/stats/Stats.js +6 -6
  105. package/dist/stats/Stats.styles.js +54 -54
  106. package/dist/theme/components/DensityControl.js +16 -16
  107. package/dist/theme/components/ThemeControl.js +16 -16
  108. package/dist/theme/components/ThemePreferences.js +18 -18
  109. package/dist/theme/font.js +9 -9
  110. package/dist/theme/styles/hiddenStyles.js +4 -4
  111. package/dist/theme/styles/mixins.js +16 -16
  112. package/dist/theme/styles/themeStyles.js +4 -4
  113. package/dist/theme/tokens/density.js +19 -19
  114. package/dist/theme/tokens/ramps.js +40 -40
  115. package/dist/theme/tokens/scales.js +56 -56
  116. package/dist/theme/tokens/semantic.js +184 -184
  117. package/package.json +6 -5
@@ -5,301 +5,301 @@ import { focusRing } from "../theme/styles/mixins.js";
5
5
  /**
6
6
  * Renders picker surfaces with gradients driven by custom properties.
7
7
  */
8
- export const colorPickerStyles = css `
9
- :host {
10
- --jolly-picker-width: 180px;
11
- --jolly-picker-area-height: 110px;
12
- --jolly-picker-track-height: 12px;
13
- /* Centers a narrow ramp within the pointer hit area. */
14
- --jolly-picker-ramp-height: 4px;
15
- --jolly-picker-knob: 10px;
16
- --jolly-picker-checker: color-mix(in oklab, var(--jolly-ink) 18%, transparent);
17
- /* Hosts can set this to 0 when clipping the panel to their radius. */
18
- --jolly-picker-radius: var(--jolly-radius-md, 6px);
19
-
20
- display: block;
21
- width: var(--jolly-picker-width);
22
- color: var(--jolly-text, CanvasText);
23
- font-family: inherit;
24
- font-size: inherit;
25
- }
26
-
27
- :host([disabled]) {
28
- opacity: 0.5;
29
- pointer-events: none;
30
- }
31
-
32
- .panel {
33
- display: flex;
34
- flex-direction: column;
35
- gap: var(--jolly-space-1, 4px);
36
- }
37
-
38
- /* Checkerboard reveals alpha independently of the surface colour. */
39
- .checker {
40
- background-color: var(--jolly-surface-raised, Canvas);
41
- background-image: conic-gradient(
42
- var(--jolly-picker-checker) 25%,
43
- transparent 0 50%,
44
- var(--jolly-picker-checker) 0 75%,
45
- transparent 0
46
- );
47
- background-size: 8px 8px;
48
- }
49
-
50
- /*
51
- * Saturation runs left to right and value bottom to top. Resolve the hue here;
52
- * resolving it on :host before assignment paints every hue red.
53
- */
54
- .area {
55
- position: relative;
56
- height: var(--jolly-picker-area-height);
57
- border-radius: var(--jolly-picker-radius);
58
- background-image:
59
- linear-gradient(to top, #000, transparent),
60
- linear-gradient(
61
- to right,
62
- #fff,
63
- hsl(calc(var(--jolly-picker-hue, 0) * 1deg) 100% 50%)
64
- );
65
- cursor: crosshair;
66
- touch-action: none;
67
- }
68
-
69
- .area-cursor {
70
- position: absolute;
71
- left: calc(var(--jolly-picker-x, 0) * 100%);
72
- top: calc(var(--jolly-picker-y, 0) * 100%);
73
- width: var(--jolly-picker-knob);
74
- height: var(--jolly-picker-knob);
75
- box-sizing: border-box;
76
- border: 2px solid #fff;
77
- border-radius: 50%;
78
- box-shadow: 0 0 0 1px rgb(0 0 0 / 0.5);
79
- transform: translate(-50%, -50%);
80
- pointer-events: none;
81
- }
82
-
83
- /*
84
- * Hidden native ranges provide keyboard and screen-reader control for both
85
- * axes. Keep them focusable; display and visibility cannot hide them.
86
- */
87
- .axis {
88
- position: absolute;
89
- width: 1px;
90
- height: 1px;
91
- margin: 0;
92
- padding: 0;
93
- border: 0;
94
- opacity: 0;
95
- pointer-events: none;
96
- }
97
-
98
- /* Provides a large hit area around the narrow ramp. */
99
- .track {
100
- position: relative;
101
- height: var(--jolly-picker-track-height);
102
- touch-action: none;
103
- }
104
-
105
- .track::before {
106
- content: "";
107
- position: absolute;
108
- inset-inline: 0;
109
- top: 50%;
110
- height: var(--jolly-picker-ramp-height);
111
- border-radius: calc(var(--jolly-picker-ramp-height) / 2);
112
- transform: translateY(-50%);
113
- pointer-events: none;
114
- transition: height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
115
- }
116
-
117
- .track.hue::before {
118
- background-image: linear-gradient(
119
- to right,
120
- hsl(0 100% 50%),
121
- hsl(60 100% 50%),
122
- hsl(120 100% 50%),
123
- hsl(180 100% 50%),
124
- hsl(240 100% 50%),
125
- hsl(300 100% 50%),
126
- hsl(360 100% 50%)
127
- );
128
- }
129
-
130
- /* Composites the alpha ramp over the checkerboard on one element. */
131
- .track.alpha::before {
132
- background-color: var(--jolly-surface-raised, Canvas);
133
- background-image:
134
- linear-gradient(
135
- to right,
136
- transparent,
137
- var(--jolly-picker-opaque, #000)
138
- ),
139
- conic-gradient(
140
- var(--jolly-picker-checker) 25%,
141
- transparent 0 50%,
142
- var(--jolly-picker-checker) 0 75%,
143
- transparent 0
144
- );
145
- background-size: auto, 6px 6px;
146
- }
147
-
148
- .track:has(input:focus-visible) {
149
- --jolly-picker-ramp-height: 6px;
150
- --jolly-picker-knob: 12px;
151
- }
152
-
153
- .track input[type="range"] {
154
- position: absolute;
155
- inset: 0;
156
- width: 100%;
157
- height: 100%;
158
- margin: 0;
159
- padding: 0;
160
- border: none;
161
- background: none;
162
- appearance: none;
163
- cursor: pointer;
164
- }
165
-
166
- .track input[type="range"]::-webkit-slider-runnable-track {
167
- height: 100%;
168
- background: none;
169
- }
170
-
171
- .track input[type="range"]::-moz-range-track {
172
- height: 100%;
173
- background: none;
174
- }
175
-
176
- /* Matches slider sizing; white remains visible across all hues. */
177
- .track input[type="range"]::-webkit-slider-thumb {
178
- appearance: none;
179
- width: var(--jolly-picker-knob);
180
- height: var(--jolly-picker-knob);
181
- box-sizing: border-box;
182
- margin-top: calc(
183
- (var(--jolly-picker-track-height) - var(--jolly-picker-knob)) / 2
184
- );
185
- border: none;
186
- border-radius: var(--jolly-radius-sm, 2px);
187
- background: #fff;
188
- box-shadow: 0 1px 3px rgb(0 0 0 / 0.45);
189
- transition:
190
- width var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
191
- height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
192
- }
193
-
194
- .track input[type="range"]::-moz-range-thumb {
195
- width: var(--jolly-picker-knob);
196
- height: var(--jolly-picker-knob);
197
- box-sizing: border-box;
198
- border: none;
199
- border-radius: var(--jolly-radius-sm, 2px);
200
- background: #fff;
201
- box-shadow: 0 1px 3px rgb(0 0 0 / 0.45);
202
- transition:
203
- width var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
204
- height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
205
- }
206
-
207
- /* Aligns the alpha readout with the slider value column. */
208
- .lane {
209
- display: flex;
210
- align-items: center;
211
- gap: var(--jolly-space-1, 4px);
212
- }
213
-
214
- .lane .track {
215
- flex: 1 1 auto;
216
- min-width: 0;
217
- }
218
-
219
- /* Outline focus without altering the represented colour. */
220
- .area:has(input:focus-visible),
221
- .track:has(input:focus-visible) {
222
- ${focusRing}
223
- outline-offset: 1px;
224
- }
225
-
226
- .footer {
227
- display: flex;
228
- align-items: center;
229
- gap: var(--jolly-space-1, 4px);
230
- }
231
-
232
- .preview {
233
- flex: 0 0 auto;
234
- width: var(--jolly-control-height, 20px);
235
- height: var(--jolly-control-height, 20px);
236
- border-radius: var(--jolly-radius-sm, 2px);
237
- }
238
-
239
- .preview-face {
240
- display: block;
241
- width: 100%;
242
- height: 100%;
243
- border-radius: inherit;
244
- background: var(--jolly-picker-color, transparent);
245
- }
246
-
247
- .hex,
248
- .readout {
249
- height: var(--jolly-control-height, 20px);
250
- padding: 0 var(--jolly-space-1, 4px);
251
- border: none;
252
- border-radius: var(--jolly-radius-sm, 2px);
253
- background: var(--jolly-control-bg, ButtonFace);
254
- color: inherit;
255
- font: inherit;
256
- font-variant-numeric: tabular-nums;
257
- }
258
-
259
- .hex {
260
- flex: 1 1 auto;
261
- min-width: 0;
262
- }
263
-
264
- /* Prevents ramp movement as the readout width changes. */
265
- .readout {
266
- flex: 0 0 auto;
267
- width: 4ch;
268
- text-align: right;
269
- }
270
-
271
- .hex:hover:not(:disabled),
272
- .readout:hover:not(:disabled) {
273
- background: var(--jolly-control-bg-hover);
274
- }
275
-
276
- .hex:focus-visible,
277
- .readout:focus-visible {
278
- background: var(--jolly-control-bg-focus);
279
- outline: none;
280
- }
281
-
282
- .hex[aria-invalid="true"] {
283
- background: var(--jolly-invalid-bg);
284
- color: var(--jolly-danger, inherit);
285
- }
286
-
287
- :host([readonly]) .area,
288
- :host([readonly]) .track {
289
- cursor: default;
290
- }
291
-
292
- @media (forced-colors: active) {
293
- .area,
294
- .track {
295
- forced-color-adjust: none;
296
- }
297
-
298
- /* The surfaces opt out of substitution, so the ring names the system colour. */
299
- .area:has(input:focus-visible),
300
- .track:has(input:focus-visible) {
301
- outline-color: Highlight;
302
- }
303
- }
8
+ export const colorPickerStyles = css `
9
+ :host {
10
+ --jolly-picker-width: 180px;
11
+ --jolly-picker-area-height: 110px;
12
+ --jolly-picker-track-height: 12px;
13
+ /* Centers a narrow ramp within the pointer hit area. */
14
+ --jolly-picker-ramp-height: 4px;
15
+ --jolly-picker-knob: 10px;
16
+ --jolly-picker-checker: color-mix(in oklab, var(--jolly-ink) 18%, transparent);
17
+ /* Hosts can set this to 0 when clipping the panel to their radius. */
18
+ --jolly-picker-radius: var(--jolly-radius-md, 6px);
19
+
20
+ display: block;
21
+ width: var(--jolly-picker-width);
22
+ color: var(--jolly-text, CanvasText);
23
+ font-family: inherit;
24
+ font-size: inherit;
25
+ }
26
+
27
+ :host([disabled]) {
28
+ opacity: 0.5;
29
+ pointer-events: none;
30
+ }
31
+
32
+ .panel {
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: var(--jolly-space-1, 4px);
36
+ }
37
+
38
+ /* Checkerboard reveals alpha independently of the surface colour. */
39
+ .checker {
40
+ background-color: var(--jolly-surface-raised, Canvas);
41
+ background-image: conic-gradient(
42
+ var(--jolly-picker-checker) 25%,
43
+ transparent 0 50%,
44
+ var(--jolly-picker-checker) 0 75%,
45
+ transparent 0
46
+ );
47
+ background-size: 8px 8px;
48
+ }
49
+
50
+ /*
51
+ * Saturation runs left to right and value bottom to top. Resolve the hue here;
52
+ * resolving it on :host before assignment paints every hue red.
53
+ */
54
+ .area {
55
+ position: relative;
56
+ height: var(--jolly-picker-area-height);
57
+ border-radius: var(--jolly-picker-radius);
58
+ background-image:
59
+ linear-gradient(to top, #000, transparent),
60
+ linear-gradient(
61
+ to right,
62
+ #fff,
63
+ hsl(calc(var(--jolly-picker-hue, 0) * 1deg) 100% 50%)
64
+ );
65
+ cursor: crosshair;
66
+ touch-action: none;
67
+ }
68
+
69
+ .area-cursor {
70
+ position: absolute;
71
+ left: calc(var(--jolly-picker-x, 0) * 100%);
72
+ top: calc(var(--jolly-picker-y, 0) * 100%);
73
+ width: var(--jolly-picker-knob);
74
+ height: var(--jolly-picker-knob);
75
+ box-sizing: border-box;
76
+ border: 2px solid #fff;
77
+ border-radius: 50%;
78
+ box-shadow: 0 0 0 1px rgb(0 0 0 / 0.5);
79
+ transform: translate(-50%, -50%);
80
+ pointer-events: none;
81
+ }
82
+
83
+ /*
84
+ * Hidden native ranges provide keyboard and screen-reader control for both
85
+ * axes. Keep them focusable; display and visibility cannot hide them.
86
+ */
87
+ .axis {
88
+ position: absolute;
89
+ width: 1px;
90
+ height: 1px;
91
+ margin: 0;
92
+ padding: 0;
93
+ border: 0;
94
+ opacity: 0;
95
+ pointer-events: none;
96
+ }
97
+
98
+ /* Provides a large hit area around the narrow ramp. */
99
+ .track {
100
+ position: relative;
101
+ height: var(--jolly-picker-track-height);
102
+ touch-action: none;
103
+ }
104
+
105
+ .track::before {
106
+ content: "";
107
+ position: absolute;
108
+ inset-inline: 0;
109
+ top: 50%;
110
+ height: var(--jolly-picker-ramp-height);
111
+ border-radius: calc(var(--jolly-picker-ramp-height) / 2);
112
+ transform: translateY(-50%);
113
+ pointer-events: none;
114
+ transition: height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
115
+ }
116
+
117
+ .track.hue::before {
118
+ background-image: linear-gradient(
119
+ to right,
120
+ hsl(0 100% 50%),
121
+ hsl(60 100% 50%),
122
+ hsl(120 100% 50%),
123
+ hsl(180 100% 50%),
124
+ hsl(240 100% 50%),
125
+ hsl(300 100% 50%),
126
+ hsl(360 100% 50%)
127
+ );
128
+ }
129
+
130
+ /* Composites the alpha ramp over the checkerboard on one element. */
131
+ .track.alpha::before {
132
+ background-color: var(--jolly-surface-raised, Canvas);
133
+ background-image:
134
+ linear-gradient(
135
+ to right,
136
+ transparent,
137
+ var(--jolly-picker-opaque, #000)
138
+ ),
139
+ conic-gradient(
140
+ var(--jolly-picker-checker) 25%,
141
+ transparent 0 50%,
142
+ var(--jolly-picker-checker) 0 75%,
143
+ transparent 0
144
+ );
145
+ background-size: auto, 6px 6px;
146
+ }
147
+
148
+ .track:has(input:focus-visible) {
149
+ --jolly-picker-ramp-height: 6px;
150
+ --jolly-picker-knob: 12px;
151
+ }
152
+
153
+ .track input[type="range"] {
154
+ position: absolute;
155
+ inset: 0;
156
+ width: 100%;
157
+ height: 100%;
158
+ margin: 0;
159
+ padding: 0;
160
+ border: none;
161
+ background: none;
162
+ appearance: none;
163
+ cursor: pointer;
164
+ }
165
+
166
+ .track input[type="range"]::-webkit-slider-runnable-track {
167
+ height: 100%;
168
+ background: none;
169
+ }
170
+
171
+ .track input[type="range"]::-moz-range-track {
172
+ height: 100%;
173
+ background: none;
174
+ }
175
+
176
+ /* Matches slider sizing; white remains visible across all hues. */
177
+ .track input[type="range"]::-webkit-slider-thumb {
178
+ appearance: none;
179
+ width: var(--jolly-picker-knob);
180
+ height: var(--jolly-picker-knob);
181
+ box-sizing: border-box;
182
+ margin-top: calc(
183
+ (var(--jolly-picker-track-height) - var(--jolly-picker-knob)) / 2
184
+ );
185
+ border: none;
186
+ border-radius: var(--jolly-radius-sm, 2px);
187
+ background: #fff;
188
+ box-shadow: 0 1px 3px rgb(0 0 0 / 0.45);
189
+ transition:
190
+ width var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
191
+ height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
192
+ }
193
+
194
+ .track input[type="range"]::-moz-range-thumb {
195
+ width: var(--jolly-picker-knob);
196
+ height: var(--jolly-picker-knob);
197
+ box-sizing: border-box;
198
+ border: none;
199
+ border-radius: var(--jolly-radius-sm, 2px);
200
+ background: #fff;
201
+ box-shadow: 0 1px 3px rgb(0 0 0 / 0.45);
202
+ transition:
203
+ width var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease),
204
+ height var(--jolly-duration-fast, 100ms) var(--jolly-easing, ease);
205
+ }
206
+
207
+ /* Aligns the alpha readout with the slider value column. */
208
+ .lane {
209
+ display: flex;
210
+ align-items: center;
211
+ gap: var(--jolly-space-1, 4px);
212
+ }
213
+
214
+ .lane .track {
215
+ flex: 1 1 auto;
216
+ min-width: 0;
217
+ }
218
+
219
+ /* Outline focus without altering the represented colour. */
220
+ .area:has(input:focus-visible),
221
+ .track:has(input:focus-visible) {
222
+ ${focusRing}
223
+ outline-offset: 1px;
224
+ }
225
+
226
+ .footer {
227
+ display: flex;
228
+ align-items: center;
229
+ gap: var(--jolly-space-1, 4px);
230
+ }
231
+
232
+ .preview {
233
+ flex: 0 0 auto;
234
+ width: var(--jolly-control-height, 20px);
235
+ height: var(--jolly-control-height, 20px);
236
+ border-radius: var(--jolly-radius-sm, 2px);
237
+ }
238
+
239
+ .preview-face {
240
+ display: block;
241
+ width: 100%;
242
+ height: 100%;
243
+ border-radius: inherit;
244
+ background: var(--jolly-picker-color, transparent);
245
+ }
246
+
247
+ .hex,
248
+ .readout {
249
+ height: var(--jolly-control-height, 20px);
250
+ padding: 0 var(--jolly-space-1, 4px);
251
+ border: none;
252
+ border-radius: var(--jolly-radius-sm, 2px);
253
+ background: var(--jolly-control-bg, ButtonFace);
254
+ color: inherit;
255
+ font: inherit;
256
+ font-variant-numeric: tabular-nums;
257
+ }
258
+
259
+ .hex {
260
+ flex: 1 1 auto;
261
+ min-width: 0;
262
+ }
263
+
264
+ /* Prevents ramp movement as the readout width changes. */
265
+ .readout {
266
+ flex: 0 0 auto;
267
+ width: 4ch;
268
+ text-align: right;
269
+ }
270
+
271
+ .hex:hover:not(:disabled),
272
+ .readout:hover:not(:disabled) {
273
+ background: var(--jolly-control-bg-hover);
274
+ }
275
+
276
+ .hex:focus-visible,
277
+ .readout:focus-visible {
278
+ background: var(--jolly-control-bg-focus);
279
+ outline: none;
280
+ }
281
+
282
+ .hex[aria-invalid="true"] {
283
+ background: var(--jolly-invalid-bg);
284
+ color: var(--jolly-danger, inherit);
285
+ }
286
+
287
+ :host([readonly]) .area,
288
+ :host([readonly]) .track {
289
+ cursor: default;
290
+ }
291
+
292
+ @media (forced-colors: active) {
293
+ .area,
294
+ .track {
295
+ forced-color-adjust: none;
296
+ }
297
+
298
+ /* The surfaces opt out of substitution, so the ring names the system colour. */
299
+ .area:has(input:focus-visible),
300
+ .track:has(input:focus-visible) {
301
+ outline-color: Highlight;
302
+ }
303
+ }
304
304
  `;
305
305
  //# sourceMappingURL=ColorPicker.styles.js.map
@@ -39,42 +39,42 @@ let Control = class Control extends LitElement {
39
39
  this.setAttribute("role", "listitem");
40
40
  }
41
41
  render() {
42
- return html `
43
- <div class="keys"><slot></slot></div>
44
- <span class="description">${this.description}</span>
45
- ${this.details === "" ? nothing : this.#renderDetails()}
42
+ return html `
43
+ <div class="keys"><slot></slot></div>
44
+ <span class="description">${this.description}</span>
45
+ ${this.details === "" ? nothing : this.#renderDetails()}
46
46
  `;
47
47
  }
48
48
  #renderDetails() {
49
- return html `
50
- <button
51
- class="details-button"
52
- type="button"
53
- aria-label=${`More information about ${this.description}`}
54
- aria-describedby=${this.#detailsId}
55
- aria-expanded=${this.#popup.open}
56
- aria-haspopup="true"
57
- @click=${this.#toggleDetails}
58
- @mouseenter=${this.#showDetails}
59
- @mouseleave=${this.#hideDetails}
60
- @pointerdown=${this.#onPointerDown}
61
- @pointerup=${this.#onPointerUp}
62
- @pointercancel=${this.#onPointerUp}
63
- @focus=${this.#onFocus}
64
- @blur=${this.#hideDetails}
65
- >
66
- <jolly-icon name="info"></jolly-icon>
67
- </button>
68
- <div
69
- class="details"
70
- id=${this.#detailsId}
71
- popover="auto"
72
- role="tooltip"
73
- @beforetoggle=${this.#popup.onBeforeToggle}
74
- @toggle=${this.#popup.onToggle}
75
- >
76
- ${this.details}
77
- </div>
49
+ return html `
50
+ <button
51
+ class="details-button"
52
+ type="button"
53
+ aria-label=${`More information about ${this.description}`}
54
+ aria-describedby=${this.#detailsId}
55
+ aria-expanded=${this.#popup.open}
56
+ aria-haspopup="true"
57
+ @click=${this.#toggleDetails}
58
+ @mouseenter=${this.#showDetails}
59
+ @mouseleave=${this.#hideDetails}
60
+ @pointerdown=${this.#onPointerDown}
61
+ @pointerup=${this.#onPointerUp}
62
+ @pointercancel=${this.#onPointerUp}
63
+ @focus=${this.#onFocus}
64
+ @blur=${this.#hideDetails}
65
+ >
66
+ <jolly-icon name="info"></jolly-icon>
67
+ </button>
68
+ <div
69
+ class="details"
70
+ id=${this.#detailsId}
71
+ popover="auto"
72
+ role="tooltip"
73
+ @beforetoggle=${this.#popup.onBeforeToggle}
74
+ @toggle=${this.#popup.onToggle}
75
+ >
76
+ ${this.details}
77
+ </div>
78
78
  `;
79
79
  }
80
80
  #showDetails() {