@satoshibits/react-json-schema-builder 1.1.0 → 1.1.2
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/components/ui/button.d.ts.map +1 -1
- package/dist/index.cjs10.js +1 -1
- package/dist/index.cjs11.js +1 -1
- package/dist/index.cjs11.js.map +1 -1
- package/dist/index.cjs2.js +1 -1
- package/dist/index.cjs2.js.map +1 -1
- package/dist/index.cjs23.js +1 -1
- package/dist/index.cjs24.js +1 -1
- package/dist/index.cjs25.js +1 -1
- package/dist/index.cjs26.js +1 -1
- package/dist/index.cjs27.js +1 -1
- package/dist/index.cjs3.js +1 -1
- package/dist/index.cjs3.js.map +1 -1
- package/dist/index.cjs30.js +1 -1
- package/dist/index.cjs31.js +1 -1
- package/dist/index.cjs34.js +1 -1
- package/dist/index.cjs36.js +1 -1
- package/dist/index.cjs37.js +1 -1
- package/dist/index.cjs38.js +1 -1
- package/dist/index.cjs39.js +1 -1
- package/dist/index.cjs40.js +1 -1
- package/dist/index.cjs41.js +1 -1
- package/dist/index.cjs43.js +1 -1
- package/dist/index.cjs47.js +1 -1
- package/dist/index.cjs49.js +6 -1
- package/dist/index.cjs49.js.map +1 -1
- package/dist/index.cjs50.js +6 -1
- package/dist/index.cjs50.js.map +1 -1
- package/dist/index.cjs51.js +2 -2
- package/dist/index.cjs51.js.map +1 -1
- package/dist/index.cjs52.js +2 -2
- package/dist/index.cjs52.js.map +1 -1
- package/dist/index.cjs53.js +1 -6
- package/dist/index.cjs53.js.map +1 -1
- package/dist/index.cjs54.js +1 -6
- package/dist/index.cjs54.js.map +1 -1
- package/dist/index.cjs55.js +1 -5
- package/dist/index.cjs55.js.map +1 -1
- package/dist/index.cjs56.js +1 -1
- package/dist/index.cjs56.js.map +1 -1
- package/dist/index.cjs57.js +1 -1
- package/dist/index.cjs57.js.map +1 -1
- package/dist/index.cjs58.js +1 -1
- package/dist/index.cjs58.js.map +1 -1
- package/dist/index.cjs59.js +1 -1
- package/dist/index.cjs59.js.map +1 -1
- package/dist/index.cjs60.js +1 -1
- package/dist/index.cjs60.js.map +1 -1
- package/dist/index.cjs61.js +1 -1
- package/dist/index.cjs61.js.map +1 -1
- package/dist/index.cjs62.js +1 -1
- package/dist/index.cjs62.js.map +1 -1
- package/dist/index.cjs63.js +1 -1
- package/dist/index.cjs63.js.map +1 -1
- package/dist/index.cjs64.js +1 -1
- package/dist/index.cjs64.js.map +1 -1
- package/dist/index.cjs65.js +1 -1
- package/dist/index.cjs65.js.map +1 -1
- package/dist/index.cjs66.js +1 -1
- package/dist/index.cjs66.js.map +1 -1
- package/dist/index.cjs67.js +1 -1
- package/dist/index.cjs67.js.map +1 -1
- package/dist/index.cjs68.js +1 -1
- package/dist/index.cjs68.js.map +1 -1
- package/dist/index.cjs69.js +1 -1
- package/dist/index.cjs69.js.map +1 -1
- package/dist/index.cjs70.js +1 -1
- package/dist/index.cjs70.js.map +1 -1
- package/dist/index.cjs71.js +1 -1
- package/dist/index.cjs71.js.map +1 -1
- package/dist/index.cjs72.js +1 -1
- package/dist/index.cjs72.js.map +1 -1
- package/dist/index.cjs73.js +1 -1
- package/dist/index.cjs73.js.map +1 -1
- package/dist/index.cjs74.js +1 -1
- package/dist/index.cjs74.js.map +1 -1
- package/dist/index.cjs75.js +1 -1
- package/dist/index.cjs75.js.map +1 -1
- package/dist/index.cjs76.js +5 -1
- package/dist/index.cjs76.js.map +1 -1
- package/dist/index.cjs77.js +1 -1
- package/dist/index.cjs77.js.map +1 -1
- package/dist/index.cjs78.js +1 -1
- package/dist/index.cjs78.js.map +1 -1
- package/dist/index.cjs79.js +1 -1
- package/dist/index.cjs79.js.map +1 -1
- package/dist/index.cjs80.js +1 -1
- package/dist/index.cjs80.js.map +1 -1
- package/dist/index.cjs81.js +1 -1
- package/dist/index.cjs81.js.map +1 -1
- package/dist/index.cjs82.js +1 -1
- package/dist/index.cjs82.js.map +1 -1
- package/dist/index.cjs87.js +1 -1
- package/dist/index.cjs89.js +1 -1
- package/dist/index.cjs94.js +38 -1
- package/dist/index.cjs94.js.map +1 -1
- package/dist/index.cjs95.js +1 -38
- package/dist/index.cjs95.js.map +1 -1
- package/dist/index.cjs96.js +1 -1
- package/dist/index.cjs96.js.map +1 -1
- package/dist/index.cjs97.js +1 -1
- package/dist/index.cjs97.js.map +1 -1
- package/dist/index.cjs98.js +1 -1
- package/dist/index.cjs98.js.map +1 -1
- package/dist/index.es10.js +1 -1
- package/dist/index.es11.js +4 -3
- package/dist/index.es11.js.map +1 -1
- package/dist/index.es2.js +73 -71
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es23.js +1 -1
- package/dist/index.es24.js +1 -1
- package/dist/index.es25.js +1 -1
- package/dist/index.es26.js +1 -1
- package/dist/index.es27.js +1 -1
- package/dist/index.es3.js +131 -134
- package/dist/index.es3.js.map +1 -1
- package/dist/index.es30.js +1 -1
- package/dist/index.es31.js +1 -1
- package/dist/index.es34.js +1 -1
- package/dist/index.es36.js +7 -7
- package/dist/index.es37.js +20 -20
- package/dist/index.es38.js +1 -1
- package/dist/index.es39.js +1 -1
- package/dist/index.es40.js +1 -1
- package/dist/index.es41.js +1 -1
- package/dist/index.es43.js +1 -1
- package/dist/index.es47.js +4 -4
- package/dist/index.es49.js +21 -8
- package/dist/index.es49.js.map +1 -1
- package/dist/index.es50.js +9 -5
- package/dist/index.es50.js.map +1 -1
- package/dist/index.es51.js +32 -15
- package/dist/index.es51.js.map +1 -1
- package/dist/index.es52.js +12 -3
- package/dist/index.es52.js.map +1 -1
- package/dist/index.es53.js +8 -38
- package/dist/index.es53.js.map +1 -1
- package/dist/index.es54.js +5 -18
- package/dist/index.es54.js.map +1 -1
- package/dist/index.es55.js +30 -252
- package/dist/index.es55.js.map +1 -1
- package/dist/index.es56.js +6 -21
- package/dist/index.es56.js.map +1 -1
- package/dist/index.es57.js +25 -5
- package/dist/index.es57.js.map +1 -1
- package/dist/index.es58.js +62 -23
- package/dist/index.es58.js.map +1 -1
- package/dist/index.es59.js +27 -63
- package/dist/index.es59.js.map +1 -1
- package/dist/index.es60.js +5 -29
- package/dist/index.es60.js.map +1 -1
- package/dist/index.es61.js +24 -5
- package/dist/index.es61.js.map +1 -1
- package/dist/index.es62.js +3 -24
- package/dist/index.es62.js.map +1 -1
- package/dist/index.es63.js +45 -32
- package/dist/index.es63.js.map +1 -1
- package/dist/index.es64.js +7 -3
- package/dist/index.es64.js.map +1 -1
- package/dist/index.es65.js +123 -44
- package/dist/index.es65.js.map +1 -1
- package/dist/index.es66.js +14 -7
- package/dist/index.es66.js.map +1 -1
- package/dist/index.es67.js +125 -116
- package/dist/index.es67.js.map +1 -1
- package/dist/index.es68.js +10 -14
- package/dist/index.es68.js.map +1 -1
- package/dist/index.es69.js +209 -127
- package/dist/index.es69.js.map +1 -1
- package/dist/index.es70.js +12 -10
- package/dist/index.es70.js.map +1 -1
- package/dist/index.es71.js +7 -215
- package/dist/index.es71.js.map +1 -1
- package/dist/index.es72.js +4 -13
- package/dist/index.es72.js.map +1 -1
- package/dist/index.es73.js +27 -7
- package/dist/index.es73.js.map +1 -1
- package/dist/index.es74.js +49 -3
- package/dist/index.es74.js.map +1 -1
- package/dist/index.es75.js +9 -28
- package/dist/index.es75.js.map +1 -1
- package/dist/index.es76.js +253 -48
- package/dist/index.es76.js.map +1 -1
- package/dist/index.es77.js +21 -8
- package/dist/index.es77.js.map +1 -1
- package/dist/index.es78.js +11 -67
- package/dist/index.es78.js.map +1 -1
- package/dist/index.es79.js +203 -10
- package/dist/index.es79.js.map +1 -1
- package/dist/index.es80.js +20 -203
- package/dist/index.es80.js.map +1 -1
- package/dist/index.es81.js +392 -21
- package/dist/index.es81.js.map +1 -1
- package/dist/index.es82.js +61 -386
- package/dist/index.es82.js.map +1 -1
- package/dist/index.es87.js +1 -1
- package/dist/index.es89.js +4 -4
- package/dist/index.es94.js +69 -65
- package/dist/index.es94.js.map +1 -1
- package/dist/index.es95.js +8 -68
- package/dist/index.es95.js.map +1 -1
- package/dist/index.es96.js +14 -9
- package/dist/index.es96.js.map +1 -1
- package/dist/index.es97.js +62 -14
- package/dist/index.es97.js.map +1 -1
- package/dist/index.es98.js +64 -61
- package/dist/index.es98.js.map +1 -1
- package/dist/packages/builder/context.d.ts +3 -1
- package/dist/packages/builder/context.d.ts.map +1 -1
- package/dist/packages/builder/schema-builder.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.es3.js
CHANGED
|
@@ -1,83 +1,80 @@
|
|
|
1
1
|
import { jsxs as i, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { useState as s, useEffect as
|
|
3
|
-
import { useSchema as
|
|
2
|
+
import { useState as s, useEffect as ce, Fragment as se } from "react";
|
|
3
|
+
import { useSchema as de } from "./index.es2.js";
|
|
4
4
|
import { Button as d } from "./index.es11.js";
|
|
5
|
-
import { Breadcrumb as
|
|
6
|
-
import { Switch as
|
|
7
|
-
import { Select as
|
|
8
|
-
import { Label as
|
|
9
|
-
import { a as
|
|
10
|
-
import { usePluginSystem as
|
|
11
|
-
import { EditPropertyDialog as
|
|
12
|
-
import { AlertDialog as
|
|
13
|
-
import { Alert as
|
|
14
|
-
import { validateSchema as
|
|
15
|
-
import
|
|
16
|
-
import { DebouncedInput as
|
|
17
|
-
import { AddPropertyDialog as
|
|
18
|
-
import { cn as
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import
|
|
23
|
-
import
|
|
24
|
-
const
|
|
25
|
-
const [
|
|
26
|
-
|
|
5
|
+
import { Breadcrumb as me, BreadcrumbList as he, BreadcrumbItem as q, BreadcrumbLink as V, BreadcrumbSeparator as ue } from "./index.es12.js";
|
|
6
|
+
import { Switch as fe } from "./index.es13.js";
|
|
7
|
+
import { Select as $, SelectTrigger as F, SelectValue as L, SelectContent as O, SelectItem as l } from "./index.es14.js";
|
|
8
|
+
import { Label as U } from "./index.es15.js";
|
|
9
|
+
import { a as ge } from "./index.es10.js";
|
|
10
|
+
import { usePluginSystem as pe, useConstraints as ve } from "./index.es4.js";
|
|
11
|
+
import { EditPropertyDialog as ye } from "./index.es16.js";
|
|
12
|
+
import { AlertDialog as be, AlertDialogContent as Ce, AlertDialogHeader as De, AlertDialogTitle as Ae, AlertDialogDescription as Pe, AlertDialogFooter as Se, AlertDialogCancel as Ne, AlertDialogAction as je } from "./index.es17.js";
|
|
13
|
+
import { Alert as Ee, AlertTitle as Be, AlertDescription as we } from "./index.es18.js";
|
|
14
|
+
import { validateSchema as xe } from "./index.es19.js";
|
|
15
|
+
import Te from "ajv";
|
|
16
|
+
import { DebouncedInput as C } from "./index.es20.js";
|
|
17
|
+
import { AddPropertyDialog as ze } from "./index.es21.js";
|
|
18
|
+
import { cn as D } from "./index.es22.js";
|
|
19
|
+
import Ke from "./index.es23.js";
|
|
20
|
+
import Re from "./index.es24.js";
|
|
21
|
+
import Ie from "./index.es25.js";
|
|
22
|
+
import qe from "./index.es26.js";
|
|
23
|
+
import Ve from "./index.es27.js";
|
|
24
|
+
const ot = (a) => {
|
|
25
|
+
const [k, h] = s(!1), [H, p] = s(!1), [G, u] = s(!1), [f, v] = s(), [A, P] = s(), [S, N] = s(), [j, g] = s(null);
|
|
26
|
+
pe(a.plugins ?? []);
|
|
27
27
|
const {
|
|
28
|
-
getCurrentSchema:
|
|
28
|
+
getCurrentSchema: J,
|
|
29
29
|
setPath: m,
|
|
30
30
|
path: o,
|
|
31
|
-
|
|
32
|
-
handleAddProperty: W,
|
|
31
|
+
handleAddProperty: M,
|
|
33
32
|
handlePropertyChange: c,
|
|
34
|
-
handleKeyChange:
|
|
35
|
-
handleDeleteProperty:
|
|
36
|
-
setSchema:
|
|
37
|
-
isPropertyRequired:
|
|
38
|
-
handleDuplicateProperty:
|
|
39
|
-
} =
|
|
40
|
-
|
|
33
|
+
handleKeyChange: E,
|
|
34
|
+
handleDeleteProperty: Q,
|
|
35
|
+
setSchema: W,
|
|
36
|
+
isPropertyRequired: B,
|
|
37
|
+
handleDuplicateProperty: X
|
|
38
|
+
} = de({ onSchemaChange: a.onSchemaChange }), { getConstraintDefinitionsForType: Y } = ve();
|
|
39
|
+
ce(() => {
|
|
41
40
|
if (a.initialSchema)
|
|
42
41
|
try {
|
|
43
|
-
|
|
42
|
+
xe(a.initialSchema), W(ge(a.initialSchema)), g(null);
|
|
44
43
|
} catch (t) {
|
|
45
|
-
t instanceof Error ?
|
|
44
|
+
t instanceof Error ? g(t.message) : t instanceof Te.ValidationError ? g(`Schema validation error: ${t.message}`) : g("Unknown schema validation error");
|
|
46
45
|
}
|
|
47
|
-
}, [a.initialSchema])
|
|
48
|
-
|
|
49
|
-
}, [E, g, a.onSchemaChange]);
|
|
50
|
-
const ee = Q(), x = (t) => {
|
|
46
|
+
}, [a.initialSchema]);
|
|
47
|
+
const Z = J(), w = (t) => {
|
|
51
48
|
m([...o, t]);
|
|
52
|
-
},
|
|
49
|
+
}, x = () => {
|
|
53
50
|
m(o.slice(0, -1));
|
|
54
|
-
},
|
|
55
|
-
P(t),
|
|
51
|
+
}, _ = (t, r) => {
|
|
52
|
+
P(t), N(r), p(!0);
|
|
53
|
+
}, T = (t) => {
|
|
54
|
+
v(t), u(!0);
|
|
55
|
+
}, ee = () => {
|
|
56
|
+
f && (Q(f), v(void 0)), u(!1);
|
|
57
|
+
}, te = () => {
|
|
58
|
+
v(void 0), u(!1);
|
|
56
59
|
}, z = (t) => {
|
|
57
|
-
|
|
58
|
-
}, re = () => {
|
|
59
|
-
f && (X(f), y(void 0)), u(!1);
|
|
60
|
-
}, ne = () => {
|
|
61
|
-
y(void 0), u(!1);
|
|
62
|
-
}, K = (t) => {
|
|
63
|
-
const r = Z(t);
|
|
60
|
+
const r = X(t);
|
|
64
61
|
r?.status === "error" ? a.onPropertyAddError?.(r) : r?.status === "success" && a.onPropertyAddSuccess?.(r);
|
|
65
|
-
},
|
|
66
|
-
const r =
|
|
62
|
+
}, re = (...t) => {
|
|
63
|
+
const r = M(...t);
|
|
67
64
|
r.status === "error" ? a.onPropertyAddError?.(r) : r.status === "success" && a.onPropertyAddSuccess?.(r), h(!1);
|
|
68
|
-
},
|
|
69
|
-
|
|
65
|
+
}, K = a.propertyComponent, ne = (t, r) => K ? /* @__PURE__ */ e(
|
|
66
|
+
K,
|
|
70
67
|
{
|
|
71
68
|
property: {
|
|
72
69
|
key: t,
|
|
73
70
|
schema: r,
|
|
74
|
-
isRequired:
|
|
71
|
+
isRequired: B(t)
|
|
75
72
|
},
|
|
76
73
|
onPropertyChange: c,
|
|
77
|
-
onKeyChange:
|
|
78
|
-
onDelete:
|
|
79
|
-
onDuplicate:
|
|
80
|
-
onNavigate: r.type === "object" || r.type === "array" && typeof r.items == "object" && r.items.type === "object" ?
|
|
74
|
+
onKeyChange: E,
|
|
75
|
+
onDelete: T,
|
|
76
|
+
onDuplicate: z,
|
|
77
|
+
onNavigate: r.type === "object" || r.type === "array" && typeof r.items == "object" && r.items.type === "object" ? w : void 0
|
|
81
78
|
},
|
|
82
79
|
t
|
|
83
80
|
) : /* @__PURE__ */ i(
|
|
@@ -86,10 +83,10 @@ const ct = (a) => {
|
|
|
86
83
|
className: "flex flex-col md:grid grid-cols-(--my-autofit-grid) gap-4 md:items-center border p-2 rounded-md mb-2",
|
|
87
84
|
children: [
|
|
88
85
|
/* @__PURE__ */ e("div", { className: "", children: /* @__PURE__ */ e(
|
|
89
|
-
|
|
86
|
+
C,
|
|
90
87
|
{
|
|
91
88
|
value: t,
|
|
92
|
-
onDebounce: (n) =>
|
|
89
|
+
onDebounce: (n) => E(t, n),
|
|
93
90
|
placeholder: "Property Key",
|
|
94
91
|
"aria-label": `Property key for ${t}`,
|
|
95
92
|
delay: 500
|
|
@@ -97,17 +94,17 @@ const ct = (a) => {
|
|
|
97
94
|
) }),
|
|
98
95
|
/* @__PURE__ */ i("div", { className: "flex items-center gap-2", children: [
|
|
99
96
|
/* @__PURE__ */ e(
|
|
100
|
-
|
|
97
|
+
fe,
|
|
101
98
|
{
|
|
102
|
-
checked:
|
|
99
|
+
checked: B(t),
|
|
103
100
|
onCheckedChange: (n) => c(t, { isRequired: n }),
|
|
104
101
|
"aria-label": "Required"
|
|
105
102
|
}
|
|
106
103
|
),
|
|
107
|
-
/* @__PURE__ */ e(
|
|
104
|
+
/* @__PURE__ */ e(U, { htmlFor: `required-${t}`, children: "Required" })
|
|
108
105
|
] }),
|
|
109
106
|
/* @__PURE__ */ e("div", { className: "", children: /* @__PURE__ */ i(
|
|
110
|
-
|
|
107
|
+
$,
|
|
111
108
|
{
|
|
112
109
|
value: typeof r == "object" && !Array.isArray(r.type) ? r.type : void 0,
|
|
113
110
|
onValueChange: (n) => c(t, {
|
|
@@ -115,8 +112,8 @@ const ct = (a) => {
|
|
|
115
112
|
}),
|
|
116
113
|
"aria-label": "Type",
|
|
117
114
|
children: [
|
|
118
|
-
/* @__PURE__ */ e(
|
|
119
|
-
/* @__PURE__ */ i(
|
|
115
|
+
/* @__PURE__ */ e(F, { className: "w-full", "aria-label": "Select type", children: /* @__PURE__ */ e(L, {}) }),
|
|
116
|
+
/* @__PURE__ */ i(O, { children: [
|
|
120
117
|
/* @__PURE__ */ e(l, { value: "string", children: "string" }),
|
|
121
118
|
/* @__PURE__ */ e(l, { value: "number", children: "number" }),
|
|
122
119
|
/* @__PURE__ */ e(l, { value: "integer", children: "integer" }),
|
|
@@ -130,7 +127,7 @@ const ct = (a) => {
|
|
|
130
127
|
}
|
|
131
128
|
) }),
|
|
132
129
|
/* @__PURE__ */ e("div", { className: "", children: /* @__PURE__ */ e(
|
|
133
|
-
|
|
130
|
+
C,
|
|
134
131
|
{
|
|
135
132
|
value: typeof r == "object" ? r.title : void 0,
|
|
136
133
|
onDebounce: (n) => c(t, { title: n }),
|
|
@@ -138,7 +135,7 @@ const ct = (a) => {
|
|
|
138
135
|
}
|
|
139
136
|
) }),
|
|
140
137
|
/* @__PURE__ */ e("div", { className: "", children: /* @__PURE__ */ e(
|
|
141
|
-
|
|
138
|
+
C,
|
|
142
139
|
{
|
|
143
140
|
value: typeof r == "object" ? r.description : void 0,
|
|
144
141
|
onDebounce: (n) => c(t, { description: n }),
|
|
@@ -151,10 +148,10 @@ const ct = (a) => {
|
|
|
151
148
|
{
|
|
152
149
|
variant: "outline",
|
|
153
150
|
size: "sm",
|
|
154
|
-
onClick: () =>
|
|
151
|
+
onClick: () => T(t),
|
|
155
152
|
"aria-label": "Delete",
|
|
156
153
|
className: "block!",
|
|
157
|
-
children: /* @__PURE__ */ e(
|
|
154
|
+
children: /* @__PURE__ */ e(Re, { size: 16, className: "text-destructive" })
|
|
158
155
|
}
|
|
159
156
|
),
|
|
160
157
|
/* @__PURE__ */ e(
|
|
@@ -162,46 +159,46 @@ const ct = (a) => {
|
|
|
162
159
|
{
|
|
163
160
|
variant: "outline",
|
|
164
161
|
size: "sm",
|
|
165
|
-
onClick: () =>
|
|
162
|
+
onClick: () => z(t),
|
|
166
163
|
"aria-label": "Duplicate",
|
|
167
164
|
className: "block!",
|
|
168
|
-
children: /* @__PURE__ */ e(
|
|
165
|
+
children: /* @__PURE__ */ e(Ie, { size: 16 })
|
|
169
166
|
}
|
|
170
167
|
),
|
|
171
|
-
|
|
172
|
-
|
|
168
|
+
ae(t, r),
|
|
169
|
+
R(t, r)
|
|
173
170
|
] }),
|
|
174
|
-
|
|
171
|
+
ie(t, r)
|
|
175
172
|
]
|
|
176
173
|
},
|
|
177
174
|
t
|
|
178
|
-
),
|
|
175
|
+
), ie = (t, r) => {
|
|
179
176
|
if (typeof r != "object" || r.type !== "array")
|
|
180
177
|
return null;
|
|
181
|
-
const n = r.items,
|
|
178
|
+
const n = r.items, y = !Array.isArray(n) && typeof n == "object" && typeof n.type == "string" ? n?.type : "string";
|
|
182
179
|
return /* @__PURE__ */ i("div", { className: "col-span-full flex items-center gap-4 pl-8 mt-2 bg-gray-50 p-2 rounded-md", children: [
|
|
183
|
-
/* @__PURE__ */ e(
|
|
180
|
+
/* @__PURE__ */ e(U, { children: "Items of type:" }),
|
|
184
181
|
/* @__PURE__ */ i(
|
|
185
|
-
|
|
182
|
+
$,
|
|
186
183
|
{
|
|
187
|
-
value:
|
|
188
|
-
onValueChange: (
|
|
189
|
-
const
|
|
184
|
+
value: y,
|
|
185
|
+
onValueChange: (I) => {
|
|
186
|
+
const b = {
|
|
190
187
|
...typeof n == "object" ? n : {},
|
|
191
|
-
type:
|
|
188
|
+
type: I
|
|
192
189
|
};
|
|
193
|
-
|
|
190
|
+
I === "object" && (b.properties = b.properties ?? {}), c(t, { items: b });
|
|
194
191
|
},
|
|
195
192
|
children: [
|
|
196
193
|
/* @__PURE__ */ e(
|
|
197
|
-
|
|
194
|
+
F,
|
|
198
195
|
{
|
|
199
196
|
className: "w-[200px]",
|
|
200
197
|
"aria-label": "Select items of type",
|
|
201
|
-
children: /* @__PURE__ */ e(
|
|
198
|
+
children: /* @__PURE__ */ e(L, {})
|
|
202
199
|
}
|
|
203
200
|
),
|
|
204
|
-
/* @__PURE__ */ i(
|
|
201
|
+
/* @__PURE__ */ i(O, { children: [
|
|
205
202
|
/* @__PURE__ */ e(l, { value: "string", children: "string" }),
|
|
206
203
|
/* @__PURE__ */ e(l, { value: "number", children: "number" }),
|
|
207
204
|
/* @__PURE__ */ e(l, { value: "integer", children: "integer" }),
|
|
@@ -213,42 +210,42 @@ const ct = (a) => {
|
|
|
213
210
|
]
|
|
214
211
|
}
|
|
215
212
|
),
|
|
216
|
-
|
|
213
|
+
R(t, n)
|
|
217
214
|
] });
|
|
218
|
-
},
|
|
215
|
+
}, ae = (t, r) => {
|
|
219
216
|
if (typeof r != "object") return null;
|
|
220
|
-
const n =
|
|
217
|
+
const n = Y(
|
|
221
218
|
typeof r.type == "string" ? r.type : ""
|
|
222
|
-
),
|
|
223
|
-
return n.length ||
|
|
219
|
+
), y = Array.isArray(r?.enum);
|
|
220
|
+
return n.length || y ? /* @__PURE__ */ e(
|
|
224
221
|
d,
|
|
225
222
|
{
|
|
226
223
|
variant: "outline",
|
|
227
224
|
size: "sm",
|
|
228
|
-
onClick: () =>
|
|
225
|
+
onClick: () => _(t, r),
|
|
229
226
|
"aria-label": "Edit constraints",
|
|
230
|
-
children: /* @__PURE__ */ e(
|
|
227
|
+
children: /* @__PURE__ */ e(qe, { size: 16 })
|
|
231
228
|
}
|
|
232
229
|
) : null;
|
|
233
|
-
},
|
|
230
|
+
}, R = (t, r) => !Array.isArray(r) && typeof r == "object" && r?.type === "object" ? /* @__PURE__ */ i(
|
|
234
231
|
d,
|
|
235
232
|
{
|
|
236
233
|
variant: "outline",
|
|
237
234
|
size: "sm",
|
|
238
|
-
onClick: () =>
|
|
235
|
+
onClick: () => w(t),
|
|
239
236
|
"aria-label": "Navigate",
|
|
240
237
|
children: [
|
|
241
238
|
/* @__PURE__ */ e("span", { className: "sr-only", children: "Navigate" }),
|
|
242
|
-
/* @__PURE__ */ e(
|
|
239
|
+
/* @__PURE__ */ e(Ve, { size: 16 })
|
|
243
240
|
]
|
|
244
241
|
}
|
|
245
|
-
) : null,
|
|
242
|
+
) : null, le = () => {
|
|
246
243
|
const t = a.navigationComponent;
|
|
247
244
|
return t ? /* @__PURE__ */ e(
|
|
248
245
|
t,
|
|
249
246
|
{
|
|
250
247
|
currentPath: o,
|
|
251
|
-
onNavigateUp:
|
|
248
|
+
onNavigateUp: x,
|
|
252
249
|
onNavigateTo: m,
|
|
253
250
|
isRootPath: o.length === 0
|
|
254
251
|
}
|
|
@@ -258,18 +255,18 @@ const ct = (a) => {
|
|
|
258
255
|
{
|
|
259
256
|
variant: "outline",
|
|
260
257
|
size: "sm",
|
|
261
|
-
onClick:
|
|
258
|
+
onClick: x,
|
|
262
259
|
disabled: o.length === 0,
|
|
263
|
-
className:
|
|
260
|
+
className: D(a.backButtonClassName),
|
|
264
261
|
children: "Back"
|
|
265
262
|
}
|
|
266
263
|
),
|
|
267
|
-
/* @__PURE__ */ e(
|
|
268
|
-
/* @__PURE__ */ e(
|
|
269
|
-
o.map((r, n) => /* @__PURE__ */ i(
|
|
270
|
-
/* @__PURE__ */ e(
|
|
271
|
-
/* @__PURE__ */ e(
|
|
272
|
-
|
|
264
|
+
/* @__PURE__ */ e(me, { children: /* @__PURE__ */ i(he, { children: [
|
|
265
|
+
/* @__PURE__ */ e(q, { children: /* @__PURE__ */ e(V, { href: "#", onClick: () => m([]), children: "Root" }) }),
|
|
266
|
+
o.map((r, n) => /* @__PURE__ */ i(se, { children: [
|
|
267
|
+
/* @__PURE__ */ e(ue, {}),
|
|
268
|
+
/* @__PURE__ */ e(q, { children: /* @__PURE__ */ e(
|
|
269
|
+
V,
|
|
273
270
|
{
|
|
274
271
|
href: "#",
|
|
275
272
|
onClick: () => m(o.slice(0, n + 1)),
|
|
@@ -279,7 +276,7 @@ const ct = (a) => {
|
|
|
279
276
|
] }, `path-${n}`))
|
|
280
277
|
] }) })
|
|
281
278
|
] });
|
|
282
|
-
},
|
|
279
|
+
}, oe = () => {
|
|
283
280
|
const t = a.addPropertyButtonComponent;
|
|
284
281
|
return t ? /* @__PURE__ */ e(
|
|
285
282
|
t,
|
|
@@ -290,55 +287,55 @@ const ct = (a) => {
|
|
|
290
287
|
d,
|
|
291
288
|
{
|
|
292
289
|
type: "button",
|
|
293
|
-
className:
|
|
290
|
+
className: D("self-center", a.addPropertyButtonClassName),
|
|
294
291
|
onClick: () => {
|
|
295
292
|
h(!0);
|
|
296
293
|
},
|
|
297
294
|
children: [
|
|
298
|
-
/* @__PURE__ */ e(
|
|
295
|
+
/* @__PURE__ */ e(Ke, { className: "h-4 w-4 mr-2" }),
|
|
299
296
|
"Add Property"
|
|
300
297
|
]
|
|
301
298
|
}
|
|
302
299
|
);
|
|
303
300
|
};
|
|
304
301
|
return /* @__PURE__ */ i("div", { children: [
|
|
305
|
-
|
|
306
|
-
/* @__PURE__ */ e(
|
|
307
|
-
/* @__PURE__ */ e(
|
|
302
|
+
j && /* @__PURE__ */ i(Ee, { variant: "destructive", children: [
|
|
303
|
+
/* @__PURE__ */ e(Be, { children: "Schema Error" }),
|
|
304
|
+
/* @__PURE__ */ e(we, { children: j })
|
|
308
305
|
] }),
|
|
309
|
-
|
|
306
|
+
le(),
|
|
310
307
|
/* @__PURE__ */ e(
|
|
311
308
|
"div",
|
|
312
309
|
{
|
|
313
|
-
className:
|
|
314
|
-
children: Object.entries(
|
|
315
|
-
([t, r]) => typeof r == "boolean" ? null :
|
|
310
|
+
className: D("mt-6 overflow-x-hidden", a.propertiesListClassName),
|
|
311
|
+
children: Object.entries(Z.properties ?? {}).map(
|
|
312
|
+
([t, r]) => typeof r == "boolean" ? null : ne(t, r)
|
|
316
313
|
)
|
|
317
314
|
}
|
|
318
315
|
),
|
|
319
|
-
|
|
316
|
+
oe(),
|
|
320
317
|
/* @__PURE__ */ e(
|
|
321
|
-
|
|
318
|
+
ze,
|
|
322
319
|
{
|
|
323
|
-
open:
|
|
320
|
+
open: k,
|
|
324
321
|
onOpenChange: h,
|
|
325
|
-
onSubmit:
|
|
322
|
+
onSubmit: re
|
|
326
323
|
}
|
|
327
324
|
),
|
|
328
|
-
A &&
|
|
329
|
-
|
|
325
|
+
A && S && /* @__PURE__ */ e(
|
|
326
|
+
ye,
|
|
330
327
|
{
|
|
331
328
|
propertyKey: A,
|
|
332
|
-
property:
|
|
333
|
-
open:
|
|
334
|
-
onOpenChange:
|
|
329
|
+
property: S,
|
|
330
|
+
open: H,
|
|
331
|
+
onOpenChange: p,
|
|
335
332
|
onSubmit: (t) => {
|
|
336
|
-
c(...t), P(void 0),
|
|
333
|
+
c(...t), P(void 0), N(void 0), p(!1);
|
|
337
334
|
}
|
|
338
335
|
}
|
|
339
336
|
),
|
|
340
|
-
/* @__PURE__ */ e(
|
|
341
|
-
/* @__PURE__ */ i(
|
|
337
|
+
/* @__PURE__ */ e(be, { open: G, onOpenChange: u, children: /* @__PURE__ */ i(Ce, { children: [
|
|
338
|
+
/* @__PURE__ */ i(De, { children: [
|
|
342
339
|
/* @__PURE__ */ e(Ae, { children: "Are you sure?" }),
|
|
343
340
|
/* @__PURE__ */ i(Pe, { children: [
|
|
344
341
|
"This action cannot be undone. This will permanently delete the property",
|
|
@@ -346,14 +343,14 @@ const ct = (a) => {
|
|
|
346
343
|
" from the schema."
|
|
347
344
|
] })
|
|
348
345
|
] }),
|
|
349
|
-
/* @__PURE__ */ i(
|
|
350
|
-
/* @__PURE__ */ e(
|
|
351
|
-
/* @__PURE__ */ e(
|
|
346
|
+
/* @__PURE__ */ i(Se, { children: [
|
|
347
|
+
/* @__PURE__ */ e(Ne, { onClick: te, children: "Cancel" }),
|
|
348
|
+
/* @__PURE__ */ e(je, { onClick: ee, children: "Delete" })
|
|
352
349
|
] })
|
|
353
350
|
] }) })
|
|
354
351
|
] });
|
|
355
352
|
};
|
|
356
353
|
export {
|
|
357
|
-
|
|
354
|
+
ot as SchemaBuilder
|
|
358
355
|
};
|
|
359
356
|
//# sourceMappingURL=index.es3.js.map
|
package/dist/index.es3.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es3.js","sources":["../src/packages/builder/schema-builder.tsx"],"sourcesContent":["import { useEffect, useState, Fragment } from \"react\";\nimport { PropertyAddError, PropertyAddSuccess, useSchema } from \"./context\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { Bolt, ChevronRight, Copy, Plus, Trash2 } from \"lucide-react\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { Label } from \"@/components/ui/label\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport { clone } from \"remeda\";\nimport {\n BaseJSONSchemaPlugin,\n useConstraints,\n usePluginSystem,\n} from \"@/packages/constraints/context\";\nimport { EditPropertyDialog } from \"./edit-dialog\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { validateSchema } from \"./utils\";\nimport Ajv from \"ajv\";\nimport { DebouncedInput } from \"@/components/depounced-input\";\nimport { AddPropertyDialog, type AddPropertyDialogProps } from \"./add-dialog\";\nimport { cn } from \"@/lib/utils\";\n\n// PropertyComponent type definition for custom property components\nexport interface PropertyComponentProps {\n property: {\n key: string;\n schema: JSONSchema7;\n isRequired: boolean;\n };\n onPropertyChange: (key: string, changes: Partial<JSONSchema7>) => void;\n onKeyChange: (oldKey: string, newKey: string) => void;\n onDelete: (key: string) => void;\n onDuplicate?: (key: string) => void;\n onNavigate?: (key: string) => void;\n}\n\n// NavigationProps for custom navigation component\nexport interface NavigationProps {\n currentPath: string[];\n onNavigateUp: () => void;\n onNavigateTo: (newPath: string[]) => void;\n isRootPath: boolean;\n}\n\n// AddPropertyButtonProps for custom add property button\nexport interface AddPropertyButtonProps {\n onClick: () => void;\n}\n\ninterface SchemaBuilderProps {\n /** The schema to edit */\n initialSchema?: JSONSchema7;\n /** Constraint plugins to use */\n plugins?: BaseJSONSchemaPlugin[];\n /** Custom component to render properties */\n propertyComponent?: React.ComponentType<PropertyComponentProps>;\n /** Called when the schema changes */\n onSchemaChange?: (schema: JSONSchema7) => void;\n /** Called when a property is successfully added */\n onPropertyAddSuccess?: (props: PropertyAddSuccess) => void;\n /** Called when there's an error adding a property */\n onPropertyAddError?: (props: PropertyAddError) => void;\n /** Called when there's an error changing a property */\n onPropertyChangeError?: (prop: Error) => void;\n /** Called when a property is successfully changed */\n onPropertyChangeSuccess?: () => void;\n /** Class name for the navigation bar back button */\n backButtonClassName?: string;\n /** Class name for the properties list container */\n propertiesListClassName?: string;\n /** Class name for the add property button */\n addPropertyButtonClassName?: string;\n /** Custom navigation component */\n navigationComponent?: React.ComponentType<NavigationProps>;\n /** Custom add property button component */\n addPropertyButtonComponent?: React.ComponentType<AddPropertyButtonProps>;\n}\n\nexport const SchemaBuilder = (props: SchemaBuilderProps) => {\n // State\n const [showPropertyDialog, setShowPropertyDialog] = useState(false);\n const [showEditDialog, setShowEditDialog] = useState(false);\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [deleteKey, setDeleteKey] = useState<string | undefined>();\n const [editingKey, setEditingKey] = useState<string | undefined>();\n const [editingProperty, setEditingProperty] = useState<\n JSONSchema7 | undefined\n >();\n const [schemaValidationError, setSchemaValidationError] = useState<\n string | null\n >(null);\n\n // Initialize the plugin system\n usePluginSystem(props.plugins ?? []);\n\n // Get schema context\n const {\n getCurrentSchema,\n setPath,\n path,\n schema,\n handleAddProperty,\n handlePropertyChange,\n handleKeyChange,\n handleDeleteProperty,\n setSchema,\n isPropertyRequired,\n handleDuplicateProperty,\n } = useSchema();\n\n // Get constraints context\n const { getConstraintDefinitionsForType } = useConstraints();\n\n // Set schema from props\n useEffect(() => {\n if (props.initialSchema) {\n try {\n // Validate the schema before setting it\n validateSchema(props.initialSchema);\n setSchema(clone(props.initialSchema));\n setSchemaValidationError(null);\n } catch (error) {\n if (error instanceof Error) {\n setSchemaValidationError(error.message);\n } else if (error instanceof Ajv.ValidationError) {\n setSchemaValidationError(`Schema validation error: ${error.message}`);\n } else {\n setSchemaValidationError(\"Unknown schema validation error\");\n }\n }\n }\n }, [props.initialSchema]);\n\n // Notify schema changes\n useEffect(() => {\n if (!schemaValidationError && props.onSchemaChange) {\n props.onSchemaChange(schema);\n }\n }, [schema, schemaValidationError, props.onSchemaChange]);\n\n const currentSchema = getCurrentSchema();\n\n // Navigation handlers\n const handleNavigateToProperty = (name: string) => {\n setPath([...path, name]);\n };\n\n const handleNavigateUp = () => {\n setPath(path.slice(0, -1));\n };\n\n // Property management handlers\n const handleEditProperty = (key: string, property: JSONSchema7) => {\n setEditingKey(key);\n setEditingProperty(property);\n setShowEditDialog(true);\n };\n\n const handleInitiateDelete = (key: string) => {\n setDeleteKey(key);\n setShowDeleteDialog(true);\n };\n\n const handleConfirmDelete = () => {\n if (deleteKey) {\n handleDeleteProperty(deleteKey);\n setDeleteKey(undefined);\n }\n setShowDeleteDialog(false);\n };\n\n const handleCancelDelete = () => {\n setDeleteKey(undefined);\n setShowDeleteDialog(false);\n };\n\n const handleDuplicate = (key: string) => {\n const result = handleDuplicateProperty(key);\n\n // Notify if needed\n if (result?.status === \"error\") {\n props.onPropertyAddError?.(result);\n } else if (result?.status === \"success\") {\n props.onPropertyAddSuccess?.(result);\n }\n };\n\n const onAddProperty: AddPropertyDialogProps[\"onSubmit\"] = (...vals) => {\n const result = handleAddProperty(...vals);\n\n if (result.status === \"error\") {\n props.onPropertyAddError?.(result);\n } else if (result.status === \"success\") {\n props.onPropertyAddSuccess?.(result);\n }\n setShowPropertyDialog(false);\n };\n\n // Custom property component or default renderer\n const PropertyComponent = props.propertyComponent;\n\n const renderProperty = (key: string, property: JSONSchema7) => {\n if (PropertyComponent) {\n return (\n <PropertyComponent\n key={key}\n property={{\n key,\n schema: property,\n isRequired: isPropertyRequired(key),\n }}\n onPropertyChange={handlePropertyChange}\n onKeyChange={handleKeyChange}\n onDelete={handleInitiateDelete}\n onDuplicate={handleDuplicate}\n onNavigate={\n property.type === \"object\" ||\n (property.type === \"array\" &&\n typeof property.items === \"object\" &&\n (property.items as JSONSchema7).type === \"object\")\n ? handleNavigateToProperty\n : undefined\n }\n />\n );\n }\n\n // Default property renderer\n return (\n <div\n key={key}\n className=\"flex flex-col md:grid grid-cols-(--my-autofit-grid) gap-4 md:items-center border p-2 rounded-md mb-2\"\n >\n <div className=\"\">\n <DebouncedInput\n value={key}\n onDebounce={(newVal) => handleKeyChange(key, newVal)}\n placeholder=\"Property Key\"\n aria-label={`Property key for ${key}`}\n delay={500}\n />\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Switch\n checked={isPropertyRequired(key)}\n onCheckedChange={(checked) =>\n handlePropertyChange(key, { isRequired: checked })\n }\n aria-label=\"Required\"\n />\n <Label htmlFor={`required-${key}`}>Required</Label>\n </div>\n\n <div className=\"\">\n <Select\n value={\n typeof property === \"object\" && !Array.isArray(property.type)\n ? property.type\n : undefined\n }\n onValueChange={(value) =>\n handlePropertyChange(key, {\n type: value as JSONSchema7[\"type\"],\n })\n }\n aria-label=\"Type\"\n >\n <SelectTrigger className=\"w-full\" aria-label=\"Select type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={\"string\" satisfies JSONSchema7[\"type\"]}>\n string\n </SelectItem>\n <SelectItem value={\"number\" satisfies JSONSchema7[\"type\"]}>\n number\n </SelectItem>\n <SelectItem value={\"integer\" satisfies JSONSchema7[\"type\"]}>\n integer\n </SelectItem>\n <SelectItem value={\"boolean\" satisfies JSONSchema7[\"type\"]}>\n boolean\n </SelectItem>\n <SelectItem value={\"object\" satisfies JSONSchema7[\"type\"]}>\n object\n </SelectItem>\n <SelectItem value={\"array\" satisfies JSONSchema7[\"type\"]}>\n array\n </SelectItem>\n <SelectItem value={\"null\" satisfies JSONSchema7[\"type\"]}>\n null\n </SelectItem>\n <SelectItem value={\"enum\"}>enum</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"\">\n <DebouncedInput\n value={typeof property === \"object\" ? property.title : undefined}\n onDebounce={(newVal) =>\n handlePropertyChange(key, { title: newVal })\n }\n placeholder=\"Title\"\n />\n </div>\n\n <div className=\"\">\n <DebouncedInput\n value={\n typeof property === \"object\" ? property.description : undefined\n }\n onDebounce={(newVal) =>\n handlePropertyChange(key, { description: newVal })\n }\n placeholder=\"Description\"\n />\n </div>\n\n <div className=\"order-last md:order-none flex gap-2\">\n {/* Delete button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleInitiateDelete(key)}\n aria-label=\"Delete\"\n className=\"block!\"\n >\n <Trash2 size={16} className=\"text-destructive\" />\n </Button>\n\n {/* Duplicate button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleDuplicate(key)}\n aria-label=\"Duplicate\"\n className=\"block!\"\n >\n <Copy size={16} />\n </Button>\n\n {/* Edit button if applicable */}\n {renderEditButton(key, property)}\n\n {/* Navigate button for objects/array items */}\n {renderNavigateButton(key, property)}\n </div>\n\n {/* Render array items configuration if needed */}\n {renderArrayItemsConfig(key, property)}\n </div>\n );\n };\n\n // Helper to render array items configuration\n const renderArrayItemsConfig = (key: string, property: JSONSchema7) => {\n if (typeof property !== \"object\" || property.type !== \"array\") {\n return null;\n }\n\n const items = property.items;\n const itemType =\n !Array.isArray(items) &&\n typeof items === \"object\" &&\n typeof items.type === \"string\"\n ? items?.type\n : \"string\";\n\n return (\n <div className=\"col-span-full flex items-center gap-4 pl-8 mt-2 bg-gray-50 p-2 rounded-md\">\n <Label>Items of type:</Label>\n <Select\n value={itemType as string}\n onValueChange={(value) => {\n const newItems: JSONSchema7 = {\n ...(typeof items === \"object\" ? items : {}),\n type: value as JSONSchema7[\"type\"],\n };\n\n if (value === \"object\") {\n // Initialize empty properties for object type\n newItems.properties = newItems.properties ?? {};\n }\n\n handlePropertyChange(key, { items: newItems });\n }}\n >\n <SelectTrigger\n className=\"w-[200px]\"\n aria-label=\"Select items of type\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={\"string\" satisfies JSONSchema7[\"type\"]}>\n string\n </SelectItem>\n <SelectItem value={\"number\" satisfies JSONSchema7[\"type\"]}>\n number\n </SelectItem>\n <SelectItem value={\"integer\" satisfies JSONSchema7[\"type\"]}>\n integer\n </SelectItem>\n <SelectItem value={\"boolean\" satisfies JSONSchema7[\"type\"]}>\n boolean\n </SelectItem>\n <SelectItem value={\"object\" satisfies JSONSchema7[\"type\"]}>\n object\n </SelectItem>\n <SelectItem value={\"array\" satisfies JSONSchema7[\"type\"]}>\n array\n </SelectItem>\n <SelectItem value={\"null\" satisfies JSONSchema7[\"type\"]}>\n null\n </SelectItem>\n </SelectContent>\n </Select>\n\n {/* Configure object button for array items of type object */}\n {renderNavigateButton(key, items)}\n </div>\n );\n };\n\n // Helper to render the edit constraint button when needed\n const renderEditButton = (key: string, property: JSONSchema7) => {\n if (typeof property !== \"object\") return null;\n\n // Check for constraints\n const availableConstraints = getConstraintDefinitionsForType(\n typeof property.type === \"string\" ? property.type : \"\",\n );\n\n // Check for enum\n const hasEnum = Array.isArray(property?.enum);\n\n if (availableConstraints.length || hasEnum) {\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleEditProperty(key, property)}\n aria-label=\"Edit constraints\"\n >\n <Bolt size={16} />\n </Button>\n );\n }\n\n return null;\n };\n\n const renderNavigateButton = (key: string, items: JSONSchema7[\"items\"]) => {\n if (\n !Array.isArray(items) &&\n typeof items === \"object\" &&\n items?.type === \"object\"\n ) {\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleNavigateToProperty(key)}\n aria-label=\"Navigate\"\n >\n <span className=\"sr-only\">Navigate</span>\n <ChevronRight size={16} />\n </Button>\n );\n }\n\n return null;\n };\n\n // Render navigation component\n const renderNavigation = () => {\n const NavigationComponent = props.navigationComponent;\n\n if (NavigationComponent) {\n return (\n <NavigationComponent\n currentPath={path}\n onNavigateUp={handleNavigateUp}\n onNavigateTo={setPath}\n isRootPath={path.length === 0}\n />\n );\n }\n\n return (\n <div className=\"flex items-center space-x-4\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleNavigateUp}\n disabled={path.length === 0}\n className={cn(props.backButtonClassName)}\n >\n Back\n </Button>\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#\" onClick={() => setPath([])}>\n Root\n </BreadcrumbLink>\n </BreadcrumbItem>\n {path.map((item, index) => (\n <Fragment key={`path-${index}`}>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink\n href=\"#\"\n onClick={() => setPath(path.slice(0, index + 1))}\n >\n {item}\n </BreadcrumbLink>\n </BreadcrumbItem>\n </Fragment>\n ))}\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n );\n };\n\n // Render add property button\n const renderAddPropertyButton = () => {\n const AddPropertyButtonComponent = props.addPropertyButtonComponent;\n\n if (AddPropertyButtonComponent) {\n return (\n <AddPropertyButtonComponent\n onClick={() => setShowPropertyDialog(true)}\n />\n );\n }\n\n return (\n <Button\n type=\"button\"\n className={cn(\"self-center\", props.addPropertyButtonClassName)}\n onClick={() => {\n setShowPropertyDialog(true);\n }}\n >\n <Plus className=\"h-4 w-4 mr-2\" />\n Add Property\n </Button>\n );\n };\n\n return (\n <div>\n {/* Schema validation error */}\n {schemaValidationError && (\n <Alert variant=\"destructive\">\n <AlertTitle>Schema Error</AlertTitle>\n <AlertDescription>{schemaValidationError}</AlertDescription>\n </Alert>\n )}\n\n {/* Navigation bar */}\n {renderNavigation()}\n\n {/* Properties list */}\n <div\n className={cn(\"mt-6 overflow-x-hidden\", props.propertiesListClassName)}\n >\n {Object.entries(currentSchema.properties ?? {}).map(\n ([key, property]) => {\n if (typeof property === \"boolean\") {\n // We don't support editing boolean properties\n return null;\n }\n\n return renderProperty(key, property);\n },\n )}\n </div>\n\n {/* Add property button */}\n {renderAddPropertyButton()}\n\n {/* Add property dialog */}\n <AddPropertyDialog\n open={showPropertyDialog}\n onOpenChange={setShowPropertyDialog}\n onSubmit={onAddProperty}\n />\n\n {/* Edit property dialog */}\n {editingKey && editingProperty && (\n <EditPropertyDialog\n propertyKey={editingKey}\n property={editingProperty}\n open={showEditDialog}\n onOpenChange={setShowEditDialog}\n onSubmit={(params) => {\n handlePropertyChange(...params);\n setEditingKey(undefined);\n setEditingProperty(undefined);\n setShowEditDialog(false);\n }}\n />\n )}\n\n {/* Delete confirmation dialog */}\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Are you sure?</AlertDialogTitle>\n <AlertDialogDescription>\n This action cannot be undone. This will permanently delete the\n property\n {deleteKey ? ` \"${deleteKey}\"` : \"\"} from the schema.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={handleCancelDelete}>\n Cancel\n </AlertDialogCancel>\n <AlertDialogAction onClick={handleConfirmDelete}>\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n};\n"],"names":["SchemaBuilder","props","showPropertyDialog","setShowPropertyDialog","useState","showEditDialog","setShowEditDialog","showDeleteDialog","setShowDeleteDialog","deleteKey","setDeleteKey","editingKey","setEditingKey","editingProperty","setEditingProperty","schemaValidationError","setSchemaValidationError","usePluginSystem","getCurrentSchema","setPath","path","schema","handleAddProperty","handlePropertyChange","handleKeyChange","handleDeleteProperty","setSchema","isPropertyRequired","handleDuplicateProperty","useSchema","getConstraintDefinitionsForType","useConstraints","useEffect","validateSchema","clone","error","Ajv","currentSchema","handleNavigateToProperty","name","handleNavigateUp","handleEditProperty","key","property","handleInitiateDelete","handleConfirmDelete","handleCancelDelete","handleDuplicate","result","onAddProperty","vals","PropertyComponent","renderProperty","jsx","jsxs","DebouncedInput","newVal","Switch","checked","Label","Select","value","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","Trash2","Copy","renderEditButton","renderNavigateButton","renderArrayItemsConfig","items","itemType","newItems","availableConstraints","hasEnum","Bolt","ChevronRight","renderNavigation","NavigationComponent","cn","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","item","index","Fragment","BreadcrumbSeparator","renderAddPropertyButton","AddPropertyButtonComponent","Plus","Alert","AlertTitle","AlertDescription","AddPropertyDialog","EditPropertyDialog","params","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es3.js","sources":["../src/packages/builder/schema-builder.tsx"],"sourcesContent":["import { useEffect, useState, Fragment } from \"react\";\nimport { PropertyAddError, PropertyAddSuccess, useSchema } from \"./context\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { Bolt, ChevronRight, Copy, Plus, Trash2 } from \"lucide-react\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { Label } from \"@/components/ui/label\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport { clone } from \"remeda\";\nimport {\n BaseJSONSchemaPlugin,\n useConstraints,\n usePluginSystem,\n} from \"@/packages/constraints/context\";\nimport { EditPropertyDialog } from \"./edit-dialog\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { validateSchema } from \"./utils\";\nimport Ajv from \"ajv\";\nimport { DebouncedInput } from \"@/components/depounced-input\";\nimport { AddPropertyDialog, type AddPropertyDialogProps } from \"./add-dialog\";\nimport { cn } from \"@/lib/utils\";\n\n// PropertyComponent type definition for custom property components\nexport interface PropertyComponentProps {\n property: {\n key: string;\n schema: JSONSchema7;\n isRequired: boolean;\n };\n onPropertyChange: (key: string, changes: Partial<JSONSchema7>) => void;\n onKeyChange: (oldKey: string, newKey: string) => void;\n onDelete: (key: string) => void;\n onDuplicate?: (key: string) => void;\n onNavigate?: (key: string) => void;\n}\n\n// NavigationProps for custom navigation component\nexport interface NavigationProps {\n currentPath: string[];\n onNavigateUp: () => void;\n onNavigateTo: (newPath: string[]) => void;\n isRootPath: boolean;\n}\n\n// AddPropertyButtonProps for custom add property button\nexport interface AddPropertyButtonProps {\n onClick: () => void;\n}\n\ninterface SchemaBuilderProps {\n /** The schema to edit */\n initialSchema?: JSONSchema7;\n /** Constraint plugins to use */\n plugins?: BaseJSONSchemaPlugin[];\n /** Custom component to render properties */\n propertyComponent?: React.ComponentType<PropertyComponentProps>;\n /** Called when the schema changes */\n onSchemaChange?: (schema: JSONSchema7) => void;\n /** Called when a property is successfully added */\n onPropertyAddSuccess?: (props: PropertyAddSuccess) => void;\n /** Called when there's an error adding a property */\n onPropertyAddError?: (props: PropertyAddError) => void;\n /** Called when there's an error changing a property */\n onPropertyChangeError?: (prop: Error) => void;\n /** Called when a property is successfully changed */\n onPropertyChangeSuccess?: () => void;\n /** Class name for the navigation bar back button */\n backButtonClassName?: string;\n /** Class name for the properties list container */\n propertiesListClassName?: string;\n /** Class name for the add property button */\n addPropertyButtonClassName?: string;\n /** Custom navigation component */\n navigationComponent?: React.ComponentType<NavigationProps>;\n /** Custom add property button component */\n addPropertyButtonComponent?: React.ComponentType<AddPropertyButtonProps>;\n}\n\nexport const SchemaBuilder = (props: SchemaBuilderProps) => {\n // State\n const [showPropertyDialog, setShowPropertyDialog] = useState(false);\n const [showEditDialog, setShowEditDialog] = useState(false);\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [deleteKey, setDeleteKey] = useState<string | undefined>();\n const [editingKey, setEditingKey] = useState<string | undefined>();\n const [editingProperty, setEditingProperty] = useState<\n JSONSchema7 | undefined\n >();\n const [schemaValidationError, setSchemaValidationError] = useState<\n string | null\n >(null);\n\n // Initialize the plugin system\n usePluginSystem(props.plugins ?? []);\n\n // Get schema context\n const {\n getCurrentSchema,\n setPath,\n path,\n handleAddProperty,\n handlePropertyChange,\n handleKeyChange,\n handleDeleteProperty,\n setSchema,\n isPropertyRequired,\n handleDuplicateProperty,\n } = useSchema({ onSchemaChange: props.onSchemaChange });\n\n // Get constraints context\n const { getConstraintDefinitionsForType } = useConstraints();\n\n // Set schema from props\n useEffect(() => {\n if (props.initialSchema) {\n try {\n // Validate the schema before setting it\n validateSchema(props.initialSchema);\n setSchema(clone(props.initialSchema));\n setSchemaValidationError(null);\n } catch (error) {\n if (error instanceof Error) {\n setSchemaValidationError(error.message);\n } else if (error instanceof Ajv.ValidationError) {\n setSchemaValidationError(`Schema validation error: ${error.message}`);\n } else {\n setSchemaValidationError(\"Unknown schema validation error\");\n }\n }\n }\n }, [props.initialSchema]);\n\n const currentSchema = getCurrentSchema();\n\n // Navigation handlers\n const handleNavigateToProperty = (name: string) => {\n setPath([...path, name]);\n };\n\n const handleNavigateUp = () => {\n setPath(path.slice(0, -1));\n };\n\n // Property management handlers\n const handleEditProperty = (key: string, property: JSONSchema7) => {\n setEditingKey(key);\n setEditingProperty(property);\n setShowEditDialog(true);\n };\n\n const handleInitiateDelete = (key: string) => {\n setDeleteKey(key);\n setShowDeleteDialog(true);\n };\n\n const handleConfirmDelete = () => {\n if (deleteKey) {\n handleDeleteProperty(deleteKey);\n setDeleteKey(undefined);\n }\n setShowDeleteDialog(false);\n };\n\n const handleCancelDelete = () => {\n setDeleteKey(undefined);\n setShowDeleteDialog(false);\n };\n\n const handleDuplicate = (key: string) => {\n const result = handleDuplicateProperty(key);\n\n // Notify if needed\n if (result?.status === \"error\") {\n props.onPropertyAddError?.(result);\n } else if (result?.status === \"success\") {\n props.onPropertyAddSuccess?.(result);\n }\n };\n\n const onAddProperty: AddPropertyDialogProps[\"onSubmit\"] = (...vals) => {\n const result = handleAddProperty(...vals);\n\n if (result.status === \"error\") {\n props.onPropertyAddError?.(result);\n } else if (result.status === \"success\") {\n props.onPropertyAddSuccess?.(result);\n }\n setShowPropertyDialog(false);\n };\n\n // Custom property component or default renderer\n const PropertyComponent = props.propertyComponent;\n\n const renderProperty = (key: string, property: JSONSchema7) => {\n if (PropertyComponent) {\n return (\n <PropertyComponent\n key={key}\n property={{\n key,\n schema: property,\n isRequired: isPropertyRequired(key),\n }}\n onPropertyChange={handlePropertyChange}\n onKeyChange={handleKeyChange}\n onDelete={handleInitiateDelete}\n onDuplicate={handleDuplicate}\n onNavigate={\n property.type === \"object\" ||\n (property.type === \"array\" &&\n typeof property.items === \"object\" &&\n (property.items as JSONSchema7).type === \"object\")\n ? handleNavigateToProperty\n : undefined\n }\n />\n );\n }\n\n // Default property renderer\n return (\n <div\n key={key}\n className=\"flex flex-col md:grid grid-cols-(--my-autofit-grid) gap-4 md:items-center border p-2 rounded-md mb-2\"\n >\n <div className=\"\">\n <DebouncedInput\n value={key}\n onDebounce={(newVal) => handleKeyChange(key, newVal)}\n placeholder=\"Property Key\"\n aria-label={`Property key for ${key}`}\n delay={500}\n />\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Switch\n checked={isPropertyRequired(key)}\n onCheckedChange={(checked) =>\n handlePropertyChange(key, { isRequired: checked })\n }\n aria-label=\"Required\"\n />\n <Label htmlFor={`required-${key}`}>Required</Label>\n </div>\n\n <div className=\"\">\n <Select\n value={\n typeof property === \"object\" && !Array.isArray(property.type)\n ? property.type\n : undefined\n }\n onValueChange={(value) =>\n handlePropertyChange(key, {\n type: value as JSONSchema7[\"type\"],\n })\n }\n aria-label=\"Type\"\n >\n <SelectTrigger className=\"w-full\" aria-label=\"Select type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={\"string\" satisfies JSONSchema7[\"type\"]}>\n string\n </SelectItem>\n <SelectItem value={\"number\" satisfies JSONSchema7[\"type\"]}>\n number\n </SelectItem>\n <SelectItem value={\"integer\" satisfies JSONSchema7[\"type\"]}>\n integer\n </SelectItem>\n <SelectItem value={\"boolean\" satisfies JSONSchema7[\"type\"]}>\n boolean\n </SelectItem>\n <SelectItem value={\"object\" satisfies JSONSchema7[\"type\"]}>\n object\n </SelectItem>\n <SelectItem value={\"array\" satisfies JSONSchema7[\"type\"]}>\n array\n </SelectItem>\n <SelectItem value={\"null\" satisfies JSONSchema7[\"type\"]}>\n null\n </SelectItem>\n <SelectItem value={\"enum\"}>enum</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"\">\n <DebouncedInput\n value={typeof property === \"object\" ? property.title : undefined}\n onDebounce={(newVal) =>\n handlePropertyChange(key, { title: newVal })\n }\n placeholder=\"Title\"\n />\n </div>\n\n <div className=\"\">\n <DebouncedInput\n value={\n typeof property === \"object\" ? property.description : undefined\n }\n onDebounce={(newVal) =>\n handlePropertyChange(key, { description: newVal })\n }\n placeholder=\"Description\"\n />\n </div>\n\n <div className=\"order-last md:order-none flex gap-2\">\n {/* Delete button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleInitiateDelete(key)}\n aria-label=\"Delete\"\n className=\"block!\"\n >\n <Trash2 size={16} className=\"text-destructive\" />\n </Button>\n\n {/* Duplicate button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleDuplicate(key)}\n aria-label=\"Duplicate\"\n className=\"block!\"\n >\n <Copy size={16} />\n </Button>\n\n {/* Edit button if applicable */}\n {renderEditButton(key, property)}\n\n {/* Navigate button for objects/array items */}\n {renderNavigateButton(key, property)}\n </div>\n\n {/* Render array items configuration if needed */}\n {renderArrayItemsConfig(key, property)}\n </div>\n );\n };\n\n // Helper to render array items configuration\n const renderArrayItemsConfig = (key: string, property: JSONSchema7) => {\n if (typeof property !== \"object\" || property.type !== \"array\") {\n return null;\n }\n\n const items = property.items;\n const itemType =\n !Array.isArray(items) &&\n typeof items === \"object\" &&\n typeof items.type === \"string\"\n ? items?.type\n : \"string\";\n\n return (\n <div className=\"col-span-full flex items-center gap-4 pl-8 mt-2 bg-gray-50 p-2 rounded-md\">\n <Label>Items of type:</Label>\n <Select\n value={itemType as string}\n onValueChange={(value) => {\n const newItems: JSONSchema7 = {\n ...(typeof items === \"object\" ? items : {}),\n type: value as JSONSchema7[\"type\"],\n };\n\n if (value === \"object\") {\n // Initialize empty properties for object type\n newItems.properties = newItems.properties ?? {};\n }\n\n handlePropertyChange(key, { items: newItems });\n }}\n >\n <SelectTrigger\n className=\"w-[200px]\"\n aria-label=\"Select items of type\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={\"string\" satisfies JSONSchema7[\"type\"]}>\n string\n </SelectItem>\n <SelectItem value={\"number\" satisfies JSONSchema7[\"type\"]}>\n number\n </SelectItem>\n <SelectItem value={\"integer\" satisfies JSONSchema7[\"type\"]}>\n integer\n </SelectItem>\n <SelectItem value={\"boolean\" satisfies JSONSchema7[\"type\"]}>\n boolean\n </SelectItem>\n <SelectItem value={\"object\" satisfies JSONSchema7[\"type\"]}>\n object\n </SelectItem>\n <SelectItem value={\"array\" satisfies JSONSchema7[\"type\"]}>\n array\n </SelectItem>\n <SelectItem value={\"null\" satisfies JSONSchema7[\"type\"]}>\n null\n </SelectItem>\n </SelectContent>\n </Select>\n\n {/* Configure object button for array items of type object */}\n {renderNavigateButton(key, items)}\n </div>\n );\n };\n\n // Helper to render the edit constraint button when needed\n const renderEditButton = (key: string, property: JSONSchema7) => {\n if (typeof property !== \"object\") return null;\n\n // Check for constraints\n const availableConstraints = getConstraintDefinitionsForType(\n typeof property.type === \"string\" ? property.type : \"\",\n );\n\n // Check for enum\n const hasEnum = Array.isArray(property?.enum);\n\n if (availableConstraints.length || hasEnum) {\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleEditProperty(key, property)}\n aria-label=\"Edit constraints\"\n >\n <Bolt size={16} />\n </Button>\n );\n }\n\n return null;\n };\n\n const renderNavigateButton = (key: string, items: JSONSchema7[\"items\"]) => {\n if (\n !Array.isArray(items) &&\n typeof items === \"object\" &&\n items?.type === \"object\"\n ) {\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleNavigateToProperty(key)}\n aria-label=\"Navigate\"\n >\n <span className=\"sr-only\">Navigate</span>\n <ChevronRight size={16} />\n </Button>\n );\n }\n\n return null;\n };\n\n // Render navigation component\n const renderNavigation = () => {\n const NavigationComponent = props.navigationComponent;\n\n if (NavigationComponent) {\n return (\n <NavigationComponent\n currentPath={path}\n onNavigateUp={handleNavigateUp}\n onNavigateTo={setPath}\n isRootPath={path.length === 0}\n />\n );\n }\n\n return (\n <div className=\"flex items-center space-x-4\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleNavigateUp}\n disabled={path.length === 0}\n className={cn(props.backButtonClassName)}\n >\n Back\n </Button>\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#\" onClick={() => setPath([])}>\n Root\n </BreadcrumbLink>\n </BreadcrumbItem>\n {path.map((item, index) => (\n <Fragment key={`path-${index}`}>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink\n href=\"#\"\n onClick={() => setPath(path.slice(0, index + 1))}\n >\n {item}\n </BreadcrumbLink>\n </BreadcrumbItem>\n </Fragment>\n ))}\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n );\n };\n\n // Render add property button\n const renderAddPropertyButton = () => {\n const AddPropertyButtonComponent = props.addPropertyButtonComponent;\n\n if (AddPropertyButtonComponent) {\n return (\n <AddPropertyButtonComponent\n onClick={() => setShowPropertyDialog(true)}\n />\n );\n }\n\n return (\n <Button\n type=\"button\"\n className={cn(\"self-center\", props.addPropertyButtonClassName)}\n onClick={() => {\n setShowPropertyDialog(true);\n }}\n >\n <Plus className=\"h-4 w-4 mr-2\" />\n Add Property\n </Button>\n );\n };\n\n return (\n <div>\n {/* Schema validation error */}\n {schemaValidationError && (\n <Alert variant=\"destructive\">\n <AlertTitle>Schema Error</AlertTitle>\n <AlertDescription>{schemaValidationError}</AlertDescription>\n </Alert>\n )}\n\n {/* Navigation bar */}\n {renderNavigation()}\n\n {/* Properties list */}\n <div\n className={cn(\"mt-6 overflow-x-hidden\", props.propertiesListClassName)}\n >\n {Object.entries(currentSchema.properties ?? {}).map(\n ([key, property]) => {\n if (typeof property === \"boolean\") {\n // We don't support editing boolean properties\n return null;\n }\n\n return renderProperty(key, property);\n },\n )}\n </div>\n\n {/* Add property button */}\n {renderAddPropertyButton()}\n\n {/* Add property dialog */}\n <AddPropertyDialog\n open={showPropertyDialog}\n onOpenChange={setShowPropertyDialog}\n onSubmit={onAddProperty}\n />\n\n {/* Edit property dialog */}\n {editingKey && editingProperty && (\n <EditPropertyDialog\n propertyKey={editingKey}\n property={editingProperty}\n open={showEditDialog}\n onOpenChange={setShowEditDialog}\n onSubmit={(params) => {\n handlePropertyChange(...params);\n setEditingKey(undefined);\n setEditingProperty(undefined);\n setShowEditDialog(false);\n }}\n />\n )}\n\n {/* Delete confirmation dialog */}\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Are you sure?</AlertDialogTitle>\n <AlertDialogDescription>\n This action cannot be undone. This will permanently delete the\n property\n {deleteKey ? ` \"${deleteKey}\"` : \"\"} from the schema.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={handleCancelDelete}>\n Cancel\n </AlertDialogCancel>\n <AlertDialogAction onClick={handleConfirmDelete}>\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n};\n"],"names":["SchemaBuilder","props","showPropertyDialog","setShowPropertyDialog","useState","showEditDialog","setShowEditDialog","showDeleteDialog","setShowDeleteDialog","deleteKey","setDeleteKey","editingKey","setEditingKey","editingProperty","setEditingProperty","schemaValidationError","setSchemaValidationError","usePluginSystem","getCurrentSchema","setPath","path","handleAddProperty","handlePropertyChange","handleKeyChange","handleDeleteProperty","setSchema","isPropertyRequired","handleDuplicateProperty","useSchema","getConstraintDefinitionsForType","useConstraints","useEffect","validateSchema","clone","error","Ajv","currentSchema","handleNavigateToProperty","name","handleNavigateUp","handleEditProperty","key","property","handleInitiateDelete","handleConfirmDelete","handleCancelDelete","handleDuplicate","result","onAddProperty","vals","PropertyComponent","renderProperty","jsx","jsxs","DebouncedInput","newVal","Switch","checked","Label","Select","value","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","Trash2","Copy","renderEditButton","renderNavigateButton","renderArrayItemsConfig","items","itemType","newItems","availableConstraints","hasEnum","Bolt","ChevronRight","renderNavigation","NavigationComponent","cn","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","item","index","Fragment","BreadcrumbSeparator","renderAddPropertyButton","AddPropertyButtonComponent","Plus","Alert","AlertTitle","AlertDescription","AddPropertyDialog","EditPropertyDialog","params","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"mappings":"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"}
|
package/dist/index.es30.js
CHANGED