@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.
- package/CHANGELOG.md +120 -0
- package/LICENSE.md +21 -0
- package/README.md +19 -0
- package/dist/acorn-AKFTBDM6.js +15 -0
- package/dist/angular-BOQ6FHSU.js +2 -0
- package/dist/babel-ZTOORN7K.js +15 -0
- package/dist/chunk-4LISTI44.js +1 -0
- package/dist/estree-KOJPX4S6.js +36 -0
- package/dist/flow-RCI44GYZ.js +19 -0
- package/dist/glimmer-GV5EF5E4.js +30 -0
- package/dist/graphql-YXQNPQWM.js +29 -0
- package/dist/html-ZAJTRROK.js +22 -0
- package/dist/index.js +300 -0
- package/dist/markdown-Q75DTQI7.js +63 -0
- package/dist/meriyah-32K7GBV5.js +4 -0
- package/dist/postcss-WWYO4PGL.js +54 -0
- package/dist/typescript-M6N7JDNQ.js +20 -0
- package/dist/yaml-LY7PNAYV.js +161 -0
- package/index.d.ts +19 -0
- package/package.json +122 -0
- package/template/extras/_cursor/conditional-rules/nextjs-framework.mdc +51 -0
- package/template/extras/_cursor/conditional-rules/npm.mdc +60 -0
- package/template/extras/_cursor/conditional-rules/pnpm.mdc +65 -0
- package/template/extras/_cursor/conditional-rules/yarn.mdc +60 -0
- package/template/extras/_cursor/rules/cursor-rules.mdc +88 -0
- package/template/extras/_cursor/rules/filemaker-api.mdc +176 -0
- package/template/extras/_cursor/rules/troubleshooting-patterns.mdc +240 -0
- package/template/extras/_cursor/rules/ui-components.mdc +57 -0
- package/template/extras/config/_eslint.js +27 -0
- package/template/extras/config/_prettier.config.js +6 -0
- package/template/extras/config/drizzle-config-mysql.ts +12 -0
- package/template/extras/config/drizzle-config-postgres.ts +12 -0
- package/template/extras/config/drizzle-config-sqlite.ts +12 -0
- package/template/extras/config/fmschema.config.mjs +9 -0
- package/template/extras/config/get-query-client.ts +6 -0
- package/template/extras/config/postcss.config.cjs +7 -0
- package/template/extras/config/query-provider-vite.tsx +19 -0
- package/template/extras/config/query-provider.tsx +21 -0
- package/template/extras/emailProviders/none/email.tsx +24 -0
- package/template/extras/emailProviders/plunk/email.tsx +26 -0
- package/template/extras/emailProviders/plunk/service.ts +4 -0
- package/template/extras/emailProviders/resend/email.tsx +23 -0
- package/template/extras/emailProviders/resend/service.ts +4 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/actions.ts +93 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/page.tsx +27 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/profile-form.tsx +56 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/reset-password-form.tsx +110 -0
- package/template/extras/fmaddon-auth/app/(main)/auth/profile/schema.ts +19 -0
- package/template/extras/fmaddon-auth/app/auth/forgot-password/actions.ts +37 -0
- package/template/extras/fmaddon-auth/app/auth/forgot-password/forgot-form.tsx +41 -0
- package/template/extras/fmaddon-auth/app/auth/forgot-password/page.tsx +21 -0
- package/template/extras/fmaddon-auth/app/auth/forgot-password/schema.ts +5 -0
- package/template/extras/fmaddon-auth/app/auth/login/actions.ts +34 -0
- package/template/extras/fmaddon-auth/app/auth/login/login-form.tsx +64 -0
- package/template/extras/fmaddon-auth/app/auth/login/page.tsx +26 -0
- package/template/extras/fmaddon-auth/app/auth/login/schema.ts +6 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/actions.ts +50 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/page.tsx +32 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/reset-password-form.tsx +59 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/schema.ts +14 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/actions.ts +45 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/page.tsx +32 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/schema.ts +5 -0
- package/template/extras/fmaddon-auth/app/auth/reset-password/verify-email/verify-email-form.tsx +48 -0
- package/template/extras/fmaddon-auth/app/auth/signup/actions.ts +49 -0
- package/template/extras/fmaddon-auth/app/auth/signup/page.tsx +26 -0
- package/template/extras/fmaddon-auth/app/auth/signup/schema.ts +12 -0
- package/template/extras/fmaddon-auth/app/auth/signup/signup-form.tsx +67 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/actions.ts +110 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/email-verification-form.tsx +45 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/page.tsx +38 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/resend-button.tsx +35 -0
- package/template/extras/fmaddon-auth/app/auth/verify-email/schema.ts +5 -0
- package/template/extras/fmaddon-auth/components/auth/actions.ts +16 -0
- package/template/extras/fmaddon-auth/components/auth/protect.tsx +17 -0
- package/template/extras/fmaddon-auth/components/auth/redirect.tsx +26 -0
- package/template/extras/fmaddon-auth/components/auth/use-user.ts +59 -0
- package/template/extras/fmaddon-auth/components/auth/user-menu.tsx +51 -0
- package/template/extras/fmaddon-auth/emails/auth-code.tsx +156 -0
- package/template/extras/fmaddon-auth/middleware.ts +45 -0
- package/template/extras/fmaddon-auth/server/auth/utils/email-verification.ts +136 -0
- package/template/extras/fmaddon-auth/server/auth/utils/encryption.ts +51 -0
- package/template/extras/fmaddon-auth/server/auth/utils/index.ts +16 -0
- package/template/extras/fmaddon-auth/server/auth/utils/password-reset.ts +152 -0
- package/template/extras/fmaddon-auth/server/auth/utils/password.ts +67 -0
- package/template/extras/fmaddon-auth/server/auth/utils/redirect.ts +8 -0
- package/template/extras/fmaddon-auth/server/auth/utils/session.ts +192 -0
- package/template/extras/fmaddon-auth/server/auth/utils/user.ts +147 -0
- package/template/extras/prisma/schema/base-planetscale.prisma +24 -0
- package/template/extras/prisma/schema/base.prisma +20 -0
- package/template/extras/prisma/schema/with-auth-planetscale.prisma +77 -0
- package/template/extras/prisma/schema/with-auth.prisma +74 -0
- package/template/extras/src/app/_components/post-tw.tsx +50 -0
- package/template/extras/src/app/_components/post.tsx +54 -0
- package/template/extras/src/app/api/auth/[...nextauth]/route.ts +4 -0
- package/template/extras/src/app/api/trpc/[trpc]/route.ts +34 -0
- package/template/extras/src/app/clerk-auth/layout.tsx +10 -0
- package/template/extras/src/app/clerk-auth/signin/[[...sign-in]]/page.tsx +5 -0
- package/template/extras/src/app/clerk-auth/signup/[[...sign-up]]/page.tsx +5 -0
- package/template/extras/src/app/layout/base.tsx +34 -0
- package/template/extras/src/app/layout/main-shell.tsx +37 -0
- package/template/extras/src/app/layout/with-trpc-tw.tsx +24 -0
- package/template/extras/src/app/layout/with-trpc.tsx +24 -0
- package/template/extras/src/app/layout/with-tw.tsx +20 -0
- package/template/extras/src/app/next-auth/layout.tsx +22 -0
- package/template/extras/src/app/next-auth/signin/page.tsx +82 -0
- package/template/extras/src/app/next-auth/signup/action.ts +24 -0
- package/template/extras/src/app/next-auth/signup/page.tsx +40 -0
- package/template/extras/src/app/next-auth/signup/validation.ts +12 -0
- package/template/extras/src/app/page/base.tsx +6 -0
- package/template/extras/src/app/page/with-auth-trpc-tw.tsx +67 -0
- package/template/extras/src/app/page/with-auth-trpc.tsx +68 -0
- package/template/extras/src/app/page/with-trpc-tw.tsx +53 -0
- package/template/extras/src/app/page/with-trpc.tsx +54 -0
- package/template/extras/src/app/page/with-tw.tsx +37 -0
- package/template/extras/src/components/clerk-auth/clerk-provider.tsx +18 -0
- package/template/extras/src/components/clerk-auth/user-menu-mobile.tsx +36 -0
- package/template/extras/src/components/clerk-auth/user-menu.tsx +24 -0
- package/template/extras/src/components/next-auth/next-auth-provider.tsx +14 -0
- package/template/extras/src/components/next-auth/user-menu-mobile.tsx +31 -0
- package/template/extras/src/components/next-auth/user-menu.tsx +38 -0
- package/template/extras/src/env/with-auth.ts +31 -0
- package/template/extras/src/env/with-clerk.ts +20 -0
- package/template/extras/src/index.module.css +177 -0
- package/template/extras/src/middleware/clerk.ts +20 -0
- package/template/extras/src/middleware/next-auth.ts +5 -0
- package/template/extras/src/pages/_app/base.tsx +14 -0
- package/template/extras/src/pages/_app/with-auth-trpc-tw.tsx +23 -0
- package/template/extras/src/pages/_app/with-auth-trpc.tsx +23 -0
- package/template/extras/src/pages/_app/with-auth-tw.tsx +21 -0
- package/template/extras/src/pages/_app/with-auth.tsx +21 -0
- package/template/extras/src/pages/_app/with-trpc-tw.tsx +16 -0
- package/template/extras/src/pages/_app/with-trpc.tsx +16 -0
- package/template/extras/src/pages/_app/with-tw.tsx +14 -0
- package/template/extras/src/pages/api/auth/[...nextauth].ts +5 -0
- package/template/extras/src/pages/api/trpc/[trpc].ts +19 -0
- package/template/extras/src/pages/index/base.tsx +47 -0
- package/template/extras/src/pages/index/with-auth-trpc-tw.tsx +80 -0
- package/template/extras/src/pages/index/with-auth-trpc.tsx +81 -0
- package/template/extras/src/pages/index/with-trpc-tw.tsx +52 -0
- package/template/extras/src/pages/index/with-trpc.tsx +53 -0
- package/template/extras/src/pages/index/with-tw.tsx +45 -0
- package/template/extras/src/server/api/root.ts +23 -0
- package/template/extras/src/server/api/routers/post/base.ts +40 -0
- package/template/extras/src/server/api/routers/post/with-auth-drizzle.ts +39 -0
- package/template/extras/src/server/api/routers/post/with-auth-prisma.ts +41 -0
- package/template/extras/src/server/api/routers/post/with-auth.ts +37 -0
- package/template/extras/src/server/api/routers/post/with-drizzle.ts +30 -0
- package/template/extras/src/server/api/routers/post/with-prisma.ts +31 -0
- package/template/extras/src/server/api/trpc-app/base.ts +103 -0
- package/template/extras/src/server/api/trpc-app/with-auth-db.ts +133 -0
- package/template/extras/src/server/api/trpc-app/with-auth.ts +130 -0
- package/template/extras/src/server/api/trpc-app/with-db.ts +106 -0
- package/template/extras/src/server/api/trpc-pages/base.ts +122 -0
- package/template/extras/src/server/api/trpc-pages/with-auth-db.ts +160 -0
- package/template/extras/src/server/api/trpc-pages/with-auth.ts +158 -0
- package/template/extras/src/server/api/trpc-pages/with-db.ts +125 -0
- package/template/extras/src/server/data/users.ts +23 -0
- package/template/extras/src/server/db/db-prisma-planetscale.ts +22 -0
- package/template/extras/src/server/db/db-prisma.ts +17 -0
- package/template/extras/src/server/db/index-drizzle/with-mysql.ts +18 -0
- package/template/extras/src/server/db/index-drizzle/with-planetscale.ts +7 -0
- package/template/extras/src/server/db/index-drizzle/with-postgres.ts +18 -0
- package/template/extras/src/server/db/index-drizzle/with-sqlite.ts +19 -0
- package/template/extras/src/server/db/schema-drizzle/base-mysql.ts +34 -0
- package/template/extras/src/server/db/schema-drizzle/base-planetscale.ts +34 -0
- package/template/extras/src/server/db/schema-drizzle/base-postgres.ts +36 -0
- package/template/extras/src/server/db/schema-drizzle/base-sqlite.ts +30 -0
- package/template/extras/src/server/db/schema-drizzle/with-auth-mysql.ts +123 -0
- package/template/extras/src/server/db/schema-drizzle/with-auth-planetscale.ts +117 -0
- package/template/extras/src/server/db/schema-drizzle/with-auth-postgres.ts +130 -0
- package/template/extras/src/server/db/schema-drizzle/with-auth-sqlite.ts +116 -0
- package/template/extras/src/server/next-auth/base.ts +111 -0
- package/template/extras/src/server/next-auth/password.ts +13 -0
- package/template/extras/src/server/next-auth/with-drizzle.ts +83 -0
- package/template/extras/src/server/next-auth/with-prisma.ts +72 -0
- package/template/extras/src/trpc/query-client.ts +25 -0
- package/template/extras/src/trpc/react.tsx +76 -0
- package/template/extras/src/trpc/server.ts +30 -0
- package/template/extras/src/utils/api.ts +68 -0
- package/template/extras/start-database/mysql.sh +54 -0
- package/template/extras/start-database/postgres.sh +55 -0
- package/template/fm-addon/ProofKitAuth/de.xml +518 -0
- package/template/fm-addon/ProofKitAuth/en.xml +518 -0
- package/template/fm-addon/ProofKitAuth/es.xml +518 -0
- package/template/fm-addon/ProofKitAuth/fr.xml +518 -0
- package/template/fm-addon/ProofKitAuth/icon.png +0 -0
- package/template/fm-addon/ProofKitAuth/icon@2x.png +0 -0
- package/template/fm-addon/ProofKitAuth/info.json +11 -0
- package/template/fm-addon/ProofKitAuth/info_de.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_en.json +8 -0
- package/template/fm-addon/ProofKitAuth/info_es.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_fr.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_it.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_ja.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_ko.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_nl.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_pt.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_sv.json +18 -0
- package/template/fm-addon/ProofKitAuth/info_zh.json +18 -0
- package/template/fm-addon/ProofKitAuth/it.xml +518 -0
- package/template/fm-addon/ProofKitAuth/ja.xml +518 -0
- package/template/fm-addon/ProofKitAuth/ko.xml +518 -0
- package/template/fm-addon/ProofKitAuth/nl.xml +518 -0
- package/template/fm-addon/ProofKitAuth/preview.png +0 -0
- package/template/fm-addon/ProofKitAuth/pt.xml +518 -0
- package/template/fm-addon/ProofKitAuth/sv.xml +518 -0
- package/template/fm-addon/ProofKitAuth/template.xml +0 -0
- package/template/fm-addon/ProofKitAuth/zh.xml +518 -0
- package/template/fm-addon/ProofKitWV/de.xml +896 -0
- package/template/fm-addon/ProofKitWV/en.xml +896 -0
- package/template/fm-addon/ProofKitWV/es.xml +896 -0
- package/template/fm-addon/ProofKitWV/fr.xml +896 -0
- package/template/fm-addon/ProofKitWV/icon.png +0 -0
- package/template/fm-addon/ProofKitWV/icon@2x.png +0 -0
- package/template/fm-addon/ProofKitWV/info.json +11 -0
- package/template/fm-addon/ProofKitWV/info_de.json +18 -0
- package/template/fm-addon/ProofKitWV/info_en.json +11 -0
- package/template/fm-addon/ProofKitWV/info_es.json +18 -0
- package/template/fm-addon/ProofKitWV/info_fr.json +18 -0
- package/template/fm-addon/ProofKitWV/info_it.json +18 -0
- package/template/fm-addon/ProofKitWV/info_ja.json +18 -0
- package/template/fm-addon/ProofKitWV/info_ko.json +18 -0
- package/template/fm-addon/ProofKitWV/info_nl.json +18 -0
- package/template/fm-addon/ProofKitWV/info_pt.json +18 -0
- package/template/fm-addon/ProofKitWV/info_sv.json +18 -0
- package/template/fm-addon/ProofKitWV/info_zh.json +18 -0
- package/template/fm-addon/ProofKitWV/it.xml +896 -0
- package/template/fm-addon/ProofKitWV/ja.xml +896 -0
- package/template/fm-addon/ProofKitWV/ko.xml +896 -0
- package/template/fm-addon/ProofKitWV/nl.xml +896 -0
- package/template/fm-addon/ProofKitWV/preview.png +0 -0
- package/template/fm-addon/ProofKitWV/pt.xml +896 -0
- package/template/fm-addon/ProofKitWV/records_de.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_en.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_es.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_fr.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_it.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_ja.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_ko.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_nl.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_pt.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_sv.xml +0 -0
- package/template/fm-addon/ProofKitWV/records_zh.xml +0 -0
- package/template/fm-addon/ProofKitWV/sv.xml +896 -0
- package/template/fm-addon/ProofKitWV/template.xml +0 -0
- package/template/fm-addon/ProofKitWV/zh.xml +896 -0
- package/template/nextjs/README.md +27 -0
- package/template/nextjs/_gitignore +37 -0
- package/template/nextjs/next.config.ts +12 -0
- package/template/nextjs/package.json +50 -0
- package/template/nextjs/postcss.config.cjs +14 -0
- package/template/nextjs/proofkit.json +1 -0
- package/template/nextjs/public/favicon.ico +0 -0
- package/template/nextjs/public/proofkit.png +0 -0
- package/template/nextjs/src/app/(main)/layout.tsx +6 -0
- package/template/nextjs/src/app/(main)/page.tsx +90 -0
- package/template/nextjs/src/app/layout.tsx +39 -0
- package/template/nextjs/src/app/navigation.tsx +12 -0
- package/template/nextjs/src/components/AppLogo.tsx +6 -0
- package/template/nextjs/src/components/AppShell/internal/AppShell.tsx +21 -0
- package/template/nextjs/src/components/AppShell/internal/Header.module.css +40 -0
- package/template/nextjs/src/components/AppShell/internal/Header.tsx +34 -0
- package/template/nextjs/src/components/AppShell/internal/HeaderMobileMenu.tsx +27 -0
- package/template/nextjs/src/components/AppShell/internal/HeaderNavLink.tsx +31 -0
- package/template/nextjs/src/components/AppShell/internal/config.ts +1 -0
- package/template/nextjs/src/components/AppShell/slot-header-center.tsx +13 -0
- package/template/nextjs/src/components/AppShell/slot-header-left.tsx +23 -0
- package/template/nextjs/src/components/AppShell/slot-header-mobile-content.tsx +43 -0
- package/template/nextjs/src/components/AppShell/slot-header-right.tsx +26 -0
- package/template/nextjs/src/config/env.ts +13 -0
- package/template/nextjs/src/config/theme/globals.css +1 -0
- package/template/nextjs/src/config/theme/mantine-theme.ts +22 -0
- package/template/nextjs/src/server/safe-action.ts +3 -0
- package/template/nextjs/src/utils/notification-helpers.ts +32 -0
- package/template/nextjs/tsconfig.json +40 -0
- package/template/pages/nextjs/blank/page.tsx +5 -0
- package/template/pages/nextjs/table/page.tsx +17 -0
- package/template/pages/nextjs/table/table.tsx +18 -0
- package/template/pages/nextjs/table-edit/actions.ts +23 -0
- package/template/pages/nextjs/table-edit/page.tsx +28 -0
- package/template/pages/nextjs/table-edit/schema.ts +4 -0
- package/template/pages/nextjs/table-edit/table.tsx +43 -0
- package/template/pages/nextjs/table-infinite/actions.ts +62 -0
- package/template/pages/nextjs/table-infinite/page.tsx +11 -0
- package/template/pages/nextjs/table-infinite/query.ts +44 -0
- package/template/pages/nextjs/table-infinite/table.tsx +107 -0
- package/template/pages/nextjs/table-infinite-edit/actions.ts +84 -0
- package/template/pages/nextjs/table-infinite-edit/page.tsx +23 -0
- package/template/pages/nextjs/table-infinite-edit/query.ts +81 -0
- package/template/pages/nextjs/table-infinite-edit/schema.ts +4 -0
- package/template/pages/nextjs/table-infinite-edit/table.tsx +130 -0
- package/template/pages/vite-wv/blank/index.tsx +0 -0
- package/template/pages/vite-wv/table/index.tsx +34 -0
- package/template/pages/vite-wv/table-edit/index.tsx +72 -0
- package/template/vite-wv/.vscode/settings.json +11 -0
- package/template/vite-wv/_gitignore +18 -0
- package/template/vite-wv/index.html +13 -0
- package/template/vite-wv/package.json +52 -0
- package/template/vite-wv/pnpm-lock.yaml +2294 -0
- package/template/vite-wv/postcss.config.cjs +14 -0
- package/template/vite-wv/proofkit.json +1 -0
- package/template/vite-wv/scripts/launch-fm.sh +3 -0
- package/template/vite-wv/scripts/upload.js +21 -0
- package/template/vite-wv/src/components/AppLogo.tsx +5 -0
- package/template/vite-wv/src/components/full-screen-loader.tsx +9 -0
- package/template/vite-wv/src/config/env.ts +16 -0
- package/template/vite-wv/src/config/theme/globals.css +1 -0
- package/template/vite-wv/src/config/theme/mantine-theme.ts +22 -0
- package/template/vite-wv/src/main.tsx +42 -0
- package/template/vite-wv/src/routeTree.gen.ts +111 -0
- package/template/vite-wv/src/routes/__root.tsx +21 -0
- package/template/vite-wv/src/routes/index.tsx +63 -0
- package/template/vite-wv/src/routes/secondary.tsx +28 -0
- package/template/vite-wv/src/utils/notification-helpers.ts +32 -0
- package/template/vite-wv/tsconfig.json +14 -0
- 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" }
|
|
Binary file
|
|
Binary file
|
|
@@ -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,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,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
|
+
}
|