@proofkit/cli 1.2.0-beta.1 → 2.0.0-beta.1

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 (130) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/dist/add-CfoeMDFa.js +57 -0
  3. package/dist/add-CfoeMDFa.js.map +1 -0
  4. package/dist/addPackageDependency-BE76r_Gs.js +4 -0
  5. package/dist/addPackageDependency-BE76r_Gs.js.map +1 -0
  6. package/dist/consts-BZnOMxpW.js +10 -0
  7. package/dist/consts-BZnOMxpW.js.map +1 -0
  8. package/dist/deploy-ib8_w4Q8.js +34 -0
  9. package/dist/deploy-ib8_w4Q8.js.map +1 -0
  10. package/dist/fmdapi-LpkpfSZp.js +3 -0
  11. package/dist/fmdapi-LpkpfSZp.js.map +1 -0
  12. package/dist/getUserPkgManager-Cph_6l1P.js +2 -0
  13. package/dist/getUserPkgManager-Cph_6l1P.js.map +1 -0
  14. package/dist/globalOptions-DmUayYY3.js +2 -0
  15. package/dist/globalOptions-DmUayYY3.js.map +1 -0
  16. package/dist/index-dr0nV3hP.d.ts +365 -0
  17. package/dist/index-dr0nV3hP.d.ts.map +1 -0
  18. package/dist/index.js +11 -147
  19. package/dist/index.js.map +1 -0
  20. package/dist/logger-DCEXcH26.js +2 -0
  21. package/dist/logger-DCEXcH26.js.map +1 -0
  22. package/dist/parseSettings-DYvHU8yJ.js +2 -0
  23. package/dist/parseSettings-DYvHU8yJ.js.map +1 -0
  24. package/dist/remove-D-aGocFU.js +2 -0
  25. package/dist/remove-D-aGocFU.js.map +1 -0
  26. package/dist/state-CiURqLoM.js +41 -0
  27. package/dist/state-CiURqLoM.js.map +1 -0
  28. package/dist/typegen-CNWUG1wR.js +2 -0
  29. package/dist/typegen-CNWUG1wR.js.map +1 -0
  30. package/dist/update-CDaX7MZ5.js +7 -0
  31. package/dist/update-CDaX7MZ5.js.map +1 -0
  32. package/dist/utils-CQMjIwwz.js +3 -0
  33. package/dist/utils-CQMjIwwz.js.map +1 -0
  34. package/package.json +61 -53
  35. package/template/extras/emailTemplates/auth-code.tsx +7 -26
  36. package/template/extras/emailTemplates/generic.tsx +8 -31
  37. package/template/extras/fmaddon-auth/emails/auth-code.tsx +7 -26
  38. package/template/extras/src/app/api/auth/[...nextauth]/route.ts +1 -1
  39. package/template/extras/src/server/next-auth/base.ts +3 -3
  40. package/template/fm-addon/ProofKitWV/de.xml +517 -20
  41. package/template/fm-addon/ProofKitWV/en.xml +517 -20
  42. package/template/fm-addon/ProofKitWV/es.xml +517 -20
  43. package/template/fm-addon/ProofKitWV/fr.xml +517 -20
  44. package/template/fm-addon/ProofKitWV/icon.png +0 -0
  45. package/template/fm-addon/ProofKitWV/icon@2x.png +0 -0
  46. package/template/fm-addon/ProofKitWV/info.json +9 -6
  47. package/template/fm-addon/ProofKitWV/info_de.json +12 -5
  48. package/template/fm-addon/ProofKitWV/info_en.json +16 -5
  49. package/template/fm-addon/ProofKitWV/info_es.json +12 -5
  50. package/template/fm-addon/ProofKitWV/info_fr.json +12 -5
  51. package/template/fm-addon/ProofKitWV/info_it.json +12 -5
  52. package/template/fm-addon/ProofKitWV/info_ja.json +12 -5
  53. package/template/fm-addon/ProofKitWV/info_ko.json +12 -5
  54. package/template/fm-addon/ProofKitWV/info_nl.json +12 -5
  55. package/template/fm-addon/ProofKitWV/info_pt.json +12 -5
  56. package/template/fm-addon/ProofKitWV/info_sv.json +12 -5
  57. package/template/fm-addon/ProofKitWV/info_zh.json +12 -5
  58. package/template/fm-addon/ProofKitWV/it.xml +517 -20
  59. package/template/fm-addon/ProofKitWV/ja.xml +517 -20
  60. package/template/fm-addon/ProofKitWV/ko.xml +517 -20
  61. package/template/fm-addon/ProofKitWV/nl.xml +517 -20
  62. package/template/fm-addon/ProofKitWV/preview.png +0 -0
  63. package/template/fm-addon/ProofKitWV/pt.xml +517 -20
  64. package/template/fm-addon/ProofKitWV/records_de.xml +0 -0
  65. package/template/fm-addon/ProofKitWV/records_en.xml +0 -0
  66. package/template/fm-addon/ProofKitWV/records_es.xml +0 -0
  67. package/template/fm-addon/ProofKitWV/records_fr.xml +0 -0
  68. package/template/fm-addon/ProofKitWV/records_it.xml +0 -0
  69. package/template/fm-addon/ProofKitWV/records_ja.xml +0 -0
  70. package/template/fm-addon/ProofKitWV/records_ko.xml +0 -0
  71. package/template/fm-addon/ProofKitWV/records_nl.xml +0 -0
  72. package/template/fm-addon/ProofKitWV/records_pt.xml +0 -0
  73. package/template/fm-addon/ProofKitWV/records_sv.xml +0 -0
  74. package/template/fm-addon/ProofKitWV/records_zh.xml +0 -0
  75. package/template/fm-addon/ProofKitWV/sv.xml +517 -20
  76. package/template/fm-addon/ProofKitWV/template.xml +0 -0
  77. package/template/fm-addon/ProofKitWV/zh.xml +517 -20
  78. package/template/nextjs-mantine/AGENTS.md +1 -0
  79. package/template/nextjs-mantine/package.json +4 -4
  80. package/template/nextjs-shadcn/AGENTS.md +1 -0
  81. package/template/nextjs-shadcn/biome.json +18 -13
  82. package/template/nextjs-shadcn/package.json +11 -9
  83. package/template/nextjs-shadcn/src/app/layout.tsx +11 -11
  84. package/template/nextjs-shadcn/src/components/mode-toggle.tsx +39 -0
  85. package/template/nextjs-shadcn/src/components/ui/button.tsx +61 -0
  86. package/template/nextjs-shadcn/src/components/ui/dropdown-menu.tsx +267 -0
  87. package/template/nextjs-shadcn/src/components/ui/sonner.tsx +31 -0
  88. package/template/nextjs-shadcn/src/lib/env.ts +1 -1
  89. package/template/pages/nextjs/table-infinite/actions.ts +1 -1
  90. package/template/pages/nextjs/table-infinite-edit/actions.ts +1 -1
  91. package/template/vite-wv/.claude/launch.json +18 -0
  92. package/template/vite-wv/AGENTS.md +1 -0
  93. package/template/vite-wv/_gitignore +1 -0
  94. package/template/vite-wv/components.json +6 -6
  95. package/template/vite-wv/index.html +2 -2
  96. package/template/vite-wv/package.json +21 -35
  97. package/template/vite-wv/proofkit-typegen.config.jsonc +18 -0
  98. package/template/vite-wv/proofkit.json +4 -1
  99. package/template/vite-wv/scripts/filemaker.js +96 -0
  100. package/template/vite-wv/scripts/launch-fm.js +19 -0
  101. package/template/vite-wv/scripts/upload.js +17 -14
  102. package/template/vite-wv/src/App.tsx +84 -0
  103. package/template/vite-wv/src/index.css +96 -0
  104. package/template/vite-wv/src/lib/utils.ts +6 -0
  105. package/template/vite-wv/src/main.tsx +14 -35
  106. package/template/vite-wv/src/router.tsx +57 -0
  107. package/template/vite-wv/src/routes/query-demo.tsx +37 -0
  108. package/template/vite-wv/tsconfig.json +3 -1
  109. package/template/vite-wv/vite.config.ts +5 -5
  110. package/dist/external-DCpQkgKf.js +0 -1
  111. package/template/extras/config/_eslint.js +0 -27
  112. package/template/extras/config/_prettier.config.js +0 -6
  113. package/template/nextjs-mantine/.prettierrc +0 -3
  114. package/template/nextjs-shadcn/.prettierrc +0 -3
  115. package/template/nextjs-shadcn/next-env.d.ts +0 -6
  116. package/template/vite-wv/.prettierrc +0 -3
  117. package/template/vite-wv/pnpm-lock.yaml +0 -2294
  118. package/template/vite-wv/postcss.config.cjs +0 -15
  119. package/template/vite-wv/scripts/launch-fm.sh +0 -3
  120. package/template/vite-wv/src/components/AppLogo.tsx +0 -5
  121. package/template/vite-wv/src/components/full-screen-loader.tsx +0 -9
  122. package/template/vite-wv/src/config/env.ts +0 -16
  123. package/template/vite-wv/src/config/theme/globals.css +0 -125
  124. package/template/vite-wv/src/config/theme/mantine-theme.ts +0 -22
  125. package/template/vite-wv/src/routeTree.gen.ts +0 -111
  126. package/template/vite-wv/src/routes/__root.tsx +0 -21
  127. package/template/vite-wv/src/routes/index.tsx +0 -63
  128. package/template/vite-wv/src/routes/secondary.tsx +0 -28
  129. package/template/vite-wv/src/utils/notification-helpers.ts +0 -32
  130. package/template/vite-wv/src/utils/styles.ts +0 -6
@@ -5,48 +5,34 @@
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "build": "vite build",
8
- "build:upload": "pnpm build && pnpm upload",
8
+ "build:upload": "__PNPM_COMMAND__ build && __PNPM_COMMAND__ upload",
9
9
  "dev": "vite",
10
- "launch-fm": "./scripts/launch-fm.sh",
10
+ "launch-fm": "node ./scripts/launch-fm.js",
11
11
  "proofkit": "proofkit",
12
12
  "serve": "vite preview",
13
13
  "start": "vite",
14
- "typegen": "proofkit typegen",
15
- "upload": "node scripts/upload.js"
14
+ "typegen": "typegen",
15
+ "typegen:ui": "typegen ui",
16
+ "upload": "node ./scripts/upload.js",
17
+ "lint": "ultracite check .",
18
+ "format": "ultracite fix ."
16
19
  },
17
20
  "dependencies": {
18
- "@mantine/core": "^7.15.1",
19
- "@mantine/dates": "^7.15.1",
20
- "@mantine/hooks": "^7.15.1",
21
- "@mantine/modals": "^7.15.1",
22
- "@mantine/notifications": "^7.15.1",
23
- "@proofkit/webviewer": "^3.0.0",
24
- "@proofkit/fmdapi": "^5.0.0",
25
- "@t3-oss/env-core": "^0.12.0",
26
- "@tabler/icons-react": "^3.26.0",
27
- "@tanstack/react-query": "^5.69.0",
28
- "@tanstack/react-router": "^1.114.27",
29
- "mantine-react-table": "2.0.0-beta.7",
30
- "react": "^19.0.0",
31
- "react-dom": "^19.0.0",
32
- "vite-plugin-singlefile": "^2.1.0",
33
- "zod": "^3.24.1"
21
+ "@tanstack/react-query": "^5.90.21",
22
+ "@tanstack/react-router": "^1.167.4",
23
+ "react": "^19.2.4",
24
+ "react-dom": "^19.2.4"
34
25
  },
35
26
  "devDependencies": {
36
- "@tanstack/eslint-plugin-query": "^5.59.1",
37
- "@tanstack/react-query-devtools": "^5.69.0",
38
- "@tanstack/react-router-devtools": "^1.114.27",
39
- "@tanstack/router-plugin": "^1.114.27",
40
- "@types/node": "^22.13.13",
41
- "@types/react": "^19.0.12",
42
- "@types/react-dom": "^19.0.4",
43
- "@vitejs/plugin-react": "^4.3.4",
44
- "dotenv": "^16.4.7",
45
- "open": "^10.1.0",
46
- "postcss": "^8.5.3",
47
- "postcss-preset-mantine": "^1.17.0",
48
- "postcss-simple-vars": "^7.0.1",
49
- "typescript": "^5",
50
- "vite": "^6.2.3"
27
+ "@proofkit/typegen": "^1.1.0-beta.16",
28
+ "@types/react": "^19.2.14",
29
+ "@types/react-dom": "^19.2.3",
30
+ "@vitejs/plugin-react": "^5.2.0",
31
+ "dotenv": "^17.3.1",
32
+ "open": "^11.0.0",
33
+ "typescript": "^5.9.3",
34
+ "ultracite": "7.0.8",
35
+ "vite": "^7.3.1",
36
+ "vite-plugin-singlefile": "^2.3.2"
51
37
  }
52
38
  }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://proofkit.dev/typegen-config-schema.json",
3
+ "config": {
4
+ "type": "fmdapi",
5
+ "path": "./src/config/schemas/filemaker",
6
+ "clearOldFiles": true,
7
+ "clientSuffix": "Layout",
8
+ "validator": "zod/v4",
9
+ "webviewerScriptName": "ExecuteDataApi",
10
+ "fmHttp": {
11
+ "enabled": true
12
+ },
13
+ "layouts": [
14
+ // Add layouts here when you're ready to generate clients.
15
+ // { "layoutName": "API_Customers", "schemaName": "Customers" }
16
+ ]
17
+ }
18
+ }
@@ -1,6 +1,9 @@
1
1
  {
2
+ "ui": "shadcn",
2
3
  "auth": { "type": "none" },
3
4
  "envFile": ".env",
4
5
  "appType": "webviewer",
5
- "appliedUpgrades": ["shadcn"]
6
+ "dataSources": [],
7
+ "replacedMainPage": false,
8
+ "registryTemplates": []
6
9
  }
@@ -0,0 +1,96 @@
1
+ import { resolve } from "node:path";
2
+ import dotenv from "dotenv";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ const currentDirectory = fileURLToPath(new URL(".", import.meta.url));
6
+ const envPath = resolve(currentDirectory, "../.env");
7
+
8
+ dotenv.config({ path: envPath });
9
+
10
+ const defaultFmHttpBaseUrl = process.env.FM_HTTP_BASE_URL ?? "http://127.0.0.1:1365";
11
+
12
+ function stripFileExtension(fileName) {
13
+ return fileName.replace(/\.fmp12$/i, "");
14
+ }
15
+
16
+ async function getConnectedFiles(baseUrl = defaultFmHttpBaseUrl) {
17
+ const healthResponse = await fetch(`${baseUrl}/health`).catch(() => null);
18
+ if (!healthResponse?.ok) {
19
+ return [];
20
+ }
21
+
22
+ const connectedFiles = await fetch(`${baseUrl}/connectedFiles`)
23
+ .then((response) => (response.ok ? response.json() : []))
24
+ .catch(() => []);
25
+
26
+ return Array.isArray(connectedFiles) ? connectedFiles : [];
27
+ }
28
+
29
+ function normalizeTarget(fileName) {
30
+ return stripFileExtension(fileName).toLowerCase();
31
+ }
32
+
33
+ export async function resolveFileMakerTarget() {
34
+ const connectedFiles = await getConnectedFiles();
35
+ const targetFromEnv = process.env.FM_DATABASE ? normalizeTarget(process.env.FM_DATABASE) : undefined;
36
+
37
+ if (targetFromEnv) {
38
+ const matches = connectedFiles.filter((connectedFile) => normalizeTarget(connectedFile) === targetFromEnv);
39
+ if (matches.length === 1) {
40
+ return {
41
+ fileName: stripFileExtension(matches[0]),
42
+ host: "$",
43
+ source: "fm-http",
44
+ };
45
+ }
46
+
47
+ if (connectedFiles.length > 0) {
48
+ throw new Error(
49
+ `FM_DATABASE is set to "${process.env.FM_DATABASE}" but no matching connected file was found via FM HTTP.`,
50
+ );
51
+ }
52
+ }
53
+
54
+ if (connectedFiles.length === 1) {
55
+ return {
56
+ fileName: stripFileExtension(connectedFiles[0]),
57
+ host: "$",
58
+ source: "fm-http",
59
+ };
60
+ }
61
+
62
+ if (connectedFiles.length > 1) {
63
+ throw new Error(
64
+ `Multiple FileMaker files are connected via FM HTTP (${connectedFiles.join(", ")}). Set FM_DATABASE to choose one.`,
65
+ );
66
+ }
67
+
68
+ const serverValue = process.env.FM_SERVER;
69
+ const databaseValue = process.env.FM_DATABASE;
70
+
71
+ if (serverValue && databaseValue) {
72
+ let hostname;
73
+ try {
74
+ hostname = new URL(serverValue).hostname;
75
+ } catch {
76
+ hostname = serverValue.replace(/^https?:\/\//, "").replace(/\/.*$/, "");
77
+ }
78
+
79
+ return {
80
+ fileName: stripFileExtension(databaseValue),
81
+ host: hostname,
82
+ source: "env",
83
+ };
84
+ }
85
+
86
+ return null;
87
+ }
88
+
89
+ export function buildFmpUrl({ host, fileName, scriptName, parameter }) {
90
+ const params = new URLSearchParams({ script: scriptName });
91
+ if (parameter) {
92
+ params.set("param", parameter);
93
+ }
94
+
95
+ return `fmp://${host}/${encodeURIComponent(fileName)}?${params.toString()}`;
96
+ }
@@ -0,0 +1,19 @@
1
+ import open from "open";
2
+ import { buildFmpUrl, resolveFileMakerTarget } from "./filemaker.js";
3
+
4
+ const target = await resolveFileMakerTarget();
5
+
6
+ if (!target) {
7
+ console.error(
8
+ "Could not resolve a FileMaker file. Start the local FM HTTP proxy with a connected file, or set FM_SERVER and FM_DATABASE in .env.",
9
+ );
10
+ process.exit(1);
11
+ }
12
+
13
+ await open(
14
+ buildFmpUrl({
15
+ host: target.host,
16
+ fileName: target.fileName,
17
+ scriptName: "Launch Web Viewer for Dev",
18
+ }),
19
+ );
@@ -1,21 +1,24 @@
1
1
  import open from "open";
2
2
  import { resolve } from "path";
3
- import dotenv from "dotenv";
4
3
  import { fileURLToPath } from "url";
4
+ import { buildFmpUrl, resolveFileMakerTarget } from "./filemaker.js";
5
5
 
6
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
7
  const thePath = resolve(currentDirectory, "../dist", "index.html");
17
- const url = `fmp://${server}/${file}?script=${uploadScript}&param=${encodeURIComponent(
18
- thePath
19
- )}`;
8
+ const target = await resolveFileMakerTarget();
9
+
10
+ if (!target) {
11
+ console.error(
12
+ "Could not resolve a FileMaker file. Start the local FM HTTP proxy with a connected file, or set FM_SERVER and FM_DATABASE in .env.",
13
+ );
14
+ process.exit(1);
15
+ }
20
16
 
21
- open(url);
17
+ await open(
18
+ buildFmpUrl({
19
+ host: target.host,
20
+ fileName: target.fileName,
21
+ scriptName: "UploadWebviewerWidget",
22
+ parameter: thePath,
23
+ }),
24
+ );
@@ -0,0 +1,84 @@
1
+ import { globalSettings } from "@proofkit/webviewer";
2
+ import type { LucideIcon } from "lucide-react";
3
+ import { Database, Layers, Sparkles } from "lucide-react";
4
+
5
+ type Step = {
6
+ readonly icon: LucideIcon;
7
+ readonly title: string;
8
+ readonly body: string;
9
+ };
10
+
11
+ globalSettings.setWebViewerName("web");
12
+
13
+ const steps: readonly Step[] = [
14
+ {
15
+ icon: Database,
16
+ title: "Connect FileMaker later",
17
+ body: "This starter renders safely in a normal browser. When you are ready, wire in FM HTTP or hosted FileMaker setup with ProofKit commands.",
18
+ },
19
+ {
20
+ icon: Layers,
21
+ title: "Generate clients when ready",
22
+ body: "Add layouts to proofkit-typegen.config.jsonc, then run your typegen script to create strongly typed layout clients.",
23
+ },
24
+ {
25
+ icon: Sparkles,
26
+ title: "Add shadcn components fast",
27
+ body: "Tailwind v4 and shadcn are already initialized, so agents and developers can add components without extra setup.",
28
+ },
29
+ ] as const;
30
+
31
+ export default function App() {
32
+ return (
33
+ <main>
34
+ <div className="mx-auto flex min-h-screen w-full max-w-5xl flex-col px-6 py-10 sm:px-10">
35
+ <div className="mb-10 flex-1">
36
+ <div className="inline-flex items-center gap-2 rounded-full border border-border bg-card px-3 py-1 text-sm text-muted-foreground shadow-sm">
37
+ <span className="h-2 w-2 rounded-full bg-primary" />
38
+ ProofKit WebViewer Starter
39
+ </div>
40
+
41
+ <div className="mt-8 grid gap-8 lg:grid-cols-[1.2fr_0.8fr]">
42
+ <section className="rounded-3xl border border-border bg-card/80 p-8 shadow-sm">
43
+ <p className="text-sm font-medium uppercase tracking-[0.2em] text-muted-foreground">
44
+ React + TypeScript + Vite
45
+ </p>
46
+ <h1 className="mt-4 max-w-xl text-4xl font-semibold tracking-tight text-balance sm:text-5xl">
47
+ Build browser-safe FileMaker WebViewer apps without scaffolding against a hosted server.
48
+ </h1>
49
+ <p className="mt-6 max-w-2xl text-lg leading-8 text-muted-foreground">
50
+ This starter stays intentionally small, but it is already ready for Tailwind v4, shadcn component
51
+ installs, hash-based TanStack Router navigation, React Query, and later ProofKit typegen output.
52
+ </p>
53
+
54
+ <div className="mt-8 flex flex-wrap gap-3 text-sm">
55
+ <code className="rounded-full border border-border bg-background px-3 py-1.5">pnpm dev</code>
56
+ <code className="rounded-full border border-border bg-background px-3 py-1.5">pnpm typegen</code>
57
+ <code className="rounded-full border border-border bg-background px-3 py-1.5">pnpm launch-fm</code>
58
+ </div>
59
+ </section>
60
+
61
+ <aside className="rounded-3xl border border-border bg-gradient-to-br from-card via-card to-muted/50 p-8 shadow-sm">
62
+ <p className="text-sm font-medium uppercase tracking-[0.2em] text-muted-foreground">Starter notes</p>
63
+ <div className="mt-5 space-y-4 text-sm text-muted-foreground">
64
+ <p>Update the default WebViewer name in <code>src/App.tsx</code> to match your FileMaker layout object.</p>
65
+ <p>When the app runs inside FileMaker, you can start using <code>fmFetch</code> or generated clients right away.</p>
66
+ <p>The local helper scripts prefer FM HTTP connected files before falling back to hosted server env vars.</p>
67
+ </div>
68
+ </aside>
69
+ </div>
70
+
71
+ <section className="mt-8 grid gap-4 md:grid-cols-3">
72
+ {steps.map((step) => (
73
+ <article key={step.title} className="rounded-2xl border border-border bg-card p-6 shadow-sm">
74
+ <step.icon className="h-5 w-5 text-primary" />
75
+ <h2 className="mt-4 text-lg font-semibold">{step.title}</h2>
76
+ <p className="mt-3 text-sm leading-6 text-muted-foreground">{step.body}</p>
77
+ </article>
78
+ ))}
79
+ </section>
80
+ </div>
81
+ </div>
82
+ </main>
83
+ );
84
+ }
@@ -0,0 +1,96 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+
4
+ :root {
5
+ --background: hsl(42 33% 98%);
6
+ --foreground: hsl(222 47% 11%);
7
+ --card: hsl(0 0% 100%);
8
+ --card-foreground: hsl(222 47% 11%);
9
+ --popover: hsl(0 0% 100%);
10
+ --popover-foreground: hsl(222 47% 11%);
11
+ --primary: hsl(197 82% 44%);
12
+ --primary-foreground: hsl(210 40% 98%);
13
+ --secondary: hsl(210 20% 93%);
14
+ --secondary-foreground: hsl(222 47% 11%);
15
+ --muted: hsl(42 21% 94%);
16
+ --muted-foreground: hsl(215 16% 40%);
17
+ --accent: hsl(32 88% 92%);
18
+ --accent-foreground: hsl(24 10% 10%);
19
+ --destructive: hsl(0 72% 51%);
20
+ --destructive-foreground: hsl(210 40% 98%);
21
+ --border: hsl(30 14% 86%);
22
+ --input: hsl(30 14% 86%);
23
+ --ring: hsl(197 82% 44%);
24
+ --radius: 1rem;
25
+ }
26
+
27
+ .dark {
28
+ color-scheme: dark;
29
+ --background: hsl(221 39% 11%);
30
+ --foreground: hsl(44 23% 92%);
31
+ --card: hsl(222 33% 15%);
32
+ --card-foreground: hsl(44 23% 92%);
33
+ --popover: hsl(222 33% 15%);
34
+ --popover-foreground: hsl(44 23% 92%);
35
+ --primary: hsl(190 82% 62%);
36
+ --primary-foreground: hsl(222 47% 11%);
37
+ --secondary: hsl(219 19% 22%);
38
+ --secondary-foreground: hsl(44 23% 92%);
39
+ --muted: hsl(219 19% 22%);
40
+ --muted-foreground: hsl(215 20% 72%);
41
+ --accent: hsl(27 42% 28%);
42
+ --accent-foreground: hsl(44 23% 92%);
43
+ --destructive: hsl(0 63% 54%);
44
+ --destructive-foreground: hsl(210 40% 98%);
45
+ --border: hsl(219 19% 26%);
46
+ --input: hsl(219 19% 26%);
47
+ --ring: hsl(190 82% 62%);
48
+ }
49
+
50
+ @theme inline {
51
+ --color-background: var(--background);
52
+ --color-foreground: var(--foreground);
53
+ --color-card: var(--card);
54
+ --color-card-foreground: var(--card-foreground);
55
+ --color-popover: var(--popover);
56
+ --color-popover-foreground: var(--popover-foreground);
57
+ --color-primary: var(--primary);
58
+ --color-primary-foreground: var(--primary-foreground);
59
+ --color-secondary: var(--secondary);
60
+ --color-secondary-foreground: var(--secondary-foreground);
61
+ --color-muted: var(--muted);
62
+ --color-muted-foreground: var(--muted-foreground);
63
+ --color-accent: var(--accent);
64
+ --color-accent-foreground: var(--accent-foreground);
65
+ --color-destructive: var(--destructive);
66
+ --color-destructive-foreground: var(--destructive-foreground);
67
+ --color-border: var(--border);
68
+ --color-input: var(--input);
69
+ --color-ring: var(--ring);
70
+ --radius-sm: calc(var(--radius) - 4px);
71
+ --radius-md: calc(var(--radius) - 2px);
72
+ --radius-lg: var(--radius);
73
+ --radius-xl: calc(var(--radius) + 4px);
74
+ }
75
+
76
+ @layer base {
77
+ * {
78
+ @apply border-border;
79
+ }
80
+
81
+ html {
82
+ color-scheme: light;
83
+ }
84
+
85
+ body {
86
+ background-color: var(--background);
87
+ color: var(--foreground);
88
+ font-family:
89
+ "Instrument Sans",
90
+ Inter,
91
+ ui-sans-serif,
92
+ system-ui,
93
+ sans-serif;
94
+ min-width: 320px;
95
+ }
96
+ }
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
@@ -1,42 +1,21 @@
1
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
2
+ import { RouterProvider } from "@tanstack/react-router";
1
3
  import React from "react";
2
4
  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";
5
+ import "./index.css";
6
+ import { router } from "./router";
11
7
 
12
- import "@mantine/core/styles.css";
13
- import "mantine-react-table/styles.css";
14
- import "./config/theme/globals.css";
8
+ const queryClient = new QueryClient();
15
9
 
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
- }
10
+ const rootElement = document.getElementById("root");
11
+ if (!rootElement) {
12
+ throw new Error("Root element with id 'root' not found");
31
13
  }
32
14
 
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">
15
+ ReactDOM.createRoot(rootElement).render(
16
+ <React.StrictMode>
17
+ <QueryClientProvider client={queryClient}>
39
18
  <RouterProvider router={router} />
40
- </MantineProvider>,
41
- );
42
- }
19
+ </QueryClientProvider>
20
+ </React.StrictMode>,
21
+ );
@@ -0,0 +1,57 @@
1
+ import {
2
+ Link,
3
+ Outlet,
4
+ createHashHistory,
5
+ createRootRoute,
6
+ createRoute,
7
+ createRouter,
8
+ } from "@tanstack/react-router";
9
+ import App from "./App";
10
+ import { QueryDemoPage } from "./routes/query-demo";
11
+
12
+ const rootRoute = createRootRoute({
13
+ component: RootLayout,
14
+ });
15
+
16
+ const indexRoute = createRoute({
17
+ getParentRoute: () => rootRoute,
18
+ path: "/",
19
+ component: App,
20
+ });
21
+
22
+ const queryDemoRoute = createRoute({
23
+ getParentRoute: () => rootRoute,
24
+ path: "/query",
25
+ component: QueryDemoPage,
26
+ });
27
+
28
+ const routeTree = rootRoute.addChildren([indexRoute, queryDemoRoute]);
29
+
30
+ export const router = createRouter({
31
+ routeTree,
32
+ history: createHashHistory(),
33
+ });
34
+
35
+ declare module "@tanstack/react-router" {
36
+ interface Register {
37
+ router: typeof router;
38
+ }
39
+ }
40
+
41
+ function RootLayout() {
42
+ return (
43
+ <div className="min-h-screen bg-background text-foreground">
44
+ <header className="border-b border-border bg-card/80">
45
+ <nav className="mx-auto flex w-full max-w-5xl items-center gap-4 px-6 py-3 sm:px-10">
46
+ <Link className="[&.active]:text-primary text-sm font-medium text-muted-foreground" to="/">
47
+ Starter
48
+ </Link>
49
+ <Link className="[&.active]:text-primary text-sm font-medium text-muted-foreground" to="/query">
50
+ Query Demo
51
+ </Link>
52
+ </nav>
53
+ </header>
54
+ <Outlet />
55
+ </div>
56
+ );
57
+ }
@@ -0,0 +1,37 @@
1
+ import { useQuery } from "@tanstack/react-query";
2
+ import { Link } from "@tanstack/react-router";
3
+
4
+ const getConnectionHint = async (): Promise<string> => {
5
+ await new Promise((resolve) => setTimeout(resolve, 180));
6
+ return "Use fmFetch or generated clients once your FileMaker file is ready.";
7
+ };
8
+
9
+ export function QueryDemoPage() {
10
+ const hintQuery = useQuery({
11
+ queryKey: ["starter-connection-hint"],
12
+ queryFn: getConnectionHint,
13
+ });
14
+
15
+ return (
16
+ <main className="mx-auto w-full max-w-5xl px-6 py-10 sm:px-10">
17
+ <section className="rounded-3xl border border-border bg-card p-8 shadow-sm">
18
+ <p className="text-sm font-medium uppercase tracking-[0.2em] text-muted-foreground">React Query ready</p>
19
+ <h1 className="mt-4 text-3xl font-semibold tracking-tight">TanStack Query is preconfigured</h1>
20
+ <p className="mt-4 text-muted-foreground">
21
+ This route is rendered by TanStack Router using hash history, which is recommended for FileMaker WebViewer
22
+ apps.
23
+ </p>
24
+
25
+ <div className="mt-6 rounded-xl border border-border bg-background p-4 text-sm">
26
+ {hintQuery.isLoading ? "Loading starter data..." : hintQuery.data}
27
+ </div>
28
+
29
+ <div className="mt-6">
30
+ <Link className="inline-flex rounded-full border border-border bg-card px-4 py-2 text-sm font-medium" to="/">
31
+ Back to starter
32
+ </Link>
33
+ </div>
34
+ </section>
35
+ </main>
36
+ );
37
+ }
@@ -6,9 +6,11 @@
6
6
  "target": "ESNext",
7
7
  "module": "ESNext",
8
8
  "moduleResolution": "Bundler",
9
+ "baseUrl": ".",
9
10
  "noEmit": true,
10
11
  "paths": {
11
12
  "@/*": ["./src/*"]
12
13
  }
13
- }
14
+ },
15
+ "include": ["src"]
14
16
  }
@@ -1,10 +1,10 @@
1
- import path from "path";
2
- import { defineConfig } from "vite";
1
+ import path from "node:path";
3
2
  import react from "@vitejs/plugin-react";
4
- import { TanStackRouterVite } from "@tanstack/router-plugin/vite";
3
+ import { fmBridge } from "@proofkit/webviewer/vite-plugins";
4
+ import tailwindcss from "@tailwindcss/vite";
5
+ import { defineConfig } from "vite";
5
6
  import { viteSingleFile } from "vite-plugin-singlefile";
6
7
 
7
- // https://vitejs.dev/config/
8
8
  export default defineConfig({
9
9
  server: {
10
10
  port: 5175,
@@ -14,5 +14,5 @@ export default defineConfig({
14
14
  "@": path.resolve(__dirname, "./src"),
15
15
  },
16
16
  },
17
- plugins: [TanStackRouterVite({}), react(), viteSingleFile()],
17
+ plugins: [fmBridge(), react(), tailwindcss(), viteSingleFile()],
18
18
  });
@@ -1 +0,0 @@
1
- import{$brand as e,$input as ee,$output as t,BRAND as te,DIRTY as ne,EMPTY_PATH as re,INVALID as ie,NEVER as ae,OK as n,ParseStatus as r,TimePrecision as i,ZodAny as a,ZodAny$1 as o,ZodArray as s,ZodArray$1 as c,ZodBase64 as l,ZodBase64URL as u,ZodBigInt as d,ZodBigInt$1 as f,ZodBigIntFormat as p,ZodBoolean as m,ZodBoolean$1 as h,ZodBranded as g,ZodCIDRv4 as _,ZodCIDRv6 as v,ZodCUID as y,ZodCUID2 as b,ZodCatch as x,ZodCatch$1 as S,ZodCustom as C,ZodDate as w,ZodDate$1 as T,ZodDefault as E,ZodDefault$1 as D,ZodDiscriminatedUnion as O,ZodDiscriminatedUnion$1 as k,ZodE164 as A,ZodEffects as j,ZodEmail as M,ZodEmoji as N,ZodEnum as P,ZodEnum$1 as F,ZodError as I,ZodError$1 as L,ZodFile as R,ZodFirstPartyTypeKind as z,ZodFunction as B,ZodGUID as V,ZodIPv4 as H,ZodIPv6 as U,ZodISODate as W,ZodISODateTime as G,ZodISODuration as K,ZodISOTime as q,ZodIntersection as J,ZodIntersection$1 as oe,ZodIssueCode as se,ZodJWT as ce,ZodKSUID as le,ZodLazy as ue,ZodLazy$1 as de,ZodLiteral as fe,ZodLiteral$1 as pe,ZodMap as me,ZodMap$1 as he,ZodNaN as ge,ZodNaN$1 as _e,ZodNanoID as ve,ZodNativeEnum as ye,ZodNever as be,ZodNever$1 as xe,ZodNonOptional as Se,ZodNull as Ce,ZodNull$1 as we,ZodNullable as Te,ZodNullable$1 as Ee,ZodNumber as De,ZodNumber$1 as Oe,ZodNumberFormat as ke,ZodObject as Ae,ZodObject$1 as je,ZodOptional as Me,ZodOptional$1 as Ne,ZodParsedType as Pe,ZodPipe as Fe,ZodPipeline as Ie,ZodPrefault as Le,ZodPromise as Re,ZodPromise$1 as ze,ZodReadonly as Be,ZodReadonly$1 as Ve,ZodRealError as He,ZodRecord as Ue,ZodRecord$1 as We,ZodSet as Ge,ZodSet$1 as Ke,ZodString as qe,ZodString$1 as Je,ZodStringFormat as Ye,ZodSuccess as Xe,ZodSymbol as Ze,ZodSymbol$1 as Qe,ZodTemplateLiteral as $e,ZodTransform as et,ZodTuple as tt,ZodTuple$1 as nt,ZodType as Y,ZodType$1 as rt,ZodULID as it,ZodURL as at,ZodUUID as ot,ZodUndefined as st,ZodUndefined$1 as ct,ZodUnion as lt,ZodUnion$1 as ut,ZodUnknown as dt,ZodUnknown$1 as ft,ZodVoid as pt,ZodVoid$1 as mt,ZodXID as ht,_ZodString as gt,__export as X,_catch as _t,_default as vt,_endsWith as yt,_enum as bt,_function as xt,_gt as St,_gte as Ct,_includes as wt,_instanceof as Tt,_length as Et,_lowercase as Dt,_lt as Ot,_lte as kt,_maxLength as At,_maxSize as jt,_mime as Mt,_minLength as Nt,_minSize as Pt,_multipleOf as Ft,_negative as It,_nonnegative as Lt,_nonpositive as Rt,_normalize as zt,_null as Bt,_overwrite as Vt,_positive as Ht,_property as Ut,_regex as Wt,_size as Gt,_startsWith as Kt,_toLowerCase as qt,_toUpperCase as Jt,_trim as Yt,_undefined as Xt,_uppercase as Zt,_void as Qt,addIssueToContext as $t,any as en,anyType as tn,array as nn,arrayType as rn,base64 as an,base64url as on,bigIntType as sn,bigint as cn,boolean as ln,booleanType as un,check as dn,cidrv4 as fn,cidrv6 as pn,clone as Z,coerce as mn,coerce_exports as hn,config as Q,core_exports as gn,cuid as _n,cuid2 as vn,custom as yn,custom$1 as bn,date as xn,dateType as Sn,datetimeRegex as Cn,discriminatedUnion as wn,discriminatedUnionType as Tn,e164 as En,effectsType as $,email as Dn,emoji as On,en_default as kn,enumType as An,errorMap as jn,file as Mn,flattenError as Nn,float32 as Pn,float64 as Fn,formatError as In,functionType as Ln,getErrorMap as Rn,getParsedType as zn,globalRegistry as Bn,guid as Vn,instanceOfType as Hn,int as Un,int32 as Wn,int64 as Gn,intersection as Kn,intersectionType as qn,ipv4 as Jn,ipv6 as Yn,isAborted as Xn,isAsync as Zn,isDirty as Qn,isValid as $n,iso_exports as er,json as tr,jwt as nr,keyof as rr,ksuid as ir,late as ar,lazy as or,lazyType as sr,literal as cr,literalType as lr,locales_exports as ur,looseObject as dr,makeIssue as fr,map as pr,mapType as mr,nan as hr,nanType as gr,nanoid as _r,nativeEnum as vr,nativeEnumType as yr,never as br,neverType as xr,nonoptional as Sr,nullType as Cr,nullable as wr,nullableType as Tr,nullish as Er,number as Dr,numberType as Or,object as kr,objectType as Ar,objectUtil as jr,oboolean as Mr,onumber as Nr,optional as Pr,optionalType as Fr,ostring as Ir,parse as Lr,parseAsync as Rr,partialRecord as zr,pipe as Br,pipelineType as Vr,prefault as Hr,preprocess as Ur,preprocessType as Wr,prettifyError as Gr,promise as Kr,promiseType as qr,quotelessJson as Jr,readonly as Yr,record as Xr,recordType as Zr,refine as Qr,regexes_exports as $r,registry as ei,safeParse as ti,safeParseAsync as ni,set as ri,setErrorMap as ii,setType as ai,strictObject as oi,strictObjectType as si,string as ci,stringType as li,stringbool as ui,success as di,superRefine as fi,symbol as pi,symbolType as mi,templateLiteral as hi,toJSONSchema as gi,transform as _i,treeifyError as vi,tuple as yi,tupleType as bi,uint32 as xi,uint64 as Si,ulid as Ci,undefinedType as wi,union as Ti,unionType as Ei,unknown as Di,unknownType as Oi,url as ki,util as Ai,uuid as ji,uuidv4 as Mi,uuidv6 as Ni,uuidv7 as Pi,voidType as Fi,xid as Ii}from"./index.js";const Li={invalid_type:`invalid_type`,too_big:`too_big`,too_small:`too_small`,invalid_format:`invalid_format`,not_multiple_of:`not_multiple_of`,unrecognized_keys:`unrecognized_keys`,invalid_union:`invalid_union`,invalid_key:`invalid_key`,invalid_element:`invalid_element`,invalid_value:`invalid_value`,custom:`custom`},Ri=Object.freeze({status:`aborted`}),zi=Ri;function Bi(e){Q({customError:e})}function Vi(){return Q().customError}var Hi={};X(Hi,{$brand:()=>e,$input:()=>ee,$output:()=>t,NEVER:()=>zi,TimePrecision:()=>i,ZodAny:()=>o,ZodArray:()=>c,ZodBase64:()=>l,ZodBase64URL:()=>u,ZodBigInt:()=>f,ZodBigIntFormat:()=>p,ZodBoolean:()=>h,ZodCIDRv4:()=>_,ZodCIDRv6:()=>v,ZodCUID:()=>y,ZodCUID2:()=>b,ZodCatch:()=>S,ZodCustom:()=>C,ZodDate:()=>T,ZodDefault:()=>D,ZodDiscriminatedUnion:()=>k,ZodE164:()=>A,ZodEmail:()=>M,ZodEmoji:()=>N,ZodEnum:()=>F,ZodError:()=>L,ZodFile:()=>R,ZodGUID:()=>V,ZodIPv4:()=>H,ZodIPv6:()=>U,ZodISODate:()=>W,ZodISODateTime:()=>G,ZodISODuration:()=>K,ZodISOTime:()=>q,ZodIntersection:()=>oe,ZodIssueCode:()=>Li,ZodJWT:()=>ce,ZodKSUID:()=>le,ZodLazy:()=>de,ZodLiteral:()=>pe,ZodMap:()=>he,ZodNaN:()=>_e,ZodNanoID:()=>ve,ZodNever:()=>xe,ZodNonOptional:()=>Se,ZodNull:()=>we,ZodNullable:()=>Ee,ZodNumber:()=>Oe,ZodNumberFormat:()=>ke,ZodObject:()=>je,ZodOptional:()=>Ne,ZodPipe:()=>Fe,ZodPrefault:()=>Le,ZodPromise:()=>ze,ZodReadonly:()=>Ve,ZodRealError:()=>He,ZodRecord:()=>We,ZodSet:()=>Ke,ZodString:()=>Je,ZodStringFormat:()=>Ye,ZodSuccess:()=>Xe,ZodSymbol:()=>Qe,ZodTemplateLiteral:()=>$e,ZodTransform:()=>et,ZodTuple:()=>nt,ZodType:()=>rt,ZodULID:()=>it,ZodURL:()=>at,ZodUUID:()=>ot,ZodUndefined:()=>ct,ZodUnion:()=>ut,ZodUnknown:()=>ft,ZodVoid:()=>mt,ZodXID:()=>ht,_ZodString:()=>gt,_default:()=>vt,any:()=>en,array:()=>nn,base64:()=>an,base64url:()=>on,bigint:()=>cn,boolean:()=>ln,catch:()=>_t,check:()=>dn,cidrv4:()=>fn,cidrv6:()=>pn,clone:()=>Z,coerce:()=>hn,config:()=>Q,core:()=>gn,cuid:()=>_n,cuid2:()=>vn,custom:()=>bn,date:()=>xn,discriminatedUnion:()=>wn,e164:()=>En,email:()=>Dn,emoji:()=>On,endsWith:()=>yt,enum:()=>bt,file:()=>Mn,flattenError:()=>Nn,float32:()=>Pn,float64:()=>Fn,formatError:()=>In,function:()=>xt,getErrorMap:()=>Vi,globalRegistry:()=>Bn,gt:()=>St,gte:()=>Ct,guid:()=>Vn,includes:()=>wt,instanceof:()=>Tt,int:()=>Un,int32:()=>Wn,int64:()=>Gn,intersection:()=>Kn,ipv4:()=>Jn,ipv6:()=>Yn,iso:()=>er,json:()=>tr,jwt:()=>nr,keyof:()=>rr,ksuid:()=>ir,lazy:()=>or,length:()=>Et,literal:()=>cr,locales:()=>ur,looseObject:()=>dr,lowercase:()=>Dt,lt:()=>Ot,lte:()=>kt,map:()=>pr,maxLength:()=>At,maxSize:()=>jt,mime:()=>Mt,minLength:()=>Nt,minSize:()=>Pt,multipleOf:()=>Ft,nan:()=>hr,nanoid:()=>_r,nativeEnum:()=>vr,negative:()=>It,never:()=>br,nonnegative:()=>Lt,nonoptional:()=>Sr,nonpositive:()=>Rt,normalize:()=>zt,null:()=>Bt,nullable:()=>wr,nullish:()=>Er,number:()=>Dr,object:()=>kr,optional:()=>Pr,overwrite:()=>Vt,parse:()=>Lr,parseAsync:()=>Rr,partialRecord:()=>zr,pipe:()=>Br,positive:()=>Ht,prefault:()=>Hr,preprocess:()=>Ur,prettifyError:()=>Gr,promise:()=>Kr,property:()=>Ut,readonly:()=>Yr,record:()=>Xr,refine:()=>Qr,regex:()=>Wt,regexes:()=>$r,registry:()=>ei,safeParse:()=>ti,safeParseAsync:()=>ni,set:()=>ri,setErrorMap:()=>Bi,size:()=>Gt,startsWith:()=>Kt,strictObject:()=>oi,string:()=>ci,stringbool:()=>ui,success:()=>di,superRefine:()=>fi,symbol:()=>pi,templateLiteral:()=>hi,toJSONSchema:()=>gi,toLowerCase:()=>qt,toUpperCase:()=>Jt,transform:()=>_i,treeifyError:()=>vi,trim:()=>Yt,tuple:()=>yi,uint32:()=>xi,uint64:()=>Si,ulid:()=>Ci,undefined:()=>Xt,union:()=>Ti,unknown:()=>Di,uppercase:()=>Zt,url:()=>ki,uuid:()=>ji,uuidv4:()=>Mi,uuidv6:()=>Ni,uuidv7:()=>Pi,void:()=>Qt,xid:()=>Ii}),Q(kn());var Ui={};X(Ui,{BRAND:()=>te,DIRTY:()=>ne,EMPTY_PATH:()=>re,INVALID:()=>ie,NEVER:()=>ae,OK:()=>n,ParseStatus:()=>r,Schema:()=>Y,ZodAny:()=>a,ZodArray:()=>s,ZodBigInt:()=>d,ZodBoolean:()=>m,ZodBranded:()=>g,ZodCatch:()=>x,ZodDate:()=>w,ZodDefault:()=>E,ZodDiscriminatedUnion:()=>O,ZodEffects:()=>j,ZodEnum:()=>P,ZodError:()=>I,ZodFirstPartyTypeKind:()=>z,ZodFunction:()=>B,ZodIntersection:()=>J,ZodIssueCode:()=>se,ZodLazy:()=>ue,ZodLiteral:()=>fe,ZodMap:()=>me,ZodNaN:()=>ge,ZodNativeEnum:()=>ye,ZodNever:()=>be,ZodNull:()=>Ce,ZodNullable:()=>Te,ZodNumber:()=>De,ZodObject:()=>Ae,ZodOptional:()=>Me,ZodParsedType:()=>Pe,ZodPipeline:()=>Ie,ZodPromise:()=>Re,ZodReadonly:()=>Be,ZodRecord:()=>Ue,ZodSchema:()=>Y,ZodSet:()=>Ge,ZodString:()=>qe,ZodSymbol:()=>Ze,ZodTransformer:()=>j,ZodTuple:()=>tt,ZodType:()=>Y,ZodUndefined:()=>st,ZodUnion:()=>lt,ZodUnknown:()=>dt,ZodVoid:()=>pt,addIssueToContext:()=>$t,any:()=>tn,array:()=>rn,bigint:()=>sn,boolean:()=>un,coerce:()=>mn,custom:()=>yn,date:()=>Sn,datetimeRegex:()=>Cn,defaultErrorMap:()=>jn,discriminatedUnion:()=>Tn,effect:()=>$,enum:()=>An,function:()=>Ln,getErrorMap:()=>Rn,getParsedType:()=>zn,instanceof:()=>Hn,intersection:()=>qn,isAborted:()=>Xn,isAsync:()=>Zn,isDirty:()=>Qn,isValid:()=>$n,late:()=>ar,lazy:()=>sr,literal:()=>lr,makeIssue:()=>fr,map:()=>mr,nan:()=>gr,nativeEnum:()=>yr,never:()=>xr,null:()=>Cr,nullable:()=>Tr,number:()=>Or,object:()=>Ar,objectUtil:()=>jr,oboolean:()=>Mr,onumber:()=>Nr,optional:()=>Fr,ostring:()=>Ir,pipeline:()=>Vr,preprocess:()=>Wr,promise:()=>qr,quotelessJson:()=>Jr,record:()=>Zr,set:()=>ai,setErrorMap:()=>ii,strictObject:()=>si,string:()=>li,symbol:()=>mi,transformer:()=>$,tuple:()=>bi,undefined:()=>wi,union:()=>Ei,unknown:()=>Oi,util:()=>Ai,void:()=>Fi});export{};