@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,178 @@
1
+ ---
2
+ title: Card
3
+ description: Polymorphic container for grouping related content with optional title header, loading state, and composable sub-components.
4
+ package: "@g4rcez/components"
5
+ export: "{ Card }"
6
+ import: "import { Card } from '@g4rcez/components/card'"
7
+ category: display
8
+ ---
9
+
10
+ # Card
11
+
12
+ Polymorphic container for grouping related content with optional title header, loading state, and composable sub-components.
13
+
14
+ ## Import
15
+
16
+ ```tsx
17
+ import { Card } from "@g4rcez/components/card";
18
+ ```
19
+
20
+ ## Props
21
+
22
+ ### Card
23
+
24
+ | Prop | Type | Default | Description |
25
+ | ---------------- | ---------------------------- | ------- | ------------------------------------------------- |
26
+ | `title` | `React.ReactNode` | — | Renders an automatic header with border separator |
27
+ | `loading` | `boolean` | — | Replaces content with animated skeleton lines |
28
+ | `titleClassName` | `string` | `""` | Additional classes for the title header element |
29
+ | `header` | `React.ReactElement \| null` | `null` | Custom header element; overrides `title` |
30
+ | `container` | `string` | `""` | Additional classes for the outer card element |
31
+ | `as` | `React.ElementType` | `"div"` | Polymorphic root element |
32
+ | `className` | `string` | `""` | Additional classes for the card body element |
33
+ | `children` | `React.ReactNode` | — | Card body content |
34
+
35
+ ### Card.Title
36
+
37
+ A composable header with a title and an optional navigation/action area.
38
+
39
+ | Prop | Type | Default | Description |
40
+ | ---------- | ------------------------------ | ------- | ----------------------------------------------- |
41
+ | `title` | `React.ReactElement \| string` | — | Title content |
42
+ | `titleTag` | `React.ElementType` | `"h2"` | Element type for the title |
43
+ | `navTag` | `React.ElementType` | `"nav"` | Element type for the actions wrapper |
44
+ | `as` | `React.ElementType` | `"div"` | Element type for the container |
45
+ | `children` | `React.ReactNode` | — | Action elements rendered in the navigation area |
46
+
47
+ ## Design Tokens
48
+
49
+ Tokens this component reads. Customize by overriding these CSS variables in your theme.
50
+
51
+ | Token | CSS Variable | Purpose |
52
+ | -------------------- | ------------------- | ------------------------------- |
53
+ | `bg-card-background` | `--card-background` | Card surface color |
54
+ | `border-card-border` | `--card-border` | Card border and title separator |
55
+ | `rounded-card` | `--radius-card` | Corner radius |
56
+ | `shadow-shadow-card` | `--shadow-card` | Card drop shadow |
57
+ | `bg-muted` | `--muted` | Skeleton loading lines |
58
+
59
+ ## Examples
60
+
61
+ ### Basic Card
62
+
63
+ ```tsx
64
+ <Card>
65
+ <p>Card content goes here.</p>
66
+ </Card>
67
+ ```
68
+
69
+ ### Card with Title
70
+
71
+ ```tsx
72
+ <Card title="User Profile">
73
+ <div className="space-y-4">
74
+ <p>Name: John Doe</p>
75
+ <p>Email: john@example.com</p>
76
+ </div>
77
+ </Card>
78
+ ```
79
+
80
+ ### Card with Loading State
81
+
82
+ ```tsx
83
+ <Card title="Analytics" loading={isLoading}>
84
+ <p>Loaded content rendered here when not loading.</p>
85
+ </Card>
86
+ ```
87
+
88
+ ### Card.Title with Actions
89
+
90
+ ```tsx
91
+ import { Button } from "@g4rcez/components/button";
92
+
93
+ <Card>
94
+ <Card.Title title="Project Overview">
95
+ <Button theme="primary" size="small">
96
+ Edit
97
+ </Button>
98
+ <Button theme="neutral" size="small">
99
+ Share
100
+ </Button>
101
+ </Card.Title>
102
+
103
+ <p>Project description and details.</p>
104
+ </Card>;
105
+ ```
106
+
107
+ ### Custom Header
108
+
109
+ ```tsx
110
+ <Card
111
+ header={
112
+ <header className="flex justify-between items-center p-4 border-b border-card-border">
113
+ <h2 className="text-foreground font-semibold">Custom Header</h2>
114
+ </header>
115
+ }
116
+ >
117
+ <p>Content with a completely custom header.</p>
118
+ </Card>
119
+ ```
120
+
121
+ ### Nested Cards
122
+
123
+ ```tsx
124
+ <Card title="Dashboard">
125
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
126
+ <Card title="Statistics">
127
+ <p>Chart content here</p>
128
+ </Card>
129
+ <Card title="Recent Activity">
130
+ <ul>
131
+ <li>User logged in</li>
132
+ <li>New order received</li>
133
+ </ul>
134
+ </Card>
135
+ </div>
136
+ </Card>
137
+ ```
138
+
139
+ ### Semantic Element
140
+
141
+ ```tsx
142
+ <Card as="article" title="Blog Post">
143
+ <p>Blog post content.</p>
144
+ </Card>
145
+ ```
146
+
147
+ ## Do
148
+
149
+ - Use `title` or `Card.Title` to give cards a clear, descriptive heading.
150
+ - Use `as="article"` or `as="section"` when semantics matter.
151
+ - Use `loading={true}` while data is fetching to prevent layout shift.
152
+ - Maintain consistent spacing between multiple cards in a grid using gap utilities.
153
+ - Use design-token classes for wrapper elements (`bg-background`, `border-border`).
154
+
155
+ ## Don't
156
+
157
+ - Don't pass raw Tailwind color classes (`bg-blue-500`, `text-white`, `border-gray-300`) — use design tokens instead.
158
+ - Don't use arbitrary Tailwind values (`bg-[#abc]`, `bg-[--my-var]`) — override CSS variables in your `@theme` block instead.
159
+ - Don't over-nest cards; multiple borders and shadows create visual clutter.
160
+ - Don't put more than one primary action in a single `Card.Title` — keep actions focused.
161
+
162
+ ## Accessibility
163
+
164
+ - Uses semantic HTML; `Card.Title` renders an `h2` by default (configurable via `titleTag`).
165
+ - Polymorphic `as` prop allows correct element type for document structure.
166
+ - Interactive elements within cards remain keyboard accessible.
167
+
168
+ ## Data Attributes
169
+
170
+ - `data-component="card"` — outer card element.
171
+ - `data-component="card-title"` — automatic title header.
172
+ - `data-component="card-body"` — card body wrapper.
173
+
174
+ ## Notes
175
+
176
+ - When both `title` and `header` are provided, `title` takes precedence and `header` is ignored.
177
+ - The `loading` prop replaces children with four `Skeleton` lines of varying widths.
178
+ - `Card.Title` lays out title and actions responsively: stacked on mobile, inline on `sm+`.
@@ -0,0 +1,194 @@
1
+ ---
2
+ title: Checkbox
3
+ description: Styled checkbox with label support, task mode, error display, loading state, and size variants.
4
+ package: "@g4rcez/components"
5
+ export: "{ Checkbox }"
6
+ import: "import { Checkbox } from '@g4rcez/components/checkbox'"
7
+ category: form
8
+ ---
9
+
10
+ # Checkbox
11
+
12
+ Styled checkbox with label support, task mode, error display, loading state, and size variants.
13
+
14
+ ## Import
15
+
16
+ ```tsx
17
+ import { Checkbox } from "@g4rcez/components/checkbox";
18
+ ```
19
+
20
+ ## Props
21
+
22
+ | Prop | Type | Default | Description |
23
+ | ---------------- | -------------------------------------------------- | ---------- | ---------------------------------------------------------- |
24
+ | `checked` | `boolean` | - | Controlled checked state |
25
+ | `onChange` | `(e: React.ChangeEvent<HTMLInputElement>) => void` | - | Change handler |
26
+ | `disabled` | `boolean` | `false` | Disabled state |
27
+ | `loading` | `boolean` | `false` | Loading state — disables the checkbox while loading |
28
+ | `error` | `string` | - | Error message rendered below the label |
29
+ | `asTask` | `boolean` | `false` | Task mode: applies strikethrough to the label when checked |
30
+ | `size` | `"medium" \| "large"` | `"medium"` | Checkbox size |
31
+ | `container` | `string` | - | Extra CSS classes for the outer `<label>` wrapper |
32
+ | `labelClassName` | `string` | - | Extra CSS classes for the error text element |
33
+ | `className` | `string` | - | Extra CSS classes for the `<input>` element |
34
+ | `children` | `React.ReactNode` | - | Label content |
35
+ | `...props` | `React.InputHTMLAttributes<HTMLInputElement>` | - | All standard input attributes |
36
+
37
+ ## Design Tokens
38
+
39
+ Tokens this component reads. Customize by overriding these CSS variables in your theme.
40
+
41
+ | Token | CSS Variable | Purpose |
42
+ | -------------------- | --------------- | ------------------------------------ |
43
+ | `text-primary` | `--primary` | Checkbox accent / checked color |
44
+ | `border-card-border` | `--card-border` | Unchecked border color |
45
+ | `text-danger` | `--danger` | Error message text color |
46
+ | `text-disabled` | `--disabled` | Opacity and cursor on disabled state |
47
+ | `focus:ring-primary` | `--primary` | Focus ring color |
48
+
49
+ ## Variants
50
+
51
+ ### Size
52
+
53
+ | Value | Description |
54
+ | ---------- | ------------------------------------- |
55
+ | `"medium"` | Default size — 1rem × 1rem (`size-4`) |
56
+ | `"large"` | Larger touch target |
57
+
58
+ ### Task mode
59
+
60
+ When `asTask={true}`, the label text receives a strikethrough style when the checkbox is checked. This is intended for to-do lists and task management UIs.
61
+
62
+ ## Examples
63
+
64
+ ### Basic checkbox
65
+
66
+ ```tsx
67
+ const [accepted, setAccepted] = useState(false);
68
+
69
+ <Checkbox checked={accepted} onChange={(e) => setAccepted(e.target.checked)}>
70
+ I accept the terms and conditions
71
+ </Checkbox>;
72
+ ```
73
+
74
+ ### Checkbox with error
75
+
76
+ ```tsx
77
+ const [agreed, setAgreed] = useState(false);
78
+ const [error, setError] = useState("");
79
+
80
+ <Checkbox
81
+ checked={agreed}
82
+ onChange={(e) => {
83
+ setAgreed(e.target.checked);
84
+ if (e.target.checked) setError("");
85
+ }}
86
+ error={error}
87
+ >
88
+ I agree to the privacy policy
89
+ </Checkbox>;
90
+ ```
91
+
92
+ ### Task list
93
+
94
+ ```tsx
95
+ const [tasks, setTasks] = useState([
96
+ { id: 1, text: "Write release notes", done: false },
97
+ { id: 2, text: "Merge pull request", done: true },
98
+ ]);
99
+
100
+ <div className="flex flex-col gap-sm">
101
+ {tasks.map((task) => (
102
+ <Checkbox
103
+ key={task.id}
104
+ checked={task.done}
105
+ onChange={() => setTasks((prev) => prev.map((t) => (t.id === task.id ? { ...t, done: !t.done } : t)))}
106
+ asTask
107
+ >
108
+ {task.text}
109
+ </Checkbox>
110
+ ))}
111
+ </div>;
112
+ ```
113
+
114
+ ### Loading state
115
+
116
+ ```tsx
117
+ const [loading, setLoading] = useState(false);
118
+ const [subscribed, setSubscribed] = useState(false);
119
+
120
+ const handleChange = async (checked: boolean) => {
121
+ setLoading(true);
122
+ await updateSubscription(checked);
123
+ setSubscribed(checked);
124
+ setLoading(false);
125
+ };
126
+
127
+ <Checkbox checked={subscribed} onChange={(e) => handleChange(e.target.checked)} loading={loading}>
128
+ Subscribe to newsletter
129
+ </Checkbox>;
130
+ ```
131
+
132
+ ### Notification preferences form
133
+
134
+ ```tsx
135
+ function PreferencesForm() {
136
+ const [prefs, setPrefs] = useState({
137
+ email: false,
138
+ push: true,
139
+ sms: false,
140
+ });
141
+
142
+ const toggle = (key: keyof typeof prefs) => (e: React.ChangeEvent<HTMLInputElement>) =>
143
+ setPrefs((prev) => ({ ...prev, [key]: e.target.checked }));
144
+
145
+ return (
146
+ <form className="flex flex-col gap-sm">
147
+ <Checkbox checked={prefs.email} onChange={toggle("email")}>
148
+ Email notifications
149
+ </Checkbox>
150
+ <Checkbox checked={prefs.push} onChange={toggle("push")}>
151
+ Push notifications
152
+ </Checkbox>
153
+ <Checkbox checked={prefs.sms} onChange={toggle("sms")}>
154
+ SMS notifications
155
+ </Checkbox>
156
+ </form>
157
+ );
158
+ }
159
+ ```
160
+
161
+ ## Do
162
+
163
+ - Use descriptive, actionable labels so users know exactly what they are agreeing to or enabling.
164
+ - Group related checkboxes visually to signal they form a set.
165
+ - Use `asTask` for items in a to-do list or task-tracking UI.
166
+ - Provide an `error` message when the checkbox is part of required validation (e.g., accepting terms).
167
+
168
+ ## Don't
169
+
170
+ - Don't pass raw Tailwind color classes (`bg-blue-500`, `text-white`, `border-gray-300`) — use theme props or design tokens instead.
171
+ - Don't use arbitrary Tailwind values (`bg-[#abc]`, `bg-[--my-var]`) — override CSS variables in your `@theme` block instead.
172
+ - Don't use `Checkbox` to trigger an immediate action — use a `Button` or `Switch` instead.
173
+ - Don't use checkboxes for mutually exclusive choices — use `Radiobox` instead.
174
+
175
+ ## Accessibility
176
+
177
+ - Renders a native `<input type="checkbox">` for full browser and screen reader support.
178
+ - The outer `<label>` wraps both the input and the label text, so clicking anywhere on the label toggles the checkbox.
179
+ - `aria-disabled` and `data-disabled` are applied when `disabled` or `loading` is true.
180
+ - Error messages are rendered as visible text below the label and are discoverable by screen readers.
181
+ - Focus ring is visible for keyboard navigation.
182
+
183
+ ## Data Attributes
184
+
185
+ - `data-component="checkbox"` — on the outer `<label>`.
186
+ - `data-task` — reflects the `asTask` prop value.
187
+ - `data-disabled` — reflects the effective disabled state (`disabled || loading`).
188
+ - `data-name="checkbox-label"` — on the error text `<span>`.
189
+
190
+ ## Notes
191
+
192
+ - `loading` sets `disabled` on the underlying input. The two states share the same visual treatment.
193
+ - The component forwards its ref to the `<input>` element.
194
+ - All standard `HTMLInputElement` attributes are forwarded to the native input, so you can use `name`, `value`, `required`, `defaultChecked`, and so on.
@@ -0,0 +1,275 @@
1
+ ---
2
+ title: CommandPalette
3
+ description: Searchable command palette with fuzzy search, keyboard shortcuts, and grouped commands.
4
+ package: "@g4rcez/components"
5
+ export: "{ CommandPalette }"
6
+ import: "import { CommandPalette } from '@g4rcez/components'"
7
+ category: floating
8
+ ---
9
+
10
+ # CommandPalette
11
+
12
+ Searchable command palette with fuzzy search, keyboard shortcuts, and grouped commands.
13
+
14
+ ## Import
15
+
16
+ ```tsx
17
+ import { CommandPalette } from "@g4rcez/components";
18
+ ```
19
+
20
+ ## Props
21
+
22
+ | Prop | Type | Default | Description |
23
+ | -------------------- | ---------------------------------------------------------------------- | ----------- | ---------------------------------------------- |
24
+ | `open` | `boolean` | — | Controlled open state |
25
+ | `commands` | `CommandItemTypes[]` | — | Array of commands to display |
26
+ | `onChangeVisibility` | `(next: boolean) => void` | — | Open/close handler |
27
+ | `bind` | `string` | `"Mod + k"` | Global keyboard shortcut to open the palette |
28
+ | `loading` | `boolean` | `false` | Show loading skeleton while commands load |
29
+ | `emptyMessage` | `Label` | — | Message shown when no results match |
30
+ | `footer` | `React.ReactElement` | — | Custom footer content |
31
+ | `onChangeText` | `(text: string) => void` | — | Search text change handler |
32
+ | `Preview` | `React.FC<{ command: CommandItemTypes; text: string }>` | — | Preview panel component for the active command |
33
+ | `Icon` | `React.FC<IconProps & { text: string; Default: React.FC<IconProps> }>` | — | Custom search icon |
34
+
35
+ ## Command Types
36
+
37
+ ### CommandShortcutItem
38
+
39
+ ```tsx
40
+ type CommandShortcutItem = {
41
+ type: "shortcut";
42
+ title: string | ((props: { text: string }) => string);
43
+ hint?: string | string[];
44
+ shortcut?: string;
45
+ Icon?: React.ReactElement;
46
+ enabled?: boolean | ((props: { text: string }) => boolean);
47
+ action: (args: {
48
+ text: string;
49
+ setText: (state: string) => void;
50
+ setOpen: (state: boolean) => void;
51
+ event: KeyboardEvent | React.MouseEvent | React.KeyboardEvent;
52
+ }) => void | Promise<void>;
53
+ };
54
+ ```
55
+
56
+ ### CommandGroupItem
57
+
58
+ ```tsx
59
+ type CommandGroupItem = {
60
+ type: "group";
61
+ title: string | ((props: { text: string }) => string);
62
+ items: CommandItemTypes[];
63
+ };
64
+ ```
65
+
66
+ ## Design Tokens
67
+
68
+ Tokens this component reads. Customize by overriding these CSS variables in your theme.
69
+
70
+ | Token | CSS Variable | Purpose |
71
+ | ------------------------ | ----------------------- | -------------------------------------- |
72
+ | `bg-floating-background` | `--floating-background` | Palette surface background |
73
+ | `border-floating-border` | `--floating-border` | Palette surface border |
74
+ | `bg-floating-hover` | `--floating-hover` | Hovered/active command item background |
75
+ | `z-floating` | `--z-floating` | Z-index for the search header |
76
+ | `text-secondary` | `--secondary` | Group label and empty state text color |
77
+
78
+ ## Examples
79
+
80
+ ### Basic Command Palette
81
+
82
+ ```tsx
83
+ import { useState } from "react";
84
+ import { FileTextIcon, FloppyDiskIcon, FolderOpenIcon } from "@phosphor-icons/react";
85
+ import { CommandPalette } from "@g4rcez/components";
86
+
87
+ function BasicCommandPalette() {
88
+ const [open, setOpen] = useState(false);
89
+
90
+ const commands = [
91
+ {
92
+ type: "shortcut" as const,
93
+ title: "New Document",
94
+ shortcut: "Ctrl+N",
95
+ Icon: <FileTextIcon size={16} />,
96
+ action: ({ setOpen }) => {
97
+ console.log("Creating new document");
98
+ setOpen(false);
99
+ },
100
+ },
101
+ {
102
+ type: "shortcut" as const,
103
+ title: "Save Document",
104
+ shortcut: "Ctrl+S",
105
+ Icon: <FloppyDiskIcon size={16} />,
106
+ action: ({ setOpen }) => {
107
+ console.log("Saving document");
108
+ setOpen(false);
109
+ },
110
+ },
111
+ {
112
+ type: "shortcut" as const,
113
+ title: "Open File",
114
+ shortcut: "Ctrl+O",
115
+ Icon: <FolderOpenIcon size={16} />,
116
+ action: ({ setOpen }) => {
117
+ console.log("Opening file");
118
+ setOpen(false);
119
+ },
120
+ },
121
+ ];
122
+
123
+ return <CommandPalette open={open} commands={commands} onChangeVisibility={setOpen} />;
124
+ }
125
+ ```
126
+
127
+ ### Grouped Commands
128
+
129
+ ```tsx
130
+ import { FileIcon, FolderOpenIcon, HouseIcon, GearIcon, MoonIcon } from "@phosphor-icons/react";
131
+ import { CommandPalette } from "@g4rcez/components";
132
+
133
+ function GroupedCommandPalette() {
134
+ const [open, setOpen] = useState(false);
135
+
136
+ const commands = [
137
+ {
138
+ type: "group" as const,
139
+ title: "File Operations",
140
+ items: [
141
+ {
142
+ type: "shortcut" as const,
143
+ title: "New File",
144
+ hint: ["create", "new", "file"],
145
+ shortcut: "Ctrl+N",
146
+ Icon: <FileIcon size={16} />,
147
+ action: ({ setOpen }) => setOpen(false),
148
+ },
149
+ {
150
+ type: "shortcut" as const,
151
+ title: "Open File",
152
+ hint: ["open", "load"],
153
+ shortcut: "Ctrl+O",
154
+ Icon: <FolderOpenIcon size={16} />,
155
+ action: ({ setOpen }) => setOpen(false),
156
+ },
157
+ ],
158
+ },
159
+ {
160
+ type: "group" as const,
161
+ title: "Navigation",
162
+ items: [
163
+ {
164
+ type: "shortcut" as const,
165
+ title: "Go to Dashboard",
166
+ hint: ["dashboard", "home", "main"],
167
+ Icon: <HouseIcon size={16} />,
168
+ action: ({ setOpen }) => {
169
+ window.location.href = "/dashboard";
170
+ setOpen(false);
171
+ },
172
+ },
173
+ {
174
+ type: "shortcut" as const,
175
+ title: "Go to Settings",
176
+ hint: ["settings", "preferences", "config"],
177
+ Icon: <GearIcon size={16} />,
178
+ action: ({ setOpen }) => {
179
+ window.location.href = "/settings";
180
+ setOpen(false);
181
+ },
182
+ },
183
+ ],
184
+ },
185
+ {
186
+ type: "group" as const,
187
+ title: "Theme",
188
+ items: [
189
+ {
190
+ type: "shortcut" as const,
191
+ title: "Toggle Dark Mode",
192
+ hint: ["dark", "theme", "mode"],
193
+ Icon: <MoonIcon size={16} />,
194
+ action: ({ setOpen }) => {
195
+ document.documentElement.classList.toggle("dark");
196
+ setOpen(false);
197
+ },
198
+ },
199
+ ],
200
+ },
201
+ ];
202
+
203
+ return <CommandPalette open={open} commands={commands} onChangeVisibility={setOpen} emptyMessage="No commands found" />;
204
+ }
205
+ ```
206
+
207
+ ### Custom Keyboard Shortcut
208
+
209
+ ```tsx
210
+ <CommandPalette open={open} commands={commands} onChangeVisibility={setOpen} bind="Mod + /" />
211
+ ```
212
+
213
+ ### Conditional Commands
214
+
215
+ ```tsx
216
+ import { UserIcon, ShieldIcon } from "@phosphor-icons/react";
217
+
218
+ const commands = [
219
+ {
220
+ type: "shortcut" as const,
221
+ title: "User Dashboard",
222
+ Icon: <UserIcon size={16} />,
223
+ action: ({ setOpen }) => setOpen(false),
224
+ },
225
+ {
226
+ type: "shortcut" as const,
227
+ title: "Admin Panel",
228
+ enabled: user.isAdmin,
229
+ Icon: <ShieldIcon size={16} />,
230
+ action: ({ setOpen }) => {
231
+ console.log("Opening admin panel");
232
+ setOpen(false);
233
+ },
234
+ },
235
+ ];
236
+ ```
237
+
238
+ ## Do
239
+
240
+ - Use `hint` arrays to add synonyms so commands match varied search terms (e.g., `["preferences", "config"]` for a "Settings" command).
241
+ - Group related commands with `type: "group"` so users can scan results quickly.
242
+ - Provide a clear `emptyMessage` so users know when nothing matches.
243
+ - Keep command titles short; let `hint` carry the synonym load.
244
+
245
+ ## Don't
246
+
247
+ - Don't put every action in the palette — focus on the most useful commands.
248
+ - Don't use raw Tailwind color classes (`bg-blue-500`, `text-white`) in custom `Icon` or `Preview` components — use design-token classes instead.
249
+ - Don't pass arbitrary Tailwind values (`bg-[#abc]`, `z-[9999]`) — override CSS variables in your `@theme` block.
250
+ - Don't omit the global shortcut — the default `Mod+K` is a strong convention users expect.
251
+
252
+ ## Accessibility
253
+
254
+ - Full arrow-key navigation within the list with loop support.
255
+ - `Enter` executes the active command; `Escape` closes the palette.
256
+ - Each item renders with `role="option"` and `aria-selected` reflecting the active state.
257
+ - The palette is wrapped in a `Modal` with `ariaTitle="Command palette"` for screen readers.
258
+ - The search input receives `autoFocus` when the palette opens.
259
+
260
+ ## Data Attributes
261
+
262
+ | Attribute | Applied to | Description |
263
+ | -------------------------------------------- | -------------------- | ------------------------------------- |
264
+ | `data-component="command-palette"` | Root modal container | Identifies the palette root |
265
+ | `data-component="command-palette-list"` | `<ul>` | Identifies the command list |
266
+ | `data-component="command-palette-item"` | Each `<button>` item | Identifies individual command buttons |
267
+ | `data-component="command-palette-container"` | List/preview wrapper | Identifies the content area |
268
+
269
+ ## Notes
270
+
271
+ - The component registers global keyboard listeners via `CombiKeys`. All `shortcut` commands are also registered as global hotkeys — they fire even when the palette is closed.
272
+ - Fuzzy search runs over `title`, `shortcut`, and `hint` fields. When `title` is a function, it is called with the current search text to produce a string for matching.
273
+ - Commands with `enabled: false` (or a function returning `false`) are filtered out of results.
274
+ - The `Preview` panel is shown only when `activeIndex` is set and a `Preview` component is provided.
275
+ - The palette is built on top of `Modal`, so it inherits modal accessibility and portal rendering.