@tanstack/devtools-a11y 0.0.1 → 0.1.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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/dist/esm/core/components/IssueCard.d.ts +10 -0
  3. package/dist/esm/core/components/IssueCard.js +83 -0
  4. package/dist/esm/core/components/IssueCard.js.map +1 -0
  5. package/dist/esm/core/components/IssueList.d.ts +6 -0
  6. package/dist/esm/core/components/IssueList.js +134 -0
  7. package/dist/esm/core/components/IssueList.js.map +1 -0
  8. package/dist/esm/core/components/Settings.d.ts +6 -0
  9. package/dist/esm/core/components/Settings.js +251 -0
  10. package/dist/esm/core/components/Settings.js.map +1 -0
  11. package/dist/esm/core/components/Shell.d.ts +2 -0
  12. package/dist/esm/core/components/Shell.js +214 -0
  13. package/dist/esm/core/components/Shell.js.map +1 -0
  14. package/dist/esm/core/components/index.d.ts +2 -0
  15. package/dist/esm/core/components/index.js +14 -0
  16. package/dist/esm/core/components/index.js.map +1 -0
  17. package/dist/esm/core/contexts/allyContext.d.ts +17 -0
  18. package/dist/esm/core/contexts/allyContext.js +66 -0
  19. package/dist/esm/core/contexts/allyContext.js.map +1 -0
  20. package/dist/esm/core/core.d.ts +19 -0
  21. package/dist/esm/core/core.js +8 -0
  22. package/dist/esm/core/core.js.map +1 -0
  23. package/dist/esm/core/index.d.ts +9 -0
  24. package/dist/esm/core/index.js +9 -0
  25. package/dist/esm/core/index.js.map +1 -0
  26. package/dist/esm/core/production.d.ts +2 -0
  27. package/dist/esm/core/production.js +4 -0
  28. package/dist/esm/core/styles/styles.d.ts +85 -0
  29. package/dist/esm/core/styles/styles.js +547 -0
  30. package/dist/esm/core/styles/styles.js.map +1 -0
  31. package/dist/esm/core/types/types.d.ts +141 -0
  32. package/dist/esm/core/utils/ally-audit.utils.d.ts +19 -0
  33. package/dist/esm/core/utils/ally-audit.utils.js +226 -0
  34. package/dist/esm/core/utils/ally-audit.utils.js.map +1 -0
  35. package/dist/esm/core/utils/config.utils.d.ts +17 -0
  36. package/dist/esm/core/utils/config.utils.js +63 -0
  37. package/dist/esm/core/utils/config.utils.js.map +1 -0
  38. package/dist/esm/core/utils/custom-audit.utils.d.ts +13 -0
  39. package/dist/esm/core/utils/custom-audit.utils.js +426 -0
  40. package/dist/esm/core/utils/custom-audit.utils.js.map +1 -0
  41. package/dist/esm/core/utils/export-audit.uitls.d.ts +17 -0
  42. package/dist/esm/core/utils/export-audit.uitls.js +83 -0
  43. package/dist/esm/core/utils/export-audit.uitls.js.map +1 -0
  44. package/dist/esm/core/utils/ui.utils.d.ts +24 -0
  45. package/dist/esm/core/utils/ui.utils.js +330 -0
  46. package/dist/esm/core/utils/ui.utils.js.map +1 -0
  47. package/dist/esm/react/A11yDevtools.d.ts +5 -0
  48. package/dist/esm/react/A11yDevtools.js +8 -0
  49. package/dist/esm/react/A11yDevtools.js.map +1 -0
  50. package/dist/esm/react/index.d.ts +8 -0
  51. package/dist/esm/react/index.js +11 -0
  52. package/dist/esm/react/index.js.map +1 -0
  53. package/dist/esm/react/plugin.d.ts +12 -0
  54. package/dist/esm/react/plugin.js +11 -0
  55. package/dist/esm/react/plugin.js.map +1 -0
  56. package/dist/esm/react/production/A11yDevtools.d.ts +5 -0
  57. package/dist/esm/react/production/A11yDevtools.js +8 -0
  58. package/dist/esm/react/production/A11yDevtools.js.map +1 -0
  59. package/dist/esm/react/production/plugin.d.ts +7 -0
  60. package/dist/esm/react/production/plugin.js +11 -0
  61. package/dist/esm/react/production/plugin.js.map +1 -0
  62. package/dist/esm/react/production.d.ts +3 -0
  63. package/dist/esm/react/production.js +5 -0
  64. package/dist/esm/solid/A11yDevtools.d.ts +5 -0
  65. package/dist/esm/solid/A11yDevtools.js +8 -0
  66. package/dist/esm/solid/A11yDevtools.js.map +1 -0
  67. package/dist/esm/solid/index.d.ts +8 -0
  68. package/dist/esm/solid/index.js +9 -0
  69. package/dist/esm/solid/index.js.map +1 -0
  70. package/dist/esm/solid/plugin.d.ts +12 -0
  71. package/dist/esm/solid/plugin.js +11 -0
  72. package/dist/esm/solid/plugin.js.map +1 -0
  73. package/dist/esm/solid/production/A11yDevtools.d.ts +5 -0
  74. package/dist/esm/solid/production/A11yDevtools.js +8 -0
  75. package/dist/esm/solid/production/A11yDevtools.js.map +1 -0
  76. package/dist/esm/solid/production/plugin.d.ts +7 -0
  77. package/dist/esm/solid/production/plugin.js +11 -0
  78. package/dist/esm/solid/production/plugin.js.map +1 -0
  79. package/dist/esm/solid/production.d.ts +3 -0
  80. package/dist/esm/solid/production.js +3 -0
  81. package/package.json +110 -7
  82. package/src/core/components/IssueCard.tsx +75 -0
  83. package/src/core/components/IssueList.tsx +155 -0
  84. package/src/core/components/Settings.tsx +221 -0
  85. package/src/core/components/Shell.tsx +154 -0
  86. package/src/core/components/index.tsx +12 -0
  87. package/src/core/contexts/allyContext.tsx +118 -0
  88. package/src/core/core.tsx +11 -0
  89. package/src/core/index.ts +10 -0
  90. package/src/core/production.ts +5 -0
  91. package/src/core/styles/styles.ts +556 -0
  92. package/src/core/types/types.ts +177 -0
  93. package/src/core/utils/ally-audit.utils.ts +345 -0
  94. package/src/core/utils/config.utils.ts +68 -0
  95. package/src/core/utils/custom-audit.utils.ts +643 -0
  96. package/src/core/utils/export-audit.uitls.ts +180 -0
  97. package/src/core/utils/ui.utils.ts +483 -0
  98. package/src/react/A11yDevtools.ts +12 -0
  99. package/src/react/index.ts +16 -0
  100. package/src/react/plugin.ts +9 -0
  101. package/src/react/production/A11yDevtools.ts +11 -0
  102. package/src/react/production/plugin.ts +9 -0
  103. package/src/react/production.ts +7 -0
  104. package/src/solid/A11yDevtools.ts +11 -0
  105. package/src/solid/index.ts +14 -0
  106. package/src/solid/plugin.ts +9 -0
  107. package/src/solid/production/A11yDevtools.ts +10 -0
  108. package/src/solid/production/plugin.ts +9 -0
  109. package/src/solid/production.ts +5 -0
  110. package/README.md +0 -45
@@ -0,0 +1,547 @@
1
+ import { createMemo } from "solid-js";
2
+ import { useTheme } from "@tanstack/devtools-ui";
3
+ import * as goober from "goober";
4
+ //#region src/core/styles/styles.ts
5
+ var SEVERITY_COLORS = {
6
+ critical: "#dc2626",
7
+ serious: "#ea580c",
8
+ moderate: "#ca8a04",
9
+ minor: "#2563eb"
10
+ };
11
+ var CATEGORY_LABELS = {
12
+ all: "All Categories",
13
+ "cat.aria": "ARIA",
14
+ "cat.color": "Color & Contrast",
15
+ "cat.forms": "Forms",
16
+ "cat.keyboard": "Keyboard",
17
+ "cat.language": "Language",
18
+ "cat.name-role-value": "Names & Roles",
19
+ "cat.parsing": "Parsing",
20
+ "cat.semantics": "Semantics",
21
+ "cat.sensory-and-visual-cues": "Sensory Cues",
22
+ "cat.structure": "Structure",
23
+ "cat.tables": "Tables",
24
+ "cat.text-alternatives": "Text Alternatives",
25
+ "cat.time-and-media": "Time & Media"
26
+ };
27
+ var CATEGORIES = [
28
+ "all",
29
+ "cat.aria",
30
+ "cat.color",
31
+ "cat.forms",
32
+ "cat.keyboard",
33
+ "cat.language",
34
+ "cat.name-role-value",
35
+ "cat.parsing",
36
+ "cat.semantics",
37
+ "cat.sensory-and-visual-cues",
38
+ "cat.structure",
39
+ "cat.tables",
40
+ "cat.text-alternatives",
41
+ "cat.time-and-media"
42
+ ];
43
+ var css = goober.css;
44
+ var FONT_SCALE = 1.1;
45
+ var fontPx = (size) => `calc(${size}px * ${FONT_SCALE})`;
46
+ function createA11yPanelStyles(theme) {
47
+ const t = (light, dark) => theme === "light" ? light : dark;
48
+ const bg = t("#f9fafb;", "#191c24");
49
+ const fg = t("#1e293b", "#e2e8f0");
50
+ const border = t("#e2e8f0", "#292e3d");
51
+ const muted = t("#64748b", "#94a3b8");
52
+ const muted2 = t("#727c8b", "#818386");
53
+ return {
54
+ colors: {
55
+ bg,
56
+ fg,
57
+ border,
58
+ muted,
59
+ muted2,
60
+ theme
61
+ },
62
+ root: css`
63
+ height: 100%;
64
+ display: flex;
65
+ flex-direction: column;
66
+ overflow: hidden;
67
+ position: relative;
68
+ `,
69
+ header: css`
70
+ padding: 16px;
71
+ border-bottom: 1px solid ${border};
72
+ display: flex;
73
+ justify-content: space-between;
74
+ align-items: center;
75
+ flex-shrink: 0;
76
+ anchor-name: --a11y-toast-anchor;
77
+ `,
78
+ headerTitleRow: css`
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 12px;
82
+ min-width: 0;
83
+ `,
84
+ headerTitle: css`
85
+ margin: 0;
86
+ font-size: ${fontPx(16)};
87
+ font-weight: 600;
88
+ `,
89
+ headerSub: css`
90
+ font-size: ${fontPx(12)};
91
+ color: ${muted};
92
+ white-space: nowrap;
93
+ `,
94
+ headerActions: css`
95
+ display: flex;
96
+ gap: 8px;
97
+ align-items: center;
98
+ flex-wrap: wrap;
99
+ justify-content: flex-end;
100
+ `,
101
+ primaryButton: css`
102
+ padding: 8px 16px;
103
+ color: #fff;
104
+ border-radius: 6px;
105
+ cursor: pointer;
106
+ font-weight: 500;
107
+ font-size: ${fontPx(13)};
108
+ opacity: 1;
109
+ `,
110
+ primaryButtonDisabled: css`
111
+ cursor: not-allowed;
112
+ opacity: 0.7;
113
+ `,
114
+ button: css`
115
+ padding: 8px 12px;
116
+ color: ${fg};
117
+ border: 1px solid ${border};
118
+ border-radius: 6px;
119
+ cursor: pointer;
120
+ font-size: ${fontPx(11)};
121
+ `,
122
+ buttonRow: css`
123
+ display: flex;
124
+ gap: 6px;
125
+ align-items: center;
126
+ `,
127
+ toggleOverlay: css`
128
+ padding: 8px 12px;
129
+ color: ${fg};
130
+ border: 1px solid ${border};
131
+ border-radius: 6px;
132
+ cursor: pointer;
133
+ font-size: ${fontPx(13)};
134
+ `,
135
+ toggleOverlayOn: css`
136
+ background: #10b981;
137
+ color: #fff;
138
+ border-color: #10b981;
139
+ `,
140
+ statusBar: css`
141
+ padding: 8px 16px;
142
+ border-bottom: 1px solid ${border};
143
+ display: flex;
144
+ gap: 12px;
145
+ align-items: center;
146
+ flex-shrink: 0;
147
+ font-size: ${fontPx(11)};
148
+ color: ${muted};
149
+ `,
150
+ statusSpacer: css`
151
+ flex: 1;
152
+ `,
153
+ smallLinkButton: css`
154
+ padding: 4px 10px;
155
+ background: transparent;
156
+ color: #0ea5e9;
157
+ border: 1px solid ${border};
158
+ border-radius: 4px;
159
+ cursor: pointer;
160
+ font-size: ${fontPx(11)};
161
+ font-weight: 500;
162
+ `,
163
+ content: css`
164
+ flex: 1;
165
+ overflow-y: auto;
166
+ padding: 16px;
167
+ `,
168
+ emptyState: css`
169
+ display: flex;
170
+ flex-direction: column;
171
+ align-items: center;
172
+ justify-content: center;
173
+ height: 100%;
174
+ text-align: center;
175
+ color: ${muted};
176
+ `,
177
+ emptyPrimary: css`
178
+ font-size: ${fontPx(14)};
179
+ margin: 0 0 8px 0;
180
+ `,
181
+ emptySecondary: css`
182
+ font-size: ${fontPx(12)};
183
+ margin: 0;
184
+ `,
185
+ successState: css`
186
+ display: flex;
187
+ flex-direction: column;
188
+ align-items: center;
189
+ justify-content: center;
190
+ height: 100%;
191
+ text-align: center;
192
+ `,
193
+ successTitle: css`
194
+ font-size: ${fontPx(16)};
195
+ color: #10b981;
196
+ font-weight: 600;
197
+ margin: 0;
198
+ `,
199
+ successSub: css`
200
+ font-size: ${fontPx(12)};
201
+ color: ${muted};
202
+ margin-top: 8px;
203
+ margin-bottom: 0;
204
+ `,
205
+ summaryGrid: css`
206
+ display: grid;
207
+ grid-template-columns: repeat(4, 1fr);
208
+ gap: 12px;
209
+ margin-bottom: 20px;
210
+
211
+ @media (max-width: 520px) {
212
+ grid-template-columns: repeat(2, 1fr);
213
+ }
214
+ `,
215
+ summaryButton: css`
216
+ padding: 12px;
217
+ color: ${fg};
218
+ background: ${bg};
219
+ border-radius: 8px;
220
+ border: 1px solid ${border};
221
+ text-align: left;
222
+ cursor: pointer;
223
+ box-shadow: none;
224
+
225
+ &:hover {
226
+ background: ${t("#f0f2f5", "#111318")};
227
+ }
228
+ `,
229
+ summaryButtonActive: (impact) => css`
230
+ box-shadow: 0 0 0 2px ${SEVERITY_COLORS[impact]};
231
+ `,
232
+ summaryCount: (impact) => css`
233
+ font-size: ${fontPx(24)};
234
+ font-weight: 700;
235
+ color: ${SEVERITY_COLORS[impact]};
236
+ `,
237
+ summaryLabel: css`
238
+ font-size: ${fontPx(11)};
239
+ color: ${muted};
240
+ text-transform: uppercase;
241
+ `,
242
+ section: css`
243
+ margin-bottom: 16px;
244
+ `,
245
+ sectionTitle: (impact) => css`
246
+ color: ${SEVERITY_COLORS[impact]};
247
+ font-size: ${fontPx(13)};
248
+ font-weight: 600;
249
+ margin: 0 0 8px 0;
250
+ text-transform: uppercase;
251
+ letter-spacing: 0.5px;
252
+ `,
253
+ issueCard: css`
254
+ padding: 12px;
255
+ margin-bottom: 8px;
256
+ border: 1px solid ${border};
257
+ border-radius: 6px;
258
+ cursor: pointer;
259
+ `,
260
+ issueCardSelected: css`
261
+ background: ${t("#e0f2fe", "#1e3a5f")};
262
+ border-color: #0ea5e9;
263
+ `,
264
+ issueRow: css`
265
+ display: flex;
266
+ justify-content: space-between;
267
+ align-items: flex-start;
268
+ gap: 12px;
269
+ `,
270
+ issueMain: css`
271
+ flex: 1;
272
+ min-width: 0;
273
+ `,
274
+ issueTitleRow: css`
275
+ font-weight: 600;
276
+ font-size: ${fontPx(13)};
277
+ margin-bottom: 4px;
278
+ display: flex;
279
+ align-items: center;
280
+ gap: 8px;
281
+ `,
282
+ dot: (impact) => css`
283
+ width: 8px;
284
+ height: 8px;
285
+ border-radius: 50%;
286
+ background: ${SEVERITY_COLORS[impact]};
287
+ flex-shrink: 0;
288
+ `,
289
+ issueMessage: css`
290
+ font-size: ${fontPx(12)};
291
+ color: ${t("#475569", "#cbd5e1")};
292
+ margin: 0 0 8px 0;
293
+ line-height: 1.4;
294
+ `,
295
+ selector: css`
296
+ font-size: ${fontPx(10)};
297
+ color: ${muted2};
298
+ font-family:
299
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
300
+ 'Liberation Mono', 'Courier New', monospace;
301
+ overflow: hidden;
302
+ text-overflow: ellipsis;
303
+ white-space: nowrap;
304
+ `,
305
+ issueAside: css`
306
+ display: flex;
307
+ flex-direction: column;
308
+ align-items: flex-end;
309
+ gap: 4px;
310
+ flex-shrink: 0;
311
+ `,
312
+ helpLink: css`
313
+ font-size: ${fontPx(12)};
314
+ color: #0ea5e9;
315
+ padding: 0 12px;
316
+ font-weight: 600;
317
+ text-decoration: underline;
318
+ text-underline-offset: 2px;
319
+
320
+ &:hover {
321
+ color: #0284c7;
322
+ }
323
+
324
+ &:focus-visible {
325
+ outline: 2px solid #0ea5e9;
326
+ outline-offset: 2px;
327
+ border-radius: 4px;
328
+ }
329
+ `,
330
+ disableRule: css`
331
+ font-size: ${fontPx(10)};
332
+ color: ${muted};
333
+ background: none;
334
+ border: none;
335
+ cursor: pointer;
336
+ padding: 0;
337
+ font-weight: 600;
338
+
339
+ &:hover {
340
+ color: #000000;
341
+ }
342
+
343
+ &:focus-visible {
344
+ outline: 2px solid #0ea5e9;
345
+ outline-offset: 2px;
346
+ border-radius: 4px;
347
+ }
348
+ `,
349
+ tags: css`
350
+ display: flex;
351
+ gap: 4px;
352
+ margin-top: 8px;
353
+ flex-wrap: wrap;
354
+ `,
355
+ tag: css`
356
+ font-size: ${fontPx(10)};
357
+ padding: 2px 6px;
358
+ border: 1px solid ${border};
359
+ border-radius: 4px;
360
+ color: ${muted};
361
+ `,
362
+ settingsOverlay: css`
363
+ position: absolute;
364
+ inset: 0;
365
+ background: ${bg};
366
+ display: flex;
367
+ flex-direction: column;
368
+ z-index: 10;
369
+ `,
370
+ settingsHeader: css`
371
+ padding: 12px 16px;
372
+ border-bottom: 1px solid ${border};
373
+ display: flex;
374
+ justify-content: space-between;
375
+ align-items: center;
376
+ flex-shrink: 0;
377
+ `,
378
+ settingsTitle: css`
379
+ margin: 0;
380
+ font-size: ${fontPx(14)};
381
+ font-weight: 600;
382
+ `,
383
+ doneButton: css`
384
+ padding: 6px 12px;
385
+ background: ${bg};
386
+ color: ${bg};
387
+ border: none;
388
+ border-radius: 4px;
389
+ cursor: pointer;
390
+ font-size: ${fontPx(12)};
391
+ font-weight: 500;
392
+ `,
393
+ settingsContent: css`
394
+ flex: 1;
395
+ overflow-y: auto;
396
+ padding: 16px;
397
+ `,
398
+ settingsSection: css`
399
+ margin-bottom: 24px;
400
+ `,
401
+ settingsRowStack: css`
402
+ display: grid;
403
+ gap: 12px;
404
+ `,
405
+ settingsSectionLabel: css`
406
+ margin: 0 0 12px 0;
407
+ font-size: ${fontPx(12)};
408
+ font-weight: 600;
409
+ text-transform: uppercase;
410
+ letter-spacing: 0.5px;
411
+ color: ${muted};
412
+ `,
413
+ settingsRow: css`
414
+ display: flex;
415
+ align-items: center;
416
+ justify-content: space-between;
417
+ padding: 10px 0;
418
+ border-bottom: 1px solid ${border};
419
+ gap: 12px;
420
+ `,
421
+ settingsRowTitle: css`
422
+ font-size: ${fontPx(13)};
423
+ font-weight: 500;
424
+ `,
425
+ settingsRowDesc: css`
426
+ font-size: ${fontPx(11)};
427
+ color: ${muted};
428
+ margin-top: 2px;
429
+ `,
430
+ select: css`
431
+ padding: 6px 10px;
432
+ border: 1px solid ${border};
433
+ border-radius: 4px;
434
+ background: ${bg};
435
+ color: ${fg};
436
+ font-size: ${fontPx(12)};
437
+ `,
438
+ rulesHeaderRow: css`
439
+ display: flex;
440
+ align-items: center;
441
+ justify-content: space-between;
442
+ margin-bottom: 12px;
443
+ gap: 12px;
444
+ flex-wrap: wrap;
445
+ `,
446
+ rulesHeaderActions: css`
447
+ display: flex;
448
+ gap: 6px;
449
+ `,
450
+ filtersRow: css`
451
+ display: flex;
452
+ gap: 8px;
453
+ margin-bottom: 12px;
454
+ flex-wrap: wrap;
455
+ `,
456
+ search: css`
457
+ flex: 1;
458
+ min-width: 180px;
459
+ padding: 8px 10px;
460
+ border: 1px solid ${border};
461
+ border-radius: 4px;
462
+ background: ${bg};
463
+ color: ${fg};
464
+ font-size: ${fontPx(12)};
465
+ box-sizing: border-box;
466
+ `,
467
+ rulesList: css`
468
+ border: 1px solid ${border};
469
+ border-radius: 6px;
470
+ overflow-y: auto;
471
+ `,
472
+ ruleRow: css`
473
+ display: flex;
474
+ align-items: flex-start;
475
+ gap: 8px;
476
+ padding: 8px 10px;
477
+ cursor: pointer;
478
+ opacity: 1;
479
+ background: transparent;
480
+
481
+ &:hover {
482
+ background: ${t("#f0f2f5", "#111318")};
483
+ }
484
+ `,
485
+ ruleRowDisabled: css`
486
+ opacity: 0.6;
487
+ `,
488
+ ruleRowBorder: css`
489
+ border-bottom: 1px solid ${border};
490
+ `,
491
+ ruleCheckbox: css`
492
+ margin-top: 2px;
493
+ flex-shrink: 0;
494
+ `,
495
+ ruleInfo: css`
496
+ flex: 1;
497
+ min-width: 0;
498
+ `,
499
+ ruleTop: css`
500
+ display: flex;
501
+ align-items: center;
502
+ gap: 6px;
503
+ margin-bottom: 2px;
504
+ `,
505
+ ruleId: css`
506
+ font-weight: 500;
507
+ font-size: ${fontPx(12)};
508
+ text-decoration: none;
509
+ `,
510
+ ruleIdDisabled: css`
511
+ text-decoration: line-through;
512
+ `,
513
+ bpBadge: css`
514
+ font-size: ${fontPx(9)};
515
+ padding: 1px 4px;
516
+ background: #f59e0b;
517
+ color: #fff;
518
+ border-radius: 3px;
519
+ font-weight: 500;
520
+ `,
521
+ ruleDesc: css`
522
+ font-size: ${fontPx(11)};
523
+ color: ${muted};
524
+ line-height: 2;
525
+ `,
526
+ catTagRow: css`
527
+ display: flex;
528
+ gap: 4px;
529
+ margin-top: 4px;
530
+ `,
531
+ catTag: css`
532
+ font-size: ${fontPx(9)};
533
+ padding: 1px 4px;
534
+ border: 1px solid ${muted};
535
+ border-radius: 3px;
536
+ color: ${muted};
537
+ `
538
+ };
539
+ }
540
+ function useStyles() {
541
+ const { theme } = useTheme();
542
+ return createMemo(() => createA11yPanelStyles(theme()));
543
+ }
544
+ //#endregion
545
+ export { CATEGORIES, CATEGORY_LABELS, useStyles };
546
+
547
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","names":[],"sources":["../../../../src/core/styles/styles.ts"],"sourcesContent":["import * as goober from 'goober'\nimport { useTheme } from '@tanstack/devtools-ui'\nimport { createMemo } from 'solid-js'\n\nimport type { TanStackDevtoolsTheme } from '@tanstack/devtools-ui'\nimport type { RuleCategory, SeverityThreshold } from '../types/types'\n\nconst SEVERITY_COLORS: Record<SeverityThreshold, string> = {\n critical: '#dc2626',\n serious: '#ea580c',\n moderate: '#ca8a04',\n minor: '#2563eb',\n}\n\nexport const CATEGORY_LABELS: Record<RuleCategory, string> = {\n all: 'All Categories',\n 'cat.aria': 'ARIA',\n 'cat.color': 'Color & Contrast',\n 'cat.forms': 'Forms',\n 'cat.keyboard': 'Keyboard',\n 'cat.language': 'Language',\n 'cat.name-role-value': 'Names & Roles',\n 'cat.parsing': 'Parsing',\n 'cat.semantics': 'Semantics',\n 'cat.sensory-and-visual-cues': 'Sensory Cues',\n 'cat.structure': 'Structure',\n 'cat.tables': 'Tables',\n 'cat.text-alternatives': 'Text Alternatives',\n 'cat.time-and-media': 'Time & Media',\n}\n\nexport const CATEGORIES: Array<RuleCategory> = [\n 'all',\n 'cat.aria',\n 'cat.color',\n 'cat.forms',\n 'cat.keyboard',\n 'cat.language',\n 'cat.name-role-value',\n 'cat.parsing',\n 'cat.semantics',\n 'cat.sensory-and-visual-cues',\n 'cat.structure',\n 'cat.tables',\n 'cat.text-alternatives',\n 'cat.time-and-media',\n]\n\nconst css = goober.css\nconst FONT_SCALE = 1.1\nconst fontPx = (size: number) => `calc(${size}px * ${FONT_SCALE})`\n\nfunction createA11yPanelStyles(theme: TanStackDevtoolsTheme) {\n const t = (light: string, dark: string) => (theme === 'light' ? light : dark)\n\n const bg = t('#f9fafb;', '#191c24')\n const fg = t('#1e293b', '#e2e8f0')\n const border = t('#e2e8f0', '#292e3d')\n const muted = t('#64748b', '#94a3b8')\n const muted2 = t('#727c8b', '#818386')\n\n return {\n colors: { bg, fg, border, muted, muted2, theme },\n\n root: css`\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n position: relative;\n `,\n\n header: css`\n padding: 16px;\n border-bottom: 1px solid ${border};\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n anchor-name: --a11y-toast-anchor;\n `,\n headerTitleRow: css`\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n `,\n headerTitle: css`\n margin: 0;\n font-size: ${fontPx(16)};\n font-weight: 600;\n `,\n headerSub: css`\n font-size: ${fontPx(12)};\n color: ${muted};\n white-space: nowrap;\n `,\n headerActions: css`\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n justify-content: flex-end;\n `,\n primaryButton: css`\n padding: 8px 16px;\n color: #fff;\n border-radius: 6px;\n cursor: pointer;\n font-weight: 500;\n font-size: ${fontPx(13)};\n opacity: 1;\n `,\n primaryButtonDisabled: css`\n cursor: not-allowed;\n opacity: 0.7;\n `,\n button: css`\n padding: 8px 12px;\n color: ${fg};\n border: 1px solid ${border};\n border-radius: 6px;\n cursor: pointer;\n font-size: ${fontPx(11)};\n `,\n buttonRow: css`\n display: flex;\n gap: 6px;\n align-items: center;\n `,\n toggleOverlay: css`\n padding: 8px 12px;\n color: ${fg};\n border: 1px solid ${border};\n border-radius: 6px;\n cursor: pointer;\n font-size: ${fontPx(13)};\n `,\n toggleOverlayOn: css`\n background: #10b981;\n color: #fff;\n border-color: #10b981;\n `,\n\n statusBar: css`\n padding: 8px 16px;\n border-bottom: 1px solid ${border};\n display: flex;\n gap: 12px;\n align-items: center;\n flex-shrink: 0;\n font-size: ${fontPx(11)};\n color: ${muted};\n `,\n statusSpacer: css`\n flex: 1;\n `,\n smallLinkButton: css`\n padding: 4px 10px;\n background: transparent;\n color: #0ea5e9;\n border: 1px solid ${border};\n border-radius: 4px;\n cursor: pointer;\n font-size: ${fontPx(11)};\n font-weight: 500;\n `,\n\n content: css`\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n `,\n emptyState: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n color: ${muted};\n `,\n emptyPrimary: css`\n font-size: ${fontPx(14)};\n margin: 0 0 8px 0;\n `,\n emptySecondary: css`\n font-size: ${fontPx(12)};\n margin: 0;\n `,\n successState: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n `,\n successTitle: css`\n font-size: ${fontPx(16)};\n color: #10b981;\n font-weight: 600;\n margin: 0;\n `,\n successSub: css`\n font-size: ${fontPx(12)};\n color: ${muted};\n margin-top: 8px;\n margin-bottom: 0;\n `,\n\n summaryGrid: css`\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n\n @media (max-width: 520px) {\n grid-template-columns: repeat(2, 1fr);\n }\n `,\n summaryButton: css`\n padding: 12px;\n color: ${fg};\n background: ${bg};\n border-radius: 8px;\n border: 1px solid ${border};\n text-align: left;\n cursor: pointer;\n box-shadow: none;\n\n &:hover {\n background: ${t('#f0f2f5', '#111318')};\n }\n `,\n summaryButtonActive: (impact: SeverityThreshold) => css`\n box-shadow: 0 0 0 2px ${SEVERITY_COLORS[impact]};\n `,\n summaryCount: (impact: SeverityThreshold) => css`\n font-size: ${fontPx(24)};\n font-weight: 700;\n color: ${SEVERITY_COLORS[impact]};\n `,\n summaryLabel: css`\n font-size: ${fontPx(11)};\n color: ${muted};\n text-transform: uppercase;\n `,\n\n section: css`\n margin-bottom: 16px;\n `,\n sectionTitle: (impact: SeverityThreshold) => css`\n color: ${SEVERITY_COLORS[impact]};\n font-size: ${fontPx(13)};\n font-weight: 600;\n margin: 0 0 8px 0;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n `,\n\n issueCard: css`\n padding: 12px;\n margin-bottom: 8px;\n border: 1px solid ${border};\n border-radius: 6px;\n cursor: pointer;\n `,\n issueCardSelected: css`\n background: ${t('#e0f2fe', '#1e3a5f')};\n border-color: #0ea5e9;\n `,\n issueRow: css`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n `,\n issueMain: css`\n flex: 1;\n min-width: 0;\n `,\n issueTitleRow: css`\n font-weight: 600;\n font-size: ${fontPx(13)};\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 8px;\n `,\n dot: (impact: SeverityThreshold) => css`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: ${SEVERITY_COLORS[impact]};\n flex-shrink: 0;\n `,\n issueMessage: css`\n font-size: ${fontPx(12)};\n color: ${t('#475569', '#cbd5e1')};\n margin: 0 0 8px 0;\n line-height: 1.4;\n `,\n selector: css`\n font-size: ${fontPx(10)};\n color: ${muted2};\n font-family:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,\n 'Liberation Mono', 'Courier New', monospace;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n issueAside: css`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n flex-shrink: 0;\n `,\n helpLink: css`\n font-size: ${fontPx(12)};\n color: #0ea5e9;\n padding: 0 12px;\n font-weight: 600;\n text-decoration: underline;\n text-underline-offset: 2px;\n\n &:hover {\n color: #0284c7;\n }\n\n &:focus-visible {\n outline: 2px solid #0ea5e9;\n outline-offset: 2px;\n border-radius: 4px;\n }\n `,\n disableRule: css`\n font-size: ${fontPx(10)};\n color: ${muted};\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n font-weight: 600;\n\n &:hover {\n color: #000000;\n }\n\n &:focus-visible {\n outline: 2px solid #0ea5e9;\n outline-offset: 2px;\n border-radius: 4px;\n }\n `,\n tags: css`\n display: flex;\n gap: 4px;\n margin-top: 8px;\n flex-wrap: wrap;\n `,\n tag: css`\n font-size: ${fontPx(10)};\n padding: 2px 6px;\n border: 1px solid ${border};\n border-radius: 4px;\n color: ${muted};\n `,\n\n settingsOverlay: css`\n position: absolute;\n inset: 0;\n background: ${bg};\n display: flex;\n flex-direction: column;\n z-index: 10;\n `,\n settingsHeader: css`\n padding: 12px 16px;\n border-bottom: 1px solid ${border};\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n `,\n settingsTitle: css`\n margin: 0;\n font-size: ${fontPx(14)};\n font-weight: 600;\n `,\n doneButton: css`\n padding: 6px 12px;\n background: ${bg};\n color: ${bg};\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: ${fontPx(12)};\n font-weight: 500;\n `,\n settingsContent: css`\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n `,\n settingsSection: css`\n margin-bottom: 24px;\n `,\n settingsRowStack: css`\n display: grid;\n gap: 12px;\n `,\n settingsSectionLabel: css`\n margin: 0 0 12px 0;\n font-size: ${fontPx(12)};\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: ${muted};\n `,\n settingsRow: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 0;\n border-bottom: 1px solid ${border};\n gap: 12px;\n `,\n settingsRowTitle: css`\n font-size: ${fontPx(13)};\n font-weight: 500;\n `,\n settingsRowDesc: css`\n font-size: ${fontPx(11)};\n color: ${muted};\n margin-top: 2px;\n `,\n select: css`\n padding: 6px 10px;\n border: 1px solid ${border};\n border-radius: 4px;\n background: ${bg};\n color: ${fg};\n font-size: ${fontPx(12)};\n `,\n rulesHeaderRow: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n gap: 12px;\n flex-wrap: wrap;\n `,\n rulesHeaderActions: css`\n display: flex;\n gap: 6px;\n `,\n filtersRow: css`\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n `,\n search: css`\n flex: 1;\n min-width: 180px;\n padding: 8px 10px;\n border: 1px solid ${border};\n border-radius: 4px;\n background: ${bg};\n color: ${fg};\n font-size: ${fontPx(12)};\n box-sizing: border-box;\n `,\n rulesList: css`\n border: 1px solid ${border};\n border-radius: 6px;\n overflow-y: auto;\n `,\n ruleRow: css`\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 10px;\n cursor: pointer;\n opacity: 1;\n background: transparent;\n\n &:hover {\n background: ${t('#f0f2f5', '#111318')};\n }\n `,\n ruleRowDisabled: css`\n opacity: 0.6;\n `,\n ruleRowBorder: css`\n border-bottom: 1px solid ${border};\n `,\n ruleCheckbox: css`\n margin-top: 2px;\n flex-shrink: 0;\n `,\n ruleInfo: css`\n flex: 1;\n min-width: 0;\n `,\n ruleTop: css`\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 2px;\n `,\n ruleId: css`\n font-weight: 500;\n font-size: ${fontPx(12)};\n text-decoration: none;\n `,\n ruleIdDisabled: css`\n text-decoration: line-through;\n `,\n bpBadge: css`\n font-size: ${fontPx(9)};\n padding: 1px 4px;\n background: #f59e0b;\n color: #fff;\n border-radius: 3px;\n font-weight: 500;\n `,\n ruleDesc: css`\n font-size: ${fontPx(11)};\n color: ${muted};\n line-height: 2;\n `,\n catTagRow: css`\n display: flex;\n gap: 4px;\n margin-top: 4px;\n `,\n catTag: css`\n font-size: ${fontPx(9)};\n padding: 1px 4px;\n border: 1px solid ${muted};\n border-radius: 3px;\n color: ${muted};\n `,\n }\n}\n\nexport function useStyles() {\n const { theme } = useTheme()\n const styles = createMemo(() => createA11yPanelStyles(theme()))\n\n return styles\n}\n"],"mappings":"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"}