@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,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": "webviewer" }
@@ -0,0 +1,3 @@
1
+ source .env
2
+ SERVER_HOST=$(echo $FM_SERVER | sed 's|https://||' | sed 's|/.*||')
3
+ open "fmp://$SERVER_HOST/$FM_DATABASE?script=Launch Web Viewer for Dev"
@@ -0,0 +1,21 @@
1
+ import open from "open";
2
+ import { resolve } from "path";
3
+ import dotenv from "dotenv";
4
+ import { fileURLToPath } from "url";
5
+
6
+ const currentDirectory = fileURLToPath(new URL(".", import.meta.url));
7
+
8
+ const { parsed } = dotenv.config({
9
+ path: resolve(currentDirectory, "../.env"),
10
+ });
11
+
12
+ const server = new URL(parsed.FM_SERVER).hostname;
13
+ const file = parsed.FM_DATABASE.replace(/\.fmp12$/, "");
14
+ const uploadScript = "UploadWebviewerWidget";
15
+
16
+ const thePath = resolve(currentDirectory, "../dist", "index.html");
17
+ const url = `fmp://${server}/${file}?script=${uploadScript}&param=${encodeURIComponent(
18
+ thePath
19
+ )}`;
20
+
21
+ open(url);
@@ -0,0 +1,5 @@
1
+ import { IconInfinity } from "@tabler/icons-react";
2
+
3
+ export default function AppLogo() {
4
+ return <IconInfinity size={32} />;
5
+ }
@@ -0,0 +1,9 @@
1
+ import { Center, Loader } from "@mantine/core";
2
+
3
+ export default function FullScreenLoader() {
4
+ return (
5
+ <Center h="100vh">
6
+ <Loader />
7
+ </Center>
8
+ );
9
+ }
@@ -0,0 +1,16 @@
1
+ import { createEnv } from "@t3-oss/env-core";
2
+ import { z } from "zod/v4";
3
+ import { type OttoAPIKey } from "@proofkit/fmdapi";
4
+
5
+ export const env = createEnv({
6
+ server: {
7
+ NODE_ENV: z
8
+ .enum(["development", "test", "production"])
9
+ .default("development"),
10
+ },
11
+
12
+ clientPrefix: "VITE_",
13
+ client: {},
14
+ runtimeEnv: process.env,
15
+ emptyStringAsUndefined: true,
16
+ });
@@ -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,42 @@
1
+ import React from "react";
2
+ import ReactDOM from "react-dom/client";
3
+ import {
4
+ RouterProvider,
5
+ createHashHistory,
6
+ createRouter,
7
+ } from "@tanstack/react-router";
8
+ import { routeTree } from "./routeTree.gen";
9
+ import { MantineProvider } from "@mantine/core";
10
+ import { theme } from "./config/theme/mantine-theme";
11
+
12
+ import "@mantine/core/styles.css";
13
+ import "mantine-react-table/styles.css";
14
+ import "./config/theme/globals.css";
15
+
16
+ // Hash history is used since we are using a single file build
17
+ const hashHistory = createHashHistory();
18
+
19
+ // Set up a Router instance
20
+ const router = createRouter({
21
+ routeTree,
22
+ defaultPreload: "intent",
23
+ history: hashHistory,
24
+ });
25
+
26
+ // Register things for typesafety
27
+ declare module "@tanstack/react-router" {
28
+ interface Register {
29
+ router: typeof router;
30
+ }
31
+ }
32
+
33
+ const rootElement = document.getElementById("app")!;
34
+
35
+ if (!rootElement.innerHTML) {
36
+ const root = ReactDOM.createRoot(rootElement);
37
+ root.render(
38
+ <MantineProvider theme={theme} forceColorScheme="light">
39
+ <RouterProvider router={router} />
40
+ </MantineProvider>
41
+ );
42
+ }
@@ -0,0 +1,111 @@
1
+ /* eslint-disable */
2
+
3
+ // @ts-nocheck
4
+
5
+ // noinspection JSUnusedGlobalSymbols
6
+
7
+ // This file was automatically generated by TanStack Router.
8
+ // You should NOT make any changes in this file as it will be overwritten.
9
+ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
10
+
11
+ // Import Routes
12
+
13
+ import { Route as rootRoute } from './routes/__root'
14
+ import { Route as SecondaryImport } from './routes/secondary'
15
+ import { Route as IndexImport } from './routes/index'
16
+
17
+ // Create/Update Routes
18
+
19
+ const SecondaryRoute = SecondaryImport.update({
20
+ id: '/secondary',
21
+ path: '/secondary',
22
+ getParentRoute: () => rootRoute,
23
+ } as any)
24
+
25
+ const IndexRoute = IndexImport.update({
26
+ id: '/',
27
+ path: '/',
28
+ getParentRoute: () => rootRoute,
29
+ } as any)
30
+
31
+ // Populate the FileRoutesByPath interface
32
+
33
+ declare module '@tanstack/react-router' {
34
+ interface FileRoutesByPath {
35
+ '/': {
36
+ id: '/'
37
+ path: '/'
38
+ fullPath: '/'
39
+ preLoaderRoute: typeof IndexImport
40
+ parentRoute: typeof rootRoute
41
+ }
42
+ '/secondary': {
43
+ id: '/secondary'
44
+ path: '/secondary'
45
+ fullPath: '/secondary'
46
+ preLoaderRoute: typeof SecondaryImport
47
+ parentRoute: typeof rootRoute
48
+ }
49
+ }
50
+ }
51
+
52
+ // Create and export the route tree
53
+
54
+ export interface FileRoutesByFullPath {
55
+ '/': typeof IndexRoute
56
+ '/secondary': typeof SecondaryRoute
57
+ }
58
+
59
+ export interface FileRoutesByTo {
60
+ '/': typeof IndexRoute
61
+ '/secondary': typeof SecondaryRoute
62
+ }
63
+
64
+ export interface FileRoutesById {
65
+ __root__: typeof rootRoute
66
+ '/': typeof IndexRoute
67
+ '/secondary': typeof SecondaryRoute
68
+ }
69
+
70
+ export interface FileRouteTypes {
71
+ fileRoutesByFullPath: FileRoutesByFullPath
72
+ fullPaths: '/' | '/secondary'
73
+ fileRoutesByTo: FileRoutesByTo
74
+ to: '/' | '/secondary'
75
+ id: '__root__' | '/' | '/secondary'
76
+ fileRoutesById: FileRoutesById
77
+ }
78
+
79
+ export interface RootRouteChildren {
80
+ IndexRoute: typeof IndexRoute
81
+ SecondaryRoute: typeof SecondaryRoute
82
+ }
83
+
84
+ const rootRouteChildren: RootRouteChildren = {
85
+ IndexRoute: IndexRoute,
86
+ SecondaryRoute: SecondaryRoute,
87
+ }
88
+
89
+ export const routeTree = rootRoute
90
+ ._addFileChildren(rootRouteChildren)
91
+ ._addFileTypes<FileRouteTypes>()
92
+
93
+ /* ROUTE_MANIFEST_START
94
+ {
95
+ "routes": {
96
+ "__root__": {
97
+ "filePath": "__root.tsx",
98
+ "children": [
99
+ "/",
100
+ "/secondary"
101
+ ]
102
+ },
103
+ "/": {
104
+ "filePath": "index.tsx"
105
+ },
106
+ "/secondary": {
107
+ "filePath": "secondary.tsx"
108
+ }
109
+ }
110
+ }
111
+ ROUTE_MANIFEST_END */
@@ -0,0 +1,21 @@
1
+ import { Outlet, createRootRoute } from "@tanstack/react-router";
2
+ import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
3
+
4
+ export const Route = createRootRoute({
5
+ component: RootComponent,
6
+ });
7
+
8
+ /**
9
+ * This component wraps all other routes
10
+ */
11
+ function RootComponent() {
12
+ return (
13
+ <>
14
+ <Outlet />
15
+
16
+ {process.env.NODE_ENV === "development" && (
17
+ <TanStackRouterDevtools position="bottom-right" />
18
+ )}
19
+ </>
20
+ );
21
+ }
@@ -0,0 +1,63 @@
1
+ import * as React from "react";
2
+ import { createFileRoute, Link } from "@tanstack/react-router";
3
+ import {
4
+ Anchor,
5
+ Box,
6
+ Code,
7
+ Container,
8
+ Image,
9
+ px,
10
+ Stack,
11
+ Text,
12
+ Title,
13
+ } from "@mantine/core";
14
+ import { IconExternalLink } from "@tabler/icons-react";
15
+
16
+ export const Route = createFileRoute("/")({
17
+ component: HomeComponent,
18
+ });
19
+
20
+ function HomeComponent() {
21
+ return (
22
+ <Container mt="5rem">
23
+ <Stack gap="xl" ta="center">
24
+ <Image
25
+ src="https://raw.githubusercontent.com/proofgeist/proofkit/dde6366c529104658dfba67a8fc2910a8644fc64/docs/src/assets/proofkit.png"
26
+ alt="ProofKit"
27
+ style={{
28
+ marginRight: "auto",
29
+ marginLeft: "auto",
30
+ }}
31
+ w={"auto"}
32
+ mah={px("16rem")}
33
+ />
34
+ <Title order={1}>Welcome!</Title>
35
+
36
+ <Text style={{ textWrap: "balance" }}>
37
+ This is the base template page. To add more pages, components, or
38
+ other features, run the ProofKit CLI from within your project.
39
+ </Text>
40
+ <Code block>pnpm proofkit</Code>
41
+
42
+ <Text style={{ textWrap: "balance" }}>
43
+ To change this page, open <Code>src/routes/index.tsx</Code>
44
+ </Text>
45
+ <Box>
46
+ <Anchor
47
+ href="https://proofkit.dev"
48
+ target="_blank"
49
+ rel="proofkit-app"
50
+ style={{ display: "inline-flex", alignItems: "center", gap: 4 }}
51
+ >
52
+ ProofKit Docs <IconExternalLink size={px("1rem")} />
53
+ </Anchor>
54
+ </Box>
55
+
56
+ <Text c="dimmed" size="sm">
57
+ Need to build multiple webviewer widgets?{" "}
58
+ <Link to="/secondary">Check out the secondary page</Link>
59
+ </Text>
60
+ </Stack>
61
+ </Container>
62
+ );
63
+ }
@@ -0,0 +1,28 @@
1
+ import * as React from "react";
2
+ import { createFileRoute, Link } from "@tanstack/react-router";
3
+ import { Code, Container, Stack, Text, Title } from "@mantine/core";
4
+
5
+ export const Route = createFileRoute("/secondary")({
6
+ component: RouteComponent,
7
+ });
8
+
9
+ function RouteComponent() {
10
+ return (
11
+ <Container mt="5rem">
12
+ <Stack gap="xl" ta="center">
13
+ <Title order={1}>Secondary Page</Title>
14
+ <Text>
15
+ Use hidden pages like this to embed multiple webviewer widgets into a
16
+ single HTML bundle for your FileMaker solution.
17
+ </Text>
18
+ <Text>
19
+ See how to navigate via a FileMaker script in the{" "}
20
+ <Code>EXAMPLE: Navigation</Code> script
21
+ </Text>
22
+ <Text c="dimmed" size="sm">
23
+ <Link to="/">Go back to the home page</Link>
24
+ </Text>
25
+ </Stack>
26
+ </Container>
27
+ );
28
+ }
@@ -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
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "esModuleInterop": true,
5
+ "jsx": "react-jsx",
6
+ "target": "ESNext",
7
+ "module": "ESNext",
8
+ "moduleResolution": "Bundler",
9
+ "noEmit": true,
10
+ "paths": {
11
+ "@/*": ["./src/*"]
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,18 @@
1
+ import path from "path";
2
+ import { defineConfig } from "vite";
3
+ import react from "@vitejs/plugin-react";
4
+ import { TanStackRouterVite } from "@tanstack/router-plugin/vite";
5
+ import { viteSingleFile } from "vite-plugin-singlefile";
6
+
7
+ // https://vitejs.dev/config/
8
+ export default defineConfig({
9
+ server: {
10
+ port: 5175,
11
+ },
12
+ resolve: {
13
+ alias: {
14
+ "@": path.resolve(__dirname, "./src"),
15
+ },
16
+ },
17
+ plugins: [TanStackRouterVite({}), react(), viteSingleFile()],
18
+ });