@compa11y/core 0.1.2 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/announcer/index.cjs +1 -49
  2. package/dist/announcer/index.js +1 -4
  3. package/dist/aria/index.cjs +1 -24
  4. package/dist/aria/index.js +1 -3
  5. package/dist/chunk-7BL2ABLF.cjs +1 -0
  6. package/dist/chunk-AQ6HEUSD.cjs +1 -0
  7. package/dist/chunk-C3VZQUKG.js +1 -0
  8. package/dist/chunk-EM45V5TK.cjs +1 -0
  9. package/dist/chunk-KQUAJKTG.cjs +1 -0
  10. package/dist/chunk-QGEFH2VG.js +1 -0
  11. package/dist/chunk-RE4QIUWR.js +1 -0
  12. package/dist/chunk-TGXWODB3.js +1 -0
  13. package/dist/chunk-Y2RTDE4A.cjs +1 -0
  14. package/dist/chunk-ZAQMM5TA.js +1 -0
  15. package/dist/focus/index.cjs +1 -53
  16. package/dist/focus/index.d.cts +63 -1
  17. package/dist/focus/index.d.ts +63 -1
  18. package/dist/focus/index.js +1 -4
  19. package/dist/index.cjs +2 -567
  20. package/dist/index.d.cts +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +2 -337
  23. package/dist/keyboard/index.cjs +1 -28
  24. package/dist/keyboard/index.js +1 -3
  25. package/package.json +1 -1
  26. package/dist/announcer/index.cjs.map +0 -1
  27. package/dist/announcer/index.js.map +0 -1
  28. package/dist/aria/index.cjs.map +0 -1
  29. package/dist/aria/index.js.map +0 -1
  30. package/dist/chunk-24U5HHMC.js +0 -309
  31. package/dist/chunk-24U5HHMC.js.map +0 -1
  32. package/dist/chunk-2CQOLVQH.js +0 -147
  33. package/dist/chunk-2CQOLVQH.js.map +0 -1
  34. package/dist/chunk-2PUYKF2E.js +0 -631
  35. package/dist/chunk-2PUYKF2E.js.map +0 -1
  36. package/dist/chunk-2WF5Y6D7.js +0 -175
  37. package/dist/chunk-2WF5Y6D7.js.map +0 -1
  38. package/dist/chunk-CQXMBRLD.cjs +0 -657
  39. package/dist/chunk-CQXMBRLD.cjs.map +0 -1
  40. package/dist/chunk-HQOFVJFO.cjs +0 -181
  41. package/dist/chunk-HQOFVJFO.cjs.map +0 -1
  42. package/dist/chunk-NBGFFCIJ.cjs +0 -314
  43. package/dist/chunk-NBGFFCIJ.cjs.map +0 -1
  44. package/dist/chunk-V6TZIZZ4.cjs +0 -158
  45. package/dist/chunk-V6TZIZZ4.cjs.map +0 -1
  46. package/dist/chunk-XEGB27QF.cjs +0 -78
  47. package/dist/chunk-XEGB27QF.cjs.map +0 -1
  48. package/dist/chunk-Z7K2G6FX.js +0 -66
  49. package/dist/chunk-Z7K2G6FX.js.map +0 -1
  50. package/dist/focus/index.cjs.map +0 -1
  51. package/dist/focus/index.js.map +0 -1
  52. package/dist/index.cjs.map +0 -1
  53. package/dist/index.js.map +0 -1
  54. package/dist/keyboard/index.cjs.map +0 -1
  55. package/dist/keyboard/index.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,568 +1,3 @@
1
- 'use strict';
1
+ 'use strict';var chunkY2RTDE4A_cjs=require('./chunk-Y2RTDE4A.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 $e(e,n){let r=u(n),t={};for(let o of e)t[o]=`${r}-${o}`;return t}function we(){g=0;}function Ae(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
- "columnheader",
139
- "combobox",
140
- "complementary",
141
- "contentinfo",
142
- "definition",
143
- "dialog",
144
- "directory",
145
- "document",
146
- "feed",
147
- "figure",
148
- "form",
149
- "grid",
150
- "gridcell",
151
- "group",
152
- "heading",
153
- "img",
154
- "link",
155
- "list",
156
- "listbox",
157
- "listitem",
158
- "log",
159
- "main",
160
- "marquee",
161
- "math",
162
- "menu",
163
- "menubar",
164
- "menuitem",
165
- "navigation",
166
- "none",
167
- "note",
168
- "option",
169
- "presentation",
170
- "progressbar",
171
- "region",
172
- "row",
173
- "rowgroup",
174
- "rowheader",
175
- "scrollbar",
176
- "search",
177
- "searchbox",
178
- "separator",
179
- "slider",
180
- "spinbutton",
181
- "status",
182
- "switch",
183
- "tab",
184
- "table",
185
- "tablist",
186
- "tabpanel",
187
- "term",
188
- "textbox",
189
- "timer",
190
- "toolbar",
191
- "tooltip",
192
- "tree",
193
- "treegrid",
194
- "treeitem"
195
- ]);
196
- if (!validRoles.has(role)) {
197
- warn({
198
- type: "warning",
199
- component,
200
- message: `Invalid ARIA role "${role}".`,
201
- suggestion: "Use a valid ARIA role from the WAI-ARIA specification.",
202
- element
203
- });
204
- }
205
- },
206
- /**
207
- * Check for interactive element without keyboard support
208
- */
209
- keyboardAccessible(element, component, handlers) {
210
- if (!element) return;
211
- if (handlers.onClick && !handlers.onKeyDown) {
212
- const tagName = element.tagName.toLowerCase();
213
- const role = element.getAttribute("role");
214
- if (["button", "a", "input", "select", "textarea"].includes(tagName)) {
215
- return;
216
- }
217
- const interactiveRoles = ["button", "link", "menuitem", "option", "tab"];
218
- if (role && interactiveRoles.includes(role)) {
219
- warn({
220
- type: "warning",
221
- component,
222
- message: `Element has onClick but no onKeyDown handler.`,
223
- suggestion: "Add keyboard event handling for Enter and Space keys.",
224
- element
225
- });
226
- }
227
- }
228
- },
229
- /**
230
- * Check tabIndex usage
231
- */
232
- tabIndex(tabIndex, component, element) {
233
- if (tabIndex === void 0) return;
234
- if (tabIndex > 0) {
235
- warn({
236
- type: "warning",
237
- component,
238
- message: `Positive tabIndex (${tabIndex}) disrupts natural tab order.`,
239
- suggestion: "Use tabIndex={0} or tabIndex={-1} instead. Rely on DOM order for tab sequence.",
240
- element
241
- });
242
- }
243
- },
244
- /**
245
- * Check for autofocus in dialogs
246
- */
247
- dialogAutoFocus(hasAutoFocus, component) {
248
- if (!hasAutoFocus) {
249
- warn({
250
- type: "info",
251
- component,
252
- message: "No initial focus element specified for dialog.",
253
- suggestion: "Consider setting initialFocus to guide keyboard users."
254
- });
255
- }
256
- },
257
- /**
258
- * Check for missing form labels
259
- */
260
- formLabel(inputElement, labelId, component) {
261
- if (!inputElement) return;
262
- const hasLabel = labelId || inputElement.getAttribute("aria-label") || inputElement.getAttribute("aria-labelledby") || inputElement.labels?.length;
263
- if (!hasLabel) {
264
- warn({
265
- type: "error",
266
- component,
267
- message: "Form input is missing an accessible label.",
268
- suggestion: "Add a <label>, aria-label, or aria-labelledby.",
269
- element: inputElement
270
- });
271
- }
272
- },
273
- /**
274
- * Check for missing alt text on images
275
- */
276
- imageAlt(element, component) {
277
- if (!element || element.tagName !== "IMG") return;
278
- const alt = element.getAttribute("alt");
279
- const role = element.getAttribute("role");
280
- if (alt === null && role !== "presentation" && role !== "none") {
281
- warn({
282
- type: "error",
283
- component,
284
- message: "Image is missing alt attribute.",
285
- suggestion: 'Add alt="" for decorative images or descriptive alt text for meaningful images.',
286
- element
287
- });
288
- }
289
- }
290
- };
291
- function createComponentWarnings(componentName) {
292
- return {
293
- error: (message, suggestion, element) => warn({
294
- type: "error",
295
- component: componentName,
296
- message,
297
- suggestion,
298
- element
299
- }),
300
- warning: (message, suggestion, element) => warn({
301
- type: "warning",
302
- component: componentName,
303
- message,
304
- suggestion,
305
- element
306
- }),
307
- info: (message, suggestion, element) => warn({
308
- type: "info",
309
- component: componentName,
310
- message,
311
- suggestion,
312
- element
313
- }),
314
- checks: {
315
- accessibleLabel: (element, propName) => checks.accessibleLabel(element, componentName, propName),
316
- requiredProp: (value, propName) => checks.requiredProp(value, propName, componentName),
317
- keyboardAccessible: (element, handlers) => checks.keyboardAccessible(element, componentName, handlers),
318
- tabIndex: (tabIndex, element) => checks.tabIndex(tabIndex, componentName, element)
319
- }
320
- };
321
- }
322
-
323
- // src/index.ts
324
- function initCompa11y() {
325
- const cleanups = [];
326
- import('./focus/index.cjs').then(({ initFocusVisible: initFocusVisible2 }) => {
327
- cleanups.push(initFocusVisible2());
328
- });
329
- import('./announcer/index.cjs').then(({ initAnnouncer: initAnnouncer2 }) => {
330
- cleanups.push(initAnnouncer2());
331
- });
332
- return () => {
333
- cleanups.forEach((cleanup) => cleanup());
334
- };
335
- }
336
-
337
- Object.defineProperty(exports, "FOCUSABLE_SELECTORS", {
338
- enumerable: true,
339
- get: function () { return chunkCQXMBRLD_cjs.FOCUSABLE_SELECTORS; }
340
- });
341
- Object.defineProperty(exports, "TABBABLE_SELECTORS", {
342
- enumerable: true,
343
- get: function () { return chunkCQXMBRLD_cjs.TABBABLE_SELECTORS; }
344
- });
345
- Object.defineProperty(exports, "containsFocus", {
346
- enumerable: true,
347
- get: function () { return chunkCQXMBRLD_cjs.containsFocus; }
348
- });
349
- Object.defineProperty(exports, "createFocusScope", {
350
- enumerable: true,
351
- get: function () { return chunkCQXMBRLD_cjs.createFocusScope; }
352
- });
353
- Object.defineProperty(exports, "createFocusTrap", {
354
- enumerable: true,
355
- get: function () { return chunkCQXMBRLD_cjs.createFocusTrap; }
356
- });
357
- Object.defineProperty(exports, "createRovingTabindex", {
358
- enumerable: true,
359
- get: function () { return chunkCQXMBRLD_cjs.createRovingTabindex; }
360
- });
361
- Object.defineProperty(exports, "focusWithVisibleRing", {
362
- enumerable: true,
363
- get: function () { return chunkCQXMBRLD_cjs.focusWithVisibleRing; }
364
- });
365
- Object.defineProperty(exports, "getActiveFocusTrap", {
366
- enumerable: true,
367
- get: function () { return chunkCQXMBRLD_cjs.getActiveFocusTrap; }
368
- });
369
- Object.defineProperty(exports, "getFirstFocusable", {
370
- enumerable: true,
371
- get: function () { return chunkCQXMBRLD_cjs.getFirstFocusable; }
372
- });
373
- Object.defineProperty(exports, "getFocusableElements", {
374
- enumerable: true,
375
- get: function () { return chunkCQXMBRLD_cjs.getFocusableElements; }
376
- });
377
- Object.defineProperty(exports, "getLastFocusSource", {
378
- enumerable: true,
379
- get: function () { return chunkCQXMBRLD_cjs.getLastFocusSource; }
380
- });
381
- Object.defineProperty(exports, "getLastFocusable", {
382
- enumerable: true,
383
- get: function () { return chunkCQXMBRLD_cjs.getLastFocusable; }
384
- });
385
- Object.defineProperty(exports, "getNextFocusable", {
386
- enumerable: true,
387
- get: function () { return chunkCQXMBRLD_cjs.getNextFocusable; }
388
- });
389
- Object.defineProperty(exports, "getPreviousFocusable", {
390
- enumerable: true,
391
- get: function () { return chunkCQXMBRLD_cjs.getPreviousFocusable; }
392
- });
393
- Object.defineProperty(exports, "getTabbableElements", {
394
- enumerable: true,
395
- get: function () { return chunkCQXMBRLD_cjs.getTabbableElements; }
396
- });
397
- Object.defineProperty(exports, "hasFocusTrap", {
398
- enumerable: true,
399
- get: function () { return chunkCQXMBRLD_cjs.hasFocusTrap; }
400
- });
401
- Object.defineProperty(exports, "hasVisibleFocus", {
402
- enumerable: true,
403
- get: function () { return chunkCQXMBRLD_cjs.hasVisibleFocus; }
404
- });
405
- Object.defineProperty(exports, "initFocusVisible", {
406
- enumerable: true,
407
- get: function () { return chunkCQXMBRLD_cjs.initFocusVisible; }
408
- });
409
- Object.defineProperty(exports, "isFocusVisible", {
410
- enumerable: true,
411
- get: function () { return chunkCQXMBRLD_cjs.isFocusVisible; }
412
- });
413
- Object.defineProperty(exports, "isFocusable", {
414
- enumerable: true,
415
- get: function () { return chunkCQXMBRLD_cjs.isFocusable; }
416
- });
417
- Object.defineProperty(exports, "isTabbable", {
418
- enumerable: true,
419
- get: function () { return chunkCQXMBRLD_cjs.isTabbable; }
420
- });
421
- Object.defineProperty(exports, "isVisible", {
422
- enumerable: true,
423
- get: function () { return chunkCQXMBRLD_cjs.isVisible; }
424
- });
425
- Object.defineProperty(exports, "isWithinContainer", {
426
- enumerable: true,
427
- get: function () { return chunkCQXMBRLD_cjs.isWithinContainer; }
428
- });
429
- Object.defineProperty(exports, "resolveElement", {
430
- enumerable: true,
431
- get: function () { return chunkCQXMBRLD_cjs.resolveElement; }
432
- });
433
- Object.defineProperty(exports, "setFocusVisible", {
434
- enumerable: true,
435
- get: function () { return chunkCQXMBRLD_cjs.setFocusVisible; }
436
- });
437
- Object.defineProperty(exports, "KeyboardPatterns", {
438
- enumerable: true,
439
- get: function () { return chunkHQOFVJFO_cjs.KeyboardPatterns; }
440
- });
441
- Object.defineProperty(exports, "createKeyboardManager", {
442
- enumerable: true,
443
- get: function () { return chunkHQOFVJFO_cjs.createKeyboardManager; }
444
- });
445
- Object.defineProperty(exports, "createTypeAhead", {
446
- enumerable: true,
447
- get: function () { return chunkHQOFVJFO_cjs.createTypeAhead; }
448
- });
449
- Object.defineProperty(exports, "getKeyCombo", {
450
- enumerable: true,
451
- get: function () { return chunkHQOFVJFO_cjs.getKeyCombo; }
452
- });
453
- Object.defineProperty(exports, "normalizeKey", {
454
- enumerable: true,
455
- get: function () { return chunkHQOFVJFO_cjs.normalizeKey; }
456
- });
457
- Object.defineProperty(exports, "announce", {
458
- enumerable: true,
459
- get: function () { return chunkV6TZIZZ4_cjs.announce; }
460
- });
461
- Object.defineProperty(exports, "announceAssertive", {
462
- enumerable: true,
463
- get: function () { return chunkV6TZIZZ4_cjs.announceAssertive; }
464
- });
465
- Object.defineProperty(exports, "announceError", {
466
- enumerable: true,
467
- get: function () { return chunkV6TZIZZ4_cjs.announceError; }
468
- });
469
- Object.defineProperty(exports, "announcePolite", {
470
- enumerable: true,
471
- get: function () { return chunkV6TZIZZ4_cjs.announcePolite; }
472
- });
473
- Object.defineProperty(exports, "announceProgress", {
474
- enumerable: true,
475
- get: function () { return chunkV6TZIZZ4_cjs.announceProgress; }
476
- });
477
- Object.defineProperty(exports, "announceStatus", {
478
- enumerable: true,
479
- get: function () { return chunkV6TZIZZ4_cjs.announceStatus; }
480
- });
481
- Object.defineProperty(exports, "clearAnnouncements", {
482
- enumerable: true,
483
- get: function () { return chunkV6TZIZZ4_cjs.clearAnnouncements; }
484
- });
485
- Object.defineProperty(exports, "createAnnouncer", {
486
- enumerable: true,
487
- get: function () { return chunkV6TZIZZ4_cjs.createAnnouncer; }
488
- });
489
- Object.defineProperty(exports, "initAnnouncer", {
490
- enumerable: true,
491
- get: function () { return chunkV6TZIZZ4_cjs.initAnnouncer; }
492
- });
493
- Object.defineProperty(exports, "queueAnnouncement", {
494
- enumerable: true,
495
- get: function () { return chunkV6TZIZZ4_cjs.queueAnnouncement; }
496
- });
497
- Object.defineProperty(exports, "createMediaQueryListener", {
498
- enumerable: true,
499
- get: function () { return chunkXEGB27QF_cjs.createMediaQueryListener; }
500
- });
501
- Object.defineProperty(exports, "getScreenReaderHints", {
502
- enumerable: true,
503
- get: function () { return chunkXEGB27QF_cjs.getScreenReaderHints; }
504
- });
505
- Object.defineProperty(exports, "isAndroid", {
506
- enumerable: true,
507
- get: function () { return chunkXEGB27QF_cjs.isAndroid; }
508
- });
509
- Object.defineProperty(exports, "isBrowser", {
510
- enumerable: true,
511
- get: function () { return chunkXEGB27QF_cjs.isBrowser; }
512
- });
513
- Object.defineProperty(exports, "isIOS", {
514
- enumerable: true,
515
- get: function () { return chunkXEGB27QF_cjs.isIOS; }
516
- });
517
- Object.defineProperty(exports, "isMac", {
518
- enumerable: true,
519
- get: function () { return chunkXEGB27QF_cjs.isMac; }
520
- });
521
- Object.defineProperty(exports, "isTouchDevice", {
522
- enumerable: true,
523
- get: function () { return chunkXEGB27QF_cjs.isTouchDevice; }
524
- });
525
- Object.defineProperty(exports, "isWindows", {
526
- enumerable: true,
527
- get: function () { return chunkXEGB27QF_cjs.isWindows; }
528
- });
529
- Object.defineProperty(exports, "prefersDarkMode", {
530
- enumerable: true,
531
- get: function () { return chunkXEGB27QF_cjs.prefersDarkMode; }
532
- });
533
- Object.defineProperty(exports, "prefersHighContrast", {
534
- enumerable: true,
535
- get: function () { return chunkXEGB27QF_cjs.prefersHighContrast; }
536
- });
537
- Object.defineProperty(exports, "prefersReducedMotion", {
538
- enumerable: true,
539
- get: function () { return chunkXEGB27QF_cjs.prefersReducedMotion; }
540
- });
541
- Object.defineProperty(exports, "aria", {
542
- enumerable: true,
543
- get: function () { return chunkNBGFFCIJ_cjs.aria; }
544
- });
545
- Object.defineProperty(exports, "buildAriaProps", {
546
- enumerable: true,
547
- get: function () { return chunkNBGFFCIJ_cjs.buildAriaProps; }
548
- });
549
- Object.defineProperty(exports, "hasAccessibleName", {
550
- enumerable: true,
551
- get: function () { return chunkNBGFFCIJ_cjs.hasAccessibleName; }
552
- });
553
- Object.defineProperty(exports, "mergeAriaIds", {
554
- enumerable: true,
555
- get: function () { return chunkNBGFFCIJ_cjs.mergeAriaIds; }
556
- });
557
- exports.checks = checks;
558
- exports.clearWarnings = clearWarnings;
559
- exports.createComponentWarnings = createComponentWarnings;
560
- exports.createIdScope = createIdScope;
561
- exports.generateId = generateId;
562
- exports.generateIds = generateIds;
563
- exports.initCompa11y = initCompa11y;
564
- exports.resetIdCounter = resetIdCounter;
565
- exports.setWarningHandler = setWarningHandler;
566
- exports.warn = warn;
567
- //# sourceMappingURL=index.cjs.map
568
- //# 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 We(){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 chunkY2RTDE4A_cjs.a}});Object.defineProperty(exports,"TABBABLE_SELECTORS",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.b}});Object.defineProperty(exports,"containsFocus",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.j}});Object.defineProperty(exports,"createFocusReturn",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.A}});Object.defineProperty(exports,"createFocusScope",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.x}});Object.defineProperty(exports,"createFocusTrap",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.o}});Object.defineProperty(exports,"createRovingTabindex",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.y}});Object.defineProperty(exports,"findFocusNeighbor",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.z}});Object.defineProperty(exports,"focusWithVisibleRing",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.w}});Object.defineProperty(exports,"getActiveFocusTrap",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.p}});Object.defineProperty(exports,"getFirstFocusable",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.h}});Object.defineProperty(exports,"getFocusableElements",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.f}});Object.defineProperty(exports,"getLastFocusSource",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.u}});Object.defineProperty(exports,"getLastFocusable",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.i}});Object.defineProperty(exports,"getNextFocusable",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.k}});Object.defineProperty(exports,"getPreviousFocusable",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.l}});Object.defineProperty(exports,"getTabbableElements",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.g}});Object.defineProperty(exports,"hasFocusTrap",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.q}});Object.defineProperty(exports,"hasVisibleFocus",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.t}});Object.defineProperty(exports,"initFocusVisible",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.r}});Object.defineProperty(exports,"isFocusVisible",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.s}});Object.defineProperty(exports,"isFocusable",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.d}});Object.defineProperty(exports,"isTabbable",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.e}});Object.defineProperty(exports,"isVisible",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.c}});Object.defineProperty(exports,"isWithinContainer",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.m}});Object.defineProperty(exports,"resolveElement",{enumerable:true,get:function(){return chunkY2RTDE4A_cjs.n}});Object.defineProperty(exports,"setFocusVisible",{enumerable:true,get:function(){return chunkY2RTDE4A_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=Ae;exports.generateId=u;exports.generateIds=$e;exports.initCompa11y=We;exports.resetIdCounter=we;exports.setWarningHandler=b;exports.warn=i;
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { D as DevWarningHandler, a as DevWarning } from './types-DpTUSAxr.cjs';
2
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
- export { FocusScope, FocusScopeOptions, RovingTabindex, RovingTabindexOptions, createFocusScope, createFocusTrap, createRovingTabindex, focusWithVisibleRing, getActiveFocusTrap, getLastFocusSource, hasFocusTrap, hasVisibleFocus, initFocusVisible, isFocusVisible, setFocusVisible } from './focus/index.cjs';
3
+ export { FocusNeighborOptions, FocusReturn, FocusReturnOptions, FocusScope, FocusScopeOptions, RovingTabindex, RovingTabindexOptions, createFocusReturn, createFocusScope, createFocusTrap, createRovingTabindex, findFocusNeighbor, 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';
6
6
  export { aria, buildAriaProps, hasAccessibleName, mergeAriaIds } from './aria/index.cjs';
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { D as DevWarningHandler, a as DevWarning } from './types-DpTUSAxr.js';
2
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
- export { FocusScope, FocusScopeOptions, RovingTabindex, RovingTabindexOptions, createFocusScope, createFocusTrap, createRovingTabindex, focusWithVisibleRing, getActiveFocusTrap, getLastFocusSource, hasFocusTrap, hasVisibleFocus, initFocusVisible, isFocusVisible, setFocusVisible } from './focus/index.js';
3
+ export { FocusNeighborOptions, FocusReturn, FocusReturnOptions, FocusScope, FocusScopeOptions, RovingTabindex, RovingTabindexOptions, createFocusReturn, createFocusScope, createFocusTrap, createRovingTabindex, findFocusNeighbor, 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';
6
6
  export { aria, buildAriaProps, hasAccessibleName, mergeAriaIds } from './aria/index.js';