@samyx/preview-stacks-ui 0.31.0 → 0.32.0

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 (156) hide show
  1. package/dist/assets/ActionButton.vue_vue_type_script_setup_true_lang-D8Xlp6c9.js +2 -0
  2. package/dist/assets/{ActionButton.vue_vue_type_script_setup_true_lang-C6PZurL0.js.map → ActionButton.vue_vue_type_script_setup_true_lang-D8Xlp6c9.js.map} +1 -1
  3. package/dist/assets/{AxesTab-BNAORqpJ.js → AxesTab-BWzsbFAx.js} +2 -2
  4. package/dist/assets/{AxesTab-BNAORqpJ.js.map → AxesTab-BWzsbFAx.js.map} +1 -1
  5. package/dist/assets/ConfigTab-ucr87rD6.js +2 -0
  6. package/dist/assets/{ConfigTab-8Ifz-gnA.js.map → ConfigTab-ucr87rD6.js.map} +1 -1
  7. package/dist/assets/{ConfigView-CPj8QeBo.js → ConfigView-BbRYGyvZ.js} +2 -2
  8. package/dist/assets/{ConfigView-CPj8QeBo.js.map → ConfigView-BbRYGyvZ.js.map} +1 -1
  9. package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-DDt6qe65.js +2 -0
  10. package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-DDt6qe65.js.map +1 -0
  11. package/dist/assets/DangerTab-BimKNJab.js +2 -0
  12. package/dist/assets/DangerTab-BimKNJab.js.map +1 -0
  13. package/dist/assets/DashboardView-DK0qDo-f.js +2 -0
  14. package/dist/assets/{DashboardView-CuDBbXnZ.js.map → DashboardView-DK0qDo-f.js.map} +1 -1
  15. package/dist/assets/DeploymentDetailView-BcImKApM.js +2 -0
  16. package/dist/assets/{DeploymentDetailView-qtlOQQ0z.js.map → DeploymentDetailView-BcImKApM.js.map} +1 -1
  17. package/dist/assets/DeploymentsView-Cx9BqQ8Q.js +2 -0
  18. package/dist/assets/DeploymentsView-Cx9BqQ8Q.js.map +1 -0
  19. package/dist/assets/DialogTrigger-nWkfUj3N.js +2 -0
  20. package/dist/assets/DialogTrigger-nWkfUj3N.js.map +1 -0
  21. package/dist/assets/{EquivalentCommand-DX5xFW-p.js → EquivalentCommand-D92xDU0_.js} +3 -3
  22. package/dist/assets/{EquivalentCommand-DX5xFW-p.js.map → EquivalentCommand-D92xDU0_.js.map} +1 -1
  23. package/dist/assets/{ErrorNote.vue_vue_type_script_setup_true_lang-CUZs06O0.js → ErrorNote.vue_vue_type_script_setup_true_lang-DVbGiVTB.js} +2 -2
  24. package/dist/assets/{ErrorNote.vue_vue_type_script_setup_true_lang-CUZs06O0.js.map → ErrorNote.vue_vue_type_script_setup_true_lang-DVbGiVTB.js.map} +1 -1
  25. package/dist/assets/HelpModal.vue_vue_type_script_setup_true_lang-CSOdBT2E.js +2 -0
  26. package/dist/assets/HelpModal.vue_vue_type_script_setup_true_lang-CSOdBT2E.js.map +1 -0
  27. package/dist/assets/JobDetailView-B1sXXVJ5.js +2 -0
  28. package/dist/assets/JobDetailView-B1sXXVJ5.js.map +1 -0
  29. package/dist/assets/JobsView-CC7lre3Q.css +1 -0
  30. package/dist/assets/JobsView-DjP5lXHk.js +2 -0
  31. package/dist/assets/JobsView-DjP5lXHk.js.map +1 -0
  32. package/dist/assets/LogViewer.vue_vue_type_script_setup_true_lang-Bhy_5cyC.js +3 -0
  33. package/dist/assets/{LogViewer.vue_vue_type_script_setup_true_lang-Sg8LzIyX.js.map → LogViewer.vue_vue_type_script_setup_true_lang-Bhy_5cyC.js.map} +1 -1
  34. package/dist/assets/{LoginView-Gpnnyg1m.js → LoginView-CIkI9Qm_.js} +2 -2
  35. package/dist/assets/{LoginView-Gpnnyg1m.js.map → LoginView-CIkI9Qm_.js.map} +1 -1
  36. package/dist/assets/LogsTab-D8zhR7Eb.js +6 -0
  37. package/dist/assets/{LogsTab-CZ0fNgsO.js.map → LogsTab-D8zhR7Eb.js.map} +1 -1
  38. package/dist/assets/{NotFoundView-BE2kvYuP.js → NotFoundView-aUtqh2Qi.js} +2 -2
  39. package/dist/assets/{NotFoundView-BE2kvYuP.js.map → NotFoundView-aUtqh2Qi.js.map} +1 -1
  40. package/dist/assets/NotifiersView-aRHInxVx.js +2 -0
  41. package/dist/assets/{NotifiersView-Df_CM6Bj.js.map → NotifiersView-aRHInxVx.js.map} +1 -1
  42. package/dist/assets/OverviewTab-ChCj5LAj.js +2 -0
  43. package/dist/assets/{OverviewTab-BSeic8dR.js.map → OverviewTab-ChCj5LAj.js.map} +1 -1
  44. package/dist/assets/PublicLogsView-DIWJH7qL.js +4 -0
  45. package/dist/assets/{PublicLogsView-BDyvxkgj.js.map → PublicLogsView-DIWJH7qL.js.map} +1 -1
  46. package/dist/assets/{RefreshButton.vue_vue_type_script_setup_true_lang-ZUc7pgOx.js → RefreshButton.vue_vue_type_script_setup_true_lang-P7VwWcRa.js} +2 -2
  47. package/dist/assets/{RefreshButton.vue_vue_type_script_setup_true_lang-ZUc7pgOx.js.map → RefreshButton.vue_vue_type_script_setup_true_lang-P7VwWcRa.js.map} +1 -1
  48. package/dist/assets/RegistriesView-D2aCsYIu.js +2 -0
  49. package/dist/assets/{RegistriesView-DMzsLFcT.js.map → RegistriesView-D2aCsYIu.js.map} +1 -1
  50. package/dist/assets/RelativeTime.vue_vue_type_script_setup_true_lang-NGvUfuKC.js +2 -0
  51. package/dist/assets/RelativeTime.vue_vue_type_script_setup_true_lang-NGvUfuKC.js.map +1 -0
  52. package/dist/assets/{RequiresTab-DkuxJsEj.js → RequiresTab-3BhU5BHd.js} +2 -2
  53. package/dist/assets/{RequiresTab-DkuxJsEj.js.map → RequiresTab-3BhU5BHd.js.map} +1 -1
  54. package/dist/assets/RouteTarget.vue_vue_type_script_setup_true_lang-Caee0wEB.js +2 -0
  55. package/dist/assets/RouteTarget.vue_vue_type_script_setup_true_lang-Caee0wEB.js.map +1 -0
  56. package/dist/assets/RoutingView-T9afX8_M.js +9 -0
  57. package/dist/assets/RoutingView-T9afX8_M.js.map +1 -0
  58. package/dist/assets/RoutingView-tn0RQdqM.css +0 -0
  59. package/dist/assets/RuntimeTab-Bh2gGuhj.js +2 -0
  60. package/dist/assets/RuntimeTab-Bh2gGuhj.js.map +1 -0
  61. package/dist/assets/RuntimeTab-By55qdsQ.css +1 -0
  62. package/dist/assets/SelectMenu.vue_vue_type_script_setup_true_lang-BtHqT6G1.js +2 -0
  63. package/dist/assets/{SelectMenu.vue_vue_type_script_setup_true_lang-DKYlHroe.js.map → SelectMenu.vue_vue_type_script_setup_true_lang-BtHqT6G1.js.map} +1 -1
  64. package/dist/assets/{SettingsView-CgwOmLat.js → SettingsView-DIKjdBdy.js} +2 -2
  65. package/dist/assets/{SettingsView-CgwOmLat.js.map → SettingsView-DIKjdBdy.js.map} +1 -1
  66. package/dist/assets/{SkeletonList.vue_vue_type_script_setup_true_lang-Bwex16vy.js → SkeletonList.vue_vue_type_script_setup_true_lang-BmeRGmxf.js} +2 -2
  67. package/dist/assets/{SkeletonList.vue_vue_type_script_setup_true_lang-Bwex16vy.js.map → SkeletonList.vue_vue_type_script_setup_true_lang-BmeRGmxf.js.map} +1 -1
  68. package/dist/assets/SpecDetailView-Bd4Hx-bI.js +2 -0
  69. package/dist/assets/{SpecDetailView-BlHaL1Y8.js.map → SpecDetailView-Bd4Hx-bI.js.map} +1 -1
  70. package/dist/assets/SpecsView-B9qQPzkG.js +2 -0
  71. package/dist/assets/{SpecsView-C-bS2Av2.js.map → SpecsView-B9qQPzkG.js.map} +1 -1
  72. package/dist/assets/{SsoMark.vue_vue_type_script_setup_true_lang-aKprkHCF.js → SsoMark.vue_vue_type_script_setup_true_lang-BBiCq_4w.js} +2 -2
  73. package/dist/assets/{SsoMark.vue_vue_type_script_setup_true_lang-aKprkHCF.js.map → SsoMark.vue_vue_type_script_setup_true_lang-BBiCq_4w.js.map} +1 -1
  74. package/dist/assets/{SsoView-BUz2EaVq.js → SsoView-CltdTdwt.js} +2 -2
  75. package/dist/assets/{SsoView-BUz2EaVq.js.map → SsoView-CltdTdwt.js.map} +1 -1
  76. package/dist/assets/StateBadge.vue_vue_type_script_setup_true_lang-nD6Zdx0q.js +2 -0
  77. package/dist/assets/StateBadge.vue_vue_type_script_setup_true_lang-nD6Zdx0q.js.map +1 -0
  78. package/dist/assets/{SubmitView-s5haxS9q.js → SubmitView-D-jg5Wxy.js} +5 -5
  79. package/dist/assets/{SubmitView-s5haxS9q.js.map → SubmitView-D-jg5Wxy.js.map} +1 -1
  80. package/dist/assets/SwarmView-CqFndUrV.js +2 -0
  81. package/dist/assets/{SwarmView-skNbhHws.js.map → SwarmView-CqFndUrV.js.map} +1 -1
  82. package/dist/assets/Teleport-I0XiM19H.js +4 -0
  83. package/dist/assets/{Teleport-CKfsIrp8.js.map → Teleport-I0XiM19H.js.map} +1 -1
  84. package/dist/assets/TerminalTab-Dleba0ru.js +3 -0
  85. package/dist/assets/{TerminalTab-CPuFkMzh.js.map → TerminalTab-Dleba0ru.js.map} +1 -1
  86. package/dist/assets/UsersView-Bd8B9pLD.css +1 -0
  87. package/dist/assets/UsersView-BrZbuuOg.js +2 -0
  88. package/dist/assets/UsersView-BrZbuuOg.js.map +1 -0
  89. package/dist/assets/VarEditor.vue_vue_type_script_setup_true_lang-uPHU_Ugp.js +2 -0
  90. package/dist/assets/VarEditor.vue_vue_type_script_setup_true_lang-uPHU_Ugp.js.map +1 -0
  91. package/dist/assets/VarIO-BVE8A4Ur.css +1 -0
  92. package/dist/assets/VarIO-BldCQ6Xx.js +15 -0
  93. package/dist/assets/VarIO-BldCQ6Xx.js.map +1 -0
  94. package/dist/assets/VariablesView-CQp0T7Q6.js +3 -0
  95. package/dist/assets/VariablesView-CQp0T7Q6.js.map +1 -0
  96. package/dist/assets/VariablesView-Ck3IyRCN.css +1 -0
  97. package/dist/assets/index-B1ONXQzZ.css +1 -0
  98. package/dist/assets/index-Cqe_7QZw.js +154 -0
  99. package/dist/assets/index-Cqe_7QZw.js.map +1 -0
  100. package/dist/assets/useDeployment-BDbkdxpo.js +2 -0
  101. package/dist/assets/{useDeployment-CV0kcdoc.js.map → useDeployment-BDbkdxpo.js.map} +1 -1
  102. package/dist/assets/useJobQueue-D5JkRJNX.js +2 -0
  103. package/dist/assets/useJobQueue-D5JkRJNX.js.map +1 -0
  104. package/dist/index.html +2 -2
  105. package/package.json +2 -1
  106. package/dist/assets/ActionButton.vue_vue_type_script_setup_true_lang-C6PZurL0.js +0 -2
  107. package/dist/assets/ConfigTab-8Ifz-gnA.js +0 -2
  108. package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-B0PJUns4.js +0 -2
  109. package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-B0PJUns4.js.map +0 -1
  110. package/dist/assets/DangerTab-BwXkb6Rr.js +0 -2
  111. package/dist/assets/DangerTab-BwXkb6Rr.js.map +0 -1
  112. package/dist/assets/DashboardView-CuDBbXnZ.js +0 -2
  113. package/dist/assets/DeploymentDetailView-qtlOQQ0z.js +0 -2
  114. package/dist/assets/DeploymentsView-CQwTTlTI.js +0 -2
  115. package/dist/assets/DeploymentsView-CQwTTlTI.js.map +0 -1
  116. package/dist/assets/HelpModal.vue_vue_type_script_setup_true_lang-ErbSSi6D.js +0 -2
  117. package/dist/assets/HelpModal.vue_vue_type_script_setup_true_lang-ErbSSi6D.js.map +0 -1
  118. package/dist/assets/JobDetailView-BgoEL7EB.js +0 -2
  119. package/dist/assets/JobDetailView-BgoEL7EB.js.map +0 -1
  120. package/dist/assets/JobsView-CVG0iuN4.js +0 -2
  121. package/dist/assets/JobsView-CVG0iuN4.js.map +0 -1
  122. package/dist/assets/LogViewer.vue_vue_type_script_setup_true_lang-Sg8LzIyX.js +0 -3
  123. package/dist/assets/LogsTab-CZ0fNgsO.js +0 -6
  124. package/dist/assets/NotifiersView-Df_CM6Bj.js +0 -2
  125. package/dist/assets/OverviewTab-BSeic8dR.js +0 -2
  126. package/dist/assets/PublicLogsView-BDyvxkgj.js +0 -4
  127. package/dist/assets/RegistriesView-DMzsLFcT.js +0 -2
  128. package/dist/assets/RelativeTime.vue_vue_type_script_setup_true_lang-D4NO-r5D.js +0 -2
  129. package/dist/assets/RelativeTime.vue_vue_type_script_setup_true_lang-D4NO-r5D.js.map +0 -1
  130. package/dist/assets/RoutingView-BEJ3iJ9c.js +0 -9
  131. package/dist/assets/RoutingView-BEJ3iJ9c.js.map +0 -1
  132. package/dist/assets/RuntimeTab-DY8ZYeng.css +0 -1
  133. package/dist/assets/RuntimeTab-bWJuLJcn.js +0 -2
  134. package/dist/assets/RuntimeTab-bWJuLJcn.js.map +0 -1
  135. package/dist/assets/SelectMenu.vue_vue_type_script_setup_true_lang-DKYlHroe.js +0 -2
  136. package/dist/assets/SpecDetailView-BlHaL1Y8.js +0 -2
  137. package/dist/assets/SpecsView-C-bS2Av2.js +0 -2
  138. package/dist/assets/StateBadge.vue_vue_type_script_setup_true_lang-C-7EQXcg.js +0 -2
  139. package/dist/assets/StateBadge.vue_vue_type_script_setup_true_lang-C-7EQXcg.js.map +0 -1
  140. package/dist/assets/SwarmView-skNbhHws.js +0 -2
  141. package/dist/assets/Teleport-CKfsIrp8.js +0 -4
  142. package/dist/assets/TerminalTab-CPuFkMzh.js +0 -3
  143. package/dist/assets/UsersView-Be77zCYE.css +0 -1
  144. package/dist/assets/UsersView-CIfFPshj.js +0 -2
  145. package/dist/assets/UsersView-CIfFPshj.js.map +0 -1
  146. package/dist/assets/VarEditor.vue_vue_type_script_setup_true_lang-JwR7DqO1.js +0 -2
  147. package/dist/assets/VarEditor.vue_vue_type_script_setup_true_lang-JwR7DqO1.js.map +0 -1
  148. package/dist/assets/VariablesView-ByeOvDGJ.css +0 -1
  149. package/dist/assets/VariablesView-DatC33mT.js +0 -2
  150. package/dist/assets/VariablesView-DatC33mT.js.map +0 -1
  151. package/dist/assets/index-B_k9b7xG.css +0 -1
  152. package/dist/assets/index-T3JGe9ku.js +0 -154
  153. package/dist/assets/index-T3JGe9ku.js.map +0 -1
  154. package/dist/assets/useDeployment-CV0kcdoc.js +0 -2
  155. package/dist/assets/useFormat-DIlTY5Dl.js +0 -2
  156. package/dist/assets/useFormat-DIlTY5Dl.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{W as l,k as i,p as n,C as d,P as p,X as u}from"./index-T3JGe9ku.js";import{w as c,r as y}from"./useVars-VN9gYdR6.js";const e=l({id:"",detail:null,error:"",loading:!1,vars:[]}),f=i(()=>p(e.vars)),k=i(()=>u(e.id)),h=i(()=>{var a;return((a=e.detail)==null?void 0:a.kind)==="shared"}),b=i(()=>{var a;return(((a=e.detail)==null?void 0:a.axes)??[]).filter(s=>!s.verifiable).map(s=>s.name)});async function t(){const a=e.id;e.loading=!0;const s=await n.get(`/api/deployments/${encodeURIComponent(a)}${f.value}`);if(e.id!==a)return;if(e.loading=!1,!s.ok){e.detail=null,e.error=d(s,`GET /api/deployments/${a}`);return}e.error="";const r=s.body;e.detail={id:r.id??a,kind:r.kind==="shared"?"shared":"isolated",createdAt:r.createdAt,updatedAt:r.updatedAt,stack:typeof r.stack=="string"?r.stack:"",busy:r.busy??null,orchestrator:r.orchestrator??null,sleep:r.sleep??null,asleep:r.asleep??null,compose:r.compose?{file:r.compose.file??"?",profiles:r.compose.profiles??[],overlays:r.compose.overlays??[]}:null,requires:Array.isArray(r.requires)?r.requires:[],axes:(Array.isArray(r.axes)?r.axes:[]).map(o=>({name:o.name,hooks:Array.isArray(o.hooks)?o.hooks:[],verifiable:o.verifiable??(Array.isArray(o.hooks)&&o.hooks.includes("assert_gone"))})),env:Array.isArray(r.env)?r.env:[]}}function g(a){e.id===a&&(e.detail||e.error)||(e.id=a,e.detail=null,e.error="",e.vars=y(a),t())}function m(){c(e.id,e.vars)}function x(){m(),t()}export{x as a,e as d,h as i,t as l,g as o,m as p,k as r,b as u,f as v};
2
- //# sourceMappingURL=useDeployment-CV0kcdoc.js.map
@@ -1,2 +0,0 @@
1
- function a(t){return t?new Date(t).toLocaleString("sv"):"—"}function u(t,n){if(!t)return"—";const r=Math.max(0,Math.round(((n??Date.now())-t)/1e3)),e=r<60?`${r}s`:`${Math.floor(r/60)}m${String(r%60).padStart(2,"0")}s`;return n?e:`${e}…`}function s(t){if(!t)return"—";const n=Math.max(0,Math.round((Date.now()-t)/1e3));if(n<45)return"just now";const r=Math.round(n/60);if(r<60)return`${r}m ago`;const e=Math.round(r/60);return e<24?`${e}h ago`:`${Math.round(e/24)}d ago`}const o={up:"Deploy",down:"Tear down",verify:"Verify",sleep:"Sleep",wake:"Wake"};function c(t){return t?o[t]??t:"—"}function i(t){if(!t)return"—";const n=t.replace(/[-_]+/g," ");return n.charAt(0).toUpperCase()+n.slice(1)}export{c as a,s as b,a as c,i as s,u as t};
2
- //# sourceMappingURL=useFormat-DIlTY5Dl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFormat-DIlTY5Dl.js","sources":["../../src/composables/useFormat.ts"],"sourcesContent":["/**\n * Formatting shared across views. All times are the VIEWER's local time, with no zone marker,\n * because everything on the page — log lines, job stamps, deployment timestamps — comes from the\n * same clock and mixing a rendered zone into one of them is how two timestamps stop comparing.\n */\n\n/** ISO 8601 shaped and sortable: `2026-07-28 05:17:00`. `sv` is the locale that renders it. */\nexport function stamp(ms: number | undefined): string {\n return ms ? new Date(ms).toLocaleString('sv') : '—';\n}\n\n/** Just the clock, for a log line where the date is the same for every row. */\nexport function hhmmss(ms: number | undefined): string {\n return ms ? new Date(ms).toTimeString().slice(0, 8) : '--:--:--';\n}\n\n/** `12s` / `3m07s`. A running job gets an ellipsis so a stale number cannot read as a final one. */\nexport function took(startedAt: number | undefined, endedAt?: number): string {\n if (!startedAt) return '—';\n const s = Math.max(0, Math.round(((endedAt ?? Date.now()) - startedAt) / 1000));\n const text = s < 60 ? `${s}s` : `${Math.floor(s / 60)}m${String(s % 60).padStart(2, '0')}s`;\n return endedAt ? text : `${text}…`;\n}\n\n/** `2 minutes ago`, for an activity feed where the exact second is noise. */\nexport function ago(ms: number | undefined): string {\n if (!ms) return '—';\n const s = Math.max(0, Math.round((Date.now() - ms) / 1000));\n if (s < 45) return 'just now';\n const m = Math.round(s / 60);\n if (m < 60) return `${m}m ago`;\n const h = Math.round(m / 60);\n if (h < 24) return `${h}h ago`;\n return `${Math.round(h / 24)}d ago`;\n}\n\n/**\n * The user-facing name of an action.\n *\n * The API's verbs (`up`, `down`, `verify`) are the CLI's and the spec's vocabulary, and they stay in\n * both. But a BUTTON should say what it does, so the same mapping is used everywhere a person reads\n * an action — buttons, the job list, a job's own heading — rather than only on the buttons, which\n * would leave someone clicking \"Tear down\" and then reading about a job called `down`.\n */\nconst ACTION_LABELS: Record<string, string> = {\n up: 'Deploy',\n down: 'Tear down',\n verify: 'Verify',\n sleep: 'Sleep',\n wake: 'Wake',\n};\n\nexport function actionLabel(action: string | undefined): string {\n if (!action) return '—';\n return ACTION_LABELS[action] ?? action;\n}\n\n/**\n * An API enum, rendered for a person: `isolated` → `Isolated`, `start-failed` → `Start failed`.\n *\n * ONE helper rather than capitalising at each render site, because the two halves have to stay\n * apart: the VALUE stays lowercase everywhere it is compared, stored, sent or put in a class name,\n * and only the rendered text changes. Capitalising in place — `state === 'Running'` — is how a badge\n * starts looking right and a comparison silently stops matching.\n *\n * Sentence case, not Title Case: `Start failed`, not `Start Failed`. Title Case on a status reads\n * like a proper noun, and these are descriptions.\n *\n * Identifiers are NOT sentences and must never come through here — a stack name, container name,\n * deployment id, file name, env var or hostname is a literal, and capitalising one produces a value\n * that does not exist.\n */\nexport function sentence(value: string | null | undefined): string {\n if (!value) return '—';\n const words = value.replace(/[-_]+/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n"],"names":["stamp","ms","took","startedAt","endedAt","s","text","ago","m","h","ACTION_LABELS","actionLabel","action","sentence","value","words"],"mappings":"AAOO,SAASA,EAAMC,EAAgC,CACpD,OAAOA,EAAK,IAAI,KAAKA,CAAE,EAAE,eAAe,IAAI,EAAI,GAClD,CAQO,SAASC,EAAKC,EAA+BC,EAA0B,CAC5E,GAAI,CAACD,EAAW,MAAO,IACvB,MAAME,EAAI,KAAK,IAAI,EAAG,KAAK,QAAQD,GAAW,KAAK,IAAA,GAASD,GAAa,GAAI,CAAC,EACxEG,EAAOD,EAAI,GAAK,GAAGA,CAAC,IAAM,GAAG,KAAK,MAAMA,EAAI,EAAE,CAAC,IAAI,OAAOA,EAAI,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,IACxF,OAAOD,EAAUE,EAAO,GAAGA,CAAI,GACjC,CAGO,SAASC,EAAIN,EAAgC,CAClD,GAAI,CAACA,EAAI,MAAO,IAChB,MAAMI,EAAI,KAAK,IAAI,EAAG,KAAK,OAAO,KAAK,IAAA,EAAQJ,GAAM,GAAI,CAAC,EAC1D,GAAII,EAAI,GAAI,MAAO,WACnB,MAAMG,EAAI,KAAK,MAAMH,EAAI,EAAE,EAC3B,GAAIG,EAAI,GAAI,MAAO,GAAGA,CAAC,QACvB,MAAMC,EAAI,KAAK,MAAMD,EAAI,EAAE,EAC3B,OAAIC,EAAI,GAAW,GAAGA,CAAC,QAChB,GAAG,KAAK,MAAMA,EAAI,EAAE,CAAC,OAC9B,CAUA,MAAMC,EAAwC,CAC5C,GAAI,SACJ,KAAM,YACN,OAAQ,SACR,MAAO,QACP,KAAM,MACR,EAEO,SAASC,EAAYC,EAAoC,CAC9D,OAAKA,EACEF,EAAcE,CAAM,GAAKA,EADZ,GAEtB,CAiBO,SAASC,EAASC,EAA0C,CACjE,GAAI,CAACA,EAAO,MAAO,IACnB,MAAMC,EAAQD,EAAM,QAAQ,SAAU,GAAG,EACzC,OAAOC,EAAM,OAAO,CAAC,EAAE,cAAgBA,EAAM,MAAM,CAAC,CACtD"}