@fpkit/acss 3.1.1 → 3.2.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/libs/{chunk-2NRIP6RB.cjs → chunk-2C3YLBWP.cjs} +3 -3
- package/libs/{chunk-NWJDAHP6.cjs → chunk-2GJHKWEK.cjs} +3 -3
- package/libs/{chunk-FVROL3V5.js → chunk-2JCDEC32.js} +3 -3
- package/libs/{chunk-IRLFZ3OL.js → chunk-3XJC4XUG.js} +2 -2
- package/libs/{chunk-L6PRDL6F.cjs → chunk-5CJPTDK3.cjs} +3 -3
- package/libs/{chunk-E4OSROCA.cjs → chunk-5QSNJQVH.cjs} +3 -3
- package/libs/{chunk-O3JIHC5M.cjs → chunk-6BUJZ4DJ.cjs} +3 -3
- package/libs/{chunk-WXBFBWYF.cjs → chunk-AFINOD2L.cjs} +3 -3
- package/libs/{chunk-HRRHPLER.js → chunk-AWZLSWDO.js} +2 -2
- package/libs/chunk-DDSXKOUB.js +7 -0
- package/libs/chunk-DDSXKOUB.js.map +1 -0
- package/libs/{chunk-CWRNJA4P.js → chunk-DIJBIOFE.js} +3 -3
- package/libs/chunk-EJ6KYBFE.cjs +13 -0
- package/libs/chunk-EJ6KYBFE.cjs.map +1 -0
- package/libs/{chunk-GUJSMQ3V.cjs → chunk-EKJYOCLY.cjs} +3 -3
- package/libs/{chunk-X5RKCLDC.cjs → chunk-F64GE6RG.cjs} +4 -4
- package/libs/{chunk-5RAWNUVD.js → chunk-IBUTNPTQ.js} +2 -2
- package/libs/chunk-IWP4VJEP.cjs +18 -0
- package/libs/chunk-IWP4VJEP.cjs.map +1 -0
- package/libs/{chunk-ZFJ4U45S.js → chunk-KDMX3FAW.js} +2 -2
- package/libs/{chunk-DYFAUAB7.cjs → chunk-LXODKKA3.cjs} +4 -4
- package/libs/{chunk-MPTMPBFT.js → chunk-M7JLT62Q.js} +2 -2
- package/libs/{chunk-IQ76HGVP.js → chunk-MBWI67UT.js} +2 -2
- package/libs/{chunk-O5XAJ7BY.cjs → chunk-NCGVF2QS.cjs} +4 -4
- package/libs/{chunk-W2UIN7EV.cjs → chunk-NPWHQVYB.cjs} +3 -3
- package/libs/{chunk-43TK2ICH.js → chunk-PMWL5XZ4.js} +3 -3
- package/libs/{chunk-KVKQLRJG.js → chunk-TF3GQKOY.js} +2 -2
- package/libs/{chunk-IEB64SWY.js → chunk-U5VA34SU.js} +2 -2
- package/libs/chunk-UGMP72J2.js +8 -0
- package/libs/chunk-UGMP72J2.js.map +1 -0
- package/libs/{chunk-EE3ZWSBY.cjs → chunk-URBGDUFN.cjs} +6 -6
- package/libs/{chunk-TPIB3RQP.js → chunk-ZF6Y7W57.js} +5 -5
- package/libs/component-props-50e69975.d.ts +66 -0
- package/libs/components/box/box.css +1 -0
- package/libs/components/box/box.css.map +1 -0
- package/libs/components/box/box.min.css +3 -0
- package/libs/components/breadcrumbs/breadcrumb.cjs +6 -6
- package/libs/components/breadcrumbs/breadcrumb.js +3 -3
- package/libs/components/button.cjs +4 -4
- package/libs/components/button.d.cts +10 -3
- package/libs/components/button.d.ts +10 -3
- package/libs/components/button.js +2 -2
- package/libs/components/card.cjs +7 -7
- package/libs/components/card.d.cts +13 -85
- package/libs/components/card.d.ts +13 -85
- package/libs/components/card.js +2 -2
- package/libs/components/cards/card.css +1 -1
- package/libs/components/cards/card.css.map +1 -1
- package/libs/components/cards/card.min.css +2 -2
- package/libs/components/cluster/cluster.css +1 -0
- package/libs/components/cluster/cluster.css.map +1 -0
- package/libs/components/cluster/cluster.min.css +3 -0
- package/libs/components/dialog/dialog.cjs +7 -7
- package/libs/components/dialog/dialog.js +5 -5
- package/libs/components/form/fields.cjs +4 -4
- package/libs/components/form/fields.js +2 -2
- package/libs/components/form/textarea.cjs +4 -4
- package/libs/components/form/textarea.js +2 -2
- package/libs/components/grid/grid.css +1 -0
- package/libs/components/grid/grid.css.map +1 -0
- package/libs/components/grid/grid.min.css +3 -0
- package/libs/components/heading/heading.cjs +3 -3
- package/libs/components/heading/heading.js +2 -2
- package/libs/components/icons/icon.cjs +4 -4
- package/libs/components/icons/icon.d.cts +2 -2
- package/libs/components/icons/icon.d.ts +2 -2
- package/libs/components/icons/icon.js +2 -2
- package/libs/components/link/link.cjs +6 -6
- package/libs/components/link/link.js +2 -2
- package/libs/components/list/list.cjs +5 -5
- package/libs/components/list/list.js +2 -2
- package/libs/components/modal.cjs +4 -4
- package/libs/components/modal.d.cts +1 -1
- package/libs/components/modal.d.ts +1 -1
- package/libs/components/modal.js +3 -3
- package/libs/components/nav/nav.cjs +7 -7
- package/libs/components/nav/nav.js +3 -3
- package/libs/components/stack/stack.css +1 -0
- package/libs/components/stack/stack.css.map +1 -0
- package/libs/components/stack/stack.min.css +3 -0
- package/libs/components/tables/table.d.cts +1 -1
- package/libs/components/tables/table.d.ts +1 -1
- package/libs/components/text/text.cjs +5 -5
- package/libs/components/text/text.js +2 -2
- package/libs/hooks.cjs +4 -4
- package/libs/hooks.js +3 -3
- package/libs/{icons-287fce3a.d.ts → icons-df8e744f.d.ts} +1 -1
- package/libs/icons.cjs +3 -3
- package/libs/icons.d.cts +2 -2
- package/libs/icons.d.ts +2 -2
- package/libs/icons.js +2 -2
- package/libs/index.cjs +64 -63
- package/libs/index.cjs.map +1 -1
- package/libs/index.css +1 -1
- package/libs/index.css.map +1 -1
- package/libs/index.d.cts +923 -4
- package/libs/index.d.ts +923 -4
- package/libs/index.js +28 -28
- package/libs/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/alert/STYLES.mdx +790 -0
- package/src/components/badge/STYLES.mdx +610 -0
- package/src/components/box/README.mdx +401 -0
- package/src/components/box/STYLES.mdx +360 -0
- package/src/components/box/box.scss +245 -0
- package/src/components/box/box.stories.tsx +395 -0
- package/src/components/box/box.test.tsx +425 -0
- package/src/components/box/box.tsx +170 -0
- package/src/components/box/box.types.ts +166 -0
- package/src/components/breadcrumbs/STYLES.mdx +99 -0
- package/src/components/buttons/STYLES.mdx +766 -0
- package/src/components/cards/STYLES.mdx +835 -0
- package/src/components/cards/card.scss +29 -21
- package/src/components/cards/card.tsx +13 -3
- package/src/components/cards/card.types.ts +13 -0
- package/src/components/cluster/README.mdx +595 -0
- package/src/components/cluster/STYLES.mdx +626 -0
- package/src/components/cluster/cluster.scss +86 -0
- package/src/components/cluster/cluster.stories.tsx +385 -0
- package/src/components/cluster/cluster.test.tsx +655 -0
- package/src/components/cluster/cluster.tsx +94 -0
- package/src/components/cluster/cluster.types.ts +75 -0
- package/src/components/details/STYLES.mdx +445 -0
- package/src/components/dialog/STYLES.mdx +888 -0
- package/src/components/flexbox/STYLES.mdx +1 -1
- package/src/components/form/STYLES.mdx +821 -0
- package/src/components/grid/README.mdx +709 -0
- package/src/components/grid/STYLES.mdx +785 -0
- package/src/components/grid/grid.scss +287 -0
- package/src/components/grid/grid.stories.tsx +486 -0
- package/src/components/grid/grid.test.tsx +981 -0
- package/src/components/grid/grid.tsx +222 -0
- package/src/components/grid/grid.types.ts +344 -0
- package/src/components/icons/STYLES.mdx +56 -0
- package/src/components/images/STYLES.mdx +75 -0
- package/src/components/layout/STYLES.mdx +556 -0
- package/src/components/link/STYLES.mdx +75 -0
- package/src/components/list/STYLES.mdx +631 -0
- package/src/components/nav/STYLES.mdx +460 -0
- package/src/components/progress/STYLES.mdx +64 -0
- package/src/components/stack/README.mdx +400 -0
- package/src/components/stack/STYLES.mdx +414 -0
- package/src/components/stack/stack.scss +109 -0
- package/src/components/stack/stack.stories.tsx +559 -0
- package/src/components/stack/stack.test.tsx +426 -0
- package/src/components/stack/stack.tsx +141 -0
- package/src/components/stack/stack.types.ts +133 -0
- package/src/components/tag/STYLES.mdx +105 -0
- package/src/components/text-to-speech/STYLES.mdx +80 -0
- package/src/components/ui.tsx +3 -3
- package/src/index.scss +5 -1
- package/src/index.ts +305 -12
- package/src/sass/GLOBALS-STYLES.md +631 -0
- package/src/sass/_globals.scss +45 -24
- package/src/styles/box/box.css +220 -0
- package/src/styles/box/box.css.map +1 -0
- package/src/styles/cards/card.css +22 -17
- package/src/styles/cards/card.css.map +1 -1
- package/src/styles/cluster/cluster.css +71 -0
- package/src/styles/cluster/cluster.css.map +1 -0
- package/src/styles/grid/grid.css +238 -0
- package/src/styles/grid/grid.css.map +1 -0
- package/src/styles/index.css +667 -49
- package/src/styles/index.css.map +1 -1
- package/src/styles/stack/stack.css +86 -0
- package/src/styles/stack/stack.css.map +1 -0
- package/src/types/component-props.ts +42 -14
- package/src/types/layout-primitives.ts +48 -0
- package/src/types/shared.ts +10 -26
- package/libs/chunk-ENTCUJ3A.cjs +0 -13
- package/libs/chunk-ENTCUJ3A.cjs.map +0 -1
- package/libs/chunk-HHLNOC5T.js +0 -7
- package/libs/chunk-HHLNOC5T.js.map +0 -1
- package/libs/chunk-KK47SYZI.js +0 -8
- package/libs/chunk-KK47SYZI.js.map +0 -1
- package/libs/chunk-W5TKWBFC.cjs +0 -18
- package/libs/chunk-W5TKWBFC.cjs.map +0 -1
- package/libs/component-props-67d978a2.d.ts +0 -38
- /package/libs/{chunk-2NRIP6RB.cjs.map → chunk-2C3YLBWP.cjs.map} +0 -0
- /package/libs/{chunk-NWJDAHP6.cjs.map → chunk-2GJHKWEK.cjs.map} +0 -0
- /package/libs/{chunk-FVROL3V5.js.map → chunk-2JCDEC32.js.map} +0 -0
- /package/libs/{chunk-IRLFZ3OL.js.map → chunk-3XJC4XUG.js.map} +0 -0
- /package/libs/{chunk-L6PRDL6F.cjs.map → chunk-5CJPTDK3.cjs.map} +0 -0
- /package/libs/{chunk-E4OSROCA.cjs.map → chunk-5QSNJQVH.cjs.map} +0 -0
- /package/libs/{chunk-O3JIHC5M.cjs.map → chunk-6BUJZ4DJ.cjs.map} +0 -0
- /package/libs/{chunk-WXBFBWYF.cjs.map → chunk-AFINOD2L.cjs.map} +0 -0
- /package/libs/{chunk-HRRHPLER.js.map → chunk-AWZLSWDO.js.map} +0 -0
- /package/libs/{chunk-CWRNJA4P.js.map → chunk-DIJBIOFE.js.map} +0 -0
- /package/libs/{chunk-GUJSMQ3V.cjs.map → chunk-EKJYOCLY.cjs.map} +0 -0
- /package/libs/{chunk-X5RKCLDC.cjs.map → chunk-F64GE6RG.cjs.map} +0 -0
- /package/libs/{chunk-5RAWNUVD.js.map → chunk-IBUTNPTQ.js.map} +0 -0
- /package/libs/{chunk-ZFJ4U45S.js.map → chunk-KDMX3FAW.js.map} +0 -0
- /package/libs/{chunk-DYFAUAB7.cjs.map → chunk-LXODKKA3.cjs.map} +0 -0
- /package/libs/{chunk-MPTMPBFT.js.map → chunk-M7JLT62Q.js.map} +0 -0
- /package/libs/{chunk-IQ76HGVP.js.map → chunk-MBWI67UT.js.map} +0 -0
- /package/libs/{chunk-O5XAJ7BY.cjs.map → chunk-NCGVF2QS.cjs.map} +0 -0
- /package/libs/{chunk-W2UIN7EV.cjs.map → chunk-NPWHQVYB.cjs.map} +0 -0
- /package/libs/{chunk-43TK2ICH.js.map → chunk-PMWL5XZ4.js.map} +0 -0
- /package/libs/{chunk-KVKQLRJG.js.map → chunk-TF3GQKOY.js.map} +0 -0
- /package/libs/{chunk-IEB64SWY.js.map → chunk-U5VA34SU.js.map} +0 -0
- /package/libs/{chunk-EE3ZWSBY.cjs.map → chunk-URBGDUFN.cjs.map} +0 -0
- /package/libs/{chunk-TPIB3RQP.js.map → chunk-ZF6Y7W57.js.map} +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Meta } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="FP.REACT Components/Tag/Styles" />
|
|
4
|
+
|
|
5
|
+
# Tag Styles
|
|
6
|
+
|
|
7
|
+
Status indicator tag styling with semantic variants and WCAG 2.1 AA compliance.
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
The fpkit tag system provides visual status indicators using role-based
|
|
12
|
+
selectors with support for alpha, beta, stable, and production variants.
|
|
13
|
+
|
|
14
|
+
### Key Features
|
|
15
|
+
|
|
16
|
+
- **Four semantic variants** - Alpha, beta, stable, production
|
|
17
|
+
- **Visual indicators** - Icons beyond color for accessibility
|
|
18
|
+
- **WCAG compliant** - Color contrast meets AA standards
|
|
19
|
+
- **Pill shape** - Fully rounded borders
|
|
20
|
+
- **CSS custom properties** - Full theming control
|
|
21
|
+
- **Rem-based sizing** - All measurements use rem units (1rem = 16px)
|
|
22
|
+
|
|
23
|
+
## CSS Custom Properties
|
|
24
|
+
|
|
25
|
+
```css
|
|
26
|
+
[data-tag] {
|
|
27
|
+
/* Variant colors */
|
|
28
|
+
--beta: #fbbf24; /* Amber */
|
|
29
|
+
--stable: #0f7c3e; /* Dark green */
|
|
30
|
+
--production: #1e3a8a; /* Dark blue */
|
|
31
|
+
|
|
32
|
+
/* Tag styling */
|
|
33
|
+
--tag-padding-inline: 0.7rem; /* 11.2px */
|
|
34
|
+
--tag-padding-block: 0.2rem; /* 3.2px */
|
|
35
|
+
--tag-fs: 0.8rem; /* 12.8px */
|
|
36
|
+
--tag-radius: 99rem; /* Pill shape */
|
|
37
|
+
--tag-bg: lightgray;
|
|
38
|
+
--tag-fw: 500;
|
|
39
|
+
--tag-color: currentColor;
|
|
40
|
+
--tag-display: inline-block;
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Tag Variants
|
|
45
|
+
|
|
46
|
+
### Alpha Tag
|
|
47
|
+
|
|
48
|
+
```html
|
|
49
|
+
<span data-tag="alpha">Alpha</span>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Displays:** ⚠ Alpha (amber background, warning symbol)
|
|
53
|
+
|
|
54
|
+
### Beta Tag
|
|
55
|
+
|
|
56
|
+
```html
|
|
57
|
+
<span data-tag="beta">Beta</span>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Displays:** ⚠ Beta (amber background, warning symbol)
|
|
61
|
+
|
|
62
|
+
### Stable Tag
|
|
63
|
+
|
|
64
|
+
```html
|
|
65
|
+
<span data-tag="stable">Stable</span>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Displays:** ✓ Stable (green background, checkmark symbol)
|
|
69
|
+
|
|
70
|
+
### Production Tag
|
|
71
|
+
|
|
72
|
+
```html
|
|
73
|
+
<span data-tag="production">Production</span>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Displays:** ● Production (blue background, live indicator)
|
|
77
|
+
|
|
78
|
+
## Real-World Examples
|
|
79
|
+
|
|
80
|
+
### Feature Status
|
|
81
|
+
|
|
82
|
+
```html
|
|
83
|
+
<h3>
|
|
84
|
+
New Dashboard
|
|
85
|
+
<span data-tag="beta">Beta</span>
|
|
86
|
+
</h3>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### API Endpoint Status
|
|
90
|
+
|
|
91
|
+
```html
|
|
92
|
+
<code>/api/users</code> <span data-tag="stable">Stable</span>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Environment Indicator
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<span data-tag="production">Production Environment</span>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Related Resources
|
|
102
|
+
|
|
103
|
+
- **React Component** - See README for React Tag component API
|
|
104
|
+
- **WCAG 2.1: Color Contrast** -
|
|
105
|
+
https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Meta } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
<Meta title="FP.REACT Components/Text-to-Speech/Styles" />
|
|
4
|
+
|
|
5
|
+
# Text-to-Speech Styles
|
|
6
|
+
|
|
7
|
+
Text-to-speech control styling with button and display components using CSS
|
|
8
|
+
custom properties.
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
The fpkit text-to-speech (TTS) system provides styling for TTS control panels
|
|
13
|
+
with play/pause buttons and text display areas.
|
|
14
|
+
|
|
15
|
+
### Key Features
|
|
16
|
+
|
|
17
|
+
- **Flexbox layout** - Centered controls and text
|
|
18
|
+
- **Pill-shaped container** - Rounded borders
|
|
19
|
+
- **Button styling** - Integrated button controls
|
|
20
|
+
- **CSS custom properties** - Full theming control
|
|
21
|
+
- **Rem-based sizing** - All measurements use rem units (1rem = 16px)
|
|
22
|
+
|
|
23
|
+
## CSS Custom Properties
|
|
24
|
+
|
|
25
|
+
```css
|
|
26
|
+
[data-tts] {
|
|
27
|
+
/* Layout */
|
|
28
|
+
--tts-gap: 0.5rem; /* 8px */
|
|
29
|
+
--tts-align-items: center;
|
|
30
|
+
--tts-justify-content: center;
|
|
31
|
+
|
|
32
|
+
/* Colors */
|
|
33
|
+
--tts-bg: #fff;
|
|
34
|
+
--tts-border-color: currentColor;
|
|
35
|
+
|
|
36
|
+
/* Borders */
|
|
37
|
+
--tts-border-width: 0.125rem; /* 2px */
|
|
38
|
+
--tts-border-style: solid;
|
|
39
|
+
--tts-radius: 99rem; /* Pill shape */
|
|
40
|
+
|
|
41
|
+
/* Spacing */
|
|
42
|
+
--tts-padding: 0.5rem; /* 8px */
|
|
43
|
+
|
|
44
|
+
/* Dimensions */
|
|
45
|
+
--tts-min-width: 20.3125rem; /* 325px */
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Basic Structure
|
|
50
|
+
|
|
51
|
+
```html
|
|
52
|
+
<div data-tts>
|
|
53
|
+
<button data-btn="tts-btn" aria-label="Play">▶</button>
|
|
54
|
+
<span>Text to be spoken</span>
|
|
55
|
+
<button data-btn="tts-btn" aria-label="Pause">⏸</button>
|
|
56
|
+
</div>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Real-World Example
|
|
60
|
+
|
|
61
|
+
### Article Reader
|
|
62
|
+
|
|
63
|
+
```html
|
|
64
|
+
<article>
|
|
65
|
+
<h2>Article Title</h2>
|
|
66
|
+
|
|
67
|
+
<div data-tts>
|
|
68
|
+
<button data-btn="tts-btn" aria-label="Read article aloud">🔊</button>
|
|
69
|
+
<span>Listen to this article</span>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<p>Article content...</p>
|
|
73
|
+
</article>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Related Resources
|
|
77
|
+
|
|
78
|
+
- **React Component** - See README for React TTS component API
|
|
79
|
+
- **Web Speech API** -
|
|
80
|
+
https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API
|
package/src/components/ui.tsx
CHANGED
|
@@ -307,15 +307,15 @@ type UIComponent = (<C extends React.ElementType = "div">(
|
|
|
307
307
|
*/
|
|
308
308
|
const UI: UIComponent = React.forwardRef(
|
|
309
309
|
<C extends React.ElementType>(
|
|
310
|
-
{ as, styles, classes, children, defaultStyles, ...props }: UIProps<C>,
|
|
310
|
+
{ as, styles, style, classes, children, defaultStyles, ...props }: UIProps<C>,
|
|
311
311
|
ref?: PolymorphicRef<C>
|
|
312
312
|
) => {
|
|
313
313
|
const Component = as ?? "div";
|
|
314
314
|
|
|
315
|
-
const styleObj: React.CSSProperties = { ...defaultStyles, ...styles };
|
|
315
|
+
const styleObj: React.CSSProperties = { ...defaultStyles, ...styles, ...style };
|
|
316
316
|
|
|
317
317
|
return (
|
|
318
|
-
<Component ref={ref} style={styleObj} className={classes}
|
|
318
|
+
<Component {...props} ref={ref} style={styleObj} className={classes}>
|
|
319
319
|
{children}
|
|
320
320
|
</Component>
|
|
321
321
|
);
|
package/src/index.scss
CHANGED
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
@use "./components/details/details.scss";
|
|
14
14
|
@use "./components/link/link.scss";
|
|
15
15
|
@use "./components/layout/landmarks.scss";
|
|
16
|
+
@use "./components/box/box.scss";
|
|
17
|
+
@use "./components/stack/stack.scss";
|
|
18
|
+
@use "./components/cluster/cluster.scss";
|
|
19
|
+
@use "./components/grid/grid.scss";
|
|
16
20
|
@use "./components/dialog/dialog.scss";
|
|
17
|
-
@use "./sass/_grid.scss";
|
|
21
|
+
@use "./sass/_grid.scss" as grid-legacy;
|
|
18
22
|
@use "./components/badge/badge.scss";
|
|
19
23
|
@use "./components/nav/nav.scss";
|
|
20
24
|
@use "./components/form/form.scss";
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Main entry point for @fpkit/acss component library
|
|
3
|
-
* @
|
|
3
|
+
* @module @fpkit/acss
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* A lightweight React UI component library with 25+ accessible components.
|
|
7
|
+
* Uses CSS custom properties for reactive styling and emphasizes semantic HTML.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import { Button, Card, Alert } from '@fpkit/acss';
|
|
12
|
+
* import '@fpkit/acss/styles';
|
|
13
|
+
*
|
|
14
|
+
* function App() {
|
|
15
|
+
* return (
|
|
16
|
+
* <Card>
|
|
17
|
+
* <Alert variant="info">Welcome!</Alert>
|
|
18
|
+
* <Button variant="primary">Get Started</Button>
|
|
19
|
+
* </Card>
|
|
20
|
+
* );
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @see {@link https://www.npmjs.com/package/@fpkit/acss} NPM Package
|
|
25
|
+
* @packageDocumentation
|
|
4
26
|
*/
|
|
5
27
|
|
|
6
28
|
// import { TextToSpeech } from "./components/text-to-speech/TextToSpeech";
|
|
@@ -8,7 +30,28 @@
|
|
|
8
30
|
// export { Textarea } from './components/form/textarea';
|
|
9
31
|
// export { ModalDialog as Dialog } from "./components/modal/dialog";
|
|
10
32
|
|
|
11
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Core UI Components
|
|
35
|
+
*
|
|
36
|
+
* Essential interactive components for building user interfaces.
|
|
37
|
+
* Includes buttons, cards, alerts, modals, forms, and more.
|
|
38
|
+
*
|
|
39
|
+
* All components support:
|
|
40
|
+
* - CSS custom properties for theming
|
|
41
|
+
* - WCAG 2.1 Level AA accessibility
|
|
42
|
+
* - Keyboard navigation
|
|
43
|
+
* - Screen reader support
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* import { Button, Card, Alert, Modal } from '@fpkit/acss';
|
|
48
|
+
*
|
|
49
|
+
* <Card>
|
|
50
|
+
* <Alert variant="success">Operation completed</Alert>
|
|
51
|
+
* <Button onClick={handleClick}>Continue</Button>
|
|
52
|
+
* </Card>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
12
55
|
export { Button, type ButtonProps } from "./components/buttons/button";
|
|
13
56
|
export {
|
|
14
57
|
Card,
|
|
@@ -25,15 +68,60 @@ export { Img } from "./components/images/img";
|
|
|
25
68
|
export type { ImgProps } from "./components/images/img.types";
|
|
26
69
|
export { default as Link } from "./components/link/link";
|
|
27
70
|
export type { LinkProps } from "./components/link/link.types";
|
|
28
|
-
export {
|
|
71
|
+
export {
|
|
72
|
+
default as List,
|
|
73
|
+
type ListProps,
|
|
74
|
+
type ListItemProps,
|
|
75
|
+
} from "./components/list/list";
|
|
29
76
|
export { Modal, type ModalProps } from "./components/modal/modal";
|
|
30
77
|
export { Popover, type PopoverProps } from "./components/popover/popover";
|
|
31
78
|
export { RenderTable as TBL, type TableProps } from "./components/tables/table";
|
|
32
79
|
export { Dialog } from "./components/dialog/dialog";
|
|
33
80
|
export { TextToSpeech } from "./components/text-to-speech/TextToSpeech";
|
|
34
81
|
|
|
35
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Layout Components
|
|
84
|
+
*
|
|
85
|
+
* Semantic HTML5 landmark elements and layout primitives for page structure.
|
|
86
|
+
*
|
|
87
|
+
* Components include:
|
|
88
|
+
* - **Landmarks**: Header, Main, Footer, Aside (semantic page regions)
|
|
89
|
+
* - **Box**: General-purpose container with spacing/sizing controls
|
|
90
|
+
* - **Stack**: Simplified vertical/horizontal layouts with gap spacing
|
|
91
|
+
* - **Cluster**: Wrapping flex layout for inline groups (tags, buttons)
|
|
92
|
+
* - **Flex**: Flexbox container with responsive utilities and type-safe props
|
|
93
|
+
*
|
|
94
|
+
* Landmarks provide proper ARIA roles and improve screen reader navigation.
|
|
95
|
+
* Layout primitives offer polymorphic, type-safe APIs for flexible layouts with
|
|
96
|
+
* unified spacing scales and CSS custom properties for theming.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```tsx
|
|
100
|
+
* import { Header, Main, Footer, Box, Flex } from '@fpkit/acss';
|
|
101
|
+
*
|
|
102
|
+
* <Header>
|
|
103
|
+
* <Flex justify="space-between" align="center">
|
|
104
|
+
* <Logo />
|
|
105
|
+
* <Nav />
|
|
106
|
+
* </Flex>
|
|
107
|
+
* </Header>
|
|
108
|
+
* <Main>
|
|
109
|
+
* <Box padding="lg" maxWidth="container" style={{ marginInline: 'auto' }}>
|
|
110
|
+
* <Article />
|
|
111
|
+
* </Box>
|
|
112
|
+
* </Main>
|
|
113
|
+
* <Footer />
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @see {@link ./components/layout/landmarks} Landmark Components
|
|
117
|
+
* @see {@link ./components/box/box} Box Component
|
|
118
|
+
* @see {@link ./components/flexbox/flex} Flex Component
|
|
119
|
+
*/
|
|
36
120
|
export * from "./components/layout/landmarks";
|
|
121
|
+
export { Box, type BoxProps } from "./components/box/box";
|
|
122
|
+
export { Stack, type StackProps } from "./components/stack/stack";
|
|
123
|
+
export { Cluster, type ClusterProps } from "./components/cluster/cluster";
|
|
124
|
+
export { default as Grid, GridItem, type GridProps, type GridItemProps } from "./components/grid/grid";
|
|
37
125
|
export { default as Flex } from "./components/flexbox/flex";
|
|
38
126
|
export type {
|
|
39
127
|
FlexProps,
|
|
@@ -52,10 +140,56 @@ export type {
|
|
|
52
140
|
ResponsiveFlexProps,
|
|
53
141
|
} from "./components/flexbox/flex.types";
|
|
54
142
|
|
|
55
|
-
|
|
143
|
+
/**
|
|
144
|
+
* Navigation Components
|
|
145
|
+
*
|
|
146
|
+
* Accessible navigation elements for site and page navigation.
|
|
147
|
+
*
|
|
148
|
+
* Components support:
|
|
149
|
+
* - Semantic `<nav>` elements with proper ARIA
|
|
150
|
+
* - Keyboard navigation (Tab, Arrow keys)
|
|
151
|
+
* - Screen reader announcements
|
|
152
|
+
* - Active/current state management
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```tsx
|
|
156
|
+
* import { Nav } from '@fpkit/acss';
|
|
157
|
+
*
|
|
158
|
+
* <Nav aria-label="Primary navigation">
|
|
159
|
+
* <Nav.Link href="/" active>Home</Nav.Link>
|
|
160
|
+
* <Nav.Link href="/about">About</Nav.Link>
|
|
161
|
+
* <Nav.Link href="/contact">Contact</Nav.Link>
|
|
162
|
+
* </Nav>
|
|
163
|
+
* ```
|
|
164
|
+
*
|
|
165
|
+
* @see {@link ./components/nav/nav} Navigation Component
|
|
166
|
+
*/
|
|
56
167
|
export * from "./components/nav/nav";
|
|
57
168
|
|
|
58
|
-
|
|
169
|
+
/**
|
|
170
|
+
* Typography Components
|
|
171
|
+
*
|
|
172
|
+
* Text formatting and display components for content hierarchy.
|
|
173
|
+
*
|
|
174
|
+
* Includes:
|
|
175
|
+
* - **Text**: Polymorphic text component with variants
|
|
176
|
+
* - **Title**: Semantic heading component (h1-h6)
|
|
177
|
+
* - Responsive font sizing with CSS custom properties
|
|
178
|
+
*
|
|
179
|
+
* All typography uses rem units for accessibility and respects user preferences.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```tsx
|
|
183
|
+
* import { Text, Title } from '@fpkit/acss';
|
|
184
|
+
*
|
|
185
|
+
* <Title level={1}>Page Heading</Title>
|
|
186
|
+
* <Text variant="lead">Introduction paragraph with emphasis.</Text>
|
|
187
|
+
* <Text variant="body">Regular body text content.</Text>
|
|
188
|
+
* ```
|
|
189
|
+
*
|
|
190
|
+
* @see {@link ./components/text/text} Text Component
|
|
191
|
+
* @see {@link ./components/title/title} Title Component
|
|
192
|
+
*/
|
|
59
193
|
export * from "./components/text/text";
|
|
60
194
|
|
|
61
195
|
// Title component (primary export)
|
|
@@ -69,24 +203,183 @@ export {
|
|
|
69
203
|
/** @deprecated Use Title component instead. Will be removed in v3.0.0 */
|
|
70
204
|
export { default as Heading } from "./components/heading/heading";
|
|
71
205
|
|
|
72
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Form Components
|
|
208
|
+
*
|
|
209
|
+
* Accessible form controls with built-in validation and error handling.
|
|
210
|
+
*
|
|
211
|
+
* Components include:
|
|
212
|
+
* - **Field**: Form field wrapper with label and error message
|
|
213
|
+
* - **Input**: Text input with variants (text, email, password, etc.)
|
|
214
|
+
* - **Textarea**: Multi-line text input
|
|
215
|
+
*
|
|
216
|
+
* All form components support:
|
|
217
|
+
* - ARIA labeling and descriptions
|
|
218
|
+
* - Error state management
|
|
219
|
+
* - Disabled state with `aria-disabled`
|
|
220
|
+
* - Required field indicators
|
|
221
|
+
* - Keyboard navigation
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* ```tsx
|
|
225
|
+
* import { Field, Input, Textarea } from '@fpkit/acss';
|
|
226
|
+
*
|
|
227
|
+
* <Field
|
|
228
|
+
* label="Email address"
|
|
229
|
+
* required
|
|
230
|
+
* error={errors.email}
|
|
231
|
+
* >
|
|
232
|
+
* <Input
|
|
233
|
+
* type="email"
|
|
234
|
+
* id="email"
|
|
235
|
+
* placeholder="you@example.com"
|
|
236
|
+
* />
|
|
237
|
+
* </Field>
|
|
238
|
+
*
|
|
239
|
+
* <Field label="Comments">
|
|
240
|
+
* <Textarea rows={4} />
|
|
241
|
+
* </Field>
|
|
242
|
+
* ```
|
|
243
|
+
*
|
|
244
|
+
* @see {@link ./components/form/fields} Field Component
|
|
245
|
+
* @see {@link ./components/form/inputs} Input Component
|
|
246
|
+
* @see {@link ./components/form/textarea} Textarea Component
|
|
247
|
+
*/
|
|
73
248
|
export * from "./components/form/textarea";
|
|
74
249
|
|
|
75
|
-
|
|
250
|
+
/**
|
|
251
|
+
* UI Elements
|
|
252
|
+
*
|
|
253
|
+
* Additional user interface components for content display and organization.
|
|
254
|
+
*
|
|
255
|
+
* Components include:
|
|
256
|
+
* - **Badge**: Small status indicators and labels
|
|
257
|
+
* - **Tag**: Removable labels for categorization
|
|
258
|
+
* - **Table Elements**: Thead, Tbody, Tr, Td, Caption (table structure)
|
|
259
|
+
* - **Details**: Collapsible disclosure widget with summary
|
|
260
|
+
* - **Breadcrumb**: Navigation trail showing current location
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```tsx
|
|
264
|
+
* import { Badge, Tag, Details, Breadcrumb } from '@fpkit/acss';
|
|
265
|
+
*
|
|
266
|
+
* <Badge variant="success">Active</Badge>
|
|
267
|
+
* <Tag onRemove={handleRemove}>JavaScript</Tag>
|
|
268
|
+
*
|
|
269
|
+
* <Details summary="View details">
|
|
270
|
+
* <p>Additional content here</p>
|
|
271
|
+
* </Details>
|
|
272
|
+
*
|
|
273
|
+
* <Breadcrumb>
|
|
274
|
+
* <Breadcrumb.Item>Home</Breadcrumb.Item>
|
|
275
|
+
* <Breadcrumb.Item>Products</Breadcrumb.Item>
|
|
276
|
+
* <Breadcrumb.Item current>Item</Breadcrumb.Item>
|
|
277
|
+
* </Breadcrumb>
|
|
278
|
+
* ```
|
|
279
|
+
*
|
|
280
|
+
* @see {@link ./components/badge/badge} Badge Component
|
|
281
|
+
* @see {@link ./components/tag/tag} Tag Component
|
|
282
|
+
* @see {@link ./components/tables/table-elements} Table Elements
|
|
283
|
+
* @see {@link ./components/details/details} Details Component
|
|
284
|
+
* @see {@link ./components/breadcrumbs/breadcrumb} Breadcrumb Component
|
|
285
|
+
*/
|
|
76
286
|
export { Badge, type BadgeProps } from "./components/badge/badge";
|
|
77
287
|
export * from "./components/tag/tag";
|
|
78
288
|
export * from "./components/tables/table-elements";
|
|
79
289
|
export * from "./components/details/details";
|
|
80
290
|
export * from "./components/breadcrumbs/breadcrumb";
|
|
81
291
|
|
|
82
|
-
|
|
292
|
+
/**
|
|
293
|
+
* Default Exports (Backward Compatibility)
|
|
294
|
+
*
|
|
295
|
+
* Legacy default exports maintained for backward compatibility with older code.
|
|
296
|
+
*
|
|
297
|
+
* **Components:**
|
|
298
|
+
* - `To`: Alias for Link component (use `Link` instead)
|
|
299
|
+
* - `FP`: Deprecated polymorphic component (use `UI` or `Box` instead)
|
|
300
|
+
* - `Box`: Alias for UI component
|
|
301
|
+
* - `UI`: Primary polymorphic component for custom elements
|
|
302
|
+
*
|
|
303
|
+
* @deprecated These exports are maintained for backward compatibility only.
|
|
304
|
+
* New code should use the named exports (Link, UI) instead.
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* ```tsx
|
|
308
|
+
* // ❌ Old (deprecated but still works)
|
|
309
|
+
* import { To, FP } from '@fpkit/acss';
|
|
310
|
+
* <To href="/page">Link</To>
|
|
311
|
+
* <FP as="section">Content</FP>
|
|
312
|
+
*
|
|
313
|
+
* // ✅ New (recommended)
|
|
314
|
+
* import { Link, UI } from '@fpkit/acss';
|
|
315
|
+
* <Link href="/page">Link</Link>
|
|
316
|
+
* <UI as="section">Content</UI>
|
|
317
|
+
* ```
|
|
318
|
+
*/
|
|
83
319
|
export { default as To } from "./components/link/link";
|
|
84
320
|
export { default as FP } from "./components/fp";
|
|
85
|
-
export { default as Box } from "./components/fp";
|
|
86
321
|
export { default as UI } from "./components/ui";
|
|
87
322
|
|
|
88
|
-
|
|
323
|
+
/**
|
|
324
|
+
* Core UI Utility Components
|
|
325
|
+
*
|
|
326
|
+
* Polymorphic component utilities for building custom elements with type safety.
|
|
327
|
+
*
|
|
328
|
+
* The UI component provides:
|
|
329
|
+
* - Type-safe `as` prop for rendering any element
|
|
330
|
+
* - Automatic prop inference based on element type
|
|
331
|
+
* - Support for refs with proper typing
|
|
332
|
+
* - CSS custom property styling
|
|
333
|
+
*
|
|
334
|
+
* @example
|
|
335
|
+
* ```tsx
|
|
336
|
+
* import { UI } from '@fpkit/acss';
|
|
337
|
+
*
|
|
338
|
+
* // Renders as button with button props
|
|
339
|
+
* <UI as="button" onClick={handleClick} disabled>
|
|
340
|
+
* Click me
|
|
341
|
+
* </UI>
|
|
342
|
+
*
|
|
343
|
+
* // Renders as anchor with anchor props
|
|
344
|
+
* <UI as="a" href="/page" target="_blank">
|
|
345
|
+
* Link
|
|
346
|
+
* </UI>
|
|
347
|
+
*
|
|
348
|
+
* // Renders as section with custom styles
|
|
349
|
+
* <UI as="section" styles={{ '--bg': 'lightblue' }}>
|
|
350
|
+
* Content
|
|
351
|
+
* </UI>
|
|
352
|
+
* ```
|
|
353
|
+
*
|
|
354
|
+
* @see {@link ./components/ui} UI Component Documentation
|
|
355
|
+
*/
|
|
89
356
|
export * from "./components/ui";
|
|
90
357
|
|
|
91
|
-
|
|
358
|
+
/**
|
|
359
|
+
* TypeScript Type Definitions
|
|
360
|
+
*
|
|
361
|
+
* Shared type definitions used across components.
|
|
362
|
+
*
|
|
363
|
+
* **Key Types:**
|
|
364
|
+
* - `ComponentProps`: Base props interface for all fpkit components
|
|
365
|
+
* - Includes: children, renderStyles, id, styles, classes, dataStyle
|
|
366
|
+
* - Generic parameter for future extensibility
|
|
367
|
+
* - Does NOT include ref (use forwardRef explicitly)
|
|
368
|
+
*
|
|
369
|
+
* @example
|
|
370
|
+
* ```tsx
|
|
371
|
+
* import type { ComponentProps } from '@fpkit/acss';
|
|
372
|
+
*
|
|
373
|
+
* interface MyComponentProps extends ComponentProps {
|
|
374
|
+
* variant: 'primary' | 'secondary';
|
|
375
|
+
* onAction?: () => void;
|
|
376
|
+
* }
|
|
377
|
+
*
|
|
378
|
+
* export function MyComponent({ variant, ...props }: MyComponentProps) {
|
|
379
|
+
* return <div {...props} data-variant={variant} />;
|
|
380
|
+
* }
|
|
381
|
+
* ```
|
|
382
|
+
*
|
|
383
|
+
* @see {@link ./types/component-props} ComponentProps Interface
|
|
384
|
+
*/
|
|
92
385
|
export type { ComponentProps } from "./types";
|