@flavia-dev/a11y-ui-kit-react 0.1.0
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.
- package/README.md +125 -0
- package/dist/accessible-react-components.css +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/package.json +69 -0
package/README.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# accessible-react-components
|
|
2
|
+
|
|
3
|
+
Production-ready accessible React components following **WCAG 2.1 AA standards**.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/accessible-react-components)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## Features
|
|
9
|
+
|
|
10
|
+
- ✅ **WCAG 2.1 AA compliant** - Fully accessible components
|
|
11
|
+
- ✅ **TypeScript** - Full type safety
|
|
12
|
+
- ✅ **Tree-shakeable** - Import only what you need
|
|
13
|
+
- ✅ **CSS Modules** - Scoped styling
|
|
14
|
+
- ✅ **Framework agnostic** - Works with any React project
|
|
15
|
+
- ✅ **Tested** - Comprehensive test coverage
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install accessible-react-components
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { Button } from 'accessible-react-components';
|
|
27
|
+
import 'accessible-react-components/styles.css';
|
|
28
|
+
|
|
29
|
+
function App() {
|
|
30
|
+
return (
|
|
31
|
+
<Button
|
|
32
|
+
variant="primary"
|
|
33
|
+
onClick={() => console.log('Clicked!')}
|
|
34
|
+
>
|
|
35
|
+
Click me
|
|
36
|
+
</Button>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Components
|
|
42
|
+
|
|
43
|
+
### Button
|
|
44
|
+
|
|
45
|
+
Accessible button component with multiple variants and states.
|
|
46
|
+
|
|
47
|
+
#### Props
|
|
48
|
+
|
|
49
|
+
| Prop | Type | Default | Description |
|
|
50
|
+
|------|------|---------|-------------|
|
|
51
|
+
| `variant` | `'primary' \| 'secondary' \| 'danger'` | `'primary'` | Button style variant |
|
|
52
|
+
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Button size |
|
|
53
|
+
| `disabled` | `boolean` | `false` | Disabled state |
|
|
54
|
+
| `loading` | `boolean` | `false` | Loading state with spinner |
|
|
55
|
+
| `fullWidth` | `boolean` | `false` | Full width button |
|
|
56
|
+
|
|
57
|
+
#### Examples
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
// Primary button
|
|
61
|
+
<Button variant="primary">Primary</Button>
|
|
62
|
+
|
|
63
|
+
// Secondary button
|
|
64
|
+
<Button variant="secondary">Secondary</Button>
|
|
65
|
+
|
|
66
|
+
// Danger button
|
|
67
|
+
<Button variant="danger">Delete</Button>
|
|
68
|
+
|
|
69
|
+
// Loading state
|
|
70
|
+
<Button loading>Loading...</Button>
|
|
71
|
+
|
|
72
|
+
// Disabled state
|
|
73
|
+
<Button disabled>Disabled</Button>
|
|
74
|
+
|
|
75
|
+
// Different sizes
|
|
76
|
+
<Button size="small">Small</Button>
|
|
77
|
+
<Button size="medium">Medium</Button>
|
|
78
|
+
<Button size="large">Large</Button>
|
|
79
|
+
|
|
80
|
+
// Full width
|
|
81
|
+
<Button fullWidth>Full Width</Button>
|
|
82
|
+
|
|
83
|
+
// With icon (aria-label required for accessibility)
|
|
84
|
+
<Button aria-label="Close dialog">×</Button>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Accessibility Features
|
|
88
|
+
|
|
89
|
+
- ✅ **Keyboard navigation** - Full keyboard support (Enter/Space)
|
|
90
|
+
- ✅ **Focus indicators** - Visible focus states
|
|
91
|
+
- ✅ **Screen reader support** - Proper ARIA attributes
|
|
92
|
+
- ✅ **Semantic HTML** - Native button elements
|
|
93
|
+
- ✅ **Color contrast** - WCAG AA compliant colors
|
|
94
|
+
- ✅ **Touch targets** - Minimum 44x44px target size
|
|
95
|
+
|
|
96
|
+
## Browser Support
|
|
97
|
+
|
|
98
|
+
- Chrome (latest)
|
|
99
|
+
- Firefox (latest)
|
|
100
|
+
- Safari (latest)
|
|
101
|
+
- Edge (latest)
|
|
102
|
+
|
|
103
|
+
## Development
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Install dependencies
|
|
107
|
+
npm install
|
|
108
|
+
|
|
109
|
+
# Run tests
|
|
110
|
+
npm test
|
|
111
|
+
|
|
112
|
+
# Build library
|
|
113
|
+
npm run build
|
|
114
|
+
|
|
115
|
+
# Type check
|
|
116
|
+
npm run typecheck
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Contributing
|
|
120
|
+
|
|
121
|
+
Contributions are welcome! Please open an issue or submit a pull request.
|
|
122
|
+
|
|
123
|
+
## License
|
|
124
|
+
|
|
125
|
+
MIT © Your Name
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._button_13vd9_2{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-family:inherit;font-weight:600;line-height:1.5;border:none;border-radius:.5rem;cursor:pointer;transition:all .2s ease;text-decoration:none;white-space:nowrap}._button_13vd9_2:focus-visible{outline:3px solid #3b82f6;outline-offset:2px}._button_13vd9_2:disabled{cursor:not-allowed;opacity:.6}._primary_13vd9_30{background-color:#3b82f6;color:#fff}._primary_13vd9_30:hover:not(:disabled){background-color:#2563eb}._primary_13vd9_30:active:not(:disabled){background-color:#1d4ed8}._secondary_13vd9_43{background-color:#64748b;color:#fff}._secondary_13vd9_43:hover:not(:disabled){background-color:#475569}._secondary_13vd9_43:active:not(:disabled){background-color:#334155}._danger_13vd9_56{background-color:#ef4444;color:#fff}._danger_13vd9_56:hover:not(:disabled){background-color:#dc2626}._danger_13vd9_56:active:not(:disabled){background-color:#b91c1c}._small_13vd9_70{padding:.5rem 1rem;font-size:.875rem}._medium_13vd9_75{padding:.625rem 1.25rem;font-size:1rem}._large_13vd9_80{padding:.75rem 1.5rem;font-size:1.125rem}._fullWidth_13vd9_86{width:100%}._loading_13vd9_91{pointer-events:none}._loadingContainer_13vd9_95{display:inline-flex;align-items:center;gap:.5rem}._spinner_13vd9_101{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:_spin_13vd9_101 .75s linear infinite}@keyframes _spin_13vd9_101{to{transform:rotate(360deg)}}._srOnly_13vd9_118{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),v=require("react"),y="_button_13vd9_2",g="_primary_13vd9_30",b="_secondary_13vd9_43",f="_danger_13vd9_56",h="_small_13vd9_70",j="_medium_13vd9_75",x="_large_13vd9_80",N="_fullWidth_13vd9_86",O="_loading_13vd9_91",B="_loadingContainer_13vd9_95",C="_spinner_13vd9_101",W="_spin_13vd9_101",R="_srOnly_13vd9_118",n={button:y,primary:g,secondary:b,danger:f,small:h,medium:j,large:x,fullWidth:N,loading:O,loadingContainer:B,spinner:C,spin:W,srOnly:R},t=v.forwardRef(({variant:e="primary",size:i="medium",children:o,disabled:r=!1,loading:s=!1,fullWidth:d=!1,className:l,type:_="button",...c},u)=>{const m=r||s,p=[n.button,n[e],n[i],s&&n.loading,d&&n.fullWidth,l].filter(Boolean).join(" ");return a.jsxs("button",{ref:u,type:_,className:p,disabled:m,"aria-busy":s||void 0,...c,children:[s&&a.jsxs("span",{role:"status","aria-live":"polite",className:n.loadingContainer,children:[a.jsx("span",{className:n.spinner,"aria-hidden":"true"}),a.jsx("span",{className:n.srOnly,children:"Loading..."})]}),a.jsx("span",{"aria-hidden":s||void 0,children:o})]})});t.displayName="Button";exports.Button=t;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/Button/Button.tsx"],"sourcesContent":["// src/atoms/Button/Button.tsx\nimport React from \"react\";\nimport styles from \"./Button.module.css\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"danger\";\n size?: \"small\" | \"medium\" | \"large\";\n children: React.ReactNode;\n loading?: boolean;\n fullWidth?: boolean;\n}\n\n/**\n * Accessible button component following WCAG 2.1 AA standards\n *\n * Features:\n * - Native <button> element for semantic HTML\n * - Full keyboard support (Tab, Enter, Space)\n * - Screen reader announcements for loading state\n * - Visible focus indicator\n * - Color contrast compliant\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" onClick={handleClick}>\n * Click me\n * </Button>\n *\n * <Button loading disabled>\n * Submitting...\n * </Button>\n * ```\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = \"primary\",\n size = \"medium\",\n children,\n disabled = false,\n loading = false,\n fullWidth = false,\n className,\n type = \"button\",\n ...props\n },\n ref\n ) => {\n const isDisabled = disabled || loading;\n\n const classNames = [\n styles.button,\n styles[variant],\n styles[size],\n loading && styles.loading,\n fullWidth && styles.fullWidth,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n ref={ref}\n type={type}\n className={classNames}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading && (\n <span\n role=\"status\"\n aria-live=\"polite\"\n className={styles.loadingContainer}\n >\n <span className={styles.spinner} aria-hidden=\"true\" />\n <span className={styles.srOnly}>Loading...</span>\n </span>\n )}\n <span aria-hidden={loading || undefined}>{children}</span>\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n"],"names":["Button","React","variant","size","children","disabled","loading","fullWidth","className","type","props","ref","isDisabled","classNames","styles","jsxs","jsx"],"mappings":"kjBAkCaA,EAASC,EAAM,WAC1B,CACE,CACE,QAAAC,EAAU,UACV,KAAAC,EAAO,SACP,SAAAC,EACA,SAAAC,EAAW,GACX,QAAAC,EAAU,GACV,UAAAC,EAAY,GACZ,UAAAC,EACA,KAAAC,EAAO,SACP,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAaP,GAAYC,EAEzBO,EAAa,CACjBC,EAAO,OACPA,EAAOZ,CAAO,EACdY,EAAOX,CAAI,EACXG,GAAWQ,EAAO,QAClBP,GAAaO,EAAO,UACpBN,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,OACEO,EAAAA,KAAC,SAAA,CACC,IAAAJ,EACA,KAAAF,EACA,UAAWI,EACX,SAAUD,EACV,YAAWN,GAAW,OACrB,GAAGI,EAEH,SAAA,CAAAJ,GACCS,EAAAA,KAAC,OAAA,CACC,KAAK,SACL,YAAU,SACV,UAAWD,EAAO,iBAElB,SAAA,CAAAE,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAO,QAAS,cAAY,OAAO,EACpDE,EAAAA,IAAC,OAAA,CAAK,UAAWF,EAAO,OAAQ,SAAA,YAAA,CAAU,CAAA,CAAA,CAAA,EAG9CE,EAAAA,IAAC,OAAA,CAAK,cAAaV,GAAW,OAAY,SAAAF,CAAA,CAAS,CAAA,CAAA,CAAA,CAGzD,CACF,EAEAJ,EAAO,YAAc"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { default as default_2 } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Accessible button component following WCAG 2.1 AA standards
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Native <button> element for semantic HTML
|
|
8
|
+
* - Full keyboard support (Tab, Enter, Space)
|
|
9
|
+
* - Screen reader announcements for loading state
|
|
10
|
+
* - Visible focus indicator
|
|
11
|
+
* - Color contrast compliant
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <Button variant="primary" onClick={handleClick}>
|
|
16
|
+
* Click me
|
|
17
|
+
* </Button>
|
|
18
|
+
*
|
|
19
|
+
* <Button loading disabled>
|
|
20
|
+
* Submitting...
|
|
21
|
+
* </Button>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare const Button: default_2.ForwardRefExoticComponent<ButtonProps & default_2.RefAttributes<HTMLButtonElement>>;
|
|
25
|
+
|
|
26
|
+
export declare interface ButtonProps extends default_2.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
27
|
+
variant?: "primary" | "secondary" | "danger";
|
|
28
|
+
size?: "small" | "medium" | "large";
|
|
29
|
+
children: default_2.ReactNode;
|
|
30
|
+
loading?: boolean;
|
|
31
|
+
fullWidth?: boolean;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { }
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsxs as t, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import v from "react";
|
|
3
|
+
const y = "_button_13vd9_2", f = "_primary_13vd9_30", g = "_secondary_13vd9_43", b = "_danger_13vd9_56", h = "_small_13vd9_70", N = "_medium_13vd9_75", C = "_large_13vd9_80", O = "_fullWidth_13vd9_86", W = "_loading_13vd9_91", j = "_loadingContainer_13vd9_95", x = "_spinner_13vd9_101", B = "_spin_13vd9_101", R = "_srOnly_13vd9_118", n = {
|
|
4
|
+
button: y,
|
|
5
|
+
primary: f,
|
|
6
|
+
secondary: g,
|
|
7
|
+
danger: b,
|
|
8
|
+
small: h,
|
|
9
|
+
medium: N,
|
|
10
|
+
large: C,
|
|
11
|
+
fullWidth: O,
|
|
12
|
+
loading: W,
|
|
13
|
+
loadingContainer: j,
|
|
14
|
+
spinner: x,
|
|
15
|
+
spin: B,
|
|
16
|
+
srOnly: R
|
|
17
|
+
}, w = v.forwardRef(
|
|
18
|
+
({
|
|
19
|
+
variant: o = "primary",
|
|
20
|
+
size: i = "medium",
|
|
21
|
+
children: e,
|
|
22
|
+
disabled: r = !1,
|
|
23
|
+
loading: s = !1,
|
|
24
|
+
fullWidth: d = !1,
|
|
25
|
+
className: l,
|
|
26
|
+
type: _ = "button",
|
|
27
|
+
...c
|
|
28
|
+
}, m) => {
|
|
29
|
+
const p = r || s, u = [
|
|
30
|
+
n.button,
|
|
31
|
+
n[o],
|
|
32
|
+
n[i],
|
|
33
|
+
s && n.loading,
|
|
34
|
+
d && n.fullWidth,
|
|
35
|
+
l
|
|
36
|
+
].filter(Boolean).join(" ");
|
|
37
|
+
return /* @__PURE__ */ t(
|
|
38
|
+
"button",
|
|
39
|
+
{
|
|
40
|
+
ref: m,
|
|
41
|
+
type: _,
|
|
42
|
+
className: u,
|
|
43
|
+
disabled: p,
|
|
44
|
+
"aria-busy": s || void 0,
|
|
45
|
+
...c,
|
|
46
|
+
children: [
|
|
47
|
+
s && /* @__PURE__ */ t(
|
|
48
|
+
"span",
|
|
49
|
+
{
|
|
50
|
+
role: "status",
|
|
51
|
+
"aria-live": "polite",
|
|
52
|
+
className: n.loadingContainer,
|
|
53
|
+
children: [
|
|
54
|
+
/* @__PURE__ */ a("span", { className: n.spinner, "aria-hidden": "true" }),
|
|
55
|
+
/* @__PURE__ */ a("span", { className: n.srOnly, children: "Loading..." })
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
),
|
|
59
|
+
/* @__PURE__ */ a("span", { "aria-hidden": s || void 0, children: e })
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
w.displayName = "Button";
|
|
66
|
+
export {
|
|
67
|
+
w as Button
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/Button/Button.tsx"],"sourcesContent":["// src/atoms/Button/Button.tsx\nimport React from \"react\";\nimport styles from \"./Button.module.css\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"danger\";\n size?: \"small\" | \"medium\" | \"large\";\n children: React.ReactNode;\n loading?: boolean;\n fullWidth?: boolean;\n}\n\n/**\n * Accessible button component following WCAG 2.1 AA standards\n *\n * Features:\n * - Native <button> element for semantic HTML\n * - Full keyboard support (Tab, Enter, Space)\n * - Screen reader announcements for loading state\n * - Visible focus indicator\n * - Color contrast compliant\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" onClick={handleClick}>\n * Click me\n * </Button>\n *\n * <Button loading disabled>\n * Submitting...\n * </Button>\n * ```\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = \"primary\",\n size = \"medium\",\n children,\n disabled = false,\n loading = false,\n fullWidth = false,\n className,\n type = \"button\",\n ...props\n },\n ref\n ) => {\n const isDisabled = disabled || loading;\n\n const classNames = [\n styles.button,\n styles[variant],\n styles[size],\n loading && styles.loading,\n fullWidth && styles.fullWidth,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <button\n ref={ref}\n type={type}\n className={classNames}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading && (\n <span\n role=\"status\"\n aria-live=\"polite\"\n className={styles.loadingContainer}\n >\n <span className={styles.spinner} aria-hidden=\"true\" />\n <span className={styles.srOnly}>Loading...</span>\n </span>\n )}\n <span aria-hidden={loading || undefined}>{children}</span>\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n"],"names":["Button","React","variant","size","children","disabled","loading","fullWidth","className","type","props","ref","isDisabled","classNames","styles","jsxs","jsx"],"mappings":";;;;;;;;;;;;;;;;GAkCaA,IAASC,EAAM;AAAA,EAC1B,CACE;AAAA,IACE,SAAAC,IAAU;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,UAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,SAAAC,IAAU;AAAA,IACV,WAAAC,IAAY;AAAA,IACZ,WAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAaP,KAAYC,GAEzBO,IAAa;AAAA,MACjBC,EAAO;AAAA,MACPA,EAAOZ,CAAO;AAAA,MACdY,EAAOX,CAAI;AAAA,MACXG,KAAWQ,EAAO;AAAA,MAClBP,KAAaO,EAAO;AAAA,MACpBN;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,gBAAAO;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAJ;AAAA,QACA,MAAAF;AAAA,QACA,WAAWI;AAAA,QACX,UAAUD;AAAA,QACV,aAAWN,KAAW;AAAA,QACrB,GAAGI;AAAA,QAEH,UAAA;AAAA,UAAAJ,KACC,gBAAAS;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,aAAU;AAAA,cACV,WAAWD,EAAO;AAAA,cAElB,UAAA;AAAA,gBAAA,gBAAAE,EAAC,QAAA,EAAK,WAAWF,EAAO,SAAS,eAAY,QAAO;AAAA,gBACpD,gBAAAE,EAAC,QAAA,EAAK,WAAWF,EAAO,QAAQ,UAAA,aAAA,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAG9C,gBAAAE,EAAC,QAAA,EAAK,eAAaV,KAAW,QAAY,UAAAF,EAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGzD;AACF;AAEAJ,EAAO,cAAc;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@flavia-dev/a11y-ui-kit-react",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Enterprise-grade accessible React components library following WCAG 2.1 AA/AAA standards. Production-ready, type-safe, and fully customizable UI components with built-in accessibility.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"require": "./dist/index.cjs",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./styles.css": "./dist/accessible-react-components.css"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"dev": "vite",
|
|
22
|
+
"build": "tsc && vite build",
|
|
23
|
+
"test": "vitest",
|
|
24
|
+
"test:ui": "vitest --ui",
|
|
25
|
+
"typecheck": "tsc --noEmit"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"react",
|
|
29
|
+
"accessibility",
|
|
30
|
+
"a11y",
|
|
31
|
+
"wcag",
|
|
32
|
+
"components",
|
|
33
|
+
"ui",
|
|
34
|
+
"button",
|
|
35
|
+
"typescript"
|
|
36
|
+
],
|
|
37
|
+
"author": "Your Name <your.email@example.com>",
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "https://github.com/yourusername/accessible-react-components"
|
|
42
|
+
},
|
|
43
|
+
"homepage": "https://github.com/yourusername/accessible-react-components#readme",
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/yourusername/accessible-react-components/issues"
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"react": ">=18.0.0",
|
|
49
|
+
"react-dom": ">=18.0.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@testing-library/dom": "^10.4.1",
|
|
53
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
54
|
+
"@testing-library/react": "^16.3.1",
|
|
55
|
+
"@testing-library/user-event": "^14.6.1",
|
|
56
|
+
"@types/node": "^25.0.2",
|
|
57
|
+
"@types/react": "^19.2.7",
|
|
58
|
+
"@types/react-dom": "^19.2.3",
|
|
59
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
60
|
+
"@vitest/ui": "^4.0.15",
|
|
61
|
+
"jsdom": "^27.3.0",
|
|
62
|
+
"react": "^19.2.3",
|
|
63
|
+
"react-dom": "^19.2.3",
|
|
64
|
+
"typescript": "^5.9.3",
|
|
65
|
+
"vite": "^7.3.0",
|
|
66
|
+
"vite-plugin-dts": "^4.5.4",
|
|
67
|
+
"vitest": "^4.0.15"
|
|
68
|
+
}
|
|
69
|
+
}
|