@powerhousedao/powerhouse-vetra-packages 6.1.0-dev.2 → 6.1.0-dev.21
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/dist/browser/assets/entry-Bzani6_n.js +313 -0
- package/dist/browser/assets/projection-entry-Bpu-8SnI.js +406 -0
- package/dist/browser/{dist-DOMEWT3x.js → connect-ZnLjvmRt.js} +13013 -10302
- package/dist/browser/connect-ZnLjvmRt.js.map +1 -0
- package/dist/browser/dist-C1nRM9t2.js +3768 -0
- package/dist/browser/dist-C1nRM9t2.js.map +1 -0
- package/dist/browser/{schemas-Bqem6NRm.js → dist-CXoKspdx.js} +131 -2
- package/dist/browser/dist-CXoKspdx.js.map +1 -0
- package/dist/browser/dist-D8H48e8N.js +2692 -0
- package/dist/browser/dist-D8H48e8N.js.map +1 -0
- package/dist/browser/{dist-CC1E3l2O.js → dist-DLFI75Zd.js} +37 -9
- package/dist/browser/dist-DLFI75Zd.js.map +1 -0
- package/dist/browser/{dist-DQgJ8n4d.js → document-drive-oqv68jDU.js} +432 -290
- package/dist/browser/document-drive-oqv68jDU.js.map +1 -0
- package/dist/browser/document-models/index.js +1 -1
- package/dist/browser/{documents-Bpu0aSLb.js → documents-D4ek7Ubv.js} +3 -3
- package/dist/browser/{documents-Bpu0aSLb.js.map → documents-D4ek7Ubv.js.map} +1 -1
- package/dist/browser/{editor-B3yz7YdR.js → editor-CoTq6fqT.js} +32 -31
- package/dist/browser/editor-CoTq6fqT.js.map +1 -0
- package/dist/browser/{editor-Dm_73jiz.js → editor-DC3bigBu.js} +5 -5
- package/dist/browser/{editor-Dm_73jiz.js.map → editor-DC3bigBu.js.map} +1 -1
- package/dist/browser/editors/document-model-editor/module.js +1 -1
- package/dist/browser/editors/generic-drive-explorer/index.js +6 -6
- package/dist/browser/editors/generic-drive-explorer/index.js.map +1 -1
- package/dist/browser/editors/generic-drive-explorer/module.js +1 -1
- package/dist/browser/{folder-view-H2ov-zId.js → folder-view-DmYBf2pP.js} +13 -12
- package/dist/browser/folder-view-DmYBf2pP.js.map +1 -0
- package/dist/browser/{graphql-editor-CnaQ3XWx.js → graphql-editor-CiGd_Li7.js} +15 -7
- package/dist/browser/{graphql-editor-CnaQ3XWx.js.map → graphql-editor-CiGd_Li7.js.map} +1 -1
- package/dist/{node/hooks-Lbsf6g-v.mjs → browser/hooks-CORHBNHb.js} +6 -4
- package/dist/browser/{hooks-Beny0xpe.js.map → hooks-CORHBNHb.js.map} +1 -1
- package/dist/browser/index.js +2 -2
- package/dist/{node/json-editor-CVGgDVh2.mjs → browser/json-editor-sEqd5piI.js} +12 -4
- package/dist/browser/json-editor-sEqd5piI.js.map +1 -0
- package/dist/browser/{style-DYS_RFSN.js → linting-Dn6pXRkK.js} +7 -14
- package/dist/browser/linting-Dn6pXRkK.js.map +1 -0
- package/dist/browser/{parser-B0sh99Kk.js → parser-CkF6Qt8V.js} +1 -1
- package/dist/browser/{parser-B0sh99Kk.js.map → parser-CkF6Qt8V.js.map} +1 -1
- package/dist/browser/{schema-context-C0GpuR27.js → schema-context-DY-GEGnY.js} +4 -4
- package/dist/browser/schema-context-DY-GEGnY.js.map +1 -0
- package/dist/browser/state-schemas-DJmzG_M8.js +308 -0
- package/dist/browser/state-schemas-DJmzG_M8.js.map +1 -0
- package/dist/node/{dist-1kPMPFPD.mjs → connect-BLC4PXD9.mjs} +13953 -11229
- package/dist/node/connect-BLC4PXD9.mjs.map +1 -0
- package/dist/node/dist-BeZaEP6S.mjs +2692 -0
- package/dist/node/dist-BeZaEP6S.mjs.map +1 -0
- package/dist/node/dist-Bm05eoTg.mjs +3769 -0
- package/dist/node/dist-Bm05eoTg.mjs.map +1 -0
- package/dist/node/{tslib.es6-DwVpIYUS.mjs → dist-Cn3iExnV.mjs} +489 -3
- package/dist/node/dist-Cn3iExnV.mjs.map +1 -0
- package/dist/node/{schemas-Cb8uEF9u.mjs → dist-fA4EItr0.mjs} +131 -2
- package/dist/node/dist-fA4EItr0.mjs.map +1 -0
- package/dist/node/{dist-Bz4SgEHs.mjs → document-drive-sM33juXr.mjs} +432 -290
- package/dist/node/document-drive-sM33juXr.mjs.map +1 -0
- package/dist/node/document-models/index.mjs +1 -1
- package/dist/node/{documents-BWJpUm9f.mjs → documents-BFBPmyw1.mjs} +3 -3
- package/dist/node/{documents-BWJpUm9f.mjs.map → documents-BFBPmyw1.mjs.map} +1 -1
- package/dist/node/{editor-W8QOlGXD.mjs → editor-BFBa9nsO.mjs} +32 -31
- package/dist/node/editor-BFBa9nsO.mjs.map +1 -0
- package/dist/node/{editor-BaXuDsby.mjs → editor-BrS98lEH.mjs} +5 -5
- package/dist/node/{editor-BaXuDsby.mjs.map → editor-BrS98lEH.mjs.map} +1 -1
- package/dist/node/editors/document-model-editor/module.mjs +1 -1
- package/dist/node/editors/generic-drive-explorer/index.mjs +6 -6
- package/dist/node/editors/generic-drive-explorer/index.mjs.map +1 -1
- package/dist/node/editors/generic-drive-explorer/module.mjs +1 -1
- package/dist/node/{folder-view-B0FNXbc0.mjs → folder-view-DHph3Yuu.mjs} +13 -12
- package/dist/node/folder-view-DHph3Yuu.mjs.map +1 -0
- package/dist/node/{graphql-Du2phcBf.mjs → graphql-DskHmkMe.mjs} +2 -2
- package/dist/node/{graphql-Du2phcBf.mjs.map → graphql-DskHmkMe.mjs.map} +1 -1
- package/dist/node/{graphql-editor-D1koK5kR.mjs → graphql-editor-CPq7oIbf.mjs} +14 -6
- package/dist/node/{graphql-editor-D1koK5kR.mjs.map → graphql-editor-CPq7oIbf.mjs.map} +1 -1
- package/dist/{browser/hooks-Beny0xpe.js → node/hooks-DJrjfVaS.mjs} +6 -4
- package/dist/node/{hooks-Lbsf6g-v.mjs.map → hooks-DJrjfVaS.mjs.map} +1 -1
- package/dist/node/index.mjs +2 -2
- package/dist/{browser/json-editor-h3cffF6X.js → node/json-editor-L32CP7TS.mjs} +12 -4
- package/dist/node/json-editor-L32CP7TS.mjs.map +1 -0
- package/dist/node/{style-CxHkfyna.mjs → linting-Dx50GuLN.mjs} +7 -14
- package/dist/node/linting-Dx50GuLN.mjs.map +1 -0
- package/dist/node/{schema-context-mLgEY1Hh.mjs → schema-context-CX5ml_9t.mjs} +4 -4
- package/dist/node/schema-context-CX5ml_9t.mjs.map +1 -0
- package/dist/node/state-schemas-XTTjQZOe.mjs +309 -0
- package/dist/node/state-schemas-XTTjQZOe.mjs.map +1 -0
- package/package.json +10 -10
- package/style.css +1 -0
- package/dist/browser/connect-CKdlDSUw.js +0 -9460
- package/dist/browser/connect-CKdlDSUw.js.map +0 -1
- package/dist/browser/dist-BXygvBtd.js +0 -132
- package/dist/browser/dist-BXygvBtd.js.map +0 -1
- package/dist/browser/dist-CC1E3l2O.js.map +0 -1
- package/dist/browser/dist-DOMEWT3x.js.map +0 -1
- package/dist/browser/dist-DQgJ8n4d.js.map +0 -1
- package/dist/browser/editor-B3yz7YdR.js.map +0 -1
- package/dist/browser/folder-view-H2ov-zId.js.map +0 -1
- package/dist/browser/json-editor-h3cffF6X.js.map +0 -1
- package/dist/browser/schema-context-C0GpuR27.js.map +0 -1
- package/dist/browser/schemas-Bqem6NRm.js.map +0 -1
- package/dist/browser/state-schemas-C5NPeV6-.js +0 -674
- package/dist/browser/state-schemas-C5NPeV6-.js.map +0 -1
- package/dist/browser/style-DYS_RFSN.js.map +0 -1
- package/dist/browser/tslib.es6-DRuVAsR8.js +0 -32
- package/dist/browser/tslib.es6-DRuVAsR8.js.map +0 -1
- package/dist/node/connect-SGvLzr5K.mjs +0 -9475
- package/dist/node/connect-SGvLzr5K.mjs.map +0 -1
- package/dist/node/dist-1kPMPFPD.mjs.map +0 -1
- package/dist/node/dist-BQTIepWC.mjs +0 -132
- package/dist/node/dist-BQTIepWC.mjs.map +0 -1
- package/dist/node/dist-Bz4SgEHs.mjs.map +0 -1
- package/dist/node/dist-Cay1iRRr.mjs +0 -491
- package/dist/node/dist-Cay1iRRr.mjs.map +0 -1
- package/dist/node/editor-W8QOlGXD.mjs.map +0 -1
- package/dist/node/folder-view-B0FNXbc0.mjs.map +0 -1
- package/dist/node/json-editor-CVGgDVh2.mjs.map +0 -1
- package/dist/node/schema-context-mLgEY1Hh.mjs.map +0 -1
- package/dist/node/schemas-Cb8uEF9u.mjs.map +0 -1
- package/dist/node/state-schemas-DAthoEEk.mjs +0 -675
- package/dist/node/state-schemas-DAthoEEk.mjs.map +0 -1
- package/dist/node/style-CxHkfyna.mjs.map +0 -1
- package/dist/node/tslib.es6-DwVpIYUS.mjs.map +0 -1
- package/dist/style.css +0 -906
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as Kind, t as parse } from "./parser-
|
|
2
|
-
import { n as initialSchemaStr, o as printSchema, r as typeDefsDoc, s as buildASTSchema, t as hiddenQueryTypeDefDoc } from "./documents-
|
|
1
|
+
import { c as Kind, t as parse } from "./parser-CkF6Qt8V.js";
|
|
2
|
+
import { n as initialSchemaStr, o as printSchema, r as typeDefsDoc, s as buildASTSchema, t as hiddenQueryTypeDefDoc } from "./documents-D4ek7Ubv.js";
|
|
3
3
|
import { createContext, useContext, useMemo } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region editors/document-model-editor/context/schema-context.tsx
|
|
@@ -27,7 +27,7 @@ function safeParseSdl(sdl) {
|
|
|
27
27
|
try {
|
|
28
28
|
if (!sdl) return null;
|
|
29
29
|
return parse(sdl);
|
|
30
|
-
} catch (
|
|
30
|
+
} catch (_error) {
|
|
31
31
|
return null;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -66,4 +66,4 @@ function useSchemaContext() {
|
|
|
66
66
|
//#endregion
|
|
67
67
|
export { safeParseSdl as n, useSchemaContext as r, SchemaContextProvider as t };
|
|
68
68
|
|
|
69
|
-
//# sourceMappingURL=schema-context-
|
|
69
|
+
//# sourceMappingURL=schema-context-DY-GEGnY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-context-DY-GEGnY.js","names":[],"sources":["../../editors/document-model-editor/context/schema-context.tsx"],"sourcesContent":["import type { DefinitionNode, DocumentNode } from \"graphql\";\nimport { buildASTSchema, Kind, parse, printSchema } from \"graphql\";\nimport { createContext, useContext, useMemo } from \"react\";\nimport {\n hiddenQueryTypeDefDoc,\n initialSchemaStr,\n typeDefsDoc,\n} from \"../constants/documents.js\";\n\n/* Required to make the schema \"count\" as an actual schema */\nconst hiddenQueryTypeDefinitions =\n safeParseSdl(hiddenQueryTypeDefDoc)?.definitions ?? [];\n/* Scalar definitions from the Powerhouse standard library */\nconst standardLibCustomScalarDefinitions =\n safeParseSdl(typeDefsDoc)?.definitions ?? [];\n/* These are always included when building the shared schema, because they do not change */\nconst alwaysIncludedDefinitions: DefinitionNode[] = [\n ...hiddenQueryTypeDefinitions,\n ...standardLibCustomScalarDefinitions,\n];\n\n/* The shared schema is just a string to make memoization easier */\ntype TSchemaContext = {\n sharedSchema: string;\n error: Error | undefined;\n};\n\ntype TSchemaContextProps = {\n globalStateSchemaSdl: string;\n localStateSchemaSdl: string;\n operationSchemasSdl: string;\n children: React.ReactNode;\n};\n\n/*\n Combines the always-included definitions and all user SDLs into a single\n DocumentNode and builds a schema in one shot. Building atomically lets\n buildASTSchema resolve forward references between user types within the same\n document, and avoids the accumulation/staleness that a per-definition\n validate-then-merge strategy would introduce. Throws if the combined SDL is\n invalid; callers are expected to catch.\n*/\nfunction makeSharedSchemaSdl(\n globalStateSchemaSdl?: string,\n localStateSchemaSdl?: string,\n operationSchemasSdl?: string,\n): string {\n const definitions: DefinitionNode[] = [...alwaysIncludedDefinitions];\n\n for (const sdl of [\n globalStateSchemaSdl,\n localStateSchemaSdl,\n operationSchemasSdl,\n ]) {\n if (!sdl) continue;\n const ast = safeParseSdl(sdl);\n if (!ast) continue;\n definitions.push(...ast.definitions);\n }\n\n const documentNode: DocumentNode = {\n kind: Kind.DOCUMENT,\n definitions,\n };\n\n return printSchema(buildASTSchema(documentNode));\n}\n\n/*\n Parses an SDL string into an ast.\n Uses try catch and checks if the SDL is a valid document string to prevent errors from breaking the editor.\n*/\nexport function safeParseSdl(sdl: string) {\n try {\n if (!sdl) return null;\n return parse(sdl);\n } catch (_error) {\n return null;\n }\n}\n\nexport const SchemaContext = createContext<TSchemaContext>({\n sharedSchema: initialSchemaStr,\n error: undefined,\n});\n\nexport function parseSharedSchemaSdl(\n globalStateSchemaSdl?: string,\n localStateSchemaSdl?: string,\n operationSchemasSdl?: string,\n): TSchemaContext {\n try {\n return {\n sharedSchema: makeSharedSchemaSdl(\n globalStateSchemaSdl,\n localStateSchemaSdl,\n operationSchemasSdl,\n ),\n error: undefined,\n };\n } catch (error) {\n // Combined SDL is invalid (duplicate type, unknown reference, parse error, etc.).\n // Fall back to the minimal base schema so the JSON initial-value validator\n // gracefully finds no state type and skips, instead of producing a misleading\n // \"Field value has an invalid value.\" The real reason is surfaced via `error`.\n return {\n sharedSchema: initialSchemaStr,\n error:\n error instanceof Error\n ? error\n : new Error(\n typeof error === \"string\" ? error : JSON.stringify(error),\n { cause: error },\n ),\n };\n }\n}\n\n/*\n Provides the shared schema to the editor.\n We use the sdl string form to make memoization easier.\n*/\nexport function SchemaContextProvider(props: TSchemaContextProps) {\n const {\n children,\n globalStateSchemaSdl,\n localStateSchemaSdl,\n operationSchemasSdl,\n } = props;\n\n const sharedSchemaSdl = useMemo(\n () =>\n parseSharedSchemaSdl(\n globalStateSchemaSdl,\n localStateSchemaSdl,\n operationSchemasSdl,\n ),\n [globalStateSchemaSdl, localStateSchemaSdl, operationSchemasSdl],\n );\n\n return (\n <SchemaContext.Provider value={sharedSchemaSdl}>\n {children}\n </SchemaContext.Provider>\n );\n}\n\nexport function useSchemaContext() {\n return useContext(SchemaContext);\n}\n"],"mappings":";;;;;AAUA,MAAM,6BACJ,aAAa,sBAAsB,EAAE,eAAe,EAAE;AAExD,MAAM,qCACJ,aAAa,YAAY,EAAE,eAAe,EAAE;AAE9C,MAAM,4BAA8C,CAClD,GAAG,4BACH,GAAG,mCACJ;AAuBD,SAAS,oBACP,sBACA,qBACA,qBACQ;CACR,MAAM,cAAgC,CAAC,GAAG,0BAA0B;AAEpE,MAAK,MAAM,OAAO;EAChB;EACA;EACA;EACD,EAAE;AACD,MAAI,CAAC,IAAK;EACV,MAAM,MAAM,aAAa,IAAI;AAC7B,MAAI,CAAC,IAAK;AACV,cAAY,KAAK,GAAG,IAAI,YAAY;;AAQtC,QAAO,YAAY,eALgB;EACjC,MAAM,KAAK;EACX;EACD,CAE8C,CAAC;;AAOlD,SAAgB,aAAa,KAAa;AACxC,KAAI;AACF,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,MAAM,IAAI;UACV,QAAQ;AACf,SAAO;;;AAIX,MAAa,gBAAgB,cAA8B;CACzD,cAAc;CACd,OAAO,KAAA;CACR,CAAC;AAEF,SAAgB,qBACd,sBACA,qBACA,qBACgB;AAChB,KAAI;AACF,SAAO;GACL,cAAc,oBACZ,sBACA,qBACA,oBACD;GACD,OAAO,KAAA;GACR;UACM,OAAO;AAKd,SAAO;GACL,cAAc;GACd,OACE,iBAAiB,QACb,QACA,IAAI,MACF,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,MAAM,EACzD,EAAE,OAAO,OAAO,CACjB;GACR;;;AAQL,SAAgB,sBAAsB,OAA4B;CAChE,MAAM,EACJ,UACA,sBACA,qBACA,wBACE;CAEJ,MAAM,kBAAkB,cAEpB,qBACE,sBACA,qBACA,oBACD,EACH;EAAC;EAAsB;EAAqB;EAAoB,CACjE;AAED,QACE,oBAAC,cAAc,UAAf;EAAwB,OAAO;EAC5B;EACsB,CAAA;;AAI7B,SAAgB,mBAAmB;AACjC,QAAO,WAAW,cAAc"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { c as Kind } from "./parser-CkF6Qt8V.js";
|
|
2
|
+
import { r as typeDefsDoc } from "./documents-D4ek7Ubv.js";
|
|
3
|
+
import { f as makeStateSchemaNameForScope, l as makeInitialSchemaDoc, m as validateStateObject, n as ensureValidStateSchemaName, r as StateValidationError, u as makeMinimalObjectForStateType } from "./linting-Dn6pXRkK.js";
|
|
4
|
+
import { C as twMerge, i as Trigger, n as List, r as Root2, t as Content } from "./dist-D8H48e8N.js";
|
|
5
|
+
import { n as safeParseSdl, r as useSchemaContext } from "./schema-context-DY-GEGnY.js";
|
|
6
|
+
import * as React$1 from "react";
|
|
7
|
+
import { Suspense, forwardRef, lazy, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
8
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region editors/document-model-editor/components/button.tsx
|
|
10
|
+
const Button = forwardRef((props, ref) => {
|
|
11
|
+
const { className, ...rest } = props;
|
|
12
|
+
return /* @__PURE__ */ jsx("button", {
|
|
13
|
+
ref,
|
|
14
|
+
...rest,
|
|
15
|
+
className: twMerge("h-10 rounded-md border border-gray-200 bg-gray-50 px-4 py-2 text-sm font-medium whitespace-nowrap text-gray-900 transition-colors hover:bg-gray-100 hover:text-gray-900 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 dark:border-slate-500 dark:bg-slate-600 dark:text-slate-100 dark:hover:bg-slate-700 dark:hover:text-slate-50", className)
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region editors/document-model-editor/components/state-error.tsx
|
|
20
|
+
function StateValidationErrorMessage({ error }) {
|
|
21
|
+
const { payload } = error;
|
|
22
|
+
switch (payload.kind) {
|
|
23
|
+
case "MISSING": return /* @__PURE__ */ jsxs("span", { children: [
|
|
24
|
+
"Field ",
|
|
25
|
+
/* @__PURE__ */ jsx("strong", { children: payload.field }),
|
|
26
|
+
" is missing."
|
|
27
|
+
] });
|
|
28
|
+
case "MISSING_OPTIONAL": return /* @__PURE__ */ jsxs("span", { children: [
|
|
29
|
+
"Optional field ",
|
|
30
|
+
/* @__PURE__ */ jsx("strong", { children: payload.field }),
|
|
31
|
+
" is not defined."
|
|
32
|
+
] });
|
|
33
|
+
case "UNKNOWN_FIELD": return /* @__PURE__ */ jsxs("span", { children: [
|
|
34
|
+
"Field ",
|
|
35
|
+
/* @__PURE__ */ jsx("strong", { children: payload.field }),
|
|
36
|
+
" is not a known field."
|
|
37
|
+
] });
|
|
38
|
+
case "NON_NULL": return /* @__PURE__ */ jsxs("span", { children: [
|
|
39
|
+
"Field ",
|
|
40
|
+
/* @__PURE__ */ jsx("strong", { children: payload.field }),
|
|
41
|
+
" cannot be null."
|
|
42
|
+
] });
|
|
43
|
+
case "TYPE": return /* @__PURE__ */ jsxs("span", { children: [
|
|
44
|
+
"Field ",
|
|
45
|
+
/* @__PURE__ */ jsx("strong", { children: payload.field }),
|
|
46
|
+
payload.expectedType ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
47
|
+
" ",
|
|
48
|
+
"must be a",
|
|
49
|
+
" ",
|
|
50
|
+
/* @__PURE__ */ jsx("strong", { children: payload.expectedType.replace(/!/g, "") }),
|
|
51
|
+
"."
|
|
52
|
+
] }) : /* @__PURE__ */ jsx(Fragment$1, { children: " has an invalid value." })
|
|
53
|
+
] });
|
|
54
|
+
case "RECURSIVE_TYPE": return /* @__PURE__ */ jsxs("span", { children: [
|
|
55
|
+
"Field ",
|
|
56
|
+
/* @__PURE__ */ jsx("strong", { children: payload.typeName }),
|
|
57
|
+
" has a recursive type. It must be optional."
|
|
58
|
+
] });
|
|
59
|
+
default: return /* @__PURE__ */ jsx("span", { children: "Invalid value." });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region editors/document-model-editor/components/tabs.tsx
|
|
64
|
+
const Tabs = Root2;
|
|
65
|
+
const TabsList = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(List, {
|
|
66
|
+
ref,
|
|
67
|
+
className: twMerge("flex items-center justify-center rounded-xl bg-gray-50 p-1 shadow-inner dark:bg-slate-800", className),
|
|
68
|
+
...props
|
|
69
|
+
}));
|
|
70
|
+
TabsList.displayName = List.displayName;
|
|
71
|
+
const TabsTrigger = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Trigger, {
|
|
72
|
+
ref,
|
|
73
|
+
className: twMerge("flex w-full items-center justify-center rounded-lg p-1 text-sm whitespace-nowrap text-gray-500 transition-all disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-gray-50 data-[state=active]:text-gray-800 data-[state=active]:shadow-tab dark:text-slate-400", className),
|
|
74
|
+
...props
|
|
75
|
+
}));
|
|
76
|
+
TabsTrigger.displayName = Trigger.displayName;
|
|
77
|
+
const TabsContent = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Content, {
|
|
78
|
+
ref,
|
|
79
|
+
className,
|
|
80
|
+
...props
|
|
81
|
+
}));
|
|
82
|
+
TabsContent.displayName = Content.displayName;
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region editors/document-model-editor/components/state-schemas.tsx
|
|
85
|
+
const GraphqlEditor = lazy(() => import("./graphql-editor-CiGd_Li7.js"));
|
|
86
|
+
const JSONEditor = lazy(() => import("./json-editor-sEqd5piI.js"));
|
|
87
|
+
function StateEditor({ modelName, stateSchema, initialValue, setStateSchema, setInitialState, scope }) {
|
|
88
|
+
const { sharedSchema: sharedSchemaSdl, error: sharedSchemaError } = useSchemaContext();
|
|
89
|
+
const [showStandardLib, setShowStandardLib] = useState(false);
|
|
90
|
+
const [syncWithSchema, setSyncWithSchema] = useState(true);
|
|
91
|
+
const customLinter = useCallback((doc) => ensureValidStateSchemaName(doc, modelName, scope), [modelName, scope]);
|
|
92
|
+
const schemaErrors = useMemo(() => {
|
|
93
|
+
const errors = ensureValidStateSchemaName(stateSchema, modelName, scope);
|
|
94
|
+
if (sharedSchemaError) return [...errors, sharedSchemaError];
|
|
95
|
+
return errors;
|
|
96
|
+
}, [
|
|
97
|
+
stateSchema,
|
|
98
|
+
modelName,
|
|
99
|
+
scope,
|
|
100
|
+
sharedSchemaError
|
|
101
|
+
]);
|
|
102
|
+
const handleToggleStandardLib = useCallback(() => {
|
|
103
|
+
setShowStandardLib((prev) => !prev);
|
|
104
|
+
}, []);
|
|
105
|
+
const handleSchemaUpdate = useCallback((newDoc) => setStateSchema(newDoc, scope), [setStateSchema, scope]);
|
|
106
|
+
const handleInitialStateUpdate = useCallback((newDoc) => setInitialState(newDoc, scope), [setInitialState, scope]);
|
|
107
|
+
const hasSyncedRef = useRef(false);
|
|
108
|
+
const { initialValueErrors, fixedState } = useMemo(() => {
|
|
109
|
+
const existingValue = initialValue || "{}";
|
|
110
|
+
const sharedSchemaDocumentNode = safeParseSdl(sharedSchemaSdl);
|
|
111
|
+
if (!sharedSchemaDocumentNode) return {
|
|
112
|
+
initialValueErrors: [],
|
|
113
|
+
fixedState: null
|
|
114
|
+
};
|
|
115
|
+
const stateTypeName = makeStateSchemaNameForScope(modelName, scope);
|
|
116
|
+
if (!stateTypeName) return {
|
|
117
|
+
initialValueErrors: [],
|
|
118
|
+
fixedState: null
|
|
119
|
+
};
|
|
120
|
+
const stateTypeDefinitionNode = sharedSchemaDocumentNode.definitions.find((def) => def.kind === Kind.OBJECT_TYPE_DEFINITION && def.name.value === stateTypeName);
|
|
121
|
+
if (!stateTypeDefinitionNode || stateTypeDefinitionNode.kind !== Kind.OBJECT_TYPE_DEFINITION) return {
|
|
122
|
+
initialValueErrors: [],
|
|
123
|
+
fixedState: null
|
|
124
|
+
};
|
|
125
|
+
const errors = validateStateObject(sharedSchemaDocumentNode, stateTypeDefinitionNode, existingValue);
|
|
126
|
+
if (errors.length && syncWithSchema) {
|
|
127
|
+
const computedFixedState = makeMinimalObjectForStateType({
|
|
128
|
+
sharedSchemaDocumentNode,
|
|
129
|
+
stateTypeDefinitionNode,
|
|
130
|
+
existingValue
|
|
131
|
+
});
|
|
132
|
+
if (initialValue !== computedFixedState) return {
|
|
133
|
+
initialValueErrors: [],
|
|
134
|
+
fixedState: computedFixedState
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
initialValueErrors: errors,
|
|
139
|
+
fixedState: null
|
|
140
|
+
};
|
|
141
|
+
}, [
|
|
142
|
+
sharedSchemaSdl,
|
|
143
|
+
initialValue,
|
|
144
|
+
syncWithSchema,
|
|
145
|
+
scope,
|
|
146
|
+
modelName
|
|
147
|
+
]);
|
|
148
|
+
useEffect(() => {
|
|
149
|
+
if (fixedState && !hasSyncedRef.current) {
|
|
150
|
+
hasSyncedRef.current = true;
|
|
151
|
+
setInitialState(fixedState, scope);
|
|
152
|
+
} else if (!fixedState) hasSyncedRef.current = false;
|
|
153
|
+
}, [
|
|
154
|
+
fixedState,
|
|
155
|
+
setInitialState,
|
|
156
|
+
scope
|
|
157
|
+
]);
|
|
158
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
159
|
+
className: "grid grid-cols-2 gap-4",
|
|
160
|
+
children: [/* @__PURE__ */ jsxs("div", { children: [
|
|
161
|
+
/* @__PURE__ */ jsxs("h3", {
|
|
162
|
+
className: "mb-2 text-lg text-gray-900 capitalize dark:text-slate-100",
|
|
163
|
+
children: [scope, " state schema *"]
|
|
164
|
+
}),
|
|
165
|
+
/* @__PURE__ */ jsxs(Button, {
|
|
166
|
+
onClick: handleToggleStandardLib,
|
|
167
|
+
className: "mb-2 flex w-fit items-center gap-2",
|
|
168
|
+
children: [
|
|
169
|
+
showStandardLib ? "Hide" : "Show",
|
|
170
|
+
" standard library",
|
|
171
|
+
/* @__PURE__ */ jsx("svg", {
|
|
172
|
+
className: twMerge("inline-block transition-transform", showStandardLib ? "rotate-180" : "rotate-0"),
|
|
173
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
174
|
+
width: "24",
|
|
175
|
+
height: "24",
|
|
176
|
+
viewBox: "0 0 24 24",
|
|
177
|
+
fill: "currentColor",
|
|
178
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
179
|
+
d: "M11.9883 6.01172C11.4363 6.01172 10.9883 6.45972 10.9883 7.01172V13.0117H6.98828L11.9883 18.0117L16.9883 13.0117H12.9883V7.01172C12.9883 6.45972 12.5403 6.01172 11.9883 6.01172Z",
|
|
180
|
+
fill: "currentColor"
|
|
181
|
+
})
|
|
182
|
+
})
|
|
183
|
+
]
|
|
184
|
+
}),
|
|
185
|
+
/* @__PURE__ */ jsxs(Suspense, { children: [
|
|
186
|
+
showStandardLib && /* @__PURE__ */ jsx(GraphqlEditor, {
|
|
187
|
+
doc: typeDefsDoc,
|
|
188
|
+
readonly: true
|
|
189
|
+
}),
|
|
190
|
+
/* @__PURE__ */ jsx(GraphqlEditor, {
|
|
191
|
+
doc: stateSchema,
|
|
192
|
+
updateDocumentInModel: handleSchemaUpdate,
|
|
193
|
+
customLinter
|
|
194
|
+
}),
|
|
195
|
+
schemaErrors.length > 0 && /* @__PURE__ */ jsx("p", {
|
|
196
|
+
className: "mt-2 text-sm text-red-600 dark:text-red-100",
|
|
197
|
+
children: schemaErrors[0].message
|
|
198
|
+
})
|
|
199
|
+
] })
|
|
200
|
+
] }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
|
|
201
|
+
className: "flex flex-col items-end",
|
|
202
|
+
children: [/* @__PURE__ */ jsxs("h3", {
|
|
203
|
+
className: "mb-2 text-right text-lg text-gray-900 capitalize dark:text-slate-100",
|
|
204
|
+
children: [scope, " state initial value *"]
|
|
205
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
206
|
+
className: "mb-2 flex w-fit items-center gap-2 rounded-md border border-gray-200 bg-gray-50 p-2 text-sm font-medium whitespace-nowrap text-gray-900 transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none dark:border-slate-500 dark:bg-slate-600 dark:text-slate-100 dark:hover:bg-slate-500 dark:hover:text-slate-50",
|
|
207
|
+
children: [
|
|
208
|
+
/* @__PURE__ */ jsx("input", {
|
|
209
|
+
type: "checkbox",
|
|
210
|
+
className: "",
|
|
211
|
+
value: syncWithSchema.toString(),
|
|
212
|
+
onChange: (e) => {
|
|
213
|
+
setSyncWithSchema(e.currentTarget.value === "true" ? true : false);
|
|
214
|
+
}
|
|
215
|
+
}),
|
|
216
|
+
"Sync with schema",
|
|
217
|
+
" ",
|
|
218
|
+
/* @__PURE__ */ jsx("svg", {
|
|
219
|
+
className: "inline-block",
|
|
220
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
221
|
+
width: "16",
|
|
222
|
+
height: "16",
|
|
223
|
+
viewBox: "0 0 16 16",
|
|
224
|
+
fill: "none",
|
|
225
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
226
|
+
d: "M8.00521 1.99219C6.63588 1.99219 5.32788 2.45152 4.27588 3.28419C3.98721 3.51219 3.94321 3.93285 4.17188 4.22151C4.40054 4.51018 4.82055 4.55418 5.10921 4.32552C5.92721 3.67819 6.93921 3.32552 8.00521 3.32552C10.5825 3.32552 12.6719 5.41485 12.6719 7.99218H11.3385L13.3385 10.6588L15.3385 7.99218H14.0052C14.0052 4.67818 11.3192 1.99219 8.00521 1.99219ZM2.67188 5.32552L0.671875 7.99218H2.00521C2.00521 11.3062 4.69121 13.9922 8.00521 13.9922C9.37521 13.9922 10.6825 13.5335 11.7345 12.7002C12.0232 12.4722 12.0672 12.0515 11.8385 11.7628C11.6099 11.4742 11.1899 11.4302 10.9012 11.6588C10.0825 12.3068 9.07188 12.6588 8.00521 12.6588C5.42788 12.6588 3.33854 10.5695 3.33854 7.99218H4.67188L2.67188 5.32552Z",
|
|
227
|
+
fill: "currentColor"
|
|
228
|
+
})
|
|
229
|
+
})
|
|
230
|
+
]
|
|
231
|
+
})]
|
|
232
|
+
}), /* @__PURE__ */ jsxs(Suspense, { children: [/* @__PURE__ */ jsx(JSONEditor, {
|
|
233
|
+
doc: initialValue,
|
|
234
|
+
updateDocumentInModel: handleInitialStateUpdate
|
|
235
|
+
}), initialValueErrors.map((error, index) => /* @__PURE__ */ jsx("p", {
|
|
236
|
+
className: "mt-2 text-sm text-red-600 dark:text-red-100",
|
|
237
|
+
children: error instanceof StateValidationError ? /* @__PURE__ */ jsx(StateValidationErrorMessage, { error }) : error.message
|
|
238
|
+
}, index))] })] })]
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function StateSchemas({ modelName, globalStateSchema, localStateSchema, globalStateInitialValue, localStateInitialValue, setStateSchema, setInitialState, currentScope, onScopeChange }) {
|
|
242
|
+
const handleAddLocalState = useCallback(() => {
|
|
243
|
+
setStateSchema(makeInitialSchemaDoc(modelName, "local"), "local");
|
|
244
|
+
setInitialState("", "local");
|
|
245
|
+
}, [
|
|
246
|
+
modelName,
|
|
247
|
+
setStateSchema,
|
|
248
|
+
setInitialState
|
|
249
|
+
]);
|
|
250
|
+
return /* @__PURE__ */ jsxs(Tabs, {
|
|
251
|
+
className: "pb-8",
|
|
252
|
+
activationMode: "manual",
|
|
253
|
+
value: currentScope,
|
|
254
|
+
onValueChange: (value) => onScopeChange(value),
|
|
255
|
+
children: [
|
|
256
|
+
/* @__PURE__ */ jsx("div", {
|
|
257
|
+
className: "my-6",
|
|
258
|
+
children: /* @__PURE__ */ jsxs(TabsList, {
|
|
259
|
+
className: "mx-auto flex max-w-sm",
|
|
260
|
+
children: [/* @__PURE__ */ jsx(TabsTrigger, {
|
|
261
|
+
value: "global",
|
|
262
|
+
children: "Global"
|
|
263
|
+
}), /* @__PURE__ */ jsx(TabsTrigger, {
|
|
264
|
+
value: "local",
|
|
265
|
+
children: "Local"
|
|
266
|
+
})]
|
|
267
|
+
})
|
|
268
|
+
}),
|
|
269
|
+
/* @__PURE__ */ jsx(TabsContent, {
|
|
270
|
+
value: "global",
|
|
271
|
+
tabIndex: -1,
|
|
272
|
+
children: /* @__PURE__ */ jsx(StateEditor, {
|
|
273
|
+
modelName,
|
|
274
|
+
stateSchema: globalStateSchema,
|
|
275
|
+
initialValue: globalStateInitialValue,
|
|
276
|
+
setStateSchema,
|
|
277
|
+
setInitialState,
|
|
278
|
+
scope: "global"
|
|
279
|
+
})
|
|
280
|
+
}),
|
|
281
|
+
/* @__PURE__ */ jsx(TabsContent, {
|
|
282
|
+
value: "local",
|
|
283
|
+
tabIndex: -1,
|
|
284
|
+
children: !localStateSchema ? /* @__PURE__ */ jsxs("div", {
|
|
285
|
+
className: "",
|
|
286
|
+
children: [/* @__PURE__ */ jsx("h3", {
|
|
287
|
+
className: "mb-2 text-lg text-gray-900 capitalize dark:text-slate-100",
|
|
288
|
+
children: "local state schema *"
|
|
289
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
290
|
+
onClick: handleAddLocalState,
|
|
291
|
+
children: "Add local state"
|
|
292
|
+
})]
|
|
293
|
+
}) : /* @__PURE__ */ jsx(StateEditor, {
|
|
294
|
+
modelName,
|
|
295
|
+
stateSchema: localStateSchema,
|
|
296
|
+
initialValue: localStateInitialValue,
|
|
297
|
+
setStateSchema,
|
|
298
|
+
setInitialState,
|
|
299
|
+
scope: "local"
|
|
300
|
+
})
|
|
301
|
+
})
|
|
302
|
+
]
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
//#endregion
|
|
306
|
+
export { StateSchemas as default };
|
|
307
|
+
|
|
308
|
+
//# sourceMappingURL=state-schemas-DJmzG_M8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-schemas-DJmzG_M8.js","names":["TabsPrimitive.Root","React","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content"],"sources":["../../editors/document-model-editor/components/button.tsx","../../editors/document-model-editor/components/state-error.tsx","../../editors/document-model-editor/components/tabs.tsx","../../editors/document-model-editor/components/state-schemas.tsx"],"sourcesContent":["import type { ComponentPropsWithRef } from \"react\";\nimport { forwardRef } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\ntype Props = ComponentPropsWithRef<\"button\">;\n\nexport const Button = forwardRef<HTMLButtonElement, Props>((props, ref) => {\n const { className, ...rest } = props;\n return (\n <button\n ref={ref}\n {...rest}\n className={twMerge(\n \"h-10 rounded-md border border-gray-200 bg-gray-50 px-4 py-2 text-sm font-medium whitespace-nowrap text-gray-900 transition-colors hover:bg-gray-100 hover:text-gray-900 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 dark:border-slate-500 dark:bg-slate-600 dark:text-slate-100 dark:hover:bg-slate-700 dark:hover:text-slate-50\",\n className,\n )}\n />\n );\n});\n","import type { StateValidationError } from \"../utils/helpers.js\";\n\nexport function StateValidationErrorMessage({\n error,\n}: {\n error: StateValidationError;\n}) {\n const { payload } = error;\n\n switch (payload.kind) {\n case \"MISSING\":\n return (\n <span>\n Field <strong>{payload.field}</strong> is missing.\n </span>\n );\n\n case \"MISSING_OPTIONAL\":\n return (\n <span>\n Optional field <strong>{payload.field}</strong> is not defined.\n </span>\n );\n\n case \"UNKNOWN_FIELD\":\n return (\n <span>\n Field <strong>{payload.field}</strong> is not a known field.\n </span>\n );\n\n case \"NON_NULL\":\n return (\n <span>\n Field <strong>{payload.field}</strong> cannot be null.\n </span>\n );\n\n case \"TYPE\":\n return (\n <span>\n Field <strong>{payload.field}</strong>\n {payload.expectedType ? (\n <>\n {\" \"}\n must be a{\" \"}\n <strong>{payload.expectedType.replace(/!/g, \"\")}</strong>.\n </>\n ) : (\n <> has an invalid value.</>\n )}\n </span>\n );\n\n case \"RECURSIVE_TYPE\":\n return (\n <span>\n Field <strong>{payload.typeName}</strong> has a recursive type. It\n must be optional.\n </span>\n );\n\n default:\n return <span>Invalid value.</span>;\n }\n}\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport * as React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={twMerge(\n \"flex items-center justify-center rounded-xl bg-gray-50 p-1 shadow-inner dark:bg-slate-800\",\n className,\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={twMerge(\n \"flex w-full items-center justify-center rounded-lg p-1 text-sm whitespace-nowrap text-gray-500 transition-all disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-gray-50 data-[state=active]:text-gray-800 data-[state=active]:shadow-tab dark:text-slate-400\",\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content ref={ref} className={className} {...props} />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsContent, TabsList, TabsTrigger };\n","import { twMerge } from \"tailwind-merge\";\nimport { Checkbox } from \"@powerhousedao/design-system/ui\";\nimport { Kind } from \"graphql\";\nimport {\n lazy,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { typeDefsDoc } from \"../constants/documents.js\";\nimport { safeParseSdl, useSchemaContext } from \"../context/schema-context.js\";\nimport type { Scope } from \"../types/documents.js\";\nimport {\n makeInitialSchemaDoc,\n makeMinimalObjectForStateType,\n makeStateSchemaNameForScope,\n StateValidationError,\n validateStateObject,\n} from \"../utils/helpers.js\";\nimport { ensureValidStateSchemaName } from \"../utils/linting.js\";\nimport { Button } from \"./button.js\";\nimport { StateValidationErrorMessage } from \"./state-error.js\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"./tabs.js\";\nconst GraphqlEditor = lazy(() => import(\"./code-editors/graphql-editor.js\"));\nconst JSONEditor = lazy(() => import(\"./code-editors/json-editor.js\"));\ntype Props = {\n modelName: string;\n globalStateSchema: string;\n localStateSchema: string;\n globalStateInitialValue: string;\n localStateInitialValue: string;\n setStateSchema: (doc: string, scope: Scope) => void;\n setInitialState: (doc: string, scope: Scope) => void;\n currentScope: Scope;\n onScopeChange: (scope: Scope) => void;\n};\n\ntype StateEditorProps = {\n modelName: string;\n stateSchema: string;\n initialValue: string;\n setStateSchema: (doc: string, scope: Scope) => void;\n setInitialState: (doc: string, scope: Scope) => void;\n scope: Scope;\n};\n\nfunction StateEditor({\n modelName,\n stateSchema,\n initialValue,\n setStateSchema,\n setInitialState,\n scope,\n}: StateEditorProps) {\n const { sharedSchema: sharedSchemaSdl, error: sharedSchemaError } =\n useSchemaContext();\n const [showStandardLib, setShowStandardLib] = useState(false);\n const [syncWithSchema, setSyncWithSchema] = useState(true);\n\n const customLinter = useCallback(\n (doc: string) => ensureValidStateSchemaName(doc, modelName, scope),\n [modelName, scope],\n );\n\n const schemaErrors = useMemo(() => {\n const errors = ensureValidStateSchemaName(stateSchema, modelName, scope);\n if (sharedSchemaError) {\n return [...errors, sharedSchemaError];\n }\n return errors;\n }, [stateSchema, modelName, scope, sharedSchemaError]);\n\n const handleToggleStandardLib = useCallback(() => {\n setShowStandardLib((prev) => !prev);\n }, []);\n\n const handleSchemaUpdate = useCallback(\n (newDoc: string) => setStateSchema(newDoc, scope),\n [setStateSchema, scope],\n );\n\n const handleInitialStateUpdate = useCallback(\n (newDoc: string) => setInitialState(newDoc, scope),\n [setInitialState, scope],\n );\n\n // Track if we've already synced to prevent double-calls in StrictMode\n const hasSyncedRef = useRef(false);\n\n const { initialValueErrors, fixedState } = useMemo(() => {\n const existingValue = initialValue || \"{}\";\n const sharedSchemaDocumentNode = safeParseSdl(sharedSchemaSdl);\n if (!sharedSchemaDocumentNode)\n return { initialValueErrors: [], fixedState: null };\n const stateTypeName = makeStateSchemaNameForScope(modelName, scope);\n if (!stateTypeName) return { initialValueErrors: [], fixedState: null };\n const stateTypeDefinitionNode = sharedSchemaDocumentNode.definitions.find(\n (def) =>\n def.kind === Kind.OBJECT_TYPE_DEFINITION &&\n def.name.value === stateTypeName,\n );\n if (\n !stateTypeDefinitionNode ||\n stateTypeDefinitionNode.kind !== Kind.OBJECT_TYPE_DEFINITION\n )\n return { initialValueErrors: [], fixedState: null };\n\n const errors = validateStateObject(\n sharedSchemaDocumentNode,\n stateTypeDefinitionNode,\n existingValue,\n );\n\n if (errors.length && syncWithSchema) {\n const computedFixedState = makeMinimalObjectForStateType({\n sharedSchemaDocumentNode,\n stateTypeDefinitionNode,\n existingValue,\n });\n if (initialValue !== computedFixedState) {\n return { initialValueErrors: [], fixedState: computedFixedState };\n }\n }\n return { initialValueErrors: errors, fixedState: null };\n }, [sharedSchemaSdl, initialValue, syncWithSchema, scope, modelName]);\n\n // Handle the side effect of syncing initial state separately\n useEffect(() => {\n if (fixedState && !hasSyncedRef.current) {\n hasSyncedRef.current = true;\n setInitialState(fixedState, scope);\n } else if (!fixedState) {\n // Reset the ref when there's no fix needed\n hasSyncedRef.current = false;\n }\n }, [fixedState, setInitialState, scope]);\n\n return (\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <h3 className=\"mb-2 text-lg text-gray-900 capitalize dark:text-slate-100\">\n {scope} state schema *\n </h3>\n <Button\n onClick={handleToggleStandardLib}\n className=\"mb-2 flex w-fit items-center gap-2\"\n >\n {showStandardLib ? \"Hide\" : \"Show\"} standard library\n <svg\n className={twMerge(\n \"inline-block transition-transform\",\n showStandardLib ? \"rotate-180\" : \"rotate-0\",\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path\n d=\"M11.9883 6.01172C11.4363 6.01172 10.9883 6.45972 10.9883 7.01172V13.0117H6.98828L11.9883 18.0117L16.9883 13.0117H12.9883V7.01172C12.9883 6.45972 12.5403 6.01172 11.9883 6.01172Z\"\n fill=\"currentColor\"\n />\n </svg>\n </Button>\n <Suspense>\n {showStandardLib && <GraphqlEditor doc={typeDefsDoc} readonly />}\n <GraphqlEditor\n doc={stateSchema}\n updateDocumentInModel={handleSchemaUpdate}\n customLinter={customLinter}\n />\n {schemaErrors.length > 0 && (\n <p className=\"mt-2 text-sm text-red-600 dark:text-red-100\">\n {schemaErrors[0].message}\n </p>\n )}\n </Suspense>\n </div>\n <div>\n <div className=\"flex flex-col items-end\">\n <h3 className=\"mb-2 text-right text-lg text-gray-900 capitalize dark:text-slate-100\">\n {scope} state initial value *\n </h3>\n <label className=\"mb-2 flex w-fit items-center gap-2 rounded-md border border-gray-200 bg-gray-50 p-2 text-sm font-medium whitespace-nowrap text-gray-900 transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none dark:border-slate-500 dark:bg-slate-600 dark:text-slate-100 dark:hover:bg-slate-500 dark:hover:text-slate-50\">\n <input\n type=\"checkbox\"\n className=\"\"\n value={syncWithSchema.toString()}\n onChange={(e) => {\n setSyncWithSchema(\n e.currentTarget.value === \"true\" ? true : false,\n );\n }}\n />\n Sync with schema{\" \"}\n <svg\n className=\"inline-block\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M8.00521 1.99219C6.63588 1.99219 5.32788 2.45152 4.27588 3.28419C3.98721 3.51219 3.94321 3.93285 4.17188 4.22151C4.40054 4.51018 4.82055 4.55418 5.10921 4.32552C5.92721 3.67819 6.93921 3.32552 8.00521 3.32552C10.5825 3.32552 12.6719 5.41485 12.6719 7.99218H11.3385L13.3385 10.6588L15.3385 7.99218H14.0052C14.0052 4.67818 11.3192 1.99219 8.00521 1.99219ZM2.67188 5.32552L0.671875 7.99218H2.00521C2.00521 11.3062 4.69121 13.9922 8.00521 13.9922C9.37521 13.9922 10.6825 13.5335 11.7345 12.7002C12.0232 12.4722 12.0672 12.0515 11.8385 11.7628C11.6099 11.4742 11.1899 11.4302 10.9012 11.6588C10.0825 12.3068 9.07188 12.6588 8.00521 12.6588C5.42788 12.6588 3.33854 10.5695 3.33854 7.99218H4.67188L2.67188 5.32552Z\"\n fill=\"currentColor\"\n />\n </svg>\n </label>\n </div>\n <Suspense>\n <JSONEditor\n doc={initialValue}\n updateDocumentInModel={handleInitialStateUpdate}\n />\n {initialValueErrors.map((error, index) => (\n <p\n key={index}\n className=\"mt-2 text-sm text-red-600 dark:text-red-100\"\n >\n {error instanceof StateValidationError ? (\n <StateValidationErrorMessage error={error} />\n ) : (\n error.message\n )}\n </p>\n ))}\n </Suspense>\n </div>\n </div>\n );\n}\n\nexport default function StateSchemas({\n modelName,\n globalStateSchema,\n localStateSchema,\n globalStateInitialValue,\n localStateInitialValue,\n setStateSchema,\n setInitialState,\n currentScope,\n onScopeChange,\n}: Props) {\n const handleAddLocalState = useCallback(() => {\n const initialDoc = makeInitialSchemaDoc(modelName, \"local\");\n setStateSchema(initialDoc, \"local\");\n setInitialState(\"\", \"local\");\n }, [modelName, setStateSchema, setInitialState]);\n\n return (\n <Tabs\n className=\"pb-8\"\n activationMode=\"manual\"\n value={currentScope}\n onValueChange={(value) => onScopeChange(value as Scope)}\n >\n <div className=\"my-6\">\n <TabsList className=\"mx-auto flex max-w-sm\">\n <TabsTrigger value=\"global\">Global</TabsTrigger>\n <TabsTrigger value=\"local\">Local</TabsTrigger>\n </TabsList>\n </div>\n\n <TabsContent value=\"global\" tabIndex={-1}>\n <StateEditor\n modelName={modelName}\n stateSchema={globalStateSchema}\n initialValue={globalStateInitialValue}\n setStateSchema={setStateSchema}\n setInitialState={setInitialState}\n scope=\"global\"\n />\n </TabsContent>\n\n <TabsContent value=\"local\" tabIndex={-1}>\n {!localStateSchema ? (\n <div className=\"\">\n <h3 className=\"mb-2 text-lg text-gray-900 capitalize dark:text-slate-100\">\n local state schema *\n </h3>\n <Button onClick={handleAddLocalState}>Add local state</Button>\n </div>\n ) : (\n <StateEditor\n modelName={modelName}\n stateSchema={localStateSchema}\n initialValue={localStateInitialValue}\n setStateSchema={setStateSchema}\n setInitialState={setInitialState}\n scope=\"local\"\n />\n )}\n </TabsContent>\n </Tabs>\n );\n}\n"],"mappings":"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"}
|