create-einja-app 0.2.15 → 0.2.18

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 (272) hide show
  1. package/package.json +2 -2
  2. package/templates/default/.claude/hooks/einja/biome-format.sh +2 -2
  3. package/templates/default/.claude/hooks/einja/playwright-resize.sh +12 -2
  4. package/templates/default/.claude/settings.json +15 -0
  5. package/templates/default/.cursor/commands/task-vibe-kanban-loop.md +107 -42
  6. package/templates/default/.env.develop +0 -4
  7. package/templates/default/.env.example +1 -0
  8. package/templates/default/.env.preview +0 -4
  9. package/templates/default/.env.staging +19 -0
  10. package/templates/default/.github/actions/ci/action.yml +39 -0
  11. package/templates/default/.github/actions/migrate/action.yml +39 -0
  12. package/templates/default/.github/actions/neon-export-env/action.yml +28 -0
  13. package/templates/default/.github/actions/setup/action.yml +20 -0
  14. package/templates/default/.github/workflows/claude.yml +1 -0
  15. package/templates/default/.github/workflows/{cleanup-neon-branches.yml → cleanup-pr-preview-db.yml} +28 -24
  16. package/templates/default/.github/workflows/cleanup-pr-preview-on-close.yml +50 -0
  17. package/templates/default/.github/workflows/deploy-pr-preview.yml +398 -0
  18. package/templates/default/.github/workflows/deploy-stable-branches.yml +259 -0
  19. package/templates/default/.github/workflows/release-create-einja-app.yml +95 -0
  20. package/templates/default/.mcp.json +6 -9
  21. package/templates/default/.serena/project.yml +22 -1
  22. package/templates/default/CLAUDE.md +52 -10
  23. package/templates/default/README.md +5 -14
  24. package/templates/default/apps/admin/next.config.ts +11 -0
  25. package/templates/default/apps/admin/package.json +55 -0
  26. package/templates/default/apps/admin/postcss.config.cjs +5 -0
  27. package/templates/default/apps/admin/src/app/(auth)/forgot-password/page.tsx +97 -0
  28. package/templates/default/apps/admin/src/app/(auth)/layout.tsx +18 -0
  29. package/templates/default/apps/admin/src/app/(auth)/otp/page.tsx +121 -0
  30. package/templates/default/apps/admin/src/app/(auth)/sign-in/page.tsx +145 -0
  31. package/templates/default/apps/admin/src/app/(auth)/sign-up/page.tsx +199 -0
  32. package/templates/default/apps/admin/src/app/(errors)/401/page.tsx +27 -0
  33. package/templates/default/apps/admin/src/app/(errors)/403/page.tsx +28 -0
  34. package/templates/default/apps/admin/src/app/(errors)/500/page.tsx +29 -0
  35. package/templates/default/apps/admin/src/app/(errors)/layout.tsx +7 -0
  36. package/templates/default/apps/admin/src/app/(errors)/maintenance/page.tsx +25 -0
  37. package/templates/default/apps/admin/src/app/dashboard/_components/analytics-chart.tsx +68 -0
  38. package/templates/default/apps/admin/src/app/dashboard/_components/analytics.tsx +182 -0
  39. package/templates/default/apps/admin/src/app/dashboard/_components/dashboard-page.tsx +74 -0
  40. package/templates/default/apps/admin/src/app/dashboard/_components/metric-cards.tsx +49 -0
  41. package/templates/default/apps/admin/src/app/dashboard/_components/overview-chart.tsx +73 -0
  42. package/templates/default/apps/admin/src/app/dashboard/_components/recent-sales.tsx +75 -0
  43. package/templates/default/apps/admin/src/app/dashboard/apps/_components/apps-page.tsx +135 -0
  44. package/templates/default/apps/admin/src/app/dashboard/apps/page.tsx +10 -0
  45. package/templates/default/apps/admin/src/app/dashboard/chats/_components/chat-list.tsx +82 -0
  46. package/templates/default/apps/admin/src/app/dashboard/chats/_components/chat-messages.tsx +194 -0
  47. package/templates/default/apps/admin/src/app/dashboard/chats/_components/chats-page.tsx +99 -0
  48. package/templates/default/apps/admin/src/app/dashboard/chats/_components/new-chat.tsx +118 -0
  49. package/templates/default/apps/admin/src/app/dashboard/chats/page.tsx +10 -0
  50. package/templates/default/apps/admin/src/app/dashboard/layout.tsx +9 -0
  51. package/templates/default/apps/admin/src/app/dashboard/not-found.tsx +14 -0
  52. package/templates/default/apps/admin/src/app/dashboard/page.tsx +10 -0
  53. package/templates/default/apps/admin/src/app/dashboard/settings/_components/content-section.tsx +20 -0
  54. package/templates/default/apps/admin/src/app/dashboard/settings/_components/sidebar-nav.tsx +66 -0
  55. package/templates/default/apps/admin/src/app/dashboard/settings/account/page.tsx +173 -0
  56. package/templates/default/apps/admin/src/app/dashboard/settings/appearance/page.tsx +156 -0
  57. package/templates/default/apps/admin/src/app/dashboard/settings/display/page.tsx +125 -0
  58. package/templates/default/apps/admin/src/app/dashboard/settings/layout.tsx +30 -0
  59. package/templates/default/apps/admin/src/app/dashboard/settings/notifications/page.tsx +196 -0
  60. package/templates/default/apps/admin/src/app/dashboard/settings/page.tsx +5 -0
  61. package/templates/default/apps/admin/src/app/dashboard/settings/profile/page.tsx +176 -0
  62. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/data-table-bulk-actions.tsx +183 -0
  63. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/data-table-row-actions.tsx +79 -0
  64. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-columns.tsx +107 -0
  65. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-dialogs.tsx +71 -0
  66. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-import-dialog.tsx +106 -0
  67. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-multi-delete-dialog.tsx +90 -0
  68. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-mutate-drawer.tsx +207 -0
  69. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-page.tsx +31 -0
  70. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-primary-buttons.tsx +19 -0
  71. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-provider.tsx +37 -0
  72. package/templates/default/apps/admin/src/app/dashboard/tasks/_components/tasks-table.tsx +155 -0
  73. package/templates/default/apps/admin/src/app/dashboard/tasks/page.tsx +14 -0
  74. package/templates/default/apps/admin/src/app/dashboard/users/_components/data-table-bulk-actions.tsx +136 -0
  75. package/templates/default/apps/admin/src/app/dashboard/users/_components/data-table-row-actions.tsx +62 -0
  76. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-action-dialog.tsx +297 -0
  77. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-columns.tsx +121 -0
  78. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-delete-dialog.tsx +72 -0
  79. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-dialogs.tsx +49 -0
  80. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-invite-dialog.tsx +139 -0
  81. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-multi-delete-dialog.tsx +89 -0
  82. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-page.tsx +30 -0
  83. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-primary-buttons.tsx +19 -0
  84. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-provider.tsx +35 -0
  85. package/templates/default/apps/admin/src/app/dashboard/users/_components/users-table.tsx +157 -0
  86. package/templates/default/apps/admin/src/app/dashboard/users/page.tsx +10 -0
  87. package/templates/default/apps/admin/src/app/globals.css +109 -0
  88. package/templates/default/apps/admin/src/app/layout.tsx +32 -0
  89. package/templates/default/apps/admin/src/app/not-found.tsx +14 -0
  90. package/templates/default/apps/admin/src/app/page.tsx +5 -0
  91. package/templates/default/apps/admin/src/components/layout/admin-layout.tsx +16 -0
  92. package/templates/default/apps/admin/src/components/layout/app-sidebar.tsx +52 -0
  93. package/templates/default/apps/admin/src/components/layout/nav-config.ts +131 -0
  94. package/templates/default/apps/admin/src/components/providers/theme-provider.tsx +10 -0
  95. package/templates/default/apps/admin/src/components/shared/long-text.tsx +78 -0
  96. package/templates/default/apps/admin/src/components/shared/search-input.tsx +16 -0
  97. package/templates/default/apps/admin/src/components/shared/select-dropdown.tsx +64 -0
  98. package/templates/default/apps/admin/src/data/apps.tsx +116 -0
  99. package/templates/default/apps/admin/src/data/chats.ts +114 -0
  100. package/templates/default/apps/admin/src/data/tasks.ts +114 -0
  101. package/templates/default/apps/admin/src/data/users.ts +90 -0
  102. package/templates/default/apps/admin/src/hooks/use-dialog-state.ts +17 -0
  103. package/templates/default/apps/admin/src/hooks/use-table-url-state.ts +243 -0
  104. package/templates/default/apps/admin/src/lib/show-submitted-data.tsx +12 -0
  105. package/templates/default/apps/admin/src/types/table.d.ts +9 -0
  106. package/templates/default/apps/admin/tsconfig.json +32 -0
  107. package/templates/default/apps/web/next.config.ts +1 -0
  108. package/templates/default/apps/web/package.json +1 -22
  109. package/templates/default/apps/web/postcss.config.cjs +0 -1
  110. package/templates/default/apps/web/src/app/(authenticated)/dashboard/page.tsx +4 -20
  111. package/templates/default/apps/web/src/app/(authenticated)/data/_components/UserTable.tsx +4 -4
  112. package/templates/default/apps/web/src/app/(authenticated)/data/page.tsx +1 -1
  113. package/templates/default/apps/web/src/app/(authenticated)/profile/page.tsx +1 -1
  114. package/templates/default/apps/web/src/app/error.tsx +8 -70
  115. package/templates/default/apps/web/src/app/global-error.tsx +8 -70
  116. package/templates/default/apps/web/src/app/globals.css +20 -0
  117. package/templates/default/apps/web/src/app/not-found.tsx +5 -39
  118. package/templates/default/apps/web/src/app/page.tsx +27 -203
  119. package/templates/default/apps/web/src/app/signin/page.tsx +27 -191
  120. package/templates/default/apps/web/src/app/signup/page.tsx +33 -240
  121. package/templates/default/apps/web/src/components/dashboard/dashboard-stats.tsx +11 -75
  122. package/templates/default/apps/web/src/components/shared/Sidebar.tsx +3 -3
  123. package/templates/default/apps/web/src/components/shared/header.tsx +17 -112
  124. package/templates/default/apps/web/tsconfig.json +0 -6
  125. package/templates/default/biome.json +30 -2
  126. package/templates/default/components.json +2 -2
  127. package/templates/default/docker-compose.yml +1 -1
  128. package/templates/default/gitignore +4 -0
  129. package/templates/default/package.json +2 -0
  130. package/templates/default/packages/admin-ui/catalog/catalog.css +54 -0
  131. package/templates/default/packages/admin-ui/catalog/catalog.tsx +401 -0
  132. package/templates/default/packages/admin-ui/catalog/index.html +12 -0
  133. package/templates/default/packages/admin-ui/catalog/main.tsx +9 -0
  134. package/templates/default/packages/admin-ui/components.json +21 -0
  135. package/templates/default/packages/admin-ui/package.json +105 -0
  136. package/templates/default/packages/admin-ui/src/command-menu/index.tsx +174 -0
  137. package/templates/default/packages/admin-ui/src/data-table/bulk-actions.tsx +215 -0
  138. package/templates/default/packages/admin-ui/src/data-table/column-header.tsx +73 -0
  139. package/templates/default/packages/admin-ui/src/data-table/data-table.tsx +127 -0
  140. package/templates/default/packages/admin-ui/src/data-table/faceted-filter.tsx +148 -0
  141. package/templates/default/packages/admin-ui/src/data-table/index.tsx +9 -0
  142. package/templates/default/packages/admin-ui/src/data-table/pagination.tsx +101 -0
  143. package/templates/default/packages/admin-ui/src/data-table/toolbar.tsx +87 -0
  144. package/templates/default/packages/admin-ui/src/data-table/view-options.tsx +57 -0
  145. package/templates/default/packages/admin-ui/src/hooks/use-mobile.tsx +23 -0
  146. package/templates/default/packages/admin-ui/src/layout/header.tsx +55 -0
  147. package/templates/default/packages/admin-ui/src/layout/index.ts +10 -0
  148. package/templates/default/packages/admin-ui/src/layout/main.tsx +23 -0
  149. package/templates/default/packages/admin-ui/src/layout/nav-group.tsx +111 -0
  150. package/templates/default/packages/admin-ui/src/layout/nav-user.tsx +114 -0
  151. package/templates/default/packages/admin-ui/src/layout/theme-switch.tsx +40 -0
  152. package/templates/default/packages/admin-ui/src/layout/types.ts +21 -0
  153. package/templates/default/packages/admin-ui/src/lib/utils.ts +6 -0
  154. package/templates/default/packages/admin-ui/src/styles/base.css +65 -0
  155. package/templates/default/packages/admin-ui/src/styles/tokens.css +91 -0
  156. package/templates/default/packages/admin-ui/src/tanstack-table.d.ts +10 -0
  157. package/templates/default/packages/admin-ui/src/ui/alert-dialog.tsx +157 -0
  158. package/templates/default/packages/admin-ui/src/ui/alert.tsx +66 -0
  159. package/templates/default/packages/admin-ui/src/ui/avatar.tsx +53 -0
  160. package/templates/default/packages/admin-ui/src/ui/badge.tsx +46 -0
  161. package/templates/default/packages/admin-ui/src/ui/breadcrumb.tsx +108 -0
  162. package/templates/default/packages/admin-ui/src/ui/button.tsx +59 -0
  163. package/templates/default/packages/admin-ui/src/ui/calendar.tsx +69 -0
  164. package/templates/default/packages/admin-ui/src/ui/card.tsx +92 -0
  165. package/templates/default/packages/admin-ui/src/ui/chart.tsx +345 -0
  166. package/templates/default/packages/admin-ui/src/ui/checkbox.tsx +32 -0
  167. package/templates/default/packages/admin-ui/src/ui/collapsible.tsx +27 -0
  168. package/templates/default/packages/admin-ui/src/ui/command.tsx +161 -0
  169. package/templates/default/packages/admin-ui/src/ui/confirm-dialog.tsx +72 -0
  170. package/templates/default/packages/admin-ui/src/ui/date-picker.tsx +53 -0
  171. package/templates/default/packages/admin-ui/src/ui/dialog.tsx +143 -0
  172. package/templates/default/packages/admin-ui/src/ui/dropdown-menu.tsx +257 -0
  173. package/templates/default/packages/admin-ui/src/ui/form.tsx +168 -0
  174. package/templates/default/packages/admin-ui/src/ui/input-otp.tsx +84 -0
  175. package/templates/default/packages/admin-ui/src/ui/input.tsx +21 -0
  176. package/templates/default/packages/admin-ui/src/ui/label.tsx +24 -0
  177. package/templates/default/packages/admin-ui/src/ui/pagination.tsx +126 -0
  178. package/templates/default/packages/admin-ui/src/ui/password-input.tsx +46 -0
  179. package/templates/default/packages/admin-ui/src/ui/popover.tsx +48 -0
  180. package/templates/default/packages/admin-ui/src/ui/progress.tsx +31 -0
  181. package/templates/default/packages/admin-ui/src/ui/radio-group.tsx +45 -0
  182. package/templates/default/packages/admin-ui/src/ui/scroll-area.tsx +52 -0
  183. package/templates/default/packages/admin-ui/src/ui/select.tsx +185 -0
  184. package/templates/default/packages/admin-ui/src/ui/separator.tsx +28 -0
  185. package/templates/default/packages/admin-ui/src/ui/sheet.tsx +149 -0
  186. package/templates/default/packages/admin-ui/src/ui/sidebar.tsx +728 -0
  187. package/templates/default/packages/admin-ui/src/ui/skeleton.tsx +13 -0
  188. package/templates/default/packages/admin-ui/src/ui/sonner.tsx +25 -0
  189. package/templates/default/packages/admin-ui/src/ui/switch.tsx +31 -0
  190. package/templates/default/packages/admin-ui/src/ui/table.tsx +116 -0
  191. package/templates/default/packages/admin-ui/src/ui/tabs.tsx +66 -0
  192. package/templates/default/packages/admin-ui/src/ui/textarea.tsx +18 -0
  193. package/templates/default/packages/admin-ui/src/ui/toggle-group.tsx +60 -0
  194. package/templates/default/packages/admin-ui/src/ui/toggle.tsx +44 -0
  195. package/templates/default/packages/admin-ui/src/ui/tooltip.tsx +61 -0
  196. package/templates/default/packages/admin-ui/tsconfig.json +8 -0
  197. package/templates/default/packages/admin-ui/vite.config.ts +11 -0
  198. package/templates/default/packages/config/package.json +0 -2
  199. package/templates/default/packages/server-core/package.json +2 -0
  200. package/templates/default/packages/ui/components.json +21 -0
  201. package/templates/default/packages/ui/package.json +42 -5
  202. package/templates/default/packages/ui/src/accordion.tsx +1 -1
  203. package/templates/default/packages/ui/src/alert-dialog.tsx +4 -4
  204. package/templates/default/packages/ui/src/alert.tsx +1 -1
  205. package/templates/default/packages/ui/src/avatar.tsx +1 -1
  206. package/templates/default/packages/ui/src/badge.tsx +1 -1
  207. package/templates/default/packages/ui/src/breadcrumb.tsx +1 -1
  208. package/templates/default/packages/ui/src/button.tsx +1 -1
  209. package/templates/default/packages/ui/src/card.tsx +1 -1
  210. package/templates/default/packages/ui/src/checkbox.tsx +1 -1
  211. package/templates/default/packages/ui/src/dialog.tsx +3 -3
  212. package/templates/default/packages/ui/src/drawer.tsx +3 -3
  213. package/templates/default/packages/ui/src/dropdown-menu.tsx +3 -3
  214. package/templates/default/packages/ui/src/form.tsx +2 -2
  215. package/templates/default/packages/ui/src/hover-card.tsx +2 -2
  216. package/templates/default/packages/ui/src/input.tsx +1 -1
  217. package/templates/default/packages/ui/src/label.tsx +1 -1
  218. package/templates/default/packages/ui/src/pagination.tsx +2 -2
  219. package/templates/default/packages/ui/src/popover.tsx +2 -2
  220. package/templates/default/packages/ui/src/progress.tsx +1 -1
  221. package/templates/default/packages/ui/src/select.tsx +2 -2
  222. package/templates/default/packages/ui/src/separator.tsx +1 -1
  223. package/templates/default/packages/ui/src/skeleton.tsx +1 -1
  224. package/templates/default/packages/ui/src/table.tsx +1 -1
  225. package/templates/default/packages/ui/src/tabs.tsx +1 -1
  226. package/templates/default/packages/ui/src/textarea.tsx +1 -1
  227. package/templates/default/packages/ui/src/tooltip.tsx +3 -3
  228. package/templates/default/packages/ui/src/typography.tsx +1 -1
  229. package/templates/default/packages/ui/tsconfig.json +1 -6
  230. package/templates/default/pnpm-lock.yaml +1319 -936
  231. package/templates/default/postcss.config.cjs +0 -1
  232. package/templates/default/turbo.json +17 -8
  233. package/templates/default/worktree.config.json +5 -0
  234. package/templates/default/.env.ci +0 -32
  235. package/templates/default/.github/workflows/ci.yml +0 -99
  236. package/templates/default/.github/workflows/preview-db.yml +0 -134
  237. package/templates/default/.playwright-mcp/dashboard.png +0 -0
  238. package/templates/default/.playwright-mcp/web-home.png +0 -0
  239. package/templates/default/apps/web/panda.config.ts +0 -114
  240. package/templates/default/apps/web/src/components/ui/accordion.tsx +0 -64
  241. package/templates/default/apps/web/src/components/ui/alert-dialog.tsx +0 -135
  242. package/templates/default/apps/web/src/components/ui/alert.tsx +0 -60
  243. package/templates/default/apps/web/src/components/ui/aspect-ratio.tsx +0 -9
  244. package/templates/default/apps/web/src/components/ui/avatar.tsx +0 -41
  245. package/templates/default/apps/web/src/components/ui/badge.tsx +0 -39
  246. package/templates/default/apps/web/src/components/ui/breadcrumb.tsx +0 -101
  247. package/templates/default/apps/web/src/components/ui/button.tsx +0 -56
  248. package/templates/default/apps/web/src/components/ui/card.tsx +0 -75
  249. package/templates/default/apps/web/src/components/ui/checkbox.tsx +0 -29
  250. package/templates/default/apps/web/src/components/ui/data-table.tsx +0 -189
  251. package/templates/default/apps/web/src/components/ui/dialog-hook.tsx +0 -210
  252. package/templates/default/apps/web/src/components/ui/dialog.tsx +0 -129
  253. package/templates/default/apps/web/src/components/ui/drawer.tsx +0 -124
  254. package/templates/default/apps/web/src/components/ui/dropdown-menu.tsx +0 -228
  255. package/templates/default/apps/web/src/components/ui/form.tsx +0 -152
  256. package/templates/default/apps/web/src/components/ui/hover-card.tsx +0 -38
  257. package/templates/default/apps/web/src/components/ui/input.tsx +0 -21
  258. package/templates/default/apps/web/src/components/ui/label.tsx +0 -21
  259. package/templates/default/apps/web/src/components/ui/pagination.tsx +0 -105
  260. package/templates/default/apps/web/src/components/ui/popover.tsx +0 -42
  261. package/templates/default/apps/web/src/components/ui/progress.tsx +0 -28
  262. package/templates/default/apps/web/src/components/ui/select.tsx +0 -170
  263. package/templates/default/apps/web/src/components/ui/separator.tsx +0 -28
  264. package/templates/default/apps/web/src/components/ui/skeleton.tsx +0 -13
  265. package/templates/default/apps/web/src/components/ui/sonner.tsx +0 -25
  266. package/templates/default/apps/web/src/components/ui/table.tsx +0 -92
  267. package/templates/default/apps/web/src/components/ui/tabs.tsx +0 -54
  268. package/templates/default/apps/web/src/components/ui/textarea.tsx +0 -18
  269. package/templates/default/apps/web/src/components/ui/tooltip.tsx +0 -57
  270. package/templates/default/apps/web/src/components/ui/typography.tsx +0 -158
  271. package/templates/default/packages/config/panda.config.ts +0 -114
  272. package/templates/default/panda.config.ts +0 -114
@@ -1,6 +1,5 @@
1
1
  module.exports = {
2
2
  plugins: {
3
- "@pandacss/dev/postcss": {},
4
3
  "@tailwindcss/postcss": {},
5
4
  },
6
5
  };
@@ -3,18 +3,21 @@
3
3
  "globalDependencies": ["**/.env.*local"],
4
4
  "tasks": {
5
5
  "build": {
6
- "dependsOn": ["^build"],
6
+ "dependsOn": ["generate", "^generate", "^build"],
7
7
  "outputs": [".next/**", "!.next/cache/**", "dist/**"]
8
8
  },
9
9
  "dev": {
10
- "dependsOn": ["panda"],
10
+ "dependsOn": ["generate", "^generate"],
11
11
  "cache": false,
12
12
  "persistent": true,
13
- "passThroughEnv": ["PORT", "PORT_WEB", "DATABASE_URL", "NEXTAUTH_URL", "AUTH_SECRET"]
13
+ "passThroughEnv": ["PORT", "PORT_WEB", "PORT_ADMIN", "DATABASE_URL", "NEXTAUTH_URL", "AUTH_SECRET"]
14
14
  },
15
- "panda": {
15
+ "catalog": {
16
16
  "cache": false,
17
- "outputs": ["styled-system/**"]
17
+ "persistent": true
18
+ },
19
+ "generate": {
20
+ "outputs": ["src/__generated__/**"]
18
21
  },
19
22
  "lint": {
20
23
  "dependsOn": ["^lint"]
@@ -29,11 +32,12 @@
29
32
  "dependsOn": ["^format:fix"]
30
33
  },
31
34
  "typecheck": {
32
- "dependsOn": ["^typecheck"]
35
+ "dependsOn": ["generate", "^generate", "^typecheck"]
33
36
  },
34
37
  "test": {
35
- "dependsOn": ["^build"],
36
- "outputs": ["coverage/**"]
38
+ "dependsOn": ["generate", "^generate", "^build"],
39
+ "outputs": ["coverage/**"],
40
+ "passThroughEnv": ["DATABASE_URL"]
37
41
  },
38
42
  "test:watch": {
39
43
  "cache": false,
@@ -54,6 +58,11 @@
54
58
  "cache": false,
55
59
  "passThroughEnv": ["DATABASE_URL"]
56
60
  },
61
+ "db:migrate:deploy": {
62
+ "dependsOn": ["generate", "^generate"],
63
+ "cache": false,
64
+ "passThroughEnv": ["DATABASE_URL"]
65
+ },
57
66
  "db:studio": {
58
67
  "cache": false,
59
68
  "persistent": true
@@ -9,6 +9,11 @@
9
9
  "id": "web",
10
10
  "portRangeStart": 3000,
11
11
  "rangeSize": 1000
12
+ },
13
+ {
14
+ "id": "admin",
15
+ "portRangeStart": 4000,
16
+ "rangeSize": 1000
12
17
  }
13
18
  ]
14
19
  }
@@ -1,32 +0,0 @@
1
- #/-------------------[DOTENV_PUBLIC_KEY]--------------------/
2
- #/ public-key encryption for .env files /
3
- #/ [how it works](https://dotenvx.com/encryption) /
4
- #/----------------------------------------------------------/
5
- DOTENV_PUBLIC_KEY_CI="02c888edf6b766c5a9781ab2966c142b5f401e9a9d534aab37d6c0fa5c12a04dfa"
6
-
7
- # .env.ci
8
- # ============================================
9
- # CI/CD Environment
10
- # ============================================
11
- # GitHub Actions等のCI/CD環境用
12
- # dotenvxで暗号化されます
13
- #
14
- # 編集方法: pnpm env:update → 「環境設定を変更」→「CI環境」
15
- # ============================================
16
-
17
- # NextAuth設定
18
- NEXTAUTH_SECRET=encrypted:BE5okc8s1H3DEle7Nb1MQybvn2KcTL2gTf1+Nd513LIRisBPPrxmE53QLV30BB64jkUsvhfC7Lgp22Hv3NL9QjgOttZxiWtVvwQyIVbIHEEdd/ett7mQxSzqw851VbMvy0TUxZ+uWvmsc55vLsy9OzUjGA==
19
- NEXTAUTH_URL=encrypted:BAx6JGRICeXVikbQhLPuF8v3RyvLhJpA36lcvVMWmbj73YnTX3jLhd7lWYgFoJVFnhtM/0ivfklrWSQW6sTS3iN+8LsQeOW0nR/LwBA9HtpbX9mb4eU8vs0cL0oB/Ev/duDjJdTEYtDgmStrZn+3jnUJw8gdUg==
20
-
21
- # データベース設定(CI用SQLite/PostgreSQL)
22
- DATABASE_URL="encrypted:BGQiR+EvdBFF0QXCwpexpZX0orPNntDQAUc37se1ZLzalhQrKcAvOZMhtFwGN0CAL21rzLHxmMN7ndiTDfHy9a8hr+Gpgk2sar1miUp+CI5l3VKQFOzgcCIe9uGoHIYU/p5yYSh9ROL6HBhCTCPlqe5Jyz+md9nkNhApqyedHmdmK5Vr5yC5cmEWltG2Krj/WBDw4hAkIST+Vzh355ZS3QT5oBVr53c="
23
-
24
- # アプリケーション設定
25
- NODE_ENV=encrypted:BMz9t7QSXJ+dMA5otX1d9bLq/2JR4/j4QwAsCmfiPXtUfwANtPlyigFGcq9fCOdtmTZ5pHgKtGFsO3LQ8JmTgutx9dj0IeeVnFFaVKkEBhsrBzIsrnm4kAgvtA/PqwGXeNT5UE0=
26
-
27
- VERCEL_TOKEN=
28
- VERCEL_ORG_ID=
29
- VERCEL_PROJECT_ID_WEB=
30
-
31
- TURBO_TOKEN=encrypted:BCX+8GLR1/VqhVW3JzqOXHP8JD6PjQhkodGY3W3gDzz64H/kI2HRQyBviTa7x5gsjXF7FqggzxZ/zkC//ixrFlvLQa1beC/5odd8rBEvs+ZGHWEeLG8c5XxudVsTsHIWjA==
32
- TURBO_TEAM=encrypted:BMSAczdJn8VnXxSvrIqn38ubQ334pbFtFyeKkmK2995mvj7B17YE5oCYmKIUxQdzkbD7NWLhOrjTkAqAXODpxVxi9JGjy8T2d7a8F6lurz7AY84jVY3tlcuYKWyw2RIrOA==
@@ -1,99 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- pull_request:
6
- branches: [main]
7
-
8
- jobs:
9
- test:
10
- runs-on: ubuntu-latest
11
-
12
- steps:
13
- - name: Checkout code
14
- uses: actions/checkout@v4
15
-
16
- - name: Setup pnpm
17
- uses: pnpm/action-setup@v4
18
- with:
19
- version: 10.14.0
20
-
21
- - name: Setup Node.js
22
- uses: actions/setup-node@v4
23
- with:
24
- node-version: '22.16.0'
25
- cache: 'pnpm'
26
-
27
- - name: Install dependencies
28
- run: pnpm install --frozen-lockfile
29
-
30
- - name: Generate Prisma Client
31
- run: pnpm db:generate
32
-
33
- - name: Generate Panda CSS
34
- run: |
35
- pnpm --filter @einja/web panda
36
- # Panda CSS生成確認
37
- if [ ! -d "apps/web/styled-system" ]; then
38
- echo "Error: styled-system directory was not created"
39
- exit 1
40
- fi
41
- echo "Panda CSS generated successfully"
42
- ls -la apps/web/styled-system
43
-
44
- - name: Run TypeScript type check
45
- run: pnpm typecheck
46
-
47
- - name: Run lint
48
- run: pnpm lint
49
-
50
- - name: Run tests
51
- run: pnpm test
52
-
53
- deploy-web:
54
- needs: test
55
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
56
- runs-on: ubuntu-latest
57
- env:
58
- DOTENV_PRIVATE_KEY_CI: ${{ secrets.DOTENV_PRIVATE_KEY_CI }}
59
- steps:
60
- - name: Checkout code
61
- uses: actions/checkout@v4
62
-
63
- - name: Setup pnpm
64
- uses: pnpm/action-setup@v4
65
- with:
66
- version: 10.14.0
67
-
68
- - name: Setup Node.js
69
- uses: actions/setup-node@v4
70
- with:
71
- node-version: '22.16.0'
72
- cache: 'pnpm'
73
-
74
- - name: Install dependencies
75
- run: pnpm install --frozen-lockfile
76
-
77
- - name: Install Vercel CLI
78
- run: pnpm add -g vercel@latest
79
-
80
- - name: Pull Vercel Environment Information
81
- run: |
82
- npx dotenvx run -f ../../.env.ci -- \
83
- vercel pull --yes --environment=production
84
- working-directory: apps/web
85
-
86
- - name: Build Project Artifacts
87
- run: |
88
- npx dotenvx run -f ../../.env.ci -f ../../.env.production -- \
89
- vercel build --prod
90
- working-directory: apps/web
91
- env:
92
- DOTENV_PRIVATE_KEY_CI: ${{ secrets.DOTENV_PRIVATE_KEY_CI }}
93
- DOTENV_PRIVATE_KEY_PRODUCTION: ${{ secrets.DOTENV_PRIVATE_KEY_PRODUCTION }}
94
-
95
- - name: Deploy to Vercel
96
- run: |
97
- npx dotenvx run -f ../../.env.ci -- \
98
- vercel deploy --prebuilt --prod
99
- working-directory: apps/web
@@ -1,134 +0,0 @@
1
- name: Preview DB
2
-
3
- on:
4
- pull_request:
5
- types: [opened, reopened, synchronize, closed]
6
-
7
- jobs:
8
- # PR opened/reopened/synchronize → DB作成・スキーマ同期・デプロイ
9
- setup-and-deploy:
10
- # 同一repoからのPRのみ(フォークPRはSecrets使用不可のため除外)
11
- if: |
12
- github.event.action != 'closed' &&
13
- github.event.pull_request.head.repo.full_name == github.repository
14
- runs-on: ubuntu-latest
15
- steps:
16
- - uses: actions/checkout@v4
17
-
18
- - name: Setup pnpm
19
- uses: pnpm/action-setup@v4
20
- with:
21
- version: 10.14.0
22
-
23
- - name: Setup Node.js
24
- uses: actions/setup-node@v4
25
- with:
26
- node-version: '22.16.0'
27
- cache: 'pnpm'
28
-
29
- - name: Install dependencies
30
- run: pnpm install --frozen-lockfile
31
-
32
- # 0. .env.previewからNeon環境変数をエクスポート
33
- - name: Export Neon environment variables
34
- run: |
35
- npx dotenvx run -f .env.preview -- bash -c 'echo "NEON_API_KEY=$NEON_API_KEY" >> $GITHUB_ENV'
36
- npx dotenvx run -f .env.preview -- bash -c 'echo "NEON_PROJECT_ID=$NEON_PROJECT_ID" >> $GITHUB_ENV'
37
- env:
38
- DOTENV_PRIVATE_KEY_PREVIEW: ${{ secrets.DOTENV_PRIVATE_KEY_PREVIEW }}
39
-
40
- # 1. Neon Branch 作成(v6 + expires_at)
41
- - name: Create Neon Branch
42
- id: create-branch
43
- uses: neondatabase/create-branch-action@v6
44
- with:
45
- project_id: ${{ env.NEON_PROJECT_ID }}
46
- branch_name: preview/pr-${{ github.event.number }}
47
- api_key: ${{ env.NEON_API_KEY }}
48
- # 1日間アクセスがなければサスペンド(コスト削減)
49
- suspend_timeout: 86400
50
-
51
- # 2. スキーマ同期 + シード(直接接続)
52
- - name: Push Schema
53
- run: pnpm db:push
54
- env:
55
- DATABASE_URL: ${{ steps.create-branch.outputs.db_url }}
56
-
57
- - name: Run Seed
58
- run: pnpm --filter @repo/server-core db:seed
59
- env:
60
- DATABASE_URL: ${{ steps.create-branch.outputs.db_url }}
61
-
62
- # 3. Vercel Build(プール接続)
63
- - name: Install Vercel CLI
64
- run: pnpm add -g vercel@latest
65
-
66
- - name: Pull Vercel Environment
67
- run: |
68
- npx dotenvx run -f ../../.env.ci -- \
69
- vercel pull --yes --environment=preview
70
- working-directory: apps/web
71
- env:
72
- DOTENV_PRIVATE_KEY_CI: ${{ secrets.DOTENV_PRIVATE_KEY_CI }}
73
-
74
- # NOTE: dotenvxはデフォルトで既存の環境変数を上書きしない
75
- # env:で設定したDATABASE_URLがNeonブランチのURLとして優先される
76
- - name: Build Project
77
- run: |
78
- npx dotenvx run -f ../../.env.ci -f ../../.env.preview -- \
79
- vercel build
80
- working-directory: apps/web
81
- env:
82
- DOTENV_PRIVATE_KEY_CI: ${{ secrets.DOTENV_PRIVATE_KEY_CI }}
83
- DOTENV_PRIVATE_KEY_PREVIEW: ${{ secrets.DOTENV_PRIVATE_KEY_PREVIEW }}
84
- DATABASE_URL: ${{ steps.create-branch.outputs.db_url_pooled }}
85
-
86
- # 4. Vercel Deploy(ランタイムにもDATABASE_URLを渡す)
87
- - name: Deploy to Vercel
88
- run: |
89
- npx dotenvx run -f ../../.env.ci -- \
90
- vercel deploy --prebuilt \
91
- --env DATABASE_URL="${{ steps.create-branch.outputs.db_url_pooled }}"
92
- working-directory: apps/web
93
- env:
94
- DOTENV_PRIVATE_KEY_CI: ${{ secrets.DOTENV_PRIVATE_KEY_CI }}
95
-
96
- # PR closed → DB削除
97
- cleanup:
98
- # 同一repoからのPRのみ(フォークPRはSecrets使用不可のため除外)
99
- if: |
100
- github.event.action == 'closed' &&
101
- github.event.pull_request.head.repo.full_name == github.repository
102
- runs-on: ubuntu-latest
103
- steps:
104
- - uses: actions/checkout@v4
105
-
106
- - name: Setup pnpm
107
- uses: pnpm/action-setup@v4
108
- with:
109
- version: 10.14.0
110
-
111
- - name: Setup Node.js
112
- uses: actions/setup-node@v4
113
- with:
114
- node-version: '22.16.0'
115
- cache: 'pnpm'
116
-
117
- - name: Install dependencies
118
- run: pnpm install --frozen-lockfile
119
-
120
- - name: Export Neon environment variables
121
- run: |
122
- npx dotenvx run -f .env.preview -- bash -c 'echo "NEON_API_KEY=$NEON_API_KEY" >> $GITHUB_ENV'
123
- npx dotenvx run -f .env.preview -- bash -c 'echo "NEON_PROJECT_ID=$NEON_PROJECT_ID" >> $GITHUB_ENV'
124
- env:
125
- DOTENV_PRIVATE_KEY_PREVIEW: ${{ secrets.DOTENV_PRIVATE_KEY_PREVIEW }}
126
-
127
- - name: Delete Neon Branch
128
- # ブランチが既に削除済み(expires_at等)でも失敗しないようにする
129
- continue-on-error: true
130
- uses: neondatabase/delete-branch-action@v3
131
- with:
132
- project_id: ${{ env.NEON_PROJECT_ID }}
133
- branch: preview/pr-${{ github.event.number }}
134
- api_key: ${{ env.NEON_API_KEY }}
@@ -1,114 +0,0 @@
1
- import { defineConfig } from "@pandacss/dev";
2
-
3
- export default defineConfig({
4
- // TailwindCSSとの共存のためpreflightを無効化
5
- preflight: false,
6
-
7
- // Where to look for your css declarations
8
- include: ["./src/**/*.{js,jsx,ts,tsx}", "./pages/**/*.{js,jsx,ts,tsx}"],
9
-
10
- // Files to exclude
11
- exclude: [],
12
-
13
- // Panda CSSクラスにプレフィックスを付けてTailwindと区別
14
- prefix: "panda",
15
-
16
- // Useful for theme customization
17
- theme: {
18
- extend: {
19
- breakpoints: {
20
- sm: "640px",
21
- md: "768px",
22
- lg: "1024px",
23
- xl: "1280px",
24
- "2xl": "1440px",
25
- },
26
- tokens: {
27
- colors: {
28
- // shadcnのカラーシステムと互換性を保つ
29
- border: { value: "hsl(214.3 31.8% 91.4%)" },
30
- input: { value: "hsl(214.3 31.8% 91.4%)" },
31
- ring: { value: "hsl(222.2 84% 4.9%)" },
32
- background: { value: "hsl(0 0% 100%)" },
33
- foreground: { value: "hsl(222.2 84% 4.9%)" },
34
- primary: {
35
- DEFAULT: { value: "hsl(222.2 47.4% 11.2%)" },
36
- foreground: { value: "hsl(210 40% 98%)" },
37
- },
38
- secondary: {
39
- DEFAULT: { value: "hsl(210 40% 96%)" },
40
- foreground: { value: "hsl(222.2 84% 4.9%)" },
41
- },
42
- destructive: {
43
- DEFAULT: { value: "hsl(0 62.8% 30.6%)" },
44
- foreground: { value: "hsl(210 40% 98%)" },
45
- },
46
- muted: {
47
- DEFAULT: { value: "hsl(210 40% 96%)" },
48
- foreground: { value: "hsl(215.4 16.3% 46.9%)" },
49
- },
50
- accent: {
51
- DEFAULT: { value: "hsl(210 40% 96%)" },
52
- foreground: { value: "hsl(222.2 84% 4.9%)" },
53
- },
54
- popover: {
55
- DEFAULT: { value: "hsl(0 0% 100%)" },
56
- foreground: { value: "hsl(222.2 84% 4.9%)" },
57
- },
58
- card: {
59
- DEFAULT: { value: "hsl(0 0% 100%)" },
60
- foreground: { value: "hsl(222.2 84% 4.9%)" },
61
- },
62
- },
63
- },
64
- recipes: {
65
- // 独自のPanda CSSレシピを定義
66
- pandaButton: {
67
- className: "panda-button",
68
- base: {
69
- display: "inline-flex",
70
- alignItems: "center",
71
- justifyContent: "center",
72
- borderRadius: "md",
73
- fontSize: "sm",
74
- fontWeight: "medium",
75
- transition: "all 0.2s",
76
- cursor: "pointer",
77
- _disabled: {
78
- pointerEvents: "none",
79
- opacity: 0.5,
80
- },
81
- },
82
- variants: {
83
- variant: {
84
- primary: {
85
- bg: "primary",
86
- color: "primary.foreground",
87
- _hover: { opacity: 0.9 },
88
- },
89
- secondary: {
90
- bg: "secondary",
91
- color: "secondary.foreground",
92
- _hover: { opacity: 0.8 },
93
- },
94
- },
95
- size: {
96
- sm: { h: "8", px: "3" },
97
- md: { h: "10", px: "4" },
98
- lg: { h: "12", px: "6" },
99
- },
100
- },
101
- defaultVariants: {
102
- variant: "primary",
103
- size: "md",
104
- },
105
- },
106
- },
107
- },
108
- },
109
-
110
- // The output directory for your css system
111
- outdir: "styled-system",
112
-
113
- jsxFramework: "react",
114
- });
@@ -1,64 +0,0 @@
1
- "use client";
2
-
3
- import * as AccordionPrimitive from "@radix-ui/react-accordion";
4
- import { ChevronDownIcon } from "lucide-react";
5
- import type * as React from "react";
6
-
7
- import { cn } from "{{packageName}}/ui/utils";
8
-
9
- function Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {
10
- return <AccordionPrimitive.Root data-slot="accordion" {...props} />;
11
- }
12
-
13
- function AccordionItem({
14
- className,
15
- ...props
16
- }: React.ComponentProps<typeof AccordionPrimitive.Item>) {
17
- return (
18
- <AccordionPrimitive.Item
19
- data-slot="accordion-item"
20
- className={cn("border-b last:border-b-0", className)}
21
- {...props}
22
- />
23
- );
24
- }
25
-
26
- function AccordionTrigger({
27
- className,
28
- children,
29
- ...props
30
- }: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
31
- return (
32
- <AccordionPrimitive.Header className="flex">
33
- <AccordionPrimitive.Trigger
34
- data-slot="accordion-trigger"
35
- className={cn(
36
- "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
37
- className
38
- )}
39
- {...props}
40
- >
41
- {children}
42
- <ChevronDownIcon className="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" />
43
- </AccordionPrimitive.Trigger>
44
- </AccordionPrimitive.Header>
45
- );
46
- }
47
-
48
- function AccordionContent({
49
- className,
50
- children,
51
- ...props
52
- }: React.ComponentProps<typeof AccordionPrimitive.Content>) {
53
- return (
54
- <AccordionPrimitive.Content
55
- data-slot="accordion-content"
56
- className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
57
- {...props}
58
- >
59
- <div className={cn("pt-0 pb-4", className)}>{children}</div>
60
- </AccordionPrimitive.Content>
61
- );
62
- }
63
-
64
- export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
@@ -1,135 +0,0 @@
1
- "use client";
2
-
3
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
4
- import type * as React from "react";
5
-
6
- import { buttonVariants } from "@/components/ui/button";
7
- import { cn } from "{{packageName}}/ui/utils";
8
-
9
- function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {
10
- return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />;
11
- }
12
-
13
- function AlertDialogTrigger({
14
- ...props
15
- }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {
16
- return <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />;
17
- }
18
-
19
- function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {
20
- return <AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" {...props} />;
21
- }
22
-
23
- function AlertDialogOverlay({
24
- className,
25
- ...props
26
- }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {
27
- return (
28
- <AlertDialogPrimitive.Overlay
29
- data-slot="alert-dialog-overlay"
30
- className={cn(
31
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
32
- className
33
- )}
34
- {...props}
35
- />
36
- );
37
- }
38
-
39
- function AlertDialogContent({
40
- className,
41
- ...props
42
- }: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {
43
- return (
44
- <AlertDialogPortal>
45
- <AlertDialogOverlay />
46
- <AlertDialogPrimitive.Content
47
- data-slot="alert-dialog-content"
48
- className={cn(
49
- "bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
50
- className
51
- )}
52
- {...props}
53
- />
54
- </AlertDialogPortal>
55
- );
56
- }
57
-
58
- function AlertDialogHeader({ className, ...props }: React.ComponentProps<"div">) {
59
- return (
60
- <div
61
- data-slot="alert-dialog-header"
62
- className={cn("flex flex-col gap-2 text-center sm:text-left", className)}
63
- {...props}
64
- />
65
- );
66
- }
67
-
68
- function AlertDialogFooter({ className, ...props }: React.ComponentProps<"div">) {
69
- return (
70
- <div
71
- data-slot="alert-dialog-footer"
72
- className={cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className)}
73
- {...props}
74
- />
75
- );
76
- }
77
-
78
- function AlertDialogTitle({
79
- className,
80
- ...props
81
- }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {
82
- return (
83
- <AlertDialogPrimitive.Title
84
- data-slot="alert-dialog-title"
85
- className={cn("text-lg font-semibold", className)}
86
- {...props}
87
- />
88
- );
89
- }
90
-
91
- function AlertDialogDescription({
92
- className,
93
- ...props
94
- }: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {
95
- return (
96
- <AlertDialogPrimitive.Description
97
- data-slot="alert-dialog-description"
98
- className={cn("text-muted-foreground text-sm", className)}
99
- {...props}
100
- />
101
- );
102
- }
103
-
104
- function AlertDialogAction({
105
- className,
106
- ...props
107
- }: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {
108
- return <AlertDialogPrimitive.Action className={cn(buttonVariants(), className)} {...props} />;
109
- }
110
-
111
- function AlertDialogCancel({
112
- className,
113
- ...props
114
- }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {
115
- return (
116
- <AlertDialogPrimitive.Cancel
117
- className={cn(buttonVariants({ variant: "outline" }), className)}
118
- {...props}
119
- />
120
- );
121
- }
122
-
123
- export {
124
- AlertDialog,
125
- AlertDialogPortal,
126
- AlertDialogOverlay,
127
- AlertDialogTrigger,
128
- AlertDialogContent,
129
- AlertDialogHeader,
130
- AlertDialogFooter,
131
- AlertDialogTitle,
132
- AlertDialogDescription,
133
- AlertDialogAction,
134
- AlertDialogCancel,
135
- };