@jxsuite/studio 6.1.0 → 6.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/dist/chunks/2020-va2wwra4.js +4 -0
  2. package/dist/chunks/adapter-f93pafd7.js +4 -0
  3. package/dist/chunks/{cf-account-picker-n8hr38v7.js → cf-account-picker-af1h381v.js} +3 -3
  4. package/dist/chunks/cf-settings-125tdm0w.js +4 -0
  5. package/dist/chunks/components-ax2f1fnn.js +4 -0
  6. package/dist/chunks/content-source-108aqtk1.js +4 -0
  7. package/dist/chunks/{convert-to-repeater-7wns8kf1.js → convert-to-repeater-ry5rmppr.js} +3 -3
  8. package/dist/chunks/editor-pfgdmkb0.js +4 -0
  9. package/dist/chunks/entry-commands-t0k1q0kx.js +4 -0
  10. package/dist/chunks/{extension-sections-na7rj3nr.js → extension-sections-6mwh2hf8.js} +3 -3
  11. package/dist/chunks/file-ops-meej5mqf.js +4 -0
  12. package/dist/chunks/files-44vp8a2s.js +4 -0
  13. package/dist/chunks/format-host-7q1petb9.js +4 -0
  14. package/dist/chunks/fs-events-h2mwnxaz.js +4 -0
  15. package/dist/chunks/git-panel-zngbymvd.js +4 -0
  16. package/dist/chunks/{grid-view-7tt4bxw1.js → grid-view-sx9vynsp.js} +15 -15
  17. package/dist/chunks/icons-p44xhjf0.js +4 -0
  18. package/dist/chunks/iframe-host-qk3ycq87.js +4 -0
  19. package/dist/chunks/{index-gybvv7a6.js → index-2veqmnhr.js} +3 -3
  20. package/dist/chunks/index-wkyfjeqz.js +4 -0
  21. package/dist/chunks/{javascript-rnvdp3k4.js → javascript-8nbvs12s.js} +3 -3
  22. package/dist/chunks/jsonMode-s8kt9dsj.js +13 -0
  23. package/dist/chunks/jx-validate-psgd7vsx.js +4 -0
  24. package/dist/chunks/layers-panel-1kq2jyfk.js +4 -0
  25. package/dist/chunks/layers-xd92fg8d.js +4 -0
  26. package/dist/chunks/lit-html-ac4cwwr4.js +4 -0
  27. package/dist/chunks/media-picker-0svzkdyb.js +4 -0
  28. package/dist/chunks/menu-5c55ea3d.js +4 -0
  29. package/dist/chunks/{monaco-binding-2jnhjjvr.js → monaco-binding-z6r70pdt.js} +3 -3
  30. package/dist/chunks/monaco-buffer-fz6gq5y7.js +4 -0
  31. package/dist/chunks/monaco-setup-q4axkgj7.js +4 -0
  32. package/dist/chunks/notify-0xgtn8q1.js +4 -0
  33. package/dist/chunks/platform-v1qctbe6.js +4 -0
  34. package/dist/chunks/publish-panel-ym1fmgq5.js +4 -0
  35. package/dist/chunks/quick-search-a54e6t5n.js +4 -0
  36. package/dist/chunks/references-gmqp82fs.js +4 -0
  37. package/dist/chunks/right-panel-v7t9awbk.js +4 -0
  38. package/dist/chunks/section-registry-vhyf3zsr.js +4 -0
  39. package/dist/chunks/studio-0bhx5hz6.js +5 -0
  40. package/dist/chunks/studio-0k1ddnyy.js +6 -0
  41. package/dist/chunks/studio-1b04pd0j.js +64 -0
  42. package/dist/chunks/{studio-5g0ag7c0.js → studio-1q1sh2ax.js} +3 -3
  43. package/dist/chunks/studio-4dwbj6gb.js +5 -0
  44. package/dist/chunks/studio-4tanh828.js +5 -0
  45. package/dist/chunks/{studio-vzacdfsc.js → studio-55h4mstj.js} +3 -3
  46. package/dist/chunks/studio-5tnvjkz4.js +5 -0
  47. package/dist/chunks/{studio-rggdb3hm.js → studio-60dqgb0c.js} +4 -4
  48. package/dist/chunks/studio-61dp09qg.js +9 -0
  49. package/dist/chunks/studio-63epcrj2.js +5 -0
  50. package/dist/chunks/studio-74k29dy9.js +5 -0
  51. package/dist/chunks/{studio-qvasen3f.js → studio-7vg6jcd3.js} +4 -4
  52. package/dist/chunks/studio-7zx31knw.js +9 -0
  53. package/dist/chunks/studio-8bxk97km.js +5 -0
  54. package/dist/chunks/{studio-anyrgzvb.js → studio-8grwxtqk.js} +4 -4
  55. package/dist/chunks/studio-933e30n4.js +5 -0
  56. package/dist/chunks/{studio-h0xgswew.js → studio-98wnwhbg.js} +4 -4
  57. package/dist/chunks/studio-9mccjwjh.js +14 -0
  58. package/dist/chunks/studio-a2ke1e4t.js +5 -0
  59. package/dist/chunks/studio-e3a2a6v3.js +4 -0
  60. package/dist/chunks/{studio-vk9ezads.js → studio-e81q1vb9.js} +4 -4
  61. package/dist/chunks/{studio-z8w183sh.js → studio-epgrmqqm.js} +4 -4
  62. package/dist/chunks/studio-g1shz58g.js +5 -0
  63. package/dist/chunks/studio-gf0fz03c.js +5 -0
  64. package/dist/chunks/studio-gjtpe62q.js +6 -0
  65. package/dist/chunks/{studio-y78s8r2n.js → studio-gkskhg7m.js} +4 -4
  66. package/dist/chunks/studio-gx4dnjzd.js +5 -0
  67. package/dist/chunks/{studio-pxg4ap1e.js → studio-h46vtzk8.js} +4 -4
  68. package/dist/chunks/studio-j03zga3y.js +9 -0
  69. package/dist/chunks/{studio-ar8jcf2y.js → studio-jhpxeckz.js} +4 -4
  70. package/dist/chunks/{studio-w4c0xmrw.js → studio-k01r7ykp.js} +4 -4
  71. package/dist/chunks/{studio-cpxkgjrj.js → studio-kggey1jt.js} +4 -4
  72. package/dist/chunks/{studio-zxp13sss.js → studio-kk7h30ne.js} +6 -6
  73. package/dist/chunks/{studio-ecaz25vk.js → studio-kt1zqney.js} +4 -4
  74. package/dist/chunks/{studio-zygnmm01.js → studio-m3cwhvye.js} +4 -4
  75. package/dist/chunks/{studio-2sqcndak.js → studio-mcayt6hz.js} +4 -4
  76. package/dist/chunks/{studio-qqz8e5gk.js → studio-myjcghv3.js} +4 -4
  77. package/dist/chunks/studio-n8bxwc3y.js +4 -0
  78. package/dist/chunks/{studio-wfjqhhbk.js → studio-ngm8gvpb.js} +4 -4
  79. package/dist/chunks/{studio-zscd9ty4.js → studio-nj5a01jy.js} +196 -196
  80. package/dist/chunks/{studio-3bpdkq2s.js → studio-pcgz8heb.js} +4 -4
  81. package/dist/chunks/{studio-v2bvmbjj.js → studio-pre0skq6.js} +4 -4
  82. package/dist/chunks/{studio-ghkb32r8.js → studio-qcsq0t15.js} +4 -4
  83. package/dist/chunks/studio-qkstvve9.js +5 -0
  84. package/dist/chunks/studio-qv1pwd3c.js +5 -0
  85. package/dist/chunks/{studio-bmn4mn9j.js → studio-rc6dvxjb.js} +5 -5
  86. package/dist/chunks/{studio-qbj760tx.js → studio-rv11kfwa.js} +7 -7
  87. package/dist/chunks/studio-s8dmmz66.js +5 -0
  88. package/dist/chunks/studio-sp5xzbj4.js +6 -0
  89. package/dist/chunks/{studio-tyasmc39.js → studio-szsjbj0g.js} +4 -4
  90. package/dist/chunks/studio-t1xzawhr.js +16 -0
  91. package/dist/chunks/{studio-skprc6ef.js → studio-t6b6qe31.js} +4 -4
  92. package/dist/chunks/{studio-ghrhy2y7.js → studio-tdcprbqb.js} +4 -4
  93. package/dist/chunks/{studio-txjjzrsm.js → studio-vrmcjf9g.js} +5 -5
  94. package/dist/chunks/studio-vyc0b4he.js +10 -0
  95. package/dist/chunks/{studio-5g4t8v6w.js → studio-w0cgf6jg.js} +4 -4
  96. package/dist/chunks/{studio-acdksxx6.js → studio-w3hskzqk.js} +4 -4
  97. package/dist/chunks/{studio-0x3jyb8r.js → studio-wszjyh0j.js} +4 -4
  98. package/dist/chunks/studio-xgrgcdyh.js +9 -0
  99. package/dist/chunks/{studio-qpqa7vk3.js → studio-xz2yxfcb.js} +4 -4
  100. package/dist/chunks/{studio-77kt594t.js → studio-y6n42tgs.js} +4 -4
  101. package/dist/chunks/{studio-19x1c75w.js → studio-yb560vxr.js} +4 -4
  102. package/dist/chunks/{studio-wgh5kxpj.js → studio-yn9f8vtx.js} +4 -4
  103. package/dist/chunks/{studio-a2138x5k.js → studio-yw05w8f0.js} +5 -5
  104. package/dist/chunks/{studio-h9c4p2tx.js → studio-z16sgavc.js} +4 -4
  105. package/dist/chunks/studio-zey7zsdw.js +12 -0
  106. package/dist/chunks/{studio-g7nse7zb.js → studio-zyqn40w4.js} +4 -4
  107. package/dist/chunks/tsMode-2frah6h1.js +14 -0
  108. package/dist/chunks/workspace-zt81g1ms.js +4 -0
  109. package/dist/chunks/ws-client-n2bh4hkf.js +4 -0
  110. package/dist/iframe-entry.js +13 -13
  111. package/dist/manifest.json +62 -62
  112. package/dist/studio.js +77 -77
  113. package/dist/workers/ts.worker.js +3 -3
  114. package/package.json +10 -10
  115. package/src/canvas/canvas-render.ts +4 -1
  116. package/src/canvas/canvas-utils.ts +73 -15
  117. package/src/canvas/iframe-host.ts +67 -21
  118. package/src/canvas/iframe-inline-edit.ts +22 -4
  119. package/src/canvas/iframe-interaction.ts +7 -1
  120. package/src/canvas/iframe-protocol.ts +3 -0
  121. package/src/canvas/iframe-render.ts +5 -2
  122. package/src/commands/defaults.ts +4 -1
  123. package/src/commands/live-context.ts +3 -1
  124. package/src/editor/shortcuts.ts +55 -27
  125. package/src/files/media-paths.ts +3 -1
  126. package/src/panels/editors.ts +3 -1
  127. package/src/panels/style-panel.ts +36 -11
  128. package/src/platforms/devserver.ts +47 -12
  129. package/src/studio.ts +14 -2
  130. package/src/surfaces/library-pane.ts +6 -0
  131. package/src/surfaces/rail.json +126 -73
  132. package/src/surfaces/rail.ts +31 -5
  133. package/src/tabs/typing.ts +31 -0
  134. package/src/utils/edit-display.ts +30 -1
  135. package/src/workspace/workspace.ts +7 -0
  136. package/dist/chunks/2020-nkxms0ay.js +0 -4
  137. package/dist/chunks/adapter-m948ab5f.js +0 -4
  138. package/dist/chunks/cf-settings-356xdtne.js +0 -4
  139. package/dist/chunks/components-yk3t844e.js +0 -4
  140. package/dist/chunks/content-source-bawmyc09.js +0 -4
  141. package/dist/chunks/editor-6sc8nacq.js +0 -4
  142. package/dist/chunks/entry-commands-8ay9fh81.js +0 -4
  143. package/dist/chunks/file-ops-gye0qw56.js +0 -4
  144. package/dist/chunks/files-dmc2xvcq.js +0 -4
  145. package/dist/chunks/format-host-t76b53f8.js +0 -4
  146. package/dist/chunks/fs-events-cg4tpz06.js +0 -4
  147. package/dist/chunks/git-panel-yef7bshy.js +0 -4
  148. package/dist/chunks/icons-qbh8akb1.js +0 -4
  149. package/dist/chunks/iframe-host-tmz30gfp.js +0 -4
  150. package/dist/chunks/index-nag78a9h.js +0 -4
  151. package/dist/chunks/jsonMode-zhwsprqk.js +0 -13
  152. package/dist/chunks/jx-validate-3gbp5nkn.js +0 -4
  153. package/dist/chunks/layers-fvz99859.js +0 -4
  154. package/dist/chunks/layers-panel-gchmbf9p.js +0 -4
  155. package/dist/chunks/lit-html-9agdspkt.js +0 -4
  156. package/dist/chunks/media-picker-rhjvyy00.js +0 -4
  157. package/dist/chunks/menu-2e4y9j7b.js +0 -4
  158. package/dist/chunks/monaco-buffer-rp21359g.js +0 -4
  159. package/dist/chunks/monaco-setup-vhh7gayr.js +0 -4
  160. package/dist/chunks/notify-h3www560.js +0 -4
  161. package/dist/chunks/platform-hz34wcd7.js +0 -4
  162. package/dist/chunks/publish-panel-exsmjzyj.js +0 -4
  163. package/dist/chunks/quick-search-pgaqeh0m.js +0 -4
  164. package/dist/chunks/references-2cgdxnb8.js +0 -4
  165. package/dist/chunks/right-panel-jf856w5w.js +0 -4
  166. package/dist/chunks/section-registry-jnf8r5gy.js +0 -4
  167. package/dist/chunks/studio-0f55h9ye.js +0 -5
  168. package/dist/chunks/studio-0sqdhnew.js +0 -12
  169. package/dist/chunks/studio-3aey7dd3.js +0 -5
  170. package/dist/chunks/studio-47y6fbpf.js +0 -5
  171. package/dist/chunks/studio-4m3826v2.js +0 -5
  172. package/dist/chunks/studio-4nx2dj1g.js +0 -4
  173. package/dist/chunks/studio-4xv5s47r.js +0 -9
  174. package/dist/chunks/studio-5py436sf.js +0 -5
  175. package/dist/chunks/studio-8f87n763.js +0 -10
  176. package/dist/chunks/studio-8mb00b84.js +0 -5
  177. package/dist/chunks/studio-8p51gq2h.js +0 -6
  178. package/dist/chunks/studio-954ds834.js +0 -5
  179. package/dist/chunks/studio-9ft45c83.js +0 -9
  180. package/dist/chunks/studio-a9yzstqj.js +0 -5
  181. package/dist/chunks/studio-e7xxa0sj.js +0 -5
  182. package/dist/chunks/studio-fzdywr6p.js +0 -9
  183. package/dist/chunks/studio-g5fmf0c1.js +0 -5
  184. package/dist/chunks/studio-geq1ea6k.js +0 -14
  185. package/dist/chunks/studio-grawhey1.js +0 -5
  186. package/dist/chunks/studio-jyzj5cxs.js +0 -5
  187. package/dist/chunks/studio-mgx8yhnz.js +0 -64
  188. package/dist/chunks/studio-mpb04y1d.js +0 -6
  189. package/dist/chunks/studio-n17mty64.js +0 -5
  190. package/dist/chunks/studio-nwh2eqsk.js +0 -6
  191. package/dist/chunks/studio-q1h883bt.js +0 -16
  192. package/dist/chunks/studio-q4tv82h7.js +0 -9
  193. package/dist/chunks/studio-sghy936h.js +0 -4
  194. package/dist/chunks/studio-tt2nactf.js +0 -5
  195. package/dist/chunks/studio-xasj0796.js +0 -5
  196. package/dist/chunks/tsMode-gr0m4dzr.js +0 -14
  197. package/dist/chunks/workspace-m15qtcqp.js +0 -4
  198. package/dist/chunks/ws-client-nf61frr1.js +0 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://jxsuite.com/schema/v1",
3
3
  "$id": "StudioRail",
4
- "$description": "The Navigator rail: a rendering of the panel registry. The adapter hands in `groups`, every rail-able panel grouped by level with its selected state and badge, and `settingsVisible`/`settingsOpen` for the foot's gear. Nothing here is a list of panels. Each button prints its record's short `railLabel` under the glyph, falling back to `title`, and carries the full `title` as its accessible name and tooltip: the visible words lead the name a reader hears (WCAG 2.5.3), and the tooltip restores what a short label leaves out.",
4
+ "$description": "The Navigator rail: a rendering of the panel registry. The adapter hands in `groups`, every rail-able panel grouped by level with its selected state and badge, and, for the foot, `libraryVisible`/`libraryOpen` for the Library button and `settingsVisible`/`settingsOpen` for the gear. Nothing here is a list of panels. Each button prints its record's short `railLabel` under the glyph, falling back to `title`, and carries the full `title` as its accessible name and tooltip: the visible words lead the name a reader hears (WCAG 2.5.3), and the tooltip restores what a short label leaves out.",
5
5
  "tagName": "div",
6
6
  "attributes": {
7
7
  "part": "rail"
@@ -162,94 +162,147 @@
162
162
  "attributes": {
163
163
  "part": "foot"
164
164
  },
165
- "$switch": {
166
- "$ref": "#/state/settingsVisible"
167
- },
168
- "cases": {
169
- "true": {
170
- "tagName": "jx-action-button",
171
- "$props": {
172
- "label": "Settings",
173
- "hint": "Settings",
174
- "icon": "gear",
175
- "stacked": true,
176
- "haspopup": "menu",
177
- "expanded": {
178
- "$ref": "#/state/settingsOpen"
179
- }
165
+ "children": [
166
+ {
167
+ "$switch": {
168
+ "$ref": "#/state/libraryVisible"
180
169
  },
170
+ "tagName": "div",
181
171
  "attributes": {
182
- "data-rail-menu": "settings",
183
- "data-expanded": "${state.settingsOpen ? '' : null}"
172
+ "part": "foot-library"
184
173
  },
185
- "onclick": {
186
- "$prototype": "Function",
187
- "body": [
188
- {
189
- "operator": "call",
190
- "target": {
191
- "$ref": "#/state/openSettings"
192
- },
193
- "value": [
174
+ "cases": {
175
+ "true": {
176
+ "tagName": "jx-action-button",
177
+ "$props": {
178
+ "label": "Library",
179
+ "hint": "Library",
180
+ "icon": "books",
181
+ "stacked": true,
182
+ "selected": {
183
+ "$ref": "#/state/libraryOpen"
184
+ }
185
+ },
186
+ "attributes": {
187
+ "data-rail-action": "library.open"
188
+ },
189
+ "onclick": {
190
+ "$prototype": "Function",
191
+ "body": [
194
192
  {
195
- "$ref": "event#/currentTarget"
193
+ "operator": "call",
194
+ "target": {
195
+ "$ref": "#/state/openLibrary"
196
+ },
197
+ "value": []
196
198
  }
197
199
  ]
198
- }
199
- ]
200
+ },
201
+ "children": [
202
+ {
203
+ "tagName": "span",
204
+ "textContent": "Library"
205
+ }
206
+ ]
207
+ }
208
+ }
209
+ },
210
+ {
211
+ "tagName": "div",
212
+ "attributes": {
213
+ "part": "foot-settings"
200
214
  },
201
- "onkeydown": {
202
- "$prototype": "Function",
203
- "body": [
204
- {
205
- "$switch": {
206
- "$ref": "event#/key"
207
- },
208
- "cases": {
209
- "ArrowUp": [
210
- {
211
- "operator": "call",
212
- "target": {
213
- "$ref": "#/state/openSettings"
214
- },
215
- "value": [
215
+ "$switch": {
216
+ "$ref": "#/state/settingsVisible"
217
+ },
218
+ "cases": {
219
+ "true": {
220
+ "tagName": "jx-action-button",
221
+ "$props": {
222
+ "label": "Settings",
223
+ "hint": "Settings",
224
+ "icon": "gear",
225
+ "stacked": true,
226
+ "haspopup": "menu",
227
+ "expanded": {
228
+ "$ref": "#/state/settingsOpen"
229
+ }
230
+ },
231
+ "attributes": {
232
+ "data-rail-menu": "settings",
233
+ "data-expanded": "${state.settingsOpen ? '' : null}"
234
+ },
235
+ "onclick": {
236
+ "$prototype": "Function",
237
+ "body": [
238
+ {
239
+ "operator": "call",
240
+ "target": {
241
+ "$ref": "#/state/openSettings"
242
+ },
243
+ "value": [
244
+ {
245
+ "$ref": "event#/currentTarget"
246
+ }
247
+ ]
248
+ }
249
+ ]
250
+ },
251
+ "onkeydown": {
252
+ "$prototype": "Function",
253
+ "body": [
254
+ {
255
+ "$switch": {
256
+ "$ref": "event#/key"
257
+ },
258
+ "cases": {
259
+ "ArrowUp": [
260
+ {
261
+ "operator": "call",
262
+ "target": {
263
+ "$ref": "#/state/openSettings"
264
+ },
265
+ "value": [
266
+ {
267
+ "$ref": "event#/currentTarget"
268
+ }
269
+ ]
270
+ },
216
271
  {
217
- "$ref": "event#/currentTarget"
272
+ "preventDefault": true
218
273
  }
219
- ]
220
- },
221
- {
222
- "preventDefault": true
223
- }
224
- ],
225
- "ArrowDown": [
226
- {
227
- "operator": "call",
228
- "target": {
229
- "$ref": "#/state/openSettings"
230
- },
231
- "value": [
274
+ ],
275
+ "ArrowDown": [
276
+ {
277
+ "operator": "call",
278
+ "target": {
279
+ "$ref": "#/state/openSettings"
280
+ },
281
+ "value": [
282
+ {
283
+ "$ref": "event#/currentTarget"
284
+ }
285
+ ]
286
+ },
232
287
  {
233
- "$ref": "event#/currentTarget"
288
+ "preventDefault": true
234
289
  }
235
290
  ]
236
- },
237
- {
238
- "preventDefault": true
239
291
  }
240
- ]
292
+ }
293
+ ]
294
+ },
295
+ "children": [
296
+ {
297
+ "tagName": "span",
298
+ "textContent": "Settings"
241
299
  }
242
- }
243
- ]
244
- },
245
- "children": [
246
- {
247
- "tagName": "span",
248
- "textContent": "Settings"
300
+ ]
249
301
  }
250
- ]
302
+ }
251
303
  }
252
- }
304
+ ],
305
+ "$description": "The two rail buttons that open no Navigator panel: the Library, which is a canvas tab rather than a panel and so sits with the other exception, above the gear."
253
306
  }
254
307
  ]
255
308
  }
@@ -14,9 +14,11 @@
14
14
  * record's `railLabel` when it declares one (Source Control's is "Source", because the full title
15
15
  * ellipsed in the 48px label box), and the full `title` stays the accessible name and the tooltip.
16
16
  *
17
- * The foot is the ⚙ **Settings** menu, a menu button rendered from the `settings/menu` placement: a
18
- * record joins the gear by declaring the placement and there is nothing here to update in step.
19
- * With no registry, or one that declares nothing for it, there is no foot.
17
+ * The foot holds the two buttons that open no Navigator panel. **Library** runs `library.open`: the
18
+ * Library is a canvas tab, not a panel, and its button is pressed while that tab is the focused
19
+ * one. Below it is the ⚙ **Settings** menu, a menu button rendered from the `settings/menu`
20
+ * placement: a record joins the gear by declaring the placement and there is nothing here to update
21
+ * in step. With no registry, or one that declares nothing for either, the foot is empty.
20
22
  *
21
23
  * What this adapter owns is the projection and the two decisions: which panel a button toggles, and
22
24
  * where the gear's menu opens. The scope is reactive, so the surface follows `shell` through one
@@ -31,6 +33,7 @@ import { refreshGitStatus } from "../panels/git-panel";
31
33
  import { panelContext, railGroups } from "../panels/panel-registry";
32
34
  import { registerNavigatorPanels } from "../panels/navigator-panels";
33
35
  import { activeRegistry } from "../commands/active-registry";
36
+ import { runActiveReported } from "../commands/run-reported";
34
37
  import {
35
38
  dismissSettingsMenu,
36
39
  isSettingsMenuOpen,
@@ -38,6 +41,8 @@ import {
38
41
  SETTINGS_MENU_PLACEMENT,
39
42
  } from "../panels/settings-menu";
40
43
  import { mountSurface, registerSurface } from "../ui/surface";
44
+ import { libraryTabId } from "../browse/library-source";
45
+ import { activeTab } from "../workspace/workspace";
41
46
  import railDoc from "./rail.json";
42
47
 
43
48
  import type { EffectScope } from "@vue/reactivity";
@@ -71,6 +76,9 @@ interface RailScope extends Record<string, unknown> {
71
76
  groups: RailGroupProjection[];
72
77
  settingsVisible: boolean;
73
78
  settingsOpen: boolean;
79
+ libraryVisible: boolean;
80
+ libraryOpen: boolean;
81
+ openLibrary: () => void;
74
82
  toggle: (id: string) => void;
75
83
  openSettings: (anchor: unknown) => void;
76
84
  }
@@ -104,7 +112,12 @@ export function toggleRailPanel(panel: PanelRecord): void {
104
112
  }
105
113
 
106
114
  /** The rail, as the surface reads it, from the registry and the shell as they stand now. */
107
- function project(): { groups: RailGroupProjection[]; settingsVisible: boolean } {
115
+ function project(): {
116
+ groups: RailGroupProjection[];
117
+ settingsVisible: boolean;
118
+ libraryVisible: boolean;
119
+ libraryOpen: boolean;
120
+ } {
108
121
  const ctx = panelContext();
109
122
  const groups = railGroups(ctx).map((group, index) => ({
110
123
  dividerAbove: index > 0,
@@ -122,13 +135,24 @@ function project(): { groups: RailGroupProjection[]; settingsVisible: boolean }
122
135
  const registry = activeRegistry();
123
136
  const settingsVisible =
124
137
  registry !== null && registry.forPlacement(SETTINGS_MENU_PLACEMENT).length > 0;
125
- return { groups, settingsVisible };
138
+ const libraryVisible =
139
+ registry?.get(LIBRARY_COMMAND) !== undefined && registry.isVisible(LIBRARY_COMMAND);
140
+ const libraryOpen = activeTab.value?.id === libraryTabId();
141
+ return { groups, libraryOpen, libraryVisible, settingsVisible };
126
142
  }
127
143
 
144
+ /** The command the Library button runs: the record decides when it can, and what opening means. */
145
+ const LIBRARY_COMMAND = "library.open";
146
+
128
147
  /** The reactive scope the surface reads, made once. */
129
148
  function state(): RailScope {
130
149
  _state ??= reactive({
131
150
  groups: [],
151
+ libraryOpen: false,
152
+ libraryVisible: false,
153
+ openLibrary: () => {
154
+ void runActiveReported(LIBRARY_COMMAND, undefined, "Navigator rail");
155
+ },
132
156
  openSettings: (anchor: unknown) => {
133
157
  if (!(anchor instanceof HTMLElement)) {
134
158
  return;
@@ -161,6 +185,8 @@ export function renderActivityBar(): void {
161
185
  const next = project();
162
186
  scope.groups = next.groups;
163
187
  scope.settingsVisible = next.settingsVisible;
188
+ scope.libraryVisible = next.libraryVisible;
189
+ scope.libraryOpen = next.libraryOpen;
164
190
  scope.settingsOpen = isSettingsMenuOpen();
165
191
  ensureMounted();
166
192
  }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Which tabs hold typing in a source buffer that no save has kept yet.
3
+ *
4
+ * A Monaco buffer reaches its document on a debounce, and a buffer whose text does not parse never
5
+ * reaches it at all. `tab.doc.dirty` deliberately says nothing about either: it is the DOCUMENT's
6
+ * flag, and the close and quit gates ask the buffers themselves (`tabBufferUnsaved`). Save's
7
+ * enablement needs the union, and needs it REACTIVELY, so the Command Bar's Save lights up on the
8
+ * first keystroke rather than when the commit lands. The buffers' own flag is a closure variable no
9
+ * effect can track, so the keystroke handlers note the tab here as well.
10
+ *
11
+ * Kept out of `services/monaco-buffer.ts` because `commands/live-context.ts` reads it, and
12
+ * everything that module reaches has to load in a bare Bun process with no DOM.
13
+ */
14
+ import { reactive } from "../reactivity";
15
+
16
+ const typing = reactive(new Set<string>());
17
+
18
+ /** A keystroke in one of `tabId`'s source buffers. */
19
+ export function noteTyping(tabId: string): void {
20
+ typing.add(tabId);
21
+ }
22
+
23
+ /** A save kept everything the buffers held, or the tab is gone. */
24
+ export function clearTyping(tabId: string): void {
25
+ typing.delete(tabId);
26
+ }
27
+
28
+ /** Whether `tabId` holds typing no save has kept. Tracked by effects. */
29
+ export function hasTyping(tabId: string): boolean {
30
+ return typing.has(tabId);
31
+ }
@@ -14,9 +14,38 @@ const TRANSPARENT_PX =
14
14
  // A neutral, visible gray placeholder for image-like bindings in edit mode (e.g. a component `image`
15
15
  // Prop bound to ${...}). The component renders <img src={prop}> internally, so a transparent pixel
16
16
  // Would collapse to nothing — a gray SVG box reads as an intentional placeholder instead.
17
- const PLACEHOLDER_IMG =
17
+ export const PLACEHOLDER_IMG =
18
18
  "data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='32'%20height='32'%3E%3Crect%20width='32'%20height='32'%20fill='%23d0d0d0'/%3E%3C/svg%3E";
19
19
 
20
+ /**
21
+ * Swap every image under `host` that fails to load for {@link PLACEHOLDER_IMG}, until `signal`
22
+ * aborts.
23
+ *
24
+ * For previews drawn in the PARENT realm, where nothing ran {@link prepareForEditMode}: a library
25
+ * card's file, a component whose image prop is a `${}` binding with nothing to bind it, a document
26
+ * whose `src` is empty. The browser drew each as its broken-image glyph. `error` does not bubble,
27
+ * so the listener captures — which also covers images a preview renders after it is mounted. An
28
+ * empty `src` fires `error` too, so it needs no separate test; an image already showing the
29
+ * placeholder is left alone, so a placeholder that cannot load (it always can) does not loop.
30
+ *
31
+ * @param {Element} host
32
+ * @param {AbortSignal} signal
33
+ */
34
+ export function placeholderBrokenImages(host: Element, signal: AbortSignal): void {
35
+ host.addEventListener(
36
+ "error",
37
+ (event) => {
38
+ const { target } = event;
39
+ if (target instanceof HTMLImageElement && target.getAttribute("src") !== PLACEHOLDER_IMG) {
40
+ target.setAttribute("src", PLACEHOLDER_IMG);
41
+ target.removeAttribute("srcset");
42
+ target.dataset.placeholder = "";
43
+ }
44
+ },
45
+ { capture: true, signal },
46
+ );
47
+ }
48
+
20
49
  // Prop/attribute names that feed an <img>/background, so a ${...} binding would otherwise render a
21
50
  // Broken image in edit mode. Matched by exact name or common camelCase suffix (featuredImage, heroBg).
22
51
  const IMAGE_KEY_RE =
@@ -1,4 +1,5 @@
1
1
  import { computed, reactive, toRaw } from "../reactivity";
2
+ import { clearTyping, hasTyping, noteTyping } from "../tabs/typing";
2
3
  import { commitTabBuffers } from "../services/monaco-buffer";
3
4
  import { resetAiWrites } from "../services/ai-writes";
4
5
  import { ensureCollab, rekeyCollab } from "../collab/collab-session";
@@ -1034,6 +1035,8 @@ export function closeTab(tabId: string) {
1034
1035
  rememberClosedTab(tab);
1035
1036
  disposeTab(tab);
1036
1037
  workspace.tabs.delete(tabId);
1038
+ // The id comes back when the same file reopens, and it must not come back with Save lit.
1039
+ clearTyping(tabId);
1037
1040
  detachTab(tabId);
1038
1041
  workspace.mruOrder = workspace.mruOrder.filter((id) => id !== tabId);
1039
1042
  resetTabCycle();
@@ -1270,6 +1273,10 @@ export function renameTab(oldId: string, newId: string, newDocumentPath: string)
1270
1273
  }
1271
1274
  tab.id = newId;
1272
1275
  tab.documentPath = newDocumentPath;
1276
+ if (hasTyping(oldId)) {
1277
+ clearTyping(oldId);
1278
+ noteTyping(newId);
1279
+ }
1273
1280
  workspace.tabs.delete(oldId);
1274
1281
  workspace.tabs.set(newId, tab);
1275
1282
  for (const pane of workspace.panes) {
@@ -1,4 +0,0 @@
1
- import{Rt,nn,Sl,xf,Mg,_f,By,l_,c_,d_,u_,h_,p_,f_,m_,g_}from"./studio-0sqdhnew.js";import{ae}from"./studio-v2bvmbjj.js";var b=ae(function(M){Object.defineProperty(M,"__esModule",{value:!0});M.dynamicAnchor=void 0;var _=Rt(),ge=Sl(),A=By(),_e=c_(),be={keyword:"$dynamicAnchor",schemaType:"string",code:(e)=>O(e,e.schema)};function O(e,t){let{gen:r,it:o}=e;o.schemaEnv.root.dynamicAnchors[t]=!0;let n=_._`${ge.default.dynamicAnchors}${_.getProperty(t)}`,s=o.errSchemaPath==="#"?o.validateName:ve(e);r.if(_._`!${n}`,()=>r.assign(n,s))}M.dynamicAnchor=O;function ve(e){let{schemaEnv:t,schema:r,self:o}=e.it,{root:n,baseId:s,localRefs:m,meta:c}=t.root,{schemaId:a}=o.opts,u=new A.SchemaEnv({schema:r,schemaId:a,root:n,baseId:s,localRefs:m,meta:c});return A.compileSchema.call(o,u),_e.getValidate(e,u)}M.default=be});var v=ae(function(N){Object.defineProperty(N,"__esModule",{value:!0});N.dynamicRef=void 0;var I=Rt(),qe=Sl(),x=c_(),Pe={keyword:"$dynamicRef",schemaType:"string",code:(e)=>w(e,e.schema)};function w(e,t){let{gen:r,keyword:o,it:n}=e;if(t[0]!=="#")throw Error(`"${o}" only supports hash fragment reference`);let s=t.slice(1);if(n.allErrors)m();else{let a=r.let("valid",!1);m(a),e.ok(a)}function m(a){if(n.schemaEnv.root.dynamicAnchors[s]){let u=r.let("_v",I._`${qe.default.dynamicAnchors}${I.getProperty(s)}`);r.if(u,c(u,a),c(n.validateName,a))}else c(n.validateName,a)()}function c(a,u){return u?()=>r.block(()=>{x.callRef(e,a),r.let(u,!0)}):()=>x.callRef(e,a)}}N.dynamicRef=w;N.default=Pe});var E=ae(function(k){Object.defineProperty(k,"__esModule",{value:!0});var Ae=b(),Oe=nn(),Me={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){if(e.schema)Ae.dynamicAnchor(e,"");else Oe.checkStrictMode(e.it,"$recursiveAnchor: false is ignored")}};k.default=Me});var V=ae(function(C){Object.defineProperty(C,"__esModule",{value:!0});var xe=v(),Ie={keyword:"$recursiveRef",schemaType:"string",code:(e)=>xe.dynamicRef(e,e.schema)};C.default=Ie});var K=ae(function(D){Object.defineProperty(D,"__esModule",{value:!0});var Ne=b(),Te=v(),ke=E(),Ee=V(),Ce=[Ne.default,Te.default,ke.default,Ee.default];D.default=Ce});var L=ae(function(z){Object.defineProperty(z,"__esModule",{value:!0});var G=h_(),De={keyword:"dependentRequired",type:"object",schemaType:"object",error:G.error,code:(e)=>G.validatePropertyDeps(e)};z.default=De});var Z=ae(function(U){Object.defineProperty(U,"__esModule",{value:!0});var Ge=h_(),ze={keyword:"dependentSchemas",type:"object",schemaType:"object",code:(e)=>Ge.validateSchemaDeps(e)};U.default=ze});var H=ae(function(F){Object.defineProperty(F,"__esModule",{value:!0});var Ue=nn(),Ze={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:r}){if(t.contains===void 0)Ue.checkStrictMode(r,`"${e}" without "contains" is ignored`)}};F.default=Ze});var J=ae(function(B){Object.defineProperty(B,"__esModule",{value:!0});var He=L(),Be=Z(),Je=H(),Qe=[He.default,Be.default,Je.default];B.default=Qe});var X=ae(function(W){Object.defineProperty(W,"__esModule",{value:!0});var f=Rt(),Q=nn(),Xe=Sl(),Ye={message:"must NOT have unevaluated properties",params:({params:e})=>f._`{unevaluatedProperty: ${e.unevaluatedProperty}}`},et={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:Ye,code(e){let{gen:t,schema:r,data:o,errsCount:n,it:s}=e;if(!n)throw Error("ajv implementation error");let{allErrors:m,props:c}=s;if(c instanceof f.Name)t.if(f._`${c} !== true`,()=>t.forIn("key",o,(i)=>t.if(u(c,i),()=>a(i))));else if(c!==!0)t.forIn("key",o,(i)=>c===void 0?a(i):t.if(g(c,i),()=>a(i)));s.props=!0,e.ok(f._`${n} === ${Xe.default.errors}`);function a(i){if(r===!1){if(e.setParams({unevaluatedProperty:i}),e.error(),!m)t.break();return}if(!Q.alwaysValidSchema(s,r)){let p=t.name("valid");if(e.subschema({keyword:"unevaluatedProperties",dataProp:i,dataPropType:Q.Type.Str},p),!m)t.if(f.not(p),()=>t.break())}}function u(i,p){return f._`!${i} || !${i}[${p}]`}function g(i,p){let P=[];for(let R in i)if(i[R]===!0)P.push(f._`${p} !== ${R}`);return f.and(...P)}}};W.default=et});var te=ae(function(ee){Object.defineProperty(ee,"__esModule",{value:!0});var l=Rt(),Y=nn(),rt={message:({params:{len:e}})=>l.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>l._`{limit: ${e}}`},at={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:rt,code(e){let{gen:t,schema:r,data:o,it:n}=e,s=n.items||0;if(s===!0)return;let m=t.const("len",l._`${o}.length`);if(r===!1)e.setParams({len:s}),e.fail(l._`${m} > ${s}`);else if(typeof r=="object"&&!Y.alwaysValidSchema(n,r)){let a=t.var("valid",l._`${m} <= ${s}`);t.if(l.not(a),()=>c(a,s)),e.ok(a)}n.items=!0;function c(a,u){t.forRange("i",u,m,(g)=>{if(e.subschema({keyword:"unevaluatedItems",dataProp:g,dataPropType:Y.Type.Num},a),!n.allErrors)t.if(l.not(a),()=>t.break())})}}};ee.default=at});var ne=ae(function(re){Object.defineProperty(re,"__esModule",{value:!0});var ot=X(),st=te(),it=[ot.default,st.default];re.default=it});var ie=ae(function(se){Object.defineProperty(se,"__esModule",{value:!0});var dt=d_(),ut=u_(),mt=p_(),ft=K(),lt=J(),pt=ne(),yt=f_(),oe=m_(),ht=[ft.default,dt.default,ut.default,(0,mt.default)(!0),yt.default,oe.metadataVocabulary,oe.contentVocabulary,lt.default,pt.default];se.default=ht});var ce=ae(function(ir,gt){gt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/schema",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],type:["object","boolean"],$comment:"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",properties:{definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}}}});var de=ae(function(cr,_t){_t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/applicator":!0},$dynamicAnchor:"meta",title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}}}});var ue=ae(function(dr,bt){bt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/unevaluated",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},$dynamicAnchor:"meta",title:"Unevaluated applicator vocabulary meta-schema",type:["object","boolean"],properties:{unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}}}});var me=ae(function(ur,vt){vt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/content",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}}}});var fe=ae(function(mr,jt){jt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/core",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0},$dynamicAnchor:"meta",title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},$defs:{anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}}}});var le=ae(function(fr,qt){qt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/format-annotation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},$dynamicAnchor:"meta",title:"Format vocabulary meta-schema for annotation results",type:["object","boolean"],properties:{format:{type:"string"}}}});var pe=ae(function(lr,Pt){Pt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},$dynamicAnchor:"meta",title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}});var ye=ae(function(pr,At){At.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/validation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/validation":!0},$dynamicAnchor:"meta",title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}});var $e=ae(function(he){Object.defineProperty(he,"__esModule",{value:!0});var Ot=ce(),Mt=de(),St=ue(),xt=me(),It=fe(),wt=le(),Nt=pe(),Tt=ye(),kt=["/properties"];function Et(e){return[Ot,Mt,St,xt,It,t(this,wt),Nt,t(this,Tt)].forEach((r)=>this.addMetaSchema(r,void 0,!1)),this;function t(r,o){return e?r.$dataMetaSchema(o,kt):o}}he.default=Et});var Ht=ae(function(d,q){Object.defineProperty(d,"__esModule",{value:!0});d.MissingRefError=d.ValidationError=d.CodeGen=d.Name=d.nil=d.stringify=d.str=d._=d.KeywordCxt=d.Ajv2020=void 0;var Vt=l_(),Dt=ie(),Kt=g_(),Gt=$e(),j="https://json-schema.org/draft/2020-12/schema";class h extends Vt.default{constructor(e={}){super({...e,dynamicRef:!0,next:!0,unevaluated:!0})}_addVocabularies(){if(super._addVocabularies(),Dt.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(Kt.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();let{$data:e,meta:t}=this.opts;if(!t)return;Gt.default.call(this,e),this.refs["http://json-schema.org/schema"]=j}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(j)?j:void 0)}}d.Ajv2020=h;q.exports=d=h;q.exports.Ajv2020=h;Object.defineProperty(d,"__esModule",{value:!0});d.default=h;var zt=xf();Object.defineProperty(d,"KeywordCxt",{enumerable:!0,get:function(){return zt.KeywordCxt}});var y=Rt();Object.defineProperty(d,"_",{enumerable:!0,get:function(){return y._}});Object.defineProperty(d,"str",{enumerable:!0,get:function(){return y.str}});Object.defineProperty(d,"stringify",{enumerable:!0,get:function(){return y.stringify}});Object.defineProperty(d,"nil",{enumerable:!0,get:function(){return y.nil}});Object.defineProperty(d,"Name",{enumerable:!0,get:function(){return y.Name}});Object.defineProperty(d,"CodeGen",{enumerable:!0,get:function(){return y.CodeGen}});var Lt=Mg();Object.defineProperty(d,"ValidationError",{enumerable:!0,get:function(){return Lt.default}});var Ut=_f();Object.defineProperty(d,"MissingRefError",{enumerable:!0,get:function(){return Ut.default}})});export default Ht();
2
-
3
- //# debugId=33C1B4F596220F4464756E2164756E21
4
- //# sourceMappingURL=2020-nkxms0ay.js.map
@@ -1,4 +0,0 @@
1
- import{zs,Ws,gs}from"./studio-qbj760tx.js";export{gs as draggable,zs as dropTargetForElements,Ws as monitorForElements};
2
-
3
- //# debugId=EB4AE5E5C16F5E1A64756E2164756E21
4
- //# sourceMappingURL=adapter-m948ab5f.js.map
@@ -1,4 +0,0 @@
1
- import{$f,A_,N_,f$,O_}from"./studio-xasj0796.js";import"./studio-5g4t8v6w.js";import"./studio-qpqa7vk3.js";import"./studio-vzacdfsc.js";export{O_ as clearCfConnection,N_ as getCfAccountId,$f as getCfToken,f$ as setCfAccountId,A_ as setCfToken};
2
-
3
- //# debugId=15C31DBFCBEBDE0164756E2164756E21
4
- //# sourceMappingURL=cf-settings-356xdtne.js.map
@@ -1,4 +0,0 @@
1
- import{st,Al,FC,hm,_c}from"./studio-vk9ezads.js";import"./studio-qpqa7vk3.js";export{hm as buildComponentInstance,st as componentRegistry,_c as computeRelativePath,Al as loadComponentRegistry,FC as noteComponentSaved};
2
-
3
- //# debugId=6E27250E48F2B5B164756E2164756E21
4
- //# sourceMappingURL=components-yk3t844e.js.map
@@ -1,4 +0,0 @@
1
- import{bb,jw,R1,$1,D1,A1}from"./studio-g5fmf0c1.js";import"./studio-qvasen3f.js";import"./studio-skprc6ef.js";import"./studio-8p51gq2h.js";import"./studio-9ft45c83.js";import"./studio-a2138x5k.js";import"./studio-ghrhy2y7.js";import"./studio-bmn4mn9j.js";import"./studio-19x1c75w.js";import"./studio-47y6fbpf.js";import"./studio-q1h883bt.js";import"./studio-vk9ezads.js";import"./studio-5g4t8v6w.js";import"./studio-4m3826v2.js";import"./studio-grawhey1.js";import"./studio-3bpdkq2s.js";import"./studio-3aey7dd3.js";import"./studio-z8w183sh.js";import"./studio-qbj760tx.js";import"./studio-tt2nactf.js";import"./studio-qpqa7vk3.js";import"./studio-e7xxa0sj.js";import"./studio-5g0ag7c0.js";import"./studio-geq1ea6k.js";import"./studio-g7nse7zb.js";import"./studio-ery42sqr.js";import"./studio-vzacdfsc.js";export{jw as collectionDirs,bb as collectionInfo,D1 as createCollectionSource,A1 as createPagesSource,R1 as listCollectionEntryIds,$1 as reloadDraftAwareGrids};
2
-
3
- //# debugId=26D0A0D38E2A821E64756E2164756E21
4
- //# sourceMappingURL=content-source-bawmyc09.js.map
@@ -1,4 +0,0 @@
1
- import{r$,Wh,s$,a$,l$,bu,c$,d$,Ns,Hy,ac,u$,Tn,pe}from"./studio-zscd9ty4.js";export{r$ as CancellationTokenSource,Wh as Emitter,s$ as KeyCode,a$ as KeyMod,Ns as MarkerSeverity,Hy as MarkerTag,l$ as Position,bu as Range,c$ as Selection,d$ as SelectionDirection,u$ as Token,ac as Uri,Tn as editor,pe as languages};
2
-
3
- //# debugId=1ADE7C7E43EBB53064756E2164756E21
4
- //# sourceMappingURL=editor-6sc8nacq.js.map
@@ -1,4 +0,0 @@
1
- import{Tw,w1}from"./studio-h9c4p2tx.js";import"./studio-jyzj5cxs.js";import"./studio-n17mty64.js";import"./studio-pxg4ap1e.js";import"./studio-g5fmf0c1.js";import"./studio-qvasen3f.js";import"./studio-skprc6ef.js";import"./studio-8p51gq2h.js";import"./studio-9ft45c83.js";import"./studio-a2138x5k.js";import"./studio-ghrhy2y7.js";import"./studio-bmn4mn9j.js";import"./studio-19x1c75w.js";import"./studio-47y6fbpf.js";import"./studio-q1h883bt.js";import"./studio-vk9ezads.js";import"./studio-5g4t8v6w.js";import"./studio-4m3826v2.js";import"./studio-grawhey1.js";import"./studio-3bpdkq2s.js";import"./studio-3aey7dd3.js";import"./studio-z8w183sh.js";import"./studio-qbj760tx.js";import"./studio-tt2nactf.js";import"./studio-qpqa7vk3.js";import"./studio-e7xxa0sj.js";import"./studio-5g0ag7c0.js";import"./studio-geq1ea6k.js";import"./studio-g7nse7zb.js";import"./studio-ery42sqr.js";import"./studio-vzacdfsc.js";import"./studio-k1wvtp03.js";export{Tw as createEntry,w1 as registerContentCommands};
2
-
3
- //# debugId=E50DC71C9BED395364756E2164756E21
4
- //# sourceMappingURL=entry-commands-8ay9fh81.js.map
@@ -1,4 +0,0 @@
1
- import{Er,N1,O1,rp,M1,Yf,Zf}from"./studio-qvasen3f.js";import"./studio-skprc6ef.js";import"./studio-8p51gq2h.js";import"./studio-9ft45c83.js";import"./studio-a2138x5k.js";import"./studio-ghrhy2y7.js";import"./studio-bmn4mn9j.js";import"./studio-19x1c75w.js";import"./studio-47y6fbpf.js";import"./studio-q1h883bt.js";import"./studio-vk9ezads.js";import"./studio-5g4t8v6w.js";import"./studio-4m3826v2.js";import"./studio-grawhey1.js";import"./studio-3bpdkq2s.js";import"./studio-3aey7dd3.js";import"./studio-z8w183sh.js";import"./studio-qbj760tx.js";import"./studio-tt2nactf.js";import"./studio-qpqa7vk3.js";import"./studio-e7xxa0sj.js";import"./studio-5g0ag7c0.js";import"./studio-geq1ea6k.js";import"./studio-g7nse7zb.js";import"./studio-ery42sqr.js";import"./studio-vzacdfsc.js";export{Yf as confirmFileDelete,M1 as exportFile,N1 as parseCollabSource,Er as parseSourceForPath,Zf as renamePromptMessage,rp as saveFile,O1 as setDocumentSavedListener};
2
-
3
- //# debugId=62745782F3A869AD64756E2164756E21
4
- //# sourceMappingURL=file-ops-gye0qw56.js.map
@@ -1,4 +0,0 @@
1
- import{To,Q_,e1,t1,mw,Hf,n1,i1,gw,uE,i$,Lo,bw,o1,r1,tp,s1}from"./studio-zxp13sss.js";import"./studio-qqz8e5gk.js";import"./studio-txjjzrsm.js";import"./studio-954ds834.js";import"./studio-jyzj5cxs.js";import"./studio-8f87n763.js";import"./studio-pxg4ap1e.js";import"./studio-g5fmf0c1.js";import"./studio-qvasen3f.js";import"./studio-skprc6ef.js";import"./studio-8p51gq2h.js";import"./studio-9ft45c83.js";import"./studio-a2138x5k.js";import"./studio-ghrhy2y7.js";import"./studio-bmn4mn9j.js";import"./studio-19x1c75w.js";import"./studio-47y6fbpf.js";import"./studio-q1h883bt.js";import"./studio-vk9ezads.js";import"./studio-5g4t8v6w.js";import"./studio-4m3826v2.js";import"./studio-grawhey1.js";import"./studio-3bpdkq2s.js";import"./studio-3aey7dd3.js";import"./studio-z8w183sh.js";import"./studio-qbj760tx.js";import"./studio-tt2nactf.js";import"./studio-qpqa7vk3.js";import"./studio-e7xxa0sj.js";import"./studio-5g0ag7c0.js";import"./studio-geq1ea6k.js";import"./studio-g7nse7zb.js";import"./studio-ery42sqr.js";import"./studio-vzacdfsc.js";export{gw as createFileIn,mw as findHomePage,t1 as initProjectRepo,To as loadDirectory,Q_ as loadProject,uE as notifyMoveOutcome,bw as openFileInPane,Lo as openFileInTab,Hf as openLastSessionOrHome,e1 as openProject,i1 as registerFileTreeDnD,s1 as registerFilesPanel,o1 as reloadCleanTab,tp as reloadFileInTab,r1 as reloadTabsIfChanged,n1 as renderFilesTemplate,i$ as settleRename};
2
-
3
- //# debugId=D104D2BFE076639364756E2164756E21
4
- //# sourceMappingURL=files-dmc2xvcq.js.map
@@ -1,4 +0,0 @@
1
- import{qt,Pd,Fd,Dm,Iv,Ka,Lp,Vs,wi,Ip,Zt,Ja,Dr,uk,Us,hk}from"./studio-tt2nactf.js";import"./studio-qpqa7vk3.js";export{Dr as defaultContentFormat,Ja as documentExtensions,Vs as formatByExtension,wi as formatByName,Zt as formatForPath,uk as formatParse,Us as formatSerialize,Iv as getExtensionCatalog,Dm as getExtensions,Lp as getFormats,Fd as loadExtensions,qt as loadFormats,Ip as noFormatError,Ka as refreshExtensionUi,Pd as refreshFormats,hk as splitFormatDocument};
2
-
3
- //# debugId=862B0FD67AE9319E64756E2164756E21
4
- //# sourceMappingURL=format-host-t76b53f8.js.map
@@ -1,4 +0,0 @@
1
- import{Ps,gc,P1}from"./studio-skprc6ef.js";import"./studio-19x1c75w.js";import"./studio-3bpdkq2s.js";import"./studio-3aey7dd3.js";import"./studio-z8w183sh.js";import"./studio-tt2nactf.js";import"./studio-qpqa7vk3.js";import"./studio-g7nse7zb.js";import"./studio-ery42sqr.js";import"./studio-vzacdfsc.js";export{gc as isRecentLocal,Ps as markLocalMutation,P1 as startFsSync};
2
-
3
- //# debugId=163FFA092C8CFF0964756E2164756E21
4
- //# sourceMappingURL=fs-events-cg4tpz06.js.map
@@ -1,4 +0,0 @@
1
- import{uc,c1,_w,Cw,d1,u1,h1,zf,p1}from"./studio-qqz8e5gk.js";import"./studio-txjjzrsm.js";import"./studio-954ds834.js";import"./studio-9ft45c83.js";import"./studio-a2138x5k.js";import"./studio-ghrhy2y7.js";import"./studio-bmn4mn9j.js";import"./studio-19x1c75w.js";import"./studio-47y6fbpf.js";import"./studio-q1h883bt.js";import"./studio-vk9ezads.js";import"./studio-5g4t8v6w.js";import"./studio-4m3826v2.js";import"./studio-grawhey1.js";import"./studio-3bpdkq2s.js";import"./studio-3aey7dd3.js";import"./studio-z8w183sh.js";import"./studio-qbj760tx.js";import"./studio-tt2nactf.js";import"./studio-qpqa7vk3.js";import"./studio-e7xxa0sj.js";import"./studio-5g0ag7c0.js";import"./studio-geq1ea6k.js";import"./studio-g7nse7zb.js";import"./studio-ery42sqr.js";import"./studio-vzacdfsc.js";export{zf as cleanupGitPanel,_w as cloneRepository,d1 as loadDiffForLens,c1 as noteFileSaved,Cw as platformSupportsClone,uc as refreshGitStatus,p1 as registerGitPanel,h1 as registerSourceControlCommands,u1 as renderGitPanel};
2
-
3
- //# debugId=746254B1AE0A156F64756E2164756E21
4
- //# sourceMappingURL=git-panel-yef7bshy.js.map