@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,439 @@
1
+ /**
2
+ * Expanded state rendering for the DevBar — helper functions and orchestrator.
3
+ */
4
+ import { BUTTON_COLORS, CSS_COLORS, FONT_MONO, TAILWIND_BREAKPOINTS, withAlpha, } from '../../constants.js';
5
+ import { getResponsiveMetricVisibility } from '../performance.js';
6
+ import { addTooltipTitle, attachBreakpointTooltip, attachClickToggleTooltip, attachInfoTooltip, attachMetricTooltip, attachTextTooltip, } from '../tooltips.js';
7
+ import { createA11yButton, createAIReviewButton, createCompactToggleButton, createConsoleBadge, createOutlineButton, createSchemaButton, createScreenshotButton, createSettingsButton, } from './buttons.js';
8
+ import { captureDotPosition, createConnectionIndicator } from './common.js';
9
+ /**
10
+ * Compute the CSS position for the expanded devbar wrapper.
11
+ * Uses the captured dot position when available for smooth collapse/expand transitions.
12
+ */
13
+ function computeExpandedPosition(state, position, isCentered) {
14
+ // Dot offset from container edge in expanded mode:
15
+ // border (1px) + padding (12px) + half indicator (6px) = 19px from left
16
+ // border (1px) + padding (8px) + half indicator (6px) = 15px from top
17
+ const DOT_OFFSET_LEFT = 19;
18
+ const DOT_OFFSET_TOP = 15;
19
+ // Use captured dot position to align the expanded bar's dot with where it was
20
+ // Always use top/left positioning for precise alignment
21
+ if (state.lastDotPosition && !isCentered) {
22
+ const isRight = position.endsWith('right');
23
+ let posStyle;
24
+ if (isRight) {
25
+ // For right-aligned, fall back to default
26
+ const isTop = position.startsWith('top');
27
+ posStyle = isTop ? { top: '20px', right: '16px' } : { bottom: '20px', right: '16px' };
28
+ }
29
+ else {
30
+ // Use top positioning for precise dot alignment
31
+ posStyle = {
32
+ top: `${state.lastDotPosition.top - DOT_OFFSET_TOP}px`,
33
+ left: `${state.lastDotPosition.left - DOT_OFFSET_LEFT}px`,
34
+ };
35
+ }
36
+ // Clear the position after using it
37
+ state.lastDotPosition = null;
38
+ return posStyle;
39
+ }
40
+ const positionStyles = {
41
+ 'bottom-left': { bottom: '20px', left: '80px' },
42
+ 'bottom-right': { bottom: '20px', right: '16px' },
43
+ 'top-left': { top: '20px', left: '80px' },
44
+ 'top-right': { top: '20px', right: '16px' },
45
+ 'bottom-center': { bottom: '12px', left: '50%', transform: 'translateX(-50%)' },
46
+ };
47
+ return positionStyles[position] ?? positionStyles['bottom-left'];
48
+ }
49
+ /**
50
+ * Style the expanded wrapper container and attach the double-click-to-collapse handler.
51
+ */
52
+ function styleExpandedWrapper(state, wrapper, posStyle, accentColor, isCentered) {
53
+ state.resetPositionStyles(wrapper);
54
+ const sizeOverrides = state.options.sizeOverrides;
55
+ // Calculate size values with overrides or defaults
56
+ // Use fit-content so DevBar only takes space it needs, but allow expansion up to max
57
+ // Centered: 16px margin each side. Left/right: 80px for Next.js bar + 16px margin
58
+ const defaultWidth = 'fit-content';
59
+ const defaultMinWidth = 'auto';
60
+ const defaultMaxWidth = isCentered ? 'calc(100vw - 32px)' : 'calc(100vw - 96px)';
61
+ Object.assign(wrapper.style, {
62
+ position: 'fixed',
63
+ ...posStyle,
64
+ zIndex: '9999',
65
+ backgroundColor: 'var(--devbar-color-bg-card)',
66
+ border: `1px solid ${accentColor}`,
67
+ borderRadius: '12px',
68
+ color: accentColor,
69
+ boxShadow: `0 4px 12px rgba(0, 0, 0, 0.3), 0 0 0 1px ${withAlpha(accentColor, 10)}`,
70
+ backdropFilter: 'blur(8px)',
71
+ WebkitBackdropFilter: 'blur(8px)',
72
+ boxSizing: 'border-box',
73
+ width: sizeOverrides?.width ?? defaultWidth,
74
+ maxWidth: sizeOverrides?.maxWidth ?? defaultMaxWidth,
75
+ minWidth: sizeOverrides?.minWidth ?? defaultMinWidth,
76
+ cursor: 'default',
77
+ });
78
+ wrapper.ondblclick = (e) => {
79
+ // Ignore double-clicks on interactive elements (buttons, inputs, selects)
80
+ // to prevent rapid settings-button clicks from collapsing the devbar
81
+ const target = e.target;
82
+ if (target?.closest('button, input, select, a'))
83
+ return;
84
+ const dotEl = wrapper.querySelector('.devbar-status span span');
85
+ if (dotEl) {
86
+ captureDotPosition(state, dotEl);
87
+ }
88
+ state.collapsed = true;
89
+ state.debug.state('Collapsed DevBar (double-click)');
90
+ state.render();
91
+ };
92
+ }
93
+ /**
94
+ * Create the main row flex container used in expanded mode.
95
+ */
96
+ function createExpandedMainRow() {
97
+ const mainRow = document.createElement('div');
98
+ mainRow.className = 'devbar-main';
99
+ Object.assign(mainRow.style, {
100
+ display: 'flex',
101
+ alignItems: 'center',
102
+ alignContent: 'flex-start',
103
+ justifyContent: 'flex-start',
104
+ gap: '0.5rem',
105
+ padding: '0.5rem 0.75rem',
106
+ minWidth: '0',
107
+ boxSizing: 'border-box',
108
+ fontFamily: FONT_MONO,
109
+ fontSize: '0.6875rem',
110
+ lineHeight: '1rem',
111
+ });
112
+ return mainRow;
113
+ }
114
+ /**
115
+ * Create the connection indicator configured to collapse the devbar on click.
116
+ */
117
+ function createExpandedConnectionIndicator(state) {
118
+ const connIndicator = createConnectionIndicator(state);
119
+ attachTextTooltip(state, connIndicator, () => state.sweetlinkConnected
120
+ ? 'Sweetlink connected (click to minimize)'
121
+ : 'Sweetlink disconnected (click to minimize)');
122
+ connIndicator.onclick = (e) => {
123
+ e.stopPropagation();
124
+ captureDotPosition(state, connIndicator);
125
+ state.collapsed = true;
126
+ state.debug.state('Collapsed DevBar (connection dot click)');
127
+ state.render();
128
+ };
129
+ return connIndicator;
130
+ }
131
+ /**
132
+ * Create the info section containing breakpoint display and performance metrics.
133
+ */
134
+ function createInfoSection(state, showMetrics) {
135
+ const infoSection = document.createElement('div');
136
+ infoSection.className = 'devbar-info';
137
+ Object.assign(infoSection.style, {
138
+ display: 'flex',
139
+ alignItems: 'center',
140
+ gap: '0.5rem',
141
+ textTransform: 'uppercase',
142
+ letterSpacing: '0.05em',
143
+ flexShrink: '1',
144
+ minWidth: '0',
145
+ overflow: 'visible',
146
+ });
147
+ // Breakpoint info
148
+ if (showMetrics.breakpoint && state.breakpointInfo) {
149
+ appendBreakpointInfo(state, infoSection);
150
+ }
151
+ // Performance stats with responsive visibility
152
+ if (state.perfStats) {
153
+ appendPerformanceMetrics(state, infoSection, showMetrics);
154
+ }
155
+ return infoSection;
156
+ }
157
+ /**
158
+ * Append the Tailwind breakpoint indicator to the info section.
159
+ */
160
+ function appendBreakpointInfo(state, infoSection) {
161
+ if (!state.breakpointInfo)
162
+ return;
163
+ const bp = state.breakpointInfo.tailwindBreakpoint;
164
+ const breakpointData = TAILWIND_BREAKPOINTS[bp];
165
+ const bpSpan = document.createElement('span');
166
+ bpSpan.className = 'devbar-item';
167
+ Object.assign(bpSpan.style, { opacity: '0.9', cursor: 'default' });
168
+ // Use HTML tooltip for breakpoint info
169
+ attachBreakpointTooltip(state, bpSpan, bp, state.breakpointInfo.dimensions, breakpointData?.label || '');
170
+ let bpText = bp;
171
+ if (bp !== 'base') {
172
+ bpText =
173
+ bp === 'sm'
174
+ ? `${bp} - ${state.breakpointInfo.dimensions.split('x')[0]}`
175
+ : `${bp} - ${state.breakpointInfo.dimensions}`;
176
+ }
177
+ bpSpan.textContent = bpText;
178
+ infoSection.appendChild(bpSpan);
179
+ }
180
+ /**
181
+ * Build the metric configuration map from current perf stats.
182
+ */
183
+ function buildMetricConfigs(perfStats) {
184
+ return {
185
+ fcp: {
186
+ label: 'FCP',
187
+ value: perfStats.fcp,
188
+ title: 'First Contentful Paint (FCP)',
189
+ description: 'Time until the first text or image renders on screen.',
190
+ thresholds: { good: '<1.8s', needsWork: '1.8-3s', poor: '>3s' },
191
+ },
192
+ lcp: {
193
+ label: 'LCP',
194
+ value: perfStats.lcp,
195
+ title: 'Largest Contentful Paint (LCP)',
196
+ description: 'Time until the largest visible element renders on screen.',
197
+ thresholds: { good: '<2.5s', needsWork: '2.5-4s', poor: '>4s' },
198
+ },
199
+ cls: {
200
+ label: 'CLS',
201
+ value: perfStats.cls,
202
+ title: 'Cumulative Layout Shift (CLS)',
203
+ description: 'Visual stability score. Higher values mean more unexpected layout shifts.',
204
+ thresholds: { good: '<0.1', needsWork: '0.1-0.25', poor: '>0.25' },
205
+ },
206
+ inp: {
207
+ label: 'INP',
208
+ value: perfStats.inp,
209
+ title: 'Interaction to Next Paint (INP)',
210
+ description: 'Responsiveness to user input. Measures the longest interaction delay.',
211
+ thresholds: { good: '<200ms', needsWork: '200-500ms', poor: '>500ms' },
212
+ },
213
+ pageSize: {
214
+ label: '',
215
+ value: perfStats.totalSize,
216
+ title: 'Total Page Size',
217
+ description: 'Compressed/transferred size including HTML, CSS, JS, images, and other resources.',
218
+ },
219
+ };
220
+ }
221
+ /**
222
+ * Append performance metric spans (visible metrics + hidden-metrics ellipsis) to the info section.
223
+ */
224
+ function appendPerformanceMetrics(state, infoSection, showMetrics) {
225
+ if (!state.perfStats)
226
+ return;
227
+ const { visible, hidden } = getResponsiveMetricVisibility(state);
228
+ const metricConfigs = buildMetricConfigs(state.perfStats);
229
+ const addSeparator = () => {
230
+ const sep = document.createElement('span');
231
+ sep.style.opacity = '0.4';
232
+ sep.textContent = '|';
233
+ infoSection.appendChild(sep);
234
+ };
235
+ // Render visible metrics
236
+ for (const metric of visible) {
237
+ if (!showMetrics[metric])
238
+ continue;
239
+ const config = metricConfigs[metric];
240
+ addSeparator();
241
+ const span = document.createElement('span');
242
+ span.className = 'devbar-item';
243
+ Object.assign(span.style, {
244
+ opacity: metric === 'pageSize' ? '0.7' : '0.85',
245
+ cursor: 'default',
246
+ });
247
+ span.textContent = config.label ? `${config.label} ${config.value}` : config.value;
248
+ if (config.thresholds) {
249
+ attachMetricTooltip(state, span, config.title, config.description, config.thresholds);
250
+ }
251
+ else {
252
+ attachInfoTooltip(state, span, config.title, config.description);
253
+ }
254
+ infoSection.appendChild(span);
255
+ }
256
+ // Render ellipsis button for hidden metrics
257
+ const hiddenMetricsEnabled = hidden.filter((m) => showMetrics[m]);
258
+ if (hiddenMetricsEnabled.length > 0) {
259
+ addSeparator();
260
+ appendHiddenMetricsEllipsis(state, infoSection, hiddenMetricsEnabled, metricConfigs);
261
+ }
262
+ }
263
+ /**
264
+ * Append the ellipsis button that reveals hidden metrics in a click-toggle tooltip.
265
+ */
266
+ function appendHiddenMetricsEllipsis(state, infoSection, hiddenMetricsEnabled, metricConfigs) {
267
+ const ellipsisBtn = document.createElement('span');
268
+ ellipsisBtn.className = 'devbar-item devbar-clickable';
269
+ Object.assign(ellipsisBtn.style, {
270
+ opacity: '0.7',
271
+ cursor: 'pointer',
272
+ padding: '0 2px',
273
+ });
274
+ ellipsisBtn.textContent = '\u00B7\u00B7\u00B7';
275
+ // Attach click-toggle tooltip showing hidden metrics (for mobile support)
276
+ attachClickToggleTooltip(state, ellipsisBtn, (tooltip) => {
277
+ addTooltipTitle(state, tooltip, 'More Metrics');
278
+ const metricsContainer = document.createElement('div');
279
+ Object.assign(metricsContainer.style, {
280
+ display: 'flex',
281
+ flexDirection: 'column',
282
+ gap: '6px',
283
+ marginTop: '8px',
284
+ });
285
+ for (const metric of hiddenMetricsEnabled) {
286
+ const config = metricConfigs[metric];
287
+ const row = document.createElement('div');
288
+ Object.assign(row.style, {
289
+ display: 'flex',
290
+ justifyContent: 'space-between',
291
+ gap: '12px',
292
+ });
293
+ const labelSpan = document.createElement('span');
294
+ Object.assign(labelSpan.style, { color: CSS_COLORS.textMuted });
295
+ labelSpan.textContent = config.title.split('(')[0].trim();
296
+ const valueSpan = document.createElement('span');
297
+ Object.assign(valueSpan.style, { color: CSS_COLORS.text, fontWeight: '500' });
298
+ valueSpan.textContent = config.value;
299
+ row.appendChild(labelSpan);
300
+ row.appendChild(valueSpan);
301
+ metricsContainer.appendChild(row);
302
+ }
303
+ tooltip.appendChild(metricsContainer);
304
+ });
305
+ infoSection.appendChild(ellipsisBtn);
306
+ }
307
+ /**
308
+ * Create the status row containing the connection indicator, info section, and console badges.
309
+ */
310
+ function createStatusRow(state, showMetrics, showConsoleBadges, errorCount, warningCount, infoCount) {
311
+ const connIndicator = createExpandedConnectionIndicator(state);
312
+ const statusRow = document.createElement('div');
313
+ statusRow.className = 'devbar-status';
314
+ Object.assign(statusRow.style, {
315
+ display: 'flex',
316
+ alignItems: 'center',
317
+ gap: '0.5rem',
318
+ flexWrap: 'nowrap',
319
+ flexShrink: '0',
320
+ });
321
+ statusRow.appendChild(connIndicator);
322
+ const infoSection = createInfoSection(state, showMetrics);
323
+ statusRow.appendChild(infoSection);
324
+ // Console badges - add to status row so they stay with info
325
+ if (showConsoleBadges) {
326
+ if (errorCount > 0) {
327
+ statusRow.appendChild(createConsoleBadge(state, 'error', errorCount, BUTTON_COLORS.error));
328
+ }
329
+ if (warningCount > 0) {
330
+ statusRow.appendChild(createConsoleBadge(state, 'warn', warningCount, BUTTON_COLORS.warning));
331
+ }
332
+ if (infoCount > 0) {
333
+ statusRow.appendChild(createConsoleBadge(state, 'info', infoCount, BUTTON_COLORS.info));
334
+ }
335
+ }
336
+ return statusRow;
337
+ }
338
+ /**
339
+ * Create the action buttons container (screenshot, AI review, outline, schema, a11y, settings, compact).
340
+ */
341
+ function createActionButtonsContainer(state, showScreenshot, accentColor) {
342
+ const actionsContainer = document.createElement('div');
343
+ actionsContainer.className = 'devbar-actions';
344
+ if (showScreenshot) {
345
+ actionsContainer.appendChild(createScreenshotButton(state, accentColor));
346
+ }
347
+ actionsContainer.appendChild(createAIReviewButton(state));
348
+ actionsContainer.appendChild(createOutlineButton(state));
349
+ actionsContainer.appendChild(createSchemaButton(state));
350
+ actionsContainer.appendChild(createA11yButton(state));
351
+ actionsContainer.appendChild(createSettingsButton(state));
352
+ actionsContainer.appendChild(createCompactToggleButton(state));
353
+ return actionsContainer;
354
+ }
355
+ /**
356
+ * Create the custom controls row for user-defined buttons.
357
+ * Returns null if there are no custom controls.
358
+ */
359
+ function createCustomControlsRow(customControls, accentColor) {
360
+ if (customControls.length === 0)
361
+ return null;
362
+ const customRow = document.createElement('div');
363
+ Object.assign(customRow.style, {
364
+ display: 'flex',
365
+ flexWrap: 'wrap',
366
+ alignItems: 'center',
367
+ gap: '0.5rem',
368
+ padding: '0 0.75rem 0.5rem 0.75rem',
369
+ borderTop: `1px solid ${withAlpha(accentColor, 19)}`,
370
+ marginTop: '0',
371
+ paddingTop: '0.5rem',
372
+ fontFamily: FONT_MONO,
373
+ fontSize: '0.6875rem',
374
+ });
375
+ customControls.forEach((control) => {
376
+ const btn = document.createElement('button');
377
+ btn.type = 'button';
378
+ const color = control.variant === 'warning' ? BUTTON_COLORS.warning : accentColor;
379
+ const isActive = control.active ?? false;
380
+ const isDisabled = control.disabled ?? false;
381
+ Object.assign(btn.style, {
382
+ padding: '4px 10px',
383
+ backgroundColor: isActive ? withAlpha(color, 20) : 'transparent',
384
+ border: `1px solid ${isActive ? color : withAlpha(color, 38)}`,
385
+ borderRadius: '6px',
386
+ color: isActive ? color : withAlpha(color, 60),
387
+ fontSize: '0.625rem',
388
+ cursor: isDisabled ? 'not-allowed' : 'pointer',
389
+ opacity: isDisabled ? '0.5' : '1',
390
+ transition: 'all 150ms',
391
+ });
392
+ btn.textContent = control.label;
393
+ btn.disabled = isDisabled;
394
+ if (!isDisabled) {
395
+ btn.onmouseenter = () => {
396
+ btn.style.backgroundColor = withAlpha(color, 13);
397
+ btn.style.borderColor = color;
398
+ btn.style.color = color;
399
+ };
400
+ btn.onmouseleave = () => {
401
+ btn.style.backgroundColor = isActive ? withAlpha(color, 20) : 'transparent';
402
+ btn.style.borderColor = isActive ? color : withAlpha(color, 38);
403
+ btn.style.color = isActive ? color : withAlpha(color, 60);
404
+ };
405
+ btn.onclick = () => control.onClick();
406
+ }
407
+ customRow.appendChild(btn);
408
+ });
409
+ return customRow;
410
+ }
411
+ // ============================================================================
412
+ // Expanded State -- Orchestrator
413
+ // ============================================================================
414
+ export function renderExpanded(state, customControls) {
415
+ if (!state.container)
416
+ return;
417
+ const { position, accentColor, showMetrics, showScreenshot, showConsoleBadges } = state.options;
418
+ const { errorCount, warningCount, infoCount } = state.getLogCounts();
419
+ const isCentered = position === 'bottom-center';
420
+ const wrapper = state.container;
421
+ // 1. Position and style the wrapper
422
+ const posStyle = computeExpandedPosition(state, position, isCentered);
423
+ styleExpandedWrapper(state, wrapper, posStyle, accentColor, isCentered);
424
+ // 2. Build the main row
425
+ const mainRow = createExpandedMainRow();
426
+ // 3. Status row (connection dot + info metrics + console badges)
427
+ const statusRow = createStatusRow(state, showMetrics, showConsoleBadges, errorCount, warningCount, infoCount);
428
+ mainRow.appendChild(statusRow);
429
+ // 4. Action buttons
430
+ const actionsContainer = createActionButtonsContainer(state, showScreenshot, accentColor);
431
+ mainRow.appendChild(actionsContainer);
432
+ wrapper.appendChild(mainRow);
433
+ // 5. Custom controls row (if any)
434
+ const customRow = createCustomControlsRow(customControls, accentColor);
435
+ if (customRow) {
436
+ wrapper.appendChild(customRow);
437
+ }
438
+ }
439
+ //# sourceMappingURL=expanded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expanded.js","sourceRoot":"","sources":["../../../src/modules/rendering/expanded.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Rendering: renderCollapsed, renderCompact, renderExpanded, renderOverlays,
3
+ * console popups, modals, settings popover, and all DOM-creation UI code.
4
+ *
5
+ * Extracted from GlobalDevBar to reduce file size.
6
+ * Split into sub-modules for maintainability; this barrel re-exports the
7
+ * public `render` function so external import paths remain unchanged.
8
+ */
9
+ import type { ConsoleCapture } from '@ytspar/sweetlink/browser/consoleCapture';
10
+ import { type DevBarState } from '../types.js';
11
+ /**
12
+ * Main render dispatch - creates container and delegates to appropriate renderer.
13
+ */
14
+ export declare function render(state: DevBarState, consoleCaptureSingleton: ConsoleCapture, customControls: {
15
+ id: string;
16
+ label: string;
17
+ onClick: () => void;
18
+ active?: boolean;
19
+ disabled?: boolean;
20
+ variant?: 'default' | 'warning';
21
+ }[]): void;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/rendering/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE/E,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAwC/D;;GAEG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,WAAW,EAClB,uBAAuB,EAAE,cAAc,EACvC,cAAc,EAAE;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACjC,EAAE,GACF,IAAI,CAqDN"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Rendering: renderCollapsed, renderCompact, renderExpanded, renderOverlays,
3
+ * console popups, modals, settings popover, and all DOM-creation UI code.
4
+ *
5
+ * Extracted from GlobalDevBar to reduce file size.
6
+ * Split into sub-modules for maintainability; this barrel re-exports the
7
+ * public `render` function so external import paths remain unchanged.
8
+ */
9
+ import { clearAllTooltips } from '../tooltips.js';
10
+ import { closeAllModals } from '../types.js';
11
+ import { renderCollapsed } from './collapsed.js';
12
+ import { renderCompact } from './compact.js';
13
+ import { renderConsolePopup } from './console.js';
14
+ import { renderExpanded } from './expanded.js';
15
+ import { renderDesignReviewConfirmModal, renderA11yModal, renderOutlineModal, renderSchemaModal } from './modals.js';
16
+ import { renderSettingsPopover } from './settings.js';
17
+ import { renderGuard, setRenderGuard } from './common.js';
18
+ function renderOverlays(state, consoleCaptureSingleton) {
19
+ // Safety: only one overlay at a time. First match wins; close the rest.
20
+ // (Overlay cleanup already performed by render() before calling this.)
21
+ if (state.consoleFilter) {
22
+ const filter = state.consoleFilter;
23
+ closeAllModals(state);
24
+ state.consoleFilter = filter;
25
+ renderConsolePopup(state, consoleCaptureSingleton);
26
+ }
27
+ else if (state.showOutlineModal) {
28
+ closeAllModals(state);
29
+ state.showOutlineModal = true;
30
+ renderOutlineModal(state);
31
+ }
32
+ else if (state.showSchemaModal) {
33
+ closeAllModals(state);
34
+ state.showSchemaModal = true;
35
+ renderSchemaModal(state);
36
+ }
37
+ else if (state.showA11yModal) {
38
+ closeAllModals(state);
39
+ state.showA11yModal = true;
40
+ renderA11yModal(state);
41
+ }
42
+ else if (state.showDesignReviewConfirm) {
43
+ closeAllModals(state);
44
+ state.showDesignReviewConfirm = true;
45
+ renderDesignReviewConfirmModal(state);
46
+ }
47
+ else if (state.showSettingsPopover) {
48
+ closeAllModals(state);
49
+ state.showSettingsPopover = true;
50
+ renderSettingsPopover(state);
51
+ }
52
+ }
53
+ /**
54
+ * Main render dispatch - creates container and delegates to appropriate renderer.
55
+ */
56
+ export function render(state, consoleCaptureSingleton, customControls) {
57
+ if (state.destroyed)
58
+ return;
59
+ if (typeof document === 'undefined')
60
+ return;
61
+ if (renderGuard)
62
+ return;
63
+ setRenderGuard(true);
64
+ // Clear any orphaned tooltips from previous render
65
+ clearAllTooltips(state);
66
+ // Remove existing overlay if any (modals append to body, need explicit cleanup)
67
+ if (state.overlayElement) {
68
+ state.overlayElement.remove();
69
+ state.overlayElement = null;
70
+ document.body.style.overflow = '';
71
+ }
72
+ // Remove existing container if any
73
+ if (state.container) {
74
+ state.container.remove();
75
+ }
76
+ // Create new container and append immediately so the devbar stays visible
77
+ // even if content or overlay rendering throws
78
+ state.container = document.createElement('div');
79
+ state.container.setAttribute('data-devbar', 'true');
80
+ state.container.setAttribute('role', 'toolbar');
81
+ state.container.setAttribute('aria-label', 'DevBar');
82
+ document.body.appendChild(state.container);
83
+ try {
84
+ if (state.collapsed) {
85
+ renderCollapsed(state);
86
+ }
87
+ else if (state.compactMode) {
88
+ renderCompact(state);
89
+ }
90
+ else {
91
+ renderExpanded(state, customControls);
92
+ }
93
+ }
94
+ catch (e) {
95
+ console.error('[GlobalDevBar] Render failed:', e);
96
+ }
97
+ try {
98
+ renderOverlays(state, consoleCaptureSingleton);
99
+ }
100
+ catch (e) {
101
+ console.error('[GlobalDevBar] Overlay render failed:', e);
102
+ }
103
+ // Lock body scroll while a modal overlay is open
104
+ if (state.overlayElement) {
105
+ document.body.style.overflow = 'hidden';
106
+ }
107
+ setRenderGuard(false);
108
+ }
109
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/rendering/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Modal rendering for the DevBar: outline, schema, a11y, and design review modals.
3
+ */
4
+ import type { DevBarState } from '../types.js';
5
+ export declare function renderOutlineModal(state: DevBarState): void;
6
+ export declare function renderSchemaModal(state: DevBarState): void;
7
+ export declare function renderA11yModal(state: DevBarState): void;
8
+ export declare function renderDesignReviewConfirmModal(state: DevBarState): void;
9
+ //# sourceMappingURL=modals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modals.d.ts","sourceRoot":"","sources":["../../../src/modules/rendering/modals.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAyC3D;AAwFD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAyD1D;AAwjBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAoKxD;AAuJD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAoDvE"}