@jxsuite/studio 3.0.0 → 4.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.
Files changed (197) hide show
  1. package/README.md +5 -5
  2. package/dist/chunks/{2020-xp8vnwma.js → 2020-n6tfwnda.js} +2 -2
  3. package/dist/chunks/Overlay.dev-etqjwyf9.js +23 -0
  4. package/dist/chunks/cf-account-picker-en86v7x7.js +163 -0
  5. package/dist/chunks/{cf-settings-zj2cj1ar.js → cf-settings-45fgyx8y.js} +6 -5
  6. package/dist/chunks/{components-z6cnkyy1.js → components-zmx10t62.js} +6 -5
  7. package/dist/chunks/content-source-48xg86wj.js +49 -0
  8. package/dist/chunks/{convert-to-repeater-6vvx96n2.js → convert-to-repeater-43tfn7cs.js} +33 -25
  9. package/dist/chunks/entry-commands-e63f1xc0.js +46 -0
  10. package/dist/chunks/{extension-sections-kwzvpemr.js → extension-sections-txv08xxg.js} +34 -26
  11. package/dist/chunks/file-ops-wbh4hhsx.js +48 -0
  12. package/dist/chunks/files-3kfkwhk4.js +93 -0
  13. package/dist/chunks/{focus-trap.esm-ggawf1hy.js → focus-trap.esm-9t2drp0g.js} +6 -5
  14. package/dist/chunks/{format-host-8fr3545e.js → format-host-w16q81tf.js} +3 -3
  15. package/dist/chunks/fs-events-hrrg328g.js +21 -0
  16. package/dist/chunks/{git-panel-g01d93vc.js → git-panel-532whr1y.js} +22 -16
  17. package/dist/chunks/{index-nj44jpzj.js → index-wcnt3r9g.js} +2 -2
  18. package/dist/chunks/{jx-validate-jj9rnt4n.js → jx-validate-8er6gbxy.js} +6 -4
  19. package/dist/chunks/layers-panel-07hm7g5j.js +67 -0
  20. package/dist/chunks/layers-q75tj2mf.js +45 -0
  21. package/dist/chunks/lit-html-j055mkh8.js +22 -0
  22. package/dist/chunks/monaco-buffer-dqw0xxpx.js +25 -0
  23. package/dist/chunks/{monaco-setup-a5wkmbgh.js → monaco-setup-vx9bhp1d.js} +4 -4
  24. package/dist/chunks/notify-yjm79n4s.js +30 -0
  25. package/dist/chunks/parse-24d0gay3.js +19 -0
  26. package/dist/chunks/platform-ba1j1gbh.js +16 -0
  27. package/dist/chunks/publish-panel-v9st96ja.js +29 -0
  28. package/dist/chunks/quick-search-zccjp6gv.js +66 -0
  29. package/dist/chunks/references-3qx8fkyp.js +29 -0
  30. package/dist/chunks/right-panel-vm3b6kwy.js +46 -0
  31. package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +18 -0
  32. package/dist/chunks/sp-popover.dev-n2etmqdp.js +9 -0
  33. package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +15 -0
  34. package/dist/chunks/sp-tooltip.dev-4sastdnw.js +15 -0
  35. package/dist/chunks/{sp-tray.dev-64v4pxw8.js → sp-tray.dev-tkbscm06.js} +5 -5
  36. package/dist/chunks/{studio-wdt9y92a.js → studio-0bq6eh7v.js} +2 -2
  37. package/dist/chunks/studio-1ngbejft.js +181 -0
  38. package/dist/chunks/studio-1wagb550.js +118 -0
  39. package/dist/chunks/{studio-j595e748.js → studio-2b946z26.js} +172 -95
  40. package/dist/chunks/{studio-pkp61mh8.js → studio-3bqpr0zh.js} +25 -17
  41. package/dist/chunks/{studio-k4jvjcfx.js → studio-4b5z1x43.js} +46 -12
  42. package/dist/chunks/{studio-ry1vz5sv.js → studio-4n2b5gzb.js} +15 -13
  43. package/dist/chunks/{studio-p5dja96s.js → studio-4r1pv6zf.js} +2 -2
  44. package/dist/chunks/{studio-kvfx9z2c.js → studio-4rzyrtjz.js} +70 -31
  45. package/dist/chunks/{studio-tzx3xmvx.js → studio-5fx3g9jg.js} +33 -52
  46. package/dist/chunks/{studio-rh1cnamv.js → studio-5myknm0a.js} +565 -135
  47. package/dist/chunks/studio-6yw4y3my.js +91 -0
  48. package/dist/chunks/{studio-0rqqhrdy.js → studio-7nte2hj4.js} +2 -2
  49. package/dist/chunks/studio-92ab2jqe.js +282 -0
  50. package/dist/chunks/{studio-6z5eyjwn.js → studio-950k0dx6.js} +72 -135
  51. package/dist/chunks/{studio-sas7mt3k.js → studio-9ab8gqsm.js} +2 -2
  52. package/dist/chunks/studio-9n4mrmnb.js +184 -0
  53. package/dist/chunks/{studio-hcxzyk3x.js → studio-ahn3pdgx.js} +6 -6
  54. package/dist/chunks/studio-b55y6ewx.js +498 -0
  55. package/dist/chunks/{studio-s519zc99.js → studio-bgxt93ga.js} +3 -3
  56. package/dist/chunks/studio-cft9r4r7.js +119 -0
  57. package/dist/chunks/{studio-dc8s8heb.js → studio-cmb03bg5.js} +6904 -8321
  58. package/dist/chunks/studio-dm19q43r.js +195 -0
  59. package/dist/chunks/{studio-2x9zbxmx.js → studio-ef49pnzx.js} +11 -9
  60. package/dist/chunks/{studio-ay8wcr2b.js → studio-eqq1w638.js} +7 -9
  61. package/dist/chunks/{studio-5efrtn1m.js → studio-ew0djmhg.js} +23 -19
  62. package/dist/chunks/{studio-tr20m8g8.js → studio-f3wqjtk5.js} +39 -3
  63. package/dist/chunks/{studio-xntfdy1x.js → studio-fbf92ckf.js} +36 -23
  64. package/dist/chunks/{studio-4q0wznzf.js → studio-gcye7qka.js} +442 -126
  65. package/dist/chunks/{studio-7p35254k.js → studio-gfgb8pe6.js} +36 -193
  66. package/dist/chunks/studio-jc994dnr.js +1066 -0
  67. package/dist/chunks/{studio-hj2se583.js → studio-jkftxyvz.js} +69 -3423
  68. package/dist/chunks/{studio-5x5774ak.js → studio-kryvsw6j.js} +3 -3
  69. package/dist/chunks/{studio-kfpek536.js → studio-kyh9avvv.js} +2 -2
  70. package/dist/chunks/{studio-twsafr1e.js → studio-m3hwn7y1.js} +3 -3
  71. package/dist/chunks/studio-msd847zn.js +1315 -0
  72. package/dist/chunks/{studio-g5gdqnyd.js → studio-mtfnaqs9.js} +19 -19
  73. package/dist/chunks/{studio-7ejemhej.js → studio-n6j9t10q.js} +6 -6
  74. package/dist/chunks/{studio-vhk5fmfv.js → studio-n8b9wqwy.js} +5 -5
  75. package/dist/chunks/{studio-cjm7fdjf.js → studio-p4ngc046.js} +8 -104
  76. package/dist/chunks/studio-q43a5y9h.js +394 -0
  77. package/dist/chunks/studio-q7v10cg2.js +106 -0
  78. package/dist/chunks/{studio-6kv3apa9.js → studio-q9jd1a60.js} +27 -11
  79. package/dist/chunks/studio-qcy05dp8.js +1743 -0
  80. package/dist/chunks/{studio-a0yp7syn.js → studio-qjy2z9bv.js} +29 -132
  81. package/dist/chunks/{studio-2w11grav.js → studio-qq6jym04.js} +3 -3
  82. package/dist/chunks/{studio-3fk1ac9z.js → studio-rdx8jcxy.js} +4 -4
  83. package/dist/chunks/{studio-4mqb9a0j.js → studio-rn9ta2mz.js} +4 -4
  84. package/dist/chunks/studio-t7qb9db8.js +665 -0
  85. package/dist/chunks/studio-tmc5emrw.js +8 -0
  86. package/dist/chunks/{studio-r5xbtctf.js → studio-trxrabqf.js} +292 -2297
  87. package/dist/chunks/studio-wcy8trfx.js +263 -0
  88. package/dist/chunks/{studio-3dkcd4c5.js → studio-x4qkdat5.js} +62 -57
  89. package/dist/chunks/studio-x813zp48.js +195 -0
  90. package/dist/chunks/{studio-qpfq7xhm.js → studio-xrapxwwc.js} +22 -285
  91. package/dist/chunks/{studio-xm3dbxvn.js → studio-zczps70q.js} +2 -2
  92. package/dist/chunks/{studio-8ezdegcx.js → studio-zqazsct2.js} +40 -36
  93. package/dist/chunks/workspace-fjx52ryv.js +89 -0
  94. package/dist/iframe-entry.js +141 -56
  95. package/dist/manifest.json +7 -0
  96. package/dist/studio.js +2605 -1950
  97. package/favicon.ico +0 -0
  98. package/index.html +1 -0
  99. package/package.json +20 -18
  100. package/src/about/about-modal.ts +4 -3
  101. package/src/browse/library-pane.ts +57 -3
  102. package/src/canvas/canvas-render.ts +23 -1
  103. package/src/canvas/iframe-patch.ts +47 -21
  104. package/src/canvas/iframe-render.ts +22 -6
  105. package/src/commands/app-commands.ts +4 -0
  106. package/src/commands/command-args.ts +29 -0
  107. package/src/commands/context.ts +15 -1
  108. package/src/commands/defaults.ts +29 -1
  109. package/src/commands/levels.ts +16 -0
  110. package/src/commands/live-context.ts +3 -0
  111. package/src/content/collection-match.ts +267 -0
  112. package/src/content/entry-commands.ts +38 -29
  113. package/src/content/entry-fields.ts +6 -0
  114. package/src/editor/shortcuts.ts +5 -0
  115. package/src/files/file-ops.ts +10 -42
  116. package/src/files/files.ts +487 -59
  117. package/src/files/fs-events.ts +9 -0
  118. package/src/files/gitignore.ts +432 -0
  119. package/src/files/media-paths.ts +13 -42
  120. package/src/files/media-usage.ts +41 -131
  121. package/src/files/serialize-document.ts +60 -0
  122. package/src/format/convert-file.ts +511 -0
  123. package/src/format/format-choices.ts +199 -0
  124. package/src/grid/grid-view.ts +16 -2
  125. package/src/hosting/document.ts +2 -0
  126. package/src/hosting/layout.ts +8 -0
  127. package/src/media/media-open.ts +58 -0
  128. package/src/media/media-pane.ts +310 -0
  129. package/src/new-project/import-tab.ts +357 -163
  130. package/src/new-project/location-fields.ts +8 -5
  131. package/src/new-project/new-project-modal.ts +27 -34
  132. package/src/packages/ensure-deps.ts +14 -7
  133. package/src/packages/jxsuite-update.ts +11 -11
  134. package/src/page-params.ts +10 -46
  135. package/src/panels/activity-bar.ts +45 -16
  136. package/src/panels/ai-chat/attached-context.ts +6 -1
  137. package/src/panels/ai-chat/chat-view.ts +255 -13
  138. package/src/panels/ai-chat/composer.ts +31 -97
  139. package/src/panels/ai-panel.ts +116 -2
  140. package/src/panels/navigator-panels.ts +7 -6
  141. package/src/panels/settings-menu.ts +799 -0
  142. package/src/panels/toolbar.ts +135 -15
  143. package/src/platforms/cloud.ts +261 -70
  144. package/src/platforms/devserver.ts +67 -33
  145. package/src/preview/preview-overlay.ts +226 -0
  146. package/src/publish/publish-panel.ts +62 -2
  147. package/src/services/ai-ask.ts +247 -0
  148. package/src/services/ai-import-tools.ts +532 -0
  149. package/src/services/ai-models.ts +108 -1
  150. package/src/services/ai-project-tools.ts +20 -26
  151. package/src/services/ai-system-prompt.ts +88 -2
  152. package/src/services/ai-turn-signal.ts +70 -0
  153. package/src/services/connection.ts +74 -0
  154. package/src/services/context-manager.ts +101 -1
  155. package/src/services/document-assistant.ts +45 -4
  156. package/src/services/import-client.ts +33 -6
  157. package/src/services/import-run.ts +158 -0
  158. package/src/services/import-seed.ts +120 -0
  159. package/src/services/jx-validate.ts +58 -6
  160. package/src/services/project-adoption.ts +71 -0
  161. package/src/services/references.ts +0 -0
  162. package/src/services/settings/definitions.ts +17 -0
  163. package/src/services/tool-executor.ts +45 -2
  164. package/src/settings/contexts-section.ts +45 -3
  165. package/src/settings/dependencies-editor.ts +43 -23
  166. package/src/settings/general-settings.ts +30 -12
  167. package/src/settings/preferences-accounts.ts +193 -12
  168. package/src/settings/preferences-dialog.ts +93 -59
  169. package/src/settings/preferences-sections.ts +57 -0
  170. package/src/settings/settings-document.ts +65 -9
  171. package/src/studio.ts +33 -6
  172. package/src/tabs/transact.ts +42 -19
  173. package/src/types.ts +129 -7
  174. package/src/ui/ai-managed-connect.ts +62 -13
  175. package/src/ui/ai-model-picker.ts +189 -0
  176. package/src/ui/cf-account-picker.ts +200 -0
  177. package/src/ui/choice-field.ts +72 -0
  178. package/src/ui/layers.ts +83 -5
  179. package/src/utils/studio-utils.ts +22 -52
  180. package/styles/forced-colors.css +7 -0
  181. package/styles/overlays.css +256 -0
  182. package/styles/panels.css +13 -1
  183. package/styles/shell.css +147 -0
  184. package/dist/chunks/Overlay.dev-d2ajy6sj.js +0 -23
  185. package/dist/chunks/content-source-7fy9qrm0.js +0 -40
  186. package/dist/chunks/files-xcybanxe.js +0 -70
  187. package/dist/chunks/layers-panel-27essgkc.js +0 -60
  188. package/dist/chunks/publish-panel-09sy2bab.js +0 -22
  189. package/dist/chunks/quick-search-sefb61v8.js +0 -55
  190. package/dist/chunks/right-panel-9r32jd5j.js +0 -39
  191. package/dist/chunks/sp-overlay.dev-s18hymn9.js +0 -18
  192. package/dist/chunks/sp-popover.dev-dj9x7e7a.js +0 -9
  193. package/dist/chunks/sp-progress-circle.dev-0zxcyz3r.js +0 -15
  194. package/dist/chunks/sp-tooltip.dev-5c6d1kjz.js +0 -15
  195. package/dist/chunks/studio-bw5dz6km.js +0 -608
  196. package/dist/chunks/studio-c31yb4t6.js +0 -55
  197. package/src/canvas/site-style-css.ts +0 -117
@@ -1,24 +1,28 @@
1
+ import {
2
+ distributePageIntoLayout,
3
+ getEffectiveElements,
4
+ getEffectiveHead,
5
+ getEffectiveImports,
6
+ getEffectiveLayoutPath,
7
+ getEffectiveLocales,
8
+ getEffectiveMedia,
9
+ resolveLayoutDoc,
10
+ setLayoutSelection,
11
+ shell
12
+ } from "./studio-msd847zn.js";
1
13
  import {
2
14
  PRIMARY_PANE,
3
15
  activeTab,
4
- allCanvasSurfaces,
5
16
  argsSchema,
6
17
  booleanArg,
7
18
  booleanProperty,
8
19
  boundedNumberArg,
9
20
  cloneSelection,
10
21
  collabState,
11
- distributePageIntoLayout,
12
22
  emptyContext,
13
23
  enumArg,
14
24
  enumProperty,
15
25
  focusPane,
16
- getEffectiveElements,
17
- getEffectiveHead,
18
- getEffectiveImports,
19
- getEffectiveLayoutPath,
20
- getEffectiveLocales,
21
- getEffectiveMedia,
22
26
  isTabActive,
23
27
  localeDirection,
24
28
  mutateInsertNode,
@@ -30,31 +34,24 @@ import {
30
34
  paneById,
31
35
  primarySelection,
32
36
  resolveI18n,
33
- resolveLayoutDoc,
34
- setLayoutSelection,
35
- shell,
36
- stageContaining,
37
37
  stringArg,
38
38
  stringProperty,
39
- surfaceForPane,
40
39
  toggleSelected,
41
40
  transact,
42
41
  transactDoc,
43
- view,
44
42
  workspace
45
- } from "./studio-r5xbtctf.js";
43
+ } from "./studio-trxrabqf.js";
44
+ import {
45
+ allCanvasSurfaces,
46
+ stageContaining,
47
+ surfaceForPane,
48
+ view
49
+ } from "./studio-wcy8trfx.js";
46
50
  import {
47
51
  classMap,
48
52
  ifDefined,
49
53
  styleMap
50
- } from "./studio-twsafr1e.js";
51
- import {
52
- ref as ref2
53
- } from "./studio-kvfx9z2c.js";
54
- import {
55
- html,
56
- nothing
57
- } from "./studio-5x5774ak.js";
54
+ } from "./studio-m3hwn7y1.js";
58
55
  import {
59
56
  _defineProperty,
60
57
  combine,
@@ -66,34 +63,19 @@ import {
66
63
  buildComponentInstance,
67
64
  componentRegistry,
68
65
  computeRelativePath
69
- } from "./studio-s519zc99.js";
66
+ } from "./studio-bgxt93ga.js";
70
67
  import {
71
- bodyReturnsValue,
72
68
  childIndex,
73
69
  childList,
74
- displayTagName,
75
70
  getNodeAtPath,
76
- hasStructuredBody,
77
71
  isAncestor,
78
- isExpressionDef,
79
- isFunctionDef,
80
- isJsonObject,
81
- isMappedArray,
82
- isNamedFormulaDef,
83
- isPrivateStateKey,
84
- isPrototypeDef,
85
- isRef,
86
- isServerFnDef,
87
- isTagExpression,
88
- isTemplateString,
89
72
  leftPanel,
90
- paramNames,
91
73
  parentElementPath,
92
74
  pathsEqual,
93
75
  projectState,
94
76
  renderOnly,
95
77
  stripEventHandlers
96
- } from "./studio-cjm7fdjf.js";
78
+ } from "./studio-p4ngc046.js";
97
79
  import {
98
80
  computed,
99
81
  effect,
@@ -104,15 +86,39 @@ import {
104
86
  reactive,
105
87
  ref,
106
88
  toRaw
107
- } from "./studio-qpfq7xhm.js";
89
+ } from "./studio-xrapxwwc.js";
90
+ import {
91
+ ref as ref2
92
+ } from "./studio-4rzyrtjz.js";
93
+ import {
94
+ html,
95
+ nothing
96
+ } from "./studio-kryvsw6j.js";
97
+ import {
98
+ bodyReturnsValue,
99
+ displayTagName,
100
+ hasStructuredBody,
101
+ isExpressionDef,
102
+ isFunctionDef,
103
+ isJsonObject,
104
+ isMappedArray,
105
+ isNamedFormulaDef,
106
+ isPrivateStateKey,
107
+ isPrototypeDef,
108
+ isRef,
109
+ isServerFnDef,
110
+ isTagExpression,
111
+ isTemplateString,
112
+ paramNames
113
+ } from "./studio-q7v10cg2.js";
108
114
  import {
109
115
  formatByName,
110
116
  loadExtensions
111
- } from "./studio-hcxzyk3x.js";
117
+ } from "./studio-ahn3pdgx.js";
112
118
  import {
113
119
  getPlatform,
114
120
  hasPlatform
115
- } from "./studio-sas7mt3k.js";
121
+ } from "./studio-9ab8gqsm.js";
116
122
  import {
117
123
  bundleUrl
118
124
  } from "./studio-53n8bp04.js";
@@ -195,23 +201,18 @@ function tabOfContainer(container) {
195
201
  return tabOfPane(paneOfContainer(container));
196
202
  }
197
203
 
198
- // src/page-params.ts
204
+ // ../site/src/routes.ts
199
205
  var PARAM_SEGMENT = /\[\.\.\.(\w+)\]|\[(\w+)\]/g;
200
- function dynamicRouteParams(documentPath) {
201
- if (!documentPath) {
202
- return [];
203
- }
204
- const params = [];
205
- for (const match of documentPath.matchAll(PARAM_SEGMENT)) {
206
- params.push(match[1] ?? match[2]);
207
- }
208
- return params;
206
+ function pageRelativePath(documentPath) {
207
+ return documentPath.split("\\").join("/").replace(/^\.\//, "").replace(/^\//, "").replace(/^pages\//, "");
209
208
  }
210
- function documentUrlPattern(documentPath) {
211
- if (!documentPath) {
212
- return "/";
209
+ function fileToRoute(relativePath) {
210
+ let urlPath = pageRelativePath(relativePath);
211
+ const lastSegment = urlPath.slice(urlPath.lastIndexOf("/") + 1);
212
+ const dot = lastSegment.lastIndexOf(".");
213
+ if (dot > 0) {
214
+ urlPath = urlPath.slice(0, urlPath.length - (lastSegment.length - dot));
213
215
  }
214
- let urlPath = documentPath.replace(/^\.\//, "").replace(/^pages\//, "").replace(/\.[^/.]+$/, "");
215
216
  if (urlPath.endsWith("/index")) {
216
217
  urlPath = urlPath.slice(0, -6) || "/";
217
218
  } else if (urlPath === "index") {
@@ -220,8 +221,35 @@ function documentUrlPattern(documentPath) {
220
221
  if (!urlPath.startsWith("/")) {
221
222
  urlPath = `/${urlPath}`;
222
223
  }
223
- return urlPath.replaceAll(PARAM_SEGMENT, (_match, spread, named) => spread ? "*" : `:${named}`);
224
+ const params = [];
225
+ let isDynamic = false;
226
+ let isCatchAll = false;
227
+ const urlPattern = urlPath.replaceAll(PARAM_SEGMENT, (_match, spread, named) => {
228
+ isDynamic = true;
229
+ if (spread) {
230
+ isCatchAll = true;
231
+ params.push(spread);
232
+ return "*";
233
+ }
234
+ params.push(named);
235
+ return `:${named}`;
236
+ });
237
+ return { isCatchAll, isDynamic, params, urlPattern };
238
+ }
239
+ function documentUrlPattern(documentPath) {
240
+ if (!documentPath) {
241
+ return "/";
242
+ }
243
+ return fileToRoute(documentPath).urlPattern;
224
244
  }
245
+ function dynamicRouteParams(documentPath) {
246
+ if (!documentPath) {
247
+ return [];
248
+ }
249
+ return fileToRoute(documentPath).params;
250
+ }
251
+
252
+ // src/page-params.ts
225
253
  function pagePathsDef(doc) {
226
254
  const fromDoc = doc.document?.$paths;
227
255
  const fromFrontmatter = doc.frontmatter?.$paths;
@@ -2046,6 +2074,39 @@ function removeElementRef(elements, ref3) {
2046
2074
  });
2047
2075
  }
2048
2076
 
2077
+ // ../runtime/src/css.ts
2078
+ function camelToKebab(s) {
2079
+ return s.replaceAll(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
2080
+ }
2081
+ var MEDIA_TYPES = new Set(["all", "print", "screen", "speech"]);
2082
+ function resolveAtQuery(atKey, mediaQueries) {
2083
+ if (atKey.startsWith("@--")) {
2084
+ return mediaQueries[atKey.slice(1)] ?? atKey.slice(1);
2085
+ }
2086
+ if (atKey.startsWith("@(")) {
2087
+ const inner = atKey.slice(2, -1).trim();
2088
+ return MEDIA_TYPES.has(inner.toLowerCase()) ? inner : atKey.slice(1);
2089
+ }
2090
+ return null;
2091
+ }
2092
+ var COLOR_SCHEME_ATTR = "data-color-scheme";
2093
+ function pureSchemeOf(query) {
2094
+ const m = /^\(\s*prefers-color-scheme\s*:\s*(light|dark)\s*\)$/.exec(query.trim());
2095
+ return m?.[1] ?? null;
2096
+ }
2097
+ function schemeSelectors(selector, scheme) {
2098
+ if (selector === ":root" || selector === "html") {
2099
+ return {
2100
+ auto: `${selector}:where(:not([${COLOR_SCHEME_ATTR}]))`,
2101
+ forced: `${selector}:where([${COLOR_SCHEME_ATTR}="${scheme}"])`
2102
+ };
2103
+ }
2104
+ return {
2105
+ auto: `:where(:root:not([${COLOR_SCHEME_ATTR}])) ${selector}`,
2106
+ forced: `:where(:root[${COLOR_SCHEME_ATTR}="${scheme}"]) ${selector}`
2107
+ };
2108
+ }
2109
+
2049
2110
  // ../schema/src/intl.ts
2050
2111
  var DEFAULT_FORMAT_LOCALE = "en-US";
2051
2112
  var DEFAULT_TIME_ZONE = "UTC";
@@ -2928,7 +2989,6 @@ function serializeCookie(name, value, options) {
2928
2989
  }
2929
2990
  return parts.join("; ");
2930
2991
  }
2931
-
2932
2992
  // ../runtime/src/runtime.ts
2933
2993
  var _resolveCache = new Map;
2934
2994
  async function resolve(source) {
@@ -3222,6 +3282,32 @@ function evaluateTemplate(str, state) {
3222
3282
  const fn = new Function("state", "$map", "item", "index", `return \`${str}\``);
3223
3283
  return fn(state, $map, $map?.item, $map?.index);
3224
3284
  }
3285
+ function isSingleExpression(str) {
3286
+ if (!str.startsWith("${") || !str.endsWith("}")) {
3287
+ return false;
3288
+ }
3289
+ let depth = 0;
3290
+ for (let i = 1;i < str.length; i += 1) {
3291
+ const c = str[i];
3292
+ if (c === "{") {
3293
+ depth += 1;
3294
+ } else if (c === "}") {
3295
+ depth -= 1;
3296
+ if (depth === 0) {
3297
+ return i === str.length - 1;
3298
+ }
3299
+ }
3300
+ }
3301
+ return false;
3302
+ }
3303
+ function evaluateAttrTemplate(str, state) {
3304
+ if (!isSingleExpression(str)) {
3305
+ return evaluateTemplate(str, state);
3306
+ }
3307
+ const $map = state?.$map;
3308
+ const fn = new Function("state", "$map", "item", "index", `return (${str.slice(2, -1)})`);
3309
+ return fn(state, $map, $map?.item, $map?.index);
3310
+ }
3225
3311
  var _moduleCache = new Map;
3226
3312
  async function resolveFunction(def, state, key, base) {
3227
3313
  if (def.body && def.$src) {
@@ -3608,16 +3694,33 @@ function applyStyle(el, styleDef, mediaQueries = {}, state = {}) {
3608
3694
  elementStyleTags.set(el, tag);
3609
3695
  }
3610
3696
  var elementStyleTags = new WeakMap;
3697
+ var ENUMERATED_ATTRS = new Set(["contenteditable", "draggable", "spellcheck"]);
3698
+ function booleanAttrValue(name, value) {
3699
+ const lower = name.toLowerCase();
3700
+ if (lower.startsWith("aria-") || ENUMERATED_ATTRS.has(lower)) {
3701
+ return String(value);
3702
+ }
3703
+ return value ? "" : null;
3704
+ }
3611
3705
  function applyAttributes(el, attrs, state) {
3612
3706
  for (const [k, v] of Object.entries(attrs)) {
3613
3707
  const attr = canvasAttrName(el, k);
3614
3708
  const write = (resolved) => {
3709
+ if (typeof resolved === "boolean") {
3710
+ const text = booleanAttrValue(attr, resolved);
3711
+ if (text === null) {
3712
+ el.removeAttribute(attr);
3713
+ } else {
3714
+ el.setAttribute(attr, text);
3715
+ }
3716
+ return;
3717
+ }
3615
3718
  el.setAttribute(attr, canvasAssetValue(el.tagName, k, String(resolved ?? "")));
3616
3719
  };
3617
3720
  if (isRefObj(v)) {
3618
3721
  effect(() => write(resolveRef(v.$ref, state)));
3619
3722
  } else if (isTemplateString(v)) {
3620
- effect(() => write(evaluateTemplate(v, state)));
3723
+ effect(() => write(evaluateAttrTemplate(v, state)));
3621
3724
  } else {
3622
3725
  write(v);
3623
3726
  }
@@ -4288,40 +4391,9 @@ function mergeProps(def, parentState) {
4288
4391
  }
4289
4392
  return child;
4290
4393
  }
4291
- function camelToKebab(s) {
4292
- return s.replaceAll(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
4293
- }
4294
4394
  function toCSSText(rules) {
4295
4395
  return Object.entries(rules).filter(([k, v]) => !isNestedSelector(k) && (v === null || typeof v !== "object")).map(([p, v]) => `${camelToKebab(p)}: ${canvasStyleValue(String(v))}`).join("; ");
4296
4396
  }
4297
- var MEDIA_TYPES = new Set(["all", "print", "screen", "speech"]);
4298
- function resolveAtQuery(atKey, mediaQueries) {
4299
- if (atKey.startsWith("@--")) {
4300
- return mediaQueries[atKey.slice(1)] ?? atKey.slice(1);
4301
- }
4302
- if (atKey.startsWith("@(")) {
4303
- const inner = atKey.slice(2, -1).trim();
4304
- return MEDIA_TYPES.has(inner.toLowerCase()) ? inner : atKey.slice(1);
4305
- }
4306
- return null;
4307
- }
4308
- var COLOR_SCHEME_ATTR = "data-color-scheme";
4309
- function pureSchemeOf(query) {
4310
- const m = /^\(\s*prefers-color-scheme\s*:\s*(light|dark)\s*\)$/.exec(query.trim());
4311
- return m?.[1] ?? null;
4312
- }
4313
- function schemeSelectors(selector, scheme) {
4314
- if (selector === ":root" || selector === "html") {
4315
- return {
4316
- auto: `${selector}:where(:not([${COLOR_SCHEME_ATTR}]))`,
4317
- forced: `${selector}:where([${COLOR_SCHEME_ATTR}="${scheme}"])`
4318
- };
4319
- }
4320
- return {
4321
- auto: `:where(:root:not([${COLOR_SCHEME_ATTR}])) ${selector}`,
4322
- forced: `:where(:root[${COLOR_SCHEME_ATTR}="${scheme}"]) ${selector}`
4323
- };
4324
- }
4325
4397
  var _rootMedia = {};
4326
4398
  var _elementDefs = new Map;
4327
4399
  async function registerElements(elements, base) {
@@ -7853,7 +7925,7 @@ function openPageAction(label = "Open a page…") {
7853
7925
  return {
7854
7926
  label,
7855
7927
  run: () => {
7856
- import("./quick-search-sefb61v8.js").then((m) => {
7928
+ import("./quick-search-zccjp6gv.js").then((m) => {
7857
7929
  m.openQuickSearch();
7858
7930
  });
7859
7931
  }
@@ -7917,6 +7989,7 @@ var PLACEMENTS = [
7917
7989
  "blockbar",
7918
7990
  "blockbar/format",
7919
7991
  "outline/row",
7992
+ "settings/menu",
7920
7993
  "palette",
7921
7994
  "never"
7922
7995
  ];
@@ -7943,6 +8016,10 @@ var PLACEMENT_MATRIX = {
7943
8016
  note: "the bar's inline-format cluster — a range inside the selection is still the selection"
7944
8017
  },
7945
8018
  "outline/row": { admits: ["selection"], note: "row actions act on the row's node" },
8019
+ "settings/menu": {
8020
+ admits: ["application", "project"],
8021
+ note: "the rail foot's gear menu — the settings family. It is a MENU, not a pinned slot, so it " + "may host two levels for the reason commandbar/overflow does: a menu prints each row's own " + "name, chord and gate, and draws a divider where the level changes. The rail's PINNED " + "groups stay single-level, in PANEL_PLACEMENT_MATRIX"
8022
+ },
7946
8023
  palette: {
7947
8024
  admits: ["application", "project", "document", "selection"],
7948
8025
  note: "the level-agnostic surface; it groups rows by level"
@@ -8123,7 +8200,7 @@ function railPanelSet() {
8123
8200
  return RAIL_GROUP_LEVELS.flatMap(({ level }) => railable.filter((panel) => panel.level === level));
8124
8201
  }
8125
8202
 
8126
- export { KEY_SCOPES, CATEGORIES, checkRecordPlacements, intlHelpersClause, PURE_METHOD_OPS, BLESSED_OPERATORS, BLESSED_GLOBALS, isMutating, evaluateExpression, rectOf, loopbackAssetSrc, getPreviewNavigateHandler, activeCanvasSurface, tabOfPane, derivationOfPane, surfacesShowingTab, canvasModeOfTab, canvasModeOfPane, activeMediaOfPane, paneOfContainer, tabOfContainer, dynamicRouteParams, documentUrlPattern, pagePathsDef, invalidateParamValues, loadParamValues, isComponentDoc, componentPropEntries, PUBLIC_DIR, normalizeProjectPath, encodeProjectPath, contentMountFor, resolveAssetRef, projectLocales, assetContextFor, previewAssetSrc, hostAssetDeclarations, SPAN_FULL_RENDER, SPAN_MOUNT_CANVAS, SPAN_PATCH_BATCH, canvasPerf, recordEscalation, timeSpan, timeSpanAsync, mediaDisplayName, defaultDef, parentCursorToIframe, serializeJxPath, elements_meta_default, getInlineActions, isInlineElement, isEditing, bubbleInlinePath, stageZoom, canvasPanelTemplate, observeCenterUntilStable, applyTransform, applyEditZoom, setEditZoom, requestEditZoom, fitToScreen, getFit, setFit, markExplicitZoom, setUserZoom, fitOnCanvasEntry, resetZoom, panToElement, canvasBaseViewsFor, canvasBaseViewOf, previewStateOf, setCanvasView, registerCanvasViewCommands, updateActivePanelHeaders, setDragGhost, moveDragGhost, clearDragGhost, disableNativeDragPreview, attachInstruction, extractInstruction, hasElement, enableElement, disableElement, removePackageElements, removeElementRef, setSkipServerFunctions, runScoped, setCanvasAssetResolver, buildScope, renderNode, pureSchemeOf, renderComponentPreview, registerLayersDnD, registerComponentsDnD, registerElementsDnD, applyDropInstruction, sawIframeDragOver, allowAutoRequestsOnNextRender, requestCanvasEval, flushCanvasEdits, liveDragHostAt, beginDragSession, currentDragSession, hostDragGeometry, canvasIdleBlockers, canvasPointAt, revealCanvasPath, adoptCanvasPreviewMode, postDragMessage, endDragSession, clearDropIndicator, setNativeDragEnterHandler, setInsertZoneClickHandler, setFileDropHandler, setCanvasSlashHandler, setCanvasContextMenuHandler, setStylebookHitHandler, isCaretActive, setToolbarRefresh, setCanvasPointerDownHandler, setIframePatchEscalation, postPatchToHosts, dragHostTab, releaseCanvasHosts, mountIframeCanvas, mountStylebookCanvas, postColorSchemeToLiveHosts, postLocaleToLiveHosts, postSiteStyleToLiveHosts, postStyleUpdateToStylebookHosts, panToStylebookTag, getEditSnapshot, setKeymapSource, postApplyFormat, postOpenSlash, commitActiveEditSession, getEditBarAnchorRect, clickAnythingTo, staleSelectionMessage, openPageAction, renderEmptyState, panelContext, registerPanel, getPanel, listPanels, isPanelVisible, railGroups, railPanelSet };
8203
+ export { LEVELS, KEY_SCOPES, CATEGORIES, checkRecordPlacements, intlHelpersClause, PURE_METHOD_OPS, BLESSED_OPERATORS, BLESSED_GLOBALS, isMutating, evaluateExpression, rectOf, loopbackAssetSrc, getPreviewNavigateHandler, activeCanvasSurface, tabOfPane, derivationOfPane, surfacesShowingTab, canvasModeOfTab, canvasModeOfPane, activeMediaOfPane, paneOfContainer, tabOfContainer, documentUrlPattern, dynamicRouteParams, pagePathsDef, invalidateParamValues, loadParamValues, isComponentDoc, componentPropEntries, PUBLIC_DIR, normalizeProjectPath, encodeProjectPath, contentMountFor, resolveAssetRef, projectLocales, assetContextFor, previewAssetSrc, hostAssetDeclarations, SPAN_FULL_RENDER, SPAN_MOUNT_CANVAS, SPAN_PATCH_BATCH, canvasPerf, recordEscalation, timeSpan, timeSpanAsync, mediaDisplayName, defaultDef, parentCursorToIframe, serializeJxPath, elements_meta_default, getInlineActions, isInlineElement, isEditing, bubbleInlinePath, stageZoom, canvasPanelTemplate, observeCenterUntilStable, applyTransform, applyEditZoom, setEditZoom, requestEditZoom, fitToScreen, getFit, setFit, markExplicitZoom, setUserZoom, fitOnCanvasEntry, resetZoom, panToElement, canvasBaseViewsFor, canvasBaseViewOf, previewStateOf, setCanvasView, registerCanvasViewCommands, updateActivePanelHeaders, setDragGhost, moveDragGhost, clearDragGhost, disableNativeDragPreview, attachInstruction, extractInstruction, hasElement, enableElement, disableElement, removePackageElements, removeElementRef, pureSchemeOf, setSkipServerFunctions, runScoped, setCanvasAssetResolver, buildScope, renderNode, renderComponentPreview, registerLayersDnD, registerComponentsDnD, registerElementsDnD, applyDropInstruction, sawIframeDragOver, allowAutoRequestsOnNextRender, requestCanvasEval, flushCanvasEdits, liveDragHostAt, beginDragSession, currentDragSession, hostDragGeometry, canvasIdleBlockers, canvasPointAt, revealCanvasPath, adoptCanvasPreviewMode, postDragMessage, endDragSession, clearDropIndicator, setNativeDragEnterHandler, setInsertZoneClickHandler, setFileDropHandler, setCanvasSlashHandler, setCanvasContextMenuHandler, setStylebookHitHandler, isCaretActive, setToolbarRefresh, setCanvasPointerDownHandler, setIframePatchEscalation, postPatchToHosts, dragHostTab, releaseCanvasHosts, mountIframeCanvas, mountStylebookCanvas, postColorSchemeToLiveHosts, postLocaleToLiveHosts, postSiteStyleToLiveHosts, postStyleUpdateToStylebookHosts, panToStylebookTag, getEditSnapshot, setKeymapSource, postApplyFormat, postOpenSlash, commitActiveEditSession, getEditBarAnchorRect, clickAnythingTo, staleSelectionMessage, openPageAction, renderEmptyState, panelContext, registerPanel, getPanel, listPanels, isPanelVisible, railGroups, railPanelSet };
8127
8204
 
8128
- //# debugId=A13D4D75476DBAED64756E2164756E21
8129
- //# sourceMappingURL=studio-j595e748.js.map
8205
+ //# debugId=E18388B1157EC0CA64756E2164756E21
8206
+ //# sourceMappingURL=studio-2b946z26.js.map
@@ -1,26 +1,28 @@
1
+ import {
2
+ collectionDirs,
3
+ createCollectionSource,
4
+ createPagesSource
5
+ } from "./studio-b55y6ewx.js";
1
6
  import {
2
7
  cellToText,
3
8
  coerceCellInput,
4
- collectionDirs,
5
9
  columnsFromSchema,
6
- createCollectionSource,
7
10
  createGridController,
8
- createPagesSource,
9
11
  inferColumnsFromRows,
12
+ makeGridTabId
13
+ } from "./studio-cmb03bg5.js";
14
+ import {
10
15
  isRecentLocal,
11
- makeGridTabId,
12
16
  markLocalMutation
13
- } from "./studio-dc8s8heb.js";
17
+ } from "./studio-q43a5y9h.js";
14
18
  import {
15
19
  MEDIA_EXTENSIONS,
16
20
  extensionOf
17
- } from "./studio-a0yp7syn.js";
21
+ } from "./studio-qjy2z9bv.js";
18
22
  import {
19
23
  activateTab,
20
24
  argsSchema,
21
- errorMessage,
22
25
  findContentTypeSchema,
23
- openModal,
24
26
  openTab,
25
27
  optionalStringArg,
26
28
  resolveI18n,
@@ -28,20 +30,26 @@ import {
28
30
  stringArg,
29
31
  stringProperty,
30
32
  workspace
31
- } from "./studio-r5xbtctf.js";
32
- import {
33
- html
34
- } from "./studio-5x5774ak.js";
33
+ } from "./studio-trxrabqf.js";
35
34
  import {
36
35
  projectState
37
- } from "./studio-cjm7fdjf.js";
36
+ } from "./studio-p4ngc046.js";
37
+ import {
38
+ openModal
39
+ } from "./studio-t7qb9db8.js";
40
+ import {
41
+ errorMessage
42
+ } from "./studio-9n4mrmnb.js";
43
+ import {
44
+ html
45
+ } from "./studio-kryvsw6j.js";
38
46
  import {
39
47
  formatForPath,
40
48
  loadFormats
41
- } from "./studio-hcxzyk3x.js";
49
+ } from "./studio-ahn3pdgx.js";
42
50
  import {
43
51
  getPlatform
44
- } from "./studio-sas7mt3k.js";
52
+ } from "./studio-9ab8gqsm.js";
45
53
 
46
54
  // src/services/data-service.ts
47
55
  function platformOrNull() {
@@ -996,5 +1004,5 @@ function registerGridCommands(registry) {
996
1004
 
997
1005
  export { dataSurfaceAvailable, testConnection, pushSchema, deriveSecretEnvName, parseCsv, createCsvFileSource, LIBRARY_CATEGORIES, LIBRARY_CATEGORY_KEYS, libraryCategory, uploadDirForCategory, scanLibrary, filterLibrary, LIBRARY_LAYOUTS, LIBRARY_LAYOUT_LABELS, PREVIEW_LAYOUTS, projectLocales, libraryLocales, groupByDate, groupByCategory, libraryColumns, createLibrarySource, openCsvGridTab, openLibraryTab, openPagesGrid, openGridSourcePicker, registerGridCommands };
998
1006
 
999
- //# debugId=B5A73986FCDCB07464756E2164756E21
1000
- //# sourceMappingURL=studio-pkp61mh8.js.map
1007
+ //# debugId=157CEC83DCC4607364756E2164756E21
1008
+ //# sourceMappingURL=studio-3bqpr0zh.js.map
@@ -1,7 +1,10 @@
1
+ import {
2
+ resetModelCache
3
+ } from "./studio-dm19q43r.js";
1
4
  import {
2
5
  getCfToken,
3
6
  setCfToken
4
- } from "./studio-kfpek536.js";
7
+ } from "./studio-kyh9avvv.js";
5
8
  import {
6
9
  connectDeploy,
7
10
  currentDeploy,
@@ -10,20 +13,23 @@ import {
10
13
  noteDeployment,
11
14
  platformSupportsPublish,
12
15
  writeDeployConfig
13
- } from "./studio-2x9zbxmx.js";
16
+ } from "./studio-ef49pnzx.js";
17
+ import {
18
+ projectState
19
+ } from "./studio-p4ngc046.js";
14
20
  import {
15
21
  activeRegistry,
16
22
  openModal
17
- } from "./studio-r5xbtctf.js";
23
+ } from "./studio-t7qb9db8.js";
18
24
  import {
19
25
  html
20
- } from "./studio-5x5774ak.js";
21
- import {
22
- projectState
23
- } from "./studio-cjm7fdjf.js";
26
+ } from "./studio-kryvsw6j.js";
24
27
  import {
25
28
  getPlatform
26
- } from "./studio-sas7mt3k.js";
29
+ } from "./studio-9ab8gqsm.js";
30
+ import {
31
+ __require
32
+ } from "./studio-a0tswy0w.js";
27
33
 
28
34
  // src/publish/publish-panel.ts
29
35
  var PAGES_APP_INSTALL_URL = "https://github.com/apps/cloudflare-pages/installations/new";
@@ -51,7 +57,7 @@ async function loadConnection() {
51
57
  render();
52
58
  try {
53
59
  _connection = await getPlatform().cfConnection?.() ?? null;
54
- if (_connection?.connected) {
60
+ if (_connection?.connected && !_connection.needsReconnect) {
55
61
  _accounts = await listAccounts();
56
62
  _form.accountId = _connection.accountId ?? _accounts[0]?.id ?? "";
57
63
  const deploy = currentDeploy();
@@ -87,13 +93,21 @@ function openAccounts() {
87
93
  }
88
94
  async function hostedConnect() {
89
95
  _busy = true;
96
+ _error = "";
90
97
  render();
91
98
  try {
92
- await getPlatform().cfConnect?.();
99
+ const outcome = await getPlatform().cfConnect?.() ?? null;
100
+ if (outcome?.status === "timeout") {
101
+ _error = "The Cloudflare window didn't finish. Sign in there, then reconnect — nothing was changed.";
102
+ } else if (outcome?.status === "connected" && !outcome.connection.accountId) {
103
+ const { openCfAccountPicker } = await import("./cf-account-picker-en86v7x7.js");
104
+ await openCfAccountPicker();
105
+ }
93
106
  } catch (error) {
94
107
  _error = error instanceof Error ? error.message : String(error);
95
108
  }
96
109
  _busy = false;
110
+ resetModelCache();
97
111
  await loadConnection();
98
112
  }
99
113
  async function submitConnect() {
@@ -152,6 +166,23 @@ function fieldRow(label, input) {
152
166
  </label>
153
167
  `;
154
168
  }
169
+ function lapsedTpl() {
170
+ return html`
171
+ <p>
172
+ Your Cloudflare connection has expired, so publishing cannot reach your account. Reconnect to
173
+ restore it — this site's Pages project and its settings are untouched.
174
+ </p>
175
+ <sp-button
176
+ variant="accent"
177
+ ?disabled=${_busy}
178
+ @click=${() => {
179
+ hostedConnect();
180
+ }}
181
+ >
182
+ ${_busy ? "Reconnecting…" : "Reconnect Cloudflare"}
183
+ </sp-button>
184
+ `;
185
+ }
155
186
  function credentialTpl() {
156
187
  const platform = getPlatform();
157
188
  if (platform.cfConnect) {
@@ -318,6 +349,9 @@ function bodyTpl() {
318
349
  if (_connection === "loading") {
319
350
  return html`<p>Checking Cloudflare connection…</p>`;
320
351
  }
352
+ if (_connection?.connected && _connection.needsReconnect) {
353
+ return lapsedTpl();
354
+ }
321
355
  if (!_connection?.connected) {
322
356
  return credentialTpl();
323
357
  }
@@ -386,5 +420,5 @@ function openPublishPanel() {
386
420
 
387
421
  export { seedPublishConnected, openPublishPanel };
388
422
 
389
- //# debugId=32DE20DAF46B08AA64756E2164756E21
390
- //# sourceMappingURL=studio-k4jvjcfx.js.map
423
+ //# debugId=F3F004CC7536951664756E2164756E21
424
+ //# sourceMappingURL=studio-4b5z1x43.js.map
@@ -1,26 +1,28 @@
1
1
  import {
2
2
  renderDeployChecklist
3
- } from "./studio-2x9zbxmx.js";
3
+ } from "./studio-ef49pnzx.js";
4
4
  import {
5
5
  registerPanel,
6
6
  renderEmptyState
7
- } from "./studio-j595e748.js";
7
+ } from "./studio-2b946z26.js";
8
8
  import {
9
- openModal,
10
9
  setBottomTab
11
- } from "./studio-r5xbtctf.js";
10
+ } from "./studio-msd847zn.js";
12
11
  import {
13
- repeat
14
- } from "./studio-kvfx9z2c.js";
15
- import {
16
- html,
17
- nothing
18
- } from "./studio-5x5774ak.js";
12
+ openModal
13
+ } from "./studio-t7qb9db8.js";
19
14
  import {
20
15
  notify,
21
16
  now,
22
17
  reactive
23
- } from "./studio-qpfq7xhm.js";
18
+ } from "./studio-xrapxwwc.js";
19
+ import {
20
+ repeat
21
+ } from "./studio-4rzyrtjz.js";
22
+ import {
23
+ html,
24
+ nothing
25
+ } from "./studio-kryvsw6j.js";
24
26
 
25
27
  // src/panels/activity-panel.ts
26
28
  var activities = reactive([]);
@@ -351,5 +353,5 @@ function showProgressModal(opts) {
351
353
 
352
354
  export { beginActivity, activityIdleBlockers, registerActivityPanel, showProgressModal };
353
355
 
354
- //# debugId=9B0932D5C517D62864756E2164756E21
355
- //# sourceMappingURL=studio-ry1vz5sv.js.map
356
+ //# debugId=55F83A7B38610BED64756E2164756E21
357
+ //# sourceMappingURL=studio-4n2b5gzb.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  rectOf
3
- } from "./studio-j595e748.js";
3
+ } from "./studio-2b946z26.js";
4
4
 
5
5
  // src/ui/virtual-window.ts
6
6
  var DEFAULT_OVERSCAN_ROWS = 3;
@@ -163,4 +163,4 @@ function watchListWindow(previous, list, spec) {
163
163
  export { computeWindow, listWindow, revealListRow, measuredRowHeight, watchListWindow };
164
164
 
165
165
  //# debugId=4C38350338F9781B64756E2164756E21
166
- //# sourceMappingURL=studio-p5dja96s.js.map
166
+ //# sourceMappingURL=studio-4r1pv6zf.js.map