@fragments-sdk/cli 0.10.1 → 0.11.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 (149) hide show
  1. package/dist/bin.js +20 -2
  2. package/dist/bin.js.map +1 -1
  3. package/dist/{init-NDQXUWDU.js → init-UFGK5TCN.js} +75 -4
  4. package/dist/init-UFGK5TCN.js.map +1 -0
  5. package/dist/snapshot-SV2JOFZH.js +139 -0
  6. package/dist/snapshot-SV2JOFZH.js.map +1 -0
  7. package/dist/{viewer-DNMNC5VS.js → viewer-DLLJIMCK.js} +68 -46
  8. package/dist/viewer-DLLJIMCK.js.map +1 -0
  9. package/package.json +6 -14
  10. package/src/bin.ts +30 -0
  11. package/src/commands/init.ts +76 -1
  12. package/src/commands/snapshot.ts +197 -0
  13. package/src/viewer/__tests__/viewer-integration.test.ts +85 -74
  14. package/src/viewer/server.ts +37 -22
  15. package/src/viewer/vite-plugin.ts +25 -9
  16. package/dist/init-NDQXUWDU.js.map +0 -1
  17. package/dist/viewer-DNMNC5VS.js.map +0 -1
  18. package/src/viewer/__tests__/a11y-fixes.test.ts +0 -358
  19. package/src/viewer/__tests__/jsx-parser.test.ts +0 -502
  20. package/src/viewer/__tests__/render-utils.test.ts +0 -232
  21. package/src/viewer/__tests__/style-utils.test.ts +0 -404
  22. package/src/viewer/assets/fragments-logo.ts +0 -4
  23. package/src/viewer/assets/fragments_logo.png +0 -0
  24. package/src/viewer/components/AccessibilityPanel.tsx +0 -1457
  25. package/src/viewer/components/ActionCapture.tsx +0 -172
  26. package/src/viewer/components/ActionsPanel.tsx +0 -332
  27. package/src/viewer/components/AllVariantsPreview.tsx +0 -78
  28. package/src/viewer/components/App.tsx +0 -582
  29. package/src/viewer/components/BottomPanel.tsx +0 -288
  30. package/src/viewer/components/CodePanel.naming.test.tsx +0 -59
  31. package/src/viewer/components/CodePanel.tsx +0 -118
  32. package/src/viewer/components/CommandPalette.tsx +0 -392
  33. package/src/viewer/components/ComponentDocView.tsx +0 -164
  34. package/src/viewer/components/ComponentGraph.tsx +0 -380
  35. package/src/viewer/components/ComponentHeader.tsx +0 -88
  36. package/src/viewer/components/ContractPanel.tsx +0 -241
  37. package/src/viewer/components/EmptyVariantMessage.tsx +0 -54
  38. package/src/viewer/components/ErrorBoundary.tsx +0 -97
  39. package/src/viewer/components/FigmaEmbed.tsx +0 -238
  40. package/src/viewer/components/FragmentEditor.tsx +0 -525
  41. package/src/viewer/components/FragmentRenderer.tsx +0 -61
  42. package/src/viewer/components/HeaderSearch.tsx +0 -24
  43. package/src/viewer/components/HealthDashboard.tsx +0 -441
  44. package/src/viewer/components/HmrStatusIndicator.tsx +0 -61
  45. package/src/viewer/components/Icons.tsx +0 -479
  46. package/src/viewer/components/InteractionsPanel.tsx +0 -757
  47. package/src/viewer/components/IsolatedPreviewFrame.tsx +0 -346
  48. package/src/viewer/components/IsolatedRender.tsx +0 -113
  49. package/src/viewer/components/KeyboardShortcutsHelp.tsx +0 -53
  50. package/src/viewer/components/LandingPage.tsx +0 -421
  51. package/src/viewer/components/Layout.tsx +0 -27
  52. package/src/viewer/components/LeftSidebar.tsx +0 -472
  53. package/src/viewer/components/LoadErrorMessage.tsx +0 -102
  54. package/src/viewer/components/MultiViewportPreview.tsx +0 -522
  55. package/src/viewer/components/NoVariantsMessage.tsx +0 -59
  56. package/src/viewer/components/PanelShell.tsx +0 -161
  57. package/src/viewer/components/PerformancePanel.tsx +0 -304
  58. package/src/viewer/components/PreviewArea.tsx +0 -472
  59. package/src/viewer/components/PreviewAside.tsx +0 -168
  60. package/src/viewer/components/PreviewFrameHost.tsx +0 -303
  61. package/src/viewer/components/PreviewPane.tsx +0 -149
  62. package/src/viewer/components/PreviewToolbar.tsx +0 -80
  63. package/src/viewer/components/PropsEditor.tsx +0 -506
  64. package/src/viewer/components/PropsTable.tsx +0 -111
  65. package/src/viewer/components/RelationsSection.tsx +0 -88
  66. package/src/viewer/components/ResizablePanel.tsx +0 -271
  67. package/src/viewer/components/RightSidebar.tsx +0 -102
  68. package/src/viewer/components/RuntimeToolsRegistrar.tsx +0 -17
  69. package/src/viewer/components/ScreenshotButton.tsx +0 -90
  70. package/src/viewer/components/Sidebar.tsx +0 -169
  71. package/src/viewer/components/SkeletonLoader.tsx +0 -161
  72. package/src/viewer/components/ThemeProvider.tsx +0 -42
  73. package/src/viewer/components/Toast.tsx +0 -3
  74. package/src/viewer/components/TokenStylePanel.tsx +0 -699
  75. package/src/viewer/components/TopToolbar.tsx +0 -159
  76. package/src/viewer/components/UsageSection.tsx +0 -95
  77. package/src/viewer/components/VariantMatrix.tsx +0 -388
  78. package/src/viewer/components/VariantRenderer.tsx +0 -131
  79. package/src/viewer/components/VariantTabs.tsx +0 -40
  80. package/src/viewer/components/ViewerHeader.tsx +0 -69
  81. package/src/viewer/components/ViewerStateSync.tsx +0 -52
  82. package/src/viewer/components/ViewportSelector.tsx +0 -172
  83. package/src/viewer/components/WebMCPDevTools.tsx +0 -503
  84. package/src/viewer/components/WebMCPIntegration.tsx +0 -47
  85. package/src/viewer/components/WebMCPStatusIndicator.tsx +0 -60
  86. package/src/viewer/components/_future/CreatePage.tsx +0 -836
  87. package/src/viewer/components/viewer-utils.ts +0 -16
  88. package/src/viewer/composition-renderer.ts +0 -381
  89. package/src/viewer/constants/index.ts +0 -1
  90. package/src/viewer/constants/ui.ts +0 -166
  91. package/src/viewer/entry.tsx +0 -335
  92. package/src/viewer/hooks/index.ts +0 -2
  93. package/src/viewer/hooks/useA11yCache.ts +0 -383
  94. package/src/viewer/hooks/useA11yService.ts +0 -364
  95. package/src/viewer/hooks/useActions.ts +0 -138
  96. package/src/viewer/hooks/useAppState.ts +0 -147
  97. package/src/viewer/hooks/useCompiledFragments.ts +0 -42
  98. package/src/viewer/hooks/useFigmaIntegration.ts +0 -132
  99. package/src/viewer/hooks/useHmrStatus.ts +0 -109
  100. package/src/viewer/hooks/useKeyboardShortcuts.ts +0 -270
  101. package/src/viewer/hooks/usePreviewBridge.ts +0 -347
  102. package/src/viewer/hooks/useScrollSpy.ts +0 -78
  103. package/src/viewer/hooks/useUrlState.ts +0 -318
  104. package/src/viewer/hooks/useViewSettings.ts +0 -111
  105. package/src/viewer/index.html +0 -28
  106. package/src/viewer/intelligence/healthReport.ts +0 -505
  107. package/src/viewer/intelligence/styleDrift.ts +0 -340
  108. package/src/viewer/intelligence/usageScanner.ts +0 -309
  109. package/src/viewer/jsx-parser.ts +0 -486
  110. package/src/viewer/preview-frame-entry.tsx +0 -25
  111. package/src/viewer/preview-frame.html +0 -125
  112. package/src/viewer/public/favicon.ico +0 -0
  113. package/src/viewer/render-template.html +0 -68
  114. package/src/viewer/styles/globals.css +0 -278
  115. package/src/viewer/types/a11y.ts +0 -197
  116. package/src/viewer/utils/a11y-fixes.ts +0 -509
  117. package/src/viewer/utils/actionExport.ts +0 -372
  118. package/src/viewer/utils/colorSchemes.ts +0 -201
  119. package/src/viewer/utils/detectRelationships.ts +0 -256
  120. package/src/viewer/vendor/shared/src/ComponentDocContent.module.scss +0 -10
  121. package/src/viewer/vendor/shared/src/ComponentDocContent.module.scss.d.ts +0 -2
  122. package/src/viewer/vendor/shared/src/ComponentDocContent.tsx +0 -274
  123. package/src/viewer/vendor/shared/src/DocsHeaderBar.tsx +0 -129
  124. package/src/viewer/vendor/shared/src/DocsPageAsideHost.tsx +0 -89
  125. package/src/viewer/vendor/shared/src/DocsPageShell.tsx +0 -124
  126. package/src/viewer/vendor/shared/src/DocsSearchCommand.tsx +0 -99
  127. package/src/viewer/vendor/shared/src/DocsSidebarNav.tsx +0 -66
  128. package/src/viewer/vendor/shared/src/PropsTable.module.scss +0 -68
  129. package/src/viewer/vendor/shared/src/PropsTable.module.scss.d.ts +0 -2
  130. package/src/viewer/vendor/shared/src/PropsTable.tsx +0 -76
  131. package/src/viewer/vendor/shared/src/VariantPreviewCard.module.scss +0 -114
  132. package/src/viewer/vendor/shared/src/VariantPreviewCard.module.scss.d.ts +0 -2
  133. package/src/viewer/vendor/shared/src/VariantPreviewCard.tsx +0 -137
  134. package/src/viewer/vendor/shared/src/docs-data/index.ts +0 -32
  135. package/src/viewer/vendor/shared/src/docs-data/mcp-configs.ts +0 -72
  136. package/src/viewer/vendor/shared/src/docs-data/palettes.ts +0 -75
  137. package/src/viewer/vendor/shared/src/docs-data/setup-examples.ts +0 -55
  138. package/src/viewer/vendor/shared/src/docs-layout.scss +0 -28
  139. package/src/viewer/vendor/shared/src/docs-layout.scss.d.ts +0 -2
  140. package/src/viewer/vendor/shared/src/index.ts +0 -34
  141. package/src/viewer/vendor/shared/src/types.ts +0 -53
  142. package/src/viewer/webmcp/__tests__/analytics.test.ts +0 -108
  143. package/src/viewer/webmcp/analytics.ts +0 -165
  144. package/src/viewer/webmcp/index.ts +0 -3
  145. package/src/viewer/webmcp/posthog-bridge.ts +0 -39
  146. package/src/viewer/webmcp/runtime-tools.ts +0 -152
  147. package/src/viewer/webmcp/scan-utils.ts +0 -135
  148. package/src/viewer/webmcp/use-tool-analytics.ts +0 -69
  149. package/src/viewer/webmcp/viewer-state.ts +0 -45
@@ -1,278 +0,0 @@
1
- /* ============================================
2
- * Fragments Viewer Shell Styles
3
- * ============================================
4
- * Viewer-specific token aliases and utility classes.
5
- * Base resets (box-sizing, body, scrollbars) come from
6
- * @fragments/ui globals imported via entry.tsx.
7
- * ============================================ */
8
-
9
- /* ============================================
10
- * Token Aliases
11
- * ============================================
12
- * Shorthand aliases mapping to --fui-* tokens so the viewer
13
- * shell CSS can use shorter variable names.
14
- */
15
-
16
- :root {
17
- --bg-primary: var(--fui-bg-primary, #ffffff);
18
- --bg-secondary: var(--fui-bg-secondary, #f7f7f8);
19
- --bg-tertiary: var(--fui-bg-tertiary, #f2f2f2);
20
- --bg-elevated: var(--fui-bg-elevated, #ffffff);
21
- --bg-hover: var(--fui-bg-hover, rgba(0, 0, 0, 0.06));
22
- --bg-active: var(--fui-bg-active, rgba(0, 0, 0, 0.1));
23
-
24
- --text-primary: var(--fui-text-primary, #171717);
25
- --text-secondary: var(--fui-text-secondary, #525252);
26
- --text-tertiary: var(--fui-text-tertiary, #8a8a8a);
27
- --text-muted: var(--fui-text-tertiary, #8a8a8a);
28
-
29
- --border: var(--fui-border, rgba(0, 0, 0, 0.1));
30
- --border-subtle: var(--fui-border, rgba(0, 0, 0, 0.1));
31
- --border-strong: var(--fui-border-strong, rgba(0, 0, 0, 0.16));
32
-
33
- --color-accent: var(--fui-color-accent, #10a37f);
34
- --color-accent-hover: var(--fui-color-accent-hover, #0d8a6a);
35
- --color-accent-subtle: var(--fui-color-success-bg, rgba(16, 163, 127, 0.1));
36
-
37
- --color-success: var(--fui-color-success, #10a37f);
38
- --color-success-bg: var(--fui-color-success-bg, rgba(16, 163, 127, 0.1));
39
- --color-warning: var(--fui-color-warning, #f59e0b);
40
- --color-warning-bg: var(--fui-color-warning-bg, rgba(245, 158, 11, 0.1));
41
- --color-danger: var(--fui-color-danger, #ef4444);
42
- --color-danger-bg: var(--fui-color-danger-bg, rgba(239, 68, 68, 0.1));
43
- --color-info: var(--fui-color-info, #3b82f6);
44
- --color-info-bg: var(--fui-color-info-bg, rgba(59, 130, 246, 0.1));
45
-
46
- --shadow-sm: var(--fui-shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05));
47
- --shadow-md: var(--fui-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.08));
48
- --shadow-lg: var(--fui-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.12));
49
-
50
- --radius-sm: var(--fui-radius-sm, 6px);
51
- --radius-md: var(--fui-radius-md, 8px);
52
- --radius-lg: var(--fui-radius-lg, 12px);
53
-
54
- --transition-fast: var(--fui-transition-fast, 150ms ease);
55
- --transition-normal: var(--fui-transition-normal, 200ms ease);
56
- }
57
-
58
- /* ============================================
59
- * Viewer-specific overrides
60
- * ============================================ */
61
-
62
- * {
63
- border-color: var(--border);
64
- }
65
-
66
- /* ============================================
67
- * Theme-aware Utility Classes
68
- * ============================================ */
69
-
70
- .bg-primary { background-color: var(--bg-primary); }
71
- .bg-secondary { background-color: var(--bg-secondary); }
72
- .bg-tertiary { background-color: var(--bg-tertiary); }
73
- .bg-elevated { background-color: var(--bg-elevated); }
74
-
75
- .text-primary { color: var(--text-primary); }
76
- .text-secondary { color: var(--text-secondary); }
77
- .text-tertiary { color: var(--text-tertiary); }
78
- .text-accent { color: var(--color-accent); }
79
-
80
- .border-subtle { border-color: var(--border-subtle); }
81
- .border-strong { border-color: var(--border-strong); }
82
-
83
- /* ============================================
84
- * Surface Styles
85
- * ============================================ */
86
-
87
- .surface {
88
- background-color: var(--bg-elevated);
89
- border: 1px solid var(--border);
90
- border-radius: var(--radius-lg);
91
- }
92
-
93
- .surface-interactive {
94
- background-color: var(--bg-elevated);
95
- border: 1px solid var(--border);
96
- border-radius: var(--radius-lg);
97
- transition: all var(--transition-fast);
98
- }
99
-
100
- .surface-interactive:hover {
101
- border-color: var(--border-strong);
102
- box-shadow: var(--shadow-sm);
103
- }
104
-
105
- /* ============================================
106
- * Badge Styles
107
- * ============================================ */
108
-
109
- .badge {
110
- display: inline-flex;
111
- align-items: center;
112
- padding: 3px 8px;
113
- border-radius: var(--radius-sm);
114
- font-size: 11px;
115
- font-weight: 500;
116
- letter-spacing: 0.01em;
117
- transition: all var(--transition-fast);
118
- }
119
-
120
- .badge-default {
121
- background-color: var(--bg-tertiary);
122
- color: var(--text-secondary);
123
- border: 1px solid var(--border-subtle);
124
- }
125
-
126
- .badge-success {
127
- background-color: var(--color-success-bg);
128
- color: var(--color-success);
129
- }
130
-
131
- .badge-warning {
132
- background-color: var(--color-warning-bg);
133
- color: var(--color-warning);
134
- }
135
-
136
- .badge-danger {
137
- background-color: var(--color-danger-bg);
138
- color: var(--color-danger);
139
- }
140
-
141
- /* ============================================
142
- * Focus Ring
143
- * ============================================ */
144
-
145
- .focus-ring:focus-visible {
146
- outline: none;
147
- box-shadow: 0 0 0 2px var(--bg-primary), 0 0 0 4px var(--color-accent);
148
- }
149
-
150
- /* ============================================
151
- * Transition Utilities
152
- * ============================================ */
153
-
154
- .transition-colors {
155
- transition: color var(--transition-fast), background-color var(--transition-fast), border-color var(--transition-fast);
156
- }
157
-
158
- .transition-all {
159
- transition: all var(--transition-fast);
160
- }
161
-
162
- /* ============================================
163
- * Code Styling
164
- * ============================================ */
165
-
166
- code {
167
- font-family: 'JetBrains Mono', 'Fira Code', monospace;
168
- font-size: 0.875em;
169
- background-color: var(--bg-tertiary);
170
- padding: 2px 6px;
171
- border-radius: var(--radius-sm);
172
- border: 1px solid var(--border-subtle);
173
- }
174
-
175
- pre code {
176
- background: none;
177
- padding: 0;
178
- border: none;
179
- }
180
-
181
- /* ============================================
182
- * Table Base Styles
183
- * ============================================ */
184
-
185
- table {
186
- width: 100%;
187
- border-collapse: separate;
188
- border-spacing: 0;
189
- }
190
-
191
- th {
192
- text-align: left;
193
- font-weight: 500;
194
- font-size: 12px;
195
- text-transform: uppercase;
196
- letter-spacing: 0.05em;
197
- color: var(--text-tertiary);
198
- }
199
-
200
- td {
201
- border-top: 1px solid var(--border-subtle);
202
- }
203
-
204
- /* ============================================
205
- * Utility Classes
206
- * ============================================ */
207
-
208
- .divider {
209
- height: 1px;
210
- background-color: var(--border);
211
- }
212
-
213
- .text-balance {
214
- text-wrap: balance;
215
- }
216
-
217
- /* Scroll utilities */
218
- .scroll-smooth {
219
- scroll-behavior: smooth;
220
- }
221
-
222
- .scrollbar-hide {
223
- -ms-overflow-style: none;
224
- scrollbar-width: none;
225
- }
226
-
227
- .scrollbar-hide::-webkit-scrollbar {
228
- display: none;
229
- }
230
-
231
- /* ============================================
232
- * Gradient Utilities
233
- * ============================================ */
234
-
235
- .gradient-fade-b {
236
- background: linear-gradient(to bottom, transparent, var(--bg-primary));
237
- }
238
-
239
- .gradient-fade-t {
240
- background: linear-gradient(to top, transparent, var(--bg-primary));
241
- }
242
-
243
- /* Subtle glow effect for interactive elements */
244
- .glow-accent:hover {
245
- box-shadow: 0 0 20px rgba(16, 163, 127, 0.15);
246
- }
247
-
248
- /* ============================================
249
- * Animations
250
- * ============================================ */
251
-
252
- @keyframes spin {
253
- to { transform: rotate(360deg); }
254
- }
255
-
256
- @keyframes fadeIn {
257
- from { opacity: 0; }
258
- to { opacity: 1; }
259
- }
260
-
261
- @keyframes slideIn {
262
- from {
263
- opacity: 0;
264
- transform: translateY(4px);
265
- }
266
- to {
267
- opacity: 1;
268
- transform: translateY(0);
269
- }
270
- }
271
-
272
- .animate-fadeIn {
273
- animation: fadeIn var(--transition-normal) ease-out;
274
- }
275
-
276
- .animate-slideIn {
277
- animation: slideIn var(--transition-normal) ease-out;
278
- }
@@ -1,197 +0,0 @@
1
- /**
2
- * Accessibility Types
3
- *
4
- * TypeScript interfaces for the accessibility checking system.
5
- */
6
-
7
- import type { ImpactValue } from 'axe-core';
8
-
9
- /**
10
- * Serialized violation node for storage
11
- */
12
- export interface SerializedNode {
13
- /** HTML snippet of the affected element */
14
- html: string;
15
- /** CSS selector path to the element */
16
- target: string[];
17
- /** Failure summary explaining the issue */
18
- failureSummary?: string;
19
- /** Any data collected during the check */
20
- any?: Array<{
21
- id: string;
22
- data?: unknown;
23
- relatedNodes?: Array<{ html: string; target: string[] }>;
24
- impact?: string;
25
- message: string;
26
- }>;
27
- /** All data required for the check to pass */
28
- all?: Array<{
29
- id: string;
30
- data?: unknown;
31
- relatedNodes?: Array<{ html: string; target: string[] }>;
32
- impact?: string;
33
- message: string;
34
- }>;
35
- /** None data that should not be present */
36
- none?: Array<{
37
- id: string;
38
- data?: unknown;
39
- relatedNodes?: Array<{ html: string; target: string[] }>;
40
- impact?: string;
41
- message: string;
42
- }>;
43
- }
44
-
45
- /**
46
- * Serialized violation for storage and display
47
- */
48
- export interface SerializedViolation {
49
- /** Unique rule identifier (e.g., 'color-contrast') */
50
- id: string;
51
- /** Impact level of the violation */
52
- impact: ImpactValue | null;
53
- /** Brief description of the rule */
54
- description: string;
55
- /** Longer help text explaining how to fix */
56
- help: string;
57
- /** URL to detailed documentation */
58
- helpUrl: string;
59
- /** WCAG tags (e.g., 'wcag2a', 'wcag143') */
60
- tags: string[];
61
- /** Affected elements */
62
- nodes: SerializedNode[];
63
- }
64
-
65
- /**
66
- * Cached accessibility result for a component
67
- */
68
- export interface CachedA11yResult {
69
- /** Component name */
70
- componentName: string;
71
- /** Variant that was scanned (optional) */
72
- variant?: string;
73
- /** Full violation details for display */
74
- violations: SerializedViolation[];
75
- /** Number of passing checks */
76
- passes: number;
77
- /** Number of incomplete checks */
78
- incomplete: number;
79
- /** When the scan was performed */
80
- scannedAt: number;
81
- /** Counts by severity */
82
- counts: {
83
- critical: number;
84
- serious: number;
85
- moderate: number;
86
- minor: number;
87
- };
88
- }
89
-
90
- /**
91
- * Summary data derived from cache
92
- */
93
- export interface A11ySummary {
94
- /** Components with no critical/serious violations */
95
- accessibleComponents: number;
96
- /** Total components scanned */
97
- totalComponents: number;
98
- /** Violations aggregated by impact */
99
- violationsByImpact: {
100
- critical: number;
101
- serious: number;
102
- moderate: number;
103
- minor: number;
104
- };
105
- /** Top violations across all components */
106
- topViolations: Array<{
107
- ruleId: string;
108
- description: string;
109
- affectedComponents: string[];
110
- impact: ImpactValue | null;
111
- }>;
112
- }
113
-
114
- /**
115
- * Event data for a11y cache invalidation
116
- */
117
- export interface A11yInvalidateEvent {
118
- /** Component names to invalidate */
119
- components: string[];
120
- /** File that changed */
121
- file: string;
122
- /** Timestamp of the change */
123
- timestamp: number;
124
- }
125
-
126
- /**
127
- * A11y service configuration
128
- */
129
- export interface A11yServiceConfig {
130
- /** Debounce delay after HMR file change (ms) */
131
- hmrDebounceMs: number;
132
- /** Debounce delay after navigation (ms) */
133
- navigationDebounceMs: number;
134
- /** Minimum time between same component scans (ms) */
135
- scanCooldownMs: number;
136
- /** Maximum concurrent scans */
137
- maxConcurrentScans: number;
138
- }
139
-
140
- /**
141
- * Default configuration values
142
- */
143
- export const DEFAULT_A11Y_CONFIG: A11yServiceConfig = {
144
- hmrDebounceMs: 500,
145
- navigationDebounceMs: 200,
146
- scanCooldownMs: 1000,
147
- maxConcurrentScans: 2,
148
- };
149
-
150
- /**
151
- * Static fix suggestion for a violation
152
- */
153
- export interface StaticFixSuggestion {
154
- /** Why this issue matters for users */
155
- whyItMatters: string;
156
- /** Generic fix description */
157
- howToFix: string;
158
- /** Example of bad code */
159
- badExample?: string;
160
- /** Example of good code */
161
- goodExample?: string;
162
- /** WCAG criterion reference */
163
- wcagCriterion?: {
164
- id: string;
165
- name: string;
166
- level: 'A' | 'AA' | 'AAA';
167
- url: string;
168
- };
169
- }
170
-
171
- /**
172
- * Specific fix for an element
173
- */
174
- export interface ElementFix {
175
- /** The original HTML */
176
- originalHtml: string;
177
- /** The suggested fix HTML */
178
- fixedHtml: string;
179
- /** Explanation of the change */
180
- explanation: string;
181
- /** Whether this is an auto-fixable change */
182
- autoFixable: boolean;
183
- }
184
-
185
- /**
186
- * Scan status for tracking progress
187
- */
188
- export type ScanStatus = 'idle' | 'pending' | 'scanning' | 'completed' | 'error';
189
-
190
- /**
191
- * Component scan state
192
- */
193
- export interface ComponentScanState {
194
- status: ScanStatus;
195
- lastScanAt?: number;
196
- error?: string;
197
- }