@jxsuite/studio 6.1.1 → 6.1.2
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/dist/chunks/{2020-va2wwra4.js → 2020-f2gkpy8d.js} +3 -3
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-4912g339.js +4 -0
- package/dist/chunks/cf-account-picker-wccaenh6.js +4 -0
- package/dist/chunks/cf-settings-br6105tr.js +4 -0
- package/dist/chunks/color-28ksk2qm.js +4 -0
- package/dist/chunks/color-area-0fj8a4ga.js +4 -0
- package/dist/chunks/color-field-xch8kx2g.js +4 -0
- package/dist/chunks/color-slider-jxd8v350.js +4 -0
- package/dist/chunks/combobox-p0efwjke.js +4 -0
- package/dist/chunks/components-db68vsn7.js +4 -0
- package/dist/chunks/content-source-1449qesq.js +4 -0
- package/dist/chunks/convert-to-repeater-5h457egj.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-x9jn86a7.js +4 -0
- package/dist/chunks/entry-commands-may24cpt.js +4 -0
- package/dist/chunks/extension-sections-pvr14vxr.js +4 -0
- package/dist/chunks/file-ops-x9v54pcj.js +4 -0
- package/dist/chunks/files-j3knqf0s.js +4 -0
- package/dist/chunks/format-host-tyre2trb.js +4 -0
- package/dist/chunks/fs-events-64ma9htc.js +4 -0
- package/dist/chunks/git-panel-84ps5dex.js +4 -0
- package/dist/chunks/grid-view-d2wq9ezg.js +51 -0
- package/dist/chunks/icons-pnfz478q.js +4 -0
- package/dist/chunks/iframe-entry-fvbk89gm.js +5 -0
- package/dist/chunks/iframe-entry-jdcktez8.js +5 -0
- package/dist/chunks/iframe-entry-x0ygf2yr.js +5 -0
- package/dist/chunks/iframe-entry-zap785cw.js +5 -0
- package/dist/chunks/iframe-host-ck6vejt5.js +4 -0
- package/dist/chunks/index-b8xw3vy9.js +4 -0
- package/dist/chunks/{index-2veqmnhr.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-8nbvs12s.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/{jsonMode-s8kt9dsj.js → jsonMode-w15cmrcm.js} +8 -8
- package/dist/chunks/jx-validate-at3zn8wa.js +4 -0
- package/dist/chunks/layers-h4xp1pss.js +4 -0
- package/dist/chunks/layers-panel-m5hw1d7g.js +4 -0
- package/dist/chunks/listbox-e74qjyq6.js +4 -0
- package/dist/chunks/lit-html-8t8t3dnr.js +4 -0
- package/dist/chunks/media-picker-2cweexc5.js +4 -0
- package/dist/chunks/menu-n6yzswmy.js +4 -0
- package/dist/chunks/menu-ynw13y0s.js +4 -0
- package/dist/chunks/monaco-binding-7gx83x3r.js +4 -0
- package/dist/chunks/monaco-buffer-qzxn567r.js +4 -0
- package/dist/chunks/monaco-setup-gxf6656g.js +4 -0
- package/dist/chunks/notify-cj5zbrs2.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-b7ddhr8m.js +4 -0
- package/dist/chunks/platform-3dfws9js.js +4 -0
- package/dist/chunks/popover-jt2gxmzs.js +4 -0
- package/dist/chunks/publish-panel-1gvxbj21.js +4 -0
- package/dist/chunks/quick-search-0dajrwqg.js +4 -0
- package/dist/chunks/references-49qgt404.js +4 -0
- package/dist/chunks/right-panel-jm1bwe53.js +4 -0
- package/dist/chunks/section-registry-6kwc4fky.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/split-n2gfpm5m.js +4 -0
- package/dist/chunks/{studio-1q1sh2ax.js → studio-0q988f9w.js} +3 -3
- package/dist/chunks/studio-0rt52vpq.js +5 -0
- package/dist/chunks/studio-18vgbhs5.js +5 -0
- package/dist/chunks/{studio-h46vtzk8.js → studio-1fxkaaea.js} +4 -4
- package/dist/chunks/studio-24mccdrj.js +5 -0
- package/dist/chunks/studio-2eh507zk.js +9 -0
- package/dist/chunks/studio-2hcbccfv.js +5 -0
- package/dist/chunks/studio-2j1cb95x.js +5 -0
- package/dist/chunks/studio-2jbs3rxv.js +5 -0
- package/dist/chunks/{studio-rv11kfwa.js → studio-485046te.js} +7 -7
- package/dist/chunks/studio-4h8k4dw9.js +5 -0
- package/dist/chunks/studio-5f6n18kx.js +5 -0
- package/dist/chunks/studio-5gthpky6.js +5 -0
- package/dist/chunks/studio-5ve6bbep.js +5 -0
- package/dist/chunks/studio-6ep3js6b.js +9 -0
- package/dist/chunks/studio-6wkmf3wz.js +9 -0
- package/dist/chunks/studio-841rf3cg.js +5 -0
- package/dist/chunks/studio-8gmwgheg.js +5 -0
- package/dist/chunks/studio-8qm0ep50.js +5 -0
- package/dist/chunks/{studio-8grwxtqk.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-pre0skq6.js → studio-a3g98wjr.js} +4 -4
- package/dist/chunks/studio-a3shpz9y.js +5 -0
- package/dist/chunks/studio-amsbaaar.js +6 -0
- package/dist/chunks/studio-at5spjbc.js +7 -0
- package/dist/chunks/studio-b2xv945e.js +5 -0
- package/dist/chunks/studio-bn5nkafw.js +5 -0
- package/dist/chunks/studio-bw6q5xjf.js +9 -0
- package/dist/chunks/studio-c7q0t9x1.js +5 -0
- package/dist/chunks/studio-camnhc96.js +6 -0
- package/dist/chunks/studio-cffqvnzd.js +5 -0
- package/dist/chunks/studio-d81xfh1g.js +5 -0
- package/dist/chunks/studio-dgz8d0c1.js +5 -0
- package/dist/chunks/studio-efvfrsf8.js +5 -0
- package/dist/chunks/studio-er30bpcx.js +5 -0
- package/dist/chunks/studio-ezscgr64.js +5 -0
- package/dist/chunks/studio-ffrrncvz.js +5 -0
- package/dist/chunks/studio-fpphgn8y.js +10 -0
- package/dist/chunks/studio-j1kvhdjk.js +4 -0
- package/dist/chunks/{studio-vrmcjf9g.js → studio-j430n16g.js} +5 -5
- package/dist/chunks/studio-jjkg84nj.js +5 -0
- package/dist/chunks/studio-m0q32ars.js +4 -0
- package/dist/chunks/studio-m6bdst11.js +5 -0
- package/dist/chunks/studio-nv2cptd4.js +64 -0
- package/dist/chunks/studio-nwfrc98n.js +5 -0
- package/dist/chunks/studio-p1wgvp7r.js +5 -0
- package/dist/chunks/studio-pag2wncm.js +5 -0
- package/dist/chunks/studio-qvanvzfd.js +5 -0
- package/dist/chunks/studio-qwa64kt7.js +5 -0
- package/dist/chunks/studio-rk1zc4x3.js +928 -0
- package/dist/chunks/studio-se2r3ptc.js +5 -0
- package/dist/chunks/studio-sg2a0dh0.js +5 -0
- package/dist/chunks/studio-tjzjhe68.js +5 -0
- package/dist/chunks/{studio-wszjyh0j.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-kggey1jt.js → studio-v0jzqdjm.js} +4 -4
- package/dist/chunks/studio-v2w7q8r1.js +7 -0
- package/dist/chunks/studio-v5vjq1h0.js +4 -0
- package/dist/chunks/studio-v8aga3vp.js +14 -0
- package/dist/chunks/studio-vfcdrfmv.js +5 -0
- package/dist/chunks/studio-vmfkgdjf.js +5 -0
- package/dist/chunks/studio-wt1816jj.js +5 -0
- package/dist/chunks/studio-wz73q5kq.js +4 -0
- package/dist/chunks/studio-y04qtxvp.js +7 -0
- package/dist/chunks/studio-y21g8zzg.js +5 -0
- package/dist/chunks/{studio-zey7zsdw.js → studio-y64hrt8p.js} +7 -7
- package/dist/chunks/studio-ynn90f58.js +16 -0
- package/dist/chunks/studio-yxz682sx.js +5 -0
- package/dist/chunks/studio-zp7snvkq.js +5 -0
- package/dist/chunks/studio-zq4z6tm6.js +5 -0
- package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
- package/dist/chunks/tabs-f5cw3tgp.js +4 -0
- package/dist/chunks/textfield-wewc8rq2.js +4 -0
- package/dist/chunks/toast-c9fn075p.js +4 -0
- package/dist/chunks/toast-host-ke5z4ng7.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-5v8ngwj2.js +4 -0
- package/dist/chunks/tree-mdq3v5cw.js +4 -0
- package/dist/chunks/{tsMode-2frah6h1.js → tsMode-sf49ee9x.js} +7 -7
- package/dist/chunks/workspace-jtfahpee.js +4 -0
- package/dist/chunks/ws-client-nze0k6mv.js +4 -0
- package/dist/iframe-entry.js +16 -16
- package/dist/manifest.json +63 -63
- package/dist/studio.js +97 -97
- package/package.json +6 -6
- package/src/about/about-modal.ts +4 -3
- package/src/account/action-flow.ts +45 -38
- package/src/account-status.ts +7 -2
- package/src/browse/library-layouts.ts +8 -5
- package/src/browse/library-model.ts +18 -6
- package/src/browse/library-pane.ts +37 -21
- package/src/browse/library-preview.ts +14 -9
- package/src/browse/library-source.ts +1 -1
- package/src/canvas/asset-refs.ts +24 -9
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +44 -53
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +62 -41
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +90 -49
- package/src/canvas/dialog-path.ts +9 -4
- package/src/canvas/dialog-state.ts +1 -2
- package/src/canvas/diff-marks.ts +9 -16
- package/src/canvas/diff-toolbar.ts +8 -7
- package/src/canvas/edit-width-drag.ts +4 -1
- package/src/canvas/edit-width.ts +1 -3
- package/src/canvas/iframe-channel.ts +27 -13
- package/src/canvas/iframe-drop.ts +13 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +80 -63
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +135 -96
- package/src/canvas/iframe-inline-edit.ts +49 -30
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +30 -25
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +18 -15
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +12 -16
- package/src/canvas/iframe-render.ts +36 -34
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +6 -2
- package/src/canvas/path-mapping.ts +19 -12
- package/src/canvas/popover-path.ts +7 -3
- package/src/canvas/popover-state.ts +1 -2
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +2 -1
- package/src/canvas/surface-registry.ts +21 -3
- package/src/collab/collab-commands.ts +7 -2
- package/src/collab/collab-session.ts +84 -45
- package/src/collab/collab-state.ts +4 -3
- package/src/collab/monaco-binding.ts +16 -13
- package/src/collab/monaco-cursors.ts +5 -2
- package/src/commands/budget.ts +3 -3
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +22 -20
- package/src/commands/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +7 -7
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +12 -10
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +5 -4
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +3 -2
- package/src/content/entry-editor.ts +29 -17
- package/src/content/entry-fields.ts +12 -7
- package/src/content/entry-model.ts +21 -12
- package/src/editor/canvas-context-menu.ts +1 -2
- package/src/editor/canvas-slash-bridge.ts +3 -6
- package/src/editor/content-slice.ts +16 -14
- package/src/editor/context-menu.ts +35 -22
- package/src/editor/convert-targets.ts +30 -35
- package/src/editor/convert-to-component.ts +11 -5
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +21 -22
- package/src/editor/inline-edit-apply.ts +35 -17
- package/src/editor/inline-edit.ts +66 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +32 -20
- package/src/editor/slash-menu.ts +1 -6
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +15 -10
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +77 -36
- package/src/files/files.ts +90 -95
- package/src/files/media-meta.ts +2 -1
- package/src/files/media-paths.ts +3 -0
- package/src/files/serialize-document.ts +2 -2
- package/src/format/constraints.ts +1 -1
- package/src/format/convert-file.ts +27 -13
- package/src/format/format-choices.ts +2 -1
- package/src/format/format-host.ts +76 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +19 -9
- package/src/github/github-publish.ts +24 -20
- package/src/grid/cell-editors.ts +46 -31
- package/src/grid/cell-popovers.ts +5 -3
- package/src/grid/edit-buffer.ts +10 -9
- package/src/grid/grid-controller.ts +20 -22
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -6
- package/src/grid/grid-panel.ts +11 -4
- package/src/grid/grid-source.ts +8 -8
- package/src/grid/grid-view.ts +14 -17
- package/src/grid/redirects-grid.ts +14 -5
- package/src/grid/redirects.ts +16 -14
- package/src/grid/schema-columns.ts +25 -19
- package/src/grid/sources/connector-source.ts +47 -20
- package/src/grid/sources/content-source.ts +25 -24
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +55 -34
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +1 -2
- package/src/media/media-pane.ts +4 -1
- package/src/new-project/add-repo-modal.ts +20 -19
- package/src/new-project/import-tab.ts +10 -14
- package/src/new-project/location-fields.ts +2 -1
- package/src/new-project/new-project-modal.ts +12 -9
- package/src/packages/jxsuite-update.ts +4 -3
- package/src/packages/pull-package-sync.ts +26 -25
- package/src/page-params.ts +97 -68
- package/src/panels/activity-panel.ts +17 -9
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-view.ts +80 -73
- package/src/panels/ai-chat/composer.ts +30 -33
- package/src/panels/ai-chat/sessions-view.ts +1 -2
- package/src/panels/ai-panel.ts +23 -20
- package/src/panels/block-action-bar.ts +46 -35
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +31 -24
- package/src/panels/data-explorer.ts +62 -25
- package/src/panels/data-grid.ts +14 -11
- package/src/panels/dnd.ts +108 -118
- package/src/panels/editors.ts +52 -21
- package/src/panels/elements-panel.ts +10 -3
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +76 -51
- package/src/panels/frontmatter-fields.ts +24 -19
- package/src/panels/frontmatter-panel.ts +44 -34
- package/src/panels/git-diff-open.ts +4 -4
- package/src/panels/git-panel.ts +49 -61
- package/src/panels/head-panel.ts +131 -111
- package/src/panels/i18n-panel.ts +10 -3
- package/src/panels/imports-panel.ts +23 -47
- package/src/panels/jump-bar.ts +48 -29
- package/src/panels/layers-panel.ts +97 -74
- package/src/panels/left-panel.ts +3 -3
- package/src/panels/pane-context.ts +31 -22
- package/src/panels/pane-grid.ts +49 -20
- package/src/panels/panel-registry.ts +22 -37
- package/src/panels/properties-panel.ts +175 -121
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +3 -3
- package/src/panels/seo-modal.ts +13 -17
- package/src/panels/settings-menu.ts +15 -15
- package/src/panels/signals-panel.ts +153 -131
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +218 -205
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +57 -54
- package/src/panels/stylebook-layers-panel.ts +9 -9
- package/src/panels/stylebook-panel.ts +13 -17
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +36 -26
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +58 -30
- package/src/platforms/cloud.ts +345 -175
- package/src/platforms/default-platform.ts +10 -4
- package/src/platforms/devserver.ts +129 -117
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +8 -2
- package/src/publish/pages-service.ts +28 -13
- package/src/publish/publish-commands.ts +5 -4
- package/src/publish/publish-panel.ts +10 -6
- package/src/recent-projects.ts +15 -8
- package/src/resize-edges.ts +26 -36
- package/src/services/a11y-report.ts +26 -19
- package/src/services/agent-seed.ts +23 -11
- package/src/services/ai-ask.ts +9 -12
- package/src/services/ai-command-tools.ts +68 -62
- package/src/services/ai-import-tools.ts +80 -67
- package/src/services/ai-models.ts +17 -13
- package/src/services/ai-project-tools.ts +68 -32
- package/src/services/ai-session-store.ts +19 -10
- package/src/services/ai-system-prompt.ts +46 -20
- package/src/services/ai-tools.ts +71 -27
- package/src/services/ai-write-report.ts +20 -12
- package/src/services/ai-writes.ts +4 -4
- package/src/services/automation.ts +58 -31
- package/src/services/cem-export.ts +149 -58
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/context-manager.ts +14 -10
- package/src/services/context-resolver.ts +20 -8
- package/src/services/data-service.ts +19 -15
- package/src/services/directory-picker.ts +18 -12
- package/src/services/document-assistant.ts +39 -19
- package/src/services/gated-registry.ts +10 -6
- package/src/services/harness/chat-reducer.ts +23 -1
- package/src/services/import-client.ts +91 -38
- package/src/services/import-seed.ts +8 -2
- package/src/services/jx-validate.ts +28 -31
- package/src/services/live-preview.ts +0 -0
- package/src/services/live-surfaces.ts +6 -3
- package/src/services/model-uri.ts +10 -2
- package/src/services/module-preloads.ts +12 -8
- package/src/services/monaco-buffer.ts +43 -24
- package/src/services/monaco-lazy.ts +7 -8
- package/src/services/monaco-setup.ts +23 -16
- package/src/services/notify.ts +44 -17
- package/src/services/popover-report.ts +25 -10
- package/src/services/preview-eval.ts +20 -8
- package/src/services/profile.ts +13 -6
- package/src/services/project-path.ts +13 -10
- package/src/services/references.ts +0 -0
- package/src/services/render-critic.ts +8 -7
- package/src/services/settings/kernel.ts +13 -4
- package/src/services/settings/write-queue.ts +9 -9
- package/src/services/token-lint.ts +12 -10
- package/src/services/tool-executor.ts +17 -5
- package/src/services/tool-outcomes.ts +44 -24
- package/src/services/trusted-types.ts +24 -7
- package/src/settings/contexts-section.ts +11 -8
- package/src/settings/contributed-section.ts +79 -60
- package/src/settings/css-vars-editor.ts +37 -16
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +23 -13
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +11 -8
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +9 -6
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +1 -1
- package/src/settings/schema-field-ui.ts +9 -0
- package/src/settings/settings-document.ts +5 -5
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +104 -81
- package/src/site-context.ts +37 -22
- package/src/state.ts +41 -49
- package/src/store.ts +54 -34
- package/src/studio.ts +25 -75
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +6 -7
- package/src/style/token-ref.ts +5 -4
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +31 -36
- package/src/surfaces/ai-credentials-form.ts +6 -16
- package/src/surfaces/ai-managed-connect.ts +3 -4
- package/src/surfaces/ai-model-picker.ts +3 -5
- package/src/surfaces/block-action-bar.ts +22 -11
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.ts +12 -11
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/commandbar.ts +14 -9
- package/src/surfaces/convert-repeater.ts +17 -19
- package/src/surfaces/data-actions.ts +9 -7
- package/src/surfaces/dialog.ts +26 -28
- package/src/surfaces/diff-toolbar.ts +9 -7
- package/src/surfaces/doc-header.ts +10 -19
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.ts +14 -11
- package/src/surfaces/expression-editor.ts +11 -25
- package/src/surfaces/files-panel.ts +27 -14
- package/src/surfaces/formula-palette.ts +4 -5
- package/src/surfaces/git-panel.ts +7 -15
- package/src/surfaces/github-auth.ts +16 -20
- package/src/surfaces/github-publish.ts +17 -22
- package/src/surfaces/grid-cell.ts +30 -31
- package/src/surfaces/grid-open.ts +10 -14
- package/src/surfaces/grid-panel.ts +13 -9
- package/src/surfaces/grid-replace.ts +13 -13
- package/src/surfaces/grid-views.ts +15 -18
- package/src/surfaces/inspector-dock.ts +13 -12
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.ts +19 -20
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.ts +11 -10
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/menu.ts +29 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.ts +20 -25
- package/src/surfaces/pane-grid.ts +15 -10
- package/src/surfaces/panel-activity.ts +5 -6
- package/src/surfaces/panel-data.ts +3 -4
- package/src/surfaces/panel-deploy-checklist.ts +5 -6
- package/src/surfaces/panel-elements.ts +5 -7
- package/src/surfaces/panel-i18n.ts +5 -7
- package/src/surfaces/panel-imports.ts +6 -13
- package/src/surfaces/panel-outline.ts +25 -19
- package/src/surfaces/panel-page.ts +11 -18
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.ts +20 -34
- package/src/surfaces/panel-stylebook-layers.ts +5 -8
- package/src/surfaces/preferences.ts +21 -11
- package/src/surfaces/progress-modal.ts +15 -9
- package/src/surfaces/properties-panel.json +1 -1
- package/src/surfaces/properties-panel.ts +20 -42
- package/src/surfaces/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.ts +13 -13
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.ts +15 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.ts +14 -10
- package/src/surfaces/settings-css-vars.ts +5 -12
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.ts +8 -15
- package/src/surfaces/settings-extensions.ts +5 -6
- package/src/surfaces/settings-head.ts +33 -39
- package/src/surfaces/settings-locales.ts +8 -20
- package/src/surfaces/settings-overview.ts +5 -6
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.ts +9 -18
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/slash-menu.ts +19 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +17 -14
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +5 -7
- package/src/tabs/patch-ops.ts +4 -3
- package/src/tabs/project-config.ts +32 -21
- package/src/tabs/selection.ts +36 -8
- package/src/tabs/tab.ts +52 -41
- package/src/tabs/transact.ts +98 -53
- package/src/types.ts +32 -17
- package/src/ui/ai-credentials-form.ts +10 -13
- package/src/ui/ai-model-picker.ts +3 -3
- package/src/ui/cf-account-picker.ts +7 -9
- package/src/ui/color-selector.ts +9 -5
- package/src/ui/dynamic-slot.ts +7 -8
- package/src/ui/expression-editor.ts +112 -105
- package/src/ui/form-controls.ts +57 -48
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +44 -31
- package/src/ui/media-picker.ts +18 -9
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +7 -6
- package/src/ui/schema-form.ts +113 -70
- package/src/ui/surface.ts +71 -8
- package/src/ui/timing.ts +9 -0
- package/src/ui/value-source.ts +44 -31
- package/src/ui/virtual-window.ts +3 -2
- package/src/utils/base64.ts +3 -1
- package/src/utils/edit-display.ts +73 -73
- package/src/utils/element-selectors.ts +3 -2
- package/src/utils/google-fonts.ts +15 -14
- package/src/utils/inherited-style.ts +18 -20
- package/src/utils/link-target.ts +1 -1
- package/src/utils/preview-format.ts +25 -3
- package/src/utils/strip-events.ts +49 -22
- package/src/utils/studio-utils.ts +29 -14
- package/src/view.ts +2 -3
- package/src/workspace/pane-derive.ts +10 -12
- package/src/workspace/session.ts +53 -43
- package/src/workspace/workspace.ts +40 -36
- package/dist/chunks/adapter-f93pafd7.js +0 -4
- package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
- package/dist/chunks/cf-settings-125tdm0w.js +0 -4
- package/dist/chunks/color-area-jqhna8zy.js +0 -4
- package/dist/chunks/color-field-embq5ctg.js +0 -4
- package/dist/chunks/color-fpezvnkt.js +0 -4
- package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
- package/dist/chunks/combobox-773hdzyj.js +0 -4
- package/dist/chunks/components-ax2f1fnn.js +0 -4
- package/dist/chunks/content-source-108aqtk1.js +0 -4
- package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-pfgdmkb0.js +0 -4
- package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
- package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
- package/dist/chunks/file-ops-meej5mqf.js +0 -4
- package/dist/chunks/files-44vp8a2s.js +0 -4
- package/dist/chunks/format-host-7q1petb9.js +0 -4
- package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
- package/dist/chunks/git-panel-zngbymvd.js +0 -4
- package/dist/chunks/grid-view-sx9vynsp.js +0 -51
- package/dist/chunks/icons-p44xhjf0.js +0 -4
- package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
- package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
- package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
- package/dist/chunks/iframe-host-qk3ycq87.js +0 -4
- package/dist/chunks/index-wkyfjeqz.js +0 -4
- package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
- package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
- package/dist/chunks/layers-xd92fg8d.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
- package/dist/chunks/media-picker-0svzkdyb.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/menu-5c55ea3d.js +0 -4
- package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
- package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
- package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
- package/dist/chunks/notify-0xgtn8q1.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-v1qctbe6.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
- package/dist/chunks/quick-search-a54e6t5n.js +0 -4
- package/dist/chunks/references-gmqp82fs.js +0 -4
- package/dist/chunks/right-panel-v7t9awbk.js +0 -4
- package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0bhx5hz6.js +0 -5
- package/dist/chunks/studio-0k1ddnyy.js +0 -6
- package/dist/chunks/studio-1b04pd0j.js +0 -64
- package/dist/chunks/studio-4dwbj6gb.js +0 -5
- package/dist/chunks/studio-4tanh828.js +0 -5
- package/dist/chunks/studio-55h4mstj.js +0 -4
- package/dist/chunks/studio-5tnvjkz4.js +0 -5
- package/dist/chunks/studio-60dqgb0c.js +0 -5
- package/dist/chunks/studio-61dp09qg.js +0 -9
- package/dist/chunks/studio-63epcrj2.js +0 -5
- package/dist/chunks/studio-74k29dy9.js +0 -5
- package/dist/chunks/studio-7vg6jcd3.js +0 -5
- package/dist/chunks/studio-7zx31knw.js +0 -9
- package/dist/chunks/studio-8bxk97km.js +0 -5
- package/dist/chunks/studio-933e30n4.js +0 -5
- package/dist/chunks/studio-98wnwhbg.js +0 -5
- package/dist/chunks/studio-9mccjwjh.js +0 -14
- package/dist/chunks/studio-a2ke1e4t.js +0 -5
- package/dist/chunks/studio-e3a2a6v3.js +0 -4
- package/dist/chunks/studio-e81q1vb9.js +0 -5
- package/dist/chunks/studio-epgrmqqm.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-g1shz58g.js +0 -5
- package/dist/chunks/studio-gf0fz03c.js +0 -5
- package/dist/chunks/studio-gjtpe62q.js +0 -6
- package/dist/chunks/studio-gkskhg7m.js +0 -5
- package/dist/chunks/studio-gx4dnjzd.js +0 -5
- package/dist/chunks/studio-j03zga3y.js +0 -9
- package/dist/chunks/studio-jhpxeckz.js +0 -5
- package/dist/chunks/studio-k01r7ykp.js +0 -5
- package/dist/chunks/studio-kk7h30ne.js +0 -7
- package/dist/chunks/studio-kt1zqney.js +0 -5
- package/dist/chunks/studio-m3cwhvye.js +0 -5
- package/dist/chunks/studio-mcayt6hz.js +0 -5
- package/dist/chunks/studio-myjcghv3.js +0 -5
- package/dist/chunks/studio-n8bxwc3y.js +0 -4
- package/dist/chunks/studio-ngm8gvpb.js +0 -5
- package/dist/chunks/studio-nj5a01jy.js +0 -928
- package/dist/chunks/studio-pcgz8heb.js +0 -5
- package/dist/chunks/studio-qcsq0t15.js +0 -5
- package/dist/chunks/studio-qkstvve9.js +0 -5
- package/dist/chunks/studio-qv1pwd3c.js +0 -5
- package/dist/chunks/studio-rc6dvxjb.js +0 -7
- package/dist/chunks/studio-s8dmmz66.js +0 -5
- package/dist/chunks/studio-sp5xzbj4.js +0 -6
- package/dist/chunks/studio-szsjbj0g.js +0 -5
- package/dist/chunks/studio-t1xzawhr.js +0 -16
- package/dist/chunks/studio-t6b6qe31.js +0 -5
- package/dist/chunks/studio-tdcprbqb.js +0 -5
- package/dist/chunks/studio-vyc0b4he.js +0 -10
- package/dist/chunks/studio-w0cgf6jg.js +0 -5
- package/dist/chunks/studio-w3hskzqk.js +0 -5
- package/dist/chunks/studio-xgrgcdyh.js +0 -9
- package/dist/chunks/studio-xz2yxfcb.js +0 -5
- package/dist/chunks/studio-y6n42tgs.js +0 -5
- package/dist/chunks/studio-yb560vxr.js +0 -5
- package/dist/chunks/studio-yn9f8vtx.js +0 -5
- package/dist/chunks/studio-yw05w8f0.js +0 -7
- package/dist/chunks/studio-z16sgavc.js +0 -5
- package/dist/chunks/studio-zyqn40w4.js +0 -5
- package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
- package/dist/chunks/tabs-jwthg40w.js +0 -4
- package/dist/chunks/textfield-spy3hc77.js +0 -4
- package/dist/chunks/toast-4d35zd64.js +0 -4
- package/dist/chunks/toast-host-8sjmfed3.js +0 -4
- package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
- package/dist/chunks/tree-h19v1jfz.js +0 -4
- package/dist/chunks/workspace-zt81g1ms.js +0 -4
- package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
|
@@ -26,25 +26,20 @@
|
|
|
26
26
|
* @docs studio/logic/statements
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
29
30
|
import { reactive } from "../reactivity";
|
|
30
31
|
import { REGION_ATTR } from "../ui/regions";
|
|
31
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
32
33
|
import statementsDoc from "./statements.json";
|
|
33
|
-
import type {
|
|
34
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
34
35
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
35
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
36
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
36
37
|
|
|
37
|
-
registerSurface("statements", statementsDoc
|
|
38
|
+
registerSurface("statements", statementsDoc);
|
|
38
39
|
|
|
39
40
|
/** Which control one operand of a statement draws. The flow picks it; the document switches on it. */
|
|
40
41
|
export type StatementFieldKind = "control" | "text" | "select" | "flags";
|
|
41
42
|
|
|
42
|
-
/** A closed list of choices, in the shape the kit's select reads. */
|
|
43
|
-
export interface StatementOption {
|
|
44
|
-
value: string;
|
|
45
|
-
label: string;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
43
|
/** One `eventInit` flag of a `dispatchEvent` statement. */
|
|
49
44
|
export interface StatementFlagView {
|
|
50
45
|
/** `<row>::<prop>::<flag>` — self-contained, because a third `$map` shadows both above it. */
|
|
@@ -64,7 +59,7 @@ export interface StatementFieldView {
|
|
|
64
59
|
/** What a `text` or `select` control holds. Empty for the other two kinds. */
|
|
65
60
|
value: string;
|
|
66
61
|
placeholder: string;
|
|
67
|
-
options:
|
|
62
|
+
options: SurfaceOption[];
|
|
68
63
|
flags: StatementFlagView[];
|
|
69
64
|
}
|
|
70
65
|
|
|
@@ -119,7 +114,7 @@ export interface StatementIslands {
|
|
|
119
114
|
controlSlot: (id: string, host: HTMLElement) => void;
|
|
120
115
|
}
|
|
121
116
|
|
|
122
|
-
interface StatementScope extends
|
|
117
|
+
interface StatementScope extends StatementActions {
|
|
123
118
|
rows: StatementRowView[];
|
|
124
119
|
}
|
|
125
120
|
|
|
@@ -171,7 +166,7 @@ export function renderStatementsSurface(
|
|
|
171
166
|
region is a fact about the HOST — who is drawing this editor — not about the document inside
|
|
172
167
|
it, so it should be true the moment the host is claimed rather than a frame later. */
|
|
173
168
|
host.setAttribute(REGION_ATTR, region);
|
|
174
|
-
const scope = reactive({ ...actions, rows })
|
|
169
|
+
const scope: StatementScope = reactive<StatementScope>({ ...actions, rows });
|
|
175
170
|
const record: Mounted = { disposed: false, handle: null, scope };
|
|
176
171
|
mounts.set(host, record);
|
|
177
172
|
/* No race to arbitrate: a repaint arriving while this is in flight takes the branch above — a
|
|
@@ -200,16 +195,16 @@ export function renderStatementsSurface(
|
|
|
200
195
|
|
|
201
196
|
/** The `part` a node was rendered with, or "". */
|
|
202
197
|
function partOf(def: JxElement | string): string {
|
|
203
|
-
const part =
|
|
204
|
-
return
|
|
198
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
199
|
+
return isString(part) ? part : "";
|
|
205
200
|
}
|
|
206
201
|
|
|
207
202
|
/** The `key` of the `$map` item a node was rendered inside, or "". */
|
|
208
203
|
function itemKey(state: JxScope | undefined): string {
|
|
209
|
-
const
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
return
|
|
204
|
+
const map = state?.["$map"];
|
|
205
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
206
|
+
const key = isJsonObject(item) ? item["key"] : "";
|
|
207
|
+
return isString(key) ? key : "";
|
|
213
208
|
}
|
|
214
209
|
|
|
215
210
|
/**
|
|
@@ -54,12 +54,12 @@ import { collabState } from "../collab/collab-state";
|
|
|
54
54
|
import { problemCount, problems } from "../services/notify";
|
|
55
55
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
56
56
|
import statusbarDoc from "./statusbar.json";
|
|
57
|
+
import type { CommandArgValues } from "../commands/command-args";
|
|
57
58
|
import type { CommandRegistry } from "../commands/registry";
|
|
58
59
|
import type { EffectScope } from "@vue/reactivity";
|
|
59
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
60
60
|
import type { SurfaceHandle } from "../ui/surface";
|
|
61
61
|
|
|
62
|
-
registerSurface("statusbar", statusbarDoc
|
|
62
|
+
registerSurface("statusbar", statusbarDoc);
|
|
63
63
|
|
|
64
64
|
let _scope: EffectScope | null = null;
|
|
65
65
|
|
|
@@ -72,7 +72,7 @@ interface StatusItem {
|
|
|
72
72
|
label: string;
|
|
73
73
|
/** Extra context for the tooltip. The command's own title and chord are added to it. */
|
|
74
74
|
title?: string;
|
|
75
|
-
args?:
|
|
75
|
+
args?: CommandArgValues;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/** One item as the surface reads it: a button that runs a command through `run`, or a readout. */
|
|
@@ -85,7 +85,7 @@ interface ProjectedItem {
|
|
|
85
85
|
disabled: boolean;
|
|
86
86
|
/** For a button: what `run` runs. */
|
|
87
87
|
command: string | null;
|
|
88
|
-
args:
|
|
88
|
+
args: CommandArgValues | undefined;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
interface ProjectedField {
|
|
@@ -147,9 +147,10 @@ function projectField(
|
|
|
147
147
|
items: readonly (StatusItem | null)[],
|
|
148
148
|
): ProjectedField | null {
|
|
149
149
|
const region = `statusbar/${id}`;
|
|
150
|
-
const live = items
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
const live = items.flatMap((item) => {
|
|
151
|
+
const projected = item === null ? null : projectItem(registry, region, item);
|
|
152
|
+
return projected === null ? [] : [projected];
|
|
153
|
+
});
|
|
153
154
|
if (live.length === 0) {
|
|
154
155
|
return null;
|
|
155
156
|
}
|
|
@@ -266,7 +267,7 @@ function present(fields: readonly (ProjectedField | null)[]): ProjectedField[] {
|
|
|
266
267
|
return fields.filter((field): field is ProjectedField => field !== null);
|
|
267
268
|
}
|
|
268
269
|
|
|
269
|
-
interface StatusbarScope
|
|
270
|
+
interface StatusbarScope {
|
|
270
271
|
/** The fields before the DOCUMENT slot: PROJECT. */
|
|
271
272
|
leading: ProjectedField[];
|
|
272
273
|
/** Whether the DOCUMENT slot has a trail to show. */
|
|
@@ -282,7 +283,7 @@ let _handle: SurfaceHandle | null = null;
|
|
|
282
283
|
|
|
283
284
|
/** The reactive scope the surface reads, made once. */
|
|
284
285
|
function state(): StatusbarScope {
|
|
285
|
-
_state ??= reactive({
|
|
286
|
+
_state ??= reactive<StatusbarScope>({
|
|
286
287
|
hasDocument: false,
|
|
287
288
|
leading: [],
|
|
288
289
|
run: (key: string) => {
|
|
@@ -291,11 +292,11 @@ function state(): StatusbarScope {
|
|
|
291
292
|
.find((i) => i.key === key);
|
|
292
293
|
const registry = activeRegistry();
|
|
293
294
|
if (item?.command && registry) {
|
|
294
|
-
void runReported(registry, item.command, item.args
|
|
295
|
+
void runReported(registry, item.command, item.args, "Status Bar");
|
|
295
296
|
}
|
|
296
297
|
},
|
|
297
298
|
trailing: [],
|
|
298
|
-
})
|
|
299
|
+
});
|
|
299
300
|
return _state;
|
|
300
301
|
}
|
|
301
302
|
|
|
@@ -306,17 +307,19 @@ function state(): StatusbarScope {
|
|
|
306
307
|
* is the same hand-over the pane grid gives the tab strip and the context bar.
|
|
307
308
|
*/
|
|
308
309
|
function ensureMounted(): void {
|
|
309
|
-
|
|
310
|
+
// The host is captured, so the mount callback below reads the element this call checked.
|
|
311
|
+
const host = statusbarEl;
|
|
312
|
+
if (_mount || !host) {
|
|
310
313
|
return;
|
|
311
314
|
}
|
|
312
|
-
const mount = mountSurface("statusbar", state(),
|
|
315
|
+
const mount = mountSurface("statusbar", state(), host);
|
|
313
316
|
_mount = mount;
|
|
314
317
|
void mount.then((handle) => {
|
|
315
318
|
if (_mount !== mount) {
|
|
316
319
|
return;
|
|
317
320
|
}
|
|
318
321
|
_handle = handle;
|
|
319
|
-
attachJumpBarHost(
|
|
322
|
+
attachJumpBarHost(host.querySelector<HTMLElement>('[part="trail"]'));
|
|
320
323
|
});
|
|
321
324
|
}
|
|
322
325
|
|
|
@@ -22,13 +22,15 @@
|
|
|
22
22
|
* @docs studio/design/style-inspector
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
25
26
|
import { reactive } from "../reactivity";
|
|
26
27
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
27
28
|
import stylePanelDoc from "./style-panel.json";
|
|
28
|
-
import type {
|
|
29
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
29
30
|
import type { SurfaceHandle } from "../ui/surface";
|
|
31
|
+
import type { ColorTokenView } from "../ui/color-selector";
|
|
30
32
|
|
|
31
|
-
registerSurface("style-panel", stylePanelDoc
|
|
33
|
+
registerSurface("style-panel", stylePanelDoc);
|
|
32
34
|
|
|
33
35
|
// ─── The projection ──────────────────────────────────────────────────────────
|
|
34
36
|
|
|
@@ -58,19 +60,6 @@ export type StyleRowKind =
|
|
|
58
60
|
/** How the provenance chip is drawn: not at all, as a control, or as a statement. */
|
|
59
61
|
export type StyleChipControl = "none" | "button" | "text";
|
|
60
62
|
|
|
61
|
-
/**
|
|
62
|
-
* One colour the project has named, as the row's palette draws it.
|
|
63
|
-
*
|
|
64
|
-
* `value` is the reference and `color` is the literal behind it, and they are two fields because
|
|
65
|
-
* they are two things: choosing a swatch commits `var(--color-accent)`, while the chip is only how
|
|
66
|
-
* that reads on screen. `label` is what a reader hears — a swatch is never named by its hex.
|
|
67
|
-
*/
|
|
68
|
-
export interface StyleTokenView extends Record<string, unknown> {
|
|
69
|
-
value: string;
|
|
70
|
-
color: string;
|
|
71
|
-
label: string;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
63
|
/**
|
|
75
64
|
* One keyword a `keywords` row lists under its field.
|
|
76
65
|
*
|
|
@@ -78,7 +67,7 @@ export interface StyleTokenView extends Record<string, unknown> {
|
|
|
78
67
|
* — and the two stay separate because the field holds the value: a combobox row's label is a
|
|
79
68
|
* courtesy, never a second spelling the reader could end up with.
|
|
80
69
|
*/
|
|
81
|
-
export interface StyleOptionView
|
|
70
|
+
export interface StyleOptionView {
|
|
82
71
|
value: string;
|
|
83
72
|
label: string;
|
|
84
73
|
/** A muted note at the end of the row — a font token's own name beside its display name. */
|
|
@@ -97,7 +86,7 @@ export interface StyleOptionView extends Record<string, unknown> {
|
|
|
97
86
|
}
|
|
98
87
|
|
|
99
88
|
/** One value of a button-group row. */
|
|
100
|
-
export interface StyleButtonView
|
|
89
|
+
export interface StyleButtonView {
|
|
101
90
|
/** The owning row's key — a nested `$map` shadows `$map.item`, so the row carries it here. */
|
|
102
91
|
row: string;
|
|
103
92
|
/** The CSS value this button commits, and the button's identity in the repeater. */
|
|
@@ -130,7 +119,7 @@ export interface StyleButtonView extends Record<string, unknown> {
|
|
|
130
119
|
* `prop` is the name a reader, the region grammar and the inspector see. The two are different on
|
|
131
120
|
* purpose: one coordinate's `color` and another's are two rows with one name.
|
|
132
121
|
*/
|
|
133
|
-
export interface StyleRowView
|
|
122
|
+
export interface StyleRowView {
|
|
134
123
|
key: string;
|
|
135
124
|
prop: string;
|
|
136
125
|
label: string;
|
|
@@ -177,7 +166,7 @@ export interface StyleRowView extends Record<string, unknown> {
|
|
|
177
166
|
choicesHint: string;
|
|
178
167
|
buttons: StyleButtonView[];
|
|
179
168
|
/** The palette a colour row offers inside its picker, and whether it has one to offer. */
|
|
180
|
-
tokens:
|
|
169
|
+
tokens: ColorTokenView[];
|
|
181
170
|
hasTokens: boolean;
|
|
182
171
|
overflowSelected: boolean;
|
|
183
172
|
expanded: boolean;
|
|
@@ -190,7 +179,7 @@ export interface StyleRowView extends Record<string, unknown> {
|
|
|
190
179
|
}
|
|
191
180
|
|
|
192
181
|
/** One accordion section. */
|
|
193
|
-
export interface StyleSectionView
|
|
182
|
+
export interface StyleSectionView {
|
|
194
183
|
key: string;
|
|
195
184
|
label: string;
|
|
196
185
|
open: boolean;
|
|
@@ -236,14 +225,14 @@ export interface StylePanelActions {
|
|
|
236
225
|
/** The provenance chip, a custom pair's remove and a nested rule's remove are one verb. */
|
|
237
226
|
chipClick: (key: string) => void;
|
|
238
227
|
/** Open the Value Source picker under the chip that was pressed. */
|
|
239
|
-
pickSource: (key: string, anchor:
|
|
228
|
+
pickSource: (key: string, anchor: EventTarget | null) => void;
|
|
240
229
|
/** Open the row's list of offerable values under the button that was pressed. */
|
|
241
|
-
pickChoice: (key: string, anchor:
|
|
230
|
+
pickChoice: (key: string, anchor: EventTarget | null) => void;
|
|
242
231
|
pressButton: (key: string, value: string) => void;
|
|
243
232
|
toggleShorthand: (key: string) => void;
|
|
244
233
|
renameCustom: (key: string, name: string) => void;
|
|
245
234
|
/** Enter in the add-a-property field. Given the field too, because it is emptied on success. */
|
|
246
|
-
addCustom: (key: string, field:
|
|
235
|
+
addCustom: (key: string, field: EventTarget | null) => void;
|
|
247
236
|
openNested: (key: string) => void;
|
|
248
237
|
addNested: () => void;
|
|
249
238
|
}
|
|
@@ -264,12 +253,12 @@ export interface StylePanelSurface {
|
|
|
264
253
|
}
|
|
265
254
|
|
|
266
255
|
/** The scope the document reads: the view plus the actions, flat. */
|
|
267
|
-
interface StylePanelScope extends
|
|
256
|
+
interface StylePanelScope extends StylePanelView, StylePanelActions {}
|
|
268
257
|
|
|
269
258
|
/** A node definition's `part`, as written in the document. */
|
|
270
259
|
function partOf(def: JxElement | string): string {
|
|
271
|
-
const part =
|
|
272
|
-
return
|
|
260
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
261
|
+
return isString(part) ? part : "";
|
|
273
262
|
}
|
|
274
263
|
|
|
275
264
|
/** Write a whole view into the scope. Assignment only — the mount is never rebuilt for a repaint. */
|
|
@@ -300,7 +289,7 @@ export function mountStylePanelSurface(
|
|
|
300
289
|
actions: StylePanelActions,
|
|
301
290
|
hosts: StyleHostSink,
|
|
302
291
|
): StylePanelSurface {
|
|
303
|
-
const scope = reactive<StylePanelScope>({
|
|
292
|
+
const scope: StylePanelScope = reactive<StylePanelScope>({
|
|
304
293
|
...actions,
|
|
305
294
|
emptyActionLabel: "",
|
|
306
295
|
emptyMessage: "",
|
|
@@ -308,7 +297,7 @@ export function mountStylePanelSurface(
|
|
|
308
297
|
hasEmptyAction: false,
|
|
309
298
|
sections: [],
|
|
310
299
|
view: "empty",
|
|
311
|
-
})
|
|
300
|
+
});
|
|
312
301
|
project(scope, view);
|
|
313
302
|
|
|
314
303
|
host.replaceChildren();
|
|
@@ -334,9 +323,7 @@ export function mountStylePanelSurface(
|
|
|
334
323
|
dock that redrew took the tab's root away without telling anyone. */
|
|
335
324
|
connected: () =>
|
|
336
325
|
!disposed &&
|
|
337
|
-
(mounted === null
|
|
338
|
-
? host.childNodes.length === 0
|
|
339
|
-
: (mounted.root as Node).parentNode === host),
|
|
326
|
+
(mounted === null ? host.childNodes.length === 0 : mounted.root.parentNode === host),
|
|
340
327
|
dispose() {
|
|
341
328
|
disposed = true;
|
|
342
329
|
hosts.target(null);
|
|
@@ -29,10 +29,9 @@
|
|
|
29
29
|
import { reactive } from "../reactivity";
|
|
30
30
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
31
31
|
import chromeDoc from "./stylebook-chrome.json";
|
|
32
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
33
32
|
import type { SurfaceHandle } from "../ui/surface";
|
|
34
33
|
|
|
35
|
-
registerSurface("stylebook-chrome", chromeDoc
|
|
34
|
+
registerSurface("stylebook-chrome", chromeDoc);
|
|
36
35
|
|
|
37
36
|
/** What the bar says right now. Every field is the panel's own wording, never a value it derives. */
|
|
38
37
|
export interface StylebookChromeView {
|
|
@@ -64,8 +63,7 @@ export interface StylebookChromeSurface {
|
|
|
64
63
|
update: (view: StylebookChromeView) => void;
|
|
65
64
|
}
|
|
66
65
|
|
|
67
|
-
interface StylebookChromeScope
|
|
68
|
-
extends Record<string, unknown>, StylebookChromeView, StylebookChromeActions {}
|
|
66
|
+
interface StylebookChromeScope extends StylebookChromeView, StylebookChromeActions {}
|
|
69
67
|
|
|
70
68
|
/**
|
|
71
69
|
* Create the bar's surface, mounted into a host of its own.
|
|
@@ -84,7 +82,7 @@ export function createStylebookChromeSurface(
|
|
|
84
82
|
): StylebookChromeSurface {
|
|
85
83
|
const host = document.createElement("div");
|
|
86
84
|
host.style.display = "contents";
|
|
87
|
-
const scope = reactive({ ...view, ...actions })
|
|
85
|
+
const scope: StylebookChromeScope = reactive<StylebookChromeScope>({ ...view, ...actions });
|
|
88
86
|
|
|
89
87
|
/** `null` while a mount is in flight — which is a standing surface, not a missing one. */
|
|
90
88
|
let handle: SurfaceHandle | null = null;
|
|
@@ -28,20 +28,21 @@
|
|
|
28
28
|
* @docs studio/interface
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
31
32
|
import { reactive } from "../reactivity";
|
|
32
33
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
34
|
import tabStripDoc from "./tab-strip.json";
|
|
34
|
-
import type {
|
|
35
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
35
36
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
36
37
|
import type { SurfaceHandle } from "../ui/surface";
|
|
37
38
|
|
|
38
|
-
registerSurface("tab-strip", tabStripDoc
|
|
39
|
+
registerSurface("tab-strip", tabStripDoc);
|
|
39
40
|
|
|
40
41
|
/**
|
|
41
42
|
* One chip, as the document draws it. Every field is a value: the document asks no question about a
|
|
42
43
|
* tab, and there is no branch in it that a projection has not already decided.
|
|
43
44
|
*/
|
|
44
|
-
export interface TabChipView
|
|
45
|
+
export interface TabChipView {
|
|
45
46
|
/** The tab id: the repeater's key, the tab's `value`, and what every action is addressed with. */
|
|
46
47
|
key: string;
|
|
47
48
|
/** The shortest suffix that tells this document apart, or a page's route. */
|
|
@@ -107,7 +108,7 @@ export interface TabStripActions {
|
|
|
107
108
|
/** The chevron, or a derived pane's ✕. The anchor is the button that was pressed. */
|
|
108
109
|
openTrailing: (anchor: HTMLElement | null) => void;
|
|
109
110
|
/** A wheel over the strip. A host function in handler position, so it takes the event. */
|
|
110
|
-
wheel: (scope:
|
|
111
|
+
wheel: (scope: JxScope, event: WheelEvent) => void;
|
|
111
112
|
/** A chip element exists. `panels/tab-strip.ts` makes it a pragmatic drag source and drop target. */
|
|
112
113
|
chipHost: (element: HTMLElement, id: string) => void;
|
|
113
114
|
/**
|
|
@@ -146,20 +147,20 @@ export interface TabStripSurface {
|
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
/** The scope `tab-strip.json` reads. */
|
|
149
|
-
interface TabStripScope
|
|
150
|
-
extends Record<string, unknown>, TabStripValues, TabStripActions, TabStripDragState {}
|
|
150
|
+
interface TabStripScope extends TabStripValues, TabStripActions, TabStripDragState {}
|
|
151
151
|
|
|
152
152
|
/** The `part` a node's definition carries, or `""` for a text node or an unmarked element. */
|
|
153
153
|
function partOf(def: JxElement | string): string {
|
|
154
|
-
const part =
|
|
155
|
-
return
|
|
154
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
155
|
+
return isString(part) ? part : "";
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
/** The tab id a mapped `jx-tab` node was rendered for, read from the row scope, or `""`. */
|
|
159
159
|
function mappedChipKey(state: JxScope | undefined): string {
|
|
160
|
-
const map = state?.["$map"]
|
|
161
|
-
const
|
|
162
|
-
|
|
160
|
+
const map = state?.["$map"];
|
|
161
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
162
|
+
const key = isJsonObject(item) ? item["key"] : undefined;
|
|
163
|
+
return isString(key) ? key : "";
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
/**
|
|
@@ -178,13 +179,13 @@ export function mountTabStripSurface(
|
|
|
178
179
|
values: TabStripValues,
|
|
179
180
|
actions: TabStripActions,
|
|
180
181
|
): TabStripSurface {
|
|
181
|
-
const scope = reactive<TabStripScope>({
|
|
182
|
+
const scope: TabStripScope = reactive<TabStripScope>({
|
|
182
183
|
...values,
|
|
183
184
|
...actions,
|
|
184
185
|
dragKey: "",
|
|
185
186
|
dropIndex: -1,
|
|
186
187
|
dropTail: false,
|
|
187
|
-
})
|
|
188
|
+
});
|
|
188
189
|
|
|
189
190
|
host.replaceChildren();
|
|
190
191
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -46,11 +46,10 @@ import { reactive } from "../reactivity";
|
|
|
46
46
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
47
47
|
import { openMenu } from "./menu";
|
|
48
48
|
import targetLineDoc from "./target-line.json";
|
|
49
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
50
49
|
import type { MenuHandle, MenuRowProjection } from "./menu";
|
|
51
50
|
import type { SurfaceHandle } from "../ui/surface";
|
|
52
51
|
|
|
53
|
-
registerSurface("target-line", targetLineDoc
|
|
52
|
+
registerSurface("target-line", targetLineDoc);
|
|
54
53
|
|
|
55
54
|
/** The region the line stamps on itself, so a shot can crop it. */
|
|
56
55
|
const REGION = "inspector/target";
|
|
@@ -108,7 +107,7 @@ export const BASE_SELECTOR_LABEL = "base rule";
|
|
|
108
107
|
// ─── The projection ──────────────────────────────────────────────────────────
|
|
109
108
|
|
|
110
109
|
/** One word of the sentence, as the document reads it. */
|
|
111
|
-
interface ProjectedSegment
|
|
110
|
+
interface ProjectedSegment {
|
|
112
111
|
key: string;
|
|
113
112
|
label: string;
|
|
114
113
|
title: string;
|
|
@@ -119,7 +118,7 @@ interface ProjectedSegment extends Record<string, unknown> {
|
|
|
119
118
|
}
|
|
120
119
|
|
|
121
120
|
/** The scope `target-line.json` reads. */
|
|
122
|
-
interface TargetLineScope
|
|
121
|
+
interface TargetLineScope {
|
|
123
122
|
region: string;
|
|
124
123
|
segments: ProjectedSegment[];
|
|
125
124
|
selectorLabel: string;
|
|
@@ -201,7 +200,7 @@ function scope(): TargetLineScope {
|
|
|
201
200
|
toggleLabel: "Show affected",
|
|
202
201
|
warn: false,
|
|
203
202
|
warningText: "",
|
|
204
|
-
})
|
|
203
|
+
});
|
|
205
204
|
return _scope;
|
|
206
205
|
}
|
|
207
206
|
|
|
@@ -311,11 +310,11 @@ export function openSelectorMenu(): void {
|
|
|
311
310
|
},
|
|
312
311
|
title: BASE_SELECTOR_LABEL,
|
|
313
312
|
},
|
|
314
|
-
...selector.options.map((option, index) => ({
|
|
313
|
+
...selector.options.map((option, index): MenuRowProjection => ({
|
|
315
314
|
/* What the ● in the old menu said: this element already DECLARES this rule. Where you are is
|
|
316
315
|
stated once, by the trigger's own label — a row that carried both facts would be two
|
|
317
316
|
answers on one line. */
|
|
318
|
-
checked:
|
|
317
|
+
checked: selector.declared.has(option) ? "true" : "false",
|
|
319
318
|
destructive: false,
|
|
320
319
|
disabled: false,
|
|
321
320
|
dividerAbove: index === 0,
|
package/src/surfaces/welcome.ts
CHANGED
|
@@ -24,16 +24,15 @@ import { runOfferedAction } from "../account/action-flow";
|
|
|
24
24
|
import { platformSupportsAddRepo } from "../new-project/add-repo-modal";
|
|
25
25
|
import { getProjectList } from "../project-list";
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
|
-
import { now } from "../services/clock";
|
|
27
|
+
import { MINUTE, now } from "../services/clock";
|
|
28
28
|
import { clearRecentProjects, getRecentProjects, removeRecentProject } from "../recent-projects";
|
|
29
29
|
import { platformSupportsClone } from "../panels/git-panel";
|
|
30
30
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
31
31
|
import welcomeDoc from "./welcome.json";
|
|
32
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
33
32
|
import type { SurfaceHandle } from "../ui/surface";
|
|
34
33
|
import type { AccountNotice, OfferedAction } from "../types";
|
|
35
34
|
|
|
36
|
-
registerSurface("welcome", welcomeDoc
|
|
35
|
+
registerSurface("welcome", welcomeDoc);
|
|
37
36
|
|
|
38
37
|
interface WelcomeCtx {
|
|
39
38
|
openProject: () => void;
|
|
@@ -122,7 +121,6 @@ export function recentLocations(
|
|
|
122
121
|
return labels;
|
|
123
122
|
}
|
|
124
123
|
|
|
125
|
-
const MINUTE = 60_000;
|
|
126
124
|
const HOUR = 60 * MINUTE;
|
|
127
125
|
const DAY = 24 * HOUR;
|
|
128
126
|
|
|
@@ -195,7 +193,7 @@ interface CatalogueRow {
|
|
|
195
193
|
detail: string;
|
|
196
194
|
}
|
|
197
195
|
|
|
198
|
-
interface WelcomeScope
|
|
196
|
+
interface WelcomeScope {
|
|
199
197
|
actions: StartAction[];
|
|
200
198
|
installNeeded: boolean;
|
|
201
199
|
installUrl: string;
|
|
@@ -292,7 +290,7 @@ function noticeAction(key: string): OfferedAction | null {
|
|
|
292
290
|
|
|
293
291
|
/** The reactive scope the surface reads, made once. */
|
|
294
292
|
function state(): WelcomeScope {
|
|
295
|
-
_state ??= reactive({
|
|
293
|
+
_state ??= reactive<WelcomeScope>({
|
|
296
294
|
actions: [],
|
|
297
295
|
catalogue: [],
|
|
298
296
|
clear: () => {
|
|
@@ -342,7 +340,7 @@ function state(): WelcomeScope {
|
|
|
342
340
|
}
|
|
343
341
|
}
|
|
344
342
|
},
|
|
345
|
-
})
|
|
343
|
+
});
|
|
346
344
|
return _state;
|
|
347
345
|
}
|
|
348
346
|
|
package/src/tabs/patch-ops.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
// oxlint-disable-next-line unicorn/prefer-export-from -- JxDocOpPair is also used locally (TransactionRecord)
|
|
9
9
|
import type { JxDocOpPair } from "@jxsuite/schema/doc-ops";
|
|
10
|
+
import type { JxDocumentValue, JxMutableNode } from "@jxsuite/schema/types";
|
|
10
11
|
import type { JxPath } from "../state";
|
|
11
12
|
import type { Tab } from "./tab.js";
|
|
12
13
|
|
|
@@ -48,8 +49,8 @@ export type { JxDocOpPair };
|
|
|
48
49
|
*/
|
|
49
50
|
export interface JxFmOp {
|
|
50
51
|
field: string;
|
|
51
|
-
before?:
|
|
52
|
-
after?:
|
|
52
|
+
before?: JxDocumentValue | undefined;
|
|
53
|
+
after?: JxDocumentValue | undefined;
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
/** Everything recorded during one transaction. */
|
|
@@ -82,7 +83,7 @@ export interface PatchConsumer {
|
|
|
82
83
|
* was consumed by whichever pane's effect ran first, so the second full-rendered every patched
|
|
83
84
|
* edit while the skip counter reported one skip.
|
|
84
85
|
*/
|
|
85
|
-
markConsumed: (docRef:
|
|
86
|
+
markConsumed: (docRef: JxMutableNode, tab: Tab) => void;
|
|
86
87
|
/**
|
|
87
88
|
* Apply the batch to all ready canvas panels. Throws on any failure (caller escalates). `record`
|
|
88
89
|
* carries the value-carrying `docOps` the iframe consumer posts across the frame boundary; the
|