{"_id":"@bw-ui/datepicker-accessibility","_rev":"6-980f489ea2cffcd8945cc7eadc36d768","name":"@bw-ui/datepicker-accessibility","dist-tags":{"latest":"1.1.4"},"versions":{"1.0.0":{"name":"@bw-ui/datepicker-accessibility","version":"1.0.0","license":"MIT","_id":"@bw-ui/datepicker-accessibility@1.0.0","maintainers":[{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"}],"dist":{"shasum":"c5a844e8c8b4b13224821d4ab9577aebc58491f0","tarball":"https://registry.npmjs.org/@bw-ui/datepicker-accessibility/-/datepicker-accessibility-1.0.0.tgz","fileCount":13,"integrity":"sha512-8kZP5FHHbKYmrA40z3IuD8bDbqSVgspXKMa+9Sr7AeqksQDmkzSs6aY3zvlyHTl82zp9k4NwQG8GMBeviCAgPQ==","signatures":[{"sig":"MEUCIQDLGozkSsvNquWnQ/na6hn0pkwM9Zv+LFCaRoDN/JXTZwIgH/F0tIfprlTt6eWmlCuXO8k46U5SMpaB6SZMw9P9iJQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202078},"main":"dist/bw-accessibility.min.js","type":"module","module":"dist/bw-accessibility.esm.min.js","exports":{".":{"import":"./dist/bw-accessibility.esm.min.js","require":"./dist/bw-accessibility.min.js"},"./css":"./dist/bw-accessibility.min.css"},"gitHead":"33b7c525d2e2f752ae803ca16fd2dedde2098824","scripts":{"build":"node build.js"},"_npmUser":{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"},"_npmVersion":"10.9.3","description":"Accessibility plugin - Keyboard nav, ARIA, focus trap, screen readers","directories":{},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.0"},"peerDependencies":{"@bw-ui/datepicker":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/datepicker-accessibility_1.0.0_1764344572479_0.6906634254651132","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bw-ui/datepicker-accessibility","version":"1.0.1","license":"MIT","_id":"@bw-ui/datepicker-accessibility@1.0.1","maintainers":[{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"}],"dist":{"shasum":"686af27efd9f31dd931c474f523c9024578e7e46","tarball":"https://registry.npmjs.org/@bw-ui/datepicker-accessibility/-/datepicker-accessibility-1.0.1.tgz","fileCount":13,"integrity":"sha512-JT52Qv7nGIGQNbtSOhbCNwZXPfWCZsYzscT0kJ7dDMyIFYozWahzZqXYuXXAod1VcBsdrKAbijQ4N24uJS/KOQ==","signatures":[{"sig":"MEUCIQCoamyWYs2paFfGiHuPWU8kENa15nr4fWAr2VrFERtfyQIgbhQdb5K57kTiEdnr227jeKNv/j7tFnQoCgjMCHwpHjE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202910},"main":"dist/bw-accessibility.min.js","type":"module","module":"dist/bw-accessibility.esm.min.js","exports":{".":{"import":"./dist/bw-accessibility.esm.min.js","require":"./dist/bw-accessibility.min.js"},"./css":"./dist/bw-accessibility.min.css"},"gitHead":"33b7c525d2e2f752ae803ca16fd2dedde2098824","scripts":{"build":"node build.js"},"_npmUser":{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"},"_npmVersion":"10.9.3","description":"Accessibility plugin - Keyboard nav, ARIA, focus trap, screen readers","directories":{},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.0"},"peerDependencies":{"@bw-ui/datepicker":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/datepicker-accessibility_1.0.1_1764345148153_0.34638414088415104","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bw-ui/datepicker-accessibility","version":"1.0.2","license":"MIT","_id":"@bw-ui/datepicker-accessibility@1.0.2","maintainers":[{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"}],"dist":{"shasum":"f60b96c32c35eb048fa33c3b0aa54b03af9bfdfd","tarball":"https://registry.npmjs.org/@bw-ui/datepicker-accessibility/-/datepicker-accessibility-1.0.2.tgz","fileCount":4,"integrity":"sha512-PkQo4N0a48TxUEoCmD1o7ABbQOiVA+5vzrEv1qlbJhXGnhztsYqdOSDCWoRVsOpZXrtDKCT7X0a6JrSWKFQujg==","signatures":[{"sig":"MEYCIQDZcyuYvH0laV3L9ouKr/A8wjifA60ei1Ysa2Y6aasHdAIhANQpeJhOKEgxlRhNgHJ+du7DON9ihgeEiPkztGOfKXOL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39892},"main":"dist/bw-accessibility.min.js","type":"module","module":"dist/bw-accessibility.esm.min.js","exports":{".":{"import":"./dist/bw-accessibility.esm.min.js","require":"./dist/bw-accessibility.min.js"},"./css":"./dist/bw-accessibility.min.css"},"gitHead":"c10a0a9d099b359edb1ee36da7f8d22c9703d643","scripts":{"build":"node build.js"},"_npmUser":{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"},"_npmVersion":"10.9.3","description":"Accessibility plugin - Keyboard nav, ARIA, focus trap, screen readers","directories":{},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.0"},"peerDependencies":{"@bw-ui/datepicker":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/datepicker-accessibility_1.0.2_1764346701681_0.3506892079519395","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bw-ui/datepicker-accessibility","version":"1.0.3","license":"MIT","_id":"@bw-ui/datepicker-accessibility@1.0.3","maintainers":[{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"}],"dist":{"shasum":"68453631e5032a02b3d2eed7dde3707541012fdc","tarball":"https://registry.npmjs.org/@bw-ui/datepicker-accessibility/-/datepicker-accessibility-1.0.3.tgz","fileCount":5,"integrity":"sha512-8CmgFSX4lZOLcZdHuAlYToWy5p16sHyZZ683oOmQwkrLsWLp6kztEGF0Fudg/rUviUdif7I1KSieM5w4KogpMg==","signatures":[{"sig":"MEUCIHbkE3JF6rP22HC8vzBkd+AuakSomZe3oE0vZlfaqDgFAiEAgwJLhOC6EBp5WJXt2rEjAB2FvbdF9xE+vR5TPSw52Mw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52164},"main":"dist/bw-accessibility.min.js","type":"module","types":"src/index.d.ts","module":"dist/bw-accessibility.esm.min.js","exports":{".":{"import":"./dist/bw-accessibility.esm.min.js","require":"./dist/bw-accessibility.min.js"},"./css":"./dist/bw-accessibility.min.css"},"gitHead":"40090008e522bc7c32a5f9b9da198c7954d2874d","scripts":{"build":"node build.js"},"_npmUser":{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"},"_npmVersion":"10.9.3","description":"Accessibility plugin - Keyboard nav, ARIA, focus trap, screen readers","directories":{},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.0"},"peerDependencies":{"@bw-ui/datepicker":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/datepicker-accessibility_1.0.3_1764417721493_0.3682777259371879","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bw-ui/datepicker-accessibility","version":"1.0.4","license":"MIT","_id":"@bw-ui/datepicker-accessibility@1.0.4","maintainers":[{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"}],"homepage":"https://github.com/bw-ui/bw-datepicker","bugs":{"url":"https://github.com/bw-ui/bw-datepicker/issues"},"dist":{"shasum":"12f291e71c41757ae4f1a32937c87854a00aa889","tarball":"https://registry.npmjs.org/@bw-ui/datepicker-accessibility/-/datepicker-accessibility-1.0.4.tgz","fileCount":5,"integrity":"sha512-ngJn8BOR6VDoZvO0rT7jjmtM17Hk9JNv1BO2KJ5CZfn3PiSGFaniLBuT7+2hKn68XwAI/LwPMAbSiALp8pPHOQ==","signatures":[{"sig":"MEUCIBha/UMiCNuFFXI97rdKvX6C/LvEHB3vA8HipR55dFNZAiEAkJZSVXTKcWlRActDCBZqUBKEX2cAy2re5DtiKyBmqTM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52390},"main":"dist/bw-accessibility.min.js","type":"module","types":"src/index.d.ts","module":"dist/bw-accessibility.esm.min.js","exports":{".":{"import":"./dist/bw-accessibility.esm.min.js","require":"./dist/bw-accessibility.min.js"},"./css":"./dist/bw-accessibility.min.css"},"gitHead":"40090008e522bc7c32a5f9b9da198c7954d2874d","scripts":{"build":"node build.js"},"_npmUser":{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"},"repository":{"url":"git+https://github.com/bw-ui/bw-datepicker.git","type":"git"},"_npmVersion":"10.9.3","description":"Accessibility plugin - Keyboard nav, ARIA, focus trap, screen readers","directories":{},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.0"},"peerDependencies":{"@bw-ui/datepicker":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/datepicker-accessibility_1.0.4_1764418294073_0.5879759445703983","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@bw-ui/datepicker-accessibility","version":"1.1.4","description":"Accessibility plugin - Keyboard nav, ARIA, focus trap, screen readers","main":"dist/bw-accessibility.min.js","module":"dist/bw-accessibility.esm.min.js","exports":{".":{"import":"./dist/bw-accessibility.esm.min.js","require":"./dist/bw-accessibility.min.js"},"./css":"./dist/bw-accessibility.min.css"},"types":"src/index.d.ts","scripts":{"build":"node build.js"},"peerDependencies":{"@bw-ui/datepicker":"^1.0.0"},"devDependencies":{"esbuild":"^0.20.0"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bw-ui/bw-datepicker.git"},"bugs":{"url":"https://github.com/bw-ui/bw-datepicker/issues"},"homepage":"https://github.com/bw-ui/bw-datepicker","type":"module","_id":"@bw-ui/datepicker-accessibility@1.1.4","gitHead":"30d8915a21fd5e442ea3830e44532446a20dfa3c","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-F++EpoN6HHut0UW2OMugbsjqSnCEaWZ+lq7e0yPbGx1jooifI0M9mizDO+ZeohhmETkk8NaIXUHalC66kOG8Zg==","shasum":"79f3ff51c850b19f23667d8ce40aec0f894f1561","tarball":"https://registry.npmjs.org/@bw-ui/datepicker-accessibility/-/datepicker-accessibility-1.1.4.tgz","fileCount":5,"unpackedSize":57660,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDcWFkxe0BGmIlHkKQzkjN9BAkQJXmVxkXYo1tFGW9WEAIhAOqhDAQxNTcETx7Wr4AWeIRlC6QG/pFtEYj09qy4QNtX"}]},"_npmUser":{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"},"directories":{},"maintainers":[{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/datepicker-accessibility_1.1.4_1764510921662_0.9345920665089844"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-28T15:42:52.369Z","modified":"2025-11-30T13:55:22.044Z","1.0.0":"2025-11-28T15:42:52.727Z","1.0.1":"2025-11-28T15:52:28.343Z","1.0.2":"2025-11-28T16:18:21.877Z","1.0.3":"2025-11-29T12:02:01.715Z","1.0.4":"2025-11-29T12:11:34.271Z","1.1.4":"2025-11-30T13:55:21.856Z"},"bugs":{"url":"https://github.com/bw-ui/bw-datepicker/issues"},"license":"MIT","homepage":"https://github.com/bw-ui/bw-datepicker","repository":{"type":"git","url":"git+https://github.com/bw-ui/bw-datepicker.git"},"description":"Accessibility plugin - Keyboard nav, ARIA, focus trap, screen readers","maintainers":[{"name":"rchoudhary.dev","email":"rchoudhary.dev@gmail.com"}],"readme":"# @bw-ui/datepicker-accessibility\r\n\r\nAccessibility plugin for BW DatePicker - Full keyboard navigation, ARIA support, focus trap, and screen reader announcements.\r\n\r\n![Version](https://img.shields.io/npm/v/@bw-ui/datepicker-accessibility)\r\n![License](https://img.shields.io/npm/l/@bw-ui/datepicker-accessibility)\r\n![Size](https://img.shields.io/bundlephobia/minzip/@bw-ui/datepicker-accessibility)\r\n\r\n[Live Demo](https://bw-ui.github.io/bw-datepicker) • [Documentation](https://www.npmjs.com/package/@bw-ui/datepicker-accessibility) • [Core Package](https://www.npmjs.com/package/@bw-ui/datepicker)\r\n\r\n## ✨ Features\r\n\r\n- ⌨️ **Full Keyboard Navigation** - Navigate with arrow keys, shortcuts\r\n- 🔒 **Focus Trap** - Keep focus inside picker when open\r\n- 📢 **Screen Reader Announcements** - ARIA live regions\r\n- 🏷️ **ARIA Labels** - Proper roles and labels\r\n- 🎯 **High Contrast Mode** - Support for high contrast themes\r\n- 🔄 **Auto Focus** - Smart initial focus on open\r\n\r\n## 📦 Installation\r\n\r\n```bash\r\nnpm install @bw-ui/datepicker @bw-ui/datepicker-accessibility\r\n```\r\n\r\n> ⚠️ **Peer Dependency:** Requires `@bw-ui/datepicker` core package\r\n\r\n## 🚀 Quick Start\r\n\r\n### ES Modules\r\n\r\n```javascript\r\nimport { BWDatePicker } from '@bw-ui/datepicker';\r\nimport { AccessibilityPlugin } from '@bw-ui/datepicker-accessibility';\r\n\r\nconst picker = new BWDatePicker('#date-input', {\r\n  mode: 'popup',\r\n}).use(AccessibilityPlugin);\r\n```\r\n\r\n### CDN\r\n\r\n```html\r\n<link\r\n  rel=\"stylesheet\"\r\n  href=\"https://unpkg.com/@bw-ui/datepicker/dist/bw-datepicker.min.css\"\r\n/>\r\n<link\r\n  rel=\"stylesheet\"\r\n  href=\"https://unpkg.com/@bw-ui/datepicker-accessibility/dist/bw-accessibility.min.css\"\r\n/>\r\n\r\n<script src=\"https://unpkg.com/@bw-ui/datepicker/dist/bw-datepicker.min.js\"></script>\r\n<script src=\"https://unpkg.com/@bw-ui/datepicker-accessibility/dist/bw-accessibility.min.js\"></script>\r\n\r\n<script>\r\n  const picker = new BW.BWDatePicker('#date-input').use(\r\n    BWAccessibility.AccessibilityPlugin\r\n  );\r\n</script>\r\n```\r\n\r\n## ⚙️ Options\r\n\r\n```javascript\r\n.use(BWAccessibility.AccessibilityPlugin, {\r\n  // Keyboard Navigation\r\n  enableKeyboard: true,       // Enable keyboard navigation\r\n\r\n  // Focus Management\r\n  enableFocusTrap: true,      // Trap focus inside picker\r\n  autoFocus: true,            // Auto focus on open\r\n  returnFocus: true,          // Return focus to input on close\r\n\r\n  // Screen Reader\r\n  enableAnnouncer: true,      // Enable screen reader announcements\r\n  announcerDelay: 100,        // Delay before announcements (ms)\r\n\r\n  // ARIA\r\n  enableAria: true,           // Add ARIA attributes\r\n\r\n  // High Contrast\r\n  enableHighContrast: true,   // Support high contrast mode\r\n})\r\n```\r\n\r\n### Options Reference\r\n\r\n| Option               | Type      | Default | Description                               |\r\n| -------------------- | --------- | ------- | ----------------------------------------- |\r\n| `enableKeyboard`     | `boolean` | `true`  | Enable/disable keyboard navigation        |\r\n| `enableFocusTrap`    | `boolean` | `true`  | Trap focus inside picker when open        |\r\n| `autoFocus`          | `boolean` | `true`  | Automatically focus first element on open |\r\n| `returnFocus`        | `boolean` | `true`  | Return focus to trigger element on close  |\r\n| `enableAnnouncer`    | `boolean` | `true`  | Enable screen reader announcements        |\r\n| `announcerDelay`     | `number`  | `100`   | Milliseconds delay before announcement    |\r\n| `enableAria`         | `boolean` | `true`  | Add ARIA roles and attributes             |\r\n| `enableHighContrast` | `boolean` | `true`  | Support high contrast mode                |\r\n\r\n### Examples\r\n\r\n**Minimal (keyboard only):**\r\n\r\n```javascript\r\n.use(BWAccessibility.AccessibilityPlugin, {\r\n  enableFocusTrap: false,\r\n  enableAnnouncer: false,\r\n})\r\n```\r\n\r\n**Full accessibility (default):**\r\n\r\n```javascript\r\n.use(BWAccessibility.AccessibilityPlugin)\r\n// All options enabled by default\r\n```\r\n\r\n**Custom announcer delay:**\r\n\r\n```javascript\r\n.use(BWAccessibility.AccessibilityPlugin, {\r\n  announcerDelay: 200,  // Slower announcements\r\n})\r\n```\r\n\r\n**Disable auto focus:**\r\n\r\n```javascript\r\n.use(BWAccessibility.AccessibilityPlugin, {\r\n  autoFocus: false,  // Don't auto focus on open\r\n})\r\n```\r\n\r\n## ⌨️ Keyboard Shortcuts\r\n\r\n### Day Navigation\r\n\r\n| Key    | Action                   |\r\n| ------ | ------------------------ |\r\n| `←`    | Previous day             |\r\n| `→`    | Next day                 |\r\n| `↑`    | Previous week (same day) |\r\n| `↓`    | Next week (same day)     |\r\n| `Home` | First day of month       |\r\n| `End`  | Last day of month        |\r\n\r\n### Month/Year Navigation\r\n\r\n| Key                | Action         |\r\n| ------------------ | -------------- |\r\n| `PageUp`           | Previous month |\r\n| `PageDown`         | Next month     |\r\n| `Shift + PageUp`   | Previous year  |\r\n| `Shift + PageDown` | Next year      |\r\n\r\n### Selection & Control\r\n\r\n| Key           | Action                    |\r\n| ------------- | ------------------------- |\r\n| `Enter`       | Select focused date       |\r\n| `Space`       | Select focused date       |\r\n| `Escape`      | Close picker              |\r\n| `Tab`         | Navigate between elements |\r\n| `Shift + Tab` | Navigate backwards        |\r\n\r\n## 🔧 What It Does\r\n\r\n### 1. Keyboard Navigation (`enableKeyboard`)\r\n\r\nEnables full keyboard control of the datepicker:\r\n\r\n```javascript\r\n// User can navigate entirely with keyboard\r\n// Arrow keys move between days\r\n// PageUp/Down changes months\r\n// Enter selects, Escape closes\r\n```\r\n\r\n### 2. Focus Trap (`enableFocusTrap`)\r\n\r\nKeeps focus inside the picker when open:\r\n\r\n```javascript\r\n// When picker opens:\r\n// - Focus moves to selected date (or today, or first day)\r\n// - Tab cycles through picker elements only\r\n// - Focus doesn't escape to page behind\r\n```\r\n\r\n### 3. Auto Focus (`autoFocus`)\r\n\r\nSmart initial focus when picker opens:\r\n\r\n```\r\nPriority order:\r\n1. Previously selected date\r\n2. Today's date\r\n3. First available day\r\n```\r\n\r\n### 4. Return Focus (`returnFocus`)\r\n\r\nReturns focus to input when picker closes:\r\n\r\n```javascript\r\n// User presses Escape or selects date\r\n// Focus returns to the input field\r\n```\r\n\r\n### 5. Screen Reader Announcements (`enableAnnouncer`)\r\n\r\nAnnounces changes to screen readers:\r\n\r\n```javascript\r\n// Announces:\r\n// - \"Calendar opened\"\r\n// - \"Calendar closed\"\r\n// - \"December 2025\" (on month change)\r\n// - Date labels when navigating\r\n```\r\n\r\n### 6. ARIA Attributes (`enableAria`)\r\n\r\nAdds proper ARIA roles and labels:\r\n\r\n```html\r\n<!-- Grid structure -->\r\n<div role=\"grid\" aria-label=\"December 2025\">\r\n  <div role=\"row\">\r\n    <button\r\n      role=\"gridcell\"\r\n      aria-label=\"Sunday, December 25, 2025\"\r\n      aria-selected=\"true\"\r\n      tabindex=\"0\"\r\n    >\r\n      25\r\n    </button>\r\n  </div>\r\n</div>\r\n```\r\n\r\n### 7. High Contrast Support (`enableHighContrast`)\r\n\r\nRespects user's high contrast preferences:\r\n\r\n```css\r\n@media (prefers-contrast: high) {\r\n  /* Enhanced borders and focus indicators */\r\n}\r\n```\r\n\r\n## 📡 Events\r\n\r\nThe plugin emits no additional events but responds to core events:\r\n\r\n```javascript\r\n// Plugin listens to:\r\npicker.on('picker:opened', () => {\r\n  // Activates keyboard nav, focus trap, announces \"Calendar opened\"\r\n});\r\n\r\npicker.on('picker:closed', () => {\r\n  // Deactivates focus trap, announces \"Calendar closed\"\r\n});\r\n\r\npicker.on('nav:monthChanged', ({ month, year }) => {\r\n  // Announces new month/year to screen readers\r\n});\r\n```\r\n\r\n## 🎯 Accessibility Compliance\r\n\r\nThis plugin helps achieve:\r\n\r\n- ✅ **WCAG 2.1 Level AA** compliance\r\n- ✅ **Section 508** compliance\r\n- ✅ **WAI-ARIA 1.2** design patterns\r\n\r\n### Checklist\r\n\r\n| Requirement           | Status |\r\n| --------------------- | ------ |\r\n| Keyboard accessible   | ✅     |\r\n| Focus visible         | ✅     |\r\n| Focus trapped         | ✅     |\r\n| Screen reader support | ✅     |\r\n| ARIA labels           | ✅     |\r\n| High contrast support | ✅     |\r\n| No keyboard traps     | ✅     |\r\n\r\n## 🔌 Combining with Other Plugins\r\n\r\nWorks great with other BW DatePicker plugins:\r\n\r\n```javascript\r\nimport { BWDatePicker } from '@bw-ui/datepicker';\r\nimport { ThemingPlugin } from '@bw-ui/datepicker-theming';\r\nimport { AccessibilityPlugin } from '@bw-ui/datepicker-accessibility';\r\nimport { PositioningPlugin } from '@bw-ui/datepicker-positioning';\r\n\r\nconst picker = new BWDatePicker('#date-input')\r\n  .use(BWTheming.ThemingPlugin, { theme: 'dark' })\r\n  .use(BWAccessibility.AccessibilityPlugin) // Add accessibility\r\n  .use(BWPositioning.PositioningPlugin);\r\n```\r\n\r\n### Recommended Plugin Order\r\n\r\n```javascript\r\n.use(BWTheming.ThemingPlugin)        // 1. Theming first\r\n.use(BWAccessibility.AccessibilityPlugin)  // 2. Accessibility second\r\n.use(BWPositioning.PositioningPlugin)    // 3. Positioning last\r\n```\r\n\r\n## 🧪 Testing Accessibility\r\n\r\n### Manual Testing\r\n\r\n1. **Keyboard Only:** Unplug mouse, navigate with keyboard only\r\n2. **Screen Reader:** Test with NVDA, VoiceOver, or JAWS\r\n3. **High Contrast:** Enable Windows High Contrast mode\r\n\r\n### Automated Testing\r\n\r\n```bash\r\n# Using axe-core\r\nnpm install axe-core\r\n\r\n# In your tests\r\nimport axe from 'axe-core';\r\n\r\naxe.run(document.querySelector('.bw-datepicker'))\r\n  .then(results => {\r\n    console.log(results.violations); // Should be empty\r\n  });\r\n```\r\n\r\n## 📁 What's Included\r\n\r\n```\r\ndist/\r\n├── bw-accessibility.min.js      # IIFE build (for <script>)\r\n├── bw-accessibility.esm.min.js  # ESM build (for import)\r\n└── bw-accessibility.min.css     # Styles (focus indicators, etc.)\r\n```\r\n\r\n## 🔗 Related Packages\r\n\r\n| Package                                                                                          | Description      |\r\n| ------------------------------------------------------------------------------------------------ | ---------------- |\r\n| [@bw-ui/datepicker](https://www.npmjs.com/package/@bw-ui/datepicker)                             | Core (required)  |\r\n| [@bw-ui/datepicker-theming](https://www.npmjs.com/package/@bw-ui/datepicker-theming)             | Dark mode        |\r\n| [@bw-ui/datepicker-positioning](https://www.npmjs.com/package/@bw-ui/datepicker-positioning)     | Auto-positioning |\r\n| [@bw-ui/datepicker-mobile](https://www.npmjs.com/package/@bw-ui/datepicker-mobile)               | Touch support    |\r\n| [@bw-ui/datepicker-input-handler](https://www.npmjs.com/package/@bw-ui/datepicker-input-handler) | Input masking    |\r\n| [@bw-ui/datepicker-date-utils](https://www.npmjs.com/package/@bw-ui/datepicker-date-utils)       | Date utilities   |\r\n\r\n## 📄 License\r\n\r\nMIT © [BW UI](https://github.com/bw-ui)\r\n\r\n## 🐛 Issues\r\n\r\nFound a bug? [Report it here](https://github.com/bw-ui/bw-datepicker/issues)\r\n","readmeFilename":"README.md"}