@daydreamui/netlify 0.0.0-stage → 0.3.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/bridge.js +797 -0
- package/dist/index.js +1270 -0
- package/icon.svg +12 -0
- package/manifest.json +24 -0
- package/package.json +15 -4
- package/README.md +0 -3
package/dist/index.js
ADDED
|
@@ -0,0 +1,1270 @@
|
|
|
1
|
+
import { claimElement, className, createComponent, delegateEvents, effect, insert, memo, setAttribute, template } from "@solidjs/web";
|
|
2
|
+
import { For, Show, createSignal, onCleanup, untrack } from "solid-js";
|
|
3
|
+
var _tmpl$$3 = template(`<input readonly>`);
|
|
4
|
+
var _tmpl$2$3 = template(`<span><button type=button aria-live=polite>`);
|
|
5
|
+
function CopyUrl(props) {
|
|
6
|
+
const [copied, setCopied] = createSignal(false);
|
|
7
|
+
const [manual, setManual] = createSignal(false);
|
|
8
|
+
let timer;
|
|
9
|
+
let gone = false;
|
|
10
|
+
let run = 0;
|
|
11
|
+
onCleanup(() => {
|
|
12
|
+
gone = true;
|
|
13
|
+
clearTimeout(timer);
|
|
14
|
+
});
|
|
15
|
+
async function copy() {
|
|
16
|
+
const attempt = ++run;
|
|
17
|
+
try {
|
|
18
|
+
await navigator.clipboard.writeText(props.url);
|
|
19
|
+
if (gone || attempt !== run) return;
|
|
20
|
+
setCopied(true);
|
|
21
|
+
setManual(false);
|
|
22
|
+
clearTimeout(timer);
|
|
23
|
+
timer = setTimeout(() => setCopied(false), 2e3);
|
|
24
|
+
} catch {
|
|
25
|
+
if (!gone && attempt === run) setManual(true);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
var _el$ = _tmpl$2$3();
|
|
29
|
+
var _el$2 = _el$.firstChild;
|
|
30
|
+
_el$2._$$click = () => void copy();
|
|
31
|
+
insert(_el$2, (() => {
|
|
32
|
+
var _c$ = memo(() => {
|
|
33
|
+
return !!copied();
|
|
34
|
+
});
|
|
35
|
+
return () => {
|
|
36
|
+
return _c$() ? "Copied!" : props.label;
|
|
37
|
+
};
|
|
38
|
+
})());
|
|
39
|
+
insert(_el$, createComponent(Show, {
|
|
40
|
+
get when() {
|
|
41
|
+
return manual();
|
|
42
|
+
},
|
|
43
|
+
get children() {
|
|
44
|
+
var _el$3 = _tmpl$$3();
|
|
45
|
+
_el$3._$$click = (event) => event.currentTarget.select();
|
|
46
|
+
_el$3.addEventListener("focus", (event) => event.currentTarget.select());
|
|
47
|
+
effect(() => {
|
|
48
|
+
return {
|
|
49
|
+
e: `${props.label} manually`,
|
|
50
|
+
t: props.url
|
|
51
|
+
};
|
|
52
|
+
}, ({ e, t }, _p$) => {
|
|
53
|
+
e !== _p$?.e && setAttribute(_el$3, "aria-label", e);
|
|
54
|
+
_el$3.value = t ?? "";
|
|
55
|
+
});
|
|
56
|
+
return _el$3;
|
|
57
|
+
}
|
|
58
|
+
}), null);
|
|
59
|
+
effect(() => {
|
|
60
|
+
return {
|
|
61
|
+
e: `${props.prefix}-copy`,
|
|
62
|
+
t: `${props.prefix}-quiet`,
|
|
63
|
+
a: props.url
|
|
64
|
+
};
|
|
65
|
+
}, ({ e, t, a }, _p$) => {
|
|
66
|
+
className(_el$, e, _p$?.e);
|
|
67
|
+
className(_el$2, t, _p$?.t);
|
|
68
|
+
a !== _p$?.a && setAttribute(_el$2, "title", a);
|
|
69
|
+
});
|
|
70
|
+
return _el$;
|
|
71
|
+
}
|
|
72
|
+
delegateEvents(["click"]);
|
|
73
|
+
var messageOf = (error) => error instanceof Error ? error.message : String(error);
|
|
74
|
+
var isHttps = (value) => {
|
|
75
|
+
if (typeof value !== "string") return false;
|
|
76
|
+
try {
|
|
77
|
+
return new URL(value).protocol === "https:";
|
|
78
|
+
} catch {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
var hasSeparateCanvas = (site) => isHttps(site.url) && isHttps(site.canvasUrl) && new URL(site.url).href !== new URL(site.canvasUrl).href;
|
|
83
|
+
function isSite(value) {
|
|
84
|
+
if (typeof value !== "object" || value === null) return false;
|
|
85
|
+
const site = value;
|
|
86
|
+
return typeof site["siteId"] === "string" && site["siteId"] !== "" && typeof site["siteName"] === "string" && typeof site["url"] === "string" && typeof site["canvasUrl"] === "string";
|
|
87
|
+
}
|
|
88
|
+
function isStatus(value) {
|
|
89
|
+
if (typeof value !== "object" || value === null) return false;
|
|
90
|
+
const status = value;
|
|
91
|
+
return typeof status["running"] === "boolean" && typeof status["checked"] === "boolean" && (status["site"] === null || isSite(status["site"])) && (status["error"] === null || typeof status["error"] === "string");
|
|
92
|
+
}
|
|
93
|
+
var _tmpl$$2 = template(`<p>Account · `);
|
|
94
|
+
var _tmpl$2$2 = template(`<label>Project name<input type=text pattern=[a-z0-9]+(-[a-z0-9]+)* maxlength=50 required>`);
|
|
95
|
+
var _tmpl$3$2 = template(`<span>Lowercase letters, numbers, dashes.`);
|
|
96
|
+
var _tmpl$4$2 = template(`<option disabled> (unavailable)`);
|
|
97
|
+
var _tmpl$5$2 = template(`<label>Team<select required><option value disabled>Choose a team</option><!><!>`);
|
|
98
|
+
var _tmpl$6$1 = template(`<p role=status>Loading projects…`);
|
|
99
|
+
var _tmpl$7$1 = template(`<p role=alert>`);
|
|
100
|
+
var _tmpl$8$1 = template(`<button type=button>Try again`);
|
|
101
|
+
var _tmpl$9$1 = template(`<button type=button>Load more`);
|
|
102
|
+
var _tmpl$10$1 = template(`<form><h2>Netlify project</h2><p>Existing deploys stay online.</p><fieldset><legend>Destination</legend><label><input type=radio>New project</label><label><input type=radio>Existing project</label></fieldset><!><!><!><div><button type=button>Cancel</button><button>Save`);
|
|
103
|
+
var _tmpl$11$1 = template(`<option>`);
|
|
104
|
+
var _tmpl$12$1 = template(`<label>Project<select required><option value disabled>Choose a project</option><!><!>`);
|
|
105
|
+
function Destination(props) {
|
|
106
|
+
const p = untrack(() => props.prefix);
|
|
107
|
+
const initial = untrack(() => props.status);
|
|
108
|
+
const [kind, setKind] = createSignal(initial.site ? "existing" : "new");
|
|
109
|
+
const [name, setName] = createSignal(initial.settings.newSite?.name ?? initial.projectName);
|
|
110
|
+
const [team, setTeam] = createSignal(initial.settings.newSite?.team ?? "");
|
|
111
|
+
const [site, setSite] = createSignal(initial.site?.siteId ?? "");
|
|
112
|
+
const [list, setList] = createSignal({
|
|
113
|
+
teams: [],
|
|
114
|
+
sites: []
|
|
115
|
+
});
|
|
116
|
+
const [loading, setLoading] = createSignal(true);
|
|
117
|
+
const [error, setError] = createSignal(null);
|
|
118
|
+
const [more, setMore] = createSignal(false);
|
|
119
|
+
let page = 1;
|
|
120
|
+
let gone = false;
|
|
121
|
+
onCleanup(() => {
|
|
122
|
+
gone = true;
|
|
123
|
+
});
|
|
124
|
+
async function load() {
|
|
125
|
+
try {
|
|
126
|
+
const answer = await props.dd.hostPart.call("destinations", { page });
|
|
127
|
+
if (gone) return;
|
|
128
|
+
if (!answer || !Array.isArray(answer.teams) || !Array.isArray(answer.sites) || typeof answer.more !== "boolean" || !answer.sites.every(isSite) || !answer.teams.every((t) => typeof t.slug === "string" && typeof t.name === "string")) throw new Error("Could not load Netlify projects.");
|
|
129
|
+
setList((held) => ({
|
|
130
|
+
teams: page === 1 ? answer.teams : held.teams,
|
|
131
|
+
sites: [...held.sites, ...answer.sites]
|
|
132
|
+
}));
|
|
133
|
+
if (!team()) setTeam(answer.teams[0]?.slug ?? "");
|
|
134
|
+
if (!site()) setSite(answer.sites[0]?.siteId ?? "");
|
|
135
|
+
setMore(answer.more);
|
|
136
|
+
setError(null);
|
|
137
|
+
page += 1;
|
|
138
|
+
} catch (failure) {
|
|
139
|
+
if (!gone) setError(messageOf(failure));
|
|
140
|
+
} finally {
|
|
141
|
+
if (!gone) setLoading(false);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
untrack(() => void load());
|
|
145
|
+
const disabled = () => props.busy() || loading();
|
|
146
|
+
var _el$ = _tmpl$10$1();
|
|
147
|
+
var _el$2 = _el$.firstChild;
|
|
148
|
+
var _el$3 = _el$2.nextSibling;
|
|
149
|
+
var _el$6 = _el$3.nextSibling;
|
|
150
|
+
var _el$7 = _el$6.firstChild;
|
|
151
|
+
var _el$8 = _el$7.nextSibling;
|
|
152
|
+
var _el$9 = _el$8.firstChild;
|
|
153
|
+
var _el$11 = _el$8.nextSibling.firstChild;
|
|
154
|
+
var _el$24 = _el$6.nextSibling;
|
|
155
|
+
var _el$26 = _el$24.nextSibling;
|
|
156
|
+
var _el$29 = _el$26.nextSibling;
|
|
157
|
+
var _el$31 = _el$29.nextSibling;
|
|
158
|
+
var _el$32 = _el$31.firstChild;
|
|
159
|
+
var _el$33 = _el$32.nextSibling;
|
|
160
|
+
_el$.addEventListener("submit", (event) => {
|
|
161
|
+
event.preventDefault();
|
|
162
|
+
props.save({
|
|
163
|
+
...props.status.settings,
|
|
164
|
+
newSite: kind() === "new" ? {
|
|
165
|
+
name: name(),
|
|
166
|
+
team: team()
|
|
167
|
+
} : null
|
|
168
|
+
}, kind() === "new" ? null : site());
|
|
169
|
+
});
|
|
170
|
+
insert(_el$, createComponent(Show, {
|
|
171
|
+
get when() {
|
|
172
|
+
return props.accountName;
|
|
173
|
+
},
|
|
174
|
+
get children() {
|
|
175
|
+
var _el$4 = _tmpl$$2();
|
|
176
|
+
_el$4.firstChild;
|
|
177
|
+
insert(_el$4, () => {
|
|
178
|
+
return props.accountName;
|
|
179
|
+
}, null);
|
|
180
|
+
effect(() => `${p}-small ${p}-intro`, (_v$, _$p) => {
|
|
181
|
+
className(_el$4, _v$, _$p);
|
|
182
|
+
});
|
|
183
|
+
return _el$4;
|
|
184
|
+
}
|
|
185
|
+
}), _el$6);
|
|
186
|
+
_el$9.addEventListener("change", () => setKind("new"));
|
|
187
|
+
setAttribute(_el$9, "name", `${p}-destination`);
|
|
188
|
+
_el$11.addEventListener("change", () => setKind("existing"));
|
|
189
|
+
setAttribute(_el$11, "name", `${p}-destination`);
|
|
190
|
+
insert(_el$, createComponent(Show, {
|
|
191
|
+
get when() {
|
|
192
|
+
return kind() === "new";
|
|
193
|
+
},
|
|
194
|
+
get fallback() {
|
|
195
|
+
var _el$34 = _tmpl$12$1();
|
|
196
|
+
var _el$36 = _el$34.firstChild.nextSibling;
|
|
197
|
+
var _el$39 = _el$36.firstChild.nextSibling;
|
|
198
|
+
var _el$40 = _el$39.nextSibling;
|
|
199
|
+
_el$36.addEventListener("change", (event) => setSite(event.currentTarget.value));
|
|
200
|
+
insert(_el$36, createComponent(Show, {
|
|
201
|
+
get when() {
|
|
202
|
+
return memo(() => {
|
|
203
|
+
return !!initial.site;
|
|
204
|
+
})() ? !list().sites.some((entry) => entry.siteId === initial.site.siteId) : initial.site;
|
|
205
|
+
},
|
|
206
|
+
get children() {
|
|
207
|
+
var _el$38 = _tmpl$11$1();
|
|
208
|
+
insert(_el$38, () => {
|
|
209
|
+
return initial.site.url.replace(/^https?:\/\//, "");
|
|
210
|
+
});
|
|
211
|
+
effect(() => initial.site.siteId, (_v$) => {
|
|
212
|
+
_el$38.value = _v$;
|
|
213
|
+
});
|
|
214
|
+
return _el$38;
|
|
215
|
+
}
|
|
216
|
+
}), _el$39);
|
|
217
|
+
insert(_el$36, createComponent(For, {
|
|
218
|
+
get each() {
|
|
219
|
+
return list().sites;
|
|
220
|
+
},
|
|
221
|
+
children: (entry) => (() => {
|
|
222
|
+
var _el$41 = _tmpl$11$1();
|
|
223
|
+
insert(_el$41, () => {
|
|
224
|
+
return entry.url.replace(/^https?:\/\//, "");
|
|
225
|
+
});
|
|
226
|
+
effect(() => entry.siteId, (_v$) => {
|
|
227
|
+
_el$41.value = _v$;
|
|
228
|
+
});
|
|
229
|
+
return _el$41;
|
|
230
|
+
})()
|
|
231
|
+
}), _el$40);
|
|
232
|
+
effect(() => {
|
|
233
|
+
return {
|
|
234
|
+
e: `${p}-field`,
|
|
235
|
+
t: site(),
|
|
236
|
+
a: disabled()
|
|
237
|
+
};
|
|
238
|
+
}, ({ e, t, a }, _p$) => {
|
|
239
|
+
className(_el$34, e, _p$?.e);
|
|
240
|
+
queueMicrotask(() => {
|
|
241
|
+
return _el$36.value = t;
|
|
242
|
+
}) || (_el$36.value = t);
|
|
243
|
+
a !== _p$?.a && setAttribute(_el$36, "disabled", a);
|
|
244
|
+
});
|
|
245
|
+
return _el$34;
|
|
246
|
+
},
|
|
247
|
+
get children() {
|
|
248
|
+
return [
|
|
249
|
+
(() => {
|
|
250
|
+
var _el$12 = _tmpl$2$2();
|
|
251
|
+
var _el$14 = _el$12.firstChild.nextSibling;
|
|
252
|
+
_el$14._$$input = (event) => setName(event.currentTarget.value);
|
|
253
|
+
effect(() => {
|
|
254
|
+
return {
|
|
255
|
+
e: `${p}-field`,
|
|
256
|
+
t: name(),
|
|
257
|
+
a: disabled()
|
|
258
|
+
};
|
|
259
|
+
}, ({ e, t, a }, _p$) => {
|
|
260
|
+
className(_el$12, e, _p$?.e);
|
|
261
|
+
_el$14.value = t ?? "";
|
|
262
|
+
a !== _p$?.a && setAttribute(_el$14, "disabled", a);
|
|
263
|
+
});
|
|
264
|
+
return _el$12;
|
|
265
|
+
})(),
|
|
266
|
+
(() => {
|
|
267
|
+
var _el$15 = _tmpl$3$2();
|
|
268
|
+
effect(() => `${p}-small`, (_v$, _$p) => {
|
|
269
|
+
className(_el$15, _v$, _$p);
|
|
270
|
+
});
|
|
271
|
+
return _el$15;
|
|
272
|
+
})(),
|
|
273
|
+
(() => {
|
|
274
|
+
var _el$16 = _tmpl$5$2();
|
|
275
|
+
var _el$18 = _el$16.firstChild.nextSibling;
|
|
276
|
+
var _el$22 = _el$18.firstChild.nextSibling;
|
|
277
|
+
var _el$23 = _el$22.nextSibling;
|
|
278
|
+
_el$18.addEventListener("change", (event) => setTeam(event.currentTarget.value));
|
|
279
|
+
insert(_el$18, createComponent(Show, {
|
|
280
|
+
get when() {
|
|
281
|
+
return memo(() => {
|
|
282
|
+
return !!team();
|
|
283
|
+
})() ? !list().teams.some((entry) => entry.slug === team()) : team();
|
|
284
|
+
},
|
|
285
|
+
get children() {
|
|
286
|
+
var _el$20 = _tmpl$4$2();
|
|
287
|
+
var _el$21 = _el$20.firstChild;
|
|
288
|
+
insert(_el$20, team, _el$21);
|
|
289
|
+
effect(() => team(), (_v$) => {
|
|
290
|
+
_el$20.value = _v$;
|
|
291
|
+
});
|
|
292
|
+
return _el$20;
|
|
293
|
+
}
|
|
294
|
+
}), _el$22);
|
|
295
|
+
insert(_el$18, createComponent(For, {
|
|
296
|
+
get each() {
|
|
297
|
+
return list().teams;
|
|
298
|
+
},
|
|
299
|
+
children: (entry) => (() => {
|
|
300
|
+
var _el$42 = _tmpl$11$1();
|
|
301
|
+
insert(_el$42, () => {
|
|
302
|
+
return entry.name;
|
|
303
|
+
});
|
|
304
|
+
effect(() => entry.slug, (_v$) => {
|
|
305
|
+
_el$42.value = _v$;
|
|
306
|
+
});
|
|
307
|
+
return _el$42;
|
|
308
|
+
})()
|
|
309
|
+
}), _el$23);
|
|
310
|
+
effect(() => {
|
|
311
|
+
return {
|
|
312
|
+
e: `${p}-field ${p}-team`,
|
|
313
|
+
t: team(),
|
|
314
|
+
a: disabled()
|
|
315
|
+
};
|
|
316
|
+
}, ({ e, t, a }, _p$) => {
|
|
317
|
+
className(_el$16, e, _p$?.e);
|
|
318
|
+
queueMicrotask(() => {
|
|
319
|
+
return _el$18.value = t;
|
|
320
|
+
}) || (_el$18.value = t);
|
|
321
|
+
a !== _p$?.a && setAttribute(_el$18, "disabled", a);
|
|
322
|
+
});
|
|
323
|
+
return _el$16;
|
|
324
|
+
})()
|
|
325
|
+
];
|
|
326
|
+
}
|
|
327
|
+
}), _el$24);
|
|
328
|
+
insert(_el$, createComponent(Show, {
|
|
329
|
+
get when() {
|
|
330
|
+
return loading();
|
|
331
|
+
},
|
|
332
|
+
get children() {
|
|
333
|
+
var _el$25 = _tmpl$6$1();
|
|
334
|
+
effect(() => `${p}-small`, (_v$, _$p) => {
|
|
335
|
+
className(_el$25, _v$, _$p);
|
|
336
|
+
});
|
|
337
|
+
return _el$25;
|
|
338
|
+
}
|
|
339
|
+
}), _el$26);
|
|
340
|
+
insert(_el$, createComponent(Show, {
|
|
341
|
+
get when() {
|
|
342
|
+
return error();
|
|
343
|
+
},
|
|
344
|
+
get children() {
|
|
345
|
+
return [(() => {
|
|
346
|
+
var _el$27 = _tmpl$7$1();
|
|
347
|
+
insert(_el$27, error);
|
|
348
|
+
effect(() => `${p}-small`, (_v$, _$p) => {
|
|
349
|
+
className(_el$27, _v$, _$p);
|
|
350
|
+
});
|
|
351
|
+
return _el$27;
|
|
352
|
+
})(), (() => {
|
|
353
|
+
var _el$28 = _tmpl$8$1();
|
|
354
|
+
_el$28._$$click = () => {
|
|
355
|
+
setLoading(true);
|
|
356
|
+
load();
|
|
357
|
+
};
|
|
358
|
+
effect(() => {
|
|
359
|
+
return {
|
|
360
|
+
e: `${p}-quiet`,
|
|
361
|
+
t: loading()
|
|
362
|
+
};
|
|
363
|
+
}, ({ e, t }, _p$) => {
|
|
364
|
+
className(_el$28, e, _p$?.e);
|
|
365
|
+
t !== _p$?.t && setAttribute(_el$28, "disabled", t);
|
|
366
|
+
});
|
|
367
|
+
return _el$28;
|
|
368
|
+
})()];
|
|
369
|
+
}
|
|
370
|
+
}), _el$29);
|
|
371
|
+
insert(_el$, createComponent(Show, {
|
|
372
|
+
get when() {
|
|
373
|
+
return memo(() => {
|
|
374
|
+
return !!more();
|
|
375
|
+
})() ? kind() === "existing" : more();
|
|
376
|
+
},
|
|
377
|
+
get children() {
|
|
378
|
+
var _el$30 = _tmpl$9$1();
|
|
379
|
+
_el$30._$$click = () => {
|
|
380
|
+
setLoading(true);
|
|
381
|
+
load();
|
|
382
|
+
};
|
|
383
|
+
effect(() => {
|
|
384
|
+
return {
|
|
385
|
+
e: `${p}-quiet`,
|
|
386
|
+
t: disabled()
|
|
387
|
+
};
|
|
388
|
+
}, ({ e, t }, _p$) => {
|
|
389
|
+
className(_el$30, e, _p$?.e);
|
|
390
|
+
t !== _p$?.t && setAttribute(_el$30, "disabled", t);
|
|
391
|
+
});
|
|
392
|
+
return _el$30;
|
|
393
|
+
}
|
|
394
|
+
}), _el$31);
|
|
395
|
+
_el$32._$$click = () => props.cancel();
|
|
396
|
+
effect(() => {
|
|
397
|
+
return {
|
|
398
|
+
e: `${p}-heading`,
|
|
399
|
+
t: `${p}-small ${p}-intro`,
|
|
400
|
+
a: `${p}-modes`,
|
|
401
|
+
o: disabled(),
|
|
402
|
+
i: `${p}-sr`,
|
|
403
|
+
n: kind() === "new",
|
|
404
|
+
s: kind() === "existing",
|
|
405
|
+
h: `${p}-actions`,
|
|
406
|
+
r: `${p}-quiet`,
|
|
407
|
+
d: props.busy(),
|
|
408
|
+
l: `${p}-button`,
|
|
409
|
+
u: disabled() || (kind() === "new" ? !list().teams.some((entry) => entry.slug === team()) : !site())
|
|
410
|
+
};
|
|
411
|
+
}, ({ e, t, a, o, i, n, s, h, r, d, l, u }, _p$) => {
|
|
412
|
+
className(_el$2, e, _p$?.e);
|
|
413
|
+
className(_el$3, t, _p$?.t);
|
|
414
|
+
className(_el$6, a, _p$?.a);
|
|
415
|
+
o !== _p$?.o && setAttribute(_el$6, "disabled", o);
|
|
416
|
+
className(_el$7, i, _p$?.i);
|
|
417
|
+
_el$9.checked = n;
|
|
418
|
+
_el$11.checked = s;
|
|
419
|
+
className(_el$31, h, _p$?.h);
|
|
420
|
+
className(_el$32, r, _p$?.r);
|
|
421
|
+
d !== _p$?.d && setAttribute(_el$32, "disabled", d);
|
|
422
|
+
className(_el$33, l, _p$?.l);
|
|
423
|
+
u !== _p$?.u && setAttribute(_el$33, "disabled", u);
|
|
424
|
+
});
|
|
425
|
+
return _el$;
|
|
426
|
+
}
|
|
427
|
+
delegateEvents(["input", "click"]);
|
|
428
|
+
var _tmpl$$1 = template(`<div><span role=status> of <!> selected</span><button type=button>`);
|
|
429
|
+
var _tmpl$2$1 = template(`<div role=region aria-label="Scrollable project pages"tabindex=0><fieldset><legend>Project pages`);
|
|
430
|
+
var _tmpl$3$1 = template(`<p>Select at least one page.`);
|
|
431
|
+
var _tmpl$4$1 = template(`<form><h2>Pages</h2><fieldset><legend>Pages to publish</legend><label><input type=radio><span>All pages<span>Includes new pages.</span></span></label><label><input type=radio><span>Selected pages<span>New pages excluded.</span></span></label></fieldset><div><button type=button>Cancel</button><button>Save`);
|
|
432
|
+
var _tmpl$5$1 = template(`<label><input type=checkbox><span>`);
|
|
433
|
+
function Pages(props) {
|
|
434
|
+
const p = untrack(() => props.prefix);
|
|
435
|
+
const initial = untrack(() => ({
|
|
436
|
+
settings: props.settings,
|
|
437
|
+
paths: props.paths()
|
|
438
|
+
}));
|
|
439
|
+
const [all, setAll] = createSignal(initial.settings.pages === null);
|
|
440
|
+
const [chosen, setChosen] = createSignal(initial.settings.pages ?? initial.paths);
|
|
441
|
+
const selected = () => props.paths().filter((path) => chosen().includes(path));
|
|
442
|
+
const toggle = (path, checked) => setChosen((held) => checked ? [...held, path] : held.filter((entry) => entry !== path));
|
|
443
|
+
var _el$ = _tmpl$4$1();
|
|
444
|
+
var _el$2 = _el$.firstChild;
|
|
445
|
+
var _el$3 = _el$2.nextSibling;
|
|
446
|
+
var _el$4 = _el$3.firstChild;
|
|
447
|
+
var _el$5 = _el$4.nextSibling;
|
|
448
|
+
var _el$6 = _el$5.firstChild;
|
|
449
|
+
var _el$9 = _el$6.nextSibling.firstChild.nextSibling;
|
|
450
|
+
var _el$11 = _el$5.nextSibling.firstChild;
|
|
451
|
+
var _el$14 = _el$11.nextSibling.firstChild.nextSibling;
|
|
452
|
+
var _el$25 = _el$3.nextSibling;
|
|
453
|
+
var _el$26 = _el$25.firstChild;
|
|
454
|
+
var _el$27 = _el$26.nextSibling;
|
|
455
|
+
_el$.addEventListener("submit", (event) => {
|
|
456
|
+
event.preventDefault();
|
|
457
|
+
props.save({
|
|
458
|
+
...props.settings,
|
|
459
|
+
pages: all() ? null : selected()
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
_el$6.addEventListener("change", () => setAll(true));
|
|
463
|
+
setAttribute(_el$6, "name", `${p}-pages`);
|
|
464
|
+
_el$11.addEventListener("change", () => setAll(false));
|
|
465
|
+
setAttribute(_el$11, "name", `${p}-pages`);
|
|
466
|
+
insert(_el$, createComponent(Show, {
|
|
467
|
+
get when() {
|
|
468
|
+
return !all();
|
|
469
|
+
},
|
|
470
|
+
get children() {
|
|
471
|
+
return [
|
|
472
|
+
(() => {
|
|
473
|
+
var _el$15 = _tmpl$$1();
|
|
474
|
+
var _el$16 = _el$15.firstChild;
|
|
475
|
+
var _el$17 = _el$16.firstChild;
|
|
476
|
+
var _el$18 = _el$17.nextSibling;
|
|
477
|
+
_el$18.nextSibling;
|
|
478
|
+
var _el$20 = _el$16.nextSibling;
|
|
479
|
+
insert(_el$16, () => {
|
|
480
|
+
return selected().length;
|
|
481
|
+
}, _el$17);
|
|
482
|
+
insert(_el$16, () => {
|
|
483
|
+
return props.paths().length;
|
|
484
|
+
}, _el$18);
|
|
485
|
+
_el$20._$$click = () => setChosen(selected().length === props.paths().length ? [] : props.paths());
|
|
486
|
+
insert(_el$20, () => {
|
|
487
|
+
return selected().length === props.paths().length ? "Clear selection" : "Select all";
|
|
488
|
+
});
|
|
489
|
+
effect(() => {
|
|
490
|
+
return {
|
|
491
|
+
e: `${p}-row`,
|
|
492
|
+
t: `${p}-small`,
|
|
493
|
+
a: `${p}-quiet`,
|
|
494
|
+
o: props.busy()
|
|
495
|
+
};
|
|
496
|
+
}, ({ e, t, a, o }, _p$) => {
|
|
497
|
+
className(_el$15, e, _p$?.e);
|
|
498
|
+
className(_el$16, t, _p$?.t);
|
|
499
|
+
className(_el$20, a, _p$?.a);
|
|
500
|
+
o !== _p$?.o && setAttribute(_el$20, "disabled", o);
|
|
501
|
+
});
|
|
502
|
+
return _el$15;
|
|
503
|
+
})(),
|
|
504
|
+
(() => {
|
|
505
|
+
var _el$21 = _tmpl$2$1();
|
|
506
|
+
var _el$22 = _el$21.firstChild;
|
|
507
|
+
var _el$23 = _el$22.firstChild;
|
|
508
|
+
insert(_el$22, createComponent(For, {
|
|
509
|
+
get each() {
|
|
510
|
+
return props.paths();
|
|
511
|
+
},
|
|
512
|
+
children: (path) => (() => {
|
|
513
|
+
var _el$28 = _tmpl$5$1();
|
|
514
|
+
var _el$29 = _el$28.firstChild;
|
|
515
|
+
var _el$30 = _el$29.nextSibling;
|
|
516
|
+
_el$29.addEventListener("change", (event) => toggle(path, event.currentTarget.checked));
|
|
517
|
+
insert(_el$30, path);
|
|
518
|
+
effect(() => chosen().includes(path), (_v$) => {
|
|
519
|
+
_el$29.checked = _v$;
|
|
520
|
+
});
|
|
521
|
+
return _el$28;
|
|
522
|
+
})()
|
|
523
|
+
}), null);
|
|
524
|
+
effect(() => {
|
|
525
|
+
return {
|
|
526
|
+
e: `${p}-page-scroll`,
|
|
527
|
+
t: `${p}-page-list`,
|
|
528
|
+
a: props.busy(),
|
|
529
|
+
o: `${p}-sr`
|
|
530
|
+
};
|
|
531
|
+
}, ({ e, t, a, o }, _p$) => {
|
|
532
|
+
className(_el$21, e, _p$?.e);
|
|
533
|
+
className(_el$22, t, _p$?.t);
|
|
534
|
+
a !== _p$?.a && setAttribute(_el$22, "disabled", a);
|
|
535
|
+
className(_el$23, o, _p$?.o);
|
|
536
|
+
});
|
|
537
|
+
return _el$21;
|
|
538
|
+
})(),
|
|
539
|
+
createComponent(Show, {
|
|
540
|
+
get when() {
|
|
541
|
+
return selected().length === 0;
|
|
542
|
+
},
|
|
543
|
+
get children() {
|
|
544
|
+
var _el$24 = _tmpl$3$1();
|
|
545
|
+
effect(() => `${p}-small`, (_v$, _$p) => {
|
|
546
|
+
className(_el$24, _v$, _$p);
|
|
547
|
+
});
|
|
548
|
+
return _el$24;
|
|
549
|
+
}
|
|
550
|
+
})
|
|
551
|
+
];
|
|
552
|
+
}
|
|
553
|
+
}), _el$25);
|
|
554
|
+
_el$26._$$click = () => props.cancel();
|
|
555
|
+
effect(() => {
|
|
556
|
+
return {
|
|
557
|
+
e: `${p}-heading`,
|
|
558
|
+
t: `${p}-modes`,
|
|
559
|
+
a: props.busy(),
|
|
560
|
+
o: `${p}-sr`,
|
|
561
|
+
i: all(),
|
|
562
|
+
n: `${p}-small`,
|
|
563
|
+
s: !all(),
|
|
564
|
+
h: `${p}-small`,
|
|
565
|
+
r: `${p}-actions`,
|
|
566
|
+
d: `${p}-quiet`,
|
|
567
|
+
l: props.busy(),
|
|
568
|
+
u: `${p}-button`,
|
|
569
|
+
c: props.busy() || !all() && selected().length === 0
|
|
570
|
+
};
|
|
571
|
+
}, ({ e, t, a, o, i, n, s, h, r, d, l, u, c }, _p$) => {
|
|
572
|
+
className(_el$2, e, _p$?.e);
|
|
573
|
+
className(_el$3, t, _p$?.t);
|
|
574
|
+
a !== _p$?.a && setAttribute(_el$3, "disabled", a);
|
|
575
|
+
className(_el$4, o, _p$?.o);
|
|
576
|
+
_el$6.checked = i;
|
|
577
|
+
className(_el$9, n, _p$?.n);
|
|
578
|
+
_el$11.checked = s;
|
|
579
|
+
className(_el$14, h, _p$?.h);
|
|
580
|
+
className(_el$25, r, _p$?.r);
|
|
581
|
+
className(_el$26, d, _p$?.d);
|
|
582
|
+
l !== _p$?.l && setAttribute(_el$26, "disabled", l);
|
|
583
|
+
className(_el$27, u, _p$?.u);
|
|
584
|
+
c !== _p$?.c && setAttribute(_el$27, "disabled", c);
|
|
585
|
+
});
|
|
586
|
+
return _el$;
|
|
587
|
+
}
|
|
588
|
+
delegateEvents(["click"]);
|
|
589
|
+
var defaults = () => ({
|
|
590
|
+
pages: null,
|
|
591
|
+
includeCanvas: true,
|
|
592
|
+
newSite: null
|
|
593
|
+
});
|
|
594
|
+
function isSettings(value) {
|
|
595
|
+
if (!value || typeof value !== "object") return false;
|
|
596
|
+
const s = value;
|
|
597
|
+
const target = s["newSite"];
|
|
598
|
+
return (s["pages"] === null || Array.isArray(s["pages"]) && s["pages"].length > 0 && s["pages"].every((page) => typeof page === "string" && page.length > 0)) && typeof s["includeCanvas"] === "boolean" && (target === null || typeof target === "object" && typeof target["name"] === "string" && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(target["name"]) && target["name"].length <= 50 && typeof target["team"] === "string" && /^[a-zA-Z0-9][a-zA-Z0-9-]*$/.test(target["team"]));
|
|
599
|
+
}
|
|
600
|
+
function isManualLogin(value) {
|
|
601
|
+
if (!value || typeof value !== "object") return false;
|
|
602
|
+
const login = value;
|
|
603
|
+
return isHttps(login.url) && typeof login.command === "string" && login.command.length > 0;
|
|
604
|
+
}
|
|
605
|
+
function isPanelStatus(value) {
|
|
606
|
+
if (!isStatus(value)) return false;
|
|
607
|
+
const s = value;
|
|
608
|
+
return isSettings(s["settings"]) && (s["login"] === null || isManualLogin(s["login"])) && (s["project"] === null || typeof s["project"] === "string") && typeof s["projectName"] === "string" && (s["phase"] === null || [
|
|
609
|
+
"preparing",
|
|
610
|
+
"uploading",
|
|
611
|
+
"login"
|
|
612
|
+
].includes(s["phase"])) && (s["published"] === null || typeof s["published"] === "number");
|
|
613
|
+
}
|
|
614
|
+
function isAccount(value) {
|
|
615
|
+
if (!value || typeof value !== "object") return false;
|
|
616
|
+
const a = value;
|
|
617
|
+
return [
|
|
618
|
+
"ready",
|
|
619
|
+
"signed-out",
|
|
620
|
+
"missing",
|
|
621
|
+
"error"
|
|
622
|
+
].includes(a.state) && typeof a.name === "string" && (a.error === null || typeof a.error === "string");
|
|
623
|
+
}
|
|
624
|
+
var classPrefix = (pluginId) => pluginId.replace(/[^A-Za-z0-9_-]/g, "-");
|
|
625
|
+
var css = (p) => `
|
|
626
|
+
.${p}-panel {
|
|
627
|
+
--panel-text: var(--dream-app-text, #b8b8be);
|
|
628
|
+
--panel-bright: var(--dream-app-bright, #c8c8ce);
|
|
629
|
+
--panel-dim: var(--dream-app-dim, #9a9aa0);
|
|
630
|
+
--panel-muted: var(--dream-app-muted, #85858c);
|
|
631
|
+
--panel-line: var(--dream-app-line, #232326);
|
|
632
|
+
--panel-strong: var(--dream-app-line-strong, #3a3a40);
|
|
633
|
+
--panel-field: var(--dream-app-field, #1c1c20);
|
|
634
|
+
--panel-hover: var(--dream-app-hover, #232326);
|
|
635
|
+
--panel-accent: var(--dream-app-accent, #4c9aff);
|
|
636
|
+
padding: 6px 12px 12px;
|
|
637
|
+
min-width: 0;
|
|
638
|
+
color: var(--panel-text);
|
|
639
|
+
font-family: var(--dream-app-sans, system-ui, sans-serif);
|
|
640
|
+
font-size: 12px;
|
|
641
|
+
line-height: 1.4;
|
|
642
|
+
}
|
|
643
|
+
.${p}-panel p { margin: 0; }
|
|
644
|
+
.${p}-panel button, .${p}-panel input, .${p}-panel select { font: inherit; }
|
|
645
|
+
.${p}-panel button:focus-visible, .${p}-panel input:focus-visible,
|
|
646
|
+
.${p}-panel select:focus-visible, .${p}-page-scroll:focus-visible {
|
|
647
|
+
outline: 1px solid var(--panel-bright); outline-offset: 2px;
|
|
648
|
+
}
|
|
649
|
+
.${p}-button, .${p}-quiet { border: 0; border-radius: 4px; cursor: pointer; }
|
|
650
|
+
.${p}-button { padding: 4px 10px; color: var(--panel-bright); background: var(--panel-line); }
|
|
651
|
+
.${p}-button:hover:not(:disabled) { background: var(--panel-strong); }
|
|
652
|
+
.${p}-panel .${p}-quiet { padding: 3px 6px; font-size: 11px; color: var(--panel-dim); background: transparent; }
|
|
653
|
+
.${p}-quiet:hover:not(:disabled) { color: var(--panel-bright); background: var(--panel-hover); }
|
|
654
|
+
.${p}-panel .${p}-primary { padding: 7px 14px; font-weight: 600; }
|
|
655
|
+
.${p}-primary:hover:not(:disabled) { background: #32e6e2; color: #0c2a2a; }
|
|
656
|
+
.${p}-panel button:disabled { color: var(--panel-muted); cursor: default; }
|
|
657
|
+
.${p}-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
|
|
658
|
+
.${p}-row > button { flex: none; }
|
|
659
|
+
.${p}-small { font-size: 11px; color: var(--panel-muted); }
|
|
660
|
+
.${p}-login-help { display: grid; gap: 8px; margin: 12px 0; }
|
|
661
|
+
.${p}-login-help a { color: var(--panel-bright); }
|
|
662
|
+
.${p}-login-help code { white-space: pre-wrap; overflow-wrap: anywhere; user-select: text; font-family: var(--dream-app-mono, monospace); font-size: 12px; }
|
|
663
|
+
.${p}-destination { margin-bottom: 16px; }
|
|
664
|
+
.${p}-address { min-width: 0; overflow-wrap: anywhere; color: var(--panel-bright); }
|
|
665
|
+
.${p}-scope { margin-bottom: 20px; }
|
|
666
|
+
.${p}-page-detail { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
667
|
+
.${p}-publish-row { flex-wrap: wrap; }
|
|
668
|
+
.${p}-canvas-option { display: flex; align-items: center; gap: 6px; cursor: pointer; }
|
|
669
|
+
.${p}-panel input[type="checkbox"], .${p}-panel input[type="radio"] { accent-color: var(--panel-accent); margin: 0; flex: none; }
|
|
670
|
+
.${p}-canvas-option input { width: 13px; height: 13px; }
|
|
671
|
+
.${p}-status-row { display: flex; align-items: first baseline; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
|
|
672
|
+
.${p}-share-actions { display: flex; flex: none; align-items: first baseline; gap: 6px; margin-left: -6px; }
|
|
673
|
+
.${p}-copy { display: grid; min-width: 65px; }
|
|
674
|
+
.${p}-copy + .${p}-copy { min-width: 102px; }
|
|
675
|
+
.${p}-notice:empty { display: none; }
|
|
676
|
+
.${p}-notice { flex: 1; min-width: 80px; margin-left: auto; text-align: right; text-wrap: balance; color: var(--panel-muted); font-size: 11px; }
|
|
677
|
+
.${p}-error { color: var(--dream-app-danger, #c58b84); }
|
|
678
|
+
.${p}-success { color: var(--dream-app-success, #2fb36a); }
|
|
679
|
+
.${p}-heading { margin: 0 0 12px; color: var(--panel-bright); font-size: 12px; font-weight: 500; }
|
|
680
|
+
.${p}-panel .${p}-intro { margin-bottom: 8px; }
|
|
681
|
+
.${p}-modes { display: grid; gap: 8px; border: 0; padding: 0; margin: 0 0 12px; }
|
|
682
|
+
.${p}-modes label { display: flex; align-items: start; gap: 6px; cursor: pointer; }
|
|
683
|
+
.${p}-modes input { margin-top: 2px !important; }
|
|
684
|
+
.${p}-modes .${p}-small { display: block; margin-top: 2px; }
|
|
685
|
+
.${p}-page-scroll { max-height: 152px; overflow-y: auto; overscroll-behavior-y: contain; scrollbar-gutter: stable; scrollbar-width: thin; scrollbar-color: var(--panel-strong) transparent; margin-bottom: 8px; padding: 4px; }
|
|
686
|
+
.${p}-page-list { display: grid; border: 0; padding: 0; margin: 0; }
|
|
687
|
+
.${p}-page-list label { display: flex; align-items: center; gap: 6px; padding: 6px 0; cursor: pointer; }
|
|
688
|
+
.${p}-page-list span { overflow-wrap: anywhere; min-width: 0; }
|
|
689
|
+
.${p}-actions { display: flex; justify-content: flex-end; gap: 6px; margin-top: 12px; }
|
|
690
|
+
.${p}-field { display: grid; gap: 4px; }
|
|
691
|
+
.${p}-team { margin-top: 8px; }
|
|
692
|
+
.${p}-panel input[type="text"], .${p}-panel input[readonly], .${p}-panel select {
|
|
693
|
+
padding: 4px 8px; color: var(--panel-bright); background: var(--panel-field); border: 1px solid var(--panel-line); border-radius: 4px; width: 100%; min-width: 0; box-sizing: border-box;
|
|
694
|
+
}
|
|
695
|
+
.${p}-panel select { cursor: pointer; }
|
|
696
|
+
.${p}-sr { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
697
|
+
`;
|
|
698
|
+
var _tmpl$ = template(`<div><div><p></p><button type=button>Change</button></div><p>`);
|
|
699
|
+
var _tmpl$2 = template(`<div><div><span></span><button type=button>Choose pages</button></div><p>`);
|
|
700
|
+
var _tmpl$3 = template(`<div><label><input type=checkbox>Include canvas</label><button type=button>Publish project`);
|
|
701
|
+
var _tmpl$4 = template(`<div><!><!>`);
|
|
702
|
+
var _tmpl$5 = template(`<div><span role=status>`);
|
|
703
|
+
var _tmpl$6 = template(`<button type=button>Check again`);
|
|
704
|
+
var _tmpl$7 = template(`<p role=alert>`);
|
|
705
|
+
var _tmpl$8 = template(`<div>`);
|
|
706
|
+
var _tmpl$9 = template(`<button type=button>`);
|
|
707
|
+
var _tmpl$10 = template(`<p role=alert>Log in failed.`);
|
|
708
|
+
var _tmpl$11 = template(`<div><!><!><!><!>`);
|
|
709
|
+
var _tmpl$12 = template(`<p role=status>`);
|
|
710
|
+
var _tmpl$13 = template(`<div><a target=_blank rel="noopener noreferrer">Authorize in Netlify</a><p>Then run in your terminal:</p><code>`);
|
|
711
|
+
var _tmpl$14 = template(`<p>Loading project…`);
|
|
712
|
+
function createNetlifyPanel(dd) {
|
|
713
|
+
const p = classPrefix(dd.plugin.id);
|
|
714
|
+
const [status, setStatus] = createSignal(null);
|
|
715
|
+
const [account, setAccount] = createSignal(null);
|
|
716
|
+
const [pollError, setPollError] = createSignal(null);
|
|
717
|
+
const [said, setSaid] = createSignal(null);
|
|
718
|
+
const [asking, setAsking] = createSignal(false);
|
|
719
|
+
const [published, setPublished] = createSignal(false);
|
|
720
|
+
const [screen, setScreen] = createSignal("overview");
|
|
721
|
+
let epoch = 0;
|
|
722
|
+
let accountRequest = 0;
|
|
723
|
+
let gone = false;
|
|
724
|
+
let following = null;
|
|
725
|
+
let pollVersion = 0;
|
|
726
|
+
let successTimer;
|
|
727
|
+
let waitTimer;
|
|
728
|
+
let wake;
|
|
729
|
+
const stopWatching = () => {
|
|
730
|
+
pollVersion += 1;
|
|
731
|
+
clearTimeout(waitTimer);
|
|
732
|
+
wake?.();
|
|
733
|
+
};
|
|
734
|
+
const current = (started) => !gone && started === epoch;
|
|
735
|
+
const clearSuccess = () => {
|
|
736
|
+
clearTimeout(successTimer);
|
|
737
|
+
setPublished(false);
|
|
738
|
+
};
|
|
739
|
+
const hear = (answer) => {
|
|
740
|
+
if (!isPanelStatus(answer)) throw new Error("Could not read publishing status.");
|
|
741
|
+
const previous = status();
|
|
742
|
+
if (previous && previous.project === answer.project && answer.published !== null && answer.published !== previous.published && !answer.error) {
|
|
743
|
+
clearTimeout(successTimer);
|
|
744
|
+
setPublished(true);
|
|
745
|
+
successTimer = setTimeout(() => setPublished(false), 3e3);
|
|
746
|
+
}
|
|
747
|
+
if (answer.error === "Choose a Netlify team.") setScreen("destination");
|
|
748
|
+
setPollError(null);
|
|
749
|
+
setStatus(answer);
|
|
750
|
+
return answer;
|
|
751
|
+
};
|
|
752
|
+
async function checkAccount(started = epoch) {
|
|
753
|
+
const request = ++accountRequest;
|
|
754
|
+
try {
|
|
755
|
+
const answer = await dd.hostPart.call("account");
|
|
756
|
+
if (!current(started) || request !== accountRequest) return;
|
|
757
|
+
if (!isAccount(answer)) throw new Error("Could not read Netlify account.");
|
|
758
|
+
setAccount(answer);
|
|
759
|
+
} catch (error) {
|
|
760
|
+
if (current(started) && request === accountRequest) setAccount({
|
|
761
|
+
state: "error",
|
|
762
|
+
name: "",
|
|
763
|
+
error: messageOf(error)
|
|
764
|
+
});
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
async function watch() {
|
|
768
|
+
const started = epoch;
|
|
769
|
+
const version = pollVersion;
|
|
770
|
+
const active = () => current(started) && version === pollVersion;
|
|
771
|
+
if (gone || following === version) return;
|
|
772
|
+
following = version;
|
|
773
|
+
try {
|
|
774
|
+
for (;;) {
|
|
775
|
+
try {
|
|
776
|
+
const answer = await dd.hostPart.call("status");
|
|
777
|
+
if (!active()) return;
|
|
778
|
+
const previous = status();
|
|
779
|
+
if (!hear(answer).running) {
|
|
780
|
+
if (previous === null || previous.running) checkAccount(started);
|
|
781
|
+
return;
|
|
782
|
+
}
|
|
783
|
+
} catch (error) {
|
|
784
|
+
if (active()) setPollError(messageOf(error));
|
|
785
|
+
}
|
|
786
|
+
if (!active()) return;
|
|
787
|
+
await new Promise((resolve) => {
|
|
788
|
+
wake = resolve;
|
|
789
|
+
waitTimer = setTimeout(resolve, 1500);
|
|
790
|
+
});
|
|
791
|
+
if (!active()) return;
|
|
792
|
+
}
|
|
793
|
+
} finally {
|
|
794
|
+
if (following === version) following = null;
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
const projectHook = dd.on("project", () => untrack(() => {
|
|
798
|
+
epoch += 1;
|
|
799
|
+
stopWatching();
|
|
800
|
+
clearSuccess();
|
|
801
|
+
setStatus(null);
|
|
802
|
+
setPollError(null);
|
|
803
|
+
setSaid(null);
|
|
804
|
+
setScreen("overview");
|
|
805
|
+
setAsking(false);
|
|
806
|
+
checkAccount(epoch);
|
|
807
|
+
watch();
|
|
808
|
+
}));
|
|
809
|
+
onCleanup(() => {
|
|
810
|
+
gone = true;
|
|
811
|
+
epoch += 1;
|
|
812
|
+
projectHook.dispose();
|
|
813
|
+
clearTimeout(successTimer);
|
|
814
|
+
stopWatching();
|
|
815
|
+
});
|
|
816
|
+
untrack(() => void watch());
|
|
817
|
+
checkAccount();
|
|
818
|
+
async function ask(name, fields = {}) {
|
|
819
|
+
if (asking() || status() === null) return false;
|
|
820
|
+
const started = epoch;
|
|
821
|
+
stopWatching();
|
|
822
|
+
clearSuccess();
|
|
823
|
+
setAsking(true);
|
|
824
|
+
setSaid(null);
|
|
825
|
+
try {
|
|
826
|
+
const answer = await dd.hostPart.call(name, {
|
|
827
|
+
project: status().project,
|
|
828
|
+
...fields
|
|
829
|
+
});
|
|
830
|
+
if (!current(started)) return false;
|
|
831
|
+
const heard = hear(answer);
|
|
832
|
+
if (name === "login" && !heard.running) checkAccount(started);
|
|
833
|
+
return true;
|
|
834
|
+
} catch (error) {
|
|
835
|
+
if (current(started)) setSaid(messageOf(error));
|
|
836
|
+
return false;
|
|
837
|
+
} finally {
|
|
838
|
+
if (current(started)) {
|
|
839
|
+
setAsking(false);
|
|
840
|
+
watch();
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
async function save(settings, site) {
|
|
845
|
+
if (await ask("save", {
|
|
846
|
+
settings,
|
|
847
|
+
...site === void 0 ? {} : { site }
|
|
848
|
+
})) setScreen("overview");
|
|
849
|
+
}
|
|
850
|
+
const settings = () => status()?.settings ?? defaults();
|
|
851
|
+
const paths = () => dd.document().pages.map((page) => page.path).filter((path) => dd.page(path) !== void 0);
|
|
852
|
+
const selected = () => settings().pages === null ? paths() : paths().filter((path) => settings().pages.includes(path));
|
|
853
|
+
const pageDetail = () => settings().pages === null ? "All project pages will be public." : selected().join(", ");
|
|
854
|
+
const site = () => status()?.site ?? null;
|
|
855
|
+
const busy = () => asking() || status() === null || status().running;
|
|
856
|
+
const failure = () => said() ?? pollError() ?? status()?.error ?? null;
|
|
857
|
+
const changed = () => {
|
|
858
|
+
const previous = site()?.publishedScope;
|
|
859
|
+
if (!previous) return false;
|
|
860
|
+
const pages = settings().pages === null ? null : selected();
|
|
861
|
+
return previous.includeCanvas !== settings().includeCanvas || JSON.stringify(previous.pages) !== JSON.stringify(pages);
|
|
862
|
+
};
|
|
863
|
+
const notice = () => failure() ? "Publishing failed." : published() ? "Just published!" : status()?.running ? status()?.phase === "preparing" ? "Preparing files…" : status()?.phase === "uploading" ? "Publishing…" : status()?.phase === "login" ? "Waiting for browser…" : "Working…" : changed() ? "Changes to deploy" : "";
|
|
864
|
+
const address = () => site() ? status()?.checked ? site().url.replace(/^https?:\/\//, "") : `Project ${site().siteId}` : `${settings().newSite?.name ?? status()?.projectName ?? ""}.netlify.app`;
|
|
865
|
+
var _el$ = _tmpl$8();
|
|
866
|
+
insert(_el$, createComponent(Show, {
|
|
867
|
+
get when() {
|
|
868
|
+
return account()?.state === "ready";
|
|
869
|
+
},
|
|
870
|
+
get fallback() {
|
|
871
|
+
var _el$23 = _tmpl$11();
|
|
872
|
+
var _el$25 = _el$23.firstChild;
|
|
873
|
+
var _el$26 = _el$25.nextSibling;
|
|
874
|
+
var _el$28 = _el$26.nextSibling;
|
|
875
|
+
var _el$30 = _el$28.nextSibling;
|
|
876
|
+
insert(_el$23, createComponent(Show, {
|
|
877
|
+
get when() {
|
|
878
|
+
return account()?.state === "signed-out";
|
|
879
|
+
},
|
|
880
|
+
get fallback() {
|
|
881
|
+
var _el$31 = _tmpl$12();
|
|
882
|
+
insert(_el$31, () => {
|
|
883
|
+
return account()?.error ?? "Connecting to Netlify…";
|
|
884
|
+
});
|
|
885
|
+
effect(() => `${p}-small`, (_v$, _$p) => {
|
|
886
|
+
className(_el$31, _v$, _$p);
|
|
887
|
+
});
|
|
888
|
+
return _el$31;
|
|
889
|
+
},
|
|
890
|
+
get children() {
|
|
891
|
+
var _el$24 = _tmpl$9();
|
|
892
|
+
_el$24._$$click = () => void ask("login");
|
|
893
|
+
insert(_el$24, () => {
|
|
894
|
+
return status()?.phase === "login" ? "Waiting for browser…" : "Log in to Netlify";
|
|
895
|
+
});
|
|
896
|
+
effect(() => {
|
|
897
|
+
return {
|
|
898
|
+
e: `${p}-button ${p}-primary`,
|
|
899
|
+
t: busy()
|
|
900
|
+
};
|
|
901
|
+
}, ({ e, t }, _p$) => {
|
|
902
|
+
className(_el$24, e, _p$?.e);
|
|
903
|
+
t !== _p$?.t && setAttribute(_el$24, "disabled", t);
|
|
904
|
+
});
|
|
905
|
+
return _el$24;
|
|
906
|
+
}
|
|
907
|
+
}), _el$25);
|
|
908
|
+
insert(_el$23, createComponent(Show, {
|
|
909
|
+
get when() {
|
|
910
|
+
return status()?.login;
|
|
911
|
+
},
|
|
912
|
+
children: (login) => (() => {
|
|
913
|
+
var _el$32 = _tmpl$13();
|
|
914
|
+
var _el$33 = _el$32.firstChild;
|
|
915
|
+
var _el$34 = _el$33.nextSibling;
|
|
916
|
+
var _el$35 = _el$34.nextSibling;
|
|
917
|
+
claimElement(_el$33);
|
|
918
|
+
insert(_el$35, () => {
|
|
919
|
+
return login().command;
|
|
920
|
+
});
|
|
921
|
+
effect(() => {
|
|
922
|
+
return {
|
|
923
|
+
e: `${p}-login-help`,
|
|
924
|
+
t: login().url,
|
|
925
|
+
a: `${p}-small`
|
|
926
|
+
};
|
|
927
|
+
}, ({ e, t, a }, _p$) => {
|
|
928
|
+
className(_el$32, e, _p$?.e);
|
|
929
|
+
t !== _p$?.t && setAttribute(_el$33, "href", t);
|
|
930
|
+
className(_el$34, a, _p$?.a);
|
|
931
|
+
});
|
|
932
|
+
return _el$32;
|
|
933
|
+
})()
|
|
934
|
+
}), _el$26);
|
|
935
|
+
insert(_el$23, createComponent(Show, {
|
|
936
|
+
get when() {
|
|
937
|
+
return (memo(() => {
|
|
938
|
+
return !!account();
|
|
939
|
+
})() ? account().state !== "signed-out" : account()) || failure() || status()?.login;
|
|
940
|
+
},
|
|
941
|
+
get children() {
|
|
942
|
+
var _el$27 = _tmpl$6();
|
|
943
|
+
_el$27._$$click = () => {
|
|
944
|
+
setSaid(null);
|
|
945
|
+
checkAccount();
|
|
946
|
+
watch();
|
|
947
|
+
};
|
|
948
|
+
effect(() => {
|
|
949
|
+
return {
|
|
950
|
+
e: `${p}-quiet`,
|
|
951
|
+
t: busy()
|
|
952
|
+
};
|
|
953
|
+
}, ({ e, t }, _p$) => {
|
|
954
|
+
className(_el$27, e, _p$?.e);
|
|
955
|
+
t !== _p$?.t && setAttribute(_el$27, "disabled", t);
|
|
956
|
+
});
|
|
957
|
+
return _el$27;
|
|
958
|
+
}
|
|
959
|
+
}), _el$28);
|
|
960
|
+
insert(_el$23, createComponent(Show, {
|
|
961
|
+
get when() {
|
|
962
|
+
return failure();
|
|
963
|
+
},
|
|
964
|
+
get children() {
|
|
965
|
+
var _el$29 = _tmpl$10();
|
|
966
|
+
effect(() => {
|
|
967
|
+
return {
|
|
968
|
+
e: `${p}-small ${p}-error`,
|
|
969
|
+
t: failure()
|
|
970
|
+
};
|
|
971
|
+
}, ({ e, t }, _p$) => {
|
|
972
|
+
className(_el$29, e, _p$?.e);
|
|
973
|
+
t !== _p$?.t && setAttribute(_el$29, "title", t);
|
|
974
|
+
});
|
|
975
|
+
return _el$29;
|
|
976
|
+
}
|
|
977
|
+
}), _el$30);
|
|
978
|
+
effect(() => `${p}-connect`, (_v$, _$p) => {
|
|
979
|
+
className(_el$23, _v$, _$p);
|
|
980
|
+
});
|
|
981
|
+
return _el$23;
|
|
982
|
+
},
|
|
983
|
+
get children() {
|
|
984
|
+
return createComponent(Show, {
|
|
985
|
+
get when() {
|
|
986
|
+
return status();
|
|
987
|
+
},
|
|
988
|
+
get fallback() {
|
|
989
|
+
var _el$36 = _tmpl$14();
|
|
990
|
+
effect(() => `${p}-small`, (_v$, _$p) => {
|
|
991
|
+
className(_el$36, _v$, _$p);
|
|
992
|
+
});
|
|
993
|
+
return _el$36;
|
|
994
|
+
},
|
|
995
|
+
get children() {
|
|
996
|
+
return [
|
|
997
|
+
createComponent(Show, {
|
|
998
|
+
get when() {
|
|
999
|
+
return screen() === "overview";
|
|
1000
|
+
},
|
|
1001
|
+
get children() {
|
|
1002
|
+
return [
|
|
1003
|
+
(() => {
|
|
1004
|
+
var _el$2 = _tmpl$();
|
|
1005
|
+
var _el$3 = _el$2.firstChild;
|
|
1006
|
+
var _el$4 = _el$3.firstChild;
|
|
1007
|
+
var _el$5 = _el$4.nextSibling;
|
|
1008
|
+
var _el$6 = _el$3.nextSibling;
|
|
1009
|
+
insert(_el$4, address);
|
|
1010
|
+
_el$5._$$click = () => {
|
|
1011
|
+
setSaid(null);
|
|
1012
|
+
setScreen("destination");
|
|
1013
|
+
};
|
|
1014
|
+
insert(_el$6, () => {
|
|
1015
|
+
return site() ? "Production · Public" : "New project · Public";
|
|
1016
|
+
});
|
|
1017
|
+
effect(() => {
|
|
1018
|
+
return {
|
|
1019
|
+
e: `${p}-destination`,
|
|
1020
|
+
t: `${p}-row`,
|
|
1021
|
+
a: `${p}-address`,
|
|
1022
|
+
o: `${p}-quiet`,
|
|
1023
|
+
i: busy(),
|
|
1024
|
+
n: `${p}-small`
|
|
1025
|
+
};
|
|
1026
|
+
}, ({ e, t, a, o, i, n }, _p$) => {
|
|
1027
|
+
className(_el$2, e, _p$?.e);
|
|
1028
|
+
className(_el$3, t, _p$?.t);
|
|
1029
|
+
className(_el$4, a, _p$?.a);
|
|
1030
|
+
className(_el$5, o, _p$?.o);
|
|
1031
|
+
i !== _p$?.i && setAttribute(_el$5, "disabled", i);
|
|
1032
|
+
className(_el$6, n, _p$?.n);
|
|
1033
|
+
});
|
|
1034
|
+
return _el$2;
|
|
1035
|
+
})(),
|
|
1036
|
+
(() => {
|
|
1037
|
+
var _el$7 = _tmpl$2();
|
|
1038
|
+
var _el$8 = _el$7.firstChild;
|
|
1039
|
+
var _el$9 = _el$8.firstChild;
|
|
1040
|
+
var _el$10 = _el$9.nextSibling;
|
|
1041
|
+
var _el$11 = _el$8.nextSibling;
|
|
1042
|
+
insert(_el$9, (() => {
|
|
1043
|
+
var _c$ = memo(() => {
|
|
1044
|
+
return settings().pages === null;
|
|
1045
|
+
});
|
|
1046
|
+
return () => {
|
|
1047
|
+
return _c$() ? `All ${paths().length} pages` : `${selected().length} of ${paths().length} pages`;
|
|
1048
|
+
};
|
|
1049
|
+
})());
|
|
1050
|
+
_el$10._$$click = () => setScreen("pages");
|
|
1051
|
+
insert(_el$11, pageDetail);
|
|
1052
|
+
effect(() => {
|
|
1053
|
+
return {
|
|
1054
|
+
e: `${p}-scope`,
|
|
1055
|
+
t: `${p}-row`,
|
|
1056
|
+
a: `${p}-quiet`,
|
|
1057
|
+
o: busy(),
|
|
1058
|
+
i: `${p}-small ${p}-page-detail`,
|
|
1059
|
+
n: pageDetail()
|
|
1060
|
+
};
|
|
1061
|
+
}, ({ e, t, a, o, i, n }, _p$) => {
|
|
1062
|
+
className(_el$7, e, _p$?.e);
|
|
1063
|
+
className(_el$8, t, _p$?.t);
|
|
1064
|
+
className(_el$10, a, _p$?.a);
|
|
1065
|
+
o !== _p$?.o && setAttribute(_el$10, "disabled", o);
|
|
1066
|
+
className(_el$11, i, _p$?.i);
|
|
1067
|
+
n !== _p$?.n && setAttribute(_el$11, "title", n);
|
|
1068
|
+
});
|
|
1069
|
+
return _el$7;
|
|
1070
|
+
})(),
|
|
1071
|
+
(() => {
|
|
1072
|
+
var _el$12 = _tmpl$3();
|
|
1073
|
+
var _el$13 = _el$12.firstChild;
|
|
1074
|
+
var _el$14 = _el$13.firstChild;
|
|
1075
|
+
var _el$15 = _el$13.nextSibling;
|
|
1076
|
+
_el$14.addEventListener("change", (event) => void save({
|
|
1077
|
+
...settings(),
|
|
1078
|
+
includeCanvas: event.currentTarget.checked
|
|
1079
|
+
}));
|
|
1080
|
+
_el$15._$$click = () => void ask("deploy", {
|
|
1081
|
+
site: site()?.siteId ?? null,
|
|
1082
|
+
settings: settings(),
|
|
1083
|
+
...settings().pages === null ? {} : { pages: selected() }
|
|
1084
|
+
});
|
|
1085
|
+
effect(() => {
|
|
1086
|
+
return {
|
|
1087
|
+
e: `${p}-row ${p}-publish-row`,
|
|
1088
|
+
t: `${p}-canvas-option`,
|
|
1089
|
+
a: settings().includeCanvas,
|
|
1090
|
+
o: busy(),
|
|
1091
|
+
i: `${p}-button ${p}-primary`,
|
|
1092
|
+
n: busy() || !status()?.checked || selected().length === 0
|
|
1093
|
+
};
|
|
1094
|
+
}, ({ e, t, a, o, i, n }, _p$) => {
|
|
1095
|
+
className(_el$12, e, _p$?.e);
|
|
1096
|
+
className(_el$13, t, _p$?.t);
|
|
1097
|
+
_el$14.checked = a;
|
|
1098
|
+
o !== _p$?.o && setAttribute(_el$14, "disabled", o);
|
|
1099
|
+
className(_el$15, i, _p$?.i);
|
|
1100
|
+
n !== _p$?.n && setAttribute(_el$15, "disabled", n);
|
|
1101
|
+
});
|
|
1102
|
+
return _el$12;
|
|
1103
|
+
})(),
|
|
1104
|
+
createComponent(Show, {
|
|
1105
|
+
get when() {
|
|
1106
|
+
return (memo(() => {
|
|
1107
|
+
return !!site();
|
|
1108
|
+
})() ? status()?.checked : site()) || notice();
|
|
1109
|
+
},
|
|
1110
|
+
get children() {
|
|
1111
|
+
var _el$16 = _tmpl$5();
|
|
1112
|
+
var _el$20 = _el$16.firstChild;
|
|
1113
|
+
insert(_el$16, createComponent(Show, {
|
|
1114
|
+
get when() {
|
|
1115
|
+
return memo(() => {
|
|
1116
|
+
return !!(site() && status()?.checked);
|
|
1117
|
+
})() ? isHttps(site().url) : site() && status()?.checked;
|
|
1118
|
+
},
|
|
1119
|
+
get children() {
|
|
1120
|
+
var _el$17 = _tmpl$4();
|
|
1121
|
+
var _el$18 = _el$17.firstChild;
|
|
1122
|
+
var _el$19 = _el$18.nextSibling;
|
|
1123
|
+
insert(_el$17, createComponent(CopyUrl, {
|
|
1124
|
+
prefix: p,
|
|
1125
|
+
get url() {
|
|
1126
|
+
return site().url;
|
|
1127
|
+
},
|
|
1128
|
+
label: "Copy URL"
|
|
1129
|
+
}), _el$18);
|
|
1130
|
+
insert(_el$17, createComponent(Show, {
|
|
1131
|
+
get when() {
|
|
1132
|
+
return hasSeparateCanvas(site());
|
|
1133
|
+
},
|
|
1134
|
+
get children() {
|
|
1135
|
+
return createComponent(CopyUrl, {
|
|
1136
|
+
prefix: p,
|
|
1137
|
+
get url() {
|
|
1138
|
+
return site().canvasUrl;
|
|
1139
|
+
},
|
|
1140
|
+
label: "Copy canvas URL"
|
|
1141
|
+
});
|
|
1142
|
+
}
|
|
1143
|
+
}), _el$19);
|
|
1144
|
+
effect(() => `${p}-share-actions`, (_v$, _$p) => {
|
|
1145
|
+
className(_el$17, _v$, _$p);
|
|
1146
|
+
});
|
|
1147
|
+
return _el$17;
|
|
1148
|
+
}
|
|
1149
|
+
}), _el$20);
|
|
1150
|
+
insert(_el$20, notice);
|
|
1151
|
+
effect(() => {
|
|
1152
|
+
return {
|
|
1153
|
+
e: `${p}-status-row`,
|
|
1154
|
+
t: `${p}-notice ${failure() ? `${p}-error` : published() ? `${p}-success` : ""}`,
|
|
1155
|
+
a: failure() ?? void 0
|
|
1156
|
+
};
|
|
1157
|
+
}, ({ e, t, a }, _p$) => {
|
|
1158
|
+
className(_el$16, e, _p$?.e);
|
|
1159
|
+
className(_el$20, t, _p$?.t);
|
|
1160
|
+
a !== _p$?.a && setAttribute(_el$20, "title", a);
|
|
1161
|
+
});
|
|
1162
|
+
return _el$16;
|
|
1163
|
+
}
|
|
1164
|
+
}),
|
|
1165
|
+
createComponent(Show, {
|
|
1166
|
+
get when() {
|
|
1167
|
+
return memo(() => {
|
|
1168
|
+
return !status()?.checked;
|
|
1169
|
+
})() && !busy();
|
|
1170
|
+
},
|
|
1171
|
+
get children() {
|
|
1172
|
+
var _el$21 = _tmpl$6();
|
|
1173
|
+
_el$21._$$click = () => {
|
|
1174
|
+
setSaid(null);
|
|
1175
|
+
watch();
|
|
1176
|
+
checkAccount();
|
|
1177
|
+
};
|
|
1178
|
+
effect(() => {
|
|
1179
|
+
return {
|
|
1180
|
+
e: `${p}-quiet`,
|
|
1181
|
+
t: failure() ?? void 0
|
|
1182
|
+
};
|
|
1183
|
+
}, ({ e, t }, _p$) => {
|
|
1184
|
+
className(_el$21, e, _p$?.e);
|
|
1185
|
+
t !== _p$?.t && setAttribute(_el$21, "title", t);
|
|
1186
|
+
});
|
|
1187
|
+
return _el$21;
|
|
1188
|
+
}
|
|
1189
|
+
})
|
|
1190
|
+
];
|
|
1191
|
+
}
|
|
1192
|
+
}),
|
|
1193
|
+
createComponent(Show, {
|
|
1194
|
+
get when() {
|
|
1195
|
+
return screen() === "pages";
|
|
1196
|
+
},
|
|
1197
|
+
get children() {
|
|
1198
|
+
return createComponent(Pages, {
|
|
1199
|
+
prefix: p,
|
|
1200
|
+
paths,
|
|
1201
|
+
get settings() {
|
|
1202
|
+
return settings();
|
|
1203
|
+
},
|
|
1204
|
+
busy,
|
|
1205
|
+
save,
|
|
1206
|
+
cancel: () => {
|
|
1207
|
+
setSaid(null);
|
|
1208
|
+
setScreen("overview");
|
|
1209
|
+
}
|
|
1210
|
+
});
|
|
1211
|
+
}
|
|
1212
|
+
}),
|
|
1213
|
+
createComponent(Show, {
|
|
1214
|
+
get when() {
|
|
1215
|
+
return screen() === "destination";
|
|
1216
|
+
},
|
|
1217
|
+
get children() {
|
|
1218
|
+
return createComponent(Destination, {
|
|
1219
|
+
dd,
|
|
1220
|
+
prefix: p,
|
|
1221
|
+
get status() {
|
|
1222
|
+
return status();
|
|
1223
|
+
},
|
|
1224
|
+
get accountName() {
|
|
1225
|
+
return account()?.name ?? "";
|
|
1226
|
+
},
|
|
1227
|
+
busy,
|
|
1228
|
+
save,
|
|
1229
|
+
cancel: () => {
|
|
1230
|
+
setSaid(null);
|
|
1231
|
+
setScreen("overview");
|
|
1232
|
+
}
|
|
1233
|
+
});
|
|
1234
|
+
}
|
|
1235
|
+
}),
|
|
1236
|
+
createComponent(Show, {
|
|
1237
|
+
get when() {
|
|
1238
|
+
return memo(() => {
|
|
1239
|
+
return screen() !== "overview";
|
|
1240
|
+
})() && failure();
|
|
1241
|
+
},
|
|
1242
|
+
get children() {
|
|
1243
|
+
var _el$22 = _tmpl$7();
|
|
1244
|
+
insert(_el$22, failure);
|
|
1245
|
+
effect(() => `${p}-small ${p}-error`, (_v$, _$p) => {
|
|
1246
|
+
className(_el$22, _v$, _$p);
|
|
1247
|
+
});
|
|
1248
|
+
return _el$22;
|
|
1249
|
+
}
|
|
1250
|
+
})
|
|
1251
|
+
];
|
|
1252
|
+
}
|
|
1253
|
+
});
|
|
1254
|
+
}
|
|
1255
|
+
}));
|
|
1256
|
+
effect(() => `${p}-panel`, (_v$, _$p) => {
|
|
1257
|
+
className(_el$, _v$, _$p);
|
|
1258
|
+
});
|
|
1259
|
+
return _el$;
|
|
1260
|
+
}
|
|
1261
|
+
delegateEvents(["click"]);
|
|
1262
|
+
function activate(dd) {
|
|
1263
|
+
dd.registerPanel({
|
|
1264
|
+
id: "netlify",
|
|
1265
|
+
title: "Netlify",
|
|
1266
|
+
styles: css(classPrefix(dd.plugin.id)),
|
|
1267
|
+
render: () => createNetlifyPanel(dd)
|
|
1268
|
+
});
|
|
1269
|
+
}
|
|
1270
|
+
export { activate as default };
|