@fpkit/acss 1.0.0-beta.1 → 2.0.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 +92 -0
- package/docs/README.md +325 -0
- package/docs/guides/accessibility.md +764 -0
- package/docs/guides/architecture.md +705 -0
- package/docs/guides/composition.md +688 -0
- package/docs/guides/css-variables.md +522 -0
- package/docs/guides/storybook.md +828 -0
- package/docs/guides/testing.md +817 -0
- package/docs/testing/focus-indicator-testing.md +437 -0
- package/libs/{chunk-7XPFW7CB.js → chunk-43TK2ICH.js} +2 -2
- package/libs/chunk-5PJYLVFY.cjs +17 -0
- package/libs/chunk-5PJYLVFY.cjs.map +1 -0
- package/libs/chunk-E4OSROCA.cjs +17 -0
- package/libs/chunk-E4OSROCA.cjs.map +1 -0
- package/libs/chunk-KVKQLRJG.js +10 -0
- package/libs/chunk-KVKQLRJG.js.map +1 -0
- package/libs/{chunk-QVW6W76L.cjs → chunk-MGPWZRBX.cjs} +3 -3
- package/libs/chunk-NNTBIHSD.js +8 -0
- package/libs/chunk-NNTBIHSD.js.map +1 -0
- package/libs/{chunk-X3JCTEPD.js → chunk-QKHPHMG2.js} +2 -2
- package/libs/{chunk-T4T6GWYQ.cjs → chunk-R7NLLZU2.cjs} +3 -3
- package/libs/{chunk-X5LGFCWG.js → chunk-UJAQVHWC.js} +3 -3
- package/libs/{chunk-DKTHCQ5P.cjs → chunk-X5RKCLDC.cjs} +3 -3
- package/libs/components/breadcrumbs/breadcrumb.cjs +5 -5
- package/libs/components/breadcrumbs/breadcrumb.d.cts +1 -1
- package/libs/components/breadcrumbs/breadcrumb.d.ts +1 -1
- package/libs/components/breadcrumbs/breadcrumb.js +2 -2
- package/libs/components/button.cjs +3 -3
- package/libs/components/button.d.cts +1 -1
- package/libs/components/button.d.ts +1 -1
- package/libs/components/button.js +1 -1
- package/libs/components/buttons/button.css +1 -1
- package/libs/components/buttons/button.css.map +1 -1
- package/libs/components/buttons/button.min.css +2 -2
- package/libs/components/dialog/dialog.cjs +4 -4
- package/libs/components/dialog/dialog.js +2 -2
- package/libs/components/icons/icon.d.cts +32 -32
- package/libs/components/icons/icon.d.ts +32 -32
- package/libs/components/link/link.cjs +11 -3
- package/libs/components/link/link.d.cts +131 -3
- package/libs/components/link/link.d.ts +131 -3
- package/libs/components/link/link.js +1 -1
- package/libs/components/list/list.css +1 -1
- package/libs/components/list/list.min.css +1 -1
- package/libs/components/modal.cjs +3 -3
- package/libs/components/modal.js +2 -2
- package/libs/hooks.cjs +3 -3
- package/libs/hooks.d.cts +1 -1
- package/libs/hooks.d.ts +1 -1
- package/libs/hooks.js +2 -2
- package/libs/index.cjs +12 -12
- package/libs/index.css +1 -1
- package/libs/index.css.map +1 -1
- package/libs/index.d.cts +237 -2
- package/libs/index.d.ts +237 -2
- package/libs/index.js +5 -5
- package/package.json +4 -3
- package/src/components/README.mdx +1 -1
- package/src/components/breadcrumbs/breadcrumb.test.tsx +1 -2
- package/src/components/buttons/README.mdx +19 -9
- package/src/components/buttons/button.scss +5 -0
- package/src/components/buttons/button.stories.tsx +8 -5
- package/src/components/buttons/button.tsx +19 -15
- package/src/components/cards/card.stories.tsx +1 -1
- package/src/components/details/details.stories.tsx +1 -1
- package/src/components/form/form.stories.tsx +1 -1
- package/src/components/form/input.stories.tsx +1 -1
- package/src/components/form/select.stories.tsx +1 -1
- package/src/components/heading/README.mdx +292 -0
- package/src/components/icons/icon.stories.tsx +1 -1
- package/src/components/link/link.stories.tsx +205 -8
- package/src/components/link/link.test.tsx +1 -1
- package/src/components/link/link.tsx +22 -0
- package/src/components/link/link.types.ts +11 -3
- package/src/components/list/list.scss +1 -1
- package/src/components/nav/nav.stories.tsx +1 -1
- package/src/components/ui.stories.tsx +53 -19
- package/src/docs/accessibility.mdx +484 -0
- package/src/docs/composition.mdx +549 -0
- package/src/docs/css-variables.mdx +380 -0
- package/src/docs/fpkit-developer.mdx +623 -0
- package/src/introduction.mdx +356 -0
- package/src/styles/buttons/button.css +4 -0
- package/src/styles/buttons/button.css.map +1 -1
- package/src/styles/index.css +9 -3
- package/src/styles/index.css.map +1 -1
- package/src/styles/list/list.css +1 -1
- package/src/styles/utilities/_disabled.scss +5 -4
- package/libs/chunk-33PNJ4LO.cjs +0 -15
- package/libs/chunk-33PNJ4LO.cjs.map +0 -1
- package/libs/chunk-GT77BX4L.cjs +0 -17
- package/libs/chunk-GT77BX4L.cjs.map +0 -1
- package/libs/chunk-OVWLQYMK.js +0 -10
- package/libs/chunk-OVWLQYMK.js.map +0 -1
- package/libs/chunk-UEPAWMDF.js +0 -8
- package/libs/chunk-UEPAWMDF.js.map +0 -1
- package/libs/link-5192f411.d.ts +0 -323
- /package/libs/{chunk-7XPFW7CB.js.map → chunk-43TK2ICH.js.map} +0 -0
- /package/libs/{chunk-QVW6W76L.cjs.map → chunk-MGPWZRBX.cjs.map} +0 -0
- /package/libs/{chunk-X3JCTEPD.js.map → chunk-QKHPHMG2.js.map} +0 -0
- /package/libs/{chunk-T4T6GWYQ.cjs.map → chunk-R7NLLZU2.cjs.map} +0 -0
- /package/libs/{chunk-X5LGFCWG.js.map → chunk-UJAQVHWC.js.map} +0 -0
- /package/libs/{chunk-DKTHCQ5P.cjs.map → chunk-X5RKCLDC.cjs.map} +0 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { Meta } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="Introduction" />
|
|
4
|
+
|
|
5
|
+
# @fpkit/acss Documentation
|
|
6
|
+
|
|
7
|
+
Welcome to the **@fpkit/acss** component library documentation! These guides
|
|
8
|
+
help you build accessible, maintainable applications using fpkit components.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 📚 Available Guides
|
|
13
|
+
|
|
14
|
+
### [CSS Variables Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/css-variables.md)
|
|
15
|
+
|
|
16
|
+
Learn how to discover and customize CSS custom properties for theming and
|
|
17
|
+
styling.
|
|
18
|
+
|
|
19
|
+
**Topics covered:**
|
|
20
|
+
|
|
21
|
+
- Understanding the naming convention (`--component-property`)
|
|
22
|
+
- Discovering available variables (DevTools, autocomplete)
|
|
23
|
+
- Customization strategies (global, theme, component-specific)
|
|
24
|
+
- rem units and accessibility
|
|
25
|
+
- Framework integration (React, Next.js, CSS Modules)
|
|
26
|
+
|
|
27
|
+
**Use when:** Customizing component appearance, creating themes, or building
|
|
28
|
+
design systems.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### [Composition Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/composition.md)
|
|
33
|
+
|
|
34
|
+
Master component composition patterns to build custom components by combining
|
|
35
|
+
fpkit primitives.
|
|
36
|
+
|
|
37
|
+
**Topics covered:**
|
|
38
|
+
|
|
39
|
+
- Composition vs creation decision tree
|
|
40
|
+
- Common composition patterns (container + content, conditional, enhanced
|
|
41
|
+
wrapper)
|
|
42
|
+
- Real-world examples (AlertDialog, IconButton, TagInput, ConfirmButton)
|
|
43
|
+
- Anti-patterns to avoid
|
|
44
|
+
- TypeScript support for compositions
|
|
45
|
+
|
|
46
|
+
**Use when:** Building custom components, extending fpkit functionality, or
|
|
47
|
+
creating application-specific components.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### [Accessibility Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/accessibility.md)
|
|
52
|
+
|
|
53
|
+
Understand and maintain WCAG 2.1 Level AA compliance when using and composing
|
|
54
|
+
fpkit components.
|
|
55
|
+
|
|
56
|
+
**Topics covered:**
|
|
57
|
+
|
|
58
|
+
- Core accessibility principles
|
|
59
|
+
- ARIA attributes and patterns
|
|
60
|
+
- Keyboard navigation
|
|
61
|
+
- Focus management
|
|
62
|
+
- Screen reader support
|
|
63
|
+
- Color contrast requirements
|
|
64
|
+
- Testing accessibility (manual and automated with jest-axe)
|
|
65
|
+
|
|
66
|
+
**Use when:** Ensuring accessible applications, testing for WCAG compliance,
|
|
67
|
+
implementing keyboard navigation, or composing accessible custom components.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### [Architecture Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/architecture.md)
|
|
72
|
+
|
|
73
|
+
Learn fpkit's architectural patterns, component structure, and how to work
|
|
74
|
+
effectively with the library.
|
|
75
|
+
|
|
76
|
+
**Topics covered:**
|
|
77
|
+
|
|
78
|
+
- Polymorphic UI component foundation
|
|
79
|
+
- Simple vs compound component patterns
|
|
80
|
+
- TypeScript support and prop types
|
|
81
|
+
- Composition patterns
|
|
82
|
+
- Styling architecture (data attributes, CSS variables)
|
|
83
|
+
- Props patterns and conventions
|
|
84
|
+
- Framework integration
|
|
85
|
+
|
|
86
|
+
**Use when:** Understanding fpkit component structure, working with polymorphic
|
|
87
|
+
`as` prop, extending component props, or integrating with frameworks.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### [Testing Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/testing.md)
|
|
92
|
+
|
|
93
|
+
Test applications and custom components built with fpkit using Vitest and React
|
|
94
|
+
Testing Library.
|
|
95
|
+
|
|
96
|
+
**Topics covered:**
|
|
97
|
+
|
|
98
|
+
- Vitest and React Testing Library setup
|
|
99
|
+
- Testing composed components
|
|
100
|
+
- Query best practices (`getByRole`, `getByLabelText`)
|
|
101
|
+
- Event testing (clicks, keyboard, forms)
|
|
102
|
+
- Accessibility testing (automated with jest-axe)
|
|
103
|
+
- Async testing and loading states
|
|
104
|
+
- Mock functions and test organization
|
|
105
|
+
|
|
106
|
+
**Use when:** Setting up test infrastructure, testing custom compositions,
|
|
107
|
+
testing user interactions, or testing accessibility.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### [Storybook Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/storybook.md)
|
|
112
|
+
|
|
113
|
+
Document custom components and compositions using Storybook for development and
|
|
114
|
+
showcase.
|
|
115
|
+
|
|
116
|
+
**Topics covered:**
|
|
117
|
+
|
|
118
|
+
- Storybook setup and configuration
|
|
119
|
+
- Story structure and patterns
|
|
120
|
+
- Documenting composed components
|
|
121
|
+
- CSS variable customization stories
|
|
122
|
+
- Interactive testing with play functions
|
|
123
|
+
- ArgTypes configuration
|
|
124
|
+
- Complete examples
|
|
125
|
+
|
|
126
|
+
**Use when:** Documenting custom components, creating component showcases,
|
|
127
|
+
interactive component development, or building internal component libraries.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 🎯 Quick Start by Task
|
|
132
|
+
|
|
133
|
+
### I want to customize component appearance
|
|
134
|
+
|
|
135
|
+
1. Read
|
|
136
|
+
[CSS Variables Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/css-variables.md)
|
|
137
|
+
2. Use browser DevTools to discover variables
|
|
138
|
+
3. Override in your CSS with `:root` or scoped selectors
|
|
139
|
+
|
|
140
|
+
**Example:**
|
|
141
|
+
|
|
142
|
+
```css
|
|
143
|
+
:root {
|
|
144
|
+
--btn-primary-bg: #0066cc;
|
|
145
|
+
--btn-padding-inline: 2rem;
|
|
146
|
+
--btn-radius: 0.5rem;
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### I want to build a custom component
|
|
153
|
+
|
|
154
|
+
1. Check
|
|
155
|
+
[Composition Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/composition.md)
|
|
156
|
+
decision tree
|
|
157
|
+
2. Review
|
|
158
|
+
[Architecture Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/architecture.md)
|
|
159
|
+
patterns
|
|
160
|
+
3. Compose from fpkit primitives
|
|
161
|
+
4. Maintain accessibility with
|
|
162
|
+
[Accessibility Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/accessibility.md)
|
|
163
|
+
|
|
164
|
+
**Example:**
|
|
165
|
+
|
|
166
|
+
```tsx
|
|
167
|
+
import { Button, Badge } from "@fpkit/acss";
|
|
168
|
+
|
|
169
|
+
export const StatusButton = ({ status, children, ...props }) => (
|
|
170
|
+
<Button {...props}>
|
|
171
|
+
{children}
|
|
172
|
+
<Badge variant={status}>{status}</Badge>
|
|
173
|
+
</Button>
|
|
174
|
+
);
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
### I want to ensure my app is accessible
|
|
180
|
+
|
|
181
|
+
1. Study
|
|
182
|
+
[Accessibility Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/accessibility.md)
|
|
183
|
+
2. Test with keyboard navigation
|
|
184
|
+
3. Use automated testing with jest-axe
|
|
185
|
+
([Testing Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/testing.md))
|
|
186
|
+
4. Verify color contrast ratios
|
|
187
|
+
|
|
188
|
+
**Example:**
|
|
189
|
+
|
|
190
|
+
```tsx
|
|
191
|
+
import { axe, toHaveNoViolations } from "jest-axe";
|
|
192
|
+
|
|
193
|
+
expect.extend(toHaveNoViolations);
|
|
194
|
+
|
|
195
|
+
it("should not have accessibility violations", async () => {
|
|
196
|
+
const { container } = render(
|
|
197
|
+
<StatusButton status="active">Server</StatusButton>
|
|
198
|
+
);
|
|
199
|
+
const results = await axe(container);
|
|
200
|
+
expect(results).toHaveNoViolations();
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### I want to test my components
|
|
207
|
+
|
|
208
|
+
1. Setup from
|
|
209
|
+
[Testing Guide](https://github.com/shawn-sandy/acss/blob/main/packages/fpkit/docs/guides/testing.md)
|
|
210
|
+
2. Focus tests on your custom logic (fpkit is already tested)
|
|
211
|
+
3. Use `getByRole` queries for accessibility
|
|
212
|
+
4. Test user interactions and keyboard navigation
|
|
213
|
+
|
|
214
|
+
**Example:**
|
|
215
|
+
|
|
216
|
+
```tsx
|
|
217
|
+
import { render, screen } from "@testing-library/react";
|
|
218
|
+
import { userEvent } from "@testing-library/user-event";
|
|
219
|
+
|
|
220
|
+
it("calls onClick when clicked", async () => {
|
|
221
|
+
const handleClick = vi.fn();
|
|
222
|
+
render(<StatusButton onClick={handleClick}>Click me</StatusButton>);
|
|
223
|
+
|
|
224
|
+
await userEvent.click(screen.getByRole("button"));
|
|
225
|
+
expect(handleClick).toHaveBeenCalledOnce();
|
|
226
|
+
});
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 💡 Key Concepts
|
|
232
|
+
|
|
233
|
+
### Composition Over Creation
|
|
234
|
+
|
|
235
|
+
fpkit encourages **composing** existing components rather than creating new ones
|
|
236
|
+
from scratch:
|
|
237
|
+
|
|
238
|
+
```tsx
|
|
239
|
+
// ✅ Good - compose from fpkit components
|
|
240
|
+
import { Button, Badge } from "@fpkit/acss";
|
|
241
|
+
|
|
242
|
+
const StatusButton = ({ status, children }) => (
|
|
243
|
+
<Button>
|
|
244
|
+
{children}
|
|
245
|
+
<Badge>{status}</Badge>
|
|
246
|
+
</Button>
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
// ❌ Less ideal - creating from scratch
|
|
250
|
+
const StatusButton = ({ status, children }) => (
|
|
251
|
+
<button className="status-button">
|
|
252
|
+
{children}
|
|
253
|
+
<span className="badge">{status}</span>
|
|
254
|
+
</button>
|
|
255
|
+
);
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Benefits:** Consistency, maintained accessibility, reduced code, leveraged
|
|
259
|
+
test coverage.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
### CSS Variables for Customization
|
|
264
|
+
|
|
265
|
+
All fpkit components use **CSS custom properties** for styling:
|
|
266
|
+
|
|
267
|
+
```css
|
|
268
|
+
/* Global customization */
|
|
269
|
+
:root {
|
|
270
|
+
--btn-primary-bg: #0066cc;
|
|
271
|
+
--btn-padding-inline: 2rem;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/* Component-specific */
|
|
275
|
+
.hero-button {
|
|
276
|
+
--btn-padding-inline: 3rem;
|
|
277
|
+
--btn-fs: 1.25rem;
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**Benefits:** Theme creation, component-specific customization, real-time
|
|
282
|
+
updates, scoped styling.
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
### WCAG 2.1 Level AA Compliance
|
|
287
|
+
|
|
288
|
+
fpkit components meet **WCAG 2.1 Level AA** standards by default:
|
|
289
|
+
|
|
290
|
+
- Semantic HTML elements
|
|
291
|
+
- Proper ARIA attributes
|
|
292
|
+
- Keyboard navigation
|
|
293
|
+
- Screen reader support
|
|
294
|
+
- Sufficient color contrast
|
|
295
|
+
|
|
296
|
+
**Your responsibility:** Maintain accessibility when composing and customizing
|
|
297
|
+
components.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
### Polymorphic Components
|
|
302
|
+
|
|
303
|
+
Most fpkit components support the **`as` prop** for rendering as different HTML
|
|
304
|
+
elements:
|
|
305
|
+
|
|
306
|
+
```tsx
|
|
307
|
+
// Button as link
|
|
308
|
+
<Button as="a" href="/page">Navigate</Button>
|
|
309
|
+
|
|
310
|
+
// Card as section
|
|
311
|
+
<Card as="section">Content</Card>
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**Benefits:** Semantic flexibility, type-safe props, maintained component
|
|
315
|
+
behavior.
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## 🔗 External Resources
|
|
320
|
+
|
|
321
|
+
### fpkit Resources
|
|
322
|
+
|
|
323
|
+
- [GitHub Repository](https://github.com/shawn-sandy/acss)
|
|
324
|
+
- [npm Package](https://www.npmjs.com/package/@fpkit/acss)
|
|
325
|
+
|
|
326
|
+
### Web Standards
|
|
327
|
+
|
|
328
|
+
- [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
|
|
329
|
+
- [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/)
|
|
330
|
+
- [MDN Web Docs](https://developer.mozilla.org/)
|
|
331
|
+
|
|
332
|
+
### Testing Resources
|
|
333
|
+
|
|
334
|
+
- [Vitest Documentation](https://vitest.dev/)
|
|
335
|
+
- [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/)
|
|
336
|
+
- [jest-axe](https://github.com/nickcolley/jest-axe)
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## 📖 Full Documentation
|
|
341
|
+
|
|
342
|
+
For the complete, offline-accessible documentation, see the `docs/` directory in
|
|
343
|
+
the npm package or
|
|
344
|
+
[view on GitHub](https://github.com/shawn-sandy/acss/tree/main/packages/fpkit/docs).
|
|
345
|
+
|
|
346
|
+
Each guide is available as a detailed markdown file with:
|
|
347
|
+
|
|
348
|
+
- Comprehensive explanations
|
|
349
|
+
- Code examples
|
|
350
|
+
- Best practices
|
|
351
|
+
- Troubleshooting tips
|
|
352
|
+
- Additional resources
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
**Happy building with @fpkit/acss!** 🚀
|
|
@@ -55,6 +55,10 @@ button:is(:hover, :focus)[aria-disabled=true] {
|
|
|
55
55
|
opacity: var(--btn-opacity, 0.5);
|
|
56
56
|
filter: none;
|
|
57
57
|
}
|
|
58
|
+
button:focus-visible {
|
|
59
|
+
outline: var(--btn-focus-outline, 2px solid currentColor);
|
|
60
|
+
outline-offset: var(--btn-focus-outline-offset, 1px);
|
|
61
|
+
}
|
|
58
62
|
button[type=reset] {
|
|
59
63
|
--btn-bg: transparent;
|
|
60
64
|
--btn-color: gray;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../components/buttons/button.scss"],"names":[],"mappings":"AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EAEE;EACA;;AAGF;EAEE;;AAGA;EACE;;AAOJ;EAEE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EAGE;;AAGF;AAAA;EAEE;EACA;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA","file":"button.css"}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../components/buttons/button.scss"],"names":[],"mappings":"AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EAEE;EACA;;AAGF;EAEE;;AAGA;EACE;;AAOJ;EAEE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EAGE;;AAGF;AAAA;EAEE;EACA;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA","file":"button.css"}
|
package/src/styles/index.css
CHANGED
|
@@ -444,14 +444,16 @@ h6:has(span:first-of-type) > span {
|
|
|
444
444
|
.is-disabled,
|
|
445
445
|
[aria-disabled=true] {
|
|
446
446
|
/* CSS Custom Properties for theming */
|
|
447
|
-
--disabled-opacity: 0.
|
|
447
|
+
--disabled-opacity: 0.91;
|
|
448
448
|
--disabled-cursor: not-allowed;
|
|
449
449
|
/* hsl(0 0% 40%) = #666666, provides 3:1 contrast on white (#ffffff) */
|
|
450
|
-
--disabled-color:
|
|
450
|
+
--disabled-color: currentColor;
|
|
451
|
+
--disabled-background-color: none;
|
|
451
452
|
/* Apply disabled styles */
|
|
452
453
|
opacity: var(--disabled-opacity);
|
|
453
454
|
cursor: var(--disabled-cursor);
|
|
454
455
|
color: var(--disabled-color);
|
|
456
|
+
background-color: var(--disabled-background-color);
|
|
455
457
|
/**
|
|
456
458
|
* Maintain focus visibility for keyboard navigation (WCAG 2.4.7)
|
|
457
459
|
* Disabled elements must still be focusable and have visible focus indicators
|
|
@@ -536,6 +538,10 @@ button:is(:hover, :focus)[aria-disabled=true] {
|
|
|
536
538
|
opacity: var(--btn-opacity, 0.5);
|
|
537
539
|
filter: none;
|
|
538
540
|
}
|
|
541
|
+
button:focus-visible {
|
|
542
|
+
outline: var(--btn-focus-outline, 2px solid currentColor);
|
|
543
|
+
outline-offset: var(--btn-focus-outline-offset, 1px);
|
|
544
|
+
}
|
|
539
545
|
button[type=reset] {
|
|
540
546
|
--btn-bg: transparent;
|
|
541
547
|
--btn-color: gray;
|
|
@@ -1834,7 +1840,7 @@ dl {
|
|
|
1834
1840
|
--list-margin-top: 0;
|
|
1835
1841
|
--list-margin-bottom: 1rem;
|
|
1836
1842
|
--list-margin-inline: 0;
|
|
1837
|
-
--list-padding-inline:
|
|
1843
|
+
--list-padding-inline: 0.5rem;
|
|
1838
1844
|
--list-gap: 0.5rem;
|
|
1839
1845
|
--list-marker-color: currentColor;
|
|
1840
1846
|
--list-marker-size: 1em;
|
package/src/styles/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../sass/_reset.scss","../sass/_properties.scss","../sass/_globals.scss","../sass/_elements.scss","utilities/_disabled.scss","../components/buttons/button.scss","../components/tag/tag.scss","../components/images/img.scss","../components/cards/card.scss","../components/progress/progress.scss","../components/details/details.scss","../components/link/link.scss","../sass/_mixins.scss","../components/layout/_header.scss","../components/layout/landmarks.scss","../components/dialog/dialog.scss","../sass/_grid.scss","../components/badge/badge.scss","../components/nav/nav.scss","../components/form/form.scss","../components/breadcrumbs/breadcrumb.scss","../components/list/list.scss","../components/alert/alert.scss","../components/text-to-speech/text-to-speech.scss","../sass/styles/_shadows.scss","../sass/styles/_colors.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;EAGE;;;AAGF;AACE;AACA;EACA;AAEA;AACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAGA;AAAA;EAEE;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE;;;AAGF;AAWA;AACA;EACE;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AAAA;EAEE;;;AAGF;AACA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;IACE;;EAGF;AAAA;AAAA;IAGE;IACA;IACA;IACA;;;AAIJ;AACA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;AAEA;AAGA;EACA;;AAEA;EACE;EACA;EACA;;;ACpLJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EAGA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;;;ACzGF;EACE;AAAA;AAAA;EAGA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AACA;EACE;;;AAKN;EACE;;;AAGF;AAAA;AAAA;AAAA;EAIE;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEF;AAAA;AAAA;AAAA;EACE;;;AAKF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EAEE;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACrIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACdJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA;AAAA;AAEE;EACA;EACA;AACA;EACA;AAEA;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAgBA;AAAA;AACE;EACA;EACA;EACA;AACA;EACA;;;ACvDJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EAEE;EACA;;AAGF;EAEE;;AAGA;EACE;;AAOJ;EAEE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EAGE;;AAGF;AAAA;EAEE;EACA;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;;;AC7IN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIE;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;AASA;AAKA;AAAA;AAAA;AAAA;AAAA;AAMA;AAcA;AAcA;AAcA;;AA1DA;AAAA;AAAA;AAAA;EACE;EACA;;AAIF;AAAA;AAAA;AAAA;EACE;;AAUF;AAAA;AAAA;AAAA;EACE;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAKJ;AAAA;AAAA;AAAA;EACE;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAKJ;AAAA;AAAA;AAAA;EACE;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAKJ;AAAA;AAAA;AAAA;EACE;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;;AAKN;AAAA;AAAA;AAAA;AAIA;EACE;EACA;;;AChIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;AAEA;EACA;;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;ACvDN;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAEA;EAEA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;EACA;;AAGF;AAAA;EACE;;AAEF;AAAA;EAEE;;AAEF;AAAA;EACE;;AAIF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;;AAGF;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;;;AAKJ;EACE;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;;AAIF;EACE;;;ACjGJ;AACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AACA;AACA;AA8BA;;AA7BA;EAEE;EACA;EACA;EACA;AAgBA;;AAbA;AACE;EACA;EACA;;AAIF;AACE;EACA;EACA;;AAIF;AACE;EACA;EACA;;AAKJ;EAEE;EACA;EAEA;AAcA;;AAZA;AACE;EAEA;;AAGF;EAGE;;AAIF;AACE;EAEA;;;ACjEN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAjCF;IAkCI;IACA;;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAYA;;AAVA;EACE;;AAGF;EACE;EACA;EACA;;AAIF;EACE;;AAEF;EACE;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AACA;EAFF;IAGI;;;AAKN;EACE;IAxHJ;MAyHM;MACA;;;;;ACxHN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EAEE;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EAGA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;EAEE;EACA;;AAIF;EACE;;AAIF;EACE;EAEA;EACA;;AAIF;EACE;EAEA;;AAIF;EAEE;;AAIF;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EC7GF;EACA;EACA;EACA;EACA;;AD6GE;EAEE;EAEA;EACA;;AAIF;EACE;;ACtHJ;EACE;;AD6HF;EAEE;EACA;EACA;;AAEA;EAGE;;;AE7IN;AAAA;AAAA;EAIE;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;EACE;EAEA;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;;AChEN;AAAA;EAEE;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;AACA;AAAA;EAEE;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;AAEF;AAAA;EACE;EACA;;;AAON;EACE;EACA;EACA;EACA;EACA;;;AChDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;IACE;IACA;IACA;IACA;IACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;AAOA;AAQA;;AAbA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;;;AAKN;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;AAAA;EACE;EACA;;AAGF;AAAA;EACE;;;AC3HJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EAEA;EACA;EACA;;AACA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EAIA;EACA;EACA;EACA;EACA;;;AClGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;;;ACnCN;AAAA;AAAA;EAGE;EACA;;AAEA;EANF;AAAA;AAAA;IAOI;IACA;IACA;IACA;IACA;;;AAGA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;EACE;;;AAMR;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;;AAKF;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAIF;EACE;EAEA;;AAGF;EACE;EAEA;;AAGF;EACE;EAEA;;AAGF;EACE;EAEA;;;ACxHJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAEA;EACA;;;AAGF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;;AAGF;EACE;;;AAIJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;AAKA;AAAA;AAAA;EACE;EACA;;AACA;AAAA;AAAA;EACE;;AAKN;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACrGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;;AAEF;AAAA;EACE;;AACA;AAAA;EACE;EACA;;;AC7BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;;;AAOF;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;;AAQJ;EACE;;AAGA;EACE;EACA;;AAIF;EACE;;AAEA;EACE;;;AASN;EACE;;AAGA;EACE;EACA;;AAIF;EACE;;AAEA;EACE;;;AASN;EACE;EACA;EACA;EAQA;;AALA;EACE;;;AAWJ;EACE;;;AAIF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAYF;AAAA;AAAA;EACE;EACA;;AAEA;AAAA;AAAA;EACE;;AAKJ;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAKJ;AAAA;AAAA;EACE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAKA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;;AAMN;AAAA;AAAA;EACE;EACA;EACA;;AAIF;AAAA;AAAA;EACE;EACA;;;AASJ;AAAA;EAGE;;;AAIF;AAAA;EAGE;;;AAOF;EACE;AAAA;AAAA;IAIE;IACA;;EAIF;AAAA;IAEE;;;AAQJ;EAEE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;IACA;;;AC1RJ;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACE;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA,YACE;EAEF;EACA;AAWA;AAMA;AAmEA;AA8BA;AAKA;;AArHA;EACE;EACA;;AAGF;EAlDF;IAmDI;;;AAIF;EACE;EACA;;AAIF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;AAEA;AASA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAIF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIA;EACE;EACA;;AAKJ;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKJ;EACE;;AAIF;AACE;;AAGF;EACE;;;ACrLJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AACA;AAAA;EAEE;;AACA;AAAA;EACE;;;AC3BN;EACE;EACA;EACA;AAAA;EAEA;AAAA;EAEA;AAAA;EAEA;AAAA;;;AAIF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AChCF;EACE;;;AAGF;EACE;;AACA;EACE;;AAEF;EACE","file":"index.css"}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../sass/_reset.scss","../sass/_properties.scss","../sass/_globals.scss","../sass/_elements.scss","utilities/_disabled.scss","../components/buttons/button.scss","../components/tag/tag.scss","../components/images/img.scss","../components/cards/card.scss","../components/progress/progress.scss","../components/details/details.scss","../components/link/link.scss","../sass/_mixins.scss","../components/layout/_header.scss","../components/layout/landmarks.scss","../components/dialog/dialog.scss","../sass/_grid.scss","../components/badge/badge.scss","../components/nav/nav.scss","../components/form/form.scss","../components/breadcrumbs/breadcrumb.scss","../components/list/list.scss","../components/alert/alert.scss","../components/text-to-speech/text-to-speech.scss","../sass/styles/_shadows.scss","../sass/styles/_colors.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;EAGE;;;AAGF;AACE;AACA;EACA;AAEA;AACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAGA;AAAA;EAEE;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE;;;AAGF;AAWA;AACA;EACE;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AAAA;EAEE;;;AAGF;AACA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;IACE;;EAGF;AAAA;AAAA;IAGE;IACA;IACA;IACA;;;AAIJ;AACA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;AAEA;AAGA;EACA;;AAEA;EACE;EACA;EACA;;;ACpLJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EAGA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;;;ACzGF;EACE;AAAA;AAAA;EAGA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AACA;EACE;;;AAKN;EACE;;;AAGF;AAAA;AAAA;AAAA;EAIE;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEF;AAAA;AAAA;AAAA;EACE;;;AAKF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EAEE;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACrIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACdJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA;AAAA;AAEE;EACA;EACA;AACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAgBA;AAAA;AACE;EACA;EACA;EACA;AACA;EACA;;;ACxDJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EAEE;EACA;;AAGF;EAEE;;AAGA;EACE;;AAOJ;EAEE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EAGE;;AAGF;AAAA;EAEE;EACA;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;;;AClJN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIE;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;AASA;AAKA;AAAA;AAAA;AAAA;AAAA;AAMA;AAcA;AAcA;AAcA;;AA1DA;AAAA;AAAA;AAAA;EACE;EACA;;AAIF;AAAA;AAAA;AAAA;EACE;;AAUF;AAAA;AAAA;AAAA;EACE;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAKJ;AAAA;AAAA;AAAA;EACE;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAKJ;AAAA;AAAA;AAAA;EACE;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAKJ;AAAA;AAAA;AAAA;EACE;EACA;AAEA;;AACA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;;AAKN;AAAA;AAAA;AAAA;AAIA;EACE;EACA;;;AChIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;AAEA;EACA;;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;ACvDN;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAEA;EAEA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;EACA;;AAGF;AAAA;EACE;;AAEF;AAAA;EAEE;;AAEF;AAAA;EACE;;AAIF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;;AAGF;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;;;AAKJ;EACE;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;;AAIF;EACE;;;ACjGJ;AACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AACA;AACA;AA8BA;;AA7BA;EAEE;EACA;EACA;EACA;AAgBA;;AAbA;AACE;EACA;EACA;;AAIF;AACE;EACA;EACA;;AAIF;AACE;EACA;EACA;;AAKJ;EAEE;EACA;EAEA;AAcA;;AAZA;AACE;EAEA;;AAGF;EAGE;;AAIF;AACE;EAEA;;;ACjEN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAjCF;IAkCI;IACA;;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAYA;;AAVA;EACE;;AAGF;EACE;EACA;EACA;;AAIF;EACE;;AAEF;EACE;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AACA;EAFF;IAGI;;;AAKN;EACE;IAxHJ;MAyHM;MACA;;;;;ACxHN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EAEE;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EAGA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;EAEE;EACA;;AAIF;EACE;;AAIF;EACE;EAEA;EACA;;AAIF;EACE;EAEA;;AAIF;EAEE;;AAIF;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EC7GF;EACA;EACA;EACA;EACA;;AD6GE;EAEE;EAEA;EACA;;AAIF;EACE;;ACtHJ;EACE;;AD6HF;EAEE;EACA;EACA;;AAEA;EAGE;;;AE7IN;AAAA;AAAA;EAIE;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;EACE;EAEA;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;;AChEN;AAAA;EAEE;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;AACA;AAAA;EAEE;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;AAEF;AAAA;EACE;EACA;;;AAON;EACE;EACA;EACA;EACA;EACA;;;AChDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;IACE;IACA;IACA;IACA;IACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;AAOA;AAQA;;AAbA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;;;AAKN;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;AAAA;EACE;EACA;;AAGF;AAAA;EACE;;;AC3HJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EAEA;EACA;EACA;;AACA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EAIA;EACA;EACA;EACA;EACA;;;AClGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;;;ACnCN;AAAA;AAAA;EAGE;EACA;;AAEA;EANF;AAAA;AAAA;IAOI;IACA;IACA;IACA;IACA;;;AAGA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;EACE;;;AAMR;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;;AAKF;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAIF;EACE;EAEA;;AAGF;EACE;EAEA;;AAGF;EACE;EAEA;;AAGF;EACE;EAEA;;;ACxHJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAEA;EACA;;;AAGF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;;AAGF;EACE;;;AAIJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;AAKA;AAAA;AAAA;EACE;EACA;;AACA;AAAA;AAAA;EACE;;AAKN;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACrGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;;AAEF;AAAA;EACE;;AACA;AAAA;EACE;EACA;;;AC7BV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;;;AAOF;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;;AAQJ;EACE;;AAGA;EACE;EACA;;AAIF;EACE;;AAEA;EACE;;;AASN;EACE;;AAGA;EACE;EACA;;AAIF;EACE;;AAEA;EACE;;;AASN;EACE;EACA;EACA;EAQA;;AALA;EACE;;;AAWJ;EACE;;;AAIF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAYF;AAAA;AAAA;EACE;EACA;;AAEA;AAAA;AAAA;EACE;;AAKJ;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAKJ;AAAA;AAAA;EACE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAKA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;;AAMN;AAAA;AAAA;EACE;EACA;EACA;;AAIF;AAAA;AAAA;EACE;EACA;;;AASJ;AAAA;EAGE;;;AAIF;AAAA;EAGE;;;AAOF;EACE;AAAA;AAAA;IAIE;IACA;;EAIF;AAAA;IAEE;;;AAQJ;EAEE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;IACA;;;AC1RJ;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACE;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA,YACE;EAEF;EACA;AAWA;AAMA;AAmEA;AA8BA;AAKA;;AArHA;EACE;EACA;;AAGF;EAlDF;IAmDI;;;AAIF;EACE;EACA;;AAIF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;AAEA;AASA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAIF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIA;EACE;EACA;;AAKJ;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKJ;EACE;;AAIF;AACE;;AAGF;EACE;;;ACrLJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AACA;AAAA;EAEE;;AACA;AAAA;EACE;;;AC3BN;EACE;EACA;EACA;AAAA;EAEA;AAAA;EAEA;AAAA;EAEA;AAAA;;;AAIF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AChCF;EACE;;;AAGF;EACE;;AACA;EACE;;AAEF;EACE","file":"index.css"}
|
package/src/styles/list/list.css
CHANGED
|
@@ -19,18 +19,19 @@
|
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
.is-disabled,
|
|
22
|
-
[aria-disabled=
|
|
22
|
+
[aria-disabled="true"] {
|
|
23
23
|
/* CSS Custom Properties for theming */
|
|
24
|
-
--disabled-opacity: 0.
|
|
24
|
+
--disabled-opacity: 0.91;
|
|
25
25
|
--disabled-cursor: not-allowed;
|
|
26
26
|
/* hsl(0 0% 40%) = #666666, provides 3:1 contrast on white (#ffffff) */
|
|
27
|
-
--disabled-color:
|
|
27
|
+
--disabled-color: currentColor;
|
|
28
|
+
--disabled-background-color: none;
|
|
28
29
|
|
|
29
30
|
/* Apply disabled styles */
|
|
30
31
|
opacity: var(--disabled-opacity);
|
|
31
32
|
cursor: var(--disabled-cursor);
|
|
32
33
|
color: var(--disabled-color);
|
|
33
|
-
|
|
34
|
+
background-color: var(--disabled-background-color);
|
|
34
35
|
/**
|
|
35
36
|
* Maintain focus visibility for keyboard navigation (WCAG 2.4.7)
|
|
36
37
|
* Disabled elements must still be focusable and have visible focus indicators
|
package/libs/chunk-33PNJ4LO.cjs
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkENTCUJ3A_cjs = require('./chunk-ENTCUJ3A.cjs');
|
|
4
|
-
var n = require('react');
|
|
5
|
-
|
|
6
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
-
|
|
8
|
-
var n__default = /*#__PURE__*/_interopDefault(n);
|
|
9
|
-
|
|
10
|
-
var s=n__default.default.forwardRef(({href:a,target:o,rel:r,children:p,styles:m,prefetch:t=!1,btnStyle:d,onClick:c,onPointerDown:l,...k},u)=>{let y=n__default.default.useMemo(()=>{if(o==="_blank"){let e=new Set(["noopener","noreferrer"]);return t&&e.add("prefetch"),r&&r.split(/\s+/).forEach(i=>{i&&e.add(i);}),Array.from(e).join(" ")}return r},[o,r,t]);return n__default.default.createElement(chunkENTCUJ3A_cjs.a,{as:"a",ref:u,href:a,target:o,rel:y,styles:m,"data-btn":d,onClick:c,onPointerDown:l,...k},p)});s.displayName="Link";var w=s;
|
|
11
|
-
|
|
12
|
-
exports.a = s;
|
|
13
|
-
exports.b = w;
|
|
14
|
-
//# sourceMappingURL=out.js.map
|
|
15
|
-
//# sourceMappingURL=chunk-33PNJ4LO.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/link/link.tsx"],"names":["React","Link","href","target","rel","children","styles","prefetch","btnStyle","onClick","onPointerDown","props","ref","computedRel","securityTokens","token","ui_default","link_default"],"mappings":"yCAAA,OAAOA,MAAW,QA+FX,IAAMC,EAAOD,EAAM,WACxB,CACE,CACE,KAAAE,EACA,OAAAC,EACA,IAAAC,EACA,SAAAC,EACA,OAAAC,EACA,SAAAC,EAAW,GACX,SAAAC,EACA,QAAAC,EACA,cAAAC,EACA,GAAGC,CACL,EACAC,IACG,CAWH,IAAMC,EAAcb,EAAM,QAAQ,IAAM,CACtC,GAAIG,IAAW,SAAU,CAEvB,IAAMW,EAAiB,IAAI,IAAI,CAAC,WAAY,YAAY,CAAC,EAGzD,OAAIP,GACFO,EAAe,IAAI,UAAU,EAI3BV,GACFA,EAAI,MAAM,KAAK,EAAE,QAASW,GAAU,CAC9BA,GAAOD,EAAe,IAAIC,CAAK,CACrC,CAAC,EAGI,MAAM,KAAKD,CAAc,EAAE,KAAK,GAAG,CAC5C,CAGA,OAAOV,CACT,EAAG,CAACD,EAAQC,EAAKG,CAAQ,CAAC,EAE1B,OACEP,EAAA,cAACgB,EAAA,CACC,GAAG,IACH,IAAKJ,EACL,KAAMV,EACN,OAAQC,EACR,IAAKU,EACL,OAAQP,EACR,WAAUE,EACV,QAASC,EACT,cAAeC,EACd,GAAGC,GAEHN,CACH,CAEJ,CACF,EAEAJ,EAAK,YAAc,OAEnB,IAAOgB,EAAQhB","sourcesContent":["import React from \"react\";\nimport UI from \"../ui\";\nimport type { LinkProps } from \"./link.types\";\n\n/**\n * Link - A semantic, accessible anchor component with enhanced security and styling.\n *\n * The Link component renders accessible `<a>` elements with automatic security\n * attributes for external links, customizable styling variants, and full WCAG 2.1\n * AA compliance. It supports traditional text links, button-styled links, and\n * programmatic focus management via ref forwarding.\n *\n * ## Features\n *\n * - 🔒 **Automatic Security**: External links get `rel=\"noopener noreferrer\"`\n * - ♿ **WCAG 2.1 AA Compliant**: Accessible focus indicators and semantic HTML\n * - 🎨 **Flexible Styling**: Text links, button links, and pill variants\n * - ⚡ **Performance**: Optional prefetch hints for faster navigation\n * - 🎯 **Ref Forwarding**: Direct DOM access for focus management and scroll\n * - 🧪 **Type-Safe**: Full TypeScript support with comprehensive prop types\n *\n * ## Accessibility\n *\n * - ✅ Semantic `<a>` element for proper keyboard navigation\n * - ✅ Focus indicators meet WCAG 2.4.7 (3:1 contrast ratio)\n * - ✅ Screen readers announce link purpose and destination\n * - ✅ External links include security attributes automatically\n * - ✅ Supports `aria-label` for icon-only or ambiguous links\n * - ✅ Ref forwarding enables skip-link patterns\n *\n * @example\n * // Basic internal link\n * <Link href=\"/about\">About Us</Link>\n *\n * @example\n * // External link with automatic security\n * <Link href=\"https://example.com\" target=\"_blank\">\n * Visit Example\n * </Link>\n *\n * @example\n * // Button-styled call-to-action link\n * <Link href=\"/signup\">\n * <b>Get Started</b>\n * </Link>\n *\n * @example\n * // Icon-only link with accessible label\n * <Link href=\"/settings\" aria-label=\"Open settings\">\n * <SettingsIcon aria-hidden=\"true\" />\n * </Link>\n *\n * @example\n * // Analytics tracking with onClick (includes keyboard users)\n * <Link\n * href=\"/products\"\n * onClick={(e) => trackEvent('link_click', { href: '/products' })}\n * >\n * Browse Products\n * </Link>\n *\n * @example\n * // Skip link with ref forwarding for focus management\n * const mainRef = useRef<HTMLAnchorElement>(null);\n *\n * <Link ref={mainRef} href=\"#main-content\">\n * Skip to main content\n * </Link>\n *\n * @example\n * // Custom styled link with CSS variables\n * <Link\n * href=\"/products\"\n * styles={{\n * '--link-color': '#0066cc',\n * '--link-decoration': 'underline',\n * }}\n * >\n * Browse Products\n * </Link>\n *\n * @example\n * // ✅ GOOD: Descriptive link text\n * <Link href=\"/docs/installation\">\n * Read installation guide\n * </Link>\n *\n * @example\n * // ❌ BAD: Generic link text (poor for screen readers)\n * <Link href=\"/docs/installation\">\n * Click here\n * </Link>\n *\n * @see {@link LinkProps} for complete prop documentation\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n href,\n target,\n rel,\n children,\n styles,\n prefetch = false,\n btnStyle,\n onClick,\n onPointerDown,\n ...props\n },\n ref\n ) => {\n /**\n * Compute the final `rel` attribute value with security defaults.\n *\n * For external links (target=\"_blank\"), we merge user-provided `rel` values\n * with security defaults `noopener noreferrer` to prevent:\n * - window.opener exploitation (noopener)\n * - Referrer header leakage (noreferrer)\n *\n * If prefetch is enabled, we also add the `prefetch` hint.\n */\n const computedRel = React.useMemo(() => {\n if (target === \"_blank\") {\n // Start with security defaults\n const securityTokens = new Set([\"noopener\", \"noreferrer\"]);\n\n // Add prefetch if enabled\n if (prefetch) {\n securityTokens.add(\"prefetch\");\n }\n\n // Merge with user-provided rel tokens (if any)\n if (rel) {\n rel.split(/\\s+/).forEach((token) => {\n if (token) securityTokens.add(token);\n });\n }\n\n return Array.from(securityTokens).join(\" \");\n }\n\n // For non-external links, use provided rel as-is\n return rel;\n }, [target, rel, prefetch]);\n\n return (\n <UI\n as=\"a\"\n ref={ref}\n href={href}\n target={target}\n rel={computedRel}\n styles={styles}\n data-btn={btnStyle}\n onClick={onClick}\n onPointerDown={onPointerDown}\n {...props}\n >\n {children}\n </UI>\n );\n }\n);\n\nLink.displayName = \"Link\";\n\nexport default Link;\n"]}
|
package/libs/chunk-GT77BX4L.cjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkPNWIRCG3_cjs = require('./chunk-PNWIRCG3.cjs');
|
|
4
|
-
var chunkTON2YGMD_cjs = require('./chunk-TON2YGMD.cjs');
|
|
5
|
-
var chunkENTCUJ3A_cjs = require('./chunk-ENTCUJ3A.cjs');
|
|
6
|
-
var D = require('react');
|
|
7
|
-
|
|
8
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
-
|
|
10
|
-
var D__default = /*#__PURE__*/_interopDefault(D);
|
|
11
|
-
|
|
12
|
-
var a=({type:r="button",children:p,styles:i,disabled:l,isDisabled:n,classes:m,onPointerDown:d,onPointerOver:u,onPointerLeave:b,onClick:y,onKeyDown:P,...c})=>{let f=chunkPNWIRCG3_cjs.a(l,n),{disabledProps:t,handlers:B}=chunkTON2YGMD_cjs.a(f,{handlers:{onClick:y,onPointerDown:d,onKeyDown:P},className:m});return D__default.default.createElement(chunkENTCUJ3A_cjs.a,{as:"button",type:r,"aria-disabled":t["aria-disabled"],onPointerOver:u,onPointerLeave:b,style:i,className:t.className,...B,...c},p)},x=a;a.displayName="Button";
|
|
13
|
-
|
|
14
|
-
exports.a = a;
|
|
15
|
-
exports.b = x;
|
|
16
|
-
//# sourceMappingURL=out.js.map
|
|
17
|
-
//# sourceMappingURL=chunk-GT77BX4L.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/buttons/button.tsx"],"names":["React","Button","type","children","styles","disabled","isDisabled","classes","onPointerDown","onPointerOver","onPointerLeave","onClick","onKeyDown","props","isActuallyDisabled","resolveDisabledState","disabledProps","handlers","useDisabledState","ui_default","button_default"],"mappings":"2HACA,OAAOA,MAAW,QAmEX,IAAMC,EAAS,CAAC,CACrB,KAAAC,EAAO,SACP,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,WAAAC,EACA,QAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,QAAAC,EACA,UAAAC,EACA,GAAGC,CACL,IAAmB,CAEjB,IAAMC,EAAqBC,EAAqBV,EAAUC,CAAU,EAG9D,CAAE,cAAAU,EAAe,SAAAC,CAAS,EAAIC,EAClCJ,EACA,CACE,SAAU,CACR,QAAAH,EACA,cAAAH,EACA,UAAAI,CACF,EAEA,UAAWL,CAGb,CACF,EAGA,OACEP,EAAA,cAACmB,EAAA,CACC,GAAG,SACH,KAAMjB,EACN,gBAAec,EAAc,eAAe,EAC5C,cAAeP,EACf,eAAgBC,EAChB,MAAON,EACP,UAAWY,EAAc,UACxB,GAAGC,EACH,GAAGJ,GAEHV,CACH,CAEJ,EAEOiB,EAAQnB,EACfA,EAAO,YAAc","sourcesContent":["import UI from '../ui'\nimport React from 'react'\nimport { useDisabledState } from '../../hooks/use-disabled-state'\nimport { resolveDisabledState } from '../../utils/accessibility'\nimport type { DisabledStateProps } from '../../types/shared'\n\nexport type ButtonProps = Partial<React.ComponentProps<typeof UI>> &\n DisabledStateProps & {\n /**\n * The button type\n * Required - 'button' | 'submit' | 'reset'\n */\n type: 'button' | 'submit' | 'reset'\n }\n\n/**\n * Accessible Button component with WCAG 2.1 Level AA compliant disabled state.\n *\n * **Key Accessibility Features:**\n * - Uses `aria-disabled` pattern instead of native `disabled` attribute\n * - Maintains keyboard focusability when disabled (stays in tab order)\n * - Prevents all interactions when disabled via optimized `useDisabledState` hook\n * - Automatic className merging for seamless styling\n * - Supports both modern `disabled` and legacy `isDisabled` props\n *\n * **Why aria-disabled?**\n * - Elements remain in keyboard tab order (WCAG 2.1.1 - Keyboard)\n * - Screen readers can discover and announce disabled state (WCAG 4.1.2)\n * - Enables tooltips and help text on disabled buttons\n * - Better visual styling control for WCAG AA contrast compliance\n *\n * **Performance:**\n * - Uses optimized `useDisabledState` hook with stable references\n * - Automatic className merging eliminates boilerplate\n * - ~90% reduction in unnecessary re-renders compared to previous implementation\n *\n * @example\n * // Basic usage\n * <Button type=\"button\" onClick={handleClick}>\n * Click me\n * </Button>\n *\n * @example\n * // Disabled state (prevents all interactions but stays focusable)\n * <Button type=\"button\" disabled={true} onClick={handleClick}>\n * Cannot click (but can focus for screen readers)\n * </Button>\n *\n * @example\n * // With custom classes (automatic merging with .is-disabled)\n * <Button\n * type=\"button\"\n * disabled={true}\n * classes=\"my-custom-btn\"\n * >\n * Custom disabled button\n * </Button>\n *\n * @example\n * // Legacy isDisabled prop (still supported)\n * <Button type=\"button\" isDisabled={true} onClick={handleClick}>\n * Legacy disabled\n * </Button>\n *\n * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/keyboard WCAG 2.1.1 - Keyboard}\n * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/name-role-value WCAG 4.1.2 - Name, Role, Value}\n * @see {@link file://./../../hooks/useDisabledState.md useDisabledState Hook Documentation}\n */\nexport const Button = ({\n type = 'button',\n children,\n styles,\n disabled,\n isDisabled,\n classes,\n onPointerDown,\n onPointerOver,\n onPointerLeave,\n onClick,\n onKeyDown,\n ...props\n}: ButtonProps) => {\n // Resolve disabled state from both props (disabled takes precedence)\n const isActuallyDisabled = resolveDisabledState(disabled, isDisabled)\n\n // Use the disabled state hook with enhanced API for automatic className merging\n const { disabledProps, handlers } = useDisabledState<HTMLButtonElement>(\n isActuallyDisabled,\n {\n handlers: {\n onClick,\n onPointerDown,\n onKeyDown,\n },\n // Automatic className merging - hook combines disabled class with user classes\n className: classes,\n // Note: onPointerOver and onPointerLeave are intentionally NOT wrapped\n // to allow hover effects on disabled buttons for visual feedback\n }\n )\n\n /* Returning a button element with accessible disabled state */\n return (\n <UI\n as=\"button\"\n type={type}\n aria-disabled={disabledProps['aria-disabled']}\n onPointerOver={onPointerOver}\n onPointerLeave={onPointerLeave}\n style={styles}\n className={disabledProps.className}\n {...handlers}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nexport default Button\nButton.displayName = 'Button'\n"]}
|
package/libs/chunk-OVWLQYMK.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { a as a$1 } from './chunk-BFK62VX5.js';
|
|
2
|
-
import { a as a$2 } from './chunk-75QHTLFO.js';
|
|
3
|
-
import { a as a$3 } from './chunk-HHLNOC5T.js';
|
|
4
|
-
import D from 'react';
|
|
5
|
-
|
|
6
|
-
var a=({type:r="button",children:p,styles:i,disabled:l,isDisabled:n,classes:m,onPointerDown:d,onPointerOver:u,onPointerLeave:b,onClick:y,onKeyDown:P,...c})=>{let f=a$1(l,n),{disabledProps:t,handlers:B}=a$2(f,{handlers:{onClick:y,onPointerDown:d,onKeyDown:P},className:m});return D.createElement(a$3,{as:"button",type:r,"aria-disabled":t["aria-disabled"],onPointerOver:u,onPointerLeave:b,style:i,className:t.className,...B,...c},p)},x=a;a.displayName="Button";
|
|
7
|
-
|
|
8
|
-
export { a, x as b };
|
|
9
|
-
//# sourceMappingURL=out.js.map
|
|
10
|
-
//# sourceMappingURL=chunk-OVWLQYMK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/buttons/button.tsx"],"names":["React","Button","type","children","styles","disabled","isDisabled","classes","onPointerDown","onPointerOver","onPointerLeave","onClick","onKeyDown","props","isActuallyDisabled","resolveDisabledState","disabledProps","handlers","useDisabledState","ui_default","button_default"],"mappings":"wHACA,OAAOA,MAAW,QAmEX,IAAMC,EAAS,CAAC,CACrB,KAAAC,EAAO,SACP,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,WAAAC,EACA,QAAAC,EACA,cAAAC,EACA,cAAAC,EACA,eAAAC,EACA,QAAAC,EACA,UAAAC,EACA,GAAGC,CACL,IAAmB,CAEjB,IAAMC,EAAqBC,EAAqBV,EAAUC,CAAU,EAG9D,CAAE,cAAAU,EAAe,SAAAC,CAAS,EAAIC,EAClCJ,EACA,CACE,SAAU,CACR,QAAAH,EACA,cAAAH,EACA,UAAAI,CACF,EAEA,UAAWL,CAGb,CACF,EAGA,OACEP,EAAA,cAACmB,EAAA,CACC,GAAG,SACH,KAAMjB,EACN,gBAAec,EAAc,eAAe,EAC5C,cAAeP,EACf,eAAgBC,EAChB,MAAON,EACP,UAAWY,EAAc,UACxB,GAAGC,EACH,GAAGJ,GAEHV,CACH,CAEJ,EAEOiB,EAAQnB,EACfA,EAAO,YAAc","sourcesContent":["import UI from '../ui'\nimport React from 'react'\nimport { useDisabledState } from '../../hooks/use-disabled-state'\nimport { resolveDisabledState } from '../../utils/accessibility'\nimport type { DisabledStateProps } from '../../types/shared'\n\nexport type ButtonProps = Partial<React.ComponentProps<typeof UI>> &\n DisabledStateProps & {\n /**\n * The button type\n * Required - 'button' | 'submit' | 'reset'\n */\n type: 'button' | 'submit' | 'reset'\n }\n\n/**\n * Accessible Button component with WCAG 2.1 Level AA compliant disabled state.\n *\n * **Key Accessibility Features:**\n * - Uses `aria-disabled` pattern instead of native `disabled` attribute\n * - Maintains keyboard focusability when disabled (stays in tab order)\n * - Prevents all interactions when disabled via optimized `useDisabledState` hook\n * - Automatic className merging for seamless styling\n * - Supports both modern `disabled` and legacy `isDisabled` props\n *\n * **Why aria-disabled?**\n * - Elements remain in keyboard tab order (WCAG 2.1.1 - Keyboard)\n * - Screen readers can discover and announce disabled state (WCAG 4.1.2)\n * - Enables tooltips and help text on disabled buttons\n * - Better visual styling control for WCAG AA contrast compliance\n *\n * **Performance:**\n * - Uses optimized `useDisabledState` hook with stable references\n * - Automatic className merging eliminates boilerplate\n * - ~90% reduction in unnecessary re-renders compared to previous implementation\n *\n * @example\n * // Basic usage\n * <Button type=\"button\" onClick={handleClick}>\n * Click me\n * </Button>\n *\n * @example\n * // Disabled state (prevents all interactions but stays focusable)\n * <Button type=\"button\" disabled={true} onClick={handleClick}>\n * Cannot click (but can focus for screen readers)\n * </Button>\n *\n * @example\n * // With custom classes (automatic merging with .is-disabled)\n * <Button\n * type=\"button\"\n * disabled={true}\n * classes=\"my-custom-btn\"\n * >\n * Custom disabled button\n * </Button>\n *\n * @example\n * // Legacy isDisabled prop (still supported)\n * <Button type=\"button\" isDisabled={true} onClick={handleClick}>\n * Legacy disabled\n * </Button>\n *\n * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/keyboard WCAG 2.1.1 - Keyboard}\n * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/name-role-value WCAG 4.1.2 - Name, Role, Value}\n * @see {@link file://./../../hooks/useDisabledState.md useDisabledState Hook Documentation}\n */\nexport const Button = ({\n type = 'button',\n children,\n styles,\n disabled,\n isDisabled,\n classes,\n onPointerDown,\n onPointerOver,\n onPointerLeave,\n onClick,\n onKeyDown,\n ...props\n}: ButtonProps) => {\n // Resolve disabled state from both props (disabled takes precedence)\n const isActuallyDisabled = resolveDisabledState(disabled, isDisabled)\n\n // Use the disabled state hook with enhanced API for automatic className merging\n const { disabledProps, handlers } = useDisabledState<HTMLButtonElement>(\n isActuallyDisabled,\n {\n handlers: {\n onClick,\n onPointerDown,\n onKeyDown,\n },\n // Automatic className merging - hook combines disabled class with user classes\n className: classes,\n // Note: onPointerOver and onPointerLeave are intentionally NOT wrapped\n // to allow hover effects on disabled buttons for visual feedback\n }\n )\n\n /* Returning a button element with accessible disabled state */\n return (\n <UI\n as=\"button\"\n type={type}\n aria-disabled={disabledProps['aria-disabled']}\n onPointerOver={onPointerOver}\n onPointerLeave={onPointerLeave}\n style={styles}\n className={disabledProps.className}\n {...handlers}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nexport default Button\nButton.displayName = 'Button'\n"]}
|
package/libs/chunk-UEPAWMDF.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { a } from './chunk-HHLNOC5T.js';
|
|
2
|
-
import n from 'react';
|
|
3
|
-
|
|
4
|
-
var s=n.forwardRef(({href:a$1,target:o,rel:r,children:p,styles:m,prefetch:t=!1,btnStyle:d,onClick:c,onPointerDown:l,...k},u)=>{let y=n.useMemo(()=>{if(o==="_blank"){let e=new Set(["noopener","noreferrer"]);return t&&e.add("prefetch"),r&&r.split(/\s+/).forEach(i=>{i&&e.add(i);}),Array.from(e).join(" ")}return r},[o,r,t]);return n.createElement(a,{as:"a",ref:u,href:a$1,target:o,rel:y,styles:m,"data-btn":d,onClick:c,onPointerDown:l,...k},p)});s.displayName="Link";var w=s;
|
|
5
|
-
|
|
6
|
-
export { s as a, w as b };
|
|
7
|
-
//# sourceMappingURL=out.js.map
|
|
8
|
-
//# sourceMappingURL=chunk-UEPAWMDF.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/link/link.tsx"],"names":["React","Link","href","target","rel","children","styles","prefetch","btnStyle","onClick","onPointerDown","props","ref","computedRel","securityTokens","token","ui_default","link_default"],"mappings":"wCAAA,OAAOA,MAAW,QA+FX,IAAMC,EAAOD,EAAM,WACxB,CACE,CACE,KAAAE,EACA,OAAAC,EACA,IAAAC,EACA,SAAAC,EACA,OAAAC,EACA,SAAAC,EAAW,GACX,SAAAC,EACA,QAAAC,EACA,cAAAC,EACA,GAAGC,CACL,EACAC,IACG,CAWH,IAAMC,EAAcb,EAAM,QAAQ,IAAM,CACtC,GAAIG,IAAW,SAAU,CAEvB,IAAMW,EAAiB,IAAI,IAAI,CAAC,WAAY,YAAY,CAAC,EAGzD,OAAIP,GACFO,EAAe,IAAI,UAAU,EAI3BV,GACFA,EAAI,MAAM,KAAK,EAAE,QAASW,GAAU,CAC9BA,GAAOD,EAAe,IAAIC,CAAK,CACrC,CAAC,EAGI,MAAM,KAAKD,CAAc,EAAE,KAAK,GAAG,CAC5C,CAGA,OAAOV,CACT,EAAG,CAACD,EAAQC,EAAKG,CAAQ,CAAC,EAE1B,OACEP,EAAA,cAACgB,EAAA,CACC,GAAG,IACH,IAAKJ,EACL,KAAMV,EACN,OAAQC,EACR,IAAKU,EACL,OAAQP,EACR,WAAUE,EACV,QAASC,EACT,cAAeC,EACd,GAAGC,GAEHN,CACH,CAEJ,CACF,EAEAJ,EAAK,YAAc,OAEnB,IAAOgB,EAAQhB","sourcesContent":["import React from \"react\";\nimport UI from \"../ui\";\nimport type { LinkProps } from \"./link.types\";\n\n/**\n * Link - A semantic, accessible anchor component with enhanced security and styling.\n *\n * The Link component renders accessible `<a>` elements with automatic security\n * attributes for external links, customizable styling variants, and full WCAG 2.1\n * AA compliance. It supports traditional text links, button-styled links, and\n * programmatic focus management via ref forwarding.\n *\n * ## Features\n *\n * - 🔒 **Automatic Security**: External links get `rel=\"noopener noreferrer\"`\n * - ♿ **WCAG 2.1 AA Compliant**: Accessible focus indicators and semantic HTML\n * - 🎨 **Flexible Styling**: Text links, button links, and pill variants\n * - ⚡ **Performance**: Optional prefetch hints for faster navigation\n * - 🎯 **Ref Forwarding**: Direct DOM access for focus management and scroll\n * - 🧪 **Type-Safe**: Full TypeScript support with comprehensive prop types\n *\n * ## Accessibility\n *\n * - ✅ Semantic `<a>` element for proper keyboard navigation\n * - ✅ Focus indicators meet WCAG 2.4.7 (3:1 contrast ratio)\n * - ✅ Screen readers announce link purpose and destination\n * - ✅ External links include security attributes automatically\n * - ✅ Supports `aria-label` for icon-only or ambiguous links\n * - ✅ Ref forwarding enables skip-link patterns\n *\n * @example\n * // Basic internal link\n * <Link href=\"/about\">About Us</Link>\n *\n * @example\n * // External link with automatic security\n * <Link href=\"https://example.com\" target=\"_blank\">\n * Visit Example\n * </Link>\n *\n * @example\n * // Button-styled call-to-action link\n * <Link href=\"/signup\">\n * <b>Get Started</b>\n * </Link>\n *\n * @example\n * // Icon-only link with accessible label\n * <Link href=\"/settings\" aria-label=\"Open settings\">\n * <SettingsIcon aria-hidden=\"true\" />\n * </Link>\n *\n * @example\n * // Analytics tracking with onClick (includes keyboard users)\n * <Link\n * href=\"/products\"\n * onClick={(e) => trackEvent('link_click', { href: '/products' })}\n * >\n * Browse Products\n * </Link>\n *\n * @example\n * // Skip link with ref forwarding for focus management\n * const mainRef = useRef<HTMLAnchorElement>(null);\n *\n * <Link ref={mainRef} href=\"#main-content\">\n * Skip to main content\n * </Link>\n *\n * @example\n * // Custom styled link with CSS variables\n * <Link\n * href=\"/products\"\n * styles={{\n * '--link-color': '#0066cc',\n * '--link-decoration': 'underline',\n * }}\n * >\n * Browse Products\n * </Link>\n *\n * @example\n * // ✅ GOOD: Descriptive link text\n * <Link href=\"/docs/installation\">\n * Read installation guide\n * </Link>\n *\n * @example\n * // ❌ BAD: Generic link text (poor for screen readers)\n * <Link href=\"/docs/installation\">\n * Click here\n * </Link>\n *\n * @see {@link LinkProps} for complete prop documentation\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n href,\n target,\n rel,\n children,\n styles,\n prefetch = false,\n btnStyle,\n onClick,\n onPointerDown,\n ...props\n },\n ref\n ) => {\n /**\n * Compute the final `rel` attribute value with security defaults.\n *\n * For external links (target=\"_blank\"), we merge user-provided `rel` values\n * with security defaults `noopener noreferrer` to prevent:\n * - window.opener exploitation (noopener)\n * - Referrer header leakage (noreferrer)\n *\n * If prefetch is enabled, we also add the `prefetch` hint.\n */\n const computedRel = React.useMemo(() => {\n if (target === \"_blank\") {\n // Start with security defaults\n const securityTokens = new Set([\"noopener\", \"noreferrer\"]);\n\n // Add prefetch if enabled\n if (prefetch) {\n securityTokens.add(\"prefetch\");\n }\n\n // Merge with user-provided rel tokens (if any)\n if (rel) {\n rel.split(/\\s+/).forEach((token) => {\n if (token) securityTokens.add(token);\n });\n }\n\n return Array.from(securityTokens).join(\" \");\n }\n\n // For non-external links, use provided rel as-is\n return rel;\n }, [target, rel, prefetch]);\n\n return (\n <UI\n as=\"a\"\n ref={ref}\n href={href}\n target={target}\n rel={computedRel}\n styles={styles}\n data-btn={btnStyle}\n onClick={onClick}\n onPointerDown={onPointerDown}\n {...props}\n >\n {children}\n </UI>\n );\n }\n);\n\nLink.displayName = \"Link\";\n\nexport default Link;\n"]}
|