@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,272 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Source Control panel, as a mounted document.
|
|
4
|
+
*
|
|
5
|
+
* `panels/git-panel.ts` is the flow — what git is asked, what a comparison is, which files group
|
|
6
|
+
* under which component, what a commit does before it runs, and which of the four moods the panel
|
|
7
|
+
* is in — and this is the surface it draws into: the reactive scope the document reads, the flags
|
|
8
|
+
* it discriminates on, and the mount that stays put while the Navigator repaints around it.
|
|
9
|
+
*
|
|
10
|
+
* **The flow tells the surface what a row says, never what it means.** A changed file arrives as a
|
|
11
|
+
* name, a directory, a status letter, that status said aloud, and two booleans; nothing here learns
|
|
12
|
+
* what `U` is or that a `.png` has no comparison to open. That matters more here than in the
|
|
13
|
+
* settings sections, because the file rows are NESTED — inside the per-file map `$map/item` is the
|
|
14
|
+
* file, so a row genuinely cannot reach the group it is under — and a path it can hand straight
|
|
15
|
+
* back is the whole answer.
|
|
16
|
+
*
|
|
17
|
+
* **The container is not cleared**, which is the one line where a panel differs from a settings
|
|
18
|
+
* section. A section is handed the pane's whole content area and starts by emptying it; a panel
|
|
19
|
+
* body is a node lit renders into, and its comment markers are how lit finds its own content again.
|
|
20
|
+
* So the document is APPENDED, and {@link GitPanelSurfaceHandle.connected} is how the panel finds
|
|
21
|
+
* out that the Navigator has since painted another panel over the top of it.
|
|
22
|
+
*
|
|
23
|
+
* @docs studio/publish/source-control
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { reactive } from "../reactivity";
|
|
27
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
|
+
import gitPanelDoc from "./git-panel.json";
|
|
29
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
30
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
31
|
+
|
|
32
|
+
registerSurface("git-panel", gitPanelDoc as unknown as JxDocument);
|
|
33
|
+
|
|
34
|
+
/** One changed file, as the document draws it. Every field is a value: no records, no closures. */
|
|
35
|
+
export interface GitFileRowView {
|
|
36
|
+
/** The row's reconcile key AND what every button hands back — the project-relative path. */
|
|
37
|
+
key: string;
|
|
38
|
+
path: string;
|
|
39
|
+
/** The last segment, which is what the row reads as. */
|
|
40
|
+
name: string;
|
|
41
|
+
/** Everything before it, drawn small beside the name. */
|
|
42
|
+
dir: string;
|
|
43
|
+
/** Whether there is a directory to draw; the document has no `length` to ask. */
|
|
44
|
+
hasDir: boolean;
|
|
45
|
+
/** The open button's accessible name: the path and the status in words. */
|
|
46
|
+
label: string;
|
|
47
|
+
/** The one-letter badge — `M`, `A`, `D`, `R`, `U`. */
|
|
48
|
+
status: string;
|
|
49
|
+
/** Which pair of verbs the row offers: Unstage, or Discard and Stage. */
|
|
50
|
+
staged: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Whether Discard is refused, spelled the way the document reads it. An untracked file has no
|
|
53
|
+
* committed version to come back to, so there is nothing to discard TO.
|
|
54
|
+
*/
|
|
55
|
+
cannotDiscard: boolean;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** One component's changed files, under the heading the flow spelled. */
|
|
59
|
+
export interface GitGroupView {
|
|
60
|
+
key: string;
|
|
61
|
+
name: string;
|
|
62
|
+
files: GitFileRowView[];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** One commit in the log. */
|
|
66
|
+
export interface GitCommitView {
|
|
67
|
+
key: string;
|
|
68
|
+
/** The short hash, already sliced. */
|
|
69
|
+
hash: string;
|
|
70
|
+
message: string;
|
|
71
|
+
/** "ada · 5m ago" — the author and the age, joined by the flow that knows the clock. */
|
|
72
|
+
meta: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** One row of the branch picker. `__new__` is a row like any other; the flow knows what it means. */
|
|
76
|
+
export interface GitBranchOption {
|
|
77
|
+
value: string;
|
|
78
|
+
label: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** What the panel says the surface should be showing right now. */
|
|
82
|
+
export interface GitPanelValues {
|
|
83
|
+
/**
|
|
84
|
+
* Which of the four moods the panel is in: no project open, a first read still in flight, a
|
|
85
|
+
* project git is not tracking, or a repository. The flow decides; the document switches.
|
|
86
|
+
*/
|
|
87
|
+
view: "no-project" | "loading" | "no-repo" | "repo";
|
|
88
|
+
/** Whether this platform can clone at all — the one action the no-project state offers. */
|
|
89
|
+
canClone: boolean;
|
|
90
|
+
/** A git verb is in flight: every button that would start a second one is off. */
|
|
91
|
+
busy: boolean;
|
|
92
|
+
hasError: boolean;
|
|
93
|
+
error: string;
|
|
94
|
+
/** `remote` or `local`: which sync bar is drawn. */
|
|
95
|
+
remoteState: "remote" | "local";
|
|
96
|
+
/** "Up to date", or "3 ahead, 1 behind". */
|
|
97
|
+
syncLabel: string;
|
|
98
|
+
/** "Last updated 02:04 PM", or empty. */
|
|
99
|
+
lastUpdated: string;
|
|
100
|
+
hasLastUpdated: boolean;
|
|
101
|
+
/** The pull and push buttons' names, which carry their counts: "Pull (2 behind)". */
|
|
102
|
+
pullLabel: string;
|
|
103
|
+
pushLabel: string;
|
|
104
|
+
branchName: string;
|
|
105
|
+
/** What the picker currently holds. Not always {@link branchName} — see the adapter's note. */
|
|
106
|
+
branchValue: string;
|
|
107
|
+
branchOptions: GitBranchOption[];
|
|
108
|
+
/** `changes` or `history` — `shell.git.subTab`, which names the `$switch` case. */
|
|
109
|
+
subTab: string;
|
|
110
|
+
/** "Local Changes (6)" — the count is part of the tab's label, not a badge of its own. */
|
|
111
|
+
changesLabel: string;
|
|
112
|
+
commitMessage: string;
|
|
113
|
+
hasStaged: boolean;
|
|
114
|
+
stagedCount: string;
|
|
115
|
+
stagedFiles: GitFileRowView[];
|
|
116
|
+
changedCount: string;
|
|
117
|
+
/** Whether Stage all has anything to stage. */
|
|
118
|
+
hasUnstaged: boolean;
|
|
119
|
+
filesState: "listed" | "empty";
|
|
120
|
+
groups: GitGroupView[];
|
|
121
|
+
historyState: "listed" | "empty";
|
|
122
|
+
commits: GitCommitView[];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** What a control can ask the panel to do. Every one of them is a decision the flow owns. */
|
|
126
|
+
export interface GitPanelActions {
|
|
127
|
+
clone: () => void;
|
|
128
|
+
initRepository: () => void;
|
|
129
|
+
createRepository: () => void;
|
|
130
|
+
refresh: () => void;
|
|
131
|
+
fetch: () => void;
|
|
132
|
+
pull: () => void;
|
|
133
|
+
push: () => void;
|
|
134
|
+
/** A pick from the branch picker — including the row that means "make a new one". */
|
|
135
|
+
chooseBranch: (value: string) => void;
|
|
136
|
+
selectTab: (tab: string) => void;
|
|
137
|
+
/** State what the commit field now holds, before anything is decided about it. */
|
|
138
|
+
editMessage: (value: string) => void;
|
|
139
|
+
/** Commit without pushing — the chord, and the menu row. */
|
|
140
|
+
commit: () => void;
|
|
141
|
+
commitAndSync: () => void;
|
|
142
|
+
/** The split button's second half: the kit menu, hung off the control that was clicked. */
|
|
143
|
+
openCommitMenu: (anchor: HTMLElement) => void;
|
|
144
|
+
openFile: (path: string) => void;
|
|
145
|
+
stage: (path: string) => void;
|
|
146
|
+
unstage: (path: string) => void;
|
|
147
|
+
discard: (path: string) => void;
|
|
148
|
+
stageAll: () => void;
|
|
149
|
+
unstageAll: () => void;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export interface GitPanelSurfaceHandle {
|
|
153
|
+
/** Bring the mounted document up to date with a whole projection. */
|
|
154
|
+
update: (values: GitPanelValues) => void;
|
|
155
|
+
/** Whether the document this mounted is still standing in the container it was given. */
|
|
156
|
+
connected: () => boolean;
|
|
157
|
+
/** Take the document down. Idempotent. */
|
|
158
|
+
dispose: () => void;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** The scope the document reads: the projection, plus everything a control can ask for. */
|
|
162
|
+
interface GitPanelScope extends Record<string, unknown>, GitPanelValues, GitPanelActions {}
|
|
163
|
+
|
|
164
|
+
/** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
|
|
165
|
+
function project(scope: GitPanelScope, values: GitPanelValues): void {
|
|
166
|
+
scope.view = values.view;
|
|
167
|
+
scope.canClone = values.canClone;
|
|
168
|
+
scope.busy = values.busy;
|
|
169
|
+
scope.hasError = values.hasError;
|
|
170
|
+
scope.error = values.error;
|
|
171
|
+
scope.remoteState = values.remoteState;
|
|
172
|
+
scope.syncLabel = values.syncLabel;
|
|
173
|
+
scope.lastUpdated = values.lastUpdated;
|
|
174
|
+
scope.hasLastUpdated = values.hasLastUpdated;
|
|
175
|
+
scope.pullLabel = values.pullLabel;
|
|
176
|
+
scope.pushLabel = values.pushLabel;
|
|
177
|
+
scope.branchName = values.branchName;
|
|
178
|
+
scope.branchValue = values.branchValue;
|
|
179
|
+
scope.branchOptions = values.branchOptions;
|
|
180
|
+
scope.subTab = values.subTab;
|
|
181
|
+
scope.changesLabel = values.changesLabel;
|
|
182
|
+
scope.commitMessage = values.commitMessage;
|
|
183
|
+
scope.hasStaged = values.hasStaged;
|
|
184
|
+
scope.stagedCount = values.stagedCount;
|
|
185
|
+
scope.stagedFiles = values.stagedFiles;
|
|
186
|
+
scope.changedCount = values.changedCount;
|
|
187
|
+
scope.hasUnstaged = values.hasUnstaged;
|
|
188
|
+
scope.filesState = values.filesState;
|
|
189
|
+
scope.groups = values.groups;
|
|
190
|
+
scope.historyState = values.historyState;
|
|
191
|
+
scope.commits = values.commits;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** The scope's starting shape, before the first projection lands on it. */
|
|
195
|
+
function emptyValues(): GitPanelValues {
|
|
196
|
+
return {
|
|
197
|
+
branchName: "",
|
|
198
|
+
branchOptions: [],
|
|
199
|
+
branchValue: "",
|
|
200
|
+
busy: false,
|
|
201
|
+
canClone: false,
|
|
202
|
+
changedCount: "0",
|
|
203
|
+
changesLabel: "Local Changes",
|
|
204
|
+
commitMessage: "",
|
|
205
|
+
commits: [],
|
|
206
|
+
error: "",
|
|
207
|
+
filesState: "empty",
|
|
208
|
+
groups: [],
|
|
209
|
+
hasError: false,
|
|
210
|
+
hasLastUpdated: false,
|
|
211
|
+
hasStaged: false,
|
|
212
|
+
hasUnstaged: false,
|
|
213
|
+
historyState: "empty",
|
|
214
|
+
lastUpdated: "",
|
|
215
|
+
pullLabel: "Pull",
|
|
216
|
+
pushLabel: "Push",
|
|
217
|
+
remoteState: "local",
|
|
218
|
+
stagedCount: "0",
|
|
219
|
+
stagedFiles: [],
|
|
220
|
+
subTab: "changes",
|
|
221
|
+
syncLabel: "",
|
|
222
|
+
view: "loading",
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Mount the Source Control document into `container`, which is the `.panel-content` the Navigator
|
|
228
|
+
* just painted.
|
|
229
|
+
*
|
|
230
|
+
* Nothing is called on the elements, so the mount is all this has to wait for: the DOCUMENT is what
|
|
231
|
+
* this surface renders, and the kit elements inside it settle their own templates one
|
|
232
|
+
* `connectedCallback` later without anybody here asking them to (guidelines §1.1, "await the
|
|
233
|
+
* element").
|
|
234
|
+
*/
|
|
235
|
+
export function mountGitPanelSurface(
|
|
236
|
+
container: HTMLElement,
|
|
237
|
+
values: GitPanelValues,
|
|
238
|
+
actions: GitPanelActions,
|
|
239
|
+
): GitPanelSurfaceHandle {
|
|
240
|
+
const scope = reactive<GitPanelScope>({
|
|
241
|
+
...emptyValues(),
|
|
242
|
+
...actions,
|
|
243
|
+
}) as GitPanelScope;
|
|
244
|
+
project(scope, values);
|
|
245
|
+
|
|
246
|
+
let mounted: SurfaceHandle | null = null;
|
|
247
|
+
let disposed = false;
|
|
248
|
+
void mountSurface("git-panel", scope, container).then((surface) => {
|
|
249
|
+
if (disposed) {
|
|
250
|
+
surface.dispose();
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
mounted = surface;
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
return {
|
|
257
|
+
/* While the mount is still in flight there is nothing in the container to ask about, so the
|
|
258
|
+
answer is simply whether this handle is still wanted — answering no would start a second
|
|
259
|
+
mount racing the first. Once mounted, the question is whether the root is still where it was
|
|
260
|
+
put: a Navigator that painted another panel cleared this document out from under it. */
|
|
261
|
+
connected: () =>
|
|
262
|
+
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
263
|
+
dispose() {
|
|
264
|
+
disposed = true;
|
|
265
|
+
mounted?.dispose();
|
|
266
|
+
mounted = null;
|
|
267
|
+
},
|
|
268
|
+
update: (next) => {
|
|
269
|
+
project(scope, next);
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
|
+
"$id": "StudioGithubAuth",
|
|
4
|
+
"$description": "The RFC 8628 device flow's waiting room: the code GitHub minted, the page to type it into, and a Cancel. A `jx-dialog`, so the platform owns modality, Escape, focus restoration and the backdrop — and it is the reason the dialog has no confirm button at all: the answer arrives from GitHub over a poll rather than from anything the reader can press here, so a primary button would be a control with nothing to do. Nothing in this document talks to GitHub: `github/github-auth.ts` keeps the client id, the poll loop, its failure budget and every report the three outcomes raise.",
|
|
5
|
+
"tagName": "jx-dialog",
|
|
6
|
+
"$props": {
|
|
7
|
+
"headline": "Sign in to GitHub",
|
|
8
|
+
"confirmLabel": "",
|
|
9
|
+
"cancelLabel": "Cancel",
|
|
10
|
+
"size": "sm"
|
|
11
|
+
},
|
|
12
|
+
"attributes": {
|
|
13
|
+
"part": "github-auth"
|
|
14
|
+
},
|
|
15
|
+
"oncancel": {
|
|
16
|
+
"$prototype": "Function",
|
|
17
|
+
"body": [
|
|
18
|
+
{
|
|
19
|
+
"operator": "call",
|
|
20
|
+
"target": {
|
|
21
|
+
"$ref": "#/state/cancel"
|
|
22
|
+
},
|
|
23
|
+
"value": []
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"onclose": {
|
|
28
|
+
"$prototype": "Function",
|
|
29
|
+
"body": [
|
|
30
|
+
{
|
|
31
|
+
"operator": "call",
|
|
32
|
+
"target": {
|
|
33
|
+
"$ref": "#/state/closed"
|
|
34
|
+
},
|
|
35
|
+
"value": []
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"style": {
|
|
40
|
+
"$description": "Four `.github-auth-*` rules in `styles/overlays.css` become the parts below, and two things in them do not travel. `.github-auth-dialog`'s `padding: 16px 0` was the card's own body padding drawn by hand, and `jx-dialog` already pads its body; `.github-auth-dialog p { font-size: 13px }` was a body size this surface picked for itself, and what the paragraphs now inherit is the dialog's own `--jx-text-md`. The `8px 0` margins go with them — the column is a flex column with a gap, so a margin between two rows would be a second opinion about the same space. The code keeps its 24px, which is above the token scale on purpose: it is a string the reader has to copy onto another screen, and reading it out loud is the whole job of this dialog.",
|
|
41
|
+
"& [part=\"device\"]": {
|
|
42
|
+
"display": "flex",
|
|
43
|
+
"flexDirection": "column",
|
|
44
|
+
"alignItems": "center",
|
|
45
|
+
"gap": "var(--jx-space-3)",
|
|
46
|
+
"textAlign": "center"
|
|
47
|
+
},
|
|
48
|
+
"& [part=\"lede\"], & [part=\"waiting\"]": {
|
|
49
|
+
"margin": "0"
|
|
50
|
+
},
|
|
51
|
+
"& [part=\"code\"]": {
|
|
52
|
+
"$description": "`<code>`, not a styled `<div>`: this is a literal string to be transcribed, and the element that says so is also the one a reader's own stylesheet and a screen reader's character-by-character mode already know about.",
|
|
53
|
+
"fontFamily": "var(--font-mono)",
|
|
54
|
+
"fontSize": "24px",
|
|
55
|
+
"fontWeight": "700",
|
|
56
|
+
"letterSpacing": "2px",
|
|
57
|
+
"padding": "var(--jx-space-3) var(--jx-space-4)",
|
|
58
|
+
"background": "var(--hover-bg)",
|
|
59
|
+
"borderRadius": "var(--radius)"
|
|
60
|
+
},
|
|
61
|
+
"& [part=\"link\"]": {
|
|
62
|
+
"$description": "The blue this carried as a `var(--accent, …)` fallback is gone: `--accent` is declared on `:root` in `styles/tokens.css`, so the fallback could only ever have painted when the token was missing — which is a theme fault to fix rather than a colour to hard-code.",
|
|
63
|
+
"color": "var(--accent)",
|
|
64
|
+
"textDecoration": "underline"
|
|
65
|
+
},
|
|
66
|
+
"& [part=\"waiting\"]": {
|
|
67
|
+
"color": "var(--fg-dim)",
|
|
68
|
+
"fontStyle": "italic"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"children": [
|
|
72
|
+
{
|
|
73
|
+
"tagName": "div",
|
|
74
|
+
"attributes": {
|
|
75
|
+
"part": "device"
|
|
76
|
+
},
|
|
77
|
+
"children": [
|
|
78
|
+
{
|
|
79
|
+
"tagName": "p",
|
|
80
|
+
"attributes": {
|
|
81
|
+
"part": "lede"
|
|
82
|
+
},
|
|
83
|
+
"textContent": "Enter this code on GitHub to authorize Jx Studio:"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"tagName": "code",
|
|
87
|
+
"attributes": {
|
|
88
|
+
"part": "code"
|
|
89
|
+
},
|
|
90
|
+
"textContent": "${state.userCode}"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"tagName": "a",
|
|
94
|
+
"attributes": {
|
|
95
|
+
"part": "link",
|
|
96
|
+
"href": "${state.verificationUri}",
|
|
97
|
+
"target": "_blank",
|
|
98
|
+
"rel": "noreferrer"
|
|
99
|
+
},
|
|
100
|
+
"textContent": "Open ${state.verificationUri}"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"tagName": "p",
|
|
104
|
+
"attributes": {
|
|
105
|
+
"part": "waiting"
|
|
106
|
+
},
|
|
107
|
+
"textContent": "Waiting for authorization…"
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The GitHub device-flow waiting room, as a mounted document.
|
|
4
|
+
*
|
|
5
|
+
* `github/github-auth.ts` is the flow — the client id, the device-code request, the poll loop, its
|
|
6
|
+
* failure budget and the three reports the outcomes raise — and this is the surface it draws into:
|
|
7
|
+
* the code GitHub minted, the page to type it into, and the one answer the reader can give.
|
|
8
|
+
*
|
|
9
|
+
* **There is nothing to update.** Both values are minted once by the device-code request and are
|
|
10
|
+
* dead the moment the flow ends, so the handle offers `close` and no `update`: a code that changed
|
|
11
|
+
* under the reader mid-transcription would be a defect rather than a feature, and a handle that
|
|
12
|
+
* could express it would invite one.
|
|
13
|
+
*
|
|
14
|
+
* **The dialog has no confirm.** The answer arrives from GitHub over a poll rather than from
|
|
15
|
+
* anything on screen, so the document sets `confirmLabel` empty and `jx-dialog` draws Cancel alone.
|
|
16
|
+
* A dialog that reports its own dismissal is the whole contract here: `onClosed` fires once, for
|
|
17
|
+
* the platform's `close` and for this module's, and the flow stops polling on it.
|
|
18
|
+
*
|
|
19
|
+
* **Await the ELEMENT, not just the mount.** `mountSurface` resolving means the DOCUMENT rendered;
|
|
20
|
+
* a `jx-dialog`'s own template is one `connectedCallback` later, and `showModal` in between finds
|
|
21
|
+
* no `<dialog>` to open — the body is all there, correctly styled, and never shows. `whenReady` is
|
|
22
|
+
* shared with `surfaces/dialog.ts` rather than reimplemented.
|
|
23
|
+
*
|
|
24
|
+
* @docs studio/publish/github
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { reactive } from "../reactivity";
|
|
28
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
29
|
+
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
30
|
+
import { close as closeDialog, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
31
|
+
import { whenReady } from "./dialog";
|
|
32
|
+
import githubAuthDoc from "./github-auth.json";
|
|
33
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
34
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
35
|
+
|
|
36
|
+
registerSurface("github-auth", githubAuthDoc as unknown as JxDocument);
|
|
37
|
+
|
|
38
|
+
export interface GithubAuthSurfaceOptions {
|
|
39
|
+
/** Where the dialog is mounted — the dialog layer, handed in so this never reaches back. */
|
|
40
|
+
layer: HTMLElement;
|
|
41
|
+
/** The user code GitHub minted, exactly as it must be typed. */
|
|
42
|
+
userCode: string;
|
|
43
|
+
/** The page the code is typed into. Printed in full, because the reader may retype it. */
|
|
44
|
+
verificationUri: string;
|
|
45
|
+
/** The reader declined — the Cancel button, or Escape. */
|
|
46
|
+
onCancel: () => void;
|
|
47
|
+
/** The dialog closed, for any reason the platform owns as well as this module's `close`. */
|
|
48
|
+
onClosed: () => void;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface GithubAuthSurfaceHandle {
|
|
52
|
+
/** The slot in the dialog layer that carries the region. */
|
|
53
|
+
host: HTMLElement;
|
|
54
|
+
/** Resolves with the `jx-dialog` element once it has rendered and been opened. */
|
|
55
|
+
ready: Promise<HTMLElement>;
|
|
56
|
+
/** Close the dialog (the platform restores focus) and dispose the document. Idempotent. */
|
|
57
|
+
close: () => void;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
interface GithubAuthScope extends Record<string, unknown> {
|
|
61
|
+
userCode: string;
|
|
62
|
+
verificationUri: string;
|
|
63
|
+
cancel: () => void;
|
|
64
|
+
closed: () => void;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Put the code up. The handle's `ready` resolves once the dialog is showing. */
|
|
68
|
+
export function openGithubAuthSurface(options: GithubAuthSurfaceOptions): GithubAuthSurfaceHandle {
|
|
69
|
+
const slot = document.createElement("div");
|
|
70
|
+
/* The layer is `pointer-events: none` so a click passes through it when nothing is up, and every
|
|
71
|
+
slot in it turns them back on for its own content. `pointer-events` INHERITS, and the top layer
|
|
72
|
+
changes paint order rather than inheritance, so a modal `<dialog>` in a slot that skipped this
|
|
73
|
+
is painted above everything and hit-tests to nothing. */
|
|
74
|
+
slot.style.pointerEvents = "auto";
|
|
75
|
+
slot.setAttribute(REGION_ATTR, overlayRegion("dialog", "github-auth"));
|
|
76
|
+
options.layer.append(slot);
|
|
77
|
+
|
|
78
|
+
let closed = false;
|
|
79
|
+
/**
|
|
80
|
+
* Say it is over, once.
|
|
81
|
+
*
|
|
82
|
+
* Two paths reach here and either may be first: the platform's own `close` event, which `close()`
|
|
83
|
+
* provokes, and `close()` on a dialog that never got as far as being shown — which is the
|
|
84
|
+
* ordinary end of this flow, because the token usually arrives while the dialog is still up.
|
|
85
|
+
*/
|
|
86
|
+
const finish = (): void => {
|
|
87
|
+
if (closed) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
closed = true;
|
|
91
|
+
options.onClosed();
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const scope = reactive<GithubAuthScope>({
|
|
95
|
+
cancel: () => {
|
|
96
|
+
options.onCancel();
|
|
97
|
+
},
|
|
98
|
+
closed: finish,
|
|
99
|
+
userCode: options.userCode,
|
|
100
|
+
verificationUri: options.verificationUri,
|
|
101
|
+
}) as GithubAuthScope;
|
|
102
|
+
|
|
103
|
+
let mounted: SurfaceHandle | null = null;
|
|
104
|
+
const ready = mountSurface("github-auth", scope, slot).then(async (surface) => {
|
|
105
|
+
mounted = surface;
|
|
106
|
+
const element = surface.root as HTMLElement;
|
|
107
|
+
if (closed) {
|
|
108
|
+
surface.dispose();
|
|
109
|
+
return element;
|
|
110
|
+
}
|
|
111
|
+
await whenReady(element);
|
|
112
|
+
if (closed) {
|
|
113
|
+
return element;
|
|
114
|
+
}
|
|
115
|
+
showModal(element);
|
|
116
|
+
return element;
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
return {
|
|
120
|
+
close() {
|
|
121
|
+
/* Guarded on the WORK rather than on `closed`, and the difference is a slot that would
|
|
122
|
+
otherwise be left behind: the platform's own `close` runs `finish()` before any caller
|
|
123
|
+
reaches here, so a `close()` that returned early on `closed` would take the dialog down and
|
|
124
|
+
leave its host div in the layer. Every line below is idempotent instead. */
|
|
125
|
+
const element = mounted?.root;
|
|
126
|
+
if (element instanceof HTMLElement) {
|
|
127
|
+
// The platform's close first, so focus goes back where it came from; then the document.
|
|
128
|
+
closeDialog(element);
|
|
129
|
+
}
|
|
130
|
+
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
131
|
+
mounted?.dispose();
|
|
132
|
+
mounted = null;
|
|
133
|
+
slot.remove();
|
|
134
|
+
finish();
|
|
135
|
+
},
|
|
136
|
+
host: slot,
|
|
137
|
+
ready,
|
|
138
|
+
};
|
|
139
|
+
}
|