ai-progress-controls 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.
- package/LICENSE +21 -0
- package/README.md +823 -0
- package/dist/ai-progress-controls.es.js +7191 -0
- package/dist/ai-progress-controls.es.js.map +1 -0
- package/dist/ai-progress-controls.umd.js +2 -0
- package/dist/ai-progress-controls.umd.js.map +1 -0
- package/dist/index.d.ts +2212 -0
- package/package.json +105 -0
- package/src/__tests__/setup.ts +93 -0
- package/src/core/base/AIControl.ts +230 -0
- package/src/core/base/index.ts +3 -0
- package/src/core/base/types.ts +77 -0
- package/src/core/base/utils.ts +168 -0
- package/src/core/batch-progress/BatchProgress.test.ts +458 -0
- package/src/core/batch-progress/BatchProgress.ts +760 -0
- package/src/core/batch-progress/index.ts +14 -0
- package/src/core/batch-progress/styles.ts +480 -0
- package/src/core/batch-progress/types.ts +169 -0
- package/src/core/model-loader/ModelLoader.test.ts +311 -0
- package/src/core/model-loader/ModelLoader.ts +673 -0
- package/src/core/model-loader/index.ts +2 -0
- package/src/core/model-loader/styles.ts +496 -0
- package/src/core/model-loader/types.ts +127 -0
- package/src/core/parameter-panel/ParameterPanel.test.ts +856 -0
- package/src/core/parameter-panel/ParameterPanel.ts +877 -0
- package/src/core/parameter-panel/index.ts +14 -0
- package/src/core/parameter-panel/styles.ts +323 -0
- package/src/core/parameter-panel/types.ts +278 -0
- package/src/core/parameter-slider/ParameterSlider.test.ts +299 -0
- package/src/core/parameter-slider/ParameterSlider.ts +653 -0
- package/src/core/parameter-slider/index.ts +8 -0
- package/src/core/parameter-slider/styles.ts +493 -0
- package/src/core/parameter-slider/types.ts +107 -0
- package/src/core/queue-progress/QueueProgress.test.ts +344 -0
- package/src/core/queue-progress/QueueProgress.ts +563 -0
- package/src/core/queue-progress/index.ts +5 -0
- package/src/core/queue-progress/styles.ts +469 -0
- package/src/core/queue-progress/types.ts +130 -0
- package/src/core/retry-progress/RetryProgress.test.ts +397 -0
- package/src/core/retry-progress/RetryProgress.ts +957 -0
- package/src/core/retry-progress/index.ts +6 -0
- package/src/core/retry-progress/styles.ts +530 -0
- package/src/core/retry-progress/types.ts +176 -0
- package/src/core/stream-progress/StreamProgress.test.ts +531 -0
- package/src/core/stream-progress/StreamProgress.ts +517 -0
- package/src/core/stream-progress/index.ts +2 -0
- package/src/core/stream-progress/styles.ts +349 -0
- package/src/core/stream-progress/types.ts +82 -0
- package/src/index.ts +19 -0
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
export const styles = `
|
|
2
|
+
<style>
|
|
3
|
+
:host {
|
|
4
|
+
/* CSS variables inherit from document root with fallback defaults */
|
|
5
|
+
display: block;
|
|
6
|
+
width: 100%;
|
|
7
|
+
font-family: var(--ai-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
|
|
8
|
+
font-size: var(--ai-font-size, 14px);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
:host([style*="cursor: grab"]) .slider-thumb {
|
|
12
|
+
cursor: grab;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
:host([style*="cursor: grabbing"]) .slider-thumb {
|
|
16
|
+
cursor: grabbing;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.parameter-slider {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
gap: 12px;
|
|
23
|
+
padding: 16px;
|
|
24
|
+
background: var(--ai-slider-bg, #1f2937);
|
|
25
|
+
border-radius: 12px;
|
|
26
|
+
color: var(--ai-slider-text, #f9fafb);
|
|
27
|
+
position: relative;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.parameter-slider.disabled {
|
|
31
|
+
opacity: 0.5;
|
|
32
|
+
pointer-events: none;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Header */
|
|
36
|
+
.header {
|
|
37
|
+
display: flex;
|
|
38
|
+
justify-content: space-between;
|
|
39
|
+
align-items: flex-start;
|
|
40
|
+
gap: 12px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.label-section {
|
|
44
|
+
flex: 1;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.label {
|
|
48
|
+
font-size: 14px;
|
|
49
|
+
font-weight: 600;
|
|
50
|
+
color: var(--ai-slider-label, #f9fafb);
|
|
51
|
+
margin-bottom: 4px;
|
|
52
|
+
display: block;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.description {
|
|
56
|
+
font-size: 12px;
|
|
57
|
+
color: var(--ai-slider-description, #9ca3af);
|
|
58
|
+
line-height: 1.4;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.value-display {
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
gap: 8px;
|
|
65
|
+
flex-shrink: 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.current-value {
|
|
69
|
+
font-size: 18px;
|
|
70
|
+
font-weight: 700;
|
|
71
|
+
color: var(--ai-slider-value, #60a5fa);
|
|
72
|
+
font-variant-numeric: tabular-nums;
|
|
73
|
+
min-width: 60px;
|
|
74
|
+
text-align: right;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.unit {
|
|
78
|
+
font-size: 12px;
|
|
79
|
+
color: var(--ai-slider-description, #9ca3af);
|
|
80
|
+
font-weight: 500;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Slider Container */
|
|
84
|
+
.slider-container {
|
|
85
|
+
position: relative;
|
|
86
|
+
padding: 8px 0;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.slider-track {
|
|
90
|
+
position: relative;
|
|
91
|
+
height: 6px;
|
|
92
|
+
background: var(--ai-slider-track-bg, #374151);
|
|
93
|
+
border-radius: 3px;
|
|
94
|
+
cursor: pointer;
|
|
95
|
+
transition: background 0.2s;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.slider-track:hover {
|
|
99
|
+
background: var(--ai-slider-track-hover, #4b5563);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.slider-fill {
|
|
103
|
+
position: absolute;
|
|
104
|
+
left: 0;
|
|
105
|
+
top: 0;
|
|
106
|
+
height: 100%;
|
|
107
|
+
background: linear-gradient(90deg,
|
|
108
|
+
var(--ai-slider-fill-start, #3b82f6) 0%,
|
|
109
|
+
var(--ai-slider-fill-end, #60a5fa) 100%
|
|
110
|
+
);
|
|
111
|
+
border-radius: 3px;
|
|
112
|
+
transition: width 0.2s ease;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.slider-thumb {
|
|
116
|
+
position: absolute;
|
|
117
|
+
top: 50%;
|
|
118
|
+
transform: translate(-50%, -50%);
|
|
119
|
+
width: 20px;
|
|
120
|
+
height: 20px;
|
|
121
|
+
background: var(--ai-slider-thumb, #ffffff);
|
|
122
|
+
border: 3px solid var(--ai-slider-thumb-border, #3b82f6);
|
|
123
|
+
border-radius: 50%;
|
|
124
|
+
cursor: grab;
|
|
125
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
126
|
+
transition: transform 0.2s, box-shadow 0.2s;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.slider-thumb:hover {
|
|
130
|
+
transform: translate(-50%, -50%) scale(1.1);
|
|
131
|
+
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.slider-thumb:active,
|
|
135
|
+
.slider-thumb.dragging {
|
|
136
|
+
cursor: grabbing;
|
|
137
|
+
transform: translate(-50%, -50%) scale(1.15);
|
|
138
|
+
box-shadow: 0 4px 16px rgba(59, 130, 246, 0.5);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.slider-thumb:focus-visible {
|
|
142
|
+
outline: 2px solid var(--ai-slider-focus, #60a5fa);
|
|
143
|
+
outline-offset: 2px;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* Range Labels */
|
|
147
|
+
.range-labels {
|
|
148
|
+
display: flex;
|
|
149
|
+
justify-content: space-between;
|
|
150
|
+
margin-top: 4px;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.range-label {
|
|
154
|
+
font-size: 11px;
|
|
155
|
+
color: var(--ai-slider-description, #9ca3af);
|
|
156
|
+
font-variant-numeric: tabular-nums;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* Presets */
|
|
160
|
+
.presets {
|
|
161
|
+
display: flex;
|
|
162
|
+
gap: 8px;
|
|
163
|
+
flex-wrap: wrap;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.preset-button {
|
|
167
|
+
flex: 1;
|
|
168
|
+
min-width: 80px;
|
|
169
|
+
padding: 8px 12px;
|
|
170
|
+
background: var(--ai-slider-preset-bg, #374151);
|
|
171
|
+
color: var(--ai-slider-preset-text, #d1d5db);
|
|
172
|
+
border: 1px solid var(--ai-slider-preset-border, #4b5563);
|
|
173
|
+
border-radius: 8px;
|
|
174
|
+
font-size: 12px;
|
|
175
|
+
font-weight: 600;
|
|
176
|
+
cursor: pointer;
|
|
177
|
+
transition: all 0.2s;
|
|
178
|
+
display: flex;
|
|
179
|
+
flex-direction: column;
|
|
180
|
+
align-items: center;
|
|
181
|
+
gap: 2px;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.preset-button:hover {
|
|
185
|
+
background: var(--ai-slider-preset-hover, #4b5563);
|
|
186
|
+
border-color: var(--ai-slider-preset-hover-border, #60a5fa);
|
|
187
|
+
transform: translateY(-1px);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.preset-button.active {
|
|
191
|
+
background: linear-gradient(135deg, #3b82f6 0%, #60a5fa 100%);
|
|
192
|
+
color: #ffffff;
|
|
193
|
+
border-color: #3b82f6;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.preset-value {
|
|
197
|
+
font-size: 14px;
|
|
198
|
+
font-weight: 700;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.preset-label {
|
|
202
|
+
font-size: 10px;
|
|
203
|
+
opacity: 0.8;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* Input Field */
|
|
207
|
+
.input-container {
|
|
208
|
+
display: flex;
|
|
209
|
+
gap: 8px;
|
|
210
|
+
align-items: center;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.input-label {
|
|
214
|
+
font-size: 12px;
|
|
215
|
+
color: var(--ai-slider-description, #9ca3af);
|
|
216
|
+
flex-shrink: 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.value-input {
|
|
220
|
+
flex: 1;
|
|
221
|
+
padding: 8px 12px;
|
|
222
|
+
background: var(--ai-slider-input-bg, #374151);
|
|
223
|
+
border: 1px solid var(--ai-slider-input-border, #4b5563);
|
|
224
|
+
border-radius: 6px;
|
|
225
|
+
color: var(--ai-slider-text, #f9fafb);
|
|
226
|
+
font-size: 14px;
|
|
227
|
+
font-family: inherit;
|
|
228
|
+
font-variant-numeric: tabular-nums;
|
|
229
|
+
transition: border-color 0.2s;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.value-input:hover {
|
|
233
|
+
border-color: var(--ai-slider-input-hover, #6b7280);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.value-input:focus {
|
|
237
|
+
outline: none;
|
|
238
|
+
border-color: var(--ai-slider-focus, #60a5fa);
|
|
239
|
+
box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.2);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.reset-button {
|
|
243
|
+
padding: 8px 16px;
|
|
244
|
+
background: var(--ai-slider-reset-bg, #374151);
|
|
245
|
+
color: var(--ai-slider-reset-text, #d1d5db);
|
|
246
|
+
border: 1px solid var(--ai-slider-reset-border, #4b5563);
|
|
247
|
+
border-radius: 6px;
|
|
248
|
+
font-size: 12px;
|
|
249
|
+
font-weight: 600;
|
|
250
|
+
cursor: pointer;
|
|
251
|
+
transition: all 0.2s;
|
|
252
|
+
flex-shrink: 0;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.reset-button:hover {
|
|
256
|
+
background: var(--ai-slider-reset-hover, #4b5563);
|
|
257
|
+
border-color: var(--ai-slider-reset-hover-border, #6b7280);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.reset-button:active {
|
|
261
|
+
transform: scale(0.95);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* Visual Variants */
|
|
265
|
+
|
|
266
|
+
/* Minimal variant - clean, no shadows */
|
|
267
|
+
:host([variant="minimal"]) .parameter-slider {
|
|
268
|
+
box-shadow: none;
|
|
269
|
+
border: 1px solid var(--ai-slider-border, #374151);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
:host([variant="minimal"]) .slider-track {
|
|
273
|
+
background: transparent;
|
|
274
|
+
border: 1px solid var(--ai-slider-track-bg, #374151);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* Gradient variant - colorful gradients */
|
|
278
|
+
:host([variant="gradient"]) .slider-fill {
|
|
279
|
+
background: linear-gradient(
|
|
280
|
+
90deg,
|
|
281
|
+
var(--ai-slider-fill-start, #3b82f6),
|
|
282
|
+
var(--ai-slider-fill-end, #60a5fa),
|
|
283
|
+
var(--ai-slider-fill-start, #3b82f6)
|
|
284
|
+
);
|
|
285
|
+
background-size: 200% 100%;
|
|
286
|
+
animation: gradient-shift 3s ease-in-out infinite;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
@keyframes gradient-shift {
|
|
290
|
+
0%, 100% { background-position: 0% 50%; }
|
|
291
|
+
50% { background-position: 100% 50%; }
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/* Override default animation when animation attribute is set */
|
|
295
|
+
:host([animation][variant="gradient"]) .slider-fill {
|
|
296
|
+
animation: none !important;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* Glassmorphic variant - frosted glass effect */
|
|
300
|
+
:host([variant="glassmorphic"]) .parameter-slider {
|
|
301
|
+
background: rgba(31, 41, 55, 0.6);
|
|
302
|
+
backdrop-filter: blur(10px);
|
|
303
|
+
-webkit-backdrop-filter: blur(10px);
|
|
304
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
305
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
:host([variant="glassmorphic"]) .slider-track {
|
|
309
|
+
background: rgba(0, 0, 0, 0.2);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
:host([variant="glassmorphic"]) .slider-fill {
|
|
313
|
+
background: linear-gradient(
|
|
314
|
+
90deg,
|
|
315
|
+
rgba(59, 130, 246, 0.8),
|
|
316
|
+
rgba(96, 165, 250, 0.8)
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/* Animation Effects */
|
|
321
|
+
|
|
322
|
+
/* Striped animation */
|
|
323
|
+
:host([animation="striped"]) .slider-fill {
|
|
324
|
+
background-image:
|
|
325
|
+
linear-gradient(
|
|
326
|
+
45deg,
|
|
327
|
+
rgba(255, 255, 255, 0.2) 25%,
|
|
328
|
+
transparent 25%,
|
|
329
|
+
transparent 50%,
|
|
330
|
+
rgba(255, 255, 255, 0.2) 50%,
|
|
331
|
+
rgba(255, 255, 255, 0.2) 75%,
|
|
332
|
+
transparent 75%,
|
|
333
|
+
transparent
|
|
334
|
+
),
|
|
335
|
+
linear-gradient(to right, var(--ai-slider-fill-start, #3b82f6), var(--ai-slider-fill-end, #3b82f6)) !important;
|
|
336
|
+
background-size: 2rem 2rem, 100% 100% !important;
|
|
337
|
+
animation: slider-stripes 3s linear infinite !important;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
@keyframes slider-stripes {
|
|
341
|
+
0% { background-position: 0 0, 0 0; }
|
|
342
|
+
100% { background-position: 2rem 0, 0 0; }
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/* Pulse animation */
|
|
346
|
+
:host([animation="pulse"]) .slider-fill {
|
|
347
|
+
animation: slider-pulse 4s ease-in-out infinite !important;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
@keyframes slider-pulse {
|
|
351
|
+
0%, 100% { opacity: 1; }
|
|
352
|
+
50% { opacity: 0.3; }
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/* Glow animation */
|
|
356
|
+
:host([animation="glow"]) .slider-fill {
|
|
357
|
+
animation: slider-glow 4s ease-in-out infinite !important;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
@keyframes slider-glow {
|
|
361
|
+
0%, 100% {
|
|
362
|
+
box-shadow: 0 0 5px var(--ai-slider-fill-start, #3b82f6),
|
|
363
|
+
0 0 10px var(--ai-slider-fill-start, #3b82f6);
|
|
364
|
+
}
|
|
365
|
+
50% {
|
|
366
|
+
box-shadow: 0 0 20px var(--ai-slider-fill-start, #3b82f6),
|
|
367
|
+
0 0 35px var(--ai-slider-fill-start, #3b82f6),
|
|
368
|
+
0 0 50px var(--ai-slider-fill-start, #3b82f6);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/* Responsive */
|
|
373
|
+
@media (max-width: 480px) {
|
|
374
|
+
.parameter-slider {
|
|
375
|
+
padding: 12px;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.header {
|
|
379
|
+
flex-direction: column;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.value-display {
|
|
383
|
+
align-self: flex-end;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.presets {
|
|
387
|
+
flex-direction: column;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.preset-button {
|
|
391
|
+
min-width: unset;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/* Size variants */
|
|
396
|
+
:host([size="compact"]) .parameter-slider {
|
|
397
|
+
padding: 8px;
|
|
398
|
+
font-size: 12px;
|
|
399
|
+
gap: 8px;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
:host([size="compact"]) .slider-track {
|
|
403
|
+
height: 4px;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
:host([size="compact"]) .slider-thumb {
|
|
407
|
+
width: 16px;
|
|
408
|
+
height: 16px;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
:host([size="compact"]) .label {
|
|
412
|
+
font-size: 12px;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
:host([size="compact"]) .current-value {
|
|
416
|
+
font-size: 16px;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
:host([size="compact"]) .description {
|
|
420
|
+
font-size: 10px;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
:host([size="large"]) .parameter-slider {
|
|
424
|
+
padding: 16px;
|
|
425
|
+
font-size: 16px;
|
|
426
|
+
gap: 16px;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
:host([size="large"]) .slider-track {
|
|
430
|
+
height: 8px;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
:host([size="large"]) .slider-thumb {
|
|
434
|
+
width: 24px;
|
|
435
|
+
height: 24px;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
:host([size="large"]) .label {
|
|
439
|
+
font-size: 16px;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
:host([size="large"]) .current-value {
|
|
443
|
+
font-size: 20px;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
:host([size="large"]) .description {
|
|
447
|
+
font-size: 14px;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/* Dark mode overrides (already default, but can be customized) */
|
|
451
|
+
@media (prefers-color-scheme: light) {
|
|
452
|
+
.parameter-slider {
|
|
453
|
+
background: #ffffff;
|
|
454
|
+
color: #1f2937;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
.label {
|
|
458
|
+
color: #1f2937;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.description,
|
|
462
|
+
.range-label,
|
|
463
|
+
.input-label {
|
|
464
|
+
color: #6b7280;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
.slider-track {
|
|
468
|
+
background: #e5e7eb;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.slider-track:hover {
|
|
472
|
+
background: #d1d5db;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.preset-button {
|
|
476
|
+
background: #f3f4f6;
|
|
477
|
+
color: #374151;
|
|
478
|
+
border-color: #d1d5db;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
.preset-button:hover {
|
|
482
|
+
background: #e5e7eb;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
.value-input,
|
|
486
|
+
.reset-button {
|
|
487
|
+
background: #f9fafb;
|
|
488
|
+
color: #1f2937;
|
|
489
|
+
border-color: #d1d5db;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
</style>
|
|
493
|
+
`;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset configuration for common values
|
|
3
|
+
*/
|
|
4
|
+
export interface PresetValue {
|
|
5
|
+
value: number;
|
|
6
|
+
label: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Configuration options for ParameterSlider
|
|
12
|
+
*/
|
|
13
|
+
export interface ParameterSliderConfig {
|
|
14
|
+
/** Parameter label */
|
|
15
|
+
label?: string;
|
|
16
|
+
|
|
17
|
+
/** Minimum value */
|
|
18
|
+
min?: number;
|
|
19
|
+
|
|
20
|
+
/** Maximum value */
|
|
21
|
+
max?: number;
|
|
22
|
+
|
|
23
|
+
/** Current value */
|
|
24
|
+
value?: number;
|
|
25
|
+
|
|
26
|
+
/** Default value to reset to */
|
|
27
|
+
defaultValue?: number;
|
|
28
|
+
|
|
29
|
+
/** Step size for slider */
|
|
30
|
+
step?: number;
|
|
31
|
+
|
|
32
|
+
/** Number of decimal places to display */
|
|
33
|
+
decimals?: number;
|
|
34
|
+
|
|
35
|
+
/** Parameter description/help text */
|
|
36
|
+
description?: string;
|
|
37
|
+
|
|
38
|
+
/** Show preset value buttons */
|
|
39
|
+
showPresets?: boolean;
|
|
40
|
+
|
|
41
|
+
/** Preset values with labels */
|
|
42
|
+
presets?: PresetValue[];
|
|
43
|
+
|
|
44
|
+
/** Show manual input field */
|
|
45
|
+
showInput?: boolean;
|
|
46
|
+
|
|
47
|
+
/** Show reset button */
|
|
48
|
+
showReset?: boolean;
|
|
49
|
+
|
|
50
|
+
/** Show range labels (min/max) */
|
|
51
|
+
showRangeLabels?: boolean;
|
|
52
|
+
|
|
53
|
+
/** Unit suffix (e.g., '%', 'tokens') */
|
|
54
|
+
unit?: string;
|
|
55
|
+
|
|
56
|
+
/** Enable automatic cursor state changes based on component state */
|
|
57
|
+
cursorFeedback?: boolean;
|
|
58
|
+
|
|
59
|
+
/** Component size variant */
|
|
60
|
+
size?: 'compact' | 'default' | 'large';
|
|
61
|
+
|
|
62
|
+
/** Visual style variant */
|
|
63
|
+
variant?: 'default' | 'minimal' | 'gradient' | 'glassmorphic';
|
|
64
|
+
|
|
65
|
+
/** Animation style */
|
|
66
|
+
animation?: 'none' | 'striped' | 'pulse' | 'glow';
|
|
67
|
+
|
|
68
|
+
/** Disabled state */
|
|
69
|
+
disabled?: boolean;
|
|
70
|
+
|
|
71
|
+
/** Enable debug logging */
|
|
72
|
+
debug?: boolean;
|
|
73
|
+
|
|
74
|
+
/** Additional CSS class */
|
|
75
|
+
className?: string;
|
|
76
|
+
|
|
77
|
+
/** ARIA label for accessibility */
|
|
78
|
+
ariaLabel?: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Internal state of the ParameterSlider
|
|
83
|
+
*/
|
|
84
|
+
export interface ParameterSliderState {
|
|
85
|
+
currentValue: number;
|
|
86
|
+
isDragging: boolean;
|
|
87
|
+
isFocused: boolean;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Event detail for value change
|
|
92
|
+
*/
|
|
93
|
+
export interface ValueChangeEvent {
|
|
94
|
+
value: number;
|
|
95
|
+
previousValue: number;
|
|
96
|
+
source: 'slider' | 'input' | 'preset' | 'reset';
|
|
97
|
+
timestamp: number;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Event detail for preset selection
|
|
102
|
+
*/
|
|
103
|
+
export interface PresetSelectEvent {
|
|
104
|
+
preset: PresetValue;
|
|
105
|
+
previousValue: number;
|
|
106
|
+
timestamp: number;
|
|
107
|
+
}
|