@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
@@ -768,6 +768,14 @@
768
768
  font-size: var(--spectrum-font-size-75, 12px);
769
769
  color: var(--danger);
770
770
  }
771
+ /* A problem the file already had, said once at section level. Deliberately not `-error`: it did not
772
+ refuse anything and it belongs to no control, so it is a warning about the file rather than a
773
+ rejection of an edit — §16.1's distinction, in the one place a settings section can make it. */
774
+ .settings-section-notice {
775
+ margin: 6px 0 0;
776
+ font-size: var(--spectrum-font-size-75, 12px);
777
+ color: var(--warning);
778
+ }
771
779
  .settings-site-name,
772
780
  .settings-site-url {
773
781
  width: 100%;
@@ -860,6 +868,13 @@
860
868
  font-weight: 500;
861
869
  color: var(--fg-dim);
862
870
  }
871
+ /* Explanatory text under a field's control — what the number means, not what the field is
872
+ called. Sits below rather than beside so a long sentence wraps instead of squeezing the input. */
873
+ .new-project-hint {
874
+ font-size: var(--spectrum-font-size-75, 12px);
875
+ color: var(--fg-dim);
876
+ line-height: 1.4;
877
+ }
863
878
  .new-project-error {
864
879
  font-size: var(--spectrum-font-size-75, 12px);
865
880
  color: var(--danger);
@@ -1014,6 +1029,35 @@
1014
1029
  grid-template-columns: 1fr 1fr;
1015
1030
  gap: 12px;
1016
1031
  }
1032
+ /* Breakpoints: a mode picker, whichever value control that mode takes, and the rounding rule. It
1033
+ wraps rather than scrolls — the widths field is the one that needs room, and it should get it. */
1034
+ .new-project-import-breakpoints {
1035
+ display: flex;
1036
+ flex-wrap: wrap;
1037
+ align-items: center;
1038
+ gap: 8px;
1039
+ }
1040
+ .new-project-breakpoint-mode {
1041
+ min-width: 132px;
1042
+ }
1043
+ .new-project-breakpoint-rounding {
1044
+ min-width: 132px;
1045
+ }
1046
+ .new-project-breakpoint-count,
1047
+ .new-project-min-fidelity {
1048
+ width: 96px;
1049
+ }
1050
+ .new-project-breakpoint-widths {
1051
+ flex: 1;
1052
+ min-width: 160px;
1053
+ }
1054
+ /* One line under a control saying what it will do. Not an error and not a label — the sentence a
1055
+ reader needs to predict the outcome before the run rather than after it. */
1056
+ .new-project-hint {
1057
+ font-size: var(--spectrum-font-size-75, 12px);
1058
+ color: var(--fg-dim);
1059
+ line-height: 1.5;
1060
+ }
1017
1061
  .new-project-import-progress {
1018
1062
  display: flex;
1019
1063
  align-items: center;
@@ -1044,6 +1088,13 @@
1044
1088
  .new-project-agent-prompt {
1045
1089
  min-height: 120px;
1046
1090
  }
1091
+ .new-project-import-prompt {
1092
+ width: 100%;
1093
+ min-height: 90px;
1094
+ }
1095
+ .new-project-import-model {
1096
+ width: 100%;
1097
+ }
1047
1098
  .new-project-step-context {
1048
1099
  font-size: var(--spectrum-font-size-75, 12px);
1049
1100
  color: var(--fg-dim);
@@ -2592,6 +2643,28 @@
2592
2643
  line-height: 1.5;
2593
2644
  }
2594
2645
 
2646
+ /* One labelled choice inside a dialog body (`ui/choice-field.ts`) — the New File format picker and
2647
+ the Convert target picker. Stacked rather than inline: the label reads as a question about the
2648
+ field beneath it, and a picker beside a full-width text field wins a width fight neither should
2649
+ be having. */
2650
+ .choice-row {
2651
+ display: flex;
2652
+ flex-direction: column;
2653
+ gap: 4px;
2654
+ margin: 0 0 12px;
2655
+ }
2656
+ .choice-row sp-picker {
2657
+ width: 100%;
2658
+ }
2659
+ /* What a one-row choice degrades to. Sized like the picker it replaces so the dialog does not
2660
+ change height when the project gains a second format. */
2661
+ .choice-static {
2662
+ padding: 4px 0;
2663
+ color: var(--fg-dim);
2664
+ font-size: var(--spectrum-font-size-100, 14px);
2665
+ line-height: 1.5;
2666
+ }
2667
+
2595
2668
  /* A panel withholding a render because one of its own fields has focus (`panel-scheduler.ts`).
2596
2669
  The panel is deliberately stale — finishing your sentence beats being current — but it used to
2597
2670
  make that trade in silence, which is indistinguishable from a panel that has stopped working.
@@ -2737,3 +2810,186 @@
2737
2810
  .jx-layer--toast {
2738
2811
  z-index: 4000;
2739
2812
  }
2813
+
2814
+ /* The gear menu's section submenu.
2815
+
2816
+ Project Settings has ~16 sections once the extensions have contributed theirs, which is taller
2817
+ than a short window. The menu's own placement floors `top` at 4px so the first rows can never be
2818
+ pushed off the top edge; this is the other half — the list scrolls inside itself rather than
2819
+ demanding a viewport it cannot have. */
2820
+ /* The gear menu's rows.
2821
+
2822
+ A min-width so the widest title and its chord are not crushed into each other: the rows are
2823
+ `Preferences… ⌘,` and `Open Project Settings ⌘⇧,`, and Spectrum sizes a menu to its content. */
2824
+ .settings-menu {
2825
+ min-width: 260px;
2826
+ }
2827
+
2828
+ /* One flex cell for the trailing chord and chevron.
2829
+
2830
+ They must be a SINGLE slotted node. Spectrum's menu-item grid gives `[slot=value]` one cell with
2831
+ `justify-self: end`, applied per assigned node — so a chord and a chevron slotted separately are
2832
+ both pinned to the same right edge, on top of each other. */
2833
+ .settings-menu-value {
2834
+ display: inline-flex;
2835
+ align-items: center;
2836
+ gap: 8px;
2837
+ padding-left: 24px;
2838
+ color: var(--fg-dim);
2839
+ }
2840
+
2841
+ .settings-submenu {
2842
+ max-height: min(60vh, 480px);
2843
+ overflow-y: auto;
2844
+ overscroll-behavior: contain;
2845
+ }
2846
+
2847
+ /* ─── Media viewer ────────────────────────────────────────────────────────────
2848
+ A pane that SHOWS a file rather than editing one (`media/media-pane.ts`). The stage takes the
2849
+ room and the details column stays a fixed width, so the asset is the thing you are looking at
2850
+ and the facts about it are beside it rather than on top of it. It scrolls itself — a wheel over
2851
+ an image is a scroll, not a zoom, which is why `media` is in shortcuts.ts's self-scrolling set. */
2852
+ .media-viewer {
2853
+ height: 100%;
2854
+ display: flex;
2855
+ gap: 16px;
2856
+ padding: 16px;
2857
+ overflow-y: auto;
2858
+ background: var(--bg-panel);
2859
+ }
2860
+ .media-stage {
2861
+ flex: 1;
2862
+ min-width: 0;
2863
+ display: flex;
2864
+ align-items: flex-start;
2865
+ justify-content: center;
2866
+ }
2867
+ /* Never larger than its own pixels: an upscaled thumbnail is a lie about the asset, and judging
2868
+ whether an imported image is big enough is the whole reason somebody opens this. */
2869
+ .media-image {
2870
+ max-width: 100%;
2871
+ height: auto;
2872
+ border: 1px solid var(--border);
2873
+ border-radius: var(--radius);
2874
+ background: var(--bg-input);
2875
+ }
2876
+ .media-video,
2877
+ .media-embed {
2878
+ width: 100%;
2879
+ max-height: 70vh;
2880
+ border: 1px solid var(--border);
2881
+ border-radius: var(--radius);
2882
+ background: var(--bg-input);
2883
+ }
2884
+ .media-audio {
2885
+ width: 100%;
2886
+ }
2887
+ .media-specimen {
2888
+ width: 100%;
2889
+ padding: 16px;
2890
+ border: 1px solid var(--border);
2891
+ border-radius: var(--radius);
2892
+ background: var(--bg-input);
2893
+ color: var(--fg);
2894
+ }
2895
+ .media-specimen-line {
2896
+ margin: 0 0 12px;
2897
+ line-height: 1.3;
2898
+ overflow-wrap: anywhere;
2899
+ }
2900
+ .media-unviewable {
2901
+ padding: 24px;
2902
+ border: 1px dashed var(--border);
2903
+ border-radius: var(--radius);
2904
+ color: var(--fg-dim);
2905
+ text-align: center;
2906
+ }
2907
+ .media-note {
2908
+ font-size: var(--spectrum-font-size-75, 12px);
2909
+ color: var(--fg-dim);
2910
+ }
2911
+ .media-details {
2912
+ flex: 0 0 260px;
2913
+ display: flex;
2914
+ flex-direction: column;
2915
+ gap: 12px;
2916
+ }
2917
+ .media-name {
2918
+ margin: 0;
2919
+ font-size: var(--spectrum-font-size-100, 14px);
2920
+ color: var(--fg);
2921
+ overflow-wrap: anywhere;
2922
+ }
2923
+ .media-facts {
2924
+ margin: 0;
2925
+ font-size: var(--spectrum-font-size-75, 12px);
2926
+ color: var(--fg-dim);
2927
+ }
2928
+ /* The reference a document writes for this file — `/hero.jpg` for `public/hero.jpg`, which shares
2929
+ not one segment with it. Getting this wrong is the commonest way an image goes missing. */
2930
+ .media-ref {
2931
+ display: flex;
2932
+ align-items: center;
2933
+ gap: 6px;
2934
+ }
2935
+ .media-ref-value {
2936
+ flex: 1;
2937
+ min-width: 0;
2938
+ font-family: var(--font-mono);
2939
+ font-size: 11px;
2940
+ background: var(--bg-input);
2941
+ border: 1px solid var(--border);
2942
+ border-radius: var(--radius);
2943
+ padding: 3px 6px;
2944
+ overflow-wrap: anywhere;
2945
+ }
2946
+ .media-usage {
2947
+ display: flex;
2948
+ flex-direction: column;
2949
+ }
2950
+ .media-usage-title {
2951
+ margin: 0 0 4px;
2952
+ font-size: var(--spectrum-font-size-75, 12px);
2953
+ font-weight: 500;
2954
+ color: var(--fg-dim);
2955
+ }
2956
+ .media-usage-headline {
2957
+ margin: 0;
2958
+ font-size: var(--spectrum-font-size-75, 12px);
2959
+ color: var(--fg-dim);
2960
+ }
2961
+ .media-usage-list {
2962
+ list-style: none;
2963
+ margin: 8px 0 0;
2964
+ padding: 0;
2965
+ display: flex;
2966
+ flex-direction: column;
2967
+ gap: 2px;
2968
+ }
2969
+ .media-usage-list li {
2970
+ display: flex;
2971
+ align-items: baseline;
2972
+ gap: 6px;
2973
+ font-size: var(--spectrum-font-size-75, 12px);
2974
+ }
2975
+ .media-usage-link {
2976
+ flex: 1;
2977
+ min-width: 0;
2978
+ background: none;
2979
+ border: none;
2980
+ padding: 0;
2981
+ text-align: left;
2982
+ color: var(--accent);
2983
+ cursor: pointer;
2984
+ font: inherit;
2985
+ overflow-wrap: anywhere;
2986
+ }
2987
+ .media-usage-link:hover {
2988
+ text-decoration: underline;
2989
+ }
2990
+ .media-usage-count {
2991
+ flex: 0 0 auto;
2992
+ font-family: var(--font-mono);
2993
+ font-size: 10px;
2994
+ color: var(--fg-dim);
2995
+ }
package/styles/panels.css CHANGED
@@ -60,6 +60,16 @@
60
60
  color: var(--fg);
61
61
  border-left-color: var(--accent);
62
62
  }
63
+ /* The gear while its menu is open.
64
+
65
+ Deliberately NOT `.selected`: that class means "this is the panel you are looking at" and paints
66
+ the accent left-border, so reusing it would draw the gear as a seventh selected panel. What this
67
+ says is narrower — the menu you opened is still up. */
68
+ .rail-item--menu-open {
69
+ opacity: 1;
70
+ color: var(--fg);
71
+ background: var(--hover-bg);
72
+ }
63
73
  .rail-item:focus-visible {
64
74
  outline: 2px solid var(--accent);
65
75
  outline-offset: -2px;
@@ -469,7 +479,9 @@
469
479
  font-size: 0;
470
480
  overflow: hidden;
471
481
  }
472
- .empty-text-placeholder:not([contenteditable])::after {
482
+ .empty-text-placeholder:is(:empty, :has(> br:only-child)):not([data-jx-active-block]):not(
483
+ [contenteditable]
484
+ )::after {
473
485
  content: "Click here to add text...";
474
486
  color: color-mix(in srgb, var(--fg-dim, #808080) 40%, transparent);
475
487
  font-style: italic;
package/styles/shell.css CHANGED
@@ -596,6 +596,117 @@
596
596
  color: var(--fg-dim);
597
597
  font-family: var(--font-mono);
598
598
  }
599
+ /* A question the assistant is waiting on. Deliberately louder than a tool chip and quieter than
600
+ an error: it is the one thing in the transcript that will not proceed without the reader. */
601
+ .ai-ask {
602
+ display: flex;
603
+ flex-direction: column;
604
+ gap: 6px;
605
+ align-self: stretch;
606
+ background: var(--hover-bg);
607
+ border-left: 2px solid var(--accent);
608
+ border-radius: var(--radius);
609
+ padding: 8px 10px;
610
+ }
611
+ .ai-ask[data-outcome="ok"],
612
+ .ai-ask[data-outcome="unanswered"],
613
+ .ai-ask[data-outcome="failed"] {
614
+ border-left-color: var(--border);
615
+ }
616
+ .ai-ask-question {
617
+ font-size: var(--spectrum-font-size-75, 12px);
618
+ color: var(--fg);
619
+ line-height: 1.5;
620
+ }
621
+ .ai-ask-context {
622
+ font-size: var(--spectrum-font-size-50, 11px);
623
+ color: var(--fg-dim);
624
+ line-height: 1.5;
625
+ }
626
+ .ai-ask-options {
627
+ display: flex;
628
+ flex-wrap: wrap;
629
+ align-items: center;
630
+ gap: 6px;
631
+ }
632
+ .ai-ask-skip {
633
+ margin-inline-start: auto;
634
+ }
635
+ .ai-ask-answer {
636
+ align-self: flex-start;
637
+ max-width: 100%;
638
+ background: var(--accent);
639
+ color: var(--accent-fg);
640
+ border-radius: var(--radius);
641
+ padding: 3px 8px;
642
+ font-size: var(--spectrum-font-size-50, 11px);
643
+ overflow-wrap: anywhere;
644
+ }
645
+ .ai-ask-outcome {
646
+ font-size: var(--spectrum-font-size-50, 11px);
647
+ color: var(--fg-dim);
648
+ line-height: 1.5;
649
+ }
650
+ /* An import, under the chip that started it. It reports for minutes and then stays: the summary
651
+ line is the run's outcome once it has one, and the log below is a scroller the reader owns —
652
+ it follows the newest line until they scroll away from it, and stops following while they read.
653
+ It was a fixed six-line tail that ellipsed every message and vanished the moment the run
654
+ finished, which is to say the account of a successful import was destroyed by its success. */
655
+ .ai-import-progress {
656
+ align-self: stretch;
657
+ background: var(--bg-input);
658
+ border: 1px solid var(--border);
659
+ border-radius: var(--radius);
660
+ padding: 6px 8px;
661
+ }
662
+ .ai-import-head {
663
+ display: flex;
664
+ align-items: center;
665
+ gap: 6px;
666
+ font-size: var(--spectrum-font-size-50, 11px);
667
+ color: var(--fg);
668
+ cursor: pointer;
669
+ list-style: none;
670
+ }
671
+ .ai-import-head::-webkit-details-marker {
672
+ display: none;
673
+ }
674
+ .ai-import-message {
675
+ flex: 1;
676
+ min-width: 0;
677
+ overflow: hidden;
678
+ text-overflow: ellipsis;
679
+ white-space: nowrap;
680
+ }
681
+ /* How many lines are folded away, so a collapsed run still says how much it has to show. */
682
+ .ai-import-count {
683
+ flex: 0 0 auto;
684
+ font-family: var(--font-mono);
685
+ font-size: 10px;
686
+ color: var(--fg-dim);
687
+ }
688
+ .ai-import-phase {
689
+ color: var(--fg-dim);
690
+ font-family: var(--font-mono);
691
+ flex: 0 0 auto;
692
+ margin-right: 4px;
693
+ }
694
+ .ai-import-log {
695
+ margin-top: 4px;
696
+ max-height: 40vh;
697
+ overflow-y: auto;
698
+ overscroll-behavior: contain;
699
+ font-family: var(--font-mono);
700
+ font-size: 10px;
701
+ line-height: 1.6;
702
+ color: var(--fg-dim);
703
+ }
704
+ /* Wraps rather than ellipses: a phase line names a page, a count or a file, and the end of it is
705
+ usually the part worth reading. */
706
+ .ai-import-log-line {
707
+ overflow-wrap: anywhere;
708
+ white-space: pre-wrap;
709
+ }
599
710
  .ai-msg-tool-error {
600
711
  background: var(--hover-bg);
601
712
  border-left: 2px solid var(--danger);
@@ -689,6 +800,13 @@
689
800
  max-width: 140px;
690
801
  min-width: 0;
691
802
  }
803
+ /* The chat-only-model note, under the picker that caused it. Advisory weight on purpose: the
804
+ assistant still answers, it just cannot edit. */
805
+ .ai-composer-note {
806
+ color: var(--fg-dim);
807
+ font-size: var(--spectrum-font-size-50, 11px);
808
+ line-height: 1.3;
809
+ }
692
810
  /* Sessions list */
693
811
  .ai-sessions {
694
812
  flex: 1 1 0;
@@ -1264,6 +1382,35 @@
1264
1382
  font-size: var(--spectrum-font-size-50, 11px);
1265
1383
  color: var(--fg-dim);
1266
1384
  }
1385
+ /* The account picker borrows `.prefs-account` for its rows on purpose — it is the same object in a
1386
+ different frame, and a second row style would drift from this one. Only its own chrome is here. */
1387
+ .cf-account-picker {
1388
+ display: flex;
1389
+ flex-direction: column;
1390
+ gap: 12px;
1391
+ min-width: 320px;
1392
+ }
1393
+ .cf-account-picker-lede {
1394
+ margin: 0;
1395
+ color: var(--fg-dim);
1396
+ font-size: var(--spectrum-font-size-75, 12px);
1397
+ }
1398
+ .cf-account-picker-empty {
1399
+ margin: 0;
1400
+ color: var(--fg-dim);
1401
+ font-size: var(--spectrum-font-size-75, 12px);
1402
+ }
1403
+ .cf-account-picker-error {
1404
+ margin: 0;
1405
+ color: var(--danger);
1406
+ font-size: var(--spectrum-font-size-75, 12px);
1407
+ }
1408
+ .prefs-account-actions {
1409
+ display: flex;
1410
+ align-items: center;
1411
+ gap: 8px;
1412
+ flex-shrink: 0;
1413
+ }
1267
1414
  .prefs-keys {
1268
1415
  display: flex;
1269
1416
  flex-direction: column;
@@ -1,23 +0,0 @@
1
- import {
2
- LONGPRESS_INSTRUCTIONS,
3
- Overlay
4
- } from "./studio-tzx3xmvx.js";
5
- import"./studio-ahnzd9rg.js";
6
- import"./studio-ay8wcr2b.js";
7
- import"./studio-z6nw2ek2.js";
8
- import"./studio-8q517dfr.js";
9
- import"./studio-xm3dbxvn.js";
10
- import"./studio-0rqqhrdy.js";
11
- import"./studio-c31yb4t6.js";
12
- import"./studio-2w11grav.js";
13
- import"./studio-twsafr1e.js";
14
- import"./studio-kvfx9z2c.js";
15
- import"./studio-5x5774ak.js";
16
- import"./studio-a0tswy0w.js";
17
- export {
18
- LONGPRESS_INSTRUCTIONS,
19
- Overlay
20
- };
21
-
22
- //# debugId=A65C67C23042201664756E2164756E21
23
- //# sourceMappingURL=Overlay.dev-d2ajy6sj.js.map
@@ -1,40 +0,0 @@
1
- import {
2
- PATH_FIELD,
3
- collectionDirs,
4
- collectionInfo,
5
- createCollectionSource,
6
- createPagesSource,
7
- listCollectionEntryIds,
8
- reloadDraftAwareGrids
9
- } from "./studio-dc8s8heb.js";
10
- import"./studio-2w11grav.js";
11
- import"./studio-bw5dz6km.js";
12
- import"./studio-a0yp7syn.js";
13
- import"./studio-ry1vz5sv.js";
14
- import"./studio-2x9zbxmx.js";
15
- import"./studio-j595e748.js";
16
- import"./studio-r5xbtctf.js";
17
- import"./studio-twsafr1e.js";
18
- import"./studio-kvfx9z2c.js";
19
- import"./studio-5x5774ak.js";
20
- import"./studio-g1wdche0.js";
21
- import"./studio-s519zc99.js";
22
- import"./studio-cjm7fdjf.js";
23
- import"./studio-qpfq7xhm.js";
24
- import"./studio-hcxzyk3x.js";
25
- import"./studio-sas7mt3k.js";
26
- import"./studio-5ehhackm.js";
27
- import"./studio-53n8bp04.js";
28
- import"./studio-a0tswy0w.js";
29
- export {
30
- PATH_FIELD,
31
- collectionDirs,
32
- collectionInfo,
33
- createCollectionSource,
34
- createPagesSource,
35
- listCollectionEntryIds,
36
- reloadDraftAwareGrids
37
- };
38
-
39
- //# debugId=1022A539C17535B964756E2164756E21
40
- //# sourceMappingURL=content-source-7fy9qrm0.js.map
@@ -1,70 +0,0 @@
1
- import {
2
- FILE_ROW_HEIGHT,
3
- createFileIn,
4
- findHomePage,
5
- initProjectRepo,
6
- isFileDrag,
7
- loadDirectory,
8
- loadProject,
9
- openFileInPane,
10
- openFileInTab,
11
- openHomePage,
12
- openLastSessionOrHome,
13
- openProject,
14
- pickAndUploadTo,
15
- registerFileTreeDnD,
16
- registerFilesPanel,
17
- reloadCleanTab,
18
- reloadFileInTab,
19
- renderFilesTemplate,
20
- uploadFilesToDir
21
- } from "./studio-rh1cnamv.js";
22
- import"./studio-p5dja96s.js";
23
- import"./studio-7p35254k.js";
24
- import"./studio-8jpzqk5s.js";
25
- import"./studio-pkp61mh8.js";
26
- import"./studio-c31yb4t6.js";
27
- import"./studio-dc8s8heb.js";
28
- import"./studio-2w11grav.js";
29
- import"./studio-bw5dz6km.js";
30
- import"./studio-a0yp7syn.js";
31
- import"./studio-ry1vz5sv.js";
32
- import"./studio-2x9zbxmx.js";
33
- import"./studio-j595e748.js";
34
- import"./studio-r5xbtctf.js";
35
- import"./studio-twsafr1e.js";
36
- import"./studio-kvfx9z2c.js";
37
- import"./studio-5x5774ak.js";
38
- import"./studio-g1wdche0.js";
39
- import"./studio-s519zc99.js";
40
- import"./studio-cjm7fdjf.js";
41
- import"./studio-qpfq7xhm.js";
42
- import"./studio-hcxzyk3x.js";
43
- import"./studio-sas7mt3k.js";
44
- import"./studio-5ehhackm.js";
45
- import"./studio-53n8bp04.js";
46
- import"./studio-a0tswy0w.js";
47
- export {
48
- FILE_ROW_HEIGHT,
49
- createFileIn,
50
- findHomePage,
51
- initProjectRepo,
52
- isFileDrag,
53
- loadDirectory,
54
- loadProject,
55
- openFileInPane,
56
- openFileInTab,
57
- openHomePage,
58
- openLastSessionOrHome,
59
- openProject,
60
- pickAndUploadTo,
61
- registerFileTreeDnD,
62
- registerFilesPanel,
63
- reloadCleanTab,
64
- reloadFileInTab,
65
- renderFilesTemplate,
66
- uploadFilesToDir
67
- };
68
-
69
- //# debugId=4F1783068BC6D7A964756E2164756E21
70
- //# sourceMappingURL=files-xcybanxe.js.map
@@ -1,60 +0,0 @@
1
- import {
2
- OUTLINE_ROW_HEIGHT,
3
- OUTLINE_ROW_MAX_ITEMS,
4
- afterTreeRender,
5
- applyRowSelection,
6
- applyTreeRovingTabindex,
7
- clearHoverActions,
8
- indentWidth,
9
- onTreeHover,
10
- onTreeKeydown,
11
- outlineLabel,
12
- outlineRowPath,
13
- registerLayersPanel,
14
- renderLayersTemplate,
15
- renderRowCommands,
16
- startLayerTitleEdit
17
- } from "./studio-hj2se583.js";
18
- import"./studio-xntfdy1x.js";
19
- import"./studio-6z5eyjwn.js";
20
- import"./studio-0rqqhrdy.js";
21
- import"./studio-p5dja96s.js";
22
- import"./studio-3dkcd4c5.js";
23
- import"./studio-c31yb4t6.js";
24
- import"./studio-bw5dz6km.js";
25
- import"./studio-a0yp7syn.js";
26
- import"./studio-j595e748.js";
27
- import"./studio-r5xbtctf.js";
28
- import"./studio-twsafr1e.js";
29
- import"./studio-kvfx9z2c.js";
30
- import"./studio-5x5774ak.js";
31
- import"./studio-g1wdche0.js";
32
- import"./studio-s519zc99.js";
33
- import"./studio-cjm7fdjf.js";
34
- import"./studio-qpfq7xhm.js";
35
- import"./studio-hcxzyk3x.js";
36
- import"./studio-sas7mt3k.js";
37
- import"./studio-5ehhackm.js";
38
- import"./studio-t5wqwzdh.js";
39
- import"./studio-53n8bp04.js";
40
- import"./studio-a0tswy0w.js";
41
- export {
42
- OUTLINE_ROW_HEIGHT,
43
- OUTLINE_ROW_MAX_ITEMS,
44
- afterTreeRender,
45
- applyRowSelection,
46
- applyTreeRovingTabindex,
47
- clearHoverActions,
48
- indentWidth,
49
- onTreeHover,
50
- onTreeKeydown,
51
- outlineLabel,
52
- outlineRowPath,
53
- registerLayersPanel,
54
- renderLayersTemplate,
55
- renderRowCommands,
56
- startLayerTitleEdit
57
- };
58
-
59
- //# debugId=69EB0FE4C6D6ECEC64756E2164756E21
60
- //# sourceMappingURL=layers-panel-27essgkc.js.map
@@ -1,22 +0,0 @@
1
- import {
2
- openPublishPanel,
3
- seedPublishConnected
4
- } from "./studio-k4jvjcfx.js";
5
- import"./studio-kfpek536.js";
6
- import"./studio-2x9zbxmx.js";
7
- import"./studio-r5xbtctf.js";
8
- import"./studio-kvfx9z2c.js";
9
- import"./studio-5x5774ak.js";
10
- import"./studio-cjm7fdjf.js";
11
- import"./studio-qpfq7xhm.js";
12
- import"./studio-hcxzyk3x.js";
13
- import"./studio-sas7mt3k.js";
14
- import"./studio-5ehhackm.js";
15
- import"./studio-a0tswy0w.js";
16
- export {
17
- openPublishPanel,
18
- seedPublishConnected
19
- };
20
-
21
- //# debugId=FD24D88F217DC7F064756E2164756E21
22
- //# sourceMappingURL=publish-panel-09sy2bab.js.map