@jxsuite/studio 4.1.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-qwkm9zrf.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-vj72gqtq.js +20 -0
- package/dist/chunks/content-source-5mex4x1h.js +46 -0
- package/dist/chunks/convert-to-repeater-n64h8znc.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-234hjnqw.js +42 -0
- package/dist/chunks/extension-sections-3hpcambp.js +651 -0
- package/dist/chunks/file-ops-8yhd83xr.js +47 -0
- package/dist/chunks/files-hnxqxtsg.js +72 -0
- package/dist/chunks/format-host-779sfp2n.js +40 -0
- package/dist/chunks/fs-events-b88z7g4h.js +18 -0
- package/dist/chunks/git-panel-xwj8fpab.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-syr0f9sb.js +115 -0
- package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-ff81wthn.js +30 -0
- package/dist/chunks/layers-panel-pnnghw12.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-cqhhxhhe.js +33 -0
- package/dist/chunks/menu-9p2w46gj.js +15 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-5zt840sy.js +27 -0
- package/dist/chunks/quick-search-3748564r.js +45 -0
- package/dist/chunks/references-qvvxej7h.js +26 -0
- package/dist/chunks/right-panel-eccz92qt.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-b55y6ewx.js → studio-1knfqgy7.js} +58 -58
- package/dist/chunks/{studio-2b946z26.js → studio-1z1kcjv4.js} +3628 -6095
- package/dist/chunks/studio-3773086z.js +111 -0
- package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
- package/dist/chunks/{studio-x813zp48.js → studio-3rz5md06.js} +30 -30
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/studio-5wt9nvhd.js +4763 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xnmgv66.js +13615 -0
- package/dist/chunks/studio-8scdew0e.js +258 -0
- package/dist/chunks/{studio-fbf92ckf.js → studio-93zafjcm.js} +275 -163
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-a79k90n9.js +1162 -0
- package/dist/chunks/studio-aj37eer3.js +422 -0
- package/dist/chunks/studio-b0k5tqgp.js +2432 -0
- package/dist/chunks/studio-b4s9eykd.js +2811 -0
- package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/studio-e1pgga3k.js +839 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/{studio-q43a5y9h.js → studio-g3jevyjt.js} +16 -16
- package/dist/chunks/studio-gb13095a.js +2806 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
- package/dist/chunks/{studio-x4qkdat5.js → studio-js8nv53n.js} +1749 -2481
- package/dist/chunks/{studio-qjy2z9bv.js → studio-jxp12rnj.js} +32 -137
- package/dist/chunks/{studio-trxrabqf.js → studio-k75n7vhp.js} +527 -283
- package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/studio-kkqkcp3d.js +17668 -0
- package/dist/chunks/studio-mhhyamxf.js +763 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-nq5yf5mp.js} +22 -22
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/studio-nzzpvzx9.js +185 -0
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/{studio-3bqpr0zh.js → studio-pxbgypmg.js} +299 -110
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/{studio-6yw4y3my.js → studio-qhhm6hbt.js} +8 -8
- package/dist/chunks/studio-qk4bfsq2.js +362 -0
- package/dist/chunks/{studio-msd847zn.js → studio-qk90fgqm.js} +361 -90
- package/dist/chunks/{studio-jkftxyvz.js → studio-r6nvacqs.js} +5861 -2154
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/studio-sbjyc8bt.js +954 -0
- package/dist/chunks/{studio-1wagb550.js → studio-syg2tadj.js} +11 -11
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-tqgryxwg.js +1171 -0
- package/dist/chunks/studio-try13h8c.js +8448 -0
- package/dist/chunks/studio-vfq8qpjt.js +1219 -0
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-ahn3pdgx.js → studio-vw7mzp6z.js} +52 -38
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/studio-wqz6dggm.js +1356 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/studio-zdn2g6dt.js +148 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-t55jdjbx.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1873 -673
- package/dist/studio.js +52757 -36535
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/index.html +1 -0
- package/package.json +18 -52
- package/src/about/about-modal.ts +72 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +333 -113
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +404 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +177 -10
- package/src/commands/run-reported.ts +120 -0
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +76 -49
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/components.ts +39 -0
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +944 -660
- package/src/files/json-layout.ts +474 -0
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/layout.ts +2 -0
- package/src/i18n/i18n-commands.ts +137 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +181 -252
- package/src/new-project/location-fields.ts +93 -160
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/packages/pull-package-sync.ts +5 -1
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -163
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +213 -185
- package/src/panels/block-action-bar.ts +444 -645
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +148 -135
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +175 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +181 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +223 -184
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +114 -661
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +386 -288
- package/src/platforms/cloud.ts +106 -16
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +134 -328
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +538 -0
- package/src/services/ai-project-tools.ts +8 -2
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +112 -24
- package/src/services/ai-tools.ts +36 -212
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/document-assistant.ts +59 -8
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +6 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +1 -1
- package/src/settings/preferences-dialog.ts +350 -330
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +104 -69
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +985 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +417 -391
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +164 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +111 -21
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +22 -0
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +54 -36
- package/src/ui/ai-model-picker.ts +75 -47
- package/src/ui/cf-account-picker.ts +76 -141
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +296 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +75 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1568
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-48xg86wj.js +0 -49
- package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
- package/dist/chunks/extension-sections-txv08xxg.js +0 -311
- package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
- package/dist/chunks/files-3kfkwhk4.js +0 -93
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-w16q81tf.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-532whr1y.js +0 -59
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
- package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-v9st96ja.js +0 -29
- package/dist/chunks/quick-search-zccjp6gv.js +0 -66
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-0bq6eh7v.js +0 -12
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1ngbejft.js +0 -181
- package/dist/chunks/studio-4b5z1x43.js +0 -424
- package/dist/chunks/studio-4n2b5gzb.js +0 -357
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5fx3g9jg.js +0 -4325
- package/dist/chunks/studio-5myknm0a.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-950k0dx6.js +0 -6939
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-bgxt93ga.js +0 -62
- package/dist/chunks/studio-cmb03bg5.js +0 -13890
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-ef49pnzx.js +0 -387
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ew0djmhg.js +0 -341
- package/dist/chunks/studio-gfgb8pe6.js +0 -1652
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-jc994dnr.js +0 -1066
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mtfnaqs9.js +0 -659
- package/dist/chunks/studio-n6j9t10q.js +0 -318
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-qcy05dp8.js +0 -1743
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/studio-zqazsct2.js +0 -1823
- package/dist/chunks/workspace-fjx52ryv.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* ⑥ The jump bar, as a Jx document over the kit — the mount seam, and nothing else.
|
|
4
|
+
*
|
|
5
|
+
* `jump-bar.json` is the markup, the ARIA and the style; `panels/jump-bar.ts` is the flow — which
|
|
6
|
+
* pane this bar is about, what its address is, which of its steps the registry can actually run,
|
|
7
|
+
* and what a chevron opens. This module is the seam between them: one scope per pane, one document
|
|
8
|
+
* mounted into that pane's cell, and an `update()` that ASSIGNS rather than re-mounts.
|
|
9
|
+
*
|
|
10
|
+
* **One mount per pane, not one per bar.** Two cells draw two addresses, so `attachJumpBarHost`
|
|
11
|
+
* hands this module a host per pane and gets a handle back. The scope is reactive, so a repaint is
|
|
12
|
+
* an assignment to `segments` and the keyed `$map` reconciles: a step whose key survives keeps its
|
|
13
|
+
* node, and the chevron the reader is aiming at does not move under them.
|
|
14
|
+
*
|
|
15
|
+
* **The bar hides rather than un-mounts when a pane has no address.** A pane with no tab open has
|
|
16
|
+
* no address to print, and the document's own `hidden` is what takes it off the screen — the mount
|
|
17
|
+
* stays, because the next tab open is one assignment away and re-mounting would cost a frame of
|
|
18
|
+
* blank chrome. The stage's `--jump-bar-h` offset is written by the flow, which is the one number
|
|
19
|
+
* this surface and its stylesheet-free document share.
|
|
20
|
+
*
|
|
21
|
+
* @docs studio/interface
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { reactive } from "../reactivity";
|
|
25
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
|
+
import jumpBarDoc from "./jump-bar.json";
|
|
27
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
28
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
29
|
+
|
|
30
|
+
registerSurface("jump-bar", jumpBarDoc as unknown as JxDocument);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* One step of the address, as the document reads it.
|
|
34
|
+
*
|
|
35
|
+
* Every field is present on every step whatever its `control`, because a binding renders a value
|
|
36
|
+
* and a `$switch` chooses on one: a step that omitted `title` would leave the readout case reading
|
|
37
|
+
* an absent path.
|
|
38
|
+
*/
|
|
39
|
+
export interface ProjectedStep extends Record<string, unknown> {
|
|
40
|
+
/** Unique within one bar: the repeater's key, and the argument `run` and `choose` receive. */
|
|
41
|
+
key: string;
|
|
42
|
+
/** `project` | `file` | `editor` | `node` — stamped so a test names a step without its text. */
|
|
43
|
+
kind: string;
|
|
44
|
+
label: string;
|
|
45
|
+
/** The step's own context, then the command's title and chord. */
|
|
46
|
+
title: string;
|
|
47
|
+
/** `button` when the registry can run the step's command, `readout` when it cannot. */
|
|
48
|
+
control: "button" | "readout";
|
|
49
|
+
/** A button whose command is registered but refuses right now; its reason is in the title. */
|
|
50
|
+
disabled: boolean;
|
|
51
|
+
/** The leaf: where you are. Marked, never un-controlled. */
|
|
52
|
+
current: boolean;
|
|
53
|
+
/** The first step draws no separator before it. */
|
|
54
|
+
leading: boolean;
|
|
55
|
+
/** More than one place to go. One alternative is not a choice and renders no chevron. */
|
|
56
|
+
hasChoices: boolean;
|
|
57
|
+
/** The chevron's accessible name and tooltip. */
|
|
58
|
+
altsLabel: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** What a gesture on the bar asks of the flow. Read once, when the scope is made. */
|
|
62
|
+
export interface JumpBarActions {
|
|
63
|
+
/** A step was pressed: run the command it names, with its args. */
|
|
64
|
+
run: (key: string) => void;
|
|
65
|
+
/** A chevron was pressed: open that step's siblings, hanging under the control that was hit. */
|
|
66
|
+
choose: (key: string, anchor: HTMLElement | null) => void;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface JumpBarSurface {
|
|
70
|
+
/** Bring the standing document up to date. An assignment; the mount is never rebuilt. */
|
|
71
|
+
update: (steps: readonly ProjectedStep[]) => void;
|
|
72
|
+
/** Take the document down. Idempotent. */
|
|
73
|
+
dispose: () => void;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** The scope `jump-bar.json` reads. */
|
|
77
|
+
interface JumpBarScope extends Record<string, unknown>, JumpBarActions {
|
|
78
|
+
region: string;
|
|
79
|
+
segments: ProjectedStep[];
|
|
80
|
+
empty: boolean;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Mount one pane's bar into the host its cell built for it.
|
|
85
|
+
*
|
|
86
|
+
* The host is CLEARED first: a cell hands the bar a slot of its own, and whatever was in it belongs
|
|
87
|
+
* to a pane this bar is no longer drawing.
|
|
88
|
+
*
|
|
89
|
+
* @param {HTMLElement} host The cell's slot for the bar.
|
|
90
|
+
* @param {string} region The `data-jx-region` the bar stamps on itself — `pane.<id>/jump`.
|
|
91
|
+
* @param {JumpBarActions} actions What a press does. Read once, when the scope is made.
|
|
92
|
+
* @returns {JumpBarSurface}
|
|
93
|
+
*/
|
|
94
|
+
export function mountJumpBarSurface(
|
|
95
|
+
host: HTMLElement,
|
|
96
|
+
region: string,
|
|
97
|
+
actions: JumpBarActions,
|
|
98
|
+
): JumpBarSurface {
|
|
99
|
+
const scope = reactive<JumpBarScope>({
|
|
100
|
+
...actions,
|
|
101
|
+
empty: true,
|
|
102
|
+
region,
|
|
103
|
+
segments: [],
|
|
104
|
+
}) as JumpBarScope;
|
|
105
|
+
|
|
106
|
+
host.replaceChildren();
|
|
107
|
+
let mounted: SurfaceHandle | null = null;
|
|
108
|
+
let disposed = false;
|
|
109
|
+
void mountSurface("jump-bar", scope, host).then((surface) => {
|
|
110
|
+
if (disposed) {
|
|
111
|
+
surface.dispose();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
mounted = surface;
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
dispose() {
|
|
119
|
+
disposed = true;
|
|
120
|
+
mounted?.dispose();
|
|
121
|
+
mounted = null;
|
|
122
|
+
host.replaceChildren();
|
|
123
|
+
},
|
|
124
|
+
update(steps) {
|
|
125
|
+
scope.segments = [...steps];
|
|
126
|
+
scope.empty = steps.length === 0;
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
|
+
"$id": "StudioJxsuiteUpdate",
|
|
4
|
+
"$description": "The on-open offer to bring a project's `@jxsuite/*` dependencies up to their newest published versions: one sentence, and the packages that would move. A `jx-dialog`, so the platform owns modality, Escape, focus restoration and the backdrop, and the kit draws both answers. Nothing here asks the registry or writes a manifest: `packages/jxsuite-update.ts` keeps the lookup, the dismissal key and the install, and this document only says what is on offer.",
|
|
5
|
+
"tagName": "jx-dialog",
|
|
6
|
+
"$props": {
|
|
7
|
+
"headline": "Update @jxsuite packages?",
|
|
8
|
+
"confirmLabel": "Update",
|
|
9
|
+
"cancelLabel": "Not now",
|
|
10
|
+
"size": "sm"
|
|
11
|
+
},
|
|
12
|
+
"attributes": {
|
|
13
|
+
"part": "jxsuite-update"
|
|
14
|
+
},
|
|
15
|
+
"onconfirm": {
|
|
16
|
+
"$prototype": "Function",
|
|
17
|
+
"body": [
|
|
18
|
+
{
|
|
19
|
+
"operator": "call",
|
|
20
|
+
"target": {
|
|
21
|
+
"$ref": "#/state/confirm"
|
|
22
|
+
},
|
|
23
|
+
"value": []
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"oncancel": {
|
|
28
|
+
"$prototype": "Function",
|
|
29
|
+
"body": [
|
|
30
|
+
{
|
|
31
|
+
"operator": "call",
|
|
32
|
+
"target": {
|
|
33
|
+
"$ref": "#/state/cancel"
|
|
34
|
+
},
|
|
35
|
+
"value": []
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"onclose": {
|
|
40
|
+
"$prototype": "Function",
|
|
41
|
+
"body": [
|
|
42
|
+
{
|
|
43
|
+
"operator": "call",
|
|
44
|
+
"target": {
|
|
45
|
+
"$ref": "#/state/closed"
|
|
46
|
+
},
|
|
47
|
+
"value": []
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"style": {
|
|
52
|
+
"$description": "The old body was a lit template with no stylesheet at all, which is why the conversion is mostly a deletion. Two `<br />`s stood in for a paragraph break, and one `<span style=\"white-space: pre-line\">` held every package as a single `\\n`-joined string — a list spelled as whitespace. Neither is addressable and neither announces as what it is, so a screen reader read one run-on line and a test could only match a substring of it. It is a `<ul>` of keyed rows now: the list says how many packages there are, and each row is `[data-package]`. The one token repair travels with it — that span asked for `--spectrum-font-size-75`, which resolves only inside `<sp-theme>`, and a document mounted in the dialog layer is outside it, so the size silently fell back to the hard-coded `12px` written beside it.",
|
|
53
|
+
"& [part=\"offer\"]": {
|
|
54
|
+
"display": "flex",
|
|
55
|
+
"flexDirection": "column",
|
|
56
|
+
"gap": "var(--jx-space-3)"
|
|
57
|
+
},
|
|
58
|
+
"& [part=\"lede\"]": {
|
|
59
|
+
"margin": "0"
|
|
60
|
+
},
|
|
61
|
+
"& [part=\"list\"]": {
|
|
62
|
+
"$description": "Capped and scrolling, because the count is the registry's rather than this dialog's: a project that has not been opened in a year can have every `@jxsuite/*` package behind at once, and a dialog that grows past the viewport puts its own Update button off screen.",
|
|
63
|
+
"listStyle": "none",
|
|
64
|
+
"margin": "0",
|
|
65
|
+
"padding": "0",
|
|
66
|
+
"display": "flex",
|
|
67
|
+
"flexDirection": "column",
|
|
68
|
+
"gap": "var(--jx-space-1)",
|
|
69
|
+
"maxHeight": "240px",
|
|
70
|
+
"overflowY": "auto"
|
|
71
|
+
},
|
|
72
|
+
"& [part=\"package\"]": {
|
|
73
|
+
"display": "flex",
|
|
74
|
+
"justifyContent": "space-between",
|
|
75
|
+
"alignItems": "baseline",
|
|
76
|
+
"gap": "var(--jx-space-3)",
|
|
77
|
+
"fontSize": "var(--jx-text-sm)"
|
|
78
|
+
},
|
|
79
|
+
"& [part=\"package-name\"]": {
|
|
80
|
+
"color": "var(--fg)"
|
|
81
|
+
},
|
|
82
|
+
"& [part=\"package-move\"]": {
|
|
83
|
+
"$description": "Tabular figures, so a column of versions does not jitter between rows of different widths.",
|
|
84
|
+
"color": "var(--fg-dim)",
|
|
85
|
+
"fontVariantNumeric": "tabular-nums",
|
|
86
|
+
"whiteSpace": "nowrap"
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"children": [
|
|
90
|
+
{
|
|
91
|
+
"tagName": "div",
|
|
92
|
+
"attributes": {
|
|
93
|
+
"part": "offer"
|
|
94
|
+
},
|
|
95
|
+
"children": [
|
|
96
|
+
{
|
|
97
|
+
"tagName": "p",
|
|
98
|
+
"attributes": {
|
|
99
|
+
"part": "lede"
|
|
100
|
+
},
|
|
101
|
+
"textContent": "Newer versions of these packages have been published. Update the project to them?"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"tagName": "ul",
|
|
105
|
+
"attributes": {
|
|
106
|
+
"part": "list"
|
|
107
|
+
},
|
|
108
|
+
"children": [
|
|
109
|
+
{
|
|
110
|
+
"$prototype": "Array",
|
|
111
|
+
"items": {
|
|
112
|
+
"$ref": "#/state/packages"
|
|
113
|
+
},
|
|
114
|
+
"key": {
|
|
115
|
+
"$ref": "$map/item/name"
|
|
116
|
+
},
|
|
117
|
+
"map": {
|
|
118
|
+
"tagName": "li",
|
|
119
|
+
"attributes": {
|
|
120
|
+
"part": "package",
|
|
121
|
+
"data-package": "${$map.item.name}"
|
|
122
|
+
},
|
|
123
|
+
"children": [
|
|
124
|
+
{
|
|
125
|
+
"tagName": "span",
|
|
126
|
+
"attributes": {
|
|
127
|
+
"part": "package-name"
|
|
128
|
+
},
|
|
129
|
+
"textContent": "${$map.item.name}"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"tagName": "span",
|
|
133
|
+
"attributes": {
|
|
134
|
+
"part": "package-move"
|
|
135
|
+
},
|
|
136
|
+
"textContent": "${$map.item.current} → ${$map.item.target}"
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The "newer @jxsuite packages are available" offer, as a mounted document.
|
|
4
|
+
*
|
|
5
|
+
* `packages/jxsuite-update.ts` is the flow — it asks the registry which packages are behind their
|
|
6
|
+
* own newest publish, remembers a decline against the exact set of versions declined, and runs the
|
|
7
|
+
* install behind a progress modal — and this is the surface it draws into: the rows, the two
|
|
8
|
+
* answers, and a mount that lives in the dialog layer until the flow takes it down.
|
|
9
|
+
*
|
|
10
|
+
* **The range operator is the flow's, not the document's.** A row arrives with `target` already
|
|
11
|
+
* spelled `^1.4.0`, because the same string is what `setPackageVersions` writes into the manifest:
|
|
12
|
+
* a document that composed the caret itself would be a second author of the range, and the two
|
|
13
|
+
* could disagree about what Update was going to do. The arrow between the two versions IS the
|
|
14
|
+
* document's — that is markup around two facts rather than a third fact.
|
|
15
|
+
*
|
|
16
|
+
* **Await the ELEMENT, not just the mount.** `mountSurface` resolving means the DOCUMENT rendered;
|
|
17
|
+
* a `jx-dialog`'s own template is one `connectedCallback` later, and `showModal` in between finds
|
|
18
|
+
* no `<dialog>` to open — the body is all there, correctly styled, and never shows. `whenReady` is
|
|
19
|
+
* shared with `surfaces/dialog.ts` rather than reimplemented.
|
|
20
|
+
*
|
|
21
|
+
* @docs studio/projects/dependencies
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { reactive } from "../reactivity";
|
|
25
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
|
+
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
27
|
+
import { close as closeDialog, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
28
|
+
import { whenReady } from "./dialog";
|
|
29
|
+
import jxsuiteUpdateDoc from "./jxsuite-update.json";
|
|
30
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
31
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
32
|
+
|
|
33
|
+
registerSurface("jxsuite-update", jxsuiteUpdateDoc as unknown as JxDocument);
|
|
34
|
+
|
|
35
|
+
/** One package the offer would move. Every field is already the string the row prints. */
|
|
36
|
+
export interface JxsuiteUpdateRow {
|
|
37
|
+
/** The package name, which is also the row's key and its `data-package`. */
|
|
38
|
+
name: string;
|
|
39
|
+
/** The range the manifest pins today, e.g. `^1.2.0`. */
|
|
40
|
+
current: string;
|
|
41
|
+
/** The range Update would write, caret included — the flow's own spelling of it. */
|
|
42
|
+
target: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface JxsuiteUpdateSurfaceOptions {
|
|
46
|
+
/** Where the dialog is mounted — the dialog layer, handed in so this never reaches back. */
|
|
47
|
+
layer: HTMLElement;
|
|
48
|
+
/** The packages on offer, in the order the flow found them. */
|
|
49
|
+
packages: JxsuiteUpdateRow[];
|
|
50
|
+
/** Update, please. */
|
|
51
|
+
onConfirm: () => void;
|
|
52
|
+
/** Not now — the Cancel button, or Escape. */
|
|
53
|
+
onCancel: () => void;
|
|
54
|
+
/** The dialog closed, for any reason the platform owns as well as this module's `close`. */
|
|
55
|
+
onClosed: () => void;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface JxsuiteUpdateSurfaceHandle {
|
|
59
|
+
/** The slot in the dialog layer that carries the region. */
|
|
60
|
+
host: HTMLElement;
|
|
61
|
+
/** Resolves with the `jx-dialog` element once it has rendered and been opened. */
|
|
62
|
+
ready: Promise<HTMLElement>;
|
|
63
|
+
/** Close the dialog (the platform restores focus) and dispose the document. Idempotent. */
|
|
64
|
+
close: () => void;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
interface JxsuiteUpdateScope extends Record<string, unknown> {
|
|
68
|
+
packages: JxsuiteUpdateRow[];
|
|
69
|
+
confirm: () => void;
|
|
70
|
+
cancel: () => void;
|
|
71
|
+
closed: () => void;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Open the offer. The handle's `ready` resolves once the dialog is showing. */
|
|
75
|
+
export function openJxsuiteUpdateSurface(
|
|
76
|
+
options: JxsuiteUpdateSurfaceOptions,
|
|
77
|
+
): JxsuiteUpdateSurfaceHandle {
|
|
78
|
+
const slot = document.createElement("div");
|
|
79
|
+
/* The layer is `pointer-events: none` so a click passes through it when nothing is up, and every
|
|
80
|
+
slot in it turns them back on for its own content. `pointer-events` INHERITS, and the top layer
|
|
81
|
+
changes paint order rather than inheritance, so a modal `<dialog>` in a slot that skipped this
|
|
82
|
+
is painted above everything and hit-tests to nothing. */
|
|
83
|
+
slot.style.pointerEvents = "auto";
|
|
84
|
+
slot.setAttribute(REGION_ATTR, overlayRegion("dialog", "jxsuite-update"));
|
|
85
|
+
options.layer.append(slot);
|
|
86
|
+
|
|
87
|
+
let closed = false;
|
|
88
|
+
/**
|
|
89
|
+
* Say it is over, once.
|
|
90
|
+
*
|
|
91
|
+
* Two paths reach here and either may be first: the platform's own `close` event, which `close()`
|
|
92
|
+
* provokes, and `close()` on a dialog that never got as far as being shown.
|
|
93
|
+
*/
|
|
94
|
+
const finish = (): void => {
|
|
95
|
+
if (closed) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
closed = true;
|
|
99
|
+
options.onClosed();
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const scope = reactive<JxsuiteUpdateScope>({
|
|
103
|
+
cancel: () => {
|
|
104
|
+
options.onCancel();
|
|
105
|
+
},
|
|
106
|
+
closed: finish,
|
|
107
|
+
confirm: () => {
|
|
108
|
+
options.onConfirm();
|
|
109
|
+
},
|
|
110
|
+
packages: options.packages,
|
|
111
|
+
}) as JxsuiteUpdateScope;
|
|
112
|
+
|
|
113
|
+
let mounted: SurfaceHandle | null = null;
|
|
114
|
+
const ready = mountSurface("jxsuite-update", scope, slot).then(async (surface) => {
|
|
115
|
+
mounted = surface;
|
|
116
|
+
const element = surface.root as HTMLElement;
|
|
117
|
+
if (closed) {
|
|
118
|
+
surface.dispose();
|
|
119
|
+
return element;
|
|
120
|
+
}
|
|
121
|
+
await whenReady(element);
|
|
122
|
+
if (closed) {
|
|
123
|
+
return element;
|
|
124
|
+
}
|
|
125
|
+
showModal(element);
|
|
126
|
+
return element;
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
close() {
|
|
131
|
+
/* Guarded on the WORK rather than on `closed`, and the difference is a slot that would
|
|
132
|
+
otherwise be left behind: the platform's own `close` runs `finish()` before any caller
|
|
133
|
+
reaches here, so a `close()` that returned early on `closed` would take the dialog down and
|
|
134
|
+
leave its host div in the layer. Every line below is idempotent instead. */
|
|
135
|
+
const element = mounted?.root;
|
|
136
|
+
if (element instanceof HTMLElement) {
|
|
137
|
+
// The platform's close first, so focus goes back where it came from; then the document.
|
|
138
|
+
closeDialog(element);
|
|
139
|
+
}
|
|
140
|
+
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
141
|
+
mounted?.dispose();
|
|
142
|
+
mounted = null;
|
|
143
|
+
slot.remove();
|
|
144
|
+
finish();
|
|
145
|
+
},
|
|
146
|
+
host: slot,
|
|
147
|
+
ready,
|
|
148
|
+
};
|
|
149
|
+
}
|