@samyx/preview-stacks-ui 0.7.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +29 -0
  2. package/dist/assets/{ActionButton.vue_vue_type_script_setup_true_lang-DUQBVs8T.js → ActionButton.vue_vue_type_script_setup_true_lang-DxV7T6dV.js} +2 -2
  3. package/dist/assets/{ActionButton.vue_vue_type_script_setup_true_lang-DUQBVs8T.js.map → ActionButton.vue_vue_type_script_setup_true_lang-DxV7T6dV.js.map} +1 -1
  4. package/dist/assets/{AxesTab-DU92FPX2.js → AxesTab-DkF15gUV.js} +2 -2
  5. package/dist/assets/{AxesTab-DU92FPX2.js.map → AxesTab-DkF15gUV.js.map} +1 -1
  6. package/dist/assets/{ConfigTab-CR9C6wOR.js → ConfigTab-DIfAtFKC.js} +2 -2
  7. package/dist/assets/{ConfigTab-CR9C6wOR.js.map → ConfigTab-DIfAtFKC.js.map} +1 -1
  8. package/dist/assets/DangerTab-BOrQMzL3.js +2 -0
  9. package/dist/assets/{DangerTab-BUfuJ0MC.js.map → DangerTab-BOrQMzL3.js.map} +1 -1
  10. package/dist/assets/DashboardView-Cr6Nnj3O.js +2 -0
  11. package/dist/assets/DashboardView-Cr6Nnj3O.js.map +1 -0
  12. package/dist/assets/DeploymentDetailView-D23-qn3Z.js +2 -0
  13. package/dist/assets/DeploymentDetailView-D23-qn3Z.js.map +1 -0
  14. package/dist/assets/DeploymentsView-BMD-3aeS.js +2 -0
  15. package/dist/assets/DeploymentsView-BMD-3aeS.js.map +1 -0
  16. package/dist/assets/{ErrorNote.vue_vue_type_script_setup_true_lang-BmqVrFXt.js → ErrorNote.vue_vue_type_script_setup_true_lang-BlepSrj0.js} +2 -2
  17. package/dist/assets/{ErrorNote.vue_vue_type_script_setup_true_lang-BmqVrFXt.js.map → ErrorNote.vue_vue_type_script_setup_true_lang-BlepSrj0.js.map} +1 -1
  18. package/dist/assets/{JobDetailView-UehfrAMm.js → JobDetailView-ByaH2ylY.js} +2 -2
  19. package/dist/assets/{JobDetailView-UehfrAMm.js.map → JobDetailView-ByaH2ylY.js.map} +1 -1
  20. package/dist/assets/JobsView-h_BUWgIG.js +2 -0
  21. package/dist/assets/JobsView-h_BUWgIG.js.map +1 -0
  22. package/dist/assets/LoginView-BstzTLQc.js +5 -0
  23. package/dist/assets/LoginView-BstzTLQc.js.map +1 -0
  24. package/dist/assets/LoginView-CAyD1E0h.css +1 -0
  25. package/dist/assets/LogsTab-B_NVnnVo.js +4 -0
  26. package/dist/assets/LogsTab-B_NVnnVo.js.map +1 -0
  27. package/dist/assets/NotFoundView-BN-7ZNip.js +2 -0
  28. package/dist/assets/{NotFoundView-D4P7ej9y.js.map → NotFoundView-BN-7ZNip.js.map} +1 -1
  29. package/dist/assets/NotifiersView-CsAmv8wB.js +2 -0
  30. package/dist/assets/NotifiersView-CsAmv8wB.js.map +1 -0
  31. package/dist/assets/OverviewTab-BI1DZZxS.js +2 -0
  32. package/dist/assets/OverviewTab-BI1DZZxS.js.map +1 -0
  33. package/dist/assets/RegistriesView-CEE730kV.js +2 -0
  34. package/dist/assets/{RegistriesView-r-FHyu2l.js.map → RegistriesView-CEE730kV.js.map} +1 -1
  35. package/dist/assets/RelativeTime.vue_vue_type_script_setup_true_lang-lQaz4t05.js +2 -0
  36. package/dist/assets/RelativeTime.vue_vue_type_script_setup_true_lang-lQaz4t05.js.map +1 -0
  37. package/dist/assets/{RequiresTab-Ca5DAPqS.js → RequiresTab-B9YauFIz.js} +2 -2
  38. package/dist/assets/{RequiresTab-Ca5DAPqS.js.map → RequiresTab-B9YauFIz.js.map} +1 -1
  39. package/dist/assets/{RoutingView-6KgROiI7.js → RoutingView-DXCaRJek.js} +3 -3
  40. package/dist/assets/{RoutingView-6KgROiI7.js.map → RoutingView-DXCaRJek.js.map} +1 -1
  41. package/dist/assets/RuntimeTab-DvrQFekD.js +2 -0
  42. package/dist/assets/RuntimeTab-DvrQFekD.js.map +1 -0
  43. package/dist/assets/SettingsView-B7_zHjVP.js +2 -0
  44. package/dist/assets/SettingsView-B7_zHjVP.js.map +1 -0
  45. package/dist/assets/SkeletonList.vue_vue_type_script_setup_true_lang-SxitAmDb.js +2 -0
  46. package/dist/assets/{SkeletonList.vue_vue_type_script_setup_true_lang-CrqRcqcf.js.map → SkeletonList.vue_vue_type_script_setup_true_lang-SxitAmDb.js.map} +1 -1
  47. package/dist/assets/SpecDetailView-CViJ8WG_.js +2 -0
  48. package/dist/assets/{SpecDetailView-QKk7yCjK.js.map → SpecDetailView-CViJ8WG_.js.map} +1 -1
  49. package/dist/assets/SpecsView-BpG2OWMm.js +2 -0
  50. package/dist/assets/SpecsView-BpG2OWMm.js.map +1 -0
  51. package/dist/assets/StateBadge.vue_vue_type_script_setup_true_lang-CgDXVhMF.js +2 -0
  52. package/dist/assets/{StateBadge.vue_vue_type_script_setup_true_lang-DGyF-Maq.js.map → StateBadge.vue_vue_type_script_setup_true_lang-CgDXVhMF.js.map} +1 -1
  53. package/dist/assets/SubmitView-CwdWrsVS.js +45 -0
  54. package/dist/assets/SubmitView-CwdWrsVS.js.map +1 -0
  55. package/dist/assets/TerminalTab-Bqulz6Eb.css +1 -0
  56. package/dist/assets/TerminalTab-C6gRXura.js +3 -0
  57. package/dist/assets/TerminalTab-C6gRXura.js.map +1 -0
  58. package/dist/assets/{VarEditor.vue_vue_type_script_setup_true_lang-D3_cdVoO.js → VarEditor.vue_vue_type_script_setup_true_lang-CZcKBdbw.js} +2 -2
  59. package/dist/assets/{VarEditor.vue_vue_type_script_setup_true_lang-D3_cdVoO.js.map → VarEditor.vue_vue_type_script_setup_true_lang-CZcKBdbw.js.map} +1 -1
  60. package/dist/assets/_commonjsHelpers-CqkleIqs.js +2 -0
  61. package/dist/assets/_commonjsHelpers-CqkleIqs.js.map +1 -0
  62. package/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js +2 -0
  63. package/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js.map +1 -0
  64. package/dist/assets/addon-fit-CevVMrUA.js +2 -0
  65. package/dist/assets/addon-fit-CevVMrUA.js.map +1 -0
  66. package/dist/assets/index-Bygbts8t.js +129 -0
  67. package/dist/assets/index-Bygbts8t.js.map +1 -0
  68. package/dist/assets/index-DOv3m8-x.css +1 -0
  69. package/dist/assets/{useDeployment-B6jhAMSe.js → useDeployment-C4MdUG63.js} +2 -2
  70. package/dist/assets/{useDeployment-B6jhAMSe.js.map → useDeployment-C4MdUG63.js.map} +1 -1
  71. package/dist/assets/xterm-D6Mng-DB.js +10 -0
  72. package/dist/assets/xterm-D6Mng-DB.js.map +1 -0
  73. package/dist/assets/xterm-DYP7pi_n.css +32 -0
  74. package/dist/index.html +2 -2
  75. package/nginx.conf +17 -1
  76. package/package.json +3 -1
  77. package/dist/assets/DangerTab-BUfuJ0MC.js +0 -2
  78. package/dist/assets/DashboardView-DHYQn3Mi.js +0 -2
  79. package/dist/assets/DashboardView-DHYQn3Mi.js.map +0 -1
  80. package/dist/assets/DeploymentDetailView-DXvZu_pa.js +0 -2
  81. package/dist/assets/DeploymentDetailView-DXvZu_pa.js.map +0 -1
  82. package/dist/assets/DeploymentsView-C0Z2RIx1.js +0 -2
  83. package/dist/assets/DeploymentsView-C0Z2RIx1.js.map +0 -1
  84. package/dist/assets/JobsView-Dlv1T547.js +0 -2
  85. package/dist/assets/JobsView-Dlv1T547.js.map +0 -1
  86. package/dist/assets/LogsTab-CECPXx_O.js +0 -4
  87. package/dist/assets/LogsTab-CECPXx_O.js.map +0 -1
  88. package/dist/assets/NotFoundView-D4P7ej9y.js +0 -2
  89. package/dist/assets/OverviewTab-k0B5wCfH.js +0 -2
  90. package/dist/assets/OverviewTab-k0B5wCfH.js.map +0 -1
  91. package/dist/assets/RegistriesView-r-FHyu2l.js +0 -2
  92. package/dist/assets/RuntimeTab-z5tBtP5a.js +0 -2
  93. package/dist/assets/RuntimeTab-z5tBtP5a.js.map +0 -1
  94. package/dist/assets/SettingsView-DF18WFzT.js +0 -2
  95. package/dist/assets/SettingsView-DF18WFzT.js.map +0 -1
  96. package/dist/assets/SkeletonList.vue_vue_type_script_setup_true_lang-CrqRcqcf.js +0 -2
  97. package/dist/assets/SpecDetailView-QKk7yCjK.js +0 -2
  98. package/dist/assets/SpecsView-BIQkHWcI.js +0 -2
  99. package/dist/assets/SpecsView-BIQkHWcI.js.map +0 -1
  100. package/dist/assets/StateBadge.vue_vue_type_script_setup_true_lang-DGyF-Maq.js +0 -2
  101. package/dist/assets/SubmitView-Cv_QCAe0.js +0 -45
  102. package/dist/assets/SubmitView-Cv_QCAe0.js.map +0 -1
  103. package/dist/assets/index-Ca3L5StC.css +0 -1
  104. package/dist/assets/index-DXW03q8i.js +0 -124
  105. package/dist/assets/index-DXW03q8i.js.map +0 -1
@@ -0,0 +1 @@
1
+ :root,:root[data-theme=dark]{color-scheme:dark;--bg: #0e1116;--bg-grad: radial-gradient(1100px 620px at 12% -12%, rgba(64, 106, 168, .22) 0%, transparent 70%), radial-gradient(900px 520px at 108% 8%, rgba(96, 76, 168, .13) 0%, transparent 68%);--panel: #171b22;--panel-2: #1e232c;--sunk: #11141a;--line: #2b323d;--line-soft: #21262f;--fg: #eef2f8;--fg-dim: #a4afbe;--fg-mute: #78838f;--accent: #4a9dff;--accent-soft: rgba(74, 157, 255, .18);--ok: #35d17e;--ok-soft: rgba(53, 209, 126, .17);--fail: #ff6159;--fail-soft: rgba(255, 97, 89, .17);--leak: #ffa62b;--leak-soft: rgba(255, 166, 43, .18);--neutral: #95a2b3;--neutral-soft: rgba(149, 162, 179, .16);--hairline: inset 0 1px 0 rgba(255, 255, 255, .055);--hairline-strong: inset 0 1px 0 rgba(255, 255, 255, .09);--elev-1: 0 1px 2px rgba(5, 8, 14, .5);--elev-2: 0 1px 2px rgba(5, 8, 14, .45), 0 6px 16px -4px rgba(5, 8, 14, .5);--elev-3: 0 1px 2px rgba(5, 8, 14, .5), 0 12px 32px -8px rgba(5, 8, 14, .62);--elev-4: 0 2px 4px rgba(5, 8, 14, .5), 0 24px 64px -12px rgba(5, 8, 14, .72);--shadow: var(--elev-2);--hover: rgba(255, 255, 255, .04);--hover-strong: rgba(255, 255, 255, .07);--press: rgba(0, 0, 0, .18);--skel: linear-gradient(90deg, #1c212a 0%, #262d38 50%, #1c212a 100%)}@media(prefers-color-scheme:light){:root:not([data-theme=dark]){color-scheme:light;--bg: #f5f6f8;--bg-grad: radial-gradient(1100px 620px at 12% -12%, rgba(31, 111, 235, .07) 0%, transparent 70%), radial-gradient(900px 520px at 108% 8%, rgba(120, 80, 220, .045) 0%, transparent 68%);--panel: #ffffff;--panel-2: #f4f6f9;--sunk: #eef1f5;--line: #dfe3e9;--line-soft: #eaedf1;--fg: #14181e;--fg-dim: #57616f;--fg-mute: #7d8794;--accent: #1f6feb;--accent-soft: rgba(31, 111, 235, .1);--ok: #1a7f37;--ok-soft: rgba(26, 127, 55, .1);--fail: #cf222e;--fail-soft: rgba(207, 34, 46, .1);--leak: #9a6700;--leak-soft: rgba(154, 103, 0, .12);--neutral: #656d76;--neutral-soft: rgba(101, 109, 118, .1);--hairline: inset 0 1px 0 rgba(255, 255, 255, .9);--hairline-strong: inset 0 1px 0 rgba(255, 255, 255, 1);--elev-1: 0 1px 1px rgba(16, 24, 40, .05);--elev-2: 0 1px 2px rgba(16, 24, 40, .06), 0 4px 12px -2px rgba(16, 24, 40, .07);--elev-3: 0 1px 2px rgba(16, 24, 40, .07), 0 10px 28px -6px rgba(16, 24, 40, .1);--elev-4: 0 2px 4px rgba(16, 24, 40, .07), 0 22px 56px -10px rgba(16, 24, 40, .14);--shadow: var(--elev-2);--hover: rgba(16, 24, 40, .035);--hover-strong: rgba(16, 24, 40, .06);--press: rgba(16, 24, 40, .07);--skel: linear-gradient(90deg, #e9edf2 0%, #f6f8fa 50%, #e9edf2 100%)}}:root[data-theme=light]{color-scheme:light;--bg: #f5f6f8;--bg-grad: radial-gradient(1100px 620px at 12% -12%, rgba(31, 111, 235, .07) 0%, transparent 70%), radial-gradient(900px 520px at 108% 8%, rgba(120, 80, 220, .045) 0%, transparent 68%);--panel: #ffffff;--panel-2: #f4f6f9;--sunk: #eef1f5;--line: #dfe3e9;--line-soft: #eaedf1;--fg: #14181e;--fg-dim: #57616f;--fg-mute: #7d8794;--accent: #1f6feb;--accent-soft: rgba(31, 111, 235, .1);--ok: #1a7f37;--ok-soft: rgba(26, 127, 55, .1);--fail: #cf222e;--fail-soft: rgba(207, 34, 46, .1);--leak: #9a6700;--leak-soft: rgba(154, 103, 0, .12);--neutral: #656d76;--neutral-soft: rgba(101, 109, 118, .1);--hairline: inset 0 1px 0 rgba(255, 255, 255, .9);--hairline-strong: inset 0 1px 0 rgba(255, 255, 255, 1);--elev-1: 0 1px 1px rgba(16, 24, 40, .05);--elev-2: 0 1px 2px rgba(16, 24, 40, .06), 0 4px 12px -2px rgba(16, 24, 40, .07);--elev-3: 0 1px 2px rgba(16, 24, 40, .07), 0 10px 28px -6px rgba(16, 24, 40, .1);--elev-4: 0 2px 4px rgba(16, 24, 40, .07), 0 22px 56px -10px rgba(16, 24, 40, .14);--shadow: var(--elev-2);--hover: rgba(16, 24, 40, .035);--hover-strong: rgba(16, 24, 40, .06);--press: rgba(16, 24, 40, .07);--skel: linear-gradient(90deg, #e9edf2 0%, #f6f8fa 50%, #e9edf2 100%)}:root{--t-xs: 12px;--t-sm: 13.5px;--t-md: 15px;--t-lg: 17px;--t-xl: 22px;--t-2xl: 28px;--t-3xl: 36px;--track-display: -.022em;--track-title: -.014em;--track-body: -.003em;--track-caps: .075em;--lh-tight: 1.15;--lh-body: 1.55;--sans: -apple-system, BlinkMacSystemFont, "Inter var", Inter, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, "Liberation Mono", monospace;--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 24px;--s6: 32px;--s7: 48px;--r1: 9px;--r2: 13px;--r3: 16px;--r4: 20px;--rail: 216px;--gap-shell: 12px;--measure: 1240px;--ring: 0 0 0 2px var(--bg), 0 0 0 4px color-mix(in srgb, var(--accent) 62%, transparent);--dur-fast: .11s;--dur: .17s;--dur-slow: .28s;--ease: cubic-bezier(.2, .7, .3, 1);--ease-spring: cubic-bezier(.22, 1.4, .36, 1);--stagger-step: 26ms}@media(prefers-reduced-motion:reduce){:root:not([data-motion=full]){--dur-fast: 0ms;--dur: 0ms;--dur-slow: 0ms;--stagger-step: 0ms}:root:not([data-motion=full]) *,:root:not([data-motion=full]) *:before,:root:not([data-motion=full]) *:after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;scroll-behavior:auto!important}:root:not([data-motion=full])::view-transition-old(root),:root:not([data-motion=full])::view-transition-new(root){animation:none!important}}:root[data-motion=none]{--dur-fast: 0ms;--dur: 0ms;--dur-slow: 0ms;--stagger-step: 0ms}:root[data-motion=none] *,:root[data-motion=none] *:before,:root[data-motion=none] *:after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;scroll-behavior:auto!important}:root[data-motion=none]::view-transition-old(root),:root[data-motion=none]::view-transition-new(root){animation:none!important}*,*:before,*:after{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;background:var(--bg);background-image:var(--bg-grad);background-attachment:fixed;color:var(--fg);font:var(--t-md) / var(--lh-body) var(--sans);letter-spacing:var(--track-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-variant-numeric:tabular-nums;font-feature-settings:"cv05" 1;overflow-x:hidden}h1,h2,h3,p,ul,figure{margin:0}ul{padding:0;list-style:none}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}code,.mono{font-family:var(--mono);font-size:.92em}:focus-visible{outline:none;box-shadow:var(--ring);border-radius:var(--r1)}a:focus-visible{border-radius:4px}.skip{position:absolute;left:-9999px;top:0;z-index:100;padding:var(--s2) var(--s3);background:var(--panel);border:1px solid var(--line);border-radius:var(--r1)}.skip:focus{left:var(--s3);top:var(--s3)}.shell{display:grid;grid-template-columns:var(--rail) minmax(0,1fr);min-height:100%;padding:var(--gap-shell);gap:var(--gap-shell)}.shell.no-rail{grid-template-columns:minmax(0,1fr)}.rail{border:1px solid var(--line);border-radius:var(--r4);background:color-mix(in srgb,var(--panel) 82%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:var(--s4) var(--s3);position:sticky;top:var(--gap-shell);height:calc(100vh - var(--gap-shell) * 2);display:flex;flex-direction:column;gap:var(--s4);box-shadow:var(--shadow)}.brand{display:flex;align-items:center;gap:var(--s2);font-size:var(--t-lg);font-weight:650;letter-spacing:-.01em;color:var(--fg)}.brand:hover{text-decoration:none}.brand svg{color:var(--accent)}.rail nav{display:flex;flex-direction:column;gap:2px}.navlink{display:flex;align-items:center;gap:var(--s3);padding:var(--s2) var(--s3);border-radius:var(--r1);color:var(--fg-dim);font-weight:500;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.navlink:hover{background:var(--panel-2);color:var(--fg);text-decoration:none}.navlink.router-link-active{background:var(--accent-soft);color:var(--accent)}.navlink svg{flex:none}.navlink .count{margin-left:auto;font:600 var(--t-xs) / 1 var(--sans);font-variant-numeric:tabular-nums;color:var(--fg-mute);background:var(--panel-2);padding:3px 6px;border-radius:999px}.rail .foot{margin-top:auto;font-size:var(--t-xs);color:var(--fg-mute);display:grid;gap:var(--s1);word-break:break-all}.view{min-width:0;padding:var(--s3) var(--s4) var(--s7);max-width:1180px}@media(max-width:800px){.shell{grid-template-columns:minmax(0,1fr);padding:var(--gap-shell) var(--s2) 0}.rail{position:fixed;inset:auto var(--s2) calc(var(--s2) + env(safe-area-inset-bottom)) var(--s2);height:auto;flex-direction:row;align-items:center;gap:var(--s1);padding:var(--s2);background:color-mix(in srgb,var(--panel) 94%,transparent);z-index:20}.rail .brand,.rail .foot{display:none}.rail nav{flex-direction:row;flex:1;justify-content:space-around}.navlink{flex-direction:column;gap:2px;font-size:var(--t-xs);padding:var(--s1) var(--s2);min-width:56px;align-items:center}.navlink .count{display:none}.view{padding:var(--s4) var(--s4) calc(84px + env(safe-area-inset-bottom))}}.page-head{display:flex;align-items:flex-start;gap:var(--s3);flex-wrap:wrap;margin-bottom:var(--s5)}.page-head h1{font-size:var(--t-2xl);font-weight:640;letter-spacing:var(--track-display);line-height:var(--lh-tight)}.page-head .sub{color:var(--fg-dim);font-size:var(--t-sm);margin-top:2px}.grow{flex:1}h2.section{font-size:var(--t-xs);text-transform:uppercase;letter-spacing:var(--track-caps);color:var(--fg-dim);font-weight:620}h3{font-size:var(--t-md);font-weight:600}.dim{color:var(--fg-dim)}.mute{color:var(--fg-mute)}.nowrap{white-space:nowrap}.break{word-break:break-all}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r3);padding:var(--s4) var(--s4) var(--s5);margin-bottom:var(--s4);min-width:0;container-type:inline-size;box-shadow:var(--hairline),var(--elev-2)}.panel.flush{padding:0;overflow:hidden}.panel>.phead{display:flex;align-items:center;gap:var(--s2);flex-wrap:wrap;margin-bottom:var(--s3)}.panel.flush>.phead{padding:var(--s4) var(--s4) 0}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:var(--s4);align-items:start}.row{display:flex;gap:var(--s2);align-items:center;flex-wrap:wrap}button,.btn{font:530 var(--t-sm) / 1 var(--sans);letter-spacing:var(--track-body);color:var(--fg);background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r1);padding:var(--s2) var(--s3);min-height:32px;cursor:pointer;display:inline-flex;align-items:center;gap:var(--s2);position:relative;overflow:hidden;box-shadow:var(--hairline),var(--elev-1);transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}button:hover:not(:disabled),.btn:hover{border-color:color-mix(in srgb,var(--fg-mute) 60%,var(--line));background:color-mix(in srgb,var(--hover) 100%,var(--panel-2));text-decoration:none}button:active:not(:disabled){transform:translateY(1px);box-shadow:inset 0 2px 4px var(--press)}button:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}button.primary{background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 88%,#fff) 0%,var(--accent) 100%);border-color:color-mix(in srgb,var(--accent) 75%,#000);color:#fff;box-shadow:var(--hairline-strong),var(--elev-2),0 0 color-mix(in srgb,var(--accent) 40%,transparent)}button.primary:hover:not(:disabled){background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 78%,#fff),color-mix(in srgb,var(--accent) 94%,#fff));border-color:color-mix(in srgb,var(--accent) 75%,#000);box-shadow:var(--hairline-strong),var(--elev-2),0 0 18px -2px color-mix(in srgb,var(--accent) 45%,transparent)}button.danger{background:var(--fail-soft);border-color:color-mix(in srgb,var(--fail) 45%,transparent);color:var(--fail)}button.danger:hover:not(:disabled){background:color-mix(in srgb,var(--fail) 26%,transparent);border-color:color-mix(in srgb,var(--fail) 62%,transparent)}button.ghost{background:transparent;box-shadow:none}button.ghost:hover:not(:disabled){background:var(--hover)}button.sm{min-height:27px;padding:var(--s1) var(--s2);font-size:var(--t-xs)}button .progress{position:absolute;inset:auto 0 0 0;height:2px;background:currentColor;opacity:.65;animation:indeterminate 1.1s var(--ease) infinite;transform-origin:left}input[type=text],input[type=password],input[type=search],textarea,select{font:var(--t-sm) / 1.5 var(--sans);letter-spacing:var(--track-body);color:var(--fg);background:var(--sunk);border:1px solid var(--line);border-radius:var(--r1);padding:var(--s2) var(--s3);min-height:32px;width:100%;min-width:0;box-shadow:inset 0 1px 2px var(--press);transition:border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease)}input[type=text]:hover,input[type=password]:hover,input[type=search]:hover,textarea:hover,select:hover{border-color:color-mix(in srgb,var(--fg-mute) 55%,var(--line))}input[type=text]:focus,input[type=password]:focus,input[type=search]:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:inset 0 1px 2px var(--press),0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}textarea{font-family:var(--mono);font-size:var(--t-sm);line-height:1.55;resize:vertical;white-space:pre;overflow-wrap:normal;overflow-x:auto}input::placeholder,textarea::placeholder{color:var(--fg-mute)}label{font-size:var(--t-sm);color:var(--fg-dim)}.field{display:grid;gap:var(--s2);min-width:0}.field+.field,.field+.hint,.hint+.field{margin-top:var(--s4)}.check{display:inline-flex;align-items:center;gap:var(--s2);cursor:pointer;color:var(--fg)}.check input{width:auto;min-height:0;accent-color:var(--accent)}.kv{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto;gap:var(--s2);margin-bottom:var(--s2);align-items:center}.kv.head{font-size:var(--t-xs);color:var(--fg-mute);text-transform:uppercase;letter-spacing:.06em}@media(max-width:560px){.kv{grid-template-columns:minmax(0,1fr) auto}.kv.head{display:none}}.badge{display:inline-flex;align-items:center;gap:5px;font:500 var(--t-xs) / 1 var(--sans);padding:4px 8px;border-radius:999px;background:var(--neutral-soft);color:var(--fg-dim);border:1px solid transparent;white-space:nowrap}.badge.ok{background:var(--ok-soft);color:var(--ok)}.badge.failed,.badge.fail{background:var(--fail-soft);color:var(--fail)}.badge.leaked,.badge.warn{background:var(--leak-soft);color:var(--leak)}.badge.running,.badge.busy,.badge.info{background:var(--accent-soft);color:var(--accent)}.badge.unknown{background:var(--neutral-soft);color:var(--neutral)}.badge.shared{background:var(--leak-soft);color:var(--leak)}.badge.isolated{background:var(--accent-soft);color:var(--accent)}.badge.off{opacity:.38}.badge .dot{width:6px;height:6px;border-radius:50%;background:currentColor}.badge.running .dot,.dot.pulse{animation:pulse 1.6s var(--ease) infinite}.banner{border:1px solid var(--line);border-left-width:3px;border-radius:var(--r2);padding:var(--s3) var(--s4);margin:var(--s3) 0;background:var(--panel-2);font-size:var(--t-sm)}.banner b{color:var(--fg)}.banner p{margin-top:var(--s2);color:var(--fg-dim)}.banner.ok{border-left-color:var(--ok);background:var(--ok-soft)}.banner.failed{border-left-color:var(--fail);background:var(--fail-soft)}.banner.leaked,.banner.warn{border-left-color:var(--leak);background:var(--leak-soft)}.banner.info{border-left-color:var(--accent);background:var(--accent-soft)}.banner.plain{border-left-color:var(--fg-mute)}.hint{font-size:var(--t-sm);color:var(--fg-mute);margin-top:var(--s3)}.hint code,.banner code{background:var(--sunk);padding:1px 5px;border-radius:4px}table{width:100%;border-collapse:collapse;font-size:var(--t-sm)}th{text-align:left;font:620 var(--t-xs) / 1 var(--sans);text-transform:uppercase;letter-spacing:var(--track-caps);color:var(--fg-mute);padding:var(--s2) var(--s3);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1;background:var(--panel);white-space:nowrap}td{padding:var(--s2) var(--s3);border-bottom:1px solid var(--line-soft);vertical-align:middle}tbody tr{transition:background var(--dur-fast) var(--ease)}tbody tr:hover{background:var(--hover)}tbody tr:last-child td{border-bottom:none}td.name{font-weight:600;word-break:break-all}@media(max-width:640px){table.cards,table.cards tbody,table.cards tr,table.cards td{display:block;width:100%}table.cards thead{display:none}table.cards tr{border:1px solid var(--line);border-radius:var(--r2);padding:var(--s2) var(--s3);margin-bottom:var(--s2);background:var(--panel-2)}table.cards td{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s3);border:0;padding:var(--s1) 0;text-align:right}table.cards td:before{content:attr(data-label);font:600 var(--t-xs) / 1.6 var(--sans);text-transform:uppercase;letter-spacing:.06em;color:var(--fg-mute);text-align:left;flex:none}table.cards td[colspan]{text-align:left}table.cards td[colspan]:before{content:""}}.kvlist{display:grid;gap:1px;background:var(--line-soft);border-radius:var(--r2);overflow:hidden}.kvlist>li{display:flex;gap:var(--s3);padding:var(--s3);background:var(--panel);align-items:baseline;flex-wrap:wrap}.kvlist>li>.k{flex:none;width:128px;color:var(--fg-dim);font-size:var(--t-sm)}.kvlist>li>.v{flex:1;min-width:0;word-break:break-word}@media(max-width:480px){.kvlist>li>.k{width:100%}}pre.raw,pre.log{font-family:var(--mono);font-size:var(--t-sm);line-height:1.6;background:var(--sunk);border:1px solid var(--line);border-radius:var(--r2);padding:var(--s3);margin:var(--s3) 0 0;overflow:auto;white-space:pre}pre.raw{color:var(--fail);max-height:420px}pre.code{font-family:var(--mono);font-size:var(--t-sm);line-height:1.6;background:var(--sunk);border:1px solid var(--line);border-radius:var(--r2);padding:var(--s3);margin:0;max-height:520px;overflow:auto;white-space:pre;color:var(--fg-dim)}pre.log{max-height:460px;color:var(--fg-dim)}pre.log .t{color:var(--fg-mute)}pre.log .lv-error{color:var(--fail)}pre.log .lv-warn{color:var(--leak)}pre.log .lv-info{color:var(--fg)}pre.log mark{background:var(--leak-soft);color:var(--leak)}.masked{color:var(--fg-mute);letter-spacing:.12em}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s2)}@container (min-width: 680px){.stats{grid-template-columns:repeat(6,1fr)}}.stat{background:var(--panel-2);border:1px solid var(--line-soft);border-radius:var(--r2);padding:var(--s3);box-shadow:var(--hairline);min-width:0}.stat .v{font:600 var(--t-2xl) / 1.1 var(--sans);letter-spacing:var(--track-display);font-variant-numeric:tabular-nums}.stat[data-zero=true] .v{color:var(--fg-mute);font-weight:500}.stat .k{font-size:var(--t-xs);color:var(--fg-mute);text-transform:uppercase;letter-spacing:.04em;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat.unknown .v{color:var(--neutral)}.stat.busy .v{color:var(--accent)}.stat.leak .v{color:var(--leak)}.tabs{display:flex;gap:var(--s1);border-bottom:1px solid var(--line);margin-bottom:var(--s4);overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs a{padding:var(--s2) var(--s3);color:var(--fg-dim);font-size:var(--t-sm);font-weight:500;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;transition:color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}.tabs a:hover{color:var(--fg);text-decoration:none}.tabs a.router-link-active{color:var(--fg);border-bottom-color:var(--accent)}.steps{display:grid;gap:1px;background:var(--line-soft);border-radius:var(--r2);overflow:hidden}.step{display:grid;grid-template-columns:24px minmax(0,1fr);gap:var(--s3);padding:var(--s3);background:var(--panel);align-items:start}.step .mark{font:600 var(--t-lg) / 1.2 var(--sans);text-align:center}.step .who{font-weight:550;word-break:break-all}.step .msg{font-size:var(--t-sm);color:var(--fg-dim);word-break:break-word}.s-ok{color:var(--ok)}.s-failed{color:var(--fail)}.s-leaked{color:var(--leak)}.s-unverifiable{color:var(--neutral)}.skel{background:var(--skel);background-size:200% 100%;border-radius:var(--r1);height:14px;animation:shimmer 1.3s linear infinite}.skel+.skel{margin-top:var(--s2)}.skel.tall{height:44px}.skel.w60{width:60%}.skel.w40{width:40%}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}@keyframes indeterminate{0%{transform:scaleX(0)}50%{transform:scaleX(.7)}to{transform:scaleX(0);transform-origin:right}}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes land{0%{transform:scale(.985);opacity:.4}60%{transform:scale(1.004)}to{transform:none;opacity:1}}.stagger>*{animation:rise var(--dur) var(--ease) backwards;animation-delay:calc(var(--i, 0) * var(--stagger-step))}.land{animation:land var(--dur-slow) var(--ease)}.view-enter-active,.view-leave-active{transition:opacity var(--dur) var(--ease),transform var(--dur) var(--ease)}.view-enter-from{opacity:0;transform:translateY(6px)}.view-leave-to{opacity:0;transform:translateY(-4px)}.toasts{position:fixed;right:var(--s4);bottom:var(--s4);z-index:50;display:grid;gap:var(--s2);width:min(360px,calc(100vw - var(--s5)))}@media(max-width:800px){.toasts{bottom:calc(84px + env(safe-area-inset-bottom))}}.toast{display:flex;gap:var(--s3);align-items:flex-start;background:var(--panel);border:1px solid var(--line);border-radius:var(--r2);padding:var(--s3) var(--s3) var(--s3) var(--s2);box-shadow:var(--hairline),var(--elev-4);font-size:var(--t-sm);position:relative}.toast:before{content:"";flex:none;width:8px;height:8px;margin:6px 0 0 var(--s2);border-radius:50%;background:var(--neutral);box-shadow:0 0 0 3px var(--neutral-soft)}.toast.ok:before{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}.toast.error:before{background:var(--fail);box-shadow:0 0 0 3px var(--fail-soft)}.toast.warn:before{background:var(--leak);box-shadow:0 0 0 3px var(--leak-soft)}.toast.info:before{background:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.toast .x{margin-left:auto;background:none;border:0;min-height:0;padding:2px 6px;color:var(--fg-mute)}.toast-enter-active,.toast-leave-active{transition:opacity var(--dur) var(--ease),transform var(--dur) var(--ease)}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(12px)}.toast-move{transition:transform var(--dur) var(--ease)}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;z-index:60;display:grid;place-items:center;padding:var(--s4)}.sheet{background:var(--panel);border:1px solid var(--line);border-radius:var(--r3);box-shadow:var(--shadow);padding:var(--s5);width:min(460px,100%);max-height:80vh;overflow:auto}.sheet dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--s2) var(--s4);margin:var(--s4) 0 0;align-items:baseline}.sheet dt{text-align:right}.sheet dd{margin:0;color:var(--fg-dim);font-size:var(--t-sm)}kbd{font:500 var(--t-xs) / 1 var(--mono);background:var(--sunk);border:1px solid var(--line);border-bottom-width:2px;border-radius:5px;padding:4px 6px;color:var(--fg)}.fade-enter-active,.fade-leave-active{transition:opacity var(--dur) var(--ease)}.fade-enter-from,.fade-leave-to{opacity:0}.hint-wrap{position:relative;display:inline-flex;vertical-align:middle;margin-inline-start:var(--s1)}.hint-btn{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;min-height:0;padding:0;border:0;border-radius:999px;background:none;color:var(--fg-mute);cursor:pointer;transition:color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease)}.hint-btn:hover,.hint-btn.on{color:var(--accent);background:var(--accent-soft)}.hint-bub{position:absolute;z-index:40;width:max-content;max-width:min(300px,74vw);padding:var(--s2) var(--s3);background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r2);box-shadow:var(--shadow);color:var(--fg-dim);font:400 var(--t-sm) / 1.5 var(--sans);text-transform:none;letter-spacing:normal;white-space:normal;text-align:start;pointer-events:none}.hint-bub.below{top:calc(100% + 6px)}.hint-bub.above{bottom:calc(100% + 6px)}.hint-bub.to-start{inset-inline-start:-2px}.hint-bub.to-end{inset-inline-end:-2px}.hint-bub code{color:var(--fg)}.hint-enter-active,.hint-leave-active{transition:opacity var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.hint-enter-from,.hint-leave-to{opacity:0}.hint-bub.below.hint-enter-from,.hint-bub.below.hint-leave-to{transform:translateY(-3px)}.hint-bub.above.hint-enter-from,.hint-bub.above.hint-leave-to{transform:translateY(3px)}.palette-scrim{align-items:flex-start;padding-top:12vh}.palette{width:min(620px,calc(100vw - var(--s5)));background:var(--panel);border:1px solid var(--line);border-radius:var(--r3);box-shadow:var(--hairline-strong),var(--elev-4);overflow:hidden;display:flex;flex-direction:column;max-height:min(60vh,560px)}.palette-q{display:flex;align-items:center;gap:var(--s3);padding:var(--s3) var(--s4);border-bottom:1px solid var(--line-soft);color:var(--fg-mute)}.palette-q input{flex:1;background:none;border:none;box-shadow:none;padding:0;min-height:26px;font-size:var(--t-lg);letter-spacing:var(--track-title);color:var(--fg)}.palette-q input:focus{outline:none;border:none;box-shadow:none}.palette-list{overflow-y:auto;padding:var(--s2);min-height:0}.palette-group{font-size:var(--t-xs);text-transform:uppercase;letter-spacing:var(--track-caps);color:var(--fg-mute);padding:var(--s3) var(--s2) var(--s1)}.palette-row{display:flex;align-items:center;gap:var(--s3);width:100%;text-align:left;background:none;border:none;box-shadow:none;border-radius:var(--r1);padding:var(--s2) var(--s3);min-height:34px;color:var(--fg)}.palette-row[data-on=true]{background:var(--accent-soft);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 32%,transparent)}.palette-label{font-weight:520}.palette-hint{margin-left:auto;color:var(--fg-mute);font-size:var(--t-xs);font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:45%}.palette-empty{color:var(--fg-mute);padding:var(--s5) var(--s3);text-align:center;font-size:var(--t-sm)}.palette-foot{display:flex;gap:var(--s4);align-items:center;padding:var(--s2) var(--s4);border-top:1px solid var(--line-soft);background:var(--panel-2);color:var(--fg-mute);font-size:var(--t-xs)}kbd{font:500 11px / 1 var(--mono);color:var(--fg-dim);background:var(--sunk);border:1px solid var(--line);border-radius:5px;padding:3px 5px;margin-right:3px}.fade-enter-active .palette{animation:palette-in var(--dur-slow) var(--ease-spring)}@keyframes palette-in{0%{opacity:0;transform:translateY(-10px) scale(.98)}to{opacity:1;transform:none}}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--dur);animation-timing-function:var(--ease)}::view-transition-old(root){animation-name:vt-out}::view-transition-new(root){animation-name:vt-in}@keyframes vt-out{to{opacity:0}}@keyframes vt-in{0%{opacity:0;transform:translateY(4px)}}
@@ -1,2 +1,2 @@
1
- import{L as n,m as i,k as d,p as l,G as p,M as c}from"./index-DXW03q8i.js";import{w as u,r as y}from"./useVars-VN9gYdR6.js";const e=n({id:"",detail:null,error:"",loading:!1,vars:[]}),f=i(()=>p(e.vars)),k=i(()=>c(e.id)),b=i(()=>{var a;return((a=e.detail)==null?void 0:a.kind)==="shared"}),h=i(()=>{var a;return(((a=e.detail)==null?void 0:a.axes)??[]).filter(s=>!s.verifiable).map(s=>s.name)});async function t(){const a=e.id;e.loading=!0;const s=await d.get(`/api/deployments/${encodeURIComponent(a)}${f.value}`);if(e.id!==a)return;if(e.loading=!1,!s.ok){e.detail=null,e.error=l(s,`GET /api/deployments/${a}`);return}e.error="";const r=s.body;e.detail={id:r.id??a,kind:r.kind==="shared"?"shared":"isolated",createdAt:r.createdAt,updatedAt:r.updatedAt,stack:typeof r.stack=="string"?r.stack:"",busy:r.busy??null,compose:r.compose?{file:r.compose.file??"?",profiles:r.compose.profiles??[],overlays:r.compose.overlays??[]}:null,requires:Array.isArray(r.requires)?r.requires:[],axes:(Array.isArray(r.axes)?r.axes:[]).map(o=>({name:o.name,hooks:Array.isArray(o.hooks)?o.hooks:[],verifiable:o.verifiable??(Array.isArray(o.hooks)&&o.hooks.includes("assert_gone"))})),env:Array.isArray(r.env)?r.env:[]}}function g(a){e.id===a&&(e.detail||e.error)||(e.id=a,e.detail=null,e.error="",e.vars=y(a),t())}function m(){u(e.id,e.vars)}function x(){m(),t()}export{x as a,e as d,b as i,g as o,m as p,k as r,h as u,f as v};
2
- //# sourceMappingURL=useDeployment-B6jhAMSe.js.map
1
+ import{U as n,D as i,B as d,C as l,L as p,V as c}from"./index-Bygbts8t.js";import{w as u,r as y}from"./useVars-VN9gYdR6.js";const e=n({id:"",detail:null,error:"",loading:!1,vars:[]}),f=i(()=>p(e.vars)),k=i(()=>c(e.id)),b=i(()=>{var a;return((a=e.detail)==null?void 0:a.kind)==="shared"}),h=i(()=>{var a;return(((a=e.detail)==null?void 0:a.axes)??[]).filter(s=>!s.verifiable).map(s=>s.name)});async function t(){const a=e.id;e.loading=!0;const s=await d.get(`/api/deployments/${encodeURIComponent(a)}${f.value}`);if(e.id!==a)return;if(e.loading=!1,!s.ok){e.detail=null,e.error=l(s,`GET /api/deployments/${a}`);return}e.error="";const r=s.body;e.detail={id:r.id??a,kind:r.kind==="shared"?"shared":"isolated",createdAt:r.createdAt,updatedAt:r.updatedAt,stack:typeof r.stack=="string"?r.stack:"",busy:r.busy??null,compose:r.compose?{file:r.compose.file??"?",profiles:r.compose.profiles??[],overlays:r.compose.overlays??[]}:null,requires:Array.isArray(r.requires)?r.requires:[],axes:(Array.isArray(r.axes)?r.axes:[]).map(o=>({name:o.name,hooks:Array.isArray(o.hooks)?o.hooks:[],verifiable:o.verifiable??(Array.isArray(o.hooks)&&o.hooks.includes("assert_gone"))})),env:Array.isArray(r.env)?r.env:[]}}function g(a){e.id===a&&(e.detail||e.error)||(e.id=a,e.detail=null,e.error="",e.vars=y(a),t())}function m(){u(e.id,e.vars)}function x(){m(),t()}export{x as a,e as d,b as i,g as o,m as p,k as r,h as u,f as v};
2
+ //# sourceMappingURL=useDeployment-C4MdUG63.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDeployment-B6jhAMSe.js","sources":["../../src/composables/useDeployment.ts"],"sourcesContent":["/**\n * The deployment currently open in the detail view.\n *\n * A module singleton rather than provide/inject, because the six tabs are CHILD ROUTES: they are\n * siblings of each other and are mounted and unmounted independently, so passing the loaded\n * deployment down as a prop would mean re-fetching it on every tab change. Switching tabs must not\n * re-fetch or blank the panel — only opening a DIFFERENT deployment does.\n *\n * `vars` here are REQUEST-TIME variables, sent as `?query` on every route that resolves this\n * deployment. See `useVars.ts` for why they matter and what they can get wrong.\n */\n\nimport { computed, reactive } from 'vue';\nimport { api, problem, query } from '../api/client';\nimport type { Deployment, VarPair } from '../api/types';\nimport { readVars, writeVars } from './useVars';\nimport { rowFor } from './useControlPlane';\n\nexport const dep = reactive({\n id: '',\n detail: null as Deployment | null,\n /** The resolve failure, verbatim. It is a 400 that NAMES the missing variable. */\n error: '',\n loading: false,\n vars: [] as VarPair[],\n});\n\nexport const varsQuery = computed(() => query(dep.vars));\n\n/** The list row, which is the only place the server exposes stored `vars` and `specName` today. */\nexport const row = computed(() => rowFor(dep.id));\n\nexport const isShared = computed(() => dep.detail?.kind === 'shared');\n\nexport const unverifiableAxes = computed(() =>\n (dep.detail?.axes ?? []).filter((a) => !a.verifiable).map((a) => a.name),\n);\n\nexport async function loadDetail(): Promise<void> {\n const id = dep.id;\n dep.loading = true;\n const r = await api.get<Deployment>(`/api/deployments/${encodeURIComponent(id)}${varsQuery.value}`);\n // Navigated to another deployment while this was in flight: drop the answer rather than render\n // one deployment's spec under another's id.\n if (dep.id !== id) return;\n dep.loading = false;\n\n if (!r.ok) {\n dep.detail = null;\n dep.error = problem(r, `GET /api/deployments/${id}`);\n return;\n }\n dep.error = '';\n const b = r.body;\n dep.detail = {\n id: b.id ?? id,\n kind: b.kind === 'shared' ? 'shared' : 'isolated',\n createdAt: b.createdAt,\n updatedAt: b.updatedAt,\n stack: typeof b.stack === 'string' ? b.stack : '',\n busy: b.busy ?? null,\n compose: b.compose\n ? {\n file: b.compose.file ?? '?',\n profiles: b.compose.profiles ?? [],\n overlays: b.compose.overlays ?? [],\n }\n : null,\n requires: Array.isArray(b.requires) ? b.requires : [],\n axes: (Array.isArray(b.axes) ? b.axes : []).map((a) => ({\n name: a.name,\n hooks: Array.isArray(a.hooks) ? a.hooks : [],\n // Derive it if an older build omits the field. Defaulting to `false` would claim an axis is\n // unverifiable when it may define a perfectly good `assert_gone`.\n verifiable: a.verifiable ?? (Array.isArray(a.hooks) && a.hooks.includes('assert_gone')),\n })),\n env: Array.isArray(b.env) ? b.env : [],\n };\n}\n\n/** Point the singleton at a deployment. Resets everything a stale id could leak into the new one. */\nexport function openDeployment(id: string): void {\n if (dep.id === id && (dep.detail || dep.error)) return; // a tab change, not a navigation\n dep.id = id;\n dep.detail = null;\n dep.error = '';\n dep.vars = readVars(id);\n void loadDetail();\n}\n\nexport function persistVars(): void {\n writeVars(dep.id, dep.vars);\n}\n\nexport function applyVars(): void {\n persistVars();\n void loadDetail();\n}\n"],"names":["dep","reactive","varsQuery","computed","query","row","rowFor","isShared","_a","unverifiableAxes","a","loadDetail","id","r","api","problem","b","openDeployment","readVars","persistVars","writeVars","applyVars"],"mappings":"4HAkBO,MAAMA,EAAMC,EAAS,CAC1B,GAAI,GACJ,OAAQ,KAER,MAAO,GACP,QAAS,GACT,KAAM,CAAA,CACR,CAAC,EAEYC,EAAYC,EAAS,IAAMC,EAAMJ,EAAI,IAAI,CAAC,EAG1CK,EAAMF,EAAS,IAAMG,EAAON,EAAI,EAAE,CAAC,EAEnCO,EAAWJ,EAAS,IAAA,OAAM,QAAAK,EAAAR,EAAI,SAAJ,YAAAQ,EAAY,QAAS,SAAQ,EAEvDC,EAAmBN,EAAS,IAAA,OACtC,SAAAK,EAAAR,EAAI,SAAJ,YAAAQ,EAAY,OAAQ,CAAA,GAAI,OAAQE,GAAM,CAACA,EAAE,UAAU,EAAE,IAAKA,GAAMA,EAAE,IAAI,EACzE,EAEA,eAAsBC,GAA4B,CAChD,MAAMC,EAAKZ,EAAI,GACfA,EAAI,QAAU,GACd,MAAMa,EAAI,MAAMC,EAAI,IAAgB,oBAAoB,mBAAmBF,CAAE,CAAC,GAAGV,EAAU,KAAK,EAAE,EAGlG,GAAIF,EAAI,KAAOY,EAAI,OAGnB,GAFAZ,EAAI,QAAU,GAEV,CAACa,EAAE,GAAI,CACTb,EAAI,OAAS,KACbA,EAAI,MAAQe,EAAQF,EAAG,wBAAwBD,CAAE,EAAE,EACnD,MACF,CACAZ,EAAI,MAAQ,GACZ,MAAMgB,EAAIH,EAAE,KACZb,EAAI,OAAS,CACX,GAAIgB,EAAE,IAAMJ,EACZ,KAAMI,EAAE,OAAS,SAAW,SAAW,WACvC,UAAWA,EAAE,UACb,UAAWA,EAAE,UACb,MAAO,OAAOA,EAAE,OAAU,SAAWA,EAAE,MAAQ,GAC/C,KAAMA,EAAE,MAAQ,KAChB,QAASA,EAAE,QACP,CACE,KAAMA,EAAE,QAAQ,MAAQ,IACxB,SAAUA,EAAE,QAAQ,UAAY,CAAA,EAChC,SAAUA,EAAE,QAAQ,UAAY,CAAA,CAAC,EAEnC,KACJ,SAAU,MAAM,QAAQA,EAAE,QAAQ,EAAIA,EAAE,SAAW,CAAA,EACnD,MAAO,MAAM,QAAQA,EAAE,IAAI,EAAIA,EAAE,KAAO,CAAA,GAAI,IAAKN,IAAO,CACtD,KAAMA,EAAE,KACR,MAAO,MAAM,QAAQA,EAAE,KAAK,EAAIA,EAAE,MAAQ,CAAA,EAG1C,WAAYA,EAAE,aAAe,MAAM,QAAQA,EAAE,KAAK,GAAKA,EAAE,MAAM,SAAS,aAAa,EAAA,EACrF,EACF,IAAK,MAAM,QAAQM,EAAE,GAAG,EAAIA,EAAE,IAAM,CAAA,CAAC,CAEzC,CAGO,SAASC,EAAeL,EAAkB,CAC3CZ,EAAI,KAAOY,IAAOZ,EAAI,QAAUA,EAAI,SACxCA,EAAI,GAAKY,EACTZ,EAAI,OAAS,KACbA,EAAI,MAAQ,GACZA,EAAI,KAAOkB,EAASN,CAAE,EACjBD,EAAA,EACP,CAEO,SAASQ,GAAoB,CAClCC,EAAUpB,EAAI,GAAIA,EAAI,IAAI,CAC5B,CAEO,SAASqB,GAAkB,CAChCF,EAAA,EACKR,EAAA,CACP"}
1
+ {"version":3,"file":"useDeployment-C4MdUG63.js","sources":["../../src/composables/useDeployment.ts"],"sourcesContent":["/**\n * The deployment currently open in the detail view.\n *\n * A module singleton rather than provide/inject, because the six tabs are CHILD ROUTES: they are\n * siblings of each other and are mounted and unmounted independently, so passing the loaded\n * deployment down as a prop would mean re-fetching it on every tab change. Switching tabs must not\n * re-fetch or blank the panel — only opening a DIFFERENT deployment does.\n *\n * `vars` here are REQUEST-TIME variables, sent as `?query` on every route that resolves this\n * deployment. See `useVars.ts` for why they matter and what they can get wrong.\n */\n\nimport { computed, reactive } from 'vue';\nimport { api, problem, query } from '../api/client';\nimport type { Deployment, VarPair } from '../api/types';\nimport { readVars, writeVars } from './useVars';\nimport { rowFor } from './useControlPlane';\n\nexport const dep = reactive({\n id: '',\n detail: null as Deployment | null,\n /** The resolve failure, verbatim. It is a 400 that NAMES the missing variable. */\n error: '',\n loading: false,\n vars: [] as VarPair[],\n});\n\nexport const varsQuery = computed(() => query(dep.vars));\n\n/** The list row, which is the only place the server exposes stored `vars` and `specName` today. */\nexport const row = computed(() => rowFor(dep.id));\n\nexport const isShared = computed(() => dep.detail?.kind === 'shared');\n\nexport const unverifiableAxes = computed(() =>\n (dep.detail?.axes ?? []).filter((a) => !a.verifiable).map((a) => a.name),\n);\n\nexport async function loadDetail(): Promise<void> {\n const id = dep.id;\n dep.loading = true;\n const r = await api.get<Deployment>(`/api/deployments/${encodeURIComponent(id)}${varsQuery.value}`);\n // Navigated to another deployment while this was in flight: drop the answer rather than render\n // one deployment's spec under another's id.\n if (dep.id !== id) return;\n dep.loading = false;\n\n if (!r.ok) {\n dep.detail = null;\n dep.error = problem(r, `GET /api/deployments/${id}`);\n return;\n }\n dep.error = '';\n const b = r.body;\n dep.detail = {\n id: b.id ?? id,\n kind: b.kind === 'shared' ? 'shared' : 'isolated',\n createdAt: b.createdAt,\n updatedAt: b.updatedAt,\n stack: typeof b.stack === 'string' ? b.stack : '',\n busy: b.busy ?? null,\n compose: b.compose\n ? {\n file: b.compose.file ?? '?',\n profiles: b.compose.profiles ?? [],\n overlays: b.compose.overlays ?? [],\n }\n : null,\n requires: Array.isArray(b.requires) ? b.requires : [],\n axes: (Array.isArray(b.axes) ? b.axes : []).map((a) => ({\n name: a.name,\n hooks: Array.isArray(a.hooks) ? a.hooks : [],\n // Derive it if an older build omits the field. Defaulting to `false` would claim an axis is\n // unverifiable when it may define a perfectly good `assert_gone`.\n verifiable: a.verifiable ?? (Array.isArray(a.hooks) && a.hooks.includes('assert_gone')),\n })),\n env: Array.isArray(b.env) ? b.env : [],\n };\n}\n\n/** Point the singleton at a deployment. Resets everything a stale id could leak into the new one. */\nexport function openDeployment(id: string): void {\n if (dep.id === id && (dep.detail || dep.error)) return; // a tab change, not a navigation\n dep.id = id;\n dep.detail = null;\n dep.error = '';\n dep.vars = readVars(id);\n void loadDetail();\n}\n\nexport function persistVars(): void {\n writeVars(dep.id, dep.vars);\n}\n\nexport function applyVars(): void {\n persistVars();\n void loadDetail();\n}\n"],"names":["dep","reactive","varsQuery","computed","query","row","rowFor","isShared","_a","unverifiableAxes","a","loadDetail","id","r","api","problem","b","openDeployment","readVars","persistVars","writeVars","applyVars"],"mappings":"4HAkBO,MAAMA,EAAMC,EAAS,CAC1B,GAAI,GACJ,OAAQ,KAER,MAAO,GACP,QAAS,GACT,KAAM,CAAA,CACR,CAAC,EAEYC,EAAYC,EAAS,IAAMC,EAAMJ,EAAI,IAAI,CAAC,EAG1CK,EAAMF,EAAS,IAAMG,EAAON,EAAI,EAAE,CAAC,EAEnCO,EAAWJ,EAAS,IAAA,OAAM,QAAAK,EAAAR,EAAI,SAAJ,YAAAQ,EAAY,QAAS,SAAQ,EAEvDC,EAAmBN,EAAS,IAAA,OACtC,SAAAK,EAAAR,EAAI,SAAJ,YAAAQ,EAAY,OAAQ,CAAA,GAAI,OAAQE,GAAM,CAACA,EAAE,UAAU,EAAE,IAAKA,GAAMA,EAAE,IAAI,EACzE,EAEA,eAAsBC,GAA4B,CAChD,MAAMC,EAAKZ,EAAI,GACfA,EAAI,QAAU,GACd,MAAMa,EAAI,MAAMC,EAAI,IAAgB,oBAAoB,mBAAmBF,CAAE,CAAC,GAAGV,EAAU,KAAK,EAAE,EAGlG,GAAIF,EAAI,KAAOY,EAAI,OAGnB,GAFAZ,EAAI,QAAU,GAEV,CAACa,EAAE,GAAI,CACTb,EAAI,OAAS,KACbA,EAAI,MAAQe,EAAQF,EAAG,wBAAwBD,CAAE,EAAE,EACnD,MACF,CACAZ,EAAI,MAAQ,GACZ,MAAMgB,EAAIH,EAAE,KACZb,EAAI,OAAS,CACX,GAAIgB,EAAE,IAAMJ,EACZ,KAAMI,EAAE,OAAS,SAAW,SAAW,WACvC,UAAWA,EAAE,UACb,UAAWA,EAAE,UACb,MAAO,OAAOA,EAAE,OAAU,SAAWA,EAAE,MAAQ,GAC/C,KAAMA,EAAE,MAAQ,KAChB,QAASA,EAAE,QACP,CACE,KAAMA,EAAE,QAAQ,MAAQ,IACxB,SAAUA,EAAE,QAAQ,UAAY,CAAA,EAChC,SAAUA,EAAE,QAAQ,UAAY,CAAA,CAAC,EAEnC,KACJ,SAAU,MAAM,QAAQA,EAAE,QAAQ,EAAIA,EAAE,SAAW,CAAA,EACnD,MAAO,MAAM,QAAQA,EAAE,IAAI,EAAIA,EAAE,KAAO,CAAA,GAAI,IAAKN,IAAO,CACtD,KAAMA,EAAE,KACR,MAAO,MAAM,QAAQA,EAAE,KAAK,EAAIA,EAAE,MAAQ,CAAA,EAG1C,WAAYA,EAAE,aAAe,MAAM,QAAQA,EAAE,KAAK,GAAKA,EAAE,MAAM,SAAS,aAAa,EAAA,EACrF,EACF,IAAK,MAAM,QAAQM,EAAE,GAAG,EAAIA,EAAE,IAAM,CAAA,CAAC,CAEzC,CAGO,SAASC,EAAeL,EAAkB,CAC3CZ,EAAI,KAAOY,IAAOZ,EAAI,QAAUA,EAAI,SACxCA,EAAI,GAAKY,EACTZ,EAAI,OAAS,KACbA,EAAI,MAAQ,GACZA,EAAI,KAAOkB,EAASN,CAAE,EACjBD,EAAA,EACP,CAEO,SAASQ,GAAoB,CAClCC,EAAUpB,EAAI,GAAIA,EAAI,IAAI,CAC5B,CAEO,SAASqB,GAAkB,CAChCF,EAAA,EACKR,EAAA,CACP"}