@tulip-systems/core 0.2.1 → 0.4.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 (368) hide show
  1. package/dist/auth/client.d.ts +3 -1
  2. package/dist/auth/client.js +4 -2
  3. package/dist/auth/server.d.ts +2 -2
  4. package/dist/auth/server.js +3 -3
  5. package/dist/auth.d.ts +2 -1
  6. package/dist/auth.js +3 -2
  7. package/dist/commands/client.d.ts +4 -4
  8. package/dist/commands/client.js +4 -4
  9. package/dist/components/client.d.ts +5 -3
  10. package/dist/components/client.js +6 -4
  11. package/dist/components/common/icons.d.ts +5 -2
  12. package/dist/components/common/icons.d.ts.map +1 -1
  13. package/dist/components/common/icons.js +4 -1
  14. package/dist/components/common/icons.js.map +1 -1
  15. package/dist/components/common/status.d.ts +3 -3
  16. package/dist/components/editor/components/content.client.d.ts +2 -2
  17. package/dist/components/editor/components/fixed-menu.client.d.ts +2 -2
  18. package/dist/components/editor/context.client.d.ts +2 -2
  19. package/dist/components/editor/index.client.d.ts +2 -2
  20. package/dist/components/editor/preview.client.d.ts +2 -2
  21. package/dist/components/header/back-button.client.d.ts +2 -2
  22. package/dist/components/header/bottom-bar.client.d.ts +5 -5
  23. package/dist/components/header/bottom-bar.client.d.ts.map +1 -1
  24. package/dist/components/header/bottom-bar.client.js.map +1 -1
  25. package/dist/components/header/breadcrumbs.client.d.ts +7 -7
  26. package/dist/components/header/breadcrumbs.client.js +1 -1
  27. package/dist/components/header/header.client.d.ts +2 -2
  28. package/dist/components/header/mobile-nav-switcher.client.d.ts +2 -2
  29. package/dist/components/header/top-bar.client.d.ts +4 -4
  30. package/dist/components/layouts/admin-content.client.d.ts +13 -0
  31. package/dist/components/layouts/admin-content.client.d.ts.map +1 -0
  32. package/dist/components/layouts/admin-layout.d.ts +8 -0
  33. package/dist/components/layouts/admin-layout.d.ts.map +1 -0
  34. package/dist/components/layouts/admin-layout.js +15 -0
  35. package/dist/components/layouts/admin-layout.js.map +1 -0
  36. package/dist/components/layouts/admin-loading.d.ts +3 -3
  37. package/dist/components/layouts/admin-loading.d.ts.map +1 -1
  38. package/dist/components/layouts/admin-loading.js +2 -2
  39. package/dist/components/layouts/admin-loading.js.map +1 -1
  40. package/dist/components/layouts/empty-page.d.ts +4 -4
  41. package/dist/components/layouts/list-layout.d.ts +2 -2
  42. package/dist/components/layouts/not-found-page.d.ts +4 -3
  43. package/dist/components/layouts/not-found-page.d.ts.map +1 -1
  44. package/dist/components/layouts/not-found-page.js +8 -2
  45. package/dist/components/layouts/not-found-page.js.map +1 -1
  46. package/dist/components/layouts/not-found-section.js +1 -1
  47. package/dist/components/layouts/not-found-section.js.map +1 -1
  48. package/dist/components/layouts/providers.client.d.ts +2 -2
  49. package/dist/components/layouts/root-layout.server.d.ts +2 -2
  50. package/dist/components/layouts/root-layout.server.d.ts.map +1 -1
  51. package/dist/components/layouts/root-loading.d.ts +7 -0
  52. package/dist/components/layouts/root-loading.d.ts.map +1 -0
  53. package/dist/components/layouts/root-loading.js +14 -0
  54. package/dist/components/layouts/root-loading.js.map +1 -0
  55. package/dist/components/layouts/tab-layout.d.ts +2 -2
  56. package/dist/components/lists/data-list.d.ts +5 -5
  57. package/dist/components/lists/data-stack.d.ts +8 -8
  58. package/dist/components/{layouts → navigation}/admin-sidebar-header.client.js +8 -9
  59. package/dist/components/navigation/admin-sidebar-header.client.js.map +1 -0
  60. package/dist/components/navigation/admin-sidebar-paths.client.d.ts +81 -0
  61. package/dist/components/navigation/admin-sidebar-paths.client.d.ts.map +1 -0
  62. package/dist/components/navigation/admin-sidebar-paths.client.js +143 -0
  63. package/dist/components/navigation/admin-sidebar-paths.client.js.map +1 -0
  64. package/dist/components/navigation/admin-sidebar-skeleton.js +31 -0
  65. package/dist/components/navigation/admin-sidebar-skeleton.js.map +1 -0
  66. package/dist/components/server.d.ts +1 -1
  67. package/dist/components/server.js +1 -1
  68. package/dist/components/ui/accordion.d.ts +5 -5
  69. package/dist/components/ui/alert-dialog.d.ts +12 -12
  70. package/dist/components/ui/alert.d.ts +6 -6
  71. package/dist/components/ui/aspect-ratio.d.ts +2 -2
  72. package/dist/components/ui/avatar.client.d.ts +4 -4
  73. package/dist/components/ui/badge.d.ts +4 -4
  74. package/dist/components/ui/breadcrumb.d.ts +8 -8
  75. package/dist/components/ui/button.d.ts +4 -4
  76. package/dist/components/ui/calendar.d.ts +2 -2
  77. package/dist/components/ui/card.d.ts +7 -7
  78. package/dist/components/ui/carousel.d.ts +6 -6
  79. package/dist/components/ui/chart.client.d.ts +5 -5
  80. package/dist/components/ui/checkbox.d.ts +2 -2
  81. package/dist/components/ui/collapsible.client.d.ts +4 -4
  82. package/dist/components/ui/color-picker.client.d.ts +2 -2
  83. package/dist/components/ui/combobox-dropdown.client.d.ts +2 -2
  84. package/dist/components/ui/combobox.client.d.ts +2 -2
  85. package/dist/components/ui/command.d.ts +10 -10
  86. package/dist/components/ui/context-menu.d.ts +16 -16
  87. package/dist/components/ui/dialog.client.d.ts +11 -11
  88. package/dist/components/ui/drawer.client.d.ts +11 -11
  89. package/dist/components/ui/dropdown-menu.d.ts +16 -16
  90. package/dist/components/ui/form.client.d.ts +8 -8
  91. package/dist/components/ui/hover-card.client.d.ts +4 -4
  92. package/dist/components/ui/input.d.ts +2 -2
  93. package/dist/components/ui/label.d.ts +2 -2
  94. package/dist/components/ui/navigation-menu.d.ts +11 -11
  95. package/dist/components/ui/pagination.d.ts +8 -8
  96. package/dist/components/ui/popover.d.ts +5 -5
  97. package/dist/components/ui/progress.client.d.ts +2 -2
  98. package/dist/components/ui/radio-group.d.ts +3 -3
  99. package/dist/components/ui/resizable.client.d.ts +4 -4
  100. package/dist/components/ui/scroll-area.d.ts +3 -3
  101. package/dist/components/ui/select.client.d.ts +11 -11
  102. package/dist/components/ui/separator.d.ts +2 -2
  103. package/dist/components/ui/sheet.client.d.ts +9 -9
  104. package/dist/components/ui/sidebar.client.d.ts +24 -24
  105. package/dist/components/ui/sidebar.client.js +1 -1
  106. package/dist/components/ui/skeleton.d.ts +2 -2
  107. package/dist/components/ui/slider.d.ts +2 -2
  108. package/dist/components/ui/sonner.client.d.ts +2 -2
  109. package/dist/components/ui/sonner.client.js +1 -1
  110. package/dist/components/ui/spinner.js +63 -0
  111. package/dist/components/ui/spinner.js.map +1 -0
  112. package/dist/components/ui/switch.d.ts +2 -2
  113. package/dist/components/ui/tabs.d.ts +5 -5
  114. package/dist/components/ui/textarea.d.ts +2 -2
  115. package/dist/components/ui/time-input.client.d.ts +2 -2
  116. package/dist/components/ui/toggle-group.client.d.ts +3 -3
  117. package/dist/components/ui/toggle.d.ts +4 -4
  118. package/dist/components/ui/tooltip.client.d.ts +5 -5
  119. package/dist/components/ui/tree.client.d.ts +5 -5
  120. package/dist/components/ui/tree.client.d.ts.map +1 -1
  121. package/dist/components.d.ts +6 -5
  122. package/dist/components.js +8 -7
  123. package/dist/config/server.d.ts +2 -3
  124. package/dist/config/server.js +3 -4
  125. package/dist/config.d.ts +3 -2
  126. package/dist/config.js +2 -1
  127. package/dist/lib/client.js +1 -1
  128. package/dist/lib/hooks/use-action.d.ts +2 -2
  129. package/dist/modules/auth/components/allowed.client.js +1 -1
  130. package/dist/modules/auth/components/allowed.client.js.map +1 -1
  131. package/dist/modules/auth/components/auth-layout.server.d.ts +3 -4
  132. package/dist/modules/auth/components/auth-layout.server.d.ts.map +1 -1
  133. package/dist/modules/auth/components/auth-layout.server.js +1 -4
  134. package/dist/modules/auth/components/auth-layout.server.js.map +1 -1
  135. package/dist/modules/auth/components/auth-loading.d.ts +7 -0
  136. package/dist/modules/auth/components/auth-loading.d.ts.map +1 -0
  137. package/dist/modules/auth/components/auth-loading.js +18 -0
  138. package/dist/modules/auth/components/auth-loading.js.map +1 -0
  139. package/dist/modules/auth/components/forget-password-page.client.js +2 -2
  140. package/dist/modules/auth/components/guard.client.js +16 -0
  141. package/dist/modules/auth/components/guard.client.js.map +1 -0
  142. package/dist/modules/auth/components/login-page.client.d.ts +1 -5
  143. package/dist/modules/auth/components/login-page.client.d.ts.map +1 -1
  144. package/dist/modules/auth/components/login-page.client.js +41 -31
  145. package/dist/modules/auth/components/login-page.client.js.map +1 -1
  146. package/dist/modules/auth/components/reset-password-page.client.js +3 -3
  147. package/dist/modules/auth/components/update-password-command.d.ts +1 -1
  148. package/dist/modules/auth/components/update-password-command.js +1 -1
  149. package/dist/modules/auth/handler/client.client.d.ts +48 -48
  150. package/dist/modules/auth/handler/client.client.d.ts.map +1 -1
  151. package/dist/modules/auth/handler/proxy.server.d.ts +13 -0
  152. package/dist/modules/auth/handler/proxy.server.d.ts.map +1 -0
  153. package/dist/modules/auth/handler/proxy.server.js +22 -0
  154. package/dist/modules/auth/handler/proxy.server.js.map +1 -0
  155. package/dist/modules/auth/handler/server.server.js +3 -1
  156. package/dist/modules/auth/handler/server.server.js.map +1 -1
  157. package/dist/modules/auth/hooks/use-permission.d.ts +26 -0
  158. package/dist/modules/auth/hooks/use-permission.d.ts.map +1 -0
  159. package/dist/modules/auth/hooks/{use-permission.client.js → use-permission.js} +5 -3
  160. package/dist/modules/auth/hooks/use-permission.js.map +1 -0
  161. package/dist/modules/auth/hooks/use-session.d.ts +34 -0
  162. package/dist/modules/auth/hooks/use-session.d.ts.map +1 -0
  163. package/dist/modules/auth/hooks/use-session.js +21 -0
  164. package/dist/modules/auth/hooks/use-session.js.map +1 -0
  165. package/dist/modules/auth/lib/helpers.server.d.ts +2 -2
  166. package/dist/modules/auth/lib/helpers.server.d.ts.map +1 -1
  167. package/dist/modules/auth/lib/helpers.server.js +3 -6
  168. package/dist/modules/auth/lib/helpers.server.js.map +1 -1
  169. package/dist/modules/auth/lib/validators.d.ts +4 -4
  170. package/dist/modules/auth/lib/validators.d.ts.map +1 -1
  171. package/dist/modules/auth/lib/validators.js +1 -1
  172. package/dist/modules/auth/lib/validators.js.map +1 -1
  173. package/dist/modules/commands/components/alert-dialog-command.client.d.ts +11 -11
  174. package/dist/modules/commands/components/alert-dialog-command.client.js +1 -1
  175. package/dist/modules/commands/components/click-command.client.d.ts +2 -2
  176. package/dist/modules/commands/components/command-trigger.client.d.ts +4 -4
  177. package/dist/modules/commands/components/command-trigger.client.js +1 -1
  178. package/dist/modules/commands/components/dialog-command.client.d.ts +8 -8
  179. package/dist/modules/commands/components/dialog-command.client.js +1 -1
  180. package/dist/modules/commands/components/dropdown-command.client.d.ts +5 -5
  181. package/dist/modules/commands/components/empty-command.client.d.ts +2 -2
  182. package/dist/modules/commands/components/form-dialog-command.client.d.ts +12 -12
  183. package/dist/modules/commands/components/form-dialog-command.client.js +1 -1
  184. package/dist/modules/commands/hooks/use-command-action.client.js +1 -1
  185. package/dist/modules/commands/hooks/use-command-menu.client.js +1 -1
  186. package/dist/modules/commands/hooks/use-command-menu.client.js.map +1 -1
  187. package/dist/modules/commands/menus/context-menu.client.d.ts +2 -2
  188. package/dist/modules/commands/menus/dropdown-menu.client.d.ts +8 -4
  189. package/dist/modules/commands/menus/dropdown-menu.client.d.ts.map +1 -1
  190. package/dist/modules/commands/menus/dropdown-menu.client.js +9 -1
  191. package/dist/modules/commands/menus/dropdown-menu.client.js.map +1 -1
  192. package/dist/modules/commands/menus/inline-menu.client.d.ts +8 -4
  193. package/dist/modules/commands/menus/inline-menu.client.d.ts.map +1 -1
  194. package/dist/modules/commands/menus/inline-menu.client.js +12 -1
  195. package/dist/modules/commands/menus/inline-menu.client.js.map +1 -1
  196. package/dist/modules/commands/menus/responsive-menu.client.d.ts +2 -1
  197. package/dist/modules/commands/menus/responsive-menu.client.d.ts.map +1 -1
  198. package/dist/modules/commands/menus/responsive-menu.client.js +6 -3
  199. package/dist/modules/commands/menus/responsive-menu.client.js.map +1 -1
  200. package/dist/modules/commands/utils/archive-command.client.d.ts +3 -3
  201. package/dist/modules/commands/utils/delete-command.client.d.ts +2 -2
  202. package/dist/modules/commands/utils/send-mail-command.client.d.ts +2 -2
  203. package/dist/modules/commands/utils/send-mail-command.client.d.ts.map +1 -1
  204. package/dist/modules/commands/utils/send-mail-command.client.js +3 -3
  205. package/dist/modules/config/db/helpers.d.ts +5 -5
  206. package/dist/modules/config/db/helpers.d.ts.map +1 -1
  207. package/dist/modules/config/lib/config.server.d.ts +0 -2
  208. package/dist/modules/config/lib/config.server.d.ts.map +1 -1
  209. package/dist/modules/config/lib/config.server.js.map +1 -1
  210. package/dist/modules/config/lib/resolve.server.d.ts +192 -190
  211. package/dist/modules/config/lib/resolve.server.d.ts.map +1 -1
  212. package/dist/modules/config/paths/helpers.d.ts +11 -0
  213. package/dist/modules/config/paths/helpers.d.ts.map +1 -0
  214. package/dist/modules/config/paths/helpers.js +9 -0
  215. package/dist/modules/config/paths/helpers.js.map +1 -0
  216. package/dist/modules/config/paths/types.d.ts +8 -37
  217. package/dist/modules/config/paths/types.d.ts.map +1 -1
  218. package/dist/modules/config/router/client.server.d.ts +4 -4
  219. package/dist/modules/config/router/client.server.d.ts.map +1 -1
  220. package/dist/modules/config/router/context.server.d.ts +194 -192
  221. package/dist/modules/config/router/context.server.d.ts.map +1 -1
  222. package/dist/modules/config/router/init.server.d.ts +200 -198
  223. package/dist/modules/config/router/init.server.d.ts.map +1 -1
  224. package/dist/modules/data-tables/components/cell/common.client.d.ts +5 -5
  225. package/dist/modules/data-tables/components/cell/common.client.d.ts.map +1 -1
  226. package/dist/modules/data-tables/components/column-header.d.ts +2 -2
  227. package/dist/modules/data-tables/components/filters/combobox.client.d.ts +2 -2
  228. package/dist/modules/data-tables/components/filters/combobox.client.d.ts.map +1 -1
  229. package/dist/modules/data-tables/components/filters/combobox.client.js +1 -1
  230. package/dist/modules/data-tables/components/filters/combobox.client.js.map +1 -1
  231. package/dist/modules/data-tables/components/filters/slider.client.d.ts +2 -2
  232. package/dist/modules/data-tables/components/filters/slider.client.d.ts.map +1 -1
  233. package/dist/modules/data-tables/components/header.d.ts +4 -4
  234. package/dist/modules/data-tables/components/layout.d.ts +2 -2
  235. package/dist/modules/data-tables/components/search-input.client.d.ts +2 -2
  236. package/dist/modules/data-tables/components/search-input.client.d.ts.map +1 -1
  237. package/dist/modules/data-tables/components/skeleton.d.ts +2 -2
  238. package/dist/modules/data-tables/components/table.d.ts +7 -7
  239. package/dist/modules/data-tables/components/toolbar.d.ts +3 -3
  240. package/dist/modules/data-tables/hooks/use-context.client.d.ts +2 -2
  241. package/dist/modules/data-tables/hooks/use-context.client.d.ts.map +1 -1
  242. package/dist/modules/data-tables/lib/filters/resolvers.d.ts +1 -1
  243. package/dist/modules/data-tables/lib/filters/resolvers.d.ts.map +1 -1
  244. package/dist/modules/data-tables/lib/search-params.d.ts +5 -5
  245. package/dist/modules/data-tables/lib/search-params.d.ts.map +1 -1
  246. package/dist/modules/data-tables/lib/types.d.ts +1 -1
  247. package/dist/modules/data-tables/tables/data-table/components/table.d.ts +2 -2
  248. package/dist/modules/data-tables/tables/inline-table/components/cells/common.d.ts +2 -2
  249. package/dist/modules/data-tables/tables/inline-table/components/cells/common.d.ts.map +1 -1
  250. package/dist/modules/data-tables/tables/inline-table/components/inputs/advanced-select.client.d.ts +2 -2
  251. package/dist/modules/data-tables/tables/inline-table/components/inputs/advanced-select.client.d.ts.map +1 -1
  252. package/dist/modules/data-tables/tables/inline-table/components/inputs/combobox.client.d.ts +2 -2
  253. package/dist/modules/data-tables/tables/inline-table/components/inputs/input.client.d.ts +3 -3
  254. package/dist/modules/data-tables/tables/inline-table/components/inputs/read-only.d.ts +2 -2
  255. package/dist/modules/data-tables/tables/inline-table/components/inputs/select.client.d.ts +2 -2
  256. package/dist/modules/data-tables/tables/inline-table/components/table.d.ts +2 -2
  257. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.ts +2 -2
  258. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.js +1 -1
  259. package/dist/modules/data-tables/tables/inline-table/hooks/use-input.client.js +1 -1
  260. package/dist/modules/data-tables/tables/inline-table/hooks/use-input.client.js.map +1 -1
  261. package/dist/modules/inline-edit/components/combobox-dropdown.client.d.ts +2 -2
  262. package/dist/modules/inline-edit/components/combobox-dropdown.client.d.ts.map +1 -1
  263. package/dist/modules/inline-edit/components/combobox.client.d.ts +2 -2
  264. package/dist/modules/inline-edit/components/combobox.client.d.ts.map +1 -1
  265. package/dist/modules/inline-edit/components/date-input.client.d.ts +2 -2
  266. package/dist/modules/inline-edit/components/date-input.client.js +1 -1
  267. package/dist/modules/inline-edit/components/date-picker.client.d.ts +2 -2
  268. package/dist/modules/inline-edit/components/editor.client.d.ts +2 -2
  269. package/dist/modules/inline-edit/components/input-toggle.client.d.ts +2 -2
  270. package/dist/modules/inline-edit/components/input.client.d.ts +3 -3
  271. package/dist/modules/inline-edit/components/richtext.client.d.ts +2 -2
  272. package/dist/modules/inline-edit/components/select.client.d.ts +6 -6
  273. package/dist/modules/inline-edit/components/switch.client.d.ts +2 -2
  274. package/dist/modules/inline-edit/components/toggle.client.d.ts +2 -2
  275. package/dist/modules/inline-edit/hooks/context.client.d.ts +2 -2
  276. package/dist/modules/inline-edit/hooks/use-inline.client.js +1 -1
  277. package/dist/modules/inline-edit/hooks/use-inline.client.js.map +1 -1
  278. package/dist/modules/uploads/components/button.client.d.ts +2 -2
  279. package/dist/modules/uploads/components/button.client.d.ts.map +1 -1
  280. package/dist/modules/uploads/components/images/grid.client.d.ts +2 -2
  281. package/dist/modules/uploads/components/images/grid.client.d.ts.map +1 -1
  282. package/dist/modules/uploads/components/images/grid.client.js +1 -1
  283. package/dist/modules/uploads/components/images/input.client.d.ts +2 -2
  284. package/dist/modules/uploads/components/images/input.client.d.ts.map +1 -1
  285. package/dist/modules/uploads/components/preview-dialog.client.d.ts +2 -2
  286. package/dist/modules/uploads/components/preview-dialog.client.d.ts.map +1 -1
  287. package/dist/modules/uploads/components/zone.client.d.ts +2 -2
  288. package/dist/modules/uploads/components/zone.client.d.ts.map +1 -1
  289. package/dist/modules/uploads/hooks/use-upload-image.client.js +1 -1
  290. package/dist/modules/uploads/lib/proxy.server.d.ts +1 -1
  291. package/dist/modules/uploads/lib/proxy.server.js +4 -4
  292. package/dist/modules/uploads/lib/route.server.d.ts +1 -1
  293. package/dist/modules/uploads/lib/route.server.js +2 -2
  294. package/dist/modules/uploads/lib/router.server.d.ts +965 -965
  295. package/dist/modules/uploads/lib/router.server.d.ts.map +1 -1
  296. package/dist/modules/uploads/lib/router.server.js +2 -2
  297. package/dist/modules/uploads/lib/schema.d.ts +61 -61
  298. package/dist/modules/uploads/lib/validators.d.ts +56 -56
  299. package/dist/modules/uploads/lib/validators.d.ts.map +1 -1
  300. package/package.json +5 -4
  301. package/src/components/common/icons.tsx +6 -0
  302. package/src/components/entry.client.ts +6 -0
  303. package/src/components/entry.server.ts +1 -1
  304. package/src/components/entry.ts +1 -0
  305. package/src/components/header/bottom-bar.client.tsx +2 -2
  306. package/src/components/layouts/admin-layout.tsx +13 -0
  307. package/src/components/layouts/admin-loading.tsx +1 -1
  308. package/src/components/layouts/not-found-page.tsx +9 -1
  309. package/src/components/layouts/not-found-section.tsx +10 -5
  310. package/src/components/layouts/root-loading.tsx +9 -0
  311. package/src/components/{layouts → navigation}/admin-sidebar-header.client.tsx +11 -6
  312. package/src/components/navigation/admin-sidebar-paths.client.tsx +190 -0
  313. package/src/components/navigation/admin-sidebar-skeleton.tsx +44 -0
  314. package/src/components/navigation/admin-sidebar.client.tsx +123 -0
  315. package/src/components/ui/spinner.tsx +51 -0
  316. package/src/modules/auth/components/allowed.client.tsx +1 -1
  317. package/src/modules/auth/components/auth-layout.server.tsx +2 -10
  318. package/src/modules/auth/components/auth-loading.tsx +11 -0
  319. package/src/modules/auth/components/guard.client.tsx +12 -0
  320. package/src/modules/auth/components/login-page.client.tsx +45 -37
  321. package/src/modules/auth/entry.client.ts +2 -0
  322. package/src/modules/auth/entry.server.ts +1 -1
  323. package/src/modules/auth/entry.ts +1 -0
  324. package/src/modules/auth/handler/proxy.server.ts +28 -0
  325. package/src/modules/auth/handler/server.server.ts +5 -0
  326. package/src/modules/auth/hooks/{use-permission.client.ts → use-permission.ts} +4 -2
  327. package/src/modules/auth/hooks/use-session.ts +18 -0
  328. package/src/modules/auth/lib/helpers.server.ts +1 -5
  329. package/src/modules/auth/lib/validators.ts +1 -1
  330. package/src/modules/commands/hooks/use-command-menu.client.tsx +6 -7
  331. package/src/modules/commands/menus/dropdown-menu.client.tsx +11 -2
  332. package/src/modules/commands/menus/inline-menu.client.tsx +14 -1
  333. package/src/modules/commands/menus/responsive-menu.client.tsx +11 -2
  334. package/src/modules/config/entry.server.ts +1 -2
  335. package/src/modules/config/entry.ts +3 -0
  336. package/src/modules/config/lib/config.server.ts +1 -2
  337. package/src/modules/config/lib/router.server.ts +64 -0
  338. package/src/modules/config/paths/helpers.ts +6 -0
  339. package/src/modules/config/paths/types.ts +26 -38
  340. package/src/modules/data-tables/components/filters/combobox.client.tsx +1 -1
  341. package/src/modules/data-tables/tables/inline-table/hooks/use-input.client.ts +1 -1
  342. package/src/modules/inline-edit/hooks/use-inline.client.tsx +1 -1
  343. package/dist/components/layouts/admin-layout.server.d.ts +0 -14
  344. package/dist/components/layouts/admin-layout.server.d.ts.map +0 -1
  345. package/dist/components/layouts/admin-layout.server.js +0 -26
  346. package/dist/components/layouts/admin-layout.server.js.map +0 -1
  347. package/dist/components/layouts/admin-sidebar-context.client.js +0 -28
  348. package/dist/components/layouts/admin-sidebar-context.client.js.map +0 -1
  349. package/dist/components/layouts/admin-sidebar-header.client.js.map +0 -1
  350. package/dist/components/layouts/admin-sidebar.client.js +0 -51
  351. package/dist/components/layouts/admin-sidebar.client.js.map +0 -1
  352. package/dist/modules/auth/components/allowed.server.d.ts +0 -23
  353. package/dist/modules/auth/components/allowed.server.d.ts.map +0 -1
  354. package/dist/modules/auth/components/allowed.server.js +0 -24
  355. package/dist/modules/auth/components/allowed.server.js.map +0 -1
  356. package/dist/modules/auth/hooks/use-permission.client.js.map +0 -1
  357. package/dist/modules/config/paths/create.server.d.ts +0 -14
  358. package/dist/modules/config/paths/create.server.d.ts.map +0 -1
  359. package/dist/modules/config/paths/create.server.js +0 -12
  360. package/dist/modules/config/paths/create.server.js.map +0 -1
  361. package/dist/modules/config/paths/get.server.js +0 -47
  362. package/dist/modules/config/paths/get.server.js.map +0 -1
  363. package/src/components/layouts/admin-layout.server.tsx +0 -31
  364. package/src/components/layouts/admin-sidebar-context.client.tsx +0 -34
  365. package/src/components/layouts/admin-sidebar.client.tsx +0 -88
  366. package/src/modules/auth/components/allowed.server.tsx +0 -41
  367. package/src/modules/config/paths/create.server.ts +0 -10
  368. package/src/modules/config/paths/get.server.ts +0 -69
@@ -10,6 +10,8 @@ import { nextCookies } from "better-auth/next-js";
10
10
  import { admin, emailOTP } from "better-auth/plugins";
11
11
  import { Resend } from "resend";
12
12
 
13
+ export const authCookiePrefix = "tulip";
14
+
13
15
  type CreateServerAuthParams<TSchema extends TDatabaseSchema> = Pick<
14
16
  TulipConfig<TSchema>,
15
17
  "email" | "auth"
@@ -23,6 +25,9 @@ export const createServerAuth = <TSchema extends TDatabaseSchema>(
23
25
  config: CreateServerAuthParams<TSchema>,
24
26
  ) =>
25
27
  betterAuth({
28
+ advanced: {
29
+ cookiePrefix: authCookiePrefix,
30
+ },
26
31
  database: drizzleAdapter(config.db, {
27
32
  provider: "pg",
28
33
  schema: config.schema,
@@ -4,11 +4,14 @@ import { useSuspenseQueries } from "@tanstack/react-query";
4
4
  import { LiteralString } from "better-auth";
5
5
  import { authClient } from "../handler/client.client";
6
6
  import { type Permission } from "../lib/permissions";
7
+ import { useSession } from "./use-session";
7
8
 
8
9
  /**
9
10
  * UsePermission
10
11
  */
11
12
  export function usePermission(permission?: Permission) {
13
+ const sessionQuery = useSession();
14
+
12
15
  const keys = Object.entries(permission ?? {}).flatMap(([resource, permissions]) =>
13
16
  permissions.map((permission) => [resource, permission] as const),
14
17
  );
@@ -20,8 +23,7 @@ export function usePermission(permission?: Permission) {
20
23
  const resource = key[0]?.toString() as string;
21
24
  const permission: Permission = { [resource]: [key[1]] as LiteralString[] };
22
25
 
23
- const session = await authClient.getSession();
24
- const userId = session.data?.user.id;
26
+ const userId = sessionQuery.data?.user.id;
25
27
 
26
28
  const { data, error } = await authClient.admin.hasPermission({ permission, userId });
27
29
  if (error) {
@@ -0,0 +1,18 @@
1
+ "use client";
2
+
3
+ import { useSuspenseQuery } from "@tanstack/react-query";
4
+ import { authClient } from "../entry.client";
5
+
6
+ export function useSession() {
7
+ const session = useSuspenseQuery({
8
+ queryKey: ["session"],
9
+ queryFn: async () => {
10
+ const session = await authClient.getSession();
11
+ if (session.error) throw session.error;
12
+
13
+ return session.data;
14
+ },
15
+ });
16
+
17
+ return session;
18
+ }
@@ -5,7 +5,6 @@ import { GetTulipReturn } from "@/modules/config/lib/resolve.server";
5
5
  import { ServerError } from "@/modules/config/router/error.server";
6
6
  import { eq } from "drizzle-orm";
7
7
  import { headers } from "next/headers";
8
- import { redirect } from "next/navigation";
9
8
  import { users } from "../entry";
10
9
  import { CreateUserSchema, UpdateUserSchema } from "./validators";
11
10
 
@@ -15,10 +14,7 @@ import { CreateUserSchema, UpdateUserSchema } from "./validators";
15
14
  export async function getSession<TSchema extends TDatabaseSchema>({
16
15
  auth,
17
16
  }: Pick<GetTulipReturn<TSchema>, "auth">) {
18
- const session = await auth.api.getSession({ headers: await headers() });
19
- if (!session) redirect("/auth/login");
20
-
21
- return session;
17
+ return auth.api.getSession({ headers: await headers() });
22
18
  }
23
19
 
24
20
  /**
@@ -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().default("user"),
68
68
  });
69
69
 
70
70
  export type CreateUserSchema = z.infer<typeof createUserSchema>;
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { Permission } from "@/modules/auth/entry";
4
- import { usePermission } from "@/modules/auth/hooks/use-permission.client";
4
+ import { usePermission } from "@/modules/auth/hooks/use-permission";
5
5
  import { mergePermissions } from "@/modules/auth/lib/utils";
6
6
  import {
7
7
  type BulkCommandDefRenderParams,
@@ -119,12 +119,11 @@ export function useSingleCommandMenu<TData, TMeta>({
119
119
  usePermission(mergePermissions(permissions));
120
120
 
121
121
  // filter out commands that don't have valid conditions
122
- const validCommands = commands
123
- .filter((command) =>
124
- command.mode === "single"
125
- ? validateSingleCommand({ data, command })
126
- : validateBulkCommand({ data: [data], command }),
127
- );
122
+ const validCommands = commands.filter((command) =>
123
+ command.mode === "single"
124
+ ? validateSingleCommand({ data, command })
125
+ : validateBulkCommand({ data: [data], command }),
126
+ );
128
127
 
129
128
  function renderCommand(command: (typeof validCommands)[number]) {
130
129
  return command.mode === "single"
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
 
3
+ import { Skeleton } from "@/components/entry";
3
4
  import { Button } from "@/components/ui/button";
4
5
  import {
5
6
  DropdownMenu,
@@ -8,10 +9,10 @@ import {
8
9
  } from "@/components/ui/dropdown-menu";
9
10
  import { cn } from "@/lib/utils/cn";
10
11
  import { MoreHorizontal } from "lucide-react";
11
- import React from "react";
12
+ import React, { ComponentProps } from "react";
13
+ import { RenderCommand } from "../components/render-command";
12
14
  import { CommandContextProvider } from "../hooks/context.client";
13
15
  import { SingleCommandMenuProps, useSingleCommandMenu } from "../hooks/use-command-menu.client";
14
- import { RenderCommand } from "../components/render-command";
15
16
 
16
17
  export function DropdownCommandMenu<TData, TMeta>({
17
18
  data,
@@ -48,3 +49,11 @@ export function DropdownCommandMenu<TData, TMeta>({
48
49
  </DropdownMenu>
49
50
  );
50
51
  }
52
+
53
+ export function DropdownCommandMenuLoading({ className, ...props }: ComponentProps<"div">) {
54
+ return (
55
+ <div {...props} className={cn("flex w-fit items-center", className)}>
56
+ <Skeleton className="h-8 w-8" />
57
+ </div>
58
+ );
59
+ }
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
+ import { Skeleton } from "@/components/entry";
3
4
  import { cn } from "@/lib/utils/cn";
4
- import React from "react";
5
+ import React, { ComponentProps } from "react";
5
6
  import { RenderCommand } from "../components/render-command";
6
7
  import { CommandContextProvider } from "../hooks/context.client";
7
8
  import { SingleCommandMenuProps, useSingleCommandMenu } from "../hooks/use-command-menu.client";
@@ -32,3 +33,15 @@ export function InlineCommandMenu<TData, TMeta>({
32
33
  </div>
33
34
  );
34
35
  }
36
+
37
+ export function InlineCommandMenuLoading({ className, ...props }: ComponentProps<"div">) {
38
+ return (
39
+ <div {...props} className={cn("flex w-fit items-center", className)}>
40
+ <div className="flex gap-2">
41
+ {Array.from({ length: 3 }).map((_, index) => (
42
+ <Skeleton key={index} className="h-8 w-8" />
43
+ ))}
44
+ </div>
45
+ </div>
46
+ );
47
+ }
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
 
3
3
  import { SingleCommandMenuProps } from "../hooks/use-command-menu.client";
4
- import { DropdownCommandMenu } from "./dropdown-menu.client";
5
- import { InlineCommandMenu } from "./inline-menu.client";
4
+ import { DropdownCommandMenu, DropdownCommandMenuLoading } from "./dropdown-menu.client";
5
+ import { InlineCommandMenu, InlineCommandMenuLoading } from "./inline-menu.client";
6
6
 
7
7
  type ResponsiveCommandMenuProps<TData, TMeta> = SingleCommandMenuProps<TData, TMeta>;
8
8
 
@@ -16,3 +16,12 @@ export function ResponsiveCommandMenu<TData, TMeta>(
16
16
  </>
17
17
  );
18
18
  }
19
+
20
+ export function ResponsiveCommandMenuLoading() {
21
+ return (
22
+ <>
23
+ <InlineCommandMenuLoading className="hidden xl:flex" />
24
+ <DropdownCommandMenuLoading className="xl:hidden" />
25
+ </>
26
+ );
27
+ }
@@ -3,12 +3,11 @@
3
3
  */
4
4
  export * from "./lib/config.server";
5
5
  export * from "./lib/resolve.server";
6
- export * from "./paths/create.server";
7
6
 
8
7
  /**
9
8
  * Router
10
9
  */
10
+ export * from "./router/client.server";
11
11
  export * from "./router/context.server";
12
12
  export * from "./router/error.server";
13
13
  export * from "./router/init.server";
14
- export * from "./router/client.server";
@@ -1,5 +1,8 @@
1
1
  export * from "./db/helpers";
2
2
  export * from "./db/types";
3
+
4
+ export * from "./paths/helpers";
3
5
  export * from "./paths/types";
6
+
4
7
  export * from "./router/client";
5
8
  export * from "./router/validators";
@@ -3,14 +3,13 @@ import "server-cli-only";
3
3
  import { createAccessControl, Role } from "@/modules/auth/lib/permissions";
4
4
  import { TDatabaseSchema } from "@/modules/config/db/types";
5
5
  import { S3ClientConfig } from "@aws-sdk/client-s3";
6
- import { PathConfig } from "../paths/types";
7
6
 
8
7
  export type TulipConfig<TSchema extends TDatabaseSchema> = {
9
8
  general: {
10
9
  name: string;
11
10
  shortName: string;
12
11
  };
13
- paths: PathConfig<TSchema>;
12
+ // paths: PathConfig;
14
13
  database: {
15
14
  schema: TSchema;
16
15
  pool: {
@@ -0,0 +1,64 @@
1
+ // import { initRPC } from "../entry.server";
2
+
3
+ // export function createBaseRouter() {
4
+ // const { protectedProcedure } = initRPC();
5
+
6
+ // return {
7
+ // /**
8
+ // * Get paths
9
+ // */
10
+ // getPaths: protectedProcedure.handler(async ({ context }) => {
11
+ // /**
12
+ // * Initialise the paths by executing the path functions
13
+ // */
14
+ // const resolvedPaths = await Promise.all(
15
+ // context.paths.map(async (group) => {
16
+ // /**
17
+ // * Initialise the path by executing the path function
18
+ // */
19
+ // const initialisedPaths = await Promise.all(group.items.map((path) => path()));
20
+
21
+ // /**
22
+ // * Filter out paths that the user doesn't have permission for
23
+ // */
24
+ // const validatedPaths = await Promise.all(
25
+ // initialisedPaths.map(async (path) => {
26
+ // if (!path.permission) return path;
27
+
28
+ // const hasPermission = await context.auth.api.userHasPermission({
29
+ // body: {
30
+ // permission: path.permission,
31
+ // userId: context.session.user?.id,
32
+ // },
33
+ // });
34
+ // if (!hasPermission.success) return null;
35
+
36
+ // return path;
37
+ // }),
38
+ // );
39
+
40
+ // // /**
41
+ // // * Resolve the icon component
42
+ // // */
43
+ // // const resolvedPaths = validatedPaths
44
+ // // .filter((path) => !!path)
45
+ // // .map((path) => {
46
+ // // return {
47
+ // // ...path,
48
+ // // icon: path.icon ? createElement(path.icon) : undefined,
49
+ // // };
50
+ // // });
51
+
52
+ // const items = validatedPaths.filter((path) => !!path);
53
+
54
+ // return { ...group, items };
55
+ // }),
56
+ // );
57
+
58
+ // /**
59
+ // * Filter out empty groups
60
+ // */
61
+ // return resolvedPaths.filter((group) => group.items.length > 0);
62
+ // }),
63
+ // };
64
+ // }
@@ -0,0 +1,6 @@
1
+ import { Paths } from "./types";
2
+
3
+ /**
4
+ * Create the paths object
5
+ */
6
+ export const createPaths = (paths: Paths) => paths;
@@ -1,27 +1,26 @@
1
1
  import { type Permission } from "@/modules/auth/lib/permissions";
2
- import { type LucideIcon } from "lucide-react";
2
+ import { LucideIcon } from "lucide-react";
3
3
  import { type Route } from "next";
4
- import { type TDatabaseSchema } from "../db/types";
5
4
 
6
5
  /**
7
- * Path input type
6
+ * Path types
8
7
  */
9
- export type PathGroupInput<TSchema extends TDatabaseSchema> = {
8
+ export type PathGroup = {
10
9
  name?: string;
11
- items: ((config: {}) => Promise<PathInput>)[];
10
+ items: Path[];
12
11
  };
13
12
 
14
- export type PathInput = {
13
+ export type Path = {
15
14
  name: string;
16
15
  href: Route;
17
16
  icon?: LucideIcon;
18
17
  segment?: string;
19
18
  permission?: Permission;
20
19
  isActive?: boolean;
21
- items?: PathSubItemInput[];
20
+ items?: PathSubItem[];
22
21
  };
23
22
 
24
- export type PathSubItemInput = {
23
+ export type PathSubItem = {
25
24
  name: string;
26
25
  href: Route;
27
26
  segment?: string;
@@ -29,36 +28,25 @@ export type PathSubItemInput = {
29
28
  isActive?: boolean;
30
29
  };
31
30
 
32
- /**
33
- * Path output type
34
- */
35
- export type PathGroupOutput = {
36
- name?: string;
37
- items: PathOutput[];
38
- };
31
+ export type Paths = PathGroup[];
39
32
 
40
- export type PathOutput = {
41
- name: string;
42
- href: Route;
43
- icon?: React.JSX.Element;
44
- segment?: string;
45
- isActive?: boolean;
46
- items?: PathSubItemOutput[];
47
- };
48
-
49
- export type PathSubItemOutput = {
50
- name: string;
51
- href: Route;
52
- segment?: string;
53
- isActive?: boolean;
54
- };
55
33
 
56
34
  /**
57
- * Path config type
58
- */
59
- export type PathConfig<TSchema extends TDatabaseSchema> = PathGroupInput<TSchema>[];
60
-
61
- /**
62
- * Path result type
63
- */
64
- export type PathResult = PathGroupOutput[];
35
+ * <PathGroup>
36
+ * <PathGroupTitle>{name}</PathGroupTitle>
37
+ *
38
+ * <PathGroupItems>
39
+ <Path href="/" segment="admin" permission="admin" isActive>
40
+ <PathIcon><Icon /></PathIcon>
41
+ <PathTitle>{name}</PathTitle>
42
+
43
+ <PathItems>
44
+ <PathSubItem href="/" segment="admin" permission="admin" isActive>
45
+ <PathSubItemIcon><Icon /></PathSubItemIcon>
46
+ <PathSubItemTitle>{name}</PathSubItemTitle>
47
+ </PathSubItem>
48
+ </PathItems>
49
+ </Path>
50
+ * </PathGroupItems>
51
+ * </PathGroup>
52
+ */
@@ -119,7 +119,7 @@ export function TableFilterCombobox<TValue extends string>({
119
119
  <span>{option.label}</span>
120
120
  </div>
121
121
 
122
- {option.total != undefined && (
122
+ {option.total !== undefined && (
123
123
  <span className="text-muted-foreground/50 size-4 justify-self-end font-mono text-xs">
124
124
  {option.total}
125
125
  </span>
@@ -2,7 +2,7 @@ import "client-only";
2
2
 
3
3
  import { useAction } from "@/lib/hooks/use-action";
4
4
  import { Permission } from "@/modules/auth/entry";
5
- import { usePermission } from "@/modules/auth/hooks/use-permission.client";
5
+ import { usePermission } from "@/modules/auth/hooks/use-permission";
6
6
  import { InlineEditSchema } from "@/modules/inline-edit/entry";
7
7
  import { type CellContext } from "@tanstack/react-table";
8
8
  import { useEffect, useState } from "react";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { useAction } from "@/lib/hooks/use-action";
4
- import { usePermission } from "@/modules/auth/hooks/use-permission.client";
4
+ import { usePermission } from "@/modules/auth/hooks/use-permission";
5
5
  import { Permission } from "@/modules/auth/lib/permissions";
6
6
  import { JSONContent } from "@tiptap/react";
7
7
  import { useState } from "react";
@@ -1,14 +0,0 @@
1
- import { TDatabaseSchema } from "../../modules/config/db/types.js";
2
- import { GetTulipParams } from "../../modules/config/lib/resolve.server.js";
3
- import * as react_jsx_runtime106 from "react/jsx-runtime";
4
- import { PropsWithChildren } from "react";
5
- import "server-cli-only";
6
-
7
- //#region src/components/layouts/admin-layout.server.d.ts
8
- declare function AdminLayout<TSchema extends TDatabaseSchema>({
9
- config,
10
- children
11
- }: PropsWithChildren<GetTulipParams<TSchema>>): Promise<react_jsx_runtime106.JSX.Element>;
12
- //#endregion
13
- export { AdminLayout };
14
- //# sourceMappingURL=admin-layout.server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin-layout.server.d.ts","names":[],"sources":["../../../src/components/layouts/admin-layout.server.tsx"],"sourcesContent":[],"mappings":";;;;;;;iBAWsB,4BAA4B;;;GAG/C,kBAAkB,eAAe,YAAS,QAAA,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,26 +0,0 @@
1
- import { getSession } from "../../modules/auth/lib/helpers.server.js";
2
- import { getTulip } from "../../modules/config/lib/resolve.server.js";
3
- import { getPaths } from "../../modules/config/paths/get.server.js";
4
- import { AdminContent } from "./admin-content.client.js";
5
- import { AdminSidebarProvider } from "./admin-sidebar-context.client.js";
6
- import { AdminSidebar } from "./admin-sidebar.client.js";
7
- import { jsx, jsxs } from "react/jsx-runtime";
8
- import "server-cli-only";
9
-
10
- //#region src/components/layouts/admin-layout.server.tsx
11
- async function AdminLayout({ config, children }) {
12
- const tulip = await getTulip({ config });
13
- const session = await getSession(tulip);
14
- return /* @__PURE__ */ jsxs(AdminSidebarProvider, {
15
- value: {
16
- paths: await getPaths(tulip),
17
- session
18
- },
19
- className: "max-h-[100dvh] overflow-hidden border",
20
- children: [/* @__PURE__ */ jsx(AdminSidebar, {}), /* @__PURE__ */ jsx(AdminContent, { children })]
21
- });
22
- }
23
-
24
- //#endregion
25
- export { AdminLayout };
26
- //# sourceMappingURL=admin-layout.server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin-layout.server.js","names":[],"sources":["../../../src/components/layouts/admin-layout.server.tsx"],"sourcesContent":["import \"server-cli-only\";\n\nimport { getSession } from \"@/modules/auth/lib/helpers.server\";\nimport { TDatabaseSchema } from \"@/modules/config/db/types\";\nimport { getTulip, GetTulipParams } from \"@/modules/config/lib/resolve.server\";\nimport { getPaths } from \"@/modules/config/paths/get.server\";\nimport { PropsWithChildren } from \"react\";\nimport { AdminContent } from \"./admin-content.client\";\nimport { AdminSidebarProvider } from \"./admin-sidebar-context.client\";\nimport { AdminSidebar } from \"./admin-sidebar.client\";\n\nexport async function AdminLayout<TSchema extends TDatabaseSchema>({\n config,\n children,\n}: PropsWithChildren<GetTulipParams<TSchema>>) {\n const tulip = await getTulip({ config });\n const session = await getSession(tulip);\n\n const paths = await getPaths(tulip);\n\n return (\n <AdminSidebarProvider\n value={{ paths, session }}\n className=\"max-h-[100dvh] overflow-hidden border\"\n >\n <AdminSidebar />\n\n <AdminContent>{children}</AdminContent>\n </AdminSidebarProvider>\n );\n}\n"],"mappings":";;;;;;;;;;AAWA,eAAsB,YAA6C,EACjE,QACA,YAC6C;CAC7C,MAAM,QAAQ,MAAM,SAAS,EAAE,QAAQ,CAAC;CACxC,MAAM,UAAU,MAAM,WAAW,MAAM;AAIvC,QACE,qBAAC;EACC,OAAO;GAAE,OAJC,MAAM,SAAS,MAAM;GAIf;GAAS;EACzB,WAAU;aAEV,oBAAC,iBAAe,EAEhB,oBAAC,gBAAc,WAAwB;GAClB"}
@@ -1,28 +0,0 @@
1
- "use client";
2
-
3
-
4
- import { SidebarProvider } from "../ui/sidebar.client.js";
5
- import { jsx } from "react/jsx-runtime";
6
- import React from "react";
7
-
8
- //#region src/components/layouts/admin-sidebar-context.client.tsx
9
- /**
10
- * AdminSidebarContext
11
- */
12
- const AdminSidebarContext = React.createContext({});
13
- /**
14
- * AdminSidebarProvider
15
- */
16
- function AdminSidebarProvider({ value, children,...props }) {
17
- return /* @__PURE__ */ jsx(SidebarProvider, {
18
- ...props,
19
- children: /* @__PURE__ */ jsx(AdminSidebarContext.Provider, {
20
- value,
21
- children
22
- })
23
- });
24
- }
25
-
26
- //#endregion
27
- export { AdminSidebarContext, AdminSidebarProvider };
28
- //# sourceMappingURL=admin-sidebar-context.client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin-sidebar-context.client.js","names":[],"sources":["../../../src/components/layouts/admin-sidebar-context.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { ClientSession } from \"@/modules/auth/handler/client.client\";\nimport { PathResult } from \"@/modules/config/paths/types\";\nimport React from \"react\";\nimport { SidebarProvider } from \"../entry.client\";\n\n/**\n * AdminSidebarContextValue\n */\ntype AdminSidebarContextValue = {\n paths: PathResult;\n session: ClientSession;\n};\n\n/**\n * AdminSidebarContext\n */\nexport const AdminSidebarContext = React.createContext({} as AdminSidebarContextValue);\n\n/**\n * AdminSidebarProvider\n */\nexport function AdminSidebarProvider({\n value,\n children,\n ...props\n}: React.ComponentProps<typeof SidebarProvider> & { value: AdminSidebarContextValue }) {\n return (\n <SidebarProvider {...props}>\n <AdminSidebarContext.Provider value={value}>{children}</AdminSidebarContext.Provider>\n </SidebarProvider>\n );\n}\n"],"mappings":";;;;;;;;;;;AAkBA,MAAa,sBAAsB,MAAM,cAAc,EAAE,CAA6B;;;;AAKtF,SAAgB,qBAAqB,EACnC,OACA,SACA,GAAG,SACkF;AACrF,QACE,oBAAC;EAAgB,GAAI;YACnB,oBAAC,oBAAoB;GAAgB;GAAQ;IAAwC;GACrE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin-sidebar-header.client.js","names":[],"sources":["../../../src/components/layouts/admin-sidebar-header.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar.client\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { cn } from \"@/lib/utils/cn\";\nimport { authClient } from \"@/modules/auth/handler/client.client\";\nimport { ChevronsUpDownIcon, LaptopIcon, LogOutIcon, MoonIcon, SunIcon } from \"lucide-react\";\nimport { useTheme } from \"next-themes\";\nimport { useRouter } from \"next/navigation\";\nimport { useContext } from \"react\";\nimport { SidebarHeader, useSidebar } from \"../entry.client\";\nimport { AdminSidebarContext } from \"./admin-sidebar-context.client\";\n\nexport function AdminSidebarHeader() {\n const router = useRouter();\n const { theme, setTheme } = useTheme();\n\n const { setOpenMobile } = useSidebar();\n const { session } = useContext(AdminSidebarContext);\n\n return (\n <SidebarHeader>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" className=\"items-center justify-between py-3.5\">\n <div className=\"flex items-center gap-4\">\n <Avatar className=\"h-6 w-6 text-sm\">\n <AvatarImage src={session.user.image ?? undefined} alt={session.user.name} />\n <AvatarFallback>{session.user.name?.[0] ?? \"\"}</AvatarFallback>\n </Avatar>\n <span className=\"text-md text-muted-foreground font-bold\">{session.user.name}</span>\n </div>\n\n <ChevronsUpDownIcon className=\"text-muted-foreground h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent className=\"w-44\">\n <DropdownMenuSub>\n <DropdownMenuSubTrigger>\n <span>Thema</span>\n </DropdownMenuSubTrigger>\n\n <DropdownMenuSubContent>\n <DropdownMenuItem\n className={cn(theme === \"light\" && \"bg-secondary font-bold\")}\n onClick={() => setTheme(\"light\")}\n >\n <SunIcon className=\"mr-2 h-4 w-4\" />\n <span>Light</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n className={cn(theme === \"dark\" && \"bg-secondary font-bold\")}\n onClick={() => setTheme(\"dark\")}\n >\n <MoonIcon className=\"mr-2 h-4 w-4\" />\n <span>Dark</span>\n </DropdownMenuItem>\n\n <DropdownMenuItem\n className={cn(theme === \"system\" && \"bg-secondary font-bold\")}\n onClick={() => setTheme(\"system\")}\n >\n <LaptopIcon className=\"mr-2 h-4 w-4\" />\n <span>System</span>\n </DropdownMenuItem>\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n\n <DropdownMenuSeparator />\n\n <DropdownMenuItem\n onClick={() => {\n setOpenMobile(false);\n authClient.signOut({\n fetchOptions: { onSuccess: () => router.replace(\"/auth/login\") },\n });\n }}\n >\n <LogOutIcon className=\"mr-2 h-4 w-4\" />\n <span>Log out</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </SidebarHeader>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,SAAgB,qBAAqB;CACnC,MAAM,SAAS,WAAW;CAC1B,MAAM,EAAE,OAAO,aAAa,UAAU;CAEtC,MAAM,EAAE,kBAAkB,YAAY;CACtC,MAAM,EAAE,YAAY,WAAW,oBAAoB;AAEnD,QACE,oBAAC,2BACC,qBAAC,2BACC,oBAAC;EAAoB;YACnB,qBAAC;GAAO,SAAQ;GAAU,WAAU;cAClC,qBAAC;IAAI,WAAU;eACb,qBAAC;KAAO,WAAU;gBAChB,oBAAC;MAAY,KAAK,QAAQ,KAAK,SAAS;MAAW,KAAK,QAAQ,KAAK;OAAQ,EAC7E,oBAAC,4BAAgB,QAAQ,KAAK,OAAO,MAAM,KAAoB;MACxD,EACT,oBAAC;KAAK,WAAU;eAA2C,QAAQ,KAAK;MAAY;KAChF,EAEN,oBAAC,sBAAmB,WAAU,kCAAkC;IACzD;GACW,EAEtB,qBAAC;EAAoB,WAAU;;GAC7B,qBAAC,8BACC,oBAAC,oCACC,oBAAC,oBAAK,UAAY,GACK,EAEzB,qBAAC;IACC,qBAAC;KACC,WAAW,GAAG,UAAU,WAAW,yBAAyB;KAC5D,eAAe,SAAS,QAAQ;gBAEhC,oBAAC,WAAQ,WAAU,iBAAiB,EACpC,oBAAC,oBAAK,UAAY;MACD;IAEnB,qBAAC;KACC,WAAW,GAAG,UAAU,UAAU,yBAAyB;KAC3D,eAAe,SAAS,OAAO;gBAE/B,oBAAC,YAAS,WAAU,iBAAiB,EACrC,oBAAC,oBAAK,SAAW;MACA;IAEnB,qBAAC;KACC,WAAW,GAAG,UAAU,YAAY,yBAAyB;KAC7D,eAAe,SAAS,SAAS;gBAEjC,oBAAC,cAAW,WAAU,iBAAiB,EACvC,oBAAC,oBAAK,WAAa;MACF;OACI,IACT;GAElB,oBAAC,0BAAwB;GAEzB,qBAAC;IACC,eAAe;AACb,mBAAc,MAAM;AACpB,gBAAW,QAAQ,EACjB,cAAc,EAAE,iBAAiB,OAAO,QAAQ,cAAc,EAAE,EACjE,CAAC;;eAGJ,oBAAC,cAAW,WAAU,iBAAiB,EACvC,oBAAC,oBAAK,YAAc;KACH;;GACC,IACT,GACD"}
@@ -1,51 +0,0 @@
1
- "use client";
2
-
3
-
4
- import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarRail, useSidebar } from "../ui/sidebar.client.js";
5
- import { AdminSidebarContext } from "./admin-sidebar-context.client.js";
6
- import { AdminSidebarHeader } from "./admin-sidebar-header.client.js";
7
- import { jsx, jsxs } from "react/jsx-runtime";
8
- import * as React$1 from "react";
9
- import Link from "next/link";
10
- import { useSelectedLayoutSegments } from "next/navigation";
11
-
12
- //#region src/components/layouts/admin-sidebar.client.tsx
13
- /**
14
- * AdminSidebar
15
- */
16
- function AdminSidebar({ ...props }) {
17
- const currentSegments = useSelectedLayoutSegments();
18
- const { paths } = React$1.useContext(AdminSidebarContext);
19
- const { isMobile, toggleSidebar } = useSidebar();
20
- return /* @__PURE__ */ jsxs(Sidebar, {
21
- ...props,
22
- children: [
23
- /* @__PURE__ */ jsx(AdminSidebarHeader, {}),
24
- /* @__PURE__ */ jsx(SidebarContent, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: paths.map((group, index) => /* @__PURE__ */ jsxs(SidebarGroup, { children: [group.name && /* @__PURE__ */ jsx(SidebarGroupLabel, { children: group.name }), /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: group.items.map((item) => {
25
- const isActive = item.isActive || item.segment === currentSegments?.[0];
26
- return /* @__PURE__ */ jsxs(SidebarMenuItem, { children: [/* @__PURE__ */ jsx(SidebarMenuButton, {
27
- asChild: true,
28
- isActive,
29
- children: /* @__PURE__ */ jsxs(Link, {
30
- href: item.href,
31
- onClick: isMobile ? toggleSidebar : void 0,
32
- children: [item.icon, item.name]
33
- })
34
- }), isActive && !!item.items?.length && /* @__PURE__ */ jsx(SidebarMenuSub, { children: item.items.map((subItem) => /* @__PURE__ */ jsx(SidebarMenuSubItem, { children: /* @__PURE__ */ jsx(SidebarMenuSubButton, {
35
- asChild: true,
36
- isActive: subItem.segment === currentSegments?.[1],
37
- children: /* @__PURE__ */ jsx(Link, {
38
- href: subItem.href,
39
- onClick: isMobile ? toggleSidebar : void 0,
40
- children: subItem.name
41
- })
42
- }) }, subItem.name)) })] }, item.name);
43
- }) }) })] }, index)) }) }),
44
- /* @__PURE__ */ jsx(SidebarRail, {})
45
- ]
46
- });
47
- }
48
-
49
- //#endregion
50
- export { AdminSidebar };
51
- //# sourceMappingURL=admin-sidebar.client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin-sidebar.client.js","names":["React"],"sources":["../../../src/components/layouts/admin-sidebar.client.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarRail,\n useSidebar,\n} from \"@/components/ui/sidebar.client\";\nimport Link from \"next/link\";\nimport { useSelectedLayoutSegments } from \"next/navigation\";\nimport * as React from \"react\";\nimport { AdminSidebarContext } from \"./admin-sidebar-context.client\";\nimport { AdminSidebarHeader } from \"./admin-sidebar-header.client\";\n\n/**\n * AdminSidebar\n */\nexport function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {\n const currentSegments = useSelectedLayoutSegments();\n\n const { paths } = React.useContext(AdminSidebarContext);\n const { isMobile, toggleSidebar } = useSidebar();\n\n return (\n <Sidebar {...props}>\n <AdminSidebarHeader />\n\n <SidebarContent>\n <SidebarMenu>\n {paths.map((group, index) => (\n <SidebarGroup key={index}>\n {group.name && <SidebarGroupLabel>{group.name}</SidebarGroupLabel>}\n\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items.map((item) => {\n const isActive = item.isActive || item.segment === currentSegments?.[0];\n\n return (\n <SidebarMenuItem key={item.name}>\n <SidebarMenuButton asChild isActive={isActive}>\n <Link href={item.href} onClick={isMobile ? toggleSidebar : undefined}>\n {item.icon}\n {item.name}\n </Link>\n </SidebarMenuButton>\n\n {isActive && !!item.items?.length && (\n <SidebarMenuSub>\n {item.items.map((subItem) => (\n <SidebarMenuSubItem key={subItem.name}>\n <SidebarMenuSubButton\n asChild\n isActive={subItem.segment === currentSegments?.[1]}\n >\n <Link\n href={subItem.href}\n onClick={isMobile ? toggleSidebar : undefined}\n >\n {subItem.name}\n </Link>\n </SidebarMenuSubButton>\n </SidebarMenuSubItem>\n ))}\n </SidebarMenuSub>\n )}\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n ))}\n </SidebarMenu>\n </SidebarContent>\n <SidebarRail />\n </Sidebar>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AA0BA,SAAgB,aAAa,EAAE,GAAG,SAA+C;CAC/E,MAAM,kBAAkB,2BAA2B;CAEnD,MAAM,EAAE,UAAUA,QAAM,WAAW,oBAAoB;CACvD,MAAM,EAAE,UAAU,kBAAkB,YAAY;AAEhD,QACE,qBAAC;EAAQ,GAAI;;GACX,oBAAC,uBAAqB;GAEtB,oBAAC,4BACC,oBAAC,yBACE,MAAM,KAAK,OAAO,UACjB,qBAAC,2BACE,MAAM,QAAQ,oBAAC,+BAAmB,MAAM,OAAyB,EAElE,oBAAC,iCACC,oBAAC,yBACE,MAAM,MAAM,KAAK,SAAS;IACzB,MAAM,WAAW,KAAK,YAAY,KAAK,YAAY,kBAAkB;AAErE,WACE,qBAAC,8BACC,oBAAC;KAAkB;KAAkB;eACnC,qBAAC;MAAK,MAAM,KAAK;MAAM,SAAS,WAAW,gBAAgB;iBACxD,KAAK,MACL,KAAK;OACD;MACW,EAEnB,YAAY,CAAC,CAAC,KAAK,OAAO,UACzB,oBAAC,4BACE,KAAK,MAAM,KAAK,YACf,oBAAC,gCACC,oBAAC;KACC;KACA,UAAU,QAAQ,YAAY,kBAAkB;eAEhD,oBAAC;MACC,MAAM,QAAQ;MACd,SAAS,WAAW,gBAAgB;gBAEnC,QAAQ;OACJ;MACc,IAXA,QAAQ,KAYZ,CACrB,GACa,KAzBC,KAAK,KA2BT;KAEpB,GACU,GACM,KAxCL,MAyCJ,CACf,GACU,GACC;GACjB,oBAAC,gBAAc;;GACP"}
@@ -1,23 +0,0 @@
1
- import { Permission } from "../lib/permissions.js";
2
- import { TDatabaseSchema } from "../../config/db/types.js";
3
- import { TulipConfig } from "../../config/lib/config.server.js";
4
- import * as react_jsx_runtime98 from "react/jsx-runtime";
5
- import { JSX } from "react";
6
- import "server-cli-only";
7
-
8
- //#region src/modules/auth/components/allowed.server.d.ts
9
- type AllowedProps<TSchema extends TDatabaseSchema> = {
10
- config: TulipConfig<TSchema>;
11
- permission: Permission;
12
- fallback?: JSX.Element | string;
13
- children: React.ReactNode;
14
- };
15
- declare function Allowed<TSchema extends TDatabaseSchema>({
16
- config,
17
- permission,
18
- fallback,
19
- children
20
- }: AllowedProps<TSchema>): Promise<react_jsx_runtime98.JSX.Element>;
21
- //#endregion
22
- export { Allowed };
23
- //# sourceMappingURL=allowed.server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"allowed.server.d.ts","names":[],"sources":["../../../../src/modules/auth/components/allowed.server.tsx"],"sourcesContent":[],"mappings":";;;;;;;;KASK,6BAA6B;UACxB,YAAY;cACR;EAFT,QAAA,CAAA,EAGQ,GAAA,CAAI,OAHA,GAAA,MAAA;EAAA,QAAA,EAIL,KAAA,CAAM,SAJD;;AACK,iBAMA,OANA,CAAA,gBAMwB,eANxB,CAAA,CAAA;EAAA,MAAA;EAAA,UAAA;EAAA,QAAA;EAAA;AAAA,CAAA,EAWnB,YAXmB,CAWN,OAXM,CAAA,CAAA,EAWE,OAXF,CAWE,mBAAA,CAAA,GAAA,CAAA,OAAA,CAXF"}