@jxsuite/studio 6.0.0 → 6.1.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/chunks/{2020-cs2sb9t1.js → 2020-nkxms0ay.js} +3 -3
- package/dist/chunks/adapter-m948ab5f.js +4 -0
- package/dist/chunks/{cf-account-picker-bb2yq946.js → cf-account-picker-n8hr38v7.js} +3 -3
- package/dist/chunks/cf-settings-356xdtne.js +4 -0
- package/dist/chunks/components-yk3t844e.js +4 -0
- package/dist/chunks/content-source-bawmyc09.js +4 -0
- package/dist/chunks/{convert-to-repeater-vqkt7s3s.js → convert-to-repeater-7wns8kf1.js} +3 -3
- package/dist/chunks/editor-6sc8nacq.js +4 -0
- package/dist/chunks/entry-commands-8ay9fh81.js +4 -0
- package/dist/chunks/{extension-sections-8beq9ac3.js → extension-sections-na7rj3nr.js} +3 -3
- package/dist/chunks/file-ops-gye0qw56.js +4 -0
- package/dist/chunks/files-dmc2xvcq.js +4 -0
- package/dist/chunks/format-host-t76b53f8.js +4 -0
- package/dist/chunks/fs-events-cg4tpz06.js +4 -0
- package/dist/chunks/git-panel-yef7bshy.js +4 -0
- package/dist/chunks/{grid-view-ca10def6.js → grid-view-7tt4bxw1.js} +6 -6
- package/dist/chunks/iframe-host-tmz30gfp.js +4 -0
- package/dist/chunks/{index-9ydfe04y.js → index-gybvv7a6.js} +3 -3
- package/dist/chunks/index-nag78a9h.js +4 -0
- package/dist/chunks/{javascript-d9pqgc2p.js → javascript-rnvdp3k4.js} +2 -2
- package/dist/chunks/{jsonMode-800yvbem.js → jsonMode-zhwsprqk.js} +5 -5
- package/dist/chunks/jx-validate-3gbp5nkn.js +4 -0
- package/dist/chunks/layers-fvz99859.js +4 -0
- package/dist/chunks/layers-panel-gchmbf9p.js +4 -0
- package/dist/chunks/lit-html-9agdspkt.js +4 -0
- package/dist/chunks/media-picker-rhjvyy00.js +4 -0
- package/dist/chunks/menu-2e4y9j7b.js +4 -0
- package/dist/chunks/{monaco-binding-62dtmgbf.js → monaco-binding-2jnhjjvr.js} +3 -3
- package/dist/chunks/monaco-buffer-rp21359g.js +4 -0
- package/dist/chunks/{monaco-setup-tj13ndtm.js → monaco-setup-vhh7gayr.js} +3 -3
- package/dist/chunks/notify-h3www560.js +4 -0
- package/dist/chunks/platform-hz34wcd7.js +4 -0
- package/dist/chunks/publish-panel-exsmjzyj.js +4 -0
- package/dist/chunks/quick-search-pgaqeh0m.js +4 -0
- package/dist/chunks/references-2cgdxnb8.js +4 -0
- package/dist/chunks/right-panel-jf856w5w.js +4 -0
- package/dist/chunks/section-registry-jnf8r5gy.js +4 -0
- package/dist/chunks/studio-0f55h9ye.js +5 -0
- package/dist/chunks/{studio-hjbg8d5y.js → studio-0sqdhnew.js} +7 -7
- package/dist/chunks/{studio-1wvfxkyy.js → studio-0x3jyb8r.js} +4 -4
- package/dist/chunks/{studio-yr04mv2j.js → studio-19x1c75w.js} +4 -4
- package/dist/chunks/{studio-evwgp1ym.js → studio-2sqcndak.js} +4 -4
- package/dist/chunks/{studio-x5g1xk77.js → studio-3aey7dd3.js} +4 -4
- package/dist/chunks/{studio-xkfs0dp2.js → studio-3bpdkq2s.js} +4 -4
- package/dist/chunks/{studio-5gs9th4b.js → studio-47y6fbpf.js} +4 -4
- package/dist/chunks/{studio-e47215hh.js → studio-4m3826v2.js} +4 -4
- package/dist/chunks/studio-4nx2dj1g.js +4 -0
- package/dist/chunks/{studio-gjknvzam.js → studio-4xv5s47r.js} +5 -5
- package/dist/chunks/{studio-sxc0zvpt.js → studio-5g0ag7c0.js} +3 -3
- package/dist/chunks/{studio-semd1s8s.js → studio-5g4t8v6w.js} +4 -4
- package/dist/chunks/studio-5py436sf.js +5 -0
- package/dist/chunks/{studio-aje966s9.js → studio-77kt594t.js} +4 -4
- package/dist/chunks/{studio-3ck2a5c4.js → studio-8f87n763.js} +6 -6
- package/dist/chunks/studio-8mb00b84.js +5 -0
- package/dist/chunks/studio-8p51gq2h.js +6 -0
- package/dist/chunks/studio-954ds834.js +5 -0
- package/dist/chunks/{studio-capk0583.js → studio-9ft45c83.js} +6 -6
- package/dist/chunks/studio-a2138x5k.js +7 -0
- package/dist/chunks/studio-a9yzstqj.js +5 -0
- package/dist/chunks/{studio-gp02nqnw.js → studio-acdksxx6.js} +4 -4
- package/dist/chunks/{studio-edbtvcd1.js → studio-anyrgzvb.js} +4 -4
- package/dist/chunks/{studio-4r0sjtx8.js → studio-ar8jcf2y.js} +4 -4
- package/dist/chunks/{studio-rmn2dz59.js → studio-bmn4mn9j.js} +5 -5
- package/dist/chunks/{studio-03wwfvyt.js → studio-cpxkgjrj.js} +4 -4
- package/dist/chunks/{studio-7qvs7v0m.js → studio-e7xxa0sj.js} +4 -4
- package/dist/chunks/{studio-01qza1n3.js → studio-ecaz25vk.js} +4 -4
- package/dist/chunks/{studio-5e9zsamh.js → studio-fzdywr6p.js} +6 -6
- package/dist/chunks/{studio-xg1942as.js → studio-g5fmf0c1.js} +4 -4
- package/dist/chunks/{studio-1q6amtph.js → studio-g7nse7zb.js} +4 -4
- package/dist/chunks/studio-geq1ea6k.js +14 -0
- package/dist/chunks/{studio-n78gjfy8.js → studio-ghkb32r8.js} +4 -4
- package/dist/chunks/{studio-bftp4n4b.js → studio-ghrhy2y7.js} +4 -4
- package/dist/chunks/{studio-5d7wfmnp.js → studio-grawhey1.js} +4 -4
- package/dist/chunks/{studio-rr4xkv81.js → studio-h0xgswew.js} +4 -4
- package/dist/chunks/{studio-cbr9czkn.js → studio-h9c4p2tx.js} +4 -4
- package/dist/chunks/studio-jyzj5cxs.js +5 -0
- package/dist/chunks/{studio-x92tgnee.js → studio-mgx8yhnz.js} +31 -31
- package/dist/chunks/{studio-g8dsj3d2.js → studio-mpb04y1d.js} +5 -5
- package/dist/chunks/{studio-zev8ssp1.js → studio-n17mty64.js} +4 -4
- package/dist/chunks/{studio-4jj9gme2.js → studio-nwh2eqsk.js} +5 -5
- package/dist/chunks/{studio-8xcwewjq.js → studio-pxg4ap1e.js} +3 -3
- package/dist/chunks/{studio-4m50vh74.js → studio-q1h883bt.js} +5 -5
- package/dist/chunks/{studio-c6zdm25z.js → studio-q4tv82h7.js} +6 -6
- package/dist/chunks/{studio-st75kn99.js → studio-qbj760tx.js} +5 -5
- package/dist/chunks/{studio-y7jehjrp.js → studio-qpqa7vk3.js} +4 -4
- package/dist/chunks/{studio-5vy2wfm5.js → studio-qqz8e5gk.js} +4 -4
- package/dist/chunks/{studio-qa73881a.js → studio-qvasen3f.js} +4 -4
- package/dist/chunks/studio-rggdb3hm.js +5 -0
- package/dist/chunks/{studio-4xppwncr.js → studio-sghy936h.js} +3 -3
- package/dist/chunks/{studio-mk00zd5d.js → studio-skprc6ef.js} +4 -4
- package/dist/chunks/{studio-cqmtbg2p.js → studio-tt2nactf.js} +4 -4
- package/dist/chunks/{studio-ge5fqjth.js → studio-txjjzrsm.js} +5 -5
- package/dist/chunks/{studio-tmeq6mjb.js → studio-tyasmc39.js} +4 -4
- package/dist/chunks/{studio-0bbxhhce.js → studio-v2bvmbjj.js} +4 -4
- package/dist/chunks/{studio-pwqfmt4p.js → studio-vk9ezads.js} +4 -4
- package/dist/chunks/{studio-fqq890ap.js → studio-vzacdfsc.js} +3 -3
- package/dist/chunks/{studio-zd4kayn2.js → studio-w4c0xmrw.js} +4 -4
- package/dist/chunks/{studio-ztvcxm3w.js → studio-wfjqhhbk.js} +4 -4
- package/dist/chunks/{studio-tp642n5g.js → studio-wgh5kxpj.js} +4 -4
- package/dist/chunks/studio-xasj0796.js +5 -0
- package/dist/chunks/{studio-tzegmy4w.js → studio-y78s8r2n.js} +4 -4
- package/dist/chunks/{studio-7pgy3xaf.js → studio-z8w183sh.js} +4 -4
- package/dist/chunks/{studio-01kbbqg3.js → studio-zscd9ty4.js} +124 -124
- package/dist/chunks/{studio-hnvnfbdv.js → studio-zxp13sss.js} +6 -6
- package/dist/chunks/{studio-r3kaka4d.js → studio-zygnmm01.js} +4 -4
- package/dist/chunks/{tsMode-k9s9fcag.js → tsMode-gr0m4dzr.js} +5 -5
- package/dist/chunks/workspace-m15qtcqp.js +4 -0
- package/dist/chunks/{ws-client-0ja08haa.js → ws-client-nf61frr1.js} +3 -3
- package/dist/manifest.json +62 -62
- package/dist/studio.js +83 -83
- package/package.json +2 -2
- package/src/new-project/add-repo-modal.ts +459 -59
- package/src/platforms/cloud.ts +95 -18
- package/src/publish/pages-service.ts +7 -0
- package/src/publish/publish-panel.ts +16 -2
- package/src/surfaces/add-repo.json +721 -224
- package/src/surfaces/add-repo.ts +196 -31
- package/src/types.ts +42 -3
- package/src/utils/project-dir.ts +24 -0
- package/dist/chunks/adapter-y5gdq19c.js +0 -4
- package/dist/chunks/cf-settings-20dznc3j.js +0 -4
- package/dist/chunks/components-q037dya7.js +0 -4
- package/dist/chunks/content-source-t0q184js.js +0 -4
- package/dist/chunks/editor-j5sq149q.js +0 -4
- package/dist/chunks/entry-commands-fxzgcc4k.js +0 -4
- package/dist/chunks/file-ops-2n77759h.js +0 -4
- package/dist/chunks/files-fjy7zpxt.js +0 -4
- package/dist/chunks/format-host-wj3mf3n8.js +0 -4
- package/dist/chunks/fs-events-7kcgn4e9.js +0 -4
- package/dist/chunks/git-panel-7z2mpt2d.js +0 -4
- package/dist/chunks/iframe-host-a0zjd6xp.js +0 -4
- package/dist/chunks/index-m0x5ztax.js +0 -4
- package/dist/chunks/jx-validate-zc9zp77s.js +0 -4
- package/dist/chunks/layers-p677nrh5.js +0 -4
- package/dist/chunks/layers-panel-y4w1dq90.js +0 -4
- package/dist/chunks/lit-html-cfn61dn7.js +0 -4
- package/dist/chunks/media-picker-xg7yjpz9.js +0 -4
- package/dist/chunks/menu-fpekzj6w.js +0 -4
- package/dist/chunks/monaco-buffer-nn4dtx27.js +0 -4
- package/dist/chunks/notify-ahs57a2z.js +0 -4
- package/dist/chunks/platform-v9xyfkbx.js +0 -4
- package/dist/chunks/publish-panel-xtbfgg2r.js +0 -4
- package/dist/chunks/quick-search-d3a6m7j3.js +0 -4
- package/dist/chunks/references-99ws0b0m.js +0 -4
- package/dist/chunks/right-panel-31vbk5xp.js +0 -4
- package/dist/chunks/section-registry-b2yzp9sw.js +0 -4
- package/dist/chunks/studio-1a99w39s.js +0 -5
- package/dist/chunks/studio-4fde4a0x.js +0 -5
- package/dist/chunks/studio-84rtc120.js +0 -5
- package/dist/chunks/studio-aekhcdzw.js +0 -7
- package/dist/chunks/studio-aqmph6k4.js +0 -5
- package/dist/chunks/studio-chdmwwzw.js +0 -5
- package/dist/chunks/studio-cp1gbff9.js +0 -14
- package/dist/chunks/studio-fbx6twps.js +0 -6
- package/dist/chunks/studio-fthwn4kf.js +0 -5
- package/dist/chunks/studio-nbxqcgvf.js +0 -5
- package/dist/chunks/studio-t1eedsyx.js +0 -4
- package/dist/chunks/studio-vavmwshr.js +0 -5
- package/dist/chunks/workspace-5vmgsagj.js +0 -4
package/src/surfaces/add-repo.ts
CHANGED
|
@@ -3,29 +3,36 @@
|
|
|
3
3
|
* The repository picker as a mounted document.
|
|
4
4
|
*
|
|
5
5
|
* `new-project/add-repo-modal.ts` is the flow — it asks the platform which repositories the account
|
|
6
|
-
* link reaches,
|
|
6
|
+
* link reaches, which projects a chosen repository holds, adopts the one that was confirmed and
|
|
7
7
|
* resolves the promise its two entry points return — and this is the surface it draws into: the
|
|
8
|
-
* reactive scope the document reads, the
|
|
9
|
-
*
|
|
8
|
+
* reactive scope the document reads, the discriminants it branches on, and the mount that lives in
|
|
9
|
+
* the dialog layer until the flow takes it down.
|
|
10
|
+
*
|
|
11
|
+
* **Two fields, each with the list it drives.** The filter drives the repository list and the
|
|
12
|
+
* project-folder field drives the list of folders that repository holds a `project.json` in. A
|
|
13
|
+
* `jx-listbox` never takes focus (ui.md §5.3), so a list a reader can only click is a list a
|
|
14
|
+
* keyboard cannot reach; pairing each list with a field is what makes both of them operable from
|
|
15
|
+
* the keys — the palette's shape, twice. The folder field is also the answer when a list cannot be:
|
|
16
|
+
* a repository too large to scan, or a platform with no way to scan one.
|
|
10
17
|
*
|
|
11
18
|
* **The flow states facts; the surface derives what the document branches on.** Which repositories
|
|
12
|
-
* are visible,
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* anything" are two sentences with two different remedies.
|
|
19
|
+
* are visible, which one is chosen and which folders it holds are the flow's; whether that adds up
|
|
20
|
+
* to a list, a spinner or one of four different absences, which row id each listbox is told is
|
|
21
|
+
* active, and whether the dialog can be answered yet are {@link derive}'s.
|
|
16
22
|
*
|
|
17
23
|
* **Await the ELEMENT, not just the mount.** `mountSurface` resolving means the DOCUMENT rendered;
|
|
18
24
|
* a `jx-dialog`'s own template is one `connectedCallback` later, and `showModal` in between finds
|
|
19
25
|
* no `<dialog>` to open — the body is all there, correctly styled, and never shows. `whenReady` is
|
|
20
26
|
* shared with `surfaces/dialog.ts` and `surfaces/cf-account-picker.ts` rather than reimplemented.
|
|
21
27
|
*
|
|
22
|
-
* @docs studio/
|
|
28
|
+
* @docs studio/interface/welcome-screen
|
|
23
29
|
*/
|
|
24
30
|
|
|
25
31
|
import { reactive } from "../reactivity";
|
|
26
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
27
33
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
28
34
|
import { close as closeDialog, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
35
|
+
import { focusField } from "@jxsuite/ui/behaviors/textfield";
|
|
29
36
|
import { whenReady } from "./dialog";
|
|
30
37
|
import addRepoDoc from "./add-repo.json";
|
|
31
38
|
import type { SurfaceHandle } from "../ui/surface";
|
|
@@ -35,17 +42,23 @@ registerSurface("add-repo", addRepoDoc as unknown as JxDocument);
|
|
|
35
42
|
|
|
36
43
|
/** One repository, as the list draws it. Every field is already a string or a flag. */
|
|
37
44
|
export interface AddRepoRow {
|
|
38
|
-
/** `owner/name`, which is the row's key, its title and the text it leads with. */
|
|
45
|
+
/** `owner/name`, which is the row's key, its value, its title and the text it leads with. */
|
|
39
46
|
fullName: string;
|
|
40
|
-
/** The branch
|
|
47
|
+
/** The default branch, beside the name. */
|
|
41
48
|
meta: string;
|
|
42
49
|
/** The repository already carries the Jx topic, so it gets the badge. */
|
|
43
50
|
isJx: boolean;
|
|
44
51
|
isPrivate: boolean;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** One folder of the chosen repository that holds a `project.json`. */
|
|
55
|
+
export interface AddRepoLocation {
|
|
56
|
+
/** The folder, repository-relative and canonical; `""` is the root. The row's value. */
|
|
57
|
+
dir: string;
|
|
58
|
+
/** What the row says: the project's own name, else the folder's. */
|
|
59
|
+
label: string;
|
|
60
|
+
/** Where it is: `/` for the root, `sites/blog/` for a folder. */
|
|
61
|
+
path: string;
|
|
49
62
|
}
|
|
50
63
|
|
|
51
64
|
/** One way to widen what the GitHub App can reach. */
|
|
@@ -55,24 +68,50 @@ export interface AddRepoAccessLink {
|
|
|
55
68
|
title: string;
|
|
56
69
|
}
|
|
57
70
|
|
|
71
|
+
/** One entry of the account filter. `""` is every account. */
|
|
72
|
+
export interface AddRepoOwner {
|
|
73
|
+
value: string;
|
|
74
|
+
label: string;
|
|
75
|
+
}
|
|
76
|
+
|
|
58
77
|
/**
|
|
59
|
-
* Why the list is empty, when it is.
|
|
78
|
+
* Why the repository list is empty, when it is.
|
|
60
79
|
*
|
|
61
80
|
* Four, not one, because only two of them are the reader's to fix and each is fixed differently: a
|
|
62
81
|
* filter is cleared, write access is asked for, and an App that was never installed is installed.
|
|
63
82
|
*/
|
|
64
83
|
export type AddRepoEmptyState = "filter" | "write" | "install" | "none";
|
|
65
84
|
|
|
85
|
+
/**
|
|
86
|
+
* What the detail pane knows about the chosen repository's projects.
|
|
87
|
+
*
|
|
88
|
+
* - `none`: no repository is chosen yet.
|
|
89
|
+
* - `loading`: the platform is looking.
|
|
90
|
+
* - `listed`: it found at least one folder with a `project.json`.
|
|
91
|
+
* - `empty`: it looked and found none.
|
|
92
|
+
* - `unlisted`: the platform cannot look, so the folder is the reader's to name.
|
|
93
|
+
* - `failed`: the look itself failed; the folder field still works.
|
|
94
|
+
*/
|
|
95
|
+
export type AddRepoDetailState = "none" | "loading" | "listed" | "empty" | "unlisted" | "failed";
|
|
96
|
+
|
|
66
97
|
/** What the flow knows. Every one of these may change while the dialog is up. */
|
|
67
98
|
export interface AddRepoView {
|
|
68
99
|
/** The headline, which is also the dialog's accessible name: the two flows name themselves. */
|
|
69
100
|
title: string;
|
|
101
|
+
/** The primary answer: Open or Add, and the progressive form while an adoption runs. */
|
|
102
|
+
confirmLabel: string;
|
|
70
103
|
/** The filter text, held by the flow so a repaint cannot lose what the reader typed. */
|
|
71
104
|
filter: string;
|
|
105
|
+
/** The account the list is narrowed to; `""` is every account. */
|
|
106
|
+
owner: string;
|
|
107
|
+
/** The account filter's entries, "All accounts" first; empty hides it (one account, or none). */
|
|
108
|
+
owners: AddRepoOwner[];
|
|
72
109
|
/** The listing is in flight. Its own state, because "not yet asked" is not "reaches nothing". */
|
|
73
110
|
loading: boolean;
|
|
74
111
|
/** The repositories to draw, already filtered and ordered. */
|
|
75
112
|
rows: AddRepoRow[];
|
|
113
|
+
/** The chosen repository's full name; `""` when none is. It may be filtered out of `rows`. */
|
|
114
|
+
selected: string;
|
|
76
115
|
/** Which absence to say, read only when `rows` is empty and the listing has landed. */
|
|
77
116
|
emptyState: AddRepoEmptyState;
|
|
78
117
|
/** Where the GitHub App is installed from, for the sentence that offers to install it. */
|
|
@@ -81,6 +120,30 @@ export interface AddRepoView {
|
|
|
81
120
|
failure: string;
|
|
82
121
|
/** The access footer's links; empty for a platform with no account status to widen. */
|
|
83
122
|
access: AddRepoAccessLink[];
|
|
123
|
+
/** The chosen repository's projects, as far as the platform has looked. */
|
|
124
|
+
detailState: AddRepoDetailState;
|
|
125
|
+
/** The chosen repository's full name and the line beside it, for the pane's heading. */
|
|
126
|
+
detailName: string;
|
|
127
|
+
detailMeta: string;
|
|
128
|
+
/** The folders the chosen repository holds a `project.json` in. */
|
|
129
|
+
locations: AddRepoLocation[];
|
|
130
|
+
/** The folder field's text: the folder the dialog will open, `""` for the repository root. */
|
|
131
|
+
folder: string;
|
|
132
|
+
/**
|
|
133
|
+
* The same folder in its canonical spelling (`utils/project-dir.ts`), which is what a folder row
|
|
134
|
+
* is matched against: `sites/blog/` typed by hand is the `sites/blog` row.
|
|
135
|
+
*/
|
|
136
|
+
chosenFolder: string;
|
|
137
|
+
/** Why the folder field's text cannot be opened; `""` when it can. */
|
|
138
|
+
folderError: string;
|
|
139
|
+
/** The sentence under the folder field. */
|
|
140
|
+
folderHelp: string;
|
|
141
|
+
/** What confirming will do, said in one line; `""` when nothing is chosen. */
|
|
142
|
+
summary: string;
|
|
143
|
+
/** The dialog can be answered: a repository is chosen, its folder is usable, nothing is running. */
|
|
144
|
+
canConfirm: boolean;
|
|
145
|
+
/** An adoption is in flight. */
|
|
146
|
+
busy: boolean;
|
|
84
147
|
}
|
|
85
148
|
|
|
86
149
|
export interface AddRepoSurfaceOptions {
|
|
@@ -90,8 +153,22 @@ export interface AddRepoSurfaceOptions {
|
|
|
90
153
|
view: AddRepoView;
|
|
91
154
|
/** The reader typed in the filter field. The flow decides what it hides. */
|
|
92
155
|
onFilter: (value: string) => void;
|
|
93
|
-
/**
|
|
94
|
-
|
|
156
|
+
/** The reader narrowed the list to one account, or widened it to all of them (`""`). */
|
|
157
|
+
onOwner: (value: string) => void;
|
|
158
|
+
/** A repository row was chosen, by pointer or by the filter's arrows. */
|
|
159
|
+
onSelect: (fullName: string) => void;
|
|
160
|
+
/** The caret moved by `delta` rows through the visible repositories. */
|
|
161
|
+
onMove: (delta: number) => void;
|
|
162
|
+
/** The reader typed in the folder field. */
|
|
163
|
+
onFolder: (value: string) => void;
|
|
164
|
+
/** A folder row was chosen. */
|
|
165
|
+
onLocation: (dir: string) => void;
|
|
166
|
+
/** The caret moved by `delta` rows through the chosen repository's folders. */
|
|
167
|
+
onMoveLocation: (delta: number) => void;
|
|
168
|
+
/** Open what is chosen: the confirm button, Enter in either field, or a double-click on a row. */
|
|
169
|
+
onConfirm: () => void;
|
|
170
|
+
/** A repository row was double-clicked: choose it and open it as soon as that is unambiguous. */
|
|
171
|
+
onOpenRepo: (fullName: string) => void;
|
|
95
172
|
/** Read the listing again, after access was granted in another tab. */
|
|
96
173
|
onRefresh: () => void;
|
|
97
174
|
/** The dialog closed, for any reason the platform owns as well as this module's `close`. */
|
|
@@ -109,43 +186,101 @@ export interface AddRepoSurfaceHandle {
|
|
|
109
186
|
close: () => void;
|
|
110
187
|
}
|
|
111
188
|
|
|
189
|
+
/** A repository row with the id its listbox addresses it by. */
|
|
190
|
+
interface DrawnRow extends AddRepoRow {
|
|
191
|
+
id: string;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** A folder row with the id its listbox addresses it by. */
|
|
195
|
+
interface DrawnLocation extends AddRepoLocation {
|
|
196
|
+
id: string;
|
|
197
|
+
}
|
|
198
|
+
|
|
112
199
|
/** What the document discriminates on, and the flags it reads. Derived, never handed in. */
|
|
113
200
|
interface AddRepoFlags {
|
|
114
201
|
/**
|
|
115
|
-
* Which body
|
|
202
|
+
* Which body the repository pane draws.
|
|
116
203
|
*
|
|
117
204
|
* Six, because a spinner, a list and four absences are six different things to say and only one
|
|
118
205
|
* of them is fixed by looking again.
|
|
119
206
|
*/
|
|
120
207
|
listState: "loading" | "listed" | "empty-filter" | "empty-write" | "empty-install" | "empty-none";
|
|
121
|
-
|
|
208
|
+
rows: DrawnRow[];
|
|
209
|
+
locations: DrawnLocation[];
|
|
210
|
+
/** The id each listbox is told is active: one string per list (ui.md §5.3); `""` for none. */
|
|
211
|
+
activeRepoId: string;
|
|
212
|
+
activeLocationId: string;
|
|
213
|
+
/** Whether there is more than one account to narrow by. */
|
|
214
|
+
hasOwners: boolean;
|
|
215
|
+
/** Whether a refusal sits above the panes that survived it. */
|
|
122
216
|
hasFailure: boolean;
|
|
123
217
|
/** Whether there is anything to offer in the access footer. */
|
|
124
218
|
hasAccess: boolean;
|
|
125
|
-
/**
|
|
219
|
+
/** Whether a repository is chosen, so the folder field has something to name a folder of. */
|
|
220
|
+
hasDetail: boolean;
|
|
221
|
+
/** Whether the folder field's text is refused. */
|
|
222
|
+
folderInvalid: boolean;
|
|
223
|
+
/** Refresh cannot re-ask while the answer is still coming, or while an adoption runs. */
|
|
126
224
|
refreshDisabled: boolean;
|
|
225
|
+
/** The confirm button's state, the inverse of `canConfirm`. */
|
|
226
|
+
confirmDisabled: boolean;
|
|
127
227
|
}
|
|
128
228
|
|
|
129
|
-
interface AddRepoScope
|
|
229
|
+
interface AddRepoScope
|
|
230
|
+
extends Record<string, unknown>, Omit<AddRepoView, "rows" | "locations">, AddRepoFlags {
|
|
130
231
|
setFilter: (value: string) => void;
|
|
131
|
-
|
|
232
|
+
setOwner: (value: string) => void;
|
|
233
|
+
select: (fullName: string) => void;
|
|
234
|
+
move: (delta: number) => void;
|
|
235
|
+
setFolder: (value: string) => void;
|
|
236
|
+
pickLocation: (dir: string) => void;
|
|
237
|
+
moveLocation: (delta: number) => void;
|
|
238
|
+
confirm: () => void;
|
|
239
|
+
openRepo: (fullName: string) => void;
|
|
132
240
|
refresh: () => void;
|
|
133
241
|
closed: () => void;
|
|
134
242
|
}
|
|
135
243
|
|
|
244
|
+
/** The id the repository list addresses row `index` by. */
|
|
245
|
+
export function repoRowId(index: number): string {
|
|
246
|
+
return `add-repo-repo-${index}`;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/** The id the folder list addresses row `index` by. */
|
|
250
|
+
export function locationRowId(index: number): string {
|
|
251
|
+
return `add-repo-location-${index}`;
|
|
252
|
+
}
|
|
253
|
+
|
|
136
254
|
/** The view plus the flags the document renders from. */
|
|
137
|
-
function derive(view: AddRepoView): AddRepoView & AddRepoFlags {
|
|
138
|
-
const
|
|
255
|
+
function derive(view: AddRepoView): Omit<AddRepoView, "rows" | "locations"> & AddRepoFlags {
|
|
256
|
+
const rows = view.rows.map((row, index) => ({ ...row, id: repoRowId(index) }));
|
|
257
|
+
const locations = view.locations.map((location, index) => ({
|
|
258
|
+
...location,
|
|
259
|
+
id: locationRowId(index),
|
|
260
|
+
}));
|
|
261
|
+
const activeRow = rows.find((row) => row.fullName === view.selected);
|
|
262
|
+
const activeLocation =
|
|
263
|
+
view.folderError === ""
|
|
264
|
+
? locations.find((location) => location.dir === view.chosenFolder)
|
|
265
|
+
: undefined;
|
|
139
266
|
return {
|
|
140
267
|
...view,
|
|
268
|
+
activeLocationId: activeLocation?.id ?? "",
|
|
269
|
+
activeRepoId: activeRow?.id ?? "",
|
|
270
|
+
confirmDisabled: !view.canConfirm,
|
|
271
|
+
folderInvalid: view.folderError !== "",
|
|
141
272
|
hasAccess: view.access.length > 0,
|
|
273
|
+
hasDetail: view.detailState !== "none",
|
|
142
274
|
hasFailure: view.failure !== "",
|
|
275
|
+
hasOwners: view.owners.length > 0,
|
|
143
276
|
listState: view.loading
|
|
144
277
|
? "loading"
|
|
145
|
-
:
|
|
278
|
+
: rows.length > 0
|
|
146
279
|
? "listed"
|
|
147
280
|
: (`empty-${view.emptyState}` as AddRepoFlags["listState"]),
|
|
148
|
-
|
|
281
|
+
locations,
|
|
282
|
+
refreshDisabled: view.loading || view.busy,
|
|
283
|
+
rows,
|
|
149
284
|
};
|
|
150
285
|
}
|
|
151
286
|
|
|
@@ -177,21 +312,44 @@ export function openAddRepoSurface(options: AddRepoSurfaceOptions): AddRepoSurfa
|
|
|
177
312
|
|
|
178
313
|
const scope = reactive({
|
|
179
314
|
...derive(options.view),
|
|
180
|
-
choose: (fullName: string) => {
|
|
181
|
-
options.onChoose(fullName);
|
|
182
|
-
},
|
|
183
315
|
closed: finish,
|
|
316
|
+
confirm: () => {
|
|
317
|
+
options.onConfirm();
|
|
318
|
+
},
|
|
319
|
+
move: (delta: number) => {
|
|
320
|
+
options.onMove(delta);
|
|
321
|
+
},
|
|
322
|
+
moveLocation: (delta: number) => {
|
|
323
|
+
options.onMoveLocation(delta);
|
|
324
|
+
},
|
|
325
|
+
openRepo: (fullName: string) => {
|
|
326
|
+
options.onOpenRepo(fullName);
|
|
327
|
+
},
|
|
328
|
+
pickLocation: (dir: string) => {
|
|
329
|
+
options.onLocation(dir);
|
|
330
|
+
},
|
|
184
331
|
refresh: () => {
|
|
185
332
|
options.onRefresh();
|
|
186
333
|
},
|
|
334
|
+
select: (fullName: string) => {
|
|
335
|
+
options.onSelect(fullName);
|
|
336
|
+
},
|
|
187
337
|
setFilter: (value: string) => {
|
|
188
338
|
/* What the control holds, first and unconditionally. A binding only writes when the scope
|
|
189
339
|
CHANGES, so a surface that decided a value without announcing the raw one would leave the
|
|
190
|
-
field showing text the scope does not have (`studio-ui-guidelines.md` §9.3).
|
|
191
|
-
refuses a filter today; the echo is what makes a refusal possible at all. */
|
|
340
|
+
field showing text the scope does not have (`studio-ui-guidelines.md` §9.3). */
|
|
192
341
|
scope.filter = value;
|
|
193
342
|
options.onFilter(value);
|
|
194
343
|
},
|
|
344
|
+
setFolder: (value: string) => {
|
|
345
|
+
// The same echo as the filter's, for the same reason.
|
|
346
|
+
scope.folder = value;
|
|
347
|
+
options.onFolder(value);
|
|
348
|
+
},
|
|
349
|
+
setOwner: (value: string) => {
|
|
350
|
+
scope.owner = value;
|
|
351
|
+
options.onOwner(value);
|
|
352
|
+
},
|
|
195
353
|
}) as AddRepoScope;
|
|
196
354
|
|
|
197
355
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -207,6 +365,13 @@ export function openAddRepoSurface(options: AddRepoSurfaceOptions): AddRepoSurfa
|
|
|
207
365
|
return element;
|
|
208
366
|
}
|
|
209
367
|
showModal(element);
|
|
368
|
+
/* The body claims focus (studio-ui-guidelines.md §8.7): the filter is where every way of
|
|
369
|
+
choosing starts, and the confirm button that would otherwise take it is disabled until a
|
|
370
|
+
repository is chosen, which leaves the platform nothing to land on. */
|
|
371
|
+
const filter = element.querySelector<HTMLElement>('[part="filter"]');
|
|
372
|
+
if (filter) {
|
|
373
|
+
focusField(filter);
|
|
374
|
+
}
|
|
210
375
|
return element;
|
|
211
376
|
});
|
|
212
377
|
|
package/src/types.ts
CHANGED
|
@@ -189,6 +189,33 @@ export interface RepoInfo {
|
|
|
189
189
|
isJxProject: boolean;
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
+
/**
|
|
193
|
+
* One folder of a repository that holds a `project.json`, as `StudioPlatform.listRepoProjects`
|
|
194
|
+
* finds it: a place Open Project can start a session from.
|
|
195
|
+
*/
|
|
196
|
+
export interface RepoProjectLocation {
|
|
197
|
+
/**
|
|
198
|
+
* The folder, relative to the repository root, without leading or trailing slashes; `""` is the
|
|
199
|
+
* root.
|
|
200
|
+
*/
|
|
201
|
+
dir: string;
|
|
202
|
+
/** The `name` its `project.json` declares, when the platform read one; absent otherwise. */
|
|
203
|
+
name?: string;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Every project a repository holds, as far as the platform could look. */
|
|
207
|
+
export interface RepoProjects {
|
|
208
|
+
/** The branch the scan read: the repository's default branch. */
|
|
209
|
+
branch: string;
|
|
210
|
+
/** Each folder holding a `project.json`, the root first and the rest in path order. */
|
|
211
|
+
locations: RepoProjectLocation[];
|
|
212
|
+
/**
|
|
213
|
+
* The repository was too large to list in one read, so a project may exist that `locations` does
|
|
214
|
+
* not name. The picker offers a typed folder when this is set.
|
|
215
|
+
*/
|
|
216
|
+
truncated: boolean;
|
|
217
|
+
}
|
|
218
|
+
|
|
192
219
|
/**
|
|
193
220
|
* Where a new project is written. The New Project modal collects this from the user and the backend
|
|
194
221
|
* MUST honor it — no backend may pick a destination on its own (see
|
|
@@ -727,12 +754,24 @@ export interface StudioPlatform {
|
|
|
727
754
|
* local platforms omit it (the OS picker / clone flow covers them).
|
|
728
755
|
*/
|
|
729
756
|
listRepos?: () => Promise<RepoInfo[]>;
|
|
757
|
+
/**
|
|
758
|
+
* The folders of a repository that hold a `project.json` — the project locations Open Project
|
|
759
|
+
* offers once a repository is chosen, so a project that lives in a subfolder (a monorepo's
|
|
760
|
+
* `sites/marketing`) can be opened as itself. Optional beside `listRepos`: without it the picker
|
|
761
|
+
* opens a repository at its root, as it always has.
|
|
762
|
+
*/
|
|
763
|
+
listRepoProjects?: (repo: { owner: string; name: string }) => Promise<RepoProjects>;
|
|
730
764
|
/**
|
|
731
765
|
* Adopt an existing repository as a Jx project and return its catalogue root key (openable via
|
|
732
|
-
* the recent-projects path).
|
|
733
|
-
*
|
|
766
|
+
* the recent-projects path). `dir` names the folder that holds the `project.json`, relative to
|
|
767
|
+
* the repository root; absent or `""` is the root. Rejects with a structured message when that
|
|
768
|
+
* folder carries no project.json.
|
|
734
769
|
*/
|
|
735
|
-
importProject?: (opts: {
|
|
770
|
+
importProject?: (opts: {
|
|
771
|
+
owner: string;
|
|
772
|
+
name: string;
|
|
773
|
+
dir?: string;
|
|
774
|
+
}) => Promise<{ root: string }>;
|
|
736
775
|
/**
|
|
737
776
|
* Open a pull request for the current branch. Cloud platforms implement it against their session;
|
|
738
777
|
* local platforms omit it and Studio falls back to a direct GitHub API call with the user's
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A project folder in its one canonical spelling: slash-separated, no leading, trailing or doubled
|
|
3
|
+
* slashes, `""` for the repository root. Null for a path that climbs (`..`) or names itself (`.`),
|
|
4
|
+
* which no project location can be.
|
|
5
|
+
*
|
|
6
|
+
* Canonical because the folder is part of a cloud project's IDENTITY — the root key Recent stores,
|
|
7
|
+
* the editor URL, and the session the backend keys a working tree on — so `sites/a/` and `/sites/a`
|
|
8
|
+
* must not become two projects, two Recent rows and two sessions over the same files. The cloud
|
|
9
|
+
* adapter spells the grammar on the wire with this function, and Open Project's folder field checks
|
|
10
|
+
* what the reader typed with it, so the field can never accept a folder the adapter would refuse.
|
|
11
|
+
*
|
|
12
|
+
* @param dir - The folder as typed, listed or parsed
|
|
13
|
+
* @returns The canonical folder, or null when it is not one
|
|
14
|
+
*/
|
|
15
|
+
export function normalizeProjectDir(dir: string): string | null {
|
|
16
|
+
const segments = dir
|
|
17
|
+
.trim()
|
|
18
|
+
.replaceAll("\\", "/")
|
|
19
|
+
.split("/")
|
|
20
|
+
.filter((segment) => segment !== "");
|
|
21
|
+
return segments.some((segment) => segment === "." || segment === "..")
|
|
22
|
+
? null
|
|
23
|
+
: segments.join("/");
|
|
24
|
+
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Rf,$_,D_,h$,A_}from"./studio-1a99w39s.js";import"./studio-semd1s8s.js";import"./studio-y7jehjrp.js";import"./studio-fqq890ap.js";export{A_ as clearCfConnection,D_ as getCfAccountId,Rf as getCfToken,h$ as setCfAccountId,$_ as setCfToken};
|
|
2
|
-
|
|
3
|
-
//# debugId=E35D3D83D56705F164756E2164756E21
|
|
4
|
-
//# sourceMappingURL=cf-settings-20dznc3j.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{st,Dl,MC,um,xc}from"./studio-pwqfmt4p.js";import"./studio-y7jehjrp.js";export{um as buildComponentInstance,st as componentRegistry,xc as computeRelativePath,Dl as loadComponentRegistry,MC as noteComponentSaved};
|
|
2
|
-
|
|
3
|
-
//# debugId=FD1EDA888A02A57364756E2164756E21
|
|
4
|
-
//# sourceMappingURL=components-q037dya7.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{gb,Fw,L1,I1,R1,$1}from"./studio-xg1942as.js";import"./studio-qa73881a.js";import"./studio-mk00zd5d.js";import"./studio-fbx6twps.js";import"./studio-capk0583.js";import"./studio-aekhcdzw.js";import"./studio-bftp4n4b.js";import"./studio-rmn2dz59.js";import"./studio-yr04mv2j.js";import"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{Fw as collectionDirs,gb as collectionInfo,R1 as createCollectionSource,$1 as createPagesSource,L1 as listCollectionEntryIds,I1 as reloadDraftAwareGrids};
|
|
2
|
-
|
|
3
|
-
//# debugId=7E99BE8FB92EAF4964756E2164756E21
|
|
4
|
-
//# sourceMappingURL=content-source-t0q184js.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{i$,zh,o$,r$,s$,gu,a$,l$,Ns,jy,sc,c$,Tn,pe}from"./studio-01kbbqg3.js";export{i$ as CancellationTokenSource,zh as Emitter,o$ as KeyCode,r$ as KeyMod,Ns as MarkerSeverity,jy as MarkerTag,s$ as Position,gu as Range,a$ as Selection,l$ as SelectionDirection,c$ as Token,sc as Uri,Tn as editor,pe as languages};
|
|
2
|
-
|
|
3
|
-
//# debugId=1BF5DF5C74949B6C64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=editor-j5sq149q.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Ew,v1}from"./studio-cbr9czkn.js";import"./studio-84rtc120.js";import"./studio-zev8ssp1.js";import"./studio-8xcwewjq.js";import"./studio-xg1942as.js";import"./studio-qa73881a.js";import"./studio-mk00zd5d.js";import"./studio-fbx6twps.js";import"./studio-capk0583.js";import"./studio-aekhcdzw.js";import"./studio-bftp4n4b.js";import"./studio-rmn2dz59.js";import"./studio-yr04mv2j.js";import"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";import"./studio-k1wvtp03.js";export{Ew as createEntry,v1 as registerContentCommands};
|
|
2
|
-
|
|
3
|
-
//# debugId=6033AE28DF14D98E64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=entry-commands-fxzgcc4k.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Er,D1,A1,op,N1,Jf,Yf}from"./studio-qa73881a.js";import"./studio-mk00zd5d.js";import"./studio-fbx6twps.js";import"./studio-capk0583.js";import"./studio-aekhcdzw.js";import"./studio-bftp4n4b.js";import"./studio-rmn2dz59.js";import"./studio-yr04mv2j.js";import"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{Jf as confirmFileDelete,N1 as exportFile,D1 as parseCollabSource,Er as parseSourceForPath,Yf as renamePromptMessage,op as saveFile,A1 as setDocumentSavedListener};
|
|
2
|
-
|
|
3
|
-
//# debugId=8178505254E52C1864756E2164756E21
|
|
4
|
-
//# sourceMappingURL=file-ops-2n77759h.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{To,Z_,X_,Q_,fw,jf,e1,t1,mw,cE,t$,Lo,gw,n1,i1,ep,o1}from"./studio-hnvnfbdv.js";import"./studio-5vy2wfm5.js";import"./studio-ge5fqjth.js";import"./studio-fthwn4kf.js";import"./studio-84rtc120.js";import"./studio-3ck2a5c4.js";import"./studio-8xcwewjq.js";import"./studio-xg1942as.js";import"./studio-qa73881a.js";import"./studio-mk00zd5d.js";import"./studio-fbx6twps.js";import"./studio-capk0583.js";import"./studio-aekhcdzw.js";import"./studio-bftp4n4b.js";import"./studio-rmn2dz59.js";import"./studio-yr04mv2j.js";import"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{mw as createFileIn,fw as findHomePage,Q_ as initProjectRepo,To as loadDirectory,Z_ as loadProject,cE as notifyMoveOutcome,gw as openFileInPane,Lo as openFileInTab,jf as openLastSessionOrHome,X_ as openProject,t1 as registerFileTreeDnD,o1 as registerFilesPanel,n1 as reloadCleanTab,ep as reloadFileInTab,i1 as reloadTabsIfChanged,e1 as renderFilesTemplate,t$ as settleRename};
|
|
2
|
-
|
|
3
|
-
//# debugId=680868955B4EBCC064756E2164756E21
|
|
4
|
-
//# sourceMappingURL=files-fjy7zpxt.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{qt,Md,Pd,$m,Lv,Ga,Tp,Vs,wi,Lp,Zt,Ka,Dr,ck,Us,dk}from"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";export{Dr as defaultContentFormat,Ka as documentExtensions,Vs as formatByExtension,wi as formatByName,Zt as formatForPath,ck as formatParse,Us as formatSerialize,Lv as getExtensionCatalog,$m as getExtensions,Tp as getFormats,Pd as loadExtensions,qt as loadFormats,Lp as noFormatError,Ga as refreshExtensionUi,Md as refreshFormats,dk as splitFormatDocument};
|
|
2
|
-
|
|
3
|
-
//# debugId=C6A38191EA46416364756E2164756E21
|
|
4
|
-
//# sourceMappingURL=format-host-wj3mf3n8.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Ps,mc,O1}from"./studio-mk00zd5d.js";import"./studio-yr04mv2j.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{mc as isRecentLocal,Ps as markLocalMutation,O1 as startFsSync};
|
|
2
|
-
|
|
3
|
-
//# debugId=FF74ADED3812ACE764756E2164756E21
|
|
4
|
-
//# sourceMappingURL=fs-events-7kcgn4e9.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{dc,a1,xw,_w,l1,c1,d1,Bf,u1}from"./studio-5vy2wfm5.js";import"./studio-ge5fqjth.js";import"./studio-fthwn4kf.js";import"./studio-capk0583.js";import"./studio-aekhcdzw.js";import"./studio-bftp4n4b.js";import"./studio-rmn2dz59.js";import"./studio-yr04mv2j.js";import"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{Bf as cleanupGitPanel,xw as cloneRepository,l1 as loadDiffForLens,a1 as noteFileSaved,_w as platformSupportsClone,dc as refreshGitStatus,u1 as registerGitPanel,d1 as registerSourceControlCommands,c1 as renderGitPanel};
|
|
2
|
-
|
|
3
|
-
//# debugId=26F3E292C838E66E64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=git-panel-7z2mpt2d.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{nC,iC,oC,rC,sC,sm,am,fx,za,aC,lC,lm,n$,b$,cC,Rl,Hb,Bb,dC,uC,hC,pC,fC,mC,gC,bC,vC,yC,wC,xC,mx,_C,cm,CC,kC,SC,EC,TC,LC,zb,IC,Wa,RC,Cd,$C,Wb,gx}from"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{cC as adoptCanvasPreviewMode,iC as allowAutoRequestsOnNextRender,am as beginDragSession,aC as canvasIdleBlockers,lC as canvasPointAt,Bb as clearDropIndicator,Wb as commitActiveEditSession,fx as currentDragSession,_C as dragHostTab,Hb as endDragSession,rC as flushCanvasEdits,gx as getEditBarAnchorRect,Wa as getEditSnapshot,za as hostDragGeometry,sC as hostForCanvas,gC as isCaretActive,sm as liveDragHostAt,b$ as measureInCanvas,CC as mountIframeCanvas,kC as mountStylebookCanvas,IC as panToStylebookTag,Cd as postApplyFormat,SC as postColorSchemeToLiveHosts,xC as postDialogOpen,Rl as postDragMessage,EC as postLocaleToLiveHosts,$C as postOpenSlash,mx as postPatchToHosts,wC as postPopoverOpen,TC as postRedefineElementToLiveHosts,LC as postSiteStyleToLiveHosts,zb as postStyleUpdateToStylebookHosts,cm as releaseCanvasHosts,oC as requestCanvasEval,lm as revealCanvasPath,n$ as revealCanvasPathIn,nC as sawIframeDragOver,fC as setCanvasContextMenuHandler,vC as setCanvasPointerDownHandler,pC as setCanvasSlashHandler,hC as setFileDropHandler,yC as setIframePatchEscalation,uC as setInsertZoneClickHandler,RC as setKeymapSource,dC as setNativeDragEnterHandler,mC as setStylebookHitHandler,bC as setToolbarRefresh};
|
|
2
|
-
|
|
3
|
-
//# debugId=31012BBC4949E6D164756E2164756E21
|
|
4
|
-
//# sourceMappingURL=iframe-host-a0zjd6xp.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{sS,aS,lS,cS,dS,Xc,uS,_f,hS,Wh,pS,Qc,PR,By,m_,FR,jR,HR,BR,ed,zR,WR,VR,g_,b_,UR,qR,GR,KR,v_,JR}from"./studio-4xppwncr.js";import{ac,zy,Cf,YR,bS,vS,yS,wS,Ef,w_,x_}from"./studio-c6zdm25z.js";import{ls,f$}from"./studio-tzegmy4w.js";import{Ae,Od,Ic,Im}from"./studio-evwgp1ym.js";export{dS as COLLAB_SCHEMA_VERSION,ed as CollabPathError,Ef as EnvelopeError,vS as FRAME_AWARENESS,wS as FRAME_CONTROL,yS as FRAME_DOC_CLOSE,bS as FRAME_DOC_SYNC,aS as FRONTMATTER_KEY,jR as LOCAL_ORIGIN,sS as META_KEY,HR as MIRROR_ORIGIN,v_ as PRESENCE_PALETTE,BR as SEED_ORIGIN,cS as SOURCE_KEY,lS as STRUCTURE_KEY,YR as UndoManager,ac as YDoc,UR as acquireSourceCanonical,Im as applyDocOpToDoc,zR as applyDocOpsToY,g_ as canonicalOf,b_ as canonicalRevOf,Ic as childArray,Ae as cloneValue,JR as colorForKey,Cf as createAbsolutePositionFromRelativePosition,zy as createRelativePositionFromTypeIndex,x_ as decodeFrame,ls as deepEqual,f$ as diffDocs,w_ as encodeFrame,uS as frontmatterMap,Od as getNodeAtPath,KR as isSourceReconciler,Xc as metaMap,GR as otherSourceEditors,qR as releaseSourceCanonical,VR as replaceYStructure,By as resolveYPath,FR as seedStructure,hS as sourceText,_f as structureMap,Wh as toYChildren,pS as toYNode,m_ as updateSourceText,PR as yDocToJson,WR as yEventsToDocOps,Qc as yValueToJson};
|
|
2
|
-
|
|
3
|
-
//# debugId=68D0F981E96017D864756E2164756E21
|
|
4
|
-
//# sourceMappingURL=index-m0x5ztax.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Ct,mk,Am,Xo,Bx,Nn,vs,Nm,gk}from"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{Nm as clearLayerSlot,vs as getLayerSlot,mk as initLayers,Am as isModalOpen,Ct as layerHost,gk as overlayIdleBlockers,Xo as showConfirmDialog,Nn as showPromptDialog,Bx as showSaveDiscardDialog};
|
|
2
|
-
|
|
3
|
-
//# debugId=0F30FA765389BA1D64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=layers-p677nrh5.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{ZR,L_}from"./studio-4jj9gme2.js";import"./studio-gjknvzam.js";import"./studio-g8dsj3d2.js";import"./studio-4r0sjtx8.js";import"./studio-fthwn4kf.js";import"./studio-zev8ssp1.js";import"./studio-8xcwewjq.js";import"./studio-fbx6twps.js";import"./studio-rmn2dz59.js";import"./studio-yr04mv2j.js";import"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";import"./studio-k1wvtp03.js";export{L_ as registerLayersPanel,ZR as startLayerTitleEdit};
|
|
2
|
-
|
|
3
|
-
//# debugId=57B1EF3CE90DB11F64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=layers-panel-y4w1dq90.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Y_,XR,QR,e$,cd,uw}from"./studio-4r0sjtx8.js";import"./studio-fthwn4kf.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{Y_ as invalidateMediaCache,cd as mountMediaPicker,e$ as pickAndUpload,XR as showMediaPickerPopover,uw as unmountMediaPicker,QR as uploadAndAssign};
|
|
2
|
-
|
|
3
|
-
//# debugId=04D480B7388D37A964756E2164756E21
|
|
4
|
-
//# sourceMappingURL=media-picker-xg7yjpz9.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Nt}from"./studio-8xcwewjq.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{Nt as openMenu};
|
|
2
|
-
|
|
3
|
-
//# debugId=FDE80DD45A9F62A564756E2164756E21
|
|
4
|
-
//# sourceMappingURL=menu-fpekzj6w.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Yu,km,Sm,ik,Ec,Zu,kp,Em}from"./studio-7pgy3xaf.js";import"./studio-fqq890ap.js";export{Yu as BUFFER_COMMIT,Ec as bufferIsLive,Zu as bufferMovedOn,km as bufferWrites,ik as cancelBufferWrites,Sm as commitBufferWrites,kp as commitTabBuffers,Em as tabBufferUnsaved};
|
|
2
|
-
|
|
3
|
-
//# debugId=EFF2E13B87F596CD64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=monaco-buffer-nn4dtx27.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{__,u$}from"./studio-chdmwwzw.js";import"./studio-1a99w39s.js";import"./studio-aekhcdzw.js";import"./studio-bftp4n4b.js";import"./studio-4m50vh74.js";import"./studio-semd1s8s.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{u$ as openPublishPanel,__ as seedPublishConnected};
|
|
2
|
-
|
|
3
|
-
//# debugId=E76105DB74DC57E164756E2164756E21
|
|
4
|
-
//# sourceMappingURL=publish-panel-xtbfgg2r.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{P_,$f}from"./studio-rr4xkv81.js";import"./studio-hnvnfbdv.js";import"./studio-5vy2wfm5.js";import"./studio-ge5fqjth.js";import"./studio-fthwn4kf.js";import"./studio-84rtc120.js";import"./studio-3ck2a5c4.js";import"./studio-8xcwewjq.js";import"./studio-xg1942as.js";import"./studio-qa73881a.js";import"./studio-mk00zd5d.js";import"./studio-fbx6twps.js";import"./studio-capk0583.js";import"./studio-aekhcdzw.js";import"./studio-bftp4n4b.js";import"./studio-rmn2dz59.js";import"./studio-yr04mv2j.js";import"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";export{P_ as initQuickSearch,$f as openQuickSearch};
|
|
2
|
-
|
|
3
|
-
//# debugId=FBCA3E582BA9D67D64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=quick-search-d3a6m7j3.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Rb,yc,js,U1,ua,tm,q1,nm}from"./studio-yr04mv2j.js";import"./studio-y7jehjrp.js";import"./studio-ery42sqr.js";export{ua as invalidateUsages,js as loadUsages,yc as peekUsages,U1 as retryUsages,nm as usageFiles,tm as usageHeadline,q1 as usageWarning,Rb as usagesSupported};
|
|
2
|
-
|
|
3
|
-
//# debugId=6E6F4A1DA97303AD64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=references-99ws0b0m.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{F_,p$,Df,sd,Af}from"./studio-ztvcxm3w.js";import"./studio-gjknvzam.js";import"./studio-g8dsj3d2.js";import"./studio-4r0sjtx8.js";import"./studio-fthwn4kf.js";import"./studio-zev8ssp1.js";import"./studio-8xcwewjq.js";import"./studio-fbx6twps.js";import"./studio-rmn2dz59.js";import"./studio-yr04mv2j.js";import"./studio-5gs9th4b.js";import"./studio-4m50vh74.js";import"./studio-pwqfmt4p.js";import"./studio-semd1s8s.js";import"./studio-e47215hh.js";import"./studio-5d7wfmnp.js";import"./studio-xkfs0dp2.js";import"./studio-x5g1xk77.js";import"./studio-7pgy3xaf.js";import"./studio-st75kn99.js";import"./studio-cqmtbg2p.js";import"./studio-y7jehjrp.js";import"./studio-7qvs7v0m.js";import"./studio-sxc0zvpt.js";import"./studio-cp1gbff9.js";import"./studio-1q6amtph.js";import"./studio-ery42sqr.js";import"./studio-fqq890ap.js";import"./studio-k1wvtp03.js";export{sd as inspectorTab,F_ as mount,Df as render,Af as setInspectorTab,p$ as unmount};
|
|
2
|
-
|
|
3
|
-
//# debugId=2A643E12E29C1FE964756E2164756E21
|
|
4
|
-
//# sourceMappingURL=right-panel-31vbk5xp.js.map
|