@samyx/preview-stacks-ui 0.25.2 → 0.27.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.
- package/dist/assets/{ActionButton.vue_vue_type_script_setup_true_lang-D5wrEmB2.js → ActionButton.vue_vue_type_script_setup_true_lang-B0qf7_XI.js} +2 -2
- package/dist/assets/{ActionButton.vue_vue_type_script_setup_true_lang-D5wrEmB2.js.map → ActionButton.vue_vue_type_script_setup_true_lang-B0qf7_XI.js.map} +1 -1
- package/dist/assets/{AxesTab-DPb0krkI.js → AxesTab-BxVd_LDI.js} +2 -2
- package/dist/assets/{AxesTab-DPb0krkI.js.map → AxesTab-BxVd_LDI.js.map} +1 -1
- package/dist/assets/{ConfigTab-DLhjDiis.js → ConfigTab-DSHTlGAK.js} +2 -2
- package/dist/assets/{ConfigTab-DLhjDiis.js.map → ConfigTab-DSHTlGAK.js.map} +1 -1
- package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-R1IfGYYT.js +2 -0
- package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-R1IfGYYT.js.map +1 -0
- package/dist/assets/DangerTab-BZ5e4YGe.js +2 -0
- package/dist/assets/DangerTab-BZ5e4YGe.js.map +1 -0
- package/dist/assets/{DashboardView-DxZUkxRF.js → DashboardView-TYfDe8IH.js} +2 -2
- package/dist/assets/{DashboardView-DxZUkxRF.js.map → DashboardView-TYfDe8IH.js.map} +1 -1
- package/dist/assets/DeploymentDetailView-RSDMb2tC.js +2 -0
- package/dist/assets/DeploymentDetailView-RSDMb2tC.js.map +1 -0
- package/dist/assets/DeploymentsView-DYAPYBih.js +2 -0
- package/dist/assets/DeploymentsView-DYAPYBih.js.map +1 -0
- package/dist/assets/{EquivalentCommand-C45BzkNz.js → EquivalentCommand-GFG6rkn5.js} +3 -3
- package/dist/assets/{EquivalentCommand-C45BzkNz.js.map → EquivalentCommand-GFG6rkn5.js.map} +1 -1
- package/dist/assets/{ErrorNote.vue_vue_type_script_setup_true_lang-B3hfwyPR.js → ErrorNote.vue_vue_type_script_setup_true_lang-DNaY6OBe.js} +2 -2
- package/dist/assets/{ErrorNote.vue_vue_type_script_setup_true_lang-B3hfwyPR.js.map → ErrorNote.vue_vue_type_script_setup_true_lang-DNaY6OBe.js.map} +1 -1
- package/dist/assets/HelpModal.vue_vue_type_script_setup_true_lang-DEjnzS2A.js +2 -0
- package/dist/assets/{HelpModal.vue_vue_type_script_setup_true_lang-BSOuxyyP.js.map → HelpModal.vue_vue_type_script_setup_true_lang-DEjnzS2A.js.map} +1 -1
- package/dist/assets/JobDetailView-DvFGqRQj.js +2 -0
- package/dist/assets/{JobDetailView-HFOJln2b.js.map → JobDetailView-DvFGqRQj.js.map} +1 -1
- package/dist/assets/{JobsView-dWw_uNGE.js → JobsView-C-rxx15K.js} +2 -2
- package/dist/assets/{JobsView-dWw_uNGE.js.map → JobsView-C-rxx15K.js.map} +1 -1
- package/dist/assets/{LogViewer.vue_vue_type_script_setup_true_lang-5r84oNls.js → LogViewer.vue_vue_type_script_setup_true_lang-6CJlo0ox.js} +3 -3
- package/dist/assets/{LogViewer.vue_vue_type_script_setup_true_lang-5r84oNls.js.map → LogViewer.vue_vue_type_script_setup_true_lang-6CJlo0ox.js.map} +1 -1
- package/dist/assets/LoginView-CAXL0Xhr.js +2 -0
- package/dist/assets/LoginView-CAXL0Xhr.js.map +1 -0
- package/dist/assets/LoginView-Djedwklv.css +1 -0
- package/dist/assets/LogsTab-Bzz4JBQM.js +6 -0
- package/dist/assets/LogsTab-Bzz4JBQM.js.map +1 -0
- package/dist/assets/{NotFoundView-jZIc0wDm.js → NotFoundView-BRn9Jn4H.js} +2 -2
- package/dist/assets/{NotFoundView-jZIc0wDm.js.map → NotFoundView-BRn9Jn4H.js.map} +1 -1
- package/dist/assets/{NotifiersView-DJu-c-a6.js → NotifiersView-Bd13G-1b.js} +2 -2
- package/dist/assets/{NotifiersView-DJu-c-a6.js.map → NotifiersView-Bd13G-1b.js.map} +1 -1
- package/dist/assets/OverviewTab-Ae5-H5DV.js +2 -0
- package/dist/assets/OverviewTab-Ae5-H5DV.js.map +1 -0
- package/dist/assets/PublicLogsView-BAe90EbI.css +1 -0
- package/dist/assets/PublicLogsView-DvCE0GT1.js +4 -0
- package/dist/assets/PublicLogsView-DvCE0GT1.js.map +1 -0
- package/dist/assets/{RefreshButton.vue_vue_type_script_setup_true_lang-CXCY3Vlc.js → RefreshButton.vue_vue_type_script_setup_true_lang-DpeOKN8U.js} +2 -2
- package/dist/assets/{RefreshButton.vue_vue_type_script_setup_true_lang-CXCY3Vlc.js.map → RefreshButton.vue_vue_type_script_setup_true_lang-DpeOKN8U.js.map} +1 -1
- package/dist/assets/RegistriesView-ZRRfxVTX.js +2 -0
- package/dist/assets/{RegistriesView-BeiFx468.js.map → RegistriesView-ZRRfxVTX.js.map} +1 -1
- package/dist/assets/{RelativeTime.vue_vue_type_script_setup_true_lang-BGissyps.js → RelativeTime.vue_vue_type_script_setup_true_lang-Dm9XnXF7.js} +2 -2
- package/dist/assets/{RelativeTime.vue_vue_type_script_setup_true_lang-BGissyps.js.map → RelativeTime.vue_vue_type_script_setup_true_lang-Dm9XnXF7.js.map} +1 -1
- package/dist/assets/{RequiresTab-Bb3_lYqC.js → RequiresTab-CLfNJHOh.js} +2 -2
- package/dist/assets/{RequiresTab-Bb3_lYqC.js.map → RequiresTab-CLfNJHOh.js.map} +1 -1
- package/dist/assets/{RoutingView-y8L_ex2z.js → RoutingView-BCsr0bjm.js} +3 -3
- package/dist/assets/{RoutingView-y8L_ex2z.js.map → RoutingView-BCsr0bjm.js.map} +1 -1
- package/dist/assets/RuntimeTab-CeJS5wuv.js +2 -0
- package/dist/assets/RuntimeTab-CeJS5wuv.js.map +1 -0
- package/dist/assets/SelectMenu.vue_vue_type_script_setup_true_lang-BLfPhhAj.js +2 -0
- package/dist/assets/{SelectMenu.vue_vue_type_script_setup_true_lang-D8NGgBfa.js.map → SelectMenu.vue_vue_type_script_setup_true_lang-BLfPhhAj.js.map} +1 -1
- package/dist/assets/{SettingsView-C-xJVgVw.js → SettingsView-Bo-SQP0q.js} +2 -2
- package/dist/assets/{SettingsView-C-xJVgVw.js.map → SettingsView-Bo-SQP0q.js.map} +1 -1
- package/dist/assets/{SkeletonList.vue_vue_type_script_setup_true_lang-qMyLRAMp.js → SkeletonList.vue_vue_type_script_setup_true_lang-DjfNq2KM.js} +2 -2
- package/dist/assets/{SkeletonList.vue_vue_type_script_setup_true_lang-qMyLRAMp.js.map → SkeletonList.vue_vue_type_script_setup_true_lang-DjfNq2KM.js.map} +1 -1
- package/dist/assets/SpecDetailView-C68gpDhO.js +2 -0
- package/dist/assets/{SpecDetailView-CGQZS7NU.js.map → SpecDetailView-C68gpDhO.js.map} +1 -1
- package/dist/assets/{SpecsView-D9mKql2j.js → SpecsView-mr3zSd-0.js} +2 -2
- package/dist/assets/{SpecsView-D9mKql2j.js.map → SpecsView-mr3zSd-0.js.map} +1 -1
- package/dist/assets/SsoView-D2yf-noE.js +2 -0
- package/dist/assets/SsoView-D2yf-noE.js.map +1 -0
- package/dist/assets/{StateBadge.vue_vue_type_script_setup_true_lang-BgbZLzlL.js → StateBadge.vue_vue_type_script_setup_true_lang-BqldkWlT.js} +2 -2
- package/dist/assets/{StateBadge.vue_vue_type_script_setup_true_lang-BgbZLzlL.js.map → StateBadge.vue_vue_type_script_setup_true_lang-BqldkWlT.js.map} +1 -1
- package/dist/assets/{SubmitView-DuGtFMgF.js → SubmitView-Cdxo6Chq.js} +5 -5
- package/dist/assets/{SubmitView-DuGtFMgF.js.map → SubmitView-Cdxo6Chq.js.map} +1 -1
- package/dist/assets/SwarmView-DVKI5lNe.js +2 -0
- package/dist/assets/SwarmView-DVKI5lNe.js.map +1 -0
- package/dist/assets/Teleport-BUn4ayOo.js +4 -0
- package/dist/assets/{Teleport-DfE2iP8c.js.map → Teleport-BUn4ayOo.js.map} +1 -1
- package/dist/assets/TerminalTab-BRumgZMI.js +3 -0
- package/dist/assets/{TerminalTab-D5ncE4Cv.js.map → TerminalTab-BRumgZMI.js.map} +1 -1
- package/dist/assets/{UsersView-BxU2ho4N.js → UsersView-B7C2Bc3R.js} +2 -2
- package/dist/assets/{UsersView-BxU2ho4N.js.map → UsersView-B7C2Bc3R.js.map} +1 -1
- package/dist/assets/{VarEditor.vue_vue_type_script_setup_true_lang-SKwJUsNC.js → VarEditor.vue_vue_type_script_setup_true_lang-CyOlKVt5.js} +2 -2
- package/dist/assets/{VarEditor.vue_vue_type_script_setup_true_lang-SKwJUsNC.js.map → VarEditor.vue_vue_type_script_setup_true_lang-CyOlKVt5.js.map} +1 -1
- package/dist/assets/{VariablesView-BnW2I-92.js → VariablesView-UCBhNd_o.js} +2 -2
- package/dist/assets/{VariablesView-BnW2I-92.js.map → VariablesView-UCBhNd_o.js.map} +1 -1
- package/dist/assets/index-9Ra4jfL4.js +149 -0
- package/dist/assets/index-9Ra4jfL4.js.map +1 -0
- package/dist/assets/index-B_k9b7xG.css +1 -0
- package/dist/assets/useDeployment-DFOIiXrd.js +2 -0
- package/dist/assets/useDeployment-DFOIiXrd.js.map +1 -0
- package/dist/assets/useFormat-DIlTY5Dl.js +2 -0
- package/dist/assets/useFormat-DIlTY5Dl.js.map +1 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-HglPeTkY.js +0 -2
- package/dist/assets/ConflictNote.vue_vue_type_script_setup_true_lang-HglPeTkY.js.map +0 -1
- package/dist/assets/DangerTab-BLDIlbN5.js +0 -2
- package/dist/assets/DangerTab-BLDIlbN5.js.map +0 -1
- package/dist/assets/DeploymentDetailView-CEg8sA5I.js +0 -2
- package/dist/assets/DeploymentDetailView-CEg8sA5I.js.map +0 -1
- package/dist/assets/DeploymentsView-BfhwFiiQ.js +0 -2
- package/dist/assets/DeploymentsView-BfhwFiiQ.js.map +0 -1
- package/dist/assets/HelpModal.vue_vue_type_script_setup_true_lang-BSOuxyyP.js +0 -2
- package/dist/assets/JobDetailView-HFOJln2b.js +0 -2
- package/dist/assets/LoginView-0vIrAhlr.js +0 -2
- package/dist/assets/LoginView-0vIrAhlr.js.map +0 -1
- package/dist/assets/LoginView-BFIG7vGw.css +0 -1
- package/dist/assets/LogsTab-CFlgBsW3.js +0 -6
- package/dist/assets/LogsTab-CFlgBsW3.js.map +0 -1
- package/dist/assets/OverviewTab-DlJt0MIg.js +0 -2
- package/dist/assets/OverviewTab-DlJt0MIg.js.map +0 -1
- package/dist/assets/RegistriesView-BeiFx468.js +0 -2
- package/dist/assets/RuntimeTab-DWZ5eFho.js +0 -2
- package/dist/assets/RuntimeTab-DWZ5eFho.js.map +0 -1
- package/dist/assets/SelectMenu.vue_vue_type_script_setup_true_lang-D8NGgBfa.js +0 -2
- package/dist/assets/SpecDetailView-CGQZS7NU.js +0 -2
- package/dist/assets/Teleport-DfE2iP8c.js +0 -4
- package/dist/assets/TerminalTab-D5ncE4Cv.js +0 -3
- package/dist/assets/index-DVMQBHXF.js +0 -139
- package/dist/assets/index-DVMQBHXF.js.map +0 -1
- package/dist/assets/index-lyuEu6lW.css +0 -1
- package/dist/assets/useDeployment-DGzBsXE-.js +0 -2
- package/dist/assets/useDeployment-DGzBsXE-.js.map +0 -1
- package/dist/assets/useFormat-DVXTfIS-.js +0 -2
- package/dist/assets/useFormat-DVXTfIS-.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{d as o,r as _,i as x}from"./useDeployment-DGzBsXE-.js";import{s as C,c as h}from"./useFormat-DVXTfIS-.js";import{_ as T}from"./SkeletonList.vue_vue_type_script_setup_true_lang-qMyLRAMp.js";import{d as A,c as a,a as e,u as t,x as m,w as p,g as r,f as l,e as b,_ as g,t as i,E as R,F as u,s as k,C as S,j as N,o as n}from"./index-DVMQBHXF.js";import"./useVars-VN9gYdR6.js";const $={class:"panel"},B={class:"phead"},U={key:1,class:"mute"},z={key:1,class:"mute"},L={key:2,class:"kvlist"},V={class:"k"},E={class:"v mono"},I={class:"v"},P={class:"mute",style:{"margin-left":"8px","font-size":"var(--t-sm)"}},j={key:0},q={class:"v"},D={class:"v mono"},F={key:1},H={class:"v"},K={key:0,class:"mute"},O={key:2},G={class:"k"},J={class:"v"},M={class:"mono"},Q={class:"mute",style:{"font-size":"var(--t-sm)"}},W={key:3},X={class:"v"},Y={key:0,class:"mute"},Z={class:"v"},ss={class:"v"},es={class:"v"},ts={class:"v"},ps=A({__name:"OverviewTab",setup(os){const w=S(()=>x.value?"a host singleton previews borrow — no axes, and down is guarded":"one tenant, created and destroyed constantly, expected to leave nothing behind");return(ns,s)=>{var y,v,f;const c=N("RouterLink");return n(),a("section",$,[e("div",B,[s[2]||(s[2]=e("h2",{class:"section"},"Resolved spec",-1)),s[3]||(s[3]=e("span",{class:"grow"},null,-1)),t(o).detail?(n(),m(c,{key:0,to:`/submit?from=${encodeURIComponent(t(o).id)}`},{default:p(()=>[...s[0]||(s[0]=[l(" Duplicate ",-1)])]),_:1},8,["to"])):r("",!0),t(o).detail?(n(),a("span",U,"·")):r("",!0),t(o).detail?(n(),m(c,{key:2,to:`/submit/${encodeURIComponent(t(o).id)}`},{default:p(()=>[...s[1]||(s[1]=[l(" Edit spec & compose → ",-1)])]),_:1},8,["to"])):r("",!0)]),!t(o).detail&&!t(o).error?(n(),m(T,{key:0,rows:5})):t(o).detail?(n(),a("ul",L,[e("li",null,[e("span",V,[s[5]||(s[5]=l(" Stack ",-1)),b(g,{label:"the difference between id and stack"},{default:p(()=>[...s[4]||(s[4]=[l(" The ",-1),e("b",null,"id",-1),l(" is what you named this deployment. The ",-1),e("b",null,"stack",-1),l(" is what its spec resolved to once the variables were filled in — the compose project name, the hostname label, and ",-1),e("code",null,"$STACK",-1),l(" inside every hook. ",-1)])]),_:1})]),e("span",E,i(t(o).detail.stack||"—"),1)]),e("li",null,[s[6]||(s[6]=e("span",{class:"k"},"Kind",-1)),e("span",I,[e("span",{class:R(["badge",t(o).detail.kind])},i(t(C)(t(o).detail.kind)),3),e("span",P,i(w.value),1)])]),(y=t(_))!=null&&y.specName?(n(),a("li",j,[s[8]||(s[8]=e("span",{class:"k"},"Spec",-1)),e("span",q,[e("b",null,i(t(_).specName),1),s[7]||(s[7]=e("span",{class:"mute",style:{"font-size":"var(--t-sm)"}}," — stored, and shared with any other deployment using it ",-1))])])):r("",!0),e("li",null,[s[9]||(s[9]=e("span",{class:"k"},"Compose file",-1)),e("span",D,i(t(o).detail.compose?t(o).detail.compose.file:"none"),1)]),t(o).detail.compose?(n(),a("li",F,[s[10]||(s[10]=e("span",{class:"k"},"Profiles",-1)),e("span",H,[(n(!0),a(u,null,k(t(o).detail.compose.profiles,d=>(n(),a("span",{key:d,class:"badge",style:{"margin-right":"4px"}},i(d),1))),128)),t(o).detail.compose.profiles.length?r("",!0):(n(),a("span",K," none — a bare up starts every service "))])])):r("",!0),(f=(v=t(o).detail.compose)==null?void 0:v.subdomains)!=null&&f.length?(n(),a("li",O,[e("span",G,[s[15]||(s[15]=l(" Subdomains ",-1)),b(g,{label:"how wildcard subdomains work"},{default:p(()=>[s[14]||(s[14]=l(" Anything one label under these hosts reaches the same service the bare host does. An exact hostname you route yourself always wins over the wildcard. ",-1)),t(o).detail.compose.subdomains.some(d=>d.depth==="any")?(n(),a(u,{key:0},[s[11]||(s[11]=l(" A route marked ",-1)),s[12]||(s[12]=e("b",null,"any depth",-1)),s[13]||(s[13]=l(" works over HTTP only — no TLS certificate can cover more than one label. ",-1))],64)):r("",!0)]),_:1})]),e("span",J,[(n(!0),a(u,null,k(t(o).detail.compose.subdomains,d=>(n(),a("div",{key:d.profile},[e("span",M,"*."+i(d.host),1),e("span",Q,[l(" → "+i(d.profile),1),d.depth==="any"?(n(),a(u,{key:0},[l(" · any depth, HTTP only")],64)):r("",!0)])]))),128))])])):r("",!0),t(o).detail.compose?(n(),a("li",W,[s[16]||(s[16]=e("span",{class:"k"},"Overlays",-1)),e("span",X,[(n(!0),a(u,null,k(t(o).detail.compose.overlays,d=>(n(),a("span",{key:d,class:"mono",style:{"margin-right":"8px"}},i(d),1))),128)),t(o).detail.compose.overlays.length?r("",!0):(n(),a("span",Y,"none"))])])):r("",!0),e("li",null,[s[18]||(s[18]=e("span",{class:"k"},"Axes",-1)),e("span",Z,[l(i(t(o).detail.axes.length)+" ",1),t(o).detail.axes.length?(n(),m(c,{key:0,to:`/deployments/${encodeURIComponent(t(o).id)}/axes`},{default:p(()=>[...s[17]||(s[17]=[l(" view → ",-1)])]),_:1},8,["to"])):r("",!0)])]),e("li",null,[s[19]||(s[19]=e("span",{class:"k"},"Requires",-1)),e("span",ss,i(t(o).detail.requires.length),1)]),e("li",null,[s[20]||(s[20]=e("span",{class:"k"},"Created",-1)),e("span",es,i(t(h)(t(o).detail.createdAt)),1)]),e("li",null,[s[21]||(s[21]=e("span",{class:"k"},"Updated",-1)),e("span",ts,i(t(h)(t(o).detail.updatedAt)),1)])])):(n(),a("p",z,"Unavailable until the spec resolves."))])}}});export{ps as default};
|
|
2
|
-
//# sourceMappingURL=OverviewTab-DlJt0MIg.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OverviewTab-DlJt0MIg.js","sources":["../../src/views/tabs/OverviewTab.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/** The resolved spec, summarised. Read-only — everything that acts lives on Danger. */\nimport { computed } from 'vue';\nimport { dep, isShared, row } from '../../composables/useDeployment';\nimport { sentence, stamp } from '../../composables/useFormat';\nimport SkeletonList from '../../components/SkeletonList.vue';\nimport InfoHint from '../../components/InfoHint.vue';\n\nconst kindBlurb = computed(() =>\n isShared.value\n ? 'a host singleton previews borrow — no axes, and down is guarded'\n : 'one tenant, created and destroyed constantly, expected to leave nothing behind',\n);\n</script>\n\n<template>\n <section class=\"panel\">\n <div class=\"phead\">\n <h2 class=\"section\">Resolved spec</h2>\n <span class=\"grow\" />\n <RouterLink v-if=\"dep.detail\" :to=\"`/submit?from=${encodeURIComponent(dep.id)}`\">\n Duplicate\n </RouterLink>\n <span v-if=\"dep.detail\" class=\"mute\">·</span>\n <RouterLink v-if=\"dep.detail\" :to=\"`/submit/${encodeURIComponent(dep.id)}`\">\n Edit spec & compose →\n </RouterLink>\n </div>\n\n <SkeletonList v-if=\"!dep.detail && !dep.error\" :rows=\"5\" />\n <p v-else-if=\"!dep.detail\" class=\"mute\">Unavailable until the spec resolves.</p>\n\n <template v-else>\n <ul class=\"kvlist\">\n <li>\n <span class=\"k\">\n Stack\n <InfoHint label=\"the difference between id and stack\">\n The <b>id</b> is what you named this deployment. The <b>stack</b> is what its spec\n resolved to once the variables were filled in — the compose project name, the hostname\n label, and <code>$STACK</code> inside every hook.\n </InfoHint>\n </span>\n <span class=\"v mono\">{{ dep.detail.stack || '—' }}</span>\n </li>\n <li>\n <span class=\"k\">Kind</span>\n <span class=\"v\">\n <span class=\"badge\" :class=\"dep.detail.kind\">{{ sentence(dep.detail.kind) }}</span>\n <span class=\"mute\" style=\"margin-left: 8px; font-size: var(--t-sm)\">{{ kindBlurb }}</span>\n </span>\n </li>\n <li v-if=\"row?.specName\">\n <span class=\"k\">Spec</span>\n <span class=\"v\">\n <b>{{ row.specName }}</b>\n <span class=\"mute\" style=\"font-size: var(--t-sm)\">\n — stored, and shared with any other deployment using it\n </span>\n </span>\n </li>\n <li>\n <span class=\"k\">Compose file</span>\n <span class=\"v mono\">\n {{ dep.detail.compose ? dep.detail.compose.file : 'none' }}\n </span>\n </li>\n <li v-if=\"dep.detail.compose\">\n <span class=\"k\">Profiles</span>\n <span class=\"v\">\n <span v-for=\"p in dep.detail.compose.profiles\" :key=\"p\" class=\"badge\" style=\"margin-right: 4px\">\n {{ p }}\n </span>\n <span v-if=\"!dep.detail.compose.profiles.length\" class=\"mute\">\n none — a bare up starts every service\n </span>\n </span>\n </li>\n <li v-if=\"dep.detail.compose?.subdomains?.length\">\n <span class=\"k\">\n Subdomains\n <InfoHint label=\"how wildcard subdomains work\">\n Anything one label under these hosts reaches the same service the bare host does.\n An exact hostname you route yourself always wins over the wildcard.\n <template v-if=\"dep.detail.compose.subdomains.some((s) => s.depth === 'any')\">\n A route marked <b>any depth</b> works over HTTP only — no TLS certificate can cover\n more than one label.\n </template>\n </InfoHint>\n </span>\n <span class=\"v\">\n <div v-for=\"s in dep.detail.compose.subdomains\" :key=\"s.profile\">\n <span class=\"mono\">*.{{ s.host }}</span>\n <span class=\"mute\" style=\"font-size: var(--t-sm)\">\n → {{ s.profile }}<template v-if=\"s.depth === 'any'\"> · any depth, HTTP only</template>\n </span>\n </div>\n </span>\n </li>\n <li v-if=\"dep.detail.compose\">\n <span class=\"k\">Overlays</span>\n <span class=\"v\">\n <span v-for=\"o in dep.detail.compose.overlays\" :key=\"o\" class=\"mono\" style=\"margin-right: 8px\">{{ o }}</span>\n <span v-if=\"!dep.detail.compose.overlays.length\" class=\"mute\">none</span>\n </span>\n </li>\n <li>\n <span class=\"k\">Axes</span>\n <span class=\"v\">\n {{ dep.detail.axes.length }}\n <RouterLink v-if=\"dep.detail.axes.length\" :to=\"`/deployments/${encodeURIComponent(dep.id)}/axes`\">\n view →\n </RouterLink>\n </span>\n </li>\n <li>\n <span class=\"k\">Requires</span>\n <span class=\"v\">{{ dep.detail.requires.length }}</span>\n </li>\n <li><span class=\"k\">Created</span><span class=\"v\">{{ stamp(dep.detail.createdAt) }}</span></li>\n <li><span class=\"k\">Updated</span><span class=\"v\">{{ stamp(dep.detail.updatedAt) }}</span></li>\n </ul>\n </template>\n </section>\n</template>\n"],"names":["kindBlurb","computed","isShared","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_cache","_unref","dep","_createBlock","_component_RouterLink","_hoisted_3","SkeletonList","_hoisted_5","_hoisted_6","_createVNode","InfoHint","_hoisted_7","_toDisplayString","_hoisted_8","sentence","_hoisted_9","row","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_Fragment","_renderList","p","_hoisted_15","_hoisted_16","_hoisted_17","s","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","o","_hoisted_23","_hoisted_24","_createTextVNode","_hoisted_25","_hoisted_26","stamp","_hoisted_27","_hoisted_4"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{d as E,c as i,a as t,f as s,e as u,w as g,_ as N,x,g as d,t as p,F as H,s as P,i as _,v as S,u as U,S as C,r as a,C as L,A as $,B as A,o as n,L as R}from"./index-DVMQBHXF.js";import{_ as B}from"./ActionButton.vue_vue_type_script_setup_true_lang-D5wrEmB2.js";import{_ as F}from"./ErrorNote.vue_vue_type_script_setup_true_lang-B3hfwyPR.js";import{_ as O}from"./SkeletonList.vue_vue_type_script_setup_true_lang-qMyLRAMp.js";import{_ as z}from"./HelpModal.vue_vue_type_script_setup_true_lang-BSOuxyyP.js";import{_ as M}from"./RefreshButton.vue_vue_type_script_setup_true_lang-CXCY3Vlc.js";import"./Teleport-DfE2iP8c.js";const W={class:"page-head"},q={class:"sub"},G={key:1,class:"banner failed"},J={key:2,class:"banner warn"},K={class:"mono"},Q={class:"panel"},X={class:"phead"},Y={key:0,class:"mute break",style:{"font-size":"var(--t-sm)"}},Z={class:"mute"},ee={key:1,class:"kvlist"},te={class:"k break",style:{width:"220px"}},se={class:"v row"},oe={key:0,class:"badge warn"},ne={key:2,class:"mute"},le={class:"panel"},ae={class:"dim"},ie={class:"field",style:{"max-width":"380px"}},re={class:"field",style:{"max-width":"380px"}},de={class:"field",style:{"max-width":"380px"}},ue={class:"row",style:{"margin-top":"var(--s4)"}},pe={key:0,class:"mute"},ve={class:"hint"},fe={class:"mono"},_e=E({__name:"RegistriesView",setup(ce){const b=a([]),w=a([]),h=a(""),V=a(null),D=a(!1),v=a(""),r=a(""),f=a(""),c=a(""),m=a(!1),y=a(""),T=L(()=>!!C.token&&!m.value&&!!r.value&&!!f.value&&!!c.value);async function k(){const o=await $.get("/api/registries");if(D.value=!0,!o.ok){v.value=A(o,"load the registry credentials");return}v.value="",b.value=o.body.entries??[],w.value=o.body.helpers??[],h.value=o.body.dir??"",V.value=o.body.writable??!1}k();async function I(){m.value=!0,y.value="";const o=await $.put(`/api/registries/${encodeURIComponent(r.value)}`,{username:f.value,password:c.value});if(m.value=!1,!o.ok){y.value=A(o,"store this credential");return}c.value="";const e=o.body.registry;e&&e!==r.value?R("ok",`Stored for ${e} — Docker Hub's canonical key.`):R("ok",`Stored for ${e||r.value}. It applies to the next pull.`),r.value="",f.value="",k()}async function j(o){const e=await $.del(`/api/registries/${encodeURIComponent(o)}`);if(!e.ok){v.value=A(e,"forget this credential");return}R("ok",`Forgot ${o}.`),k()}return(o,e)=>(n(),i("div",null,[t("div",W,[t("div",null,[e[5]||(e[5]=t("h1",null,"Registries",-1)),t("div",q,[e[4]||(e[4]=s(" Credentials for pulling private images ",-1)),u(N,{label:"why a host login is not enough"},{default:g(()=>[...e[3]||(e[3]=[s(" A pull is authenticated by the docker ",-1),t("em",null,"client",-1),s(", not the daemon: it reads its own ",-1),t("code",null,"config.json",-1),s(" and hands the credential over. pstack's client runs inside the control container, so a ",-1),t("code",null,"docker login",-1),s(" on the host writes a file it cannot see — and the pull fails on a host that is logged in. ",-1)])]),_:1})])]),e[6]||(e[6]=t("span",{class:"grow"},null,-1)),u(M,{run:k})]),v.value?(n(),x(F,{key:0,text:v.value,title:"Could not load the registry credentials."},null,8,["text"])):d("",!0),V.value===!1?(n(),i("div",G,[e[9]||(e[9]=t("b",null,"Credentials cannot be saved here yet.",-1)),t("p",null,[e[8]||(e[8]=s(" Re-run setup on the host — it is safe to repeat. ",-1)),u(z,{title:"Why this happens"},{default:g(()=>[...e[7]||(e[7]=[t("p",null," Saving a credential needs a writable directory that the control stack only started providing in version 0.7.0. A host set up before then does not have it, so this page can list credentials but not add one. ",-1),t("p",null," Re-running setup is safe to repeat and recreates the control containers with the directory in place. Nothing already stored is lost. ",-1)])]),_:1})])])):d("",!0),w.value.length?(n(),i("div",J,[e[12]||(e[12]=t("b",null,"This file uses a credential helper, which will not work here.",-1)),t("p",null,[e[10]||(e[10]=s(" Found: ",-1)),t("span",K,p(w.value.join(", ")),1),e[11]||(e[11]=s(". A helper keeps the secret outside the file — in an OS keychain, usually — and the helper binary does not exist in this container, so pulls from private registries will fail. Add the credential below instead, which stores it in the file. ",-1))])])):d("",!0),t("section",Q,[t("div",X,[e[13]||(e[13]=t("h2",{class:"section"},"Stored",-1)),e[14]||(e[14]=t("span",{class:"grow"},null,-1)),h.value?(n(),i("span",Y,[t("span",Z,p(h.value),1)])):d("",!0)]),D.value?b.value.length?(n(),i("ul",ee,[(n(!0),i(H,null,P(b.value,l=>(n(),i("li",{key:l.registry},[t("span",te,[t("b",null,p(l.registry),1)]),t("span",se,[t("span",null,p(l.username??"unknown user"),1),l.viaHelper?(n(),i("span",oe,"via helper")):d("",!0),e[16]||(e[16]=t("span",{class:"grow"},null,-1)),u(B,{disabled:!U(C).token,variant:"danger",onClick:me=>j(l.registry)},{default:g(()=>[...e[15]||(e[15]=[s(" Forget ",-1)])]),_:1},8,["disabled","onClick"])])]))),128))])):(n(),i("p",ne," Nothing stored. Public images need no credential — this is only for a private registry. ")):(n(),x(O,{key:0,rows:2}))]),t("section",le,[e[27]||(e[27]=t("h2",{class:"section",style:{"margin-bottom":"var(--s3)"}},"Add a credential",-1)),t("p",ae,[e[18]||(e[18]=s(" Applies to the ",-1)),e[19]||(e[19]=t("b",null,"next pull",-1)),e[20]||(e[20]=s(" — nothing needs restarting. ",-1)),u(N,{label:"why no restart is needed"},{default:g(()=>[...e[17]||(e[17]=[s(" The docker client re-reads ",-1),t("code",null,"config.json",-1),s(" on every invocation, so there is no cache to bust. Storing one now is enough for a deploy started a second later. ",-1)])]),_:1})]),t("div",ie,[e[21]||(e[21]=t("label",{for:"host"},"Registry",-1)),_(t("input",{id:"host","onUpdate:modelValue":e[0]||(e[0]=l=>r.value=l),type:"text",placeholder:"ghcr.io",spellcheck:"false",autocomplete:"off"},null,512),[[S,r.value,void 0,{trim:!0}]]),e[22]||(e[22]=t("div",{class:"mute hint"}," Docker Hub is stored under its canonical key. ",-1))]),t("div",re,[e[23]||(e[23]=t("label",{for:"user"},"Username",-1)),_(t("input",{id:"user","onUpdate:modelValue":e[1]||(e[1]=l=>f.value=l),type:"text",spellcheck:"false",autocomplete:"off"},null,512),[[S,f.value,void 0,{trim:!0}]])]),t("div",de,[e[24]||(e[24]=t("label",{for:"pass"},"Password or token",-1)),_(t("input",{id:"pass","onUpdate:modelValue":e[2]||(e[2]=l=>c.value=l),type:"password",autocomplete:"off",spellcheck:"false"},null,512),[[S,c.value]]),e[25]||(e[25]=t("div",{class:"mute hint"}," Prefer a token scoped to reading packages. Stored on the host as reversible base64, exactly as Stored the same way a terminal login stores it — never sent back to this page. ",-1))]),y.value?(n(),x(F,{key:0,text:y.value,title:"Could not store this credential."},null,8,["text"])):d("",!0),t("div",ue,[u(B,{variant:"primary",pending:m.value,disabled:!T.value,onClick:I},{default:g(()=>[s(p(m.value?"Storing…":"Store"),1)]),_:1},8,["pending","disabled"]),U(C).token?d("",!0):(n(),i("span",pe,"Storing needs an access token."))]),t("p",ve,[e[26]||(e[26]=s(" Or from the host, which writes the same file: ",-1)),t("span",fe,"docker login --config "+p(h.value||"<DATA_DIR>/control/docker")+" <registry>",1)])])]))}});export{_e as default};
|
|
2
|
-
//# sourceMappingURL=RegistriesView-BeiFx468.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{s as N}from"./useFormat-DVXTfIS-.js";import{d as K,J as W,p as H,c as o,x as c,g as u,F as p,a as t,s as f,f as l,t as r,e as k,w as g,_ as x,r as $,C as R,j as M,o as n,D as L,E as T,u as S,A as U,B as z,L as A}from"./index-DVMQBHXF.js";import{d as y,v as D}from"./useDeployment-DGzBsXE-.js";import{_ as O}from"./SkeletonList.vue_vue_type_script_setup_true_lang-qMyLRAMp.js";import{_ as I}from"./ActionButton.vue_vue_type_script_setup_true_lang-D5wrEmB2.js";import{_ as j}from"./ErrorNote.vue_vue_type_script_setup_true_lang-B3hfwyPR.js";import{_ as J}from"./RefreshButton.vue_vue_type_script_setup_true_lang-CXCY3Vlc.js";import"./useVars-VN9gYdR6.js";const Q={key:0,class:"banner warn"},q={key:0,class:"banner ok"},G={class:"panel"},X={class:"phead"},Y={class:"mute",style:{"font-size":"var(--t-sm)"}},Z={key:0,class:"cards"},ee={class:"stagger"},te={"data-label":"url"},se=["href"],ne={key:1,class:"mono mute"},oe={key:0,class:"mute"},ae={"data-label":"forwards to"},re={key:0,class:"mono"},le={key:1,class:"s-failed"},ie={class:"mute",style:{"font-size":"var(--t-sm)"}},de={"data-label":"router"},ue={key:0,class:"mute",style:{"font-size":"var(--t-sm)"}},me={"data-label":"tls"},pe={key:0,class:"badge ok"},he={key:1,class:"badge off"},ve={key:1,class:"banner warn"},fe={class:"panel"},ge={class:"phead"},ke={class:"mute",style:{"font-size":"var(--t-sm)"}},ce={key:0,class:"cards"},ye={class:"stagger"},be={class:"name","data-label":"service"},_e={class:"mute",style:{"font-size":"var(--t-sm)"}},we={"data-label":"state"},$e={"data-label":"ports"},Re={class:"mono"},Se={key:0,class:"mute"},Ce={key:0,class:"mute"},Te={"data-label":"networks"},Ie={key:0,class:"mute mono",style:{"font-size":"var(--t-sm)"}},Pe={class:"dim","data-label":"image"},Ne={class:"row-actions","data-label":""},xe=["href"],Le={key:1,class:"mute"},We=K({__name:"RuntimeTab",setup(Ue){const i=$(null),b=$(""),_=$(!0);async function w(){const a=await U.get(`/api/deployments/${encodeURIComponent(y.id)}/runtime${D.value}`);if(_.value=!1,!a.ok){b.value=z(a,"inspect what is running");return}b.value="",i.value=a.body}W(()=>y.id,()=>{_.value=!0,w()},{immediate:!0}),H(()=>void w(),8e3);const B=R(()=>{var a;return((a=i.value)==null?void 0:a.findings.filter(e=>e.level==="error"))??[]}),E=R(()=>{var a;return((a=i.value)==null?void 0:a.findings.filter(e=>e.level==="warn"))??[]}),V=R(()=>{var a;return((a=i.value)==null?void 0:a.findings.filter(e=>e.level==="info"))??[]}),F=R(()=>{var a;return((a=i.value)==null?void 0:a.containers.filter(e=>e.state==="running").length)??0}),v=$("");async function C(a,e){v.value=`${e}:${a.name}`;const m=await U.post(`/api/deployments/${encodeURIComponent(y.id)}/containers/${encodeURIComponent(a.name)}/${e}${D.value}`);if(v.value="",!m.ok){A("error",z(m,`${e} ${a.name}`));return}A("ok",m.body.note??`${a.name}: ${e} done.`),w()}function P(a){var m;const e=(m=i.value)==null?void 0:m.routes.filter(s=>s.container===a.name).flatMap(s=>s.hosts).find(s=>!s.startsWith("(pattern)"));return e?`https://${e}`:null}return(a,e)=>{const m=M("RouterLink");return n(),o("div",null,[b.value?(n(),c(j,{key:0,text:b.value,title:"Could not inspect this deployment."},null,8,["text"])):u("",!0),_.value&&!i.value?(n(),c(O,{key:1,rows:5})):i.value?(n(),o(p,{key:2},[i.value.reachable?(n(),o(p,{key:1},[(n(!0),o(p,null,f(B.value,(s,h)=>(n(),o("div",{key:`e${h}`,class:"banner failed"},[e[1]||(e[1]=t("b",null,"Blocking",-1)),t("p",null,r(s.message),1)]))),128)),(n(!0),o(p,null,f(E.value,(s,h)=>(n(),o("div",{key:`w${h}`,class:"banner warn"},[e[2]||(e[2]=t("b",null,"Worth checking",-1)),t("p",null,r(s.message),1)]))),128)),(n(!0),o(p,null,f(V.value,(s,h)=>(n(),o("div",{key:`i${h}`,class:"banner plain"},[t("p",null,r(s.message),1)]))),128)),!i.value.findings.length&&i.value.containers.length?(n(),o("div",q,[...e[3]||(e[3]=[t("b",null,"Nothing looks wrong.",-1),t("p",null," Every container is attached to the ingress network and every router has a rule and a port. If a hostname still fails, the next suspects are DNS and the certificate. ",-1)])])):u("",!0),t("section",G,[t("div",X,[e[5]||(e[5]=t("h2",{class:"section"},"Routing",-1)),e[6]||(e[6]=t("span",{class:"grow"},null,-1)),t("span",Y,[l(" TLS: "+r(i.value.challenge==="unknown"?"unknown":i.value.challenge)+" ",1),k(x,{label:"why the TLS mode matters here",align:"end"},{default:g(()=>[...e[4]||(e[4]=[l(" Under HTTP-01 every per-PR router needs ",-1),t("code",null,"tls.certresolver=le",-1),l(", because each hostname resolves its own certificate. Under DNS-01 that inverts — one always-on router holds the wildcard, and a per-PR certresolver makes each PR order its own and burn the weekly limit. Read from the running Traefik's own flags, not configured here. ",-1)])]),_:1})])]),i.value.routes.length?(n(),o("table",Z,[t("thead",null,[t("tr",null,[e[9]||(e[9]=t("th",null,"URL",-1)),t("th",null,[e[8]||(e[8]=l(" Forwards to ",-1)),k(x,{label:"how a URL reaches a port"},{default:g(()=>[...e[7]||(e[7]=[l(" Traefik's docker provider resolves the container's IP on ",-1),t("code",null,"preview-ingress",-1),l(" and dials it on the port from ",-1),t("code",null,"loadbalancer.server.port",-1),l(" — it does ",-1),t("em",null,"not",-1),l(" use ",-1),t("code",null,"service:port",-1),l(" DNS. So the port here is the one inside the container, and publishing a host port is unnecessary. ",-1)])]),_:1})]),e[10]||(e[10]=t("th",null,"Router",-1)),e[11]||(e[11]=t("th",null,"TLS",-1))])]),t("tbody",ee,[(n(!0),o(p,null,f(i.value.routes,(s,h)=>(n(),o("tr",{key:s.router,style:L({"--i":h})},[t("td",te,[(n(!0),o(p,null,f(s.hosts,d=>(n(),o("div",{key:d},[d.startsWith("(pattern)")?(n(),o("span",ne,r(d),1)):(n(),o("a",{key:0,href:`https://${d}`,target:"_blank",rel:"noreferrer"},r(d),9,se))]))),128)),s.hosts.length?u("",!0):(n(),o("span",oe,"no host in the rule"))]),t("td",ae,[s.target?(n(),o("span",re,r(s.target),1)):(n(),o("span",le,r(s.port===null?"no port declared":"not on the ingress network"),1)),t("div",ie,r(s.container),1)]),t("td",de,[l(r(s.router)+" ",1),s.priority?(n(),o("div",ue," priority "+r(s.priority),1)):u("",!0)]),t("td",me,[s.tls?(n(),o("span",pe,r(s.certresolver||"inherited"),1)):(n(),o("span",he,"off"))])],4))),128))])])):(n(),o("div",ve,[e[17]||(e[17]=t("b",null,"No routes. Traefik has not been told about this deployment.",-1)),t("p",null,[e[13]||(e[13]=l(" Routes come from labels in ",-1)),e[14]||(e[14]=t("em",null,"your",-1)),e[15]||(e[15]=l(" compose file, not from pstack and not from the ",-1)),k(m,{to:"/routing"},{default:g(()=>[...e[12]||(e[12]=[l("Routing",-1)])]),_:1}),e[16]||(e[16]=l(" page (that is Traefik's file provider — middleware and TLS options, not per-PR routers). A reachable service needs four things: ",-1))]),e[18]||(e[18]=t("pre",{class:"code"},"labels:\n - traefik.enable=true # the host runs exposedbydefault=false\n - traefik.docker.network=preview-ingress # which network Traefik should dial\n - traefik.http.routers.<name>-${STACK}.rule=Host(`<name>-${STACK}.${PREVIEW_DOMAIN}`)\n - traefik.http.services.<name>-${STACK}.loadbalancer.server.port=80\nnetworks: [default, preview-ingress] # and preview-ingress: { external: true }",-1)),e[19]||(e[19]=t("p",{class:"mute"},[l(" Put "),t("code",null,"${STACK}"),l(" in the router and service names: Traefik's namespace is global across the host, so two deployments sharing a router name serve each other's containers. ")],-1))]))]),t("section",fe,[t("div",ge,[e[20]||(e[20]=t("h2",{class:"section"},"Containers",-1)),e[21]||(e[21]=t("span",{class:"grow"},null,-1)),t("span",ke,r(F.value)+" of "+r(i.value.containers.length)+" running ",1),k(J,{run:w,busy:_.value},null,8,["busy"])]),i.value.containers.length?(n(),o("table",ce,[e[27]||(e[27]=t("thead",null,[t("tr",null,[t("th",null,"Service"),t("th",null,"State"),t("th",null,"Ports"),t("th",null,"Networks"),t("th",null,"Image"),t("th",{"aria-label":"Actions"})])],-1)),t("tbody",ye,[(n(!0),o(p,null,f(i.value.containers,(s,h)=>(n(),o("tr",{key:s.id,style:L({"--i":h})},[t("td",be,[l(r(s.service??s.name)+" ",1),t("div",_e,r(s.name),1)]),t("td",we,[t("span",{class:T(s.state==="running"?"s-ok":"s-failed")},r(S(N)(s.state)),3),s.health&&s.state==="running"?(n(),o("div",{key:0,class:T(["mute",s.health==="healthy"?"s-ok":"s-failed"]),style:{"font-size":"var(--t-sm)"}},r(S(N)(s.health)),3)):u("",!0)]),t("td",$e,[(n(!0),o(p,null,f(s.ports,d=>(n(),o("div",{key:`${d.containerPort}/${d.protocol}`},[t("span",Re,r(d.containerPort),1),d.hostPort?(n(),o("span",Se," ← host "+r(d.hostPort),1)):u("",!0)]))),128)),s.ports.length?u("",!0):(n(),o("span",Ce,"none exposed"))]),t("td",Te,[(n(!0),o(p,null,f(s.networks,d=>(n(),o("div",{key:d},[t("span",{class:T(d==="preview-ingress"?"s-ok":"")},r(d),3)]))),128)),s.ingressIp?(n(),o("div",Ie,r(s.ingressIp),1)):u("",!0)]),t("td",Pe,r(s.image),1),t("td",Ne,[s.state!=="running"?(n(),c(I,{key:0,class:"sm",variant:"ghost",pending:v.value===`start:${s.name}`,disabled:!!v.value,confirm:"Start it?",onRun:d=>C(s,"start")},{default:g(()=>[...e[22]||(e[22]=[l(" Start ",-1)])]),_:1},8,["pending","disabled","onRun"])):(n(),c(I,{key:1,class:"sm",variant:"ghost",pending:v.value===`stop:${s.name}`,disabled:!!v.value,confirm:"Stop it?",title:"Stops this container only. It stays stopped until something starts it.",onRun:d=>C(s,"stop")},{default:g(()=>[...e[23]||(e[23]=[l(" Stop ",-1)])]),_:1},8,["pending","disabled","onRun"])),k(I,{class:"sm",variant:"ghost",pending:v.value===`restart:${s.name}`,disabled:!!v.value,confirm:"Restart it?",onRun:d=>C(s,"restart")},{default:g(()=>[...e[24]||(e[24]=[l(" Restart ",-1)])]),_:1},8,["pending","disabled","onRun"]),k(m,{class:"btn sm ghost",to:`/deployments/${encodeURIComponent(S(y).id)}/logs?container=${encodeURIComponent(s.name)}`},{default:g(()=>[...e[25]||(e[25]=[l(" Logs ",-1)])]),_:1},8,["to"]),s.state==="running"?(n(),c(m,{key:2,class:"btn sm ghost",to:`/deployments/${encodeURIComponent(S(y).id)}/terminal?container=${encodeURIComponent(s.name)}`},{default:g(()=>[...e[26]||(e[26]=[l(" Shell ",-1)])]),_:1},8,["to"])):u("",!0),s.state==="running"&&P(s)?(n(),o("a",{key:3,class:"btn sm ghost",href:P(s),target:"_blank",rel:"noreferrer"}," Open ",8,xe)):u("",!0)])],4))),128))])])):(n(),o("p",Le," No containers for this stack. If you expected some, check that their profile is one the spec selects — a service behind a profile that is not enabled is never started. "))])],64)):(n(),o("div",Q,[...e[0]||(e[0]=[t("b",null,"Docker did not answer.",-1),t("p",null," Nothing below could be determined — this is not the same as nothing running. Check the daemon and the socket mount, then refresh. ",-1)])]))],64)):u("",!0)])}}});export{We as default};
|
|
2
|
-
//# sourceMappingURL=RuntimeTab-DWZ5eFho.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeTab-DWZ5eFho.js","sources":["../../src/views/tabs/RuntimeTab.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * What is actually running, and what Traefik was actually told about it.\n *\n * THE QUESTION THIS ANSWERS. \"The hostname does not work.\" Nothing in this UI could answer it: the\n * registry shows what was *submitted*, the logs show what the container *says*, and the reason a\n * request 404s is in neither — it is in the container's Traefik labels, which pstack never writes.\n *\n * The routing table is the direct answer to \"which URL maps to which port\". Traefik does **not** dial\n * `service_name:port`: its docker provider resolves the container's IP on the ingress network and\n * dials that, on the port from the `loadbalancer.server.port` label. That is why a service must be\n * attached to `preview-ingress`, why the port is the *container-internal* one, and why publishing a\n * host port is unnecessary. The `target` column shows the address Traefik assembled, so a missing\n * half is visible rather than inferred.\n *\n * Findings come first because they are the reason anyone opened this tab.\n */\nimport { computed, ref, watch } from 'vue';\nimport { sentence } from '../../composables/useFormat';\nimport { api, problem } from '../../api/client';\nimport type { RuntimeContainer, RuntimeResponse } from '../../api/types';\nimport { dep, varsQuery } from '../../composables/useDeployment';\nimport { usePolling } from '../../composables/usePolling';\nimport SkeletonList from '../../components/SkeletonList.vue';\nimport ActionButton from '../../components/ActionButton.vue';\nimport ErrorNote from '../../components/ErrorNote.vue';\nimport InfoHint from '../../components/InfoHint.vue';\nimport { toast } from '../../composables/useToasts';\nimport RefreshButton from '../../components/RefreshButton.vue';\n\nconst rt = ref<RuntimeResponse | null>(null);\nconst error = ref('');\nconst loading = ref(true);\n\nasync function load(): Promise<void> {\n const r = await api.get<RuntimeResponse>(\n `/api/deployments/${encodeURIComponent(dep.id)}/runtime${varsQuery.value}`,\n );\n loading.value = false;\n if (!r.ok) {\n error.value = problem(r, 'inspect what is running');\n return;\n }\n error.value = '';\n rt.value = r.body;\n}\n\nwatch(() => dep.id, () => { loading.value = true; void load(); }, { immediate: true });\n// Containers change state during a deploy; the poll pauses itself when the tab is hidden.\nusePolling(() => void load(), 8000);\n\nconst errors = computed(() => rt.value?.findings.filter((f) => f.level === 'error') ?? []);\nconst warns = computed(() => rt.value?.findings.filter((f) => f.level === 'warn') ?? []);\nconst infos = computed(() => rt.value?.findings.filter((f) => f.level === 'info') ?? []);\nconst running = computed(() => rt.value?.containers.filter((c) => c.state === 'running').length ?? 0);\n\n/**\n * One container action in flight, as `action:name`.\n *\n * A single ref rather than a per-row flag: two `docker restart`s racing on the same stack is not\n * something to make easy, and the readiness watch each one starts would fight the other.\n */\nconst busy = ref('');\n\nasync function act(c: RuntimeContainer, action: 'start' | 'stop' | 'restart'): Promise<void> {\n busy.value = `${action}:${c.name}`;\n const r = await api.post<{ note?: string }>(\n `/api/deployments/${encodeURIComponent(dep.id)}/containers/${encodeURIComponent(c.name)}/${action}${varsQuery.value}`,\n );\n busy.value = '';\n if (!r.ok) {\n // Docker's own words. \"Already started\" and \"no such container\" are different problems and it\n // says both better than this layer could.\n toast('error', problem(r, `${action} ${c.name}`));\n return;\n }\n toast('ok', r.body.note ?? `${c.name}: ${action} done.`);\n // Read the table back rather than assuming the new state: a container that exits again immediately\n // is exactly the case worth seeing, and the 8s poll would show it a beat later anyway.\n void load();\n}\n\n/**\n * The hostname Traefik actually routes to this container, or null.\n *\n * Built from the ROUTES rather than guessed from the container: a router's rule is the only thing\n * that decides what URL reaches it, and a link assembled from a service name and a domain would be\n * a plausible-looking 404. Pattern hosts (`HostRegexp`) are skipped for the same reason — there is\n * no single address to send someone to.\n */\nfunction urlFor(c: RuntimeContainer): string | null {\n const host = rt.value?.routes\n .filter((r) => r.container === c.name)\n .flatMap((r) => r.hosts)\n .find((h) => !h.startsWith('(pattern)'));\n return host ? `https://${host}` : null;\n}\n</script>\n\n<template>\n <div>\n <ErrorNote v-if=\"error\" :text=\"error\" title=\"Could not inspect this deployment.\" />\n <SkeletonList v-if=\"loading && !rt\" :rows=\"5\" />\n\n <template v-else-if=\"rt\">\n <!--\n `reachable: false` is not \"nothing is running\". The stack may be perfectly healthy while this\n process cannot reach the Docker socket, and reporting that as empty is how a UI tells someone\n their live preview is gone.\n -->\n <div v-if=\"!rt.reachable\" class=\"banner warn\">\n <b>Docker did not answer.</b>\n <p>\n Nothing below could be determined — this is not the same as nothing running. Check the\n daemon and the socket mount, then refresh.\n </p>\n </div>\n\n <template v-else>\n <!-- Findings first: this tab exists because something is not working. -->\n <div v-for=\"(f, i) in errors\" :key=\"`e${i}`\" class=\"banner failed\">\n <b>Blocking</b>\n <p>{{ f.message }}</p>\n </div>\n <div v-for=\"(f, i) in warns\" :key=\"`w${i}`\" class=\"banner warn\">\n <b>Worth checking</b>\n <p>{{ f.message }}</p>\n </div>\n <div v-for=\"(f, i) in infos\" :key=\"`i${i}`\" class=\"banner plain\">\n <p>{{ f.message }}</p>\n </div>\n <div v-if=\"!rt.findings.length && rt.containers.length\" class=\"banner ok\">\n <b>Nothing looks wrong.</b>\n <p>\n Every container is attached to the ingress network and every router has a rule and a port.\n If a hostname still fails, the next suspects are DNS and the certificate.\n </p>\n </div>\n\n <!-- ============================ routing ============================ -->\n <section class=\"panel\">\n <div class=\"phead\">\n <h2 class=\"section\">Routing</h2>\n <span class=\"grow\" />\n <span class=\"mute\" style=\"font-size: var(--t-sm)\">\n TLS: {{ rt.challenge === 'unknown' ? 'unknown' : rt.challenge }}\n <InfoHint label=\"why the TLS mode matters here\" align=\"end\">\n Under HTTP-01 every per-PR router needs <code>tls.certresolver=le</code>, because each\n hostname resolves its own certificate. Under DNS-01 that inverts — one always-on router\n holds the wildcard, and a per-PR certresolver makes each PR order its own and burn the\n weekly limit. Read from the running Traefik's own flags, not configured here.\n </InfoHint>\n </span>\n </div>\n\n <table v-if=\"rt.routes.length\" class=\"cards\">\n <thead>\n <tr>\n <th>URL</th>\n <th>\n Forwards to\n <InfoHint label=\"how a URL reaches a port\">\n Traefik's docker provider resolves the container's IP on\n <code>preview-ingress</code> and dials it on the port from\n <code>loadbalancer.server.port</code> — it does <em>not</em> use\n <code>service:port</code> DNS. So the port here is the one inside the container,\n and publishing a host port is unnecessary.\n </InfoHint>\n </th>\n <th>Router</th>\n <th>TLS</th>\n </tr>\n </thead>\n <tbody class=\"stagger\">\n <tr v-for=\"(r, i) in rt.routes\" :key=\"r.router\" :style=\"{ '--i': i }\">\n <td data-label=\"url\">\n <div v-for=\"h in r.hosts\" :key=\"h\">\n <a v-if=\"!h.startsWith('(pattern)')\" :href=\"`https://${h}`\" target=\"_blank\" rel=\"noreferrer\">\n {{ h }}\n </a>\n <span v-else class=\"mono mute\">{{ h }}</span>\n </div>\n <span v-if=\"!r.hosts.length\" class=\"mute\">no host in the rule</span>\n </td>\n <td data-label=\"forwards to\">\n <span v-if=\"r.target\" class=\"mono\">{{ r.target }}</span>\n <span v-else class=\"s-failed\">\n {{ r.port === null ? 'no port declared' : 'not on the ingress network' }}\n </span>\n <div class=\"mute\" style=\"font-size: var(--t-sm)\">{{ r.container }}</div>\n </td>\n <td data-label=\"router\">\n {{ r.router }}\n <div v-if=\"r.priority\" class=\"mute\" style=\"font-size: var(--t-sm)\">\n priority {{ r.priority }}\n </div>\n </td>\n <td data-label=\"tls\">\n <span v-if=\"r.tls\" class=\"badge ok\">{{ r.certresolver || 'inherited' }}</span>\n <span v-else class=\"badge off\">off</span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!--\n The reported failure, stated where it will be looked for. pstack does not write these\n labels — the deployment's own compose file does — so the fix is in the user's file.\n -->\n <div v-else class=\"banner warn\">\n <b>No routes. Traefik has not been told about this deployment.</b>\n <p>\n Routes come from labels in <em>your</em> compose file, not from pstack and not from the\n <RouterLink to=\"/routing\">Routing</RouterLink> page (that is Traefik's file provider —\n middleware and TLS options, not per-PR routers). A reachable service needs four things:\n </p>\n <pre class=\"code\">labels:\n - traefik.enable=true # the host runs exposedbydefault=false\n - traefik.docker.network=preview-ingress # which network Traefik should dial\n - traefik.http.routers.<name>-${STACK}.rule=Host(`<name>-${STACK}.${PREVIEW_DOMAIN}`)\n - traefik.http.services.<name>-${STACK}.loadbalancer.server.port=80\nnetworks: [default, preview-ingress] # and preview-ingress: { external: true }</pre>\n <p class=\"mute\">\n Put <code>${STACK}</code> in the router and service names: Traefik's namespace is global\n across the host, so two deployments sharing a router name serve each other's containers.\n </p>\n </div>\n </section>\n\n <!-- ============================ containers ============================ -->\n <section class=\"panel\">\n <div class=\"phead\">\n <h2 class=\"section\">Containers</h2>\n <span class=\"grow\" />\n <span class=\"mute\" style=\"font-size: var(--t-sm)\">\n {{ running }} of {{ rt.containers.length }} running\n </span>\n <RefreshButton :run=\"load\" :busy=\"loading\" />\n </div>\n\n <table v-if=\"rt.containers.length\" class=\"cards\">\n <thead>\n <tr>\n <th>Service</th>\n <th>State</th>\n <th>Ports</th>\n <th>Networks</th>\n <th>Image</th>\n <th aria-label=\"Actions\" />\n </tr>\n </thead>\n <tbody class=\"stagger\">\n <tr v-for=\"(c, i) in rt.containers\" :key=\"c.id\" :style=\"{ '--i': i }\">\n <td class=\"name\" data-label=\"service\">\n {{ c.service ?? c.name }}\n <div class=\"mute\" style=\"font-size: var(--t-sm)\">{{ c.name }}</div>\n </td>\n <td data-label=\"state\">\n <span :class=\"c.state === 'running' ? 's-ok' : 's-failed'\">{{ sentence(c.state) }}</span>\n <!--\n Health is only reported while it is RUNNING. Docker keeps the last probe result on\n a stopped container, so an exited one rendered \"Exited / Healthy\" — a stale reading\n presented beside the fact that contradicts it.\n -->\n <div\n v-if=\"c.health && c.state === 'running'\"\n class=\"mute\"\n style=\"font-size: var(--t-sm)\"\n :class=\"c.health === 'healthy' ? 's-ok' : 's-failed'\"\n >\n {{ sentence(c.health) }}\n </div>\n </td>\n <td data-label=\"ports\">\n <div v-for=\"p in c.ports\" :key=\"`${p.containerPort}/${p.protocol}`\">\n <span class=\"mono\">{{ p.containerPort }}</span>\n <span v-if=\"p.hostPort\" class=\"mute\"> ← host {{ p.hostPort }}</span>\n </div>\n <span v-if=\"!c.ports.length\" class=\"mute\">none exposed</span>\n </td>\n <td data-label=\"networks\">\n <div v-for=\"n in c.networks\" :key=\"n\">\n <span :class=\"n === 'preview-ingress' ? 's-ok' : ''\">{{ n }}</span>\n </div>\n <div v-if=\"c.ingressIp\" class=\"mute mono\" style=\"font-size: var(--t-sm)\">\n {{ c.ingressIp }}\n </div>\n </td>\n <td class=\"dim\" data-label=\"image\">{{ c.image }}</td>\n <!--\n The three things anyone wants from a container row, without hunting for the tab\n that does it. Open goes to the URL Traefik actually assembled for THIS container\n (see `urlFor`), so it is absent rather than wrong when no router points here.\n -->\n <td class=\"row-actions\" data-label=\"\">\n <!--\n One container, not the service and not the stack. Start appears only when it is\n not running and Stop only when it is, so the control on screen is the one that\n would do something. Both destructive ones confirm in place.\n -->\n <ActionButton\n v-if=\"c.state !== 'running'\"\n class=\"sm\"\n variant=\"ghost\"\n :pending=\"busy === `start:${c.name}`\"\n :disabled=\"!!busy\"\n confirm=\"Start it?\"\n @run=\"act(c, 'start')\"\n >\n Start\n </ActionButton>\n <ActionButton\n v-else\n class=\"sm\"\n variant=\"ghost\"\n :pending=\"busy === `stop:${c.name}`\"\n :disabled=\"!!busy\"\n confirm=\"Stop it?\"\n title=\"Stops this container only. It stays stopped until something starts it.\"\n @run=\"act(c, 'stop')\"\n >\n Stop\n </ActionButton>\n <ActionButton\n class=\"sm\"\n variant=\"ghost\"\n :pending=\"busy === `restart:${c.name}`\"\n :disabled=\"!!busy\"\n confirm=\"Restart it?\"\n @run=\"act(c, 'restart')\"\n >\n Restart\n </ActionButton>\n <RouterLink\n class=\"btn sm ghost\"\n :to=\"`/deployments/${encodeURIComponent(dep.id)}/logs?container=${encodeURIComponent(c.name)}`\"\n >\n Logs\n </RouterLink>\n <RouterLink\n v-if=\"c.state === 'running'\"\n class=\"btn sm ghost\"\n :to=\"`/deployments/${encodeURIComponent(dep.id)}/terminal?container=${encodeURIComponent(c.name)}`\"\n >\n Shell\n </RouterLink>\n <!--\n Only while running: the router label survives a stopped container, so the URL\n still exists and answers 502. A link that is certain to fail is worse than no link.\n -->\n <a\n v-if=\"c.state === 'running' && urlFor(c)\"\n class=\"btn sm ghost\"\n :href=\"urlFor(c)!\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n Open\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <p v-else class=\"mute\">\n No containers for this stack. If you expected some, check that their profile is one the\n spec selects — a service behind a profile that is not enabled is never started.\n </p>\n </section>\n </template>\n </template>\n </div>\n</template>\n"],"names":["rt","ref","error","loading","load","r","api","dep","varsQuery","problem","watch","usePolling","errors","computed","_a","f","warns","infos","running","c","busy","act","action","toast","urlFor","host","h","_createElementBlock","_createBlock","ErrorNote","SkeletonList","_Fragment","_openBlock","_renderList","i","_cache","_createElementVNode","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_createVNode","InfoHint","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_10","_hoisted_9","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_component_RouterLink","_hoisted_22","_hoisted_23","_hoisted_24","RefreshButton","_hoisted_25","_hoisted_26","_hoisted_27","_createTextVNode","_hoisted_28","_hoisted_29","_normalizeClass","_unref","sentence","_hoisted_30","p","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","n","_hoisted_35","_hoisted_36","_hoisted_37","ActionButton","$event","_hoisted_38","_hoisted_39","_hoisted_1"],"mappings":"40DA8BA,MAAMA,EAAKC,EAA4B,IAAI,EACrCC,EAAQD,EAAI,EAAE,EACdE,EAAUF,EAAI,EAAI,EAExB,eAAeG,GAAsB,CACnC,MAAMC,EAAI,MAAMC,EAAI,IAClB,oBAAoB,mBAAmBC,EAAI,EAAE,CAAC,WAAWC,EAAU,KAAK,EAAA,EAG1E,GADAL,EAAQ,MAAQ,GACZ,CAACE,EAAE,GAAI,CACTH,EAAM,MAAQO,EAAQJ,EAAG,yBAAyB,EAClD,MACF,CACAH,EAAM,MAAQ,GACdF,EAAG,MAAQK,EAAE,IACf,CAEAK,EAAM,IAAMH,EAAI,GAAI,IAAM,CAAEJ,EAAQ,MAAQ,GAAWC,EAAA,CAAQ,EAAG,CAAE,UAAW,GAAM,EAErFO,EAAW,IAAM,KAAKP,EAAA,EAAQ,GAAI,EAElC,MAAMQ,EAASC,EAAS,WAAM,QAAAC,EAAAd,EAAG,QAAH,YAAAc,EAAU,SAAS,OAAQC,GAAMA,EAAE,QAAU,WAAY,CAAA,EAAE,EACnFC,EAAQH,EAAS,WAAM,QAAAC,EAAAd,EAAG,QAAH,YAAAc,EAAU,SAAS,OAAQC,GAAMA,EAAE,QAAU,UAAW,CAAA,EAAE,EACjFE,EAAQJ,EAAS,WAAM,QAAAC,EAAAd,EAAG,QAAH,YAAAc,EAAU,SAAS,OAAQC,GAAMA,EAAE,QAAU,UAAW,CAAA,EAAE,EACjFG,EAAUL,EAAS,IAAA,OAAM,QAAAC,EAAAd,EAAG,QAAH,YAAAc,EAAU,WAAW,OAAQK,GAAMA,EAAE,QAAU,WAAW,SAAU,EAAC,EAQ9FC,EAAOnB,EAAI,EAAE,EAEnB,eAAeoB,EAAIF,EAAqBG,EAAqD,CAC3FF,EAAK,MAAQ,GAAGE,CAAM,IAAIH,EAAE,IAAI,GAChC,MAAMd,EAAI,MAAMC,EAAI,KAClB,oBAAoB,mBAAmBC,EAAI,EAAE,CAAC,eAAe,mBAAmBY,EAAE,IAAI,CAAC,IAAIG,CAAM,GAAGd,EAAU,KAAK,EAAA,EAGrH,GADAY,EAAK,MAAQ,GACT,CAACf,EAAE,GAAI,CAGTkB,EAAM,QAASd,EAAQJ,EAAG,GAAGiB,CAAM,IAAIH,EAAE,IAAI,EAAE,CAAC,EAChD,MACF,CACAI,EAAM,KAAMlB,EAAE,KAAK,MAAQ,GAAGc,EAAE,IAAI,KAAKG,CAAM,QAAQ,EAGlDlB,EAAA,CACP,CAUA,SAASoB,EAAOL,EAAoC,OAClD,MAAMM,GAAOX,EAAAd,EAAG,QAAH,YAAAc,EAAU,OACpB,OAAQT,GAAMA,EAAE,YAAcc,EAAE,MAChC,QAASd,GAAMA,EAAE,OACjB,KAAMqB,GAAM,CAACA,EAAE,WAAW,WAAW,GACxC,OAAOD,EAAO,WAAWA,CAAI,GAAK,IACpC,kDAIEE,EA8QM,MAAA,KAAA,CA7QazB,EAAA,WAAjB0B,EAAmFC,EAAA,OAA1D,KAAM3B,EAAA,MAAO,MAAM,oCAAA,6BACxBC,EAAA,QAAYH,EAAA,WAAhC4B,EAAgDE,EAAA,OAAX,KAAM,CAAA,IAEtB9B,EAAA,WAArB2B,EAyQWI,EAAA,CAAA,IAAA,GAAA,CAnQG/B,EAAA,MAAG,eAQf2B,EA0PWI,EAAA,CAAA,IAAA,GAAA,EAxPTC,EAAA,EAAA,EAAAL,EAGMI,EAAA,KAAAE,EAHgBrB,EAAA,MAAM,CAAfG,EAAGmB,SAAhBP,EAGM,MAAA,CAHyB,QAASO,CAAC,GAAI,MAAM,eAAA,GACjDC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAe,SAAZ,WAAQ,EAAA,GACXA,EAAsB,IAAA,KAAAC,EAAhBtB,EAAE,OAAO,EAAA,CAAA,CAAA,YAEjBiB,EAAA,EAAA,EAAAL,EAGMI,EAAA,KAAAE,EAHgBjB,EAAA,MAAK,CAAdD,EAAGmB,SAAhBP,EAGM,MAAA,CAHwB,QAASO,CAAC,GAAI,MAAM,aAAA,GAChDC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAqB,SAAlB,iBAAc,EAAA,GACjBA,EAAsB,IAAA,KAAAC,EAAhBtB,EAAE,OAAO,EAAA,CAAA,CAAA,YAEjBiB,EAAA,EAAA,EAAAL,EAEMI,EAAA,KAAAE,EAFgBhB,EAAA,MAAK,CAAdF,EAAGmB,SAAhBP,EAEM,MAAA,CAFwB,QAASO,CAAC,GAAI,MAAM,cAAA,GAChDE,EAAsB,IAAA,KAAAC,EAAhBtB,EAAE,OAAO,EAAA,CAAA,CAAA,YAELf,EAAA,MAAG,SAAS,QAAUA,EAAA,MAAG,WAAW,QAAhDgC,EAAA,EAAAL,EAMM,MANNW,EAMM,CAAA,GAAAH,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CALJC,EAA2B,SAAxB,uBAAoB,EAAA,EACvBA,EAGI,SAHD,yKAGH,EAAA,CAAA,eAIFA,EAuFU,UAvFVG,EAuFU,CAtFRH,EAYM,MAZNI,EAYM,CAXJL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAgC,KAAA,CAA5B,MAAM,SAAA,EAAU,UAAO,EAAA,eAC3BA,EAAqB,OAAA,CAAf,MAAM,MAAA,EAAM,KAAA,EAAA,GAClBA,EAQO,OARPK,EAQO,GAR2C,SAC3CJ,EAAGrC,QAAG,gCAAsCA,EAAA,MAAG,SAAS,EAAG,IAChE,CAAA,EAAA0C,EAKWC,EAAA,CALD,MAAM,gCAAgC,MAAM,KAAA,aAAM,IAClB,CAAA,GAAAR,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,GADkB,4CAClB,EAAA,EAAAC,EAAgC,YAA1B,sBAAmB,EAAA,IAAO,+QAI1E,EAAA,CAAA,eAISpC,EAAA,MAAG,OAAO,QAAvBgC,IAAAL,EAgDQ,QAhDRiB,EAgDQ,CA/CNR,EAgBQ,QAAA,KAAA,CAfNA,EAcK,KAAA,KAAA,CAbHD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAY,UAAR,MAAG,EAAA,GACPA,EASK,KAAA,KAAA,eATD,gBAEF,EAAA,GAAAM,EAMWC,EAAA,CAND,MAAM,4BAA0B,WAAC,IAEzC,CAAA,GAAAR,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,GAFyC,6DAEzC,EAAA,EAAAC,EAA4B,YAAtB,kBAAe,EAAA,IAAO,kCAC5B,EAAA,EAAAA,EAAqC,YAA/B,2BAAwB,EAAA,IAAO,cAAW,EAAA,EAAAA,EAAY,UAAR,MAAG,EAAA,IAAK,QAC5D,EAAA,EAAAA,EAAyB,YAAnB,eAAY,EAAA,IAAO,sGAE3B,EAAA,CAAA,aAEFD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAAe,UAAX,SAAM,EAAA,GACVD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAAY,UAAR,MAAG,EAAA,EAAA,KAGXA,EA6BQ,QA7BRS,GA6BQ,EA5BNb,EAAA,EAAA,EAAAL,EA2BKI,SA3BgB/B,EAAA,MAAG,OAAM,CAAlBK,EAAG6B,SAAfP,EA2BK,KAAA,CA3B4B,IAAKtB,EAAE,OAAS,eAAgB6B,EAAC,CAAA,GAChEE,EAQK,KARLU,GAQK,EAPHd,EAAA,EAAA,EAAAL,EAKMI,EAAA,KAAAE,EALW5B,EAAE,MAAPqB,QAAZC,EAKM,MAAA,CALqB,IAAKD,GAAC,CACrBA,EAAE,WAAU,WAAA,OAGtBC,EAA6C,OAA7CoB,GAA6CV,EAAXX,CAAC,EAAA,CAAA,QAHnCC,EAEI,IAAA,OAFkC,gBAAiBD,CAAC,GAAI,OAAO,SAAS,IAAI,YAAA,IAC3EA,CAAC,EAAA,EAAAsB,EAAA,EAE6B,WAExB3C,EAAE,MAAM,qBAArBsB,EAAoE,OAApEsB,GAA0C,qBAAmB,KAE/Db,EAMK,KANLc,GAMK,CALS7C,EAAE,QAAd2B,EAAA,EAAAL,EAAwD,OAAxDwB,GAAwDd,EAAlBhC,EAAE,MAAM,EAAA,CAAA,IAC9C2B,EAAA,EAAAL,EAEO,OAFPyB,GAEOf,EADFhC,EAAE,OAAI,KAAA,mBAAA,4BAAA,EAAA,CAAA,GAEX+B,EAAwE,MAAxEiB,GAAwEhB,EAApBhC,EAAE,SAAS,EAAA,CAAA,CAAA,GAEjE+B,EAKK,KALLkB,GAKK,KAJAjD,EAAE,MAAM,EAAG,IACd,CAAA,EAAWA,EAAE,UAAb2B,EAAA,EAAAL,EAEM,MAFN4B,GAAmE,aACxDlB,EAAGhC,EAAE,QAAQ,EAAA,CAAA,cAG1B+B,EAGK,KAHLoB,GAGK,CAFSnD,EAAE,KAAd2B,EAAA,EAAAL,EAA8E,OAA9E8B,GAA8EpB,EAAvChC,EAAE,cAAY,WAAA,EAAA,CAAA,QACrDsB,EAAyC,OAAzC+B,GAA+B,KAAG,EAAA,qBAU1C1B,EAAA,EAAAL,EAiBM,MAjBNgC,GAiBM,CAhBJxB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAAkE,SAA/D,8DAA2D,EAAA,GAC9DA,EAII,IAAA,KAAA,iBAJD,+BAC0B,EAAA,GAAAD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAAa,UAAT,OAAI,EAAA,mBAAK,mDACxC,EAAA,GAAAM,EAA8CkB,EAAA,CAAlC,GAAG,YAAU,WAAC,IAAO,CAAA,GAAAzB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,GAAP,UAAO,EAAA,CAAA,2BAAa,oIAEhD,EAAA,EAAA,GACAA,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAK+E,MAAA,CAL1E,MAAM,MAAA,EAAO,saAKuD,EAAA,iBACzEA,EAGI,IAAA,CAHD,MAAM,QAAM,GAAC,OACV,EAAAA,EAAqB,YAAf,UAAQ,IAAO,2JAE3B,CAAA,YAKJA,EAyIU,UAzIVyB,GAyIU,CAxIRzB,EAOM,MAPN0B,GAOM,CANJ3B,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAAmC,KAAA,CAA/B,MAAM,SAAA,EAAU,aAAU,EAAA,iBAC9BA,EAAqB,OAAA,CAAf,MAAM,MAAA,EAAM,KAAA,EAAA,GAClBA,EAEO,OAFP2B,GAEO1B,EADFnB,EAAA,KAAO,EAAG,OAAImB,EAAGrC,EAAA,MAAG,WAAW,MAAM,EAAG,YAC7C,CAAA,EACA0C,EAA6CsB,EAAA,CAA7B,IAAK5D,EAAO,KAAMD,EAAA,KAAA,qBAGvBH,EAAA,MAAG,WAAW,QAA3BgC,IAAAL,EA0HQ,QA1HRsC,GA0HQ,eAzHN7B,EASQ,QAAA,KAAA,CARNA,EAOK,KAAA,KAAA,CANHA,EAAgB,UAAZ,SAAO,EACXA,EAAc,UAAV,OAAK,EACTA,EAAc,UAAV,OAAK,EACTA,EAAiB,UAAb,UAAQ,EACZA,EAAc,UAAV,OAAK,EACTA,EAA2B,KAAA,CAAvB,aAAW,UAAS,CAAA,SAG5BA,EA8GQ,QA9GR8B,GA8GQ,EA7GNlC,EAAA,EAAA,EAAAL,EA4GKI,SA5GgB/B,EAAA,MAAG,WAAU,CAAtBmB,EAAGe,SAAfP,EA4GK,KAAA,CA5GgC,IAAKR,EAAE,GAAK,eAAgBe,EAAC,CAAA,GAChEE,EAGK,KAHL+B,GAGK,CAFAC,EAAA/B,EAAAlB,EAAE,SAAWA,EAAE,IAAI,EAAG,IACzB,CAAA,EAAAiB,EAAmE,MAAnEiC,GAAmEhC,EAAflB,EAAE,IAAI,EAAA,CAAA,CAAA,GAE5DiB,EAeK,KAfLkC,GAeK,CAdHlC,EAAyF,OAAA,CAAlF,MAAKmC,EAAEpD,EAAE,QAAK,UAAA,OAAA,UAAA,CAAA,IAAyCqD,EAAAC,CAAA,EAAStD,EAAE,KAAK,CAAA,EAAA,CAAA,EAOtEA,EAAE,QAAUA,EAAE,QAAK,eAD3BQ,EAOM,MAAA,OALJ,MAAK4C,EAAA,CAAC,OAEEpD,EAAE,SAAM,UAAA,OAAA,UAAA,CAAA,EADhB,MAAA,CAAA,YAAA,aAAA,CAAA,IAGGqD,EAAAC,CAAA,EAAStD,EAAE,MAAM,CAAA,EAAA,CAAA,cAGxBiB,EAMK,KANLsC,GAMK,EALH1C,EAAA,EAAA,EAAAL,EAGMI,EAAA,KAAAE,EAHWd,EAAE,MAAPwD,QAAZhD,EAGM,MAAA,CAHqB,OAAQgD,EAAE,aAAa,IAAIA,EAAE,QAAQ,EAAA,GAC9DvC,EAA+C,OAA/CwC,GAA+CvC,EAAzBsC,EAAE,aAAa,EAAA,CAAA,EACzBA,EAAE,UAAd3C,EAAA,EAAAL,EAAoE,OAApEkD,GAAqC,WAAQxC,EAAGsC,EAAE,QAAQ,EAAA,CAAA,sBAE/CxD,EAAE,MAAM,qBAArBQ,EAA6D,OAA7DmD,GAA0C,cAAY,KAExD1C,EAOK,KAPL2C,GAOK,EANH/C,EAAA,EAAA,EAAAL,EAEMI,EAAA,KAAAE,EAFWd,EAAE,SAAP6D,QAAZrD,EAEM,MAAA,CAFwB,IAAKqD,GAAC,CAClC5C,EAAmE,OAAA,CAA5D,QAAO4C,IAAC,kBAAA,OAAA,EAAA,CAAA,IAAyCA,CAAC,EAAA,CAAA,CAAA,WAEhD7D,EAAE,WAAba,EAAA,EAAAL,EAEM,MAFNsD,GAEM5C,EADDlB,EAAE,SAAS,EAAA,CAAA,cAGlBiB,EAAqD,KAArD8C,GAAqD7C,EAAflB,EAAE,KAAK,EAAA,CAAA,EAM7CiB,EAiEK,KAjEL+C,GAiEK,CA1DKhE,EAAE,QAAK,eADfS,EAUewD,EAAA,OARb,MAAM,KACN,QAAQ,QACP,QAAShE,EAAA,QAAI,SAAcD,EAAE,IAAI,GACjC,WAAYC,EAAA,MACb,QAAQ,YACP,MAAGiE,GAAEhE,EAAIF,EAAC,OAAA,CAAA,aACZ,IAED,CAAA,GAAAgB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,GAFC,UAED,EAAA,CAAA,kDACAP,EAWewD,EAAA,OATb,MAAM,KACN,QAAQ,QACP,QAAShE,EAAA,QAAI,QAAaD,EAAE,IAAI,GAChC,WAAYC,EAAA,MACb,QAAQ,WACR,MAAM,yEACL,MAAGiE,GAAEhE,EAAIF,EAAC,MAAA,CAAA,aACZ,IAED,CAAA,GAAAgB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,GAFC,SAED,EAAA,CAAA,6CACAO,EASe0C,EAAA,CARb,MAAM,KACN,QAAQ,QACP,QAAShE,EAAA,QAAI,WAAgBD,EAAE,IAAI,GACnC,WAAYC,EAAA,MACb,QAAQ,cACP,MAAGiE,GAAEhE,EAAIF,EAAC,SAAA,CAAA,aACZ,IAED,CAAA,GAAAgB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,GAFC,YAED,EAAA,CAAA,4CACAO,EAKakB,EAAA,CAJX,MAAM,eACL,GAAE,gBAAkB,mBAAmBY,EAAAjE,CAAA,EAAI,EAAE,CAAA,mBAAoB,mBAAmBY,EAAE,IAAI,CAAA,EAAA,aAC5F,IAED,CAAA,GAAAgB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,GAFC,SAED,EAAA,CAAA,oBAEQhB,EAAE,QAAK,eADfS,EAMagC,EAAA,OAJX,MAAM,eACL,GAAE,gBAAkB,mBAAmBY,EAAAjE,CAAA,EAAI,EAAE,CAAA,uBAAwB,mBAAmBY,EAAE,IAAI,CAAA,EAAA,aAChG,IAED,CAAA,GAAAgB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,GAFC,UAED,EAAA,CAAA,8BAMQhB,EAAE,QAAK,WAAkBK,EAAOL,CAAC,OADzCQ,EAQI,IAAA,OANF,MAAM,eACL,KAAMH,EAAOL,CAAC,EACf,OAAO,SACP,IAAI,YAAA,EACL,SAED,EAAAmE,EAAA,oCAKR3D,EAGI,IAHJ4D,GAAuB,2KAGvB,EAAA,UAhQJvD,EAAA,EAAAL,EAMM,MANN6D,EAMM,CAAA,GAAArD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CALJC,EAA6B,SAA1B,yBAAsB,EAAA,EACzBA,EAGI,SAHD,sIAGH,EAAA,CAAA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var ht=e=>{throw TypeError(e)};var fn=(e,t,n)=>t.has(e)||ht("Cannot "+n);var Ae=(e,t,n)=>(fn(e,t,"read from private field"),n?n.call(e):t.get(e)),gt=(e,t,n)=>t.has(e)?ht("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);import{j as Mt,k as pn,l as Ve,e as mn,r as hn,g as Vt,S as vt,P as Y,c as Ce,a as me,m as gn,u as yt,n as wt,i as vn,f as yn,F as wn,D as xn,o as xt,p as bn,h as Sn,b as Lt,q as Cn,T as _n}from"./Teleport-DfE2iP8c.js";import{r as E,C as q,a7 as Le,a8 as An,a9 as Pn,aa as On,ab as En,Z as he,ac as qn,d as k,ad as bt,J as de,ae as Rn,af as Tn,o as $,x as L,w as R,X as V,u as w,ag as Ft,ah as we,P as $n,ai as Bn,aj as kn,c as Z,e as N,Y as ne,D as Nt,ak as In,W as it,g as Ee,s as zt,F as lt,a as xe,h as Oe,K as Dn,a3 as Pe,a5 as Wt,$ as Ht,a0 as jt,al as Mn,f as Kt,am as Vn,an as Ln,t as Ge}from"./index-DVMQBHXF.js";function St(e){return typeof e=="string"?`'${e}'`:new Fn().serialize(e)}const Fn=(function(){var t;class e{constructor(){gt(this,t,new Map)}compare(o,r){const i=typeof o,l=typeof r;return i==="string"&&l==="string"?o.localeCompare(r):i==="number"&&l==="number"?o-r:String.prototype.localeCompare.call(this.serialize(o,!0),this.serialize(r,!0))}serialize(o,r){if(o===null)return"null";switch(typeof o){case"string":return r?o:`'${o}'`;case"bigint":return`${o}n`;case"object":return this.$object(o);case"function":return this.$function(o)}return String(o)}serializeObject(o){const r=Object.prototype.toString.call(o);if(r!=="[object Object]")return this.serializeBuiltInType(r.length<10?`unknown:${r}`:r.slice(8,-1),o);const i=o.constructor,l=i===Object||i===void 0?"":i.name;if(l!==""&&globalThis[l]===i)return this.serializeBuiltInType(l,o);if(typeof o.toJSON=="function"){const s=o.toJSON();return l+(s!==null&&typeof s=="object"?this.$object(s):`(${this.serialize(s)})`)}return this.serializeObjectEntries(l,Object.entries(o))}serializeBuiltInType(o,r){const i=this["$"+o];if(i)return i.call(this,r);if(typeof(r==null?void 0:r.entries)=="function")return this.serializeObjectEntries(o,r.entries());throw new Error(`Cannot serialize ${o}`)}serializeObjectEntries(o,r){const i=Array.from(r).sort((s,a)=>this.compare(s[0],a[0]));let l=`${o}{`;for(let s=0;s<i.length;s++){const[a,u]=i[s];l+=`${this.serialize(a,!0)}:${this.serialize(u)}`,s<i.length-1&&(l+=",")}return l+"}"}$object(o){let r=Ae(this,t).get(o);return r===void 0&&(Ae(this,t).set(o,`#${Ae(this,t).size}`),r=this.serializeObject(o),Ae(this,t).set(o,r)),r}$function(o){const r=Function.prototype.toString.call(o);return r.slice(-15)==="[native code] }"?`${o.name||""}()[native]`:`${o.name}(${o.length})${r.replace(/\s*\n\s*/g,"")}`}$Array(o){let r="[";for(let i=0;i<o.length;i++)r+=this.serialize(o[i]),i<o.length-1&&(r+=",");return r+"]"}$Date(o){try{return`Date(${o.toISOString()})`}catch{return"Date(null)"}}$ArrayBuffer(o){return`ArrayBuffer[${new Uint8Array(o).join(",")}]`}$Set(o){return`Set${this.$Array(Array.from(o).sort((r,i)=>this.compare(r,i)))}`}$Map(o){return this.serializeObjectEntries("Map",o.entries())}}t=new WeakMap;for(const n of["Error","RegExp","URL"])e.prototype["$"+n]=function(o){return`${n}(${o})`};for(const n of["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array"])e.prototype["$"+n]=function(o){return`${n}[${o.join(",")}]`};for(const n of["BigInt64Array","BigUint64Array"])e.prototype["$"+n]=function(o){return`${n}[${o.join("n,")}${o.length>0?"n":""}]`};return e})();function Nn(e,t){return e===t||St(e)===St(t)}function Ct(e,t=Number.NEGATIVE_INFINITY,n=Number.POSITIVE_INFINITY){return Math.min(n,Math.max(t,e))}function zn(e){const t=Mt({dir:E("ltr")});return q(()=>{var n;return(e==null?void 0:e.value)||((n=t.dir)==null?void 0:n.value)||"ltr"})}let Je=0;function Wn(){Le(e=>{if(!pn)return;const t=document.querySelectorAll("[data-reka-focus-guard]");document.body.insertAdjacentElement("afterbegin",t[0]??_t()),document.body.insertAdjacentElement("beforeend",t[1]??_t()),Je++,e(()=>{Je===1&&document.querySelectorAll("[data-reka-focus-guard]").forEach(n=>n.remove()),Je--})})}function _t(){const e=document.createElement("span");return e.setAttribute("data-reka-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}function Hn(e){return q(()=>{var t;return An(e)?!!((t=Ve(e))!=null&&t.closest("form")):!0})}function st(e){const t=Pn(),n=Object.keys((t==null?void 0:t.type.props)??{}).reduce((r,i)=>{const l=(t==null?void 0:t.type.props[i]).default;return l!==void 0&&(r[i]=l),r},{}),o=En(e);return q(()=>{const r={},i=(t==null?void 0:t.vnode.props)??{};return Object.keys(i).forEach(l=>{r[On(l)]=i[l]}),Object.keys({...n,...r}).reduce((l,s)=>(o.value[s]!==void 0&&(l[s]=o.value[s]),l),{})})}function jn(e,t){const n=st(e),o=t?mn(t):{};return q(()=>({...n.value,...o}))}function Kn(e){const t=E(),n=q(()=>{var r;return((r=t.value)==null?void 0:r.width)??0}),o=q(()=>{var r;return((r=t.value)==null?void 0:r.height)??0});return he(()=>{const r=Ve(e);if(r){t.value={width:r.offsetWidth,height:r.offsetHeight};const i=new ResizeObserver(l=>{if(!Array.isArray(l)||!l.length)return;const s=l[0];let a,u;if("borderBoxSize"in s){const p=s.borderBoxSize,f=Array.isArray(p)?p[0]:p;a=f.inlineSize,u=f.blockSize}else a=r.offsetWidth,u=r.offsetHeight;t.value={width:a,height:u}});return i.observe(r,{box:"border-box"}),()=>i.unobserve(r)}else t.value=void 0}),{width:n,height:o}}function Ut(e){const t=hn("",1e3);return{search:t,handleTypeaheadSearch:(r,i)=>{t.value=t.value+r;{const l=Vt(),s=i.map(d=>{var c,m;return{...d,textValue:((c=d.value)==null?void 0:c.textValue)??((m=d.ref.textContent)==null?void 0:m.trim())??""}}),a=s.find(d=>d.ref===l),u=s.map(d=>d.textValue),p=Yn(u,t.value,a==null?void 0:a.textValue),f=s.find(d=>d.textValue===p);return f&&f.ref.focus(),f==null?void 0:f.ref}},resetTypeahead:()=>{t.value=""}}}function Un(e,t){return e.map((n,o)=>e[(t+o)%e.length])}function Yn(e,t,n){const r=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,i=n?e.indexOf(n):-1;let l=Un(e,Math.max(i,0));r.length===1&&(l=l.filter(u=>u!==n));const a=l.find(u=>u.toLowerCase().startsWith(r.toLowerCase()));return a!==n?a:void 0}function At(){const e=E(),t=q(()=>{var n,o;return["#text","#comment"].includes((n=e.value)==null?void 0:n.$el.nodeName)?(o=e.value)==null?void 0:o.$el.nextElementSibling:Ve(e)});return{primitiveElement:e,currentElement:t}}const Pt="data-reka-collection-item";function Te(e={}){const{key:t="",isProvider:n=!1}=e,o=`${t}CollectionProvider`;let r;if(n){const p=E(new Map);r={collectionRef:E(),itemMap:p},Tn(o,r)}else r=qn(o);const i=(p=!1)=>{const f=r.collectionRef.value;if(!f)return[];const d=Array.from(f.querySelectorAll(`[${Pt}]`)),m=Array.from(r.itemMap.value.values()).sort((y,x)=>d.indexOf(y.ref)-d.indexOf(x.ref));return p?m:m.filter(y=>y.ref.dataset.disabled!=="")},l=k({name:"CollectionSlot",inheritAttrs:!1,setup(p,{slots:f,attrs:d}){const{primitiveElement:c,currentElement:m}=At();return de(m,()=>{r.collectionRef.value=m.value}),()=>bt(vt,{ref:c,...d},f)}}),s=k({name:"CollectionItem",inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(p,{slots:f,attrs:d}){const{primitiveElement:c,currentElement:m}=At();return Le(y=>{if(m.value){const x=Rn(m.value);r.itemMap.value.set(x,{ref:m.value,value:p.value}),y(()=>r.itemMap.value.delete(x))}}),()=>bt(vt,{...d,[Pt]:"",ref:c},f)}}),a=q(()=>Array.from(r.itemMap.value.values())),u=q(()=>r.itemMap.value.size);return{getItems:i,reactiveItems:a,itemMapSize:u,CollectionSlot:l,CollectionItem:s}}var Xn=k({__name:"VisuallyHidden",props:{feature:{type:String,required:!1,default:"focusable"},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){return(t,n)=>($(),L(w(Y),{as:t.as,"as-child":t.asChild,"aria-hidden":t.feature==="focusable"?"true":void 0,"data-hidden":t.feature==="fully-hidden"?"":void 0,tabindex:t.feature==="fully-hidden"?"-1":void 0,style:{position:"absolute",border:0,width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",wordWrap:"normal",top:"-1px",left:"-1px"}},{default:R(()=>[V(t.$slots,"default")]),_:3},8,["as","as-child","aria-hidden","data-hidden","tabindex"]))}}),Gn=Xn;const[Yt,Jn]=Ce("PopperRoot");var Zn=k({inheritAttrs:!1,__name:"PopperRoot",setup(e){const t=E();return Jn({anchor:t,onAnchorChange:n=>t.value=n}),(n,o)=>V(n.$slots,"default")}}),Qn=Zn,eo=k({__name:"PopperAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{forwardRef:n,currentElement:o}=me(),r=Yt();return Ft(()=>{r.onAnchorChange(t.reference??o.value)}),(i,l)=>($(),L(w(Y),{ref:w(n),as:i.as,"as-child":i.asChild},{default:R(()=>[V(i.$slots,"default")]),_:3},8,["as","as-child"]))}}),to=eo;function no(e){return e!==null}function oo(e){return{name:"transformOrigin",options:e,fn(t){var x,_,g;const{placement:n,rects:o,middlewareData:r}=t,l=((x=r.arrow)==null?void 0:x.centerOffset)!==0,s=l?0:e.arrowWidth,a=l?0:e.arrowHeight,[u,p]=et(n),f={start:"0%",center:"50%",end:"100%"}[p],d=(((_=r.arrow)==null?void 0:_.x)??0)+s/2,c=(((g=r.arrow)==null?void 0:g.y)??0)+a/2;let m="",y="";return u==="bottom"?(m=l?f:`${d}px`,y=`${-a}px`):u==="top"?(m=l?f:`${d}px`,y=`${o.floating.height+a}px`):u==="right"?(m=`${-a}px`,y=l?f:`${c}px`):u==="left"&&(m=`${o.floating.width+a}px`,y=l?f:`${c}px`),{data:{x:m,y}}}}}function et(e){const[t,n="center"]=e.split("-");return[t,n]}const ro=["top","right","bottom","left"],ie=Math.min,Q=Math.max,ke=Math.round,Be=Math.floor,ee=e=>({x:e,y:e}),io={left:"right",right:"left",bottom:"top",top:"bottom"};function Xt(e,t,n){return Q(e,ie(t,n))}function te(e,t){return typeof e=="function"?e(t):e}function le(e){return e.split("-")[0]}function _e(e){return e.split("-")[1]}function at(e){return e==="x"?"y":"x"}function ut(e){return e==="y"?"height":"width"}function U(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function ct(e){return at(U(e))}function lo(e,t,n){n===void 0&&(n=!1);const o=_e(e),r=ct(e),i=ut(r);let l=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(l=Ie(l)),[l,Ie(l)]}function so(e){const t=Ie(e);return[tt(e),t,tt(t)]}function tt(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const Ot=["left","right"],Et=["right","left"],ao=["top","bottom"],uo=["bottom","top"];function co(e,t,n){switch(e){case"top":case"bottom":return n?t?Et:Ot:t?Ot:Et;case"left":case"right":return t?ao:uo;default:return[]}}function fo(e,t,n,o){const r=_e(e);let i=co(le(e),n==="start",o);return r&&(i=i.map(l=>l+"-"+r),t&&(i=i.concat(i.map(tt)))),i}function Ie(e){const t=le(e);return io[t]+e.slice(t.length)}function po(e){var t,n,o,r;return{top:(t=e.top)!=null?t:0,right:(n=e.right)!=null?n:0,bottom:(o=e.bottom)!=null?o:0,left:(r=e.left)!=null?r:0}}function Gt(e){return typeof e!="number"?po(e):{top:e,right:e,bottom:e,left:e}}function De(e){const{x:t,y:n,width:o,height:r}=e;return{width:o,height:r,top:n,left:t,right:t+o,bottom:n+r,x:t,y:n}}function qt(e,t,n){let{reference:o,floating:r}=e;const i=U(t),l=ct(t),s=ut(l),a=le(t),u=i==="y",p=o.x+o.width/2-r.width/2,f=o.y+o.height/2-r.height/2,d=o[s]/2-r[s]/2;let c;switch(a){case"top":c={x:p,y:o.y-r.height};break;case"bottom":c={x:p,y:o.y+o.height};break;case"right":c={x:o.x+o.width,y:f};break;case"left":c={x:o.x-r.width,y:f};break;default:c={x:o.x,y:o.y}}const m=_e(t);return m&&(c[l]+=d*(m==="end"?1:-1)*(n&&u?-1:1)),c}async function mo(e,t){var n;t===void 0&&(t={});const{x:o,y:r,platform:i,rects:l,elements:s,strategy:a}=e,{boundary:u="clippingAncestors",rootBoundary:p="viewport",elementContext:f="floating",altBoundary:d=!1,padding:c=0}=te(t,e),m=Gt(c),x=s[d?f==="floating"?"reference":"floating":f],_=De(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(x)))==null||n?x:x.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(s.floating)),boundary:u,rootBoundary:p,strategy:a})),g=f==="floating"?{x:o,y:r,width:l.floating.width,height:l.floating.height}:l.reference,C=await(i.getOffsetParent==null?void 0:i.getOffsetParent(s.floating)),h=await(i.isElement==null?void 0:i.isElement(C))&&await(i.getScale==null?void 0:i.getScale(C))||{x:1,y:1},S=De(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:g,offsetParent:C,strategy:a}):g);return{top:(_.top-S.top+m.top)/h.y,bottom:(S.bottom-_.bottom+m.bottom)/h.y,left:(_.left-S.left+m.left)/h.x,right:(S.right-_.right+m.right)/h.x}}const ho=50,go=async(e,t,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:i=[],platform:l}=n,s=l.detectOverflow?l:{...l,detectOverflow:mo},a=await(l.isRTL==null?void 0:l.isRTL(t));let u=await l.getElementRects({reference:e,floating:t,strategy:r}),{x:p,y:f}=qt(u,o,a),d=o,c=0;const m={};for(let y=0;y<i.length;y++){const x=i[y];if(!x)continue;const{name:_,fn:g}=x,{x:C,y:h,data:S,reset:v}=await g({x:p,y:f,initialPlacement:o,placement:d,strategy:r,middlewareData:m,rects:u,platform:s,elements:{reference:e,floating:t}});p=C??p,f=h??f,m[_]={...m[_],...S},v&&c<ho&&(c++,typeof v=="object"&&(v.placement&&(d=v.placement),v.rects&&(u=v.rects===!0?await l.getElementRects({reference:e,floating:t,strategy:r}):v.rects),{x:p,y:f}=qt(u,d,a)),y=-1)}return{x:p,y:f,placement:d,strategy:r,middlewareData:m}},vo=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:r,rects:i,platform:l,elements:s,middlewareData:a}=t,{element:u,padding:p=0}=te(e,t)||{};if(u==null)return{};const f=Gt(p),d={x:n,y:o},c=ct(r),m=ut(c),y=await l.getDimensions(u),x=c==="y",_=x?"top":"left",g=x?"bottom":"right",C=x?"clientHeight":"clientWidth",h=i.reference[m]+i.reference[c]-d[c]-i.floating[m],S=d[c]-i.reference[c],v=await(l.getOffsetParent==null?void 0:l.getOffsetParent(u));let b=v?v[C]:0;(!b||!await(l.isElement==null?void 0:l.isElement(v)))&&(b=s.floating[C]||i.floating[m]);const A=h/2-S/2,P=b/2-y[m]/2-1,O=ie(f[_],P),I=ie(f[g],P),T=b-y[m]-I,B=b/2-y[m]/2+A,D=Xt(O,B,T),z=!a.arrow&&_e(r)!=null&&B!==D&&i.reference[m]/2-(B<O?O:I)-y[m]/2<0,F=z?B<O?B-O:B-T:0;return{[c]:d[c]+F,data:{[c]:D,centerOffset:B-D-F,...z&&{alignmentOffset:F}},reset:z}}}),yo=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,o;const{placement:r,middlewareData:i,rects:l,initialPlacement:s,platform:a,elements:u}=t,{mainAxis:p=!0,crossAxis:f=!0,fallbackPlacements:d,fallbackStrategy:c="bestFit",fallbackAxisSideDirection:m="none",flipAlignment:y=!0,...x}=te(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};const _=le(r),g=U(s),C=le(s)===s,h=await(a.isRTL==null?void 0:a.isRTL(u.floating)),S=d||(C||!y?[Ie(s)]:so(s)),v=m!=="none";!d&&v&&S.push(...fo(s,y,m,h));const b=[s,...S],A=await a.detectOverflow(t,x),P=[];let O=((o=i.flip)==null?void 0:o.overflows)||[];if(p&&P.push(A[_]),f){const D=lo(r,l,h);P.push(A[D[0]],A[D[1]])}if(O=[...O,{placement:r,overflows:P}],!P.every(D=>D<=0)){var I,T;const D=(((I=i.flip)==null?void 0:I.index)||0)+1,z=b[D];if(z&&(!(f==="alignment"?g!==U(z):!1)||O.every(M=>U(M.placement)===g?M.overflows[0]>0:!0)))return{data:{index:D,overflows:O},reset:{placement:z}};let F=(T=O.filter(H=>H.overflows[0]<=0).sort((H,M)=>H.overflows[1]-M.overflows[1])[0])==null?void 0:T.placement;if(!F)switch(c){case"bestFit":{var B;const H=(B=O.filter(M=>{if(v){const K=U(M.placement);return K===g||K==="y"}return!0}).map(M=>[M.placement,M.overflows.filter(K=>K>0).reduce((K,ye)=>K+ye,0)]).sort((M,K)=>M[1]-K[1])[0])==null?void 0:B[0];H&&(F=H);break}case"initialPlacement":F=s;break}if(r!==F)return{reset:{placement:F}}}return{}}}};function Rt(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Tt(e){return ro.some(t=>e[t]>=0)}const wo=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:o}=t,{strategy:r="referenceHidden",...i}=te(e,t);switch(r){case"referenceHidden":{const l=await o.detectOverflow(t,{...i,elementContext:"reference"}),s=Rt(l,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:Tt(s)}}}case"escaped":{const l=await o.detectOverflow(t,{...i,altBoundary:!0}),s=Rt(l,n.floating);return{data:{escapedOffsets:s,escaped:Tt(s)}}}default:return{}}}}},Jt=new Set(["left","top"]);async function xo(e,t){const{placement:n,platform:o,elements:r}=e,i=await(o.isRTL==null?void 0:o.isRTL(r.floating)),l=le(n),s=_e(n),a=U(n)==="y",u=Jt.has(l)?-1:1,p=i&&a?-1:1,f=te(t,e);let{mainAxis:d,crossAxis:c,alignmentAxis:m}=typeof f=="number"?{mainAxis:f,crossAxis:0,alignmentAxis:null}:{mainAxis:f.mainAxis||0,crossAxis:f.crossAxis||0,alignmentAxis:f.alignmentAxis};return s&&typeof m=="number"&&(c=s==="end"?m*-1:m),a?{x:c*p,y:d*u}:{x:d*u,y:c*p}}const bo=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:r,y:i,placement:l,middlewareData:s}=t,a=await xo(t,e);return l===((n=s.offset)==null?void 0:n.placement)&&(o=s.arrow)!=null&&o.alignmentOffset?{}:{x:r+a.x,y:i+a.y,data:{...a,placement:l}}}}},So=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:r,platform:i}=t,{mainAxis:l=!0,crossAxis:s=!1,limiter:a={fn:g=>{let{x:C,y:h}=g;return{x:C,y:h}}},...u}=te(e,t),p={x:n,y:o},f=await i.detectOverflow(t,u),d=U(r),c=at(d);let m=p[c],y=p[d];const x=(g,C)=>Xt(C+f[g==="y"?"top":"left"],C,C-f[g==="y"?"bottom":"right"]);l&&(m=x(c,m)),s&&(y=x(d,y));const _=a.fn({...t,[c]:m,[d]:y});return{..._,data:{x:_.x-n,y:_.y-o,enabled:{[c]:l,[d]:s}}}}}},Co=function(e){return e===void 0&&(e={}),{options:e,fn(t){var n,o;const{x:r,y:i,placement:l,rects:s,middlewareData:a}=t,{offset:u=0,mainAxis:p=!0,crossAxis:f=!0}=te(e,t),d={x:r,y:i},c=U(l),m=at(c);let y=d[m],x=d[c];const _=te(u,t),g=typeof _=="number"?{mainAxis:_,crossAxis:0}:{mainAxis:(n=_.mainAxis)!=null?n:0,crossAxis:(o=_.crossAxis)!=null?o:0};if(p){const S=m==="y"?"height":"width",v=s.reference[m]-s.floating[S]+g.mainAxis,b=s.reference[m]+s.reference[S]-g.mainAxis;y<v?y=v:y>b&&(y=b)}if(f){var C,h;const S=m==="y"?"width":"height",v=Jt.has(le(l)),b=s.reference[c]-s.floating[S]+(v&&((C=a.offset)==null?void 0:C[c])||0)+(v?0:g.crossAxis),A=s.reference[c]+s.reference[S]+(v?0:((h=a.offset)==null?void 0:h[c])||0)-(v?g.crossAxis:0);x<b?x=b:x>A&&(x=A)}return{[m]:y,[c]:x}}}},_o=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:o,platform:r,elements:i}=t,{apply:l=()=>{},...s}=te(e,t),a=await r.detectOverflow(t,s),u=le(n),p=_e(n),f=U(n)==="y",{width:d,height:c}=o.floating;let m,y;u==="top"||u==="bottom"?(m=u,y=p===(await(r.isRTL==null?void 0:r.isRTL(i.floating))?"start":"end")?"left":"right"):(y=u,m=p==="end"?"top":"bottom");const x=c-a.top-a.bottom,_=d-a.left-a.right,g=ie(c-a[m],x),C=ie(d-a[y],_),h=t.middlewareData.shift,S=!h;let v=g,b=C;h!=null&&h.enabled.x&&(b=_),h!=null&&h.enabled.y&&(v=x),S&&!p&&(f?b=d-2*Q(a.left,a.right):v=c-2*Q(a.top,a.bottom)),await l({...t,availableWidth:b,availableHeight:v});const A=await r.getDimensions(i.floating);return d!==A.width||c!==A.height?{reset:{rects:!0}}:{}}}};function Fe(){return typeof window<"u"}function ge(e){return dt(e)?(e.nodeName||"").toLowerCase():"#document"}function W(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function oe(e){var t;return(t=(dt(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function dt(e){return Fe()?e instanceof Node||e instanceof W(e).Node:!1}function X(e){return Fe()?e instanceof Element||e instanceof W(e).Element:!1}function se(e){return Fe()?e instanceof HTMLElement||e instanceof W(e).HTMLElement:!1}function $t(e){return!Fe()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof W(e).ShadowRoot}function Ne(e){const{overflow:t,overflowX:n,overflowY:o,display:r}=G(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&r!=="inline"&&r!=="contents"}function Ao(e){return/^(table|td|th)$/.test(ge(e))}function ze(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const Po=/transform|translate|scale|rotate|perspective|filter/,Oo=/paint|layout|strict|content/,ce=e=>!!e&&e!=="none";let Ze;function ft(e){const t=X(e)?G(e):e;return ce(t.transform)||ce(t.translate)||ce(t.scale)||ce(t.rotate)||ce(t.perspective)||!pt()&&(ce(t.backdropFilter)||ce(t.filter))||Po.test(t.willChange||"")||Oo.test(t.contain||"")}function Eo(e){let t=fe(e);for(;se(t)&&!qe(t);){if(ft(t))return t;if(ze(t))return null;t=fe(t)}return null}function pt(){return Ze==null&&(Ze=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Ze}function qe(e){return/^(html|body|#document)$/.test(ge(e))}function G(e){return W(e).getComputedStyle(e)}function We(e){return X(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function fe(e){if(ge(e)==="html")return e;const t=e.assignedSlot||e.parentNode||$t(e)&&e.host||oe(e);return $t(t)?t.host:t}function Zt(e){const t=fe(e);return qe(t)?(e.ownerDocument||e).body:se(t)&&Ne(t)?t:Zt(t)}function Re(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const r=Zt(e),i=r===((o=e.ownerDocument)==null?void 0:o.body),l=W(r);if(i){const s=nt(l);return t.concat(l,l.visualViewport||[],Ne(r)?r:[],s&&n?Re(s):[])}else return t.concat(r,Re(r,[],n))}function nt(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Qt(e){const t=G(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const r=se(e),i=r?e.offsetWidth:n,l=r?e.offsetHeight:o,s=ke(n)!==i||ke(o)!==l;return s&&(n=i,o=l),{width:n,height:o,$:s}}function mt(e){return X(e)?e:e.contextElement}function Se(e){const t=mt(e);if(!se(t))return ee(1);const n=t.getBoundingClientRect(),{width:o,height:r,$:i}=Qt(t);let l=(i?ke(n.width):n.width)/o,s=(i?ke(n.height):n.height)/r;return(!l||!Number.isFinite(l))&&(l=1),(!s||!Number.isFinite(s))&&(s=1),{x:l,y:s}}const qo=ee(0);function en(e){const t=W(e);return!pt()||!t.visualViewport?qo:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Ro(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===W(e)}function pe(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const r=e.getBoundingClientRect(),i=mt(e);let l=ee(1);t&&(o?X(o)&&(l=Se(o)):l=Se(e));const s=Ro(i,n,o)?en(i):ee(0);let a=(r.left+s.x)/l.x,u=(r.top+s.y)/l.y,p=r.width/l.x,f=r.height/l.y;if(i&&o){const d=W(i),c=X(o)?W(o):o;let m=d,y=nt(m);for(;y&&c!==m;){const x=Se(y),_=y.getBoundingClientRect(),g=G(y),C=_.left+(y.clientLeft+parseFloat(g.paddingLeft))*x.x,h=_.top+(y.clientTop+parseFloat(g.paddingTop))*x.y;a*=x.x,u*=x.y,p*=x.x,f*=x.y,a+=C,u+=h,m=W(y),y=nt(m)}}return De({width:p,height:f,x:a,y:u})}function He(e,t){const n=We(e).scrollLeft;return t?t.left+n:pe(oe(e)).left+n}function tn(e,t){const n=e.getBoundingClientRect(),o=n.left+t.scrollLeft-He(e,n),r=n.top+t.scrollTop;return{x:o,y:r}}function To(e){let{elements:t,rect:n,offsetParent:o,strategy:r}=e;const i=r==="fixed",l=oe(o),s=t?ze(t.floating):!1;if(o===l||s&&i)return n;let a={scrollLeft:0,scrollTop:0},u=ee(1);const p=ee(0),f=se(o);if((f||!i)&&((ge(o)!=="body"||Ne(l))&&(a=We(o)),f)){const c=pe(o);u=Se(o),p.x=c.x+o.clientLeft,p.y=c.y+o.clientTop}const d=l&&!f&&!i?tn(l,a):ee(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-a.scrollLeft*u.x+p.x+d.x,y:n.y*u.y-a.scrollTop*u.y+p.y+d.y}}function $o(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function Bo(e){const t=We(e),n=e.ownerDocument.body,o=Q(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),r=Q(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let i=-t.scrollLeft+He(e);const l=-t.scrollTop;return G(n).direction==="rtl"&&(i+=Q(e.clientWidth,n.clientWidth)-o),{width:o,height:r,x:i,y:l}}const ko=25;function Io(e,t,n){n===void 0&&(n="viewport");const o=n==="layoutViewport",r=W(e),i=oe(e),l=r.visualViewport;let s=i.clientWidth,a=i.clientHeight,u=0,p=0;if(l){const d=!pt()||t==="fixed";o?d||(u=-l.offsetLeft,p=-l.offsetTop):(s=l.width,a=l.height,d&&(u=l.offsetLeft,p=l.offsetTop))}if(He(i)<=0){const d=i.ownerDocument,c=d.body,m=getComputedStyle(c),y=d.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,x=Math.abs(i.clientWidth-c.clientWidth-y),_=getComputedStyle(i).scrollbarGutter==="stable both-edges"?x/2:x;_<=ko&&(s-=_)}return{width:s,height:a,x:u,y:p}}function Do(e,t){const n=pe(e,!0,t==="fixed"),o=n.top+e.clientTop,r=n.left+e.clientLeft,i=Se(e),l=e.clientWidth*i.x,s=e.clientHeight*i.y,a=r*i.x,u=o*i.y;return{width:l,height:s,x:a,y:u}}function Bt(e,t,n){let o;if(t==="viewport"||t==="layoutViewport")o=Io(e,n,t);else if(t==="document")o=Bo(oe(e));else if(X(t))o=Do(t,n);else{const r=en(e);o={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return De(o)}function Mo(e,t){const n=t.get(e);if(n)return n;let o=Re(e,[],!1).filter(s=>X(s)&&ge(s)!=="body"),r=null;const i=G(e).position==="fixed";let l=i?fe(e):e;for(;X(l)&&!qe(l);){const s=G(l),a=ft(l),u=r?r.position:i?"fixed":"";!a&&(u==="fixed"||u==="absolute"&&s.position==="static")?o=o.filter(f=>f!==l):r=s,l=fe(l)}return t.set(e,o),o}function Vo(e){let{element:t,boundary:n,rootBoundary:o,strategy:r}=e;const l=[...n==="clippingAncestors"?ze(t)?[]:Mo(t,this._c):[].concat(n),o],s=Bt(t,l[0],r);let a=s.top,u=s.right,p=s.bottom,f=s.left;for(let d=1;d<l.length;d++){const c=Bt(t,l[d],r);a=Q(c.top,a),u=ie(c.right,u),p=ie(c.bottom,p),f=Q(c.left,f)}return{width:u-f,height:p-a,x:f,y:a}}function Lo(e){const{width:t,height:n}=Qt(e);return{width:t,height:n}}function Fo(e,t,n){const o=se(t),r=oe(t),i=n==="fixed",l=pe(e,!0,i,t);let s={scrollLeft:0,scrollTop:0};const a=ee(0);if((o||!i)&&((ge(t)!=="body"||Ne(r))&&(s=We(t)),o)){const d=pe(t,!0,i,t);a.x=d.x+t.clientLeft,a.y=d.y+t.clientTop}!o&&r&&(a.x=He(r));const u=r&&!o&&!i?tn(r,s):ee(0),p=l.left+s.scrollLeft-a.x-u.x,f=l.top+s.scrollTop-a.y-u.y;return{x:p,y:f,width:l.width,height:l.height}}function Qe(e){return G(e).position==="static"}function kt(e,t){if(!se(e)||G(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return oe(e)===n&&(n=n.ownerDocument.body),n}function nn(e,t){const n=W(e);if(ze(e))return n;if(!se(e)){let r=fe(e);for(;r&&!qe(r);){if(X(r)&&!Qe(r))return r;r=fe(r)}return n}let o=kt(e,t);for(;o&&Ao(o)&&Qe(o);)o=kt(o,t);return o&&qe(o)&&Qe(o)&&!ft(o)?n:o||Eo(e)||n}const No=async function(e){const t=this.getOffsetParent||nn,n=this.getDimensions,o=await n(e.floating);return{reference:Fo(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function zo(e){return G(e).direction==="rtl"}const Wo={convertOffsetParentRelativeRectToViewportRelativeRect:To,getDocumentElement:oe,getClippingRect:Vo,getOffsetParent:nn,getElementRects:No,getClientRects:$o,getDimensions:Lo,getScale:Se,isElement:X,isRTL:zo};function on(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Ho(e,t,n){let o=null,r;const i=oe(e);function l(){var p;clearTimeout(r),(p=o)==null||p.disconnect(),o=null}function s(p,f){p===void 0&&(p=!1),f===void 0&&(f=1),l();const d=e.getBoundingClientRect(),{left:c,top:m,width:y,height:x}=d;if(p||t(),!y||!x)return;const _=Be(m),g=Be(i.clientWidth-(c+y)),C=Be(i.clientHeight-(m+x)),h=Be(c),v={rootMargin:-_+"px "+-g+"px "+-C+"px "+-h+"px",threshold:Q(0,ie(1,f))||1};let b=!0;function A(P){const O=P[0].intersectionRatio;if(!on(d,e.getBoundingClientRect()))return s();if(O!==f){if(!b)return s();O?s(!1,O):r=setTimeout(()=>{s(!1,1e-7)},1e3)}b=!1}try{o=new IntersectionObserver(A,{...v,root:i.ownerDocument})}catch{o=new IntersectionObserver(A,v)}o.observe(e)}const a=W(e),u=()=>s(n);return a.addEventListener("resize",u),s(!0),()=>{a.removeEventListener("resize",u),l()}}function jo(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:i=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:a=!1}=o,u=mt(e),p=r||i?[...u?Re(u):[],...t?Re(t):[]]:[];p.forEach(_=>{r&&_.addEventListener("scroll",n),i&&_.addEventListener("resize",n)});const f=u&&s?Ho(u,n,i):null;let d=-1,c=null;l&&(c=new ResizeObserver(_=>{let[g]=_;g&&g.target===u&&c&&t&&(c.unobserve(t),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var C;(C=c)==null||C.observe(t)})),n()}),u&&!a&&c.observe(u),t&&c.observe(t));let m,y=a?pe(e):null;a&&x();function x(){const _=pe(e);y&&!on(y,_)&&n(),y=_,m=requestAnimationFrame(x)}return n(),()=>{var _;p.forEach(g=>{r&&g.removeEventListener("scroll",n),i&&g.removeEventListener("resize",n)}),f==null||f(),(_=c)==null||_.disconnect(),c=null,a&&cancelAnimationFrame(m)}}const Ko=bo,Uo=So,It=yo,Yo=_o,Xo=wo,Go=vo,Jo=Co,Zo=(e,t,n)=>{const o=new Map,r=n??{},i={...Wo,...r.platform,_c:o};return go(e,t,{...r,platform:i})};function Qo(e){return e!=null&&typeof e=="object"&&"$el"in e}function ot(e){if(Qo(e)){const t=e.$el;return dt(t)&&ge(t)==="#comment"?null:t}return e}function be(e){return typeof e=="function"?e():w(e)}function er(e){return{name:"arrow",options:e,fn(t){const n=ot(be(e.element));return n==null?{}:Go({element:n,padding:e.padding}).fn(t)}}}function rn(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Dt(e,t){const n=rn(e);return Math.round(t*n)/n}function tr(e,t,n){n===void 0&&(n={});const o=n.whileElementsMounted,r=q(()=>{var b;return(b=be(n.open))!=null?b:!0}),i=q(()=>be(n.middleware)),l=q(()=>{var b;return(b=be(n.placement))!=null?b:"bottom"}),s=q(()=>{var b;return(b=be(n.strategy))!=null?b:"absolute"}),a=q(()=>{var b;return(b=be(n.transform))!=null?b:!0}),u=q(()=>ot(e.value)),p=q(()=>ot(t.value)),f=E(0),d=E(0),c=E(s.value),m=E(l.value),y=$n({}),x=E(!1),_=q(()=>{const b={position:c.value,left:"0",top:"0"};if(!p.value)return b;const A=Dt(p.value,f.value),P=Dt(p.value,d.value);return a.value?{...b,transform:"translate("+A+"px, "+P+"px)",...rn(p.value)>=1.5&&{willChange:"transform"}}:{position:c.value,left:A+"px",top:P+"px"}});let g;function C(){if(u.value==null||p.value==null)return;const b=r.value;Zo(u.value,p.value,{middleware:i.value,placement:l.value,strategy:s.value}).then(A=>{f.value=A.x,d.value=A.y,c.value=A.strategy,m.value=A.placement,y.value=A.middlewareData,x.value=b!==!1})}function h(){typeof g=="function"&&(g(),g=void 0)}function S(){if(h(),o===void 0){C();return}if(u.value!=null&&p.value!=null){g=o(u.value,p.value,C);return}}function v(){r.value||(x.value=!1)}return de([i,l,s,r],C,{flush:"sync"}),de([u,p],S,{flush:"sync"}),de(r,v,{flush:"sync"}),Bn()&&kn(h),{x:we(f),y:we(d),strategy:we(c),placement:we(m),middlewareData:we(y),isPositioned:we(x),floatingStyles:_,update:C}}const nr={side:"bottom",sideOffset:0,sideFlip:!0,align:"center",alignOffset:0,alignFlip:!0,arrowPadding:0,hideShiftedArrow:!0,avoidCollisions:!0,collisionBoundary:()=>[],collisionPadding:0,sticky:"partial",hideWhenDetached:!1,positionStrategy:"fixed",updatePositionStrategy:"optimized",prioritizePosition:!1},[Yr,or]=Ce("PopperContent");var rr=k({inheritAttrs:!1,__name:"PopperContent",props:In({side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},{...nr}),emits:["placed"],setup(e,{emit:t}){const n=e,o=t,r=Yt(),{forwardRef:i,currentElement:l}=me(),s=E(),a=E(),{width:u,height:p}=Kn(a),f=q(()=>n.side+(n.align!=="center"?`-${n.align}`:"")),d=q(()=>typeof n.collisionPadding=="number"?n.collisionPadding:{top:0,right:0,bottom:0,left:0,...n.collisionPadding}),c=q(()=>Array.isArray(n.collisionBoundary)?n.collisionBoundary:[n.collisionBoundary]),m=q(()=>({padding:d.value,boundary:c.value.filter(no),altBoundary:c.value.length>0})),y=q(()=>({mainAxis:n.sideFlip,crossAxis:n.alignFlip})),x=gn(()=>[Ko({mainAxis:n.sideOffset+p.value,alignmentAxis:n.alignOffset}),n.prioritizePosition&&n.avoidCollisions&&It({...m.value,...y.value}),n.avoidCollisions&&Uo({mainAxis:!0,crossAxis:!!n.prioritizePosition,limiter:n.sticky==="partial"?Jo():void 0,...m.value}),!n.prioritizePosition&&n.avoidCollisions&&It({...m.value,...y.value}),Yo({...m.value,apply:({elements:T,rects:B,availableWidth:D,availableHeight:z})=>{const{width:F,height:H}=B.reference,M=T.floating.style;M.setProperty("--reka-popper-available-width",`${D}px`),M.setProperty("--reka-popper-available-height",`${z}px`),M.setProperty("--reka-popper-anchor-width",`${F}px`),M.setProperty("--reka-popper-anchor-height",`${H}px`)}}),a.value&&er({element:a.value,padding:n.arrowPadding}),oo({arrowWidth:u.value,arrowHeight:p.value}),n.hideWhenDetached&&Xo({strategy:"referenceHidden",...m.value})]),_=q(()=>n.reference??r.anchor.value),{floatingStyles:g,placement:C,isPositioned:h,middlewareData:S}=tr(_,s,{strategy:n.positionStrategy,placement:f,whileElementsMounted:(...T)=>jo(...T,{layoutShift:!n.disableUpdateOnLayoutShift,animationFrame:n.updatePositionStrategy==="always"}),middleware:x}),v=q(()=>et(C.value)[0]),b=q(()=>et(C.value)[1]);Ft(()=>{h.value&&o("placed")});const A=q(()=>{var B;const T=((B=S.value.arrow)==null?void 0:B.centerOffset)!==0;return n.hideShiftedArrow&&T}),P=E("");Le(()=>{l.value&&(P.value=window.getComputedStyle(l.value).zIndex)});const O=q(()=>{var T;return((T=S.value.arrow)==null?void 0:T.x)??0}),I=q(()=>{var T;return((T=S.value.arrow)==null?void 0:T.y)??0});return or({placedSide:v,onArrowChange:T=>a.value=T,arrowX:O,arrowY:I,shouldHideArrow:A}),(T,B)=>{var D,z,F;return $(),Z("div",{ref_key:"floatingRef",ref:s,"data-reka-popper-content-wrapper":"",style:Nt({...w(g),transform:w(h)?w(g).transform:"translate(0, -200%)",minWidth:"max-content",zIndex:P.value,"--reka-popper-transform-origin":[(D=w(S).transformOrigin)==null?void 0:D.x,(z=w(S).transformOrigin)==null?void 0:z.y].join(" "),...((F=w(S).hide)==null?void 0:F.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}})},[N(w(Y),ne({ref:w(i)},T.$attrs,{"as-child":n.asChild,as:T.as,"data-side":v.value,"data-align":b.value,style:{animation:w(h)?void 0:"none"}}),{default:R(()=>[V(T.$slots,"default")]),_:3},16,["as-child","as","data-side","data-align","style"])],4)}}}),ir=rr;function lr(e){const t=Mt({nonce:E()});return q(()=>{var n;return(e==null?void 0:e.value)||((n=t.nonce)==null?void 0:n.value)})}const sr=[" ","Enter","ArrowUp","ArrowDown"],ar=[" ","Enter"],j=10;function Me(e,t,n){return e===void 0?!1:Array.isArray(e)?e.some(o=>rt(o,t,n)):rt(e,t,n)}function rt(e,t,n){return e===void 0||t===void 0?!1:typeof e=="string"?e===t:typeof n=="function"?n(e,t):typeof n=="string"?(e==null?void 0:e[n])===(t==null?void 0:t[n]):Nn(e,t)}function ur(e){return e==null||e===""||Array.isArray(e)&&e.length===0}const cr={key:0,value:""},[ve,ln]=Ce("SelectRoot");var dr=k({inheritAttrs:!1,__name:"SelectRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},by:{type:[String,Function],required:!1},dir:{type:String,required:!1},multiple:{type:Boolean,required:!1},autocomplete:{type:String,required:!1},disabled:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","update:open"],setup(e,{emit:t}){const n=e,o=t,{required:r,disabled:i,multiple:l,dir:s}=it(n),a=yt(n,"modelValue",o,{defaultValue:n.defaultValue??(l.value?[]:void 0),passive:n.modelValue===void 0,deep:!0}),u=yt(n,"open",o,{defaultValue:n.defaultOpen,passive:n.open===void 0}),p=E(),f=E(),d=E({x:0,y:0}),c=q(()=>{var h;return l.value&&Array.isArray(a.value)?((h=a.value)==null?void 0:h.length)===0:wt(a.value)});Te({isProvider:!0});const m=zn(s),y=Hn(p),x=E(new Set),_=q(()=>Array.from(x.value).map(h=>h.value).join(";"));function g(h){if(l.value){const S=Array.isArray(a.value)?[...a.value]:[],v=S.findIndex(b=>rt(b,h,n.by));v===-1?S.push(h):S.splice(v,1),a.value=[...S]}else a.value=h}function C(h){return Array.from(x.value).find(S=>Me(h,S.value,n.by))}return ln({triggerElement:p,onTriggerChange:h=>{p.value=h},valueElement:f,onValueElementChange:h=>{f.value=h},contentId:"",modelValue:a,onValueChange:g,by:n.by,open:u,multiple:l,required:r,onOpenChange:h=>{u.value=h},dir:m,triggerPointerDownPosRef:d,disabled:i,isEmptyModelValue:c,optionsSet:x,onOptionAdd:h=>{const S=C(h.value);S&&x.value.delete(S),x.value.add(h)},onOptionRemove:h=>{const S=C(h.value);S&&x.value.delete(S)}}),(h,S)=>($(),L(w(Qn),null,{default:R(()=>[V(h.$slots,"default",{modelValue:w(a),open:w(u)}),w(y)&&h.name?($(),L(mr,{key:_.value,"aria-hidden":"true",tabindex:"-1",multiple:w(l),required:w(r),name:h.name,autocomplete:h.autocomplete,disabled:w(i),value:w(a)},{default:R(()=>[w(wt)(w(a))?($(),Z("option",cr)):Ee("v-if",!0),($(!0),Z(lt,null,zt(Array.from(x.value),v=>($(),Z("option",ne({key:v.value??""},{ref_for:!0},v),null,16))),128))]),_:1},8,["multiple","required","name","autocomplete","disabled","value"])):Ee("v-if",!0)]),_:3}))}}),fr=dr,pr=k({__name:"BubbleSelect",props:{autocomplete:{type:String,required:!1},autofocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},form:{type:String,required:!1},multiple:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},size:{type:Number,required:!1},value:{type:null,required:!1}},setup(e){const t=e,n=E(),o=ve();de(()=>t.value,(i,l)=>{const s=window.HTMLSelectElement.prototype,u=Object.getOwnPropertyDescriptor(s,"value").set;if(i!==l&&u&&n.value){const p=new Event("change",{bubbles:!0});u.call(n.value,i),n.value.dispatchEvent(p)}});function r(i){o.onValueChange(i.target.value)}return(i,l)=>($(),L(w(Gn),{"as-child":""},{default:R(()=>[xe("select",ne({ref_key:"selectElement",ref:n},t,{onInput:r}),[V(i.$slots,"default")],16)]),_:3}))}}),mr=pr,hr=k({__name:"SelectPopperPosition",props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:"start"},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1,default:j},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const n=st(e);return(o,r)=>($(),L(w(ir),ne(w(n),{style:{boxSizing:"border-box","--reka-select-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-select-content-available-width":"var(--reka-popper-available-width)","--reka-select-content-available-height":"var(--reka-popper-available-height)","--reka-select-trigger-width":"var(--reka-popper-anchor-width)","--reka-select-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:R(()=>[V(o.$slots,"default")]),_:3},16))}}),gr=hr;const vr={onViewportChange:()=>{},itemTextRefCallback:()=>{},itemRefCallback:()=>{}},[je,sn]=Ce("SelectContent");var yr=k({__name:"SelectContentImpl",props:{position:{type:String,required:!1,default:"item-aligned"},bodyLock:{type:Boolean,required:!1,default:!0},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1,default:"start"},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,o=t,r=ve();Wn(),vn(n.bodyLock);const{CollectionSlot:i,getItems:l}=Te(),s=E();yn(s);const{search:a,handleTypeaheadSearch:u}=Ut(),p=E(),f=E(),d=E(),c=E(!1),m=E(!1),y=E(!1);function x(){f.value&&s.value&&xt([f.value,s.value])}de(c,()=>{x()});const{onOpenChange:_,triggerPointerDownPosRef:g}=r;Le(v=>{if(!s.value)return;let b={x:0,y:0};const A=O=>{var I,T;b={x:Math.abs(Math.round(O.pageX)-(((I=g.value)==null?void 0:I.x)??0)),y:Math.abs(Math.round(O.pageY)-(((T=g.value)==null?void 0:T.y)??0))}},P=O=>{var I;O.pointerType!=="touch"&&(b.x<=10&&b.y<=10?O.preventDefault():(I=s.value)!=null&&I.contains(O.target)||_(!1),document.removeEventListener("pointermove",A),g.value=null)};g.value!==null&&(document.addEventListener("pointermove",A),document.addEventListener("pointerup",P,{capture:!0,once:!0})),v(()=>{document.removeEventListener("pointermove",A),document.removeEventListener("pointerup",P,{capture:!0})})});function C(v){const b=v.ctrlKey||v.altKey||v.metaKey;if(v.key==="Tab"&&v.preventDefault(),!b&&v.key.length===1&&u(v.key,l()),["ArrowUp","ArrowDown","Home","End"].includes(v.key)){let P=[...l().map(O=>O.ref)];if(["ArrowUp","End"].includes(v.key)&&(P=P.slice().reverse()),["ArrowUp","ArrowDown"].includes(v.key)){const O=v.target,I=P.indexOf(O);P=P.slice(I+1)}setTimeout(()=>xt(P)),v.preventDefault()}}const h=q(()=>n.position==="popper"?n:{}),S=st(h.value);return sn({content:s,viewport:p,onViewportChange:v=>{p.value=v},itemRefCallback:(v,b,A)=>{const P=!m.value&&!A,O=Me(r.modelValue.value,b,r.by);if(r.multiple.value){if(y.value)return;(O||P)&&(f.value=v,O&&(y.value=!0))}else(O||P)&&(f.value=v);P&&(m.value=!0)},selectedItem:f,selectedItemText:d,onItemLeave:()=>{var v;(v=s.value)==null||v.focus()},itemTextRefCallback:(v,b,A)=>{const P=!m.value&&!A;(Me(r.modelValue.value,b,r.by)||P)&&(d.value=v)},focusSelectedItem:x,position:n.position,isPositioned:c,searchRef:a}),(v,b)=>($(),L(w(i),null,{default:R(()=>[N(w(wn),{"as-child":"",onMountAutoFocus:b[6]||(b[6]=Oe(()=>{},["prevent"])),onUnmountAutoFocus:b[7]||(b[7]=A=>{var P;o("closeAutoFocus",A),!A.defaultPrevented&&((P=w(r).triggerElement.value)==null||P.focus({preventScroll:!0}),A.preventDefault())})},{default:R(()=>[N(w(xn),{"as-child":"","disable-outside-pointer-events":v.disableOutsidePointerEvents,onFocusOutside:b[2]||(b[2]=Oe(()=>{},["prevent"])),onDismiss:b[3]||(b[3]=A=>w(r).onOpenChange(!1)),onEscapeKeyDown:b[4]||(b[4]=A=>o("escapeKeyDown",A)),onPointerDownOutside:b[5]||(b[5]=A=>o("pointerDownOutside",A))},{default:R(()=>[($(),L(Dn(v.position==="popper"?gr:Cr),ne({...v.$attrs,...w(S)},{id:w(r).contentId,ref:A=>{if(!A)return;const P=w(Ve)(A);P!=null&&P.hasAttribute("data-reka-popper-content-wrapper")?s.value=P.firstElementChild:s.value=P},role:"listbox","data-state":w(r).open.value?"open":"closed",dir:w(r).dir.value,style:{display:"flex",flexDirection:"column",outline:"none"},onContextmenu:b[0]||(b[0]=Oe(()=>{},["prevent"])),onPlaced:b[1]||(b[1]=A=>c.value=!0),onKeydown:C}),{default:R(()=>[V(v.$slots,"default")]),_:3},16,["id","data-state","dir","onKeydown"]))]),_:3},8,["disable-outside-pointer-events"])]),_:3})]),_:3}))}}),wr=yr;const[xr,br]=Ce("SelectItemAlignedPosition");var Sr=k({inheritAttrs:!1,__name:"SelectItemAlignedPosition",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["placed"],setup(e,{emit:t}){const n=e,o=t,{getItems:r}=Te(),i=ve(),l=je(),s=E(!1),a=E(!0),u=E(),{forwardRef:p,currentElement:f}=me(),{viewport:d,selectedItem:c,selectedItemText:m,focusSelectedItem:y}=l;function x(){if(i.triggerElement.value&&i.valueElement.value&&u.value&&f.value&&(d!=null&&d.value)&&(c!=null&&c.value)&&(m!=null&&m.value)){const C=i.triggerElement.value.getBoundingClientRect(),h=f.value.getBoundingClientRect(),S=i.valueElement.value.getBoundingClientRect(),v=m.value.getBoundingClientRect();if(i.dir.value!=="rtl"){const J=v.left-h.left,re=S.left-J,ae=C.left-re,ue=C.width+ae,Ue=Math.max(ue,h.width),Ye=window.innerWidth-j,Xe=Ct(re,j,Math.max(j,Ye-Ue));u.value.style.minWidth=`${ue}px`,u.value.style.left=`${Xe}px`}else{const J=h.right-v.right,re=window.innerWidth-S.right-J,ae=window.innerWidth-C.right-re,ue=C.width+ae,Ue=Math.max(ue,h.width),Ye=window.innerWidth-j,Xe=Ct(re,j,Math.max(j,Ye-Ue));u.value.style.minWidth=`${ue}px`,u.value.style.right=`${Xe}px`}const b=r().map(J=>J.ref),A=window.innerHeight-j*2,P=d.value.scrollHeight,O=window.getComputedStyle(f.value),I=Number.parseInt(O.borderTopWidth,10),T=Number.parseInt(O.paddingTop,10),B=Number.parseInt(O.borderBottomWidth,10),D=Number.parseInt(O.paddingBottom,10),z=I+T+P+D+B,F=Math.min(c.value.offsetHeight*5,z),H=window.getComputedStyle(d.value),M=Number.parseInt(H.paddingTop,10),K=Number.parseInt(H.paddingBottom,10),ye=C.top+C.height/2-j,un=A-ye,Ke=c.value.offsetHeight/2,cn=c.value.offsetTop+Ke,$e=I+T+cn,dn=z-$e;if($e<=ye){const J=c.value===b.at(-1);u.value.style.bottom="0px";const re=f.value.clientHeight-d.value.offsetTop-d.value.offsetHeight,ae=Math.max(un,Ke+(J?K:0)+re+B),ue=$e+ae;u.value.style.height=`${ue}px`}else{const J=c.value===b[0];u.value.style.top="0px";const ae=Math.max(ye,I+d.value.offsetTop+(J?M:0)+Ke)+dn;u.value.style.height=`${ae}px`,d.value.scrollTop=$e-ye+d.value.offsetTop}u.value.style.margin=`${j}px 0`,u.value.style.minHeight=`${F}px`,u.value.style.maxHeight=`${A}px`,o("placed"),requestAnimationFrame(()=>s.value=!0)}}const _=E("");he(async()=>{await Pe(),x(),f.value&&(_.value=window.getComputedStyle(f.value).zIndex)});function g(C){C&&a.value===!0&&(x(),y==null||y(),a.value=!1)}return bn(i.triggerElement,()=>{x()}),br({contentWrapper:u,shouldExpandOnScrollRef:s,onScrollButtonChange:g}),(C,h)=>($(),Z("div",{ref_key:"contentWrapperElement",ref:u,style:Nt({display:"flex",flexDirection:"column",position:"fixed",zIndex:_.value})},[N(w(Y),ne({ref:w(p),style:{boxSizing:"border-box",maxHeight:"100%"}},{...C.$attrs,...n}),{default:R(()=>[V(C.$slots,"default")]),_:3},16)],4))}}),Cr=Sr,_r=k({inheritAttrs:!1,__name:"SelectProvider",props:{context:{type:Object,required:!0}},setup(e){return ln(e.context),sn(vr),(n,o)=>V(n.$slots,"default")}}),Ar=_r;const Pr={key:1};var Or=k({inheritAttrs:!1,__name:"SelectContent",props:{forceMount:{type:Boolean,required:!1},position:{type:String,required:!1},bodyLock:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["closeAutoFocus","escapeKeyDown","pointerDownOutside"],setup(e,{emit:t}){const n=e,r=jn(n,t),i=ve(),l=E();he(()=>{l.value=new DocumentFragment});const s=E(),a=q(()=>n.forceMount||i.open.value),u=E(a.value);let p;function f(){p&&(clearTimeout(p),p=void 0)}return de(a,(d,c,m)=>{f(),p=setTimeout(()=>{u.value=a.value,p=void 0}),m(f)}),Wt(f),(d,c)=>{var m;return a.value||u.value||(m=s.value)!=null&&m.present?($(),L(w(Sn),{key:0,ref_key:"presenceRef",ref:s,present:a.value},{default:R(()=>[N(wr,Ht(jt({...w(r),...d.$attrs})),{default:R(()=>[V(d.$slots,"default")]),_:3},16)]),_:3},8,["present"])):l.value?($(),Z("div",Pr,[($(),L(Mn,{to:l.value},[N(Ar,{context:w(i)},{default:R(()=>[V(d.$slots,"default")]),_:3},8,["context"])],8,["to"]))])):Ee("v-if",!0)}}}),Er=Or;const[an,qr]=Ce("SelectItem");var Rr=k({__name:"SelectItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(e,{emit:t}){const n=e,o=t,{disabled:r}=it(n),i=ve(),l=je(),{forwardRef:s,currentElement:a}=me(),{CollectionItem:u}=Te(),p=q(()=>{var h;return Me((h=i.modelValue)==null?void 0:h.value,n.value,i.by)}),f=E(!1),d=E(n.textValue??""),c=Lt(void 0,"reka-select-item-text"),m="select.select";async function y(h){if(h.defaultPrevented)return;const S={originalEvent:h,value:n.value};Cn(m,x,S)}async function x(h){await Pe(),o("select",h),!h.defaultPrevented&&(r.value||(i.onValueChange(n.value),i.multiple.value||i.onOpenChange(!1)))}async function _(h){var S,v;await Pe(),!h.defaultPrevented&&(r.value?(S=l.onItemLeave)==null||S.call(l):(v=h.currentTarget)==null||v.focus({preventScroll:!0}))}async function g(h){var S;await Pe(),!h.defaultPrevented&&h.currentTarget===Vt()&&((S=l.onItemLeave)==null||S.call(l))}async function C(h){var v;await Pe(),!(h.defaultPrevented||((v=l.searchRef)==null?void 0:v.value)!==""&&h.key===" ")&&(ar.includes(h.key)&&y(h),h.key===" "&&h.preventDefault())}if(n.value==="")throw new Error("A <SelectItem /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return he(()=>{a.value&&l.itemRefCallback(a.value,n.value,n.disabled)}),qr({value:n.value,disabled:r,textId:c,isSelected:p,onItemTextChange:h=>{d.value=((d.value||(h==null?void 0:h.textContent))??"").trim()}}),(h,S)=>($(),L(w(u),{value:{textValue:d.value}},{default:R(()=>[N(w(Y),{ref:w(s),role:"option","aria-labelledby":w(c),"data-highlighted":f.value?"":void 0,"aria-selected":p.value,"data-state":p.value?"checked":"unchecked","aria-disabled":w(r)||void 0,"data-disabled":w(r)?"":void 0,tabindex:w(r)?void 0:-1,as:h.as,"as-child":h.asChild,onFocus:S[0]||(S[0]=v=>f.value=!0),onBlur:S[1]||(S[1]=v=>f.value=!1),onPointerup:y,onPointerdown:S[2]||(S[2]=v=>{v.currentTarget.focus({preventScroll:!0})}),onTouchend:S[3]||(S[3]=Oe(()=>{},["prevent","stop"])),onPointermove:_,onPointerleave:g,onKeydown:C},{default:R(()=>[V(h.$slots,"default")]),_:3},8,["aria-labelledby","data-highlighted","aria-selected","data-state","aria-disabled","data-disabled","tabindex","as","as-child"])]),_:3},8,["value"]))}}),Tr=Rr,$r=k({__name:"SelectItemIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,n=an();return(o,r)=>w(n).isSelected.value?($(),L(w(Y),ne({key:0,"aria-hidden":"true"},t),{default:R(()=>[V(o.$slots,"default")]),_:3},16)):Ee("v-if",!0)}}),Br=$r,kr=k({inheritAttrs:!1,__name:"SelectItemText",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(e){const t=e,n=ve(),o=je(),r=an(),{forwardRef:i,currentElement:l}=me(),s=q(()=>{var a,u;return{value:r.value,disabled:r.disabled.value,textContent:((a=l.value)==null?void 0:a.textContent)??((u=r.value)==null?void 0:u.toString())??""}});return he(()=>{l.value&&(r.onItemTextChange(l.value),o.itemTextRefCallback(l.value,r.value,r.disabled.value),n.onOptionAdd(s.value))}),Wt(()=>{n.onOptionRemove(s.value)}),(a,u)=>($(),L(w(Y),ne({id:w(r).textId,ref:w(i)},{...t,...a.$attrs}),{default:R(()=>[V(a.$slots,"default")]),_:3},16,["id"]))}}),Ir=kr,Dr=k({__name:"SelectPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=e;return(n,o)=>($(),L(w(_n),Ht(jt(t)),{default:R(()=>[V(n.$slots,"default")]),_:3},16))}}),Mr=Dr,Vr=k({__name:"SelectTrigger",props:{disabled:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const t=e,n=ve(),{forwardRef:o,currentElement:r}=me(),i=q(()=>{var d;return((d=n.disabled)==null?void 0:d.value)||t.disabled});n.contentId||(n.contentId=Lt(void 0,"reka-select-content")),he(()=>{n.onTriggerChange(r.value)});const{getItems:l}=Te(),{search:s,handleTypeaheadSearch:a,resetTypeahead:u}=Ut();function p(){i.value||(n.onOpenChange(!0),u())}function f(d){p(),n.triggerPointerDownPosRef.value={x:Math.round(d.pageX),y:Math.round(d.pageY)}}return(d,c)=>($(),L(w(to),{"as-child":"",reference:d.reference},{default:R(()=>{var m,y,x,_;return[N(w(Y),{ref:w(o),role:"combobox",type:d.as==="button"?"button":void 0,"aria-controls":w(n).contentId,"aria-expanded":w(n).open.value||!1,"aria-required":(m=w(n).required)==null?void 0:m.value,"aria-autocomplete":"none",disabled:i.value,dir:(y=w(n))==null?void 0:y.dir.value,"data-state":(x=w(n))!=null&&x.open.value?"open":"closed","data-disabled":i.value?"":void 0,"data-placeholder":w(ur)((_=w(n).modelValue)==null?void 0:_.value)?"":void 0,"as-child":d.asChild,as:d.as,onClick:c[0]||(c[0]=g=>{var C;(C=g==null?void 0:g.currentTarget)==null||C.focus()}),onPointerdown:c[1]||(c[1]=g=>{if(g.pointerType==="touch")return g.preventDefault();const C=g.target;C.hasPointerCapture(g.pointerId)&&C.releasePointerCapture(g.pointerId),g.button===0&&g.ctrlKey===!1&&(f(g),g.preventDefault())}),onPointerup:c[2]||(c[2]=Oe(g=>{g.pointerType==="touch"&&f(g)},["prevent"])),onKeydown:c[3]||(c[3]=g=>{const C=w(s)!=="";!(g.ctrlKey||g.altKey||g.metaKey)&&g.key.length===1&&C&&g.key===" "||(w(a)(g.key,w(l)()),w(sr).includes(g.key)&&(p(),g.preventDefault()))})},{default:R(()=>[V(d.$slots,"default")]),_:3},8,["type","aria-controls","aria-expanded","aria-required","disabled","dir","data-state","data-disabled","data-placeholder","as-child","as"])]}),_:3},8,["reference"]))}}),Lr=Vr,Fr=k({__name:"SelectViewport",props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const t=e,{nonce:n}=it(t),o=lr(n),r=je(),i=r.position==="item-aligned"?xr():void 0,{forwardRef:l,currentElement:s}=me();he(()=>{r==null||r.onViewportChange(s.value)});const a=E(0);function u(p){const f=p.currentTarget,{shouldExpandOnScrollRef:d,contentWrapper:c}=i??{};if(d!=null&&d.value&&(c!=null&&c.value)){const m=Math.abs(a.value-f.scrollTop);if(m>0){const y=window.innerHeight-j*2,x=Number.parseFloat(c.value.style.minHeight),_=Number.parseFloat(c.value.style.height),g=Math.max(x,_);if(g<y){const C=g+m,h=Math.min(y,C),S=C-h;c.value.style.height=`${h}px`,c.value.style.bottom==="0px"&&(f.scrollTop=S>0?S:0,c.value.style.justifyContent="flex-end")}}}a.value=f.scrollTop}return(p,f)=>($(),Z(lt,null,[N(w(Y),ne({ref:w(l),"data-reka-select-viewport":"",role:"presentation"},{...p.$attrs,...t},{style:{position:"relative",flex:1,overflow:"hidden auto"},onScroll:u}),{default:R(()=>[V(p.$slots,"default")]),_:3},16),N(w(Y),{as:"style",nonce:w(o)},{default:R(()=>f[0]||(f[0]=[Kt(" /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } [data-reka-select-viewport]::-webkit-scrollbar { display: none; } ")])),_:1,__:[0]},8,["nonce"])],64))}}),Nr=Fr;const zr={class:"selm-value"},Wr={key:0,class:"selm-hint"},Xr=k({__name:"SelectMenu",props:Ln({options:{},label:{},disabled:{type:Boolean},placeholder:{},id:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=Vn(e,"modelValue");return(n,o)=>($(),L(w(fr),{modelValue:t.value,"onUpdate:modelValue":o[0]||(o[0]=r=>t.value=r),disabled:e.disabled},{default:R(()=>[N(w(Lr),{id:e.id,class:"selm-trigger","aria-label":e.label},{default:R(()=>{var r;return[xe("span",zr,Ge(((r=e.options.find(i=>i.value===t.value))==null?void 0:r.label)??e.placeholder??"—"),1),o[1]||(o[1]=xe("svg",{viewBox:"0 0 24 24",width:"14",height:"14","aria-hidden":"true",class:"selm-caret"},[xe("path",{d:"m6 9 6 6 6-6",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1))]}),_:1},8,["id","aria-label"]),N(w(Mr),null,{default:R(()=>[N(w(Er),{class:"selm-list",position:"popper","side-offset":6},{default:R(()=>[N(w(Nr),null,{default:R(()=>[($(!0),Z(lt,null,zt(e.options,r=>($(),L(w(Tr),{key:r.value,value:r.value,class:"selm-opt"},{default:R(()=>[N(w(Ir),null,{default:R(()=>[Kt(Ge(r.label),1)]),_:2},1024),r.hint?($(),Z("span",Wr,Ge(r.hint),1)):Ee("",!0),N(w(Br),{class:"selm-tick"},{default:R(()=>[...o[2]||(o[2]=[xe("svg",{viewBox:"0 0 24 24",width:"14",height:"14","aria-hidden":"true"},[xe("path",{d:"m5 13 4 4L19 7",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1})]),_:2},1032,["value"]))),128))]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","disabled"]))}});export{Xr as _};
|
|
2
|
-
//# sourceMappingURL=SelectMenu.vue_vue_type_script_setup_true_lang-D8NGgBfa.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{d as $,J as V,y as A,G as D,c as n,a as s,e as c,w as d,t as o,E as I,u as h,g as m,x as b,F as g,f as l,_ as N,s as L,r as v,C as R,j as S,o as t,S as U,A as z,B as E}from"./index-DVMQBHXF.js";import{s as j,c as B}from"./useFormat-DVXTfIS-.js";import{_ as q}from"./SkeletonList.vue_vue_type_script_setup_true_lang-qMyLRAMp.js";import{_ as F}from"./ErrorNote.vue_vue_type_script_setup_true_lang-B3hfwyPR.js";const T={class:"page-head"},G={class:"mute",style:{"font-size":"var(--t-sm)"}},H={style:{"font-size":"var(--t-xl)"}},J={class:"sub"},P={key:0},W={key:1},K={key:2},M={key:3,class:"mute"},O={key:1,class:"panel"},Q={class:"banner failed"},X={class:"panel"},Y={key:1,class:"kvlist"},Z={class:"k"},ee={class:"v"},se={key:0},te={key:1,class:"mute"},ne={class:"v"},ae={key:1,class:"mute"},oe={class:"v"},le={class:"v"},ie={key:0,class:"panel"},de={key:0,class:"banner plain"},re={key:1,class:"code"},ue={key:2,class:"mute"},ye=$({__name:"SpecDetailView",props:{name:{}},setup(y){const f=y,a=v(null),r=v(!0),u=v(""),p=v(!1);async function w(){r.value=!0,p.value=!1;const i=await z.getAuthed(`/api/specs/${encodeURIComponent(f.name)}`);if(r.value=!1,i.status===404){p.value=!0;return}if(!i.ok){u.value=E(i,"load this spec");return}u.value="",a.value=i.body}V(()=>f.name,w,{immediate:!0}),V(()=>U.token,w),A.deploymentsLoaded||D();const x=R(()=>A.deployments.filter(i=>i.specName===f.name));return(i,e)=>{var C;const k=S("RouterLink");return t(),n("div",null,[s("div",T,[s("div",null,[s("div",G,[c(k,{to:"/specs"},{default:d(()=>[...e[0]||(e[0]=[l("← specs",-1)])]),_:1})]),s("h1",H,o(y.name),1),s("div",J,[(C=a.value)!=null&&C.description?(t(),n("span",P,o(a.value.description),1)):p.value?(t(),n("span",W,"not found")):r.value?(t(),n("span",K,"loading…")):(t(),n("span",M,"no description"))])]),e[1]||(e[1]=s("span",{class:"grow"},null,-1)),a.value?(t(),n("span",{key:0,class:I(["badge",a.value.kind])},o(h(j)(a.value.kind)),3)):m("",!0)]),u.value?(t(),b(F,{key:0,text:u.value,title:"Could not load this spec."},null,8,["text"])):m("",!0),p.value?(t(),n("section",O,[s("div",Q,[s("b",null,"No spec named “"+o(y.name)+"”.",1),e[2]||(e[2]=s("p",null,"It may have been deleted, or this is an older link.",-1))])])):(t(),n(g,{key:2},[s("section",X,[r.value?(t(),b(q,{key:0,rows:4})):a.value?(t(),n("ul",Y,[s("li",null,[s("span",Z,[e[4]||(e[4]=l(" Needs ",-1)),c(N,{label:"what needs means"},{default:d(()=>[...e[3]||(e[3]=[l(" Variables the spec uses but does not set. Every deployment referencing it supplies these, which is how one spec serves many stacks — and a missing one is refused by name rather than filled in blank. ",-1)])]),_:1})]),s("span",ee,[a.value.requiredVars.length?(t(),n("b",se,o(a.value.requiredVars.join(", ")),1)):(t(),n("span",te,"nothing — every value is fixed by the spec"))])]),s("li",null,[e[6]||(e[6]=s("span",{class:"k"},"Used by",-1)),s("span",ne,[x.value.length?(t(),n(g,{key:0},[(t(!0),n(g,null,L(x.value,_=>(t(),b(k,{key:_.id,to:`/deployments/${encodeURIComponent(_.id)}`,style:{"margin-right":"10px"}},{default:d(()=>[l(o(_.id),1)]),_:2},1032,["to"]))),128)),c(N,{label:"why this matters"},{default:d(()=>[...e[5]||(e[5]=[l(" Deleting a spec while a deployment still references it is refused: that deployment could no longer be resolved, and one that cannot be resolved can never be torn down. ",-1)])]),_:1})],64)):(t(),n("span",ae,"no deployments reference it"))])]),s("li",null,[e[7]||(e[7]=s("span",{class:"k"},"Created",-1)),s("span",oe,o(h(B)(a.value.createdAt)),1)]),s("li",null,[e[8]||(e[8]=s("span",{class:"k"},"Updated",-1)),s("span",le,o(h(B)(a.value.updatedAt)),1)])])):m("",!0)]),a.value?(t(),n("section",ie,[e[13]||(e[13]=s("div",{class:"phead"},[s("h2",{class:"section"},"Source")],-1)),a.value.sourceWithheld?(t(),n("div",de,[e[12]||(e[12]=s("b",null,"Hidden without an access token.",-1)),s("p",null,[e[10]||(e[10]=l(" A spec's hooks are shell commands, and they often carry a password or an API token inline — so the server does not send the file to an unauthenticated reader. ",-1)),c(k,{to:"/settings"},{default:d(()=>[...e[9]||(e[9]=[l("Add your token",-1)])]),_:1}),e[11]||(e[11]=l(" to see it. ",-1))])])):a.value.source?(t(),n("pre",re,o(a.value.source),1)):(t(),n("p",ue,"The server returned no source for this spec."))])):m("",!0)],64))])}}});export{ye as default};
|
|
2
|
-
//# sourceMappingURL=SpecDetailView-CGQZS7NU.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{ac as be,af as Ee,ao as Oe,a8 as E,M as we,ap as re,a9 as x,a7 as F,aq as Se,J as A,P as se,ai as Pe,aj as Ae,r as b,C as w,Z as Ce,u as D,a3 as I,F as De,ar as Te,aa as _e,as as Le,at as Ie,a5 as ie,au as Me,d as B,W as Fe,ad as $,av as Ne,Y as xe,aw as Be,o as G,x as J,w as ae,X,D as ke,U as ue,al as Re,g as je}from"./index-DVMQBHXF.js";function $e(e,t){const n=typeof e=="string"&&!t?`${e}Context`:t,o=Symbol(n);return[u=>{const a=be(o,u);if(a||a===null)return a;throw new Error(`Injection \`${o.toString()}\` not found. Component must be used within ${Array.isArray(e)?`one of the following components: ${e.join(", ")}`:`\`${e}\``}`)},u=>(Ee(o,u),u)]}function T(){let e=document.activeElement;if(e==null)return null;for(;e!=null&&e.shadowRoot!=null&&e.shadowRoot.activeElement!=null;)e=e.shadowRoot.activeElement;return e}function le(e,t,n){const o=n.originalEvent.target,s=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),o.dispatchEvent(s)}function Ue(e){return e==null}function Tt(e,t){var n;const o=se();return F(()=>{o.value=e()},{...t,flush:(n=t==null?void 0:t.flush)!==null&&n!==void 0?n:"sync"}),Se(o)}function Z(e,t){return Pe()?(Ae(e,t),!0):!1}function We(e){let t=!1,n;const o=re(!0);return((...s)=>(t||(n=o.run(()=>e(...s)),t=!0),n))}const _=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const qe=e=>typeof e<"u",Ke=Object.prototype.toString,He=e=>Ke.call(e)==="[object Object]",ee=ze();function ze(){var e,t,n;return _&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function q(e){return Array.isArray(e)?e:[e]}function Ve(e){return x()}function Ye(e){if(!_)return e;let t=0,n,o;const s=()=>{t-=1,o&&t<=0&&(o.stop(),n=void 0,o=void 0)};return((...r)=>(t+=1,o||(o=re(!0),n=o.run(()=>e(...r))),Z(s),n))}function _t(e,t=1e4){return Oe((n,o)=>{let s=E(e),r;const u=()=>setTimeout(()=>{s=E(e),o()},E(t));return Z(()=>{clearTimeout(r)}),{get(){return n(),s},set(a){s=a,o(),clearTimeout(r),r=u()}}})}function Ge(e,t){Ve()&&we(e,t)}function Je(e,t,n){return A(e,t,{...n,immediate:!0})}const U=_?window:void 0;function N(e){var t;const n=E(e);return(t=n==null?void 0:n.$el)!==null&&t!==void 0?t:n}function ce(...e){const t=(o,s,r,u)=>(o.addEventListener(s,r,u),()=>o.removeEventListener(s,r,u)),n=w(()=>{const o=q(E(e[0])).filter(s=>s!=null);return o.every(s=>typeof s!="string")?o:void 0});return Je(()=>{var o,s;return[(o=(s=n.value)===null||s===void 0?void 0:s.map(r=>N(r)))!==null&&o!==void 0?o:[U].filter(r=>r!=null),q(E(n.value?e[1]:e[0])),q(D(n.value?e[2]:e[1])),E(n.value?e[3]:e[2])]},([o,s,r,u],a,f)=>{if(!(o!=null&&o.length)||!(s!=null&&s.length)||!(r!=null&&r.length))return;const v=He(u)?{...u}:u,l=o.flatMap(i=>s.flatMap(c=>r.map(d=>t(i,c,d,v))));f(()=>{l.forEach(i=>i())})},{flush:"post"})}function de(){const e=se(!1),t=x();return t&&Ce(()=>{e.value=!0},t),e}function Xe(e){const t=de();return w(()=>(t.value,!!e()))}function Ze(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Qe(...e){let t,n,o={};e.length===3?(t=e[0],n=e[1],o=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],o=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=U,eventName:r="keydown",passive:u=!1,dedupe:a=!1}=o,f=Ze(t);return ce(s,r,l=>{l.repeat&&E(a)||f(l)&&n(l)},u)}function et(e){return JSON.parse(JSON.stringify(e))}function Lt(e,t,n={}){const{window:o=U,...s}=n;let r;const u=Xe(()=>o&&"ResizeObserver"in o),a=()=>{r&&(r.disconnect(),r=void 0)},f=A(w(()=>{const l=E(e);return Array.isArray(l)?l.map(i=>N(i)):[N(l)]}),l=>{if(a(),u.value&&o){r=new ResizeObserver(t);for(const i of l)i&&r.observe(i,s)}},{immediate:!0,flush:"post"}),v=()=>{a(),f()};return Z(v),{isSupported:u,stop:v}}function It(e,t,n,o={}){var s,r;const{clone:u=!1,passive:a=!1,eventName:f,deep:v=!1,defaultValue:l,shouldEmit:i}=o,c=x(),d=n||(c==null?void 0:c.emit)||(c==null||(s=c.$emit)===null||s===void 0?void 0:s.bind(c))||(c==null||(r=c.proxy)===null||r===void 0||(r=r.$emit)===null||r===void 0?void 0:r.bind(c==null?void 0:c.proxy));let y=f;t||(t="modelValue"),y=y||`update:${t.toString()}`;const h=p=>u?typeof u=="function"?u(p):et(p):p,g=()=>qe(e[t])?h(e[t]):l,m=p=>{i?i(p)&&d(y,p):d(y,p)};if(a){const p=b(g());let S=!1;return A(()=>e[t],P=>{S||(S=!0,p.value=h(P),I(()=>S=!1))}),A(p,P=>{!S&&(P!==e[t]||v)&&m(P)},{deep:v}),p}else return w({get(){return g()},set(p){m(p)}})}function Q(e){return e?e.flatMap(t=>t.type===De?Q(t.children):[t]):[]}const[fe]=$e("ConfigProvider");function K(e){if(e===null||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)==="[object Module]":!0}function Y(e,t,n=".",o){if(!K(t))return Y(e,{},n,o);const s={...t};for(const r of Object.keys(e)){if(r==="__proto__"||r==="constructor")continue;const u=e[r];u!=null&&(o&&o(s,r,u,n)||(Array.isArray(u)&&Array.isArray(s[r])?s[r]=[...u,...s[r]]:K(u)&&K(s[r])?s[r]=Y(u,s[r],(n?`${n}.`:"")+r.toString(),o):s[r]=u))}return s}function tt(e){return(...t)=>t.reduce((n,o)=>Y(n,o,"",e),{})}const nt=tt(),ot=Ye(()=>{const e=b(new Map),t=b(),n=w(()=>{for(const u of e.value.values())if(u)return!0;return!1}),o=fe({scrollBody:b(!0)});let s=null;const r=()=>{document.body.style.paddingRight="",document.body.style.marginRight="",document.body.style.pointerEvents="",document.documentElement.style.removeProperty("--scrollbar-width"),document.body.style.overflow=t.value??"",ee&&(s==null||s()),t.value=void 0};return A(n,(u,a)=>{var i;if(!_)return;if(!u){a&&r();return}t.value===void 0&&(t.value=document.body.style.overflow);const f=window.innerWidth-document.documentElement.clientWidth,v={padding:f,margin:0},l=(i=o.scrollBody)!=null&&i.value?typeof o.scrollBody.value=="object"?nt({padding:o.scrollBody.value.padding===!0?f:o.scrollBody.value.padding,margin:o.scrollBody.value.margin===!0?f:o.scrollBody.value.margin},v):v:{padding:0,margin:0};f>0&&(document.body.style.paddingRight=typeof l.padding=="number"?`${l.padding}px`:String(l.padding),document.body.style.marginRight=typeof l.margin=="number"?`${l.margin}px`:String(l.margin),document.documentElement.style.setProperty("--scrollbar-width",`${f}px`),document.body.style.overflow="hidden"),ee&&(s=ce(document,"touchmove",c=>rt(c),{passive:!1})),I(()=>{n.value&&(document.body.style.pointerEvents="none",document.body.style.overflow="hidden")})},{immediate:!0,flush:"sync"}),e});function Mt(e){const t=Math.random().toString(36).substring(2,7),n=ot();n.value.set(t,e??!1);const o=w({get:()=>n.value.get(t)??!1,set:s=>n.value.set(t,s)});return Ge(()=>{n.value.delete(t)}),o}function ve(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth<e.scrollWidth||t.overflowY==="auto"&&e.clientHeight<e.scrollHeight)return!0;{const n=e.parentNode;return!(n instanceof Element)||n.tagName==="BODY"?!1:ve(n)}}function rt(e){const t=e||window.event,n=t.target;return n instanceof Element&&ve(n)?!1:t.touches.length>1?!0:(t.preventDefault&&t.cancelable&&t.preventDefault(),!1)}function Ft(e){const t=x(),n=t==null?void 0:t.type.emits,o={};return n!=null&&n.length||console.warn(`No emitted event found. Please check component: ${t==null?void 0:t.type.__name}`),n==null||n.forEach(s=>{o[Te(_e(s))]=(...r)=>e(s,...r)}),o}function pe(){const e=x(),t=b(),n=w(()=>o());Le(()=>{n.value!==o()&&Ie(t)});function o(){return t.value&&"$el"in t.value&&["#text","#comment"].includes(t.value.$el.nodeName)?t.value.$el.nextElementSibling:N(t)}const s=Object.assign({},e.exposed),r={};for(const a in e.props)Object.defineProperty(r,a,{enumerable:!0,configurable:!0,get:()=>e.props[a]});if(Object.keys(s).length>0)for(const a in s)Object.defineProperty(r,a,{enumerable:!0,configurable:!0,get:()=>s[a]});Object.defineProperty(r,"$el",{enumerable:!0,configurable:!0,get:()=>e.vnode.el}),e.exposed=r;function u(a){if(t.value=a,!!a&&(Object.defineProperty(r,"$el",{enumerable:!0,configurable:!0,get:()=>a instanceof Element?a:a.$el}),!(a instanceof Element)&&!Object.hasOwn(a,"$el"))){const f=a.$.exposed,v=Object.assign({},r);for(const l in f)Object.defineProperty(v,l,{enumerable:!0,configurable:!0,get:()=>f[l]});e.exposed=v}}return{forwardRef:u,currentRef:t,currentElement:n}}var st=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},M=new WeakMap,k=new WeakMap,R={},H=0,me=function(e){return e&&(e.host||me(e.parentNode))},it=function(e,t){return t.map(function(n){if(e.contains(n))return n;var o=me(n);return o&&e.contains(o)?o:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},at=function(e,t,n,o){var s=it(t,Array.isArray(e)?e:[e]);R[n]||(R[n]=new WeakMap);var r=R[n],u=[],a=new Set,f=new Set(s),v=function(i){!i||a.has(i)||(a.add(i),v(i.parentNode))};s.forEach(v);var l=function(i){!i||f.has(i)||Array.prototype.forEach.call(i.children,function(c){if(a.has(c))l(c);else try{var d=c.getAttribute(o),y=d!==null&&d!=="false",h=(M.get(c)||0)+1,g=(r.get(c)||0)+1;M.set(c,h),r.set(c,g),u.push(c),h===1&&y&&k.set(c,!0),g===1&&c.setAttribute(n,"true"),y||c.setAttribute(o,"true")}catch(m){console.error("aria-hidden: cannot operate on ",c,m)}})};return l(t),a.clear(),H++,function(){u.forEach(function(i){var c=M.get(i)-1,d=r.get(i)-1;M.set(i,c),r.set(i,d),c||(k.has(i)||i.removeAttribute(o),k.delete(i)),d||i.removeAttribute(n)}),H--,H||(M=new WeakMap,M=new WeakMap,k=new WeakMap,R={})}},ut=function(e,t,n){n===void 0&&(n="data-aria-hidden");var o=Array.from(Array.isArray(e)?e:[e]),s=st(e);return s?(o.push.apply(o,Array.from(s.querySelectorAll("[aria-live], script"))),at(o,s,n,"aria-hidden")):function(){return null}};function Nt(e){let t;A(()=>N(e),n=>{let o=!1;try{o=!!(n!=null&&n.closest("[popover]:not(:popover-open)"))}catch{}n&&!o?t=ut(n):t&&t()}),ie(()=>{t&&t()})}function xt(e,t="reka"){var s;let n;const o=fe({useId:void 0});return o.useId?n=o.useId():n=(s=Me)==null?void 0:s(),t?`${t}-${n}`:n}function lt(e,t){const n=b(e);function o(r){return t[n.value][r]??n.value}return{state:n,dispatch:r=>{n.value=o(r)}}}function ct(e,t){var g;const n=b({}),o=b("none"),s=b(e),r=e.value?"mounted":"unmounted";let u;const a=((g=t.value)==null?void 0:g.ownerDocument.defaultView)??U,{state:f,dispatch:v}=lt(r,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}}),l=m=>{var p;if(_){const S=new CustomEvent(m,{bubbles:!1,cancelable:!1});(p=t.value)==null||p.dispatchEvent(S)}};A(e,async(m,p)=>{var P;const S=p!==m;if(await I(),S){const W=o.value,L=j(t.value);m?(v("MOUNT"),l("enter"),L==="none"&&l("after-enter")):L==="none"||L==="undefined"||((P=n.value)==null?void 0:P.display)==="none"?(v("UNMOUNT"),l("leave"),l("after-leave")):p&&W!==L?(v("ANIMATION_OUT"),l("leave")):(v("UNMOUNT"),l("after-leave"))}},{immediate:!0});const i=m=>{const p=j(t.value),S=p.includes(CSS.escape(m.animationName)),P=f.value==="mounted"?"enter":"leave";if(m.target===t.value&&S&&(l(`after-${P}`),v("ANIMATION_END"),!s.value)){const W=t.value.style.animationFillMode;t.value.style.animationFillMode="forwards",u=a==null?void 0:a.setTimeout(()=>{var L;((L=t.value)==null?void 0:L.style.animationFillMode)==="forwards"&&(t.value.style.animationFillMode=W)})}m.target===t.value&&p==="none"&&v("ANIMATION_END")},c=m=>{m.target===t.value&&(o.value=j(t.value))},d=A(t,(m,p)=>{m?(n.value=getComputedStyle(m),m.addEventListener("animationstart",c),m.addEventListener("animationcancel",i),m.addEventListener("animationend",i)):(v("ANIMATION_END"),u!==void 0&&(a==null||a.clearTimeout(u)),p==null||p.removeEventListener("animationstart",c),p==null||p.removeEventListener("animationcancel",i),p==null||p.removeEventListener("animationend",i))},{immediate:!0}),y=A(f,()=>{const m=j(t.value);o.value=f.value==="mounted"?m:"none"});return ie(()=>{d(),y()}),{isPresent:w(()=>["mounted","unmountSuspended"].includes(f.value))}}function j(e){return e&&getComputedStyle(e).animationName||"none"}var Bt=B({name:"Presence",props:{present:{type:Boolean,required:!0},forceMount:{type:Boolean}},slots:{},setup(e,{slots:t,expose:n}){var v;const{present:o,forceMount:s}=Fe(e),r=b(),{isPresent:u}=ct(o,r);n({present:u});let a=t.default({present:u.value});a=Q(a||[]);const f=x();if(a&&(a==null?void 0:a.length)>1){const l=(v=f==null?void 0:f.parent)!=null&&v.type.name?`<${f.parent.type.name} />`:"component";throw new Error([`Detected an invalid children for \`${l}\` for \`Presence\` component.`,"","Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.","You can apply a few solutions:",["Provide a single child element so that `presence` directive attach correctly.","Ensure the first child is an actual element instead of a raw text node or comment node."].map(i=>` - ${i}`).join(`
|
|
2
|
-
`)].join(`
|
|
3
|
-
`))}return()=>s.value||o.value||u.value?$(t.default({present:u.value})[0],{ref:l=>{const i=N(l);return typeof(i==null?void 0:i.hasAttribute)>"u"||(i!=null&&i.hasAttribute("data-reka-popper-content-wrapper")?r.value=i.firstElementChild:r.value=i),i}}):null}});const dt=B({name:"PrimitiveSlot",inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{var f;if(!n.default)return null;const o=Q(n.default()),s=o.findIndex(v=>v.type!==Ne);if(s===-1)return o;const r=o[s];(f=r.props)==null||delete f.ref;const u=r.props?xe(t,r.props):t,a=Be({...r,props:{}},u);return o.length===1?a:(o[s]=a,o)}}}),ft=["area","img","input"],ye=B({name:"Primitive",inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:"div"}},setup(e,{attrs:t,slots:n}){const o=e.asChild?"template":e.as;return typeof o=="string"&&ft.includes(o)?()=>$(o,t):o!=="template"?()=>$(e.as,t,{default:n.default}):()=>$(dt,t,{default:n.default})}}),vt="dismissableLayer.pointerDownOutside",pt="dismissableLayer.focusOutside";function he(e,t){if(!(t instanceof Element))return!1;const n=t.closest("[data-dismissable-layer]"),o=e.dataset.dismissableLayer===""?e:e.querySelector("[data-dismissable-layer]"),s=Array.from(e.ownerDocument.querySelectorAll("[data-dismissable-layer]"));return!!(n&&(o===n||s.indexOf(o)<s.indexOf(n)))}function mt(e,t,n=!0){var u;const o=((u=t==null?void 0:t.value)==null?void 0:u.ownerDocument)??(globalThis==null?void 0:globalThis.document),s=b(!1),r=b(()=>{});return F(a=>{if(!_||!E(n))return;const f=async l=>{const i=l.target;if(!(!(t!=null&&t.value)||!i)){if(he(t.value,i)){s.value=!1;return}if(l.target&&!s.value){let d=function(){le(vt,e,c)};const c={originalEvent:l};l.pointerType==="touch"?(o.removeEventListener("click",r.value),r.value=d,o.addEventListener("click",r.value,{once:!0})):d()}else o.removeEventListener("click",r.value);s.value=!1}},v=window.setTimeout(()=>{o.addEventListener("pointerdown",f)},0);a(()=>{window.clearTimeout(v),o.removeEventListener("pointerdown",f),o.removeEventListener("click",r.value)})}),{onPointerDownCapture:()=>{E(n)&&(s.value=!0)}}}function yt(e,t,n=!0){var r;const o=((r=t==null?void 0:t.value)==null?void 0:r.ownerDocument)??(globalThis==null?void 0:globalThis.document),s=b(!1);return F(u=>{if(!_||!E(n))return;const a=async f=>{if(!(t!=null&&t.value))return;await I(),await I();const v=f.target;!t.value||!v||he(t.value,v)||f.target&&!s.value&&le(pt,e,{originalEvent:f})};o.addEventListener("focusin",a),u(()=>o.removeEventListener("focusin",a))}),{onFocusCapture:()=>{E(n)&&(s.value=!0)},onBlurCapture:()=>{E(n)&&(s.value=!1)}}}const O=ue({layersRoot:new Set,layersWithOutsidePointerEventsDisabled:new Set,originalBodyPointerEvents:void 0,branches:new Set});var ht=B({__name:"DismissableLayer",props:{disableOutsidePointerEvents:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","dismiss"],setup(e,{emit:t}){const n=e,o=t,{forwardRef:s,currentElement:r}=pe(),u=w(()=>{var d;return((d=r.value)==null?void 0:d.ownerDocument)??globalThis.document}),a=w(()=>O.layersRoot),f=w(()=>r.value?Array.from(a.value).indexOf(r.value):-1),v=w(()=>O.layersWithOutsidePointerEventsDisabled.size>0),l=w(()=>{const d=Array.from(a.value),[y]=[...O.layersWithOutsidePointerEventsDisabled].slice(-1),h=d.indexOf(y);return f.value>=h}),i=mt(async d=>{const y=[...O.branches].some(h=>h==null?void 0:h.contains(d.target));!l.value||y||(o("pointerDownOutside",d),o("interactOutside",d),await I(),d.defaultPrevented||o("dismiss"))},r),c=yt(d=>{[...O.branches].some(h=>h==null?void 0:h.contains(d.target))||(o("focusOutside",d),o("interactOutside",d),d.defaultPrevented||o("dismiss"))},r);return Qe("Escape",d=>{f.value===a.value.size-1&&(o("escapeKeyDown",d),d.defaultPrevented||o("dismiss"))}),A([r,()=>n.disableOutsidePointerEvents],([d,y],h,g)=>{d&&(y&&(O.layersWithOutsidePointerEventsDisabled.size===0&&(O.originalBodyPointerEvents=u.value.body.style.pointerEvents,u.value.body.style.pointerEvents="none"),O.layersWithOutsidePointerEventsDisabled.add(d),g(()=>{O.layersWithOutsidePointerEventsDisabled.delete(d),O.layersWithOutsidePointerEventsDisabled.size===0&&!Ue(O.originalBodyPointerEvents)&&(u.value.body.style.pointerEvents=O.originalBodyPointerEvents)})),a.value.add(d))},{immediate:!0}),F(d=>{d(()=>{r.value&&(a.value.delete(r.value),O.layersWithOutsidePointerEventsDisabled.delete(r.value))})}),(d,y)=>(G(),J(D(ye),{ref:D(s),"as-child":d.asChild,as:d.as,"data-dismissable-layer":"",style:ke({pointerEvents:v.value?l.value?"auto":"none":void 0}),onFocusCapture:D(c).onFocusCapture,onBlurCapture:D(c).onBlurCapture,onPointerdownCapture:D(i).onPointerDownCapture},{default:ae(()=>[X(d.$slots,"default")]),_:3},8,["as-child","as","style","onFocusCapture","onBlurCapture","onPointerdownCapture"]))}}),kt=ht;const gt=We(()=>b([]));function bt(){const e=gt();return{add(t){const n=e.value[0];t!==n&&(n==null||n.pause()),e.value=te(e.value,t),e.value.unshift(t)},remove(t){var n;e.value=te(e.value,t),(n=e.value[0])==null||n.resume()}}}function te(e,t){const n=[...e],o=n.indexOf(t);return o!==-1&&n.splice(o,1),n}const z="focusScope.autoFocusOnMount",V="focusScope.autoFocusOnUnmount",ne={bubbles:!1,cancelable:!0};function Et(e,{select:t=!1}={}){const n=T();for(const o of e)if(C(o,{select:t}),T()!==n)return!0}function Ot(e){const t=ge(e),n=oe(t,e),o=oe(t.reverse(),e);return[n,o]}function ge(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const s=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||s?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function oe(e,t){for(const n of e)if(!wt(n,{upTo:t}))return n}function wt(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function St(e){return e instanceof HTMLInputElement&&"select"in e}function C(e,{select:t=!1}={}){if(e&&e.focus){const n=T();e.focus({preventScroll:!0}),e!==n&&St(e)&&t&&e.select()}}var Pt=B({__name:"FocusScope",props:{loop:{type:Boolean,required:!1,default:!1},trapped:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["mountAutoFocus","unmountAutoFocus"],setup(e,{emit:t}){const n=e,o=t,{currentRef:s,currentElement:r}=pe(),u=b(null),a=bt(),f=ue({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});F(l=>{if(!_)return;const i=r.value;if(!n.trapped)return;function c(g){if(f.paused||!i)return;const m=g.target;i.contains(m)?u.value=m:C(u.value,{select:!0})}function d(g){if(f.paused||!i)return;const m=g.relatedTarget;m!==null&&(i.contains(m)||C(u.value,{select:!0}))}function y(g){const m=u.value;if(m===null||!g.some(P=>P.removedNodes.length>0))return;i.contains(m)||C(i)}document.addEventListener("focusin",c),document.addEventListener("focusout",d);const h=new MutationObserver(y);i&&h.observe(i,{childList:!0,subtree:!0}),l(()=>{document.removeEventListener("focusin",c),document.removeEventListener("focusout",d),h.disconnect()})}),F(async l=>{const i=r.value;if(await I(),!i)return;a.add(f);const c=T();if(!i.contains(c)){const y=new CustomEvent(z,ne);i.addEventListener(z,h=>o("mountAutoFocus",h)),i.dispatchEvent(y),y.defaultPrevented||(Et(ge(i),{select:!0}),T()===c&&C(i))}l(()=>{i.removeEventListener(z,g=>o("mountAutoFocus",g));const y=new CustomEvent(V,ne),h=g=>{o("unmountAutoFocus",g)};i.addEventListener(V,h),i.dispatchEvent(y),i.setAttribute("data-focus-scope-unmounting",""),setTimeout(()=>{y.defaultPrevented||C(c??document.body,{select:!0}),i.removeEventListener(V,h),a.remove(f),i.removeAttribute("data-focus-scope-unmounting")},0)})});function v(l){if(!n.loop&&!n.trapped||f.paused)return;const i=l.key==="Tab"&&!l.altKey&&!l.ctrlKey&&!l.metaKey,c=T();if(i&&c){const d=l.currentTarget,[y,h]=Ot(d);y&&h?!l.shiftKey&&c===h?(l.preventDefault(),n.loop&&C(y,{select:!0})):l.shiftKey&&c===y&&(l.preventDefault(),n.loop&&C(h,{select:!0})):c===d&&l.preventDefault()}}return(l,i)=>(G(),J(D(ye),{ref_key:"currentRef",ref:s,tabindex:"-1","as-child":l.asChild,as:l.as,onKeydown:v},{default:ae(()=>[X(l.$slots,"default")]),_:3},8,["as-child","as"]))}}),Rt=Pt;function jt(e){return e?"open":"closed"}function $t(e){const t=T();for(const n of e)if(n===t||(n.focus(),T()!==t))return}var At=B({__name:"Teleport",props:{to:{type:null,required:!1,default:"body"},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const t=de();return(n,o)=>D(t)||n.forceMount?(G(),J(Re,{key:0,to:n.to,disabled:n.disabled,defer:n.defer},[X(n.$slots,"default")],8,["to","disabled","defer"])):je("v-if",!0)}}),Ut=At;export{kt as D,Rt as F,ye as P,dt as S,Ut as T,pe as a,xt as b,$e as c,jt as d,Ft as e,Nt as f,T as g,Bt as h,Mt as i,fe as j,_ as k,N as l,Tt as m,Ue as n,$t as o,Lt as p,le as q,_t as r,It as u};
|
|
4
|
-
//# sourceMappingURL=Teleport-DfE2iP8c.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/xterm-D6Mng-DB.js","assets/_commonjsHelpers-CqkleIqs.js","assets/addon-fit-CevVMrUA.js","assets/xterm-DYP7pi_n.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{d as F,J as B,M as H,c as m,a as t,f as a,e as E,w as M,_ as W,x as J,g as _,t as L,r as c,C as V,A as Y,B as j,O as S,l as G,P as R,o as p}from"./index-DVMQBHXF.js";import{_ as K}from"./ErrorNote.vue_vue_type_script_setup_true_lang-B3hfwyPR.js";import{_ as N}from"./SelectMenu.vue_vue_type_script_setup_true_lang-D8NGgBfa.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./Teleport-DfE2iP8c.js";const X={class:"stack"},Z={class:"banner warn"},ee={class:"row wrap",style:{gap:"var(--s3)","align-items":"end"}},ne={class:"field"},oe={class:"field"},te=["disabled"],le={key:2,class:"badge ok"},se={key:1,class:"hint"},ae={key:2,class:"hint"},ie=["data-state"],re=F({__name:"TerminalTab",setup(ue){const k=G(),C=V(()=>String(k.params.id)),U=["sh","bash","ash","zsh","fish"],x=c(null),f=c(""),u=c(""),y=c("sh"),n=c("idle"),h=c(""),v=c(null),w=R(null),I=R(null),b=R(null);let i=null;const D=V(()=>g.value.map(o=>({value:o.name,label:o.name,hint:o.service??void 0}))),g=V(()=>{var o;return((o=x.value)==null?void 0:o.containers.filter(e=>e.state==="running"))??[]});async function $(){var d;const o=await Y.get(`/api/deployments/${encodeURIComponent(C.value)}/runtime`);if(!o.ok){f.value=j(o,"list this deployment's containers");return}if(f.value="",x.value=o.body,u.value)return;const e=typeof k.query.container=="string"?k.query.container:"",l=g.value.find(T=>T.name===e);u.value=(l==null?void 0:l.name)??((d=g.value[0])==null?void 0:d.name)??""}$();async function q(){var P;if(n.value==="connecting"||n.value==="open")return;h.value="",n.value="connecting";const[{Terminal:o},{FitAddon:e}]=await Promise.all([S(()=>import("./xterm-D6Mng-DB.js").then(s=>s.x),__vite__mapDeps([0,1])),S(()=>import("./addon-fit-CevVMrUA.js").then(s=>s.a),__vite__mapDeps([2,1]))]);await S(()=>Promise.resolve({}),__vite__mapDeps([3])),(P=w.value)==null||P.dispose();const l=new o({convertEol:!0,fontSize:13,fontFamily:"var(--font-mono, ui-monospace, monospace)",cursorBlink:!0,theme:{background:"#0b0e14"}}),d=new e;l.loadAddon(d),v.value&&(v.value.innerHTML="",l.open(v.value),d.fit()),w.value=l,I.value=d,i==null||i.disconnect(),i=new ResizeObserver(()=>{try{d.fit()}catch{}}),v.value&&i.observe(v.value);const T=location.protocol==="https:"?"wss":"ws",z=new URLSearchParams({container:u.value,shell:y.value}),r=new WebSocket(`${T}://${location.host}/api/deployments/${encodeURIComponent(C.value)}/terminal?${z}`);r.binaryType="arraybuffer",b.value=r,r.onopen=()=>{n.value="open",l.focus()},r.onmessage=s=>l.write(typeof s.data=="string"?s.data:new Uint8Array(s.data)),r.onclose=s=>{n.value="closed",h.value=s.reason||(s.code===1006?"the connection dropped (the upgrade may have been refused)":`code ${s.code}`)},r.onerror=()=>{n.value==="connecting"&&(h.value="could not open the connection")},l.onData(s=>{r.readyState===WebSocket.OPEN&&r.send(s)})}function A(){var o;(o=b.value)==null||o.close(1e3,"closed by the operator")}function O(){var o,e;i==null||i.disconnect(),i=null,(o=b.value)==null||o.close(),b.value=null,(e=w.value)==null||e.dispose(),w.value=null}return B([u,y],()=>{(n.value==="open"||n.value==="connecting")&&A()}),B(C,()=>{O(),n.value="idle",$()}),H(O),(o,e)=>(p(),m("section",X,[t("div",Z,[e[3]||(e[3]=t("b",null,"No TTY.",-1)),e[4]||(e[4]=a(" The shell runs without a terminal device, so there is no prompt, no ",-1)),e[5]||(e[5]=t("code",null,"Ctrl-C",-1)),e[6]||(e[6]=a(", and no full-screen programs (",-1)),e[7]||(e[7]=t("code",null,"top",-1)),e[8]||(e[8]=a(", ",-1)),e[9]||(e[9]=t("code",null,"vim",-1)),e[10]||(e[10]=a("). Type a command and press Enter. ",-1)),E(W,{label:"why"},{default:M(()=>[...e[2]||(e[2]=[a(" A pseudo-terminal needs a wrapper (",-1),t("code",null,"script",-1),a(") whose flags differ across distributions, and it was never verified on a real host — so pstack ships the half it can stand behind. Everything an operator usually opens a shell for (",-1),t("code",null,"ls",-1),a(", ",-1),t("code",null,"cat",-1),a(", ",-1),t("code",null,"env",-1),a(", ",-1),t("code",null,"psql",-1),a(", a migration) works. ",-1)])]),_:1})]),f.value?(p(),J(K,{key:0,text:f.value,title:"Could not list this deployment's containers."},null,8,["text"])):_("",!0),t("div",ee,[t("label",ne,[e[11]||(e[11]=t("span",null,"Container",-1)),E(N,{modelValue:u.value,"onUpdate:modelValue":e[0]||(e[0]=l=>u.value=l),label:"Container",disabled:n.value==="open"||n.value==="connecting",options:D.value},null,8,["modelValue","disabled","options"])]),t("label",oe,[e[12]||(e[12]=t("span",null,"Shell",-1)),E(N,{modelValue:y.value,"onUpdate:modelValue":e[1]||(e[1]=l=>y.value=l),label:"Shell",disabled:n.value==="open"||n.value==="connecting",options:U.map(l=>({value:l,label:l}))},null,8,["modelValue","disabled","options"])]),n.value!=="open"?(p(),m("button",{key:0,class:"primary",disabled:!u.value||n.value==="connecting",onClick:q},L(n.value==="connecting"?"Connecting…":"Open shell"),9,te)):(p(),m("button",{key:1,onClick:A},"Close shell")),e[14]||(e[14]=t("span",{class:"grow"},null,-1)),n.value==="open"?(p(),m("span",le,[...e[13]||(e[13]=[t("span",{class:"dot pulse"},null,-1),a("connected",-1)])])):_("",!0)]),!g.value.length&&!f.value?(p(),m("p",se," Nothing is running for this deployment, so there is nothing to open a shell in. ")):_("",!0),n.value==="closed"&&h.value?(p(),m("p",ae,"Session ended — "+L(h.value)+".",1)):_("",!0),t("div",{ref_key:"host",ref:v,class:"terminal-host","data-state":n.value},null,8,ie),e[15]||(e[15]=t("p",{class:"hint"}," Every session is recorded — who, which container, when — and the record is written when the shell opens, so a session that dies with the process still leaves one. ",-1))]))}}),fe=Q(re,[["__scopeId","data-v-2d8bfa2e"]]);export{fe as default};
|
|
3
|
-
//# sourceMappingURL=TerminalTab-D5ncE4Cv.js.map
|