@jxsuite/studio 2.4.3 → 4.0.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 (208) hide show
  1. package/README.md +5 -5
  2. package/dist/chunks/Overlay.dev-723bv0df.js +23 -0
  3. package/dist/chunks/cf-settings-45fgyx8y.js +21 -0
  4. package/dist/chunks/{components-z6cnkyy1.js → components-zmx10t62.js} +6 -5
  5. package/dist/chunks/content-source-t88vb2dr.js +49 -0
  6. package/dist/chunks/{convert-to-repeater-k10dvcc7.js → convert-to-repeater-dhw1nrz9.js} +27 -18
  7. package/dist/chunks/entry-commands-6z6bhxg0.js +46 -0
  8. package/dist/chunks/{extension-sections-0ada0xcw.js → extension-sections-3ydgjbdy.js} +32 -23
  9. package/dist/chunks/file-ops-rskmhxyq.js +48 -0
  10. package/dist/chunks/files-0cratsr0.js +92 -0
  11. package/dist/chunks/{format-host-wewba4nq.js → format-host-tgcmfs4p.js} +3 -3
  12. package/dist/chunks/fs-events-hrrg328g.js +21 -0
  13. package/dist/chunks/{git-panel-2dh1aw50.js → git-panel-0yywyk76.js} +21 -15
  14. package/dist/chunks/{jx-validate-jj9rnt4n.js → jx-validate-8q2g05x1.js} +6 -4
  15. package/dist/chunks/layers-panel-z3tqe5cd.js +67 -0
  16. package/dist/chunks/layers-q75tj2mf.js +45 -0
  17. package/dist/chunks/lit-html-j055mkh8.js +22 -0
  18. package/dist/chunks/monaco-buffer-dqw0xxpx.js +25 -0
  19. package/dist/chunks/{monaco-setup-a5wkmbgh.js → monaco-setup-rws7k4br.js} +4 -4
  20. package/dist/chunks/notify-yjm79n4s.js +30 -0
  21. package/dist/chunks/parse-24d0gay3.js +19 -0
  22. package/dist/chunks/platform-ba1j1gbh.js +16 -0
  23. package/dist/chunks/publish-panel-54jvhskq.js +28 -0
  24. package/dist/chunks/quick-search-cgfmjwq5.js +65 -0
  25. package/dist/chunks/references-3qx8fkyp.js +29 -0
  26. package/dist/chunks/right-panel-cqp8bc4v.js +46 -0
  27. package/dist/chunks/sp-overlay.dev-yztmtrs1.js +18 -0
  28. package/dist/chunks/sp-popover.dev-n2etmqdp.js +9 -0
  29. package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +15 -0
  30. package/dist/chunks/sp-tooltip.dev-xcvpnqr0.js +15 -0
  31. package/dist/chunks/{sp-tray.dev-64v4pxw8.js → sp-tray.dev-tkbscm06.js} +5 -5
  32. package/dist/chunks/{studio-f5yyvqxv.js → studio-1hbqnt19.js} +37 -31
  33. package/dist/chunks/studio-2zkz8evn.js +3163 -0
  34. package/dist/chunks/{studio-0b6fs05q.js → studio-4pqqxbrt.js} +23 -15
  35. package/dist/chunks/{studio-kvfx9z2c.js → studio-4rzyrtjz.js} +70 -31
  36. package/dist/chunks/{studio-ef8t53vc.js → studio-5q69gfag.js} +60 -56
  37. package/dist/chunks/{studio-v2c5pmjj.js → studio-5rywrkxz.js} +565 -133
  38. package/dist/chunks/{studio-6kv3apa9.js → studio-68n67094.js} +25 -9
  39. package/dist/chunks/{studio-0rqqhrdy.js → studio-7nte2hj4.js} +2 -2
  40. package/dist/chunks/{studio-hyn3vhwr.js → studio-8swrjbny.js} +31 -18
  41. package/dist/chunks/studio-92ab2jqe.js +282 -0
  42. package/dist/chunks/{studio-sas7mt3k.js → studio-9ab8gqsm.js} +2 -2
  43. package/dist/chunks/{studio-28xc8ws4.js → studio-9c4k4vhv.js} +14 -10
  44. package/dist/chunks/studio-9n4mrmnb.js +184 -0
  45. package/dist/chunks/{studio-tr20m8g8.js → studio-9r6j5ev1.js} +37 -2
  46. package/dist/chunks/{studio-aweyr4v1.js → studio-ahjfdy6e.js} +9 -7
  47. package/dist/chunks/{studio-s519zc99.js → studio-bgxt93ga.js} +3 -3
  48. package/dist/chunks/{studio-26sv44br.js → studio-cb12yz9w.js} +8543 -8784
  49. package/dist/chunks/studio-cft9r4r7.js +119 -0
  50. package/dist/chunks/{studio-rqemfhz6.js → studio-eenfkt4e.js} +6 -6
  51. package/dist/chunks/studio-eesa1myv.js +498 -0
  52. package/dist/chunks/{studio-ay8wcr2b.js → studio-eqq1w638.js} +7 -9
  53. package/dist/chunks/{studio-ke244pam.js → studio-ex8zyp98.js} +51 -25
  54. package/dist/chunks/studio-gv8vvshc.js +118 -0
  55. package/dist/chunks/studio-hbtp0eh1.js +1315 -0
  56. package/dist/chunks/{studio-cz2j1c0g.js → studio-htsf0w6m.js} +75 -123
  57. package/dist/chunks/{studio-pyrw8h0w.js → studio-kjjsjak4.js} +528 -212
  58. package/dist/chunks/{studio-5x5774ak.js → studio-kryvsw6j.js} +3 -3
  59. package/dist/chunks/studio-kyh9avvv.js +28 -0
  60. package/dist/chunks/{studio-jnakhg87.js → studio-kyk2v92a.js} +14 -14
  61. package/dist/chunks/{studio-twsafr1e.js → studio-m3hwn7y1.js} +3 -3
  62. package/dist/chunks/{studio-tzx3xmvx.js → studio-mmv72a27.js} +8 -8
  63. package/dist/chunks/{studio-vhk5fmfv.js → studio-n8b9wqwy.js} +5 -5
  64. package/dist/chunks/{studio-cjm7fdjf.js → studio-p4ngc046.js} +8 -104
  65. package/dist/chunks/{studio-sccge2wf.js → studio-p8j86wag.js} +2 -2
  66. package/dist/chunks/{studio-v1va0vhd.js → studio-pdfjntbk.js} +75 -139
  67. package/dist/chunks/studio-q43a5y9h.js +394 -0
  68. package/dist/chunks/studio-q7v10cg2.js +106 -0
  69. package/dist/chunks/{studio-2w11grav.js → studio-qq6jym04.js} +3 -3
  70. package/dist/chunks/studio-r1r7afxx.js +1066 -0
  71. package/dist/chunks/{studio-3fk1ac9z.js → studio-rdx8jcxy.js} +4 -4
  72. package/dist/chunks/{studio-4mqb9a0j.js → studio-rn9ta2mz.js} +4 -4
  73. package/dist/chunks/studio-sf7zjgv1.js +91 -0
  74. package/dist/chunks/studio-t7qb9db8.js +665 -0
  75. package/dist/chunks/studio-tmc5emrw.js +8 -0
  76. package/dist/chunks/{studio-wdt9y92a.js → studio-txwkm6p9.js} +2 -2
  77. package/dist/chunks/{studio-dgj7gq44.js → studio-v38hmvx1.js} +7 -7
  78. package/dist/chunks/{studio-7ejemhej.js → studio-vadzgkrz.js} +6 -6
  79. package/dist/chunks/studio-wcy8trfx.js +263 -0
  80. package/dist/chunks/{studio-hb7c46jy.js → studio-wx5609xd.js} +21 -15
  81. package/dist/chunks/studio-xrapxwwc.js +1539 -0
  82. package/dist/chunks/{studio-ws6ef6js.js → studio-yxrkyv8a.js} +41 -29
  83. package/dist/chunks/{studio-xm3dbxvn.js → studio-zczps70q.js} +2 -2
  84. package/dist/chunks/workspace-xpres40v.js +89 -0
  85. package/dist/iframe-entry.js +450 -48
  86. package/dist/studio.js +2455 -1761
  87. package/package.json +16 -15
  88. package/src/browse/library-layouts.ts +3 -3
  89. package/src/browse/library-pane.ts +59 -5
  90. package/src/browse/library-preview.ts +19 -3
  91. package/src/canvas/asset-refs.ts +119 -0
  92. package/src/canvas/asset-resolve.ts +256 -0
  93. package/src/canvas/canvas-live-render.ts +23 -15
  94. package/src/canvas/canvas-render.ts +23 -1
  95. package/src/canvas/iframe-entry.ts +1 -0
  96. package/src/canvas/iframe-host.ts +4 -0
  97. package/src/canvas/iframe-patch.ts +47 -21
  98. package/src/canvas/iframe-protocol.ts +9 -0
  99. package/src/canvas/iframe-render.ts +50 -16
  100. package/src/commands/app-commands.ts +4 -0
  101. package/src/commands/command-args.ts +29 -0
  102. package/src/commands/context.ts +15 -1
  103. package/src/commands/defaults.ts +29 -1
  104. package/src/commands/levels.ts +16 -0
  105. package/src/commands/live-context.ts +3 -0
  106. package/src/content/collection-match.ts +267 -0
  107. package/src/content/entry-commands.ts +38 -29
  108. package/src/content/entry-fields.ts +6 -0
  109. package/src/editor/file-drop-action.ts +2 -1
  110. package/src/editor/shortcuts.ts +5 -0
  111. package/src/files/file-ops.ts +10 -42
  112. package/src/files/files.ts +487 -61
  113. package/src/files/fs-events.ts +9 -0
  114. package/src/files/gitignore.ts +432 -0
  115. package/src/files/media-paths.ts +37 -14
  116. package/src/files/media-upload.ts +47 -6
  117. package/src/files/serialize-document.ts +60 -0
  118. package/src/format/convert-file.ts +511 -0
  119. package/src/format/format-choices.ts +199 -0
  120. package/src/grid/grid-idle.ts +45 -0
  121. package/src/grid/grid-view.ts +35 -0
  122. package/src/grid/schema-columns.ts +2 -1
  123. package/src/grid/sources/content-source.ts +24 -3
  124. package/src/media/media-open.ts +58 -0
  125. package/src/media/media-pane.ts +310 -0
  126. package/src/new-project/import-tab.ts +333 -160
  127. package/src/new-project/new-project-modal.ts +27 -34
  128. package/src/packages/ensure-deps.ts +14 -7
  129. package/src/packages/jxsuite-update.ts +11 -11
  130. package/src/page-params.ts +10 -46
  131. package/src/panels/activity-bar.ts +45 -16
  132. package/src/panels/ai-chat/attached-context.ts +6 -1
  133. package/src/panels/ai-chat/chat-view.ts +255 -13
  134. package/src/panels/ai-chat/composer.ts +21 -80
  135. package/src/panels/ai-panel.ts +116 -2
  136. package/src/panels/frontmatter-fields.ts +6 -2
  137. package/src/panels/navigator-panels.ts +7 -6
  138. package/src/panels/properties-panel.ts +8 -2
  139. package/src/panels/seo-modal.ts +5 -6
  140. package/src/panels/settings-menu.ts +799 -0
  141. package/src/panels/signals-panel.ts +2 -1
  142. package/src/panels/toolbar.ts +135 -15
  143. package/src/platforms/cloud.ts +34 -3
  144. package/src/platforms/devserver.ts +72 -34
  145. package/src/preview/preview-overlay.ts +226 -0
  146. package/src/services/ai-ask.ts +247 -0
  147. package/src/services/ai-import-tools.ts +494 -0
  148. package/src/services/ai-models.ts +101 -11
  149. package/src/services/ai-project-tools.ts +20 -26
  150. package/src/services/ai-settings.ts +69 -71
  151. package/src/services/ai-system-prompt.ts +88 -2
  152. package/src/services/ai-turn-signal.ts +70 -0
  153. package/src/services/cf-settings.ts +19 -37
  154. package/src/services/connection.ts +74 -0
  155. package/src/services/context-manager.ts +89 -0
  156. package/src/services/document-assistant.ts +49 -7
  157. package/src/services/idle.ts +6 -1
  158. package/src/services/import-client.ts +33 -6
  159. package/src/services/import-run.ts +158 -0
  160. package/src/services/import-seed.ts +120 -0
  161. package/src/services/jx-validate.ts +58 -6
  162. package/src/services/project-adoption.ts +71 -0
  163. package/src/services/references.ts +0 -0
  164. package/src/services/settings/definitions.ts +181 -0
  165. package/src/services/settings/kernel.ts +335 -0
  166. package/src/services/settings/write-queue.ts +116 -0
  167. package/src/services/tool-executor.ts +34 -2
  168. package/src/settings/contexts-section.ts +45 -3
  169. package/src/settings/dependencies-editor.ts +43 -23
  170. package/src/settings/general-settings.ts +30 -12
  171. package/src/settings/preferences-accounts.ts +6 -19
  172. package/src/settings/preferences-dialog.ts +18 -41
  173. package/src/settings/preferences-keymap.ts +8 -18
  174. package/src/settings/preferences-sections.ts +57 -0
  175. package/src/settings/schema-field-ui.ts +2 -2
  176. package/src/settings/settings-document.ts +65 -9
  177. package/src/shell.ts +6 -14
  178. package/src/studio.ts +65 -7
  179. package/src/tabs/transact.ts +42 -19
  180. package/src/types.ts +164 -8
  181. package/src/ui/ai-credentials-form.ts +52 -27
  182. package/src/ui/ai-model-picker.ts +162 -0
  183. package/src/ui/choice-field.ts +72 -0
  184. package/src/ui/layers.ts +83 -5
  185. package/src/ui/media-picker.ts +6 -11
  186. package/src/utils/studio-utils.ts +43 -31
  187. package/styles/forced-colors.css +7 -0
  188. package/styles/overlays.css +256 -0
  189. package/styles/panels.css +13 -1
  190. package/styles/shell.css +111 -0
  191. package/dist/chunks/Overlay.dev-d2ajy6sj.js +0 -23
  192. package/dist/chunks/cf-settings-g5fbf2zp.js +0 -17
  193. package/dist/chunks/content-source-k9724vcv.js +0 -39
  194. package/dist/chunks/files-yew27sn9.js +0 -69
  195. package/dist/chunks/layers-panel-qnsghwwd.js +0 -59
  196. package/dist/chunks/publish-panel-a0pdft5w.js +0 -21
  197. package/dist/chunks/quick-search-9avyc4pc.js +0 -54
  198. package/dist/chunks/right-panel-kcnhtc5j.js +0 -38
  199. package/dist/chunks/sp-overlay.dev-s18hymn9.js +0 -18
  200. package/dist/chunks/sp-popover.dev-dj9x7e7a.js +0 -9
  201. package/dist/chunks/sp-progress-circle.dev-0zxcyz3r.js +0 -15
  202. package/dist/chunks/sp-tooltip.dev-5c6d1kjz.js +0 -15
  203. package/dist/chunks/studio-a7pzveq1.js +0 -110
  204. package/dist/chunks/studio-c31yb4t6.js +0 -55
  205. package/dist/chunks/studio-ra7ar50f.js +0 -6682
  206. package/src/canvas/content-assets.ts +0 -263
  207. package/src/canvas/site-style-css.ts +0 -121
  208. package/src/services/settings-store.ts +0 -99
@@ -1,57 +1,63 @@
1
1
  import {
2
2
  pendingSchedulers
3
3
  } from "./studio-8jpzqk5s.js";
4
- import {
5
- live
6
- } from "./studio-c31yb4t6.js";
7
4
  import {
8
5
  activityIdleBlockers,
9
6
  beginActivity,
10
7
  showProgressModal
11
- } from "./studio-28xc8ws4.js";
8
+ } from "./studio-9c4k4vhv.js";
12
9
  import {
13
10
  canvasIdleBlockers,
14
11
  canvasPointAt,
15
12
  registerPanel,
16
13
  renderEmptyState,
17
14
  revealCanvasPath
18
- } from "./studio-pyrw8h0w.js";
15
+ } from "./studio-kjjsjak4.js";
16
+ import {
17
+ shell
18
+ } from "./studio-hbtp0eh1.js";
19
19
  import {
20
- activeTab,
21
- collabState,
22
- errorMessage,
23
- flushAllCollab,
24
- notify,
25
- now,
26
20
  overlayIdleBlockers,
27
- shell,
28
21
  showConfirmDialog,
29
22
  showDialog,
30
23
  showPromptDialog
31
- } from "./studio-ra7ar50f.js";
24
+ } from "./studio-t7qb9db8.js";
32
25
  import {
26
+ errorMessage
27
+ } from "./studio-9n4mrmnb.js";
28
+ import {
29
+ activeTab,
30
+ collabState,
31
+ flushAllCollab
32
+ } from "./studio-2zkz8evn.js";
33
+ import {
34
+ notify,
35
+ now
36
+ } from "./studio-xrapxwwc.js";
37
+ import {
38
+ live,
33
39
  ref,
34
40
  repeat
35
- } from "./studio-kvfx9z2c.js";
41
+ } from "./studio-4rzyrtjz.js";
36
42
  import {
37
43
  html,
38
44
  nothing
39
- } from "./studio-5x5774ak.js";
45
+ } from "./studio-kryvsw6j.js";
40
46
  import {
41
47
  POLL_GIT,
42
48
  projectState,
43
49
  render,
44
50
  renderOnly,
45
51
  rendersInFlight
46
- } from "./studio-cjm7fdjf.js";
52
+ } from "./studio-p4ngc046.js";
47
53
  import {
48
54
  formatForPath
49
- } from "./studio-rqemfhz6.js";
55
+ } from "./studio-eenfkt4e.js";
50
56
  import {
51
57
  getPlatform,
52
58
  hasPlatform,
53
59
  platformInFlight
54
- } from "./studio-sas7mt3k.js";
60
+ } from "./studio-9ab8gqsm.js";
55
61
  import {
56
62
  __require
57
63
  } from "./studio-a0tswy0w.js";
@@ -346,7 +352,7 @@ async function createGithubRepository({ projectName }) {
346
352
  });
347
353
  return false;
348
354
  }
349
- const { refreshGitStatus } = await import("./git-panel-2dh1aw50.js");
355
+ const { refreshGitStatus } = await import("./git-panel-0yywyk76.js");
350
356
  await refreshGitStatus();
351
357
  activity.done(repo.html_url);
352
358
  notify.success(`Repository created: ${repo.html_url}`, { key: "github.repo" });
@@ -376,6 +382,25 @@ function seedProjectList(entries) {
376
382
  cache = entries;
377
383
  }
378
384
 
385
+ // src/grid/grid-idle.ts
386
+ var liveGrids = new Set;
387
+ function registerGridProbe(probe) {
388
+ liveGrids.add(probe);
389
+ return () => liveGrids.delete(probe);
390
+ }
391
+ function gridIdleBlockers() {
392
+ const blockers = [];
393
+ for (const probe of liveGrids) {
394
+ try {
395
+ const reason = probe();
396
+ if (reason) {
397
+ blockers.push(reason);
398
+ }
399
+ } catch {}
400
+ }
401
+ return blockers;
402
+ }
403
+
379
404
  // src/services/idle.ts
380
405
  var QUIET_FRAMES = 2;
381
406
  var DEFAULT_IDLE_TIMEOUT_MS = 1e4;
@@ -413,7 +438,8 @@ function defaultIdleSources() {
413
438
  name: "platform"
414
439
  },
415
440
  { blockers: overlayIdleBlockers, name: "overlay" },
416
- { blockers: activityIdleBlockers, name: "activity" }
441
+ { blockers: activityIdleBlockers, name: "activity" },
442
+ { blockers: gridIdleBlockers, name: "grid" }
417
443
  ];
418
444
  }
419
445
  function idleBlockers(sources = defaultIdleSources()) {
@@ -724,12 +750,12 @@ function isUpgrade(current, latest) {
724
750
  var JXSUITE_PREFIX = "@jxsuite/";
725
751
  async function checkJxsuiteUpdate() {
726
752
  const platform = getPlatform();
727
- if (!platform.outdatedPackages) {
753
+ if (!platform.packageVersions) {
728
754
  return [];
729
755
  }
730
756
  let reported;
731
757
  try {
732
- reported = await platform.outdatedPackages();
758
+ reported = await platform.packageVersions();
733
759
  } catch {
734
760
  return [];
735
761
  }
@@ -1781,7 +1807,7 @@ function registerGitPanel() {
1781
1807
  });
1782
1808
  }
1783
1809
 
1784
- export { hydrateProjectList, getProjectList, shouldInstallAutomation, installAutomationHook, stripRange, isComparable, isUpgrade, maybePromptJxsuiteUpdate, autoSyncProjectOnOpen, githubTokenStored, githubTokenLocation, clearGithubToken, refreshGitStatus, cloneRepository, platformSupportsClone, readGitDiff, loadDiffForLens, initRepository, pushCurrentBranch, signInToGithub, renderGitPanel, relativeDate, sourceControlCommands, registerSourceControlCommands, cleanupGitPanel, registerGitPanel };
1810
+ export { hydrateProjectList, getProjectList, registerGridProbe, shouldInstallAutomation, installAutomationHook, stripRange, isUpgrade, maybePromptJxsuiteUpdate, autoSyncProjectOnOpen, githubTokenStored, githubTokenLocation, clearGithubToken, refreshGitStatus, cloneRepository, platformSupportsClone, readGitDiff, loadDiffForLens, initRepository, pushCurrentBranch, signInToGithub, renderGitPanel, relativeDate, sourceControlCommands, registerSourceControlCommands, cleanupGitPanel, registerGitPanel };
1785
1811
 
1786
- //# debugId=6DB34F497D8C14B864756E2164756E21
1787
- //# sourceMappingURL=studio-ke244pam.js.map
1812
+ //# debugId=C93BAA1491AC405A64756E2164756E21
1813
+ //# sourceMappingURL=studio-ex8zyp98.js.map
@@ -0,0 +1,118 @@
1
+ import {
2
+ baseName,
3
+ dirName,
4
+ extensionOf,
5
+ mediaKind
6
+ } from "./studio-htsf0w6m.js";
7
+ import {
8
+ normalizeProjectPath
9
+ } from "./studio-kjjsjak4.js";
10
+ import {
11
+ getPlatform
12
+ } from "./studio-9ab8gqsm.js";
13
+
14
+ // src/files/media-meta.ts
15
+ var settled = new Map;
16
+ var inFlight = new Map;
17
+ var measured = new Map;
18
+ function metaFrom(path, entry) {
19
+ const name = baseName(path);
20
+ const dims = measured.get(path);
21
+ return {
22
+ bytes: typeof entry?.size === "number" ? entry.size : null,
23
+ ext: extensionOf(name),
24
+ height: dims?.height ?? null,
25
+ kind: mediaKind({ name }),
26
+ modified: entry?.modified ?? null,
27
+ name,
28
+ path,
29
+ width: dims?.width ?? null
30
+ };
31
+ }
32
+ function peekMediaMeta(path) {
33
+ return settled.get(normalizeProjectPath(path)) ?? null;
34
+ }
35
+ function seedMediaMeta(entries) {
36
+ for (const entry of entries) {
37
+ if (entry.type !== "file") {
38
+ continue;
39
+ }
40
+ const path = normalizeProjectPath(entry.path);
41
+ if (!settled.has(path)) {
42
+ settled.set(path, metaFrom(path, entry));
43
+ }
44
+ }
45
+ }
46
+ async function loadMediaMeta(path) {
47
+ const key = normalizeProjectPath(path);
48
+ const done = settled.get(key);
49
+ if (done) {
50
+ return done;
51
+ }
52
+ const running = inFlight.get(key);
53
+ if (running) {
54
+ return running;
55
+ }
56
+ const pending = (async () => {
57
+ let entry;
58
+ try {
59
+ const listing = await getPlatform().listDirectory(dirName(key));
60
+ entry = listing.find((item) => normalizeProjectPath(item.path) === key);
61
+ } catch {
62
+ entry = undefined;
63
+ }
64
+ return metaFrom(key, entry);
65
+ })();
66
+ inFlight.set(key, pending);
67
+ const meta = await pending;
68
+ inFlight.delete(key);
69
+ settled.set(key, meta);
70
+ return meta;
71
+ }
72
+ function recordImageSize(path, width, height) {
73
+ if (!(width > 0 && height > 0)) {
74
+ return false;
75
+ }
76
+ const key = normalizeProjectPath(path);
77
+ const known = measured.get(key);
78
+ if (known && known.width === width && known.height === height) {
79
+ return false;
80
+ }
81
+ measured.set(key, { height, width });
82
+ const meta = settled.get(key);
83
+ if (meta) {
84
+ settled.set(key, { ...meta, height, width });
85
+ }
86
+ return true;
87
+ }
88
+ function invalidateMediaMeta() {
89
+ settled.clear();
90
+ measured.clear();
91
+ }
92
+ function formatBytes(bytes) {
93
+ if (bytes < 1024) {
94
+ return `${bytes} B`;
95
+ }
96
+ if (bytes < 1024 * 1024) {
97
+ return `${Math.round(bytes / 1024)} KB`;
98
+ }
99
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
100
+ }
101
+ function mediaMetaSummary(meta) {
102
+ if (!meta) {
103
+ return "";
104
+ }
105
+ const parts = [];
106
+ if (meta.width !== null && meta.height !== null) {
107
+ parts.push(`${meta.width} × ${meta.height}`);
108
+ }
109
+ if (meta.bytes !== null) {
110
+ parts.push(formatBytes(meta.bytes));
111
+ }
112
+ return parts.join(" · ");
113
+ }
114
+
115
+ export { peekMediaMeta, seedMediaMeta, loadMediaMeta, recordImageSize, invalidateMediaMeta, formatBytes, mediaMetaSummary };
116
+
117
+ //# debugId=18B99161AAFC90A064756E2164756E21
118
+ //# sourceMappingURL=studio-gv8vvshc.js.map