@tulip-systems/core 0.4.1 → 0.5.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 (602) hide show
  1. package/dist/auth/client.d.mts +2 -2
  2. package/dist/auth/client.mjs +2 -2
  3. package/dist/commands/client.d.mts +3 -3
  4. package/dist/commands/client.mjs +3 -3
  5. package/dist/components/client.d.mts +3 -5
  6. package/dist/components/client.mjs +3 -5
  7. package/dist/components/common/icons.d.mts +52 -52
  8. package/dist/components/common/icons.d.mts.map +1 -1
  9. package/dist/components/common/status.d.mts +3 -3
  10. package/dist/components/common/status.d.mts.map +1 -1
  11. package/dist/components/editor/components/block-dropdown.mjs +28 -14
  12. package/dist/components/editor/components/block-dropdown.mjs.map +1 -1
  13. package/dist/components/editor/components/content.client.d.mts +2 -2
  14. package/dist/components/editor/components/content.client.mjs +1 -1
  15. package/dist/components/editor/components/content.client.mjs.map +1 -1
  16. package/dist/components/editor/components/editor.client.d.mts +48 -0
  17. package/dist/components/editor/components/editor.client.d.mts.map +1 -0
  18. package/dist/components/editor/components/editor.client.mjs +53 -0
  19. package/dist/components/editor/components/editor.client.mjs.map +1 -0
  20. package/dist/components/editor/components/menu-fixed.client.d.mts +7 -0
  21. package/dist/components/editor/components/menu-fixed.client.d.mts.map +1 -0
  22. package/dist/components/editor/components/{fixed-menu.client.mjs → menu-fixed.client.mjs} +21 -27
  23. package/dist/components/editor/components/menu-fixed.client.mjs.map +1 -0
  24. package/dist/components/editor/lib/constants.d.mts +60 -0
  25. package/dist/components/editor/lib/constants.d.mts.map +1 -0
  26. package/dist/components/editor/lib/constants.mjs +90 -0
  27. package/dist/components/editor/lib/constants.mjs.map +1 -0
  28. package/dist/components/editor/lib/extensions.d.mts +62 -0
  29. package/dist/components/editor/lib/extensions.d.mts.map +1 -0
  30. package/dist/components/editor/lib/extensions.mjs +52 -0
  31. package/dist/components/editor/lib/extensions.mjs.map +1 -0
  32. package/dist/components/editor/lib/helpers.mjs +3 -3
  33. package/dist/components/editor/lib/helpers.mjs.map +1 -1
  34. package/dist/components/editor/lib/variants.mjs +8 -0
  35. package/dist/components/editor/lib/variants.mjs.map +1 -0
  36. package/dist/components/header/back-button.client.d.mts +2 -2
  37. package/dist/components/header/bottom-bar.client.d.mts +3 -3
  38. package/dist/components/header/breadcrumbs.client.d.mts +7 -7
  39. package/dist/components/header/header.client.d.mts +2 -2
  40. package/dist/components/header/mobile-nav-switcher.client.d.mts +2 -2
  41. package/dist/components/header/top-bar.client.d.mts +4 -4
  42. package/dist/components/header/top-bar.client.mjs +1 -1
  43. package/dist/components/header/top-bar.client.mjs.map +1 -1
  44. package/dist/components/layouts/admin-content.client.d.mts +2 -2
  45. package/dist/components/layouts/admin-content.client.mjs +1 -1
  46. package/dist/components/layouts/admin-content.client.mjs.map +1 -1
  47. package/dist/components/layouts/admin-layout.d.mts +2 -2
  48. package/dist/components/layouts/admin-layout.d.mts.map +1 -1
  49. package/dist/components/layouts/admin-loading.d.mts +2 -2
  50. package/dist/components/layouts/admin-loading.d.mts.map +1 -1
  51. package/dist/components/layouts/empty-page.d.mts +4 -4
  52. package/dist/components/layouts/empty-page.d.mts.map +1 -1
  53. package/dist/components/layouts/list-layout.d.mts +2 -2
  54. package/dist/components/layouts/list-layout.d.mts.map +1 -1
  55. package/dist/components/layouts/not-found-page.d.mts +3 -3
  56. package/dist/components/layouts/not-found-page.d.mts.map +1 -1
  57. package/dist/components/layouts/providers.client.d.mts +2 -2
  58. package/dist/components/layouts/root-layout.server.d.mts +4 -4
  59. package/dist/components/layouts/root-layout.server.d.mts.map +1 -1
  60. package/dist/components/layouts/root-loading.d.mts +2 -2
  61. package/dist/components/layouts/root-loading.d.mts.map +1 -1
  62. package/dist/components/layouts/tab-layout.d.mts +2 -2
  63. package/dist/components/layouts/tab-layout.d.mts.map +1 -1
  64. package/dist/components/lists/data-list.d.mts +5 -5
  65. package/dist/components/lists/data-list.d.mts.map +1 -1
  66. package/dist/components/lists/data-stack.d.mts +8 -8
  67. package/dist/components/lists/data-stack.d.mts.map +1 -1
  68. package/dist/components/navigation/admin-sidebar-paths.client.d.mts +10 -10
  69. package/dist/components/ui/accordion.d.mts +5 -5
  70. package/dist/components/ui/alert-dialog.d.mts +12 -12
  71. package/dist/components/ui/alert.d.mts +4 -4
  72. package/dist/components/ui/aspect-ratio.d.mts +2 -2
  73. package/dist/components/ui/avatar.client.d.mts +4 -4
  74. package/dist/components/ui/badge.d.mts +2 -2
  75. package/dist/components/ui/breadcrumb.d.mts +8 -8
  76. package/dist/components/ui/button.d.mts +2 -2
  77. package/dist/components/ui/calendar.d.mts +17 -4
  78. package/dist/components/ui/calendar.d.mts.map +1 -1
  79. package/dist/components/ui/calendar.mjs +90 -37
  80. package/dist/components/ui/calendar.mjs.map +1 -1
  81. package/dist/components/ui/card.d.mts +7 -7
  82. package/dist/components/ui/carousel.d.mts +6 -6
  83. package/dist/components/ui/chart.client.d.mts +5 -5
  84. package/dist/components/ui/checkbox.d.mts +2 -2
  85. package/dist/components/ui/collapsible.client.d.mts +4 -4
  86. package/dist/components/ui/color-picker.client.d.mts +2 -2
  87. package/dist/components/ui/combobox-dropdown.client.d.mts +2 -2
  88. package/dist/components/ui/combobox.client.d.mts +2 -2
  89. package/dist/components/ui/command.d.mts +10 -10
  90. package/dist/components/ui/context-menu.d.mts +16 -16
  91. package/dist/components/ui/date-picker.client.d.mts +2 -2
  92. package/dist/components/ui/dialog.client.d.mts +11 -11
  93. package/dist/components/ui/drawer.client.d.mts +11 -11
  94. package/dist/components/ui/dropdown-menu.d.mts +16 -16
  95. package/dist/components/ui/form.client.d.mts +7 -7
  96. package/dist/components/ui/hover-card.client.d.mts +4 -4
  97. package/dist/components/ui/input-recipient.d.mts +5 -3
  98. package/dist/components/ui/input-recipient.d.mts.map +1 -1
  99. package/dist/components/ui/input-recipient.mjs +2 -2
  100. package/dist/components/ui/input-recipient.mjs.map +1 -1
  101. package/dist/components/ui/input.d.mts +2 -2
  102. package/dist/components/ui/label.d.mts +2 -2
  103. package/dist/components/ui/navigation-menu.d.mts +9 -9
  104. package/dist/components/ui/pagination.d.mts +8 -8
  105. package/dist/components/ui/popover.d.mts +5 -5
  106. package/dist/components/ui/progress.client.d.mts +2 -2
  107. package/dist/components/ui/radio-group.d.mts +3 -3
  108. package/dist/components/ui/resizable.client.d.mts +4 -4
  109. package/dist/components/ui/scroll-area.d.mts +3 -3
  110. package/dist/components/ui/select.client.d.mts +11 -11
  111. package/dist/components/ui/separator.d.mts +2 -2
  112. package/dist/components/ui/sheet.client.d.mts +9 -9
  113. package/dist/components/ui/sidebar.client.d.mts +26 -26
  114. package/dist/components/ui/skeleton.d.mts +2 -2
  115. package/dist/components/ui/slider.d.mts +2 -2
  116. package/dist/components/ui/sonner.client.d.mts +2 -2
  117. package/dist/components/ui/switch.d.mts +2 -2
  118. package/dist/components/ui/tabs.d.mts +5 -5
  119. package/dist/components/ui/textarea.d.mts +2 -2
  120. package/dist/components/ui/time-input.client.d.mts +2 -2
  121. package/dist/components/ui/toggle-group.client.d.mts +3 -3
  122. package/dist/components/ui/toggle.d.mts +4 -4
  123. package/dist/components/ui/toggle.d.mts.map +1 -1
  124. package/dist/components/ui/tooltip.client.d.mts +5 -5
  125. package/dist/components/ui/tooltip.client.d.mts.map +1 -1
  126. package/dist/components.d.mts +2 -2
  127. package/dist/components.mjs +2 -2
  128. package/dist/config/server.d.mts +1 -2
  129. package/dist/config/server.mjs +1 -2
  130. package/dist/data-tables.d.mts +6 -5
  131. package/dist/data-tables.mjs +4 -3
  132. package/dist/inline-edit/client.d.mts +4 -4
  133. package/dist/inline-edit/client.mjs +3 -3
  134. package/dist/lib/hooks/use-action.d.mts +2 -2
  135. package/dist/lib/hooks/use-indicator.d.mts +2 -2
  136. package/dist/lib.mjs +1 -1
  137. package/dist/modules/auth/components/allowed.client.d.mts +2 -2
  138. package/dist/modules/auth/components/allowed.client.d.mts.map +1 -1
  139. package/dist/modules/auth/components/auth-layout.server.d.mts +2 -2
  140. package/dist/modules/auth/components/auth-layout.server.d.mts.map +1 -1
  141. package/dist/modules/auth/components/auth-loading.d.mts +2 -2
  142. package/dist/modules/auth/components/auth-loading.d.mts.map +1 -1
  143. package/dist/modules/auth/components/create-first-user-page.client.d.mts +2 -2
  144. package/dist/modules/auth/components/create-first-user-page.client.d.mts.map +1 -1
  145. package/dist/modules/auth/components/forget-password-page.client.d.mts +2 -2
  146. package/dist/modules/auth/components/forget-password-page.client.d.mts.map +1 -1
  147. package/dist/modules/auth/components/guard-first-user.server.d.mts +2 -2
  148. package/dist/modules/auth/components/guard-first-user.server.d.mts.map +1 -1
  149. package/dist/modules/auth/components/guard.server.d.mts +2 -2
  150. package/dist/modules/auth/components/guard.server.d.mts.map +1 -1
  151. package/dist/modules/auth/components/login-page.client.d.mts +2 -2
  152. package/dist/modules/auth/components/login-page.client.d.mts.map +1 -1
  153. package/dist/modules/auth/components/reset-password-page.client.d.mts +2 -2
  154. package/dist/modules/auth/components/reset-password-page.client.d.mts.map +1 -1
  155. package/dist/modules/auth/components/update-password-command.d.mts +2 -2
  156. package/dist/modules/auth/components/update-password-command.d.mts.map +1 -1
  157. package/dist/modules/auth/db/schema.d.mts +247 -230
  158. package/dist/modules/auth/db/schema.d.mts.map +1 -1
  159. package/dist/modules/auth/db/schema.mjs +12 -20
  160. package/dist/modules/auth/db/schema.mjs.map +1 -1
  161. package/dist/modules/auth/handler/client.client.d.mts +129 -129
  162. package/dist/modules/auth/handler/client.client.d.mts.map +1 -1
  163. package/dist/modules/auth/handler/client.client.mjs +10 -6
  164. package/dist/modules/auth/handler/client.client.mjs.map +1 -1
  165. package/dist/modules/auth/handler/init.d.mts +134 -131
  166. package/dist/modules/auth/handler/init.d.mts.map +1 -1
  167. package/dist/modules/auth/handler/init.mjs +5 -2
  168. package/dist/modules/auth/handler/init.mjs.map +1 -1
  169. package/dist/modules/auth/hooks/use-permission.d.mts +2 -2
  170. package/dist/modules/auth/hooks/use-permission.d.mts.map +1 -1
  171. package/dist/modules/auth/hooks/use-permission.mjs +7 -2
  172. package/dist/modules/auth/hooks/use-permission.mjs.map +1 -1
  173. package/dist/modules/auth/hooks/use-session.d.mts +119 -3
  174. package/dist/modules/auth/hooks/use-session.d.mts.map +1 -1
  175. package/dist/modules/auth/hooks/use-session.mjs +15 -10
  176. package/dist/modules/auth/hooks/use-session.mjs.map +1 -1
  177. package/dist/modules/auth/lib/helpers.server.d.mts +5 -5
  178. package/dist/modules/auth/lib/helpers.server.d.mts.map +1 -1
  179. package/dist/modules/auth/lib/validators.d.mts +1 -1
  180. package/dist/modules/auth/lib/validators.d.mts.map +1 -1
  181. package/dist/modules/auth/lib/validators.mjs +1 -1
  182. package/dist/modules/auth/lib/validators.mjs.map +1 -1
  183. package/dist/modules/commands/components/alert-dialog-command.client.d.mts +10 -10
  184. package/dist/modules/commands/components/alert-dialog-command.client.d.mts.map +1 -1
  185. package/dist/modules/commands/components/alert-dialog-command.client.mjs +2 -2
  186. package/dist/modules/commands/components/alert-dialog-command.client.mjs.map +1 -1
  187. package/dist/modules/commands/components/click-command.client.d.mts +2 -2
  188. package/dist/modules/commands/components/click-command.client.d.mts.map +1 -1
  189. package/dist/modules/commands/components/click-command.client.mjs +2 -2
  190. package/dist/modules/commands/components/click-command.client.mjs.map +1 -1
  191. package/dist/modules/commands/components/command-trigger.client.d.mts +6 -6
  192. package/dist/modules/commands/components/command-trigger.client.d.mts.map +1 -1
  193. package/dist/modules/commands/components/dialog-command.client.d.mts +18 -8
  194. package/dist/modules/commands/components/dialog-command.client.d.mts.map +1 -1
  195. package/dist/modules/commands/components/dialog-command.client.mjs +12 -8
  196. package/dist/modules/commands/components/dialog-command.client.mjs.map +1 -1
  197. package/dist/modules/commands/components/dropdown-command.client.d.mts +5 -5
  198. package/dist/modules/commands/components/dropdown-command.client.d.mts.map +1 -1
  199. package/dist/modules/commands/components/dropdown-command.client.mjs +2 -2
  200. package/dist/modules/commands/components/dropdown-command.client.mjs.map +1 -1
  201. package/dist/modules/commands/components/empty-command.client.d.mts +2 -2
  202. package/dist/modules/commands/components/form-dialog-command.client.d.mts +11 -11
  203. package/dist/modules/commands/components/form-dialog-command.client.mjs +2 -2
  204. package/dist/modules/commands/components/form-dialog-command.client.mjs.map +1 -1
  205. package/dist/modules/commands/hooks/use-command-mutation.client.d.mts +17 -0
  206. package/dist/modules/commands/hooks/use-command-mutation.client.d.mts.map +1 -0
  207. package/dist/modules/commands/hooks/use-command-mutation.client.mjs +42 -0
  208. package/dist/modules/commands/hooks/use-command-mutation.client.mjs.map +1 -0
  209. package/dist/modules/commands/menus/context-menu.client.d.mts +2 -2
  210. package/dist/modules/commands/menus/dropdown-menu.client.d.mts +3 -3
  211. package/dist/modules/commands/menus/inline-menu.client.d.mts +3 -3
  212. package/dist/modules/commands/menus/responsive-menu.client.d.mts +3 -3
  213. package/dist/modules/commands/utils/archive-command.client.d.mts +3 -3
  214. package/dist/modules/commands/utils/delete-command.client.d.mts +13 -8
  215. package/dist/modules/commands/utils/delete-command.client.d.mts.map +1 -1
  216. package/dist/modules/commands/utils/delete-command.client.mjs +10 -1
  217. package/dist/modules/commands/utils/delete-command.client.mjs.map +1 -1
  218. package/dist/modules/config/db/helpers.d.mts +5 -5
  219. package/dist/modules/config/db/helpers.d.mts.map +1 -1
  220. package/dist/modules/config/lib/config.d.mts +3 -3
  221. package/dist/modules/config/lib/config.d.mts.map +1 -1
  222. package/dist/modules/config/lib/config.mjs.map +1 -1
  223. package/dist/modules/config/lib/context.d.mts +2 -2
  224. package/dist/modules/config/lib/context.d.mts.map +1 -1
  225. package/dist/modules/config/lib/context.mjs.map +1 -1
  226. package/dist/modules/data-tables/components/cell/common.client.d.mts +5 -5
  227. package/dist/modules/data-tables/components/cell/common.client.d.mts.map +1 -1
  228. package/dist/modules/data-tables/components/column-header.d.mts +2 -2
  229. package/dist/modules/data-tables/components/filters/combobox.client.d.mts +2 -2
  230. package/dist/modules/data-tables/components/filters/combobox.client.d.mts.map +1 -1
  231. package/dist/modules/data-tables/components/filters/combobox.client.mjs +5 -2
  232. package/dist/modules/data-tables/components/filters/combobox.client.mjs.map +1 -1
  233. package/dist/modules/data-tables/components/filters/slider.client.d.mts +2 -2
  234. package/dist/modules/data-tables/components/filters/slider.client.d.mts.map +1 -1
  235. package/dist/modules/data-tables/components/header.d.mts +4 -4
  236. package/dist/modules/data-tables/components/layout.d.mts +2 -2
  237. package/dist/modules/data-tables/components/layout.d.mts.map +1 -1
  238. package/dist/modules/data-tables/components/search-input.client.d.mts +2 -2
  239. package/dist/modules/data-tables/components/search-input.client.d.mts.map +1 -1
  240. package/dist/modules/data-tables/components/skeleton.d.mts +2 -2
  241. package/dist/modules/data-tables/components/skeleton.d.mts.map +1 -1
  242. package/dist/modules/data-tables/components/table.d.mts +7 -7
  243. package/dist/modules/data-tables/components/table.d.mts.map +1 -1
  244. package/dist/modules/data-tables/components/toolbar.d.mts +3 -3
  245. package/dist/modules/data-tables/components/toolbar.d.mts.map +1 -1
  246. package/dist/modules/data-tables/hooks/use-context.client.d.mts +13 -10
  247. package/dist/modules/data-tables/hooks/use-context.client.d.mts.map +1 -1
  248. package/dist/modules/data-tables/hooks/use-context.client.mjs.map +1 -1
  249. package/dist/modules/data-tables/hooks/use-table.client.d.mts +2 -1
  250. package/dist/modules/data-tables/hooks/use-table.client.d.mts.map +1 -1
  251. package/dist/modules/data-tables/hooks/use-table.client.mjs.map +1 -1
  252. package/dist/modules/data-tables/lib/converters/search.d.mts +1 -1
  253. package/dist/modules/data-tables/lib/converters/sorting.d.mts +1 -1
  254. package/dist/modules/data-tables/lib/filters/config.d.mts +4 -1
  255. package/dist/modules/data-tables/lib/filters/config.d.mts.map +1 -1
  256. package/dist/modules/data-tables/lib/filters/config.mjs.map +1 -1
  257. package/dist/modules/data-tables/lib/filters/helpers.d.mts +11 -0
  258. package/dist/modules/data-tables/lib/filters/helpers.d.mts.map +1 -0
  259. package/dist/modules/data-tables/lib/filters/helpers.mjs +17 -0
  260. package/dist/modules/data-tables/lib/filters/helpers.mjs.map +1 -0
  261. package/dist/modules/data-tables/lib/filters/parsers.d.mts +7 -2
  262. package/dist/modules/data-tables/lib/filters/parsers.d.mts.map +1 -1
  263. package/dist/modules/data-tables/lib/filters/parsers.mjs +6 -1
  264. package/dist/modules/data-tables/lib/filters/parsers.mjs.map +1 -1
  265. package/dist/modules/data-tables/lib/filters/resolvers.d.mts +6 -1
  266. package/dist/modules/data-tables/lib/filters/resolvers.d.mts.map +1 -1
  267. package/dist/modules/data-tables/lib/filters/resolvers.mjs +8 -1
  268. package/dist/modules/data-tables/lib/filters/resolvers.mjs.map +1 -1
  269. package/dist/modules/data-tables/lib/types.d.mts +8 -5
  270. package/dist/modules/data-tables/lib/types.d.mts.map +1 -1
  271. package/dist/modules/data-tables/server/get-data.server.d.mts +1 -1
  272. package/dist/modules/data-tables/tables/data-table/components/table.d.mts +2 -2
  273. package/dist/modules/data-tables/tables/data-table/components/table.d.mts.map +1 -1
  274. package/dist/modules/data-tables/tables/inline-table/components/cells/common.d.mts +2 -2
  275. package/dist/modules/data-tables/tables/inline-table/components/cells/common.d.mts.map +1 -1
  276. package/dist/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.d.mts +2 -2
  277. package/dist/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.d.mts.map +1 -1
  278. package/dist/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.mjs +1 -1
  279. package/dist/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.mjs.map +1 -1
  280. package/dist/modules/data-tables/tables/inline-table/components/inputs/advanced-select.client.d.mts +2 -2
  281. package/dist/modules/data-tables/tables/inline-table/components/inputs/advanced-select.client.d.mts.map +1 -1
  282. package/dist/modules/data-tables/tables/inline-table/components/inputs/combobox.client.d.mts +2 -2
  283. package/dist/modules/data-tables/tables/inline-table/components/inputs/combobox.client.d.mts.map +1 -1
  284. package/dist/modules/data-tables/tables/inline-table/components/inputs/input.client.d.mts +3 -3
  285. package/dist/modules/data-tables/tables/inline-table/components/inputs/input.client.d.mts.map +1 -1
  286. package/dist/modules/data-tables/tables/inline-table/components/inputs/read-only.d.mts +2 -2
  287. package/dist/modules/data-tables/tables/inline-table/components/inputs/read-only.d.mts.map +1 -1
  288. package/dist/modules/data-tables/tables/inline-table/components/inputs/select.client.d.mts +2 -2
  289. package/dist/modules/data-tables/tables/inline-table/components/inputs/select.client.d.mts.map +1 -1
  290. package/dist/modules/data-tables/tables/inline-table/components/table.d.mts +2 -2
  291. package/dist/modules/data-tables/tables/inline-table/components/table.d.mts.map +1 -1
  292. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts +2 -2
  293. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts.map +1 -1
  294. package/dist/modules/inline-edit/components/combobox-dropdown.client.d.mts +5 -2
  295. package/dist/modules/inline-edit/components/combobox-dropdown.client.d.mts.map +1 -1
  296. package/dist/modules/inline-edit/components/combobox-dropdown.client.mjs +7 -3
  297. package/dist/modules/inline-edit/components/combobox-dropdown.client.mjs.map +1 -1
  298. package/dist/modules/inline-edit/components/combobox.client.d.mts +5 -2
  299. package/dist/modules/inline-edit/components/combobox.client.d.mts.map +1 -1
  300. package/dist/modules/inline-edit/components/combobox.client.mjs +6 -2
  301. package/dist/modules/inline-edit/components/combobox.client.mjs.map +1 -1
  302. package/dist/modules/inline-edit/components/date-input.client.d.mts +6 -3
  303. package/dist/modules/inline-edit/components/date-input.client.d.mts.map +1 -1
  304. package/dist/modules/inline-edit/components/date-input.client.mjs +5 -3
  305. package/dist/modules/inline-edit/components/date-input.client.mjs.map +1 -1
  306. package/dist/modules/inline-edit/components/date-picker.client.d.mts +7 -3
  307. package/dist/modules/inline-edit/components/date-picker.client.d.mts.map +1 -1
  308. package/dist/modules/inline-edit/components/date-picker.client.mjs +5 -3
  309. package/dist/modules/inline-edit/components/date-picker.client.mjs.map +1 -1
  310. package/dist/modules/inline-edit/components/deprecated-editor.client.d.mts +21 -0
  311. package/dist/modules/inline-edit/components/deprecated-editor.client.d.mts.map +1 -0
  312. package/dist/modules/inline-edit/components/deprecated-editor.client.mjs +37 -0
  313. package/dist/modules/inline-edit/components/deprecated-editor.client.mjs.map +1 -0
  314. package/dist/modules/inline-edit/components/editor.client.d.mts +10 -7
  315. package/dist/modules/inline-edit/components/editor.client.d.mts.map +1 -1
  316. package/dist/modules/inline-edit/components/editor.client.mjs +13 -18
  317. package/dist/modules/inline-edit/components/editor.client.mjs.map +1 -1
  318. package/dist/modules/inline-edit/components/input-recipient.client.d.mts +4 -2
  319. package/dist/modules/inline-edit/components/input-recipient.client.d.mts.map +1 -1
  320. package/dist/modules/inline-edit/components/input-recipient.client.mjs +7 -3
  321. package/dist/modules/inline-edit/components/input-recipient.client.mjs.map +1 -1
  322. package/dist/modules/inline-edit/components/input-toggle.client.d.mts +3 -2
  323. package/dist/modules/inline-edit/components/input-toggle.client.d.mts.map +1 -1
  324. package/dist/modules/inline-edit/components/input-toggle.client.mjs +3 -2
  325. package/dist/modules/inline-edit/components/input-toggle.client.mjs.map +1 -1
  326. package/dist/modules/inline-edit/components/input.client.d.mts +18 -4
  327. package/dist/modules/inline-edit/components/input.client.d.mts.map +1 -1
  328. package/dist/modules/inline-edit/components/input.client.mjs +26 -5
  329. package/dist/modules/inline-edit/components/input.client.mjs.map +1 -1
  330. package/dist/modules/inline-edit/components/select.client.d.mts +8 -6
  331. package/dist/modules/inline-edit/components/select.client.d.mts.map +1 -1
  332. package/dist/modules/inline-edit/components/select.client.mjs +3 -2
  333. package/dist/modules/inline-edit/components/select.client.mjs.map +1 -1
  334. package/dist/modules/inline-edit/components/switch.client.d.mts +3 -2
  335. package/dist/modules/inline-edit/components/switch.client.d.mts.map +1 -1
  336. package/dist/modules/inline-edit/components/switch.client.mjs +3 -2
  337. package/dist/modules/inline-edit/components/switch.client.mjs.map +1 -1
  338. package/dist/modules/inline-edit/components/toggle.client.d.mts +3 -2
  339. package/dist/modules/inline-edit/components/toggle.client.d.mts.map +1 -1
  340. package/dist/modules/inline-edit/components/toggle.client.mjs +3 -2
  341. package/dist/modules/inline-edit/components/toggle.client.mjs.map +1 -1
  342. package/dist/modules/inline-edit/hooks/context.client.d.mts +2 -2
  343. package/dist/modules/inline-edit/hooks/context.client.d.mts.map +1 -1
  344. package/dist/modules/inline-edit/hooks/use-inline.client.d.mts +1 -1
  345. package/dist/modules/inline-edit/hooks/use-inline.client.mjs.map +1 -1
  346. package/dist/modules/inline-edit/lib/variants.d.mts +3 -3
  347. package/dist/modules/inline-edit/lib/variants.mjs +1 -1
  348. package/dist/modules/inline-edit/lib/variants.mjs.map +1 -1
  349. package/dist/modules/router/handler/context.server.d.mts +2 -2
  350. package/dist/modules/router/handler/context.server.d.mts.map +1 -1
  351. package/dist/modules/router/handler/init.server.d.mts +7 -7
  352. package/dist/modules/router/lib/query-client.server.d.mts +2 -2
  353. package/dist/modules/router/lib/query-client.server.d.mts.map +1 -1
  354. package/dist/modules/{uploads/components/dropzone/context.d.mts → storage/components/dropzone-context.client.d.mts} +2 -2
  355. package/dist/modules/storage/components/dropzone-context.client.d.mts.map +1 -0
  356. package/dist/modules/{uploads/components/dropzone/context.mjs → storage/components/dropzone-context.client.mjs} +2 -2
  357. package/dist/modules/storage/components/dropzone-context.client.mjs.map +1 -0
  358. package/dist/modules/{uploads/components/dropzone/index.d.mts → storage/components/dropzone.client.d.mts} +7 -7
  359. package/dist/modules/storage/components/dropzone.client.d.mts.map +1 -0
  360. package/dist/modules/{uploads/components/dropzone/index.mjs → storage/components/dropzone.client.mjs} +6 -6
  361. package/dist/modules/storage/components/dropzone.client.mjs.map +1 -0
  362. package/dist/modules/storage/components/image-grid.client.d.mts +26 -0
  363. package/dist/modules/storage/components/image-grid.client.d.mts.map +1 -0
  364. package/dist/modules/storage/components/image-grid.client.mjs +169 -0
  365. package/dist/modules/storage/components/image-grid.client.mjs.map +1 -0
  366. package/dist/modules/storage/components/upload-zone-context.client.d.mts +34 -0
  367. package/dist/modules/storage/components/upload-zone-context.client.d.mts.map +1 -0
  368. package/dist/modules/storage/components/upload-zone-context.client.mjs +21 -0
  369. package/dist/modules/storage/components/upload-zone-context.client.mjs.map +1 -0
  370. package/dist/modules/storage/components/upload-zone.client.d.mts +51 -0
  371. package/dist/modules/storage/components/upload-zone.client.d.mts.map +1 -0
  372. package/dist/modules/storage/components/upload-zone.client.mjs +196 -0
  373. package/dist/modules/storage/components/upload-zone.client.mjs.map +1 -0
  374. package/dist/modules/{uploads/lib → storage/config}/filters.d.mts +2 -2
  375. package/dist/modules/storage/config/filters.d.mts.map +1 -0
  376. package/dist/modules/{uploads/lib → storage/config}/filters.mjs +3 -3
  377. package/dist/modules/storage/config/filters.mjs.map +1 -0
  378. package/dist/modules/storage/lib/constants.d.mts +10 -0
  379. package/dist/modules/storage/lib/constants.d.mts.map +1 -0
  380. package/dist/modules/{uploads → storage}/lib/constants.mjs +3 -2
  381. package/dist/modules/storage/lib/constants.mjs.map +1 -0
  382. package/dist/modules/storage/lib/create-client.server.d.mts +11 -0
  383. package/dist/modules/storage/lib/create-client.server.d.mts.map +1 -0
  384. package/dist/modules/storage/lib/create-client.server.mjs +11 -0
  385. package/dist/modules/storage/lib/create-client.server.mjs.map +1 -0
  386. package/dist/modules/storage/lib/helpers.d.mts +45 -0
  387. package/dist/modules/storage/lib/helpers.d.mts.map +1 -0
  388. package/dist/modules/{uploads → storage}/lib/helpers.mjs +20 -6
  389. package/dist/modules/storage/lib/helpers.mjs.map +1 -0
  390. package/dist/modules/storage/lib/proxy.server.d.mts +21 -0
  391. package/dist/modules/storage/lib/proxy.server.d.mts.map +1 -0
  392. package/dist/modules/storage/lib/proxy.server.mjs +46 -0
  393. package/dist/modules/storage/lib/proxy.server.mjs.map +1 -0
  394. package/dist/modules/storage/lib/router.server.d.mts +29074 -0
  395. package/dist/modules/storage/lib/router.server.d.mts.map +1 -0
  396. package/dist/modules/storage/lib/router.server.mjs +83 -0
  397. package/dist/modules/storage/lib/router.server.mjs.map +1 -0
  398. package/dist/modules/{uploads → storage}/lib/schema.d.mts +414 -150
  399. package/dist/modules/storage/lib/schema.d.mts.map +1 -0
  400. package/dist/modules/{uploads → storage}/lib/schema.mjs +23 -18
  401. package/dist/modules/storage/lib/schema.mjs.map +1 -0
  402. package/dist/modules/storage/lib/service.server.d.mts +188 -0
  403. package/dist/modules/storage/lib/service.server.d.mts.map +1 -0
  404. package/dist/modules/storage/lib/service.server.mjs +297 -0
  405. package/dist/modules/storage/lib/service.server.mjs.map +1 -0
  406. package/dist/modules/{uploads → storage}/lib/validators.d.mts +413 -108
  407. package/dist/modules/storage/lib/validators.d.mts.map +1 -0
  408. package/dist/modules/storage/lib/validators.mjs +106 -0
  409. package/dist/modules/storage/lib/validators.mjs.map +1 -0
  410. package/dist/storage/client.d.mts +6 -0
  411. package/dist/storage/client.mjs +14 -0
  412. package/dist/storage/client.mjs.map +1 -0
  413. package/dist/storage/server.d.mts +4 -0
  414. package/dist/storage/server.mjs +5 -0
  415. package/dist/storage.d.mts +6 -0
  416. package/dist/storage.mjs +7 -0
  417. package/package.json +32 -20
  418. package/src/components/editor/components/block-dropdown.tsx +43 -25
  419. package/src/components/editor/components/content.client.tsx +1 -1
  420. package/src/components/editor/components/editor.client.tsx +95 -0
  421. package/src/components/editor/components/menu-fixed.client.tsx +165 -0
  422. package/src/components/editor/components/spinner.tsx +2 -2
  423. package/src/components/editor/lib/constants.ts +109 -0
  424. package/src/components/editor/lib/extensions.ts +195 -0
  425. package/src/components/editor/lib/helpers.ts +3 -3
  426. package/src/components/editor/lib/variants.ts +5 -0
  427. package/src/components/entry.client.ts +2 -4
  428. package/src/components/header/top-bar.client.tsx +1 -1
  429. package/src/components/layouts/admin-content.client.tsx +1 -1
  430. package/src/components/ui/calendar.tsx +152 -44
  431. package/src/components/ui/input-recipient.tsx +3 -0
  432. package/src/entry.ts +4 -4
  433. package/src/modules/auth/db/schema.ts +13 -21
  434. package/src/modules/auth/handler/client.client.ts +2 -0
  435. package/src/modules/auth/handler/init.ts +4 -1
  436. package/src/modules/auth/hooks/use-permission.ts +3 -2
  437. package/src/modules/auth/hooks/use-session.ts +16 -10
  438. package/src/modules/auth/lib/validators.ts +1 -1
  439. package/src/modules/commands/components/alert-dialog-command.client.tsx +2 -2
  440. package/src/modules/commands/components/click-command.client.tsx +2 -2
  441. package/src/modules/commands/components/dialog-command.client.tsx +20 -8
  442. package/src/modules/commands/components/dropdown-command.client.tsx +2 -2
  443. package/src/modules/commands/components/form-dialog-command.client.tsx +2 -2
  444. package/src/modules/commands/entry.client.ts +1 -1
  445. package/src/modules/commands/hooks/{use-command-action.client.tsx → use-command-mutation.client.tsx} +9 -47
  446. package/src/modules/commands/utils/delete-command.client.tsx +14 -2
  447. package/src/modules/config/db/create-client.ts +11 -4
  448. package/src/modules/config/entry.server.ts +0 -1
  449. package/src/modules/config/lib/config.ts +3 -3
  450. package/src/modules/config/lib/context.ts +2 -2
  451. package/src/modules/data-tables/components/filters/combobox.client.tsx +3 -3
  452. package/src/modules/data-tables/entry.ts +1 -1
  453. package/src/modules/data-tables/hooks/use-context.client.tsx +31 -13
  454. package/src/modules/data-tables/hooks/use-table.client.ts +6 -3
  455. package/src/modules/data-tables/lib/filters/config.ts +1 -0
  456. package/src/modules/data-tables/lib/filters/helpers.ts +19 -0
  457. package/src/modules/data-tables/lib/filters/parsers.ts +14 -1
  458. package/src/modules/data-tables/lib/filters/resolvers.ts +8 -0
  459. package/src/modules/data-tables/lib/types.ts +10 -3
  460. package/src/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.tsx +1 -1
  461. package/src/modules/inline-edit/components/combobox-dropdown.client.tsx +9 -2
  462. package/src/modules/inline-edit/components/combobox.client.tsx +8 -1
  463. package/src/modules/inline-edit/components/date-input.client.tsx +7 -3
  464. package/src/modules/inline-edit/components/date-picker.client.tsx +10 -3
  465. package/src/modules/inline-edit/components/deprecated-editor.client.tsx +48 -0
  466. package/src/modules/inline-edit/components/editor.client.tsx +32 -29
  467. package/src/modules/inline-edit/components/input-recipient.client.tsx +6 -2
  468. package/src/modules/inline-edit/components/input-toggle.client.tsx +2 -0
  469. package/src/modules/inline-edit/components/input.client.tsx +39 -0
  470. package/src/modules/inline-edit/components/select.client.tsx +9 -2
  471. package/src/modules/inline-edit/components/switch.client.tsx +2 -0
  472. package/src/modules/inline-edit/components/toggle.client.tsx +2 -0
  473. package/src/modules/inline-edit/entry.client.ts +1 -1
  474. package/src/modules/inline-edit/hooks/use-inline.client.tsx +2 -2
  475. package/src/modules/inline-edit/lib/variants.ts +1 -1
  476. package/src/modules/{uploads/components/dropzone/index.tsx → storage/components/dropzone.client.tsx} +2 -2
  477. package/src/modules/storage/components/image-grid.client.tsx +225 -0
  478. package/src/modules/{uploads/components/button.client.tsx → storage/components/upload-button.client.tsx} +1 -1
  479. package/src/modules/storage/components/upload-zone-context.client.tsx +32 -0
  480. package/src/modules/storage/components/upload-zone.client.tsx +258 -0
  481. package/src/modules/{uploads/lib → storage/config}/filters.ts +2 -2
  482. package/src/modules/storage/entry.client.ts +12 -0
  483. package/src/modules/storage/entry.server.ts +6 -0
  484. package/src/modules/{uploads → storage}/entry.ts +1 -1
  485. package/src/modules/storage/lib/constants.ts +14 -0
  486. package/src/modules/storage/lib/create-client.server.ts +14 -0
  487. package/src/modules/{uploads → storage}/lib/helpers.ts +23 -9
  488. package/src/modules/storage/lib/proxy.server.ts +63 -0
  489. package/src/modules/storage/lib/router.server.ts +174 -0
  490. package/src/modules/{uploads → storage}/lib/schema.ts +34 -13
  491. package/src/modules/storage/lib/service.server.ts +463 -0
  492. package/src/modules/storage/lib/validators.ts +156 -0
  493. package/dist/components/editor/components/fixed-menu.client.d.mts +0 -7
  494. package/dist/components/editor/components/fixed-menu.client.d.mts.map +0 -1
  495. package/dist/components/editor/components/fixed-menu.client.mjs.map +0 -1
  496. package/dist/components/editor/context.client.d.mts +0 -33
  497. package/dist/components/editor/context.client.d.mts.map +0 -1
  498. package/dist/components/editor/context.client.mjs +0 -45
  499. package/dist/components/editor/context.client.mjs.map +0 -1
  500. package/dist/components/editor/index.client.d.mts +0 -11
  501. package/dist/components/editor/index.client.d.mts.map +0 -1
  502. package/dist/components/editor/index.client.mjs +0 -17
  503. package/dist/components/editor/index.client.mjs.map +0 -1
  504. package/dist/components/editor/preview.client.d.mts +0 -12
  505. package/dist/components/editor/preview.client.d.mts.map +0 -1
  506. package/dist/components/editor/preview.client.mjs +0 -19
  507. package/dist/components/editor/preview.client.mjs.map +0 -1
  508. package/dist/modules/commands/hooks/use-command-action.client.d.mts +0 -22
  509. package/dist/modules/commands/hooks/use-command-action.client.d.mts.map +0 -1
  510. package/dist/modules/commands/hooks/use-command-action.client.mjs +0 -74
  511. package/dist/modules/commands/hooks/use-command-action.client.mjs.map +0 -1
  512. package/dist/modules/config/providers/blob.d.mts +0 -10
  513. package/dist/modules/config/providers/blob.d.mts.map +0 -1
  514. package/dist/modules/config/providers/blob.mjs +0 -11
  515. package/dist/modules/config/providers/blob.mjs.map +0 -1
  516. package/dist/modules/inline-edit/components/richtext.client.d.mts +0 -15
  517. package/dist/modules/inline-edit/components/richtext.client.d.mts.map +0 -1
  518. package/dist/modules/inline-edit/components/richtext.client.mjs +0 -31
  519. package/dist/modules/inline-edit/components/richtext.client.mjs.map +0 -1
  520. package/dist/modules/uploads/components/button.client.d.mts +0 -12
  521. package/dist/modules/uploads/components/button.client.d.mts.map +0 -1
  522. package/dist/modules/uploads/components/button.client.mjs +0 -34
  523. package/dist/modules/uploads/components/button.client.mjs.map +0 -1
  524. package/dist/modules/uploads/components/dropzone/context.d.mts.map +0 -1
  525. package/dist/modules/uploads/components/dropzone/context.mjs.map +0 -1
  526. package/dist/modules/uploads/components/dropzone/index.d.mts.map +0 -1
  527. package/dist/modules/uploads/components/dropzone/index.mjs.map +0 -1
  528. package/dist/modules/uploads/components/images/grid.client.d.mts +0 -11
  529. package/dist/modules/uploads/components/images/grid.client.d.mts.map +0 -1
  530. package/dist/modules/uploads/components/images/grid.client.mjs +0 -119
  531. package/dist/modules/uploads/components/images/grid.client.mjs.map +0 -1
  532. package/dist/modules/uploads/components/images/input.client.d.mts +0 -16
  533. package/dist/modules/uploads/components/images/input.client.d.mts.map +0 -1
  534. package/dist/modules/uploads/components/images/input.client.mjs +0 -28
  535. package/dist/modules/uploads/components/images/input.client.mjs.map +0 -1
  536. package/dist/modules/uploads/components/preview-dialog.client.d.mts +0 -16
  537. package/dist/modules/uploads/components/preview-dialog.client.d.mts.map +0 -1
  538. package/dist/modules/uploads/components/preview-dialog.client.mjs +0 -22
  539. package/dist/modules/uploads/components/preview-dialog.client.mjs.map +0 -1
  540. package/dist/modules/uploads/components/zone.client.d.mts +0 -21
  541. package/dist/modules/uploads/components/zone.client.d.mts.map +0 -1
  542. package/dist/modules/uploads/components/zone.client.mjs +0 -38
  543. package/dist/modules/uploads/components/zone.client.mjs.map +0 -1
  544. package/dist/modules/uploads/hooks/use-upload-image.client.d.mts +0 -34
  545. package/dist/modules/uploads/hooks/use-upload-image.client.d.mts.map +0 -1
  546. package/dist/modules/uploads/hooks/use-upload-image.client.mjs +0 -101
  547. package/dist/modules/uploads/hooks/use-upload-image.client.mjs.map +0 -1
  548. package/dist/modules/uploads/hooks/use-upload-zone.client.d.mts +0 -39
  549. package/dist/modules/uploads/hooks/use-upload-zone.client.d.mts.map +0 -1
  550. package/dist/modules/uploads/hooks/use-upload-zone.client.mjs +0 -20
  551. package/dist/modules/uploads/hooks/use-upload-zone.client.mjs.map +0 -1
  552. package/dist/modules/uploads/lib/constants.d.mts +0 -9
  553. package/dist/modules/uploads/lib/constants.d.mts.map +0 -1
  554. package/dist/modules/uploads/lib/constants.mjs.map +0 -1
  555. package/dist/modules/uploads/lib/filters.d.mts.map +0 -1
  556. package/dist/modules/uploads/lib/filters.mjs.map +0 -1
  557. package/dist/modules/uploads/lib/helpers.d.mts +0 -36
  558. package/dist/modules/uploads/lib/helpers.d.mts.map +0 -1
  559. package/dist/modules/uploads/lib/helpers.mjs.map +0 -1
  560. package/dist/modules/uploads/lib/procedures.server.d.mts +0 -13628
  561. package/dist/modules/uploads/lib/procedures.server.d.mts.map +0 -1
  562. package/dist/modules/uploads/lib/procedures.server.mjs +0 -176
  563. package/dist/modules/uploads/lib/procedures.server.mjs.map +0 -1
  564. package/dist/modules/uploads/lib/proxy.server.d.mts +0 -54
  565. package/dist/modules/uploads/lib/proxy.server.d.mts.map +0 -1
  566. package/dist/modules/uploads/lib/proxy.server.mjs +0 -97
  567. package/dist/modules/uploads/lib/proxy.server.mjs.map +0 -1
  568. package/dist/modules/uploads/lib/route.server.d.mts +0 -43
  569. package/dist/modules/uploads/lib/route.server.d.mts.map +0 -1
  570. package/dist/modules/uploads/lib/route.server.mjs +0 -70
  571. package/dist/modules/uploads/lib/route.server.mjs.map +0 -1
  572. package/dist/modules/uploads/lib/schema.d.mts.map +0 -1
  573. package/dist/modules/uploads/lib/schema.mjs.map +0 -1
  574. package/dist/modules/uploads/lib/validators.d.mts.map +0 -1
  575. package/dist/modules/uploads/lib/validators.mjs +0 -26
  576. package/dist/modules/uploads/lib/validators.mjs.map +0 -1
  577. package/dist/uploads/client.d.mts +0 -10
  578. package/dist/uploads/client.mjs +0 -11
  579. package/dist/uploads/server.d.mts +0 -4
  580. package/dist/uploads/server.mjs +0 -5
  581. package/dist/uploads.d.mts +0 -6
  582. package/dist/uploads.mjs +0 -7
  583. package/src/components/editor/components/fixed-menu.client.tsx +0 -143
  584. package/src/components/editor/context.client.tsx +0 -116
  585. package/src/components/editor/index.client.tsx +0 -13
  586. package/src/components/editor/preview.client.tsx +0 -13
  587. package/src/modules/config/providers/blob.ts +0 -11
  588. package/src/modules/inline-edit/components/richtext.client.tsx +0 -38
  589. package/src/modules/uploads/components/images/grid.client.tsx +0 -162
  590. package/src/modules/uploads/components/images/input.client.tsx +0 -34
  591. package/src/modules/uploads/components/preview-dialog.client.tsx +0 -21
  592. package/src/modules/uploads/components/zone.client.tsx +0 -56
  593. package/src/modules/uploads/entry.client.ts +0 -16
  594. package/src/modules/uploads/entry.server.ts +0 -6
  595. package/src/modules/uploads/hooks/use-upload-image.client.tsx +0 -131
  596. package/src/modules/uploads/hooks/use-upload-zone.client.ts +0 -44
  597. package/src/modules/uploads/lib/constants.ts +0 -10
  598. package/src/modules/uploads/lib/procedures.server.ts +0 -332
  599. package/src/modules/uploads/lib/proxy.server.ts +0 -139
  600. package/src/modules/uploads/lib/route.server.ts +0 -93
  601. package/src/modules/uploads/lib/validators.ts +0 -50
  602. /package/src/modules/{uploads/components/dropzone/context.tsx → storage/components/dropzone-context.client.tsx} +0 -0
@@ -1,131 +0,0 @@
1
- import { useAction } from "@/lib/hooks/use-action";
2
- import { useIndicator } from "@/lib/hooks/use-indicator";
3
- import { arrayMove } from "@/lib/utils/array-move";
4
- import { DragEndEvent, UniqueIdentifier } from "@dnd-kit/core";
5
- import { upload } from "@vercel/blob/client";
6
- import { useState } from "react";
7
- import { toast } from "sonner";
8
- import { Asset } from "../entry";
9
- import { UploadZoneContextValue } from "./use-upload-zone.client";
10
-
11
- type ImageUpload = Pick<Asset, "pathname" | "name" | "url"> & {
12
- loading?: boolean;
13
- };
14
-
15
- type UploadOptions<TPayload> = {
16
- initial: ImageUpload[];
17
- payload: TPayload;
18
- handleUploadUrl: string;
19
- createPathname?: (file: File) => string;
20
- deleteAction: (params: { url: string }) => Promise<void>;
21
- moveAction?: (params: { fromIndex: number; toIndex: number }) => Promise<void>;
22
- max?: number;
23
- };
24
-
25
- export function useUploadImage<TPayload>({
26
- max,
27
- payload,
28
- initial,
29
- handleUploadUrl,
30
- createPathname,
31
- deleteAction,
32
- moveAction,
33
- }: UploadOptions<TPayload>): UploadZoneContextValue<ImageUpload> {
34
- const { status, setStatus, startTransition } = useIndicator();
35
-
36
- const [files, setFiles] = useState<ImageUpload[]>(initial ?? []);
37
-
38
- const disabled = files.length >= (max ?? Infinity);
39
-
40
- /**
41
- * Uploads a file
42
- */
43
- async function onUpload(file: File) {
44
- // Check if the upload has reached the max limit
45
- if (disabled) return;
46
-
47
- // Create the pathname
48
- const pathname = createPathname ? createPathname(file) : file.name;
49
-
50
- // Add the file to the state so that it starts loading
51
- const fileUrl = URL.createObjectURL(file);
52
- setFiles((prev) => [...prev, { name: file.name, url: fileUrl, pathname, isLoading: true }]);
53
-
54
- startTransition(async () => {
55
- try {
56
- // Create the payload
57
- const basePayload = { size: file.size };
58
-
59
- // Upload the file
60
- const blob = await upload(pathname, file, {
61
- access: "public",
62
- handleUploadUrl,
63
- clientPayload: JSON.stringify(payload ? { ...payload, ...basePayload } : basePayload),
64
- });
65
-
66
- // Find the file in the state and update it so that it stops loading and has the correct URL
67
- setFiles((prev) =>
68
- prev.map((file) => (file.pathname === pathname ? { ...blob, name: file.name } : file)),
69
- );
70
-
71
- toast.success(`Afbeelding ${file.name} is geüpload`);
72
- setStatus("success");
73
- } catch (err: unknown) {
74
- console.error(err);
75
- // Remove the file from the state so that it stops loading
76
- setFiles((prev) => prev.filter((file) => file.pathname !== pathname));
77
-
78
- toast.error("Error", { description: err instanceof Error ? err.message : undefined });
79
- setStatus("error");
80
- }
81
- });
82
- }
83
-
84
- /**
85
- * Delete an image
86
- */
87
- const deleteMutation = useAction({
88
- mutationFn: deleteAction,
89
- onSuccess: () => toast.success("Afbeelding is succesvol verwijderd"),
90
- });
91
-
92
- function onDelete(url: string) {
93
- setFiles((prev) => prev.filter((file) => file.url !== url));
94
- deleteMutation.mutate({ url });
95
- }
96
-
97
- /**
98
- * Move an image
99
- */
100
- const moveMutation = useAction({
101
- mutationFn: async (params: { activeId: UniqueIdentifier; overId: UniqueIdentifier }) => {
102
- if (!moveAction) return Promise.resolve();
103
-
104
- const fromIndex = files.findIndex((file) => file.url === params.activeId);
105
- const toIndex = files.findIndex((file) => file.url === params.overId);
106
-
107
- setFiles((prev) => arrayMove(prev, { fromIndex, toIndex }));
108
- await moveAction({ fromIndex, toIndex });
109
- },
110
- });
111
-
112
- function onMove({ active, over }: DragEndEvent) {
113
- const activeId = active.id;
114
- const overId = over?.id;
115
-
116
- if (!activeId || !overId || activeId === overId) return;
117
-
118
- moveMutation.mutate({ activeId, overId });
119
- }
120
-
121
- return {
122
- files,
123
- status,
124
- disabled,
125
- handleUploadUrl,
126
- createPathname,
127
- onUpload,
128
- onDelete,
129
- onMove,
130
- };
131
- }
@@ -1,44 +0,0 @@
1
- import "client-only";
2
-
3
- import { IndicatorStatus } from "@/lib/hooks/use-indicator";
4
- import { DragEndEvent } from "@dnd-kit/core";
5
- import React from "react";
6
-
7
- /**
8
- * UploadFile
9
- */
10
- export type UploadFile = {
11
- name: string;
12
- url: string;
13
- isLoading?: boolean;
14
- };
15
-
16
- /**
17
- * UploadZoneContextValue
18
- */
19
- export type UploadZoneContextValue<TFile extends UploadFile> = {
20
- files: TFile[];
21
- disabled?: boolean;
22
- status: IndicatorStatus;
23
- handleUploadUrl: string;
24
- createPathname?: (file: File) => string;
25
- onUpload: (file: File) => void;
26
- onDelete: (url: string) => void;
27
- onMove?: (event: DragEndEvent) => void;
28
- };
29
-
30
- /**
31
- * UploadZoneContext
32
- */
33
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
- export const UploadZoneContext = React.createContext({} as UploadZoneContextValue<any>);
35
-
36
- /**
37
- * useUploadZone
38
- */
39
- export function useUploadZone<TFile extends UploadFile>() {
40
- const context = React.useContext(UploadZoneContext);
41
- if (!context) throw new Error("Missing UploadZoneContext");
42
-
43
- return context as UploadZoneContextValue<TFile>;
44
- }
@@ -1,10 +0,0 @@
1
- // Device sizes
2
- export const deviceSizes = [640, 750, 828, 1080, 1200, 1920, 2048, 3840] as const;
3
-
4
- // Image variants
5
- export const imageVariants = ["main", ...deviceSizes.map((size) => `preview-${size}` as const)] as const;
6
- export type ImageVariant = typeof imageVariants[number];
7
-
8
- // Image dispositions
9
- export const imageDispositions = ["inline", "attachment"] as const;
10
- export type ImageDisposition = typeof imageDispositions[number];
@@ -1,332 +0,0 @@
1
- import { BUCKET_NAME } from "@/lib/config/constants";
2
- import { initRPC } from "@/modules/router/handler/init.server";
3
- import { ServerError } from "@/modules/router/lib/error.server";
4
- import { bulkActionSchema } from "@/modules/router/lib/validators";
5
- import { DeleteObjectsCommand, GetObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3";
6
- import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
7
- import { and, eq, inArray, isNull, sql } from "drizzle-orm";
8
- import { revalidatePath } from "next/cache";
9
- import { after } from "next/server";
10
- import { z } from "zod";
11
- import { deviceSizes } from "./constants";
12
- import { inferNodeSubtype, isFile, isFolder } from "./helpers";
13
- import { getFileUrl, getFileUrlInput } from "./proxy.server";
14
- import { DriveSchema, nodes } from "./schema";
15
- import {
16
- createNodeSchema,
17
- Node,
18
- nodesTableFiltersSchema,
19
- selectNodeSchema,
20
- selectNodeWithChildrenSchema,
21
- } from "./validators";
22
-
23
- export function createDriveBaseProcedures() {
24
- const { protectedProcedure } = initRPC<DriveSchema>();
25
-
26
- return {
27
- /**
28
- * Get node and its children
29
- */
30
- getNodeById: protectedProcedure
31
- .input(z.object({ id: z.string(), namespace: z.string() }))
32
- .output(selectNodeWithChildrenSchema.optional())
33
- .handler(async ({ context, input }) =>
34
- context.db.query.nodes.findFirst({
35
- where: and(eq(nodes.id, input.id), eq(nodes.namespace, input.namespace)),
36
- with: { children: true },
37
- }),
38
- ),
39
- /**
40
- * Get folders by parent id
41
- */
42
- getNodesByParentId: protectedProcedure
43
- .input(
44
- z.object({
45
- parentId: z.string().nullable(),
46
- namespace: z.string(),
47
- filters: nodesTableFiltersSchema,
48
- }),
49
- )
50
- .output(z.array(selectNodeSchema))
51
- .handler(async ({ context, input }) =>
52
- context.db.query.nodes.findMany({
53
- where: and(
54
- input.parentId ? eq(nodes.parentId, input.parentId) : isNull(nodes.parentId),
55
- input.filters.nodeIds ? inArray(nodes.id, input.filters.nodeIds) : undefined,
56
- input.filters.types ? inArray(nodes.type, input.filters.types) : undefined,
57
- eq(nodes.namespace, input.namespace),
58
- eq(nodes.isDeleted, input.filters.isDeleted),
59
- ),
60
- }),
61
- ),
62
- /**
63
- * Get parents of a folder
64
- */
65
- getFolderParents: protectedProcedure
66
- .input(z.object({ id: z.string().nullable(), namespace: z.string() }))
67
- .handler(async ({ context, input }) => {
68
- if (!input.id) return [];
69
-
70
- const startNodeQuery = context.db
71
- .select({
72
- id: nodes.id,
73
- name: nodes.name,
74
- parentId: nodes.parentId,
75
- depth: sql<number>`0`.as("depth"),
76
- })
77
- .from(nodes)
78
- .where(and(eq(nodes.id, input.id), eq(nodes.namespace, input.namespace)));
79
-
80
- const alias = "parent_nodes";
81
- const parentNodesQueryAlias = startNodeQuery.as(alias);
82
- const recursiveQueryName = sql.raw(`"${alias}"`);
83
-
84
- const recursiveQuery = startNodeQuery.unionAll(
85
- context.db
86
- .select({
87
- id: nodes.id,
88
- name: nodes.name,
89
- parentId: nodes.parentId,
90
- depth: sql<number>`${parentNodesQueryAlias.depth} + 1`,
91
- })
92
- .from(nodes)
93
- .innerJoin(recursiveQueryName, eq(nodes.id, parentNodesQueryAlias.parentId)),
94
- );
95
-
96
- const result = (await context.db.execute(
97
- sql`WITH RECURSIVE ${recursiveQueryName} AS ${recursiveQuery}
98
- SELECT * FROM ${recursiveQueryName}`,
99
- )) as Awaited<ReturnType<(typeof recursiveQuery)["execute"]>>;
100
-
101
- return result.toSorted((a, b) => Number(b.depth) - Number(a.depth));
102
- }),
103
- /**
104
- * Get presigned url for uploading a file
105
- */
106
- presign: protectedProcedure
107
- .input(
108
- z.object({
109
- id: z.string(),
110
- name: z.string().min(1),
111
- namespace: z.string(),
112
- parentId: z.uuid().nullable(),
113
- size: z.number().optional().default(0),
114
- contentType: z.string().optional().default(""),
115
- }),
116
- )
117
- .handler(async ({ context, input }) => {
118
- // Generate the put command
119
- const putCommand = new PutObjectCommand({
120
- Bucket: BUCKET_NAME,
121
- Key: `${input.id}/main`,
122
- ContentType: input.contentType,
123
- });
124
-
125
- // Generate the presigned url
126
- const presignedUrl = await getSignedUrl(context.blob, putCommand, { expiresIn: 3600 });
127
-
128
- const [node] = await context.db
129
- .insert(nodes)
130
- .values({
131
- ...input,
132
- subtype: inferNodeSubtype(input),
133
- isPending: true,
134
- type: "file",
135
- })
136
- .returning();
137
-
138
- // Return the result
139
- return { node, presignedUrl };
140
- }),
141
- /**
142
- * Confirm the upload
143
- */
144
- confirm: protectedProcedure
145
- .input(z.object({ id: z.string() }))
146
- .output(selectNodeSchema)
147
- .handler(async ({ context, input }) => {
148
- const [result] = await context.db
149
- .update(nodes)
150
- .set({ isPending: false })
151
- .where(eq(nodes.id, input.id))
152
- .returning();
153
-
154
- if (!result) {
155
- throw new ServerError("NOT_FOUND", { message: "File not found" });
156
- }
157
-
158
- /**
159
- * Generate the preview version of the file
160
- */
161
- after(async () => {
162
- if (!result.contentType || !result.contentType?.startsWith("image/")) return;
163
-
164
- const getCommand = new GetObjectCommand({
165
- Bucket: BUCKET_NAME,
166
- Key: `${input.id}/main`,
167
- });
168
-
169
- const response = await context.blob.send(getCommand);
170
- const contentType = response.ContentType;
171
- if (!response.Body) {
172
- throw new ServerError("INTERNAL_SERVER_ERROR", {
173
- message: "Oep! Er is iets fout gegaan",
174
- });
175
- }
176
-
177
- const byteArray = await response.Body.transformToByteArray();
178
- const buffer = Buffer.from(byteArray);
179
-
180
- if (contentType?.startsWith("image/")) {
181
- const sharp = await import("sharp");
182
-
183
- await Promise.allSettled(
184
- deviceSizes.flatMap(async (width) => {
185
- const preview = await sharp.default(buffer).resize({ width }).webp().toBuffer();
186
-
187
- const putCommand = new PutObjectCommand({
188
- Bucket: BUCKET_NAME,
189
- Key: `${input.id}/preview-${width}`,
190
- ContentType: "image/webp",
191
- Body: preview,
192
- });
193
-
194
- await context.blob.send(putCommand);
195
- }),
196
- );
197
- }
198
- });
199
-
200
- return result;
201
- }),
202
- /**
203
- * Get presigned url for opening a file
204
- */
205
- getFileUrl: protectedProcedure
206
- .input(getFileUrlInput)
207
- .output(z.string())
208
- .handler(async ({ context, input }) => await getFileUrl(context, input)),
209
- /**
210
- * Create a folder
211
- */
212
- createFolder: protectedProcedure
213
- .input(createNodeSchema)
214
- .output(selectNodeSchema)
215
- .handler(async ({ context, input }) => {
216
- const parent =
217
- input.parentId &&
218
- (await context.db.query.nodes.findFirst({
219
- where: eq(nodes.id, input.parentId),
220
- }));
221
-
222
- /**
223
- * Validate
224
- */
225
- if (input.parentId && !parent) {
226
- throw new ServerError("BAD_REQUEST", { message: "Parent not found" });
227
- }
228
-
229
- if (parent && !isFolder(parent)) {
230
- throw new ServerError("BAD_REQUEST", { message: "Parent is not a folder" });
231
- }
232
-
233
- if (parent && parent.namespace !== input.namespace) {
234
- throw new ServerError("BAD_REQUEST", {
235
- message: "Parent is not in the same namespace",
236
- });
237
- }
238
-
239
- /**
240
- * Create the folder
241
- */
242
- const [result] = await context.db
243
- .insert(nodes)
244
- .values({ ...input, type: "folder" } as Node)
245
- .returning();
246
-
247
- if (!result) {
248
- throw new ServerError("INTERNAL_SERVER_ERROR", {
249
- message: "Folder kon niet worden aangemaakt",
250
- });
251
- }
252
-
253
- return result;
254
- }),
255
- /**
256
- * Delete nodes
257
- */
258
- deleteNodes: protectedProcedure
259
- .input(bulkActionSchema)
260
- .output(z.void())
261
- .handler(async ({ context, input }) => {
262
- const items = await context.db
263
- .select({ id: nodes.id, type: nodes.type })
264
- .from(nodes)
265
- .where(inArray(nodes.id, input.ids));
266
-
267
- // Split the nodes into folders and files
268
- const folders = items.filter(isFolder).map((folder) => folder.id);
269
- const files = items.filter(isFile).map((file) => file.id);
270
-
271
- // Delete command for S3
272
- const deleteCommand = new DeleteObjectsCommand({
273
- Bucket: BUCKET_NAME,
274
- Delete: {
275
- Objects: files.map((id) => ({ Key: id })),
276
- },
277
- });
278
-
279
- /**
280
- * Delete files
281
- */
282
- await Promise.allSettled([
283
- context.db.delete(nodes).where(inArray(nodes.id, folders)),
284
- context.db.delete(nodes).where(inArray(nodes.id, files)),
285
- context.blob.send(deleteCommand),
286
- ]);
287
- }),
288
- /**
289
- * Change node parent
290
- */
291
- changeParent: protectedProcedure
292
- .input(z.object({ id: z.string(), parentId: z.string().nullish() }))
293
- .handler(async ({ context, input }) => {
294
- const [parent, node] = await Promise.all([
295
- input.parentId &&
296
- (await context.db.query.nodes.findFirst({
297
- where: eq(nodes.id, input.parentId),
298
- })),
299
- context.db.query.nodes.findFirst({
300
- where: eq(nodes.id, input.id),
301
- }),
302
- ]);
303
-
304
- /**
305
- * Validate
306
- */
307
- if (input.parentId && !parent)
308
- throw new ServerError("BAD_REQUEST", { message: "Parent not found" });
309
- if (!node) throw new ServerError("BAD_REQUEST", { message: "Node not found" });
310
-
311
- if (parent && !isFolder(parent)) {
312
- throw new ServerError("BAD_REQUEST", { message: "Parent is not a folder" });
313
- }
314
-
315
- if (parent && parent.namespace !== node.namespace) {
316
- throw new ServerError("BAD_REQUEST", {
317
- message: "Parent is not in the same namespace",
318
- });
319
- }
320
-
321
- /**
322
- * Update the parent
323
- */
324
- await context.db
325
- .update(nodes)
326
- .set({ parentId: input.parentId })
327
- .where(eq(nodes.id, input.id));
328
-
329
- revalidatePath("/drive", "page");
330
- }),
331
- };
332
- }
@@ -1,139 +0,0 @@
1
- import "server-cli-only";
2
-
3
- import { BUCKET_NAME } from "@/lib/config/constants";
4
- import { getSession } from "@/modules/auth/entry.server";
5
- import { TulipContext } from "@/modules/config/entry";
6
- import { GetObjectCommand } from "@aws-sdk/client-s3";
7
- import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
8
- import { addSeconds } from "date-fns";
9
- import { and, eq } from "drizzle-orm";
10
- import { after, connection, NextRequest } from "next/server";
11
- import { z } from "zod";
12
- import { imageDispositions, imageVariants } from "./constants";
13
- import { DriveSchema, nodePresignedUrls, nodes } from "./schema";
14
- import { Node } from "./validators";
15
-
16
- /**
17
- * Get file url schema
18
- */
19
- export const getFileUrlInput = z.object({
20
- variant: z.enum(imageVariants).optional().default("main"),
21
- disposition: z.enum(imageDispositions).optional().default("inline"),
22
- });
23
-
24
- export type GetFileUrlInput = z.input<typeof getFileUrlInput>;
25
- export type GetFileUrlSchema = z.infer<typeof getFileUrlInput>;
26
-
27
- /**
28
- * Get file url
29
- */
30
- export async function getFileUrl<TSchema extends DriveSchema>(
31
- ctx: TulipContext<TSchema>,
32
- { input, node }: { input: GetFileUrlSchema; node: Node },
33
- // input: GetFileUrlSchema,
34
- ) {
35
- // const [node] = await ctx.db.select().from(nodes).where(eq(nodes.id, input.id));
36
- // if (!node) {
37
- // throw new ServerError("NOT_FOUND", { message: "Bestand kon niet worden gevonden" });
38
- // }
39
-
40
- const [presignedUrl] = await ctx.db
41
- .select({ url: nodePresignedUrls.url, expiresAt: nodePresignedUrls.expiresAt })
42
- .from(nodePresignedUrls)
43
- .where(
44
- and(
45
- eq(nodePresignedUrls.nodeId, node.id),
46
- eq(nodePresignedUrls.variant, input.variant),
47
- eq(nodePresignedUrls.disposition, input.disposition),
48
- ),
49
- );
50
-
51
- if (presignedUrl && presignedUrl.expiresAt > new Date()) return presignedUrl.url;
52
-
53
- const expiresIn = 3600 * 24;
54
-
55
- // Generate the get command
56
- const getCommand = new GetObjectCommand({
57
- Bucket: BUCKET_NAME,
58
- Key: `${node.id}/${input.variant}`,
59
- ResponseContentDisposition: `${input.disposition}; filename="${node.name}"`,
60
- ResponseContentType: node.contentType ?? undefined,
61
- });
62
-
63
- // Generate the presigned url that expires in 24 hours
64
- const url = await getSignedUrl(ctx.blob, getCommand, { expiresIn });
65
-
66
- // Add the presigned url to the database
67
- after(async () => {
68
- await ctx.db
69
- .insert(nodePresignedUrls)
70
- .values({
71
- nodeId: node.id,
72
- url,
73
- variant: input.variant,
74
- disposition: input.disposition,
75
- expiresAt: addSeconds(new Date(), expiresIn),
76
- })
77
- .onConflictDoUpdate({
78
- target: [
79
- nodePresignedUrls.nodeId,
80
- nodePresignedUrls.variant,
81
- nodePresignedUrls.disposition,
82
- ],
83
- set: { url, expiresAt: addSeconds(new Date(), expiresIn) },
84
- });
85
- });
86
-
87
- return url;
88
- }
89
-
90
- /**
91
- * Create drive proxy route
92
- */
93
- export function createDriveProxyRoute<TSchema extends DriveSchema>({
94
- context,
95
- }: {
96
- context: TulipContext<TSchema>;
97
- }) {
98
- /**
99
- * GET: Drive node proxy
100
- */
101
- async function GET(request: NextRequest) {
102
- // Make endpoint dynamic
103
- await connection();
104
-
105
- try {
106
- // Get the params
107
- const searchParams = request.nextUrl.searchParams;
108
- const id = searchParams.get("id");
109
- if (!id) return Response.json("Missing id", { status: 400 });
110
-
111
- // Get the node
112
- const [node] = await context.db.select().from(nodes).where(eq(nodes.id, id));
113
- if (!node) return Response.json("Bestand kon niet worden gevonden", { status: 404 });
114
-
115
- // If the node is private check if the user is authenticated
116
- if (node.mode === "private") {
117
- const session = await getSession(context);
118
- if (!session) return Response.json("Unauthorized", { status: 401 });
119
- }
120
-
121
- const variant = searchParams.get("variant") ?? undefined;
122
- const disposition = searchParams.get("disposition") ?? undefined;
123
-
124
- // Parse the input
125
- const input = getFileUrlInput.parse({ variant, disposition });
126
-
127
- // Get the file url
128
- const url = await getFileUrl(context, { input, node });
129
-
130
- // Return the file
131
- return Response.redirect(url, 307);
132
- } catch (error) {
133
- console.error("error", error);
134
- return Response.json("Error", { status: 500 });
135
- }
136
- }
137
-
138
- return { GET };
139
- }