@tulip-systems/core 0.8.3 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (875) hide show
  1. package/dist/auth/client.d.mts +10 -10
  2. package/dist/auth/client.mjs +10 -10
  3. package/dist/auth/server.d.mts +7 -7
  4. package/dist/auth/server.mjs +7 -7
  5. package/dist/auth.d.mts +5 -5
  6. package/dist/auth.mjs +5 -5
  7. package/dist/commands/client.d.mts +17 -16
  8. package/dist/commands/client.mjs +17 -16
  9. package/dist/commands.d.mts +4 -3
  10. package/dist/commands.mjs +4 -2
  11. package/dist/components/client.d.mts +48 -48
  12. package/dist/components/client.mjs +48 -48
  13. package/dist/components/server.d.mts +2 -2
  14. package/dist/components/server.mjs +2 -2
  15. package/dist/components/ui/badge.d.mts +1 -1
  16. package/dist/components/ui/button-group.d.mts +1 -1
  17. package/dist/components/ui/button.d.mts +2 -2
  18. package/dist/components/ui/checkbox.client.mjs +1 -1
  19. package/dist/components/ui/command.client.d.mts +5 -1
  20. package/dist/components/ui/command.client.mjs +10 -3
  21. package/dist/components/ui/field.client.d.mts +1 -1
  22. package/dist/components/ui/field.client.mjs +1 -1
  23. package/dist/components/ui/input-recipient.mjs +1 -1
  24. package/dist/components/ui/radio-group.mjs +1 -1
  25. package/dist/components/ui/tabs.client.mjs +1 -1
  26. package/dist/components.d.mts +39 -39
  27. package/dist/components.mjs +38 -38
  28. package/dist/config.d.mts +6 -6
  29. package/dist/config.mjs +4 -4
  30. package/dist/data-tables/client.d.mts +22 -18
  31. package/dist/data-tables/client.mjs +22 -18
  32. package/dist/data-tables/server.d.mts +7 -7
  33. package/dist/data-tables/server.mjs +7 -7
  34. package/dist/data-tables.d.mts +14 -14
  35. package/dist/data-tables.mjs +13 -13
  36. package/dist/database/server.d.mts +1 -1
  37. package/dist/database/server.mjs +1 -1
  38. package/dist/database.d.mts +2 -2
  39. package/dist/database.mjs +1 -1
  40. package/dist/dist/config.d.mts +5 -0
  41. package/dist/dist/modules/auth/handler/service.server.d.mts +8 -0
  42. package/dist/dist/modules/auth/lib/permissions.d.mts +2 -0
  43. package/dist/dist/modules/config/lib/context.d.mts +4 -0
  44. package/dist/dist/modules/config/paths/helpers.d.mts +1 -0
  45. package/dist/dist/modules/config/paths/types.d.mts +3 -0
  46. package/dist/dist/modules/database/lib/helpers.d.mts +2 -0
  47. package/dist/dist/modules/database/lib/service.server.d.mts +2 -0
  48. package/dist/dist/modules/database/lib/types.d.mts +5 -0
  49. package/dist/dist/modules/emails/lib/service.server.d.mts +2 -0
  50. package/dist/dist/modules/storage/lib/schema.d.mts +1 -0
  51. package/dist/dist/modules/storage/lib/service.server.d.mts +5 -0
  52. package/dist/dist/modules/storage/lib/validators.d.mts +4 -0
  53. package/dist/dist/modules/storage/providers/lib/types.d.mts +1 -0
  54. package/dist/dist/modules/storage/providers/lib/validators.d.mts +2 -0
  55. package/dist/emails/server.d.mts +1 -1
  56. package/dist/emails/server.mjs +1 -1
  57. package/dist/inline/client.d.mts +16 -0
  58. package/dist/inline/client.mjs +17 -0
  59. package/dist/{inline-edit.d.mts → inline.d.mts} +1 -1
  60. package/dist/{inline-edit.mjs → inline.mjs} +1 -1
  61. package/dist/lib/client.d.mts +4 -4
  62. package/dist/lib/client.mjs +4 -4
  63. package/dist/lib.d.mts +7 -7
  64. package/dist/lib.mjs +6 -6
  65. package/dist/modules/auth/components/allowed.client.d.mts +1 -2
  66. package/dist/modules/auth/components/update-password-command.d.mts +1 -1
  67. package/dist/modules/auth/components/update-password-command.mjs +1 -1
  68. package/dist/modules/auth/lib/validators.d.mts +238 -1
  69. package/dist/modules/auth/lib/validators.mjs +5 -1
  70. package/dist/modules/commands/components/menus/context-menu.client.d.mts +39 -0
  71. package/dist/modules/commands/components/menus/context-menu.client.mjs +47 -0
  72. package/dist/modules/commands/components/menus/dropdown-menu.client.d.mts +29 -0
  73. package/dist/modules/commands/{menus → components/menus}/dropdown-menu.client.mjs +20 -24
  74. package/dist/modules/commands/components/menus/floating-menu.client.d.mts +29 -0
  75. package/dist/modules/commands/components/menus/floating-menu.client.mjs +33 -0
  76. package/dist/modules/commands/components/menus/inline-menu.client.d.mts +29 -0
  77. package/dist/modules/commands/components/menus/inline-menu.client.mjs +41 -0
  78. package/dist/modules/commands/components/menus/responsive-menu.client.d.mts +16 -0
  79. package/dist/modules/commands/{menus → components/menus}/responsive-menu.client.mjs +1 -1
  80. package/dist/modules/commands/components/{alert-dialog-command.client.d.mts → primitives/alert-dialog-command.client.d.mts} +3 -30
  81. package/dist/modules/commands/components/{alert-dialog-command.client.mjs → primitives/alert-dialog-command.client.mjs} +18 -38
  82. package/dist/modules/commands/components/{click-command.client.d.mts → primitives/click-command.client.d.mts} +2 -2
  83. package/dist/modules/commands/components/primitives/click-command.client.mjs +52 -0
  84. package/dist/modules/commands/components/primitives/command-trigger.client.d.mts +17 -0
  85. package/dist/modules/commands/components/primitives/command-trigger.client.mjs +42 -0
  86. package/dist/modules/commands/components/{dialog-command.client.d.mts → primitives/dialog-command.client.d.mts} +3 -27
  87. package/dist/modules/commands/components/{dialog-command.client.mjs → primitives/dialog-command.client.mjs} +14 -31
  88. package/dist/modules/commands/components/{dropdown-command.client.d.mts → primitives/dropdown-command.client.d.mts} +5 -17
  89. package/dist/modules/commands/components/{dropdown-command.client.mjs → primitives/dropdown-command.client.mjs} +30 -30
  90. package/dist/modules/commands/components/{empty-command.client.d.mts → primitives/empty-command.client.d.mts} +4 -2
  91. package/dist/modules/commands/components/primitives/empty-command.client.mjs +44 -0
  92. package/dist/modules/commands/components/{form-dialog-command.client.d.mts → primitives/form-dialog-command.client.d.mts} +3 -33
  93. package/dist/modules/commands/components/{form-dialog-command.client.mjs → primitives/form-dialog-command.client.mjs} +18 -42
  94. package/dist/modules/commands/components/render-command.mjs +38 -5
  95. package/dist/modules/commands/{utils → components/utils}/archive-command.client.d.mts +1 -9
  96. package/dist/modules/commands/{utils → components/utils}/archive-command.client.mjs +4 -12
  97. package/dist/modules/commands/{utils → components/utils}/delete-command.client.d.mts +1 -8
  98. package/dist/modules/commands/{utils → components/utils}/delete-command.client.mjs +4 -11
  99. package/dist/modules/commands/hooks/use-command-mutation.client.d.mts +1 -6
  100. package/dist/modules/commands/hooks/use-command-mutation.client.mjs +2 -4
  101. package/dist/modules/commands/hooks/use-command.client.d.mts +31 -0
  102. package/dist/modules/commands/hooks/use-command.client.mjs +45 -0
  103. package/dist/modules/commands/lib/builder.d.mts +135 -0
  104. package/dist/modules/commands/lib/builder.mjs +82 -0
  105. package/dist/modules/commands/lib/registery.d.mts +68 -0
  106. package/dist/modules/commands/lib/registery.mjs +103 -0
  107. package/dist/modules/commands/lib/utils.d.mts +11 -0
  108. package/dist/modules/commands/lib/utils.mjs +14 -0
  109. package/dist/modules/data-tables/components/filters/combobox.client.d.mts +2 -2
  110. package/dist/modules/data-tables/components/filters/combobox.client.mjs +7 -9
  111. package/dist/modules/data-tables/components/filters/date-range.client.d.mts +24 -0
  112. package/dist/modules/data-tables/components/filters/date-range.client.mjs +99 -0
  113. package/dist/modules/data-tables/components/filters/search.client.d.mts +17 -0
  114. package/dist/modules/data-tables/components/filters/search.client.mjs +32 -0
  115. package/dist/modules/data-tables/components/filters/slider.client.d.mts +2 -2
  116. package/dist/modules/data-tables/components/filters/slider.client.mjs +2 -2
  117. package/dist/modules/data-tables/components/filters/toggle.client.d.mts +17 -0
  118. package/dist/modules/data-tables/components/filters/toggle.client.mjs +25 -0
  119. package/dist/modules/data-tables/components/footer.mjs +3 -0
  120. package/dist/modules/data-tables/hooks/use-context.client.d.mts +9 -20
  121. package/dist/modules/data-tables/hooks/use-selection.client.mjs +8 -2
  122. package/dist/modules/data-tables/hooks/use-table.client.d.mts +1 -3
  123. package/dist/modules/data-tables/hooks/use-table.client.mjs +4 -3
  124. package/dist/modules/data-tables/lib/converters/filters.d.mts +40 -0
  125. package/dist/modules/data-tables/lib/converters/filters.mjs +38 -0
  126. package/dist/modules/data-tables/lib/converters/{cursor.d.mts → pagination.d.mts} +3 -3
  127. package/dist/modules/data-tables/lib/converters/{cursor.mjs → pagination.mjs} +3 -3
  128. package/dist/modules/data-tables/lib/converters/sorting.d.mts +42 -8
  129. package/dist/modules/data-tables/lib/converters/sorting.mjs +47 -11
  130. package/dist/modules/data-tables/lib/filters/parsers.d.mts +6 -1
  131. package/dist/modules/data-tables/lib/filters/parsers.mjs +10 -1
  132. package/dist/modules/data-tables/lib/types.d.mts +5 -9
  133. package/dist/modules/data-tables/server/get-data.server.d.mts +2 -3
  134. package/dist/modules/data-tables/server/get-data.server.mjs +5 -5
  135. package/dist/modules/data-tables/strategies/local/components.mjs +25 -0
  136. package/dist/modules/data-tables/strategies/local/strategy.d.mts +12 -0
  137. package/dist/modules/data-tables/strategies/local/strategy.mjs +31 -0
  138. package/dist/modules/data-tables/tables/data-table/components/table.d.mts +1 -3
  139. package/dist/modules/data-tables/tables/data-table/components/table.mjs +1 -1
  140. package/dist/modules/data-tables/tables/inline-table/components/row.client.mjs +2 -7
  141. package/dist/modules/data-tables/tables/inline-table/components/table.d.mts +1 -3
  142. package/dist/modules/data-tables/tables/inline-table/components/table.mjs +1 -1
  143. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts +1 -3
  144. package/dist/modules/inline/components/cell.client.d.mts +20 -0
  145. package/dist/modules/inline/components/cell.client.mjs +46 -0
  146. package/dist/modules/inline/components/field.client.d.mts +36 -0
  147. package/dist/modules/inline/components/field.client.mjs +61 -0
  148. package/dist/modules/inline/components/inputs/combobox-dropdown.client.d.mts +28 -0
  149. package/dist/modules/inline/components/inputs/combobox-dropdown.client.mjs +49 -0
  150. package/dist/modules/inline/components/inputs/combobox.client.d.mts +23 -0
  151. package/dist/modules/inline/components/inputs/combobox.client.mjs +45 -0
  152. package/dist/modules/inline/components/inputs/date-time.client.d.mts +25 -0
  153. package/dist/modules/inline/components/inputs/date-time.client.mjs +48 -0
  154. package/dist/modules/inline/components/inputs/date.client.d.mts +66 -0
  155. package/dist/modules/inline/components/inputs/date.client.mjs +175 -0
  156. package/dist/modules/inline/components/inputs/editor.client.d.mts +26 -0
  157. package/dist/modules/inline/components/inputs/editor.client.mjs +51 -0
  158. package/dist/modules/inline/components/inputs/input-recipient.client.d.mts +27 -0
  159. package/dist/modules/inline/components/inputs/input-recipient.client.mjs +48 -0
  160. package/dist/modules/inline/components/inputs/input.client.d.mts +54 -0
  161. package/dist/modules/inline/components/inputs/input.client.mjs +129 -0
  162. package/dist/modules/inline/components/inputs/select.client.d.mts +32 -0
  163. package/dist/modules/inline/components/inputs/select.client.mjs +64 -0
  164. package/dist/modules/inline/components/inputs/switch.client.d.mts +22 -0
  165. package/dist/modules/inline/components/inputs/switch.client.mjs +42 -0
  166. package/dist/modules/inline/components/inputs/toggle.client.d.mts +24 -0
  167. package/dist/modules/inline/components/inputs/toggle.client.mjs +47 -0
  168. package/dist/modules/inline/hooks/inline-provider.d.mts +28 -0
  169. package/dist/modules/inline/hooks/inline-provider.mjs +25 -0
  170. package/dist/modules/inline/hooks/inline-state.client.d.mts +30 -0
  171. package/dist/modules/inline/hooks/inline-state.client.mjs +25 -0
  172. package/dist/modules/inline/hooks/use-inline.client.d.mts +144 -0
  173. package/dist/modules/inline/hooks/use-inline.client.mjs +125 -0
  174. package/dist/modules/{inline-edit → inline}/lib/validators.d.mts +1 -1
  175. package/dist/modules/{inline-edit → inline}/lib/validators.mjs +1 -1
  176. package/dist/modules/{inline-edit → inline}/lib/variants.d.mts +1 -1
  177. package/dist/modules/{inline-edit → inline}/lib/variants.mjs +1 -1
  178. package/dist/modules/router/lib/query-client.d.mts +2 -1
  179. package/dist/modules/router/lib/query-client.mjs +2 -2
  180. package/dist/router/client.d.mts +1 -1
  181. package/dist/router/client.mjs +1 -1
  182. package/dist/router/server.d.mts +7 -7
  183. package/dist/router/server.mjs +7 -7
  184. package/dist/router.d.mts +3 -2
  185. package/dist/router.mjs +3 -2
  186. package/dist/src/components/common/icons.d.mts +60 -0
  187. package/dist/src/components/common/icons.mjs +121 -0
  188. package/dist/src/components/common/status.d.mts +52 -0
  189. package/dist/src/components/common/status.mjs +55 -0
  190. package/dist/src/components/editor/components/content.client.d.mts +6 -0
  191. package/dist/src/components/editor/components/content.client.mjs +16 -0
  192. package/dist/src/components/editor/components/editor.client.d.mts +48 -0
  193. package/dist/src/components/editor/components/editor.client.mjs +55 -0
  194. package/dist/src/components/editor/components/menu-nodes.client.mjs +92 -0
  195. package/dist/src/components/editor/components/menu.client.d.mts +9 -0
  196. package/dist/src/components/editor/components/menu.client.mjs +168 -0
  197. package/dist/src/components/editor/extensions/file-handler/extension.d.mts +20 -0
  198. package/dist/src/components/editor/extensions/file-handler/extension.mjs +39 -0
  199. package/dist/src/components/editor/extensions/file-handler/strategy.d.mts +26 -0
  200. package/dist/src/components/editor/extensions/file-handler/strategy.mjs +110 -0
  201. package/dist/src/components/editor/extensions/file-handler/utils.mjs +49 -0
  202. package/dist/src/components/editor/extensions/image/extension.d.mts +7 -0
  203. package/dist/src/components/editor/extensions/image/extension.mjs +50 -0
  204. package/dist/src/components/editor/extensions/skeleton/extension.mjs +40 -0
  205. package/dist/src/components/editor/extensions/skeleton/renderer.mjs +24 -0
  206. package/dist/src/components/editor/lib/constants.d.mts +62 -0
  207. package/dist/src/components/editor/lib/constants.mjs +101 -0
  208. package/dist/src/components/editor/lib/extensions.d.mts +67 -0
  209. package/dist/src/components/editor/lib/extensions.mjs +49 -0
  210. package/dist/src/components/editor/lib/helpers.d.mts +21 -0
  211. package/dist/src/components/editor/lib/helpers.mjs +68 -0
  212. package/dist/src/components/editor/lib/types.d.mts +9 -0
  213. package/dist/src/components/editor/lib/variants.mjs +15 -0
  214. package/dist/src/components/emails/forget-password-email.mjs +50 -0
  215. package/dist/src/components/header/back-button.client.d.mts +9 -0
  216. package/dist/src/components/header/back-button.client.mjs +42 -0
  217. package/dist/src/components/header/bottom-bar.client.d.mts +28 -0
  218. package/dist/src/components/header/bottom-bar.client.mjs +37 -0
  219. package/dist/src/components/header/breadcrumbs.client.d.mts +34 -0
  220. package/dist/src/components/header/breadcrumbs.client.mjs +63 -0
  221. package/dist/src/components/header/header.client.d.mts +11 -0
  222. package/dist/src/components/header/header.client.mjs +14 -0
  223. package/dist/src/components/header/indicator.client.mjs +24 -0
  224. package/dist/src/components/header/mobile-nav-switcher.client.d.mts +9 -0
  225. package/dist/src/components/header/mobile-nav-switcher.client.mjs +18 -0
  226. package/dist/src/components/header/top-bar.client.d.mts +42 -0
  227. package/dist/src/components/header/top-bar.client.mjs +47 -0
  228. package/dist/src/components/layouts/admin-content.client.d.mts +12 -0
  229. package/dist/src/components/layouts/admin-content.client.mjs +22 -0
  230. package/dist/src/components/layouts/admin-error-pages.d.mts +22 -0
  231. package/dist/src/components/layouts/admin-error-pages.mjs +59 -0
  232. package/dist/src/components/layouts/admin-layout.d.mts +7 -0
  233. package/dist/src/components/layouts/admin-layout.mjs +13 -0
  234. package/dist/src/components/layouts/admin-loading.d.mts +7 -0
  235. package/dist/src/components/layouts/admin-loading.mjs +13 -0
  236. package/dist/src/components/layouts/empty-page.d.mts +30 -0
  237. package/dist/src/components/layouts/empty-page.mjs +28 -0
  238. package/dist/src/components/layouts/error-page.d.mts +47 -0
  239. package/dist/src/components/layouts/error-page.mjs +53 -0
  240. package/dist/src/components/layouts/error-sections.d.mts +28 -0
  241. package/dist/src/components/layouts/error-sections.mjs +46 -0
  242. package/dist/src/components/layouts/list-layout.d.mts +11 -0
  243. package/dist/src/components/layouts/list-layout.mjs +14 -0
  244. package/dist/src/components/layouts/providers.client.d.mts +9 -0
  245. package/dist/src/components/layouts/providers.client.mjs +31 -0
  246. package/dist/src/components/layouts/root-error-pages.d.mts +9 -0
  247. package/dist/src/components/layouts/root-error-pages.mjs +16 -0
  248. package/dist/src/components/layouts/root-layout.server.d.mts +36 -0
  249. package/dist/src/components/layouts/root-layout.server.mjs +46 -0
  250. package/dist/src/components/layouts/root-loading.d.mts +6 -0
  251. package/dist/src/components/layouts/root-loading.mjs +13 -0
  252. package/dist/src/components/layouts/tab-layout.d.mts +22 -0
  253. package/dist/src/components/layouts/tab-layout.mjs +50 -0
  254. package/dist/src/components/lists/data-list.d.mts +30 -0
  255. package/dist/src/components/lists/data-list.mjs +35 -0
  256. package/dist/src/components/lists/data-stack.d.mts +48 -0
  257. package/dist/src/components/lists/data-stack.mjs +56 -0
  258. package/dist/src/components/navigation/admin-sidebar-header.client.mjs +92 -0
  259. package/dist/src/components/navigation/admin-sidebar-paths.client.d.mts +91 -0
  260. package/dist/src/components/navigation/admin-sidebar-paths.client.mjs +143 -0
  261. package/dist/src/components/navigation/admin-sidebar-skeleton.mjs +30 -0
  262. package/dist/src/components/ui/accordion.client.d.mts +25 -0
  263. package/dist/src/components/ui/accordion.client.mjs +57 -0
  264. package/dist/src/components/ui/alert-dialog.client.d.mts +60 -0
  265. package/dist/src/components/ui/alert-dialog.client.mjs +103 -0
  266. package/dist/src/components/ui/alert.d.mts +28 -0
  267. package/dist/src/components/ui/alert.mjs +44 -0
  268. package/dist/src/components/ui/aspect-ratio.client.d.mts +9 -0
  269. package/dist/src/components/ui/aspect-ratio.client.mjs +15 -0
  270. package/dist/src/components/ui/avatar.client.d.mts +34 -0
  271. package/dist/src/components/ui/avatar.client.mjs +53 -0
  272. package/dist/src/components/ui/badge.d.mts +19 -0
  273. package/dist/src/components/ui/badge.mjs +28 -0
  274. package/dist/src/components/ui/breadcrumb.d.mts +37 -0
  275. package/dist/src/components/ui/breadcrumb.mjs +70 -0
  276. package/dist/src/components/ui/button-group.d.mts +28 -0
  277. package/dist/src/components/ui/button-group.mjs +40 -0
  278. package/dist/src/components/ui/button.d.mts +21 -0
  279. package/dist/src/components/ui/button.mjs +48 -0
  280. package/dist/src/components/ui/calendar.client.d.mts +30 -0
  281. package/dist/src/components/ui/calendar.client.mjs +113 -0
  282. package/dist/src/components/ui/card.d.mts +37 -0
  283. package/dist/src/components/ui/card.mjs +57 -0
  284. package/dist/src/components/ui/carousel.client.d.mts +56 -0
  285. package/dist/src/components/ui/carousel.client.mjs +135 -0
  286. package/dist/src/components/ui/chart.client.d.mts +71 -0
  287. package/dist/src/components/ui/chart.client.mjs +142 -0
  288. package/dist/src/components/ui/checkbox.client.d.mts +11 -0
  289. package/dist/src/components/ui/checkbox.client.mjs +23 -0
  290. package/dist/src/components/ui/collapsible.client.d.mts +15 -0
  291. package/dist/src/components/ui/collapsible.client.mjs +27 -0
  292. package/dist/src/components/ui/color-picker.client.d.mts +15 -0
  293. package/dist/src/components/ui/color-picker.client.mjs +38 -0
  294. package/dist/src/components/ui/combobox-dropdown.client.d.mts +45 -0
  295. package/dist/src/components/ui/combobox-dropdown.client.mjs +94 -0
  296. package/dist/src/components/ui/combobox.client.d.mts +30 -0
  297. package/dist/src/components/ui/combobox.client.mjs +66 -0
  298. package/dist/src/components/ui/command.client.d.mts +58 -0
  299. package/dist/src/components/ui/command.client.mjs +97 -0
  300. package/dist/src/components/ui/context-menu.client.d.mts +85 -0
  301. package/dist/src/components/ui/context-menu.client.mjs +127 -0
  302. package/dist/src/components/ui/date-picker.client.d.mts +20 -0
  303. package/dist/src/components/ui/date-picker.client.mjs +43 -0
  304. package/dist/src/components/ui/dialog.client.d.mts +51 -0
  305. package/dist/src/components/ui/dialog.client.mjs +98 -0
  306. package/dist/src/components/ui/drawer.client.d.mts +44 -0
  307. package/dist/src/components/ui/drawer.client.mjs +80 -0
  308. package/dist/src/components/ui/dropdown-menu.client.d.mts +84 -0
  309. package/dist/src/components/ui/dropdown-menu.client.mjs +130 -0
  310. package/dist/src/components/ui/empty.d.mts +35 -0
  311. package/dist/src/components/ui/empty.mjs +61 -0
  312. package/dist/src/components/ui/field.client.d.mts +64 -0
  313. package/dist/src/components/ui/field.client.mjs +113 -0
  314. package/dist/src/components/ui/form.client.d.mts +47 -0
  315. package/dist/src/components/ui/form.client.mjs +92 -0
  316. package/dist/src/components/ui/hover-card.client.d.mts +19 -0
  317. package/dist/src/components/ui/hover-card.client.mjs +34 -0
  318. package/dist/src/components/ui/input-date-time.client.d.mts +22 -0
  319. package/dist/src/components/ui/input-date-time.client.mjs +33 -0
  320. package/dist/src/components/ui/input-date.d.mts +13 -0
  321. package/dist/src/components/ui/input-date.mjs +15 -0
  322. package/dist/src/components/ui/input-group.client.d.mts +58 -0
  323. package/dist/src/components/ui/input-group.client.mjs +105 -0
  324. package/dist/src/components/ui/input-recipient.d.mts +26 -0
  325. package/dist/src/components/ui/input-recipient.mjs +218 -0
  326. package/dist/src/components/ui/input-time.d.mts +13 -0
  327. package/dist/src/components/ui/input-time.mjs +15 -0
  328. package/dist/src/components/ui/input.d.mts +11 -0
  329. package/dist/src/components/ui/input.mjs +15 -0
  330. package/dist/src/components/ui/item.d.mts +62 -0
  331. package/dist/src/components/ui/item.mjs +118 -0
  332. package/dist/src/components/ui/kbd.d.mts +13 -0
  333. package/dist/src/components/ui/kbd.mjs +21 -0
  334. package/dist/src/components/ui/label.d.mts +11 -0
  335. package/dist/src/components/ui/label.mjs +17 -0
  336. package/dist/src/components/ui/loader.d.mts +6 -0
  337. package/dist/src/components/ui/loader.mjs +62 -0
  338. package/dist/src/components/ui/navigation-menu.d.mts +46 -0
  339. package/dist/src/components/ui/navigation-menu.mjs +81 -0
  340. package/dist/src/components/ui/pagination.d.mts +45 -0
  341. package/dist/src/components/ui/pagination.mjs +87 -0
  342. package/dist/src/components/ui/popover.client.d.mts +34 -0
  343. package/dist/src/components/ui/popover.client.mjs +58 -0
  344. package/dist/src/components/ui/progress.client.d.mts +12 -0
  345. package/dist/src/components/ui/progress.client.mjs +22 -0
  346. package/dist/src/components/ui/radio-group.d.mts +15 -0
  347. package/dist/src/components/ui/radio-group.mjs +29 -0
  348. package/dist/src/components/ui/resizable.client.d.mts +20 -0
  349. package/dist/src/components/ui/resizable.client.mjs +31 -0
  350. package/dist/src/components/ui/scroll-area.d.mts +17 -0
  351. package/dist/src/components/ui/scroll-area.mjs +39 -0
  352. package/dist/src/components/ui/select.client.d.mts +53 -0
  353. package/dist/src/components/ui/select.client.mjs +102 -0
  354. package/dist/src/components/ui/separator.d.mts +13 -0
  355. package/dist/src/components/ui/separator.mjs +19 -0
  356. package/dist/src/components/ui/sheet.client.d.mts +42 -0
  357. package/dist/src/components/ui/sheet.client.mjs +92 -0
  358. package/dist/src/components/ui/sidebar.client.d.mts +167 -0
  359. package/dist/src/components/ui/sidebar.client.mjs +373 -0
  360. package/dist/src/components/ui/skeleton.d.mts +9 -0
  361. package/dist/src/components/ui/skeleton.mjs +14 -0
  362. package/dist/src/components/ui/slider.d.mts +15 -0
  363. package/dist/src/components/ui/slider.mjs +39 -0
  364. package/dist/src/components/ui/sonner.client.d.mts +9 -0
  365. package/dist/src/components/ui/sonner.client.mjs +24 -0
  366. package/dist/src/components/ui/spinner.d.mts +9 -0
  367. package/dist/src/components/ui/spinner.mjs +16 -0
  368. package/dist/src/components/ui/switch.client.d.mts +14 -0
  369. package/dist/src/components/ui/switch.client.mjs +22 -0
  370. package/dist/src/components/ui/tabs.client.d.mts +30 -0
  371. package/dist/src/components/ui/tabs.client.mjs +48 -0
  372. package/dist/src/components/ui/textarea.d.mts +10 -0
  373. package/dist/src/components/ui/textarea.mjs +14 -0
  374. package/dist/src/components/ui/toggle-group.client.d.mts +28 -0
  375. package/dist/src/components/ui/toggle-group.client.mjs +54 -0
  376. package/dist/src/components/ui/toggle.client.d.mts +19 -0
  377. package/dist/src/components/ui/toggle.client.mjs +39 -0
  378. package/dist/src/components/ui/tooltip.client.d.mts +23 -0
  379. package/dist/src/components/ui/tooltip.client.mjs +38 -0
  380. package/dist/src/lib/hooks/use-action.d.mts +16 -0
  381. package/dist/src/lib/hooks/use-action.mjs +41 -0
  382. package/dist/src/lib/hooks/use-indicator.d.mts +39 -0
  383. package/dist/src/lib/hooks/use-indicator.mjs +63 -0
  384. package/dist/src/lib/hooks/use-mobile.client.d.mts +6 -0
  385. package/dist/src/lib/hooks/use-mobile.client.mjs +21 -0
  386. package/dist/src/lib/types/config.d.mts +11 -0
  387. package/dist/src/lib/utils/array-move.d.mts +10 -0
  388. package/dist/src/lib/utils/array-move.mjs +12 -0
  389. package/dist/src/lib/utils/cn.d.mts +6 -0
  390. package/dist/src/lib/utils/cn.mjs +10 -0
  391. package/dist/src/lib/utils/fonts.d.mts +7 -0
  392. package/dist/src/lib/utils/fonts.mjs +11 -0
  393. package/dist/src/lib/utils/format.d.mts +51 -0
  394. package/dist/src/lib/utils/format.mjs +113 -0
  395. package/dist/src/lib/utils/manifest.d.mts +7 -0
  396. package/dist/src/lib/utils/manifest.mjs +35 -0
  397. package/dist/src/lib/utils/markdown.d.mts +9 -0
  398. package/dist/src/lib/utils/markdown.mjs +14 -0
  399. package/dist/src/lib/utils/url.d.mts +9 -0
  400. package/dist/src/lib/utils/url.mjs +15 -0
  401. package/dist/src/lib/utils/user-agent.mjs +74 -0
  402. package/dist/src/modules/auth/components/allowed.client.d.mts +33 -0
  403. package/dist/src/modules/auth/components/allowed.client.mjs +19 -0
  404. package/dist/src/modules/auth/components/auth-layout.server.d.mts +9 -0
  405. package/dist/src/modules/auth/components/auth-layout.server.mjs +36 -0
  406. package/dist/src/modules/auth/components/auth-loading.d.mts +6 -0
  407. package/dist/src/modules/auth/components/auth-loading.mjs +17 -0
  408. package/dist/src/modules/auth/components/create-first-user-guard.server.d.mts +15 -0
  409. package/dist/src/modules/auth/components/create-first-user-guard.server.mjs +15 -0
  410. package/dist/src/modules/auth/components/create-first-user-page.client.d.mts +6 -0
  411. package/dist/src/modules/auth/components/create-first-user-page.client.mjs +153 -0
  412. package/dist/src/modules/auth/components/forget-password-page.client.d.mts +6 -0
  413. package/dist/src/modules/auth/components/forget-password-page.client.mjs +72 -0
  414. package/dist/src/modules/auth/components/guard.server.d.mts +14 -0
  415. package/dist/src/modules/auth/components/guard.server.mjs +20 -0
  416. package/dist/src/modules/auth/components/login-page.client.d.mts +11 -0
  417. package/dist/src/modules/auth/components/login-page.client.mjs +155 -0
  418. package/dist/src/modules/auth/components/reset-password-page.client.d.mts +11 -0
  419. package/dist/src/modules/auth/components/reset-password-page.client.mjs +121 -0
  420. package/dist/src/modules/auth/components/update-password-command.d.mts +22 -0
  421. package/dist/src/modules/auth/components/update-password-command.mjs +47 -0
  422. package/dist/src/modules/auth/db/schema.d.mts +983 -0
  423. package/dist/src/modules/auth/db/schema.mjs +101 -0
  424. package/dist/src/modules/auth/handler/create-client.client.d.mts +6393 -0
  425. package/dist/src/modules/auth/handler/create-client.client.mjs +25 -0
  426. package/dist/src/modules/auth/handler/proxy.server.d.mts +11 -0
  427. package/dist/src/modules/auth/handler/proxy.server.mjs +20 -0
  428. package/dist/src/modules/auth/handler/route.server.d.mts +16 -0
  429. package/dist/src/modules/auth/handler/route.server.mjs +28 -0
  430. package/dist/src/modules/auth/handler/service.server.d.mts +2101 -0
  431. package/dist/src/modules/auth/handler/service.server.mjs +87 -0
  432. package/dist/src/modules/auth/hooks/use-auth-client.d.mts +23 -0
  433. package/dist/src/modules/auth/hooks/use-auth-client.mjs +30 -0
  434. package/dist/src/modules/auth/hooks/use-permission.d.mts +42 -0
  435. package/dist/src/modules/auth/hooks/use-permission.mjs +57 -0
  436. package/dist/src/modules/auth/hooks/use-session.d.mts +40 -0
  437. package/dist/src/modules/auth/hooks/use-session.mjs +22 -0
  438. package/dist/src/modules/auth/lib/helpers.server.d.mts +84 -0
  439. package/dist/src/modules/auth/lib/helpers.server.mjs +41 -0
  440. package/dist/src/modules/auth/lib/permissions.d.mts +17 -0
  441. package/dist/src/modules/auth/lib/permissions.mjs +14 -0
  442. package/dist/src/modules/auth/lib/validators.d.mts +299 -0
  443. package/dist/src/modules/auth/lib/validators.mjs +59 -0
  444. package/dist/src/modules/commands/components/menus/context-menu.client.d.mts +39 -0
  445. package/dist/src/modules/commands/components/menus/context-menu.client.mjs +47 -0
  446. package/dist/src/modules/commands/components/menus/dropdown-menu.client.d.mts +29 -0
  447. package/dist/src/modules/commands/components/menus/dropdown-menu.client.mjs +58 -0
  448. package/dist/src/modules/commands/components/menus/floating-menu.client.d.mts +29 -0
  449. package/dist/src/modules/commands/components/menus/floating-menu.client.mjs +33 -0
  450. package/dist/src/modules/commands/components/menus/inline-menu.client.d.mts +29 -0
  451. package/dist/src/modules/commands/components/menus/inline-menu.client.mjs +41 -0
  452. package/dist/src/modules/commands/components/menus/responsive-menu.client.d.mts +16 -0
  453. package/dist/src/modules/commands/components/menus/responsive-menu.client.mjs +22 -0
  454. package/dist/src/modules/commands/components/primitives/alert-dialog-command.client.d.mts +65 -0
  455. package/dist/src/modules/commands/components/primitives/alert-dialog-command.client.mjs +138 -0
  456. package/dist/src/modules/commands/components/primitives/click-command.client.d.mts +26 -0
  457. package/dist/src/modules/commands/components/primitives/click-command.client.mjs +52 -0
  458. package/dist/src/modules/commands/components/primitives/command-trigger.client.d.mts +17 -0
  459. package/dist/src/modules/commands/components/primitives/command-trigger.client.mjs +42 -0
  460. package/dist/src/modules/commands/components/primitives/dialog-command.client.d.mts +53 -0
  461. package/dist/src/modules/commands/components/primitives/dialog-command.client.mjs +116 -0
  462. package/dist/src/modules/commands/components/primitives/dropdown-command.client.d.mts +47 -0
  463. package/dist/src/modules/commands/components/primitives/dropdown-command.client.mjs +131 -0
  464. package/dist/src/modules/commands/components/primitives/empty-command.client.d.mts +20 -0
  465. package/dist/src/modules/commands/components/primitives/empty-command.client.mjs +44 -0
  466. package/dist/src/modules/commands/components/primitives/form-dialog-command.client.d.mts +71 -0
  467. package/dist/src/modules/commands/components/primitives/form-dialog-command.client.mjs +163 -0
  468. package/dist/src/modules/commands/components/render-command.mjs +48 -0
  469. package/dist/src/modules/commands/components/utils/archive-command.client.d.mts +24 -0
  470. package/dist/src/modules/commands/components/utils/archive-command.client.mjs +29 -0
  471. package/dist/src/modules/commands/components/utils/delete-command.client.d.mts +20 -0
  472. package/dist/src/modules/commands/components/utils/delete-command.client.mjs +28 -0
  473. package/dist/src/modules/commands/hooks/use-command-mutation.client.d.mts +11 -0
  474. package/dist/src/modules/commands/hooks/use-command-mutation.client.mjs +39 -0
  475. package/dist/src/modules/commands/hooks/use-command.client.d.mts +31 -0
  476. package/dist/src/modules/commands/hooks/use-command.client.mjs +45 -0
  477. package/dist/src/modules/commands/lib/builder.d.mts +135 -0
  478. package/dist/src/modules/commands/lib/builder.mjs +82 -0
  479. package/dist/src/modules/commands/lib/registery.d.mts +68 -0
  480. package/dist/src/modules/commands/lib/registery.mjs +103 -0
  481. package/dist/src/modules/commands/lib/utils.d.mts +11 -0
  482. package/dist/src/modules/commands/lib/utils.mjs +14 -0
  483. package/dist/src/modules/config/lib/config.d.mts +16 -0
  484. package/dist/src/modules/config/lib/config.mjs +8 -0
  485. package/dist/src/modules/config/lib/context.d.mts +17 -0
  486. package/dist/src/modules/config/lib/context.mjs +7 -0
  487. package/dist/src/modules/config/paths/helpers.d.mts +9 -0
  488. package/dist/src/modules/config/paths/helpers.mjs +8 -0
  489. package/dist/src/modules/config/paths/types.d.mts +31 -0
  490. package/dist/src/modules/data-tables/components/cell/common.client.d.mts +26 -0
  491. package/dist/src/modules/data-tables/components/cell/common.client.mjs +35 -0
  492. package/dist/src/modules/data-tables/components/cell/index.client.d.mts +10 -0
  493. package/dist/src/modules/data-tables/components/cell/index.client.mjs +24 -0
  494. package/dist/src/modules/data-tables/components/cell/select.client.d.mts +10 -0
  495. package/dist/src/modules/data-tables/components/cell/select.client.mjs +36 -0
  496. package/dist/src/modules/data-tables/components/column-header.d.mts +15 -0
  497. package/dist/src/modules/data-tables/components/column-header.mjs +46 -0
  498. package/dist/src/modules/data-tables/components/filters/combobox.client.d.mts +27 -0
  499. package/dist/src/modules/data-tables/components/filters/combobox.client.mjs +97 -0
  500. package/dist/src/modules/data-tables/components/filters/date-range.client.d.mts +24 -0
  501. package/dist/src/modules/data-tables/components/filters/date-range.client.mjs +99 -0
  502. package/dist/src/modules/data-tables/components/filters/search.client.d.mts +17 -0
  503. package/dist/src/modules/data-tables/components/filters/search.client.mjs +32 -0
  504. package/dist/src/modules/data-tables/components/filters/slider.client.d.mts +22 -0
  505. package/dist/src/modules/data-tables/components/filters/slider.client.mjs +128 -0
  506. package/dist/src/modules/data-tables/components/filters/toggle.client.d.mts +17 -0
  507. package/dist/src/modules/data-tables/components/filters/toggle.client.mjs +25 -0
  508. package/dist/src/modules/data-tables/components/footer.mjs +31 -0
  509. package/dist/src/modules/data-tables/components/header.d.mts +40 -0
  510. package/dist/src/modules/data-tables/components/header.mjs +43 -0
  511. package/dist/src/modules/data-tables/components/layout.d.mts +11 -0
  512. package/dist/src/modules/data-tables/components/layout.mjs +14 -0
  513. package/dist/src/modules/data-tables/components/search-input.client.d.mts +6 -0
  514. package/dist/src/modules/data-tables/components/search-input.client.mjs +19 -0
  515. package/dist/src/modules/data-tables/components/skeleton.d.mts +6 -0
  516. package/dist/src/modules/data-tables/components/skeleton.mjs +21 -0
  517. package/dist/src/modules/data-tables/components/table.d.mts +33 -0
  518. package/dist/src/modules/data-tables/components/table.mjs +55 -0
  519. package/dist/src/modules/data-tables/components/toolbar.d.mts +22 -0
  520. package/dist/src/modules/data-tables/components/toolbar.mjs +21 -0
  521. package/dist/src/modules/data-tables/hooks/use-context.client.d.mts +47 -0
  522. package/dist/src/modules/data-tables/hooks/use-context.client.mjs +34 -0
  523. package/dist/src/modules/data-tables/hooks/use-search.client.mjs +39 -0
  524. package/dist/src/modules/data-tables/hooks/use-selection.client.mjs +44 -0
  525. package/dist/src/modules/data-tables/hooks/use-table.client.d.mts +10 -0
  526. package/dist/src/modules/data-tables/hooks/use-table.client.mjs +55 -0
  527. package/dist/src/modules/data-tables/lib/converters/dto.d.mts +50 -0
  528. package/dist/src/modules/data-tables/lib/converters/dto.mjs +24 -0
  529. package/dist/src/modules/data-tables/lib/converters/filters.d.mts +41 -0
  530. package/dist/src/modules/data-tables/lib/converters/filters.mjs +38 -0
  531. package/dist/src/modules/data-tables/lib/converters/pagination.d.mts +17 -0
  532. package/dist/src/modules/data-tables/lib/converters/pagination.mjs +15 -0
  533. package/dist/src/modules/data-tables/lib/converters/search.d.mts +16 -0
  534. package/dist/src/modules/data-tables/lib/converters/search.mjs +15 -0
  535. package/dist/src/modules/data-tables/lib/converters/sorting.d.mts +48 -0
  536. package/dist/src/modules/data-tables/lib/converters/sorting.mjs +55 -0
  537. package/dist/src/modules/data-tables/lib/filters/config.d.mts +13 -0
  538. package/dist/src/modules/data-tables/lib/filters/config.mjs +5 -0
  539. package/dist/src/modules/data-tables/lib/filters/helpers.d.mts +10 -0
  540. package/dist/src/modules/data-tables/lib/filters/helpers.mjs +16 -0
  541. package/dist/src/modules/data-tables/lib/filters/parsers.d.mts +46 -0
  542. package/dist/src/modules/data-tables/lib/filters/parsers.mjs +47 -0
  543. package/dist/src/modules/data-tables/lib/filters/resolvers.d.mts +28 -0
  544. package/dist/src/modules/data-tables/lib/filters/resolvers.mjs +55 -0
  545. package/dist/src/modules/data-tables/lib/helpers/create-column.mjs +10 -0
  546. package/dist/src/modules/data-tables/lib/search-params.d.mts +21 -0
  547. package/dist/src/modules/data-tables/lib/search-params.mjs +16 -0
  548. package/dist/src/modules/data-tables/lib/types.d.mts +54 -0
  549. package/dist/src/modules/data-tables/lib/validators.d.mts +19 -0
  550. package/dist/src/modules/data-tables/lib/validators.mjs +16 -0
  551. package/dist/src/modules/data-tables/server/get-data.server.d.mts +29 -0
  552. package/dist/src/modules/data-tables/server/get-data.server.mjs +47 -0
  553. package/dist/src/modules/data-tables/strategies/helpers/sorting.mjs +37 -0
  554. package/dist/src/modules/data-tables/strategies/infinite/components.mjs +50 -0
  555. package/dist/src/modules/data-tables/strategies/infinite/strategy.d.mts +20 -0
  556. package/dist/src/modules/data-tables/strategies/infinite/strategy.mjs +50 -0
  557. package/dist/src/modules/data-tables/strategies/local/components.mjs +25 -0
  558. package/dist/src/modules/data-tables/strategies/local/strategy.d.mts +12 -0
  559. package/dist/src/modules/data-tables/strategies/local/strategy.mjs +31 -0
  560. package/dist/src/modules/data-tables/strategies/pagination/components.mjs +131 -0
  561. package/dist/src/modules/data-tables/strategies/pagination/strategy.d.mts +12 -0
  562. package/dist/src/modules/data-tables/strategies/pagination/strategy.mjs +45 -0
  563. package/dist/src/modules/data-tables/tables/data-table/components/body.mjs +32 -0
  564. package/dist/src/modules/data-tables/tables/data-table/components/header.mjs +12 -0
  565. package/dist/src/modules/data-tables/tables/data-table/components/row.mjs +13 -0
  566. package/dist/src/modules/data-tables/tables/data-table/components/table.d.mts +8 -0
  567. package/dist/src/modules/data-tables/tables/data-table/components/table.mjs +42 -0
  568. package/dist/src/modules/data-tables/tables/inline-table/components/body.mjs +69 -0
  569. package/dist/src/modules/data-tables/tables/inline-table/components/cells/common.d.mts +11 -0
  570. package/dist/src/modules/data-tables/tables/inline-table/components/cells/common.mjs +14 -0
  571. package/dist/src/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.d.mts +24 -0
  572. package/dist/src/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.mjs +38 -0
  573. package/dist/src/modules/data-tables/tables/inline-table/components/cells/read-only.d.mts +11 -0
  574. package/dist/src/modules/data-tables/tables/inline-table/components/cells/read-only.mjs +14 -0
  575. package/dist/src/modules/data-tables/tables/inline-table/components/header.mjs +10 -0
  576. package/dist/src/modules/data-tables/tables/inline-table/components/row.client.mjs +24 -0
  577. package/dist/src/modules/data-tables/tables/inline-table/components/table.d.mts +14 -0
  578. package/dist/src/modules/data-tables/tables/inline-table/components/table.mjs +52 -0
  579. package/dist/src/modules/data-tables/tables/inline-table/hooks/context.client.d.mts +48 -0
  580. package/dist/src/modules/data-tables/tables/inline-table/hooks/context.client.mjs +58 -0
  581. package/dist/src/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.d.mts +29 -0
  582. package/dist/src/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.mjs +94 -0
  583. package/dist/src/modules/database/lib/helpers.d.mts +15 -0
  584. package/dist/src/modules/database/lib/helpers.mjs +16 -0
  585. package/dist/src/modules/database/lib/service.server.d.mts +33 -0
  586. package/dist/src/modules/database/lib/service.server.mjs +23 -0
  587. package/dist/src/modules/database/lib/types.d.mts +4 -0
  588. package/dist/src/modules/emails/lib/service.server.d.mts +28 -0
  589. package/dist/src/modules/emails/lib/service.server.mjs +20 -0
  590. package/dist/src/modules/inline/components/cell.client.d.mts +20 -0
  591. package/dist/src/modules/inline/components/cell.client.mjs +46 -0
  592. package/dist/src/modules/inline/components/field.client.d.mts +36 -0
  593. package/dist/src/modules/inline/components/field.client.mjs +61 -0
  594. package/dist/src/modules/inline/components/inputs/combobox-dropdown.client.d.mts +28 -0
  595. package/dist/src/modules/inline/components/inputs/combobox-dropdown.client.mjs +49 -0
  596. package/dist/src/modules/inline/components/inputs/combobox.client.d.mts +23 -0
  597. package/dist/src/modules/inline/components/inputs/combobox.client.mjs +45 -0
  598. package/dist/src/modules/inline/components/inputs/date-time.client.d.mts +25 -0
  599. package/dist/src/modules/inline/components/inputs/date-time.client.mjs +48 -0
  600. package/dist/src/modules/inline/components/inputs/date.client.d.mts +66 -0
  601. package/dist/src/modules/inline/components/inputs/date.client.mjs +175 -0
  602. package/dist/src/modules/inline/components/inputs/editor.client.d.mts +26 -0
  603. package/dist/src/modules/inline/components/inputs/editor.client.mjs +51 -0
  604. package/dist/src/modules/inline/components/inputs/input-recipient.client.d.mts +27 -0
  605. package/dist/src/modules/inline/components/inputs/input-recipient.client.mjs +48 -0
  606. package/dist/src/modules/inline/components/inputs/input.client.d.mts +54 -0
  607. package/dist/src/modules/inline/components/inputs/input.client.mjs +129 -0
  608. package/dist/src/modules/inline/components/inputs/select.client.d.mts +32 -0
  609. package/dist/src/modules/inline/components/inputs/select.client.mjs +64 -0
  610. package/dist/src/modules/inline/components/inputs/switch.client.d.mts +22 -0
  611. package/dist/src/modules/inline/components/inputs/switch.client.mjs +42 -0
  612. package/dist/src/modules/inline/components/inputs/toggle.client.d.mts +24 -0
  613. package/dist/src/modules/inline/components/inputs/toggle.client.mjs +47 -0
  614. package/dist/src/modules/inline/hooks/inline-provider.d.mts +28 -0
  615. package/dist/src/modules/inline/hooks/inline-provider.mjs +25 -0
  616. package/dist/src/modules/inline/hooks/inline-state.client.d.mts +30 -0
  617. package/dist/src/modules/inline/hooks/inline-state.client.mjs +25 -0
  618. package/dist/src/modules/inline/hooks/use-inline.client.d.mts +144 -0
  619. package/dist/src/modules/inline/hooks/use-inline.client.mjs +125 -0
  620. package/dist/src/modules/inline/lib/validators.d.mts +56 -0
  621. package/dist/src/modules/inline/lib/validators.mjs +34 -0
  622. package/dist/src/modules/inline/lib/variants.d.mts +11 -0
  623. package/dist/src/modules/inline/lib/variants.mjs +21 -0
  624. package/dist/src/modules/router/handler/caller.client.d.mts +10 -0
  625. package/dist/src/modules/router/handler/caller.client.mjs +23 -0
  626. package/dist/src/modules/router/handler/caller.server.d.mts +6 -0
  627. package/dist/src/modules/router/handler/caller.server.mjs +7 -0
  628. package/dist/src/modules/router/handler/context.server.d.mts +62 -0
  629. package/dist/src/modules/router/handler/context.server.mjs +20 -0
  630. package/dist/src/modules/router/handler/init.server.d.mts +65 -0
  631. package/dist/src/modules/router/handler/init.server.mjs +55 -0
  632. package/dist/src/modules/router/handler/register.server.d.mts +8 -0
  633. package/dist/src/modules/router/handler/register.server.mjs +10 -0
  634. package/dist/src/modules/router/handler/route.server.d.mts +21 -0
  635. package/dist/src/modules/router/handler/route.server.mjs +32 -0
  636. package/dist/src/modules/router/lib/error.server.d.mts +2 -0
  637. package/dist/src/modules/router/lib/error.server.mjs +3 -0
  638. package/dist/src/modules/router/lib/helpers.mjs +7 -0
  639. package/dist/src/modules/router/lib/query-client.d.mts +10 -0
  640. package/dist/src/modules/router/lib/query-client.mjs +50 -0
  641. package/dist/src/modules/router/lib/query-client.server.d.mts +17 -0
  642. package/dist/src/modules/router/lib/query-client.server.mjs +23 -0
  643. package/dist/src/modules/router/lib/validators.d.mts +12 -0
  644. package/dist/src/modules/router/lib/validators.mjs +10 -0
  645. package/dist/src/modules/storage/components/dropzone-context.client.d.mts +18 -0
  646. package/dist/src/modules/storage/components/dropzone-context.client.mjs +17 -0
  647. package/dist/src/modules/storage/components/dropzone.client.d.mts +52 -0
  648. package/dist/src/modules/storage/components/dropzone.client.mjs +110 -0
  649. package/dist/src/modules/storage/components/image-grid.client.d.mts +32 -0
  650. package/dist/src/modules/storage/components/image-grid.client.mjs +167 -0
  651. package/dist/src/modules/storage/components/image.client.d.mts +7 -0
  652. package/dist/src/modules/storage/components/image.client.mjs +16 -0
  653. package/dist/src/modules/storage/components/upload-button.client.d.mts +11 -0
  654. package/dist/src/modules/storage/components/upload-button.client.mjs +33 -0
  655. package/dist/src/modules/storage/components/upload-zone-context.client.d.mts +30 -0
  656. package/dist/src/modules/storage/components/upload-zone-context.client.mjs +20 -0
  657. package/dist/src/modules/storage/components/upload-zone.client.d.mts +27 -0
  658. package/dist/src/modules/storage/components/upload-zone.client.mjs +111 -0
  659. package/dist/src/modules/storage/lib/constants.d.mts +5 -0
  660. package/dist/src/modules/storage/lib/constants.mjs +5 -0
  661. package/dist/src/modules/storage/lib/helpers.d.mts +29 -0
  662. package/dist/src/modules/storage/lib/helpers.mjs +49 -0
  663. package/dist/src/modules/storage/lib/procedures.server.d.mts +1990 -0
  664. package/dist/src/modules/storage/lib/procedures.server.mjs +21 -0
  665. package/dist/src/modules/storage/lib/router-handlers.server.d.mts +40 -0
  666. package/dist/src/modules/storage/lib/router-handlers.server.mjs +123 -0
  667. package/dist/src/modules/storage/lib/schema.d.mts +291 -0
  668. package/dist/src/modules/storage/lib/schema.mjs +37 -0
  669. package/dist/src/modules/storage/lib/service.server.d.mts +2217 -0
  670. package/dist/src/modules/storage/lib/service.server.mjs +514 -0
  671. package/dist/src/modules/storage/lib/upload.client.d.mts +57 -0
  672. package/dist/src/modules/storage/lib/upload.client.mjs +86 -0
  673. package/dist/src/modules/storage/lib/validators.d.mts +935 -0
  674. package/dist/src/modules/storage/lib/validators.mjs +52 -0
  675. package/dist/src/modules/storage/providers/adapters/s3.server.d.mts +18 -0
  676. package/dist/src/modules/storage/providers/adapters/s3.server.mjs +172 -0
  677. package/dist/src/modules/storage/providers/lib/constants.d.mts +5 -0
  678. package/dist/src/modules/storage/providers/lib/constants.mjs +5 -0
  679. package/dist/src/modules/storage/providers/lib/errors.d.mts +11 -0
  680. package/dist/src/modules/storage/providers/lib/errors.mjs +12 -0
  681. package/dist/src/modules/storage/providers/lib/types.d.mts +20 -0
  682. package/dist/src/modules/storage/providers/lib/validators.d.mts +111 -0
  683. package/dist/src/modules/storage/providers/lib/validators.mjs +74 -0
  684. package/dist/storage/client.d.mts +8 -8
  685. package/dist/storage/client.mjs +8 -8
  686. package/dist/storage/server.d.mts +4 -4
  687. package/dist/storage/server.mjs +4 -4
  688. package/dist/storage.d.mts +8 -8
  689. package/dist/storage.mjs +7 -7
  690. package/package.json +4 -4
  691. package/src/components/ui/accordion.client.tsx +1 -1
  692. package/src/components/ui/alert.tsx +1 -1
  693. package/src/components/ui/avatar.client.tsx +1 -1
  694. package/src/components/ui/breadcrumb.tsx +2 -2
  695. package/src/components/ui/card.tsx +1 -1
  696. package/src/components/ui/carousel.client.tsx +2 -2
  697. package/src/components/ui/chart.client.tsx +2 -2
  698. package/src/components/ui/checkbox.client.tsx +1 -1
  699. package/src/components/ui/collapsible.client.tsx +1 -1
  700. package/src/components/ui/command.client.tsx +19 -4
  701. package/src/components/ui/context-menu.client.tsx +6 -6
  702. package/src/components/ui/drawer.client.tsx +5 -5
  703. package/src/components/ui/dropdown-menu.client.tsx +5 -5
  704. package/src/components/ui/empty.tsx +1 -1
  705. package/src/components/ui/field.client.tsx +3 -3
  706. package/src/components/ui/hover-card.client.tsx +1 -1
  707. package/src/components/ui/input-group.client.tsx +3 -3
  708. package/src/components/ui/input-recipient.tsx +1 -1
  709. package/src/components/ui/item.tsx +5 -5
  710. package/src/components/ui/navigation-menu.tsx +4 -4
  711. package/src/components/ui/pagination.tsx +0 -1
  712. package/src/components/ui/radio-group.tsx +1 -1
  713. package/src/components/ui/sheet.client.tsx +3 -3
  714. package/src/components/ui/tabs.client.tsx +3 -3
  715. package/src/entry.ts +3 -3
  716. package/src/modules/auth/components/allowed.client.tsx +1 -2
  717. package/src/modules/auth/components/update-password-command.tsx +1 -1
  718. package/src/modules/auth/lib/validators.ts +7 -0
  719. package/src/modules/commands/components/menus/context-menu.client.tsx +79 -0
  720. package/src/modules/commands/components/menus/dropdown-menu.client.tsx +84 -0
  721. package/src/modules/commands/components/menus/floating-menu.client.tsx +63 -0
  722. package/src/modules/commands/components/menus/inline-menu.client.tsx +65 -0
  723. package/src/modules/commands/components/menus/responsive-menu.client.tsx +37 -0
  724. package/src/modules/commands/components/{alert-dialog-command.client.tsx → primitives/alert-dialog-command.client.tsx} +11 -40
  725. package/src/modules/commands/components/{click-command.client.tsx → primitives/click-command.client.tsx} +8 -19
  726. package/src/modules/commands/components/primitives/command-trigger.client.tsx +60 -0
  727. package/src/modules/commands/components/{dialog-command.client.tsx → primitives/dialog-command.client.tsx} +8 -31
  728. package/src/modules/commands/components/{dropdown-command.client.tsx → primitives/dropdown-command.client.tsx} +24 -40
  729. package/src/modules/commands/components/{empty-command.client.tsx → primitives/empty-command.client.tsx} +9 -17
  730. package/src/modules/commands/components/{form-dialog-command.client.tsx → primitives/form-dialog-command.client.tsx} +11 -53
  731. package/src/modules/commands/components/render-command.tsx +53 -8
  732. package/src/modules/commands/{utils → components/utils}/archive-command.client.tsx +2 -10
  733. package/src/modules/commands/{utils → components/utils}/delete-command.client.tsx +3 -9
  734. package/src/modules/commands/entry.client.ts +15 -23
  735. package/src/modules/commands/entry.ts +6 -2
  736. package/src/modules/commands/hooks/{use-command-mutation.client.tsx → use-command-mutation.client.ts} +2 -19
  737. package/src/modules/commands/hooks/use-command.client.tsx +78 -0
  738. package/src/modules/commands/lib/builder.ts +271 -0
  739. package/src/modules/commands/lib/registery.ts +279 -0
  740. package/src/modules/commands/lib/utils.ts +10 -0
  741. package/src/modules/data-tables/components/filters/combobox.client.tsx +9 -13
  742. package/src/modules/data-tables/components/filters/date-range.client.tsx +127 -0
  743. package/src/modules/data-tables/components/filters/search.client.tsx +37 -0
  744. package/src/modules/data-tables/components/filters/slider.client.tsx +4 -4
  745. package/src/modules/data-tables/components/filters/toggle.client.tsx +32 -0
  746. package/src/modules/data-tables/components/footer.tsx +11 -2
  747. package/src/modules/data-tables/entry.client.ts +4 -0
  748. package/src/modules/data-tables/entry.server.ts +2 -2
  749. package/src/modules/data-tables/hooks/use-context.client.tsx +9 -11
  750. package/src/modules/data-tables/hooks/use-selection.client.ts +12 -5
  751. package/src/modules/data-tables/hooks/use-table.client.ts +4 -6
  752. package/src/modules/data-tables/lib/converters/filters.ts +85 -0
  753. package/src/modules/data-tables/lib/converters/{cursor.ts → pagination.ts} +1 -1
  754. package/src/modules/data-tables/lib/converters/sorting.ts +61 -18
  755. package/src/modules/data-tables/lib/filters/parsers.ts +18 -0
  756. package/src/modules/data-tables/lib/types.ts +5 -5
  757. package/src/modules/data-tables/server/get-data.server.ts +19 -10
  758. package/src/modules/data-tables/strategies/infinite/components.tsx +2 -10
  759. package/src/modules/data-tables/strategies/local/components.tsx +17 -0
  760. package/src/modules/data-tables/strategies/local/strategy.ts +33 -0
  761. package/src/modules/data-tables/strategies/pagination/components.tsx +1 -5
  762. package/src/modules/data-tables/tables/data-table/components/body.tsx +2 -2
  763. package/src/modules/data-tables/tables/data-table/components/header.tsx +1 -1
  764. package/src/modules/data-tables/tables/data-table/components/row.tsx +2 -21
  765. package/src/modules/data-tables/tables/data-table/components/table.tsx +2 -2
  766. package/src/modules/data-tables/tables/inline-table/components/body.tsx +1 -1
  767. package/src/modules/data-tables/tables/inline-table/components/header.tsx +1 -5
  768. package/src/modules/data-tables/tables/inline-table/components/row.client.tsx +7 -11
  769. package/src/modules/data-tables/tables/inline-table/components/table.tsx +2 -2
  770. package/src/modules/data-tables/tables/inline-table/hooks/context.client.tsx +1 -1
  771. package/src/modules/inline/components/cell.client.tsx +53 -0
  772. package/src/modules/inline/components/field.client.tsx +64 -0
  773. package/src/modules/inline/components/inputs/combobox-dropdown.client.tsx +112 -0
  774. package/src/modules/inline/components/inputs/combobox.client.tsx +100 -0
  775. package/src/modules/inline/components/inputs/date-time.client.tsx +102 -0
  776. package/src/modules/inline/components/inputs/date.client.tsx +295 -0
  777. package/src/modules/inline/components/inputs/editor.client.tsx +105 -0
  778. package/src/modules/inline/components/inputs/input-recipient.client.tsx +97 -0
  779. package/src/modules/inline/components/inputs/input.client.tsx +256 -0
  780. package/src/modules/inline/components/inputs/select.client.tsx +132 -0
  781. package/src/modules/inline/components/inputs/switch.client.tsx +94 -0
  782. package/src/modules/inline/components/inputs/toggle.client.tsx +94 -0
  783. package/src/modules/inline/entry.client.ts +23 -0
  784. package/src/modules/inline/hooks/inline-provider.tsx +32 -0
  785. package/src/modules/inline/hooks/inline-state.client.tsx +33 -0
  786. package/src/modules/inline/hooks/use-inline.client.tsx +298 -0
  787. package/src/modules/router/entry.ts +1 -0
  788. package/src/modules/router/lib/query-client.ts +2 -2
  789. package/src/styles.css +91 -0
  790. package/dist/inline-edit/client.d.mts +0 -15
  791. package/dist/inline-edit/client.mjs +0 -16
  792. package/dist/modules/commands/components/click-command.client.mjs +0 -63
  793. package/dist/modules/commands/components/command-trigger.client.d.mts +0 -33
  794. package/dist/modules/commands/components/command-trigger.client.mjs +0 -49
  795. package/dist/modules/commands/components/empty-command.client.mjs +0 -54
  796. package/dist/modules/commands/hooks/context.client.mjs +0 -31
  797. package/dist/modules/commands/hooks/use-command-menu.client.d.mts +0 -23
  798. package/dist/modules/commands/hooks/use-command-menu.client.mjs +0 -83
  799. package/dist/modules/commands/lib/definitions.d.mts +0 -52
  800. package/dist/modules/commands/lib/factory.d.mts +0 -24
  801. package/dist/modules/commands/lib/factory.mjs +0 -7
  802. package/dist/modules/commands/menus/context-menu.client.d.mts +0 -26
  803. package/dist/modules/commands/menus/context-menu.client.mjs +0 -59
  804. package/dist/modules/commands/menus/dropdown-menu.client.d.mts +0 -18
  805. package/dist/modules/commands/menus/floating-menu.client.d.mts +0 -18
  806. package/dist/modules/commands/menus/floating-menu.client.mjs +0 -45
  807. package/dist/modules/commands/menus/inline-menu.client.d.mts +0 -19
  808. package/dist/modules/commands/menus/inline-menu.client.mjs +0 -45
  809. package/dist/modules/commands/menus/responsive-menu.client.d.mts +0 -9
  810. package/dist/modules/data-tables/lib/converters/filter.d.mts +0 -9
  811. package/dist/modules/data-tables/lib/converters/filter.mjs +0 -13
  812. package/dist/modules/inline-edit/components/combobox-dropdown.client.d.mts +0 -24
  813. package/dist/modules/inline-edit/components/combobox-dropdown.client.mjs +0 -40
  814. package/dist/modules/inline-edit/components/combobox.client.d.mts +0 -19
  815. package/dist/modules/inline-edit/components/combobox.client.mjs +0 -36
  816. package/dist/modules/inline-edit/components/date-input.client.d.mts +0 -18
  817. package/dist/modules/inline-edit/components/date-input.client.mjs +0 -96
  818. package/dist/modules/inline-edit/components/date-picker.client.d.mts +0 -21
  819. package/dist/modules/inline-edit/components/date-picker.client.mjs +0 -61
  820. package/dist/modules/inline-edit/components/date-time.client.d.mts +0 -20
  821. package/dist/modules/inline-edit/components/date-time.client.mjs +0 -38
  822. package/dist/modules/inline-edit/components/editor.client.d.mts +0 -22
  823. package/dist/modules/inline-edit/components/editor.client.mjs +0 -39
  824. package/dist/modules/inline-edit/components/input-recipient.client.d.mts +0 -27
  825. package/dist/modules/inline-edit/components/input-recipient.client.mjs +0 -43
  826. package/dist/modules/inline-edit/components/input-toggle.client.d.mts +0 -19
  827. package/dist/modules/inline-edit/components/input-toggle.client.mjs +0 -53
  828. package/dist/modules/inline-edit/components/input.client.d.mts +0 -49
  829. package/dist/modules/inline-edit/components/input.client.mjs +0 -100
  830. package/dist/modules/inline-edit/components/select.client.d.mts +0 -26
  831. package/dist/modules/inline-edit/components/select.client.mjs +0 -55
  832. package/dist/modules/inline-edit/components/switch.client.d.mts +0 -17
  833. package/dist/modules/inline-edit/components/switch.client.mjs +0 -33
  834. package/dist/modules/inline-edit/components/toggle.client.d.mts +0 -18
  835. package/dist/modules/inline-edit/components/toggle.client.mjs +0 -40
  836. package/dist/modules/inline-edit/hooks/context.client.d.mts +0 -27
  837. package/dist/modules/inline-edit/hooks/context.client.mjs +0 -27
  838. package/dist/modules/inline-edit/hooks/use-inline.client.d.mts +0 -75
  839. package/dist/modules/inline-edit/hooks/use-inline.client.mjs +0 -116
  840. package/src/modules/commands/components/command-trigger.client.tsx +0 -69
  841. package/src/modules/commands/hooks/context.client.tsx +0 -38
  842. package/src/modules/commands/hooks/use-command-menu.client.tsx +0 -252
  843. package/src/modules/commands/lib/definitions.ts +0 -42
  844. package/src/modules/commands/lib/factory.ts +0 -5
  845. package/src/modules/commands/lib/schema.ts +0 -23
  846. package/src/modules/commands/menus/context-menu.client.tsx +0 -69
  847. package/src/modules/commands/menus/dropdown-menu.client.tsx +0 -62
  848. package/src/modules/commands/menus/floating-menu.client.tsx +0 -54
  849. package/src/modules/commands/menus/inline-menu.client.tsx +0 -51
  850. package/src/modules/commands/menus/responsive-menu.client.tsx +0 -27
  851. package/src/modules/commands/utils/send-mail-command.client.tsx +0 -150
  852. package/src/modules/data-tables/lib/converters/filter.ts +0 -11
  853. package/src/modules/inline-edit/components/combobox-dropdown.client.tsx +0 -64
  854. package/src/modules/inline-edit/components/combobox.client.tsx +0 -50
  855. package/src/modules/inline-edit/components/date-input.client.tsx +0 -116
  856. package/src/modules/inline-edit/components/date-picker.client.tsx +0 -74
  857. package/src/modules/inline-edit/components/date-time.client.tsx +0 -55
  858. package/src/modules/inline-edit/components/editor.client.tsx +0 -56
  859. package/src/modules/inline-edit/components/input-recipient.client.tsx +0 -59
  860. package/src/modules/inline-edit/components/input-toggle.client.tsx +0 -75
  861. package/src/modules/inline-edit/components/input.client.tsx +0 -149
  862. package/src/modules/inline-edit/components/select.client.tsx +0 -76
  863. package/src/modules/inline-edit/components/switch.client.tsx +0 -40
  864. package/src/modules/inline-edit/components/toggle.client.tsx +0 -50
  865. package/src/modules/inline-edit/entry.client.ts +0 -22
  866. package/src/modules/inline-edit/hooks/context.client.tsx +0 -30
  867. package/src/modules/inline-edit/hooks/use-inline.client.tsx +0 -205
  868. /package/dist/{inline-edit → inline}/server.d.mts +0 -0
  869. /package/dist/{inline-edit → inline}/server.mjs +0 -0
  870. /package/src/modules/{inline-edit → inline}/entry.server.ts +0 -0
  871. /package/src/modules/{inline-edit → inline}/entry.ts +0 -0
  872. /package/src/modules/{inline-edit → inline}/lib/factory.server.ts +0 -0
  873. /package/src/modules/{inline-edit → inline}/lib/parsers.ts +0 -0
  874. /package/src/modules/{inline-edit → inline}/lib/validators.ts +0 -0
  875. /package/src/modules/{inline-edit → inline}/lib/variants.ts +0 -0
@@ -3,12 +3,7 @@
3
3
  import type { DefaultError, MutationFunction, MutationOptions } from "@tanstack/react-query";
4
4
  import { useRouter } from "next/navigation";
5
5
  import { useAction } from "@/lib/hooks/use-action";
6
- import { useCommand } from "./context.client";
7
-
8
- export type CommandActionResult = Promise<unknown>;
9
-
10
- export type CommandAction<TInput = void> = (input: TInput) => CommandActionResult;
11
- export type BulkCommandAction = (params: { ids: string[] }) => CommandActionResult;
6
+ import { useCommand } from "./use-command.client";
12
7
 
13
8
  export type CommandMutationMeta = {
14
9
  router: ReturnType<typeof useRouter>;
@@ -23,43 +18,31 @@ export function useCommandMutation<
23
18
  const router = useRouter();
24
19
  const commandContext = useCommand();
25
20
 
26
- const mutation = useAction({
21
+ return useAction({
27
22
  ...options,
28
23
  mutationFn: options?.mutationFn as MutationFunction<TData, TVariables>,
29
24
  onMutate: async (...params) => {
30
25
  const result = options?.onMutate?.(...params);
31
-
32
26
  commandContext.setStatus("pending");
33
-
34
27
  return (await result) as TOnMutateResult;
35
28
  },
36
29
  onSuccess: async (...params) => {
37
30
  const result = options?.onSuccess?.(...params);
38
-
39
31
  commandContext.setStatus("success");
40
- await commandContext.onSuccess?.();
41
-
42
32
  return await result;
43
33
  },
44
34
  onError: async (...params) => {
45
35
  const result = options?.onError?.(...params);
46
-
47
36
  commandContext.setStatus("error");
48
- await commandContext.onError?.();
49
-
50
37
  return await result;
51
38
  },
52
39
  onSettled: async (...params) => {
53
40
  const result = options?.onSettled?.(...params);
54
-
55
41
  commandContext.setStatus("idle");
56
-
57
42
  return await result;
58
43
  },
59
44
  meta: {
60
45
  router,
61
46
  } satisfies CommandMutationMeta,
62
47
  });
63
-
64
- return mutation;
65
48
  }
@@ -0,0 +1,78 @@
1
+ "use client";
2
+
3
+ import {
4
+ createContext,
5
+ type Dispatch,
6
+ type PropsWithChildren,
7
+ type SetStateAction,
8
+ useContext,
9
+ useEffect,
10
+ useRef,
11
+ useState,
12
+ } from "react";
13
+ import type { CommandStatus, CommandUI } from "../lib/builder";
14
+
15
+ type CommandContextValue = {
16
+ ui: CommandUI;
17
+ status: CommandStatus;
18
+ disabled: boolean;
19
+ setStatus: Dispatch<SetStateAction<CommandStatus>>;
20
+ };
21
+
22
+ const CommandContext = createContext<CommandContextValue | null>(null);
23
+
24
+ export function useCommand() {
25
+ const context = useContext(CommandContext);
26
+ if (!context) {
27
+ throw new Error("useCommand must be used within CommandContextProvider");
28
+ }
29
+
30
+ return context;
31
+ }
32
+
33
+ export type CommandContextLifecycle = {
34
+ onSuccess?: () => Promise<void> | void;
35
+ onError?: () => Promise<void> | void;
36
+ onSettled?: () => Promise<void> | void;
37
+ };
38
+
39
+ type CommandContextProviderProps = PropsWithChildren<
40
+ CommandContextLifecycle & {
41
+ ui: CommandUI;
42
+ disabled?: boolean;
43
+ }
44
+ >;
45
+
46
+ export function CommandContextProvider({
47
+ children,
48
+ ui,
49
+ disabled = false,
50
+ onSuccess,
51
+ onError,
52
+ onSettled,
53
+ }: CommandContextProviderProps) {
54
+ const [status, setStatus] = useState<CommandStatus>("idle");
55
+ const previousStatusRef = useRef<CommandStatus>("idle");
56
+
57
+ useEffect(() => {
58
+ if (status === previousStatusRef.current) return;
59
+
60
+ if (status === "success") {
61
+ void onSuccess?.();
62
+ void onSettled?.();
63
+ }
64
+
65
+ if (status === "error") {
66
+ void onError?.();
67
+ void onSettled?.();
68
+ }
69
+
70
+ previousStatusRef.current = status;
71
+ }, [status, onSuccess, onError, onSettled]);
72
+
73
+ return (
74
+ <CommandContext.Provider value={{ ui, status, disabled, setStatus }}>
75
+ {children}
76
+ </CommandContext.Provider>
77
+ );
78
+ }
@@ -0,0 +1,271 @@
1
+ import type { Permission } from "@/modules/auth/lib/permissions";
2
+
3
+ /**
4
+ * The different UI contexts in which a command can be rendered.
5
+ */
6
+ export type CommandUI = "dropdown" | "context" | "table" | "inline" | "custom";
7
+
8
+ /**
9
+ * The status of a command, which can be used to style the command's UI appropriately.
10
+ */
11
+ export type CommandStatus = "idle" | "pending" | "success" | "error";
12
+
13
+ /**
14
+ * A string tag that can be added to a command for organizational and filtering purposes.
15
+ */
16
+ export type CommandTag = string;
17
+
18
+ /**
19
+ * Represents a command definition with its associated types and properties.
20
+ */
21
+ // biome-ignore lint/suspicious/noExplicitAny: intentional — holds heterogeneous command data/meta/tag types.
22
+ export type AnyCommandDef = CommandDef<any, any, any, any>;
23
+
24
+ /**
25
+ * Condition function that determines whether a command is visible or disabled based on the provided data and meta.
26
+ */
27
+ export type CommandCondition<TData, TMeta> = (params: {
28
+ data: TData;
29
+ meta: TMeta;
30
+ }) => boolean | boolean[];
31
+
32
+ /**
33
+ * Render function that defines how a command should be rendered based on the provided data, meta, and UI context.
34
+ */
35
+ export type CommandRender<TData, TMeta> = (params: {
36
+ data: TData;
37
+ meta: TMeta;
38
+ ui: CommandUI;
39
+ }) => React.ReactNode;
40
+
41
+ /**
42
+ * Final command definition (without name).
43
+ * Name is derived from the object key in `defineCommands`.
44
+ *
45
+ * @typeParam TData - The type `visibleWhen`, `disabledWhen`, and `render` receive.
46
+ * When `.transform()` is used this is the post-transform type.
47
+ * @typeParam TMeta - Shared contextual metadata passed alongside data.
48
+ * @typeParam TTags - Literal tuple of tag strings preserved from the builder's
49
+ * `.tags()` call. Enables compile-time tag filtering in the
50
+ * registry. Defaults to `string[]` when not provided.
51
+ * @typeParam TInput - The type that menus must pass as `data`. Equals `TData`
52
+ * when no `.transform()` is used. When `.transform(fn)` is
53
+ * called, `TInput` captures the pre-transform type so menus
54
+ * remain correctly typed while `render` sees the transformed type.
55
+ * Structurally expressed as the parameter of `transform`.
56
+ */
57
+ export type CommandDef<
58
+ TData = unknown,
59
+ TMeta = object,
60
+ TTags extends readonly string[] = string[],
61
+ TInput = TData,
62
+ > = {
63
+ id?: string;
64
+ tags: TTags;
65
+ transform?: (data: TInput) => TData;
66
+ permission?: Permission;
67
+ visibleWhen?: CommandCondition<TData, TMeta>;
68
+ disabledWhen?: CommandCondition<TData, TMeta>;
69
+ render: CommandRender<TData, TMeta>;
70
+ };
71
+
72
+ /**
73
+ * Command typed by accepted input data.
74
+ *
75
+ * Useful for APIs that only care about what can be passed in (e.g. table
76
+ * providers that always pass selected rows), not the command's normalized
77
+ * render-time shape.
78
+ */
79
+ // biome-ignore lint/suspicious/noExplicitAny: hides non-input generics for call-site ergonomics.
80
+ export type CommandFor<TInput, TMeta = object> = CommandDef<any, TMeta, any, TInput>;
81
+
82
+ /**
83
+ * Extracts the **input** data type of a command — what menus must pass as `data`.
84
+ *
85
+ * - When `.transform()` is used, this is the pre-transform type (e.g. `Template | Template[]`).
86
+ * - Otherwise it equals the render-time type.
87
+ *
88
+ * The type is read from the `transform` field's parameter when present, and
89
+ * falls back to the `render` parameter when there is no transformer.
90
+ */
91
+ export type ExtractCommandData<TCommand extends AnyCommandDef> = [
92
+ NonNullable<TCommand["transform"]>,
93
+ ] extends [never]
94
+ ? TCommand extends { render: (params: { data: infer TData; meta: any; ui: any }) => any }
95
+ ? TData
96
+ : never
97
+ : NonNullable<TCommand["transform"]> extends (data: infer TInput) => any
98
+ ? TInput
99
+ : never;
100
+
101
+ // ─── Builder interfaces ────────────────────────────────────────────────────────
102
+
103
+ /**
104
+ * Builder state after `.$type<TData>()` has been called (or at initial state
105
+ * with `TData = unknown`).
106
+ *
107
+ * @typeParam TData - Current render-time data type (post-transform if used).
108
+ * @typeParam TTags - Literal tag tuple, carried through every method so that
109
+ * the final `CommandDef` retains the literal type.
110
+ * @typeParam TInput - Input data type for menus. Starts equal to `TData`.
111
+ * Freezes to the value of `TData` at the moment `.transform()`
112
+ * is called, while `TData` changes to the transformer's output.
113
+ */
114
+ type ReadyCommandBuilder<
115
+ TData,
116
+ TMeta,
117
+ TTags extends readonly string[] = string[],
118
+ TInput = TData,
119
+ > = {
120
+ /** Override the data (and optionally meta) type. Resets `TInput` to the new `TData`. */
121
+ $type<TNewData, TNewMeta = TMeta>(): ReadyCommandBuilder<TNewData, TNewMeta, TTags, TNewData>;
122
+ /**
123
+ * Set the command's tags as a literal tuple. The `const` modifier infers
124
+ * string arguments as literals, enabling compile-time tag narrowing in the registry.
125
+ */
126
+ tags<const TNewTags extends string[]>(
127
+ ...tags: TNewTags
128
+ ): ReadyCommandBuilder<TData, TMeta, TNewTags, TInput>;
129
+ permission(permission: Permission): ReadyCommandBuilder<TData, TMeta, TTags, TInput>;
130
+ /**
131
+ * Declares a lightweight transformer that runs once per render — before `visibleWhen`,
132
+ * `disabledWhen`, and `render` — collapsing the input type into a single usable shape.
133
+ *
134
+ * Freezes `TInput` to the current `TData` (the pre-transform type) and advances
135
+ * `TData` to `TNewData` (the transformer's return type). This ensures:
136
+ * - Menus are typed against the union input (e.g. `Template | Template[]`)
137
+ * - `visibleWhen` and `render` work with the clean transformed type (e.g. `Template[]`)
138
+ *
139
+ * @example
140
+ * commandBuilder
141
+ * .$type<Template | Template[]>()
142
+ * .transform((data) => (Array.isArray(data) ? data : [data]))
143
+ * .visibleWhen(({ data }) => data.length > 0) // data: Template[]
144
+ * .render(({ data }) => <ArchiveCommand ids={data.map(i => i.id)} />)
145
+ */
146
+ transform<TNewData>(
147
+ fn: (data: TData) => TNewData,
148
+ ): ReadyCommandBuilder<TNewData, TMeta, TTags, TData>;
149
+ visibleWhen(
150
+ condition: CommandCondition<TData, TMeta>,
151
+ ): ReadyCommandBuilder<TData, TMeta, TTags, TInput>;
152
+ disabledWhen(
153
+ condition: CommandCondition<TData, TMeta>,
154
+ ): ReadyCommandBuilder<TData, TMeta, TTags, TInput>;
155
+ /** Terminal — produces the final `CommandDef`. */
156
+ render(render: CommandRender<TData, TMeta>): CommandDef<TData, TMeta, TTags, TInput>;
157
+ };
158
+
159
+ /**
160
+ * The initial builder returned by `commandBuilder` / `createCommandBuilder()`.
161
+ * Before `.$type<>()` is called, `TData` is `unknown`.
162
+ */
163
+ type InitialCommandBuilder<TMeta> = ReadyCommandBuilder<unknown, TMeta, string[], unknown> & {
164
+ $type<TNewData, TNewMeta = TMeta>(): ReadyCommandBuilder<TNewData, TNewMeta, string[], TNewData>;
165
+ tags<const TNewTags extends string[]>(
166
+ ...tags: TNewTags
167
+ ): ReadyCommandBuilder<unknown, TMeta, TNewTags, unknown>;
168
+ };
169
+
170
+ // ─── Internal builder state ────────────────────────────────────────────────────
171
+
172
+ type StartState<TMeta> = {
173
+ tags?: readonly string[];
174
+ permission?: Permission;
175
+ meta?: TMeta;
176
+ };
177
+
178
+ type ReadyState<TData, TMeta, TTags extends readonly string[]> = {
179
+ tags: TTags;
180
+ permission?: Permission;
181
+ // Erased to (data: unknown) => unknown at storage level; CommandDef.transform is typed as
182
+ // CommandNormalize<TInput, TData> and restored via cast in the render() terminal.
183
+ transform?: (data: unknown) => unknown;
184
+ visibleWhen?: CommandCondition<TData, TMeta>;
185
+ disabledWhen?: CommandCondition<TData, TMeta>;
186
+ };
187
+
188
+ // ─── Builder factory functions ─────────────────────────────────────────────────
189
+
190
+ function createInitialBuilder<TMeta>(state: StartState<TMeta>): InitialCommandBuilder<TMeta> {
191
+ const readyBuilder = createReadyBuilder<unknown, TMeta, string[]>({
192
+ tags: (state.tags as string[]) ?? [],
193
+ permission: state.permission,
194
+ });
195
+
196
+ return {
197
+ ...readyBuilder,
198
+ tags<const TNewTags extends string[]>(...tags: TNewTags) {
199
+ return createReadyBuilder<unknown, TMeta, TNewTags>({
200
+ tags,
201
+ permission: state.permission,
202
+ });
203
+ },
204
+ $type<TNewData, TNewMeta = TMeta>() {
205
+ return createReadyBuilder<TNewData, TNewMeta, string[]>({
206
+ tags: (state.tags as string[]) ?? [],
207
+ permission: state.permission,
208
+ });
209
+ },
210
+ } as InitialCommandBuilder<TMeta>;
211
+ }
212
+
213
+ function createReadyBuilder<TData, TMeta, TTags extends readonly string[]>(
214
+ state: ReadyState<TData, TMeta, TTags>,
215
+ ): ReadyCommandBuilder<TData, TMeta, TTags, TData> {
216
+ return {
217
+ $type<TNewData, TNewMeta = TMeta>() {
218
+ return createReadyBuilder<TNewData, TNewMeta, TTags>({
219
+ tags: state.tags,
220
+ permission: state.permission,
221
+ });
222
+ },
223
+ tags<const TNewTags extends string[]>(...tags: TNewTags) {
224
+ return createReadyBuilder<TData, TMeta, TNewTags>({
225
+ tags,
226
+ permission: state.permission,
227
+ transform: state.transform,
228
+ visibleWhen: state.visibleWhen as CommandCondition<TData, TMeta> | undefined,
229
+ disabledWhen: state.disabledWhen as CommandCondition<TData, TMeta> | undefined,
230
+ });
231
+ },
232
+ permission(permission: Permission) {
233
+ return createReadyBuilder<TData, TMeta, TTags>({ ...state, permission });
234
+ },
235
+ transform<TNewData>(fn: (data: TData) => TNewData) {
236
+ // TInput freezes to the current TData; TData advances to TNewData.
237
+ // The returned builder is typed ReadyCommandBuilder<TNewData, TMeta, TTags, TData>
238
+ // but createReadyBuilder only tracks TData (output); TInput is enforced via the cast.
239
+ return createReadyBuilder<TNewData, TMeta, TTags>({
240
+ tags: state.tags,
241
+ permission: state.permission,
242
+ transform: fn as (data: unknown) => unknown,
243
+ }) as unknown as ReadyCommandBuilder<TNewData, TMeta, TTags, TData>;
244
+ },
245
+ visibleWhen(condition: CommandCondition<TData, TMeta>) {
246
+ return createReadyBuilder<TData, TMeta, TTags>({ ...state, visibleWhen: condition });
247
+ },
248
+ disabledWhen(condition: CommandCondition<TData, TMeta>) {
249
+ return createReadyBuilder<TData, TMeta, TTags>({ ...state, disabledWhen: condition });
250
+ },
251
+ render(render: CommandRender<TData, TMeta>) {
252
+ // The transform field is stored as (data: unknown) => unknown in ReadyState but
253
+ // CommandDef.transform is typed as (data: TInput) => TData. The cast bridges the gap;
254
+ // runtime correctness is guaranteed by the builder's type constraints.
255
+ return {
256
+ tags: state.tags,
257
+ transform: state.transform,
258
+ permission: state.permission,
259
+ visibleWhen: state.visibleWhen,
260
+ disabledWhen: state.disabledWhen,
261
+ render,
262
+ } as unknown as CommandDef<TData, TMeta, TTags, TData>;
263
+ },
264
+ } as ReadyCommandBuilder<TData, TMeta, TTags, TData>;
265
+ }
266
+
267
+ export function createCommandBuilder<TMeta = object>(): InitialCommandBuilder<TMeta> {
268
+ return createInitialBuilder<TMeta>({});
269
+ }
270
+
271
+ export const commandBuilder = createCommandBuilder();
@@ -0,0 +1,279 @@
1
+ import type { AnyCommandDef } from "./builder";
2
+
3
+ /**
4
+ * Command map type defining the shape of command definitions.
5
+ */
6
+ export type CommandMap = Record<string, AnyCommandDef>;
7
+
8
+ /** Union of all values in a command map. */
9
+ type ValueOf<TCommands extends CommandMap> = TCommands[keyof TCommands];
10
+
11
+ // ─── Tag filter type helpers ───────────────────────────────────────────────────
12
+ // Each helper checks ONLY the `tags` field to avoid function-type variance issues.
13
+ // Commands with non-literal `string[]` tags are always kept (conservative fallback).
14
+
15
+ /** Keep commands that have **every** of `TFilterTags`. */
16
+ type FilterAllTags<
17
+ TCommand extends AnyCommandDef,
18
+ TFilterTags extends readonly string[],
19
+ > = TCommand extends { tags: infer CmdTags extends readonly string[] }
20
+ ? TFilterTags[number] extends CmdTags[number]
21
+ ? TCommand
22
+ : never
23
+ : TCommand;
24
+
25
+ /** Keep commands that have **some** of `TFilterTags`. */
26
+ type FilterAnyTags<
27
+ TCommand extends AnyCommandDef,
28
+ TFilterTags extends readonly string[],
29
+ > = TCommand extends { tags: infer CmdTags extends readonly string[] }
30
+ ? string[] extends CmdTags
31
+ ? TCommand
32
+ : Extract<CmdTags[number], TFilterTags[number]> extends never
33
+ ? never
34
+ : TCommand
35
+ : TCommand;
36
+
37
+ /** Keep commands whose tag set equals `TFilterTags` (order-insensitive). */
38
+ type FilterExactTags<
39
+ TCommand extends AnyCommandDef,
40
+ TFilterTags extends readonly string[],
41
+ > = TCommand extends { tags: infer CmdTags extends readonly string[] }
42
+ ? string[] extends CmdTags
43
+ ? TCommand
44
+ : [CmdTags[number]] extends [TFilterTags[number]]
45
+ ? [TFilterTags[number]] extends [CmdTags[number]]
46
+ ? TCommand
47
+ : never
48
+ : never
49
+ : TCommand;
50
+
51
+ /** Keep commands that have **without** of `TFilterTags`. */
52
+ type FilterWithoutTags<
53
+ TCommand extends AnyCommandDef,
54
+ TFilterTags extends readonly string[],
55
+ > = TCommand extends { tags: infer CmdTags extends readonly string[] }
56
+ ? string[] extends CmdTags
57
+ ? TCommand
58
+ : Extract<CmdTags[number], TFilterTags[number]> extends never
59
+ ? TCommand
60
+ : never
61
+ : TCommand;
62
+
63
+ // ─── Registry type definitions ─────────────────────────────────────────────────
64
+
65
+ type CommandKey<TCommands extends CommandMap> = Extract<keyof TCommands, string>;
66
+ type CommandFlags<TCommands extends CommandMap> = Partial<Record<CommandKey<TCommands>, boolean>>;
67
+ type CommandInput<TCommands extends CommandMap> =
68
+ | readonly CommandKey<TCommands>[]
69
+ | CommandFlags<TCommands>;
70
+
71
+ type TruthyKeys<T> = { [K in keyof T]-?: T[K] extends true ? K : never }[keyof T];
72
+
73
+ type PickedCommands<
74
+ TCommands extends CommandMap,
75
+ TInput extends CommandInput<TCommands>,
76
+ > = TInput extends readonly CommandKey<TCommands>[]
77
+ ? Pick<TCommands, TInput[number]>
78
+ : TInput extends CommandFlags<TCommands>
79
+ ? Pick<TCommands, Extract<TruthyKeys<TInput>, keyof TCommands>>
80
+ : never;
81
+
82
+ type OmittedCommands<
83
+ TCommands extends CommandMap,
84
+ TInput extends CommandInput<TCommands>,
85
+ > = TInput extends readonly CommandKey<TCommands>[]
86
+ ? Omit<TCommands, TInput[number]>
87
+ : TInput extends CommandFlags<TCommands>
88
+ ? Omit<TCommands, Extract<TruthyKeys<TInput>, keyof TCommands>>
89
+ : never;
90
+
91
+ type ExtendedCommands<TBase extends CommandMap, TExtension extends CommandMap> = Omit<
92
+ TBase,
93
+ keyof TExtension
94
+ > &
95
+ TExtension;
96
+
97
+ type CommandTagFilterRegistry<TCommand extends AnyCommandDef> = {
98
+ every<const TTags extends string[]>(
99
+ ...tags: TTags
100
+ ): CommandTagFilterRegistry<FilterAllTags<TCommand, TTags>>;
101
+ some<const TTags extends string[]>(
102
+ ...tags: TTags
103
+ ): CommandTagFilterRegistry<FilterAnyTags<TCommand, TTags>>;
104
+ exact<const TTags extends string[]>(
105
+ ...tags: TTags
106
+ ): CommandTagFilterRegistry<FilterExactTags<TCommand, TTags>>;
107
+ without<const TTags extends string[]>(
108
+ ...tags: TTags
109
+ ): CommandTagFilterRegistry<FilterWithoutTags<TCommand, TTags>>;
110
+ toArray(): TCommand[];
111
+ };
112
+
113
+ type CommandKeyFilterRegistry<TCommands extends CommandMap> = {
114
+ pick<const TInput extends CommandInput<TCommands>>(
115
+ input: TInput,
116
+ ): CommandKeyFilterRegistry<PickedCommands<TCommands, TInput>>;
117
+ omit<const TInput extends CommandInput<TCommands>>(
118
+ input: TInput,
119
+ ): CommandKeyFilterRegistry<OmittedCommands<TCommands, TInput>>;
120
+ toArray(): ValueOf<TCommands>[];
121
+ };
122
+
123
+ type CommandRegistry<TCommands extends CommandMap> = {
124
+ commands: TCommands;
125
+ keys: CommandKeyFilterRegistry<TCommands>;
126
+ tags: CommandTagFilterRegistry<ValueOf<TCommands>>;
127
+ extend<const TExtension extends CommandMap>(
128
+ extension: TExtension,
129
+ ): CommandRegistry<ExtendedCommands<TCommands, TExtension>>;
130
+ /** @deprecated Use `commands.keys.pick(...)` instead. */
131
+ pick<const TInput extends CommandInput<TCommands>>(
132
+ input: TInput,
133
+ ): CommandRegistry<PickedCommands<TCommands, TInput>>;
134
+ /** @deprecated Use `commands.keys.omit(...)` instead. */
135
+ omit<const TInput extends CommandInput<TCommands>>(
136
+ input: TInput,
137
+ ): CommandRegistry<OmittedCommands<TCommands, TInput>>;
138
+ toArray(): ValueOf<TCommands>[];
139
+ };
140
+
141
+ // ─── Runtime helpers ───────────────────────────────────────────────────────────
142
+
143
+ function resolveKeys<TCommands extends CommandMap>(
144
+ input: CommandInput<TCommands>,
145
+ ): CommandKey<TCommands>[] {
146
+ if (Array.isArray(input)) return [...input];
147
+ return Object.entries(input)
148
+ .filter(([, enabled]) => enabled === true)
149
+ .map(([key]) => key as CommandKey<TCommands>);
150
+ }
151
+
152
+ function dedupe(tags: readonly string[]) {
153
+ return [...new Set(tags)];
154
+ }
155
+
156
+ function hasEveryTag(command: AnyCommandDef, tags: readonly string[]) {
157
+ return tags.every((tag) => command.tags.includes(tag));
158
+ }
159
+
160
+ function hasSomeTag(command: AnyCommandDef, tags: readonly string[]) {
161
+ return tags.some((tag) => command.tags.includes(tag));
162
+ }
163
+
164
+ function hasExactTags(command: AnyCommandDef, tags: readonly string[]) {
165
+ const ctags = dedupe(command.tags);
166
+ const ftags = dedupe(tags);
167
+ return ctags.length === ftags.length && ftags.every((t) => ctags.includes(t));
168
+ }
169
+
170
+ function injectIds<TCommands extends CommandMap>(commands: TCommands): TCommands {
171
+ return Object.fromEntries(
172
+ Object.entries(commands).map(([id, c]) => [id, { ...c, id }]),
173
+ ) as TCommands;
174
+ }
175
+
176
+ function pickCommands<TCommands extends CommandMap, TInput extends CommandInput<TCommands>>(
177
+ commands: TCommands,
178
+ input: TInput,
179
+ ): PickedCommands<TCommands, TInput> {
180
+ const keys = resolveKeys<TCommands>(input);
181
+ return Object.fromEntries(
182
+ keys.filter((k) => k in commands).map((k) => [k, commands[k]]),
183
+ ) as PickedCommands<TCommands, TInput>;
184
+ }
185
+
186
+ function omitCommands<TCommands extends CommandMap, TInput extends CommandInput<TCommands>>(
187
+ commands: TCommands,
188
+ input: TInput,
189
+ ): OmittedCommands<TCommands, TInput> {
190
+ const keys = new Set(resolveKeys<TCommands>(input));
191
+ return Object.fromEntries(
192
+ Object.entries(commands).filter(([k]) => !keys.has(k as CommandKey<TCommands>)),
193
+ ) as OmittedCommands<TCommands, TInput>;
194
+ }
195
+
196
+ function createTagFilterRegistry<TCommand extends AnyCommandDef>(
197
+ commands: TCommand[],
198
+ ): CommandTagFilterRegistry<TCommand> {
199
+ function apply<const TTags extends string[]>(
200
+ predicate: (cmd: AnyCommandDef, tags: readonly string[]) => boolean,
201
+ ) {
202
+ return (...tags: TTags) => {
203
+ const filtered = commands.filter((c) => predicate(c, tags));
204
+ return createTagFilterRegistry(filtered) as CommandTagFilterRegistry<any>;
205
+ };
206
+ }
207
+
208
+ return {
209
+ every: apply(hasEveryTag) as CommandTagFilterRegistry<TCommand>["every"],
210
+ some: apply(hasSomeTag) as CommandTagFilterRegistry<TCommand>["some"],
211
+ exact: apply(hasExactTags) as CommandTagFilterRegistry<TCommand>["exact"],
212
+ without: apply((c, ts) => !hasSomeTag(c, ts)) as CommandTagFilterRegistry<TCommand>["without"],
213
+ toArray() {
214
+ return commands;
215
+ },
216
+ };
217
+ }
218
+
219
+ function createKeyFilterRegistry<TCommands extends CommandMap>(
220
+ commands: TCommands,
221
+ ): CommandKeyFilterRegistry<TCommands> {
222
+ return {
223
+ pick<const TInput extends CommandInput<TCommands>>(input: TInput) {
224
+ return createKeyFilterRegistry(pickCommands(commands, input));
225
+ },
226
+ omit<const TInput extends CommandInput<TCommands>>(input: TInput) {
227
+ return createKeyFilterRegistry(omitCommands(commands, input));
228
+ },
229
+ toArray() {
230
+ return Object.values(commands) as ValueOf<TCommands>[];
231
+ },
232
+ };
233
+ }
234
+
235
+ function createRegistry<TCommands extends CommandMap>(
236
+ commands: TCommands,
237
+ ): CommandRegistry<TCommands> {
238
+ const withIds = injectIds(commands);
239
+ const keys = createKeyFilterRegistry(withIds);
240
+
241
+ return {
242
+ commands: withIds,
243
+ keys,
244
+ tags: createTagFilterRegistry(Object.values(withIds) as ValueOf<TCommands>[]),
245
+ extend<const TExtension extends CommandMap>(extension: TExtension) {
246
+ return createRegistry({ ...withIds, ...extension } as ExtendedCommands<
247
+ TCommands,
248
+ TExtension
249
+ >);
250
+ },
251
+ pick(input) {
252
+ return createRegistry(pickCommands(withIds, input as CommandInput<TCommands>));
253
+ },
254
+ omit(input) {
255
+ return createRegistry(omitCommands(withIds, input as CommandInput<TCommands>));
256
+ },
257
+ toArray() {
258
+ return Object.values(withIds) as ValueOf<TCommands>[];
259
+ },
260
+ } as CommandRegistry<TCommands>;
261
+ }
262
+
263
+ /**
264
+ * Define commands from a map of name → `CommandDef`.
265
+ *
266
+ * Returns a `CommandRegistry` with key-based and tag-based filtering, plus
267
+ * `extend` for composition. Filter chains are immutable — each call produces
268
+ * a new registry.
269
+ *
270
+ * @example
271
+ * const registry = defineCommands({ edit, delete, archive });
272
+ * registry.tags.every("danger", "table").toArray();
273
+ * registry.keys.omit({ delete: true }).toArray();
274
+ */
275
+ export function defineCommands<TCommands extends CommandMap>(
276
+ commands: TCommands,
277
+ ): CommandRegistry<TCommands> {
278
+ return createRegistry(commands);
279
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Normalizes command data into an array.
3
+ *
4
+ * Use this as a command transform when the same command should support both
5
+ * single-item and bulk contexts. After `.transform(ensureArray)`, command
6
+ * callbacks can safely use array helpers like `.map` and `.every`.
7
+ */
8
+ export function ensureArray<T>(data: T | T[]) {
9
+ return Array.isArray(data) ? data : [data];
10
+ }