@jxsuite/studio 6.1.1 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/chunks/2020-5wtzce5g.js +4 -0
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-5tphg7xe.js +4 -0
- package/dist/chunks/add-new-flow-psym14sn.js +4 -0
- package/dist/chunks/cf-account-picker-haqazq5r.js +4 -0
- package/dist/chunks/cf-settings-h2wrh6hq.js +4 -0
- package/dist/chunks/color-area-6rbra5dy.js +4 -0
- package/dist/chunks/color-field-gy56c94g.js +4 -0
- package/dist/chunks/color-m7r1vk54.js +4 -0
- package/dist/chunks/color-slider-sqqdyf6c.js +4 -0
- package/dist/chunks/combobox-72h32ejk.js +4 -0
- package/dist/chunks/components-r22xca09.js +4 -0
- package/dist/chunks/content-source-mmppmcyg.js +4 -0
- package/dist/chunks/convert-to-repeater-he70fc2b.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-ccd9jwsa.js +4 -0
- package/dist/chunks/entry-commands-6qxz9e8p.js +4 -0
- package/dist/chunks/extension-sections-0egb88dm.js +4 -0
- package/dist/chunks/file-ops-qnab36ek.js +4 -0
- package/dist/chunks/files-rcn56qvm.js +4 -0
- package/dist/chunks/format-host-yxz0kjjs.js +4 -0
- package/dist/chunks/fs-events-d1qxq4z4.js +4 -0
- package/dist/chunks/grid-open-4z1g062t.js +4 -0
- package/dist/chunks/grid-view-qg1b5eqx.js +51 -0
- package/dist/chunks/icons-63bjtbs7.js +4 -0
- package/dist/chunks/iframe-entry-2zggzajv.js +5 -0
- package/dist/chunks/iframe-entry-76j8vwwx.js +5 -0
- package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
- package/dist/chunks/iframe-entry-pkgmcgp0.js +5 -0
- package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
- package/dist/chunks/{index-2veqmnhr.js → index-32eqzv1k.js} +3 -3
- package/dist/chunks/index-f0jn7nnp.js +4 -0
- package/dist/chunks/{javascript-8nbvs12s.js → javascript-pjp734q4.js} +3 -3
- package/dist/chunks/jsonMode-njkvsa02.js +13 -0
- package/dist/chunks/jx-validate-ttasrbh7.js +4 -0
- package/dist/chunks/layers-bgyr11tr.js +4 -0
- package/dist/chunks/layers-panel-7ez66zeq.js +4 -0
- package/dist/chunks/listbox-c421cf8c.js +4 -0
- package/dist/chunks/lit-html-v9gh687x.js +4 -0
- package/dist/chunks/media-library-sq468wts.js +4 -0
- package/dist/chunks/media-picker-shfe59pt.js +4 -0
- package/dist/chunks/menu-bdpzbfvs.js +4 -0
- package/dist/chunks/monaco-binding-vq1hgnn0.js +4 -0
- package/dist/chunks/monaco-buffer-3afgwvbp.js +4 -0
- package/dist/chunks/monaco-setup-xrd2cbkp.js +4 -0
- package/dist/chunks/notify-kzrjr3fv.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-v77xtwv7.js +4 -0
- package/dist/chunks/platform-7v4rtd7m.js +4 -0
- package/dist/chunks/popover-b89sfej7.js +4 -0
- package/dist/chunks/publish-panel-2z9gw8ee.js +4 -0
- package/dist/chunks/publish-quick-qx2455cj.js +4 -0
- package/dist/chunks/publish-workspace-wrc1dgwx.js +4 -0
- package/dist/chunks/quick-search-n0t0eqxb.js +4 -0
- package/dist/chunks/references-9547rg5s.js +4 -0
- package/dist/chunks/right-panel-wsgnr9pn.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/source-control-kwktr9y6.js +4 -0
- package/dist/chunks/split-c9zfdgxf.js +4 -0
- package/dist/chunks/studio-03ct6yfv.js +9 -0
- package/dist/chunks/studio-07rcfje3.js +5 -0
- package/dist/chunks/studio-3e54qh39.js +7 -0
- package/dist/chunks/studio-3exxhz5g.js +5 -0
- package/dist/chunks/studio-3q40e3rj.js +5 -0
- package/dist/chunks/studio-3qeh9t0h.js +6 -0
- package/dist/chunks/studio-3qqjeep5.js +6 -0
- package/dist/chunks/studio-43sd2mam.js +4 -0
- package/dist/chunks/studio-4hp8pkyt.js +5 -0
- package/dist/chunks/studio-58xg6j2q.js +9 -0
- package/dist/chunks/studio-5g0rprdt.js +7 -0
- package/dist/chunks/studio-6m380wp7.js +5 -0
- package/dist/chunks/studio-80jyh1xh.js +4 -0
- package/dist/chunks/studio-83mk4bgg.js +9 -0
- package/dist/chunks/{studio-kggey1jt.js → studio-881z1xrx.js} +4 -4
- package/dist/chunks/studio-8m0y2qe7.js +5 -0
- package/dist/chunks/studio-8tr6cfrc.js +5 -0
- package/dist/chunks/studio-8vcvfs7r.js +6 -0
- package/dist/chunks/studio-9tmebf0s.js +5 -0
- package/dist/chunks/studio-a2bvaptz.js +5 -0
- package/dist/chunks/studio-b7y5mr30.js +5 -0
- package/dist/chunks/studio-bavb31r0.js +5 -0
- package/dist/chunks/studio-bbe4c90a.js +5 -0
- package/dist/chunks/studio-c05wdnt3.js +5 -0
- package/dist/chunks/studio-ccv2svc6.js +5 -0
- package/dist/chunks/studio-d5grtb9e.js +16 -0
- package/dist/chunks/studio-df0baea9.js +5 -0
- package/dist/chunks/studio-dgk4dqtx.js +7 -0
- package/dist/chunks/studio-e1g64q43.js +5 -0
- package/dist/chunks/studio-ed1hp6zf.js +6 -0
- package/dist/chunks/studio-ed3xx40h.js +7 -0
- package/dist/chunks/studio-f14e1zdj.js +5 -0
- package/dist/chunks/studio-fbhxxc5f.js +5 -0
- package/dist/chunks/studio-fyh0jc96.js +5 -0
- package/dist/chunks/studio-gcxk20n7.js +5 -0
- package/dist/chunks/studio-jaaz8ce9.js +5 -0
- package/dist/chunks/{studio-8grwxtqk.js → studio-jcnsdaep.js} +4 -4
- package/dist/chunks/studio-jsgf2q5k.js +7 -0
- package/dist/chunks/{studio-1q1sh2ax.js → studio-k3xxbagr.js} +3 -3
- package/dist/chunks/studio-k7evxqh4.js +5 -0
- package/dist/chunks/studio-kt3pjkwd.js +5 -0
- package/dist/chunks/studio-m8g16bgz.js +5 -0
- package/dist/chunks/studio-mn0476ag.js +5 -0
- package/dist/chunks/studio-mx1smyq0.js +5 -0
- package/dist/chunks/studio-n0c5h6mf.js +5 -0
- package/dist/chunks/{studio-rv11kfwa.js → studio-nh6d342n.js} +7 -7
- package/dist/chunks/studio-nqxqf8p2.js +4 -0
- package/dist/chunks/studio-p4nrkvqr.js +5 -0
- package/dist/chunks/{studio-h46vtzk8.js → studio-pbxa5fpc.js} +4 -4
- package/dist/chunks/studio-pgmvdv7z.js +7 -0
- package/dist/chunks/studio-ph84avkf.js +5 -0
- package/dist/chunks/{studio-wszjyh0j.js → studio-q0mvbaq6.js} +4 -4
- package/dist/chunks/studio-q0tccd43.js +5 -0
- package/dist/chunks/studio-q7rtx6zq.js +14 -0
- package/dist/chunks/{studio-pre0skq6.js → studio-qgh13jtz.js} +4 -4
- package/dist/chunks/studio-qmn1xc24.js +5 -0
- package/dist/chunks/studio-qwdqwkj0.js +5 -0
- package/dist/chunks/{studio-t6b6qe31.js → studio-r5qy30vx.js} +4 -4
- package/dist/chunks/studio-rj9eamf8.js +5 -0
- package/dist/chunks/studio-rptgsk96.js +5 -0
- package/dist/chunks/studio-rthyg42z.js +928 -0
- package/dist/chunks/studio-s19tp1xr.js +5 -0
- package/dist/chunks/studio-s32578pn.js +5 -0
- package/dist/chunks/studio-svb7yyve.js +5 -0
- package/dist/chunks/studio-syreb644.js +5 -0
- package/dist/chunks/studio-tf9jryb1.js +10 -0
- package/dist/chunks/studio-tfkznv39.js +5 -0
- package/dist/chunks/studio-tft6r105.js +5 -0
- package/dist/chunks/studio-txf2kysx.js +5 -0
- package/dist/chunks/studio-v8867ddv.js +12 -0
- package/dist/chunks/studio-vxq7fcvv.js +5 -0
- package/dist/chunks/studio-w4rz9hdk.js +5 -0
- package/dist/chunks/studio-wbcjbhy1.js +9 -0
- package/dist/chunks/studio-wc649wss.js +5 -0
- package/dist/chunks/studio-wys23mxz.js +5 -0
- package/dist/chunks/studio-x1x167jh.js +5 -0
- package/dist/chunks/studio-x9hsze61.js +5 -0
- package/dist/chunks/studio-y0n7yxea.js +9 -0
- package/dist/chunks/studio-y3ahhdpx.js +5 -0
- package/dist/chunks/studio-z97c48fk.js +5 -0
- package/dist/chunks/studio-zat62m0c.js +5 -0
- package/dist/chunks/studio-zcd2e7yz.js +5 -0
- package/dist/chunks/studio-zz9qe3rw.js +64 -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-1gv0h53h.js +4 -0
- package/dist/chunks/toast-host-1yg5ar8d.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-yypz28gq.js +4 -0
- package/dist/chunks/tree-9xa4hm7n.js +4 -0
- package/dist/chunks/tsMode-epyfz1hv.js +14 -0
- package/dist/chunks/workspace-dz7nxfhv.js +4 -0
- package/dist/chunks/workspace-home-xsd7hkjw.js +4 -0
- package/dist/chunks/ws-client-bv552sfx.js +4 -0
- package/dist/iframe-entry.js +20 -16
- package/dist/manifest.json +77 -63
- package/dist/studio.js +106 -107
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +17 -16
- 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/component-examples.ts +272 -0
- package/src/browse/library-commands.ts +64 -104
- package/src/browse/library-layouts.ts +270 -53
- package/src/browse/library-model.ts +194 -134
- package/src/browse/library-pane.ts +748 -440
- package/src/browse/library-preview.ts +161 -26
- package/src/browse/library-source.ts +308 -41
- package/src/browse/preview-root.ts +78 -0
- package/src/browse/preview-style.ts +155 -0
- package/src/canvas/asset-refs.ts +40 -10
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +260 -77
- package/src/canvas/canvas-origin.ts +37 -12
- package/src/canvas/canvas-page-context.ts +112 -0
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +175 -148
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +147 -61
- 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 +120 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +104 -75
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +269 -158
- 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-keys.ts +11 -0
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +25 -21
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +36 -21
- package/src/canvas/iframe-render.ts +84 -35
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +10 -3
- package/src/canvas/npm-modules.ts +22 -0
- 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/preview-navigate.ts +16 -0
- package/src/canvas/repeater-sources.ts +200 -0
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +7 -2
- package/src/canvas/surface-registry.ts +27 -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/app-commands.ts +16 -6
- package/src/commands/budget.ts +13 -11
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +55 -28
- package/src/commands/defaults.ts +69 -45
- package/src/commands/keymap.ts +56 -43
- package/src/commands/levels.ts +14 -8
- package/src/commands/live-context.ts +9 -7
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +22 -11
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +11 -9
- package/src/content/collection-pages.ts +412 -0
- package/src/content/content-collections.ts +270 -0
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +54 -62
- package/src/content/entry-editor.ts +137 -32
- package/src/content/entry-fields.ts +25 -8
- package/src/content/entry-inspector.ts +225 -0
- package/src/content/entry-model.ts +38 -15
- package/src/content/entry-open.ts +80 -0
- package/src/content/entry-summaries.ts +440 -0
- package/src/content/file-record-ids.ts +80 -0
- package/src/content/file-records.ts +125 -0
- package/src/content/page-summaries.ts +129 -0
- package/src/content/record-entry.ts +201 -0
- package/src/content/writing-banner.ts +177 -0
- package/src/create/add-new-commands.ts +185 -0
- package/src/create/add-new-flow.ts +1116 -0
- package/src/create/add-new.ts +1014 -0
- package/src/create/element-name.ts +121 -0
- 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 +78 -48
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +29 -22
- package/src/editor/inline-edit-apply.ts +79 -17
- package/src/editor/inline-edit.ts +76 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-component.ts +91 -0
- package/src/editor/insert-zone-action.ts +14 -5
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +76 -42
- package/src/editor/slash-menu.ts +52 -14
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +89 -20
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +92 -41
- package/src/files/files.ts +248 -239
- package/src/files/fs-events.ts +18 -7
- package/src/files/media-meta.ts +97 -2
- package/src/files/media-paths.ts +3 -0
- package/src/files/media-types.ts +55 -0
- package/src/files/media-upload.ts +209 -52
- package/src/files/new-file-name.ts +156 -0
- package/src/files/serialize-document.ts +15 -5
- 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 +91 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +21 -11
- package/src/github/github-publish.ts +28 -23
- 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 +25 -23
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -33
- package/src/grid/grid-panel.ts +65 -6
- package/src/grid/grid-reveal.ts +34 -0
- package/src/grid/grid-source.ts +9 -31
- package/src/grid/grid-view.ts +45 -23
- 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 +100 -31
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +61 -34
- package/src/hosting/document.ts +2 -2
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +3 -3
- package/src/media/media-commands.ts +181 -0
- package/src/media/media-library-model.ts +232 -0
- package/src/media/media-library.ts +1283 -0
- package/src/media/media-pane.ts +51 -20
- 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 +38 -14
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-markdown.ts +8 -8
- 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 +57 -46
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +36 -26
- package/src/panels/chat-panel.ts +6 -6
- package/src/panels/collections-panel.ts +306 -0
- package/src/panels/component-preview.ts +35 -13
- package/src/panels/data-explorer.ts +63 -26
- package/src/panels/data-grid.ts +18 -11
- package/src/panels/dnd.ts +115 -138
- package/src/panels/editors.ts +52 -21
- package/src/panels/elements-panel.ts +19 -5
- package/src/panels/empty-state.ts +2 -2
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +78 -54
- package/src/panels/frontmatter-fields.ts +33 -28
- package/src/panels/git-diff-open.ts +10 -6
- package/src/panels/head-panel.ts +488 -202
- package/src/panels/i18n-panel.ts +20 -12
- package/src/panels/imports-panel.ts +25 -47
- package/src/panels/jump-bar.ts +75 -31
- package/src/panels/layers-panel.ts +130 -101
- package/src/panels/left-panel.ts +25 -11
- package/src/panels/navigator-panels.ts +23 -11
- package/src/panels/pane-context.ts +140 -49
- package/src/panels/pane-grid.ts +55 -26
- package/src/panels/panel-registry.ts +36 -46
- package/src/panels/properties-panel.ts +182 -124
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +201 -45
- package/src/panels/seo-modal.ts +54 -125
- package/src/panels/settings-menu.ts +63 -61
- package/src/panels/settings-pane.ts +268 -162
- package/src/panels/signals-panel.ts +156 -135
- package/src/panels/site-model.ts +367 -0
- package/src/panels/site-panel.ts +638 -0
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +253 -206
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +195 -60
- package/src/panels/stylebook-layers-panel.ts +48 -89
- package/src/panels/stylebook-panel.ts +60 -27
- package/src/panels/styles-panel.ts +327 -0
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +143 -49
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +59 -31
- package/src/platforms/cloud.ts +373 -176
- package/src/platforms/default-platform.ts +14 -8
- package/src/platforms/devserver.ts +180 -142
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +20 -9
- package/src/publish/pages-service.ts +66 -27
- package/src/publish/publish-changes.ts +491 -0
- package/src/publish/publish-commands.ts +88 -22
- package/src/publish/publish-ids.ts +49 -0
- package/src/publish/publish-panel.ts +10 -6
- package/src/publish/publish-quick.ts +148 -0
- package/src/publish/publish-workspace.ts +926 -0
- package/src/publish/source-control.ts +907 -0
- 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 +74 -51
- package/src/services/cem-export.ts +149 -58
- package/src/services/cf-settings.ts +4 -4
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/connection.ts +2 -2
- 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 +20 -14
- 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 +29 -9
- package/src/services/settings/definitions.ts +25 -14
- 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 +128 -70
- package/src/settings/css-vars-editor.ts +119 -32
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/developer-panels.ts +43 -0
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +42 -14
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +101 -28
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +17 -7
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +28 -11
- package/src/settings/schema-field-ui.ts +12 -1
- package/src/settings/section-registry.ts +116 -11
- package/src/settings/settings-dialog.ts +192 -0
- package/src/settings/settings-document.ts +186 -166
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +536 -477
- package/src/site-context.ts +101 -32
- package/src/state.ts +68 -57
- package/src/store.ts +54 -34
- package/src/studio.ts +219 -116
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +40 -7
- package/src/style/stylebook-specimens.ts +89 -0
- package/src/style/stylebook-target.ts +26 -0
- package/src/style/tag-inheritance.ts +105 -0
- package/src/style/token-ref.ts +5 -4
- package/src/style/variables-focus.ts +61 -0
- package/src/style/variables-view.ts +235 -0
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-new.json +1482 -0
- package/src/surfaces/add-new.ts +325 -0
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +33 -38
- 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.json +4 -3
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.json +1 -1
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.json +30 -19
- package/src/surfaces/canvas-stage.ts +17 -16
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/collections-panel.json +615 -0
- package/src/surfaces/collections-panel.ts +168 -0
- package/src/surfaces/commandbar.json +241 -96
- package/src/surfaces/commandbar.ts +145 -105
- 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/empty-state.json +1 -1
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.json +136 -0
- package/src/surfaces/entry-editor.ts +35 -11
- package/src/surfaces/entry-inspector.json +371 -0
- package/src/surfaces/entry-inspector.ts +143 -0
- 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/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.json +162 -14
- package/src/surfaces/inspector-dock.ts +59 -31
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.json +670 -437
- package/src/surfaces/library-pane.ts +111 -77
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.json +62 -6
- package/src/surfaces/media-browser.ts +26 -11
- package/src/surfaces/media-field.json +1 -1
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-library.json +1586 -0
- package/src/surfaces/media-library.ts +282 -0
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/media-pick-dialog.json +71 -0
- package/src/surfaces/media-pick-dialog.ts +132 -0
- package/src/surfaces/menu.ts +47 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.json +144 -77
- package/src/surfaces/pane-context.ts +44 -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.json +12 -6
- package/src/surfaces/panel-deploy-checklist.ts +8 -7
- 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.json +72 -2
- package/src/surfaces/panel-page.ts +49 -25
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.json +1 -1
- package/src/surfaces/panel-signals.ts +25 -39
- package/src/surfaces/panel-stylebook-layers.json +71 -204
- package/src/surfaces/panel-stylebook-layers.ts +5 -29
- package/src/surfaces/preferences.json +120 -48
- package/src/surfaces/preferences.ts +29 -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-quick.json +428 -0
- package/src/surfaces/publish-quick.ts +165 -0
- package/src/surfaces/publish-workspace.json +2892 -0
- package/src/surfaces/publish-workspace.ts +391 -0
- package/src/surfaces/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.json +1 -159
- package/src/surfaces/rail.ts +22 -79
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.json +10 -2
- package/src/surfaces/schema-form.ts +17 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.json +1 -1
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.json +5 -5
- package/src/surfaces/settings-contributed.ts +32 -12
- package/src/surfaces/settings-css-vars.json +44 -36
- package/src/surfaces/settings-css-vars.ts +82 -16
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.json +2 -15
- package/src/surfaces/settings-deploy.ts +9 -16
- package/src/surfaces/settings-dialog.json +51 -0
- package/src/surfaces/settings-dialog.ts +169 -0
- 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.json +3 -3
- package/src/surfaces/settings-overview.ts +14 -8
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.json +269 -46
- package/src/surfaces/settings-pane.ts +88 -36
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.json +2 -1
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/site-panel.json +1029 -0
- package/src/surfaces/site-panel.ts +233 -0
- package/src/surfaces/slash-menu.json +63 -21
- package/src/surfaces/slash-menu.ts +42 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +56 -29
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/styles-panel.json +735 -0
- package/src/surfaces/styles-panel.ts +195 -0
- package/src/surfaces/styles-variables.json +149 -0
- package/src/surfaces/styles-variables.ts +145 -0
- package/src/surfaces/tab-strip.json +4 -4
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +6 -8
- package/src/surfaces/writing-banner.json +94 -0
- package/src/surfaces/writing-banner.ts +80 -0
- package/src/tabs/bare-repeaters.ts +101 -0
- 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 +99 -48
- package/src/tabs/transact.ts +98 -53
- package/src/types.ts +53 -43
- 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 +104 -56
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +57 -31
- package/src/ui/media-picker.ts +300 -47
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +14 -12
- package/src/ui/schema-form.ts +372 -97
- 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 +29 -3
- package/src/utils/base64.ts +6 -4
- package/src/utils/edit-display.ts +366 -111
- 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/local-day.ts +18 -0
- 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 +14 -16
- package/src/workspace/session.ts +81 -50
- package/src/workspace/tab-workspace.ts +137 -0
- package/src/workspace/workspace-back.ts +189 -0
- package/src/workspace/workspace-home.ts +133 -0
- package/src/workspace/workspace-ids.ts +129 -0
- package/src/workspace/workspace-switch.ts +372 -0
- package/src/workspace/workspace.ts +165 -47
- package/styles/shell-frame.css +30 -7
- package/styles/shell-frame.json +15 -3
- package/dist/chunks/2020-va2wwra4.js +0 -4
- 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/jsonMode-s8kt9dsj.js +0 -13
- 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-tdcprbqb.js +0 -5
- package/dist/chunks/studio-vrmcjf9g.js +0 -7
- 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-zey7zsdw.js +0 -12
- 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/tsMode-2frah6h1.js +0 -14
- package/dist/chunks/workspace-zt81g1ms.js +0 -4
- package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
- package/src/panels/frontmatter-panel.ts +0 -701
- package/src/panels/git-panel.ts +0 -1120
- package/src/surfaces/doc-header.json +0 -776
- package/src/surfaces/doc-header.ts +0 -231
- package/src/surfaces/git-panel.json +0 -1880
- package/src/surfaces/git-panel.ts +0 -272
|
@@ -1,21 +1,91 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
CemParameter,
|
|
4
|
+
JxElementTagName,
|
|
5
|
+
JxMutableNode,
|
|
6
|
+
JxStateDefinition,
|
|
7
|
+
JxStateObject,
|
|
8
|
+
JsonValue,
|
|
9
|
+
} from "@jxsuite/schema/types";
|
|
3
10
|
import {
|
|
4
11
|
displayTagName,
|
|
5
12
|
isFunctionDef,
|
|
6
13
|
isJsonObject,
|
|
7
14
|
isPrivateStateKey,
|
|
15
|
+
isString,
|
|
8
16
|
} from "@jxsuite/schema/guards";
|
|
9
17
|
|
|
18
|
+
/** A CEM `{ text }` type reference. */
|
|
19
|
+
interface CemTypeText {
|
|
20
|
+
text: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** A CEM class member: a `method` (function entry) or a `field` (signal / type def). */
|
|
24
|
+
interface CemMember {
|
|
25
|
+
kind: "method" | "field";
|
|
26
|
+
name: string;
|
|
27
|
+
type?: CemTypeText;
|
|
28
|
+
default?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
parameters?: CemParameter[];
|
|
31
|
+
attribute?: string;
|
|
32
|
+
reflects?: true;
|
|
33
|
+
deprecated?: string | true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** A CEM attribute linked to a field. */
|
|
37
|
+
interface CemAttribute {
|
|
38
|
+
name: string;
|
|
39
|
+
type?: CemTypeText;
|
|
40
|
+
fieldName: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** A CEM event a method dispatches. */
|
|
44
|
+
interface CemManifestEvent {
|
|
45
|
+
name: string;
|
|
46
|
+
type?: JsonValue;
|
|
47
|
+
description?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** A CEM slot; the default slot has an empty name. */
|
|
51
|
+
interface CemSlot {
|
|
52
|
+
name: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** A CEM CSS custom property. */
|
|
57
|
+
interface CemCssProperty {
|
|
58
|
+
default: string;
|
|
59
|
+
name: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** A CEM CSS part. */
|
|
63
|
+
interface CemCssPart {
|
|
64
|
+
name: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** The single custom-element class declaration the manifest exports. */
|
|
68
|
+
interface CemClassDeclaration {
|
|
69
|
+
kind: "class";
|
|
70
|
+
members: CemMember[];
|
|
71
|
+
name: JxElementTagName;
|
|
72
|
+
tagName: JxElementTagName;
|
|
73
|
+
attributes?: CemAttribute[];
|
|
74
|
+
events?: CemManifestEvent[];
|
|
75
|
+
slots?: CemSlot[];
|
|
76
|
+
cssProperties?: CemCssProperty[];
|
|
77
|
+
cssParts?: CemCssPart[];
|
|
78
|
+
}
|
|
79
|
+
|
|
10
80
|
/** Collect slot elements from the document tree. Whitespace-only names count as unnamed. */
|
|
11
81
|
export function collectSlots(node?: JxMutableNode | null, slots: string[] = []) {
|
|
12
82
|
if (node?.tagName === "slot") {
|
|
13
83
|
const name = node.attributes?.name;
|
|
14
|
-
slots.push(
|
|
84
|
+
slots.push(isString(name) ? name.trim() : "");
|
|
15
85
|
}
|
|
16
86
|
if (Array.isArray(node?.children)) {
|
|
17
87
|
for (const c of node.children) {
|
|
18
|
-
collectSlots(
|
|
88
|
+
collectSlots(isString(c) ? undefined : c, slots);
|
|
19
89
|
}
|
|
20
90
|
}
|
|
21
91
|
return slots;
|
|
@@ -47,7 +117,7 @@ export function validateComponentSlots(doc: JxMutableNode): string | null {
|
|
|
47
117
|
*
|
|
48
118
|
* @param {{ document: JxMutableNode }} S - Studio state
|
|
49
119
|
* @param {{
|
|
50
|
-
* defCategory: (d:
|
|
120
|
+
* defCategory: (d: JxStateDefinition) => string;
|
|
51
121
|
* normParam: (p: string | CemParameter) => CemParameter;
|
|
52
122
|
* collectCssParts: (node: JxMutableNode) => { name: string }[];
|
|
53
123
|
* }} helpers
|
|
@@ -55,7 +125,7 @@ export function validateComponentSlots(doc: JxMutableNode): string | null {
|
|
|
55
125
|
export function exportCemManifest(
|
|
56
126
|
S: { document: JxMutableNode },
|
|
57
127
|
helpers: {
|
|
58
|
-
defCategory: (d:
|
|
128
|
+
defCategory: (d: JxStateDefinition) => string;
|
|
59
129
|
normParam: (p: string | CemParameter) => CemParameter;
|
|
60
130
|
collectCssParts: (node: JxMutableNode) => { name: string }[];
|
|
61
131
|
},
|
|
@@ -68,9 +138,9 @@ export function exportCemManifest(
|
|
|
68
138
|
}
|
|
69
139
|
|
|
70
140
|
const state = doc.state || {};
|
|
71
|
-
const members:
|
|
72
|
-
const attributes:
|
|
73
|
-
const events:
|
|
141
|
+
const members: CemMember[] = [];
|
|
142
|
+
const attributes: CemAttribute[] = [];
|
|
143
|
+
const events: CemManifestEvent[] = [];
|
|
74
144
|
const seenEvents = new Set<string>();
|
|
75
145
|
|
|
76
146
|
for (const [key, d] of Object.entries(state)) {
|
|
@@ -82,56 +152,72 @@ export function exportCemManifest(
|
|
|
82
152
|
|
|
83
153
|
if (cat === "function") {
|
|
84
154
|
if (isFunctionDef(d)) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
155
|
+
const method: CemMember = { kind: "method", name: key };
|
|
156
|
+
if (d.description) {
|
|
157
|
+
method.description = d.description;
|
|
158
|
+
}
|
|
159
|
+
if (d.parameters) {
|
|
160
|
+
method.parameters = d.parameters.map(normParam);
|
|
161
|
+
}
|
|
162
|
+
if (d.deprecated) {
|
|
163
|
+
method.deprecated = isString(d.deprecated) ? d.deprecated : true;
|
|
164
|
+
}
|
|
165
|
+
members.push(method);
|
|
94
166
|
// Collect emits
|
|
95
167
|
for (const ev of d.emits ?? []) {
|
|
96
168
|
if (ev.name && !seenEvents.has(ev.name)) {
|
|
97
169
|
seenEvents.add(ev.name);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
170
|
+
const event: CemManifestEvent = { name: ev.name };
|
|
171
|
+
if (ev.type !== undefined) {
|
|
172
|
+
event.type = ev.type;
|
|
173
|
+
}
|
|
174
|
+
if (ev.description) {
|
|
175
|
+
event.description = ev.description;
|
|
176
|
+
}
|
|
177
|
+
events.push(event);
|
|
103
178
|
}
|
|
104
179
|
}
|
|
105
180
|
} else if (isJsonObject(d)) {
|
|
106
181
|
// Legacy $handler entry — emit a bare method member
|
|
107
182
|
const { description } = d;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
183
|
+
const method: CemMember = { kind: "method", name: key };
|
|
184
|
+
if (isString(description)) {
|
|
185
|
+
method.description = description;
|
|
186
|
+
}
|
|
187
|
+
members.push(method);
|
|
113
188
|
}
|
|
114
189
|
} else if (cat === "state") {
|
|
115
190
|
// Naked primitive values carry no metadata; object defs are signals/type defs.
|
|
191
|
+
/* SAFETY: defCategory classified this entry as "state", which it only does when the entry
|
|
192
|
+
Carries no $expression, $prototype, $handler or $compute, so an object entry here is an
|
|
193
|
+
Expanded signal or schema type def: the JxStateObject shape. */
|
|
116
194
|
const def: JxStateObject | null = isJsonObject(d) ? (d as JxStateObject) : null;
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
195
|
+
const field: CemMember = { kind: "field", name: key };
|
|
196
|
+
if (def?.type) {
|
|
197
|
+
field.type = { text: def.type };
|
|
198
|
+
}
|
|
199
|
+
if (def && def.default !== undefined) {
|
|
200
|
+
field.default = String(def.default);
|
|
201
|
+
}
|
|
202
|
+
if (def?.description) {
|
|
203
|
+
field.description = def.description;
|
|
204
|
+
}
|
|
205
|
+
if (def?.attribute) {
|
|
206
|
+
field.attribute = def.attribute;
|
|
207
|
+
}
|
|
208
|
+
if (def?.reflects) {
|
|
209
|
+
field.reflects = true;
|
|
210
|
+
}
|
|
211
|
+
if (def?.deprecated) {
|
|
212
|
+
field.deprecated = isString(def.deprecated) ? def.deprecated : true;
|
|
213
|
+
}
|
|
214
|
+
members.push(field);
|
|
129
215
|
if (def?.attribute) {
|
|
130
|
-
attributes.push(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
216
|
+
attributes.push(
|
|
217
|
+
def.type
|
|
218
|
+
? { name: def.attribute, type: { text: def.type }, fieldName: key }
|
|
219
|
+
: { name: def.attribute, fieldName: key },
|
|
220
|
+
);
|
|
135
221
|
}
|
|
136
222
|
}
|
|
137
223
|
}
|
|
@@ -139,7 +225,7 @@ export function exportCemManifest(
|
|
|
139
225
|
// Slots
|
|
140
226
|
const slotNames = collectSlots(doc);
|
|
141
227
|
const slots = slotNames.map((name: string) => {
|
|
142
|
-
const slot:
|
|
228
|
+
const slot: CemSlot = { name: name || "" };
|
|
143
229
|
if (!name) {
|
|
144
230
|
slot.description = "Default slot";
|
|
145
231
|
}
|
|
@@ -155,22 +241,27 @@ export function exportCemManifest(
|
|
|
155
241
|
// CSS parts
|
|
156
242
|
const cssParts = collectCssParts(doc).map((p) => ({ name: p.name }));
|
|
157
243
|
|
|
244
|
+
const declaration: CemClassDeclaration = { kind: "class", members, name: tagName, tagName };
|
|
245
|
+
if (attributes.length > 0) {
|
|
246
|
+
declaration.attributes = attributes;
|
|
247
|
+
}
|
|
248
|
+
if (events.length > 0) {
|
|
249
|
+
declaration.events = events;
|
|
250
|
+
}
|
|
251
|
+
if (slots.length > 0) {
|
|
252
|
+
declaration.slots = slots;
|
|
253
|
+
}
|
|
254
|
+
if (cssProperties.length > 0) {
|
|
255
|
+
declaration.cssProperties = cssProperties;
|
|
256
|
+
}
|
|
257
|
+
if (cssParts.length > 0) {
|
|
258
|
+
declaration.cssParts = cssParts;
|
|
259
|
+
}
|
|
260
|
+
|
|
158
261
|
const manifest = {
|
|
159
262
|
modules: [
|
|
160
263
|
{
|
|
161
|
-
declarations: [
|
|
162
|
-
{
|
|
163
|
-
kind: "class",
|
|
164
|
-
members,
|
|
165
|
-
name: tagName,
|
|
166
|
-
tagName,
|
|
167
|
-
...(attributes.length > 0 ? { attributes } : {}),
|
|
168
|
-
...(events.length > 0 ? { events } : {}),
|
|
169
|
-
...(slots.length > 0 ? { slots } : {}),
|
|
170
|
-
...(cssProperties.length > 0 ? { cssProperties } : {}),
|
|
171
|
-
...(cssParts.length > 0 ? { cssParts } : {}),
|
|
172
|
-
},
|
|
173
|
-
],
|
|
264
|
+
declarations: [declaration],
|
|
174
265
|
kind: "javascript-module",
|
|
175
266
|
path: "",
|
|
176
267
|
},
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
/**
|
|
3
3
|
* Cf-settings — the Cloudflare publish connection on platforms without a hosted OAuth broker (dev
|
|
4
|
-
* server, desktop). The API token is stored like the AI key, over `settings/kernel.ts`. It only
|
|
5
|
-
* leaves the machine to the same-origin `/__studio/cf/proxy`, which forwards it as a bearer to
|
|
4
|
+
* server, desktop). The API token is stored like the AI key, over `settings/kernel.ts`. It only
|
|
5
|
+
* ever leaves the machine to the same-origin `/__studio/cf/proxy`, which forwards it as a bearer to
|
|
6
6
|
* api.cloudflare.com (not CORS-enabled, hence the proxy).
|
|
7
7
|
*
|
|
8
|
-
* As with the AI provider, a blank value is a VALUE: {@link clearCfConnection} is the deletion
|
|
9
|
-
* so nothing can revoke a connection by rendering an empty field into a setter.
|
|
8
|
+
* As with the AI provider, a blank value is a VALUE: {@link clearCfConnection} is the deletion
|
|
9
|
+
* path, so nothing can revoke a connection by rendering an empty field into a setter.
|
|
10
10
|
*
|
|
11
11
|
* @license MIT
|
|
12
12
|
*/
|
package/src/services/clock.ts
CHANGED
|
@@ -19,6 +19,11 @@
|
|
|
19
19
|
* value the formatter reads back.
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
+
import { isNumber } from "@jxsuite/schema/guards";
|
|
23
|
+
|
|
24
|
+
/** One minute in milliseconds: the unit the relative-time formatters count up from. */
|
|
25
|
+
export const MINUTE = 60_000;
|
|
26
|
+
|
|
22
27
|
/** Epoch milliseconds the clock is pinned to, or `null` while it follows the real clock. */
|
|
23
28
|
let _pinned: number | null = null;
|
|
24
29
|
|
|
@@ -43,7 +48,7 @@ export function now(): number {
|
|
|
43
48
|
* photograph the wall clock and the capture would be accepted.
|
|
44
49
|
*/
|
|
45
50
|
export function pinClock(at: number | string | Date): number {
|
|
46
|
-
const ms = at instanceof Date ? at.getTime() :
|
|
51
|
+
const ms = at instanceof Date ? at.getTime() : isNumber(at) ? at : Date.parse(at);
|
|
47
52
|
if (!Number.isFinite(ms)) {
|
|
48
53
|
throw new TypeError(`clock: cannot pin to ${JSON.stringify(at)}`);
|
|
49
54
|
}
|
|
@@ -6,7 +6,13 @@ import { projectState } from "../state";
|
|
|
6
6
|
import { getNodeAtPath } from "../store";
|
|
7
7
|
import { loadedMonaco } from "./monaco-lazy";
|
|
8
8
|
import type { JxPath } from "../state";
|
|
9
|
-
import type {
|
|
9
|
+
import type {
|
|
10
|
+
JsonObject,
|
|
11
|
+
JsonValue,
|
|
12
|
+
JxDocumentValue,
|
|
13
|
+
JxFunctionDef,
|
|
14
|
+
JxMutableNode,
|
|
15
|
+
} from "@jxsuite/schema/types";
|
|
10
16
|
import type { editor } from "monaco-editor";
|
|
11
17
|
|
|
12
18
|
export interface OxLintDiagnostic {
|
|
@@ -19,15 +25,13 @@ export interface OxLintDiagnostic {
|
|
|
19
25
|
}
|
|
20
26
|
|
|
21
27
|
/**
|
|
28
|
+
* Run one code-service action. The payload travels to the backend as a JSON body.
|
|
29
|
+
*
|
|
22
30
|
* @param {string} action
|
|
23
|
-
* @param {
|
|
31
|
+
* @param {JsonValue} payload
|
|
24
32
|
*/
|
|
25
|
-
export async function codeService(action: string, payload:
|
|
26
|
-
|
|
27
|
-
if (!platform.codeService) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
return platform.codeService(action, payload);
|
|
33
|
+
export async function codeService(action: string, payload: JsonValue) {
|
|
34
|
+
return getPlatform().codeService(action, payload);
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
/**
|
|
@@ -36,21 +40,17 @@ export async function codeService(action: string, payload: unknown) {
|
|
|
36
40
|
* @param {string} name
|
|
37
41
|
*/
|
|
38
42
|
export async function locateDocument(name: string) {
|
|
39
|
-
|
|
40
|
-
if (!platform.locateFile) {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
return platform.locateFile(name);
|
|
43
|
+
return getPlatform().locateFile(name);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/** Schema returned by a plugin's `$prototype` module (loose superset used across panels). */
|
|
47
47
|
export interface PluginSchema {
|
|
48
48
|
type?: string;
|
|
49
49
|
description?: string;
|
|
50
|
-
properties?:
|
|
50
|
+
properties?: JsonObject;
|
|
51
51
|
required?: string[];
|
|
52
52
|
returns?: { type?: string };
|
|
53
|
-
[key: string]:
|
|
53
|
+
[key: string]: JsonValue | undefined;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
/** Cache of plugin schemas keyed by "$src::$prototype". */
|
|
@@ -81,12 +81,12 @@ export async function fetchPluginSchema(
|
|
|
81
81
|
|
|
82
82
|
try {
|
|
83
83
|
const platform = getPlatform();
|
|
84
|
-
if (!platform.fetchPluginSchema) {
|
|
85
|
-
pluginSchemaCache.set(cacheKey, null);
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
84
|
const base =
|
|
89
85
|
!importedPath && state.documentPath ? `${location.origin}/${state.documentPath}` : undefined;
|
|
86
|
+
/* SAFETY: every platform answers with the plugin module's JSON Schema export, parsed from JSON,
|
|
87
|
+
Or null when it has none; PluginSchema is the all-optional, JSON-open view of that object. A
|
|
88
|
+
Platform without the method throws here, and the catch below caches null exactly as for a
|
|
89
|
+
Failed fetch. */
|
|
90
90
|
const schema = (await platform.fetchPluginSchema(
|
|
91
91
|
src,
|
|
92
92
|
def.$prototype,
|
|
@@ -117,14 +117,14 @@ export function setLintMarkers(
|
|
|
117
117
|
if (!monaco) {
|
|
118
118
|
return;
|
|
119
119
|
}
|
|
120
|
-
const markers = diagnostics
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
120
|
+
const markers = diagnostics.flatMap((d) => {
|
|
121
|
+
const label = d.labels?.[0];
|
|
122
|
+
if (!label) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
const { line, column, length } = label.span;
|
|
126
|
+
return [
|
|
127
|
+
{
|
|
128
128
|
code: d.url ? { target: monaco.Uri.parse(d.url), value: d.code } : d.code,
|
|
129
129
|
endColumn: column + (length || 1),
|
|
130
130
|
endLineNumber: line,
|
|
@@ -134,9 +134,12 @@ export function setLintMarkers(
|
|
|
134
134
|
source: "oxlint",
|
|
135
135
|
startColumn: column,
|
|
136
136
|
startLineNumber: line,
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
},
|
|
138
|
+
];
|
|
139
|
+
});
|
|
140
|
+
/* SAFETY: each marker is an IMarkerData except that `code` (and the object form's `value`) may be
|
|
141
|
+
Undefined when oxlint reports a diagnostic without a rule code; Monaco treats an undefined code
|
|
142
|
+
Exactly like an absent one. */
|
|
140
143
|
monaco.editor.setModelMarkers(model, "oxlint", markers as editor.IMarkerData[]);
|
|
141
144
|
}
|
|
142
145
|
|
|
@@ -149,7 +152,7 @@ export function getFunctionArgs(
|
|
|
149
152
|
document: JxMutableNode | null | undefined,
|
|
150
153
|
): string[] {
|
|
151
154
|
// Read parameters off any object-shaped def (covers legacy entries without $prototype).
|
|
152
|
-
const fromDef = (def:
|
|
155
|
+
const fromDef = (def: JxDocumentValue | undefined): string[] | null => {
|
|
153
156
|
if (!isJsonObject(def)) {
|
|
154
157
|
return null;
|
|
155
158
|
}
|
|
@@ -157,6 +160,9 @@ export function getFunctionArgs(
|
|
|
157
160
|
if (!Array.isArray(params) || params.length === 0) {
|
|
158
161
|
return null;
|
|
159
162
|
}
|
|
163
|
+
/* SAFETY: a def's `parameters` array holds bare names or CEM parameter objects — the form the
|
|
164
|
+
Schema admits for Function, prototype and legacy handler entries alike — which is the
|
|
165
|
+
Element type paramNames reads. */
|
|
160
166
|
return paramNames(params as JxFunctionDef["parameters"]);
|
|
161
167
|
};
|
|
162
168
|
if (editing.type === "def") {
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* does not stay on the Problems list (§16.1's second and third rules: a record is retired when what
|
|
15
15
|
* it names is fixed, and a repeat is not a new row).
|
|
16
16
|
*
|
|
17
|
-
* A platform without `subscribeConnection` — the dev server
|
|
18
|
-
*
|
|
17
|
+
* A platform without `subscribeConnection` — the dev server — installs nothing. There is no
|
|
18
|
+
* connection to lose there, and a notice about one would be a lie.
|
|
19
19
|
*
|
|
20
20
|
* @docs studio/interface/problems-and-progress
|
|
21
21
|
*/
|
|
@@ -12,14 +12,23 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import type { createChatState } from "@jxsuite/ai/chat-state";
|
|
15
|
+
import { CHARS_PER_TOKEN } from "@jxsuite/ai/harness";
|
|
15
16
|
import {
|
|
16
17
|
SEAL_RELOADED,
|
|
17
18
|
repairToolPairs,
|
|
18
19
|
toChatMessages,
|
|
19
20
|
toLiveMessages,
|
|
20
21
|
} from "@jxsuite/ai/messages";
|
|
22
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
21
23
|
import { modelContextWindow } from "./ai-models";
|
|
22
24
|
|
|
25
|
+
/** How many tool messages {@link pruneOrphanToolMessages} dropped, moved and sealed. */
|
|
26
|
+
export interface OrphanToolRepair {
|
|
27
|
+
dropped: number;
|
|
28
|
+
moved: number;
|
|
29
|
+
sealed: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
23
32
|
/** Shape of a single entry returned by `chatState.toMessagesArray()`. */
|
|
24
33
|
interface MessageArrayEntry {
|
|
25
34
|
role: string;
|
|
@@ -31,9 +40,6 @@ interface MessageArrayEntry {
|
|
|
31
40
|
|
|
32
41
|
// ─── Constants ──────────────────────────────────────────────────────────────
|
|
33
42
|
|
|
34
|
-
/** Rough heuristic: average 4 characters per token. */
|
|
35
|
-
const CHARS_PER_TOKEN = 4;
|
|
36
|
-
|
|
37
43
|
/**
|
|
38
44
|
* Approximate context windows (in tokens) per model id, longest-prefix matched. Used to derive a
|
|
39
45
|
* model-aware budget instead of a flat cap (specs/ai.md §2.1). Conservative fallback for unknown
|
|
@@ -109,7 +115,7 @@ const MIN_USER_TURNS = 3;
|
|
|
109
115
|
* @returns {number}
|
|
110
116
|
*/
|
|
111
117
|
function estimateTokens(input: string | MessageArrayEntry[]): number {
|
|
112
|
-
if (
|
|
118
|
+
if (isString(input)) {
|
|
113
119
|
return Math.ceil(input.length / CHARS_PER_TOKEN);
|
|
114
120
|
}
|
|
115
121
|
let total = 0;
|
|
@@ -174,7 +180,7 @@ function contextTokens(
|
|
|
174
180
|
return reused;
|
|
175
181
|
}
|
|
176
182
|
}
|
|
177
|
-
return systemTokens + estimateTokens(chatState.toMessagesArray()
|
|
183
|
+
return systemTokens + estimateTokens(chatState.toMessagesArray());
|
|
178
184
|
}
|
|
179
185
|
|
|
180
186
|
/**
|
|
@@ -316,11 +322,9 @@ export const UNANSWERED_TOOL_RESULT = JSON.stringify({ success: false, error: SE
|
|
|
316
322
|
* @param {ReturnType<typeof createChatState>} chatState
|
|
317
323
|
* @returns {{ dropped: number; moved: number; sealed: number }}
|
|
318
324
|
*/
|
|
319
|
-
export function pruneOrphanToolMessages(
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
sealed: number;
|
|
323
|
-
} {
|
|
325
|
+
export function pruneOrphanToolMessages(
|
|
326
|
+
chatState: ReturnType<typeof createChatState>,
|
|
327
|
+
): OrphanToolRepair {
|
|
324
328
|
const live = chatState.messages;
|
|
325
329
|
const neutral = toChatMessages(live);
|
|
326
330
|
const { messages, sealed, dropped, moved } = repairToolPairs(neutral);
|
|
@@ -7,12 +7,15 @@
|
|
|
7
7
|
* resolves to the registered format names instead of a project.json key.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import { isNonNullObject, isNumber, isString } from "@jxsuite/schema/guards";
|
|
11
|
+
import type { JsonObject, JsonValue, ProjectConfig } from "@jxsuite/schema/types";
|
|
12
|
+
|
|
10
13
|
/** Options for {@link resolveContextPointer}. */
|
|
11
14
|
export interface ResolveContextOptions {
|
|
12
15
|
/** The project configuration object the pointer walks over. */
|
|
13
|
-
projectConfig:
|
|
16
|
+
projectConfig: ProjectConfig;
|
|
14
17
|
/** Scope record supplying `{@param}` substitutions (e.g. the enclosing form value). */
|
|
15
|
-
scope?:
|
|
18
|
+
scope?: JsonObject | undefined;
|
|
16
19
|
/** Registered formats backing the `$formats` virtual root. */
|
|
17
20
|
formats?: { name: string }[] | undefined;
|
|
18
21
|
}
|
|
@@ -30,9 +33,13 @@ const PARAM_SEGMENT = /^\{@(\w+)\}$/;
|
|
|
30
33
|
*
|
|
31
34
|
* @param {string} pointer
|
|
32
35
|
* @param {ResolveContextOptions} opts
|
|
33
|
-
* @returns {
|
|
36
|
+
* @returns {JsonValue | undefined} The resolved value, or `undefined` when the pointer does not
|
|
37
|
+
* resolve.
|
|
34
38
|
*/
|
|
35
|
-
export function resolveContextPointer(
|
|
39
|
+
export function resolveContextPointer(
|
|
40
|
+
pointer: string,
|
|
41
|
+
opts: ResolveContextOptions,
|
|
42
|
+
): JsonValue | undefined {
|
|
36
43
|
if (!pointer.startsWith("#/$context/")) {
|
|
37
44
|
return undefined;
|
|
38
45
|
}
|
|
@@ -42,7 +49,7 @@ export function resolveContextPointer(pointer: string, opts: ResolveContextOptio
|
|
|
42
49
|
const match = raw.match(PARAM_SEGMENT);
|
|
43
50
|
if (match) {
|
|
44
51
|
const value = opts.scope?.[match[1]!];
|
|
45
|
-
if (
|
|
52
|
+
if (!isString(value) && !isNumber(value)) {
|
|
46
53
|
return undefined;
|
|
47
54
|
}
|
|
48
55
|
const substituted = String(value);
|
|
@@ -62,12 +69,17 @@ export function resolveContextPointer(pointer: string, opts: ResolveContextOptio
|
|
|
62
69
|
return (opts.formats ?? []).map((format) => format.name);
|
|
63
70
|
}
|
|
64
71
|
|
|
65
|
-
|
|
72
|
+
/* SAFETY: the project config is parsed project.json, so every value under it is JSON;
|
|
73
|
+
ProjectConfig is the typed reading of that same object. */
|
|
74
|
+
let node: JsonValue | undefined = opts.projectConfig as JsonObject;
|
|
66
75
|
for (const segment of segments) {
|
|
67
|
-
if (node
|
|
76
|
+
if (!isNonNullObject(node)) {
|
|
68
77
|
return undefined;
|
|
69
78
|
}
|
|
70
|
-
|
|
79
|
+
/* SAFETY: node is a JSON object or array, and a pointer segment reads an array by its own
|
|
80
|
+
Index (and `length`) keys exactly as it reads an object's members, so the object view of
|
|
81
|
+
an array addresses the same values. */
|
|
82
|
+
node = (node as JsonObject)[segment];
|
|
71
83
|
}
|
|
72
84
|
return node;
|
|
73
85
|
}
|