create-ej-app 6.0.0 → 7.0.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 (364) hide show
  1. package/cli.js +88 -14
  2. package/cli.ts +100 -17
  3. package/package.json +2 -2
  4. package/template/base/.env.example +11 -15
  5. package/template/base/Dockerfile +15 -0
  6. package/template/base/components.json +10 -5
  7. package/template/base/drizzle.config.ts +4 -5
  8. package/template/{new → base}/eslint.config.mjs +6 -1
  9. package/template/base/package.json +58 -75
  10. package/template/base/postcss.config.mjs +1 -4
  11. package/template/base/src/app/(admin)/layout.tsx +20 -0
  12. package/template/base/src/app/(app)/layout.tsx +13 -118
  13. package/template/base/src/app/(auth)/login/page.tsx +65 -42
  14. package/template/base/src/app/(marketing)/layout.tsx +7 -35
  15. package/template/base/src/app/(marketing)/page.tsx +2 -96
  16. package/template/base/src/app/(marketing)/privacy/page.tsx +3 -0
  17. package/template/base/src/app/(marketing)/terms/page.tsx +3 -0
  18. package/template/base/src/app/globals.css +118 -66
  19. package/template/base/src/app/layout.tsx +27 -12
  20. package/template/base/src/app/not-found.tsx +27 -0
  21. package/template/base/src/components/site-footer.tsx +16 -24
  22. package/template/base/src/components/ui/button.tsx +31 -27
  23. package/template/base/src/components/ui/card.tsx +83 -70
  24. package/template/base/src/components/ui/form.tsx +38 -47
  25. package/template/base/src/components/ui/input.tsx +16 -20
  26. package/template/base/src/components/ui/label.tsx +16 -18
  27. package/template/base/src/components/ui/separator.tsx +11 -14
  28. package/template/base/src/components/ui/sonner.tsx +22 -13
  29. package/template/base/src/db/index.ts +4 -11
  30. package/template/base/src/db/schema.ts +60 -268
  31. package/template/{new → base}/src/env.ts +2 -2
  32. package/template/{new → base}/src/lib/auth-client.ts +2 -0
  33. package/template/base/src/lib/auth.ts +64 -80
  34. package/template/base/src/lib/safe-action.ts +30 -6
  35. package/template/base/tsconfig.json +9 -7
  36. package/template/{prisma-advanced → old}/.env.example +10 -9
  37. package/template/{prisma → old}/components.json +1 -1
  38. package/template/old/drizzle.config.ts +11 -0
  39. package/template/old/package.json +87 -0
  40. package/template/old/postcss.config.mjs +8 -0
  41. package/template/{prisma-advanced → old}/src/app/(app)/layout.tsx +11 -3
  42. package/template/{prisma-advanced → old}/src/app/(auth)/login/page.tsx +2 -2
  43. package/template/{prisma → old}/src/app/(marketing)/page.tsx +8 -7
  44. package/template/old/src/app/layout.tsx +31 -0
  45. package/template/old/src/components/ui/sonner.tsx +31 -0
  46. package/template/old/src/db/index.ts +14 -0
  47. package/template/old/src/db/schema.ts +287 -0
  48. package/template/old/src/lib/auth.ts +89 -0
  49. package/template/old/src/lib/safe-action.ts +19 -0
  50. package/template/{prisma-advanced → old}/tsconfig.json +3 -2
  51. package/template/new/.env.example +0 -13
  52. package/template/new/components.json +0 -22
  53. package/template/new/drizzle.config.ts +0 -10
  54. package/template/new/package.json +0 -81
  55. package/template/new/postcss.config.mjs +0 -5
  56. package/template/new/src/app/(auth)/login/page.tsx +0 -72
  57. package/template/new/src/app/globals.css +0 -128
  58. package/template/new/src/app/layout.tsx +0 -50
  59. package/template/new/src/app/page.tsx +0 -3
  60. package/template/new/src/components/ui/button.tsx +0 -60
  61. package/template/new/src/components/ui/card.tsx +0 -92
  62. package/template/new/src/components/ui/form.tsx +0 -167
  63. package/template/new/src/components/ui/input.tsx +0 -21
  64. package/template/new/src/components/ui/label.tsx +0 -24
  65. package/template/new/src/components/ui/separator.tsx +0 -28
  66. package/template/new/src/components/ui/sonner.tsx +0 -40
  67. package/template/new/src/db/index.ts +0 -7
  68. package/template/new/src/db/schema.ts +0 -74
  69. package/template/new/src/lib/auth.ts +0 -67
  70. package/template/new/src/lib/safe-action.ts +0 -15
  71. package/template/new/tsconfig.json +0 -49
  72. package/template/prisma/.env.example +0 -16
  73. package/template/prisma/.eslintrc.cjs +0 -24
  74. package/template/prisma/next.config.mjs +0 -15
  75. package/template/prisma/package.json +0 -80
  76. package/template/prisma/postcss.config.cjs +0 -6
  77. package/template/prisma/prettier.config.ts +0 -11
  78. package/template/prisma/prisma/schema.prisma +0 -115
  79. package/template/prisma/public/next.svg +0 -1
  80. package/template/prisma/src/app/(app)/dashboard/page.tsx +0 -19
  81. package/template/prisma/src/app/(app)/layout.tsx +0 -90
  82. package/template/prisma/src/app/(app)/settings/actions.ts +0 -18
  83. package/template/prisma/src/app/(app)/settings/loading.tsx +0 -28
  84. package/template/prisma/src/app/(app)/settings/page.tsx +0 -28
  85. package/template/prisma/src/app/(app)/settings/render.tsx +0 -113
  86. package/template/prisma/src/app/(app)/tasks/[id]/actions.ts +0 -147
  87. package/template/prisma/src/app/(app)/tasks/[id]/page.tsx +0 -25
  88. package/template/prisma/src/app/(app)/tasks/[id]/render.tsx +0 -413
  89. package/template/prisma/src/app/(app)/tasks/actions.ts +0 -69
  90. package/template/prisma/src/app/(app)/tasks/page.tsx +0 -53
  91. package/template/prisma/src/app/(app)/tasks/render.tsx +0 -107
  92. package/template/prisma/src/app/(app)/users/[id]/actions.ts +0 -83
  93. package/template/prisma/src/app/(app)/users/[id]/page.tsx +0 -32
  94. package/template/prisma/src/app/(app)/users/[id]/render.tsx +0 -240
  95. package/template/prisma/src/app/(app)/users/actions.ts +0 -55
  96. package/template/prisma/src/app/(app)/users/page.tsx +0 -49
  97. package/template/prisma/src/app/(app)/users/render.tsx +0 -80
  98. package/template/prisma/src/app/(auth)/layout.tsx +0 -20
  99. package/template/prisma/src/app/(auth)/login/page.tsx +0 -49
  100. package/template/prisma/src/app/(auth)/login/user-auth-form.tsx +0 -152
  101. package/template/prisma/src/app/api/auth/[...nextauth]/route.ts +0 -7
  102. package/template/prisma/src/app/api/upload/route.ts +0 -36
  103. package/template/prisma/src/app/favicon.ico +0 -0
  104. package/template/prisma/src/app/layout.tsx +0 -34
  105. package/template/prisma/src/components/app-nav-command.tsx +0 -160
  106. package/template/prisma/src/components/dark-mode-toggle.tsx +0 -43
  107. package/template/prisma/src/components/data-table/data-table-column-header.tsx +0 -91
  108. package/template/prisma/src/components/data-table/data-table-faceted-filter.tsx +0 -149
  109. package/template/prisma/src/components/data-table/data-table-loading.tsx +0 -77
  110. package/template/prisma/src/components/data-table/data-table-pagination.tsx +0 -94
  111. package/template/prisma/src/components/data-table/data-table-toolbar.tsx +0 -78
  112. package/template/prisma/src/components/data-table/data-table-types.ts +0 -17
  113. package/template/prisma/src/components/data-table/data-table-view-options.tsx +0 -59
  114. package/template/prisma/src/components/data-table/data-table.tsx +0 -301
  115. package/template/prisma/src/components/data-table/simple-data-table.tsx +0 -109
  116. package/template/prisma/src/components/empty-placeholder.tsx +0 -78
  117. package/template/prisma/src/components/heading.tsx +0 -17
  118. package/template/prisma/src/components/icons.tsx +0 -85
  119. package/template/prisma/src/components/main-nav.tsx +0 -64
  120. package/template/prisma/src/components/mobile-nav.tsx +0 -50
  121. package/template/prisma/src/components/shell.tsx +0 -13
  122. package/template/prisma/src/components/side-nav.tsx +0 -51
  123. package/template/prisma/src/components/site-footer.tsx +0 -31
  124. package/template/prisma/src/components/system-info.tsx +0 -36
  125. package/template/prisma/src/components/theme-provider.tsx +0 -13
  126. package/template/prisma/src/components/ui/alert-dialog.tsx +0 -141
  127. package/template/prisma/src/components/ui/avatar.tsx +0 -50
  128. package/template/prisma/src/components/ui/badge.tsx +0 -36
  129. package/template/prisma/src/components/ui/button.tsx +0 -56
  130. package/template/prisma/src/components/ui/card.tsx +0 -79
  131. package/template/prisma/src/components/ui/checkbox.tsx +0 -30
  132. package/template/prisma/src/components/ui/command.tsx +0 -155
  133. package/template/prisma/src/components/ui/dialog.tsx +0 -122
  134. package/template/prisma/src/components/ui/dropdown-menu.tsx +0 -200
  135. package/template/prisma/src/components/ui/form.tsx +0 -176
  136. package/template/prisma/src/components/ui/input.tsx +0 -25
  137. package/template/prisma/src/components/ui/label.tsx +0 -26
  138. package/template/prisma/src/components/ui/popover.tsx +0 -31
  139. package/template/prisma/src/components/ui/select.tsx +0 -160
  140. package/template/prisma/src/components/ui/separator.tsx +0 -31
  141. package/template/prisma/src/components/ui/skeleton.tsx +0 -15
  142. package/template/prisma/src/components/ui/table.tsx +0 -117
  143. package/template/prisma/src/components/ui/textarea.tsx +0 -24
  144. package/template/prisma/src/components/ui/toast.tsx +0 -127
  145. package/template/prisma/src/components/ui/toaster.tsx +0 -35
  146. package/template/prisma/src/components/ui/use-toast.ts +0 -189
  147. package/template/prisma/src/components/user-account-nav.tsx +0 -60
  148. package/template/prisma/src/components/user-avatar.tsx +0 -25
  149. package/template/prisma/src/env.mjs +0 -78
  150. package/template/prisma/src/hooks/use-debounce.ts +0 -17
  151. package/template/prisma/src/hooks/use-lock-body.tsx +0 -12
  152. package/template/prisma/src/lib/auth.ts +0 -80
  153. package/template/prisma/src/lib/cn.ts +0 -4
  154. package/template/prisma/src/lib/db.ts +0 -20
  155. package/template/prisma/src/lib/delay.ts +0 -2
  156. package/template/prisma/src/lib/formatDate.ts +0 -11
  157. package/template/prisma/src/lib/generateLabel.ts +0 -5
  158. package/template/prisma/src/lib/siteConfig.ts +0 -4
  159. package/template/prisma/src/lib/storageClient.ts +0 -11
  160. package/template/prisma/src/styles/editor.css +0 -61
  161. package/template/prisma/src/styles/globals.css +0 -76
  162. package/template/prisma/src/types/UnwrapPromise.ts +0 -1
  163. package/template/prisma/tailwind.config.ts +0 -80
  164. package/template/prisma/tsconfig.json +0 -46
  165. package/template/prisma-advanced/.eslintrc.cjs +0 -24
  166. package/template/prisma-advanced/components.json +0 -17
  167. package/template/prisma-advanced/next.config.mjs +0 -15
  168. package/template/prisma-advanced/package.json +0 -80
  169. package/template/prisma-advanced/postcss.config.cjs +0 -6
  170. package/template/prisma-advanced/prettier.config.ts +0 -11
  171. package/template/prisma-advanced/prisma/schema.prisma +0 -154
  172. package/template/prisma-advanced/public/next.svg +0 -1
  173. package/template/prisma-advanced/src/app/(app)/dashboard/page.tsx +0 -19
  174. package/template/prisma-advanced/src/app/(app)/roles/[id]/actions.ts +0 -100
  175. package/template/prisma-advanced/src/app/(app)/roles/[id]/page.tsx +0 -36
  176. package/template/prisma-advanced/src/app/(app)/roles/[id]/render.tsx +0 -266
  177. package/template/prisma-advanced/src/app/(app)/roles/actions.ts +0 -67
  178. package/template/prisma-advanced/src/app/(app)/roles/page.tsx +0 -51
  179. package/template/prisma-advanced/src/app/(app)/roles/render.tsx +0 -70
  180. package/template/prisma-advanced/src/app/(app)/settings/actions.ts +0 -18
  181. package/template/prisma-advanced/src/app/(app)/settings/loading.tsx +0 -28
  182. package/template/prisma-advanced/src/app/(app)/settings/page.tsx +0 -28
  183. package/template/prisma-advanced/src/app/(app)/settings/render.tsx +0 -113
  184. package/template/prisma-advanced/src/app/(app)/tasks/[id]/actions.ts +0 -147
  185. package/template/prisma-advanced/src/app/(app)/tasks/[id]/page.tsx +0 -55
  186. package/template/prisma-advanced/src/app/(app)/tasks/[id]/render.tsx +0 -418
  187. package/template/prisma-advanced/src/app/(app)/tasks/actions.ts +0 -69
  188. package/template/prisma-advanced/src/app/(app)/tasks/page.tsx +0 -63
  189. package/template/prisma-advanced/src/app/(app)/tasks/render.tsx +0 -114
  190. package/template/prisma-advanced/src/app/(app)/users/[id]/actions.ts +0 -104
  191. package/template/prisma-advanced/src/app/(app)/users/[id]/page.tsx +0 -39
  192. package/template/prisma-advanced/src/app/(app)/users/[id]/render.tsx +0 -320
  193. package/template/prisma-advanced/src/app/(app)/users/actions.ts +0 -67
  194. package/template/prisma-advanced/src/app/(app)/users/page.tsx +0 -61
  195. package/template/prisma-advanced/src/app/(app)/users/render.tsx +0 -108
  196. package/template/prisma-advanced/src/app/(auth)/layout.tsx +0 -20
  197. package/template/prisma-advanced/src/app/(auth)/login/user-auth-form.tsx +0 -152
  198. package/template/prisma-advanced/src/app/(marketing)/layout.tsx +0 -42
  199. package/template/prisma-advanced/src/app/(marketing)/page.tsx +0 -96
  200. package/template/prisma-advanced/src/app/api/auth/[...nextauth]/route.ts +0 -7
  201. package/template/prisma-advanced/src/app/api/upload/route.ts +0 -36
  202. package/template/prisma-advanced/src/app/favicon.ico +0 -0
  203. package/template/prisma-advanced/src/app/layout.tsx +0 -34
  204. package/template/prisma-advanced/src/components/app-nav-command.tsx +0 -160
  205. package/template/prisma-advanced/src/components/dark-mode-toggle.tsx +0 -43
  206. package/template/prisma-advanced/src/components/data-table/data-table-column-header.tsx +0 -91
  207. package/template/prisma-advanced/src/components/data-table/data-table-faceted-filter.tsx +0 -149
  208. package/template/prisma-advanced/src/components/data-table/data-table-loading.tsx +0 -77
  209. package/template/prisma-advanced/src/components/data-table/data-table-pagination.tsx +0 -94
  210. package/template/prisma-advanced/src/components/data-table/data-table-toolbar.tsx +0 -78
  211. package/template/prisma-advanced/src/components/data-table/data-table-types.ts +0 -17
  212. package/template/prisma-advanced/src/components/data-table/data-table-view-options.tsx +0 -59
  213. package/template/prisma-advanced/src/components/data-table/data-table.tsx +0 -301
  214. package/template/prisma-advanced/src/components/data-table/simple-data-table.tsx +0 -109
  215. package/template/prisma-advanced/src/components/empty-placeholder.tsx +0 -78
  216. package/template/prisma-advanced/src/components/heading.tsx +0 -17
  217. package/template/prisma-advanced/src/components/icons.tsx +0 -85
  218. package/template/prisma-advanced/src/components/main-nav.tsx +0 -64
  219. package/template/prisma-advanced/src/components/shell.tsx +0 -13
  220. package/template/prisma-advanced/src/components/side-nav.tsx +0 -51
  221. package/template/prisma-advanced/src/components/system-info.tsx +0 -36
  222. package/template/prisma-advanced/src/components/theme-provider.tsx +0 -13
  223. package/template/prisma-advanced/src/components/ui/alert-dialog.tsx +0 -141
  224. package/template/prisma-advanced/src/components/ui/avatar.tsx +0 -50
  225. package/template/prisma-advanced/src/components/ui/badge.tsx +0 -36
  226. package/template/prisma-advanced/src/components/ui/checkbox.tsx +0 -30
  227. package/template/prisma-advanced/src/components/ui/command.tsx +0 -155
  228. package/template/prisma-advanced/src/components/ui/dialog.tsx +0 -122
  229. package/template/prisma-advanced/src/components/ui/dropdown-menu.tsx +0 -200
  230. package/template/prisma-advanced/src/components/ui/popover.tsx +0 -31
  231. package/template/prisma-advanced/src/components/ui/select.tsx +0 -160
  232. package/template/prisma-advanced/src/components/ui/skeleton.tsx +0 -15
  233. package/template/prisma-advanced/src/components/ui/table.tsx +0 -117
  234. package/template/prisma-advanced/src/components/ui/textarea.tsx +0 -24
  235. package/template/prisma-advanced/src/components/ui/toast.tsx +0 -127
  236. package/template/prisma-advanced/src/components/ui/toaster.tsx +0 -35
  237. package/template/prisma-advanced/src/components/ui/use-toast.ts +0 -189
  238. package/template/prisma-advanced/src/components/user-account-nav.tsx +0 -60
  239. package/template/prisma-advanced/src/components/user-avatar.tsx +0 -25
  240. package/template/prisma-advanced/src/env.mjs +0 -78
  241. package/template/prisma-advanced/src/hooks/use-debounce.ts +0 -17
  242. package/template/prisma-advanced/src/hooks/use-lock-body.tsx +0 -12
  243. package/template/prisma-advanced/src/lib/auth.ts +0 -180
  244. package/template/prisma-advanced/src/lib/cn.ts +0 -4
  245. package/template/prisma-advanced/src/lib/db.ts +0 -20
  246. package/template/prisma-advanced/src/lib/delay.ts +0 -2
  247. package/template/prisma-advanced/src/lib/formatDate.ts +0 -11
  248. package/template/prisma-advanced/src/lib/generateLabel.ts +0 -5
  249. package/template/prisma-advanced/src/lib/siteConfig.ts +0 -4
  250. package/template/prisma-advanced/src/lib/storageClient.ts +0 -11
  251. package/template/prisma-advanced/src/styles/editor.css +0 -61
  252. package/template/prisma-advanced/src/types/UnwrapPromise.ts +0 -1
  253. package/template/prisma-advanced/tailwind.config.ts +0 -80
  254. package/template/{new → base}/next.config.ts +0 -0
  255. package/template/{new → base}/public/placeholder.svg +0 -0
  256. package/template/{new → base}/src/app/(auth)/login/email-login-form.tsx +0 -0
  257. package/template/{new → base}/src/app/(auth)/login/social-login-buttons.tsx +0 -0
  258. package/template/{new → base}/src/app/api/auth/[...all]/route.ts +0 -0
  259. package/template/{new → base}/src/components/loader.tsx +0 -0
  260. package/template/{new → base}/src/components/react-query-provider.tsx +0 -0
  261. package/template/{new → base}/src/components/screen-size.tsx +0 -0
  262. package/template/{new → base}/src/components/theme-toggle.tsx +0 -0
  263. package/template/{new → base}/src/lib/toast-message.ts +0 -0
  264. package/template/{base → old}/.eslintrc.cjs +0 -0
  265. package/template/{base → old}/next.config.mjs +0 -0
  266. package/template/{new → old}/prettier.config.mjs +0 -0
  267. package/template/{base → old}/public/next.svg +0 -0
  268. package/template/{base → old}/public/vercel.svg +0 -0
  269. package/template/{base → old}/src/app/(app)/dashboard/layout.tsx +0 -0
  270. package/template/{base → old}/src/app/(app)/dashboard/page.tsx +0 -0
  271. package/template/{base → old}/src/app/(app)/roles/[id]/actions.ts +0 -0
  272. package/template/{base → old}/src/app/(app)/roles/[id]/page.tsx +0 -0
  273. package/template/{base → old}/src/app/(app)/roles/[id]/render.tsx +0 -0
  274. package/template/{base → old}/src/app/(app)/roles/[id]/validation.ts +0 -0
  275. package/template/{base → old}/src/app/(app)/roles/actions.ts +0 -0
  276. package/template/{base → old}/src/app/(app)/roles/page.tsx +0 -0
  277. package/template/{base → old}/src/app/(app)/roles/render.tsx +0 -0
  278. package/template/{base → old}/src/app/(app)/settings/actions.ts +0 -0
  279. package/template/{base → old}/src/app/(app)/settings/layout.tsx +0 -0
  280. package/template/{base → old}/src/app/(app)/settings/loading.tsx +0 -0
  281. package/template/{base → old}/src/app/(app)/settings/page.tsx +0 -0
  282. package/template/{base → old}/src/app/(app)/settings/render.tsx +0 -0
  283. package/template/{base → old}/src/app/(app)/settings/validation.ts +0 -0
  284. package/template/{base → old}/src/app/(app)/tasks/[id]/actions.ts +0 -0
  285. package/template/{base → old}/src/app/(app)/tasks/[id]/page.tsx +0 -0
  286. package/template/{base → old}/src/app/(app)/tasks/[id]/render.tsx +0 -0
  287. package/template/{base → old}/src/app/(app)/tasks/[id]/validation.ts +0 -0
  288. package/template/{base → old}/src/app/(app)/tasks/actions.ts +0 -0
  289. package/template/{base → old}/src/app/(app)/tasks/page.tsx +0 -0
  290. package/template/{base → old}/src/app/(app)/tasks/render.tsx +0 -0
  291. package/template/{base → old}/src/app/(app)/tasks/statusEnum.ts +0 -0
  292. package/template/{base → old}/src/app/(app)/users/[id]/actions.ts +0 -0
  293. package/template/{base → old}/src/app/(app)/users/[id]/page.tsx +0 -0
  294. package/template/{base → old}/src/app/(app)/users/[id]/render.tsx +0 -0
  295. package/template/{base → old}/src/app/(app)/users/[id]/validation.ts +0 -0
  296. package/template/{base → old}/src/app/(app)/users/actions.ts +0 -0
  297. package/template/{base → old}/src/app/(app)/users/page.tsx +0 -0
  298. package/template/{base → old}/src/app/(app)/users/render.tsx +0 -0
  299. package/template/{base → old}/src/app/(auth)/layout.tsx +0 -0
  300. package/template/{base → old}/src/app/(auth)/login/render.tsx +0 -0
  301. package/template/{prisma → old}/src/app/(marketing)/layout.tsx +1 -1
  302. /package/template/{base → old}/src/app/api/auth/[...nextauth]/route.ts +0 -0
  303. /package/template/{new → old}/src/app/favicon.ico +0 -0
  304. /package/template/{prisma-advanced/src/styles → old/src/app}/globals.css +0 -0
  305. /package/template/{base → old}/src/components/app-nav-command.tsx +0 -0
  306. /package/template/{base → old}/src/components/dark-mode-toggle.tsx +0 -0
  307. /package/template/{base → old}/src/components/data-table/data-table-column-header.tsx +0 -0
  308. /package/template/{base → old}/src/components/data-table/data-table-faceted-filter.tsx +0 -0
  309. /package/template/{base → old}/src/components/data-table/data-table-loading.tsx +0 -0
  310. /package/template/{base → old}/src/components/data-table/data-table-pagination.tsx +0 -0
  311. /package/template/{base → old}/src/components/data-table/data-table-toolbar.tsx +0 -0
  312. /package/template/{base → old}/src/components/data-table/data-table-types.ts +0 -0
  313. /package/template/{base → old}/src/components/data-table/data-table-view-options.tsx +0 -0
  314. /package/template/{base → old}/src/components/data-table/data-table.tsx +0 -0
  315. /package/template/{base → old}/src/components/data-table/simple-data-table.tsx +0 -0
  316. /package/template/{base → old}/src/components/empty-placeholder.tsx +0 -0
  317. /package/template/{base → old}/src/components/heading.tsx +0 -0
  318. /package/template/{base → old}/src/components/icons.tsx +0 -0
  319. /package/template/{base → old}/src/components/main-nav.tsx +0 -0
  320. /package/template/{base → old}/src/components/mobile-nav.tsx +0 -0
  321. /package/template/{base → old}/src/components/shell.tsx +0 -0
  322. /package/template/{base → old}/src/components/side-nav.tsx +0 -0
  323. /package/template/{prisma-advanced → old}/src/components/site-footer.tsx +0 -0
  324. /package/template/{base → old}/src/components/system-info.tsx +0 -0
  325. /package/template/{base → old}/src/components/ui/alert-dialog.tsx +0 -0
  326. /package/template/{base → old}/src/components/ui/avatar.tsx +0 -0
  327. /package/template/{base → old}/src/components/ui/badge.tsx +0 -0
  328. /package/template/{prisma-advanced → old}/src/components/ui/button.tsx +0 -0
  329. /package/template/{prisma-advanced → old}/src/components/ui/card.tsx +0 -0
  330. /package/template/{base → old}/src/components/ui/checkbox.tsx +0 -0
  331. /package/template/{base → old}/src/components/ui/command.tsx +0 -0
  332. /package/template/{base → old}/src/components/ui/dialog.tsx +0 -0
  333. /package/template/{base → old}/src/components/ui/dropdown-menu.tsx +0 -0
  334. /package/template/{prisma-advanced → old}/src/components/ui/form.tsx +0 -0
  335. /package/template/{prisma-advanced → old}/src/components/ui/input.tsx +0 -0
  336. /package/template/{prisma-advanced → old}/src/components/ui/label.tsx +0 -0
  337. /package/template/{base → old}/src/components/ui/popover.tsx +0 -0
  338. /package/template/{base → old}/src/components/ui/select.tsx +0 -0
  339. /package/template/{prisma-advanced → old}/src/components/ui/separator.tsx +0 -0
  340. /package/template/{base → old}/src/components/ui/skeleton.tsx +0 -0
  341. /package/template/{base → old}/src/components/ui/table.tsx +0 -0
  342. /package/template/{base → old}/src/components/user-account-nav.tsx +0 -0
  343. /package/template/{base → old}/src/components/user-avatar.tsx +0 -0
  344. /package/template/{base → old}/src/data-access/resource.ts +0 -0
  345. /package/template/{base → old}/src/data-access/role-permission.ts +0 -0
  346. /package/template/{base → old}/src/data-access/role.ts +0 -0
  347. /package/template/{base → old}/src/data-access/task.ts +0 -0
  348. /package/template/{base → old}/src/data-access/user.ts +0 -0
  349. /package/template/{base → old}/src/env.mjs +0 -0
  350. /package/template/{base → old}/src/hooks/use-debounce.tsx +0 -0
  351. /package/template/{base → old}/src/hooks/use-lock-body.tsx +0 -0
  352. /package/template/{new → old}/src/lib/cn.ts +0 -0
  353. /package/template/{base → old}/src/lib/currentUser.ts +0 -0
  354. /package/template/{new → old}/src/lib/delay.ts +0 -0
  355. /package/template/{base → old}/src/lib/formatDate.ts +0 -0
  356. /package/template/{base → old}/src/lib/generateLabel.ts +0 -0
  357. /package/template/{base → old}/src/lib/s3Client.ts +0 -0
  358. /package/template/{new → old}/src/lib/siteConfig.ts +0 -0
  359. /package/template/{base → old}/src/lib/sortOrderEnum.ts +0 -0
  360. /package/template/{base → old}/src/use-case/role-permission.ts +0 -0
  361. /package/template/{base → old}/src/use-case/role.ts +0 -0
  362. /package/template/{base → old}/src/use-case/task.ts +0 -0
  363. /package/template/{base → old}/src/use-case/user.ts +0 -0
  364. /package/template/{base → old}/tailwind.config.ts +0 -0
@@ -1,109 +0,0 @@
1
- 'use client'
2
-
3
- import {
4
- ColumnDef,
5
- flexRender,
6
- getCoreRowModel,
7
- getPaginationRowModel,
8
- useReactTable
9
- } from '@tanstack/react-table'
10
-
11
- import { Button } from '@/components/ui/button'
12
- import {
13
- Table,
14
- TableBody,
15
- TableCell,
16
- TableHead,
17
- TableHeader,
18
- TableRow
19
- } from '@/components/ui/table'
20
-
21
- interface DataTableProps<TData, TValue> {
22
- columns: ColumnDef<TData, TValue>[]
23
- data: TData[]
24
- }
25
-
26
- export function SimpleDataTable<TData, TValue>({
27
- columns,
28
- data
29
- }: DataTableProps<TData, TValue>) {
30
- const table = useReactTable({
31
- data,
32
- columns,
33
- getCoreRowModel: getCoreRowModel(),
34
- getPaginationRowModel: getPaginationRowModel()
35
- })
36
-
37
- return (
38
- <div>
39
- <div className="rounded-md border">
40
- <Table>
41
- <TableHeader>
42
- {table.getHeaderGroups().map(headerGroup => (
43
- <TableRow key={headerGroup.id}>
44
- {headerGroup.headers.map(header => {
45
- return (
46
- <TableHead key={header.id}>
47
- {header.isPlaceholder
48
- ? null
49
- : flexRender(
50
- header.column.columnDef.header,
51
- header.getContext()
52
- )}
53
- </TableHead>
54
- )
55
- })}
56
- </TableRow>
57
- ))}
58
- </TableHeader>
59
- <TableBody>
60
- {table.getRowModel().rows?.length ? (
61
- table.getRowModel().rows.map(row => (
62
- <TableRow
63
- key={row.id}
64
- data-state={row.getIsSelected() && 'selected'}
65
- >
66
- {row.getVisibleCells().map(cell => (
67
- <TableCell key={cell.id}>
68
- {flexRender(
69
- cell.column.columnDef.cell,
70
- cell.getContext()
71
- )}
72
- </TableCell>
73
- ))}
74
- </TableRow>
75
- ))
76
- ) : (
77
- <TableRow>
78
- <TableCell
79
- colSpan={columns.length}
80
- className="h-24 text-center"
81
- >
82
- No results.
83
- </TableCell>
84
- </TableRow>
85
- )}
86
- </TableBody>
87
- </Table>
88
- </div>
89
- <div className="flex items-center justify-end space-x-2 py-4">
90
- <Button
91
- variant="outline"
92
- size="sm"
93
- onClick={() => table.previousPage()}
94
- disabled={!table.getCanPreviousPage()}
95
- >
96
- Previous
97
- </Button>
98
- <Button
99
- variant="outline"
100
- size="sm"
101
- onClick={() => table.nextPage()}
102
- disabled={!table.getCanNextPage()}
103
- >
104
- Next
105
- </Button>
106
- </div>
107
- </div>
108
- )
109
- }
@@ -1,78 +0,0 @@
1
- import * as React from 'react'
2
-
3
- import { Icons } from '@/components/icons'
4
- import { cn } from '@/lib/cn'
5
-
6
- interface EmptyPlaceholderProps extends React.HTMLAttributes<HTMLDivElement> {}
7
-
8
- export function EmptyPlaceholder({
9
- className,
10
- children,
11
- ...props
12
- }: EmptyPlaceholderProps) {
13
- return (
14
- <div
15
- className={cn(
16
- 'flex min-h-[400px] flex-col items-center justify-center rounded-md border border-dashed p-8 text-center animate-in fade-in-50',
17
- className
18
- )}
19
- {...props}
20
- >
21
- <div className="mx-auto flex max-w-[420px] flex-col items-center justify-center text-center">
22
- {children}
23
- </div>
24
- </div>
25
- )
26
- }
27
-
28
- interface EmptyPlaceholderIconProps
29
- extends Partial<React.SVGProps<SVGSVGElement>> {
30
- name: keyof typeof Icons
31
- }
32
-
33
- EmptyPlaceholder.Icon = function EmptyPlaceHolderIcon({
34
- name,
35
- className
36
- }: EmptyPlaceholderIconProps) {
37
- const Icon = Icons[name]
38
-
39
- if (!Icon) {
40
- return null
41
- }
42
-
43
- return (
44
- <div className="flex h-20 w-20 items-center justify-center rounded-full bg-muted">
45
- <Icon className={cn('h-10 w-10', className)} />
46
- </div>
47
- )
48
- }
49
-
50
- interface EmptyPlacholderTitleProps
51
- extends React.HTMLAttributes<HTMLHeadingElement> {}
52
-
53
- EmptyPlaceholder.Title = function EmptyPlaceholderTitle({
54
- className,
55
- ...props
56
- }: EmptyPlacholderTitleProps) {
57
- return (
58
- <h2 className={cn('mt-6 text-xl font-semibold', className)} {...props} />
59
- )
60
- }
61
-
62
- interface EmptyPlacholderDescriptionProps
63
- extends React.HTMLAttributes<HTMLParagraphElement> {}
64
-
65
- EmptyPlaceholder.Description = function EmptyPlaceholderDescription({
66
- className,
67
- ...props
68
- }: EmptyPlacholderDescriptionProps) {
69
- return (
70
- <p
71
- className={cn(
72
- 'mb-8 mt-2 text-center text-sm font-normal leading-6 text-muted-foreground',
73
- className
74
- )}
75
- {...props}
76
- />
77
- )
78
- }
@@ -1,17 +0,0 @@
1
- import { FC, ReactNode } from 'react'
2
-
3
- export const Heading: FC<{
4
- heading: string
5
- text?: string
6
- children?: ReactNode
7
- }> = ({ heading, text, children }) => {
8
- return (
9
- <div className="flex items-center justify-between px-2">
10
- <div className="grid gap-1">
11
- <h1 className="font-heading text-3xl md:text-4xl">{heading}</h1>
12
- {text && <p className="text-lg text-muted-foreground">{text}</p>}
13
- </div>
14
- {children}
15
- </div>
16
- )
17
- }
@@ -1,85 +0,0 @@
1
- import { cn } from '@/lib/cn'
2
- import {
3
- ArrowDown,
4
- ArrowRight,
5
- ArrowUp,
6
- ArrowUpDown,
7
- Biohazard,
8
- Check,
9
- ChevronLeft,
10
- ChevronRight,
11
- ChevronsLeft,
12
- ChevronsRight,
13
- ClipboardList,
14
- Download,
15
- Edit,
16
- EyeOff,
17
- Github,
18
- Laptop,
19
- LayoutDashboard,
20
- Loader2,
21
- LogIn,
22
- LogOut,
23
- LucideIcon,
24
- LucideProps,
25
- Moon,
26
- Plus,
27
- PlusCircle,
28
- Save,
29
- Settings,
30
- Settings2,
31
- Sun,
32
- Trash,
33
- User,
34
- X
35
- } from 'lucide-react'
36
-
37
- export type Icon = LucideIcon
38
-
39
- export const Icons = {
40
- logo: Biohazard,
41
- sun: Sun,
42
- moon: Moon,
43
- laptop: Laptop,
44
- chevronLeft: ChevronLeft,
45
- arrowRight: ArrowRight,
46
- github: Github,
47
- google: ({ ...props }: LucideProps) => (
48
- <svg
49
- aria-hidden="true"
50
- focusable="false"
51
- data-prefix="fab"
52
- data-icon="google"
53
- role="img"
54
- xmlns="http://www.w3.org/2000/svg"
55
- viewBox="0 0 30 30"
56
- {...props}
57
- className={cn('fill-current', props.className)}
58
- >
59
- <path d="M 15.003906 3 C 8.3749062 3 3 8.373 3 15 C 3 21.627 8.3749062 27 15.003906 27 C 25.013906 27 27.269078 17.707 26.330078 13 L 25 13 L 22.732422 13 L 15 13 L 15 17 L 22.738281 17 C 21.848702 20.448251 18.725955 23 15 23 C 10.582 23 7 19.418 7 15 C 7 10.582 10.582 7 15 7 C 17.009 7 18.839141 7.74575 20.244141 8.96875 L 23.085938 6.1289062 C 20.951937 4.1849063 18.116906 3 15.003906 3 z"></path>
60
- </svg>
61
- ),
62
- login: LogIn,
63
- logout: LogOut,
64
- user: User,
65
- spinner: Loader2,
66
- settings: Settings,
67
- close: X,
68
- add: Plus,
69
- edit: Edit,
70
- save: Save,
71
- delete: Trash,
72
- download: Download,
73
- dashboard: LayoutDashboard,
74
- task: ClipboardList,
75
- arrowUp: ArrowUp,
76
- arrowDown: ArrowDown,
77
- arrowUpDown: ArrowUpDown,
78
- eyeOff: EyeOff,
79
- plusCircle: PlusCircle,
80
- check: Check,
81
- chevronsLeft: ChevronsLeft,
82
- chevronsRight: ChevronsRight,
83
- chevronRight: ChevronRight,
84
- mixer: Settings2
85
- }
@@ -1,64 +0,0 @@
1
- 'use client'
2
-
3
- import Link from 'next/link'
4
- import { useSelectedLayoutSegment } from 'next/navigation'
5
- import { FC, useState } from 'react'
6
-
7
- import { Icons } from '@/components/icons'
8
- import { MobileNav } from '@/components/mobile-nav'
9
- import { cn } from '@/lib/cn'
10
- import { siteConfig } from '@/lib/siteConfig'
11
-
12
- type MainNavItem = {
13
- title: string
14
- href: string
15
- disabled?: boolean
16
- }
17
-
18
- type MainNavProps = {
19
- logoLink?: string
20
- items?: MainNavItem[]
21
- }
22
-
23
- export const MainNav: FC<MainNavProps> = ({ logoLink = '/', items }) => {
24
- const [showMobileMenu, setShowMobileMenu] = useState(false)
25
- const segment = useSelectedLayoutSegment()
26
-
27
- return (
28
- <div className="flex md:gap-10">
29
- <Link href={logoLink} className="hidden items-center space-x-2 md:flex">
30
- <Icons.logo />
31
- <span className="hidden font-bold sm:inline-block">
32
- {siteConfig.name}
33
- </span>
34
- </Link>
35
- {items?.length ? (
36
- <nav className="hidden gap-6 md:flex">
37
- {items?.map((item, i) => (
38
- <Link
39
- key={i}
40
- href={item.disabled ? '#' : item.href}
41
- className={cn(
42
- 'flex items-center text-lg font-medium transition-colors hover:text-foreground/80 sm:text-sm',
43
- item.href.startsWith(`/${segment}`)
44
- ? 'text-foreground'
45
- : 'text-foreground/60',
46
- item.disabled && 'cursor-not-allowed opacity-80'
47
- )}
48
- >
49
- {item.title}
50
- </Link>
51
- ))}
52
- </nav>
53
- ) : undefined}
54
- <button
55
- className="flex items-center space-x-2 md:hidden"
56
- onClick={() => setShowMobileMenu(prev => !prev)}
57
- >
58
- {showMobileMenu ? <Icons.close /> : <Icons.logo />}
59
- <span className="font-bold">Menu</span>
60
- </button>
61
- {showMobileMenu && items?.length && <MobileNav items={items} />}
62
- </div>
63
- )
64
- }
@@ -1,50 +0,0 @@
1
- 'use client'
2
-
3
- import Link from 'next/link'
4
-
5
- import { Icons } from '@/components/icons'
6
- import { useLockBody } from '@/hooks/use-lock-body'
7
- import { cn } from '@/lib/cn'
8
- import { siteConfig } from '@/lib/siteConfig'
9
- import { FC } from 'react'
10
-
11
- interface MobileNavProps {
12
- items: {
13
- title: string
14
- href: string
15
- disabled?: boolean
16
- }[]
17
- }
18
-
19
- export const MobileNav: FC<MobileNavProps> = ({ items }) => {
20
- useLockBody()
21
-
22
- return (
23
- <div
24
- className={cn(
25
- 'fixed inset-0 top-16 z-50 grid h-[calc(100vh-4rem)] grid-flow-row auto-rows-max overflow-auto p-6 pb-32 shadow-md animate-in slide-in-from-bottom-80 md:hidden'
26
- )}
27
- >
28
- <div className="relative z-20 grid gap-6 rounded-md bg-popover p-4 text-popover-foreground shadow-md">
29
- <Link href="/" className="flex items-center space-x-2">
30
- <Icons.logo />
31
- <span className="font-bold">{siteConfig.name}</span>
32
- </Link>
33
- <nav className="grid grid-flow-row auto-rows-max text-sm">
34
- {items.map((item, index) => (
35
- <Link
36
- key={index}
37
- href={item.disabled ? '#' : item.href}
38
- className={cn(
39
- 'flex w-full items-center rounded-md p-2 text-sm font-medium hover:underline',
40
- item.disabled && 'cursor-not-allowed opacity-60'
41
- )}
42
- >
43
- {item.title}
44
- </Link>
45
- ))}
46
- </nav>
47
- </div>
48
- </div>
49
- )
50
- }
@@ -1,13 +0,0 @@
1
- import { FC } from 'react'
2
-
3
- import { cn } from '@/lib/cn'
4
-
5
- interface ShellProps extends React.HTMLAttributes<HTMLDivElement> {}
6
-
7
- export const Shell: FC<ShellProps> = ({ children, className, ...props }) => {
8
- return (
9
- <div className={cn('grid items-start gap-8 p-1', className)} {...props}>
10
- {children}
11
- </div>
12
- )
13
- }
@@ -1,51 +0,0 @@
1
- 'use client'
2
-
3
- import Link from 'next/link'
4
- import { usePathname } from 'next/navigation'
5
-
6
- import { Icons } from '@/components/icons'
7
- import { cn } from '@/lib/cn'
8
- import { FC } from 'react'
9
-
10
- type IconKeys = keyof typeof Icons
11
-
12
- interface SideNavProps {
13
- items: {
14
- title: string
15
- href?: string | null
16
- disabled?: boolean | null
17
- icon?: IconKeys | null
18
- }[]
19
- }
20
-
21
- export const SideNav: FC<SideNavProps> = ({ items }) => {
22
- const path = usePathname()
23
-
24
- if (!items?.length) return null
25
-
26
- return (
27
- <nav className="grid items-start gap-2">
28
- {items.map((item, index) => {
29
- const Icon = Icons[item.icon || 'arrowRight']
30
- return (
31
- item.href && (
32
- <Link key={index} href={item.disabled ? '/' : item.href}>
33
- <span
34
- className={cn(
35
- 'group flex items-center rounded-md px-3 py-2 text-sm font-medium',
36
- path.includes(item.href)
37
- ? 'bg-accent'
38
- : 'transparent underline-offset-4 hover:underline',
39
- item.disabled && 'cursor-not-allowed opacity-80'
40
- )}
41
- >
42
- <Icon className="mr-2 h-4 w-4" />
43
- <span>{item.title}</span>
44
- </span>
45
- </Link>
46
- )
47
- )
48
- })}
49
- </nav>
50
- )
51
- }
@@ -1,31 +0,0 @@
1
- import { FC, HTMLAttributes } from 'react'
2
-
3
- import { DarkModeToggle } from '@/components/dark-mode-toggle'
4
- import { Icons } from '@/components/icons'
5
- import { cn } from '@/lib/cn'
6
- import { siteConfig } from '@/lib/siteConfig'
7
-
8
- export const SiteFooter: FC<HTMLAttributes<HTMLElement>> = ({ className }) => {
9
- return (
10
- <footer className={cn(className)}>
11
- <div className="container flex flex-col items-center justify-between gap-2 py-4 sm:flex-row">
12
- <div className="flex flex-col items-center gap-2 sm:flex-row">
13
- <Icons.logo />
14
- <p className="text-center text-sm leading-loose sm:text-left">
15
- {siteConfig.name}. Built by{' '}
16
- <a
17
- href="https://github.com/ejekanshjain"
18
- target="_blank"
19
- rel="noreferrer"
20
- className="font-medium underline underline-offset-4"
21
- >
22
- ejekanshjain
23
- </a>
24
- .
25
- </p>
26
- </div>
27
- <DarkModeToggle />
28
- </div>
29
- </footer>
30
- )
31
- }
@@ -1,36 +0,0 @@
1
- 'use client'
2
-
3
- import { FC, ReactNode } from 'react'
4
-
5
- import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
6
- import { Separator } from '@/components/ui/separator'
7
-
8
- type SystemInfoProps = {
9
- items: {
10
- label: string
11
- value: string | ReactNode
12
- }[]
13
- }
14
-
15
- export const SystemInfo: FC<SystemInfoProps> = ({ items }) => {
16
- return (
17
- <Card className="max-w-[600px]">
18
- <CardHeader>
19
- <CardTitle>System Information</CardTitle>
20
- </CardHeader>
21
- <CardContent>
22
- <dl className="grid gap-4">
23
- {items.map((item, i) => (
24
- <div key={i}>
25
- <dt className="font-semibold">{item.label}</dt>
26
- <dd>{item.value}</dd>
27
- {i < items.length - 1 ? (
28
- <Separator className="mt-2" />
29
- ) : undefined}
30
- </div>
31
- ))}
32
- </dl>
33
- </CardContent>
34
- </Card>
35
- )
36
- }
@@ -1,13 +0,0 @@
1
- 'use client'
2
-
3
- import { FC } from 'react'
4
-
5
- import { ThemeProvider as NextThemesProvider } from 'next-themes'
6
- import { type ThemeProviderProps } from 'next-themes/dist/types'
7
-
8
- export const ThemeProvider: FC<ThemeProviderProps> = ({
9
- children,
10
- ...props
11
- }) => {
12
- return <NextThemesProvider {...props}>{children}</NextThemesProvider>
13
- }
@@ -1,141 +0,0 @@
1
- 'use client'
2
-
3
- import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'
4
- import * as React from 'react'
5
-
6
- import { buttonVariants } from '@/components/ui/button'
7
- import { cn } from '@/lib/cn'
8
-
9
- const AlertDialog = AlertDialogPrimitive.Root
10
-
11
- const AlertDialogTrigger = AlertDialogPrimitive.Trigger
12
-
13
- const AlertDialogPortal = AlertDialogPrimitive.Portal
14
-
15
- const AlertDialogOverlay = React.forwardRef<
16
- React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
17
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
18
- >(({ className, ...props }, ref) => (
19
- <AlertDialogPrimitive.Overlay
20
- className={cn(
21
- 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
22
- className
23
- )}
24
- {...props}
25
- ref={ref}
26
- />
27
- ))
28
- AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName
29
-
30
- const AlertDialogContent = React.forwardRef<
31
- React.ElementRef<typeof AlertDialogPrimitive.Content>,
32
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
33
- >(({ className, ...props }, ref) => (
34
- <AlertDialogPortal>
35
- <AlertDialogOverlay />
36
- <AlertDialogPrimitive.Content
37
- ref={ref}
38
- className={cn(
39
- 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',
40
- className
41
- )}
42
- {...props}
43
- />
44
- </AlertDialogPortal>
45
- ))
46
- AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName
47
-
48
- const AlertDialogHeader = ({
49
- className,
50
- ...props
51
- }: React.HTMLAttributes<HTMLDivElement>) => (
52
- <div
53
- className={cn(
54
- 'flex flex-col space-y-2 text-center sm:text-left',
55
- className
56
- )}
57
- {...props}
58
- />
59
- )
60
- AlertDialogHeader.displayName = 'AlertDialogHeader'
61
-
62
- const AlertDialogFooter = ({
63
- className,
64
- ...props
65
- }: React.HTMLAttributes<HTMLDivElement>) => (
66
- <div
67
- className={cn(
68
- 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',
69
- className
70
- )}
71
- {...props}
72
- />
73
- )
74
- AlertDialogFooter.displayName = 'AlertDialogFooter'
75
-
76
- const AlertDialogTitle = React.forwardRef<
77
- React.ElementRef<typeof AlertDialogPrimitive.Title>,
78
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
79
- >(({ className, ...props }, ref) => (
80
- <AlertDialogPrimitive.Title
81
- ref={ref}
82
- className={cn('text-lg font-semibold', className)}
83
- {...props}
84
- />
85
- ))
86
- AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName
87
-
88
- const AlertDialogDescription = React.forwardRef<
89
- React.ElementRef<typeof AlertDialogPrimitive.Description>,
90
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
91
- >(({ className, ...props }, ref) => (
92
- <AlertDialogPrimitive.Description
93
- ref={ref}
94
- className={cn('text-sm text-muted-foreground', className)}
95
- {...props}
96
- />
97
- ))
98
- AlertDialogDescription.displayName =
99
- AlertDialogPrimitive.Description.displayName
100
-
101
- const AlertDialogAction = React.forwardRef<
102
- React.ElementRef<typeof AlertDialogPrimitive.Action>,
103
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>
104
- >(({ className, ...props }, ref) => (
105
- <AlertDialogPrimitive.Action
106
- ref={ref}
107
- className={cn(buttonVariants(), className)}
108
- {...props}
109
- />
110
- ))
111
- AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName
112
-
113
- const AlertDialogCancel = React.forwardRef<
114
- React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
115
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>
116
- >(({ className, ...props }, ref) => (
117
- <AlertDialogPrimitive.Cancel
118
- ref={ref}
119
- className={cn(
120
- buttonVariants({ variant: 'outline' }),
121
- 'mt-2 sm:mt-0',
122
- className
123
- )}
124
- {...props}
125
- />
126
- ))
127
- AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName
128
-
129
- export {
130
- AlertDialog,
131
- AlertDialogAction,
132
- AlertDialogCancel,
133
- AlertDialogContent,
134
- AlertDialogDescription,
135
- AlertDialogFooter,
136
- AlertDialogHeader,
137
- AlertDialogOverlay,
138
- AlertDialogPortal,
139
- AlertDialogTitle,
140
- AlertDialogTrigger
141
- }