@compa11y/core 0.1.0 → 0.1.3

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 (61) hide show
  1. package/dist/announcer/index.cjs +1 -49
  2. package/dist/announcer/index.d.cts +1 -1
  3. package/dist/announcer/index.d.ts +1 -1
  4. package/dist/announcer/index.js +1 -4
  5. package/dist/aria/index.cjs +1 -24
  6. package/dist/aria/index.d.cts +1 -1
  7. package/dist/aria/index.d.ts +1 -1
  8. package/dist/aria/index.js +1 -3
  9. package/dist/chunk-7BL2ABLF.cjs +1 -0
  10. package/dist/chunk-AQ6HEUSD.cjs +1 -0
  11. package/dist/chunk-BAFKUMWA.js +1 -0
  12. package/dist/chunk-C3VZQUKG.js +1 -0
  13. package/dist/chunk-EM45V5TK.cjs +1 -0
  14. package/dist/chunk-KQUAJKTG.cjs +1 -0
  15. package/dist/chunk-OSJIG3A2.cjs +1 -0
  16. package/dist/chunk-RE4QIUWR.js +1 -0
  17. package/dist/chunk-TGXWODB3.js +1 -0
  18. package/dist/chunk-ZAQMM5TA.js +1 -0
  19. package/dist/focus/index.cjs +1 -53
  20. package/dist/focus/index.d.cts +1 -1
  21. package/dist/focus/index.d.ts +1 -1
  22. package/dist/focus/index.js +1 -4
  23. package/dist/index.cjs +2 -572
  24. package/dist/index.d.cts +4 -4
  25. package/dist/index.d.ts +4 -4
  26. package/dist/index.js +2 -342
  27. package/dist/keyboard/index.cjs +1 -28
  28. package/dist/keyboard/index.js +1 -3
  29. package/dist/{types-DDSPmE8m.d.ts → types-DpTUSAxr.d.cts} +1 -1
  30. package/dist/{types-DDSPmE8m.d.cts → types-DpTUSAxr.d.ts} +1 -1
  31. package/package.json +1 -1
  32. package/dist/announcer/index.cjs.map +0 -1
  33. package/dist/announcer/index.js.map +0 -1
  34. package/dist/aria/index.cjs.map +0 -1
  35. package/dist/aria/index.js.map +0 -1
  36. package/dist/chunk-24U5HHMC.js +0 -309
  37. package/dist/chunk-24U5HHMC.js.map +0 -1
  38. package/dist/chunk-2CQOLVQH.js +0 -147
  39. package/dist/chunk-2CQOLVQH.js.map +0 -1
  40. package/dist/chunk-2PUYKF2E.js +0 -631
  41. package/dist/chunk-2PUYKF2E.js.map +0 -1
  42. package/dist/chunk-2WF5Y6D7.js +0 -175
  43. package/dist/chunk-2WF5Y6D7.js.map +0 -1
  44. package/dist/chunk-CQXMBRLD.cjs +0 -657
  45. package/dist/chunk-CQXMBRLD.cjs.map +0 -1
  46. package/dist/chunk-HQOFVJFO.cjs +0 -181
  47. package/dist/chunk-HQOFVJFO.cjs.map +0 -1
  48. package/dist/chunk-NBGFFCIJ.cjs +0 -314
  49. package/dist/chunk-NBGFFCIJ.cjs.map +0 -1
  50. package/dist/chunk-V6TZIZZ4.cjs +0 -158
  51. package/dist/chunk-V6TZIZZ4.cjs.map +0 -1
  52. package/dist/chunk-XEGB27QF.cjs +0 -78
  53. package/dist/chunk-XEGB27QF.cjs.map +0 -1
  54. package/dist/chunk-Z7K2G6FX.js +0 -66
  55. package/dist/chunk-Z7K2G6FX.js.map +0 -1
  56. package/dist/focus/index.cjs.map +0 -1
  57. package/dist/focus/index.js.map +0 -1
  58. package/dist/index.cjs.map +0 -1
  59. package/dist/index.js.map +0 -1
  60. package/dist/keyboard/index.cjs.map +0 -1
  61. package/dist/keyboard/index.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,573 +1,3 @@
1
- 'use strict';
1
+ 'use strict';var chunkOSJIG3A2_cjs=require('./chunk-OSJIG3A2.cjs'),chunkEM45V5TK_cjs=require('./chunk-EM45V5TK.cjs'),chunkAQ6HEUSD_cjs=require('./chunk-AQ6HEUSD.cjs'),chunk7BL2ABLF_cjs=require('./chunk-7BL2ABLF.cjs'),chunkKQUAJKTG_cjs=require('./chunk-KQUAJKTG.cjs');var g=0,d="compa11y";function u(e){let n=++g;return e?`${d}-${e}-${n}`:`${d}-${n}`}function he(e,n){let r=u(n),t={};for(let o of e)t[o]=`${r}-${o}`;return t}function ke(){g=0;}function $e(e){let n=u(e);return {id:n,generate:r=>`${n}-${r}`,generateMultiple:r=>{let t={};for(let o of r)t[o]=`${n}-${o}`;return t}}}var a=null,l=new Set;function p(){return typeof process<"u"&&process.env?.NODE_ENV!=="production"}function b(e){a=e;}function f(e){return `${e.component}:${e.message}`}function i(e){if(!p())return;let n=f(e);if(l.has(n))return;if(l.add(n),a){a(e);return}let r=`[compa11y/${e.component}]`,t=m(e.type),o=e.suggestion?`${e.message}
2
2
 
3
- var chunkCQXMBRLD_cjs = require('./chunk-CQXMBRLD.cjs');
4
- var chunkHQOFVJFO_cjs = require('./chunk-HQOFVJFO.cjs');
5
- var chunkV6TZIZZ4_cjs = require('./chunk-V6TZIZZ4.cjs');
6
- var chunkXEGB27QF_cjs = require('./chunk-XEGB27QF.cjs');
7
- var chunkNBGFFCIJ_cjs = require('./chunk-NBGFFCIJ.cjs');
8
-
9
- // src/utils/id.ts
10
- var idCounter = 0;
11
- var PREFIX = "compa11y";
12
- function generateId(prefix) {
13
- const id = ++idCounter;
14
- return prefix ? `${PREFIX}-${prefix}-${id}` : `${PREFIX}-${id}`;
15
- }
16
- function generateIds(parts, prefix) {
17
- const baseId = generateId(prefix);
18
- const ids = {};
19
- for (const part of parts) {
20
- ids[part] = `${baseId}-${part}`;
21
- }
22
- return ids;
23
- }
24
- function resetIdCounter() {
25
- idCounter = 0;
26
- }
27
- function createIdScope(componentName) {
28
- const scopeId = generateId(componentName);
29
- return {
30
- id: scopeId,
31
- generate: (suffix) => `${scopeId}-${suffix}`,
32
- generateMultiple: (parts) => {
33
- const ids = {};
34
- for (const part of parts) {
35
- ids[part] = `${scopeId}-${part}`;
36
- }
37
- return ids;
38
- }
39
- };
40
- }
41
-
42
- // src/dev/warnings.ts
43
- var warningHandler = null;
44
- var issuedWarnings = /* @__PURE__ */ new Set();
45
- function isDev() {
46
- return typeof process !== "undefined" && process.env?.NODE_ENV !== "production";
47
- }
48
- function setWarningHandler(handler) {
49
- warningHandler = handler;
50
- }
51
- function createWarningKey(warning) {
52
- return `${warning.component}:${warning.message}`;
53
- }
54
- function warn(warning) {
55
- if (!isDev()) return;
56
- const key = createWarningKey(warning);
57
- if (issuedWarnings.has(key)) return;
58
- issuedWarnings.add(key);
59
- if (warningHandler) {
60
- warningHandler(warning);
61
- return;
62
- }
63
- const prefix = `[compa11y/${warning.component}]`;
64
- const style = getConsoleStyle(warning.type);
65
- const message = warning.suggestion ? `${warning.message}
66
-
67
- \u{1F4A1} Suggestion: ${warning.suggestion}` : warning.message;
68
- switch (warning.type) {
69
- case "error":
70
- console.error(`%c${prefix}%c ${message}`, style, "");
71
- break;
72
- case "warning":
73
- console.warn(`%c${prefix}%c ${message}`, style, "");
74
- break;
75
- case "info":
76
- console.info(`%c${prefix}%c ${message}`, style, "");
77
- break;
78
- }
79
- if (warning.element) {
80
- console.log("Element:", warning.element);
81
- }
82
- }
83
- function getConsoleStyle(type) {
84
- switch (type) {
85
- case "error":
86
- return "background: #ff5555; color: white; padding: 2px 4px; border-radius: 2px; font-weight: bold;";
87
- case "warning":
88
- return "background: #ffaa00; color: black; padding: 2px 4px; border-radius: 2px; font-weight: bold;";
89
- case "info":
90
- return "background: #5555ff; color: white; padding: 2px 4px; border-radius: 2px; font-weight: bold;";
91
- }
92
- }
93
- function clearWarnings() {
94
- issuedWarnings.clear();
95
- }
96
- var checks = {
97
- /**
98
- * Check for missing accessible label
99
- */
100
- accessibleLabel(element, component, propName = "aria-label") {
101
- if (!element) return;
102
- if (!chunkNBGFFCIJ_cjs.hasAccessibleName(element)) {
103
- warn({
104
- type: "error",
105
- component,
106
- message: `Missing accessible label. Screen reader users will not be able to understand this element.`,
107
- suggestion: `Add ${propName}, aria-labelledby, or visible text content.`,
108
- element
109
- });
110
- }
111
- },
112
- /**
113
- * Check for missing required prop
114
- */
115
- requiredProp(value, propName, component) {
116
- if (value === void 0 || value === null || value === "") {
117
- warn({
118
- type: "error",
119
- component,
120
- message: `Missing required prop "${propName}".`,
121
- suggestion: `Provide a value for the "${propName}" prop.`
122
- });
123
- }
124
- },
125
- /**
126
- * Check for invalid ARIA role
127
- */
128
- validRole(role, component, element) {
129
- if (!role) return;
130
- const validRoles = /* @__PURE__ */ new Set([
131
- "alert",
132
- "alertdialog",
133
- "application",
134
- "article",
135
- "banner",
136
- "button",
137
- "cell",
138
- "checkbox",
139
- "columnheader",
140
- "combobox",
141
- "complementary",
142
- "contentinfo",
143
- "definition",
144
- "dialog",
145
- "directory",
146
- "document",
147
- "feed",
148
- "figure",
149
- "form",
150
- "grid",
151
- "gridcell",
152
- "group",
153
- "heading",
154
- "img",
155
- "link",
156
- "list",
157
- "listbox",
158
- "listitem",
159
- "log",
160
- "main",
161
- "marquee",
162
- "math",
163
- "menu",
164
- "menubar",
165
- "menuitem",
166
- "menuitemcheckbox",
167
- "menuitemradio",
168
- "navigation",
169
- "none",
170
- "note",
171
- "option",
172
- "presentation",
173
- "progressbar",
174
- "radio",
175
- "radiogroup",
176
- "region",
177
- "row",
178
- "rowgroup",
179
- "rowheader",
180
- "scrollbar",
181
- "search",
182
- "searchbox",
183
- "separator",
184
- "slider",
185
- "spinbutton",
186
- "status",
187
- "switch",
188
- "tab",
189
- "table",
190
- "tablist",
191
- "tabpanel",
192
- "term",
193
- "textbox",
194
- "timer",
195
- "toolbar",
196
- "tooltip",
197
- "tree",
198
- "treegrid",
199
- "treeitem"
200
- ]);
201
- if (!validRoles.has(role)) {
202
- warn({
203
- type: "warning",
204
- component,
205
- message: `Invalid ARIA role "${role}".`,
206
- suggestion: "Use a valid ARIA role from the WAI-ARIA specification.",
207
- element
208
- });
209
- }
210
- },
211
- /**
212
- * Check for interactive element without keyboard support
213
- */
214
- keyboardAccessible(element, component, handlers) {
215
- if (!element) return;
216
- if (handlers.onClick && !handlers.onKeyDown) {
217
- const tagName = element.tagName.toLowerCase();
218
- const role = element.getAttribute("role");
219
- if (["button", "a", "input", "select", "textarea"].includes(tagName)) {
220
- return;
221
- }
222
- const interactiveRoles = ["button", "link", "menuitem", "option", "tab"];
223
- if (role && interactiveRoles.includes(role)) {
224
- warn({
225
- type: "warning",
226
- component,
227
- message: `Element has onClick but no onKeyDown handler.`,
228
- suggestion: "Add keyboard event handling for Enter and Space keys.",
229
- element
230
- });
231
- }
232
- }
233
- },
234
- /**
235
- * Check tabIndex usage
236
- */
237
- tabIndex(tabIndex, component, element) {
238
- if (tabIndex === void 0) return;
239
- if (tabIndex > 0) {
240
- warn({
241
- type: "warning",
242
- component,
243
- message: `Positive tabIndex (${tabIndex}) disrupts natural tab order.`,
244
- suggestion: "Use tabIndex={0} or tabIndex={-1} instead. Rely on DOM order for tab sequence.",
245
- element
246
- });
247
- }
248
- },
249
- /**
250
- * Check for autofocus in dialogs
251
- */
252
- dialogAutoFocus(hasAutoFocus, component) {
253
- if (!hasAutoFocus) {
254
- warn({
255
- type: "info",
256
- component,
257
- message: "No initial focus element specified for dialog.",
258
- suggestion: "Consider setting initialFocus to guide keyboard users."
259
- });
260
- }
261
- },
262
- /**
263
- * Check for missing form labels
264
- */
265
- formLabel(inputElement, labelId, component) {
266
- if (!inputElement) return;
267
- const hasLabel = labelId || inputElement.getAttribute("aria-label") || inputElement.getAttribute("aria-labelledby") || inputElement.labels?.length;
268
- if (!hasLabel) {
269
- warn({
270
- type: "error",
271
- component,
272
- message: "Form input is missing an accessible label.",
273
- suggestion: "Add a <label>, aria-label, or aria-labelledby.",
274
- element: inputElement
275
- });
276
- }
277
- },
278
- /**
279
- * Check for missing alt text on images
280
- */
281
- imageAlt(element, component) {
282
- if (!element || element.tagName !== "IMG") return;
283
- const alt = element.getAttribute("alt");
284
- const role = element.getAttribute("role");
285
- if (alt === null && role !== "presentation" && role !== "none") {
286
- warn({
287
- type: "error",
288
- component,
289
- message: "Image is missing alt attribute.",
290
- suggestion: 'Add alt="" for decorative images or descriptive alt text for meaningful images.',
291
- element
292
- });
293
- }
294
- }
295
- };
296
- function createComponentWarnings(componentName) {
297
- return {
298
- error: (message, suggestion, element) => warn({
299
- type: "error",
300
- component: componentName,
301
- message,
302
- suggestion,
303
- element
304
- }),
305
- warning: (message, suggestion, element) => warn({
306
- type: "warning",
307
- component: componentName,
308
- message,
309
- suggestion,
310
- element
311
- }),
312
- info: (message, suggestion, element) => warn({
313
- type: "info",
314
- component: componentName,
315
- message,
316
- suggestion,
317
- element
318
- }),
319
- checks: {
320
- accessibleLabel: (element, propName) => checks.accessibleLabel(element, componentName, propName),
321
- requiredProp: (value, propName) => checks.requiredProp(value, propName, componentName),
322
- keyboardAccessible: (element, handlers) => checks.keyboardAccessible(element, componentName, handlers),
323
- tabIndex: (tabIndex, element) => checks.tabIndex(tabIndex, componentName, element)
324
- }
325
- };
326
- }
327
-
328
- // src/index.ts
329
- function initA11yKit() {
330
- const cleanups = [];
331
- import('./focus/index.cjs').then(({ initFocusVisible: initFocusVisible2 }) => {
332
- cleanups.push(initFocusVisible2());
333
- });
334
- import('./announcer/index.cjs').then(({ initAnnouncer: initAnnouncer2 }) => {
335
- cleanups.push(initAnnouncer2());
336
- });
337
- return () => {
338
- cleanups.forEach((cleanup) => cleanup());
339
- };
340
- }
341
-
342
- Object.defineProperty(exports, "FOCUSABLE_SELECTORS", {
343
- enumerable: true,
344
- get: function () { return chunkCQXMBRLD_cjs.FOCUSABLE_SELECTORS; }
345
- });
346
- Object.defineProperty(exports, "TABBABLE_SELECTORS", {
347
- enumerable: true,
348
- get: function () { return chunkCQXMBRLD_cjs.TABBABLE_SELECTORS; }
349
- });
350
- Object.defineProperty(exports, "containsFocus", {
351
- enumerable: true,
352
- get: function () { return chunkCQXMBRLD_cjs.containsFocus; }
353
- });
354
- Object.defineProperty(exports, "createFocusScope", {
355
- enumerable: true,
356
- get: function () { return chunkCQXMBRLD_cjs.createFocusScope; }
357
- });
358
- Object.defineProperty(exports, "createFocusTrap", {
359
- enumerable: true,
360
- get: function () { return chunkCQXMBRLD_cjs.createFocusTrap; }
361
- });
362
- Object.defineProperty(exports, "createRovingTabindex", {
363
- enumerable: true,
364
- get: function () { return chunkCQXMBRLD_cjs.createRovingTabindex; }
365
- });
366
- Object.defineProperty(exports, "focusWithVisibleRing", {
367
- enumerable: true,
368
- get: function () { return chunkCQXMBRLD_cjs.focusWithVisibleRing; }
369
- });
370
- Object.defineProperty(exports, "getActiveFocusTrap", {
371
- enumerable: true,
372
- get: function () { return chunkCQXMBRLD_cjs.getActiveFocusTrap; }
373
- });
374
- Object.defineProperty(exports, "getFirstFocusable", {
375
- enumerable: true,
376
- get: function () { return chunkCQXMBRLD_cjs.getFirstFocusable; }
377
- });
378
- Object.defineProperty(exports, "getFocusableElements", {
379
- enumerable: true,
380
- get: function () { return chunkCQXMBRLD_cjs.getFocusableElements; }
381
- });
382
- Object.defineProperty(exports, "getLastFocusSource", {
383
- enumerable: true,
384
- get: function () { return chunkCQXMBRLD_cjs.getLastFocusSource; }
385
- });
386
- Object.defineProperty(exports, "getLastFocusable", {
387
- enumerable: true,
388
- get: function () { return chunkCQXMBRLD_cjs.getLastFocusable; }
389
- });
390
- Object.defineProperty(exports, "getNextFocusable", {
391
- enumerable: true,
392
- get: function () { return chunkCQXMBRLD_cjs.getNextFocusable; }
393
- });
394
- Object.defineProperty(exports, "getPreviousFocusable", {
395
- enumerable: true,
396
- get: function () { return chunkCQXMBRLD_cjs.getPreviousFocusable; }
397
- });
398
- Object.defineProperty(exports, "getTabbableElements", {
399
- enumerable: true,
400
- get: function () { return chunkCQXMBRLD_cjs.getTabbableElements; }
401
- });
402
- Object.defineProperty(exports, "hasFocusTrap", {
403
- enumerable: true,
404
- get: function () { return chunkCQXMBRLD_cjs.hasFocusTrap; }
405
- });
406
- Object.defineProperty(exports, "hasVisibleFocus", {
407
- enumerable: true,
408
- get: function () { return chunkCQXMBRLD_cjs.hasVisibleFocus; }
409
- });
410
- Object.defineProperty(exports, "initFocusVisible", {
411
- enumerable: true,
412
- get: function () { return chunkCQXMBRLD_cjs.initFocusVisible; }
413
- });
414
- Object.defineProperty(exports, "isFocusVisible", {
415
- enumerable: true,
416
- get: function () { return chunkCQXMBRLD_cjs.isFocusVisible; }
417
- });
418
- Object.defineProperty(exports, "isFocusable", {
419
- enumerable: true,
420
- get: function () { return chunkCQXMBRLD_cjs.isFocusable; }
421
- });
422
- Object.defineProperty(exports, "isTabbable", {
423
- enumerable: true,
424
- get: function () { return chunkCQXMBRLD_cjs.isTabbable; }
425
- });
426
- Object.defineProperty(exports, "isVisible", {
427
- enumerable: true,
428
- get: function () { return chunkCQXMBRLD_cjs.isVisible; }
429
- });
430
- Object.defineProperty(exports, "isWithinContainer", {
431
- enumerable: true,
432
- get: function () { return chunkCQXMBRLD_cjs.isWithinContainer; }
433
- });
434
- Object.defineProperty(exports, "resolveElement", {
435
- enumerable: true,
436
- get: function () { return chunkCQXMBRLD_cjs.resolveElement; }
437
- });
438
- Object.defineProperty(exports, "setFocusVisible", {
439
- enumerable: true,
440
- get: function () { return chunkCQXMBRLD_cjs.setFocusVisible; }
441
- });
442
- Object.defineProperty(exports, "KeyboardPatterns", {
443
- enumerable: true,
444
- get: function () { return chunkHQOFVJFO_cjs.KeyboardPatterns; }
445
- });
446
- Object.defineProperty(exports, "createKeyboardManager", {
447
- enumerable: true,
448
- get: function () { return chunkHQOFVJFO_cjs.createKeyboardManager; }
449
- });
450
- Object.defineProperty(exports, "createTypeAhead", {
451
- enumerable: true,
452
- get: function () { return chunkHQOFVJFO_cjs.createTypeAhead; }
453
- });
454
- Object.defineProperty(exports, "getKeyCombo", {
455
- enumerable: true,
456
- get: function () { return chunkHQOFVJFO_cjs.getKeyCombo; }
457
- });
458
- Object.defineProperty(exports, "normalizeKey", {
459
- enumerable: true,
460
- get: function () { return chunkHQOFVJFO_cjs.normalizeKey; }
461
- });
462
- Object.defineProperty(exports, "announce", {
463
- enumerable: true,
464
- get: function () { return chunkV6TZIZZ4_cjs.announce; }
465
- });
466
- Object.defineProperty(exports, "announceAssertive", {
467
- enumerable: true,
468
- get: function () { return chunkV6TZIZZ4_cjs.announceAssertive; }
469
- });
470
- Object.defineProperty(exports, "announceError", {
471
- enumerable: true,
472
- get: function () { return chunkV6TZIZZ4_cjs.announceError; }
473
- });
474
- Object.defineProperty(exports, "announcePolite", {
475
- enumerable: true,
476
- get: function () { return chunkV6TZIZZ4_cjs.announcePolite; }
477
- });
478
- Object.defineProperty(exports, "announceProgress", {
479
- enumerable: true,
480
- get: function () { return chunkV6TZIZZ4_cjs.announceProgress; }
481
- });
482
- Object.defineProperty(exports, "announceStatus", {
483
- enumerable: true,
484
- get: function () { return chunkV6TZIZZ4_cjs.announceStatus; }
485
- });
486
- Object.defineProperty(exports, "clearAnnouncements", {
487
- enumerable: true,
488
- get: function () { return chunkV6TZIZZ4_cjs.clearAnnouncements; }
489
- });
490
- Object.defineProperty(exports, "createAnnouncer", {
491
- enumerable: true,
492
- get: function () { return chunkV6TZIZZ4_cjs.createAnnouncer; }
493
- });
494
- Object.defineProperty(exports, "initAnnouncer", {
495
- enumerable: true,
496
- get: function () { return chunkV6TZIZZ4_cjs.initAnnouncer; }
497
- });
498
- Object.defineProperty(exports, "queueAnnouncement", {
499
- enumerable: true,
500
- get: function () { return chunkV6TZIZZ4_cjs.queueAnnouncement; }
501
- });
502
- Object.defineProperty(exports, "createMediaQueryListener", {
503
- enumerable: true,
504
- get: function () { return chunkXEGB27QF_cjs.createMediaQueryListener; }
505
- });
506
- Object.defineProperty(exports, "getScreenReaderHints", {
507
- enumerable: true,
508
- get: function () { return chunkXEGB27QF_cjs.getScreenReaderHints; }
509
- });
510
- Object.defineProperty(exports, "isAndroid", {
511
- enumerable: true,
512
- get: function () { return chunkXEGB27QF_cjs.isAndroid; }
513
- });
514
- Object.defineProperty(exports, "isBrowser", {
515
- enumerable: true,
516
- get: function () { return chunkXEGB27QF_cjs.isBrowser; }
517
- });
518
- Object.defineProperty(exports, "isIOS", {
519
- enumerable: true,
520
- get: function () { return chunkXEGB27QF_cjs.isIOS; }
521
- });
522
- Object.defineProperty(exports, "isMac", {
523
- enumerable: true,
524
- get: function () { return chunkXEGB27QF_cjs.isMac; }
525
- });
526
- Object.defineProperty(exports, "isTouchDevice", {
527
- enumerable: true,
528
- get: function () { return chunkXEGB27QF_cjs.isTouchDevice; }
529
- });
530
- Object.defineProperty(exports, "isWindows", {
531
- enumerable: true,
532
- get: function () { return chunkXEGB27QF_cjs.isWindows; }
533
- });
534
- Object.defineProperty(exports, "prefersDarkMode", {
535
- enumerable: true,
536
- get: function () { return chunkXEGB27QF_cjs.prefersDarkMode; }
537
- });
538
- Object.defineProperty(exports, "prefersHighContrast", {
539
- enumerable: true,
540
- get: function () { return chunkXEGB27QF_cjs.prefersHighContrast; }
541
- });
542
- Object.defineProperty(exports, "prefersReducedMotion", {
543
- enumerable: true,
544
- get: function () { return chunkXEGB27QF_cjs.prefersReducedMotion; }
545
- });
546
- Object.defineProperty(exports, "aria", {
547
- enumerable: true,
548
- get: function () { return chunkNBGFFCIJ_cjs.aria; }
549
- });
550
- Object.defineProperty(exports, "buildAriaProps", {
551
- enumerable: true,
552
- get: function () { return chunkNBGFFCIJ_cjs.buildAriaProps; }
553
- });
554
- Object.defineProperty(exports, "hasAccessibleName", {
555
- enumerable: true,
556
- get: function () { return chunkNBGFFCIJ_cjs.hasAccessibleName; }
557
- });
558
- Object.defineProperty(exports, "mergeAriaIds", {
559
- enumerable: true,
560
- get: function () { return chunkNBGFFCIJ_cjs.mergeAriaIds; }
561
- });
562
- exports.checks = checks;
563
- exports.clearWarnings = clearWarnings;
564
- exports.createComponentWarnings = createComponentWarnings;
565
- exports.createIdScope = createIdScope;
566
- exports.generateId = generateId;
567
- exports.generateIds = generateIds;
568
- exports.initA11yKit = initA11yKit;
569
- exports.resetIdCounter = resetIdCounter;
570
- exports.setWarningHandler = setWarningHandler;
571
- exports.warn = warn;
572
- //# sourceMappingURL=index.cjs.map
573
- //# sourceMappingURL=index.cjs.map
3
+ \u{1F4A1} Suggestion: ${e.suggestion}`:e.message;switch(e.type){case "error":console.error(`%c${r}%c ${o}`,t,"");break;case "warning":console.warn(`%c${r}%c ${o}`,t,"");break;case "info":console.info(`%c${r}%c ${o}`,t,"");break}e.element&&console.log("Element:",e.element);}function m(e){switch(e){case "error":return "background: #ff5555; color: white; padding: 2px 4px; border-radius: 2px; font-weight: bold;";case "warning":return "background: #ffaa00; color: black; padding: 2px 4px; border-radius: 2px; font-weight: bold;";case "info":return "background: #5555ff; color: white; padding: 2px 4px; border-radius: 2px; font-weight: bold;"}}function x(){l.clear();}var s={accessibleLabel(e,n,r="aria-label"){e&&(chunkKQUAJKTG_cjs.d(e)||i({type:"error",component:n,message:"Missing accessible label. Screen reader users will not be able to understand this element.",suggestion:`Add ${r}, aria-labelledby, or visible text content.`,element:e}));},requiredProp(e,n,r){(e==null||e==="")&&i({type:"error",component:r,message:`Missing required prop "${n}".`,suggestion:`Provide a value for the "${n}" prop.`});},validRole(e,n,r){if(!e)return;new Set(["alert","alertdialog","application","article","banner","button","cell","columnheader","combobox","complementary","contentinfo","definition","dialog","directory","document","feed","figure","form","grid","gridcell","group","heading","img","link","list","listbox","listitem","log","main","marquee","math","menu","menubar","menuitem","navigation","none","note","option","presentation","progressbar","region","row","rowgroup","rowheader","scrollbar","search","searchbox","separator","slider","spinbutton","status","switch","tab","table","tablist","tabpanel","term","textbox","timer","toolbar","tooltip","tree","treegrid","treeitem"]).has(e)||i({type:"warning",component:n,message:`Invalid ARIA role "${e}".`,suggestion:"Use a valid ARIA role from the WAI-ARIA specification.",element:r});},keyboardAccessible(e,n,r){if(e&&r.onClick&&!r.onKeyDown){let t=e.tagName.toLowerCase(),o=e.getAttribute("role");if(["button","a","input","select","textarea"].includes(t))return;o&&["button","link","menuitem","option","tab"].includes(o)&&i({type:"warning",component:n,message:"Element has onClick but no onKeyDown handler.",suggestion:"Add keyboard event handling for Enter and Space keys.",element:e});}},tabIndex(e,n,r){e!==void 0&&e>0&&i({type:"warning",component:n,message:`Positive tabIndex (${e}) disrupts natural tab order.`,suggestion:"Use tabIndex={0} or tabIndex={-1} instead. Rely on DOM order for tab sequence.",element:r});},dialogAutoFocus(e,n){e||i({type:"info",component:n,message:"No initial focus element specified for dialog.",suggestion:"Consider setting initialFocus to guide keyboard users."});},formLabel(e,n,r){if(!e)return;n||e.getAttribute("aria-label")||e.getAttribute("aria-labelledby")||e.labels?.length||i({type:"error",component:r,message:"Form input is missing an accessible label.",suggestion:"Add a <label>, aria-label, or aria-labelledby.",element:e});},imageAlt(e,n){if(!e||e.tagName!=="IMG")return;let r=e.getAttribute("alt"),t=e.getAttribute("role");r===null&&t!=="presentation"&&t!=="none"&&i({type:"error",component:n,message:"Image is missing alt attribute.",suggestion:'Add alt="" for decorative images or descriptive alt text for meaningful images.',element:e});}};function y(e){return {error:(n,r,t)=>i({type:"error",component:e,message:n,suggestion:r,element:t}),warning:(n,r,t)=>i({type:"warning",component:e,message:n,suggestion:r,element:t}),info:(n,r,t)=>i({type:"info",component:e,message:n,suggestion:r,element:t}),checks:{accessibleLabel:(n,r)=>s.accessibleLabel(n,e,r),requiredProp:(n,r)=>s.requiredProp(n,r,e),keyboardAccessible:(n,r)=>s.keyboardAccessible(n,e,r),tabIndex:(n,r)=>s.tabIndex(n,e,r)}}}function Ee(){let e=[];return import('./focus/index.cjs').then(({initFocusVisible:n})=>{e.push(n());}),import('./announcer/index.cjs').then(({initAnnouncer:n})=>{e.push(n());}),()=>{e.forEach(n=>n());}}Object.defineProperty(exports,"FOCUSABLE_SELECTORS",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.a}});Object.defineProperty(exports,"TABBABLE_SELECTORS",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.b}});Object.defineProperty(exports,"containsFocus",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.j}});Object.defineProperty(exports,"createFocusScope",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.x}});Object.defineProperty(exports,"createFocusTrap",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.o}});Object.defineProperty(exports,"createRovingTabindex",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.y}});Object.defineProperty(exports,"focusWithVisibleRing",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.w}});Object.defineProperty(exports,"getActiveFocusTrap",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.p}});Object.defineProperty(exports,"getFirstFocusable",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.h}});Object.defineProperty(exports,"getFocusableElements",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.f}});Object.defineProperty(exports,"getLastFocusSource",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.u}});Object.defineProperty(exports,"getLastFocusable",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.i}});Object.defineProperty(exports,"getNextFocusable",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.k}});Object.defineProperty(exports,"getPreviousFocusable",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.l}});Object.defineProperty(exports,"getTabbableElements",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.g}});Object.defineProperty(exports,"hasFocusTrap",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.q}});Object.defineProperty(exports,"hasVisibleFocus",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.t}});Object.defineProperty(exports,"initFocusVisible",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.r}});Object.defineProperty(exports,"isFocusVisible",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.s}});Object.defineProperty(exports,"isFocusable",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.d}});Object.defineProperty(exports,"isTabbable",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.e}});Object.defineProperty(exports,"isVisible",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.c}});Object.defineProperty(exports,"isWithinContainer",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.m}});Object.defineProperty(exports,"resolveElement",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.n}});Object.defineProperty(exports,"setFocusVisible",{enumerable:true,get:function(){return chunkOSJIG3A2_cjs.v}});Object.defineProperty(exports,"KeyboardPatterns",{enumerable:true,get:function(){return chunkEM45V5TK_cjs.d}});Object.defineProperty(exports,"createKeyboardManager",{enumerable:true,get:function(){return chunkEM45V5TK_cjs.c}});Object.defineProperty(exports,"createTypeAhead",{enumerable:true,get:function(){return chunkEM45V5TK_cjs.e}});Object.defineProperty(exports,"getKeyCombo",{enumerable:true,get:function(){return chunkEM45V5TK_cjs.b}});Object.defineProperty(exports,"normalizeKey",{enumerable:true,get:function(){return chunkEM45V5TK_cjs.a}});Object.defineProperty(exports,"announce",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.b}});Object.defineProperty(exports,"announceAssertive",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.d}});Object.defineProperty(exports,"announceError",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.i}});Object.defineProperty(exports,"announcePolite",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.c}});Object.defineProperty(exports,"announceProgress",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.j}});Object.defineProperty(exports,"announceStatus",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.h}});Object.defineProperty(exports,"clearAnnouncements",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.e}});Object.defineProperty(exports,"createAnnouncer",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.g}});Object.defineProperty(exports,"initAnnouncer",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.a}});Object.defineProperty(exports,"queueAnnouncement",{enumerable:true,get:function(){return chunkAQ6HEUSD_cjs.f}});Object.defineProperty(exports,"createMediaQueryListener",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.k}});Object.defineProperty(exports,"getScreenReaderHints",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.j}});Object.defineProperty(exports,"isAndroid",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.d}});Object.defineProperty(exports,"isBrowser",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.a}});Object.defineProperty(exports,"isIOS",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.c}});Object.defineProperty(exports,"isMac",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.b}});Object.defineProperty(exports,"isTouchDevice",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.f}});Object.defineProperty(exports,"isWindows",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.e}});Object.defineProperty(exports,"prefersDarkMode",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.i}});Object.defineProperty(exports,"prefersHighContrast",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.h}});Object.defineProperty(exports,"prefersReducedMotion",{enumerable:true,get:function(){return chunk7BL2ABLF_cjs.g}});Object.defineProperty(exports,"aria",{enumerable:true,get:function(){return chunkKQUAJKTG_cjs.a}});Object.defineProperty(exports,"buildAriaProps",{enumerable:true,get:function(){return chunkKQUAJKTG_cjs.b}});Object.defineProperty(exports,"hasAccessibleName",{enumerable:true,get:function(){return chunkKQUAJKTG_cjs.d}});Object.defineProperty(exports,"mergeAriaIds",{enumerable:true,get:function(){return chunkKQUAJKTG_cjs.c}});exports.checks=s;exports.clearWarnings=x;exports.createComponentWarnings=y;exports.createIdScope=$e;exports.generateId=u;exports.generateIds=he;exports.initCompa11y=Ee;exports.resetIdCounter=ke;exports.setWarningHandler=b;exports.warn=i;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { D as DevWarningHandler, a as DevWarning } from './types-DDSPmE8m.cjs';
2
- export { A as AnnouncerOptions, b as AriaLivePoliteness, c as AriaRole, F as FocusTrapOptions, d as FocusableElement, K as KeyboardNavigationOptions } from './types-DDSPmE8m.cjs';
1
+ import { D as DevWarningHandler, a as DevWarning } from './types-DpTUSAxr.cjs';
2
+ export { A as AnnouncerOptions, b as AriaLivePoliteness, c as AriaRole, F as FocusTrapOptions, d as FocusableElement, K as KeyboardNavigationOptions } from './types-DpTUSAxr.cjs';
3
3
  export { FocusScope, FocusScopeOptions, RovingTabindex, RovingTabindexOptions, createFocusScope, createFocusTrap, createRovingTabindex, focusWithVisibleRing, getActiveFocusTrap, getLastFocusSource, hasFocusTrap, hasVisibleFocus, initFocusVisible, isFocusVisible, setFocusVisible } from './focus/index.cjs';
4
4
  export { KeyboardHandler, KeyboardHandlers, KeyboardManager, KeyboardManagerOptions, KeyboardPatterns, TypeAhead, createKeyboardManager, createTypeAhead, getKeyCombo, normalizeKey } from './keyboard/index.cjs';
5
5
  export { announce, announceAssertive, announceError, announcePolite, announceProgress, announceStatus, clearAnnouncements, createAnnouncer, initAnnouncer, queueAnnouncement } from './announcer/index.cjs';
@@ -236,6 +236,6 @@ declare function createComponentWarnings(componentName: string): {
236
236
  * Initialize all compa11y systems
237
237
  * Call this once at app startup for optimal behavior
238
238
  */
239
- declare function initA11yKit(): () => void;
239
+ declare function initCompa11y(): () => void;
240
240
 
241
- export { DevWarning, DevWarningHandler, FOCUSABLE_SELECTORS, TABBABLE_SELECTORS, checks, clearWarnings, containsFocus, createComponentWarnings, createIdScope, createMediaQueryListener, generateId, generateIds, getFirstFocusable, getFocusableElements, getLastFocusable, getNextFocusable, getPreviousFocusable, getScreenReaderHints, getTabbableElements, initA11yKit, isAndroid, isBrowser, isFocusable, isIOS, isMac, isTabbable, isTouchDevice, isVisible, isWindows, isWithinContainer, prefersDarkMode, prefersHighContrast, prefersReducedMotion, resetIdCounter, resolveElement, setWarningHandler, warn };
241
+ export { DevWarning, DevWarningHandler, FOCUSABLE_SELECTORS, TABBABLE_SELECTORS, checks, clearWarnings, containsFocus, createComponentWarnings, createIdScope, createMediaQueryListener, generateId, generateIds, getFirstFocusable, getFocusableElements, getLastFocusable, getNextFocusable, getPreviousFocusable, getScreenReaderHints, getTabbableElements, initCompa11y, isAndroid, isBrowser, isFocusable, isIOS, isMac, isTabbable, isTouchDevice, isVisible, isWindows, isWithinContainer, prefersDarkMode, prefersHighContrast, prefersReducedMotion, resetIdCounter, resolveElement, setWarningHandler, warn };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { D as DevWarningHandler, a as DevWarning } from './types-DDSPmE8m.js';
2
- export { A as AnnouncerOptions, b as AriaLivePoliteness, c as AriaRole, F as FocusTrapOptions, d as FocusableElement, K as KeyboardNavigationOptions } from './types-DDSPmE8m.js';
1
+ import { D as DevWarningHandler, a as DevWarning } from './types-DpTUSAxr.js';
2
+ export { A as AnnouncerOptions, b as AriaLivePoliteness, c as AriaRole, F as FocusTrapOptions, d as FocusableElement, K as KeyboardNavigationOptions } from './types-DpTUSAxr.js';
3
3
  export { FocusScope, FocusScopeOptions, RovingTabindex, RovingTabindexOptions, createFocusScope, createFocusTrap, createRovingTabindex, focusWithVisibleRing, getActiveFocusTrap, getLastFocusSource, hasFocusTrap, hasVisibleFocus, initFocusVisible, isFocusVisible, setFocusVisible } from './focus/index.js';
4
4
  export { KeyboardHandler, KeyboardHandlers, KeyboardManager, KeyboardManagerOptions, KeyboardPatterns, TypeAhead, createKeyboardManager, createTypeAhead, getKeyCombo, normalizeKey } from './keyboard/index.js';
5
5
  export { announce, announceAssertive, announceError, announcePolite, announceProgress, announceStatus, clearAnnouncements, createAnnouncer, initAnnouncer, queueAnnouncement } from './announcer/index.js';
@@ -236,6 +236,6 @@ declare function createComponentWarnings(componentName: string): {
236
236
  * Initialize all compa11y systems
237
237
  * Call this once at app startup for optimal behavior
238
238
  */
239
- declare function initA11yKit(): () => void;
239
+ declare function initCompa11y(): () => void;
240
240
 
241
- export { DevWarning, DevWarningHandler, FOCUSABLE_SELECTORS, TABBABLE_SELECTORS, checks, clearWarnings, containsFocus, createComponentWarnings, createIdScope, createMediaQueryListener, generateId, generateIds, getFirstFocusable, getFocusableElements, getLastFocusable, getNextFocusable, getPreviousFocusable, getScreenReaderHints, getTabbableElements, initA11yKit, isAndroid, isBrowser, isFocusable, isIOS, isMac, isTabbable, isTouchDevice, isVisible, isWindows, isWithinContainer, prefersDarkMode, prefersHighContrast, prefersReducedMotion, resetIdCounter, resolveElement, setWarningHandler, warn };
241
+ export { DevWarning, DevWarningHandler, FOCUSABLE_SELECTORS, TABBABLE_SELECTORS, checks, clearWarnings, containsFocus, createComponentWarnings, createIdScope, createMediaQueryListener, generateId, generateIds, getFirstFocusable, getFocusableElements, getLastFocusable, getNextFocusable, getPreviousFocusable, getScreenReaderHints, getTabbableElements, initCompa11y, isAndroid, isBrowser, isFocusable, isIOS, isMac, isTabbable, isTouchDevice, isVisible, isWindows, isWithinContainer, prefersDarkMode, prefersHighContrast, prefersReducedMotion, resetIdCounter, resolveElement, setWarningHandler, warn };