@websublime/vite-plugin-open-api-devtools 0.8.5 → 0.9.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/ModelsPage-OOYQ3USo.js +798 -0
  2. package/dist/ModelsPage-OOYQ3USo.js.map +1 -0
  3. package/dist/{RoutesPage-BCKS0kdj.js → RoutesPage-BgsspZkr.js} +191 -191
  4. package/dist/RoutesPage-BgsspZkr.js.map +1 -0
  5. package/dist/SimulatorPage-g9fGUP4F.js +436 -0
  6. package/dist/SimulatorPage-g9fGUP4F.js.map +1 -0
  7. package/dist/TimelinePage-D_GD3OjL.js +861 -0
  8. package/dist/TimelinePage-D_GD3OjL.js.map +1 -0
  9. package/dist/{check-BZ_jBwd4.js → check-B4mNtdMg.js} +2 -2
  10. package/dist/{check-BZ_jBwd4.js.map → check-B4mNtdMg.js.map} +1 -1
  11. package/dist/devtools.css +1 -1
  12. package/dist/devtools.js +1 -1
  13. package/dist/devtools.umd.cjs +3 -3
  14. package/dist/devtools.umd.cjs.map +1 -1
  15. package/dist/{format-Dq-zmlAN.js → format-Dj37a-xS.js} +2 -2
  16. package/dist/{format-Dq-zmlAN.js.map → format-Dj37a-xS.js.map} +1 -1
  17. package/dist/main-CWgkFc8w.js +620 -0
  18. package/dist/main-CWgkFc8w.js.map +1 -0
  19. package/dist/registry-SW4SCwV5.js +216 -0
  20. package/dist/registry-SW4SCwV5.js.map +1 -0
  21. package/dist/spa/assets/{ModelsPage-8zCKSqIw.css → ModelsPage-CrseRvBH.css} +1 -1
  22. package/dist/spa/assets/ModelsPage-CxzHlUKB.js +4 -0
  23. package/dist/spa/assets/ModelsPage-CxzHlUKB.js.map +1 -0
  24. package/dist/spa/assets/RoutesPage-BchriFi3.js +2 -0
  25. package/dist/spa/assets/RoutesPage-BchriFi3.js.map +1 -0
  26. package/dist/spa/assets/{RoutesPage-BVXzvJ2S.css → RoutesPage-Wp_sf4Io.css} +1 -1
  27. package/dist/spa/assets/SimulatorPage-CHGPhn5Y.js +2 -0
  28. package/dist/spa/assets/SimulatorPage-CHGPhn5Y.js.map +1 -0
  29. package/dist/spa/assets/SimulatorPage-p6R5JJTE.css +1 -0
  30. package/dist/spa/assets/{TimelinePage-BDyp8kvu.css → TimelinePage-ED20f46Y.css} +1 -1
  31. package/dist/spa/assets/TimelinePage-zBBJCjLX.js +2 -0
  32. package/dist/spa/assets/TimelinePage-zBBJCjLX.js.map +1 -0
  33. package/dist/spa/assets/check-CDp1nxJT.js +2 -0
  34. package/dist/spa/assets/{check-DaD3RpI4.js.map → check-CDp1nxJT.js.map} +1 -1
  35. package/dist/spa/assets/{format-er1_KlP8.js → format-DA0n5kox.js} +2 -2
  36. package/dist/spa/assets/{format-er1_KlP8.js.map → format-DA0n5kox.js.map} +1 -1
  37. package/dist/spa/assets/index-Ddu0x8qb.js +3 -0
  38. package/dist/spa/assets/index-Ddu0x8qb.js.map +1 -0
  39. package/dist/spa/assets/registry-CKvK0Ln5.js +2 -0
  40. package/dist/spa/assets/registry-CKvK0Ln5.js.map +1 -0
  41. package/dist/spa/assets/{trash-2-BhRxw6RN.js → trash-2-B1UuFJDm.js} +2 -2
  42. package/dist/spa/assets/{trash-2-BhRxw6RN.js.map → trash-2-B1UuFJDm.js.map} +1 -1
  43. package/dist/spa/assets/{triangle-alert-QXcMwGDR.js → triangle-alert-ITT7135L.js} +2 -2
  44. package/dist/spa/assets/{triangle-alert-QXcMwGDR.js.map → triangle-alert-ITT7135L.js.map} +1 -1
  45. package/dist/spa/assets/{vue-vendor-Bkktf9yg.js → vue-vendor-D62nux6V.js} +2 -2
  46. package/dist/spa/assets/{vue-vendor-Bkktf9yg.js.map → vue-vendor-D62nux6V.js.map} +1 -1
  47. package/dist/spa/assets/x-YOimnrsL.js +2 -0
  48. package/dist/spa/assets/{x-DGt4DUCk.js.map → x-YOimnrsL.js.map} +1 -1
  49. package/dist/spa/index.html +2 -2
  50. package/dist/{trash-2-D9Av3Lfp.js → trash-2-CDLzu4_Y.js} +2 -2
  51. package/dist/{trash-2-D9Av3Lfp.js.map → trash-2-CDLzu4_Y.js.map} +1 -1
  52. package/dist/{triangle-alert-6Spra6HA.js → triangle-alert-BP3-t-po.js} +2 -2
  53. package/dist/{triangle-alert-6Spra6HA.js.map → triangle-alert-BP3-t-po.js.map} +1 -1
  54. package/dist/{x-DI-fqJ3g.js → x-BZzigrBR.js} +2 -2
  55. package/dist/{x-DI-fqJ3g.js.map → x-BZzigrBR.js.map} +1 -1
  56. package/package.json +13 -12
  57. package/dist/ModelsPage-DxcKgz3y.js +0 -757
  58. package/dist/ModelsPage-DxcKgz3y.js.map +0 -1
  59. package/dist/RoutesPage-BCKS0kdj.js.map +0 -1
  60. package/dist/SimulatorPage-BlbxLDdf.js +0 -430
  61. package/dist/SimulatorPage-BlbxLDdf.js.map +0 -1
  62. package/dist/TimelinePage-BhtcWy3o.js +0 -849
  63. package/dist/TimelinePage-BhtcWy3o.js.map +0 -1
  64. package/dist/main-DmyM_bX3.js +0 -537
  65. package/dist/main-DmyM_bX3.js.map +0 -1
  66. package/dist/registry-BQhccWMq.js +0 -153
  67. package/dist/registry-BQhccWMq.js.map +0 -1
  68. package/dist/spa/assets/ModelsPage-Bd7YM0_p.js +0 -4
  69. package/dist/spa/assets/ModelsPage-Bd7YM0_p.js.map +0 -1
  70. package/dist/spa/assets/RoutesPage-YQcTov5t.js +0 -2
  71. package/dist/spa/assets/RoutesPage-YQcTov5t.js.map +0 -1
  72. package/dist/spa/assets/SimulatorPage-DGEq_rzM.css +0 -1
  73. package/dist/spa/assets/SimulatorPage-DPxecZGS.js +0 -2
  74. package/dist/spa/assets/SimulatorPage-DPxecZGS.js.map +0 -1
  75. package/dist/spa/assets/TimelinePage-CbWvtFc_.js +0 -2
  76. package/dist/spa/assets/TimelinePage-CbWvtFc_.js.map +0 -1
  77. package/dist/spa/assets/check-DaD3RpI4.js +0 -2
  78. package/dist/spa/assets/index-x38XzU3c.js +0 -3
  79. package/dist/spa/assets/index-x38XzU3c.js.map +0 -1
  80. package/dist/spa/assets/registry-DjJcdO1T.js +0 -2
  81. package/dist/spa/assets/registry-DjJcdO1T.js.map +0 -1
  82. package/dist/spa/assets/x-DGt4DUCk.js +0 -2
@@ -0,0 +1,798 @@
1
+ import { ref as I, computed as E, toRaw as ce, defineComponent as ee, createElementBlock as _, openBlock as p, createCommentVNode as F, createVNode as T, createElementVNode as t, unref as i, Fragment as J, renderList as P, normalizeClass as Y, toDisplayString as k, watch as Q, normalizeStyle as ue, reactive as de, onMounted as fe, nextTick as me, createBlock as ve, Teleport as he, withModifiers as pe, createTextVNode as ae } from "vue";
2
+ import { c as te, u as le, D as Z, _ as se, a as ye } from "./main-CWgkFc8w.js";
3
+ import { C as _e } from "./check-B4mNtdMg.js";
4
+ import { defineStore as ge } from "pinia";
5
+ import { X as be } from "./x-BZzigrBR.js";
6
+ import { T as Se } from "./trash-2-CDLzu4_Y.js";
7
+ const we = te("circle-alert", [
8
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
9
+ ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
10
+ ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
11
+ ]);
12
+ const Ce = te("refresh-cw", [
13
+ ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
14
+ ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
15
+ ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
16
+ ["path", { d: "M8 16H3v5", key: "1cv678" }]
17
+ ]);
18
+ const ke = te("save", [
19
+ [
20
+ "path",
21
+ {
22
+ d: "M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",
23
+ key: "1c8476"
24
+ }
25
+ ],
26
+ ["path", { d: "M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7", key: "1ydtos" }],
27
+ ["path", { d: "M7 3v4a1 1 0 0 0 1 1h7", key: "t51u73" }]
28
+ ]);
29
+ function q(n) {
30
+ try {
31
+ return structuredClone(ce(n));
32
+ } catch {
33
+ return JSON.parse(JSON.stringify(n));
34
+ }
35
+ }
36
+ function W(n) {
37
+ return n ? `/_api/${encodeURIComponent(n)}` : "/_api";
38
+ }
39
+ const Ie = ge("models", () => {
40
+ const n = le(), e = I(/* @__PURE__ */ new Map()), o = I(null), l = I(null), f = I([]), c = I([]), u = I(!1), m = I(null);
41
+ function v(a) {
42
+ if (!o.value || !l.value) return;
43
+ const d = e.value.get(l.value);
44
+ if (!d) return;
45
+ const C = d.findIndex((N) => N.name === o.value);
46
+ C !== -1 && (d[C].count = a);
47
+ }
48
+ const y = E(() => {
49
+ const a = n.activeSpecFilter;
50
+ if (a)
51
+ return e.value.get(a) ?? [];
52
+ const d = [];
53
+ for (const [, C] of e.value)
54
+ d.push(...C);
55
+ return d;
56
+ }), w = E(() => {
57
+ if (!o.value || !l.value) return null;
58
+ const a = e.value.get(l.value);
59
+ return a ? a.find((d) => d.name === o.value) ?? null : null;
60
+ }), g = I(!1), j = E(() => g.value), R = E(() => y.value.length), z = E(() => y.value.reduce((a, d) => a + d.count, 0));
61
+ async function D(a) {
62
+ u.value = !0, m.value = null;
63
+ try {
64
+ const d = await fetch(`${W(a)}/store`);
65
+ if (!d.ok)
66
+ throw new Error(`Failed to fetch schemas: ${d.statusText}`);
67
+ const K = ((await d.json()).schemas ?? []).map((B) => ({ ...B, specId: a }));
68
+ e.value.set(a, K);
69
+ } catch (d) {
70
+ m.value = d instanceof Error ? d.message : "Failed to fetch schemas", console.error("[ModelsStore] Error fetching schemas:", d);
71
+ } finally {
72
+ u.value = !1;
73
+ }
74
+ }
75
+ async function U(a, d) {
76
+ o.value === d && l.value === a || (o.value = d, l.value = a, await h(a, d));
77
+ }
78
+ async function h(a, d) {
79
+ u.value = !0, m.value = null;
80
+ try {
81
+ const C = await fetch(
82
+ `${W(a)}/store/${encodeURIComponent(d)}`
83
+ );
84
+ if (!C.ok)
85
+ throw new Error(`Failed to fetch schema data: ${C.statusText}`);
86
+ const N = await C.json(), K = N.items ?? [];
87
+ f.value = q(K), c.value = q(K), g.value = !1;
88
+ const B = e.value.get(a);
89
+ if (B) {
90
+ const ne = B.findIndex((ie) => ie.name === d);
91
+ ne !== -1 && (B[ne].count = N.count);
92
+ }
93
+ } catch (C) {
94
+ m.value = C instanceof Error ? C.message : "Failed to fetch schema data", console.error("[ModelsStore] Error fetching schema data:", C);
95
+ } finally {
96
+ u.value = !1;
97
+ }
98
+ }
99
+ function b(a) {
100
+ if (!Array.isArray(a)) {
101
+ m.value = "Invalid data: Expected an array of items", console.error("[ModelsStore] updateItems received non-array value:", typeof a);
102
+ return;
103
+ }
104
+ f.value = a, m.value = null, g.value = !0;
105
+ }
106
+ async function r() {
107
+ if (!o.value || !l.value)
108
+ return m.value = "No schema selected", !1;
109
+ u.value = !0, m.value = null;
110
+ try {
111
+ const a = await fetch(
112
+ `${W(l.value)}/store/${encodeURIComponent(o.value)}`,
113
+ {
114
+ method: "POST",
115
+ headers: {
116
+ "Content-Type": "application/json"
117
+ },
118
+ body: JSON.stringify(f.value)
119
+ }
120
+ );
121
+ if (!a.ok) {
122
+ const C = await a.json().catch(() => ({}));
123
+ throw new Error(C.error || `Failed to save items: ${a.statusText}`);
124
+ }
125
+ const d = await a.json();
126
+ return c.value = q(f.value), g.value = !1, v(d.created ?? f.value.length), !0;
127
+ } catch (a) {
128
+ return m.value = a instanceof Error ? a.message : "Failed to save items", console.error("[ModelsStore] Error saving items:", a), !1;
129
+ } finally {
130
+ u.value = !1;
131
+ }
132
+ }
133
+ async function s() {
134
+ if (!o.value || !l.value)
135
+ return m.value = "No schema selected", !1;
136
+ u.value = !0, m.value = null;
137
+ try {
138
+ const a = await fetch(
139
+ `${W(l.value)}/store/${encodeURIComponent(o.value)}`,
140
+ {
141
+ method: "DELETE"
142
+ }
143
+ );
144
+ if (!a.ok)
145
+ throw new Error(`Failed to clear schema: ${a.statusText}`);
146
+ return f.value = [], c.value = [], g.value = !1, v(0), !0;
147
+ } catch (a) {
148
+ return m.value = a instanceof Error ? a.message : "Failed to clear schema", console.error("[ModelsStore] Error clearing schema:", a), !1;
149
+ } finally {
150
+ u.value = !1;
151
+ }
152
+ }
153
+ function S() {
154
+ f.value = q(c.value), g.value = !1;
155
+ }
156
+ async function M() {
157
+ o.value && l.value ? await h(l.value, o.value) : l.value && await D(l.value);
158
+ }
159
+ function V() {
160
+ e.value.clear(), o.value = null, l.value = null, f.value = [], c.value = [], u.value = !1, m.value = null, g.value = !1;
161
+ }
162
+ function O(a) {
163
+ const d = e.value.get(a.specId);
164
+ if (d) {
165
+ const C = d.findIndex((N) => N.name === a.schema);
166
+ C !== -1 && (d[C].count = a.count);
167
+ }
168
+ o.value === a.schema && l.value === a.specId && (j.value ? console.warn(
169
+ `[ModelsStore] Skipping auto-refresh for schema "${a.schema}" - unsaved changes exist`
170
+ ) : h(a.specId, a.schema));
171
+ }
172
+ function H(a) {
173
+ a.success && (D(a.specId), o.value && l.value === a.specId && (j.value ? console.warn(
174
+ `[ModelsStore] Skipping auto-refresh after reseed for schema "${o.value}" - unsaved changes exist`
175
+ ) : h(a.specId, o.value)));
176
+ }
177
+ return {
178
+ // State
179
+ schemasBySpec: e,
180
+ schemas: y,
181
+ selectedSchema: o,
182
+ selectedSpecId: l,
183
+ currentItems: f,
184
+ loading: u,
185
+ error: m,
186
+ // Computed
187
+ currentSchema: w,
188
+ isDirty: j,
189
+ schemaCount: R,
190
+ totalItems: z,
191
+ // Actions
192
+ fetchSchemas: D,
193
+ selectSchemaByName: U,
194
+ fetchSchemaData: h,
195
+ updateItems: b,
196
+ saveItems: r,
197
+ clearSchema: s,
198
+ discardChanges: S,
199
+ refresh: M,
200
+ reset: V,
201
+ handleStoreUpdate: O,
202
+ handleReseedComplete: H
203
+ };
204
+ });
205
+ function G(n, e) {
206
+ return n.length <= e ? n : `${n.slice(0, e)}…`;
207
+ }
208
+ function xe(n) {
209
+ return n == null ? "--" : typeof n == "string" ? G(n, 50) : typeof n == "number" || typeof n == "boolean" ? String(n) : Array.isArray(n) || typeof n == "object" ? G(JSON.stringify(n), 50) : String(n);
210
+ }
211
+ function oe(n, e) {
212
+ if (!(typeof n != "object" || n === null))
213
+ return n[e];
214
+ }
215
+ function $e(n, e, o) {
216
+ const l = oe(n, e);
217
+ return typeof l == "string" || typeof l == "number" ? l : o;
218
+ }
219
+ function Te(n, e) {
220
+ if (n.length === 0) return [];
221
+ const o = /* @__PURE__ */ new Set();
222
+ for (const f of n)
223
+ if (typeof f == "object" && f !== null)
224
+ for (const c of Object.keys(f))
225
+ o.add(c);
226
+ if (o.size === 0) return [];
227
+ const l = Array.from(o);
228
+ return l.includes(e) ? [e, ...l.filter((f) => f !== e)] : l;
229
+ }
230
+ const Ee = { class: "data-table" }, je = {
231
+ key: 0,
232
+ class: "data-table__empty"
233
+ }, De = {
234
+ key: 1,
235
+ class: "data-table__container"
236
+ }, Me = { class: "data-table__table" }, Ne = ["onClick"], Fe = { class: "data-table__row-num" }, Je = {
237
+ key: 2,
238
+ class: "data-table__footer"
239
+ }, Re = { class: "data-table__info" }, Ve = { class: "data-table__info" }, Oe = /* @__PURE__ */ ee({
240
+ __name: "DataTable",
241
+ props: {
242
+ items: {},
243
+ idField: {},
244
+ selectedIndex: { default: -1 }
245
+ },
246
+ emits: ["select"],
247
+ setup(n, { emit: e }) {
248
+ const o = n, l = e, f = E(() => Te(o.items, o.idField));
249
+ function c(m) {
250
+ l("select", m);
251
+ }
252
+ function u(m, v) {
253
+ return $e(m, o.idField, v);
254
+ }
255
+ return (m, v) => (p(), _("div", Ee, [
256
+ n.items.length === 0 ? (p(), _("div", je, [
257
+ T(i(Z), {
258
+ size: 32,
259
+ class: "data-table__empty-icon"
260
+ }),
261
+ v[0] || (v[0] = t("span", null, "No items", -1))
262
+ ])) : (p(), _("div", De, [
263
+ t("table", Me, [
264
+ t("thead", null, [
265
+ t("tr", null, [
266
+ v[1] || (v[1] = t("th", { class: "data-table__row-num" }, "#", -1)),
267
+ (p(!0), _(J, null, P(f.value, (y) => (p(), _("th", {
268
+ key: y,
269
+ class: Y(["data-table__header", { "data-table__header--id": y === n.idField }])
270
+ }, k(y), 3))), 128))
271
+ ])
272
+ ]),
273
+ t("tbody", null, [
274
+ (p(!0), _(J, null, P(n.items, (y, w) => (p(), _("tr", {
275
+ key: u(y, w),
276
+ class: Y(["data-table__row", { "data-table__row--selected": w === n.selectedIndex }]),
277
+ onClick: (g) => c(w)
278
+ }, [
279
+ t("td", Fe, k(w + 1), 1),
280
+ (p(!0), _(J, null, P(f.value, (g) => (p(), _("td", {
281
+ key: g,
282
+ class: Y(["data-table__cell", { "data-table__cell--id": g === n.idField }])
283
+ }, k(i(xe)(i(oe)(y, g))), 3))), 128))
284
+ ], 10, Ne))), 128))
285
+ ])
286
+ ])
287
+ ])),
288
+ n.items.length > 0 ? (p(), _("div", Je, [
289
+ t("span", Re, k(n.items.length) + " items", 1),
290
+ t("span", Ve, k(f.value.length) + " columns", 1)
291
+ ])) : F("", !0)
292
+ ]));
293
+ }
294
+ }), Ae = /* @__PURE__ */ se(Oe, [["__scopeId", "data-v-dcdce8f7"]]), ze = { class: "json-editor" }, Ue = { class: "json-editor__container" }, Be = ["value", "readonly", "placeholder"], Pe = { class: "json-editor__status" }, Le = { class: "json-editor__status-left" }, He = {
295
+ key: 0,
296
+ class: "json-editor__valid"
297
+ }, Ke = {
298
+ key: 1,
299
+ class: "json-editor__error"
300
+ }, qe = { class: "json-editor__status-right" }, We = { class: "json-editor__info" }, Xe = /* @__PURE__ */ ee({
301
+ __name: "JsonEditor",
302
+ props: {
303
+ modelValue: {},
304
+ readonly: { type: Boolean, default: !1 },
305
+ placeholder: { default: "Enter JSON data..." },
306
+ minHeight: { default: 200 }
307
+ },
308
+ emits: ["update:modelValue"],
309
+ setup(n, { expose: e, emit: o }) {
310
+ const l = n, f = o, c = I(""), u = I(null), m = E(() => u.value === null), v = E(() => c.value.split(`
311
+ `).length), y = E(() => Array.from({ length: v.value }, (h, b) => b + 1)), w = I(null);
312
+ function g() {
313
+ try {
314
+ c.value = JSON.stringify(l.modelValue, null, 2), u.value = null;
315
+ } catch {
316
+ c.value = "", u.value = "Invalid initial value";
317
+ }
318
+ }
319
+ g(), Q(
320
+ () => l.modelValue,
321
+ () => {
322
+ try {
323
+ const h = JSON.parse(c.value);
324
+ JSON.stringify(h) !== JSON.stringify(l.modelValue) && g();
325
+ } catch {
326
+ g();
327
+ }
328
+ }
329
+ );
330
+ function j(h) {
331
+ const b = h.target;
332
+ c.value = b.value, R();
333
+ }
334
+ function R() {
335
+ if (c.value.trim() === "") {
336
+ u.value = null, f("update:modelValue", []);
337
+ return;
338
+ }
339
+ try {
340
+ const h = JSON.parse(c.value);
341
+ u.value = null, f("update:modelValue", h);
342
+ } catch (h) {
343
+ if (h instanceof Error) {
344
+ const b = h.message.match(/position (\d+)/);
345
+ if (b) {
346
+ const r = Number.parseInt(b[1], 10), s = c.value.substring(0, r).split(`
347
+ `), S = s.length, M = s[s.length - 1].length + 1;
348
+ u.value = `Line ${S}, Column ${M}: ${h.message}`;
349
+ } else
350
+ u.value = h.message;
351
+ } else
352
+ u.value = "Invalid JSON";
353
+ }
354
+ }
355
+ function z() {
356
+ try {
357
+ const h = JSON.parse(c.value);
358
+ c.value = JSON.stringify(h, null, 2), u.value = null, f("update:modelValue", h);
359
+ } catch {
360
+ }
361
+ }
362
+ function D(h) {
363
+ if (h.key === "Tab") {
364
+ h.preventDefault();
365
+ const b = h.target, r = b.selectionStart, s = b.selectionEnd, S = `${c.value.substring(0, r)} ${c.value.substring(s)}`;
366
+ c.value = S, setTimeout(() => {
367
+ b.selectionStart = b.selectionEnd = r + 2;
368
+ }, 0), R();
369
+ }
370
+ }
371
+ function U(h) {
372
+ const b = h.target;
373
+ w.value && (w.value.scrollTop = b.scrollTop);
374
+ }
375
+ return e({
376
+ formatJson: z,
377
+ isValid: m
378
+ }), (h, b) => (p(), _("div", ze, [
379
+ t("div", Ue, [
380
+ t("div", {
381
+ ref_key: "linesRef",
382
+ ref: w,
383
+ class: "json-editor__lines",
384
+ "aria-hidden": "true"
385
+ }, [
386
+ (p(!0), _(J, null, P(y.value, (r) => (p(), _("div", {
387
+ key: r,
388
+ class: "json-editor__line-number"
389
+ }, k(r), 1))), 128))
390
+ ], 512),
391
+ t("textarea", {
392
+ value: c.value,
393
+ readonly: n.readonly,
394
+ placeholder: n.placeholder,
395
+ style: ue({ "--json-editor-min-height": `${n.minHeight}px` }),
396
+ class: "json-editor__textarea",
397
+ spellcheck: "false",
398
+ onInput: j,
399
+ onKeydown: D,
400
+ onScroll: U
401
+ }, null, 44, Be)
402
+ ]),
403
+ t("div", Pe, [
404
+ t("div", Le, [
405
+ m.value ? (p(), _("div", He, [
406
+ T(i(_e), { size: 14 }),
407
+ b[0] || (b[0] = t("span", null, "Valid JSON", -1))
408
+ ])) : u.value ? (p(), _("div", Ke, [
409
+ T(i(we), { size: 14 }),
410
+ t("span", null, k(u.value), 1)
411
+ ])) : F("", !0)
412
+ ]),
413
+ t("div", qe, [
414
+ t("span", We, k(v.value) + " lines", 1)
415
+ ])
416
+ ])
417
+ ]));
418
+ }
419
+ }), Ye = /* @__PURE__ */ se(Xe, [["__scopeId", "data-v-a953e764"]]), L = I([]), $ = de({
420
+ visible: !1,
421
+ title: "",
422
+ message: "",
423
+ confirmText: "Confirm",
424
+ cancelText: "Cancel",
425
+ onConfirm: null,
426
+ onCancel: null
427
+ }), A = /* @__PURE__ */ new Map();
428
+ let x = null, Ge = 0;
429
+ function Qe() {
430
+ return `toast-${Date.now()}-${Ge++}`;
431
+ }
432
+ function X(n, e, o = 3e3) {
433
+ const l = Qe(), f = {
434
+ id: l,
435
+ type: n,
436
+ message: e,
437
+ duration: o,
438
+ timestamp: Date.now()
439
+ };
440
+ if (L.value.push(f), o > 0) {
441
+ const c = setTimeout(() => {
442
+ re(l), A.delete(l);
443
+ }, o);
444
+ A.set(l, c);
445
+ }
446
+ return l;
447
+ }
448
+ function re(n) {
449
+ const e = A.get(n);
450
+ e !== void 0 && (clearTimeout(e), A.delete(n));
451
+ const o = L.value.findIndex((l) => l.id === n);
452
+ o !== -1 && L.value.splice(o, 1);
453
+ }
454
+ function Ze() {
455
+ function n(v, y) {
456
+ return X("success", v, y);
457
+ }
458
+ function e(v, y) {
459
+ return X("error", v, y);
460
+ }
461
+ function o(v, y) {
462
+ return X("info", v, y);
463
+ }
464
+ function l(v, y) {
465
+ return X("warning", v, y);
466
+ }
467
+ function f(v, y) {
468
+ return new Promise((w) => {
469
+ x && (x(!1), x = null), x = w, $.visible = !0, $.title = y?.title || "Confirm", $.message = v, $.confirmText = y?.confirmText || "Confirm", $.cancelText = y?.cancelText || "Cancel", $.onConfirm = () => {
470
+ $.visible = !1, x && (x(!0), x = null);
471
+ }, $.onCancel = () => {
472
+ $.visible = !1, x && (x(!1), x = null);
473
+ };
474
+ });
475
+ }
476
+ function c() {
477
+ $.visible = !1, x && (x(!1), x = null);
478
+ }
479
+ function u(v) {
480
+ re(v);
481
+ }
482
+ function m() {
483
+ for (const v of A.values())
484
+ clearTimeout(v);
485
+ A.clear(), L.value = [];
486
+ }
487
+ return {
488
+ // State
489
+ toasts: L,
490
+ confirmDialog: $,
491
+ // Toast methods
492
+ success: n,
493
+ error: e,
494
+ info: o,
495
+ warning: l,
496
+ dismiss: u,
497
+ clearAll: m,
498
+ // Confirm methods
499
+ confirm: f,
500
+ closeConfirm: c
501
+ };
502
+ }
503
+ const et = { class: "models-page" }, tt = { class: "models-sidebar" }, st = { class: "models-sidebar__header" }, nt = { class: "models-sidebar__badge" }, at = {
504
+ key: 0,
505
+ class: "models-sidebar__loading"
506
+ }, lt = {
507
+ key: 1,
508
+ class: "models-sidebar__list"
509
+ }, ot = ["onClick"], rt = { class: "models-sidebar__name" }, it = { class: "models-sidebar__count" }, ct = { class: "models-sidebar__footer" }, ut = { class: "models-sidebar__stat" }, dt = { class: "font-mono" }, ft = { class: "models-content" }, mt = { class: "models-toolbar" }, vt = { class: "models-toolbar__title" }, ht = { class: "font-mono" }, pt = { class: "text-muted" }, yt = {
510
+ key: 0,
511
+ class: "models-toolbar__badge models-toolbar__badge--warning"
512
+ }, _t = { class: "models-toolbar__actions" }, gt = ["disabled"], bt = ["disabled"], St = {
513
+ key: 0,
514
+ class: "models-error"
515
+ }, wt = { class: "models-panels" }, Ct = { class: "models-panel" }, kt = { class: "models-panel" }, It = {
516
+ key: 1,
517
+ class: "models-loading-overlay"
518
+ }, xt = {
519
+ key: 1,
520
+ class: "empty-state"
521
+ }, $t = {
522
+ key: 0,
523
+ class: "models-error"
524
+ }, Tt = { class: "modal__body" }, Et = { class: "modal__footer" }, jt = /* @__PURE__ */ ee({
525
+ __name: "ModelsPage",
526
+ setup(n) {
527
+ const e = Ie(), o = le(), { send: l, on: f, connected: c } = ye(), { success: u, error: m, confirm: v } = Ze(), y = I(null), w = I(!1), g = I(-1);
528
+ fe(async () => {
529
+ try {
530
+ await e.fetchSchemas(o.specIds[0] ?? "default"), e.schemas.length > 0 && !e.selectedSchema && await e.selectSchemaByName(
531
+ o.specIds[0] ?? "default",
532
+ e.schemas[0].name
533
+ );
534
+ } catch (r) {
535
+ e.error || (e.error = r instanceof Error ? r.message : "Failed to load schemas");
536
+ }
537
+ }), f("store:updated", (r) => {
538
+ const s = r;
539
+ if (typeof r != "object" || r === null || typeof s.schema != "string" || typeof s.action != "string" || typeof s.count != "number") {
540
+ console.warn("[ModelsPage] Invalid store:updated payload:", r);
541
+ return;
542
+ }
543
+ e.handleStoreUpdate(
544
+ r
545
+ ), g.value = -1;
546
+ }), f("reseeded", (r) => {
547
+ const s = r;
548
+ if (typeof r != "object" || r === null || typeof s.success != "boolean" || !Array.isArray(s.schemas)) {
549
+ console.warn("[ModelsPage] Invalid reseeded payload:", r);
550
+ return;
551
+ }
552
+ e.handleReseedComplete(r), g.value = -1;
553
+ }), Q(
554
+ () => e.selectedSchema,
555
+ async () => {
556
+ g.value = -1, y.value && e.currentItems.length > 0 && (await me(), y.value?.formatJson());
557
+ }
558
+ ), Q(
559
+ () => e.currentItems,
560
+ (r, s) => {
561
+ const S = g.value;
562
+ if (S < 0) return;
563
+ if (S >= r.length) {
564
+ g.value = -1;
565
+ return;
566
+ }
567
+ const M = e.currentSchema?.idField ?? "id", V = s?.[S], O = r[S];
568
+ if (V !== O) {
569
+ if (typeof V == "object" && V !== null && typeof O == "object" && O !== null) {
570
+ const H = V[M], a = O[M];
571
+ if (H !== void 0 && H === a) return;
572
+ }
573
+ g.value = -1;
574
+ }
575
+ }
576
+ );
577
+ async function j(r) {
578
+ e.isDirty && !await v(
579
+ "You have unsaved changes. Are you sure you want to switch schemas?",
580
+ {
581
+ title: "Unsaved Changes",
582
+ confirmText: "Switch Schema",
583
+ cancelText: "Cancel"
584
+ }
585
+ ) || await e.selectSchemaByName(o.specIds[0] ?? "default", r);
586
+ }
587
+ async function R() {
588
+ if (!y.value?.isValid) {
589
+ m("Cannot save invalid JSON. Please fix the errors first.");
590
+ return;
591
+ }
592
+ if (await e.saveItems())
593
+ u("Items saved successfully");
594
+ else {
595
+ const s = e.error || "Failed to save items";
596
+ m(s);
597
+ }
598
+ }
599
+ async function z() {
600
+ if (!e.isDirty) return;
601
+ await v("Discard all changes and revert to saved data?", {
602
+ title: "Discard Changes",
603
+ confirmText: "Discard",
604
+ cancelText: "Cancel"
605
+ }) && (e.discardChanges(), u("Changes discarded"));
606
+ }
607
+ async function D() {
608
+ w.value = !1;
609
+ try {
610
+ if (await e.clearSchema())
611
+ u("Schema cleared successfully");
612
+ else {
613
+ const s = e.error || "Failed to clear schema";
614
+ m(s);
615
+ }
616
+ } catch (r) {
617
+ const s = r instanceof Error ? r.message : "Failed to clear schema";
618
+ m(s);
619
+ }
620
+ }
621
+ async function U() {
622
+ if (!c.value) {
623
+ m("WebSocket not connected. Cannot trigger reseed.");
624
+ return;
625
+ }
626
+ await v(
627
+ "This will regenerate all seed data and replace existing items. Continue?",
628
+ {
629
+ title: "Reseed All Schemas",
630
+ confirmText: "Reseed",
631
+ cancelText: "Cancel"
632
+ }
633
+ ) && (l({ type: "reseed" }), u("Reseed command sent"));
634
+ }
635
+ function h(r) {
636
+ e.updateItems(r);
637
+ }
638
+ function b(r) {
639
+ g.value = g.value === r ? -1 : r;
640
+ }
641
+ return (r, s) => (p(), _("div", et, [
642
+ t("aside", tt, [
643
+ t("div", st, [
644
+ T(i(Z), { size: 18 }),
645
+ s[4] || (s[4] = t("span", null, "Schemas", -1)),
646
+ t("span", nt, k(i(e).schemaCount), 1)
647
+ ]),
648
+ i(e).loading && i(e).schemas.length === 0 ? (p(), _("div", at, [...s[5] || (s[5] = [
649
+ t("div", { class: "spinner" }, null, -1),
650
+ t("span", null, "Loading...", -1)
651
+ ])])) : (p(), _("div", lt, [
652
+ (p(!0), _(J, null, P(i(e).schemas, (S) => (p(), _("button", {
653
+ key: S.name,
654
+ class: Y([
655
+ "models-sidebar__item",
656
+ { "models-sidebar__item--active": i(e).selectedSchema === S.name }
657
+ ]),
658
+ onClick: (M) => j(S.name)
659
+ }, [
660
+ t("span", rt, k(S.name), 1),
661
+ t("span", it, k(S.count), 1)
662
+ ], 10, ot))), 128))
663
+ ])),
664
+ t("div", ct, [
665
+ t("div", ut, [
666
+ s[6] || (s[6] = t("span", { class: "text-muted" }, "Total Items:", -1)),
667
+ t("span", dt, k(i(e).totalItems), 1)
668
+ ])
669
+ ])
670
+ ]),
671
+ t("main", ft, [
672
+ i(e).selectedSchema ? (p(), _(J, { key: 0 }, [
673
+ t("div", mt, [
674
+ t("div", vt, [
675
+ t("span", ht, k(i(e).selectedSchema), 1),
676
+ t("span", pt, "(" + k(i(e).currentItems.length) + " items)", 1),
677
+ i(e).isDirty ? (p(), _("span", yt, " Unsaved ")) : F("", !0)
678
+ ]),
679
+ t("div", _t, [
680
+ i(e).isDirty ? (p(), _("button", {
681
+ key: 0,
682
+ class: "btn btn--ghost",
683
+ title: "Discard changes",
684
+ onClick: z
685
+ }, [
686
+ T(i(be), { size: 16 }),
687
+ s[7] || (s[7] = t("span", null, "Discard", -1))
688
+ ])) : F("", !0),
689
+ t("button", {
690
+ disabled: !i(e).isDirty || i(e).loading,
691
+ class: "btn btn--primary",
692
+ title: "Save changes",
693
+ onClick: R
694
+ }, [
695
+ T(i(ke), { size: 16 }),
696
+ s[8] || (s[8] = t("span", null, "Save", -1))
697
+ ], 8, gt),
698
+ t("button", {
699
+ class: "btn btn--danger",
700
+ title: "Clear all items",
701
+ onClick: s[0] || (s[0] = (S) => w.value = !0)
702
+ }, [
703
+ T(i(Se), { size: 16 }),
704
+ s[9] || (s[9] = t("span", null, "Clear", -1))
705
+ ]),
706
+ t("button", {
707
+ disabled: !i(c),
708
+ class: "btn btn--secondary",
709
+ title: "Reseed all schemas with generated data",
710
+ onClick: U
711
+ }, [
712
+ T(i(Ce), { size: 16 }),
713
+ s[10] || (s[10] = t("span", null, "Reseed All", -1))
714
+ ], 8, bt)
715
+ ])
716
+ ]),
717
+ i(e).error ? (p(), _("div", St, [
718
+ t("span", null, "⚠️ " + k(i(e).error), 1)
719
+ ])) : F("", !0),
720
+ t("div", wt, [
721
+ t("div", Ct, [
722
+ T(Ye, {
723
+ ref_key: "jsonEditorRef",
724
+ ref: y,
725
+ "model-value": i(e).currentItems,
726
+ readonly: i(e).loading,
727
+ "min-height": 400,
728
+ "onUpdate:modelValue": h
729
+ }, null, 8, ["model-value", "readonly"])
730
+ ]),
731
+ t("div", kt, [
732
+ T(Ae, {
733
+ items: i(e).currentItems,
734
+ "id-field": i(e).currentSchema?.idField ?? "id",
735
+ "selected-index": g.value,
736
+ onSelect: b
737
+ }, null, 8, ["items", "id-field", "selected-index"])
738
+ ])
739
+ ]),
740
+ i(e).loading ? (p(), _("div", It, [...s[11] || (s[11] = [
741
+ t("div", { class: "spinner" }, null, -1),
742
+ t("span", null, "Loading...", -1)
743
+ ])])) : F("", !0)
744
+ ], 64)) : (p(), _("div", xt, [
745
+ i(e).error ? (p(), _("div", $t, [
746
+ t("span", null, "⚠️ " + k(i(e).error), 1)
747
+ ])) : (p(), _(J, { key: 1 }, [
748
+ T(i(Z), {
749
+ size: 48,
750
+ class: "empty-state__icon"
751
+ }),
752
+ s[12] || (s[12] = t("h3", { class: "empty-state__title" }, "Select a schema", -1)),
753
+ s[13] || (s[13] = t("p", { class: "empty-state__description" }, " Choose a schema from the sidebar to view and edit its data. ", -1))
754
+ ], 64))
755
+ ]))
756
+ ]),
757
+ (p(), ve(he, { to: "body" }, [
758
+ w.value ? (p(), _("div", {
759
+ key: 0,
760
+ class: "modal-overlay",
761
+ onClick: s[3] || (s[3] = (S) => w.value = !1)
762
+ }, [
763
+ t("div", {
764
+ class: "modal",
765
+ onClick: s[2] || (s[2] = pe(() => {
766
+ }, ["stop"]))
767
+ }, [
768
+ s[17] || (s[17] = t("div", { class: "modal__header" }, [
769
+ t("h3", null, "Clear Schema Data")
770
+ ], -1)),
771
+ t("div", Tt, [
772
+ t("p", null, [
773
+ s[14] || (s[14] = ae(" Are you sure you want to clear all items for ", -1)),
774
+ t("strong", null, k(i(e).selectedSchema), 1),
775
+ s[15] || (s[15] = ae("? ", -1))
776
+ ]),
777
+ s[16] || (s[16] = t("p", { class: "text-muted" }, "This action cannot be undone.", -1))
778
+ ]),
779
+ t("div", Et, [
780
+ t("button", {
781
+ class: "btn btn--ghost",
782
+ onClick: s[1] || (s[1] = (S) => w.value = !1)
783
+ }, " Cancel "),
784
+ t("button", {
785
+ class: "btn btn--danger",
786
+ onClick: D
787
+ }, " Clear Schema ")
788
+ ])
789
+ ])
790
+ ])) : F("", !0)
791
+ ]))
792
+ ]));
793
+ }
794
+ }), Vt = /* @__PURE__ */ se(jt, [["__scopeId", "data-v-2ada8e9c"]]);
795
+ export {
796
+ Vt as default
797
+ };
798
+ //# sourceMappingURL=ModelsPage-OOYQ3USo.js.map