@ytspar/devbar 1.4.0 → 1.4.1

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 (55) hide show
  1. package/dist/constants.d.ts +8 -0
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +10 -0
  4. package/dist/constants.js.map +1 -1
  5. package/dist/modules/rendering/buttons.d.ts +19 -0
  6. package/dist/modules/rendering/buttons.d.ts.map +1 -0
  7. package/dist/modules/rendering/buttons.js +369 -0
  8. package/dist/modules/rendering/buttons.js.map +1 -0
  9. package/dist/modules/rendering/collapsed.d.ts +6 -0
  10. package/dist/modules/rendering/collapsed.d.ts.map +1 -0
  11. package/dist/modules/rendering/collapsed.js +124 -0
  12. package/dist/modules/rendering/collapsed.js.map +1 -0
  13. package/dist/modules/rendering/common.d.ts +21 -0
  14. package/dist/modules/rendering/common.d.ts.map +1 -0
  15. package/dist/modules/rendering/common.js +60 -0
  16. package/dist/modules/rendering/common.js.map +1 -0
  17. package/dist/modules/rendering/compact.d.ts +6 -0
  18. package/dist/modules/rendering/compact.d.ts.map +1 -0
  19. package/dist/modules/rendering/compact.js +107 -0
  20. package/dist/modules/rendering/compact.js.map +1 -0
  21. package/dist/modules/rendering/console.d.ts +7 -0
  22. package/dist/modules/rendering/console.d.ts.map +1 -0
  23. package/dist/modules/rendering/console.js +78 -0
  24. package/dist/modules/rendering/console.js.map +1 -0
  25. package/dist/modules/rendering/expanded.d.ts +13 -0
  26. package/dist/modules/rendering/expanded.d.ts.map +1 -0
  27. package/dist/modules/rendering/expanded.js +439 -0
  28. package/dist/modules/rendering/expanded.js.map +1 -0
  29. package/dist/modules/rendering/index.d.ts +22 -0
  30. package/dist/modules/rendering/index.d.ts.map +1 -0
  31. package/dist/modules/rendering/index.js +109 -0
  32. package/dist/modules/rendering/index.js.map +1 -0
  33. package/dist/modules/rendering/modals.d.ts +9 -0
  34. package/dist/modules/rendering/modals.d.ts.map +1 -0
  35. package/dist/modules/rendering/modals.js +1068 -0
  36. package/dist/modules/rendering/modals.js.map +1 -0
  37. package/dist/modules/rendering/settings.d.ts +6 -0
  38. package/dist/modules/rendering/settings.d.ts.map +1 -0
  39. package/dist/modules/rendering/settings.js +605 -0
  40. package/dist/modules/rendering/settings.js.map +1 -0
  41. package/dist/modules/rendering.d.ts +15 -16
  42. package/dist/modules/rendering.d.ts.map +1 -1
  43. package/dist/modules/rendering.js +16 -2902
  44. package/dist/modules/rendering.js.map +1 -1
  45. package/dist/modules/tooltips.d.ts +6 -4
  46. package/dist/modules/tooltips.d.ts.map +1 -1
  47. package/dist/modules/tooltips.js +121 -145
  48. package/dist/modules/tooltips.js.map +1 -1
  49. package/dist/ui/buttons.js +9 -9
  50. package/dist/ui/buttons.js.map +1 -1
  51. package/dist/ui/cards.js +3 -3
  52. package/dist/ui/cards.js.map +1 -1
  53. package/dist/ui/modals.js +7 -7
  54. package/dist/ui/modals.js.map +1 -1
  55. package/package.json +2 -2
@@ -0,0 +1,605 @@
1
+ /**
2
+ * Settings popover rendering for the DevBar.
3
+ */
4
+ import { CSS_COLORS, FONT_MONO, withAlpha } from '../../constants.js';
5
+ import { ACCENT_COLOR_PRESETS, DEFAULT_SETTINGS } from '../../settings.js';
6
+ import { createCloseButton, createStyledButton } from '../../ui/index.js';
7
+ import { setThemeMode } from '../theme.js';
8
+ export function renderSettingsPopover(state) {
9
+ const { position, accentColor } = state.options;
10
+ // Transparent overlay for click-outside-to-close (consistent with other modals)
11
+ const overlay = document.createElement('div');
12
+ overlay.setAttribute('data-devbar', 'true');
13
+ overlay.setAttribute('data-devbar-overlay', 'true');
14
+ Object.assign(overlay.style, {
15
+ position: 'fixed',
16
+ top: '0',
17
+ left: '0',
18
+ right: '0',
19
+ bottom: '0',
20
+ zIndex: '10003',
21
+ });
22
+ overlay.onclick = (e) => {
23
+ if (e.target === overlay) {
24
+ state.showSettingsPopover = false;
25
+ state.render();
26
+ }
27
+ };
28
+ const popover = document.createElement('div');
29
+ popover.setAttribute('data-devbar', 'true');
30
+ // Position: centered over the devbar on desktop, centered on screen on mobile
31
+ const isTop = position.startsWith('top');
32
+ const popoverWidth = 480;
33
+ const edgePad = 16;
34
+ let leftPx;
35
+ if (state.container && window.innerWidth > 640) {
36
+ const barRect = state.container.getBoundingClientRect();
37
+ const barCenter = barRect.left + barRect.width / 2;
38
+ leftPx = Math.max(edgePad, Math.min(barCenter - popoverWidth / 2, window.innerWidth - popoverWidth - edgePad));
39
+ }
40
+ else {
41
+ leftPx = Math.max(edgePad, (window.innerWidth - popoverWidth) / 2);
42
+ }
43
+ Object.assign(popover.style, {
44
+ position: 'fixed',
45
+ [isTop ? 'top' : 'bottom']: '70px',
46
+ left: `${leftPx}px`,
47
+ zIndex: '10003',
48
+ backgroundColor: 'var(--devbar-color-bg-elevated)',
49
+ border: `1px solid ${accentColor}`,
50
+ borderRadius: '8px',
51
+ boxShadow: `0 8px 32px rgba(0, 0, 0, 0.5), 0 0 0 1px ${withAlpha(accentColor, 20)}`,
52
+ backdropFilter: 'blur(8px)',
53
+ WebkitBackdropFilter: 'blur(8px)',
54
+ width: `${popoverWidth}px`,
55
+ maxWidth: 'calc(100vw - 32px)',
56
+ maxHeight: 'calc(100vh - 100px)',
57
+ overflowY: 'auto',
58
+ fontFamily: FONT_MONO,
59
+ });
60
+ popover.appendChild(createSettingsHeader(state));
61
+ // Two-column grid for settings sections (collapses to 1 column on mobile via CSS)
62
+ const grid = document.createElement('div');
63
+ grid.className = 'devbar-settings-grid';
64
+ Object.assign(grid.style, {
65
+ display: 'grid',
66
+ gridTemplateColumns: '1fr 1fr',
67
+ });
68
+ // Left column: Theme + Display
69
+ const color = CSS_COLORS.textSecondary;
70
+ const leftCol = document.createElement('div');
71
+ Object.assign(leftCol.style, { borderRight: `1px solid ${withAlpha(color, 13)}` });
72
+ leftCol.appendChild(createThemeSection(state));
73
+ leftCol.appendChild(createDisplaySection(state));
74
+ grid.appendChild(leftCol);
75
+ // Right column: Features + Metrics
76
+ const rightCol = document.createElement('div');
77
+ rightCol.appendChild(createFeaturesSection(state));
78
+ rightCol.appendChild(createMetricsSection(state));
79
+ grid.appendChild(rightCol);
80
+ popover.appendChild(grid);
81
+ popover.appendChild(createResetSection(state));
82
+ overlay.appendChild(popover);
83
+ state.overlayElement = overlay;
84
+ document.body.appendChild(overlay);
85
+ }
86
+ // ============================================================================
87
+ // Settings Popover Section Builders
88
+ // ============================================================================
89
+ function createSettingsHeader(state) {
90
+ const { accentColor } = state.options;
91
+ const header = document.createElement('div');
92
+ Object.assign(header.style, {
93
+ display: 'flex',
94
+ alignItems: 'center',
95
+ justifyContent: 'space-between',
96
+ padding: '10px 14px',
97
+ borderBottom: `1px solid ${withAlpha(accentColor, 19)}`,
98
+ position: 'sticky',
99
+ top: '0',
100
+ backgroundColor: 'var(--devbar-color-bg-elevated)',
101
+ zIndex: '1',
102
+ });
103
+ const title = document.createElement('span');
104
+ Object.assign(title.style, { color: accentColor, fontSize: '0.75rem', fontWeight: '600' });
105
+ title.textContent = 'Settings';
106
+ header.appendChild(title);
107
+ header.appendChild(createCloseButton(() => {
108
+ state.showSettingsPopover = false;
109
+ state.render();
110
+ }));
111
+ return header;
112
+ }
113
+ function createThemeSection(state) {
114
+ const { accentColor } = state.options;
115
+ const themeSection = createSettingsSection('Theme');
116
+ const themeOptions = document.createElement('div');
117
+ Object.assign(themeOptions.style, { display: 'flex', gap: '6px' });
118
+ const themeModes = ['system', 'dark', 'light'];
119
+ themeModes.forEach((mode) => {
120
+ const btn = createSettingsRadioButton({
121
+ label: mode,
122
+ isActive: state.themeMode === mode,
123
+ accentColor,
124
+ onClick: () => setThemeMode(state, mode),
125
+ });
126
+ btn.style.textTransform = 'capitalize';
127
+ themeOptions.appendChild(btn);
128
+ });
129
+ themeSection.appendChild(themeOptions);
130
+ return themeSection;
131
+ }
132
+ function createDisplaySection(state) {
133
+ const { accentColor } = state.options;
134
+ const color = CSS_COLORS.textSecondary;
135
+ const displaySection = createSettingsSection('Display');
136
+ // Position mini-map selector
137
+ const positionRow = document.createElement('div');
138
+ Object.assign(positionRow.style, { marginBottom: '10px' });
139
+ const posLabel = document.createElement('div');
140
+ Object.assign(posLabel.style, {
141
+ color: CSS_COLORS.text,
142
+ fontSize: '0.6875rem',
143
+ marginBottom: '6px',
144
+ });
145
+ posLabel.textContent = 'Position';
146
+ positionRow.appendChild(posLabel);
147
+ // Mini-map container (represents screen with ~16:10 aspect ratio)
148
+ const miniMap = document.createElement('div');
149
+ Object.assign(miniMap.style, {
150
+ position: 'relative',
151
+ width: '100%',
152
+ height: '70px',
153
+ backgroundColor: 'var(--devbar-color-bg-input)',
154
+ border: `1px solid ${withAlpha(color, 19)}`,
155
+ borderRadius: '4px',
156
+ });
157
+ // Position indicator styles - rectangular bars representing DevBar
158
+ const positionConfigs = [
159
+ { value: 'top-left', style: { top: '6px', left: '6px' }, title: 'Top Left' },
160
+ { value: 'top-right', style: { top: '6px', right: '6px' }, title: 'Top Right' },
161
+ { value: 'bottom-left', style: { bottom: '6px', left: '6px' }, title: 'Bottom Left' },
162
+ { value: 'bottom-right', style: { bottom: '6px', right: '6px' }, title: 'Bottom Right' },
163
+ {
164
+ value: 'bottom-center',
165
+ style: { bottom: '6px', left: '50%', transform: 'translateX(-50%)' },
166
+ title: 'Bottom Center',
167
+ },
168
+ ];
169
+ positionConfigs.forEach(({ value, style, title: posTitle }) => {
170
+ const indicator = document.createElement('button');
171
+ indicator.setAttribute('data-position', value);
172
+ const isActive = state.options.position === value;
173
+ Object.assign(indicator.style, {
174
+ position: 'absolute',
175
+ width: '24px',
176
+ height: '6px',
177
+ backgroundColor: isActive ? accentColor : CSS_COLORS.textMuted,
178
+ border: `1px solid ${isActive ? accentColor : CSS_COLORS.textMuted}`,
179
+ borderRadius: '2px',
180
+ cursor: 'pointer',
181
+ padding: '0',
182
+ transition: 'all 150ms',
183
+ boxShadow: isActive ? `0 0 8px ${withAlpha(accentColor, 38)}` : 'none',
184
+ opacity: isActive ? '1' : '0.5',
185
+ ...style,
186
+ });
187
+ indicator.title = posTitle;
188
+ indicator.onclick = () => {
189
+ state.options.position = value;
190
+ state.settingsManager.saveSettings({ position: value });
191
+ state.render();
192
+ };
193
+ // Hover effect
194
+ indicator.onmouseenter = () => {
195
+ if (!isActive) {
196
+ indicator.style.backgroundColor = accentColor;
197
+ indicator.style.borderColor = accentColor;
198
+ indicator.style.boxShadow = `0 0 6px ${withAlpha(accentColor, 25)}`;
199
+ indicator.style.opacity = '1';
200
+ }
201
+ };
202
+ indicator.onmouseleave = () => {
203
+ if (!isActive) {
204
+ indicator.style.backgroundColor = CSS_COLORS.textMuted;
205
+ indicator.style.borderColor = CSS_COLORS.textMuted;
206
+ indicator.style.boxShadow = 'none';
207
+ indicator.style.opacity = '0.5';
208
+ }
209
+ };
210
+ miniMap.appendChild(indicator);
211
+ });
212
+ positionRow.appendChild(miniMap);
213
+ displaySection.appendChild(positionRow);
214
+ // Compact mode toggle
215
+ displaySection.appendChild(createToggleRow('Compact Mode', state.compactMode, accentColor, () => {
216
+ state.toggleCompactMode();
217
+ }));
218
+ // Keyboard shortcut hint
219
+ const shortcutHint = document.createElement('div');
220
+ Object.assign(shortcutHint.style, {
221
+ color: CSS_COLORS.textMuted,
222
+ fontSize: '0.5625rem',
223
+ marginTop: '2px',
224
+ marginBottom: '8px',
225
+ });
226
+ shortcutHint.textContent = 'Keyboard: Cmd or Ctrl+Shift+M';
227
+ displaySection.appendChild(shortcutHint);
228
+ // Accent color
229
+ const accentRow = document.createElement('div');
230
+ Object.assign(accentRow.style, { marginBottom: '6px' });
231
+ const accentLabel = document.createElement('div');
232
+ Object.assign(accentLabel.style, {
233
+ color: CSS_COLORS.text,
234
+ fontSize: '0.6875rem',
235
+ marginBottom: '6px',
236
+ });
237
+ accentLabel.textContent = 'Accent Color';
238
+ accentRow.appendChild(accentLabel);
239
+ const colorSwatches = document.createElement('div');
240
+ Object.assign(colorSwatches.style, {
241
+ display: 'flex',
242
+ gap: '6px',
243
+ flexWrap: 'wrap',
244
+ });
245
+ ACCENT_COLOR_PRESETS.forEach(({ name, value }) => {
246
+ const swatch = document.createElement('button');
247
+ const isActive = state.options.accentColor === value;
248
+ Object.assign(swatch.style, {
249
+ width: '24px',
250
+ height: '24px',
251
+ borderRadius: '50%',
252
+ backgroundColor: value,
253
+ border: isActive ? '2px solid #fff' : '2px solid transparent',
254
+ cursor: 'pointer',
255
+ transition: 'all 150ms',
256
+ boxShadow: isActive ? `0 0 8px ${value}` : 'none',
257
+ });
258
+ swatch.title = name;
259
+ swatch.onclick = () => {
260
+ state.options.accentColor = value;
261
+ state.settingsManager.saveSettings({ accentColor: value });
262
+ state.render();
263
+ };
264
+ colorSwatches.appendChild(swatch);
265
+ });
266
+ accentRow.appendChild(colorSwatches);
267
+ displaySection.appendChild(accentRow);
268
+ // Screenshot quality slider
269
+ const qualityRow = document.createElement('div');
270
+ Object.assign(qualityRow.style, { marginTop: '8px' });
271
+ const qualityHeader = document.createElement('div');
272
+ Object.assign(qualityHeader.style, {
273
+ display: 'flex',
274
+ alignItems: 'center',
275
+ justifyContent: 'space-between',
276
+ marginBottom: '6px',
277
+ });
278
+ const qualityLabel = document.createElement('span');
279
+ Object.assign(qualityLabel.style, {
280
+ color: CSS_COLORS.text,
281
+ fontSize: '0.6875rem',
282
+ });
283
+ qualityLabel.textContent = 'Screenshot Quality';
284
+ qualityHeader.appendChild(qualityLabel);
285
+ const qualityValue = document.createElement('span');
286
+ Object.assign(qualityValue.style, {
287
+ color: accentColor,
288
+ fontSize: '0.6875rem',
289
+ fontFamily: 'monospace',
290
+ minWidth: '28px',
291
+ textAlign: 'right',
292
+ });
293
+ const quality = state.options.screenshotQuality;
294
+ qualityValue.textContent = quality.toFixed(2);
295
+ qualityHeader.appendChild(qualityValue);
296
+ qualityRow.appendChild(qualityHeader);
297
+ // Wrapper: positions the visible track line behind the transparent range input
298
+ const sliderWrap = document.createElement('div');
299
+ Object.assign(sliderWrap.style, { position: 'relative', height: '20px' });
300
+ // Visible track rail (a real div, always renders)
301
+ const track = document.createElement('div');
302
+ Object.assign(track.style, {
303
+ position: 'absolute',
304
+ top: '50%',
305
+ left: '0',
306
+ right: '0',
307
+ height: '2px',
308
+ transform: 'translateY(-50%)',
309
+ borderRadius: '1px',
310
+ background: withAlpha(color, 25),
311
+ pointerEvents: 'none',
312
+ });
313
+ // Filled portion of the track
314
+ const trackFill = document.createElement('div');
315
+ Object.assign(trackFill.style, {
316
+ height: '100%',
317
+ width: `${quality * 100}%`,
318
+ borderRadius: '1px',
319
+ background: accentColor,
320
+ });
321
+ track.appendChild(trackFill);
322
+ sliderWrap.appendChild(track);
323
+ const qualitySlider = document.createElement('input');
324
+ qualitySlider.type = 'range';
325
+ qualitySlider.min = '0';
326
+ qualitySlider.max = '1';
327
+ qualitySlider.step = '0.01';
328
+ qualitySlider.value = String(quality);
329
+ Object.assign(qualitySlider.style, {
330
+ position: 'absolute',
331
+ top: '0',
332
+ left: '0',
333
+ width: '100%',
334
+ height: '100%',
335
+ appearance: 'none',
336
+ WebkitAppearance: 'none',
337
+ background: 'transparent',
338
+ outline: 'none',
339
+ cursor: 'pointer',
340
+ margin: '0',
341
+ });
342
+ // Style the thumb via a scoped style element
343
+ const sliderId = `devbar-quality-${Date.now()}`;
344
+ qualitySlider.id = sliderId;
345
+ const sliderStyle = document.createElement('style');
346
+ sliderStyle.textContent = [
347
+ `#${sliderId}::-webkit-slider-thumb {`,
348
+ ` -webkit-appearance: none;`,
349
+ ` width: 12px; height: 12px;`,
350
+ ` border-radius: 50%;`,
351
+ ` background: ${accentColor};`,
352
+ ` border: 2px solid ${CSS_COLORS.bg};`,
353
+ ` box-shadow: 0 0 4px ${withAlpha(accentColor, 50)};`,
354
+ ` cursor: grab;`,
355
+ `}`,
356
+ `#${sliderId}::-webkit-slider-thumb:active { cursor: grabbing; }`,
357
+ `#${sliderId}::-moz-range-thumb {`,
358
+ ` width: 12px; height: 12px;`,
359
+ ` border-radius: 50%;`,
360
+ ` background: ${accentColor};`,
361
+ ` border: 2px solid ${CSS_COLORS.bg};`,
362
+ ` box-shadow: 0 0 4px ${withAlpha(accentColor, 50)};`,
363
+ ` cursor: grab;`,
364
+ `}`,
365
+ `#${sliderId}::-webkit-slider-runnable-track { background: transparent; }`,
366
+ `#${sliderId}::-moz-range-track { background: transparent; }`,
367
+ ].join('\n');
368
+ sliderWrap.appendChild(sliderStyle);
369
+ qualitySlider.oninput = () => {
370
+ const val = parseFloat(qualitySlider.value);
371
+ qualityValue.textContent = val.toFixed(2);
372
+ trackFill.style.width = `${val * 100}%`;
373
+ state.options.screenshotQuality = val;
374
+ };
375
+ qualitySlider.onchange = () => {
376
+ state.settingsManager.saveSettings({ screenshotQuality: state.options.screenshotQuality });
377
+ };
378
+ sliderWrap.appendChild(qualitySlider);
379
+ qualityRow.appendChild(sliderWrap);
380
+ displaySection.appendChild(qualityRow);
381
+ return displaySection;
382
+ }
383
+ function createFeaturesSection(state) {
384
+ const { accentColor } = state.options;
385
+ const featuresSection = createSettingsSection('Features');
386
+ featuresSection.appendChild(createToggleRow('Screenshot Button', state.options.showScreenshot, accentColor, () => {
387
+ state.options.showScreenshot = !state.options.showScreenshot;
388
+ state.settingsManager.saveSettings({ showScreenshot: state.options.showScreenshot });
389
+ state.render();
390
+ }));
391
+ featuresSection.appendChild(createToggleRow('Console Badges', state.options.showConsoleBadges, accentColor, () => {
392
+ state.options.showConsoleBadges = !state.options.showConsoleBadges;
393
+ state.settingsManager.saveSettings({ showConsoleBadges: state.options.showConsoleBadges });
394
+ state.render();
395
+ }));
396
+ featuresSection.appendChild(createToggleRow('Tooltips', state.options.showTooltips, accentColor, () => {
397
+ state.options.showTooltips = !state.options.showTooltips;
398
+ state.settingsManager.saveSettings({ showTooltips: state.options.showTooltips });
399
+ state.render();
400
+ }));
401
+ // Save location selector
402
+ const saveLocRow = document.createElement('div');
403
+ Object.assign(saveLocRow.style, { marginBottom: '6px' });
404
+ const saveLocLabel = document.createElement('div');
405
+ Object.assign(saveLocLabel.style, {
406
+ color: CSS_COLORS.text,
407
+ fontSize: '0.6875rem',
408
+ marginBottom: '6px',
409
+ });
410
+ saveLocLabel.textContent = 'Save Method';
411
+ saveLocRow.appendChild(saveLocLabel);
412
+ const saveLocOptions = document.createElement('div');
413
+ Object.assign(saveLocOptions.style, { display: 'flex', gap: '6px' });
414
+ const saveLocChoices = [
415
+ { value: 'auto', label: 'Auto' },
416
+ { value: 'download', label: 'Download' },
417
+ { value: 'local', label: 'Local' },
418
+ ];
419
+ saveLocChoices.forEach(({ value, label }) => {
420
+ const isLocalDisabled = value === 'local' && !state.sweetlinkConnected;
421
+ const btn = createSettingsRadioButton({
422
+ label,
423
+ isActive: state.options.saveLocation === value,
424
+ accentColor,
425
+ disabled: isLocalDisabled,
426
+ disabledTitle: 'Sweetlink not connected',
427
+ onClick: () => {
428
+ state.options.saveLocation = value;
429
+ state.settingsManager.saveSettings({ saveLocation: value });
430
+ state.render();
431
+ },
432
+ });
433
+ saveLocOptions.appendChild(btn);
434
+ });
435
+ saveLocRow.appendChild(saveLocOptions);
436
+ featuresSection.appendChild(saveLocRow);
437
+ return featuresSection;
438
+ }
439
+ function createMetricsSection(state) {
440
+ const { accentColor } = state.options;
441
+ const metricsSection = createSettingsSection('Metrics');
442
+ const metricsToggles = [
443
+ { key: 'breakpoint', label: 'Breakpoint' },
444
+ { key: 'fcp', label: 'FCP' },
445
+ { key: 'lcp', label: 'LCP' },
446
+ { key: 'cls', label: 'CLS' },
447
+ { key: 'inp', label: 'INP' },
448
+ { key: 'pageSize', label: 'Page Size' },
449
+ ];
450
+ metricsToggles.forEach(({ key, label }) => {
451
+ const currentValue = state.options.showMetrics[key] ?? true;
452
+ metricsSection.appendChild(createToggleRow(label, currentValue, accentColor, () => {
453
+ state.options.showMetrics[key] = !state.options.showMetrics[key];
454
+ state.settingsManager.saveSettings({
455
+ showMetrics: {
456
+ breakpoint: state.options.showMetrics.breakpoint ?? true,
457
+ fcp: state.options.showMetrics.fcp ?? true,
458
+ lcp: state.options.showMetrics.lcp ?? true,
459
+ cls: state.options.showMetrics.cls ?? true,
460
+ inp: state.options.showMetrics.inp ?? true,
461
+ pageSize: state.options.showMetrics.pageSize ?? true,
462
+ },
463
+ });
464
+ state.render();
465
+ }));
466
+ });
467
+ return metricsSection;
468
+ }
469
+ function createResetSection(state) {
470
+ const color = CSS_COLORS.textSecondary;
471
+ const resetSection = document.createElement('div');
472
+ Object.assign(resetSection.style, {
473
+ padding: '10px 14px',
474
+ borderTop: `1px solid ${withAlpha(color, 13)}`,
475
+ });
476
+ const resetBtn = createStyledButton({
477
+ color: CSS_COLORS.textMuted,
478
+ text: 'Reset to Defaults',
479
+ padding: '6px 12px',
480
+ fontSize: '0.625rem',
481
+ });
482
+ Object.assign(resetBtn.style, {
483
+ width: '100%',
484
+ justifyContent: 'center',
485
+ border: `1px solid transparent`,
486
+ });
487
+ const resetColor = CSS_COLORS.textMuted;
488
+ resetBtn.onmouseenter = () => {
489
+ resetBtn.style.border = `1px solid ${resetColor}`;
490
+ resetBtn.style.backgroundColor = withAlpha(resetColor, 6);
491
+ };
492
+ resetBtn.onmouseleave = () => {
493
+ resetBtn.style.border = '1px solid transparent';
494
+ resetBtn.style.backgroundColor = 'transparent';
495
+ };
496
+ resetBtn.onclick = () => {
497
+ state.settingsManager.resetToDefaults();
498
+ const defaults = DEFAULT_SETTINGS;
499
+ state.applySettings(defaults);
500
+ };
501
+ resetSection.appendChild(resetBtn);
502
+ return resetSection;
503
+ }
504
+ // ============================================================================
505
+ // Settings UI Helpers
506
+ // ============================================================================
507
+ function createSettingsSection(title, hasBorder = true) {
508
+ const color = CSS_COLORS.textSecondary;
509
+ const section = document.createElement('div');
510
+ Object.assign(section.style, {
511
+ padding: '10px 14px',
512
+ borderBottom: hasBorder ? `1px solid ${withAlpha(color, 13)}` : 'none',
513
+ });
514
+ const sectionTitle = document.createElement('div');
515
+ Object.assign(sectionTitle.style, {
516
+ color,
517
+ fontSize: '0.625rem',
518
+ textTransform: 'uppercase',
519
+ letterSpacing: '0.1em',
520
+ marginBottom: '8px',
521
+ });
522
+ sectionTitle.textContent = title;
523
+ section.appendChild(sectionTitle);
524
+ return section;
525
+ }
526
+ function createSettingsRadioButton(options) {
527
+ const { label, isActive, accentColor, disabled, disabledTitle, onClick } = options;
528
+ const color = CSS_COLORS.textSecondary;
529
+ const btn = document.createElement('button');
530
+ Object.assign(btn.style, {
531
+ padding: '4px 10px',
532
+ backgroundColor: isActive ? withAlpha(accentColor, 13) : 'transparent',
533
+ border: `1px solid ${isActive ? accentColor : 'transparent'}`,
534
+ borderRadius: '4px',
535
+ color: isActive ? accentColor : color,
536
+ fontFamily: FONT_MONO,
537
+ fontSize: '0.625rem',
538
+ cursor: disabled ? 'not-allowed' : 'pointer',
539
+ transition: 'all 150ms',
540
+ opacity: disabled ? '0.5' : '1',
541
+ });
542
+ btn.textContent = label;
543
+ if (disabled) {
544
+ if (disabledTitle)
545
+ btn.title = disabledTitle;
546
+ }
547
+ else if (!isActive) {
548
+ btn.onmouseenter = () => {
549
+ btn.style.borderColor = `${color}`;
550
+ btn.style.backgroundColor = withAlpha(color, 6);
551
+ };
552
+ btn.onmouseleave = () => {
553
+ btn.style.borderColor = 'transparent';
554
+ btn.style.backgroundColor = 'transparent';
555
+ };
556
+ }
557
+ btn.onclick = () => {
558
+ if (!disabled)
559
+ onClick();
560
+ };
561
+ return btn;
562
+ }
563
+ function createToggleRow(label, checked, accentColor, onChange) {
564
+ const row = document.createElement('div');
565
+ Object.assign(row.style, {
566
+ display: 'flex',
567
+ alignItems: 'center',
568
+ justifyContent: 'space-between',
569
+ marginBottom: '6px',
570
+ });
571
+ const labelEl = document.createElement('span');
572
+ Object.assign(labelEl.style, { color: CSS_COLORS.text, fontSize: '0.6875rem' });
573
+ labelEl.textContent = label;
574
+ row.appendChild(labelEl);
575
+ const toggle = document.createElement('button');
576
+ Object.assign(toggle.style, {
577
+ width: '32px',
578
+ height: '18px',
579
+ borderRadius: '9px',
580
+ border: `1px solid ${checked ? accentColor : CSS_COLORS.border}`,
581
+ backgroundColor: checked ? accentColor : CSS_COLORS.bgInput,
582
+ position: 'relative',
583
+ cursor: 'pointer',
584
+ transition: 'all 150ms',
585
+ flexShrink: '0',
586
+ boxSizing: 'border-box',
587
+ });
588
+ const knob = document.createElement('span');
589
+ Object.assign(knob.style, {
590
+ position: 'absolute',
591
+ top: '2px',
592
+ left: checked ? '14px' : '2px',
593
+ width: '12px',
594
+ height: '12px',
595
+ borderRadius: '50%',
596
+ backgroundColor: checked ? '#fff' : CSS_COLORS.textMuted,
597
+ boxShadow: '0 1px 2px rgba(0,0,0,0.2)',
598
+ transition: 'left 150ms, background-color 150ms',
599
+ });
600
+ toggle.appendChild(knob);
601
+ toggle.onclick = onChange;
602
+ row.appendChild(toggle);
603
+ return row;
604
+ }
605
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/modules/rendering/settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAEhD,gFAAgF;IAChF,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;QAC3B,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC;IACH,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACzB,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC;YAClC,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAE5C,8EAA8E;IAC9E,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,GAAG,CAAC;IACzB,MAAM,OAAO,GAAG,EAAE,CAAC;IAEnB,IAAI,MAAc,CAAC;IACnB,IAAI,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QACnD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,YAAY,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC;IACjH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;QAC3B,QAAQ,EAAE,OAAO;QACjB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM;QAClC,IAAI,EAAE,GAAG,MAAM,IAAI;QACnB,MAAM,EAAE,OAAO;QACf,eAAe,EAAE,iCAAiC;QAClD,MAAM,EAAE,aAAa,WAAW,EAAE;QAClC,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,4CAA4C,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE;QACnF,cAAc,EAAE,WAAW;QAC3B,oBAAoB,EAAE,WAAW;QACjC,KAAK,EAAE,GAAG,YAAY,IAAI;QAC1B,QAAQ,EAAE,oBAAoB;QAC9B,SAAS,EAAE,qBAAqB;QAChC,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,SAAS;KACtB,CAAC,CAAC;IAEH,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEjD,kFAAkF;IAClF,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC;IACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,MAAM;QACf,mBAAmB,EAAE,SAAS;KAC/B,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAE1B,mCAAmC;IACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE3B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/C,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAE/E,SAAS,oBAAoB,CAAC,KAAkB;IAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAEtC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC1B,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,OAAO,EAAE,WAAW;QACpB,YAAY,EAAE,aAAa,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE;QACvD,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,GAAG;QACR,eAAe,EAAE,iCAAiC;QAClD,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3F,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC;IAC/B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAE1B,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE;QACxC,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC,CAAC;IAEJ,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAEtC,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,yBAAyB,CAAC;YACpC,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI;YAClC,WAAW;YACX,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;SACzC,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC;QACvC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEvC,OAAO,YAAY,CAAC;AACtB,CAAC;AAID,SAAS,oBAAoB,CAAC,KAAkB;IAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACtC,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC;IAEvC,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAExD,6BAA6B;IAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE;QAC5B,KAAK,EAAE,UAAU,CAAC,IAAI;QACtB,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAElC,kEAAkE;IAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;QAC3B,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,eAAe,EAAE,8BAA8B;QAC/C,MAAM,EAAE,aAAa,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE;QAC3C,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,mEAAmE;IACnE,MAAM,eAAe,GAIhB;QACH,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QAC5E,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;QAC/E,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;QACrF,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;QACxF;YACE,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE;YACpE,KAAK,EAAE,eAAe;SACvB;KACF,CAAC;IAEF,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;YAC7B,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,KAAK;YACb,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS;YAC9D,MAAM,EAAE,aAAa,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE;YACpE,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,WAAW;YACvB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;YACtE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;YAC/B,GAAG,KAAK;SACT,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC3B,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC/B,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC,CAAC;QAEF,eAAe;QACf,SAAS,CAAC,YAAY,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS,CAAC,KAAK,CAAC,eAAe,GAAG,WAAW,CAAC;gBAC9C,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;gBAC1C,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,WAAW,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;gBACpE,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;QACF,SAAS,CAAC,YAAY,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC;gBACvD,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC;gBACnD,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;gBACnC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAExC,sBAAsB;IACtB,cAAc,CAAC,WAAW,CACxB,eAAe,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE;QACnE,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC5B,CAAC,CAAC,CACH,CAAC;IAEF,yBAAyB;IACzB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;QAChC,KAAK,EAAE,UAAU,CAAC,SAAS;QAC3B,QAAQ,EAAE,WAAW;QACrB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,YAAY,CAAC,WAAW,GAAG,+BAA+B,CAAC;IAC3D,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEzC,eAAe;IACf,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE;QAC/B,KAAK,EAAE,UAAU,CAAC,IAAI;QACtB,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,WAAW,GAAG,cAAc,CAAC;IACzC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAEnC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;YAC1B,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,uBAAuB;YAC7D,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,WAAW;YACvB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM;SAClD,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;YACpB,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;YAClC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC,CAAC;QACF,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAEtC,4BAA4B;IAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtD,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;QACjC,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;QAChC,KAAK,EAAE,UAAU,CAAC,IAAI;QACtB,QAAQ,EAAE,WAAW;KACtB,CAAC,CAAC;IACH,YAAY,CAAC,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAExC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;QAChC,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,WAAW;QACvB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,OAAO;KACnB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAChD,YAAY,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAEtC,+EAA+E;IAC/E,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE1E,kDAAkD;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;QACzB,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,kBAAkB;QAC7B,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QAChC,aAAa,EAAE,MAAM;KACtB,CAAC,CAAC;IAEH,8BAA8B;IAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QAC7B,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,GAAG,OAAO,GAAG,GAAG,GAAG;QAC1B,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,WAAW;KACxB,CAAC,CAAC;IACH,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7B,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAE9B,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACtD,aAAa,CAAC,IAAI,GAAG,OAAO,CAAC;IAC7B,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;IACxB,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;IACxB,aAAa,CAAC,IAAI,GAAG,MAAM,CAAC;IAC5B,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;QACjC,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,MAAM;QAClB,gBAAgB,EAAE,MAAM;QACxB,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAChD,aAAa,CAAC,EAAE,GAAG,QAAQ,CAAC;IAC5B,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACpD,WAAW,CAAC,WAAW,GAAG;QACxB,IAAI,QAAQ,0BAA0B;QACtC,6BAA6B;QAC7B,8BAA8B;QAC9B,uBAAuB;QACvB,iBAAiB,WAAW,GAAG;QAC/B,uBAAuB,UAAU,CAAC,EAAE,GAAG;QACvC,yBAAyB,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG;QACtD,iBAAiB;QACjB,GAAG;QACH,IAAI,QAAQ,qDAAqD;QACjE,IAAI,QAAQ,sBAAsB;QAClC,8BAA8B;QAC9B,uBAAuB;QACvB,iBAAiB,WAAW,GAAG;QAC/B,uBAAuB,UAAU,CAAC,EAAE,GAAG;QACvC,yBAAyB,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG;QACtD,iBAAiB;QACjB,GAAG;QACH,IAAI,QAAQ,8DAA8D;QAC1E,IAAI,QAAQ,iDAAiD;KAC9D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAEpC,aAAa,CAAC,OAAO,GAAG,GAAG,EAAE;QAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,YAAY,CAAC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1C,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACxC,KAAK,CAAC,OAAO,CAAC,iBAAiB,GAAG,GAAG,CAAC;IACxC,CAAC,CAAC;IACF,aAAa,CAAC,QAAQ,GAAG,GAAG,EAAE;QAC5B,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC;IACF,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACtC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACnC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEvC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAkB;IAC/C,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAEtC,MAAM,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAE1D,eAAe,CAAC,WAAW,CACzB,eAAe,CAAC,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,GAAG,EAAE;QACnF,KAAK,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7D,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACrF,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC,CAAC,CACH,CAAC;IAEF,eAAe,CAAC,WAAW,CACzB,eAAe,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,WAAW,EAAE,GAAG,EAAE;QACnF,KAAK,CAAC,OAAO,CAAC,iBAAiB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACnE,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC3F,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC,CAAC,CACH,CAAC;IAEF,eAAe,CAAC,WAAW,CACzB,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE;QACxE,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QACzD,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACjF,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC,CAAC,CACH,CAAC;IAEF,yBAAyB;IACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAEzD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;QAChC,KAAK,EAAE,UAAU,CAAC,IAAI;QACtB,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,YAAY,CAAC,WAAW,GAAG,aAAa,CAAC;IACzC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAErC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAErE,MAAM,cAAc,GAAmE;QACrF,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QAChC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;QACxC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;KACnC,CAAC;IAEF,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1C,MAAM,eAAe,GAAG,KAAK,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACvE,MAAM,GAAG,GAAG,yBAAyB,CAAC;YACpC,KAAK;YACL,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,KAAK,KAAK;YAC9C,WAAW;YACX,QAAQ,EAAE,eAAe;YACzB,aAAa,EAAE,yBAAyB;YACxC,OAAO,EAAE,GAAG,EAAE;gBACZ,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;gBACnC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5D,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;SACF,CAAC,CAAC;QACH,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACvC,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAExC,OAAO,eAAe,CAAC;AACzB,CAAC;AAID,SAAS,oBAAoB,CAAC,KAAkB;IAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAEtC,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAExD,MAAM,cAAc,GAAqD;QACvE,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;QAC1C,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QAC5B,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QAC5B,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QAC5B,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QAC5B,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;KACxC,CAAC;IAEF,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAC5D,cAAc,CAAC,WAAW,CACxB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE;YACrD,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC;gBACjC,WAAW,EAAE;oBACX,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,IAAI,IAAI;oBACxD,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI;oBAC1C,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI;oBAC1C,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI;oBAC1C,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI;oBAC1C,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI;iBACrD;aACF,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC;IAEvC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;QAChC,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,aAAa,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE;KAC/C,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,KAAK,EAAE,UAAU,CAAC,SAAS;QAC3B,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,UAAU;KACrB,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE;QAC5B,KAAK,EAAE,MAAM;QACb,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE,uBAAuB;KAChC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;IACxC,QAAQ,CAAC,YAAY,GAAG,GAAG,EAAE;QAC3B,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,UAAU,EAAE,CAAC;QAClD,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC;IACF,QAAQ,CAAC,YAAY,GAAG,GAAG,EAAE;QAC3B,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,uBAAuB,CAAC;QAChD,QAAQ,CAAC,KAAK,CAAC,eAAe,GAAG,aAAa,CAAC;IACjD,CAAC,CAAC;IACF,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;QACtB,KAAK,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;QAClC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,SAAS,qBAAqB,CAAC,KAAa,EAAE,SAAS,GAAG,IAAI;IAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;QAC3B,OAAO,EAAE,WAAW;QACpB,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;KACvE,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;QAChC,KAAK;QACL,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,WAAW;QAC1B,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC;IACjC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,yBAAyB,CAAC,OAOlC;IACC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACnF,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC;IAEvC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;QACvB,OAAO,EAAE,UAAU;QACnB,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa;QACtE,MAAM,EAAE,aAAa,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE;QAC7D,YAAY,EAAE,KAAK;QACnB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK;QACrC,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC5C,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;KAChC,CAAC,CAAC;IACH,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;IAExB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,aAAa;YAAE,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC;IAC/C,CAAC;SAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrB,GAAG,CAAC,YAAY,GAAG,GAAG,EAAE;YACtB,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,KAAK,EAAE,CAAC;YACnC,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC;QACF,GAAG,CAAC,YAAY,GAAG,GAAG,EAAE;YACtB,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,aAAa,CAAC;YACtC,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,aAAa,CAAC;QAC5C,CAAC,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;QACjB,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CACtB,KAAa,EACb,OAAgB,EAChB,WAAmB,EACnB,QAAoB;IAEpB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;QACvB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;IAC5B,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC1B,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,aAAa,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE;QAChE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO;QAC3D,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,GAAG;QACf,SAAS,EAAE,YAAY;KACxB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;QACxB,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QAC9B,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS;QACxD,SAAS,EAAE,2BAA2B;QACtC,UAAU,EAAE,oCAAoC;KACjD,CAAC,CAAC;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEzB,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC1B,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAExB,OAAO,GAAG,CAAC;AACb,CAAC"}