@tulip-systems/core 0.5.3 → 0.5.5

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 (291) hide show
  1. package/dist/auth/client.d.mts +3 -3
  2. package/dist/auth/client.mjs +2 -2
  3. package/dist/components/client.d.mts +2 -2
  4. package/dist/components/common/icons.d.mts +52 -52
  5. package/dist/components/common/icons.d.mts.map +1 -1
  6. package/dist/components/common/status.d.mts +3 -3
  7. package/dist/components/common/status.d.mts.map +1 -1
  8. package/dist/components/editor/components/content.client.d.mts +2 -2
  9. package/dist/components/editor/components/content.client.d.mts.map +1 -1
  10. package/dist/components/editor/components/editor.client.d.mts +6 -6
  11. package/dist/components/editor/components/editor.client.d.mts.map +1 -1
  12. package/dist/components/editor/components/menu.client.d.mts +3 -3
  13. package/dist/components/editor/components/menu.client.d.mts.map +1 -1
  14. package/dist/components/editor/extensions/file-handler/utils.mjs +1 -1
  15. package/dist/components/editor/extensions/file-handler/utils.mjs.map +1 -1
  16. package/dist/components/editor/extensions/image/extension.mjs +0 -1
  17. package/dist/components/editor/extensions/image/extension.mjs.map +1 -1
  18. package/dist/components/editor/extensions/skeleton/extension.mjs +1 -1
  19. package/dist/components/editor/lib/constants.d.mts +29 -29
  20. package/dist/components/editor/lib/constants.mjs +3 -3
  21. package/dist/components/editor/lib/extensions.d.mts +3 -3
  22. package/dist/components/editor/lib/helpers.d.mts.map +1 -1
  23. package/dist/components/editor/lib/helpers.mjs +38 -3
  24. package/dist/components/editor/lib/helpers.mjs.map +1 -1
  25. package/dist/components/header/back-button.client.d.mts +2 -2
  26. package/dist/components/header/back-button.client.d.mts.map +1 -1
  27. package/dist/components/header/bottom-bar.client.d.mts +3 -3
  28. package/dist/components/header/bottom-bar.client.d.mts.map +1 -1
  29. package/dist/components/header/breadcrumbs.client.d.mts +7 -7
  30. package/dist/components/header/breadcrumbs.client.d.mts.map +1 -1
  31. package/dist/components/header/header.client.d.mts +2 -2
  32. package/dist/components/header/header.client.d.mts.map +1 -1
  33. package/dist/components/header/mobile-nav-switcher.client.d.mts +2 -2
  34. package/dist/components/header/mobile-nav-switcher.client.d.mts.map +1 -1
  35. package/dist/components/header/top-bar.client.d.mts +4 -4
  36. package/dist/components/header/top-bar.client.d.mts.map +1 -1
  37. package/dist/components/layouts/admin-content.client.d.mts +2 -2
  38. package/dist/components/layouts/admin-content.client.d.mts.map +1 -1
  39. package/dist/components/layouts/admin-layout.d.mts +2 -2
  40. package/dist/components/layouts/admin-layout.d.mts.map +1 -1
  41. package/dist/components/layouts/admin-loading.d.mts +2 -2
  42. package/dist/components/layouts/admin-loading.d.mts.map +1 -1
  43. package/dist/components/layouts/empty-page.d.mts +4 -4
  44. package/dist/components/layouts/empty-page.d.mts.map +1 -1
  45. package/dist/components/layouts/error-page.d.mts +23 -0
  46. package/dist/components/layouts/error-page.d.mts.map +1 -0
  47. package/dist/components/layouts/error-page.mjs +58 -0
  48. package/dist/components/layouts/error-page.mjs.map +1 -0
  49. package/dist/components/layouts/list-layout.d.mts +2 -2
  50. package/dist/components/layouts/list-layout.d.mts.map +1 -1
  51. package/dist/components/layouts/not-allowed-page.d.mts +22 -0
  52. package/dist/components/layouts/not-allowed-page.d.mts.map +1 -0
  53. package/dist/components/layouts/not-allowed-page.mjs +25 -0
  54. package/dist/components/layouts/not-allowed-page.mjs.map +1 -0
  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/providers.client.d.mts.map +1 -1
  59. package/dist/components/layouts/root-layout.server.d.mts +2 -2
  60. package/dist/components/layouts/root-layout.server.d.mts.map +1 -1
  61. package/dist/components/layouts/root-loading.d.mts +2 -2
  62. package/dist/components/layouts/root-loading.d.mts.map +1 -1
  63. package/dist/components/layouts/tab-layout.d.mts +2 -2
  64. package/dist/components/layouts/tab-layout.d.mts.map +1 -1
  65. package/dist/components/lists/data-list.d.mts +5 -5
  66. package/dist/components/lists/data-list.d.mts.map +1 -1
  67. package/dist/components/lists/data-stack.d.mts +8 -8
  68. package/dist/components/navigation/admin-sidebar-paths.client.d.mts +21 -11
  69. package/dist/components/navigation/admin-sidebar-paths.client.d.mts.map +1 -1
  70. package/dist/components/navigation/admin-sidebar-paths.client.mjs +7 -5
  71. package/dist/components/navigation/admin-sidebar-paths.client.mjs.map +1 -1
  72. package/dist/components/ui/accordion.d.mts +5 -5
  73. package/dist/components/ui/alert-dialog.d.mts +12 -12
  74. package/dist/components/ui/alert.d.mts +6 -6
  75. package/dist/components/ui/aspect-ratio.d.mts +2 -2
  76. package/dist/components/ui/avatar.client.d.mts +4 -4
  77. package/dist/components/ui/avatar.client.d.mts.map +1 -1
  78. package/dist/components/ui/badge.d.mts +4 -4
  79. package/dist/components/ui/breadcrumb.d.mts +8 -8
  80. package/dist/components/ui/button.d.mts +4 -4
  81. package/dist/components/ui/calendar.d.mts +3 -3
  82. package/dist/components/ui/card.d.mts +7 -7
  83. package/dist/components/ui/carousel.d.mts +6 -6
  84. package/dist/components/ui/chart.client.d.mts +5 -5
  85. package/dist/components/ui/chart.client.d.mts.map +1 -1
  86. package/dist/components/ui/checkbox.d.mts +2 -2
  87. package/dist/components/ui/collapsible.client.d.mts +4 -4
  88. package/dist/components/ui/collapsible.client.d.mts.map +1 -1
  89. package/dist/components/ui/color-picker.client.d.mts +2 -2
  90. package/dist/components/ui/color-picker.client.d.mts.map +1 -1
  91. package/dist/components/ui/combobox-dropdown.client.d.mts +2 -2
  92. package/dist/components/ui/combobox-dropdown.client.d.mts.map +1 -1
  93. package/dist/components/ui/combobox.client.d.mts +2 -2
  94. package/dist/components/ui/combobox.client.d.mts.map +1 -1
  95. package/dist/components/ui/command.d.mts +10 -10
  96. package/dist/components/ui/context-menu.d.mts +16 -16
  97. package/dist/components/ui/date-picker.client.d.mts +2 -2
  98. package/dist/components/ui/date-picker.client.d.mts.map +1 -1
  99. package/dist/components/ui/dialog.client.d.mts +11 -11
  100. package/dist/components/ui/dialog.client.d.mts.map +1 -1
  101. package/dist/components/ui/drawer.client.d.mts +11 -11
  102. package/dist/components/ui/dropdown-menu.d.mts +16 -16
  103. package/dist/components/ui/form.client.d.mts +7 -7
  104. package/dist/components/ui/hover-card.client.d.mts +4 -4
  105. package/dist/components/ui/input-recipient.d.mts +2 -2
  106. package/dist/components/ui/input.d.mts +2 -2
  107. package/dist/components/ui/label.d.mts +2 -2
  108. package/dist/components/ui/navigation-menu.d.mts +11 -11
  109. package/dist/components/ui/pagination.d.mts +8 -8
  110. package/dist/components/ui/popover.d.mts +5 -5
  111. package/dist/components/ui/popover.d.mts.map +1 -1
  112. package/dist/components/ui/progress.client.d.mts +2 -2
  113. package/dist/components/ui/radio-group.d.mts +3 -3
  114. package/dist/components/ui/resizable.client.d.mts +4 -4
  115. package/dist/components/ui/scroll-area.d.mts +3 -3
  116. package/dist/components/ui/select.client.d.mts +11 -11
  117. package/dist/components/ui/separator.d.mts +2 -2
  118. package/dist/components/ui/sheet.client.d.mts +9 -9
  119. package/dist/components/ui/sidebar.client.d.mts +26 -26
  120. package/dist/components/ui/skeleton.d.mts +2 -2
  121. package/dist/components/ui/slider.d.mts +2 -2
  122. package/dist/components/ui/sonner.client.d.mts +2 -2
  123. package/dist/components/ui/switch.d.mts +2 -2
  124. package/dist/components/ui/tabs.d.mts +5 -5
  125. package/dist/components/ui/textarea.d.mts +2 -2
  126. package/dist/components/ui/time-input.client.d.mts +2 -2
  127. package/dist/components/ui/toggle-group.client.d.mts +3 -3
  128. package/dist/components/ui/toggle.d.mts +2 -2
  129. package/dist/components/ui/tooltip.client.d.mts +5 -5
  130. package/dist/components/ui/tooltip.client.d.mts.map +1 -1
  131. package/dist/components/ui/tooltip.client.mjs +1 -1
  132. package/dist/components/ui/tooltip.client.mjs.map +1 -1
  133. package/dist/components.d.mts +3 -1
  134. package/dist/components.mjs +5 -3
  135. package/dist/lib/hooks/use-action.d.mts +2 -2
  136. package/dist/lib/hooks/use-indicator.d.mts +2 -2
  137. package/dist/modules/auth/components/allowed.client.d.mts +21 -7
  138. package/dist/modules/auth/components/allowed.client.d.mts.map +1 -1
  139. package/dist/modules/auth/components/allowed.client.mjs +8 -2
  140. package/dist/modules/auth/components/allowed.client.mjs.map +1 -1
  141. package/dist/modules/auth/components/auth-layout.server.d.mts +2 -2
  142. package/dist/modules/auth/components/auth-layout.server.d.mts.map +1 -1
  143. package/dist/modules/auth/components/auth-loading.d.mts +2 -2
  144. package/dist/modules/auth/components/create-first-user-page.client.d.mts +2 -2
  145. package/dist/modules/auth/components/create-first-user-page.client.d.mts.map +1 -1
  146. package/dist/modules/auth/components/create-first-user-page.client.mjs +1 -0
  147. package/dist/modules/auth/components/create-first-user-page.client.mjs.map +1 -1
  148. package/dist/modules/auth/components/forget-password-page.client.d.mts +2 -2
  149. package/dist/modules/auth/components/forget-password-page.client.d.mts.map +1 -1
  150. package/dist/modules/auth/components/guard-first-user.server.d.mts +2 -2
  151. package/dist/modules/auth/components/guard-first-user.server.d.mts.map +1 -1
  152. package/dist/modules/auth/components/guard.server.d.mts +2 -2
  153. package/dist/modules/auth/components/guard.server.d.mts.map +1 -1
  154. package/dist/modules/auth/components/login-page.client.d.mts +2 -2
  155. package/dist/modules/auth/components/login-page.client.d.mts.map +1 -1
  156. package/dist/modules/auth/components/reset-password-page.client.d.mts +2 -2
  157. package/dist/modules/auth/components/reset-password-page.client.d.mts.map +1 -1
  158. package/dist/modules/auth/components/update-password-command.d.mts +2 -2
  159. package/dist/modules/auth/components/update-password-command.d.mts.map +1 -1
  160. package/dist/modules/auth/db/schema.d.mts +73 -73
  161. package/dist/modules/auth/db/schema.d.mts.map +1 -1
  162. package/dist/modules/auth/handler/client.client.d.mts +143 -143
  163. package/dist/modules/auth/handler/client.client.d.mts.map +1 -1
  164. package/dist/modules/auth/handler/init.d.mts +131 -131
  165. package/dist/modules/auth/handler/init.d.mts.map +1 -1
  166. package/dist/modules/auth/hooks/use-permission.d.mts +48 -4
  167. package/dist/modules/auth/hooks/use-permission.d.mts.map +1 -1
  168. package/dist/modules/auth/hooks/use-permission.mjs +51 -4
  169. package/dist/modules/auth/hooks/use-permission.mjs.map +1 -1
  170. package/dist/modules/auth/hooks/use-session.d.mts +4 -4
  171. package/dist/modules/auth/lib/helpers.server.d.mts +2 -2
  172. package/dist/modules/auth/lib/helpers.server.mjs +1 -1
  173. package/dist/modules/auth/lib/validators.d.mts +3 -3
  174. package/dist/modules/auth/lib/validators.d.mts.map +1 -1
  175. package/dist/modules/auth/lib/validators.mjs +1 -1
  176. package/dist/modules/auth/lib/validators.mjs.map +1 -1
  177. package/dist/modules/commands/components/alert-dialog-command.client.d.mts +10 -10
  178. package/dist/modules/commands/components/alert-dialog-command.client.d.mts.map +1 -1
  179. package/dist/modules/commands/components/click-command.client.d.mts +2 -2
  180. package/dist/modules/commands/components/click-command.client.d.mts.map +1 -1
  181. package/dist/modules/commands/components/command-trigger.client.d.mts +6 -6
  182. package/dist/modules/commands/components/command-trigger.client.d.mts.map +1 -1
  183. package/dist/modules/commands/components/dialog-command.client.d.mts +8 -8
  184. package/dist/modules/commands/components/dialog-command.client.d.mts.map +1 -1
  185. package/dist/modules/commands/components/dropdown-command.client.d.mts +5 -5
  186. package/dist/modules/commands/components/dropdown-command.client.d.mts.map +1 -1
  187. package/dist/modules/commands/components/empty-command.client.d.mts +2 -2
  188. package/dist/modules/commands/components/empty-command.client.d.mts.map +1 -1
  189. package/dist/modules/commands/components/form-dialog-command.client.d.mts +11 -11
  190. package/dist/modules/commands/components/form-dialog-command.client.d.mts.map +1 -1
  191. package/dist/modules/commands/hooks/use-command-menu.client.d.mts.map +1 -1
  192. package/dist/modules/commands/hooks/use-command-menu.client.mjs +0 -5
  193. package/dist/modules/commands/hooks/use-command-menu.client.mjs.map +1 -1
  194. package/dist/modules/commands/hooks/use-command-mutation.client.d.mts +2 -2
  195. package/dist/modules/commands/menus/context-menu.client.d.mts +2 -2
  196. package/dist/modules/commands/menus/context-menu.client.d.mts.map +1 -1
  197. package/dist/modules/commands/menus/dropdown-menu.client.d.mts +3 -3
  198. package/dist/modules/commands/menus/dropdown-menu.client.d.mts.map +1 -1
  199. package/dist/modules/commands/menus/inline-menu.client.d.mts +3 -3
  200. package/dist/modules/commands/menus/inline-menu.client.d.mts.map +1 -1
  201. package/dist/modules/commands/menus/responsive-menu.client.d.mts +3 -3
  202. package/dist/modules/commands/menus/responsive-menu.client.d.mts.map +1 -1
  203. package/dist/modules/commands/utils/archive-command.client.d.mts +3 -3
  204. package/dist/modules/commands/utils/archive-command.client.d.mts.map +1 -1
  205. package/dist/modules/commands/utils/delete-command.client.d.mts +3 -3
  206. package/dist/modules/commands/utils/delete-command.client.d.mts.map +1 -1
  207. package/dist/modules/config/db/helpers.d.mts +5 -5
  208. package/dist/modules/config/db/helpers.d.mts.map +1 -1
  209. package/dist/modules/data-tables/components/cell/common.client.d.mts +5 -5
  210. package/dist/modules/data-tables/components/column-header.d.mts +2 -2
  211. package/dist/modules/data-tables/components/filters/combobox.client.d.mts +2 -2
  212. package/dist/modules/data-tables/components/filters/slider.client.d.mts +2 -2
  213. package/dist/modules/data-tables/components/header.d.mts +4 -4
  214. package/dist/modules/data-tables/components/layout.d.mts +2 -2
  215. package/dist/modules/data-tables/components/search-input.client.d.mts +2 -2
  216. package/dist/modules/data-tables/components/skeleton.d.mts +2 -2
  217. package/dist/modules/data-tables/components/table.d.mts +7 -7
  218. package/dist/modules/data-tables/components/toolbar.d.mts +3 -3
  219. package/dist/modules/data-tables/hooks/use-context.client.d.mts +2 -2
  220. package/dist/modules/data-tables/tables/data-table/components/table.d.mts +2 -2
  221. package/dist/modules/data-tables/tables/inline-table/components/cells/common.d.mts +2 -2
  222. package/dist/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.d.mts +2 -2
  223. package/dist/modules/data-tables/tables/inline-table/components/inputs/advanced-select.client.d.mts +2 -2
  224. package/dist/modules/data-tables/tables/inline-table/components/inputs/combobox.client.d.mts +2 -2
  225. package/dist/modules/data-tables/tables/inline-table/components/inputs/input.client.d.mts +3 -3
  226. package/dist/modules/data-tables/tables/inline-table/components/inputs/read-only.d.mts +2 -2
  227. package/dist/modules/data-tables/tables/inline-table/components/inputs/select.client.d.mts +2 -2
  228. package/dist/modules/data-tables/tables/inline-table/components/table.d.mts +2 -2
  229. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts +2 -2
  230. package/dist/modules/inline-edit/components/combobox-dropdown.client.d.mts +2 -2
  231. package/dist/modules/inline-edit/components/combobox-dropdown.client.d.mts.map +1 -1
  232. package/dist/modules/inline-edit/components/combobox.client.d.mts +2 -2
  233. package/dist/modules/inline-edit/components/combobox.client.d.mts.map +1 -1
  234. package/dist/modules/inline-edit/components/date-input.client.d.mts +2 -2
  235. package/dist/modules/inline-edit/components/date-input.client.d.mts.map +1 -1
  236. package/dist/modules/inline-edit/components/date-picker.client.d.mts +2 -2
  237. package/dist/modules/inline-edit/components/date-picker.client.d.mts.map +1 -1
  238. package/dist/modules/inline-edit/components/editor.client.d.mts +2 -2
  239. package/dist/modules/inline-edit/components/editor.client.d.mts.map +1 -1
  240. package/dist/modules/inline-edit/components/input-recipient.client.d.mts +2 -2
  241. package/dist/modules/inline-edit/components/input-recipient.client.d.mts.map +1 -1
  242. package/dist/modules/inline-edit/components/input-toggle.client.d.mts +2 -2
  243. package/dist/modules/inline-edit/components/input-toggle.client.d.mts.map +1 -1
  244. package/dist/modules/inline-edit/components/input.client.d.mts +4 -4
  245. package/dist/modules/inline-edit/components/input.client.d.mts.map +1 -1
  246. package/dist/modules/inline-edit/components/select.client.d.mts +6 -6
  247. package/dist/modules/inline-edit/components/switch.client.d.mts +2 -2
  248. package/dist/modules/inline-edit/components/toggle.client.d.mts +2 -2
  249. package/dist/modules/inline-edit/lib/variants.d.mts +1 -1
  250. package/dist/modules/router/handler/init.server.d.mts +6 -6
  251. package/dist/modules/router/handler/init.server.d.mts.map +1 -1
  252. package/dist/modules/router/handler/init.server.mjs +1 -1
  253. package/dist/modules/storage/components/dropzone-context.client.d.mts +2 -2
  254. package/dist/modules/storage/components/dropzone-context.client.d.mts.map +1 -1
  255. package/dist/modules/storage/components/dropzone.client.d.mts +5 -5
  256. package/dist/modules/storage/components/dropzone.client.d.mts.map +1 -1
  257. package/dist/modules/storage/components/dropzone.client.mjs +1 -1
  258. package/dist/modules/storage/components/image-grid.client.d.mts +3 -3
  259. package/dist/modules/storage/components/image-grid.client.d.mts.map +1 -1
  260. package/dist/modules/storage/components/image-grid.client.mjs +1 -1
  261. package/dist/modules/storage/components/upload-zone.client.d.mts +2 -2
  262. package/dist/modules/storage/components/upload-zone.client.d.mts.map +1 -1
  263. package/dist/modules/storage/lib/create-upload.client.d.mts.map +1 -1
  264. package/dist/modules/storage/lib/router.server.d.mts +2346 -2346
  265. package/dist/modules/storage/lib/router.server.d.mts.map +1 -1
  266. package/dist/modules/storage/lib/router.server.mjs +1 -1
  267. package/dist/modules/storage/lib/schema.d.mts +92 -92
  268. package/dist/modules/storage/lib/schema.d.mts.map +1 -1
  269. package/dist/modules/storage/lib/schema.mjs +1 -1
  270. package/dist/modules/storage/lib/service.server.d.mts +21 -21
  271. package/dist/modules/storage/lib/service.server.mjs +2 -2
  272. package/dist/modules/storage/lib/validators.d.mts +91 -91
  273. package/dist/modules/storage/lib/validators.d.mts.map +1 -1
  274. package/dist/router/server.mjs +1 -1
  275. package/package.json +1 -1
  276. package/src/components/editor/extensions/file-handler/utils.ts +1 -1
  277. package/src/components/editor/extensions/image/extension.ts +0 -2
  278. package/src/components/editor/lib/helpers.ts +39 -3
  279. package/src/components/entry.ts +2 -0
  280. package/src/components/layouts/error-page.tsx +61 -0
  281. package/src/components/layouts/not-allowed-page.tsx +1 -1
  282. package/src/components/navigation/admin-sidebar-paths.client.tsx +18 -2
  283. package/src/components/ui/tooltip.client.tsx +1 -1
  284. package/src/modules/auth/components/allowed.client.tsx +35 -7
  285. package/src/modules/auth/components/create-first-user-page.client.tsx +4 -0
  286. package/src/modules/auth/hooks/use-permission.ts +88 -2
  287. package/src/modules/auth/lib/validators.ts +1 -1
  288. package/src/modules/commands/hooks/use-command-menu.client.tsx +4 -7
  289. package/dist/modules/auth/lib/utils.mjs +0 -21
  290. package/dist/modules/auth/lib/utils.mjs.map +0 -1
  291. package/src/modules/inline-edit/hooks/use-inline.client copy.tsx +0 -97
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.mts","names":[],"sources":["../../../../src/modules/storage/lib/validators.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"validators.d.mts","names":[],"sources":["../../../../src/modules/storage/lib/validators.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { HydrateClient, getQueryClient } from "../modules/router/lib/query-client.server.mjs";
2
1
  import { ServerError } from "../modules/router/lib/error.server.mjs";
2
+ import { HydrateClient, getQueryClient } from "../modules/router/lib/query-client.server.mjs";
3
3
  import { createRPCCaller } from "../modules/router/handler/caller.server.mjs";
4
4
  import { createRPCContext } from "../modules/router/handler/context.server.mjs";
5
5
  import { initRPC } from "../modules/router/handler/init.server.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tulip-systems/core",
3
- "version": "0.5.3",
3
+ "version": "0.5.5",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "license": "MIT",
@@ -7,7 +7,7 @@
7
7
  * @example
8
8
  * const imageCounts = collectImageIds(editorDoc);
9
9
  * imageCounts.forEach((count, imageId) => {
10
- * console.log(`Image ${imageId} appears ${count} times`);
10
+ * console.info(`Image ${imageId} appears ${count} times`);
11
11
  * });
12
12
  */
13
13
  export function collectImageIds(doc: any): Map<string, number> {
@@ -45,8 +45,6 @@ export const Image = TiptapImage.extend<ImageOptions>({
45
45
  renderHTML({ HTMLAttributes }) {
46
46
  const { src: _, ...attrs } = HTMLAttributes;
47
47
 
48
- console.log("attrs", attrs);
49
-
50
48
  const nodeId = attrs.nodeId as string | null;
51
49
  const isPending = Boolean(attrs.isPending);
52
50
 
@@ -1,17 +1,53 @@
1
+ import Blockquote from "@tiptap/extension-blockquote";
2
+ import Bold from "@tiptap/extension-bold";
3
+ import Document from "@tiptap/extension-document";
4
+ import HardBreak from "@tiptap/extension-hard-break";
5
+ import Heading from "@tiptap/extension-heading";
6
+ import HorizontalRule from "@tiptap/extension-horizontal-rule";
7
+ import Italic from "@tiptap/extension-italic";
8
+ import Link from "@tiptap/extension-link";
9
+ import { BulletList, ListItem, ListKeymap, OrderedList } from "@tiptap/extension-list";
10
+ import Paragraph from "@tiptap/extension-paragraph";
11
+ import Strike from "@tiptap/extension-strike";
12
+ import Text from "@tiptap/extension-text";
13
+ import Underline from "@tiptap/extension-underline";
14
+ import { Dropcursor, Gapcursor, TrailingNode, UndoRedo } from "@tiptap/extensions";
1
15
  import { generateHTML, generateJSON } from "@tiptap/html";
2
- import { EDITOR_EXTENSIONS_VALUES } from "./constants";
3
16
  import { EditorJSONContent } from "./types";
4
17
 
18
+ const EXTENSIONS_FOR_GENERATION = [
19
+ Blockquote,
20
+ BulletList,
21
+ Document,
22
+ HardBreak,
23
+ Heading,
24
+ HorizontalRule,
25
+ ListItem,
26
+ OrderedList,
27
+ Paragraph,
28
+ Text,
29
+ Bold,
30
+ Italic,
31
+ Link,
32
+ Strike,
33
+ Underline,
34
+ Dropcursor,
35
+ Gapcursor,
36
+ UndoRedo,
37
+ ListKeymap,
38
+ TrailingNode,
39
+ ];
40
+
5
41
  /**
6
42
  * Convert text to editor content
7
43
  */
8
44
  export function convertHTMLToEditorContent(html: string): EditorJSONContent {
9
- return generateJSON(html, EDITOR_EXTENSIONS_VALUES);
45
+ return generateJSON(html, EXTENSIONS_FOR_GENERATION);
10
46
  }
11
47
 
12
48
  /**
13
49
  * Convert editor content to text
14
50
  */
15
51
  export function convertEditorContentToHTML(content: EditorJSONContent): string {
16
- return generateHTML(content, EDITOR_EXTENSIONS_VALUES);
52
+ return generateHTML(content, EXTENSIONS_FOR_GENERATION);
17
53
  }
@@ -12,7 +12,9 @@ export * from "./editor/lib/types";
12
12
  */
13
13
  export * from "./layouts/admin-loading";
14
14
  export * from "./layouts/empty-page";
15
+ export * from "./layouts/error-page";
15
16
  export * from "./layouts/list-layout";
17
+ export * from "./layouts/not-allowed-page";
16
18
  export * from "./layouts/not-found-page";
17
19
  export * from "./layouts/root-loading";
18
20
  export * from "./layouts/tab-layout";
@@ -0,0 +1,61 @@
1
+ import { cn } from "@/lib/utils/cn";
2
+ import { ServerError } from "@/modules/router/lib/error.server";
3
+ import { CommonORPCErrorCode } from "@orpc/client";
4
+ import { BugIcon } from "lucide-react";
5
+ import { ComponentProps } from "react";
6
+ import { NotAllowedPage } from "./not-allowed-page";
7
+ import { NotFoundSection } from "./not-found-section";
8
+
9
+ /**
10
+ * ErrorPage
11
+ */
12
+ export function ErrorPage({ className, ...props }: ComponentProps<"div">) {
13
+ return (
14
+ <div {...props} className={cn("relative z-0 grid h-dvh w-full place-items-center", className)}>
15
+ <div className="flex flex-col items-center gap-12 text-center">
16
+ <span className="text-destructive flex flex-col items-center gap-2">
17
+ <BugIcon className="size-20 xl:size-32" />
18
+ <h1 className="text-2xl font-bold lg:text-3xl">Oeps, er is iets fout gegaan.</h1>
19
+ </span>
20
+ </div>
21
+ </div>
22
+ );
23
+ }
24
+
25
+ /**
26
+ * ErrorPage
27
+ * - If the error is a ServerError and the code is "UNAUTHORIZED", show the NotAllowedPage
28
+ * - If the error is a ServerError and the code is "NOT_FOUND", show the NotFoundSection
29
+ * - Else show the ErrorPage
30
+ */
31
+ export function AdminErrorPage(props: { error: Error }) {
32
+ const serverErrorCode: CommonORPCErrorCode =
33
+ props.error instanceof ServerError ? props.error.code : undefined;
34
+
35
+ /**
36
+ * If the error is a ServerError and the code is "UNAUTHORIZED", show the NotAllowedPage
37
+ */
38
+ if (serverErrorCode === "UNAUTHORIZED") {
39
+ return (
40
+ <div className="p-content h-dvh">
41
+ <NotAllowedPage className="h-full" />
42
+ </div>
43
+ );
44
+ }
45
+
46
+ /**
47
+ * If the error is a ServerError and the code is "UNAUTHORIZED", show the NotAllowedPage
48
+ */
49
+ if (serverErrorCode === "NOT_FOUND") {
50
+ return (
51
+ <div className="relative z-0 grid h-dvh w-full place-items-center">
52
+ <NotFoundSection href="/admin" />
53
+ </div>
54
+ );
55
+ }
56
+
57
+ /**
58
+ * Else show the ErrorPage
59
+ */
60
+ return <ErrorPage />;
61
+ }
@@ -14,7 +14,7 @@ export type NotAllowedPageProps = HTMLAttributes<HTMLDivElement> & {
14
14
  };
15
15
  };
16
16
 
17
- export default function NotAllowedPage({
17
+ export function NotAllowedPage({
18
18
  title,
19
19
  description,
20
20
  callToAction,
@@ -51,8 +51,24 @@ export function Paths({ children, ...props }: React.ComponentProps<typeof Sideba
51
51
  /**
52
52
  * Path Group
53
53
  */
54
- export function PathGroup(props: React.ComponentProps<"div">) {
55
- return <SidebarGroup {...props} />;
54
+ export type PathGroupProps = React.ComponentProps<"div"> & {
55
+ /**
56
+ * Permission to check with the any strategy for displaying the group
57
+ * @example { project: ["view", "create"], client: ["view"], drive: ["view"] }
58
+ */
59
+ permission?: Permission[];
60
+ };
61
+
62
+ export function PathGroup({ permission, ...props }: PathGroupProps) {
63
+ if (!permission) {
64
+ return <SidebarGroup {...props} />;
65
+ }
66
+
67
+ return (
68
+ <Allowed permission={permission} strategy="any">
69
+ <SidebarGroup {...props} />
70
+ </Allowed>
71
+ );
56
72
  }
57
73
 
58
74
  /**
@@ -48,7 +48,7 @@ function TooltipContent({
48
48
  {...props}
49
49
  >
50
50
  {children}
51
- <TooltipPrimitive.Arrow className="bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" />
51
+ <TooltipPrimitive.Arrow className="bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px]" />
52
52
  </TooltipPrimitive.Content>
53
53
  </TooltipPrimitive.Portal>
54
54
  );
@@ -1,20 +1,48 @@
1
1
  "use client";
2
2
 
3
3
  import { JSX } from "react";
4
- import { usePermission } from "../hooks/use-permission";
5
- import { type Permission } from "../lib/permissions";
4
+ import { usePermission, UsePermissionProps } from "../hooks/use-permission";
6
5
 
7
6
  /**
8
- * Allowed
7
+ * Allowed types
9
8
  */
10
- type AllowedProps = {
11
- permission: Permission;
9
+ export type AllowedStrategy = "all" | "any";
10
+
11
+ /**
12
+ * Allowed props
13
+ */
14
+ export type AllowedProps = UsePermissionProps & {
15
+ // /**
16
+ // * Permission to check
17
+ // * @example { project: ["view", "create"] }
18
+ // */
19
+ // permission: Permission;
20
+
21
+ // /**
22
+ // * Strategy to use when checking multiple permissions
23
+ // * - "all": all permissions must be allowed
24
+ // * - "any": at least one permission must be allowed
25
+ // * @default "all"
26
+ // */
27
+ // strategy?: AllowedStrategy;
28
+
29
+ /**
30
+ * Fallback component to render if the user doesn't have the permission
31
+ * @default null
32
+ */
12
33
  fallback?: JSX.Element | string;
34
+
35
+ /**
36
+ * Children to render if the user has the permission
37
+ */
13
38
  children: React.ReactNode;
14
39
  };
15
40
 
16
- export function Allowed({ permission, fallback, children }: AllowedProps) {
17
- const { data } = usePermission(permission);
41
+ /**
42
+ * Allowed
43
+ */
44
+ export function Allowed({ permission, strategy, fallback, children }: AllowedProps) {
45
+ const { data } = usePermission({ permission, strategy } as UsePermissionProps);
18
46
 
19
47
  if (data?.success) return <>{children}</>;
20
48
 
@@ -62,6 +62,10 @@ export function CreateFirstUserPage() {
62
62
  disabled,
63
63
  });
64
64
 
65
+ if(Object.keys(form.formState.errors).length > 0) {
66
+ console.error(form.formState.errors);
67
+ }
68
+
65
69
  return (
66
70
  <div className="mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[350px]">
67
71
  <div className="flex flex-col space-y-2 text-center">
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useSuspenseQueries } from "@tanstack/react-query";
3
+ import { useSuspenseQueries, useSuspenseQuery } from "@tanstack/react-query";
4
4
  import { authClient } from "../handler/client.client";
5
5
  import { type Permission } from "../lib/permissions";
6
6
  import { useSession } from "./use-session";
@@ -8,7 +8,93 @@ import { useSession } from "./use-session";
8
8
  /**
9
9
  * UsePermission
10
10
  */
11
- export function usePermission(permission?: Permission) {
11
+ export type UsePermissionProps =
12
+ | {
13
+ /**
14
+ * Strategy to use when checking multiple permissions
15
+ * - "all": all permissions must be allowed
16
+ * - "any": at least one permission must be allowed
17
+ * @default "all"
18
+ */
19
+ strategy?: "all";
20
+
21
+ /**
22
+ * Permission to check
23
+ * @example { project: ["view", "create"] }
24
+ */
25
+ permission?: Permission;
26
+ }
27
+ | {
28
+ /**
29
+ * Strategy to use when checking multiple permissions
30
+ * - "all": all permissions must be allowed
31
+ * - "any": at least one permission must be allowed
32
+ * @default "all"
33
+ */
34
+ strategy?: "any";
35
+
36
+ /**
37
+ * Permission to check
38
+ * @example [{ project: ["view", "create"] }, { client: ["view"] }, { drive: ["view"] }]
39
+ */
40
+ permission?: Permission[];
41
+ };
42
+
43
+ export function usePermission({ permission, strategy = "all" }: UsePermissionProps) {
44
+ const sessionQuery = useSession();
45
+
46
+ return useSuspenseQuery({
47
+ queryKey: ["permission", { permission, strategy }],
48
+ queryFn: async () => {
49
+ // If no permission is provided, allow by default
50
+ if (!permission) return { permission, success: true };
51
+
52
+ // If no user is logged in, deny by default
53
+ if (!sessionQuery.data) return { permission, success: false };
54
+ const userId = sessionQuery.data?.user.id;
55
+ if (!userId) return { permission, success: false };
56
+
57
+ // If the strategy is "any", check if the user has any of the permissions
58
+ const permissions = Array.isArray(permission) ? permission : [permission];
59
+
60
+ // Check if the user has the permission
61
+ const results = await Promise.all(
62
+ permissions.map((permission) => authClient.admin.hasPermission({ permission, userId })),
63
+ );
64
+
65
+ const data = results.map(({ data }) => data).filter((data) => !!data);
66
+ const errors = results.filter(({ error }) => !!error).map(({ error }) => error);
67
+
68
+ // If there is an error, log it and return false
69
+ if (errors.length > 0) {
70
+ console.error(...errors);
71
+ return { permission, success: false };
72
+ }
73
+
74
+ // Determine if the user has the permission based on the strategy
75
+ const success =
76
+ strategy === "all"
77
+ ? data.every(({ success }) => success)
78
+ : data.some(({ success }) => success);
79
+
80
+ // Return the result
81
+ return {
82
+ permission,
83
+ success,
84
+ };
85
+ },
86
+ staleTime: 5 * 60 * 1000, // 5 minutes
87
+ });
88
+ }
89
+
90
+ /**
91
+ * Check multiple permissions in parallel
92
+ * @param permission
93
+ * @param strategy
94
+ * @returns
95
+ * @deprecated Use `usePermission` with strategy "any" or "all" instead
96
+ */
97
+ export function usePermissions(permission?: Permission) {
12
98
  const sessionQuery = useSession();
13
99
 
14
100
  const keys = Object.entries(permission ?? {}).flatMap(([resource, permissions]) =>
@@ -64,7 +64,7 @@ export const createUserSchema = userSchema.pick({ email: true, image: true }).ex
64
64
  .min(2, { message: "Achternaam moet langer zijn dan 2 karakters" })
65
65
  .max(50, { message: "Achternaam mag niet langer zijn dan 50 karakters" }),
66
66
  password: z.string().min(6, { message: "Wachtwoord moet minimaal 6 karakters hebben" }),
67
- role: z.string(),
67
+ role: z.string().optional(),
68
68
  });
69
69
 
70
70
  export type CreateUserSchema = z.infer<typeof createUserSchema>;
@@ -1,8 +1,5 @@
1
1
  "use client";
2
2
 
3
- import { Permission } from "@/modules/auth/entry";
4
- import { usePermission } from "@/modules/auth/hooks/use-permission";
5
- import { mergePermissions } from "@/modules/auth/lib/utils";
6
3
  import {
7
4
  type BulkCommandDefRenderParams,
8
5
  type CommandDef,
@@ -115,8 +112,8 @@ export function useSingleCommandMenu<TData, TMeta>({
115
112
  commands,
116
113
  meta,
117
114
  }: SingleCommandMenuProps<TData, TMeta> & { data: TData }) {
118
- const permissions = commands.map((command) => command.permission).filter(Boolean) as Permission[];
119
- usePermission(mergePermissions(permissions));
115
+ // const permissions = commands.map((command) => command.permission).filter(Boolean) as Permission[];
116
+ // usePermission(mergePermissions(permissions));
120
117
 
121
118
  // filter out commands that don't have valid conditions
122
119
  const validCommands = commands.filter((command) =>
@@ -142,8 +139,8 @@ export function useBulkCommandMenu<TData, TMeta>({
142
139
  commands,
143
140
  meta,
144
141
  }: BulkCommandMenuProps<TData, TMeta>) {
145
- const permissions = commands.map((command) => command.permission).filter(Boolean) as Permission[];
146
- usePermission(mergePermissions(permissions));
142
+ // const permissions = commands.map((command) => command.permission).filter(Boolean) as Permission[];
143
+ // usePermission(mergePermissions(permissions));
147
144
 
148
145
  /**
149
146
  * Filter out commands that don't have valid conditions
@@ -1,21 +0,0 @@
1
- //#region src/modules/auth/lib/utils.ts
2
- /**
3
- * mergePermissions
4
- */
5
- function mergePermissions(permissions) {
6
- return permissions.flatMap(Object.entries).reduce((acc, [key, value]) => {
7
- const accValue = acc[key];
8
- if (!accValue) return {
9
- ...acc,
10
- [key]: [...value]
11
- };
12
- return {
13
- ...acc,
14
- [key]: Array.from(new Set([...accValue, ...value]))
15
- };
16
- }, {});
17
- }
18
-
19
- //#endregion
20
- export { mergePermissions };
21
- //# sourceMappingURL=utils.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.mjs","names":[],"sources":["../../../../src/modules/auth/lib/utils.ts"],"sourcesContent":["import { Permission } from \"./permissions\";\n\n/**\n * mergePermissions\n */\nexport function mergePermissions(permissions: Permission[]): Permission {\n return permissions.flatMap(Object.entries).reduce((acc, [key, value]) => {\n const accValue = acc[key];\n\n if (!accValue) return { ...acc, [key]: [...value] };\n\n return {\n ...acc,\n [key]: Array.from(new Set([...accValue, ...value])),\n };\n }, {} as Permission);\n}\n"],"mappings":";;;;AAKA,SAAgB,iBAAiB,aAAuC;AACtE,QAAO,YAAY,QAAQ,OAAO,QAAQ,CAAC,QAAQ,KAAK,CAAC,KAAK,WAAW;EACvE,MAAM,WAAW,IAAI;AAErB,MAAI,CAAC,SAAU,QAAO;GAAE,GAAG;IAAM,MAAM,CAAC,GAAG,MAAM;GAAE;AAEnD,SAAO;GACL,GAAG;IACF,MAAM,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;GACpD;IACA,EAAE,CAAe"}
@@ -1,97 +0,0 @@
1
- "use client";
2
-
3
- import { EditorJSONContent } from "@/components/entry";
4
- import { useAction } from "@/lib/hooks/use-action";
5
- import { usePermission } from "@/modules/auth/hooks/use-permission";
6
- import { Permission } from "@/modules/auth/lib/permissions";
7
- import { useState } from "react";
8
- import { toast } from "sonner";
9
- import { useInlineEditContext } from "./context.client";
10
-
11
- type UpdateStrategy = {
12
- trigger: "change" | "blur";
13
- delay?: number;
14
- };
15
-
16
- const defaultUpdateStrategy: UpdateStrategy = {
17
- trigger: "blur",
18
- };
19
-
20
- export type useInlineEditOptions<TValue> = {
21
- initialValue?: TValue;
22
- action: (value: { id: string; value: TValue }) => Promise<unknown>;
23
- permission?: Permission;
24
- /**
25
- * Update strategy
26
- * - trigger: when to update the value (default: "blur")
27
- * - delay: delay in milliseconds before updating the value (only for "change" trigger)
28
- * @default { trigger: "blur" }
29
- */
30
- updateStrategy?: UpdateStrategy;
31
- };
32
-
33
- export function useInlineEdit<
34
- TValue extends string | number | Date | boolean | JSON | EditorJSONContent | undefined,
35
- >(props: useInlineEditOptions<TValue>) {
36
- const strategy = props.updateStrategy ?? defaultUpdateStrategy;
37
- /**
38
- * The inline edit context.
39
- */
40
- const context = useInlineEditContext();
41
-
42
- const { data } = usePermission(props.permission ?? context.permission);
43
- const isAllowed = data?.success;
44
-
45
- /**
46
- * The current value of the inline edit.
47
- */
48
- const [value, setValue] = useState(props.initialValue);
49
-
50
- /**
51
- * Execute the action to update the value.
52
- */
53
- const { mutate, status } = useAction({
54
- mutationFn: props.action,
55
- onError: (error) => {
56
- setValue(props.initialValue);
57
- toast.error("Er is iets misgegaan", {
58
- description: error instanceof Error ? error.message : undefined,
59
- });
60
- },
61
- });
62
-
63
- /**
64
- * Handle the update of the value.
65
- */
66
- const handleUpdate = (value: TValue) => {
67
- if (!isAllowed) {
68
- toast.error("Je hebt geen toestemming om dit te bewerken");
69
- return;
70
- }
71
-
72
- // If the value is the same as the initial value, do nothing
73
- if (value === props.initialValue) return;
74
-
75
- return mutate({ id: context.id, value });
76
- };
77
-
78
- /**
79
- * Handle change updates
80
- */
81
- function handleChange(value: TValue) {
82
- setValue(value);
83
-
84
- // if the strategy is change, update the value after the delay
85
- }
86
-
87
- /**
88
- * Handle blur updates
89
- */
90
- function handleBlur(value: TValue) {
91
- setValue(value);
92
-
93
- // if the strategy is blur, update the value
94
- }
95
-
96
- return { value, setValue, handleUpdate, status, isAllowed };
97
- }