@fpkit/acss 0.5.13 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/libs/{chunk-PQ2K3BM6.cjs → chunk-2NRIP6RB.cjs} +3 -3
  2. package/libs/chunk-33PNJ4LO.cjs +15 -0
  3. package/libs/chunk-33PNJ4LO.cjs.map +1 -0
  4. package/libs/chunk-4BZKFPEC.cjs +17 -0
  5. package/libs/chunk-4BZKFPEC.cjs.map +1 -0
  6. package/libs/{chunk-772NRB75.js → chunk-5QD3DWFI.js} +2 -2
  7. package/libs/chunk-6SAHIYCZ.js +7 -0
  8. package/libs/chunk-6SAHIYCZ.js.map +1 -0
  9. package/libs/{chunk-3MKLDCKQ.cjs → chunk-6WTC4JXH.cjs} +3 -3
  10. package/libs/chunk-75QHTLFO.js +7 -0
  11. package/libs/chunk-75QHTLFO.js.map +1 -0
  12. package/libs/{chunk-ZANSFMTD.js → chunk-7XPFW7CB.js} +3 -3
  13. package/libs/chunk-BFK62VX5.js +5 -0
  14. package/libs/chunk-BFK62VX5.js.map +1 -0
  15. package/libs/{chunk-ROZI23GS.cjs → chunk-DKTHCQ5P.cjs} +4 -4
  16. package/libs/chunk-E2AJURUW.cjs +13 -0
  17. package/libs/chunk-E2AJURUW.cjs.map +1 -0
  18. package/libs/{chunk-L75OQKEI.cjs → chunk-ENTCUJ3A.cjs} +3 -3
  19. package/libs/chunk-ENTCUJ3A.cjs.map +1 -0
  20. package/libs/chunk-F5EYMVQM.js +10 -0
  21. package/libs/chunk-F5EYMVQM.js.map +1 -0
  22. package/libs/chunk-FVROL3V5.js +9 -0
  23. package/libs/chunk-FVROL3V5.js.map +1 -0
  24. package/libs/chunk-GT77BX4L.cjs +17 -0
  25. package/libs/chunk-GT77BX4L.cjs.map +1 -0
  26. package/libs/chunk-GUJSMQ3V.cjs +16 -0
  27. package/libs/chunk-GUJSMQ3V.cjs.map +1 -0
  28. package/libs/chunk-HHLNOC5T.js +7 -0
  29. package/libs/chunk-HHLNOC5T.js.map +1 -0
  30. package/libs/chunk-HRRHPLER.js +8 -0
  31. package/libs/chunk-HRRHPLER.js.map +1 -0
  32. package/libs/chunk-IEB64SWY.js +8 -0
  33. package/libs/chunk-IEB64SWY.js.map +1 -0
  34. package/libs/{chunk-NGTJDDFO.js → chunk-IQ76HGVP.js} +2 -2
  35. package/libs/chunk-IRLFZ3OL.js +9 -0
  36. package/libs/chunk-IRLFZ3OL.js.map +1 -0
  37. package/libs/{chunk-JJ43O4Y5.js → chunk-KK47SYZI.js} +2 -2
  38. package/libs/chunk-O3JIHC5M.cjs +15 -0
  39. package/libs/chunk-O3JIHC5M.cjs.map +1 -0
  40. package/libs/chunk-O5XAJ7BY.cjs +18 -0
  41. package/libs/chunk-O5XAJ7BY.cjs.map +1 -0
  42. package/libs/chunk-OVWLQYMK.js +10 -0
  43. package/libs/chunk-OVWLQYMK.js.map +1 -0
  44. package/libs/chunk-PNWIRCG3.cjs +7 -0
  45. package/libs/chunk-PNWIRCG3.cjs.map +1 -0
  46. package/libs/{chunk-D4YLRWAO.cjs → chunk-QVW6W76L.cjs} +6 -6
  47. package/libs/chunk-T4T6GWYQ.cjs +17 -0
  48. package/libs/chunk-T4T6GWYQ.cjs.map +1 -0
  49. package/libs/chunk-TON2YGMD.cjs +9 -0
  50. package/libs/chunk-TON2YGMD.cjs.map +1 -0
  51. package/libs/chunk-UEPAWMDF.js +8 -0
  52. package/libs/chunk-UEPAWMDF.js.map +1 -0
  53. package/libs/{chunk-LT5KZ2QW.cjs → chunk-US2I5GI7.cjs} +3 -3
  54. package/libs/{chunk-B7F5FS6D.cjs → chunk-W2UIN7EV.cjs} +3 -3
  55. package/libs/{chunk-P2DC76ZZ.cjs → chunk-W5TKWBFC.cjs} +3 -3
  56. package/libs/chunk-WXBFBWYF.cjs +16 -0
  57. package/libs/chunk-WXBFBWYF.cjs.map +1 -0
  58. package/libs/{chunk-VUH3FXGJ.js → chunk-X3JCTEPD.js} +5 -5
  59. package/libs/chunk-X5LGFCWG.js +9 -0
  60. package/libs/chunk-X5LGFCWG.js.map +1 -0
  61. package/libs/{chunk-5M57K4SW.js → chunk-Y2PFDELK.js} +2 -2
  62. package/libs/{chunk-ETFLFC2S.js → chunk-ZFJ4U45S.js} +2 -2
  63. package/libs/{component-props-a8a2f97e.d.ts → component-props-67d978a2.d.ts} +4 -4
  64. package/libs/components/alert/alert.css +1 -1
  65. package/libs/components/alert/alert.css.map +1 -1
  66. package/libs/components/alert/alert.min.css +2 -2
  67. package/libs/components/breadcrumbs/breadcrumb.cjs +6 -6
  68. package/libs/components/breadcrumbs/breadcrumb.d.cts +11 -11
  69. package/libs/components/breadcrumbs/breadcrumb.d.ts +11 -11
  70. package/libs/components/breadcrumbs/breadcrumb.js +3 -3
  71. package/libs/components/button.cjs +6 -4
  72. package/libs/components/button.d.cts +97 -4
  73. package/libs/components/button.d.ts +97 -4
  74. package/libs/components/button.js +4 -2
  75. package/libs/components/card.cjs +7 -7
  76. package/libs/components/card.d.cts +14 -14
  77. package/libs/components/card.d.ts +14 -14
  78. package/libs/components/card.js +2 -2
  79. package/libs/components/dialog/dialog.cjs +9 -7
  80. package/libs/components/dialog/dialog.d.cts +3 -3
  81. package/libs/components/dialog/dialog.d.ts +3 -3
  82. package/libs/components/dialog/dialog.js +7 -5
  83. package/libs/components/form/fields.cjs +4 -4
  84. package/libs/components/form/fields.d.cts +16 -7
  85. package/libs/components/form/fields.d.ts +16 -7
  86. package/libs/components/form/fields.js +2 -2
  87. package/libs/components/form/inputs.cjs +6 -4
  88. package/libs/components/form/inputs.d.cts +50 -2
  89. package/libs/components/form/inputs.d.ts +50 -2
  90. package/libs/components/form/inputs.js +4 -2
  91. package/libs/components/form/textarea.cjs +5 -4
  92. package/libs/components/form/textarea.d.cts +32 -23
  93. package/libs/components/form/textarea.d.ts +32 -23
  94. package/libs/components/form/textarea.js +3 -2
  95. package/libs/components/heading/heading.cjs +3 -3
  96. package/libs/components/heading/heading.d.cts +2 -2
  97. package/libs/components/heading/heading.d.ts +2 -2
  98. package/libs/components/heading/heading.js +2 -2
  99. package/libs/components/icons/icon.cjs +4 -4
  100. package/libs/components/icons/icon.d.cts +38 -38
  101. package/libs/components/icons/icon.d.ts +38 -38
  102. package/libs/components/icons/icon.js +2 -2
  103. package/libs/components/link/link.cjs +4 -4
  104. package/libs/components/link/link.css +1 -1
  105. package/libs/components/link/link.css.map +1 -1
  106. package/libs/components/link/link.d.cts +3 -19
  107. package/libs/components/link/link.d.ts +3 -19
  108. package/libs/components/link/link.js +2 -2
  109. package/libs/components/link/link.min.css +2 -2
  110. package/libs/components/list/list.cjs +5 -5
  111. package/libs/components/list/list.css +1 -0
  112. package/libs/components/list/list.css.map +1 -0
  113. package/libs/components/list/list.d.cts +120 -33
  114. package/libs/components/list/list.d.ts +120 -33
  115. package/libs/components/list/list.js +2 -2
  116. package/libs/components/list/list.min.css +3 -0
  117. package/libs/components/modal.cjs +6 -4
  118. package/libs/components/modal.d.cts +8 -8
  119. package/libs/components/modal.d.ts +8 -8
  120. package/libs/components/modal.js +5 -3
  121. package/libs/components/nav/nav.cjs +7 -7
  122. package/libs/components/nav/nav.css +1 -1
  123. package/libs/components/nav/nav.css.map +1 -1
  124. package/libs/components/nav/nav.d.cts +550 -34
  125. package/libs/components/nav/nav.d.ts +550 -34
  126. package/libs/components/nav/nav.js +3 -3
  127. package/libs/components/nav/nav.min.css +2 -2
  128. package/libs/components/popover/popover.d.cts +5 -5
  129. package/libs/components/popover/popover.d.ts +5 -5
  130. package/libs/components/tables/table.cjs +5 -5
  131. package/libs/components/tables/table.d.cts +8 -8
  132. package/libs/components/tables/table.d.ts +8 -8
  133. package/libs/components/tables/table.js +2 -2
  134. package/libs/components/tag/tag.css +1 -1
  135. package/libs/components/tag/tag.css.map +1 -1
  136. package/libs/components/tag/tag.min.css +2 -2
  137. package/libs/components/text/text.cjs +5 -5
  138. package/libs/components/text/text.d.cts +5 -5
  139. package/libs/components/text/text.d.ts +5 -5
  140. package/libs/components/text/text.js +2 -2
  141. package/libs/form.types-d25ebfac.d.ts +233 -0
  142. package/libs/{heading-3648c538.d.ts → heading-7446cb46.d.ts} +8 -8
  143. package/libs/hooks.cjs +9 -4
  144. package/libs/hooks.d.cts +137 -3
  145. package/libs/hooks.d.ts +137 -3
  146. package/libs/hooks.js +4 -3
  147. package/libs/icons.cjs +3 -3
  148. package/libs/icons.d.cts +2 -2
  149. package/libs/icons.d.ts +2 -2
  150. package/libs/icons.js +2 -2
  151. package/libs/index.cjs +53 -51
  152. package/libs/index.cjs.map +1 -1
  153. package/libs/index.css +1 -1
  154. package/libs/index.css.map +1 -1
  155. package/libs/index.d.cts +338 -49
  156. package/libs/index.d.ts +338 -49
  157. package/libs/index.js +24 -22
  158. package/libs/index.js.map +1 -1
  159. package/libs/link-5192f411.d.ts +323 -0
  160. package/libs/list.types-d26de310.d.ts +245 -0
  161. package/libs/{ui-645f95b5.d.ts → ui-d01b50d4.d.ts} +16 -12
  162. package/package.json +4 -6
  163. package/src/components/alert/alert.scss +1 -4
  164. package/src/components/breadcrumbs/breadcrumb.tsx +4 -1
  165. package/src/components/buttons/README.mdx +102 -1
  166. package/src/components/buttons/button.stories.tsx +106 -0
  167. package/src/components/buttons/button.tsx +82 -52
  168. package/src/components/dialog/dialog-a11y-review.md +653 -0
  169. package/src/components/form/README.mdx +725 -43
  170. package/src/components/form/WCAG-REVIEW.md +654 -0
  171. package/src/components/form/fields.tsx +10 -1
  172. package/src/components/form/form.stories.tsx +604 -23
  173. package/src/components/form/form.tsx +204 -63
  174. package/src/components/form/form.types.ts +378 -0
  175. package/src/components/form/input.stories.tsx +71 -3
  176. package/src/components/form/inputs.tsx +159 -67
  177. package/src/components/form/select.tsx +122 -66
  178. package/src/components/form/textarea.tsx +120 -73
  179. package/src/components/fp.tsx +86 -11
  180. package/src/components/link/README.mdx +923 -0
  181. package/src/components/link/link.scss +79 -26
  182. package/src/components/link/link.stories.tsx +383 -30
  183. package/src/components/link/link.test.tsx +677 -0
  184. package/src/components/link/link.tsx +163 -57
  185. package/src/components/link/link.types.ts +261 -0
  186. package/src/components/list/README.mdx +764 -0
  187. package/src/components/list/list.scss +285 -0
  188. package/src/components/list/list.stories.tsx +514 -27
  189. package/src/components/list/list.test.tsx +554 -0
  190. package/src/components/list/list.tsx +153 -51
  191. package/src/components/list/list.types.ts +255 -0
  192. package/src/components/nav/ACCESSIBILITY.md +649 -0
  193. package/src/components/nav/README.mdx +782 -0
  194. package/src/components/nav/nav.scss +37 -4
  195. package/src/components/nav/nav.stories.tsx +44 -6
  196. package/src/components/nav/nav.tsx +302 -51
  197. package/src/components/nav/nav.types.ts +308 -0
  198. package/src/components/tag/README.mdx +426 -0
  199. package/src/components/tag/tag.scss +101 -27
  200. package/src/components/tag/tag.stories.tsx +384 -10
  201. package/src/components/tag/tag.test.tsx +210 -0
  202. package/src/components/tag/tag.tsx +106 -9
  203. package/src/components/tag/tag.types.ts +107 -0
  204. package/src/components/ui.tsx +8 -3
  205. package/src/hooks/use-disabled-state.test.tsx +536 -0
  206. package/src/hooks/use-disabled-state.ts +246 -0
  207. package/src/hooks/useDisabledState.md +393 -0
  208. package/src/hooks.ts +6 -0
  209. package/src/index.scss +2 -0
  210. package/src/index.ts +2 -1
  211. package/src/sass/_globals.scss +2 -7
  212. package/src/styles/alert/alert.css +1 -3
  213. package/src/styles/alert/alert.css.map +1 -1
  214. package/src/styles/index.css +461 -81
  215. package/src/styles/index.css.map +1 -1
  216. package/src/styles/link/link.css +45 -28
  217. package/src/styles/link/link.css.map +1 -1
  218. package/src/styles/list/list.css +214 -0
  219. package/src/styles/list/list.css.map +1 -0
  220. package/src/styles/nav/nav.css +32 -6
  221. package/src/styles/nav/nav.css.map +1 -1
  222. package/src/styles/tag/tag.css +113 -35
  223. package/src/styles/tag/tag.css.map +1 -1
  224. package/src/styles/utilities/_disabled.scss +58 -0
  225. package/src/types/shared.ts +43 -6
  226. package/src/utils/accessibility.ts +109 -0
  227. package/libs/chunk-2LTJ7HHX.cjs +0 -18
  228. package/libs/chunk-2LTJ7HHX.cjs.map +0 -1
  229. package/libs/chunk-2Y7W75TT.js +0 -9
  230. package/libs/chunk-2Y7W75TT.js.map +0 -1
  231. package/libs/chunk-5S4ORA4C.cjs +0 -15
  232. package/libs/chunk-5S4ORA4C.cjs.map +0 -1
  233. package/libs/chunk-AHDJGCG5.cjs +0 -15
  234. package/libs/chunk-AHDJGCG5.cjs.map +0 -1
  235. package/libs/chunk-BHRQBJRY.js +0 -8
  236. package/libs/chunk-BHRQBJRY.js.map +0 -1
  237. package/libs/chunk-GZ4QFPRY.js +0 -9
  238. package/libs/chunk-GZ4QFPRY.js.map +0 -1
  239. package/libs/chunk-IYUN2EW3.cjs +0 -15
  240. package/libs/chunk-IYUN2EW3.cjs.map +0 -1
  241. package/libs/chunk-J32EZPYD.cjs +0 -15
  242. package/libs/chunk-J32EZPYD.cjs.map +0 -1
  243. package/libs/chunk-KUKIVRC2.js +0 -7
  244. package/libs/chunk-KUKIVRC2.js.map +0 -1
  245. package/libs/chunk-L75OQKEI.cjs.map +0 -1
  246. package/libs/chunk-M5RRNTVX.cjs +0 -15
  247. package/libs/chunk-M5RRNTVX.cjs.map +0 -1
  248. package/libs/chunk-OK5QEIMD.cjs +0 -17
  249. package/libs/chunk-OK5QEIMD.cjs.map +0 -1
  250. package/libs/chunk-P7TTEYCD.js +0 -7
  251. package/libs/chunk-P7TTEYCD.js.map +0 -1
  252. package/libs/chunk-QLZWHAMK.js +0 -8
  253. package/libs/chunk-QLZWHAMK.js.map +0 -1
  254. package/libs/chunk-RIVUMPOG.js +0 -8
  255. package/libs/chunk-RIVUMPOG.js.map +0 -1
  256. package/libs/chunk-S7BABR7Z.cjs +0 -13
  257. package/libs/chunk-S7BABR7Z.cjs.map +0 -1
  258. package/libs/chunk-SMYRLO3E.js +0 -8
  259. package/libs/chunk-SMYRLO3E.js.map +0 -1
  260. package/libs/chunk-TYRCEX2L.js +0 -8
  261. package/libs/chunk-TYRCEX2L.js.map +0 -1
  262. package/libs/chunk-XBA562WW.js +0 -8
  263. package/libs/chunk-XBA562WW.js.map +0 -1
  264. package/libs/chunk-XTQKWY7W.cjs +0 -32
  265. package/libs/chunk-XTQKWY7W.cjs.map +0 -1
  266. package/libs/inputs-f3a216db.d.ts +0 -45
  267. /package/libs/{chunk-PQ2K3BM6.cjs.map → chunk-2NRIP6RB.cjs.map} +0 -0
  268. /package/libs/{chunk-772NRB75.js.map → chunk-5QD3DWFI.js.map} +0 -0
  269. /package/libs/{chunk-3MKLDCKQ.cjs.map → chunk-6WTC4JXH.cjs.map} +0 -0
  270. /package/libs/{chunk-ZANSFMTD.js.map → chunk-7XPFW7CB.js.map} +0 -0
  271. /package/libs/{chunk-ROZI23GS.cjs.map → chunk-DKTHCQ5P.cjs.map} +0 -0
  272. /package/libs/{chunk-NGTJDDFO.js.map → chunk-IQ76HGVP.js.map} +0 -0
  273. /package/libs/{chunk-JJ43O4Y5.js.map → chunk-KK47SYZI.js.map} +0 -0
  274. /package/libs/{chunk-D4YLRWAO.cjs.map → chunk-QVW6W76L.cjs.map} +0 -0
  275. /package/libs/{chunk-LT5KZ2QW.cjs.map → chunk-US2I5GI7.cjs.map} +0 -0
  276. /package/libs/{chunk-B7F5FS6D.cjs.map → chunk-W2UIN7EV.cjs.map} +0 -0
  277. /package/libs/{chunk-P2DC76ZZ.cjs.map → chunk-W5TKWBFC.cjs.map} +0 -0
  278. /package/libs/{chunk-VUH3FXGJ.js.map → chunk-X3JCTEPD.js.map} +0 -0
  279. /package/libs/{chunk-5M57K4SW.js.map → chunk-Y2PFDELK.js.map} +0 -0
  280. /package/libs/{chunk-ETFLFC2S.js.map → chunk-ZFJ4U45S.js.map} +0 -0
@@ -0,0 +1,308 @@
1
+ import React from "react";
2
+ import UI from "#components/ui";
3
+ import type { ListProps, ListItemProps } from "../list/list.types";
4
+
5
+ /**
6
+ * Props for the Nav component (navigation container).
7
+ *
8
+ * The Nav component provides a semantic `<nav>` element for site navigation,
9
+ * meeting WCAG 2.1 AA standards for accessible navigation landmarks.
10
+ *
11
+ * ## Accessibility Features:
12
+ * - ✅ Uses semantic `<nav>` element (landmark role)
13
+ * - ✅ Supports `aria-label` for multiple navigation regions
14
+ * - ✅ Supports `aria-labelledby` for heading-based labels
15
+ * - ✅ Works with screen readers and keyboard navigation
16
+ *
17
+ * ## Best Practices:
18
+ * - Use `aria-label` when you have multiple navigation regions
19
+ * - Prefer descriptive labels like "Main navigation" or "Footer navigation"
20
+ * - Use `aria-current="page"` on links to indicate current page
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * // Single navigation on page (no label needed)
25
+ * <Nav>
26
+ * <Nav.List>
27
+ * <Nav.Item><Link href="/">Home</Link></Nav.Item>
28
+ * </Nav.List>
29
+ * </Nav>
30
+ * ```
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * // Multiple navigation regions (labels required)
35
+ * <Nav aria-label="Main navigation">
36
+ * <Nav.List>
37
+ * <Nav.Item><Link href="/">Home</Link></Nav.Item>
38
+ * </Nav.List>
39
+ * </Nav>
40
+ *
41
+ * <Nav aria-label="Footer navigation">
42
+ * <Nav.List>
43
+ * <Nav.Item><Link href="/privacy">Privacy</Link></Nav.Item>
44
+ * </Nav.List>
45
+ * </Nav>
46
+ * ```
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * // Using aria-labelledby with a heading
51
+ * <h2 id="main-nav-heading">Site Navigation</h2>
52
+ * <Nav aria-labelledby="main-nav-heading">
53
+ * <Nav.List>
54
+ * <Nav.Item><Link href="/">Home</Link></Nav.Item>
55
+ * </Nav.List>
56
+ * </Nav>
57
+ * ```
58
+ */
59
+ export type NavProps = {
60
+ /**
61
+ * Child elements (typically Nav.List components).
62
+ *
63
+ * @required
64
+ * @example
65
+ * ```tsx
66
+ * <Nav>
67
+ * <Nav.List>
68
+ * <Nav.Item>Link 1</Nav.Item>
69
+ * </Nav.List>
70
+ * </Nav>
71
+ * ```
72
+ */
73
+ children: React.ReactNode;
74
+
75
+ /**
76
+ * Accessible label for the navigation region.
77
+ *
78
+ * **WCAG 2.1 Requirement**: Use when you have multiple `<nav>` elements
79
+ * on the same page to distinguish them for screen reader users.
80
+ *
81
+ * @optional
82
+ * @see {@link https://www.w3.org/WAI/WCAG21/Techniques/aria/ARIA11}
83
+ * @example
84
+ * ```tsx
85
+ * aria-label="Main navigation"
86
+ * aria-label="Footer navigation"
87
+ * ```
88
+ */
89
+ "aria-label"?: string;
90
+
91
+ /**
92
+ * ID of an element that labels this navigation region.
93
+ *
94
+ * Use when a visible heading already describes the navigation.
95
+ *
96
+ * @optional
97
+ * @example
98
+ * ```tsx
99
+ * <h2 id="sidebar-nav">Quick Links</h2>
100
+ * <Nav aria-labelledby="sidebar-nav">...</Nav>
101
+ * ```
102
+ */
103
+ "aria-labelledby"?: string;
104
+
105
+ /**
106
+ * HTML id attribute for the navigation element.
107
+ *
108
+ * @optional
109
+ * @example
110
+ * ```tsx
111
+ * id="main-navigation"
112
+ * ```
113
+ */
114
+ id?: string;
115
+
116
+ /**
117
+ * CSS class names to apply to the nav element.
118
+ *
119
+ * @optional
120
+ * @example
121
+ * ```tsx
122
+ * classes="navbar sticky-header"
123
+ * ```
124
+ */
125
+ classes?: string;
126
+
127
+ /**
128
+ * Inline CSS styles to apply.
129
+ * Can include CSS custom properties for theming.
130
+ *
131
+ * @optional
132
+ * @example
133
+ * ```tsx
134
+ * styles={{
135
+ * '--nav-bg': '#f8f9fa',
136
+ * '--nav-h': '4rem'
137
+ * }}
138
+ * ```
139
+ */
140
+ styles?: React.CSSProperties;
141
+ } & Partial<React.ComponentProps<typeof UI>>;
142
+
143
+ /**
144
+ * Props for the NavList component (list of navigation items).
145
+ *
146
+ * Extends the List component with navigation-specific styling through
147
+ * the `isBlock` prop for vertical layout control.
148
+ *
149
+ * ## Layout Options:
150
+ * - **Default (inline)**: Horizontal list for primary navigation
151
+ * - **Block**: Vertical stacked list for sidebars or mobile menus
152
+ *
153
+ * @example
154
+ * ```tsx
155
+ * // Horizontal navigation (default)
156
+ * <Nav.List>
157
+ * <Nav.Item><Link href="/">Home</Link></Nav.Item>
158
+ * <Nav.Item><Link href="/about">About</Link></Nav.Item>
159
+ * </Nav.List>
160
+ * ```
161
+ *
162
+ * @example
163
+ * ```tsx
164
+ * // Vertical navigation (block layout)
165
+ * <Nav.List isBlock>
166
+ * <Nav.Item><Link href="/">Home</Link></Nav.Item>
167
+ * <Nav.Item><Link href="/about">About</Link></Nav.Item>
168
+ * </Nav.List>
169
+ * ```
170
+ *
171
+ * @example
172
+ * ```tsx
173
+ * // Multiple lists in a navbar
174
+ * <Nav classes="navbar">
175
+ * <Nav.List aria-label="Primary navigation">
176
+ * <Nav.Item><Link href="/">Home</Link></Nav.Item>
177
+ * </Nav.List>
178
+ * <Nav.List aria-label="User actions">
179
+ * <Nav.Item><Link href="/login">Login</Link></Nav.Item>
180
+ * </Nav.List>
181
+ * </Nav>
182
+ * ```
183
+ */
184
+ export type NavListProps = Omit<ListProps, "type"> & {
185
+ /**
186
+ * Display list items vertically (block layout).
187
+ *
188
+ * When true, applies `data-list="unstyled block"` for vertical stacking.
189
+ * When false or undefined, items display inline horizontally.
190
+ *
191
+ * @default false
192
+ * @example
193
+ * ```tsx
194
+ * isBlock={true} // Vertical sidebar navigation
195
+ * isBlock={false} // Horizontal top navigation (default)
196
+ * ```
197
+ */
198
+ isBlock?: boolean;
199
+
200
+ /**
201
+ * Accessible label for the navigation list.
202
+ *
203
+ * Use when you have multiple lists in the same Nav to distinguish them.
204
+ *
205
+ * @optional
206
+ * @example
207
+ * ```tsx
208
+ * aria-label="Main menu"
209
+ * aria-label="Social media links"
210
+ * ```
211
+ */
212
+ "aria-label"?: string;
213
+
214
+ /**
215
+ * Child elements (typically Nav.Item components).
216
+ *
217
+ * @required
218
+ */
219
+ children: React.ReactNode;
220
+ };
221
+
222
+ /**
223
+ * Props for the NavItem component (individual navigation link container).
224
+ *
225
+ * Wraps navigation links in a list item element with consistent styling.
226
+ * Typically contains a Link component or anchor element.
227
+ *
228
+ * ## Accessibility Considerations:
229
+ * - Use `aria-current="page"` on the link inside to indicate current page
230
+ * - Ensure sufficient color contrast (WCAG 2.1: 4.5:1 for text)
231
+ * - Provide focus indicators (WCAG 2.1: 3:1 contrast for focus state)
232
+ *
233
+ * @example
234
+ * ```tsx
235
+ * // Basic navigation item
236
+ * <Nav.Item>
237
+ * <Link href="/about">About Us</Link>
238
+ * </Nav.Item>
239
+ * ```
240
+ *
241
+ * @example
242
+ * ```tsx
243
+ * // Current page indicator
244
+ * <Nav.Item>
245
+ * <Link href="/about" aria-current="page">
246
+ * About Us
247
+ * </Link>
248
+ * </Nav.Item>
249
+ * ```
250
+ *
251
+ * @example
252
+ * ```tsx
253
+ * // Custom styling
254
+ * <Nav.Item
255
+ * classes="nav-item-featured"
256
+ * styles={{ '--nav-px': '2rem' }}
257
+ * >
258
+ * <Link href="/pricing">Pricing</Link>
259
+ * </Nav.Item>
260
+ * ```
261
+ */
262
+ export type NavItemProps = Omit<ListItemProps, "type"> & {
263
+ /**
264
+ * HTML id attribute for the list item.
265
+ *
266
+ * @optional
267
+ * @example
268
+ * ```tsx
269
+ * id="nav-item-home"
270
+ * ```
271
+ */
272
+ id?: string;
273
+
274
+ /**
275
+ * Inline CSS styles to apply to the list item.
276
+ *
277
+ * @optional
278
+ * @example
279
+ * ```tsx
280
+ * styles={{ paddingInline: '1.5rem' }}
281
+ * ```
282
+ */
283
+ styles?: React.CSSProperties;
284
+
285
+ /**
286
+ * CSS class names to apply to the list item.
287
+ *
288
+ * @optional
289
+ * @example
290
+ * ```tsx
291
+ * classes="nav-item active"
292
+ * ```
293
+ */
294
+ classes?: string;
295
+
296
+ /**
297
+ * Child elements (typically a Link component).
298
+ *
299
+ * @required
300
+ * @example
301
+ * ```tsx
302
+ * <Nav.Item>
303
+ * <Link href="/">Home</Link>
304
+ * </Nav.Item>
305
+ * ```
306
+ */
307
+ children: React.ReactNode;
308
+ };