@g4rcez/components 4.0.1 → 4.1.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 (415) hide show
  1. package/ai/SKILL.md +233 -0
  2. package/ai/docs/Alert.md +166 -0
  3. package/ai/docs/AnimatedList.md +206 -0
  4. package/ai/docs/Autocomplete.md +221 -0
  5. package/ai/docs/Button.md +182 -0
  6. package/ai/docs/Calendar.md +185 -0
  7. package/ai/docs/Card.md +178 -0
  8. package/ai/docs/Checkbox.md +194 -0
  9. package/ai/docs/CommandPalette.md +275 -0
  10. package/ai/docs/DatePicker.md +152 -0
  11. package/ai/docs/Dropdown.md +195 -0
  12. package/{dist/ai → ai}/docs/Empty.md +41 -44
  13. package/{dist/ai → ai}/docs/Expand.md +40 -54
  14. package/ai/docs/FileUpload.md +218 -0
  15. package/{dist/ai → ai}/docs/Form.md +35 -29
  16. package/{dist/ai → ai}/docs/FormReset.md +37 -37
  17. package/{dist/ai → ai}/docs/Heading.md +4 -6
  18. package/ai/docs/Input.md +212 -0
  19. package/ai/docs/InputField.md +170 -0
  20. package/ai/docs/List.md +208 -0
  21. package/ai/docs/Menu.md +168 -0
  22. package/ai/docs/Modal.md +273 -0
  23. package/ai/docs/MultiSelect.md +177 -0
  24. package/ai/docs/Notifications.md +231 -0
  25. package/ai/docs/PageCalendar.md +262 -0
  26. package/{dist/ai → ai}/docs/Polymorph.md +25 -41
  27. package/{dist/ai → ai}/docs/Progress.md +55 -51
  28. package/{dist/ai → ai}/docs/Radiobox.md +49 -41
  29. package/{dist/ai → ai}/docs/RenderOnView.md +26 -32
  30. package/{dist/ai → ai}/docs/Resizable.md +60 -65
  31. package/ai/docs/Select.md +284 -0
  32. package/{dist/ai → ai}/docs/Shortcut.md +14 -14
  33. package/{dist/ai → ai}/docs/Skeleton.md +56 -60
  34. package/{dist/ai → ai}/docs/Slider.md +26 -49
  35. package/{dist/ai → ai}/docs/Slot.md +15 -17
  36. package/{dist/ai → ai}/docs/Spinner.md +17 -15
  37. package/{dist/ai → ai}/docs/Stats.md +44 -42
  38. package/ai/docs/Step.md +159 -0
  39. package/{dist/ai → ai}/docs/Switch.md +44 -54
  40. package/ai/docs/Table.md +286 -0
  41. package/ai/docs/Tabs.md +191 -0
  42. package/ai/docs/Tag.md +222 -0
  43. package/{dist/ai → ai}/docs/TaskList.md +40 -50
  44. package/ai/docs/Textarea.md +144 -0
  45. package/ai/docs/Timeline.md +212 -0
  46. package/{dist/ai → ai}/docs/Toolbar.md +46 -46
  47. package/ai/docs/Tooltip.md +231 -0
  48. package/ai/docs/Typography.md +187 -0
  49. package/ai/docs/Wizard.md +208 -0
  50. package/ai/docs/index.md +183 -0
  51. package/dist/autocomplete-DcTNOwyg.js +393 -0
  52. package/dist/autocomplete-DcTNOwyg.js.map +1 -0
  53. package/dist/{calendar-B5lSd0ID.js → calendar-BJMHRoy2.js} +104 -105
  54. package/dist/calendar-BJMHRoy2.js.map +1 -0
  55. package/dist/components/core/button.js +10 -10
  56. package/dist/components/core/button.js.map +1 -1
  57. package/dist/components/core/tag.js +4 -4
  58. package/dist/components/core/tag.js.map +1 -1
  59. package/dist/components/display/alert.js +48 -46
  60. package/dist/components/display/alert.js.map +1 -1
  61. package/dist/components/display/calendar.js +6 -6
  62. package/dist/components/display/card.js +2 -2
  63. package/dist/components/display/card.js.map +1 -1
  64. package/dist/components/display/list.js +1 -1
  65. package/dist/components/display/list.js.map +1 -1
  66. package/dist/components/display/notifications.js +3 -3
  67. package/dist/components/display/stats.js +1 -1
  68. package/dist/components/display/tabs.js +2 -2
  69. package/dist/components/display/timeline.js +1 -1
  70. package/dist/components/floating/dropdown.js +25 -17
  71. package/dist/components/floating/dropdown.js.map +1 -1
  72. package/dist/components/floating/expand.js +7 -7
  73. package/dist/components/floating/expand.js.map +1 -1
  74. package/dist/components/floating/menu.js +10 -10
  75. package/dist/components/floating/menu.js.map +1 -1
  76. package/dist/components/floating/modal.js +106 -102
  77. package/dist/components/floating/modal.js.map +1 -1
  78. package/dist/components/floating/tooltip.js +14 -14
  79. package/dist/components/floating/tooltip.js.map +1 -1
  80. package/dist/components/form/autocomplete.js +6 -6
  81. package/dist/components/form/checkbox.js +1 -1
  82. package/dist/components/form/date-picker.js +5 -5
  83. package/dist/components/form/file-upload.js +2 -2
  84. package/dist/components/form/form.js.map +1 -1
  85. package/dist/components/form/input.js +1 -1
  86. package/dist/components/form/radiobox.js +1 -1
  87. package/dist/components/form/select.js +3 -3
  88. package/dist/components/form/switch.js +2 -2
  89. package/dist/components/form/switch.js.map +1 -1
  90. package/dist/components/table/table.js +3 -3
  91. package/dist/{date-picker-DwNo22lx.js → date-picker-Bnl07nd8.js} +8 -6
  92. package/dist/date-picker-Bnl07nd8.js.map +1 -0
  93. package/dist/{dom-Dl8XH0CK.js → dom-CyQHY7ID.js} +66 -61
  94. package/dist/dom-CyQHY7ID.js.map +1 -0
  95. package/dist/{file-upload-Brf2NkLr.js → file-upload-93d5DR4q.js} +139 -129
  96. package/dist/file-upload-93d5DR4q.js.map +1 -0
  97. package/dist/{floating-ui.react-QNHG9W4N.js → floating-ui.react-M2PGXLDp.js} +8 -8
  98. package/dist/floating-ui.react-M2PGXLDp.js.map +1 -0
  99. package/dist/{fns-D2eyJKd5.js → fns-C7Dt27Qd.js} +2 -2
  100. package/dist/fns-C7Dt27Qd.js.map +1 -0
  101. package/dist/index-BJ1ayTam.js +126 -0
  102. package/dist/index-BJ1ayTam.js.map +1 -0
  103. package/dist/index-C-PuFUZi.js.map +1 -1
  104. package/dist/{index-BelDtX5M.js → index-DDeQW0JW.js} +399 -404
  105. package/dist/index-DDeQW0JW.js.map +1 -0
  106. package/dist/index-DE4shK8D.js +215 -0
  107. package/dist/index-DE4shK8D.js.map +1 -0
  108. package/dist/{index-DJSMaZR4.js → index-DlJ_2RBL.js} +2 -2
  109. package/dist/index-DlJ_2RBL.js.map +1 -0
  110. package/dist/index.css +1 -1
  111. package/dist/index.esm-BaIwleSE.js.map +1 -1
  112. package/dist/index.js +2826 -2765
  113. package/dist/index.js.map +1 -1
  114. package/dist/{input-CrGrSnUt.js → input-_MVxmIpu.js} +116 -114
  115. package/dist/input-_MVxmIpu.js.map +1 -0
  116. package/dist/{input-field-5vYcz5tT.js → input-field-CDCOODOl.js} +63 -47
  117. package/dist/input-field-CDCOODOl.js.map +1 -0
  118. package/dist/notifications-Dp0ydKJS.js +2576 -0
  119. package/dist/notifications-Dp0ydKJS.js.map +1 -0
  120. package/dist/polymorph-B5n9fs_K.js.map +1 -1
  121. package/dist/preset/plugin.tailwind.d.ts.map +1 -1
  122. package/dist/preset/plugin.tailwind.js +20 -18
  123. package/dist/preset/preset.tailwind.js +24 -25
  124. package/dist/preset/src/styles/common.js +6 -3
  125. package/dist/preset/src/styles/dark.d.ts.map +1 -1
  126. package/dist/preset/src/styles/dark.js +9 -5
  127. package/dist/preset/src/styles/design-tokens.js +68 -89
  128. package/dist/preset/src/styles/light.d.ts.map +1 -1
  129. package/dist/preset/src/styles/light.js +9 -5
  130. package/dist/preset/src/styles/theme.js +7 -4
  131. package/dist/preset/src/styles/theme.types.d.ts +2 -1
  132. package/dist/preset/src/styles/theme.types.d.ts.map +1 -1
  133. package/dist/preset/src/styles/theme.types.js +2 -1
  134. package/dist/skeleton-BjJobYYf.js +24 -0
  135. package/dist/skeleton-BjJobYYf.js.map +1 -0
  136. package/dist/slot-CRyweuj0.js.map +1 -1
  137. package/dist/styles/common.js +6 -3
  138. package/dist/styles/dark.d.ts.map +1 -1
  139. package/dist/styles/dark.js +9 -5
  140. package/dist/styles/design-tokens.js +68 -89
  141. package/dist/styles/light.d.ts.map +1 -1
  142. package/dist/styles/light.js +9 -5
  143. package/dist/styles/theme.js +7 -4
  144. package/dist/styles/theme.types.d.ts +2 -1
  145. package/dist/styles/theme.types.d.ts.map +1 -1
  146. package/dist/styles/theme.types.js +2 -1
  147. package/dist/tabs-B0g7YtQv.js +123 -0
  148. package/dist/tabs-B0g7YtQv.js.map +1 -0
  149. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  150. package/dist/{context-BFXNJVn2.js → use-translations-DSltA7H_.js} +38 -30
  151. package/dist/use-translations-DSltA7H_.js.map +1 -0
  152. package/package.json +101 -88
  153. package/dist/ai/SKILL.md +0 -266
  154. package/dist/ai/docs/Alert.md +0 -167
  155. package/dist/ai/docs/AnimatedList.md +0 -205
  156. package/dist/ai/docs/Autocomplete.md +0 -225
  157. package/dist/ai/docs/Button.md +0 -182
  158. package/dist/ai/docs/Calendar.md +0 -219
  159. package/dist/ai/docs/Card.md +0 -174
  160. package/dist/ai/docs/Checkbox.md +0 -199
  161. package/dist/ai/docs/CommandPalette.md +0 -293
  162. package/dist/ai/docs/DatePicker.md +0 -171
  163. package/dist/ai/docs/Dropdown.md +0 -223
  164. package/dist/ai/docs/FileUpload.md +0 -225
  165. package/dist/ai/docs/Input.md +0 -237
  166. package/dist/ai/docs/InputField.md +0 -170
  167. package/dist/ai/docs/List.md +0 -205
  168. package/dist/ai/docs/Menu.md +0 -166
  169. package/dist/ai/docs/Modal.md +0 -280
  170. package/dist/ai/docs/MultiSelect.md +0 -196
  171. package/dist/ai/docs/Notifications.md +0 -231
  172. package/dist/ai/docs/PageCalendar.md +0 -271
  173. package/dist/ai/docs/Select.md +0 -284
  174. package/dist/ai/docs/Step.md +0 -159
  175. package/dist/ai/docs/Table.md +0 -298
  176. package/dist/ai/docs/Tabs.md +0 -191
  177. package/dist/ai/docs/Tag.md +0 -224
  178. package/dist/ai/docs/Textarea.md +0 -167
  179. package/dist/ai/docs/Timeline.md +0 -210
  180. package/dist/ai/docs/Tooltip.md +0 -231
  181. package/dist/ai/docs/TransferList.md +0 -142
  182. package/dist/ai/docs/Typography.md +0 -187
  183. package/dist/ai/docs/Wizard.md +0 -213
  184. package/dist/ai/docs/index.md +0 -183
  185. package/dist/autocomplete-Cn9Z2hLq.js +0 -375
  186. package/dist/autocomplete-Cn9Z2hLq.js.map +0 -1
  187. package/dist/calendar-B5lSd0ID.js.map +0 -1
  188. package/dist/components/core/button.d.ts +0 -77
  189. package/dist/components/core/button.d.ts.map +0 -1
  190. package/dist/components/core/heading.d.ts +0 -3
  191. package/dist/components/core/heading.d.ts.map +0 -1
  192. package/dist/components/core/polymorph.d.ts +0 -10
  193. package/dist/components/core/polymorph.d.ts.map +0 -1
  194. package/dist/components/core/render-on-view.d.ts +0 -7
  195. package/dist/components/core/render-on-view.d.ts.map +0 -1
  196. package/dist/components/core/resizable.d.ts +0 -3
  197. package/dist/components/core/resizable.d.ts.map +0 -1
  198. package/dist/components/core/slot.d.ts +0 -16
  199. package/dist/components/core/slot.d.ts.map +0 -1
  200. package/dist/components/core/tag.d.ts +0 -35
  201. package/dist/components/core/tag.d.ts.map +0 -1
  202. package/dist/components/core/typography.d.ts +0 -24
  203. package/dist/components/core/typography.d.ts.map +0 -1
  204. package/dist/components/display/alert.d.ts +0 -28
  205. package/dist/components/display/alert.d.ts.map +0 -1
  206. package/dist/components/display/calendar.d.ts +0 -42
  207. package/dist/components/display/calendar.d.ts.map +0 -1
  208. package/dist/components/display/card.d.ts +0 -29
  209. package/dist/components/display/card.d.ts.map +0 -1
  210. package/dist/components/display/empty.d.ts +0 -8
  211. package/dist/components/display/empty.d.ts.map +0 -1
  212. package/dist/components/display/list.d.ts +0 -16
  213. package/dist/components/display/list.d.ts.map +0 -1
  214. package/dist/components/display/notifications.d.ts +0 -27
  215. package/dist/components/display/notifications.d.ts.map +0 -1
  216. package/dist/components/display/progress.d.ts +0 -13
  217. package/dist/components/display/progress.d.ts.map +0 -1
  218. package/dist/components/display/shortcut.d.ts +0 -4
  219. package/dist/components/display/shortcut.d.ts.map +0 -1
  220. package/dist/components/display/skeleton.d.ts +0 -12
  221. package/dist/components/display/skeleton.d.ts.map +0 -1
  222. package/dist/components/display/spinner.d.ts +0 -5
  223. package/dist/components/display/spinner.d.ts.map +0 -1
  224. package/dist/components/display/stats.d.ts +0 -12
  225. package/dist/components/display/stats.d.ts.map +0 -1
  226. package/dist/components/display/step.d.ts +0 -24
  227. package/dist/components/display/step.d.ts.map +0 -1
  228. package/dist/components/display/tabs.d.ts +0 -24
  229. package/dist/components/display/tabs.d.ts.map +0 -1
  230. package/dist/components/display/timeline.d.ts +0 -10
  231. package/dist/components/display/timeline.d.ts.map +0 -1
  232. package/dist/components/floating/command-palette.d.ts +0 -49
  233. package/dist/components/floating/command-palette.d.ts.map +0 -1
  234. package/dist/components/floating/dropdown.d.ts +0 -15
  235. package/dist/components/floating/dropdown.d.ts.map +0 -1
  236. package/dist/components/floating/expand.d.ts +0 -11
  237. package/dist/components/floating/expand.d.ts.map +0 -1
  238. package/dist/components/floating/menu.d.ts +0 -52
  239. package/dist/components/floating/menu.d.ts.map +0 -1
  240. package/dist/components/floating/modal.d.ts +0 -60
  241. package/dist/components/floating/modal.d.ts.map +0 -1
  242. package/dist/components/floating/toolbar.d.ts +0 -6
  243. package/dist/components/floating/toolbar.d.ts.map +0 -1
  244. package/dist/components/floating/tooltip.d.ts +0 -17
  245. package/dist/components/floating/tooltip.d.ts.map +0 -1
  246. package/dist/components/floating/wizard.d.ts +0 -26
  247. package/dist/components/floating/wizard.d.ts.map +0 -1
  248. package/dist/components/form/autocomplete.d.ts +0 -16
  249. package/dist/components/form/autocomplete.d.ts.map +0 -1
  250. package/dist/components/form/checkbox.d.ts +0 -12
  251. package/dist/components/form/checkbox.d.ts.map +0 -1
  252. package/dist/components/form/date-picker.d.ts +0 -10
  253. package/dist/components/form/date-picker.d.ts.map +0 -1
  254. package/dist/components/form/file-upload.d.ts +0 -15
  255. package/dist/components/form/file-upload.d.ts.map +0 -1
  256. package/dist/components/form/form.d.ts +0 -3
  257. package/dist/components/form/form.d.ts.map +0 -1
  258. package/dist/components/form/formReset.d.ts +0 -2
  259. package/dist/components/form/formReset.d.ts.map +0 -1
  260. package/dist/components/form/free-text.d.ts +0 -11
  261. package/dist/components/form/free-text.d.ts.map +0 -1
  262. package/dist/components/form/input-field.d.ts +0 -34
  263. package/dist/components/form/input-field.d.ts.map +0 -1
  264. package/dist/components/form/input.d.ts +0 -52
  265. package/dist/components/form/input.d.ts.map +0 -1
  266. package/dist/components/form/multi-select.d.ts +0 -19
  267. package/dist/components/form/multi-select.d.ts.map +0 -1
  268. package/dist/components/form/radiobox.d.ts +0 -7
  269. package/dist/components/form/radiobox.d.ts.map +0 -1
  270. package/dist/components/form/select.d.ts +0 -13
  271. package/dist/components/form/select.d.ts.map +0 -1
  272. package/dist/components/form/slider.d.ts +0 -7
  273. package/dist/components/form/slider.d.ts.map +0 -1
  274. package/dist/components/form/switch.d.ts +0 -9
  275. package/dist/components/form/switch.d.ts.map +0 -1
  276. package/dist/components/form/task-list.d.ts +0 -3
  277. package/dist/components/form/task-list.d.ts.map +0 -1
  278. package/dist/components/form/textarea.d.ts +0 -6
  279. package/dist/components/form/textarea.d.ts.map +0 -1
  280. package/dist/components/form/transfer-list.d.ts +0 -14
  281. package/dist/components/form/transfer-list.d.ts.map +0 -1
  282. package/dist/components/form/transfer-list.js +0 -55
  283. package/dist/components/form/transfer-list.js.map +0 -1
  284. package/dist/components/index.d.ts +0 -46
  285. package/dist/components/index.d.ts.map +0 -1
  286. package/dist/components/page-calendar/calendar-header.d.ts +0 -16
  287. package/dist/components/page-calendar/calendar-header.d.ts.map +0 -1
  288. package/dist/components/page-calendar/day-view.d.ts +0 -12
  289. package/dist/components/page-calendar/day-view.d.ts.map +0 -1
  290. package/dist/components/page-calendar/event-pill.d.ts +0 -9
  291. package/dist/components/page-calendar/event-pill.d.ts.map +0 -1
  292. package/dist/components/page-calendar/index.d.ts +0 -4
  293. package/dist/components/page-calendar/index.d.ts.map +0 -1
  294. package/dist/components/page-calendar/month-view.d.ts +0 -11
  295. package/dist/components/page-calendar/month-view.d.ts.map +0 -1
  296. package/dist/components/page-calendar/page-calendar.d.ts +0 -18
  297. package/dist/components/page-calendar/page-calendar.d.ts.map +0 -1
  298. package/dist/components/page-calendar/page-calendar.types.d.ts +0 -18
  299. package/dist/components/page-calendar/page-calendar.types.d.ts.map +0 -1
  300. package/dist/components/page-calendar/page-calendar.utils.d.ts +0 -24
  301. package/dist/components/page-calendar/page-calendar.utils.d.ts.map +0 -1
  302. package/dist/components/page-calendar/week-view.d.ts +0 -11
  303. package/dist/components/page-calendar/week-view.d.ts.map +0 -1
  304. package/dist/components/table/filter.d.ts +0 -42
  305. package/dist/components/table/filter.d.ts.map +0 -1
  306. package/dist/components/table/group.d.ts +0 -17
  307. package/dist/components/table/group.d.ts.map +0 -1
  308. package/dist/components/table/index.d.ts +0 -20
  309. package/dist/components/table/index.d.ts.map +0 -1
  310. package/dist/components/table/inner-table.d.ts +0 -29
  311. package/dist/components/table/inner-table.d.ts.map +0 -1
  312. package/dist/components/table/metadata.d.ts +0 -4
  313. package/dist/components/table/metadata.d.ts.map +0 -1
  314. package/dist/components/table/pagination.d.ts +0 -3
  315. package/dist/components/table/pagination.d.ts.map +0 -1
  316. package/dist/components/table/row.d.ts +0 -12
  317. package/dist/components/table/row.d.ts.map +0 -1
  318. package/dist/components/table/sort.d.ts +0 -28
  319. package/dist/components/table/sort.d.ts.map +0 -1
  320. package/dist/components/table/table-lib.d.ts +0 -135
  321. package/dist/components/table/table-lib.d.ts.map +0 -1
  322. package/dist/components/table/table.context.d.ts +0 -10
  323. package/dist/components/table/table.context.d.ts.map +0 -1
  324. package/dist/components/table/thead.d.ts +0 -9
  325. package/dist/components/table/thead.d.ts.map +0 -1
  326. package/dist/config/context.d.ts +0 -21
  327. package/dist/config/context.d.ts.map +0 -1
  328. package/dist/config/default-translations.d.ts +0 -90
  329. package/dist/config/default-translations.d.ts.map +0 -1
  330. package/dist/config/default-tweaks.d.ts +0 -13
  331. package/dist/config/default-tweaks.d.ts.map +0 -1
  332. package/dist/constants.d.ts +0 -3
  333. package/dist/constants.d.ts.map +0 -1
  334. package/dist/context-BFXNJVn2.js.map +0 -1
  335. package/dist/date-picker-DwNo22lx.js.map +0 -1
  336. package/dist/dom-Dl8XH0CK.js.map +0 -1
  337. package/dist/file-upload-Brf2NkLr.js.map +0 -1
  338. package/dist/floating-ui.react-QNHG9W4N.js.map +0 -1
  339. package/dist/fns-D2eyJKd5.js.map +0 -1
  340. package/dist/hooks/use-click-outside.d.ts +0 -3
  341. package/dist/hooks/use-click-outside.d.ts.map +0 -1
  342. package/dist/hooks/use-color-parser.d.ts +0 -2
  343. package/dist/hooks/use-color-parser.d.ts.map +0 -1
  344. package/dist/hooks/use-components-provider.d.ts +0 -15
  345. package/dist/hooks/use-components-provider.d.ts.map +0 -1
  346. package/dist/hooks/use-debounce.d.ts +0 -5
  347. package/dist/hooks/use-debounce.d.ts.map +0 -1
  348. package/dist/hooks/use-floating-ref.d.ts +0 -2
  349. package/dist/hooks/use-floating-ref.d.ts.map +0 -1
  350. package/dist/hooks/use-form.d.ts +0 -394
  351. package/dist/hooks/use-form.d.ts.map +0 -1
  352. package/dist/hooks/use-hover.d.ts +0 -3
  353. package/dist/hooks/use-hover.d.ts.map +0 -1
  354. package/dist/hooks/use-input-id.d.ts +0 -4
  355. package/dist/hooks/use-input-id.d.ts.map +0 -1
  356. package/dist/hooks/use-is-coarse-device.d.ts +0 -2
  357. package/dist/hooks/use-is-coarse-device.d.ts.map +0 -1
  358. package/dist/hooks/use-locale.d.ts +0 -3
  359. package/dist/hooks/use-locale.d.ts.map +0 -1
  360. package/dist/hooks/use-media-query.d.ts +0 -2
  361. package/dist/hooks/use-media-query.d.ts.map +0 -1
  362. package/dist/hooks/use-on-event.d.ts +0 -4
  363. package/dist/hooks/use-on-event.d.ts.map +0 -1
  364. package/dist/hooks/use-parent.d.ts +0 -3
  365. package/dist/hooks/use-parent.d.ts.map +0 -1
  366. package/dist/hooks/use-preferences.d.ts +0 -2
  367. package/dist/hooks/use-preferences.d.ts.map +0 -1
  368. package/dist/hooks/use-previous.d.ts +0 -2
  369. package/dist/hooks/use-previous.d.ts.map +0 -1
  370. package/dist/hooks/use-reactive.d.ts +0 -2
  371. package/dist/hooks/use-reactive.d.ts.map +0 -1
  372. package/dist/hooks/use-remove-scroll.d.ts +0 -4
  373. package/dist/hooks/use-remove-scroll.d.ts.map +0 -1
  374. package/dist/hooks/use-resize-observer.d.ts +0 -2
  375. package/dist/hooks/use-resize-observer.d.ts.map +0 -1
  376. package/dist/hooks/use-stable-ref.d.ts +0 -2
  377. package/dist/hooks/use-stable-ref.d.ts.map +0 -1
  378. package/dist/hooks/use-swipe.d.ts +0 -8
  379. package/dist/hooks/use-swipe.d.ts.map +0 -1
  380. package/dist/hooks/use-translations.d.ts +0 -88
  381. package/dist/hooks/use-translations.d.ts.map +0 -1
  382. package/dist/hooks/use-tweaks.d.ts +0 -3
  383. package/dist/hooks/use-tweaks.d.ts.map +0 -1
  384. package/dist/hooks/use-window-size.d.ts +0 -5
  385. package/dist/hooks/use-window-size.d.ts.map +0 -1
  386. package/dist/index-BelDtX5M.js.map +0 -1
  387. package/dist/index-DJSMaZR4.js.map +0 -1
  388. package/dist/index-Z-fZHxfJ.js +0 -335
  389. package/dist/index-Z-fZHxfJ.js.map +0 -1
  390. package/dist/index.d.ts +0 -22
  391. package/dist/index.d.ts.map +0 -1
  392. package/dist/input-CrGrSnUt.js.map +0 -1
  393. package/dist/input-field-5vYcz5tT.js.map +0 -1
  394. package/dist/lib/combi-keys.d.ts +0 -15
  395. package/dist/lib/combi-keys.d.ts.map +0 -1
  396. package/dist/lib/dict.d.ts +0 -12
  397. package/dist/lib/dict.d.ts.map +0 -1
  398. package/dist/lib/dom.d.ts +0 -19
  399. package/dist/lib/dom.d.ts.map +0 -1
  400. package/dist/lib/fns.d.ts +0 -11
  401. package/dist/lib/fns.d.ts.map +0 -1
  402. package/dist/lib/fzf.d.ts +0 -16
  403. package/dist/lib/fzf.d.ts.map +0 -1
  404. package/dist/lib/keyboard-area.d.ts +0 -16
  405. package/dist/lib/keyboard-area.d.ts.map +0 -1
  406. package/dist/notifications-cUdVPs-B.js +0 -2786
  407. package/dist/notifications-cUdVPs-B.js.map +0 -1
  408. package/dist/skeleton-D75GFBV6.js +0 -10
  409. package/dist/skeleton-D75GFBV6.js.map +0 -1
  410. package/dist/tabs-S00a8qq8.js +0 -106
  411. package/dist/tabs-S00a8qq8.js.map +0 -1
  412. package/dist/types.d.ts +0 -26
  413. package/dist/types.d.ts.map +0 -1
  414. package/dist/use-translations-BwLKTrZv.js +0 -10
  415. package/dist/use-translations-BwLKTrZv.js.map +0 -1
@@ -0,0 +1,170 @@
1
+ ---
2
+ title: InputField
3
+ description: Low-level field wrapper that provides a label, tooltip, error message, feedback text, and left/right slots for any form control.
4
+ package: "@g4rcez/components"
5
+ export: "{ InputField }"
6
+ import: "import { InputField } from '@g4rcez/components'"
7
+ category: form
8
+ ---
9
+
10
+ # InputField
11
+
12
+ Low-level field wrapper that provides a label, tooltip, error message, feedback text, and left/right slots for any form control. Most higher-level components (`Input`, `Select`, `Autocomplete`, `DatePicker`, `Textarea`) use `InputField` internally and forward its props automatically.
13
+
14
+ ## Import
15
+
16
+ ```tsx
17
+ import { InputField } from "@g4rcez/components";
18
+ ```
19
+
20
+ ## Props
21
+
22
+ | Prop | Type | Default | Description |
23
+ | ---------------- | ----------------- | ------------ | ------------------------------------------------------------------------ |
24
+ | `title` | `Label` | - | Main label text for the field |
25
+ | `info` | `Label` | - | Informational text shown in a `Tooltip` icon next to the label |
26
+ | `error` | `string` | - | Error message rendered below the field border |
27
+ | `feedback` | `Label` | - | Success or neutral feedback message (hidden when `error` is present) |
28
+ | `left` | `Label` | - | Content rendered to the left inside the field border |
29
+ | `right` | `Label` | - | Content rendered to the right inside the field border |
30
+ | `rightLabel` | `Label` | - | Content rendered to the right of the label text |
31
+ | `required` | `boolean` | `false` | If `true`, hides the "Optional" badge |
32
+ | `optionalText` | `string` | `"Optional"` | Text shown for optional fields (translatable) |
33
+ | `disabled` | `boolean` | `false` | Applies disabled styling to the wrapper and label |
34
+ | `interactive` | `boolean` | `false` | Sets `data-interactive` on the fieldset |
35
+ | `container` | `string` | - | Extra CSS classes for the outer `<fieldset>` |
36
+ | `labelClassName` | `string` | - | Extra CSS classes for the inner label/border wrapper `<div>` |
37
+ | `hiddenLabel` | `boolean` | `false` | Visually hides the label row while keeping it accessible |
38
+ | `reportStatus` | `boolean` | - | Show `CheckCircle`/`XCircle` icons alongside the label based on validity |
39
+ | `componentName` | `string` | - | Sets `data-component` on the fieldset (e.g., `"input"`, `"select"`) |
40
+ | `id` | `string` | - | `id` linked to the inner control via `htmlFor` on the label |
41
+ | `name` | `string` | - | Fallback for `id` when `id` is not provided |
42
+ | `children` | `React.ReactNode` | - | The actual form control (input, select, etc.) |
43
+
44
+ ## Design Tokens
45
+
46
+ Tokens this component reads. Customize by overriding these CSS variables in your theme.
47
+
48
+ | Token | CSS Variable | Purpose |
49
+ | --------------------- | ---------------- | -------------------------------------------------- |
50
+ | `border-input-border` | `--input-border` | Default field border color |
51
+ | `text-field-label` | `--field-label` | Label text color |
52
+ | `text-primary` | `--primary` | Label and border color on focus/hover |
53
+ | `text-danger` | `--danger` | Label, border, and error text color in error state |
54
+ | `text-disabled` | `--disabled` | Label and border color when disabled |
55
+ | `mt-input-gap` | `--input-gap` | Gap between border and error/feedback text |
56
+
57
+ ## Examples
58
+
59
+ ### Wrapping a native input
60
+
61
+ ```tsx
62
+ import { InputField } from "@g4rcez/components";
63
+
64
+ <InputField title="Username" name="username" required>
65
+ <input id="username" name="username" className="h-input-height w-full flex-1 bg-transparent px-input-x text-foreground outline-none" />
66
+ </InputField>;
67
+ ```
68
+
69
+ ### With info tooltip and error
70
+
71
+ ```tsx
72
+ import { MagnifyingGlassIcon, CheckIcon } from "@phosphor-icons/react";
73
+
74
+ <InputField
75
+ title="API Key"
76
+ name="api_key"
77
+ info="Your secret API key from the developer portal."
78
+ error={apiKeyError}
79
+ left={<MagnifyingGlassIcon size={16} className="text-muted-foreground" />}
80
+ right={isValid ? <CheckIcon size={16} className="text-success" /> : null}
81
+ required
82
+ >
83
+ <input
84
+ id="api_key"
85
+ name="api_key"
86
+ type="password"
87
+ className="h-input-height w-full flex-1 bg-transparent px-input-x text-foreground outline-none"
88
+ />
89
+ </InputField>;
90
+ ```
91
+
92
+ ### Optional vs required
93
+
94
+ ```tsx
95
+ {
96
+ /* Required — "Optional" badge is hidden */
97
+ }
98
+ <InputField title="Email" name="email" required>
99
+ <input id="email" name="email" type="email" className="h-input-height w-full flex-1 bg-transparent px-input-x text-foreground outline-none" />
100
+ </InputField>;
101
+
102
+ {
103
+ /* Optional — shows "Optional" badge */
104
+ }
105
+ <InputField title="Website" name="website">
106
+ <input id="website" name="website" type="url" className="h-input-height w-full flex-1 bg-transparent px-input-x text-foreground outline-none" />
107
+ </InputField>;
108
+ ```
109
+
110
+ ### Hidden label (accessible)
111
+
112
+ ```tsx
113
+ <InputField title="Search" name="search" hiddenLabel>
114
+ <input
115
+ id="search"
116
+ name="search"
117
+ placeholder="Search..."
118
+ className="h-input-height w-full flex-1 bg-transparent px-input-x text-foreground outline-none"
119
+ />
120
+ </InputField>
121
+ ```
122
+
123
+ ### Feedback after validation
124
+
125
+ ```tsx
126
+ <InputField
127
+ title="Slug"
128
+ name="slug"
129
+ feedback={isAvailable ? "This slug is available." : undefined}
130
+ error={!isAvailable ? "Slug is already taken." : undefined}
131
+ required
132
+ >
133
+ <input id="slug" name="slug" className="h-input-height w-full flex-1 bg-transparent px-input-x text-foreground outline-none" />
134
+ </InputField>
135
+ ```
136
+
137
+ ## Do
138
+
139
+ - Use `InputField` when building new form controls to ensure consistent label, error, and feedback layout across the application.
140
+ - Always provide a `title` for every field so screen readers can identify the control.
141
+ - Use the `info` prop for fields that need supplemental explanation without cluttering the label.
142
+ - Match the `id` on the inner control to the `name` (or `id`) on `InputField` so the `<label htmlFor>` association works correctly.
143
+
144
+ ## Don't
145
+
146
+ - Don't pass raw Tailwind color classes (`bg-blue-500`, `text-white`, `border-gray-300`) to `InputField` wrappers — use theme props or design tokens instead.
147
+ - Don't use arbitrary Tailwind values (`bg-[#abc]`, `bg-[--my-var]`) — override CSS variables in your `@theme` block instead.
148
+ - Don't use `InputField` for non-form content; it is specifically designed for labeled input controls.
149
+ - Don't skip the `title` prop — omitting it hides the label but may break screen reader associations.
150
+
151
+ ## Accessibility
152
+
153
+ - Renders a `<fieldset>` element as the outer wrapper, with `aria-disabled` when disabled.
154
+ - The inner `<label>` uses `htmlFor` linked to `id` (or `name`) to associate with the control.
155
+ - Error messages render as a `<p>` below the field; they are shown after the user interacts with the input (`data-initialized="true"`) or when `error` is set explicitly.
156
+ - Feedback messages render as a separate `<p>` and are hidden when an error is present.
157
+ - The `info` tooltip uses `Tooltip` with `aria-label` / `aria-describedby` for screen reader support.
158
+ - `reportStatus` icons use `aria-hidden="true"` since they are supplemental visual indicators.
159
+
160
+ ## Data Attributes
161
+
162
+ - `data-component` — reflects the `componentName` prop (e.g., `"input"`, `"select"`, `"autocomplete"`).
163
+ - `data-error` — `"true"` when an `error` string is present; drives CSS group variants.
164
+ - `data-interactive` — `"true"` when `interactive` is set; used for custom interactive state styling.
165
+
166
+ ## Notes
167
+
168
+ - `InputField` uses Tailwind `group` classes to synchronize hover and focus states between the outer wrapper and inner elements. The `group-focus-within:border-primary` and `group-hover:border-primary` patterns rely on this.
169
+ - The optional text label ("Optional") is sourced from the translation system via `useTranslations`, making it localizable.
170
+ - `reportStatus` defaults to the value configured in `useTweaks().input.iconFeedback`, allowing a global default.
@@ -0,0 +1,208 @@
1
+ ---
2
+ title: List
3
+ description: Animated list that expands each item into a focused floating detail overlay when clicked.
4
+ package: "@g4rcez/components"
5
+ export: "{ AnimatedList, AnimatedListItem }"
6
+ import: "import { AnimatedList, AnimatedListItem } from '@g4rcez/components/list'"
7
+ category: display
8
+ ---
9
+
10
+ # List
11
+
12
+ Animated list that expands each item into a focused floating detail overlay when clicked.
13
+
14
+ `AnimatedList` and `AnimatedListItem` are exported from the `@g4rcez/components/list` subpath. Each row in the list is clickable; selecting a row opens a `motion/react`-animated card overlay with the item's full content.
15
+
16
+ ## Import
17
+
18
+ ```tsx
19
+ import { AnimatedList, AnimatedListItem } from "@g4rcez/components/list";
20
+ ```
21
+
22
+ ## Props
23
+
24
+ ### AnimatedList
25
+
26
+ | Prop | Type | Default | Description |
27
+ | ---------- | ----------------- | ------- | ---------------------------------------- |
28
+ | `children` | `React.ReactNode` | — | One or more `AnimatedListItem` elements. |
29
+
30
+ ### AnimatedListItem
31
+
32
+ | Prop | Type | Default | Description |
33
+ | ------------- | -------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------- |
34
+ | `title` | `Label` | — | Primary heading shown in the list row and in the overlay header. |
35
+ | `description` | `Label` | — | Secondary text rendered below the title in both the row and the overlay. |
36
+ | `children` | `Label` | — | Content rendered inside the expanded overlay below the header section. |
37
+ | `avatar` | `Label` | — | Optional leading node (image, icon, or element) displayed before the title in the row. |
38
+ | `leading` | `React.FC<{ open: () => void }>` | — | Optional render-prop component at the trailing end of the row. Receives an `open` callback to open the overlay programmatically. |
39
+
40
+ `Label` is `string | number | ReactNode`.
41
+
42
+ ## Design Tokens
43
+
44
+ Tokens this component reads. Customize by overriding these CSS variables in your theme.
45
+
46
+ | Token | CSS Variable | Purpose |
47
+ | --------------------- | -------------------- | ------------------------------------------------------------------- |
48
+ | `border-card-border` | `--card-border` | Row separator and overlay card border |
49
+ | `bg-card-background` | `--card-background` | Overlay card background color |
50
+ | `rounded-card` | `--radius-card` | Overlay card corner radius |
51
+ | `shadow-shadow-card` | `--shadow-card` | Overlay card drop shadow |
52
+ | `text-foreground` | `--foreground` | Default text color for row and overlay content |
53
+ | `text-secondary` | `--secondary` | Description text color |
54
+ | `text-primary` | `--primary` | Row title hover color and avatar focus ring |
55
+ | `text-danger` | `--danger` | Close button hover color in the overlay |
56
+ | `bg-floating-overlay` | `--floating-overlay` | Semi-transparent backdrop behind the overlay (used at 70 % opacity) |
57
+ | `z-floating` | `--z-floating` | `z-index` for the overlay card (value: 22) |
58
+ | `z-overlay` | `--z-overlay` | `z-index` for the backdrop scrim |
59
+
60
+ ## Examples
61
+
62
+ ### Basic usage
63
+
64
+ ```tsx
65
+ import { AnimatedList, AnimatedListItem } from "@g4rcez/components/list";
66
+
67
+ const members = [
68
+ { id: "1", name: "Alice Johnson", role: "Engineering" },
69
+ { id: "2", name: "Bob Smith", role: "Design" },
70
+ ];
71
+
72
+ export function TeamList() {
73
+ return (
74
+ <AnimatedList>
75
+ {members.map((m) => (
76
+ <AnimatedListItem key={m.id} title={m.name} description={m.role}>
77
+ <p className="text-foreground">Full profile for {m.name}.</p>
78
+ </AnimatedListItem>
79
+ ))}
80
+ </AnimatedList>
81
+ );
82
+ }
83
+ ```
84
+
85
+ ### With avatar
86
+
87
+ ```tsx
88
+ import { AnimatedList, AnimatedListItem } from "@g4rcez/components/list";
89
+ import { UserCircleIcon } from "@phosphor-icons/react";
90
+
91
+ export function UserDirectory() {
92
+ return (
93
+ <AnimatedList>
94
+ <AnimatedListItem
95
+ title="Carol White"
96
+ description="Product Manager"
97
+ avatar={<UserCircleIcon size={40} className="text-muted-foreground" />}
98
+ >
99
+ <div className="flex flex-col gap-2 text-foreground">
100
+ <span>Department: Product</span>
101
+ <span>Location: San Francisco</span>
102
+ </div>
103
+ </AnimatedListItem>
104
+ </AnimatedList>
105
+ );
106
+ }
107
+ ```
108
+
109
+ ### With trailing action using `leading`
110
+
111
+ ```tsx
112
+ import { AnimatedList, AnimatedListItem } from "@g4rcez/components/list";
113
+ import { Button } from "@g4rcez/components/button";
114
+
115
+ export function OrderList({ orders }: { orders: Order[] }) {
116
+ return (
117
+ <AnimatedList>
118
+ {orders.map((order) => (
119
+ <AnimatedListItem
120
+ key={order.id}
121
+ title={`Order #${order.id}`}
122
+ description={`Total: ${order.total}`}
123
+ leading={({ open }) => (
124
+ <Button size="small" theme="ghost-muted" onClick={open}>
125
+ View details
126
+ </Button>
127
+ )}
128
+ >
129
+ <OrderDetailContent order={order} />
130
+ </AnimatedListItem>
131
+ ))}
132
+ </AnimatedList>
133
+ );
134
+ }
135
+ ```
136
+
137
+ ### Notification / activity feed
138
+
139
+ ```tsx
140
+ import { AnimatedList, AnimatedListItem } from "@g4rcez/components/list";
141
+ import { CheckCircleIcon, WarningIcon } from "@phosphor-icons/react";
142
+
143
+ const feed = [
144
+ {
145
+ id: "n1",
146
+ icon: <CheckCircleIcon size={20} className="text-success" />,
147
+ title: "Deployment succeeded",
148
+ time: "2 min ago",
149
+ detail: "All 3 services are healthy.",
150
+ },
151
+ {
152
+ id: "n2",
153
+ icon: <WarningIcon size={20} className="text-warn" />,
154
+ title: "High CPU usage",
155
+ time: "10 min ago",
156
+ detail: "Instance i-0ab2 is at 94 %.",
157
+ },
158
+ ];
159
+
160
+ export function NotificationFeed() {
161
+ return (
162
+ <AnimatedList>
163
+ {feed.map((n) => (
164
+ <AnimatedListItem key={n.id} title={n.title} description={n.time} avatar={n.icon}>
165
+ <p className="text-sm text-muted-foreground">{n.detail}</p>
166
+ </AnimatedListItem>
167
+ ))}
168
+ </AnimatedList>
169
+ );
170
+ }
171
+ ```
172
+
173
+ ## Do
174
+
175
+ - Keep `title` and `description` short — they share a single row and are not truncated automatically.
176
+ - Provide meaningful `children` content in the overlay to justify clicking the row.
177
+ - Use `leading` to expose a primary call-to-action alongside the title without forcing the user to open the overlay.
178
+ - Use design-token classes inside the overlay content (`bg-card-background`, `text-foreground`, `border-card-border`).
179
+
180
+ ## Don't
181
+
182
+ - Don't pass raw Tailwind color classes (`bg-blue-500`, `text-white`, `border-gray-300`) — use design tokens instead.
183
+ - Don't use arbitrary Tailwind values (`bg-[#abc]`, `bg-[--my-var]`) — override CSS variables in your `@theme` block instead.
184
+ - Don't use this component for purely informational lists where no detail overlay is needed — use a plain `<ul>` instead.
185
+ - Don't embed full applications or heavy forms inside the overlay `children`; use a `Modal` for complex workflows.
186
+ - Don't render `AnimatedListItem` outside of `AnimatedList` — the item component returns a `Fragment` and relies entirely on the parent list for rendering.
187
+
188
+ ## Accessibility
189
+
190
+ - The list renders as `<ul role="list">`.
191
+ - Each row title/description area is a `<button>`, making it keyboard focusable and activatable with `Enter` or `Space`.
192
+ - The overlay uses `FloatingFocusManager` to trap focus and `FloatingOverlay` with `lockScroll` to block background interaction.
193
+ - Pressing `Escape`, clicking outside, or clicking the close button dismisses the overlay.
194
+ - The close button inside the overlay is a focusable `<button>` with an `XIcon`.
195
+ - `MotionConfig reducedMotion="user"` honours the system-level reduced-motion preference, disabling animations when requested.
196
+
197
+ ## Data Attributes
198
+
199
+ - `layoutId="item-{id}"` — shared between the list row `<li>` and the overlay card `<motion.div>` to drive the shared-element expand/collapse animation.
200
+ - `layoutId="toast-{id}"` — inner content wrapper for coordinated layout transitions.
201
+
202
+ ## Notes
203
+
204
+ - Only one item can be open at a time; selecting a new item dismisses the previous overlay automatically.
205
+ - `AnimatedListItem` is a shell — it returns a `Fragment` directly and holds no state. All rendering logic lives inside `AnimatedList`, which reads child props via `React.Children.toArray`.
206
+ - The overlay is rendered in a `FloatingPortal` (outside the DOM tree) to avoid stacking-context or overflow clipping issues.
207
+ - Animations use `motion/react` shared-layout (`layoutId`) so the item card expands smoothly from its row position to the center of the viewport.
208
+ - The animation transition is `tween` with a 0.3 s duration; `stiffness` is set low (25) for a relaxed feel.
@@ -0,0 +1,168 @@
1
+ ---
2
+ title: Menu
3
+ description: Accessible floating menu system with nested submenus, keyboard navigation, hover support, and typeahead.
4
+ package: "@g4rcez/components"
5
+ export: "{ Menu, MenuItem }"
6
+ import: "import { Menu, MenuItem } from '@g4rcez/components/menu'"
7
+ category: floating
8
+ ---
9
+
10
+ # Menu
11
+
12
+ Accessible floating menu system with nested submenus, keyboard navigation, hover support, and typeahead.
13
+
14
+ ## Import
15
+
16
+ ```tsx
17
+ import { Menu, MenuItem } from "@g4rcez/components/menu";
18
+ ```
19
+
20
+ ## Props
21
+
22
+ ### Menu
23
+
24
+ | Prop | Type | Default | Description |
25
+ | ------------------- | ------------------------------ | ------- | ----------------------------------------------------------------------------------------------- |
26
+ | `label` | `string \| React.ReactElement` | — | Trigger content |
27
+ | `title` | `string` | — | Required for accessibility when `label` is an element; also used for typeahead |
28
+ | `hover` | `boolean` | `true` | Open on hover in addition to click |
29
+ | `open` | `boolean` | `false` | Initial open state |
30
+ | `asChild` | `boolean` | `false` | Use the `Slot` pattern — merge props onto the child element instead of wrapping in a `<button>` |
31
+ | `restoreFocus` | `boolean` | `false` | Restore focus to the trigger after the menu closes |
32
+ | `floatingClassName` | `string` | — | Additional CSS classes for the floating list container |
33
+ | `FloatingComponent` | `React.ElementType` | `"div"` | Element type for the floating container |
34
+
35
+ ### MenuItem
36
+
37
+ | Prop | Type | Default | Description |
38
+ | ---------- | --------------------- | ------- | ---------------------------------------------------------------- |
39
+ | `title` | `string` | — | Item text; used for typeahead matching and the `title` attribute |
40
+ | `children` | `React.ReactNode` | — | Visual content of the item |
41
+ | `disabled` | `boolean` | `false` | Removes item from keyboard navigation and typeahead |
42
+ | `Right` | `React.FC<IconProps>` | — | Icon rendered on the right side |
43
+ | `onClick` | `function` | — | Click handler |
44
+
45
+ ## Design Tokens
46
+
47
+ Tokens this component reads. Customize by overriding these CSS variables in your theme.
48
+
49
+ | Token | CSS Variable | Purpose |
50
+ | ------------------------- | ----------------------- | ------------------------------ |
51
+ | `bg-floating-background` | `--floating-background` | Menu list surface background |
52
+ | `border-floating-border` | `--floating-border` | Menu list border |
53
+ | `shadow-shadow-floating` | `--shadow-floating` | Menu list drop shadow |
54
+ | `z-tooltip` | `--z-tooltip` | Z-index of the floating list |
55
+ | `bg-primary` | `--primary` | Active/focused item background |
56
+ | `text-primary-foreground` | `--primary-foreground` | Active/focused item text |
57
+
58
+ ## Examples
59
+
60
+ ### Basic Menu
61
+
62
+ ```tsx
63
+ import { Menu, MenuItem } from "@g4rcez/components/menu";
64
+
65
+ <Menu label="Actions">
66
+ <MenuItem title="Edit">Edit Profile</MenuItem>
67
+ <MenuItem title="Share">Share Profile</MenuItem>
68
+ </Menu>;
69
+ ```
70
+
71
+ ### With Icons and Shortcuts
72
+
73
+ ```tsx
74
+ import { PencilSimpleIcon, TrashIcon } from "@phosphor-icons/react";
75
+ import { Menu, MenuItem } from "@g4rcez/components/menu";
76
+
77
+ <Menu label="Settings">
78
+ <MenuItem title="Edit" Right={PencilSimpleIcon}>
79
+ Edit
80
+ </MenuItem>
81
+ <MenuItem title="Delete" Right={TrashIcon} className="text-danger">
82
+ Delete
83
+ </MenuItem>
84
+ </Menu>;
85
+ ```
86
+
87
+ ### Nested Submenus
88
+
89
+ ```tsx
90
+ import { Menu, MenuItem } from "@g4rcez/components/menu";
91
+
92
+ <Menu label="Actions">
93
+ <MenuItem title="Edit">Edit Profile</MenuItem>
94
+ <MenuItem title="Share">Share Profile</MenuItem>
95
+ <Menu label="More Options" title="More Options">
96
+ <MenuItem title="Archive">Archive Account</MenuItem>
97
+ <MenuItem title="Delete" className="text-danger">
98
+ Delete Account
99
+ </MenuItem>
100
+ </Menu>
101
+ </Menu>;
102
+ ```
103
+
104
+ ### Using asChild for Custom Triggers
105
+
106
+ ```tsx
107
+ import { Menu, MenuItem } from "@g4rcez/components/menu";
108
+ import { Button } from "@g4rcez/components/button";
109
+
110
+ <Menu label={<Button theme="primary">Main Action</Button>} asChild title="Main Action">
111
+ <MenuItem title="Save">Save Version</MenuItem>
112
+ <MenuItem title="Publish">Publish Now</MenuItem>
113
+ </Menu>;
114
+ ```
115
+
116
+ ### Disabled Items
117
+
118
+ ```tsx
119
+ import { Menu, MenuItem } from "@g4rcez/components/menu";
120
+
121
+ <Menu label="Options">
122
+ <MenuItem title="Export">Export Data</MenuItem>
123
+ <MenuItem title="Import" disabled>
124
+ Import (unavailable)
125
+ </MenuItem>
126
+ <MenuItem title="Delete" className="text-danger">
127
+ Delete
128
+ </MenuItem>
129
+ </Menu>;
130
+ ```
131
+
132
+ ## Do
133
+
134
+ - Provide a `title` string whenever `label` is a React element — it enables typeahead and improves accessibility.
135
+ - Use nested `Menu` components (not just `MenuItem`) for logical groupings of secondary actions.
136
+ - Use `disabled` for actions temporarily unavailable, so users know the option exists.
137
+ - Use design-token classes (`text-danger`, `text-foreground`) for item text colors.
138
+
139
+ ## Don't
140
+
141
+ - Don't make menus deeper than 2–3 levels — deeply nested submenus are hard to navigate.
142
+ - Don't use raw Tailwind color classes (`text-red-600`, `hover:bg-gray-100`) on items — use design-token classes.
143
+ - Don't use arbitrary Tailwind values (`bg-[#abc]`) — override CSS variables in your `@theme` block.
144
+ - Don't use `Menu` for primary navigation that should be crawlable — use standard `<a>` links instead.
145
+
146
+ ## Accessibility
147
+
148
+ - Full keyboard navigation: arrow keys navigate items, `Enter`/`Space` select, `Escape` closes.
149
+ - Typeahead: typing the first characters of an item's `title` focuses it instantly (resets after inactivity).
150
+ - Correct ARIA roles: `menu` on the container, `menuitem` on each item, `aria-expanded` on nested triggers.
151
+ - `data-active` marks the currently focused item for CSS styling.
152
+ - `FloatingFocusManager` handles focus trapping and restoration.
153
+
154
+ ## Data Attributes
155
+
156
+ | Attribute | Applied to | Description |
157
+ | ------------------- | ---------------------- | -------------------------------------------- |
158
+ | `data-open` | Menu trigger, MenuItem | Present when the menu/item is open |
159
+ | `data-nested` | Nested menu trigger | Present on triggers that open a submenu |
160
+ | `data-focus-inside` | Menu trigger | Present when focus is inside an open submenu |
161
+ | `data-active` | MenuItem | Present on the currently focused item |
162
+
163
+ ## Notes
164
+
165
+ - The root `Menu` wraps itself in a `FloatingTree`; nested `Menu` components detect this via `useFloatingParentNodeId` and behave as submenus.
166
+ - Hover delay is controlled by the `FLOATING_DELAY` constant. The safe-polygon handler keeps the menu open while the pointer moves toward the submenu.
167
+ - When `hover` is `false`, the menu opens only on click.
168
+ - The floating container default `max-h-80` prevents the list from growing taller than the viewport.