@tulip-systems/core 0.8.3 → 0.9.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 (852) 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 +3 -3
  10. package/dist/commands.mjs +3 -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/checkbox.client.mjs +1 -1
  16. package/dist/components/ui/command.client.d.mts +5 -1
  17. package/dist/components/ui/command.client.mjs +10 -3
  18. package/dist/components/ui/field.client.mjs +1 -1
  19. package/dist/components/ui/input-recipient.mjs +1 -1
  20. package/dist/components/ui/radio-group.mjs +1 -1
  21. package/dist/components/ui/tabs.client.mjs +1 -1
  22. package/dist/components.d.mts +39 -39
  23. package/dist/components.mjs +38 -38
  24. package/dist/config.d.mts +6 -6
  25. package/dist/config.mjs +4 -4
  26. package/dist/data-tables/client.d.mts +21 -18
  27. package/dist/data-tables/client.mjs +21 -18
  28. package/dist/data-tables/server.d.mts +7 -7
  29. package/dist/data-tables/server.mjs +7 -7
  30. package/dist/data-tables.d.mts +14 -14
  31. package/dist/data-tables.mjs +13 -13
  32. package/dist/database/server.d.mts +1 -1
  33. package/dist/database/server.mjs +1 -1
  34. package/dist/database.d.mts +2 -2
  35. package/dist/database.mjs +1 -1
  36. package/dist/dist/config.d.mts +5 -0
  37. package/dist/dist/modules/auth/handler/service.server.d.mts +8 -0
  38. package/dist/dist/modules/auth/lib/permissions.d.mts +2 -0
  39. package/dist/dist/modules/config/lib/context.d.mts +4 -0
  40. package/dist/dist/modules/config/paths/helpers.d.mts +1 -0
  41. package/dist/dist/modules/config/paths/types.d.mts +3 -0
  42. package/dist/dist/modules/database/lib/helpers.d.mts +2 -0
  43. package/dist/dist/modules/database/lib/service.server.d.mts +2 -0
  44. package/dist/dist/modules/database/lib/types.d.mts +5 -0
  45. package/dist/dist/modules/emails/lib/service.server.d.mts +2 -0
  46. package/dist/dist/modules/storage/lib/schema.d.mts +1 -0
  47. package/dist/dist/modules/storage/lib/service.server.d.mts +5 -0
  48. package/dist/dist/modules/storage/lib/validators.d.mts +4 -0
  49. package/dist/dist/modules/storage/providers/lib/types.d.mts +1 -0
  50. package/dist/dist/modules/storage/providers/lib/validators.d.mts +2 -0
  51. package/dist/emails/server.d.mts +1 -1
  52. package/dist/emails/server.mjs +1 -1
  53. package/dist/inline/client.d.mts +16 -0
  54. package/dist/inline/client.mjs +17 -0
  55. package/dist/{inline-edit.d.mts → inline.d.mts} +1 -1
  56. package/dist/{inline-edit.mjs → inline.mjs} +1 -1
  57. package/dist/lib/client.d.mts +4 -4
  58. package/dist/lib/client.mjs +4 -4
  59. package/dist/lib.d.mts +7 -7
  60. package/dist/lib.mjs +6 -6
  61. package/dist/modules/auth/components/allowed.client.d.mts +1 -2
  62. package/dist/modules/auth/components/update-password-command.d.mts +1 -1
  63. package/dist/modules/auth/components/update-password-command.mjs +1 -1
  64. package/dist/modules/auth/lib/validators.d.mts +238 -1
  65. package/dist/modules/auth/lib/validators.mjs +5 -1
  66. package/dist/modules/commands/components/menus/context-menu.client.d.mts +40 -0
  67. package/dist/modules/commands/components/menus/context-menu.client.mjs +47 -0
  68. package/dist/modules/commands/components/menus/dropdown-menu.client.d.mts +30 -0
  69. package/dist/modules/commands/{menus → components/menus}/dropdown-menu.client.mjs +20 -24
  70. package/dist/modules/commands/components/menus/floating-menu.client.d.mts +30 -0
  71. package/dist/modules/commands/components/menus/floating-menu.client.mjs +33 -0
  72. package/dist/modules/commands/components/menus/inline-menu.client.d.mts +30 -0
  73. package/dist/modules/commands/components/menus/inline-menu.client.mjs +41 -0
  74. package/dist/modules/commands/components/menus/responsive-menu.client.d.mts +17 -0
  75. package/dist/modules/commands/{menus → components/menus}/responsive-menu.client.mjs +1 -1
  76. package/dist/modules/commands/components/{alert-dialog-command.client.d.mts → primitives/alert-dialog-command.client.d.mts} +3 -30
  77. package/dist/modules/commands/components/{alert-dialog-command.client.mjs → primitives/alert-dialog-command.client.mjs} +18 -38
  78. package/dist/modules/commands/components/{click-command.client.d.mts → primitives/click-command.client.d.mts} +2 -2
  79. package/dist/modules/commands/components/primitives/click-command.client.mjs +52 -0
  80. package/dist/modules/commands/components/primitives/command-trigger.client.d.mts +17 -0
  81. package/dist/modules/commands/components/primitives/command-trigger.client.mjs +42 -0
  82. package/dist/modules/commands/components/{dialog-command.client.d.mts → primitives/dialog-command.client.d.mts} +3 -27
  83. package/dist/modules/commands/components/{dialog-command.client.mjs → primitives/dialog-command.client.mjs} +14 -31
  84. package/dist/modules/commands/components/{dropdown-command.client.d.mts → primitives/dropdown-command.client.d.mts} +5 -17
  85. package/dist/modules/commands/components/{dropdown-command.client.mjs → primitives/dropdown-command.client.mjs} +30 -30
  86. package/dist/modules/commands/components/{empty-command.client.d.mts → primitives/empty-command.client.d.mts} +4 -2
  87. package/dist/modules/commands/components/primitives/empty-command.client.mjs +44 -0
  88. package/dist/modules/commands/components/{form-dialog-command.client.d.mts → primitives/form-dialog-command.client.d.mts} +3 -33
  89. package/dist/modules/commands/components/{form-dialog-command.client.mjs → primitives/form-dialog-command.client.mjs} +18 -42
  90. package/dist/modules/commands/components/render-command.mjs +40 -5
  91. package/dist/modules/commands/{utils → components/utils}/archive-command.client.d.mts +1 -9
  92. package/dist/modules/commands/{utils → components/utils}/archive-command.client.mjs +4 -12
  93. package/dist/modules/commands/{utils → components/utils}/delete-command.client.d.mts +1 -8
  94. package/dist/modules/commands/{utils → components/utils}/delete-command.client.mjs +4 -11
  95. package/dist/modules/commands/hooks/use-command-mutation.client.d.mts +1 -6
  96. package/dist/modules/commands/hooks/use-command-mutation.client.mjs +2 -4
  97. package/dist/modules/commands/hooks/use-command.client.d.mts +31 -0
  98. package/dist/modules/commands/hooks/use-command.client.mjs +45 -0
  99. package/dist/modules/commands/lib/builder.d.mts +39 -0
  100. package/dist/modules/commands/lib/builder.mjs +47 -0
  101. package/dist/modules/commands/lib/registery.d.mts +35 -0
  102. package/dist/modules/commands/lib/registery.mjs +43 -0
  103. package/dist/modules/data-tables/components/filters/combobox.client.d.mts +2 -2
  104. package/dist/modules/data-tables/components/filters/combobox.client.mjs +7 -9
  105. package/dist/modules/data-tables/components/filters/date-range.client.d.mts +24 -0
  106. package/dist/modules/data-tables/components/filters/date-range.client.mjs +99 -0
  107. package/dist/modules/data-tables/components/filters/search.client.d.mts +17 -0
  108. package/dist/modules/data-tables/components/filters/search.client.mjs +32 -0
  109. package/dist/modules/data-tables/components/filters/slider.client.d.mts +2 -2
  110. package/dist/modules/data-tables/components/filters/slider.client.mjs +2 -2
  111. package/dist/modules/data-tables/components/filters/toggle.client.d.mts +17 -0
  112. package/dist/modules/data-tables/components/filters/toggle.client.mjs +25 -0
  113. package/dist/modules/data-tables/hooks/use-context.client.d.mts +9 -20
  114. package/dist/modules/data-tables/hooks/use-selection.client.mjs +8 -2
  115. package/dist/modules/data-tables/hooks/use-table.client.d.mts +1 -3
  116. package/dist/modules/data-tables/hooks/use-table.client.mjs +4 -3
  117. package/dist/modules/data-tables/lib/converters/filters.d.mts +40 -0
  118. package/dist/modules/data-tables/lib/converters/filters.mjs +38 -0
  119. package/dist/modules/data-tables/lib/converters/{cursor.d.mts → pagination.d.mts} +3 -3
  120. package/dist/modules/data-tables/lib/converters/{cursor.mjs → pagination.mjs} +3 -3
  121. package/dist/modules/data-tables/lib/converters/sorting.d.mts +42 -8
  122. package/dist/modules/data-tables/lib/converters/sorting.mjs +47 -11
  123. package/dist/modules/data-tables/lib/filters/parsers.d.mts +6 -1
  124. package/dist/modules/data-tables/lib/filters/parsers.mjs +10 -1
  125. package/dist/modules/data-tables/lib/types.d.mts +4 -8
  126. package/dist/modules/data-tables/server/get-data.server.d.mts +2 -3
  127. package/dist/modules/data-tables/server/get-data.server.mjs +5 -5
  128. package/dist/modules/data-tables/tables/data-table/components/table.d.mts +1 -3
  129. package/dist/modules/data-tables/tables/data-table/components/table.mjs +1 -1
  130. package/dist/modules/data-tables/tables/inline-table/components/row.client.mjs +2 -7
  131. package/dist/modules/data-tables/tables/inline-table/components/table.d.mts +1 -3
  132. package/dist/modules/data-tables/tables/inline-table/components/table.mjs +1 -1
  133. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts +1 -3
  134. package/dist/modules/inline/components/cell.client.d.mts +20 -0
  135. package/dist/modules/inline/components/cell.client.mjs +46 -0
  136. package/dist/modules/inline/components/field.client.d.mts +36 -0
  137. package/dist/modules/inline/components/field.client.mjs +61 -0
  138. package/dist/modules/inline/components/inputs/combobox-dropdown.client.d.mts +27 -0
  139. package/dist/modules/inline/components/inputs/combobox-dropdown.client.mjs +49 -0
  140. package/dist/modules/inline/components/inputs/combobox.client.d.mts +22 -0
  141. package/dist/modules/inline/components/inputs/combobox.client.mjs +45 -0
  142. package/dist/modules/inline/components/inputs/date-time.client.d.mts +24 -0
  143. package/dist/modules/inline/components/inputs/date-time.client.mjs +48 -0
  144. package/dist/modules/inline/components/inputs/date.client.d.mts +66 -0
  145. package/dist/modules/inline/components/inputs/date.client.mjs +175 -0
  146. package/dist/modules/inline/components/inputs/editor.client.d.mts +25 -0
  147. package/dist/modules/inline/components/inputs/editor.client.mjs +51 -0
  148. package/dist/modules/inline/components/inputs/input-recipient.client.d.mts +27 -0
  149. package/dist/modules/inline/components/inputs/input-recipient.client.mjs +48 -0
  150. package/dist/modules/inline/components/inputs/input.client.d.mts +52 -0
  151. package/dist/modules/inline/components/inputs/input.client.mjs +129 -0
  152. package/dist/modules/inline/components/inputs/select.client.d.mts +31 -0
  153. package/dist/modules/inline/components/inputs/select.client.mjs +64 -0
  154. package/dist/modules/inline/components/inputs/switch.client.d.mts +21 -0
  155. package/dist/modules/inline/components/inputs/switch.client.mjs +42 -0
  156. package/dist/modules/inline/components/inputs/toggle.client.d.mts +24 -0
  157. package/dist/modules/inline/components/inputs/toggle.client.mjs +47 -0
  158. package/dist/modules/inline/hooks/inline-provider.d.mts +28 -0
  159. package/dist/modules/inline/hooks/inline-provider.mjs +25 -0
  160. package/dist/modules/inline/hooks/inline-state.client.d.mts +30 -0
  161. package/dist/modules/inline/hooks/inline-state.client.mjs +25 -0
  162. package/dist/modules/inline/hooks/use-inline.client.d.mts +144 -0
  163. package/dist/modules/inline/hooks/use-inline.client.mjs +125 -0
  164. package/dist/modules/{inline-edit → inline}/lib/validators.d.mts +1 -1
  165. package/dist/modules/{inline-edit → inline}/lib/validators.mjs +1 -1
  166. package/dist/modules/inline/lib/variants.d.mts +11 -0
  167. package/dist/modules/{inline-edit → inline}/lib/variants.mjs +1 -1
  168. package/dist/modules/storage/lib/service.server.d.mts +9 -9
  169. package/dist/router/client.d.mts +1 -1
  170. package/dist/router/client.mjs +1 -1
  171. package/dist/router/server.d.mts +7 -7
  172. package/dist/router/server.mjs +7 -7
  173. package/dist/router.d.mts +1 -1
  174. package/dist/router.mjs +1 -1
  175. package/dist/src/components/common/icons.d.mts +60 -0
  176. package/dist/src/components/common/icons.mjs +121 -0
  177. package/dist/src/components/common/status.d.mts +52 -0
  178. package/dist/src/components/common/status.mjs +55 -0
  179. package/dist/src/components/editor/components/content.client.d.mts +6 -0
  180. package/dist/src/components/editor/components/content.client.mjs +16 -0
  181. package/dist/src/components/editor/components/editor.client.d.mts +48 -0
  182. package/dist/src/components/editor/components/editor.client.mjs +55 -0
  183. package/dist/src/components/editor/components/menu-nodes.client.mjs +92 -0
  184. package/dist/src/components/editor/components/menu.client.d.mts +9 -0
  185. package/dist/src/components/editor/components/menu.client.mjs +168 -0
  186. package/dist/src/components/editor/extensions/file-handler/extension.d.mts +20 -0
  187. package/dist/src/components/editor/extensions/file-handler/extension.mjs +39 -0
  188. package/dist/src/components/editor/extensions/file-handler/strategy.d.mts +26 -0
  189. package/dist/src/components/editor/extensions/file-handler/strategy.mjs +110 -0
  190. package/dist/src/components/editor/extensions/file-handler/utils.mjs +49 -0
  191. package/dist/src/components/editor/extensions/image/extension.d.mts +7 -0
  192. package/dist/src/components/editor/extensions/image/extension.mjs +50 -0
  193. package/dist/src/components/editor/extensions/skeleton/extension.mjs +40 -0
  194. package/dist/src/components/editor/extensions/skeleton/renderer.mjs +24 -0
  195. package/dist/src/components/editor/lib/constants.d.mts +62 -0
  196. package/dist/src/components/editor/lib/constants.mjs +101 -0
  197. package/dist/src/components/editor/lib/extensions.d.mts +67 -0
  198. package/dist/src/components/editor/lib/extensions.mjs +49 -0
  199. package/dist/src/components/editor/lib/helpers.d.mts +21 -0
  200. package/dist/src/components/editor/lib/helpers.mjs +68 -0
  201. package/dist/src/components/editor/lib/types.d.mts +9 -0
  202. package/dist/src/components/editor/lib/variants.mjs +15 -0
  203. package/dist/src/components/emails/forget-password-email.mjs +50 -0
  204. package/dist/src/components/header/back-button.client.d.mts +9 -0
  205. package/dist/src/components/header/back-button.client.mjs +42 -0
  206. package/dist/src/components/header/bottom-bar.client.d.mts +28 -0
  207. package/dist/src/components/header/bottom-bar.client.mjs +37 -0
  208. package/dist/src/components/header/breadcrumbs.client.d.mts +34 -0
  209. package/dist/src/components/header/breadcrumbs.client.mjs +63 -0
  210. package/dist/src/components/header/header.client.d.mts +11 -0
  211. package/dist/src/components/header/header.client.mjs +14 -0
  212. package/dist/src/components/header/indicator.client.mjs +24 -0
  213. package/dist/src/components/header/mobile-nav-switcher.client.d.mts +9 -0
  214. package/dist/src/components/header/mobile-nav-switcher.client.mjs +18 -0
  215. package/dist/src/components/header/top-bar.client.d.mts +42 -0
  216. package/dist/src/components/header/top-bar.client.mjs +47 -0
  217. package/dist/src/components/layouts/admin-content.client.d.mts +12 -0
  218. package/dist/src/components/layouts/admin-content.client.mjs +22 -0
  219. package/dist/src/components/layouts/admin-error-pages.d.mts +22 -0
  220. package/dist/src/components/layouts/admin-error-pages.mjs +59 -0
  221. package/dist/src/components/layouts/admin-layout.d.mts +7 -0
  222. package/dist/src/components/layouts/admin-layout.mjs +13 -0
  223. package/dist/src/components/layouts/admin-loading.d.mts +7 -0
  224. package/dist/src/components/layouts/admin-loading.mjs +13 -0
  225. package/dist/src/components/layouts/empty-page.d.mts +30 -0
  226. package/dist/src/components/layouts/empty-page.mjs +28 -0
  227. package/dist/src/components/layouts/error-page.d.mts +47 -0
  228. package/dist/src/components/layouts/error-page.mjs +53 -0
  229. package/dist/src/components/layouts/error-sections.d.mts +28 -0
  230. package/dist/src/components/layouts/error-sections.mjs +46 -0
  231. package/dist/src/components/layouts/list-layout.d.mts +11 -0
  232. package/dist/src/components/layouts/list-layout.mjs +14 -0
  233. package/dist/src/components/layouts/providers.client.d.mts +9 -0
  234. package/dist/src/components/layouts/providers.client.mjs +31 -0
  235. package/dist/src/components/layouts/root-error-pages.d.mts +9 -0
  236. package/dist/src/components/layouts/root-error-pages.mjs +16 -0
  237. package/dist/src/components/layouts/root-layout.server.d.mts +36 -0
  238. package/dist/src/components/layouts/root-layout.server.mjs +46 -0
  239. package/dist/src/components/layouts/root-loading.d.mts +6 -0
  240. package/dist/src/components/layouts/root-loading.mjs +13 -0
  241. package/dist/src/components/layouts/tab-layout.d.mts +22 -0
  242. package/dist/src/components/layouts/tab-layout.mjs +50 -0
  243. package/dist/src/components/lists/data-list.d.mts +30 -0
  244. package/dist/src/components/lists/data-list.mjs +35 -0
  245. package/dist/src/components/lists/data-stack.d.mts +48 -0
  246. package/dist/src/components/lists/data-stack.mjs +56 -0
  247. package/dist/src/components/navigation/admin-sidebar-header.client.mjs +92 -0
  248. package/dist/src/components/navigation/admin-sidebar-paths.client.d.mts +91 -0
  249. package/dist/src/components/navigation/admin-sidebar-paths.client.mjs +143 -0
  250. package/dist/src/components/navigation/admin-sidebar-skeleton.mjs +30 -0
  251. package/dist/src/components/ui/accordion.client.d.mts +25 -0
  252. package/dist/src/components/ui/accordion.client.mjs +57 -0
  253. package/dist/src/components/ui/alert-dialog.client.d.mts +60 -0
  254. package/dist/src/components/ui/alert-dialog.client.mjs +103 -0
  255. package/dist/src/components/ui/alert.d.mts +28 -0
  256. package/dist/src/components/ui/alert.mjs +44 -0
  257. package/dist/src/components/ui/aspect-ratio.client.d.mts +9 -0
  258. package/dist/src/components/ui/aspect-ratio.client.mjs +15 -0
  259. package/dist/src/components/ui/avatar.client.d.mts +34 -0
  260. package/dist/src/components/ui/avatar.client.mjs +53 -0
  261. package/dist/src/components/ui/badge.d.mts +19 -0
  262. package/dist/src/components/ui/badge.mjs +28 -0
  263. package/dist/src/components/ui/breadcrumb.d.mts +37 -0
  264. package/dist/src/components/ui/breadcrumb.mjs +70 -0
  265. package/dist/src/components/ui/button-group.d.mts +28 -0
  266. package/dist/src/components/ui/button-group.mjs +40 -0
  267. package/dist/src/components/ui/button.d.mts +21 -0
  268. package/dist/src/components/ui/button.mjs +48 -0
  269. package/dist/src/components/ui/calendar.client.d.mts +30 -0
  270. package/dist/src/components/ui/calendar.client.mjs +113 -0
  271. package/dist/src/components/ui/card.d.mts +37 -0
  272. package/dist/src/components/ui/card.mjs +57 -0
  273. package/dist/src/components/ui/carousel.client.d.mts +56 -0
  274. package/dist/src/components/ui/carousel.client.mjs +135 -0
  275. package/dist/src/components/ui/chart.client.d.mts +71 -0
  276. package/dist/src/components/ui/chart.client.mjs +142 -0
  277. package/dist/src/components/ui/checkbox.client.d.mts +11 -0
  278. package/dist/src/components/ui/checkbox.client.mjs +23 -0
  279. package/dist/src/components/ui/collapsible.client.d.mts +15 -0
  280. package/dist/src/components/ui/collapsible.client.mjs +27 -0
  281. package/dist/src/components/ui/color-picker.client.d.mts +15 -0
  282. package/dist/src/components/ui/color-picker.client.mjs +38 -0
  283. package/dist/src/components/ui/combobox-dropdown.client.d.mts +45 -0
  284. package/dist/src/components/ui/combobox-dropdown.client.mjs +94 -0
  285. package/dist/src/components/ui/combobox.client.d.mts +30 -0
  286. package/dist/src/components/ui/combobox.client.mjs +66 -0
  287. package/dist/src/components/ui/command.client.d.mts +58 -0
  288. package/dist/src/components/ui/command.client.mjs +97 -0
  289. package/dist/src/components/ui/context-menu.client.d.mts +85 -0
  290. package/dist/src/components/ui/context-menu.client.mjs +127 -0
  291. package/dist/src/components/ui/date-picker.client.d.mts +20 -0
  292. package/dist/src/components/ui/date-picker.client.mjs +43 -0
  293. package/dist/src/components/ui/dialog.client.d.mts +51 -0
  294. package/dist/src/components/ui/dialog.client.mjs +98 -0
  295. package/dist/src/components/ui/drawer.client.d.mts +44 -0
  296. package/dist/src/components/ui/drawer.client.mjs +80 -0
  297. package/dist/src/components/ui/dropdown-menu.client.d.mts +84 -0
  298. package/dist/src/components/ui/dropdown-menu.client.mjs +130 -0
  299. package/dist/src/components/ui/empty.d.mts +35 -0
  300. package/dist/src/components/ui/empty.mjs +61 -0
  301. package/dist/src/components/ui/field.client.d.mts +64 -0
  302. package/dist/src/components/ui/field.client.mjs +113 -0
  303. package/dist/src/components/ui/form.client.d.mts +47 -0
  304. package/dist/src/components/ui/form.client.mjs +92 -0
  305. package/dist/src/components/ui/hover-card.client.d.mts +19 -0
  306. package/dist/src/components/ui/hover-card.client.mjs +34 -0
  307. package/dist/src/components/ui/input-date-time.client.d.mts +22 -0
  308. package/dist/src/components/ui/input-date-time.client.mjs +33 -0
  309. package/dist/src/components/ui/input-date.d.mts +13 -0
  310. package/dist/src/components/ui/input-date.mjs +15 -0
  311. package/dist/src/components/ui/input-group.client.d.mts +58 -0
  312. package/dist/src/components/ui/input-group.client.mjs +105 -0
  313. package/dist/src/components/ui/input-recipient.d.mts +26 -0
  314. package/dist/src/components/ui/input-recipient.mjs +218 -0
  315. package/dist/src/components/ui/input-time.d.mts +13 -0
  316. package/dist/src/components/ui/input-time.mjs +15 -0
  317. package/dist/src/components/ui/input.d.mts +11 -0
  318. package/dist/src/components/ui/input.mjs +15 -0
  319. package/dist/src/components/ui/item.d.mts +62 -0
  320. package/dist/src/components/ui/item.mjs +118 -0
  321. package/dist/src/components/ui/kbd.d.mts +13 -0
  322. package/dist/src/components/ui/kbd.mjs +21 -0
  323. package/dist/src/components/ui/label.d.mts +11 -0
  324. package/dist/src/components/ui/label.mjs +17 -0
  325. package/dist/src/components/ui/loader.d.mts +6 -0
  326. package/dist/src/components/ui/loader.mjs +62 -0
  327. package/dist/src/components/ui/navigation-menu.d.mts +46 -0
  328. package/dist/src/components/ui/navigation-menu.mjs +81 -0
  329. package/dist/src/components/ui/pagination.d.mts +45 -0
  330. package/dist/src/components/ui/pagination.mjs +87 -0
  331. package/dist/src/components/ui/popover.client.d.mts +34 -0
  332. package/dist/src/components/ui/popover.client.mjs +58 -0
  333. package/dist/src/components/ui/progress.client.d.mts +12 -0
  334. package/dist/src/components/ui/progress.client.mjs +22 -0
  335. package/dist/src/components/ui/radio-group.d.mts +15 -0
  336. package/dist/src/components/ui/radio-group.mjs +29 -0
  337. package/dist/src/components/ui/resizable.client.d.mts +20 -0
  338. package/dist/src/components/ui/resizable.client.mjs +31 -0
  339. package/dist/src/components/ui/scroll-area.d.mts +17 -0
  340. package/dist/src/components/ui/scroll-area.mjs +39 -0
  341. package/dist/src/components/ui/select.client.d.mts +53 -0
  342. package/dist/src/components/ui/select.client.mjs +102 -0
  343. package/dist/src/components/ui/separator.d.mts +13 -0
  344. package/dist/src/components/ui/separator.mjs +19 -0
  345. package/dist/src/components/ui/sheet.client.d.mts +42 -0
  346. package/dist/src/components/ui/sheet.client.mjs +92 -0
  347. package/dist/src/components/ui/sidebar.client.d.mts +167 -0
  348. package/dist/src/components/ui/sidebar.client.mjs +373 -0
  349. package/dist/src/components/ui/skeleton.d.mts +9 -0
  350. package/dist/src/components/ui/skeleton.mjs +14 -0
  351. package/dist/src/components/ui/slider.d.mts +15 -0
  352. package/dist/src/components/ui/slider.mjs +39 -0
  353. package/dist/src/components/ui/sonner.client.d.mts +9 -0
  354. package/dist/src/components/ui/sonner.client.mjs +24 -0
  355. package/dist/src/components/ui/spinner.d.mts +9 -0
  356. package/dist/src/components/ui/spinner.mjs +16 -0
  357. package/dist/src/components/ui/switch.client.d.mts +14 -0
  358. package/dist/src/components/ui/switch.client.mjs +22 -0
  359. package/dist/src/components/ui/tabs.client.d.mts +30 -0
  360. package/dist/src/components/ui/tabs.client.mjs +48 -0
  361. package/dist/src/components/ui/textarea.d.mts +10 -0
  362. package/dist/src/components/ui/textarea.mjs +14 -0
  363. package/dist/src/components/ui/toggle-group.client.d.mts +28 -0
  364. package/dist/src/components/ui/toggle-group.client.mjs +54 -0
  365. package/dist/src/components/ui/toggle.client.d.mts +19 -0
  366. package/dist/src/components/ui/toggle.client.mjs +39 -0
  367. package/dist/src/components/ui/tooltip.client.d.mts +23 -0
  368. package/dist/src/components/ui/tooltip.client.mjs +38 -0
  369. package/dist/src/lib/hooks/use-action.d.mts +16 -0
  370. package/dist/src/lib/hooks/use-action.mjs +41 -0
  371. package/dist/src/lib/hooks/use-indicator.d.mts +39 -0
  372. package/dist/src/lib/hooks/use-indicator.mjs +63 -0
  373. package/dist/src/lib/hooks/use-mobile.client.d.mts +6 -0
  374. package/dist/src/lib/hooks/use-mobile.client.mjs +21 -0
  375. package/dist/src/lib/types/config.d.mts +11 -0
  376. package/dist/src/lib/utils/array-move.d.mts +10 -0
  377. package/dist/src/lib/utils/array-move.mjs +12 -0
  378. package/dist/src/lib/utils/cn.d.mts +6 -0
  379. package/dist/src/lib/utils/cn.mjs +10 -0
  380. package/dist/src/lib/utils/fonts.d.mts +7 -0
  381. package/dist/src/lib/utils/fonts.mjs +11 -0
  382. package/dist/src/lib/utils/format.d.mts +51 -0
  383. package/dist/src/lib/utils/format.mjs +113 -0
  384. package/dist/src/lib/utils/manifest.d.mts +7 -0
  385. package/dist/src/lib/utils/manifest.mjs +35 -0
  386. package/dist/src/lib/utils/markdown.d.mts +9 -0
  387. package/dist/src/lib/utils/markdown.mjs +14 -0
  388. package/dist/src/lib/utils/url.d.mts +9 -0
  389. package/dist/src/lib/utils/url.mjs +15 -0
  390. package/dist/src/lib/utils/user-agent.mjs +74 -0
  391. package/dist/src/modules/auth/components/allowed.client.d.mts +33 -0
  392. package/dist/src/modules/auth/components/allowed.client.mjs +19 -0
  393. package/dist/src/modules/auth/components/auth-layout.server.d.mts +9 -0
  394. package/dist/src/modules/auth/components/auth-layout.server.mjs +36 -0
  395. package/dist/src/modules/auth/components/auth-loading.d.mts +6 -0
  396. package/dist/src/modules/auth/components/auth-loading.mjs +17 -0
  397. package/dist/src/modules/auth/components/create-first-user-guard.server.d.mts +15 -0
  398. package/dist/src/modules/auth/components/create-first-user-guard.server.mjs +15 -0
  399. package/dist/src/modules/auth/components/create-first-user-page.client.d.mts +6 -0
  400. package/dist/src/modules/auth/components/create-first-user-page.client.mjs +153 -0
  401. package/dist/src/modules/auth/components/forget-password-page.client.d.mts +6 -0
  402. package/dist/src/modules/auth/components/forget-password-page.client.mjs +72 -0
  403. package/dist/src/modules/auth/components/guard.server.d.mts +14 -0
  404. package/dist/src/modules/auth/components/guard.server.mjs +20 -0
  405. package/dist/src/modules/auth/components/login-page.client.d.mts +11 -0
  406. package/dist/src/modules/auth/components/login-page.client.mjs +155 -0
  407. package/dist/src/modules/auth/components/reset-password-page.client.d.mts +11 -0
  408. package/dist/src/modules/auth/components/reset-password-page.client.mjs +121 -0
  409. package/dist/src/modules/auth/components/update-password-command.d.mts +22 -0
  410. package/dist/src/modules/auth/components/update-password-command.mjs +47 -0
  411. package/dist/src/modules/auth/db/schema.d.mts +983 -0
  412. package/dist/src/modules/auth/db/schema.mjs +101 -0
  413. package/dist/src/modules/auth/handler/create-client.client.d.mts +6393 -0
  414. package/dist/src/modules/auth/handler/create-client.client.mjs +25 -0
  415. package/dist/src/modules/auth/handler/proxy.server.d.mts +11 -0
  416. package/dist/src/modules/auth/handler/proxy.server.mjs +20 -0
  417. package/dist/src/modules/auth/handler/route.server.d.mts +16 -0
  418. package/dist/src/modules/auth/handler/route.server.mjs +28 -0
  419. package/dist/src/modules/auth/handler/service.server.d.mts +2101 -0
  420. package/dist/src/modules/auth/handler/service.server.mjs +87 -0
  421. package/dist/src/modules/auth/hooks/use-auth-client.d.mts +23 -0
  422. package/dist/src/modules/auth/hooks/use-auth-client.mjs +30 -0
  423. package/dist/src/modules/auth/hooks/use-permission.d.mts +42 -0
  424. package/dist/src/modules/auth/hooks/use-permission.mjs +57 -0
  425. package/dist/src/modules/auth/hooks/use-session.d.mts +40 -0
  426. package/dist/src/modules/auth/hooks/use-session.mjs +22 -0
  427. package/dist/src/modules/auth/lib/helpers.server.d.mts +84 -0
  428. package/dist/src/modules/auth/lib/helpers.server.mjs +41 -0
  429. package/dist/src/modules/auth/lib/permissions.d.mts +17 -0
  430. package/dist/src/modules/auth/lib/permissions.mjs +14 -0
  431. package/dist/src/modules/auth/lib/validators.d.mts +299 -0
  432. package/dist/src/modules/auth/lib/validators.mjs +59 -0
  433. package/dist/src/modules/commands/components/menus/context-menu.client.d.mts +40 -0
  434. package/dist/src/modules/commands/components/menus/context-menu.client.mjs +47 -0
  435. package/dist/src/modules/commands/components/menus/dropdown-menu.client.d.mts +30 -0
  436. package/dist/src/modules/commands/components/menus/dropdown-menu.client.mjs +58 -0
  437. package/dist/src/modules/commands/components/menus/floating-menu.client.d.mts +30 -0
  438. package/dist/src/modules/commands/components/menus/floating-menu.client.mjs +33 -0
  439. package/dist/src/modules/commands/components/menus/inline-menu.client.d.mts +30 -0
  440. package/dist/src/modules/commands/components/menus/inline-menu.client.mjs +41 -0
  441. package/dist/src/modules/commands/components/menus/responsive-menu.client.d.mts +17 -0
  442. package/dist/src/modules/commands/components/menus/responsive-menu.client.mjs +22 -0
  443. package/dist/src/modules/commands/components/primitives/alert-dialog-command.client.d.mts +65 -0
  444. package/dist/src/modules/commands/components/primitives/alert-dialog-command.client.mjs +138 -0
  445. package/dist/src/modules/commands/components/primitives/click-command.client.d.mts +26 -0
  446. package/dist/src/modules/commands/components/primitives/click-command.client.mjs +52 -0
  447. package/dist/src/modules/commands/components/primitives/command-trigger.client.d.mts +17 -0
  448. package/dist/src/modules/commands/components/primitives/command-trigger.client.mjs +42 -0
  449. package/dist/src/modules/commands/components/primitives/dialog-command.client.d.mts +53 -0
  450. package/dist/src/modules/commands/components/primitives/dialog-command.client.mjs +116 -0
  451. package/dist/src/modules/commands/components/primitives/dropdown-command.client.d.mts +47 -0
  452. package/dist/src/modules/commands/components/primitives/dropdown-command.client.mjs +131 -0
  453. package/dist/src/modules/commands/components/primitives/empty-command.client.d.mts +20 -0
  454. package/dist/src/modules/commands/components/primitives/empty-command.client.mjs +44 -0
  455. package/dist/src/modules/commands/components/primitives/form-dialog-command.client.d.mts +71 -0
  456. package/dist/src/modules/commands/components/primitives/form-dialog-command.client.mjs +163 -0
  457. package/dist/src/modules/commands/components/render-command.mjs +50 -0
  458. package/dist/src/modules/commands/components/utils/archive-command.client.d.mts +24 -0
  459. package/dist/src/modules/commands/components/utils/archive-command.client.mjs +29 -0
  460. package/dist/src/modules/commands/components/utils/delete-command.client.d.mts +20 -0
  461. package/dist/src/modules/commands/components/utils/delete-command.client.mjs +28 -0
  462. package/dist/src/modules/commands/hooks/use-command-mutation.client.d.mts +11 -0
  463. package/dist/src/modules/commands/hooks/use-command-mutation.client.mjs +39 -0
  464. package/dist/src/modules/commands/hooks/use-command.client.d.mts +31 -0
  465. package/dist/src/modules/commands/hooks/use-command.client.mjs +45 -0
  466. package/dist/src/modules/commands/lib/builder.d.mts +39 -0
  467. package/dist/src/modules/commands/lib/builder.mjs +47 -0
  468. package/dist/src/modules/commands/lib/registery.d.mts +35 -0
  469. package/dist/src/modules/commands/lib/registery.mjs +43 -0
  470. package/dist/src/modules/config/lib/config.d.mts +16 -0
  471. package/dist/src/modules/config/lib/config.mjs +8 -0
  472. package/dist/src/modules/config/lib/context.d.mts +17 -0
  473. package/dist/src/modules/config/lib/context.mjs +7 -0
  474. package/dist/src/modules/config/paths/helpers.d.mts +9 -0
  475. package/dist/src/modules/config/paths/helpers.mjs +8 -0
  476. package/dist/src/modules/config/paths/types.d.mts +31 -0
  477. package/dist/src/modules/data-tables/components/cell/common.client.d.mts +26 -0
  478. package/dist/src/modules/data-tables/components/cell/common.client.mjs +35 -0
  479. package/dist/src/modules/data-tables/components/cell/index.client.d.mts +10 -0
  480. package/dist/src/modules/data-tables/components/cell/index.client.mjs +24 -0
  481. package/dist/src/modules/data-tables/components/cell/select.client.d.mts +10 -0
  482. package/dist/src/modules/data-tables/components/cell/select.client.mjs +36 -0
  483. package/dist/src/modules/data-tables/components/column-header.d.mts +15 -0
  484. package/dist/src/modules/data-tables/components/column-header.mjs +46 -0
  485. package/dist/src/modules/data-tables/components/filters/combobox.client.d.mts +27 -0
  486. package/dist/src/modules/data-tables/components/filters/combobox.client.mjs +97 -0
  487. package/dist/src/modules/data-tables/components/filters/date-range.client.d.mts +24 -0
  488. package/dist/src/modules/data-tables/components/filters/date-range.client.mjs +99 -0
  489. package/dist/src/modules/data-tables/components/filters/search.client.d.mts +17 -0
  490. package/dist/src/modules/data-tables/components/filters/search.client.mjs +32 -0
  491. package/dist/src/modules/data-tables/components/filters/slider.client.d.mts +22 -0
  492. package/dist/src/modules/data-tables/components/filters/slider.client.mjs +128 -0
  493. package/dist/src/modules/data-tables/components/filters/toggle.client.d.mts +17 -0
  494. package/dist/src/modules/data-tables/components/filters/toggle.client.mjs +25 -0
  495. package/dist/src/modules/data-tables/components/footer.mjs +28 -0
  496. package/dist/src/modules/data-tables/components/header.d.mts +40 -0
  497. package/dist/src/modules/data-tables/components/header.mjs +43 -0
  498. package/dist/src/modules/data-tables/components/layout.d.mts +11 -0
  499. package/dist/src/modules/data-tables/components/layout.mjs +14 -0
  500. package/dist/src/modules/data-tables/components/search-input.client.d.mts +6 -0
  501. package/dist/src/modules/data-tables/components/search-input.client.mjs +19 -0
  502. package/dist/src/modules/data-tables/components/skeleton.d.mts +6 -0
  503. package/dist/src/modules/data-tables/components/skeleton.mjs +21 -0
  504. package/dist/src/modules/data-tables/components/table.d.mts +33 -0
  505. package/dist/src/modules/data-tables/components/table.mjs +55 -0
  506. package/dist/src/modules/data-tables/components/toolbar.d.mts +22 -0
  507. package/dist/src/modules/data-tables/components/toolbar.mjs +21 -0
  508. package/dist/src/modules/data-tables/hooks/use-context.client.d.mts +47 -0
  509. package/dist/src/modules/data-tables/hooks/use-context.client.mjs +34 -0
  510. package/dist/src/modules/data-tables/hooks/use-search.client.mjs +39 -0
  511. package/dist/src/modules/data-tables/hooks/use-selection.client.mjs +44 -0
  512. package/dist/src/modules/data-tables/hooks/use-table.client.d.mts +10 -0
  513. package/dist/src/modules/data-tables/hooks/use-table.client.mjs +55 -0
  514. package/dist/src/modules/data-tables/lib/converters/dto.d.mts +50 -0
  515. package/dist/src/modules/data-tables/lib/converters/dto.mjs +24 -0
  516. package/dist/src/modules/data-tables/lib/converters/filters.d.mts +41 -0
  517. package/dist/src/modules/data-tables/lib/converters/filters.mjs +38 -0
  518. package/dist/src/modules/data-tables/lib/converters/pagination.d.mts +17 -0
  519. package/dist/src/modules/data-tables/lib/converters/pagination.mjs +15 -0
  520. package/dist/src/modules/data-tables/lib/converters/search.d.mts +16 -0
  521. package/dist/src/modules/data-tables/lib/converters/search.mjs +15 -0
  522. package/dist/src/modules/data-tables/lib/converters/sorting.d.mts +48 -0
  523. package/dist/src/modules/data-tables/lib/converters/sorting.mjs +55 -0
  524. package/dist/src/modules/data-tables/lib/filters/config.d.mts +13 -0
  525. package/dist/src/modules/data-tables/lib/filters/config.mjs +5 -0
  526. package/dist/src/modules/data-tables/lib/filters/helpers.d.mts +10 -0
  527. package/dist/src/modules/data-tables/lib/filters/helpers.mjs +16 -0
  528. package/dist/src/modules/data-tables/lib/filters/parsers.d.mts +46 -0
  529. package/dist/src/modules/data-tables/lib/filters/parsers.mjs +47 -0
  530. package/dist/src/modules/data-tables/lib/filters/resolvers.d.mts +28 -0
  531. package/dist/src/modules/data-tables/lib/filters/resolvers.mjs +55 -0
  532. package/dist/src/modules/data-tables/lib/helpers/create-column.mjs +10 -0
  533. package/dist/src/modules/data-tables/lib/search-params.d.mts +21 -0
  534. package/dist/src/modules/data-tables/lib/search-params.mjs +16 -0
  535. package/dist/src/modules/data-tables/lib/types.d.mts +54 -0
  536. package/dist/src/modules/data-tables/lib/validators.d.mts +19 -0
  537. package/dist/src/modules/data-tables/lib/validators.mjs +16 -0
  538. package/dist/src/modules/data-tables/server/get-data.server.d.mts +29 -0
  539. package/dist/src/modules/data-tables/server/get-data.server.mjs +47 -0
  540. package/dist/src/modules/data-tables/strategies/helpers/sorting.mjs +37 -0
  541. package/dist/src/modules/data-tables/strategies/infinite/components.mjs +50 -0
  542. package/dist/src/modules/data-tables/strategies/infinite/strategy.d.mts +20 -0
  543. package/dist/src/modules/data-tables/strategies/infinite/strategy.mjs +50 -0
  544. package/dist/src/modules/data-tables/strategies/pagination/components.mjs +131 -0
  545. package/dist/src/modules/data-tables/strategies/pagination/strategy.d.mts +12 -0
  546. package/dist/src/modules/data-tables/strategies/pagination/strategy.mjs +45 -0
  547. package/dist/src/modules/data-tables/tables/data-table/components/body.mjs +32 -0
  548. package/dist/src/modules/data-tables/tables/data-table/components/header.mjs +12 -0
  549. package/dist/src/modules/data-tables/tables/data-table/components/row.mjs +13 -0
  550. package/dist/src/modules/data-tables/tables/data-table/components/table.d.mts +8 -0
  551. package/dist/src/modules/data-tables/tables/data-table/components/table.mjs +42 -0
  552. package/dist/src/modules/data-tables/tables/inline-table/components/body.mjs +69 -0
  553. package/dist/src/modules/data-tables/tables/inline-table/components/cells/common.d.mts +11 -0
  554. package/dist/src/modules/data-tables/tables/inline-table/components/cells/common.mjs +14 -0
  555. package/dist/src/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.d.mts +24 -0
  556. package/dist/src/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.mjs +38 -0
  557. package/dist/src/modules/data-tables/tables/inline-table/components/cells/read-only.d.mts +11 -0
  558. package/dist/src/modules/data-tables/tables/inline-table/components/cells/read-only.mjs +14 -0
  559. package/dist/src/modules/data-tables/tables/inline-table/components/header.mjs +10 -0
  560. package/dist/src/modules/data-tables/tables/inline-table/components/row.client.mjs +24 -0
  561. package/dist/src/modules/data-tables/tables/inline-table/components/table.d.mts +14 -0
  562. package/dist/src/modules/data-tables/tables/inline-table/components/table.mjs +52 -0
  563. package/dist/src/modules/data-tables/tables/inline-table/hooks/context.client.d.mts +48 -0
  564. package/dist/src/modules/data-tables/tables/inline-table/hooks/context.client.mjs +58 -0
  565. package/dist/src/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.d.mts +29 -0
  566. package/dist/src/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.mjs +94 -0
  567. package/dist/src/modules/database/lib/helpers.d.mts +15 -0
  568. package/dist/src/modules/database/lib/helpers.mjs +16 -0
  569. package/dist/src/modules/database/lib/service.server.d.mts +33 -0
  570. package/dist/src/modules/database/lib/service.server.mjs +23 -0
  571. package/dist/src/modules/database/lib/types.d.mts +4 -0
  572. package/dist/src/modules/emails/lib/service.server.d.mts +28 -0
  573. package/dist/src/modules/emails/lib/service.server.mjs +20 -0
  574. package/dist/src/modules/inline/components/cell.client.d.mts +20 -0
  575. package/dist/src/modules/inline/components/cell.client.mjs +46 -0
  576. package/dist/src/modules/inline/components/field.client.d.mts +36 -0
  577. package/dist/src/modules/inline/components/field.client.mjs +61 -0
  578. package/dist/src/modules/inline/components/inputs/combobox-dropdown.client.d.mts +27 -0
  579. package/dist/src/modules/inline/components/inputs/combobox-dropdown.client.mjs +49 -0
  580. package/dist/src/modules/inline/components/inputs/combobox.client.d.mts +22 -0
  581. package/dist/src/modules/inline/components/inputs/combobox.client.mjs +45 -0
  582. package/dist/src/modules/inline/components/inputs/date-time.client.d.mts +24 -0
  583. package/dist/src/modules/inline/components/inputs/date-time.client.mjs +48 -0
  584. package/dist/src/modules/inline/components/inputs/date.client.d.mts +66 -0
  585. package/dist/src/modules/inline/components/inputs/date.client.mjs +175 -0
  586. package/dist/src/modules/inline/components/inputs/editor.client.d.mts +25 -0
  587. package/dist/src/modules/inline/components/inputs/editor.client.mjs +51 -0
  588. package/dist/src/modules/inline/components/inputs/input-recipient.client.d.mts +27 -0
  589. package/dist/src/modules/inline/components/inputs/input-recipient.client.mjs +48 -0
  590. package/dist/src/modules/inline/components/inputs/input.client.d.mts +52 -0
  591. package/dist/src/modules/inline/components/inputs/input.client.mjs +129 -0
  592. package/dist/src/modules/inline/components/inputs/select.client.d.mts +31 -0
  593. package/dist/src/modules/inline/components/inputs/select.client.mjs +64 -0
  594. package/dist/src/modules/inline/components/inputs/switch.client.d.mts +21 -0
  595. package/dist/src/modules/inline/components/inputs/switch.client.mjs +42 -0
  596. package/dist/src/modules/inline/components/inputs/toggle.client.d.mts +24 -0
  597. package/dist/src/modules/inline/components/inputs/toggle.client.mjs +47 -0
  598. package/dist/src/modules/inline/hooks/inline-provider.d.mts +28 -0
  599. package/dist/src/modules/inline/hooks/inline-provider.mjs +25 -0
  600. package/dist/src/modules/inline/hooks/inline-state.client.d.mts +30 -0
  601. package/dist/src/modules/inline/hooks/inline-state.client.mjs +25 -0
  602. package/dist/src/modules/inline/hooks/use-inline.client.d.mts +144 -0
  603. package/dist/src/modules/inline/hooks/use-inline.client.mjs +125 -0
  604. package/dist/src/modules/inline/lib/validators.d.mts +56 -0
  605. package/dist/src/modules/inline/lib/validators.mjs +34 -0
  606. package/dist/{modules/inline-edit → src/modules/inline}/lib/variants.d.mts +1 -1
  607. package/dist/src/modules/inline/lib/variants.mjs +21 -0
  608. package/dist/src/modules/router/handler/caller.client.d.mts +10 -0
  609. package/dist/src/modules/router/handler/caller.client.mjs +23 -0
  610. package/dist/src/modules/router/handler/caller.server.d.mts +6 -0
  611. package/dist/src/modules/router/handler/caller.server.mjs +7 -0
  612. package/dist/src/modules/router/handler/context.server.d.mts +62 -0
  613. package/dist/src/modules/router/handler/context.server.mjs +20 -0
  614. package/dist/src/modules/router/handler/init.server.d.mts +65 -0
  615. package/dist/src/modules/router/handler/init.server.mjs +55 -0
  616. package/dist/src/modules/router/handler/register.server.d.mts +8 -0
  617. package/dist/src/modules/router/handler/register.server.mjs +10 -0
  618. package/dist/src/modules/router/handler/route.server.d.mts +21 -0
  619. package/dist/src/modules/router/handler/route.server.mjs +32 -0
  620. package/dist/src/modules/router/lib/error.server.d.mts +2 -0
  621. package/dist/src/modules/router/lib/error.server.mjs +3 -0
  622. package/dist/src/modules/router/lib/helpers.mjs +7 -0
  623. package/dist/src/modules/router/lib/query-client.d.mts +9 -0
  624. package/dist/src/modules/router/lib/query-client.mjs +50 -0
  625. package/dist/src/modules/router/lib/query-client.server.d.mts +17 -0
  626. package/dist/src/modules/router/lib/query-client.server.mjs +23 -0
  627. package/dist/src/modules/router/lib/validators.d.mts +12 -0
  628. package/dist/src/modules/router/lib/validators.mjs +10 -0
  629. package/dist/src/modules/storage/components/dropzone-context.client.d.mts +18 -0
  630. package/dist/src/modules/storage/components/dropzone-context.client.mjs +17 -0
  631. package/dist/src/modules/storage/components/dropzone.client.d.mts +52 -0
  632. package/dist/src/modules/storage/components/dropzone.client.mjs +110 -0
  633. package/dist/src/modules/storage/components/image-grid.client.d.mts +32 -0
  634. package/dist/src/modules/storage/components/image-grid.client.mjs +167 -0
  635. package/dist/src/modules/storage/components/image.client.d.mts +7 -0
  636. package/dist/src/modules/storage/components/image.client.mjs +16 -0
  637. package/dist/src/modules/storage/components/upload-button.client.d.mts +11 -0
  638. package/dist/src/modules/storage/components/upload-button.client.mjs +33 -0
  639. package/dist/src/modules/storage/components/upload-zone-context.client.d.mts +30 -0
  640. package/dist/src/modules/storage/components/upload-zone-context.client.mjs +20 -0
  641. package/dist/src/modules/storage/components/upload-zone.client.d.mts +27 -0
  642. package/dist/src/modules/storage/components/upload-zone.client.mjs +111 -0
  643. package/dist/src/modules/storage/lib/constants.d.mts +5 -0
  644. package/dist/src/modules/storage/lib/constants.mjs +5 -0
  645. package/dist/src/modules/storage/lib/helpers.d.mts +29 -0
  646. package/dist/src/modules/storage/lib/helpers.mjs +49 -0
  647. package/dist/src/modules/storage/lib/procedures.server.d.mts +1990 -0
  648. package/dist/src/modules/storage/lib/procedures.server.mjs +21 -0
  649. package/dist/src/modules/storage/lib/router-handlers.server.d.mts +40 -0
  650. package/dist/src/modules/storage/lib/router-handlers.server.mjs +123 -0
  651. package/dist/src/modules/storage/lib/schema.d.mts +291 -0
  652. package/dist/src/modules/storage/lib/schema.mjs +37 -0
  653. package/dist/src/modules/storage/lib/service.server.d.mts +2217 -0
  654. package/dist/src/modules/storage/lib/service.server.mjs +514 -0
  655. package/dist/src/modules/storage/lib/upload.client.d.mts +57 -0
  656. package/dist/src/modules/storage/lib/upload.client.mjs +86 -0
  657. package/dist/src/modules/storage/lib/validators.d.mts +935 -0
  658. package/dist/src/modules/storage/lib/validators.mjs +52 -0
  659. package/dist/src/modules/storage/providers/adapters/s3.server.d.mts +18 -0
  660. package/dist/src/modules/storage/providers/adapters/s3.server.mjs +172 -0
  661. package/dist/src/modules/storage/providers/lib/constants.d.mts +5 -0
  662. package/dist/src/modules/storage/providers/lib/constants.mjs +5 -0
  663. package/dist/src/modules/storage/providers/lib/errors.d.mts +11 -0
  664. package/dist/src/modules/storage/providers/lib/errors.mjs +12 -0
  665. package/dist/src/modules/storage/providers/lib/types.d.mts +20 -0
  666. package/dist/src/modules/storage/providers/lib/validators.d.mts +111 -0
  667. package/dist/src/modules/storage/providers/lib/validators.mjs +74 -0
  668. package/dist/storage/client.d.mts +8 -8
  669. package/dist/storage/client.mjs +8 -8
  670. package/dist/storage/server.d.mts +4 -4
  671. package/dist/storage/server.mjs +4 -4
  672. package/dist/storage.d.mts +8 -8
  673. package/dist/storage.mjs +7 -7
  674. package/package.json +4 -4
  675. package/src/components/ui/accordion.client.tsx +1 -1
  676. package/src/components/ui/alert.tsx +1 -1
  677. package/src/components/ui/avatar.client.tsx +1 -1
  678. package/src/components/ui/breadcrumb.tsx +2 -2
  679. package/src/components/ui/card.tsx +1 -1
  680. package/src/components/ui/carousel.client.tsx +2 -2
  681. package/src/components/ui/chart.client.tsx +2 -2
  682. package/src/components/ui/checkbox.client.tsx +1 -1
  683. package/src/components/ui/collapsible.client.tsx +1 -1
  684. package/src/components/ui/command.client.tsx +19 -4
  685. package/src/components/ui/context-menu.client.tsx +6 -6
  686. package/src/components/ui/drawer.client.tsx +5 -5
  687. package/src/components/ui/dropdown-menu.client.tsx +5 -5
  688. package/src/components/ui/empty.tsx +1 -1
  689. package/src/components/ui/field.client.tsx +3 -3
  690. package/src/components/ui/hover-card.client.tsx +1 -1
  691. package/src/components/ui/input-group.client.tsx +3 -3
  692. package/src/components/ui/input-recipient.tsx +1 -1
  693. package/src/components/ui/item.tsx +5 -5
  694. package/src/components/ui/navigation-menu.tsx +4 -4
  695. package/src/components/ui/pagination.tsx +0 -1
  696. package/src/components/ui/radio-group.tsx +1 -1
  697. package/src/components/ui/sheet.client.tsx +3 -3
  698. package/src/components/ui/tabs.client.tsx +3 -3
  699. package/src/entry.ts +3 -3
  700. package/src/modules/auth/components/allowed.client.tsx +1 -2
  701. package/src/modules/auth/components/update-password-command.tsx +1 -1
  702. package/src/modules/auth/lib/validators.ts +7 -0
  703. package/src/modules/commands/components/menus/context-menu.client.tsx +79 -0
  704. package/src/modules/commands/components/menus/dropdown-menu.client.tsx +85 -0
  705. package/src/modules/commands/components/menus/floating-menu.client.tsx +64 -0
  706. package/src/modules/commands/components/menus/inline-menu.client.tsx +66 -0
  707. package/src/modules/commands/{menus → components/menus}/responsive-menu.client.tsx +15 -4
  708. package/src/modules/commands/components/{alert-dialog-command.client.tsx → primitives/alert-dialog-command.client.tsx} +11 -40
  709. package/src/modules/commands/components/{click-command.client.tsx → primitives/click-command.client.tsx} +8 -19
  710. package/src/modules/commands/components/primitives/command-trigger.client.tsx +60 -0
  711. package/src/modules/commands/components/{dialog-command.client.tsx → primitives/dialog-command.client.tsx} +8 -31
  712. package/src/modules/commands/components/{dropdown-command.client.tsx → primitives/dropdown-command.client.tsx} +24 -40
  713. package/src/modules/commands/components/{empty-command.client.tsx → primitives/empty-command.client.tsx} +9 -17
  714. package/src/modules/commands/components/{form-dialog-command.client.tsx → primitives/form-dialog-command.client.tsx} +11 -53
  715. package/src/modules/commands/components/render-command.tsx +51 -10
  716. package/src/modules/commands/{utils → components/utils}/archive-command.client.tsx +2 -10
  717. package/src/modules/commands/{utils → components/utils}/delete-command.client.tsx +3 -9
  718. package/src/modules/commands/entry.client.ts +15 -23
  719. package/src/modules/commands/entry.ts +5 -2
  720. package/src/modules/commands/hooks/{use-command-mutation.client.tsx → use-command-mutation.client.ts} +2 -19
  721. package/src/modules/commands/hooks/use-command.client.tsx +78 -0
  722. package/src/modules/commands/lib/builder.ts +91 -0
  723. package/src/modules/commands/lib/registery.ts +116 -0
  724. package/src/modules/data-tables/components/filters/combobox.client.tsx +9 -13
  725. package/src/modules/data-tables/components/filters/date-range.client.tsx +127 -0
  726. package/src/modules/data-tables/components/filters/search.client.tsx +37 -0
  727. package/src/modules/data-tables/components/filters/slider.client.tsx +4 -4
  728. package/src/modules/data-tables/components/filters/toggle.client.tsx +32 -0
  729. package/src/modules/data-tables/components/footer.tsx +2 -2
  730. package/src/modules/data-tables/entry.client.ts +3 -0
  731. package/src/modules/data-tables/entry.server.ts +2 -2
  732. package/src/modules/data-tables/hooks/use-context.client.tsx +9 -11
  733. package/src/modules/data-tables/hooks/use-selection.client.ts +12 -5
  734. package/src/modules/data-tables/hooks/use-table.client.ts +4 -6
  735. package/src/modules/data-tables/lib/converters/filters.ts +85 -0
  736. package/src/modules/data-tables/lib/converters/{cursor.ts → pagination.ts} +1 -1
  737. package/src/modules/data-tables/lib/converters/sorting.ts +61 -18
  738. package/src/modules/data-tables/lib/filters/parsers.ts +18 -0
  739. package/src/modules/data-tables/lib/types.ts +4 -4
  740. package/src/modules/data-tables/server/get-data.server.ts +19 -10
  741. package/src/modules/data-tables/strategies/infinite/components.tsx +2 -10
  742. package/src/modules/data-tables/strategies/pagination/components.tsx +1 -5
  743. package/src/modules/data-tables/tables/data-table/components/body.tsx +2 -2
  744. package/src/modules/data-tables/tables/data-table/components/header.tsx +1 -1
  745. package/src/modules/data-tables/tables/data-table/components/row.tsx +2 -21
  746. package/src/modules/data-tables/tables/data-table/components/table.tsx +2 -2
  747. package/src/modules/data-tables/tables/inline-table/components/body.tsx +1 -1
  748. package/src/modules/data-tables/tables/inline-table/components/header.tsx +1 -5
  749. package/src/modules/data-tables/tables/inline-table/components/row.client.tsx +7 -11
  750. package/src/modules/data-tables/tables/inline-table/components/table.tsx +2 -2
  751. package/src/modules/data-tables/tables/inline-table/hooks/context.client.tsx +1 -1
  752. package/src/modules/inline/components/cell.client.tsx +53 -0
  753. package/src/modules/inline/components/field.client.tsx +64 -0
  754. package/src/modules/inline/components/inputs/combobox-dropdown.client.tsx +106 -0
  755. package/src/modules/inline/components/inputs/combobox.client.tsx +94 -0
  756. package/src/modules/inline/components/inputs/date-time.client.tsx +96 -0
  757. package/src/modules/inline/components/inputs/date.client.tsx +295 -0
  758. package/src/modules/inline/components/inputs/editor.client.tsx +99 -0
  759. package/src/modules/inline/components/inputs/input-recipient.client.tsx +97 -0
  760. package/src/modules/inline/components/inputs/input.client.tsx +244 -0
  761. package/src/modules/inline/components/inputs/select.client.tsx +126 -0
  762. package/src/modules/inline/components/inputs/switch.client.tsx +88 -0
  763. package/src/modules/inline/components/inputs/toggle.client.tsx +94 -0
  764. package/src/modules/inline/entry.client.ts +23 -0
  765. package/src/modules/inline/hooks/inline-provider.tsx +32 -0
  766. package/src/modules/inline/hooks/inline-state.client.tsx +33 -0
  767. package/src/modules/inline/hooks/use-inline.client.tsx +298 -0
  768. package/dist/inline-edit/client.d.mts +0 -15
  769. package/dist/inline-edit/client.mjs +0 -16
  770. package/dist/modules/commands/components/click-command.client.mjs +0 -63
  771. package/dist/modules/commands/components/command-trigger.client.d.mts +0 -33
  772. package/dist/modules/commands/components/command-trigger.client.mjs +0 -49
  773. package/dist/modules/commands/components/empty-command.client.mjs +0 -54
  774. package/dist/modules/commands/hooks/context.client.mjs +0 -31
  775. package/dist/modules/commands/hooks/use-command-menu.client.d.mts +0 -23
  776. package/dist/modules/commands/hooks/use-command-menu.client.mjs +0 -83
  777. package/dist/modules/commands/lib/definitions.d.mts +0 -52
  778. package/dist/modules/commands/lib/factory.d.mts +0 -24
  779. package/dist/modules/commands/lib/factory.mjs +0 -7
  780. package/dist/modules/commands/menus/context-menu.client.d.mts +0 -26
  781. package/dist/modules/commands/menus/context-menu.client.mjs +0 -59
  782. package/dist/modules/commands/menus/dropdown-menu.client.d.mts +0 -18
  783. package/dist/modules/commands/menus/floating-menu.client.d.mts +0 -18
  784. package/dist/modules/commands/menus/floating-menu.client.mjs +0 -45
  785. package/dist/modules/commands/menus/inline-menu.client.d.mts +0 -19
  786. package/dist/modules/commands/menus/inline-menu.client.mjs +0 -45
  787. package/dist/modules/commands/menus/responsive-menu.client.d.mts +0 -9
  788. package/dist/modules/data-tables/lib/converters/filter.d.mts +0 -9
  789. package/dist/modules/data-tables/lib/converters/filter.mjs +0 -13
  790. package/dist/modules/inline-edit/components/combobox-dropdown.client.d.mts +0 -24
  791. package/dist/modules/inline-edit/components/combobox-dropdown.client.mjs +0 -40
  792. package/dist/modules/inline-edit/components/combobox.client.d.mts +0 -19
  793. package/dist/modules/inline-edit/components/combobox.client.mjs +0 -36
  794. package/dist/modules/inline-edit/components/date-input.client.d.mts +0 -18
  795. package/dist/modules/inline-edit/components/date-input.client.mjs +0 -96
  796. package/dist/modules/inline-edit/components/date-picker.client.d.mts +0 -21
  797. package/dist/modules/inline-edit/components/date-picker.client.mjs +0 -61
  798. package/dist/modules/inline-edit/components/date-time.client.d.mts +0 -20
  799. package/dist/modules/inline-edit/components/date-time.client.mjs +0 -38
  800. package/dist/modules/inline-edit/components/editor.client.d.mts +0 -22
  801. package/dist/modules/inline-edit/components/editor.client.mjs +0 -39
  802. package/dist/modules/inline-edit/components/input-recipient.client.d.mts +0 -27
  803. package/dist/modules/inline-edit/components/input-recipient.client.mjs +0 -43
  804. package/dist/modules/inline-edit/components/input-toggle.client.d.mts +0 -19
  805. package/dist/modules/inline-edit/components/input-toggle.client.mjs +0 -53
  806. package/dist/modules/inline-edit/components/input.client.d.mts +0 -49
  807. package/dist/modules/inline-edit/components/input.client.mjs +0 -100
  808. package/dist/modules/inline-edit/components/select.client.d.mts +0 -26
  809. package/dist/modules/inline-edit/components/select.client.mjs +0 -55
  810. package/dist/modules/inline-edit/components/switch.client.d.mts +0 -17
  811. package/dist/modules/inline-edit/components/switch.client.mjs +0 -33
  812. package/dist/modules/inline-edit/components/toggle.client.d.mts +0 -18
  813. package/dist/modules/inline-edit/components/toggle.client.mjs +0 -40
  814. package/dist/modules/inline-edit/hooks/context.client.d.mts +0 -27
  815. package/dist/modules/inline-edit/hooks/context.client.mjs +0 -27
  816. package/dist/modules/inline-edit/hooks/use-inline.client.d.mts +0 -75
  817. package/dist/modules/inline-edit/hooks/use-inline.client.mjs +0 -116
  818. package/src/modules/commands/components/command-trigger.client.tsx +0 -69
  819. package/src/modules/commands/hooks/context.client.tsx +0 -38
  820. package/src/modules/commands/hooks/use-command-menu.client.tsx +0 -252
  821. package/src/modules/commands/lib/definitions.ts +0 -42
  822. package/src/modules/commands/lib/factory.ts +0 -5
  823. package/src/modules/commands/lib/schema.ts +0 -23
  824. package/src/modules/commands/menus/context-menu.client.tsx +0 -69
  825. package/src/modules/commands/menus/dropdown-menu.client.tsx +0 -62
  826. package/src/modules/commands/menus/floating-menu.client.tsx +0 -54
  827. package/src/modules/commands/menus/inline-menu.client.tsx +0 -51
  828. package/src/modules/commands/utils/send-mail-command.client.tsx +0 -150
  829. package/src/modules/data-tables/lib/converters/filter.ts +0 -11
  830. package/src/modules/inline-edit/components/combobox-dropdown.client.tsx +0 -64
  831. package/src/modules/inline-edit/components/combobox.client.tsx +0 -50
  832. package/src/modules/inline-edit/components/date-input.client.tsx +0 -116
  833. package/src/modules/inline-edit/components/date-picker.client.tsx +0 -74
  834. package/src/modules/inline-edit/components/date-time.client.tsx +0 -55
  835. package/src/modules/inline-edit/components/editor.client.tsx +0 -56
  836. package/src/modules/inline-edit/components/input-recipient.client.tsx +0 -59
  837. package/src/modules/inline-edit/components/input-toggle.client.tsx +0 -75
  838. package/src/modules/inline-edit/components/input.client.tsx +0 -149
  839. package/src/modules/inline-edit/components/select.client.tsx +0 -76
  840. package/src/modules/inline-edit/components/switch.client.tsx +0 -40
  841. package/src/modules/inline-edit/components/toggle.client.tsx +0 -50
  842. package/src/modules/inline-edit/entry.client.ts +0 -22
  843. package/src/modules/inline-edit/hooks/context.client.tsx +0 -30
  844. package/src/modules/inline-edit/hooks/use-inline.client.tsx +0 -205
  845. /package/dist/{inline-edit → inline}/server.d.mts +0 -0
  846. /package/dist/{inline-edit → inline}/server.mjs +0 -0
  847. /package/src/modules/{inline-edit → inline}/entry.server.ts +0 -0
  848. /package/src/modules/{inline-edit → inline}/entry.ts +0 -0
  849. /package/src/modules/{inline-edit → inline}/lib/factory.server.ts +0 -0
  850. /package/src/modules/{inline-edit → inline}/lib/parsers.ts +0 -0
  851. /package/src/modules/{inline-edit → inline}/lib/validators.ts +0 -0
  852. /package/src/modules/{inline-edit → inline}/lib/variants.ts +0 -0
@@ -0,0 +1,514 @@
1
+ import { ServerError } from "../../router/lib/error.server.mjs";
2
+ import { generateDefaultUUID } from "../../database/lib/helpers.mjs";
3
+ import { storageAssets } from "./schema.mjs";
4
+ import { confirmUploadInputSchema, presignUploadInputSchema, uploadInputSchema } from "./validators.mjs";
5
+ import { StorageAdapterError } from "../providers/lib/errors.mjs";
6
+ import z from "zod";
7
+ import { and, desc, eq, inArray, isNotNull, isNull } from "drizzle-orm";
8
+
9
+ //#region src/modules/storage/lib/service.server.ts
10
+ /**
11
+ * Storage service for working with asset metadata and object storage.
12
+ *
13
+ * Use `Storage.init()` to create a fully configured instance in app code.
14
+ *
15
+ * @param props - Storage configuration, including `db` and `adapter`
16
+ * @returns A ready-to-use `Storage` instance
17
+ * @example
18
+ * const storage = Storage.init({
19
+ * db: drizzle(dbConnection),
20
+ * adapter: new StorageS3Adapter({
21
+ * bucketName: "my-app-uploads",
22
+ * region: "us-east-1",
23
+ * credentials: {
24
+ * accessKeyId: process.env.AWS_ACCESS_KEY_ID,
25
+ * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
26
+ * },
27
+ * }),
28
+ * });
29
+ */
30
+ var Storage = class Storage {
31
+ #adapter;
32
+ #db;
33
+ prefix;
34
+ constructor({ db, adapter, prefix }) {
35
+ this.#db = db;
36
+ this.#adapter = adapter;
37
+ this.prefix = prefix ?? "uploads";
38
+ }
39
+ /**
40
+ * Create a storage service instance.
41
+ *
42
+ * This keeps the public API aligned with other Tulip services such as
43
+ * `Database.init()`, `Email.init()`, and `Auth.init()`.
44
+ *
45
+ * @param props - Storage configuration, including `db` and `adapter`
46
+ * @returns A new `Storage` instance
47
+ * @example
48
+ * const storage = Storage.init({
49
+ * db: drizzle(dbConnection),
50
+ * adapter: new StorageS3Adapter({
51
+ * bucketName: "my-app-uploads",
52
+ * region: "us-east-1",
53
+ * credentials: {
54
+ * accessKeyId: process.env.AWS_ACCESS_KEY_ID,
55
+ * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
56
+ * },
57
+ * }),
58
+ * });
59
+ */
60
+ static init(props) {
61
+ return new Storage(props);
62
+ }
63
+ /**
64
+ * Generates the canonical object key for a storage asset id.
65
+ *
66
+ * This keeps bucket key structure internal to the storage service,
67
+ * so callers only work with asset ids and do not manage object paths.
68
+ *
69
+ * @param input - Storage asset id (UUID)
70
+ * @returns Canonical storage key (e.g. `uploads/<id>`)
71
+ * @example
72
+ * const key = this.#generateKey("019d0051-2c0d-741e-9e3c-e5a5bc4d16a2");
73
+ * // key => "uploads/019d0051-2c0d-741e-9e3c-e5a5bc4d16a2"
74
+ */
75
+ #generateKey(input) {
76
+ const id = z.uuid().parse(input);
77
+ return `${this.prefix}/${id}`;
78
+ }
79
+ /**
80
+ * Builds a query to fetch a storage asset by its ID and the current adapter's provider.
81
+ * @param id - The asset ID to search for
82
+ * @returns A dynamic Drizzle query for fetching a single asset
83
+ * @example
84
+ * let query = storageService.getAssetByIdQuery("asset-123");
85
+ * query = query.where(eq(storageAssets.contentType, "image/png")); // Add additional conditions if needed
86
+ * const [asset] = await query;
87
+ */
88
+ getAssetByIdQuery(id) {
89
+ return this.#db.select().from(storageAssets).where(and(eq(storageAssets.id, id), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName), isNull(storageAssets.deletedAt))).limit(1).$dynamic();
90
+ }
91
+ /**
92
+ * Fetches a storage asset by its ID.
93
+ * @param id - The asset ID to retrieve
94
+ * @returns The asset object if found, otherwise null
95
+ * @example
96
+ * const asset = await storageService.getAssetById("asset-123");
97
+ * if (asset) {
98
+ * console.log(asset.key, asset.contentType);
99
+ * }
100
+ */
101
+ async getAssetById(id) {
102
+ const parsedId = z.uuid().parse(id);
103
+ const [asset] = await this.getAssetByIdQuery(parsedId);
104
+ return asset ?? null;
105
+ }
106
+ /**
107
+ * Builds a query to fetch a single ready storage asset by key
108
+ * within the current adapter provider scope.
109
+ *
110
+ * Notes:
111
+ * - Scoped to `this.#adapter.key` to avoid cross-provider leakage.
112
+ * - Targets ready assets by default.
113
+ * - Uniqueness is expected on `(provider, bucket, key)`.
114
+ *
115
+ * @param key - The object key stored in `storage_assets.key`
116
+ * @returns A dynamic Drizzle query returning max 1 row
117
+ * @example
118
+ * let query = storageService.getAssetByKeyQuery("uploads/abc/main");
119
+ * query = query.leftJoin(otherTable, eq(otherTable.assetId, storageAssets.id));
120
+ * const [asset] = await query;
121
+ */
122
+ getAssetByKeyQuery(key) {
123
+ return this.#db.select().from(storageAssets).where(and(eq(storageAssets.key, key), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName), eq(storageAssets.status, "ready"), isNull(storageAssets.deletedAt))).limit(1).$dynamic();
124
+ }
125
+ /**
126
+ * Fetches a single ready storage asset by key.
127
+ *
128
+ * This is the convenience wrapper around `getAssetByKeyQuery`.
129
+ * Use this when you only need the result, not query composition.
130
+ *
131
+ * @param key - Asset key to look up
132
+ * @returns The matching asset or `null` if none is found
133
+ * @example
134
+ * const asset = await storageService.getAssetByKey("uploads/abc/main");
135
+ * if (!asset) return;
136
+ */
137
+ async getAssetByKey(key) {
138
+ const [result] = await this.getAssetByKeyQuery(key);
139
+ return result ?? null;
140
+ }
141
+ /**
142
+ * Builds a base query for listing storage assets.
143
+ *
144
+ * Scope and defaults:
145
+ * - Scoped to the current adapter provider (`this.#adapter.key`)
146
+ * - Orders by newest first (`createdAt DESC`)
147
+ *
148
+ * This method returns a dynamic query so callers can extend it with
149
+ * custom filters, joins, pagination, and limits.
150
+ *
151
+ * @returns A dynamic Drizzle query for listing assets
152
+ * @example
153
+ * const query = storageService
154
+ * .listAssetsQuery()
155
+ * .limit(50);
156
+ * const assets = await query;
157
+ */
158
+ listAssetsQuery() {
159
+ return this.#db.select().from(storageAssets).where(and(eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName), isNull(storageAssets.deletedAt))).orderBy(desc(storageAssets.createdAt)).$dynamic();
160
+ }
161
+ /**
162
+ * Lists storage assets using safe default pagination.
163
+ *
164
+ * This is the convenience wrapper around `listAssetsQuery`.
165
+ * Use `listAssetsQuery()` directly when you need custom query composition.
166
+ *
167
+ * @returns Up to 100 storage assets sorted by newest first
168
+ * @example
169
+ * const assets = await storageService.listAssets();
170
+ */
171
+ async listAssets() {
172
+ return await this.listAssetsQuery().limit(100) ?? [];
173
+ }
174
+ /**
175
+ * Creates a pending storage asset record and generates a presigned upload URL.
176
+ *
177
+ * Flow:
178
+ * - Validates the input payload
179
+ * - Inserts a `pending` asset in the catalog (`storage_assets`)
180
+ * - Requests a presigned PUT URL from the storage adapter
181
+ * - Marks the asset as `error` if URL generation fails
182
+ *
183
+ * This method is intended for direct-to-storage browser uploads.
184
+ * The upload should be finalized later via a confirm step.
185
+ *
186
+ * @param props - Presign upload input (contentType, size, metadata)
187
+ * @returns The created asset id, key, and presigned URL
188
+ * @throws {ServerError} If intent creation or URL generation fails
189
+ * @example
190
+ * const result = await storageService.presignUpload({
191
+ * contentType: "image/png",
192
+ * size: 120_000,
193
+ * metadata: { uploadToken: crypto.randomUUID() },
194
+ * });
195
+ * // result => { id, uploadId, key, presignedUrl }
196
+ */
197
+ async presignUpload(props) {
198
+ const input = presignUploadInputSchema.parse(props);
199
+ const id = generateDefaultUUID();
200
+ const uploadId = input.uploadId ?? generateDefaultUUID();
201
+ const key = this.#generateKey(id);
202
+ const { contentType, size, metadata, name, visibility } = input;
203
+ const [record] = await this.#db.insert(storageAssets).values({
204
+ id,
205
+ uploadId,
206
+ key,
207
+ size,
208
+ contentType,
209
+ name,
210
+ visibility,
211
+ provider: this.#adapter.key,
212
+ bucket: this.#adapter.bucketName,
213
+ status: "pending",
214
+ metadata
215
+ }).returning();
216
+ if (!record) throw new ServerError("INTERNAL_SERVER_ERROR", { message: "Failed to create upload intent" });
217
+ try {
218
+ const presignedUrl = await this.#adapter.putObjectURL({
219
+ key,
220
+ contentType,
221
+ size,
222
+ metadata
223
+ });
224
+ return {
225
+ ...record,
226
+ presignedUrl
227
+ };
228
+ } catch (error) {
229
+ await this.#db.update(storageAssets).set({ status: "error" }).where(eq(storageAssets.id, record.id));
230
+ throw this.#parseError(error, { fallbackMessage: "Failed to generate upload URL" });
231
+ }
232
+ }
233
+ /**
234
+ * Confirms a direct-to-storage upload by verifying object existence
235
+ * and transitioning the asset from `pending` to `ready`.
236
+ *
237
+ * Flow:
238
+ * - Validates confirm input
239
+ * - Loads the asset record scoped to the current adapter provider
240
+ * - Returns early if asset is already `ready` (idempotent behavior)
241
+ * - Verifies object existence/metadata via `adapter.headObject`
242
+ * - Marks asset as `error` if verification fails
243
+ * - Updates status to `ready` and stores upload metadata
244
+ *
245
+ * @param props - Confirm upload payload containing the asset uploadId
246
+ * @returns The updated storage asset record
247
+ * @throws {ServerError} If the asset is missing, verification fails, or update fails
248
+ * @example
249
+ * const asset = await storageService.confirmUpload("019d0051-2c0d-741e-9e3c-e5a5bc4d16a2");
250
+ * // asset.status === "ready"
251
+ */
252
+ async confirmUpload(props) {
253
+ const uploadId = confirmUploadInputSchema.parse(props);
254
+ const [record] = await this.#db.select().from(storageAssets).where(and(eq(storageAssets.uploadId, uploadId), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName), isNull(storageAssets.deletedAt))).limit(1);
255
+ if (!record) throw new ServerError("NOT_FOUND", { message: "Storage asset not found" });
256
+ if (record.status === "ready") return record;
257
+ let head;
258
+ try {
259
+ head = await this.#adapter.headObject({ key: record.key });
260
+ } catch (error) {
261
+ await this.#db.update(storageAssets).set({ status: "error" }).where(eq(storageAssets.id, record.id));
262
+ throw this.#parseError(error, { fallbackMessage: "Failed to verify uploaded object" });
263
+ }
264
+ const [updated] = await this.#db.update(storageAssets).set({
265
+ status: "ready",
266
+ uploadedAt: /* @__PURE__ */ new Date(),
267
+ size: head.size ?? record.size,
268
+ contentType: head.contentType ?? record.contentType
269
+ }).where(and(eq(storageAssets.id, record.id), eq(storageAssets.status, "pending"))).returning();
270
+ if (!updated) throw new ServerError("INTERNAL_SERVER_ERROR", { message: "Failed to confirm upload" });
271
+ return updated;
272
+ }
273
+ /**
274
+ * Uploads an asset directly from the server and persists its catalog record.
275
+ *
276
+ * Flow:
277
+ * - Validates upload input
278
+ * - Creates a `pending` asset record in `storage_assets`
279
+ * - Uploads the object bytes through the storage adapter
280
+ * - Marks the record as `ready` and stores upload metadata
281
+ * - Marks the record as `error` if upload fails
282
+ *
283
+ * This method is intended for server-side uploads (non-presigned flow).
284
+ * For browser direct uploads, use `presignUpload` + `confirmUpload`.
285
+ *
286
+ * @param props - Upload payload (body, contentType, size)
287
+ * @returns The finalized storage asset record
288
+ * @throws {ServerError} If record creation, upload, or finalization fails
289
+ * @example
290
+ * const asset = await storageService.upload({
291
+ * body: fileBuffer,
292
+ * contentType: "application/pdf",
293
+ * size: fileBuffer.byteLength,
294
+ * });
295
+ */
296
+ async upload(props) {
297
+ const { body, contentType, size, metadata, name, visibility } = uploadInputSchema.parse(props);
298
+ const id = generateDefaultUUID();
299
+ const key = this.#generateKey(id);
300
+ const [record] = await this.#db.insert(storageAssets).values({
301
+ id,
302
+ key,
303
+ size,
304
+ contentType,
305
+ name,
306
+ visibility,
307
+ provider: this.#adapter.key,
308
+ bucket: this.#adapter.bucketName,
309
+ status: "pending",
310
+ metadata
311
+ }).returning();
312
+ if (!record) throw new ServerError("INTERNAL_SERVER_ERROR", { message: "Failed to create upload record" });
313
+ try {
314
+ const uploaded = await this.#adapter.putObject({
315
+ key,
316
+ body,
317
+ contentType,
318
+ size,
319
+ metadata
320
+ });
321
+ const [updated] = await this.#db.update(storageAssets).set({
322
+ status: "ready",
323
+ uploadedAt: /* @__PURE__ */ new Date(),
324
+ size: uploaded.size ?? size ?? record.size,
325
+ contentType: uploaded.contentType ?? contentType ?? record.contentType
326
+ }).where(and(eq(storageAssets.id, record.id), eq(storageAssets.status, "pending"))).returning();
327
+ if (!updated) throw new ServerError("INTERNAL_SERVER_ERROR", { message: "Failed to finalize upload" });
328
+ return updated;
329
+ } catch (error) {
330
+ await this.#db.update(storageAssets).set({ status: "error" }).where(and(eq(storageAssets.id, record.id), eq(storageAssets.status, "pending")));
331
+ throw this.#parseError(error, { fallbackMessage: "Failed to upload object" });
332
+ }
333
+ }
334
+ /**
335
+ * Retrieves the object content for a ready storage asset.
336
+ *
337
+ * Flow:
338
+ * - Looks up the asset record by id, scoped to the current adapter provider
339
+ * - Ensures the asset is in `ready` status
340
+ * - Fetches object content from the storage adapter using the stored key
341
+ *
342
+ * @param id - The storage asset id
343
+ * @returns The adapter object response (stream/body + metadata)
344
+ * @throws {ServerError} If the asset does not exist or is not ready
345
+ * @example
346
+ * const object = await storageService.getObject("asset-123");
347
+ * // object.body can be streamed/consumed by caller
348
+ */
349
+ async getObject(input) {
350
+ const id = z.uuid().parse(input);
351
+ const [record] = await this.#db.select().from(storageAssets).where(and(eq(storageAssets.id, id), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName), eq(storageAssets.status, "ready"), isNull(storageAssets.deletedAt))).limit(1);
352
+ if (!record) throw new ServerError("NOT_FOUND", { message: "Storage asset not found" });
353
+ return this.#adapter.getObject(record.key).catch((error) => {
354
+ throw this.#parseError(error, { fallbackMessage: "Failed to retrieve object" });
355
+ });
356
+ }
357
+ /**
358
+ * Generates a presigned read URL for a ready storage asset.
359
+ *
360
+ * Flow:
361
+ * - Validates the asset id
362
+ * - Resolves the asset record scoped to the current adapter provider
363
+ * - Ensures the asset is in `ready` status
364
+ * - Delegates URL signing to the storage adapter using the stored key
365
+ *
366
+ * @param input - Storage asset id (UUID)
367
+ * @param options - Optional URL options (for example expiration/disposition)
368
+ * @returns A presigned URL for reading the object
369
+ * @throws {ServerError} If the asset does not exist or is not ready
370
+ * @example
371
+ * const url = await storageService.getObjectURL("019d0051-2c0d-741e-9e3c-e5a5bc4d16a2", {
372
+ * expiresIn: 3600,
373
+ * });
374
+ */
375
+ async getObjectURL(input, options) {
376
+ const id = z.uuid().parse(input);
377
+ const [record] = await this.#db.select().from(storageAssets).where(and(eq(storageAssets.id, id), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName), eq(storageAssets.status, "ready"), isNull(storageAssets.deletedAt))).limit(1);
378
+ if (!record) throw new ServerError("NOT_FOUND", { message: "Storage asset not found" });
379
+ return this.#adapter.getObjectURL(record.key, options).catch((error) => {
380
+ throw this.#parseError(error, { fallbackMessage: "Failed to generate object URL" });
381
+ });
382
+ }
383
+ /**
384
+ * Soft deletes a single storage asset by id.
385
+ *
386
+ * This is a convenience wrapper around `deleteAssets`.
387
+ *
388
+ * @param input - Storage asset id (UUID)
389
+ * @returns The soft-deleted asset record, or null if not found/already deleted
390
+ */
391
+ async deleteAsset(input) {
392
+ const id = z.uuid().parse(input);
393
+ const [deleted] = await this.deleteAssets([id]);
394
+ return deleted ?? null;
395
+ }
396
+ /**
397
+ * Soft deletes multiple storage assets by setting `deletedAt`.
398
+ *
399
+ * Flow:
400
+ * - Validates and de-duplicates ids
401
+ * - Resolves provider-scoped active records
402
+ * - Marks matching rows as deleted by setting `deletedAt`
403
+ *
404
+ * @param input - Storage asset ids (UUID[])
405
+ * @returns Soft-deleted asset records
406
+ */
407
+ async deleteAssets(input) {
408
+ const ids = [...new Set(z.array(z.uuid()).parse(input))];
409
+ if (ids.length === 0) return [];
410
+ return this.#db.update(storageAssets).set({ deletedAt: /* @__PURE__ */ new Date() }).where(and(inArray(storageAssets.id, ids), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName), isNull(storageAssets.deletedAt))).returning();
411
+ }
412
+ /**
413
+ * Restores a single soft-deleted storage asset.
414
+ *
415
+ * This is a convenience wrapper around `restoreAssets`.
416
+ *
417
+ * @param input - Storage asset id (UUID)
418
+ * @returns The restored asset record, or null if not found/not deleted
419
+ */
420
+ async restoreAsset(input) {
421
+ const id = z.uuid().parse(input);
422
+ const [restored] = await this.restoreAssets([id]);
423
+ return restored ?? null;
424
+ }
425
+ /**
426
+ * Restores multiple soft-deleted storage assets by clearing `deletedAt`.
427
+ *
428
+ * @param input - Storage asset ids (UUID[])
429
+ * @returns Restored asset records
430
+ */
431
+ async restoreAssets(input) {
432
+ const ids = [...new Set(z.array(z.uuid()).parse(input))];
433
+ if (ids.length === 0) return [];
434
+ return this.#db.update(storageAssets).set({ deletedAt: null }).where(and(inArray(storageAssets.id, ids), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName), isNotNull(storageAssets.deletedAt))).returning();
435
+ }
436
+ /**
437
+ * Hard deletes a single storage asset.
438
+ *
439
+ * This is a convenience wrapper around `purgeAssets`.
440
+ *
441
+ * @param input - Storage asset id (UUID)
442
+ * @returns The purged asset record, or null if not found
443
+ */
444
+ async purgeAsset(input) {
445
+ const id = z.uuid().parse(input);
446
+ const [deleted] = await this.purgeAssets([id]);
447
+ return deleted ?? null;
448
+ }
449
+ /**
450
+ * Hard deletes multiple storage assets.
451
+ *
452
+ * Flow:
453
+ * - Validates and de-duplicates ids
454
+ * - Resolves provider-scoped records
455
+ * - Deletes physical objects from the adapter by key
456
+ * - Hard deletes DB records
457
+ *
458
+ * @param input - Storage asset ids (UUID[])
459
+ * @returns Purged asset records
460
+ * @throws {ServerError} If provider deletion fails
461
+ */
462
+ async purgeAssets(input) {
463
+ const ids = [...new Set(z.array(z.uuid()).parse(input))];
464
+ if (ids.length === 0) return [];
465
+ const records = await this.#db.select({
466
+ id: storageAssets.id,
467
+ key: storageAssets.key
468
+ }).from(storageAssets).where(and(inArray(storageAssets.id, ids), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName)));
469
+ if (records.length === 0) return [];
470
+ const keys = records.map((r) => r.key);
471
+ try {
472
+ await this.#adapter.deleteObjects(keys);
473
+ } catch (error) {
474
+ throw this.#parseError(error, { fallbackMessage: "Failed to delete storage objects" });
475
+ }
476
+ const deletedIds = records.map((r) => r.id);
477
+ return await this.#db.delete(storageAssets).where(and(inArray(storageAssets.id, deletedIds), eq(storageAssets.provider, this.#adapter.key), eq(storageAssets.bucket, this.#adapter.bucketName))).returning();
478
+ }
479
+ /**
480
+ * Normalizes unknown adapter/service errors into a consistent `ServerError`.
481
+ *
482
+ * Behavior:
483
+ * - Returns existing `ServerError` instances unchanged
484
+ * - Maps known storage adapter errors to application-level server errors
485
+ * - Falls back to a generic internal server error for unknown failures
486
+ *
487
+ * This keeps adapter-specific errors inside the storage layer while exposing
488
+ * a stable error contract to route handlers and RPC procedures.
489
+ *
490
+ * @param error - The unknown error to normalize
491
+ * @param options - Optional fallback message for non-specific failures
492
+ * @returns A normalized `ServerError`
493
+ */
494
+ #parseError(error, options) {
495
+ if (error instanceof ServerError) return error;
496
+ if (error instanceof StorageAdapterError) {
497
+ if (error.code === "OBJECT_NOT_FOUND") return new ServerError("NOT_FOUND", {
498
+ message: "Storage asset not found",
499
+ cause: error
500
+ });
501
+ return new ServerError("INTERNAL_SERVER_ERROR", {
502
+ message: options?.fallbackMessage ?? "Storage adapter error",
503
+ cause: error
504
+ });
505
+ }
506
+ return new ServerError("INTERNAL_SERVER_ERROR", {
507
+ message: options?.fallbackMessage ?? "Unknown storage error",
508
+ cause: error instanceof Error ? error : void 0
509
+ });
510
+ }
511
+ };
512
+
513
+ //#endregion
514
+ export { Storage };
@@ -0,0 +1,57 @@
1
+ import { PresignUploadInput, PresignUploadOutput, SelectStorageAssetSchema } from "./validators.mjs";
2
+ import { StorageRouterInputs, StorageRouterOutputs } from "./procedures.server.mjs";
3
+
4
+ //#region src/modules/storage/lib/upload.client.d.ts
5
+ /**
6
+ * Upload request
7
+ */
8
+ type UploadFileRequest = PresignUploadInput & {
9
+ file: File;
10
+ };
11
+ type PrepareUploadInput = Omit<UploadFileRequest, "name" | "contentType" | "size">;
12
+ type UploadHooks = {
13
+ beforePresign?: (input: UploadFileRequest) => Promise<void> | void;
14
+ afterPresign?: (presignResult: PresignUploadOutput) => Promise<void> | void;
15
+ beforeConfirm?: (presignResult: PresignUploadOutput) => Promise<void> | void;
16
+ afterConfirm?: (asset: SelectStorageAssetSchema) => Promise<void> | void;
17
+ };
18
+ /**
19
+ * Upload client
20
+ */
21
+ type UploadClient = {
22
+ prepareUpload: (input: PrepareUploadInput) => UploadFileRequest;
23
+ upload: (input: UploadFileRequest, hooks?: UploadHooks) => Promise<SelectStorageAssetSchema>;
24
+ deleteAsset: (id: string) => Promise<SelectStorageAssetSchema | null>;
25
+ deleteAssets: (ids: string[]) => Promise<SelectStorageAssetSchema[]>;
26
+ restoreAsset: (id: string) => Promise<SelectStorageAssetSchema | null>;
27
+ restoreAssets: (ids: string[]) => Promise<SelectStorageAssetSchema[]>;
28
+ purgeAsset: (id: string) => Promise<SelectStorageAssetSchema | null>;
29
+ purgeAssets: (ids: string[]) => Promise<SelectStorageAssetSchema[]>;
30
+ };
31
+ /**
32
+ * Create upload client props
33
+ */
34
+ type CreateStorageClientProps = {
35
+ endpoints: {
36
+ presign: (input: StorageRouterInputs["presign"]) => Promise<StorageRouterOutputs["presign"]>;
37
+ confirm: (uploadId: StorageRouterInputs["confirm"]) => Promise<StorageRouterOutputs["confirm"]>;
38
+ deleteAssets: (ids: StorageRouterInputs["deleteAssets"]) => Promise<StorageRouterOutputs["deleteAssets"]>;
39
+ deleteAsset: (id: StorageRouterInputs["deleteAsset"]) => Promise<StorageRouterOutputs["deleteAsset"]>;
40
+ restoreAsset: (id: StorageRouterInputs["restoreAsset"]) => Promise<StorageRouterOutputs["restoreAsset"]>;
41
+ restoreAssets: (ids: StorageRouterInputs["restoreAssets"]) => Promise<StorageRouterOutputs["restoreAssets"]>;
42
+ purgeAsset: (id: StorageRouterInputs["purgeAsset"]) => Promise<StorageRouterOutputs["purgeAsset"]>;
43
+ purgeAssets: (ids: StorageRouterInputs["purgeAssets"]) => Promise<StorageRouterOutputs["purgeAssets"]>;
44
+ };
45
+ };
46
+ /**
47
+ * Creates an upload client for the storage module.
48
+ *
49
+ * Flow:
50
+ * - Prepare upload payload with generated id and resolved key
51
+ * - Request presigned upload URL from server
52
+ * - Upload file bytes directly to object storage
53
+ * - Confirm upload and receive finalized storage asset
54
+ */
55
+ declare function createUploadClient(props: CreateStorageClientProps): UploadClient;
56
+ //#endregion
57
+ export { PrepareUploadInput, UploadClient, UploadFileRequest, UploadHooks, createUploadClient };
@@ -0,0 +1,86 @@
1
+ //#region src/modules/storage/lib/upload.client.ts
2
+ /**
3
+ * Creates an upload client for the storage module.
4
+ *
5
+ * Flow:
6
+ * - Prepare upload payload with generated id and resolved key
7
+ * - Request presigned upload URL from server
8
+ * - Upload file bytes directly to object storage
9
+ * - Confirm upload and receive finalized storage asset
10
+ */
11
+ function createUploadClient(props) {
12
+ /**
13
+ * Create input schema for the upload method
14
+ * @param {PrepareUploadInput} input
15
+ * @returns {UploadFileRequest}
16
+ */
17
+ function prepareUpload(input) {
18
+ return {
19
+ ...input,
20
+ uploadId: input.uploadId ?? crypto.randomUUID(),
21
+ name: input.file.name,
22
+ size: input.file.size,
23
+ contentType: input.file.type || "application/octet-stream"
24
+ };
25
+ }
26
+ /**
27
+ * Upload file to the server
28
+ * @param {UploadFileRequest} input
29
+ * @returns {Promise<SelectStorageAssetSchema>}
30
+ */
31
+ async function upload(input, hooks) {
32
+ let presignResult = null;
33
+ try {
34
+ /**
35
+ * Presign
36
+ */
37
+ await hooks?.beforePresign?.(input);
38
+ presignResult = await props.endpoints.presign(input);
39
+ await hooks?.afterPresign?.(presignResult);
40
+ /**
41
+ * Upload the file
42
+ */
43
+ const uploadResponse = await fetch(presignResult.presignedUrl, {
44
+ method: "PUT",
45
+ headers: { "Content-Type": input.contentType || "application/octet-stream" },
46
+ body: input.file
47
+ });
48
+ if (!uploadResponse.ok) {
49
+ const message = await uploadResponse.text();
50
+ throw new Error(`Upload failed: ${message}`);
51
+ }
52
+ /**
53
+ * Confirm
54
+ */
55
+ await hooks?.beforeConfirm?.(presignResult);
56
+ const asset = await props.endpoints.confirm(presignResult.uploadId);
57
+ await hooks?.afterConfirm?.(asset);
58
+ /**
59
+ * Return
60
+ */
61
+ return asset;
62
+ } catch (err) {
63
+ console.error("Upload error: ", err);
64
+ /**
65
+ * Delete if upload failed
66
+ * */
67
+ if (presignResult) await props.endpoints.deleteAsset(presignResult.id).catch((deleteErr) => {
68
+ console.error("Failed to delete asset after upload error: ", deleteErr);
69
+ });
70
+ throw err;
71
+ }
72
+ }
73
+ return {
74
+ prepareUpload,
75
+ upload,
76
+ deleteAsset: props.endpoints.deleteAsset,
77
+ deleteAssets: props.endpoints.deleteAssets,
78
+ restoreAsset: props.endpoints.restoreAsset,
79
+ restoreAssets: props.endpoints.restoreAssets,
80
+ purgeAsset: props.endpoints.purgeAsset,
81
+ purgeAssets: props.endpoints.purgeAssets
82
+ };
83
+ }
84
+
85
+ //#endregion
86
+ export { createUploadClient };