@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
@@ -1,4 +1,4 @@
1
- import { c as e } from "./main-DmyM_bX3.js";
1
+ import { c as e } from "./main-CWgkFc8w.js";
2
2
  const t = e("chevron-down", [
3
3
  ["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]
4
4
  ]);
@@ -32,4 +32,4 @@ export {
32
32
  o as b,
33
33
  s as g
34
34
  };
35
- //# sourceMappingURL=format-Dq-zmlAN.js.map
35
+ //# sourceMappingURL=format-Dj37a-xS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-Dq-zmlAN.js","sources":["../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-down.js","../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-right.js","../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-up.js","../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/funnel.js","../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/search.js","../src/utils/format.ts"],"sourcesContent":["/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"chevron-down\", [\n [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronRight = createLucideIcon(\"chevron-right\", [\n [\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]\n]);\n\nexport { ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronUp = createLucideIcon(\"chevron-up\", [\n [\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]\n]);\n\nexport { ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Funnel = createLucideIcon(\"funnel\", [\n [\n \"path\",\n {\n d: \"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\",\n key: \"sc7q7i\"\n }\n ]\n]);\n\nexport { Funnel as default };\n//# sourceMappingURL=funnel.js.map\n","/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Search = createLucideIcon(\"search\", [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n]);\n\nexport { Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * Format Utilities\n *\n * What: Shared formatting functions for display purposes\n * How: Provides consistent formatting across components\n * Why: Centralizes common formatting logic to avoid duplication (DRY)\n *\n * @module utils/format\n */\n\n/**\n * Get display label for HTTP method\n *\n * Converts an HTTP method to its uppercase display format.\n *\n * @param method - The HTTP method string (e.g., 'get', 'post')\n * @returns The uppercase method label (e.g., 'GET', 'POST')\n *\n * @example\n * getMethodLabel('get') // Returns 'GET'\n * getMethodLabel('post') // Returns 'POST'\n */\nexport function getMethodLabel(method: string): string {\n return method.toUpperCase();\n}\n"],"names":["ChevronDown","createLucideIcon","ChevronRight","ChevronUp","Funnel","Search","getMethodLabel","method"],"mappings":";AASK,MAACA,IAAcC,EAAiB,gBAAgB;AAAA,EACnD,CAAC,QAAQ,EAAE,GAAG,gBAAgB,KAAK,SAAQ,CAAE;AAC/C,CAAC;ACFI,MAACC,IAAeD,EAAiB,iBAAiB;AAAA,EACrD,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAChD,CAAC;ACFI,MAACE,IAAYF,EAAiB,cAAc;AAAA,EAC/C,CAAC,QAAQ,EAAE,GAAG,kBAAkB,KAAK,SAAQ,CAAE;AACjD,CAAC;ACFI,MAACG,IAASH,EAAiB,UAAU;AAAA,EACxC;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AACA,CAAC;ACRI,MAACI,IAASJ,EAAiB,UAAU;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,oBAAoB,KAAK,SAAQ,CAAE;AAAA,EACjD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,SAAQ,CAAE;AAC1D,CAAC;ACUM,SAASK,EAAeC,GAAwB;AACrD,SAAOA,EAAO,YAAA;AAChB;","x_google_ignoreList":[0,1,2,3,4]}
1
+ {"version":3,"file":"format-Dj37a-xS.js","sources":["../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-down.js","../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-right.js","../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/chevron-up.js","../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/funnel.js","../../../node_modules/.pnpm/lucide-vue-next@0.513.0_vue@3.5.27_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/search.js","../src/utils/format.ts"],"sourcesContent":["/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"chevron-down\", [\n [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronRight = createLucideIcon(\"chevron-right\", [\n [\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]\n]);\n\nexport { ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronUp = createLucideIcon(\"chevron-up\", [\n [\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]\n]);\n\nexport { ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Funnel = createLucideIcon(\"funnel\", [\n [\n \"path\",\n {\n d: \"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\",\n key: \"sc7q7i\"\n }\n ]\n]);\n\nexport { Funnel as default };\n//# sourceMappingURL=funnel.js.map\n","/**\n * @license lucide-vue-next v0.513.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Search = createLucideIcon(\"search\", [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n]);\n\nexport { Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * Format Utilities\n *\n * What: Shared formatting functions for display purposes\n * How: Provides consistent formatting across components\n * Why: Centralizes common formatting logic to avoid duplication (DRY)\n *\n * @module utils/format\n */\n\n/**\n * Get display label for HTTP method\n *\n * Converts an HTTP method to its uppercase display format.\n *\n * @param method - The HTTP method string (e.g., 'get', 'post')\n * @returns The uppercase method label (e.g., 'GET', 'POST')\n *\n * @example\n * getMethodLabel('get') // Returns 'GET'\n * getMethodLabel('post') // Returns 'POST'\n */\nexport function getMethodLabel(method: string): string {\n return method.toUpperCase();\n}\n"],"names":["ChevronDown","createLucideIcon","ChevronRight","ChevronUp","Funnel","Search","getMethodLabel","method"],"mappings":";AASK,MAACA,IAAcC,EAAiB,gBAAgB;AAAA,EACnD,CAAC,QAAQ,EAAE,GAAG,gBAAgB,KAAK,SAAQ,CAAE;AAC/C,CAAC;ACFI,MAACC,IAAeD,EAAiB,iBAAiB;AAAA,EACrD,CAAC,QAAQ,EAAE,GAAG,iBAAiB,KAAK,SAAQ,CAAE;AAChD,CAAC;ACFI,MAACE,IAAYF,EAAiB,cAAc;AAAA,EAC/C,CAAC,QAAQ,EAAE,GAAG,kBAAkB,KAAK,SAAQ,CAAE;AACjD,CAAC;ACFI,MAACG,IAASH,EAAiB,UAAU;AAAA,EACxC;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AACA,CAAC;ACRI,MAACI,IAASJ,EAAiB,UAAU;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,oBAAoB,KAAK,SAAQ,CAAE;AAAA,EACjD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,SAAQ,CAAE;AAC1D,CAAC;ACUM,SAASK,EAAeC,GAAwB;AACrD,SAAOA,EAAO,YAAA;AAChB;","x_google_ignoreList":[0,1,2,3,4]}
@@ -0,0 +1,620 @@
1
+ import { defineStore as se, createPinia as re } from "pinia";
2
+ import { h as $, ref as S, computed as i, onMounted as X, getCurrentInstance as ee, defineComponent as ie, resolveComponent as le, createElementBlock as x, openBlock as w, createElementVNode as h, createVNode as W, unref as b, Fragment as ue, renderList as de, normalizeClass as U, createBlock as N, resolveDynamicComponent as z, toDisplayString as j, withCtx as Z, Transition as pe, watch as fe, onUnmounted as me, createApp as he } from "vue";
3
+ import { createRouter as ve, createWebHashHistory as ye, useRoute as ke, useRouter as ge } from "vue-router";
4
+ const q = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), _e = (e) => e.replace(
5
+ /^([A-Z])|[\s-_]+(\w)/g,
6
+ (t, n, o) => o ? o.toUpperCase() : n.toLowerCase()
7
+ ), Se = (e) => {
8
+ const t = _e(e);
9
+ return t.charAt(0).toUpperCase() + t.slice(1);
10
+ }, we = (...e) => e.filter((t, n, o) => !!t && t.trim() !== "" && o.indexOf(t) === n).join(" ").trim();
11
+ var D = {
12
+ xmlns: "http://www.w3.org/2000/svg",
13
+ width: 24,
14
+ height: 24,
15
+ viewBox: "0 0 24 24",
16
+ fill: "none",
17
+ stroke: "currentColor",
18
+ "stroke-width": 2,
19
+ "stroke-linecap": "round",
20
+ "stroke-linejoin": "round"
21
+ };
22
+ const be = ({ size: e, strokeWidth: t = 2, absoluteStrokeWidth: n, color: o, iconNode: r, name: l, class: g, ...y }, { slots: p }) => $(
23
+ "svg",
24
+ {
25
+ ...D,
26
+ width: e || D.width,
27
+ height: e || D.height,
28
+ stroke: o || D.stroke,
29
+ "stroke-width": n ? Number(t) * 24 / Number(e) : t,
30
+ class: we(
31
+ "lucide",
32
+ ...l ? [`lucide-${q(Se(l))}-icon`, `lucide-${q(l)}`] : ["lucide-icon"]
33
+ ),
34
+ ...y
35
+ },
36
+ [...r.map((a) => $(...a)), ...p.default ? [p.default()] : []]
37
+ );
38
+ const T = (e, t) => (n, { slots: o }) => $(
39
+ be,
40
+ {
41
+ ...n,
42
+ iconNode: t,
43
+ name: e
44
+ },
45
+ o
46
+ );
47
+ const Ce = T("clock", [
48
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
49
+ ["polyline", { points: "12 6 12 12 16 14", key: "68esgv" }]
50
+ ]);
51
+ const Te = T("database", [
52
+ ["ellipse", { cx: "12", cy: "5", rx: "9", ry: "3", key: "msslwz" }],
53
+ ["path", { d: "M3 5V19A9 3 0 0 0 21 19V5", key: "1wlel7" }],
54
+ ["path", { d: "M3 12A9 3 0 0 0 21 12", key: "mv7ke4" }]
55
+ ]);
56
+ const G = T("route", [
57
+ ["circle", { cx: "6", cy: "19", r: "3", key: "1kj8tv" }],
58
+ ["path", { d: "M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15", key: "1d8sl" }],
59
+ ["circle", { cx: "18", cy: "5", r: "3", key: "gq8acd" }]
60
+ ]);
61
+ const Me = T("wifi-off", [
62
+ ["path", { d: "M12 20h.01", key: "zekei9" }],
63
+ ["path", { d: "M8.5 16.429a5 5 0 0 1 7 0", key: "1bycff" }],
64
+ ["path", { d: "M5 12.859a10 10 0 0 1 5.17-2.69", key: "1dl1wf" }],
65
+ ["path", { d: "M19 12.859a10 10 0 0 0-2.007-1.523", key: "4k23kn" }],
66
+ ["path", { d: "M2 8.82a15 15 0 0 1 4.177-2.643", key: "1grhjp" }],
67
+ ["path", { d: "M22 8.82a15 15 0 0 0-11.288-3.764", key: "z3jwby" }],
68
+ ["path", { d: "m2 2 20 20", key: "1ooewy" }]
69
+ ]);
70
+ const De = T("wifi", [
71
+ ["path", { d: "M12 20h.01", key: "zekei9" }],
72
+ ["path", { d: "M2 8.82a15 15 0 0 1 20 0", key: "dnpr2z" }],
73
+ ["path", { d: "M5 12.859a10 10 0 0 1 14 0", key: "1x1e6c" }],
74
+ ["path", { d: "M8.5 16.429a5 5 0 0 1 7 0", key: "1bycff" }]
75
+ ]);
76
+ const Q = T("zap", [
77
+ [
78
+ "path",
79
+ {
80
+ d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
81
+ key: "1xq2db"
82
+ }
83
+ ]
84
+ ]), Ee = "#94a3b8", Ae = se("specs", () => {
85
+ const e = S([]), t = S(null), n = i(() => new Map(e.value.map((c) => [c.id, c]))), o = i(() => e.value.map((c) => c.id)), r = i(
86
+ () => t.value ? n.value.get(t.value) ?? null : null
87
+ ), l = i(() => t.value !== null);
88
+ function g(c) {
89
+ e.value = c, t.value && !c.some((f) => f.id === t.value) && (t.value = null);
90
+ }
91
+ function y(c) {
92
+ t.value = c !== null && !e.value.some((f) => f.id === c) ? null : c;
93
+ }
94
+ function p(c) {
95
+ t.value === c ? t.value = null : y(c);
96
+ }
97
+ function a(c) {
98
+ return n.value.get(c)?.color ?? Ee;
99
+ }
100
+ return {
101
+ // State
102
+ specs: e,
103
+ activeSpecFilter: t,
104
+ // Getters
105
+ specMap: n,
106
+ specIds: o,
107
+ activeSpec: r,
108
+ isFiltered: l,
109
+ // Actions
110
+ setSpecs: g,
111
+ setFilter: y,
112
+ toggleFilter: p,
113
+ getColor: a
114
+ };
115
+ }), P = {
116
+ path: "/_ws",
117
+ reconnectDelay: 2e3,
118
+ maxReconnectAttempts: Number.POSITIVE_INFINITY,
119
+ autoConnect: !0
120
+ }, u = S("disconnected"), H = S(null), M = S(0);
121
+ let s = null, O = null, C = { ...P }, R = !1;
122
+ const v = /* @__PURE__ */ new Map();
123
+ function te() {
124
+ return typeof window < "u" && typeof WebSocket < "u";
125
+ }
126
+ function Ie() {
127
+ return ee() !== null;
128
+ }
129
+ function Oe(e) {
130
+ return te() ? `${window.location.protocol === "https:" ? "wss:" : "ws:"}//${window.location.host}${e}` : `ws://localhost${e}`;
131
+ }
132
+ function ne() {
133
+ O !== null && (clearTimeout(O), O = null);
134
+ }
135
+ function xe(e, t) {
136
+ const n = v.get(e);
137
+ if (n)
138
+ for (const r of n)
139
+ try {
140
+ r(t);
141
+ } catch (l) {
142
+ console.error(`[DevTools WebSocket] Error in event handler for '${e}':`, l);
143
+ }
144
+ const o = v.get("*");
145
+ if (o)
146
+ for (const r of o)
147
+ try {
148
+ r({ type: e, data: t });
149
+ } catch (l) {
150
+ console.error("[DevTools WebSocket] Error in wildcard event handler:", l);
151
+ }
152
+ }
153
+ function We() {
154
+ u.value = "connected", M.value = 0, ne();
155
+ }
156
+ function Ne(e) {
157
+ for (const t of e)
158
+ d({ type: "get:registry", data: { specId: t.id } }), d({ type: "get:timeline", data: { specId: t.id } });
159
+ }
160
+ function ze(e) {
161
+ try {
162
+ const t = JSON.parse(e.data);
163
+ if (t.type === "connected") {
164
+ const n = t.data;
165
+ H.value = n.serverVersion, n.specs && Array.isArray(n.specs) && (Ae().setSpecs(n.specs), Ne(n.specs));
166
+ }
167
+ xe(t.type, t.data);
168
+ } catch (t) {
169
+ console.error("[DevTools WebSocket] Failed to parse message:", t);
170
+ }
171
+ }
172
+ function Le() {
173
+ u.value, u.value = "disconnected", s = null, M.value < C.maxReconnectAttempts && (u.value = "reconnecting", M.value++, O = setTimeout(() => {
174
+ F();
175
+ }, C.reconnectDelay));
176
+ }
177
+ function $e(e) {
178
+ console.error("[DevTools WebSocket] Error:", e);
179
+ }
180
+ function F() {
181
+ if (!te() || u.value === "connecting" || u.value === "connected" || s && (s.readyState === WebSocket.CONNECTING || s.readyState === WebSocket.OPEN))
182
+ return;
183
+ oe(), u.value = "connecting";
184
+ const e = Oe(C.path);
185
+ try {
186
+ s = new WebSocket(e), s.onopen = We, s.onmessage = ze, s.onclose = Le, s.onerror = $e;
187
+ } catch (t) {
188
+ console.error("[DevTools WebSocket] Failed to create WebSocket:", t), u.value = "disconnected";
189
+ }
190
+ }
191
+ function oe() {
192
+ s && (s.onopen = null, s.onmessage = null, s.onclose = null, s.onerror = null, (s.readyState === WebSocket.OPEN || s.readyState === WebSocket.CONNECTING) && s.close(), s = null);
193
+ }
194
+ function ae() {
195
+ ne(), oe(), u.value = "disconnected", M.value = 0;
196
+ }
197
+ function d(e) {
198
+ if (!s || s.readyState !== WebSocket.OPEN)
199
+ return !1;
200
+ try {
201
+ return s.send(JSON.stringify(e)), !0;
202
+ } catch (t) {
203
+ return console.error("[DevTools WebSocket] Failed to send command:", t), !1;
204
+ }
205
+ }
206
+ function Re() {
207
+ return d({ type: "get:specs" });
208
+ }
209
+ function Fe(e) {
210
+ return d({ type: "get:registry", data: e ? { specId: e } : void 0 });
211
+ }
212
+ function Pe(e, t) {
213
+ const n = {};
214
+ return e && (n.specId = e), t !== void 0 && (n.limit = t), d({
215
+ type: "get:timeline",
216
+ data: Object.keys(n).length > 0 ? n : void 0
217
+ });
218
+ }
219
+ function He(e) {
220
+ return d({ type: "clear:timeline", data: e ? { specId: e } : void 0 });
221
+ }
222
+ function Be(e, t) {
223
+ return d({ type: "get:store", data: { specId: e, schema: t } });
224
+ }
225
+ function Ve(e, t, n) {
226
+ return d({ type: "set:store", data: { specId: e, schema: t, items: n } });
227
+ }
228
+ function Ue(e, t) {
229
+ return d({ type: "clear:store", data: { specId: e, schema: t } });
230
+ }
231
+ function je(e, t) {
232
+ return d({ type: "set:simulation", data: { specId: e, ...t } });
233
+ }
234
+ function Ze(e, t) {
235
+ return d({ type: "clear:simulation", data: { specId: e, path: t } });
236
+ }
237
+ function qe(e) {
238
+ return d({ type: "reseed", data: { specId: e } });
239
+ }
240
+ function B(e, t) {
241
+ v.has(e) || v.set(e, /* @__PURE__ */ new Set());
242
+ const n = v.get(e);
243
+ return n && n.add(t), () => {
244
+ const o = v.get(e);
245
+ o && (o.delete(t), o.size === 0 && v.delete(e));
246
+ };
247
+ }
248
+ function V(e, t) {
249
+ const n = v.get(e);
250
+ n && (n.delete(t), n.size === 0 && v.delete(e));
251
+ }
252
+ function Ge(e, t) {
253
+ const n = (o) => {
254
+ V(e, n), t(o);
255
+ };
256
+ return B(e, n);
257
+ }
258
+ function Qe(e, t) {
259
+ const n = (o) => {
260
+ t(o) === !0 && V(e, n);
261
+ };
262
+ return B(e, n);
263
+ }
264
+ function Je() {
265
+ ae(), H.value = null, v.clear(), C = { ...P }, R = !1;
266
+ }
267
+ function Ke(e = {}) {
268
+ (!R || u.value === "disconnected") && (C = { ...P, ...e }, R = !0);
269
+ const t = i(() => u.value === "connected"), n = i(() => u.value === "reconnecting");
270
+ return Ie() && X(() => {
271
+ C.autoConnect && F();
272
+ }), {
273
+ /**
274
+ * Current connection state
275
+ */
276
+ connectionState: i(() => u.value),
277
+ /**
278
+ * Whether the WebSocket is connected
279
+ */
280
+ connected: t,
281
+ /**
282
+ * Whether the WebSocket is attempting to reconnect
283
+ */
284
+ isReconnecting: n,
285
+ /**
286
+ * Server version received on connection
287
+ */
288
+ serverVersion: i(() => H.value),
289
+ /**
290
+ * Number of reconnection attempts made
291
+ */
292
+ reconnectAttempts: i(() => M.value),
293
+ /**
294
+ * Connect to the WebSocket server
295
+ */
296
+ connect: F,
297
+ /**
298
+ * Disconnect from the WebSocket server
299
+ */
300
+ disconnect: ae,
301
+ /**
302
+ * Send a command to the server
303
+ */
304
+ send: d,
305
+ /**
306
+ * Subscribe to a server event
307
+ */
308
+ on: B,
309
+ /**
310
+ * Unsubscribe from a server event
311
+ */
312
+ off: V,
313
+ /**
314
+ * Subscribe to an event once (one-shot, auto-unsubscribes after first call)
315
+ */
316
+ once: Ge,
317
+ /**
318
+ * Subscribe to an event until handler returns true
319
+ */
320
+ onUntil: Qe,
321
+ /**
322
+ * Reset the composable state (useful for testing)
323
+ */
324
+ resetState: Je,
325
+ // =========================================================================
326
+ // Multi-spec command wrappers
327
+ // =========================================================================
328
+ getSpecs: Re,
329
+ getRegistry: Fe,
330
+ getTimeline: Pe,
331
+ clearTimeline: He,
332
+ getStore: Be,
333
+ setStore: Ve,
334
+ clearStore: Ue,
335
+ setSimulation: je,
336
+ clearSimulation: Ze,
337
+ reseed: qe
338
+ };
339
+ }
340
+ const ce = [
341
+ {
342
+ path: "/",
343
+ redirect: "/routes"
344
+ },
345
+ {
346
+ path: "/routes",
347
+ name: "routes",
348
+ component: () => import("./RoutesPage-BgsspZkr.js"),
349
+ meta: {
350
+ title: "Routes",
351
+ icon: "route"
352
+ }
353
+ },
354
+ {
355
+ path: "/timeline",
356
+ name: "timeline",
357
+ component: () => import("./TimelinePage-D_GD3OjL.js"),
358
+ meta: {
359
+ title: "Timeline",
360
+ icon: "clock"
361
+ }
362
+ },
363
+ {
364
+ path: "/models",
365
+ name: "models",
366
+ component: () => import("./ModelsPage-OOYQ3USo.js"),
367
+ meta: {
368
+ title: "Models",
369
+ icon: "database"
370
+ }
371
+ },
372
+ {
373
+ path: "/simulator",
374
+ name: "simulator",
375
+ component: () => import("./SimulatorPage-g9fGUP4F.js"),
376
+ meta: {
377
+ title: "Simulator",
378
+ icon: "zap"
379
+ }
380
+ },
381
+ // Catch-all route for undefined paths - redirects to routes page
382
+ {
383
+ path: "/:pathMatch(.*)*",
384
+ name: "not-found",
385
+ redirect: "/routes"
386
+ }
387
+ ], Ye = ve({
388
+ history: ye(),
389
+ routes: ce
390
+ }), Xe = { class: "app" }, et = { class: "app-header" }, tt = { class: "app-header__brand" }, nt = {
391
+ class: "app-nav",
392
+ role: "tablist",
393
+ "aria-label": "DevTools navigation"
394
+ }, ot = ["aria-selected", "aria-current", "aria-controls", "onClick"], at = { class: "app-nav__label" }, ct = { class: "app-header__status" }, st = { class: "connection-status" }, rt = { class: "connection-status__text" }, it = { class: "app-main" }, lt = /* @__PURE__ */ ie({
395
+ __name: "App",
396
+ setup(e) {
397
+ const t = ke(), n = ge(), o = i(
398
+ () => ce.filter((a) => a.name && a.meta?.title).map((a) => ({
399
+ name: a.name,
400
+ path: a.path,
401
+ title: a.meta?.title,
402
+ icon: a.meta?.icon
403
+ }))
404
+ ), r = i(() => t.name);
405
+ function l(a) {
406
+ n.push(a);
407
+ }
408
+ const g = {
409
+ route: G,
410
+ clock: Ce,
411
+ database: Te,
412
+ zap: Q
413
+ };
414
+ function y(a) {
415
+ return g[a] ?? G;
416
+ }
417
+ const { connected: p } = Ke();
418
+ return (a, c) => {
419
+ const f = le("router-view");
420
+ return w(), x("div", Xe, [
421
+ h("header", et, [
422
+ h("div", tt, [
423
+ W(b(Q), {
424
+ class: "app-header__logo",
425
+ size: 20
426
+ }),
427
+ c[0] || (c[0] = h("span", { class: "app-header__title" }, "OpenAPI DevTools", -1))
428
+ ]),
429
+ h("nav", nt, [
430
+ (w(!0), x(ue, null, de(o.value, (m) => (w(), x("button", {
431
+ key: m.name,
432
+ role: "tab",
433
+ "aria-selected": r.value === m.name,
434
+ "aria-current": r.value === m.name ? "true" : void 0,
435
+ "aria-controls": `panel-${m.name}`,
436
+ tabindex: 0,
437
+ class: U([
438
+ "app-nav__tab",
439
+ { "app-nav__tab--active": r.value === m.name }
440
+ ]),
441
+ onClick: (ht) => l(m.path)
442
+ }, [
443
+ (w(), N(z(y(m.icon)), {
444
+ size: 16,
445
+ class: "app-nav__icon"
446
+ })),
447
+ h("span", at, j(m.title), 1)
448
+ ], 10, ot))), 128))
449
+ ]),
450
+ h("div", ct, [
451
+ h("div", st, [
452
+ h("span", {
453
+ class: U([
454
+ "connection-status__dot",
455
+ b(p) ? "connection-status__dot--connected" : "connection-status__dot--disconnected"
456
+ ])
457
+ }, null, 2),
458
+ h("span", rt, j(b(p) ? "Connected" : "Disconnected"), 1),
459
+ (w(), N(z(b(p) ? b(De) : b(Me)), {
460
+ size: 14,
461
+ class: "connection-status__icon"
462
+ }))
463
+ ])
464
+ ])
465
+ ]),
466
+ h("main", it, [
467
+ W(f, null, {
468
+ default: Z(({ Component: m }) => [
469
+ W(pe, {
470
+ name: "fade",
471
+ mode: "out-in"
472
+ }, {
473
+ default: Z(() => [
474
+ (w(), N(z(m)))
475
+ ]),
476
+ _: 2
477
+ }, 1024)
478
+ ]),
479
+ _: 1
480
+ })
481
+ ])
482
+ ]);
483
+ };
484
+ }
485
+ }), ut = (e, t) => {
486
+ const n = e.__vccOpts || e;
487
+ for (const [o, r] of t)
488
+ n[o] = r;
489
+ return n;
490
+ }, dt = /* @__PURE__ */ ut(lt, [["__scopeId", "data-v-0a83e2b9"]]), pt = ["light", "dark", "system"];
491
+ function J(e) {
492
+ return typeof e == "string" && pt.includes(e);
493
+ }
494
+ const L = "openapi-devtools-theme", k = S("system"), _ = S(!1);
495
+ let E = null, A = null;
496
+ function I() {
497
+ return typeof window < "u" && typeof document < "u";
498
+ }
499
+ function ft() {
500
+ return ee() !== null;
501
+ }
502
+ function gt() {
503
+ const e = i(() => k.value === "system" ? _.value ? "dark" : "light" : k.value), t = i(() => e.value === "dark");
504
+ function n() {
505
+ if (!I()) return;
506
+ const a = document.documentElement;
507
+ e.value === "dark" ? (a.classList.add("dark"), a.classList.remove("light")) : (a.classList.add("light"), a.classList.remove("dark"));
508
+ }
509
+ function o(a) {
510
+ if (!J(a)) {
511
+ console.warn(`[DevTools] Invalid theme mode: ${a}`);
512
+ return;
513
+ }
514
+ if (k.value = a, I())
515
+ try {
516
+ localStorage.setItem(L, a);
517
+ } catch {
518
+ console.warn("[DevTools] Unable to persist theme preference");
519
+ }
520
+ }
521
+ function r() {
522
+ k.value === "system" ? o(_.value ? "light" : "dark") : o(k.value === "dark" ? "light" : "dark");
523
+ }
524
+ function l() {
525
+ o("system");
526
+ }
527
+ function g() {
528
+ E && A && (E.removeEventListener("change", A), E = null, A = null);
529
+ }
530
+ function y() {
531
+ if (!I()) return;
532
+ g();
533
+ const a = window.matchMedia("(prefers-color-scheme: dark)");
534
+ _.value = a.matches;
535
+ const c = (f) => {
536
+ _.value = f.matches;
537
+ };
538
+ a.addEventListener("change", c), E = a, A = c;
539
+ try {
540
+ const f = localStorage.getItem(L);
541
+ J(f) && (k.value = f);
542
+ } catch {
543
+ }
544
+ n();
545
+ }
546
+ function p() {
547
+ if (g(), k.value = "system", _.value = !1, I()) {
548
+ document.documentElement.classList.remove("dark", "light");
549
+ try {
550
+ localStorage.removeItem(L);
551
+ } catch {
552
+ }
553
+ }
554
+ }
555
+ return fe([k, _], () => {
556
+ n();
557
+ }), ft() && (X(() => {
558
+ y();
559
+ }), me(() => {
560
+ g();
561
+ })), {
562
+ /**
563
+ * Current theme mode setting ('light', 'dark', or 'system')
564
+ */
565
+ themeMode: i(() => k.value),
566
+ /**
567
+ * The effective theme after resolving 'system' mode
568
+ */
569
+ effectiveTheme: e,
570
+ /**
571
+ * Whether dark mode is currently active
572
+ */
573
+ isDark: t,
574
+ /**
575
+ * Whether the system prefers dark mode
576
+ */
577
+ systemPrefersDark: i(() => _.value),
578
+ /**
579
+ * Set the theme mode
580
+ */
581
+ setTheme: o,
582
+ /**
583
+ * Toggle between light and dark mode
584
+ */
585
+ toggleTheme: r,
586
+ /**
587
+ * Reset to system preference
588
+ */
589
+ resetToSystem: l,
590
+ /**
591
+ * Manually initialize theme (useful for SSR hydration)
592
+ */
593
+ initialize: y,
594
+ /**
595
+ * Reset theme state to defaults (useful for testing)
596
+ */
597
+ resetState: p
598
+ };
599
+ }
600
+ let K = !1, Y = null;
601
+ function mt() {
602
+ if (K)
603
+ return Y;
604
+ const e = he(dt), t = re();
605
+ return e.use(t), e.use(Ye), e.mount("#app"), K = !0, Y = e, e;
606
+ }
607
+ typeof window < "u" && document.getElementById("app") && mt();
608
+ export {
609
+ Ce as C,
610
+ Te as D,
611
+ G as R,
612
+ Q as Z,
613
+ ut as _,
614
+ Ke as a,
615
+ mt as b,
616
+ T as c,
617
+ gt as d,
618
+ Ae as u
619
+ };
620
+ //# sourceMappingURL=main-CWgkFc8w.js.map