@burdenoff/microfe-vibecontrols 2026.519.2 → 2026.519.4
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/components/actions/ActionForm.js +138 -134
- package/dist/components/actions/ActionForm.js.map +1 -1
- package/dist/components/docs/DocsPageEditor.js +83 -69
- package/dist/components/docs/DocsPageEditor.js.map +1 -1
- package/dist/components/notes/NotesTabPanel.js +4 -5
- package/dist/components/notes/NotesTabPanel.js.map +1 -1
- package/dist/components/shared/EntityTagPicker.js +110 -81
- package/dist/components/shared/EntityTagPicker.js.map +1 -1
- package/dist/components/shared/TagFilter.js +4 -4
- package/dist/components/shared/index.js +1 -1
- package/dist/components/tunnels/TunnelCreateWizard.js +208 -187
- package/dist/components/tunnels/TunnelCreateWizard.js.map +1 -1
- package/dist/components/vibedeck/VibeDeckForm.js +41 -37
- package/dist/components/vibedeck/VibeDeckForm.js.map +1 -1
- package/dist/pages/ActionsPage.js +225 -217
- package/dist/pages/ActionsPage.js.map +1 -1
- package/dist/pages/AgentDetailsPage.js +13 -13
- package/dist/pages/AgentDetailsPage.js.map +1 -1
- package/dist/pages/CatalogDetailPage.js +248 -234
- package/dist/pages/CatalogDetailPage.js.map +1 -1
- package/dist/pages/CatalogDocsPage.js +119 -105
- package/dist/pages/CatalogDocsPage.js.map +1 -1
- package/dist/pages/ComponentDetailPage.js +257 -243
- package/dist/pages/ComponentDetailPage.js.map +1 -1
- package/dist/pages/ComponentDocsPage.js +119 -105
- package/dist/pages/ComponentDocsPage.js.map +1 -1
- package/dist/pages/SessionDetailsPage.js +4 -4
- package/dist/pages/TargetDetailsPage.js +136 -119
- package/dist/pages/TargetDetailsPage.js.map +1 -1
- package/dist/pages/TemplateDetailPage.js +47 -33
- package/dist/pages/TemplateDetailPage.js.map +1 -1
- package/dist/pages/VibeDeckPage.js +161 -153
- package/dist/pages/VibeDeckPage.js.map +1 -1
- package/dist/pages/VibeDetailsPage.js +407 -407
- package/dist/pages/VibeDetailsPage.js.map +1 -1
- package/dist/pages/VibeDocsPage.js +119 -105
- package/dist/pages/VibeDocsPage.js.map +1 -1
- package/dist/pages/tunnels/TunnelDetailsPage.js +95 -77
- package/dist/pages/tunnels/TunnelDetailsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,12 +6,14 @@ import { ErrorState as o } from "../shared/ErrorState.js";
|
|
|
6
6
|
import { QuotaExhaustedDialog as s } from "../shared/QuotaExhaustedDialog.js";
|
|
7
7
|
import { TunnelEnvironment as c, TunnelProtocol as l, TunnelProviderKey as u } from "../../generated/wspace-types.js";
|
|
8
8
|
import { getQuotaDialogContent as d, isQuotaExhaustedError as f } from "../../utils/quotaUtils.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
9
|
+
import { useTagEntity as p } from "../../hooks/useEntityTags.js";
|
|
10
|
+
import { EntityTagPicker as m } from "../shared/EntityTagPicker.js";
|
|
11
|
+
import { useCallback as h, useMemo as g, useState as _ } from "react";
|
|
12
|
+
import { useNavigate as v } from "react-router-dom";
|
|
13
|
+
import { AnimatePresence as y, motion as b } from "framer-motion";
|
|
14
|
+
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
13
15
|
//#region src/components/tunnels/TunnelCreateWizard.tsx
|
|
14
|
-
var
|
|
16
|
+
var w = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/, T = {
|
|
15
17
|
providerKey: u.Vibetunnels,
|
|
16
18
|
agentId: "",
|
|
17
19
|
name: "",
|
|
@@ -25,7 +27,7 @@ var S = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/, C = {
|
|
|
25
27
|
customDomain: "",
|
|
26
28
|
basicAuthUser: "",
|
|
27
29
|
basicAuthPassword: ""
|
|
28
|
-
},
|
|
30
|
+
}, E = [
|
|
29
31
|
{
|
|
30
32
|
id: "provider",
|
|
31
33
|
label: "Provider"
|
|
@@ -47,88 +49,97 @@ var S = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/, C = {
|
|
|
47
49
|
label: "Review"
|
|
48
50
|
}
|
|
49
51
|
];
|
|
50
|
-
function
|
|
51
|
-
let
|
|
52
|
-
|
|
52
|
+
function D() {
|
|
53
|
+
let D = e(), A = v(), [j, M] = _(0), [N, P] = _(T), [F, I] = _(null), [L, R] = _(!1), [z, B] = _([]), [V] = p(), { data: H, loading: U, error: W } = r(), { data: G } = n({ variables: { pagination: { limit: 100 } } }), [K, { loading: q }] = t(), J = h((e, t) => {
|
|
54
|
+
P((n) => ({
|
|
53
55
|
...n,
|
|
54
56
|
[e]: t
|
|
55
57
|
}));
|
|
56
|
-
}, []),
|
|
57
|
-
|
|
58
|
+
}, []), Y = h((e) => {
|
|
59
|
+
P((t) => ({
|
|
58
60
|
...t,
|
|
59
61
|
providerKey: e,
|
|
60
62
|
hostnameKind: e === u.Cloudflare ? "auto" : "managed"
|
|
61
63
|
}));
|
|
62
|
-
}, []),
|
|
64
|
+
}, []), X = g(() => [...H?.tunnelProviders ?? []].sort((e, t) => {
|
|
63
65
|
let n = (e) => e === "VIBETUNNELS" ? 0 : e === "CLOUDFLARE" ? 1 : 2, r = n(e.key) - n(t.key);
|
|
64
66
|
return r === 0 ? e.key.localeCompare(t.key) : r;
|
|
65
|
-
}), [
|
|
66
|
-
if (!
|
|
67
|
+
}), [H]), Z = g(() => X.find((e) => e.key === N.providerKey), [X, N.providerKey])?.capabilities, Q = N.providerKey === u.Cloudflare, $ = g(() => {
|
|
68
|
+
if (!Z) return [l.Http];
|
|
67
69
|
let e = [];
|
|
68
|
-
return
|
|
69
|
-
}, [
|
|
70
|
-
k,
|
|
70
|
+
return Z.supportsHttp && e.push(l.Http), Z.supportsHttps && e.push(l.Https), Z.supportsTcp && e.push(l.Tcp), e;
|
|
71
|
+
}, [Z]), ee = g(() => j === 0 ? !!(N.providerKey && N.agentId && N.name.trim()) : j === 1 ? N.localPort > 0 && N.localPort < 65536 : j === 2 ? N.hostnameKind === "managed" ? !!(N.subdomain && w.test(N.subdomain)) : N.hostnameKind === "custom" ? N.customDomain.trim().includes(".") : Q : !0, [
|
|
71
72
|
j,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
N,
|
|
74
|
+
Q
|
|
75
|
+
]), te = () => M((e) => Math.min(e + 1, E.length - 1)), ne = () => M((e) => Math.max(e - 1, 0)), re = async () => {
|
|
76
|
+
I(null);
|
|
75
77
|
try {
|
|
76
|
-
let e = await
|
|
77
|
-
agentId:
|
|
78
|
-
name:
|
|
79
|
-
description:
|
|
80
|
-
providerKey:
|
|
81
|
-
protocol:
|
|
82
|
-
localHost:
|
|
83
|
-
localPort:
|
|
84
|
-
environment:
|
|
85
|
-
basicAuthUser:
|
|
86
|
-
basicAuthPassword:
|
|
87
|
-
managedSubdomain:
|
|
78
|
+
let e = await K({ variables: { input: {
|
|
79
|
+
agentId: N.agentId,
|
|
80
|
+
name: N.name,
|
|
81
|
+
description: N.description || void 0,
|
|
82
|
+
providerKey: N.providerKey,
|
|
83
|
+
protocol: N.protocol,
|
|
84
|
+
localHost: N.localHost,
|
|
85
|
+
localPort: N.localPort,
|
|
86
|
+
environment: N.environment,
|
|
87
|
+
basicAuthUser: N.basicAuthUser || void 0,
|
|
88
|
+
basicAuthPassword: N.basicAuthPassword || void 0,
|
|
89
|
+
managedSubdomain: N.hostnameKind === "managed" ? N.subdomain : void 0
|
|
88
90
|
} } });
|
|
89
91
|
if (e.error) {
|
|
90
92
|
if (f(e.error)) {
|
|
91
|
-
|
|
93
|
+
R(!0);
|
|
92
94
|
return;
|
|
93
95
|
}
|
|
94
|
-
|
|
96
|
+
I(e.error.message);
|
|
95
97
|
return;
|
|
96
98
|
}
|
|
97
99
|
let t = e.data?.createTunnel.id;
|
|
98
|
-
|
|
100
|
+
if (t) {
|
|
101
|
+
if (z.length > 0) try {
|
|
102
|
+
await Promise.all(z.map((e) => V({ variables: { input: {
|
|
103
|
+
entityType: "VIBECONTROLS_TUNNEL",
|
|
104
|
+
entityId: t,
|
|
105
|
+
tagId: e
|
|
106
|
+
} } })));
|
|
107
|
+
} catch {}
|
|
108
|
+
A(`/vibecontrols/tunnels/${t}`);
|
|
109
|
+
}
|
|
99
110
|
} catch (e) {
|
|
100
111
|
if (f(e)) {
|
|
101
|
-
|
|
112
|
+
I(null), R(!0);
|
|
102
113
|
return;
|
|
103
114
|
}
|
|
104
|
-
|
|
115
|
+
I(e instanceof Error ? e.message : String(e));
|
|
105
116
|
}
|
|
106
117
|
};
|
|
107
|
-
return
|
|
118
|
+
return U ? /* @__PURE__ */ S(a, { message: "Loading providers" }) : W ? /* @__PURE__ */ S(o, {
|
|
108
119
|
title: "Failed to load providers",
|
|
109
|
-
message:
|
|
120
|
+
message: W.message,
|
|
110
121
|
onRetry: () => window.location.reload()
|
|
111
|
-
}) : /* @__PURE__ */
|
|
122
|
+
}) : /* @__PURE__ */ C("div", {
|
|
112
123
|
className: "p-6 max-w-3xl mx-auto",
|
|
113
124
|
children: [
|
|
114
|
-
/* @__PURE__ */
|
|
125
|
+
/* @__PURE__ */ S(i, {
|
|
115
126
|
breadcrumb: [{
|
|
116
127
|
label: "Tunnels",
|
|
117
128
|
path: "/vibecontrols/tunnels"
|
|
118
129
|
}, { label: "New tunnel" }],
|
|
119
|
-
title:
|
|
120
|
-
description:
|
|
130
|
+
title: D("vibecontrols.tunnels.createTitle", "Create tunnel"),
|
|
131
|
+
description: D("vibecontrols.tunnels.createDescription", "Expose a local service through a managed tunnel.")
|
|
121
132
|
}),
|
|
122
|
-
/* @__PURE__ */
|
|
133
|
+
/* @__PURE__ */ S("div", {
|
|
123
134
|
className: "mb-6 flex items-center gap-2",
|
|
124
|
-
children:
|
|
125
|
-
className: `flex-1 h-1.5 rounded-full ${t <=
|
|
135
|
+
children: E.map((e, t) => /* @__PURE__ */ S("div", {
|
|
136
|
+
className: `flex-1 h-1.5 rounded-full ${t <= j ? "bg-action-primary-bg" : "bg-bg-sunken"}`,
|
|
126
137
|
"aria-label": `Step ${t + 1}: ${e.label}`
|
|
127
138
|
}, e.id))
|
|
128
139
|
}),
|
|
129
|
-
/* @__PURE__ */
|
|
140
|
+
/* @__PURE__ */ S(y, {
|
|
130
141
|
mode: "wait",
|
|
131
|
-
children: /* @__PURE__ */
|
|
142
|
+
children: /* @__PURE__ */ C(b.div, {
|
|
132
143
|
initial: {
|
|
133
144
|
opacity: 0,
|
|
134
145
|
x: 6
|
|
@@ -144,105 +155,105 @@ function T() {
|
|
|
144
155
|
transition: { duration: .15 },
|
|
145
156
|
className: "rounded-lg border border-border-subtle bg-bg-surface p-6",
|
|
146
157
|
children: [
|
|
147
|
-
|
|
158
|
+
j === 0 && /* @__PURE__ */ C("div", {
|
|
148
159
|
className: "space-y-4",
|
|
149
160
|
children: [
|
|
150
|
-
/* @__PURE__ */
|
|
161
|
+
/* @__PURE__ */ S("h3", {
|
|
151
162
|
className: "text-sm font-semibold text-text-primary",
|
|
152
163
|
children: "Provider"
|
|
153
164
|
}),
|
|
154
|
-
/* @__PURE__ */
|
|
165
|
+
/* @__PURE__ */ S("div", {
|
|
155
166
|
className: "grid gap-3 sm:grid-cols-2",
|
|
156
|
-
children:
|
|
167
|
+
children: X.map((e) => /* @__PURE__ */ C("button", {
|
|
157
168
|
type: "button",
|
|
158
|
-
onClick: () =>
|
|
159
|
-
className: `rounded-lg border p-4 text-left transition-colors ${
|
|
169
|
+
onClick: () => Y(e.key),
|
|
170
|
+
className: `rounded-lg border p-4 text-left transition-colors ${N.providerKey === e.key ? "border-action-primary-bg bg-bg-sunken" : "border-border-subtle hover:border-border-default"}`,
|
|
160
171
|
children: [
|
|
161
|
-
/* @__PURE__ */
|
|
172
|
+
/* @__PURE__ */ S("div", {
|
|
162
173
|
className: "font-semibold text-text-primary",
|
|
163
174
|
children: e.displayName
|
|
164
175
|
}),
|
|
165
|
-
/* @__PURE__ */
|
|
176
|
+
/* @__PURE__ */ S("div", {
|
|
166
177
|
className: "text-xs text-text-muted mt-1",
|
|
167
178
|
children: e.key
|
|
168
179
|
}),
|
|
169
|
-
e.description && /* @__PURE__ */
|
|
180
|
+
e.description && /* @__PURE__ */ S("div", {
|
|
170
181
|
className: "text-xs text-text-secondary mt-2",
|
|
171
182
|
children: e.description
|
|
172
183
|
})
|
|
173
184
|
]
|
|
174
185
|
}, e.id))
|
|
175
186
|
}),
|
|
176
|
-
/* @__PURE__ */
|
|
187
|
+
/* @__PURE__ */ S(O, {
|
|
177
188
|
label: "Agent",
|
|
178
|
-
children: /* @__PURE__ */
|
|
179
|
-
value:
|
|
180
|
-
onChange: (e) =>
|
|
189
|
+
children: /* @__PURE__ */ C("select", {
|
|
190
|
+
value: N.agentId,
|
|
191
|
+
onChange: (e) => J("agentId", e.target.value),
|
|
181
192
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary",
|
|
182
|
-
children: [/* @__PURE__ */
|
|
193
|
+
children: [/* @__PURE__ */ S("option", {
|
|
183
194
|
value: "",
|
|
184
195
|
children: "Select agent"
|
|
185
|
-
}), (
|
|
196
|
+
}), (G?.vibecontrolsAgents ?? []).map((e) => /* @__PURE__ */ S("option", {
|
|
186
197
|
value: e.id,
|
|
187
198
|
children: e.name
|
|
188
199
|
}, e.id))]
|
|
189
200
|
})
|
|
190
201
|
}),
|
|
191
|
-
/* @__PURE__ */
|
|
202
|
+
/* @__PURE__ */ S(O, {
|
|
192
203
|
label: "Name",
|
|
193
|
-
children: /* @__PURE__ */
|
|
204
|
+
children: /* @__PURE__ */ S("input", {
|
|
194
205
|
type: "text",
|
|
195
|
-
value:
|
|
196
|
-
onChange: (e) =>
|
|
206
|
+
value: N.name,
|
|
207
|
+
onChange: (e) => J("name", e.target.value),
|
|
197
208
|
placeholder: "My dev tunnel",
|
|
198
209
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted"
|
|
199
210
|
})
|
|
200
211
|
}),
|
|
201
|
-
/* @__PURE__ */
|
|
212
|
+
/* @__PURE__ */ S(O, {
|
|
202
213
|
label: "Description (optional)",
|
|
203
|
-
children: /* @__PURE__ */
|
|
214
|
+
children: /* @__PURE__ */ S("input", {
|
|
204
215
|
type: "text",
|
|
205
|
-
value:
|
|
206
|
-
onChange: (e) =>
|
|
216
|
+
value: N.description,
|
|
217
|
+
onChange: (e) => J("description", e.target.value),
|
|
207
218
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted"
|
|
208
219
|
})
|
|
209
220
|
})
|
|
210
221
|
]
|
|
211
222
|
}),
|
|
212
|
-
|
|
223
|
+
j === 1 && /* @__PURE__ */ C("div", {
|
|
213
224
|
className: "space-y-4",
|
|
214
225
|
children: [
|
|
215
|
-
/* @__PURE__ */
|
|
226
|
+
/* @__PURE__ */ S("h3", {
|
|
216
227
|
className: "text-sm font-semibold text-text-primary",
|
|
217
228
|
children: "Protocol & target"
|
|
218
229
|
}),
|
|
219
|
-
/* @__PURE__ */
|
|
230
|
+
/* @__PURE__ */ S(O, {
|
|
220
231
|
label: "Protocol",
|
|
221
|
-
children: /* @__PURE__ */
|
|
232
|
+
children: /* @__PURE__ */ S("div", {
|
|
222
233
|
className: "flex gap-2",
|
|
223
|
-
children:
|
|
234
|
+
children: $.map((e) => /* @__PURE__ */ S("button", {
|
|
224
235
|
type: "button",
|
|
225
|
-
onClick: () =>
|
|
226
|
-
className: `rounded-md border px-4 py-2 text-sm ${
|
|
236
|
+
onClick: () => J("protocol", e),
|
|
237
|
+
className: `rounded-md border px-4 py-2 text-sm ${N.protocol === e ? "border-action-primary-bg bg-bg-sunken text-text-primary" : "border-border-subtle text-text-secondary hover:border-border-default"}`,
|
|
227
238
|
children: e
|
|
228
239
|
}, e))
|
|
229
240
|
})
|
|
230
241
|
}),
|
|
231
|
-
/* @__PURE__ */
|
|
242
|
+
/* @__PURE__ */ S(O, {
|
|
232
243
|
label: "Local host",
|
|
233
|
-
children: /* @__PURE__ */
|
|
244
|
+
children: /* @__PURE__ */ S("input", {
|
|
234
245
|
type: "text",
|
|
235
|
-
value:
|
|
236
|
-
onChange: (e) =>
|
|
246
|
+
value: N.localHost,
|
|
247
|
+
onChange: (e) => J("localHost", e.target.value),
|
|
237
248
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary"
|
|
238
249
|
})
|
|
239
250
|
}),
|
|
240
|
-
/* @__PURE__ */
|
|
251
|
+
/* @__PURE__ */ S(O, {
|
|
241
252
|
label: "Local port",
|
|
242
|
-
children: /* @__PURE__ */
|
|
253
|
+
children: /* @__PURE__ */ S("input", {
|
|
243
254
|
type: "number",
|
|
244
|
-
value:
|
|
245
|
-
onChange: (e) =>
|
|
255
|
+
value: N.localPort,
|
|
256
|
+
onChange: (e) => J("localPort", parseInt(e.target.value, 10) || 0),
|
|
246
257
|
min: 1,
|
|
247
258
|
max: 65535,
|
|
248
259
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary"
|
|
@@ -250,263 +261,273 @@ function T() {
|
|
|
250
261
|
})
|
|
251
262
|
]
|
|
252
263
|
}),
|
|
253
|
-
|
|
264
|
+
j === 2 && /* @__PURE__ */ C("div", {
|
|
254
265
|
className: "space-y-4",
|
|
255
266
|
children: [
|
|
256
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ S("h3", {
|
|
257
268
|
className: "text-sm font-semibold text-text-primary",
|
|
258
269
|
children: "Hostname"
|
|
259
270
|
}),
|
|
260
|
-
/* @__PURE__ */
|
|
271
|
+
/* @__PURE__ */ C("div", {
|
|
261
272
|
className: "flex gap-2",
|
|
262
273
|
children: [
|
|
263
|
-
/* @__PURE__ */
|
|
264
|
-
active:
|
|
265
|
-
onClick: () =>
|
|
266
|
-
disabled: !
|
|
274
|
+
/* @__PURE__ */ S(k, {
|
|
275
|
+
active: N.hostnameKind === "managed",
|
|
276
|
+
onClick: () => J("hostnameKind", "managed"),
|
|
277
|
+
disabled: !Z?.supportsManagedSubdomains,
|
|
267
278
|
label: "Managed subdomain",
|
|
268
279
|
hint: "*.vibetunnels.com"
|
|
269
280
|
}),
|
|
270
|
-
/* @__PURE__ */
|
|
271
|
-
active:
|
|
272
|
-
onClick: () =>
|
|
273
|
-
disabled: !
|
|
281
|
+
/* @__PURE__ */ S(k, {
|
|
282
|
+
active: N.hostnameKind === "custom",
|
|
283
|
+
onClick: () => J("hostnameKind", "custom"),
|
|
284
|
+
disabled: !Z?.supportsCustomDomains,
|
|
274
285
|
label: "Custom domain",
|
|
275
286
|
hint: "TXT verification"
|
|
276
287
|
}),
|
|
277
|
-
/* @__PURE__ */
|
|
278
|
-
active:
|
|
279
|
-
onClick: () =>
|
|
280
|
-
disabled: !
|
|
288
|
+
/* @__PURE__ */ S(k, {
|
|
289
|
+
active: N.hostnameKind === "auto",
|
|
290
|
+
onClick: () => J("hostnameKind", "auto"),
|
|
291
|
+
disabled: !Q,
|
|
281
292
|
label: "Auto",
|
|
282
293
|
hint: "provider default"
|
|
283
294
|
})
|
|
284
295
|
]
|
|
285
296
|
}),
|
|
286
|
-
|
|
287
|
-
/* @__PURE__ */
|
|
297
|
+
N.hostnameKind === "managed" && /* @__PURE__ */ C(x, { children: [
|
|
298
|
+
/* @__PURE__ */ S(O, {
|
|
288
299
|
label: "Environment",
|
|
289
|
-
children: /* @__PURE__ */
|
|
300
|
+
children: /* @__PURE__ */ C("div", {
|
|
290
301
|
className: "flex gap-2",
|
|
291
|
-
children: [/* @__PURE__ */
|
|
302
|
+
children: [/* @__PURE__ */ S("button", {
|
|
292
303
|
type: "button",
|
|
293
|
-
onClick: () =>
|
|
294
|
-
className: `rounded-md border px-4 py-2 text-sm ${
|
|
304
|
+
onClick: () => J("environment", c.Prod),
|
|
305
|
+
className: `rounded-md border px-4 py-2 text-sm ${N.environment === c.Prod ? "border-action-primary-bg bg-bg-sunken text-text-primary" : "border-border-subtle text-text-secondary hover:border-border-default"}`,
|
|
295
306
|
children: "Prod (vibetunnels.com)"
|
|
296
|
-
}), /* @__PURE__ */
|
|
307
|
+
}), /* @__PURE__ */ S("button", {
|
|
297
308
|
type: "button",
|
|
298
|
-
onClick: () =>
|
|
299
|
-
className: `rounded-md border px-4 py-2 text-sm ${
|
|
309
|
+
onClick: () => J("environment", c.Alpha),
|
|
310
|
+
className: `rounded-md border px-4 py-2 text-sm ${N.environment === c.Alpha ? "border-action-primary-bg bg-bg-sunken text-text-primary" : "border-border-subtle text-text-secondary hover:border-border-default"}`,
|
|
300
311
|
children: "Alpha"
|
|
301
312
|
})]
|
|
302
313
|
})
|
|
303
314
|
}),
|
|
304
|
-
/* @__PURE__ */
|
|
315
|
+
/* @__PURE__ */ S(O, {
|
|
305
316
|
label: "Subdomain label",
|
|
306
|
-
children: /* @__PURE__ */
|
|
317
|
+
children: /* @__PURE__ */ S("input", {
|
|
307
318
|
type: "text",
|
|
308
|
-
value:
|
|
309
|
-
onChange: (e) =>
|
|
319
|
+
value: N.subdomain,
|
|
320
|
+
onChange: (e) => J("subdomain", e.target.value.toLowerCase()),
|
|
310
321
|
placeholder: "demo",
|
|
311
322
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary"
|
|
312
323
|
})
|
|
313
324
|
}),
|
|
314
|
-
|
|
325
|
+
N.subdomain && /* @__PURE__ */ C("p", {
|
|
315
326
|
className: "text-xs text-text-secondary",
|
|
316
327
|
children: [
|
|
317
328
|
"Will be reserved as",
|
|
318
329
|
" ",
|
|
319
|
-
/* @__PURE__ */
|
|
330
|
+
/* @__PURE__ */ C("span", {
|
|
320
331
|
className: "font-mono text-text-primary",
|
|
321
|
-
children: [
|
|
332
|
+
children: [N.subdomain, N.environment === c.Alpha ? ".alpha.vibetunnels.com" : ".vibetunnels.com"]
|
|
322
333
|
})
|
|
323
334
|
]
|
|
324
335
|
})
|
|
325
336
|
] }),
|
|
326
|
-
|
|
337
|
+
N.hostnameKind === "custom" && /* @__PURE__ */ C(O, {
|
|
327
338
|
label: "Custom domain",
|
|
328
|
-
children: [/* @__PURE__ */
|
|
339
|
+
children: [/* @__PURE__ */ S("input", {
|
|
329
340
|
type: "text",
|
|
330
|
-
value:
|
|
331
|
-
onChange: (e) =>
|
|
341
|
+
value: N.customDomain,
|
|
342
|
+
onChange: (e) => J("customDomain", e.target.value.toLowerCase()),
|
|
332
343
|
placeholder: "preview.example.com",
|
|
333
344
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary"
|
|
334
|
-
}), /* @__PURE__ */
|
|
345
|
+
}), /* @__PURE__ */ S("p", {
|
|
335
346
|
className: "text-xs text-text-muted mt-2",
|
|
336
347
|
children: "Custom domains are registered on create but must be verified via a TXT record before they can be attached. You'll see the verification challenge in the Domains tab after creation."
|
|
337
348
|
})]
|
|
338
349
|
})
|
|
339
350
|
]
|
|
340
351
|
}),
|
|
341
|
-
|
|
352
|
+
j === 3 && /* @__PURE__ */ C("div", {
|
|
342
353
|
className: "space-y-4",
|
|
343
354
|
children: [
|
|
344
|
-
/* @__PURE__ */
|
|
355
|
+
/* @__PURE__ */ S("h3", {
|
|
345
356
|
className: "text-sm font-semibold text-text-primary",
|
|
346
357
|
children: "Policies (optional)"
|
|
347
358
|
}),
|
|
348
|
-
/* @__PURE__ */
|
|
359
|
+
/* @__PURE__ */ S(O, {
|
|
349
360
|
label: "Basic auth user",
|
|
350
|
-
children: /* @__PURE__ */
|
|
361
|
+
children: /* @__PURE__ */ S("input", {
|
|
351
362
|
type: "text",
|
|
352
|
-
value:
|
|
353
|
-
onChange: (e) =>
|
|
363
|
+
value: N.basicAuthUser,
|
|
364
|
+
onChange: (e) => J("basicAuthUser", e.target.value),
|
|
354
365
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary"
|
|
355
366
|
})
|
|
356
367
|
}),
|
|
357
|
-
/* @__PURE__ */
|
|
368
|
+
/* @__PURE__ */ S(O, {
|
|
358
369
|
label: "Basic auth password",
|
|
359
|
-
children: /* @__PURE__ */
|
|
370
|
+
children: /* @__PURE__ */ S("input", {
|
|
360
371
|
type: "password",
|
|
361
|
-
value:
|
|
362
|
-
onChange: (e) =>
|
|
372
|
+
value: N.basicAuthPassword,
|
|
373
|
+
onChange: (e) => J("basicAuthPassword", e.target.value),
|
|
363
374
|
className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary"
|
|
364
375
|
})
|
|
365
376
|
})
|
|
366
377
|
]
|
|
367
378
|
}),
|
|
368
|
-
|
|
379
|
+
j === 4 && /* @__PURE__ */ C("div", {
|
|
369
380
|
className: "space-y-3",
|
|
370
381
|
children: [
|
|
371
|
-
/* @__PURE__ */
|
|
382
|
+
/* @__PURE__ */ S("h3", {
|
|
372
383
|
className: "text-sm font-semibold text-text-primary",
|
|
373
|
-
children:
|
|
384
|
+
children: D("vibecontrols.tunnels.review", "Review")
|
|
374
385
|
}),
|
|
375
|
-
/* @__PURE__ */
|
|
386
|
+
/* @__PURE__ */ C("dl", {
|
|
376
387
|
className: "grid grid-cols-[auto_1fr] gap-x-4 gap-y-2 text-sm",
|
|
377
388
|
children: [
|
|
378
|
-
/* @__PURE__ */
|
|
389
|
+
/* @__PURE__ */ S("dt", {
|
|
379
390
|
className: "text-text-muted",
|
|
380
391
|
children: "Provider"
|
|
381
392
|
}),
|
|
382
|
-
/* @__PURE__ */
|
|
393
|
+
/* @__PURE__ */ S("dd", {
|
|
383
394
|
className: "text-text-primary",
|
|
384
|
-
children:
|
|
395
|
+
children: N.providerKey
|
|
385
396
|
}),
|
|
386
|
-
/* @__PURE__ */
|
|
397
|
+
/* @__PURE__ */ S("dt", {
|
|
387
398
|
className: "text-text-muted",
|
|
388
399
|
children: "Name"
|
|
389
400
|
}),
|
|
390
|
-
/* @__PURE__ */
|
|
401
|
+
/* @__PURE__ */ S("dd", {
|
|
391
402
|
className: "text-text-primary",
|
|
392
|
-
children:
|
|
403
|
+
children: N.name
|
|
393
404
|
}),
|
|
394
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ S("dt", {
|
|
395
406
|
className: "text-text-muted",
|
|
396
407
|
children: "Agent"
|
|
397
408
|
}),
|
|
398
|
-
/* @__PURE__ */
|
|
409
|
+
/* @__PURE__ */ S("dd", {
|
|
399
410
|
className: "text-text-primary font-mono",
|
|
400
|
-
children:
|
|
411
|
+
children: N.agentId
|
|
401
412
|
}),
|
|
402
|
-
/* @__PURE__ */
|
|
413
|
+
/* @__PURE__ */ S("dt", {
|
|
403
414
|
className: "text-text-muted",
|
|
404
415
|
children: "Protocol"
|
|
405
416
|
}),
|
|
406
|
-
/* @__PURE__ */
|
|
417
|
+
/* @__PURE__ */ S("dd", {
|
|
407
418
|
className: "text-text-primary",
|
|
408
|
-
children:
|
|
419
|
+
children: N.protocol
|
|
409
420
|
}),
|
|
410
|
-
/* @__PURE__ */
|
|
421
|
+
/* @__PURE__ */ S("dt", {
|
|
411
422
|
className: "text-text-muted",
|
|
412
423
|
children: "Target"
|
|
413
424
|
}),
|
|
414
|
-
/* @__PURE__ */
|
|
425
|
+
/* @__PURE__ */ C("dd", {
|
|
415
426
|
className: "text-text-primary font-mono",
|
|
416
427
|
children: [
|
|
417
|
-
|
|
428
|
+
N.localHost,
|
|
418
429
|
":",
|
|
419
|
-
|
|
430
|
+
N.localPort
|
|
420
431
|
]
|
|
421
432
|
}),
|
|
422
|
-
/* @__PURE__ */
|
|
433
|
+
/* @__PURE__ */ S("dt", {
|
|
423
434
|
className: "text-text-muted",
|
|
424
435
|
children: "Hostname"
|
|
425
436
|
}),
|
|
426
|
-
/* @__PURE__ */
|
|
437
|
+
/* @__PURE__ */ S("dd", {
|
|
427
438
|
className: "text-text-primary",
|
|
428
|
-
children:
|
|
439
|
+
children: N.hostnameKind === "managed" ? `${N.subdomain}.${N.environment === "ALPHA" ? "alpha." : ""}vibetunnels.com` : N.hostnameKind === "custom" ? N.customDomain : "auto-assigned"
|
|
429
440
|
}),
|
|
430
|
-
/* @__PURE__ */
|
|
441
|
+
/* @__PURE__ */ S("dt", {
|
|
431
442
|
className: "text-text-muted",
|
|
432
443
|
children: "Basic auth"
|
|
433
444
|
}),
|
|
434
|
-
/* @__PURE__ */
|
|
445
|
+
/* @__PURE__ */ S("dd", {
|
|
435
446
|
className: "text-text-primary",
|
|
436
|
-
children:
|
|
447
|
+
children: N.basicAuthUser ? "yes" : "no"
|
|
437
448
|
})
|
|
438
449
|
]
|
|
439
450
|
}),
|
|
440
|
-
|
|
451
|
+
/* @__PURE__ */ C("div", {
|
|
452
|
+
className: "border-t border-border-subtle pt-3",
|
|
453
|
+
children: [/* @__PURE__ */ S("h4", {
|
|
454
|
+
className: "mb-2 text-sm font-medium text-text-secondary",
|
|
455
|
+
children: D("vibecontrols.tunnels.tags", "Tags")
|
|
456
|
+
}), /* @__PURE__ */ S(m, {
|
|
457
|
+
entityType: "VIBECONTROLS_TUNNEL",
|
|
458
|
+
onDraftChange: B
|
|
459
|
+
})]
|
|
460
|
+
}),
|
|
461
|
+
F && /* @__PURE__ */ S("div", {
|
|
441
462
|
className: "rounded-md bg-status-error-bg p-3 text-sm text-status-error-fg",
|
|
442
|
-
children:
|
|
463
|
+
children: F
|
|
443
464
|
})
|
|
444
465
|
]
|
|
445
466
|
})
|
|
446
467
|
]
|
|
447
|
-
},
|
|
468
|
+
}, j)
|
|
448
469
|
}),
|
|
449
|
-
/* @__PURE__ */
|
|
470
|
+
/* @__PURE__ */ C("div", {
|
|
450
471
|
className: "flex items-center justify-between mt-4",
|
|
451
|
-
children: [/* @__PURE__ */
|
|
472
|
+
children: [/* @__PURE__ */ S("button", {
|
|
452
473
|
type: "button",
|
|
453
|
-
disabled:
|
|
454
|
-
onClick:
|
|
474
|
+
disabled: j === 0,
|
|
475
|
+
onClick: ne,
|
|
455
476
|
className: "rounded-md border border-border-default px-4 py-2 text-sm text-text-primary hover:bg-bg-elevated disabled:opacity-50",
|
|
456
|
-
children:
|
|
457
|
-
}),
|
|
477
|
+
children: D("vibecontrols.tunnels.back", "Back")
|
|
478
|
+
}), j < E.length - 1 ? /* @__PURE__ */ S("button", {
|
|
458
479
|
type: "button",
|
|
459
|
-
disabled: !
|
|
460
|
-
onClick:
|
|
480
|
+
disabled: !ee,
|
|
481
|
+
onClick: te,
|
|
461
482
|
className: "rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-fg hover:bg-action-primary-bg-hover disabled:opacity-50",
|
|
462
|
-
children:
|
|
463
|
-
}) : /* @__PURE__ */
|
|
483
|
+
children: D("vibecontrols.tunnels.next", "Next")
|
|
484
|
+
}) : /* @__PURE__ */ S("button", {
|
|
464
485
|
type: "button",
|
|
465
|
-
disabled:
|
|
466
|
-
onClick: () => void
|
|
486
|
+
disabled: q,
|
|
487
|
+
onClick: () => void re(),
|
|
467
488
|
className: "rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-fg hover:bg-action-primary-bg-hover disabled:opacity-50",
|
|
468
|
-
children:
|
|
489
|
+
children: q ? D("vibecontrols.tunnels.creating", "Creating...") : D("vibecontrols.tunnels.createTunnel", "Create tunnel")
|
|
469
490
|
})]
|
|
470
491
|
}),
|
|
471
|
-
/* @__PURE__ */
|
|
472
|
-
isOpen:
|
|
473
|
-
onClose: () =>
|
|
492
|
+
/* @__PURE__ */ S(s, {
|
|
493
|
+
isOpen: L,
|
|
494
|
+
onClose: () => R(!1),
|
|
474
495
|
onConfirm: () => {
|
|
475
|
-
|
|
496
|
+
R(!1), A("/billing");
|
|
476
497
|
},
|
|
477
498
|
...d("tunnel-subdomain")
|
|
478
499
|
})
|
|
479
500
|
]
|
|
480
501
|
});
|
|
481
502
|
}
|
|
482
|
-
function
|
|
483
|
-
return /* @__PURE__ */
|
|
503
|
+
function O({ label: e, children: t }) {
|
|
504
|
+
return /* @__PURE__ */ C("label", {
|
|
484
505
|
className: "block",
|
|
485
|
-
children: [/* @__PURE__ */
|
|
506
|
+
children: [/* @__PURE__ */ S("span", {
|
|
486
507
|
className: "text-xs font-medium text-text-secondary",
|
|
487
508
|
children: e
|
|
488
|
-
}), /* @__PURE__ */
|
|
509
|
+
}), /* @__PURE__ */ S("div", {
|
|
489
510
|
className: "mt-1",
|
|
490
511
|
children: t
|
|
491
512
|
})]
|
|
492
513
|
});
|
|
493
514
|
}
|
|
494
|
-
function
|
|
495
|
-
return /* @__PURE__ */
|
|
515
|
+
function k({ active: e, disabled: t, onClick: n, label: r, hint: i }) {
|
|
516
|
+
return /* @__PURE__ */ C("button", {
|
|
496
517
|
type: "button",
|
|
497
518
|
disabled: t,
|
|
498
519
|
onClick: n,
|
|
499
520
|
className: `flex-1 rounded-md border p-3 text-left transition-colors ${e ? "border-action-primary-bg bg-bg-sunken" : "border-border-subtle hover:border-border-default"} ${t ? "opacity-50 cursor-not-allowed" : ""}`,
|
|
500
|
-
children: [/* @__PURE__ */
|
|
521
|
+
children: [/* @__PURE__ */ S("div", {
|
|
501
522
|
className: "text-sm font-medium text-text-primary",
|
|
502
523
|
children: r
|
|
503
|
-
}), /* @__PURE__ */
|
|
524
|
+
}), /* @__PURE__ */ S("div", {
|
|
504
525
|
className: "text-xs text-text-muted mt-0.5",
|
|
505
526
|
children: i
|
|
506
527
|
})]
|
|
507
528
|
});
|
|
508
529
|
}
|
|
509
530
|
//#endregion
|
|
510
|
-
export {
|
|
531
|
+
export { D as TunnelCreateWizard };
|
|
511
532
|
|
|
512
533
|
//# sourceMappingURL=TunnelCreateWizard.js.map
|