@zylem/ui 0.8.8 → 0.8.11

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 (81) hide show
  1. package/dist/chunk-V47CGFWX.js +1 -0
  2. package/dist/index.css +1 -1
  3. package/dist/index.d.ts +15 -0
  4. package/dist/index.js +1 -1
  5. package/dist/styles.css +1 -1
  6. package/dist/styles.js +1 -1
  7. package/package.json +22 -11
  8. package/src/components/Accordion/Accordion.tsx +10 -1
  9. package/src/components/AddTile/AddTile.css.ts +95 -0
  10. package/src/components/AddTile/AddTile.tsx +45 -0
  11. package/src/components/BuildLabel/BuildLabel.css.ts +31 -0
  12. package/src/components/BuildLabel/BuildLabel.tsx +37 -0
  13. package/src/components/BuildLabel/mount-build-label.ts +77 -0
  14. package/src/components/BuildLabel/resolve-build-version.ts +47 -0
  15. package/src/components/Callout/Callout.css.ts +45 -0
  16. package/src/components/Callout/Callout.tsx +32 -0
  17. package/src/components/Card/Card.css.ts +18 -0
  18. package/src/components/Card/Card.tsx +25 -2
  19. package/src/components/ColorPalette/ColorPalette.css.ts +51 -0
  20. package/src/components/ColorPalette/ColorPalette.tsx +78 -0
  21. package/src/components/Dialog/Dialog.css.ts +69 -2
  22. package/src/components/Dialog/Dialog.tsx +35 -7
  23. package/src/components/DropdownMenu/DropdownMenu.css.ts +22 -0
  24. package/src/components/DropdownMenu/DropdownMenu.tsx +67 -20
  25. package/src/components/EmptyState/EmptyState.css.ts +9 -0
  26. package/src/components/EmptyState/EmptyState.tsx +3 -1
  27. package/src/components/FrameStrip/FrameStrip.css.ts +138 -0
  28. package/src/components/FrameStrip/FrameStrip.tsx +146 -0
  29. package/src/components/Menubar/Menubar.css.ts +52 -0
  30. package/src/components/Menubar/Menubar.tsx +77 -0
  31. package/src/components/Mixer/Knob.tsx +188 -0
  32. package/src/components/Mixer/Mixer.css.ts +246 -0
  33. package/src/components/Mixer/MixerStrip.tsx +150 -0
  34. package/src/components/NumberField/NumberField.tsx +5 -1
  35. package/src/components/Panel/Panel.tsx +6 -5
  36. package/src/components/PianoRoll/PianoRoll.css.ts +224 -0
  37. package/src/components/PianoRoll/PianoRoll.tsx +353 -0
  38. package/src/components/PianoRoll/piano-roll-math.ts +89 -0
  39. package/src/components/PixelGrid/PixelGrid.css.ts +30 -0
  40. package/src/components/PixelGrid/PixelGrid.tsx +48 -0
  41. package/src/components/PlaybackControls/PlaybackControls.css.ts +53 -0
  42. package/src/components/PlaybackControls/PlaybackControls.tsx +80 -0
  43. package/src/components/Property/Property.css.ts +1 -1
  44. package/src/components/Property/Property.tsx +3 -0
  45. package/src/components/Sidebar/Sidebar.css.ts +8 -0
  46. package/src/components/Sidebar/Sidebar.tsx +10 -2
  47. package/src/components/Slider/Slider.tsx +6 -0
  48. package/src/components/SpriteSizePicker/SpriteSizePicker.css.ts +103 -0
  49. package/src/components/SpriteSizePicker/SpriteSizePicker.tsx +172 -0
  50. package/src/components/SpriteSizePicker/snap-size.ts +28 -0
  51. package/src/components/Tabs/Tabs.css.ts +48 -0
  52. package/src/components/Tabs/Tabs.tsx +41 -3
  53. package/src/components/TextField/TextField.tsx +49 -5
  54. package/src/components/TimelineLanes/TimelineLanes.css.ts +365 -0
  55. package/src/components/TimelineLanes/TimelineLanes.tsx +509 -0
  56. package/src/components/TimelineLanes/lanes-math.ts +182 -0
  57. package/src/components/TimelineTrack/TimelineTrack.css.ts +163 -0
  58. package/src/components/TimelineTrack/TimelineTrack.tsx +90 -0
  59. package/src/components/TimelineTrack/timeline-math.ts +43 -0
  60. package/src/components/Toast/Toast.css.ts +48 -0
  61. package/src/components/Toast/Toast.tsx +37 -0
  62. package/src/components/ToolButton/ToolButton.tsx +92 -0
  63. package/src/components/ToolGroup/ToolGroup.css.ts +35 -0
  64. package/src/components/ToolGroup/ToolGroup.tsx +29 -0
  65. package/src/components/ToolboxButton/ToolboxButton.css.ts +131 -0
  66. package/src/components/ToolboxButton/ToolboxButton.tsx +88 -0
  67. package/src/components/TrackHeader/TrackHeader.css.ts +162 -0
  68. package/src/components/TrackHeader/TrackHeader.tsx +145 -0
  69. package/src/components/TransportBar/TransportBar.css.ts +65 -0
  70. package/src/components/TransportBar/TransportBar.tsx +154 -0
  71. package/src/components/Waveform/Waveform.css.ts +77 -0
  72. package/src/components/Waveform/Waveform.tsx +195 -0
  73. package/src/components/Waveform/peaks.ts +49 -0
  74. package/src/components/index.ts +122 -0
  75. package/src/global/accordion.css.ts +23 -0
  76. package/src/global/hyperglass-base.css.ts +9 -6
  77. package/src/styles.ts +23 -0
  78. package/src/theme.css.ts +15 -0
  79. package/vite/collect-zylem-versions.ts +82 -0
  80. package/vite/index.ts +30 -0
  81. package/dist/chunk-3TP2SNNW.js +0 -1
@@ -0,0 +1,365 @@
1
+ import { globalStyle } from '@vanilla-extract/css';
2
+ import { vars } from '../../theme.css';
3
+
4
+ const RULER_HEIGHT = '26px';
5
+ const LANE_BORDER = '1px solid rgba(97, 166, 232, 0.16)';
6
+
7
+ globalStyle('.zylem-lanes', {
8
+ position: 'relative',
9
+ overflow: 'auto',
10
+ minHeight: 0,
11
+ minWidth: 0,
12
+ fontFamily: vars.typography.fontFamily,
13
+ fontSize: `calc(${vars.typography.fontSize} - 2px)`,
14
+ color: vars.colors.text,
15
+ background: vars.material.fieldGlass,
16
+ border: '1px solid rgba(97, 166, 232, 0.22)',
17
+ borderRadius: vars.radii.control,
18
+ boxShadow: vars.effects.shadowInset,
19
+ userSelect: 'none',
20
+ });
21
+
22
+ globalStyle('.zylem-lanes[data-disabled]', {
23
+ opacity: 0.6,
24
+ });
25
+
26
+ globalStyle('.zylem-lanes-content', {
27
+ position: 'relative',
28
+ minWidth: '100%',
29
+ minHeight: '100%',
30
+ });
31
+
32
+ // Ruler row: sticky to the top of the scroller, above the lanes and playhead.
33
+ globalStyle('.zylem-lanes-ruler-row', {
34
+ position: 'sticky',
35
+ top: 0,
36
+ zIndex: 3,
37
+ display: 'flex',
38
+ height: RULER_HEIGHT,
39
+ background: vars.material.panelHeaderGloss,
40
+ backgroundColor: 'rgba(14, 30, 48, 0.96)',
41
+ borderBottom: '1px solid rgba(97, 166, 232, 0.3)',
42
+ boxShadow: '0 1px 0 rgba(255,255,255,0.06) inset',
43
+ });
44
+
45
+ globalStyle('.zylem-lanes-corner', {
46
+ position: 'sticky',
47
+ left: 0,
48
+ zIndex: 4,
49
+ flex: 'none',
50
+ width: 'var(--zylem-lanes-header)',
51
+ display: 'flex',
52
+ alignItems: 'center',
53
+ padding: `0 ${vars.spacing.sm}`,
54
+ fontSize: '10px',
55
+ letterSpacing: '0.08em',
56
+ textTransform: 'uppercase',
57
+ color: vars.colors.textSecondary,
58
+ background: 'rgba(14, 30, 48, 0.98)',
59
+ borderRight: LANE_BORDER,
60
+ });
61
+
62
+ globalStyle('.zylem-lanes-ruler', {
63
+ position: 'relative',
64
+ flex: 'none',
65
+ height: '100%',
66
+ cursor: 'pointer',
67
+ });
68
+
69
+ globalStyle('.zylem-lanes-range', {
70
+ position: 'absolute',
71
+ top: 0,
72
+ bottom: 0,
73
+ background: 'rgba(240, 180, 60, 0.18)',
74
+ borderLeft: '1px solid rgba(240, 180, 60, 0.7)',
75
+ borderRight: '1px solid rgba(240, 180, 60, 0.7)',
76
+ pointerEvents: 'none',
77
+ });
78
+
79
+ globalStyle('.zylem-lanes-tick', {
80
+ position: 'absolute',
81
+ bottom: 0,
82
+ width: '1px',
83
+ height: '6px',
84
+ background: 'rgba(205, 232, 255, 0.35)',
85
+ pointerEvents: 'none',
86
+ });
87
+
88
+ globalStyle('.zylem-lanes-tick[data-major]', {
89
+ height: '10px',
90
+ background: 'rgba(205, 232, 255, 0.7)',
91
+ });
92
+
93
+ globalStyle('.zylem-lanes-tick-label', {
94
+ position: 'absolute',
95
+ left: '4px',
96
+ bottom: '8px',
97
+ fontSize: '10px',
98
+ fontVariantNumeric: 'tabular-nums',
99
+ whiteSpace: 'nowrap',
100
+ color: vars.colors.textSecondary,
101
+ });
102
+
103
+ globalStyle('.zylem-lanes-playhead-head', {
104
+ position: 'absolute',
105
+ bottom: 0,
106
+ width: 0,
107
+ height: 0,
108
+ marginLeft: '-6px',
109
+ borderLeft: '6px solid transparent',
110
+ borderRight: '6px solid transparent',
111
+ borderTop: '8px solid rgba(255, 244, 200, 0.98)',
112
+ filter: 'drop-shadow(0 0 3px rgba(240, 180, 60, 0.8))',
113
+ pointerEvents: 'none',
114
+ });
115
+
116
+ globalStyle('.zylem-lanes-playhead', {
117
+ position: 'absolute',
118
+ top: RULER_HEIGHT,
119
+ bottom: 0,
120
+ zIndex: 1,
121
+ width: '1px',
122
+ marginLeft: '-0.5px',
123
+ background: 'rgba(255, 236, 170, 0.9)',
124
+ boxShadow: '0 0 6px rgba(240, 180, 60, 0.7)',
125
+ pointerEvents: 'none',
126
+ });
127
+
128
+ globalStyle('.zylem-lanes-rows', {
129
+ display: 'flex',
130
+ flexDirection: 'column',
131
+ });
132
+
133
+ // Lanes: sticky header cell + a body that carries the beat/second grid.
134
+ globalStyle('.zylem-lane', {
135
+ display: 'flex',
136
+ flex: 'none',
137
+ borderBottom: LANE_BORDER,
138
+ });
139
+
140
+ globalStyle('.zylem-lane[data-selected]', {
141
+ background: 'rgba(97, 166, 232, 0.07)',
142
+ });
143
+
144
+ globalStyle('.zylem-lane-header', {
145
+ position: 'sticky',
146
+ left: 0,
147
+ zIndex: 2,
148
+ flex: 'none',
149
+ width: 'var(--zylem-lanes-header)',
150
+ minWidth: 0,
151
+ display: 'flex',
152
+ alignItems: 'stretch',
153
+ background: 'rgba(16, 27, 42, 0.96)',
154
+ borderRight: LANE_BORDER,
155
+ });
156
+
157
+ globalStyle('.zylem-lane[data-selected] > .zylem-lane-header', {
158
+ background: 'rgba(30, 54, 82, 0.96)',
159
+ });
160
+
161
+ globalStyle('.zylem-lane-body', {
162
+ position: 'relative',
163
+ flex: 'none',
164
+ height: '100%',
165
+ backgroundImage: [
166
+ 'repeating-linear-gradient(90deg, rgba(205, 232, 255, 0.16) 0 1px, transparent 1px var(--zylem-lanes-major))',
167
+ 'repeating-linear-gradient(90deg, rgba(205, 232, 255, 0.06) 0 1px, transparent 1px var(--zylem-lanes-minor))',
168
+ ].join(', '),
169
+ });
170
+
171
+ globalStyle('.zylem-lane[data-dimmed] > .zylem-lane-body', {
172
+ opacity: 0.45,
173
+ });
174
+
175
+ globalStyle('.zylem-lane--group', {
176
+ background: 'rgba(97, 166, 232, 0.08)',
177
+ });
178
+
179
+ globalStyle('.zylem-lane--group > .zylem-lane-header', {
180
+ fontSize: '10px',
181
+ letterSpacing: '0.08em',
182
+ textTransform: 'uppercase',
183
+ color: vars.colors.textSecondary,
184
+ });
185
+
186
+ globalStyle('.zylem-lane--group > .zylem-lane-body', {
187
+ backgroundImage: 'none',
188
+ });
189
+
190
+ globalStyle('.zylem-lane-end', {
191
+ position: 'absolute',
192
+ top: 0,
193
+ bottom: 0,
194
+ right: 0,
195
+ background: 'rgba(0, 0, 0, 0.28)',
196
+ pointerEvents: 'none',
197
+ });
198
+
199
+ // Clips: color-tinted glass blocks with edge handles.
200
+ globalStyle('.zylem-clip', {
201
+ position: 'absolute',
202
+ top: '4px',
203
+ bottom: '4px',
204
+ boxSizing: 'border-box',
205
+ display: 'flex',
206
+ flexDirection: 'column',
207
+ overflow: 'hidden',
208
+ borderRadius: '5px',
209
+ border: '1px solid color-mix(in srgb, var(--zylem-clip-color) 70%, white 30%)',
210
+ background:
211
+ 'linear-gradient(180deg, color-mix(in srgb, var(--zylem-clip-color) 70%, white 30%) 0%, color-mix(in srgb, var(--zylem-clip-color) 75%, black 25%) 100%)',
212
+ boxShadow: 'inset 0 1px 0 rgba(255,255,255,0.35), 0 1px 3px rgba(0,0,0,0.45)',
213
+ color: '#0b1522',
214
+ cursor: 'grab',
215
+ outline: 'none',
216
+ transition: `box-shadow ${vars.motion.fast} ${vars.motion.easeOut}, filter ${vars.motion.fast} ${vars.motion.easeOut}`,
217
+ });
218
+
219
+ globalStyle('.zylem-clip:hover:not([data-disabled])', {
220
+ filter: 'brightness(1.08)',
221
+ });
222
+
223
+ globalStyle('.zylem-clip[data-selected]', {
224
+ borderColor: 'rgba(255, 255, 255, 0.9)',
225
+ boxShadow: `inset 0 1px 0 rgba(255,255,255,0.45), 0 0 0 1px rgba(255,255,255,0.5), ${vars.effects.glowPrimary}`,
226
+ });
227
+
228
+ globalStyle('.zylem-clip:focus-visible', {
229
+ boxShadow: vars.effects.focusRing,
230
+ });
231
+
232
+ globalStyle('.zylem-clip[data-dragging]', {
233
+ cursor: 'grabbing',
234
+ filter: 'brightness(1.12)',
235
+ });
236
+
237
+ globalStyle('.zylem-clip[data-disabled]', {
238
+ cursor: 'default',
239
+ opacity: 0.7,
240
+ });
241
+
242
+ globalStyle('.zylem-clip-label', {
243
+ flex: 'none',
244
+ padding: '2px 6px 0',
245
+ fontSize: '11px',
246
+ fontWeight: 600,
247
+ lineHeight: '14px',
248
+ whiteSpace: 'nowrap',
249
+ overflow: 'hidden',
250
+ textOverflow: 'ellipsis',
251
+ textShadow: '0 1px 0 rgba(255,255,255,0.25)',
252
+ });
253
+
254
+ globalStyle('.zylem-clip-body', {
255
+ position: 'relative',
256
+ flex: '1 1 auto',
257
+ minHeight: 0,
258
+ overflow: 'hidden',
259
+ pointerEvents: 'none',
260
+ });
261
+
262
+ globalStyle('.zylem-clip-blend', {
263
+ position: 'absolute',
264
+ top: 0,
265
+ bottom: 0,
266
+ left: 0,
267
+ background:
268
+ 'repeating-linear-gradient(135deg, rgba(0,0,0,0.28) 0 3px, transparent 3px 7px)',
269
+ borderRight: '1px dashed rgba(0,0,0,0.45)',
270
+ pointerEvents: 'none',
271
+ });
272
+
273
+ globalStyle('.zylem-clip-handle', {
274
+ position: 'absolute',
275
+ top: 0,
276
+ bottom: 0,
277
+ width: '7px',
278
+ cursor: 'ew-resize',
279
+ });
280
+
281
+ globalStyle('.zylem-clip-handle[data-edge="start"]', { left: 0 });
282
+ globalStyle('.zylem-clip-handle[data-edge="end"]', { right: 0 });
283
+
284
+ globalStyle('.zylem-clip-handle:hover', {
285
+ background: 'rgba(255,255,255,0.28)',
286
+ });
287
+
288
+ // Markers: diamonds (keyframes) and pins (events) centred on a time.
289
+ globalStyle('.zylem-marker', {
290
+ position: 'absolute',
291
+ top: '50%',
292
+ display: 'flex',
293
+ alignItems: 'center',
294
+ gap: '4px',
295
+ padding: 0,
296
+ margin: 0,
297
+ border: 0,
298
+ background: 'transparent',
299
+ color: vars.colors.text,
300
+ cursor: 'grab',
301
+ transform: 'translate(-50%, -50%)',
302
+ outline: 'none',
303
+ });
304
+
305
+ globalStyle('.zylem-marker[data-shape="pin"]', {
306
+ transform: 'translate(-7px, -50%)',
307
+ });
308
+
309
+ globalStyle('.zylem-marker:disabled', {
310
+ cursor: 'default',
311
+ opacity: 0.6,
312
+ });
313
+
314
+ globalStyle('.zylem-marker[data-dragging]', {
315
+ cursor: 'grabbing',
316
+ });
317
+
318
+ globalStyle('.zylem-marker-glyph', {
319
+ display: 'block',
320
+ width: '11px',
321
+ height: '11px',
322
+ boxSizing: 'border-box',
323
+ border: '1px solid rgba(255, 255, 255, 0.7)',
324
+ boxShadow: '0 1px 3px rgba(0,0,0,0.55)',
325
+ transition: `box-shadow ${vars.motion.fast} ${vars.motion.easeOut}, filter ${vars.motion.fast} ${vars.motion.easeOut}`,
326
+ });
327
+
328
+ globalStyle('.zylem-marker[data-shape="diamond"] .zylem-marker-glyph', {
329
+ borderRadius: '2px',
330
+ background:
331
+ 'var(--zylem-marker-color, linear-gradient(135deg, rgba(255, 244, 200, 0.98), rgba(240, 180, 60, 0.95)))',
332
+ transform: 'rotate(45deg)',
333
+ });
334
+
335
+ globalStyle('.zylem-marker[data-shape="pin"] .zylem-marker-glyph', {
336
+ width: '13px',
337
+ height: '13px',
338
+ borderRadius: '999px 999px 999px 2px',
339
+ background:
340
+ 'var(--zylem-marker-color, linear-gradient(135deg, rgba(178, 219, 255, 0.98), rgba(48, 137, 220, 0.95)))',
341
+ transform: 'rotate(-45deg)',
342
+ });
343
+
344
+ globalStyle('.zylem-marker:hover:not(:disabled) .zylem-marker-glyph', {
345
+ filter: 'brightness(1.12)',
346
+ });
347
+
348
+ globalStyle('.zylem-marker[data-selected] .zylem-marker-glyph', {
349
+ borderColor: 'white',
350
+ boxShadow: '0 1px 3px rgba(0,0,0,0.55), 0 0 10px rgba(255, 255, 255, 0.7)',
351
+ });
352
+
353
+ globalStyle('.zylem-marker:focus-visible .zylem-marker-glyph', {
354
+ boxShadow: vars.effects.focusRing,
355
+ });
356
+
357
+ globalStyle('.zylem-marker-label', {
358
+ fontSize: '10px',
359
+ whiteSpace: 'nowrap',
360
+ color: vars.colors.text,
361
+ textShadow: '0 1px 1px rgba(0,0,0,0.7)',
362
+ maxWidth: '120px',
363
+ overflow: 'hidden',
364
+ textOverflow: 'ellipsis',
365
+ });