@proofkit/cli 1.0.0-beta.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 (317) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +19 -0
  4. package/dist/acorn-AKFTBDM6.js +15 -0
  5. package/dist/angular-BOQ6FHSU.js +2 -0
  6. package/dist/babel-ZTOORN7K.js +15 -0
  7. package/dist/chunk-4LISTI44.js +1 -0
  8. package/dist/estree-KOJPX4S6.js +36 -0
  9. package/dist/flow-RCI44GYZ.js +19 -0
  10. package/dist/glimmer-GV5EF5E4.js +30 -0
  11. package/dist/graphql-YXQNPQWM.js +29 -0
  12. package/dist/html-ZAJTRROK.js +22 -0
  13. package/dist/index.js +300 -0
  14. package/dist/markdown-Q75DTQI7.js +63 -0
  15. package/dist/meriyah-32K7GBV5.js +4 -0
  16. package/dist/postcss-WWYO4PGL.js +54 -0
  17. package/dist/typescript-M6N7JDNQ.js +20 -0
  18. package/dist/yaml-LY7PNAYV.js +161 -0
  19. package/index.d.ts +19 -0
  20. package/package.json +122 -0
  21. package/template/extras/_cursor/conditional-rules/nextjs-framework.mdc +51 -0
  22. package/template/extras/_cursor/conditional-rules/npm.mdc +60 -0
  23. package/template/extras/_cursor/conditional-rules/pnpm.mdc +65 -0
  24. package/template/extras/_cursor/conditional-rules/yarn.mdc +60 -0
  25. package/template/extras/_cursor/rules/cursor-rules.mdc +88 -0
  26. package/template/extras/_cursor/rules/filemaker-api.mdc +176 -0
  27. package/template/extras/_cursor/rules/troubleshooting-patterns.mdc +240 -0
  28. package/template/extras/_cursor/rules/ui-components.mdc +57 -0
  29. package/template/extras/config/_eslint.js +27 -0
  30. package/template/extras/config/_prettier.config.js +6 -0
  31. package/template/extras/config/drizzle-config-mysql.ts +12 -0
  32. package/template/extras/config/drizzle-config-postgres.ts +12 -0
  33. package/template/extras/config/drizzle-config-sqlite.ts +12 -0
  34. package/template/extras/config/fmschema.config.mjs +9 -0
  35. package/template/extras/config/get-query-client.ts +6 -0
  36. package/template/extras/config/postcss.config.cjs +7 -0
  37. package/template/extras/config/query-provider-vite.tsx +19 -0
  38. package/template/extras/config/query-provider.tsx +21 -0
  39. package/template/extras/emailProviders/none/email.tsx +24 -0
  40. package/template/extras/emailProviders/plunk/email.tsx +26 -0
  41. package/template/extras/emailProviders/plunk/service.ts +4 -0
  42. package/template/extras/emailProviders/resend/email.tsx +23 -0
  43. package/template/extras/emailProviders/resend/service.ts +4 -0
  44. package/template/extras/fmaddon-auth/app/(main)/auth/profile/actions.ts +93 -0
  45. package/template/extras/fmaddon-auth/app/(main)/auth/profile/page.tsx +27 -0
  46. package/template/extras/fmaddon-auth/app/(main)/auth/profile/profile-form.tsx +56 -0
  47. package/template/extras/fmaddon-auth/app/(main)/auth/profile/reset-password-form.tsx +110 -0
  48. package/template/extras/fmaddon-auth/app/(main)/auth/profile/schema.ts +19 -0
  49. package/template/extras/fmaddon-auth/app/auth/forgot-password/actions.ts +37 -0
  50. package/template/extras/fmaddon-auth/app/auth/forgot-password/forgot-form.tsx +41 -0
  51. package/template/extras/fmaddon-auth/app/auth/forgot-password/page.tsx +21 -0
  52. package/template/extras/fmaddon-auth/app/auth/forgot-password/schema.ts +5 -0
  53. package/template/extras/fmaddon-auth/app/auth/login/actions.ts +34 -0
  54. package/template/extras/fmaddon-auth/app/auth/login/login-form.tsx +64 -0
  55. package/template/extras/fmaddon-auth/app/auth/login/page.tsx +26 -0
  56. package/template/extras/fmaddon-auth/app/auth/login/schema.ts +6 -0
  57. package/template/extras/fmaddon-auth/app/auth/reset-password/actions.ts +50 -0
  58. package/template/extras/fmaddon-auth/app/auth/reset-password/page.tsx +32 -0
  59. package/template/extras/fmaddon-auth/app/auth/reset-password/reset-password-form.tsx +59 -0
  60. package/template/extras/fmaddon-auth/app/auth/reset-password/schema.ts +14 -0
  61. package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/actions.ts +45 -0
  62. package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/page.tsx +32 -0
  63. package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/schema.ts +5 -0
  64. package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/verify-email-form.tsx +48 -0
  65. package/template/extras/fmaddon-auth/app/auth/signup/actions.ts +49 -0
  66. package/template/extras/fmaddon-auth/app/auth/signup/page.tsx +26 -0
  67. package/template/extras/fmaddon-auth/app/auth/signup/schema.ts +12 -0
  68. package/template/extras/fmaddon-auth/app/auth/signup/signup-form.tsx +67 -0
  69. package/template/extras/fmaddon-auth/app/auth/verify-email/actions.ts +110 -0
  70. package/template/extras/fmaddon-auth/app/auth/verify-email/email-verification-form.tsx +45 -0
  71. package/template/extras/fmaddon-auth/app/auth/verify-email/page.tsx +38 -0
  72. package/template/extras/fmaddon-auth/app/auth/verify-email/resend-button.tsx +35 -0
  73. package/template/extras/fmaddon-auth/app/auth/verify-email/schema.ts +5 -0
  74. package/template/extras/fmaddon-auth/components/auth/actions.ts +16 -0
  75. package/template/extras/fmaddon-auth/components/auth/protect.tsx +17 -0
  76. package/template/extras/fmaddon-auth/components/auth/redirect.tsx +26 -0
  77. package/template/extras/fmaddon-auth/components/auth/use-user.ts +59 -0
  78. package/template/extras/fmaddon-auth/components/auth/user-menu.tsx +51 -0
  79. package/template/extras/fmaddon-auth/emails/auth-code.tsx +156 -0
  80. package/template/extras/fmaddon-auth/middleware.ts +45 -0
  81. package/template/extras/fmaddon-auth/server/auth/utils/email-verification.ts +136 -0
  82. package/template/extras/fmaddon-auth/server/auth/utils/encryption.ts +51 -0
  83. package/template/extras/fmaddon-auth/server/auth/utils/index.ts +16 -0
  84. package/template/extras/fmaddon-auth/server/auth/utils/password-reset.ts +152 -0
  85. package/template/extras/fmaddon-auth/server/auth/utils/password.ts +67 -0
  86. package/template/extras/fmaddon-auth/server/auth/utils/redirect.ts +8 -0
  87. package/template/extras/fmaddon-auth/server/auth/utils/session.ts +192 -0
  88. package/template/extras/fmaddon-auth/server/auth/utils/user.ts +147 -0
  89. package/template/extras/prisma/schema/base-planetscale.prisma +24 -0
  90. package/template/extras/prisma/schema/base.prisma +20 -0
  91. package/template/extras/prisma/schema/with-auth-planetscale.prisma +77 -0
  92. package/template/extras/prisma/schema/with-auth.prisma +74 -0
  93. package/template/extras/src/app/_components/post-tw.tsx +50 -0
  94. package/template/extras/src/app/_components/post.tsx +54 -0
  95. package/template/extras/src/app/api/auth/[...nextauth]/route.ts +4 -0
  96. package/template/extras/src/app/api/trpc/[trpc]/route.ts +34 -0
  97. package/template/extras/src/app/clerk-auth/layout.tsx +10 -0
  98. package/template/extras/src/app/clerk-auth/signin/[[...sign-in]]/page.tsx +5 -0
  99. package/template/extras/src/app/clerk-auth/signup/[[...sign-up]]/page.tsx +5 -0
  100. package/template/extras/src/app/layout/base.tsx +34 -0
  101. package/template/extras/src/app/layout/main-shell.tsx +37 -0
  102. package/template/extras/src/app/layout/with-trpc-tw.tsx +24 -0
  103. package/template/extras/src/app/layout/with-trpc.tsx +24 -0
  104. package/template/extras/src/app/layout/with-tw.tsx +20 -0
  105. package/template/extras/src/app/next-auth/layout.tsx +22 -0
  106. package/template/extras/src/app/next-auth/signin/page.tsx +82 -0
  107. package/template/extras/src/app/next-auth/signup/action.ts +24 -0
  108. package/template/extras/src/app/next-auth/signup/page.tsx +40 -0
  109. package/template/extras/src/app/next-auth/signup/validation.ts +12 -0
  110. package/template/extras/src/app/page/base.tsx +6 -0
  111. package/template/extras/src/app/page/with-auth-trpc-tw.tsx +67 -0
  112. package/template/extras/src/app/page/with-auth-trpc.tsx +68 -0
  113. package/template/extras/src/app/page/with-trpc-tw.tsx +53 -0
  114. package/template/extras/src/app/page/with-trpc.tsx +54 -0
  115. package/template/extras/src/app/page/with-tw.tsx +37 -0
  116. package/template/extras/src/components/clerk-auth/clerk-provider.tsx +18 -0
  117. package/template/extras/src/components/clerk-auth/user-menu-mobile.tsx +36 -0
  118. package/template/extras/src/components/clerk-auth/user-menu.tsx +24 -0
  119. package/template/extras/src/components/next-auth/next-auth-provider.tsx +14 -0
  120. package/template/extras/src/components/next-auth/user-menu-mobile.tsx +31 -0
  121. package/template/extras/src/components/next-auth/user-menu.tsx +38 -0
  122. package/template/extras/src/env/with-auth.ts +31 -0
  123. package/template/extras/src/env/with-clerk.ts +20 -0
  124. package/template/extras/src/index.module.css +177 -0
  125. package/template/extras/src/middleware/clerk.ts +20 -0
  126. package/template/extras/src/middleware/next-auth.ts +5 -0
  127. package/template/extras/src/pages/_app/base.tsx +14 -0
  128. package/template/extras/src/pages/_app/with-auth-trpc-tw.tsx +23 -0
  129. package/template/extras/src/pages/_app/with-auth-trpc.tsx +23 -0
  130. package/template/extras/src/pages/_app/with-auth-tw.tsx +21 -0
  131. package/template/extras/src/pages/_app/with-auth.tsx +21 -0
  132. package/template/extras/src/pages/_app/with-trpc-tw.tsx +16 -0
  133. package/template/extras/src/pages/_app/with-trpc.tsx +16 -0
  134. package/template/extras/src/pages/_app/with-tw.tsx +14 -0
  135. package/template/extras/src/pages/api/auth/[...nextauth].ts +5 -0
  136. package/template/extras/src/pages/api/trpc/[trpc].ts +19 -0
  137. package/template/extras/src/pages/index/base.tsx +47 -0
  138. package/template/extras/src/pages/index/with-auth-trpc-tw.tsx +80 -0
  139. package/template/extras/src/pages/index/with-auth-trpc.tsx +81 -0
  140. package/template/extras/src/pages/index/with-trpc-tw.tsx +52 -0
  141. package/template/extras/src/pages/index/with-trpc.tsx +53 -0
  142. package/template/extras/src/pages/index/with-tw.tsx +45 -0
  143. package/template/extras/src/server/api/root.ts +23 -0
  144. package/template/extras/src/server/api/routers/post/base.ts +40 -0
  145. package/template/extras/src/server/api/routers/post/with-auth-drizzle.ts +39 -0
  146. package/template/extras/src/server/api/routers/post/with-auth-prisma.ts +41 -0
  147. package/template/extras/src/server/api/routers/post/with-auth.ts +37 -0
  148. package/template/extras/src/server/api/routers/post/with-drizzle.ts +30 -0
  149. package/template/extras/src/server/api/routers/post/with-prisma.ts +31 -0
  150. package/template/extras/src/server/api/trpc-app/base.ts +103 -0
  151. package/template/extras/src/server/api/trpc-app/with-auth-db.ts +133 -0
  152. package/template/extras/src/server/api/trpc-app/with-auth.ts +130 -0
  153. package/template/extras/src/server/api/trpc-app/with-db.ts +106 -0
  154. package/template/extras/src/server/api/trpc-pages/base.ts +122 -0
  155. package/template/extras/src/server/api/trpc-pages/with-auth-db.ts +160 -0
  156. package/template/extras/src/server/api/trpc-pages/with-auth.ts +158 -0
  157. package/template/extras/src/server/api/trpc-pages/with-db.ts +125 -0
  158. package/template/extras/src/server/data/users.ts +23 -0
  159. package/template/extras/src/server/db/db-prisma-planetscale.ts +22 -0
  160. package/template/extras/src/server/db/db-prisma.ts +17 -0
  161. package/template/extras/src/server/db/index-drizzle/with-mysql.ts +18 -0
  162. package/template/extras/src/server/db/index-drizzle/with-planetscale.ts +7 -0
  163. package/template/extras/src/server/db/index-drizzle/with-postgres.ts +18 -0
  164. package/template/extras/src/server/db/index-drizzle/with-sqlite.ts +19 -0
  165. package/template/extras/src/server/db/schema-drizzle/base-mysql.ts +34 -0
  166. package/template/extras/src/server/db/schema-drizzle/base-planetscale.ts +34 -0
  167. package/template/extras/src/server/db/schema-drizzle/base-postgres.ts +36 -0
  168. package/template/extras/src/server/db/schema-drizzle/base-sqlite.ts +30 -0
  169. package/template/extras/src/server/db/schema-drizzle/with-auth-mysql.ts +123 -0
  170. package/template/extras/src/server/db/schema-drizzle/with-auth-planetscale.ts +117 -0
  171. package/template/extras/src/server/db/schema-drizzle/with-auth-postgres.ts +130 -0
  172. package/template/extras/src/server/db/schema-drizzle/with-auth-sqlite.ts +116 -0
  173. package/template/extras/src/server/next-auth/base.ts +111 -0
  174. package/template/extras/src/server/next-auth/password.ts +13 -0
  175. package/template/extras/src/server/next-auth/with-drizzle.ts +83 -0
  176. package/template/extras/src/server/next-auth/with-prisma.ts +72 -0
  177. package/template/extras/src/trpc/query-client.ts +25 -0
  178. package/template/extras/src/trpc/react.tsx +76 -0
  179. package/template/extras/src/trpc/server.ts +30 -0
  180. package/template/extras/src/utils/api.ts +68 -0
  181. package/template/extras/start-database/mysql.sh +54 -0
  182. package/template/extras/start-database/postgres.sh +55 -0
  183. package/template/fm-addon/ProofKitAuth/de.xml +518 -0
  184. package/template/fm-addon/ProofKitAuth/en.xml +518 -0
  185. package/template/fm-addon/ProofKitAuth/es.xml +518 -0
  186. package/template/fm-addon/ProofKitAuth/fr.xml +518 -0
  187. package/template/fm-addon/ProofKitAuth/icon.png +0 -0
  188. package/template/fm-addon/ProofKitAuth/icon@2x.png +0 -0
  189. package/template/fm-addon/ProofKitAuth/info.json +11 -0
  190. package/template/fm-addon/ProofKitAuth/info_de.json +18 -0
  191. package/template/fm-addon/ProofKitAuth/info_en.json +8 -0
  192. package/template/fm-addon/ProofKitAuth/info_es.json +18 -0
  193. package/template/fm-addon/ProofKitAuth/info_fr.json +18 -0
  194. package/template/fm-addon/ProofKitAuth/info_it.json +18 -0
  195. package/template/fm-addon/ProofKitAuth/info_ja.json +18 -0
  196. package/template/fm-addon/ProofKitAuth/info_ko.json +18 -0
  197. package/template/fm-addon/ProofKitAuth/info_nl.json +18 -0
  198. package/template/fm-addon/ProofKitAuth/info_pt.json +18 -0
  199. package/template/fm-addon/ProofKitAuth/info_sv.json +18 -0
  200. package/template/fm-addon/ProofKitAuth/info_zh.json +18 -0
  201. package/template/fm-addon/ProofKitAuth/it.xml +518 -0
  202. package/template/fm-addon/ProofKitAuth/ja.xml +518 -0
  203. package/template/fm-addon/ProofKitAuth/ko.xml +518 -0
  204. package/template/fm-addon/ProofKitAuth/nl.xml +518 -0
  205. package/template/fm-addon/ProofKitAuth/preview.png +0 -0
  206. package/template/fm-addon/ProofKitAuth/pt.xml +518 -0
  207. package/template/fm-addon/ProofKitAuth/sv.xml +518 -0
  208. package/template/fm-addon/ProofKitAuth/template.xml +0 -0
  209. package/template/fm-addon/ProofKitAuth/zh.xml +518 -0
  210. package/template/fm-addon/ProofKitWV/de.xml +896 -0
  211. package/template/fm-addon/ProofKitWV/en.xml +896 -0
  212. package/template/fm-addon/ProofKitWV/es.xml +896 -0
  213. package/template/fm-addon/ProofKitWV/fr.xml +896 -0
  214. package/template/fm-addon/ProofKitWV/icon.png +0 -0
  215. package/template/fm-addon/ProofKitWV/icon@2x.png +0 -0
  216. package/template/fm-addon/ProofKitWV/info.json +11 -0
  217. package/template/fm-addon/ProofKitWV/info_de.json +18 -0
  218. package/template/fm-addon/ProofKitWV/info_en.json +11 -0
  219. package/template/fm-addon/ProofKitWV/info_es.json +18 -0
  220. package/template/fm-addon/ProofKitWV/info_fr.json +18 -0
  221. package/template/fm-addon/ProofKitWV/info_it.json +18 -0
  222. package/template/fm-addon/ProofKitWV/info_ja.json +18 -0
  223. package/template/fm-addon/ProofKitWV/info_ko.json +18 -0
  224. package/template/fm-addon/ProofKitWV/info_nl.json +18 -0
  225. package/template/fm-addon/ProofKitWV/info_pt.json +18 -0
  226. package/template/fm-addon/ProofKitWV/info_sv.json +18 -0
  227. package/template/fm-addon/ProofKitWV/info_zh.json +18 -0
  228. package/template/fm-addon/ProofKitWV/it.xml +896 -0
  229. package/template/fm-addon/ProofKitWV/ja.xml +896 -0
  230. package/template/fm-addon/ProofKitWV/ko.xml +896 -0
  231. package/template/fm-addon/ProofKitWV/nl.xml +896 -0
  232. package/template/fm-addon/ProofKitWV/preview.png +0 -0
  233. package/template/fm-addon/ProofKitWV/pt.xml +896 -0
  234. package/template/fm-addon/ProofKitWV/records_de.xml +0 -0
  235. package/template/fm-addon/ProofKitWV/records_en.xml +0 -0
  236. package/template/fm-addon/ProofKitWV/records_es.xml +0 -0
  237. package/template/fm-addon/ProofKitWV/records_fr.xml +0 -0
  238. package/template/fm-addon/ProofKitWV/records_it.xml +0 -0
  239. package/template/fm-addon/ProofKitWV/records_ja.xml +0 -0
  240. package/template/fm-addon/ProofKitWV/records_ko.xml +0 -0
  241. package/template/fm-addon/ProofKitWV/records_nl.xml +0 -0
  242. package/template/fm-addon/ProofKitWV/records_pt.xml +0 -0
  243. package/template/fm-addon/ProofKitWV/records_sv.xml +0 -0
  244. package/template/fm-addon/ProofKitWV/records_zh.xml +0 -0
  245. package/template/fm-addon/ProofKitWV/sv.xml +896 -0
  246. package/template/fm-addon/ProofKitWV/template.xml +0 -0
  247. package/template/fm-addon/ProofKitWV/zh.xml +896 -0
  248. package/template/nextjs/README.md +27 -0
  249. package/template/nextjs/_gitignore +37 -0
  250. package/template/nextjs/next.config.ts +12 -0
  251. package/template/nextjs/package.json +50 -0
  252. package/template/nextjs/postcss.config.cjs +14 -0
  253. package/template/nextjs/proofkit.json +1 -0
  254. package/template/nextjs/public/favicon.ico +0 -0
  255. package/template/nextjs/public/proofkit.png +0 -0
  256. package/template/nextjs/src/app/(main)/layout.tsx +6 -0
  257. package/template/nextjs/src/app/(main)/page.tsx +90 -0
  258. package/template/nextjs/src/app/layout.tsx +39 -0
  259. package/template/nextjs/src/app/navigation.tsx +12 -0
  260. package/template/nextjs/src/components/AppLogo.tsx +6 -0
  261. package/template/nextjs/src/components/AppShell/internal/AppShell.tsx +21 -0
  262. package/template/nextjs/src/components/AppShell/internal/Header.module.css +40 -0
  263. package/template/nextjs/src/components/AppShell/internal/Header.tsx +34 -0
  264. package/template/nextjs/src/components/AppShell/internal/HeaderMobileMenu.tsx +27 -0
  265. package/template/nextjs/src/components/AppShell/internal/HeaderNavLink.tsx +31 -0
  266. package/template/nextjs/src/components/AppShell/internal/config.ts +1 -0
  267. package/template/nextjs/src/components/AppShell/slot-header-center.tsx +13 -0
  268. package/template/nextjs/src/components/AppShell/slot-header-left.tsx +23 -0
  269. package/template/nextjs/src/components/AppShell/slot-header-mobile-content.tsx +43 -0
  270. package/template/nextjs/src/components/AppShell/slot-header-right.tsx +26 -0
  271. package/template/nextjs/src/config/env.ts +13 -0
  272. package/template/nextjs/src/config/theme/globals.css +1 -0
  273. package/template/nextjs/src/config/theme/mantine-theme.ts +22 -0
  274. package/template/nextjs/src/server/safe-action.ts +3 -0
  275. package/template/nextjs/src/utils/notification-helpers.ts +32 -0
  276. package/template/nextjs/tsconfig.json +40 -0
  277. package/template/pages/nextjs/blank/page.tsx +5 -0
  278. package/template/pages/nextjs/table/page.tsx +17 -0
  279. package/template/pages/nextjs/table/table.tsx +18 -0
  280. package/template/pages/nextjs/table-edit/actions.ts +23 -0
  281. package/template/pages/nextjs/table-edit/page.tsx +28 -0
  282. package/template/pages/nextjs/table-edit/schema.ts +4 -0
  283. package/template/pages/nextjs/table-edit/table.tsx +43 -0
  284. package/template/pages/nextjs/table-infinite/actions.ts +62 -0
  285. package/template/pages/nextjs/table-infinite/page.tsx +11 -0
  286. package/template/pages/nextjs/table-infinite/query.ts +44 -0
  287. package/template/pages/nextjs/table-infinite/table.tsx +107 -0
  288. package/template/pages/nextjs/table-infinite-edit/actions.ts +84 -0
  289. package/template/pages/nextjs/table-infinite-edit/page.tsx +23 -0
  290. package/template/pages/nextjs/table-infinite-edit/query.ts +81 -0
  291. package/template/pages/nextjs/table-infinite-edit/schema.ts +4 -0
  292. package/template/pages/nextjs/table-infinite-edit/table.tsx +130 -0
  293. package/template/pages/vite-wv/blank/index.tsx +0 -0
  294. package/template/pages/vite-wv/table/index.tsx +34 -0
  295. package/template/pages/vite-wv/table-edit/index.tsx +72 -0
  296. package/template/vite-wv/.vscode/settings.json +11 -0
  297. package/template/vite-wv/_gitignore +18 -0
  298. package/template/vite-wv/index.html +13 -0
  299. package/template/vite-wv/package.json +52 -0
  300. package/template/vite-wv/pnpm-lock.yaml +2294 -0
  301. package/template/vite-wv/postcss.config.cjs +14 -0
  302. package/template/vite-wv/proofkit.json +1 -0
  303. package/template/vite-wv/scripts/launch-fm.sh +3 -0
  304. package/template/vite-wv/scripts/upload.js +21 -0
  305. package/template/vite-wv/src/components/AppLogo.tsx +5 -0
  306. package/template/vite-wv/src/components/full-screen-loader.tsx +9 -0
  307. package/template/vite-wv/src/config/env.ts +16 -0
  308. package/template/vite-wv/src/config/theme/globals.css +1 -0
  309. package/template/vite-wv/src/config/theme/mantine-theme.ts +22 -0
  310. package/template/vite-wv/src/main.tsx +42 -0
  311. package/template/vite-wv/src/routeTree.gen.ts +111 -0
  312. package/template/vite-wv/src/routes/__root.tsx +21 -0
  313. package/template/vite-wv/src/routes/index.tsx +63 -0
  314. package/template/vite-wv/src/routes/secondary.tsx +28 -0
  315. package/template/vite-wv/src/utils/notification-helpers.ts +32 -0
  316. package/template/vite-wv/tsconfig.json +14 -0
  317. package/template/vite-wv/vite.config.ts +18 -0
@@ -0,0 +1,27 @@
1
+ # ProofKit NextJS Template
2
+
3
+ This is a [NextJS](https://nextjs.org/) project bootstrapped with `@proofkit/cli`. Learn more at [proofkit.dev](https://proofkit.dev)
4
+
5
+ ## What's next? How do I make an app with this?
6
+
7
+ While this template is designed to be a minimal starting point, the proofkit CLI will guide you through adding additional features and pages.
8
+
9
+ To add new things to your project, simply run the `proofkit` script from the project's root directory.
10
+
11
+ e.g. `npm run proofkit` or `pnpm proofkit` etc.
12
+
13
+ For more information, see the full [ProofKit documentation](https://proofkit.dev).
14
+
15
+ ## Project Structure
16
+
17
+ ProofKit projects have an opinionated structure to help you get started and some conventions must be maintained to ensure that the CLI can properly inject new features and components.
18
+
19
+ The `src` directory is the home for your application code. It is used for most things except for configuration and is organized as follows:
20
+
21
+ - `app` - NextJS app router, where your pages and routes are defined
22
+ - `components` - Shared components used throughout the app
23
+ - `server` - Code that connects to backend databases and services that should not be exposed in the browser
24
+
25
+ Anytime you see an `internal` folder, you should not modify any files inside. These files are maintained exclusively by the ProofKit CLI and changes to them may be overwritten.
26
+
27
+ Anytime you see a componet file that begins with `slot-`, you _may_ modify the content, but do not rename, remove, or move them. These are desigend to be customized, but are still used by the CLI to inject additional content. If a slot is not needed by your app, you can have the compoment return `null` or an empty fragment: `<></>`
@@ -0,0 +1,37 @@
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ /node_modules
5
+ /.pnp
6
+ .pnp.js
7
+ .yarn/install-state.gz
8
+
9
+ # testing
10
+ /coverage
11
+
12
+ # next.js
13
+ /.next/
14
+ /out/
15
+
16
+ # production
17
+ /build
18
+
19
+ # misc
20
+ .DS_Store
21
+ *.pem
22
+
23
+ # debug
24
+ npm-debug.log*
25
+ yarn-debug.log*
26
+ yarn-error.log*
27
+
28
+ # local env files
29
+ .env*.local
30
+ .env
31
+
32
+ # vercel
33
+ .vercel
34
+
35
+ # typescript
36
+ *.tsbuildinfo
37
+ next-env.d.ts
@@ -0,0 +1,12 @@
1
+ import { type NextConfig } from "next";
2
+
3
+ // Import env here to validate during build.
4
+ import "./src/config/env";
5
+
6
+ const nextConfig: NextConfig = {
7
+ experimental: {
8
+ optimizePackageImports: ["@mantine/core", "@mantine/hooks"],
9
+ },
10
+ };
11
+
12
+ export default nextConfig;
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "template",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev --turbopack",
7
+ "build": "next build",
8
+ "start": "next start",
9
+ "lint": "next lint",
10
+ "proofkit": "proofkit",
11
+ "typegen": "proofkit typegen",
12
+ "deploy": "proofkit deploy"
13
+ },
14
+ "dependencies": {
15
+ "@hookform/resolvers": "^3.10.0",
16
+ "@next-safe-action/adapter-react-hook-form": "^1.0.13",
17
+ "next-safe-action": "^7.10.4",
18
+ "react-hook-form": "^7.54.2",
19
+ "@tabler/icons-react": "^3.30.0",
20
+ "@mantine/core": "^7.17.0",
21
+ "@mantine/dates": "^7.17.0",
22
+ "@mantine/hooks": "^7.17.0",
23
+ "@mantine/modals": "^7.17.0",
24
+ "@mantine/notifications": "^7.17.0",
25
+ "mantine-react-table": "2.0.0-beta.9",
26
+ "@t3-oss/env-nextjs": "^0.12.0",
27
+ "dayjs": "^1.11.13",
28
+ "next": "^15.2.3",
29
+ "react": "19.0.0",
30
+ "react-dom": "19.0.0",
31
+ "zod": "^3.24.2"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^20",
35
+ "@types/react": "npm:types-react@19.0.12",
36
+ "@types/react-dom": "npm:types-react-dom@19.0.4",
37
+ "eslint": "^9.14.0",
38
+ "eslint-config-next": "15.2.3",
39
+ "postcss": "^8.4.41",
40
+ "postcss-preset-mantine": "^1.17.0",
41
+ "postcss-simple-vars": "^7.0.1",
42
+ "typescript": "^5"
43
+ },
44
+ "pnpm": {
45
+ "overrides": {
46
+ "@types/react": "npm:types-react@19.0.0-rc.1",
47
+ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1"
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,14 @@
1
+ module.exports = {
2
+ plugins: {
3
+ "postcss-preset-mantine": {},
4
+ "postcss-simple-vars": {
5
+ variables: {
6
+ "mantine-breakpoint-xs": "36em",
7
+ "mantine-breakpoint-sm": "48em",
8
+ "mantine-breakpoint-md": "62em",
9
+ "mantine-breakpoint-lg": "75em",
10
+ "mantine-breakpoint-xl": "88em",
11
+ },
12
+ },
13
+ },
14
+ };
@@ -0,0 +1 @@
1
+ { "auth": { "type": "none" }, "envFile": ".env", "appType": "browser" }
@@ -0,0 +1,6 @@
1
+ import AppShell from "@/components/AppShell/internal/AppShell";
2
+ import React from "react";
3
+
4
+ export default function Layout({ children }: { children: React.ReactNode }) {
5
+ return <AppShell>{children}</AppShell>;
6
+ }
@@ -0,0 +1,90 @@
1
+ import {
2
+ ActionIcon,
3
+ Anchor,
4
+ AppShellFooter,
5
+ Box,
6
+ Code,
7
+ Container,
8
+ Group,
9
+ Image,
10
+ px,
11
+ Stack,
12
+ Text,
13
+ Title,
14
+ } from "@mantine/core";
15
+ import { IconBrandGithub, IconExternalLink } from "@tabler/icons-react";
16
+
17
+ export default function Home() {
18
+ return (
19
+ <>
20
+ <Container mt="5rem">
21
+ <Stack gap="xl" ta="center">
22
+ <Image
23
+ src="https://raw.githubusercontent.com/proofgeist/proofkit/dde6366c529104658dfba67a8fc2910a8644fc64/docs/src/assets/proofkit.png"
24
+ alt="ProofKit"
25
+ style={{
26
+ marginRight: "auto",
27
+ marginLeft: "auto",
28
+ }}
29
+ w={"auto"}
30
+ mah={px("16rem")}
31
+ />
32
+ <Title order={1}>Welcome!</Title>
33
+
34
+ <Text style={{ textWrap: "balance" }}>
35
+ This is the base template home page. To add more pages, components,
36
+ or other features, run the ProofKit CLI from within your project.
37
+ </Text>
38
+ <Code block>__PNPM_COMMAND__ proofkit</Code>
39
+
40
+ <Text style={{ textWrap: "balance" }}>
41
+ To change this page, open <Code>src/app/(main)/page.tsx</Code>
42
+ </Text>
43
+ <Box>
44
+ <Anchor
45
+ href="https://proofkit.dev"
46
+ target="_blank"
47
+ rel="proofkit-app"
48
+ style={{ display: "inline-flex", alignItems: "center", gap: 4 }}
49
+ >
50
+ ProofKit Docs <IconExternalLink size={px("1rem")} />
51
+ </Anchor>
52
+ </Box>
53
+ </Stack>
54
+ </Container>
55
+ <AppShellFooter withBorder={false}>
56
+ <Container h="100%" mb="1rem">
57
+ <Group justify="space-between">
58
+ <Group>
59
+ <Text size="sm" c="dimmed">
60
+ Sponsored by{" "}
61
+ <Anchor
62
+ href="https://proofgeist.com"
63
+ target="_blank"
64
+ rel="proofkit-app"
65
+ >
66
+ Proof+Geist
67
+ </Anchor>{" "}
68
+ and{" "}
69
+ <Anchor
70
+ href="https://ottomatic.cloud"
71
+ target="_blank"
72
+ rel="proofkit-app"
73
+ >
74
+ Ottomatic
75
+ </Anchor>
76
+ </Text>
77
+ </Group>
78
+ <Group>
79
+ <a href="https://github.com/proofgeist/proofkit" target="_blank">
80
+ <ActionIcon variant="subtle" color="gray" size="lg">
81
+ <IconBrandGithub size={px("1.25rem")} />
82
+ </ActionIcon>
83
+ </a>
84
+ </Group>
85
+ </Group>
86
+ </Container>
87
+ </AppShellFooter>
88
+ </>
89
+ );
90
+ }
@@ -0,0 +1,39 @@
1
+ import { Suspense } from "react";
2
+ import { theme } from "@/config/theme/mantine-theme";
3
+ import { ColorSchemeScript, MantineProvider } from "@mantine/core";
4
+ import { ModalsProvider } from "@mantine/modals";
5
+ import { Notifications } from "@mantine/notifications";
6
+
7
+ import "@mantine/core/styles.css";
8
+ import "@mantine/notifications/styles.css";
9
+ import "@mantine/dates/styles.css";
10
+ import "mantine-react-table/styles.css";
11
+ import "@/config/theme/globals.css";
12
+
13
+ import { type Metadata } from "next";
14
+
15
+ export const metadata: Metadata = {
16
+ title: "My ProofKit App",
17
+ description: "Generated by proofkit",
18
+ icons: [{ rel: "icon", url: "/favicon.ico" }],
19
+ };
20
+
21
+ export default function RootLayout({
22
+ children,
23
+ }: Readonly<{ children: React.ReactNode }>) {
24
+ return (
25
+ <html suppressHydrationWarning lang="en">
26
+ <head>
27
+ <Suspense>
28
+ <ColorSchemeScript defaultColorScheme="auto" />
29
+ </Suspense>
30
+ </head>
31
+ <body suppressHydrationWarning>
32
+ <MantineProvider defaultColorScheme="auto" theme={theme}>
33
+ <Notifications />
34
+ <ModalsProvider>{children}</ModalsProvider>
35
+ </MantineProvider>
36
+ </body>
37
+ </html>
38
+ );
39
+ }
@@ -0,0 +1,12 @@
1
+ import { type ProofKitRoute } from "@proofkit/cli";
2
+
3
+ export const primaryRoutes: ProofKitRoute[] = [
4
+ {
5
+ label: "Dashboard",
6
+ type: "link",
7
+ href: "/",
8
+ exactMatch: true,
9
+ },
10
+ ];
11
+
12
+ export const secondaryRoutes: ProofKitRoute[] = [];
@@ -0,0 +1,6 @@
1
+ import { IconInfinity } from "@tabler/icons-react";
2
+ import React from "react";
3
+
4
+ export default function AppLogo() {
5
+ return <IconInfinity size={32} />;
6
+ }
@@ -0,0 +1,21 @@
1
+ import { Header } from "@/components/AppShell/internal/Header";
2
+ import { AppShell, AppShellHeader, AppShellMain } from "@mantine/core";
3
+ import React from "react";
4
+
5
+ import { headerHeight } from "./config";
6
+
7
+ export default function MainAppShell({
8
+ children,
9
+ }: {
10
+ children: React.ReactNode;
11
+ }) {
12
+ return (
13
+ <AppShell header={{ height: headerHeight }} padding="md">
14
+ <AppShellHeader>
15
+ <Header />
16
+ </AppShellHeader>
17
+
18
+ <AppShellMain>{children}</AppShellMain>
19
+ </AppShell>
20
+ );
21
+ }
@@ -0,0 +1,40 @@
1
+ .header {
2
+ /* height: rem(56px); */
3
+ margin-bottom: rem(120px);
4
+ background-color: var(--mantine-color-body);
5
+ border-bottom: rem(1px) solid
6
+ light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4));
7
+ }
8
+
9
+ .inner {
10
+ /* height: rem(56px); */
11
+ display: flex;
12
+ justify-content: space-between;
13
+ align-items: center;
14
+ }
15
+
16
+ .link {
17
+ display: block;
18
+ line-height: 1;
19
+ padding: rem(8px) rem(12px);
20
+ border-radius: var(--mantine-radius-sm);
21
+ text-decoration: none;
22
+ color: light-dark(var(--mantine-color-gray-7), var(--mantine-color-dark-0));
23
+ font-size: var(--mantine-font-size-sm);
24
+ font-weight: 500;
25
+ cursor: pointer;
26
+ background: none;
27
+ border: none;
28
+
29
+ @mixin hover {
30
+ background-color: light-dark(
31
+ var(--mantine-color-gray-0),
32
+ var(--mantine-color-dark-6)
33
+ );
34
+ }
35
+
36
+ [data-mantine-color-scheme] &[data-active] {
37
+ background-color: var(--mantine-primary-color-filled);
38
+ color: var(--mantine-color-white);
39
+ }
40
+ }
@@ -0,0 +1,34 @@
1
+ import { Box, Container, Group } from "@mantine/core";
2
+
3
+ import SlotHeaderCenter from "../slot-header-center";
4
+ import SlotHeaderLeft from "../slot-header-left";
5
+ import SlotHeaderRight from "../slot-header-right";
6
+ import { headerHeight } from "./config";
7
+ import classes from "./Header.module.css";
8
+ import HeaderMobileMenu from "./HeaderMobileMenu";
9
+
10
+ export function Header() {
11
+ return (
12
+ <header className={classes.header} style={{ height: headerHeight }}>
13
+ <Container size="md" className={classes.inner} style={{ height: "100%" }}>
14
+ <Group
15
+ justify="space-between"
16
+ align="center"
17
+ w="100%"
18
+ style={{ height: "100%" }}
19
+ >
20
+ <SlotHeaderLeft />
21
+ <Box visibleFrom="md">
22
+ <SlotHeaderCenter />
23
+ </Box>
24
+ <Box visibleFrom="md">
25
+ <SlotHeaderRight />
26
+ </Box>
27
+ <Box hiddenFrom="md">
28
+ <HeaderMobileMenu />
29
+ </Box>
30
+ </Group>
31
+ </Container>
32
+ </header>
33
+ );
34
+ }
@@ -0,0 +1,27 @@
1
+ "use client";
2
+
3
+ import { Burger, Menu } from "@mantine/core";
4
+ import { useDisclosure } from "@mantine/hooks";
5
+
6
+ import SlotHeaderMobileMenuContent from "../slot-header-mobile-content";
7
+
8
+ export default function HeaderMobileMenu() {
9
+ const [opened, { toggle }] = useDisclosure(false);
10
+
11
+ return (
12
+ <Menu
13
+ opened={opened}
14
+ onClose={toggle}
15
+ styles={{ item: { padding: "1rem" } }}
16
+ shadow="md"
17
+ radius="md"
18
+ >
19
+ <Menu.Target>
20
+ <Burger opened={opened} hiddenFrom="sm" onClick={toggle} size="sm" />
21
+ </Menu.Target>
22
+ <Menu.Dropdown w={"90%"}>
23
+ <SlotHeaderMobileMenuContent closeMenu={toggle} />
24
+ </Menu.Dropdown>
25
+ </Menu>
26
+ );
27
+ }
@@ -0,0 +1,31 @@
1
+ "use client";
2
+
3
+ import { type ProofKitRoute } from "@proofkit/cli";
4
+ import { usePathname } from "next/navigation";
5
+ import React from "react";
6
+
7
+ import classes from "./Header.module.css";
8
+
9
+ export default function HeaderNavLink(route: ProofKitRoute) {
10
+ const pathname = usePathname();
11
+
12
+ if (route.type === "function") {
13
+ return <button className={classes.link} onClick={route.onClick}>{route.label}</button>;
14
+ }
15
+
16
+ const isActive = route.exactMatch
17
+ ? pathname === route.href
18
+ : pathname.startsWith(route.href);
19
+
20
+ if (route.type === "link") {
21
+ return (
22
+ <a
23
+ href={route.href}
24
+ className={classes.link}
25
+ data-active={isActive || undefined}
26
+ >
27
+ {route.label}
28
+ </a>
29
+ );
30
+ }
31
+ }
@@ -0,0 +1 @@
1
+ export const headerHeight = 56;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * DO NOT REMOVE / RENAME THIS FILE
3
+ *
4
+ * You may CUSTOMIZE the content of this file, but the ProofKit CLI expects
5
+ * this file to exist and may use it to inject content for other components.
6
+ *
7
+ * If you don't want it to be used, you may return null or an empty fragment
8
+ */
9
+ export function SlotHeaderCenter() {
10
+ return null;
11
+ }
12
+
13
+ export default SlotHeaderCenter;
@@ -0,0 +1,23 @@
1
+ import Link from "next/link";
2
+
3
+ import AppLogo from "../AppLogo";
4
+
5
+ /**
6
+ * DO NOT REMOVE / RENAME THIS FILE
7
+ *
8
+ * You may CUSTOMIZE the content of this file, but the ProofKit CLI expects this file to exist and
9
+ * may use it to inject content for other components.
10
+ *
11
+ * If you don't want it to be used, you may return null or an empty fragment
12
+ */
13
+ export function SlotHeaderLeft() {
14
+ return (
15
+ <>
16
+ <Link href="/" style={{ display: "inline-flex", alignItems: "center" }}>
17
+ <AppLogo />
18
+ </Link>
19
+ </>
20
+ );
21
+ }
22
+
23
+ export default SlotHeaderLeft;
@@ -0,0 +1,43 @@
1
+ "use client";
2
+
3
+ import { primaryRoutes } from "@/app/navigation";
4
+ import { Menu } from "@mantine/core";
5
+ import { useRouter } from "next/navigation";
6
+
7
+ /**
8
+ * DO NOT REMOVE / RENAME THIS FILE
9
+ *
10
+ * You may CUSTOMIZE the content of this file, but the ProofKit CLI expects
11
+ * this file to exist and may use it to inject content for other components.
12
+ *
13
+ * If you don't want it to be used, you may return null or an empty fragment
14
+ */
15
+ export function SlotHeaderMobileMenuContent({
16
+ closeMenu,
17
+ }: {
18
+ closeMenu: () => void;
19
+ }) {
20
+ const router = useRouter();
21
+ return (
22
+ <>
23
+ {primaryRoutes.map((route) => (
24
+ <Menu.Item
25
+ key={route.label}
26
+ leftSection={route.icon}
27
+ onClick={() => {
28
+ closeMenu();
29
+ if (route.type === "function") {
30
+ route.onClick();
31
+ } else if (route.type === "link") {
32
+ router.push(route.href);
33
+ }
34
+ }}
35
+ >
36
+ {route.label}
37
+ </Menu.Item>
38
+ ))}
39
+ </>
40
+ );
41
+ }
42
+
43
+ export default SlotHeaderMobileMenuContent;
@@ -0,0 +1,26 @@
1
+ import { primaryRoutes } from "@/app/navigation";
2
+ import { Group } from "@mantine/core";
3
+
4
+ import HeaderNavLink from "./internal/HeaderNavLink";
5
+
6
+ /**
7
+ * DO NOT REMOVE / RENAME THIS FILE
8
+ *
9
+ * You may CUSTOMIZE the content of this file, but the ProofKit CLI expects
10
+ * this file to exist and may use it to inject content for other components.
11
+ *
12
+ * If you don't want it to be used, you may return null or an empty fragment
13
+ */
14
+ export function SlotHeaderRight() {
15
+ return (
16
+ <>
17
+ <Group gap={5} visibleFrom="xs">
18
+ {primaryRoutes.map((route) => (
19
+ <HeaderNavLink key={route.label} {...route} />
20
+ ))}
21
+ </Group>
22
+ </>
23
+ );
24
+ }
25
+
26
+ export default SlotHeaderRight;
@@ -0,0 +1,13 @@
1
+ import { createEnv } from "@t3-oss/env-nextjs";
2
+ import { z } from "zod/v4";
3
+
4
+ export const env = createEnv({
5
+ server: {
6
+ NODE_ENV: z
7
+ .enum(["development", "test", "production"])
8
+ .default("development"),
9
+ },
10
+ client: {},
11
+ // For Next.js >= 13.4.4, you only need to destructure client variables:
12
+ experimental__runtimeEnv: {},
13
+ });
@@ -0,0 +1 @@
1
+ /* Add global styles here */
@@ -0,0 +1,22 @@
1
+ import { createTheme, type MantineColorsTuple } from "@mantine/core";
2
+
3
+ // generate your own set of colors here: https://mantine.dev/colors-generator
4
+ const brandColor: MantineColorsTuple = [
5
+ "#ffebff",
6
+ "#f5d5fb",
7
+ "#e6a8f3",
8
+ "#d779eb",
9
+ "#cb51e4",
10
+ "#c337e0",
11
+ "#c029df",
12
+ "#a91cc6",
13
+ "#9715b1",
14
+ "#84099c",
15
+ ];
16
+
17
+ export const theme = createTheme({
18
+ primaryColor: "brand",
19
+ colors: {
20
+ brand: brandColor,
21
+ },
22
+ });
@@ -0,0 +1,3 @@
1
+ import { createSafeActionClient } from "next-safe-action";
2
+
3
+ export const actionClient = createSafeActionClient();
@@ -0,0 +1,32 @@
1
+ import {
2
+ showNotification,
3
+ type NotificationData,
4
+ } from "@mantine/notifications";
5
+
6
+ export function showErrorNotification(): void;
7
+ export function showErrorNotification(props: NotificationData): void;
8
+ export function showErrorNotification(message: string): void;
9
+ export function showErrorNotification(args?: string | NotificationData): void {
10
+ const message =
11
+ typeof args === "string" ? args : "An unexpected error occurred.";
12
+ const defaultProps = typeof args === "string" ? {} : (args ?? {});
13
+
14
+ showNotification({ color: "red", title: "Error", message, ...defaultProps });
15
+ }
16
+
17
+ export function showSuccessNotification(): void;
18
+ export function showSuccessNotification(props: NotificationData): void;
19
+ export function showSuccessNotification(message: string): void;
20
+ export function showSuccessNotification(
21
+ args?: string | NotificationData
22
+ ): void {
23
+ const message = typeof args === "string" ? args : "Success!";
24
+ const defaultProps = typeof args === "string" ? {} : (args ?? {});
25
+
26
+ showNotification({
27
+ color: "green",
28
+ title: "Success",
29
+ message,
30
+ ...defaultProps,
31
+ });
32
+ }