@jxsuite/studio 10.4.0 → 10.6.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/data/locales/en/elements.json +434 -0
- package/data/webdata.json +116 -139
- package/dist/chunks/2020-rqm7qrje.js +4 -0
- package/dist/chunks/adapter-cyy8vbcx.js +4 -0
- package/dist/chunks/add-new-flow-8cgtejv2.js +4 -0
- package/dist/chunks/{cf-account-picker-xb8vvt2h.js → cf-account-picker-v3qd2dhw.js} +3 -3
- package/dist/chunks/cf-settings-1fnw874z.js +4 -0
- package/dist/chunks/{color-area-h8dbasp1.js → color-area-frd9y9q6.js} +2 -2
- package/dist/chunks/color-field-rebpbe33.js +4 -0
- package/dist/chunks/{color-slider-nz2mrzky.js → color-slider-6bzmk3s7.js} +2 -2
- package/dist/chunks/color-t2bnnj8y.js +4 -0
- package/dist/chunks/{combobox-6hs00996.js → combobox-c49x7gf1.js} +3 -3
- package/dist/chunks/components-y8yhdd7d.js +4 -0
- package/dist/chunks/content-source-9e7qvmsf.js +4 -0
- package/dist/chunks/convert-to-repeater-pd2w4z21.js +4 -0
- package/dist/chunks/editor-mb9jzdrw.js +4 -0
- package/dist/chunks/entry-commands-at0wnx3f.js +4 -0
- package/dist/chunks/extension-sections-4z9qq0gh.js +4 -0
- package/dist/chunks/file-ops-dtdvjmza.js +4 -0
- package/dist/chunks/files-8pf70854.js +4 -0
- package/dist/chunks/format-host-fd3m2y2a.js +4 -0
- package/dist/chunks/fs-events-hrk29vcv.js +4 -0
- package/dist/chunks/grid-open-bh74v82z.js +4 -0
- package/dist/chunks/{grid-view-2f03wcgw.js → grid-view-a51mgzmq.js} +17 -17
- package/dist/chunks/{icons-gb967qc8.js → icons-qp8fn1k8.js} +2 -2
- package/dist/chunks/{iframe-entry-btck0e9s.js → iframe-entry-mpwe5pwk.js} +4 -4
- package/dist/chunks/{iframe-entry-2x9bn5ng.js → iframe-entry-msd43x9h.js} +4 -4
- package/dist/chunks/iframe-entry-rt8jz5t8.js +5 -0
- package/dist/chunks/{iframe-entry-b5qgggyp.js → iframe-entry-v40cr813.js} +4 -4
- package/dist/chunks/iframe-host-q0s0wwy3.js +4 -0
- package/dist/chunks/{image-bake-4afr4y6a.js → image-bake-q9ajdjsj.js} +3 -3
- package/dist/chunks/{image-editor-x7t8jbjn.js → image-editor-ke9std9b.js} +3 -3
- package/dist/chunks/index-57ang7ma.js +4 -0
- package/dist/chunks/index-eytr7av4.js +17 -0
- package/dist/chunks/{index-yjrfeks8.js → index-x495reff.js} +3 -3
- package/dist/chunks/{javascript-hy2mws8v.js → javascript-qe34bvaz.js} +3 -3
- package/dist/chunks/jsonMode-m8rseh31.js +13 -0
- package/dist/chunks/jx-validate-bbd1mary.js +4 -0
- package/dist/chunks/layers-panel-wcjtdqsa.js +4 -0
- package/dist/chunks/layers-yscpys6q.js +4 -0
- package/dist/chunks/{listbox-7gka1h86.js → listbox-tktzq5xj.js} +2 -2
- package/dist/chunks/lit-html-qm5wbhqz.js +4 -0
- package/dist/chunks/media-library-2hfff88g.js +4 -0
- package/dist/chunks/media-open-4pb05cne.js +4 -0
- package/dist/chunks/media-picker-bzktmmwr.js +4 -0
- package/dist/chunks/menu-xc3cbgsd.js +4 -0
- package/dist/chunks/{monaco-binding-a51py33c.js → monaco-binding-7t38arh9.js} +3 -3
- package/dist/chunks/monaco-buffer-3vz94c9f.js +4 -0
- package/dist/chunks/monaco-setup-fstdew02.js +4 -0
- package/dist/chunks/notify-gbdcckrh.js +4 -0
- package/dist/chunks/parse-fpdzgk4c.js +4 -0
- package/dist/chunks/platform-9g72gdqr.js +4 -0
- package/dist/chunks/popover-cnmsav6b.js +4 -0
- package/dist/chunks/publish-panel-91x1cb5d.js +4 -0
- package/dist/chunks/publish-quick-e2dmf7eg.js +4 -0
- package/dist/chunks/publish-workspace-1x8mnzrj.js +4 -0
- package/dist/chunks/quick-search-2m4y6p1x.js +4 -0
- package/dist/chunks/references-yg1g9rwx.js +4 -0
- package/dist/chunks/right-panel-7mfyhzrk.js +4 -0
- package/dist/chunks/source-control-rrc4jgp5.js +4 -0
- package/dist/chunks/{split-m5rwn31z.js → split-d15yencd.js} +2 -2
- package/dist/chunks/studio-0jhhznxy.js +9 -0
- package/dist/chunks/studio-0nb57pjg.js +7 -0
- package/dist/chunks/{studio-s24mhq0z.js → studio-0wa4wv4s.js} +4 -4
- package/dist/chunks/studio-0z8kp4xk.js +5 -0
- package/dist/chunks/{studio-g0hxtcga.js → studio-18gc5t3v.js} +4 -4
- package/dist/chunks/{studio-4fnb5648.js → studio-1b79rpcb.js} +4 -4
- package/dist/chunks/studio-211q5j7m.js +4 -0
- package/dist/chunks/studio-213pyfxh.js +16 -0
- package/dist/chunks/studio-2b1smjvp.js +5 -0
- package/dist/chunks/{studio-nwf0c32p.js → studio-2v6tc9jp.js} +4 -4
- package/dist/chunks/studio-30j0wz99.js +5 -0
- package/dist/chunks/studio-3kmqhwtt.js +5 -0
- package/dist/chunks/studio-44drsmhw.js +5 -0
- package/dist/chunks/{studio-2pk7kc7z.js → studio-495b6f2r.js} +4 -4
- package/dist/chunks/{studio-jma2q8r9.js → studio-4gthb2fd.js} +4 -4
- package/dist/chunks/{studio-0gvvqj3h.js → studio-4xadhxj1.js} +4 -4
- package/dist/chunks/{studio-nvcn2ykc.js → studio-52mzbxqm.js} +4 -4
- package/dist/chunks/{studio-v7a7yb5w.js → studio-56mmnsw8.js} +7 -7
- package/dist/chunks/studio-59hz8f4r.js +5 -0
- package/dist/chunks/{studio-sce30r7b.js → studio-5k9mfafh.js} +3 -3
- package/dist/chunks/{studio-rr00ex23.js → studio-5qez462c.js} +6 -6
- package/dist/chunks/studio-6tnpg0vx.js +5 -0
- package/dist/chunks/studio-6w8mt734.js +6 -0
- package/dist/chunks/studio-7hm04x5z.js +5 -0
- package/dist/chunks/studio-8atmfjjm.js +7 -0
- package/dist/chunks/{studio-wmjmsw0p.js → studio-8n99z71s.js} +4 -4
- package/dist/chunks/studio-8vmad6x2.js +5 -0
- package/dist/chunks/studio-93p5k4r4.js +5 -0
- package/dist/chunks/{studio-2x972v58.js → studio-9gb0m81w.js} +4 -4
- package/dist/chunks/studio-a4ymg4vd.js +5 -0
- package/dist/chunks/studio-anc8067x.js +5 -0
- package/dist/chunks/{studio-2e4hry72.js → studio-dbdt67kr.js} +5 -5
- package/dist/chunks/studio-dbex091t.js +5 -0
- package/dist/chunks/{studio-amaz545p.js → studio-dj8ctxey.js} +4 -4
- package/dist/chunks/{studio-k2evngrj.js → studio-ed9bz68j.js} +5 -5
- package/dist/chunks/{studio-4bgvvzhv.js → studio-fe2d1fp5.js} +4 -4
- package/dist/chunks/{studio-45mj4jqe.js → studio-fgp4cyy3.js} +4 -4
- package/dist/chunks/studio-ft706q02.js +5 -0
- package/dist/chunks/studio-g79s1dyg.js +6 -0
- package/dist/chunks/{studio-pj216fmn.js → studio-gahswxp4.js} +4 -4
- package/dist/chunks/studio-gbqc12bk.js +5 -0
- package/dist/chunks/studio-gxphbetb.js +6 -0
- package/dist/chunks/studio-hdf01j7q.js +7 -0
- package/dist/chunks/studio-hf259xzd.js +48 -0
- package/dist/chunks/studio-jbva4wxw.js +5 -0
- package/dist/chunks/studio-jj9gf1qc.js +5 -0
- package/dist/chunks/studio-jsjg3mjv.js +5 -0
- package/dist/chunks/studio-jtvb8hd7.js +5 -0
- package/dist/chunks/{studio-g9brbewz.js → studio-kp4vzrct.js} +4 -4
- package/dist/chunks/studio-kpx02gaa.js +7 -0
- package/dist/chunks/{studio-3na1r48j.js → studio-kv1728ex.js} +8 -8
- package/dist/chunks/studio-m25ry0mf.js +5 -0
- package/dist/chunks/studio-mcbwmkyh.js +5 -0
- package/dist/chunks/studio-meajkr51.js +5 -0
- package/dist/chunks/studio-mkjrjpr2.js +6 -0
- package/dist/chunks/{studio-eqcddvc2.js → studio-mr084886.js} +201 -201
- package/dist/chunks/studio-mrb10hv3.js +5 -0
- package/dist/chunks/{studio-0939t1q1.js → studio-nhpg405j.js} +4 -4
- package/dist/chunks/studio-nsec0hxm.js +64 -0
- package/dist/chunks/{studio-xx3r3sb0.js → studio-nv0mh0p5.js} +4 -4
- package/dist/chunks/studio-pafmb06w.js +5 -0
- package/dist/chunks/{studio-pm17wdc4.js → studio-pgftd79b.js} +4 -4
- package/dist/chunks/{studio-4zd6an2b.js → studio-pk961xgz.js} +4 -4
- package/dist/chunks/studio-pzbr7g05.js +5 -0
- package/dist/chunks/studio-qcc5hsw2.js +10 -0
- package/dist/chunks/studio-qfq58c8n.js +5 -0
- package/dist/chunks/studio-qvb2jr83.js +5 -0
- package/dist/chunks/studio-r85zw6ay.js +5 -0
- package/dist/chunks/studio-s0kwce5w.js +9 -0
- package/dist/chunks/studio-s6ymkf3q.js +14 -0
- package/dist/chunks/{studio-0x6f3nk9.js → studio-s7p5ccxa.js} +4 -4
- package/dist/chunks/{studio-1410q5dw.js → studio-s9jjap3x.js} +4 -4
- package/dist/chunks/{studio-evq47j2z.js → studio-t5hde1ws.js} +4 -4
- package/dist/chunks/studio-vj9yv897.js +5 -0
- package/dist/chunks/studio-wmak8xjw.js +5 -0
- package/dist/chunks/{studio-bnc50f9h.js → studio-wqsmvtqj.js} +4 -4
- package/dist/chunks/studio-x3z3rhej.js +5 -0
- package/dist/chunks/{studio-bg8pzprg.js → studio-xb55kpmy.js} +4 -4
- package/dist/chunks/studio-xxtdajmv.js +12 -0
- package/dist/chunks/studio-xxttcym1.js +5 -0
- package/dist/chunks/{studio-90zkgne5.js → studio-y2zsnzye.js} +7 -7
- package/dist/chunks/{studio-3qr08sxq.js → studio-y3tjh2xb.js} +3 -3
- package/dist/chunks/studio-y4f1rdsj.js +5 -0
- package/dist/chunks/studio-ybkd5w8k.js +5 -0
- package/dist/chunks/{studio-tpxcryf2.js → studio-yetr4gg1.js} +4 -4
- package/dist/chunks/studio-z295anhs.js +6 -0
- package/dist/chunks/studio-z89e6wpg.js +9 -0
- package/dist/chunks/{studio-5tet77de.js → studio-zbwr6prc.js} +3 -3
- package/dist/chunks/{studio-daksw8kh.js → studio-zdbsv5q2.js} +4 -4
- package/dist/chunks/{studio-abh9kfdh.js → studio-zvthj8hg.js} +4 -4
- package/dist/chunks/toast-2kn2vrn4.js +4 -0
- package/dist/chunks/{toast-host-g3r2s0kn.js → toast-host-3rxeyj3d.js} +3 -3
- package/dist/chunks/{tooltip-dj1pvgz7.js → tooltip-ghkxkasp.js} +3 -3
- package/dist/chunks/{tree-j0ebwr5s.js → tree-vw4nc63s.js} +2 -2
- package/dist/chunks/tsMode-7gngmamr.js +14 -0
- package/dist/chunks/workspace-gv0hxgsm.js +4 -0
- package/dist/chunks/workspace-home-j7e0mjy5.js +4 -0
- package/dist/chunks/{ws-client-arz2qsy9.js → ws-client-vs11sxc5.js} +3 -3
- package/dist/iframe-entry.js +14 -14
- package/dist/manifest.json +84 -83
- package/dist/studio.js +99 -98
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +12 -12
- package/src/browse/library-layouts.ts +9 -12
- package/src/browse/library-pane.ts +22 -16
- package/src/browse/library-source.ts +3 -4
- package/src/browse/preview-style.ts +2 -1
- package/src/canvas/canvas-live-render.ts +2 -5
- package/src/canvas/canvas-page-context.ts +5 -0
- package/src/canvas/canvas-render.ts +6 -1
- package/src/canvas/iframe-drop.ts +84 -1
- package/src/canvas/iframe-entry.ts +9 -6
- package/src/canvas/iframe-render.ts +13 -0
- package/src/collab/collab-session.ts +2 -2
- package/src/commands/levels.ts +1 -1
- package/src/content/entry-commands.ts +32 -27
- package/src/content/entry-editor.ts +46 -44
- package/src/content/entry-inspector.ts +15 -12
- package/src/content/entry-model.ts +3 -3
- package/src/content/entry-summaries.ts +5 -5
- package/src/content/hold-state.ts +172 -0
- package/src/content/page-summaries.ts +10 -14
- package/src/create/add-new-flow.ts +2 -1
- package/src/editor/convert-targets.ts +2 -23
- package/src/editor/inline-edit.ts +6 -1
- package/src/editor/repeater-scope.ts +333 -74
- package/src/editor/slash-menu.ts +35 -17
- package/src/files/files.ts +18 -0
- package/src/format/format-choices.ts +5 -5
- package/src/format/format-host.ts +35 -3
- package/src/grid/redirects-grid.ts +4 -4
- package/src/grid/sources/content-source.ts +42 -66
- package/src/locale/element-names.ts +131 -0
- package/src/panels/block-action-bar.ts +3 -4
- package/src/panels/dnd.ts +3 -1
- package/src/panels/elements-panel.ts +93 -36
- package/src/panels/events-panel.ts +6 -2
- package/src/panels/formula-workspace.ts +9 -0
- package/src/panels/imports-panel.ts +3 -2
- package/src/panels/navigator-panels.ts +10 -10
- package/src/panels/panel-registry.ts +3 -3
- package/src/panels/properties-panel.ts +127 -35
- package/src/panels/site-panel.ts +2 -1
- package/src/panels/statement-editor.ts +4 -0
- package/src/panels/style-panel.ts +2 -1
- package/src/panels/styles-panel.ts +2 -2
- package/src/panels/tab-strip.ts +29 -26
- package/src/platforms/cloud.ts +5 -2
- package/src/services/ai-command-tools.ts +2 -1
- package/src/services/ai-project-tools.ts +21 -8
- package/src/services/ai-tools.ts +5 -5
- package/src/services/ai-write-report.ts +22 -4
- package/src/services/context-manager.ts +110 -2
- package/src/services/document-assistant.ts +2 -2
- package/src/services/harness/chat-reducer.ts +9 -4
- package/src/services/jxn-language.ts +110 -0
- package/src/services/model-uri.ts +3 -0
- package/src/services/monaco-setup.ts +6 -2
- package/src/services/render-critic.ts +234 -12
- package/src/services/tool-executor.ts +16 -8
- package/src/settings/contributed-section.ts +2 -1
- package/src/settings/extension-commands.ts +2 -1
- package/src/settings/general-settings.ts +2 -2
- package/src/settings/settings-document.ts +5 -5
- package/src/shell.ts +1 -1
- package/src/studio.ts +28 -11
- package/src/style/variables-view.ts +2 -2
- package/src/surfaces/collections-panel.json +1 -1
- package/src/surfaces/collections-panel.ts +1 -1
- package/src/surfaces/entry-editor.json +10 -10
- package/src/surfaces/entry-editor.ts +22 -19
- package/src/surfaces/entry-inspector.json +11 -11
- package/src/surfaces/entry-inspector.ts +17 -10
- package/src/surfaces/panel-elements.json +466 -206
- package/src/surfaces/panel-elements.ts +61 -25
- package/src/surfaces/tab-strip.json +5 -5
- package/src/surfaces/tab-strip.ts +2 -2
- package/src/tabs/project-config.ts +13 -13
- package/src/tabs/tab.ts +7 -2
- package/src/types.ts +13 -2
- package/src/ui/expression-editor.ts +10 -5
- package/src/ui/schema-form.ts +18 -1
- package/src/utils/edit-display.ts +27 -1
- package/src/view.ts +9 -2
- package/src/workspace/tab-workspace.ts +2 -2
- package/src/workspace/workspace-back.ts +2 -2
- package/dist/chunks/2020-906vx2dq.js +0 -4
- package/dist/chunks/adapter-hnvad61x.js +0 -4
- package/dist/chunks/add-new-flow-v0pm96mr.js +0 -4
- package/dist/chunks/cf-settings-mkbcz4z2.js +0 -4
- package/dist/chunks/color-04361ttk.js +0 -4
- package/dist/chunks/color-field-qv5r2b16.js +0 -4
- package/dist/chunks/components-w5zqwva1.js +0 -4
- package/dist/chunks/content-source-g38w0d3f.js +0 -4
- package/dist/chunks/convert-to-repeater-r8sfxjjm.js +0 -4
- package/dist/chunks/editor-wvf5e6j9.js +0 -4
- package/dist/chunks/entry-commands-t13dyw3c.js +0 -4
- package/dist/chunks/extension-sections-vjzw46xb.js +0 -4
- package/dist/chunks/file-ops-1sghzgcr.js +0 -4
- package/dist/chunks/files-zrqtgt41.js +0 -4
- package/dist/chunks/format-host-9gy76erh.js +0 -4
- package/dist/chunks/fs-events-45rhg3me.js +0 -4
- package/dist/chunks/grid-open-t4fq6bbm.js +0 -4
- package/dist/chunks/iframe-entry-42hpmwz5.js +0 -5
- package/dist/chunks/iframe-host-9aq8ze3q.js +0 -4
- package/dist/chunks/index-f9qr7kzh.js +0 -4
- package/dist/chunks/jsonMode-vj30te2h.js +0 -13
- package/dist/chunks/jx-validate-r4ax11e3.js +0 -4
- package/dist/chunks/layers-m49nmwvx.js +0 -4
- package/dist/chunks/layers-panel-zr92pwdp.js +0 -4
- package/dist/chunks/lit-html-k2mb9k0r.js +0 -4
- package/dist/chunks/media-library-j74rt0w4.js +0 -4
- package/dist/chunks/media-open-mypr0k6b.js +0 -4
- package/dist/chunks/media-picker-pemtbsjv.js +0 -4
- package/dist/chunks/menu-d2jxpgma.js +0 -4
- package/dist/chunks/monaco-buffer-pa0g6ax7.js +0 -4
- package/dist/chunks/monaco-setup-0hw9f835.js +0 -4
- package/dist/chunks/notify-bwehrp7q.js +0 -4
- package/dist/chunks/parse-hee7ne9b.js +0 -4
- package/dist/chunks/platform-kv0k65cy.js +0 -4
- package/dist/chunks/popover-9tf4cjrk.js +0 -4
- package/dist/chunks/publish-panel-vg1n880b.js +0 -4
- package/dist/chunks/publish-quick-4fwngwrw.js +0 -4
- package/dist/chunks/publish-workspace-jv4w2bx2.js +0 -4
- package/dist/chunks/quick-search-nh29rt8a.js +0 -4
- package/dist/chunks/references-vqyr5s9x.js +0 -4
- package/dist/chunks/right-panel-3ws9f2w0.js +0 -4
- package/dist/chunks/source-control-h3hcs5gy.js +0 -4
- package/dist/chunks/studio-0khd8xtx.js +0 -4
- package/dist/chunks/studio-1ctnw3xv.js +0 -5
- package/dist/chunks/studio-1ks5d9y4.js +0 -5
- package/dist/chunks/studio-1y9mab9m.js +0 -5
- package/dist/chunks/studio-2kpxm0eh.js +0 -7
- package/dist/chunks/studio-2zz4qbv9.js +0 -5
- package/dist/chunks/studio-3pz4t5a2.js +0 -5
- package/dist/chunks/studio-4f7thq0p.js +0 -5
- package/dist/chunks/studio-61rg2cz5.js +0 -5
- package/dist/chunks/studio-7rrdbvex.js +0 -5
- package/dist/chunks/studio-9c6cbq2c.js +0 -4
- package/dist/chunks/studio-9dq7rwc7.js +0 -5
- package/dist/chunks/studio-9gr7xs9r.js +0 -6
- package/dist/chunks/studio-a88ej93p.js +0 -7
- package/dist/chunks/studio-acer0g8w.js +0 -5
- package/dist/chunks/studio-az3wvyh2.js +0 -5
- package/dist/chunks/studio-brh8d2pr.js +0 -5
- package/dist/chunks/studio-c2fa783p.js +0 -9
- package/dist/chunks/studio-cfnn70h1.js +0 -5
- package/dist/chunks/studio-cqxj4fcy.js +0 -5
- package/dist/chunks/studio-cw11h078.js +0 -5
- package/dist/chunks/studio-dn56z7sn.js +0 -5
- package/dist/chunks/studio-egnjpyde.js +0 -9
- package/dist/chunks/studio-ejrypvmq.js +0 -5
- package/dist/chunks/studio-frc16j8v.js +0 -10
- package/dist/chunks/studio-gnazwtv3.js +0 -5
- package/dist/chunks/studio-hfqpfmpk.js +0 -5
- package/dist/chunks/studio-hh394phe.js +0 -5
- package/dist/chunks/studio-j0zf5x2x.js +0 -5
- package/dist/chunks/studio-j5fcp6gj.js +0 -5
- package/dist/chunks/studio-jd1qb1st.js +0 -7
- package/dist/chunks/studio-k0xzrse2.js +0 -64
- package/dist/chunks/studio-k1xqrgm5.js +0 -5
- package/dist/chunks/studio-k3we3kqb.js +0 -5
- package/dist/chunks/studio-knsjyx7n.js +0 -5
- package/dist/chunks/studio-mrjtnm62.js +0 -5
- package/dist/chunks/studio-n9qba0gx.js +0 -5
- package/dist/chunks/studio-nzemfbkk.js +0 -14
- package/dist/chunks/studio-pwctzka3.js +0 -16
- package/dist/chunks/studio-q80fg1d6.js +0 -12
- package/dist/chunks/studio-q9hx2qp0.js +0 -5
- package/dist/chunks/studio-qrzmfaf6.js +0 -5
- package/dist/chunks/studio-r6mx7vm5.js +0 -7
- package/dist/chunks/studio-swedpd82.js +0 -5
- package/dist/chunks/studio-tmfcn347.js +0 -6
- package/dist/chunks/studio-v5wktj6f.js +0 -5
- package/dist/chunks/studio-vpevkfxw.js +0 -5
- package/dist/chunks/studio-wqfaqw4m.js +0 -5
- package/dist/chunks/studio-xpx91fby.js +0 -6
- package/dist/chunks/studio-xva3hzkv.js +0 -5
- package/dist/chunks/studio-z3fztxrp.js +0 -9
- package/dist/chunks/studio-z9453ypn.js +0 -6
- package/dist/chunks/toast-w11qpkyz.js +0 -4
- package/dist/chunks/tsMode-jg1dtphj.js +0 -14
- package/dist/chunks/workspace-6ztqcrsh.js +0 -4
- package/dist/chunks/workspace-home-rse9h8a0.js +0 -4
- package/src/content/draft-state.ts +0 -108
package/src/studio.ts
CHANGED
|
@@ -118,6 +118,7 @@ import {
|
|
|
118
118
|
refreshFormats,
|
|
119
119
|
} from "./format/format-host";
|
|
120
120
|
import {
|
|
121
|
+
followOpenDocuments,
|
|
121
122
|
loadProject as _loadProject,
|
|
122
123
|
openProject as _openProject,
|
|
123
124
|
findHomePage,
|
|
@@ -295,11 +296,12 @@ import { focusPublishHome } from "./publish/publish-workspace";
|
|
|
295
296
|
import { registerI18nCommands } from "./i18n/i18n-commands";
|
|
296
297
|
import { convertToComponent } from "./editor/convert-to-component";
|
|
297
298
|
import type { GitDiffState } from "./types";
|
|
298
|
-
import { PROJECT_CONFIG_PATH } from "./tabs/tab";
|
|
299
299
|
import type { Tab } from "./tabs/tab";
|
|
300
300
|
import type { JxDocument, ProjectConfig } from "@jxsuite/schema/types";
|
|
301
301
|
import { setBundleBase } from "./services/bundle-base";
|
|
302
302
|
import { mountBootFailureTree, mountShellTree } from "./shell/tree";
|
|
303
|
+
import { PROJECT_FILE_NAME, isProjectConfigPath } from "@jxsuite/schema/project-file";
|
|
304
|
+
import { projectConfigPath } from "./tabs/tab";
|
|
303
305
|
|
|
304
306
|
// The bundler's `<link rel=modulepreload>` batching is installed on the module scope: before the
|
|
305
307
|
// First lazy `import()` of any surface that runs, so the palette's first open does not pay a
|
|
@@ -403,7 +405,7 @@ function setCanvasMode(tab: Tab | null, mode: string) {
|
|
|
403
405
|
}
|
|
404
406
|
tab.session.ui.canvasMode = mode;
|
|
405
407
|
// The Styles home view follows the author's own switches between Variables and Elements.
|
|
406
|
-
if (tab.documentPath
|
|
408
|
+
if (isProjectConfigPath(tab.documentPath)) {
|
|
407
409
|
rememberStylesView(mode);
|
|
408
410
|
}
|
|
409
411
|
}
|
|
@@ -1152,7 +1154,7 @@ if (_projectParam) {
|
|
|
1152
1154
|
*/
|
|
1153
1155
|
const named =
|
|
1154
1156
|
_urlParams.get("file") ||
|
|
1155
|
-
(siteCtx.fileRelPath && !siteCtx.fileRelPath
|
|
1157
|
+
(siteCtx.fileRelPath && !isProjectConfigPath(siteCtx.fileRelPath)
|
|
1156
1158
|
? siteCtx.fileRelPath
|
|
1157
1159
|
: null);
|
|
1158
1160
|
if (!named) {
|
|
@@ -1168,8 +1170,8 @@ if (_projectParam) {
|
|
|
1168
1170
|
fileRelPath = named ?? siteCtx.fileRelPath ?? _projectParam;
|
|
1169
1171
|
|
|
1170
1172
|
// When opening project.json, default to home page instead (listing-based, no 404 probes).
|
|
1171
|
-
if (fileRelPath
|
|
1172
|
-
fileRelPath = (await findHomePage()) ??
|
|
1173
|
+
if (isProjectConfigPath(fileRelPath) || fileRelPath.endsWith(`/${PROJECT_FILE_NAME}`)) {
|
|
1174
|
+
fileRelPath = (await findHomePage()) ?? projectConfigPath();
|
|
1173
1175
|
}
|
|
1174
1176
|
|
|
1175
1177
|
const content = await platform.readFile(fileRelPath);
|
|
@@ -1205,7 +1207,7 @@ if (_projectParam) {
|
|
|
1205
1207
|
if (parsedMode === "content" && activeTab.value) {
|
|
1206
1208
|
activeTab.value.doc.mode = "content";
|
|
1207
1209
|
}
|
|
1208
|
-
if (fileRelPath
|
|
1210
|
+
if (isProjectConfigPath(fileRelPath) && activeTab.value) {
|
|
1209
1211
|
activeTab.value.session.ui.canvasMode = "stylebook";
|
|
1210
1212
|
}
|
|
1211
1213
|
|
|
@@ -1228,7 +1230,8 @@ if (_projectParam) {
|
|
|
1228
1230
|
}
|
|
1229
1231
|
} else {
|
|
1230
1232
|
// Normal mode: probe for project at server root
|
|
1231
|
-
|
|
1233
|
+
// oxlint-disable-next-line unicorn/prefer-top-level-await -- deliberate fire-and-forget: the shell renders first
|
|
1234
|
+
void loadProjectAndFollowDocuments();
|
|
1232
1235
|
render();
|
|
1233
1236
|
ensureFsSync();
|
|
1234
1237
|
}
|
|
@@ -1296,6 +1299,12 @@ function renderLeftPanel() {
|
|
|
1296
1299
|
leftPanelMod.render();
|
|
1297
1300
|
}
|
|
1298
1301
|
|
|
1302
|
+
/** Load what this window holds, then show what the operating system asks of it from here on. */
|
|
1303
|
+
async function loadProjectAndFollowDocuments() {
|
|
1304
|
+
await loadProject();
|
|
1305
|
+
followOpenDocuments();
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1299
1308
|
function loadProject() {
|
|
1300
1309
|
return _loadProject();
|
|
1301
1310
|
}
|
|
@@ -1334,7 +1343,10 @@ async function openProject(target: ProjectOpenTarget = "thisWindow"): Promise<Pr
|
|
|
1334
1343
|
if (!picked) {
|
|
1335
1344
|
return "cancelled";
|
|
1336
1345
|
}
|
|
1337
|
-
const { focused } = await platform.openProjectInNewWindow(picked.root);
|
|
1346
|
+
const { declined, focused } = await platform.openProjectInNewWindow(picked.root);
|
|
1347
|
+
if (declined) {
|
|
1348
|
+
return "cancelled";
|
|
1349
|
+
}
|
|
1338
1350
|
return focused ? "focused" : "newWindow";
|
|
1339
1351
|
}
|
|
1340
1352
|
// The SECOND destroyer, and it was ungated for as long as the first one was. `openRecentProject`
|
|
@@ -1394,8 +1406,8 @@ async function openRecentProject(root: string) {
|
|
|
1394
1406
|
// Multi-window (desktop): if this window already holds a project, open the chosen one in a new
|
|
1395
1407
|
// Window (focusing an existing window if it's already open) rather than replacing this project.
|
|
1396
1408
|
if (projectState && platform.openProjectInNewWindow) {
|
|
1397
|
-
await platform.openProjectInNewWindow(root);
|
|
1398
|
-
activity.done("Opened in another window");
|
|
1409
|
+
const { declined } = await platform.openProjectInNewWindow(root);
|
|
1410
|
+
activity.done(declined ? "Didn't open the project" : "Opened in another window");
|
|
1399
1411
|
return;
|
|
1400
1412
|
}
|
|
1401
1413
|
|
|
@@ -1420,6 +1432,11 @@ async function openRecentProject(root: string) {
|
|
|
1420
1432
|
// The project is already open in another window, that window is focused and we bail here.
|
|
1421
1433
|
if (platform.setWindowProject) {
|
|
1422
1434
|
const res = await platform.setWindowProject(root);
|
|
1435
|
+
if (res.declined) {
|
|
1436
|
+
// The user declined to run its code, and nothing has moved yet: the tabs above stay open.
|
|
1437
|
+
activity.done("Kept the current project");
|
|
1438
|
+
return;
|
|
1439
|
+
}
|
|
1423
1440
|
if (res.deduped) {
|
|
1424
1441
|
activity.done("Already open in another window");
|
|
1425
1442
|
return;
|
|
@@ -1439,7 +1456,7 @@ async function openRecentProject(root: string) {
|
|
|
1439
1456
|
refreshFormats();
|
|
1440
1457
|
void loadFormats();
|
|
1441
1458
|
refreshExtensionUi(platform);
|
|
1442
|
-
const content = await platform.readFile(
|
|
1459
|
+
const content = await platform.readFile(projectConfigPath());
|
|
1443
1460
|
/* SAFETY: This is `project.json` at the root the user chose to open, the project's own config
|
|
1444
1461
|
file whose schema is ProjectConfig; Studio edits it in that shape and does not re-validate it
|
|
1445
1462
|
on open, as the folder-picker path in `platforms/devserver.ts` does not either. */
|
|
@@ -36,7 +36,7 @@ import { projectState } from "../store";
|
|
|
36
36
|
import { shell } from "../shell";
|
|
37
37
|
import { runActiveReported } from "../commands/run-reported";
|
|
38
38
|
import { projectConfigDocument } from "../tabs/project-config";
|
|
39
|
-
import {
|
|
39
|
+
import { isProjectConfigPath } from "../tabs/tab";
|
|
40
40
|
import { paneRegion } from "../ui/regions";
|
|
41
41
|
import { focusCssVar, focusCssVarGroup, renderCssVarsEditor } from "../settings/css-vars-editor";
|
|
42
42
|
import { variablesFocus } from "./variables-focus";
|
|
@@ -126,7 +126,7 @@ function manageContexts(): void {
|
|
|
126
126
|
* place is the tab's own. A no-op with no project, and for any other document.
|
|
127
127
|
*/
|
|
128
128
|
function bindConfiguration(tab: Tab): void {
|
|
129
|
-
if (projectState && tab.documentPath
|
|
129
|
+
if (projectState && isProjectConfigPath(tab.documentPath)) {
|
|
130
130
|
projectConfigDocument();
|
|
131
131
|
}
|
|
132
132
|
}
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"& [part=\"entry-locale\"]:empty": {
|
|
131
131
|
"display": "none"
|
|
132
132
|
},
|
|
133
|
-
"& [part=\"entry-status\"][data-status=\"
|
|
133
|
+
"& [part=\"entry-status\"]:not([data-status=\"Published\"], [data-status=\"\"])": {
|
|
134
134
|
"color": "var(--warning)"
|
|
135
135
|
},
|
|
136
136
|
"& [part=\"note\"], & [part=\"no-project\"]": {
|
|
@@ -42,7 +42,7 @@ export interface CollectionRow {
|
|
|
42
42
|
export interface CollectionEntryRow {
|
|
43
43
|
path: string;
|
|
44
44
|
title: string;
|
|
45
|
-
/**
|
|
45
|
+
/** A `hold` rule's label, "Published", or "". */
|
|
46
46
|
status: string;
|
|
47
47
|
/** Whether a thumbnail is drawn, or the document glyph. */
|
|
48
48
|
art: "image" | "glyph";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
3
|
"$id": "StudioEntryEditor",
|
|
4
|
-
"$description": "The Entry editor (site-architecture.md §7.4) — one content entry's fields, in a pane, as a Jx document over the kit. The adapter (`surfaces/entry-editor.ts`) hands in a projection; `content/entry-editor.ts` decides everything in it — which collection the file belongs to, which record its fields live in, which required keys are absent and what a
|
|
4
|
+
"$description": "The Entry editor (site-architecture.md §7.4) — one content entry's fields, in a pane, as a Jx document over the kit. The adapter (`surfaces/entry-editor.ts`) hands in a projection; `content/entry-editor.ts` decides everything in it — which collection the file belongs to, which record its fields live in, which required keys are absent and what a hold switch commits into. The FORM is an island: a schema is `ui/schema-form.ts`'s subject, so this document renders an empty `fields` node and the flow places the element that engine hands back (studio-ui-guidelines.md §9.3, §9.4). That is the whole of the difference between this and the card the lit version drew, and it is why the engine converting in batch 7 is what unblocked this one.",
|
|
5
5
|
"tagName": "div",
|
|
6
6
|
"attributes": {
|
|
7
7
|
"part": "entry",
|
|
8
8
|
"data-jx-region": "${state.region}"
|
|
9
9
|
},
|
|
10
10
|
"style": {
|
|
11
|
-
"$description": "What `.entry-editor`, `.entry-editor-header`, `.entry-editor-collection`, `.entry-
|
|
11
|
+
"$description": "What `.entry-editor`, `.entry-editor-header`, `.entry-editor-collection`, `.entry-hold-switch`, `.entry-editor-fields`, `.entry-editor-note` and `.entry-editor-empty` said in `styles/overlays.css`, keyed on `part` and re-pointed at the studio token layer. This editor was the only emitter of all seven, so those rules are dead in the stylesheet from here; a central sweep removes them rather than this change, which owns no stylesheet. Every `--spectrum-font-size-*` reference is gone rather than renamed: those names resolve only inside `<sp-theme>`, and a pane editor is mounted outside it, so each would silently have taken its hard-coded fallback.",
|
|
12
12
|
"height": "100%",
|
|
13
13
|
"padding": "var(--jx-space-5)",
|
|
14
14
|
"overflowY": "auto",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"color": "var(--fg-dim)",
|
|
33
33
|
"fontSize": "var(--jx-text-sm)"
|
|
34
34
|
},
|
|
35
|
-
"& [part=\"
|
|
35
|
+
"& [part=\"hold\"]": {
|
|
36
36
|
"$description": "Pushed to the far end of the header rather than placed there: the heading and the collection chip are both content-width, so `margin-left: auto` is what keeps the switch on the right edge whatever the entry is called.",
|
|
37
37
|
"marginLeft": "auto"
|
|
38
38
|
},
|
|
@@ -241,27 +241,27 @@
|
|
|
241
241
|
{
|
|
242
242
|
"tagName": "div",
|
|
243
243
|
"attributes": {
|
|
244
|
-
"part": "
|
|
244
|
+
"part": "hold-slot",
|
|
245
245
|
"role": "none"
|
|
246
246
|
},
|
|
247
247
|
"style": {
|
|
248
248
|
"display": "contents"
|
|
249
249
|
},
|
|
250
250
|
"$switch": {
|
|
251
|
-
"$ref": "#/state/
|
|
251
|
+
"$ref": "#/state/holdSwitch"
|
|
252
252
|
},
|
|
253
253
|
"cases": {
|
|
254
254
|
"shown": {
|
|
255
255
|
"$description": "No `label`: the slotted word is on screen and carries the name, so an aria-label would be read twice. The tooltip is `hint`, which is what DRAFT_MEANING has always been.",
|
|
256
256
|
"tagName": "jx-switch",
|
|
257
257
|
"attributes": {
|
|
258
|
-
"part": "
|
|
258
|
+
"part": "hold"
|
|
259
259
|
},
|
|
260
260
|
"$props": {
|
|
261
261
|
"checked": {
|
|
262
|
-
"$ref": "#/state/
|
|
262
|
+
"$ref": "#/state/holdOn"
|
|
263
263
|
},
|
|
264
|
-
"hint": "${state.
|
|
264
|
+
"hint": "${state.holdHint}",
|
|
265
265
|
"size": "sm"
|
|
266
266
|
},
|
|
267
267
|
"onchange": {
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
{
|
|
271
271
|
"operator": "call",
|
|
272
272
|
"target": {
|
|
273
|
-
"$ref": "#/state/
|
|
273
|
+
"$ref": "#/state/setHold"
|
|
274
274
|
},
|
|
275
275
|
"value": [
|
|
276
276
|
{
|
|
@@ -283,7 +283,7 @@
|
|
|
283
283
|
"children": [
|
|
284
284
|
{
|
|
285
285
|
"tagName": "span",
|
|
286
|
-
"textContent": "
|
|
286
|
+
"textContent": "${state.holdLabel}"
|
|
287
287
|
}
|
|
288
288
|
]
|
|
289
289
|
}
|
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* This is the adapter. `content/entry-editor.ts` keeps the editor — which pane holds which tab,
|
|
6
6
|
* which collection a path belongs to, which record the fields live in, which required keys the
|
|
7
|
-
* entry does not HAVE, and what the
|
|
8
|
-
*
|
|
9
|
-
* nothing.
|
|
7
|
+
* entry does not HAVE, and what the hold switch commits into — and hands this module one projection
|
|
8
|
+
* whose every field is already a string or a flag. The document draws it and decides nothing.
|
|
10
9
|
*
|
|
11
10
|
* **The form is an ISLAND, and that is the whole shape of this conversion.** A form built from a
|
|
12
11
|
* JSON Schema is `ui/schema-form.ts`'s surface rather than this one's, and that engine hands back a
|
|
@@ -53,13 +52,15 @@ export interface EntryEditorView {
|
|
|
53
52
|
name: string;
|
|
54
53
|
/** The collection's name, in the chip beside it. */
|
|
55
54
|
collection: string;
|
|
56
|
-
/** Whether
|
|
57
|
-
|
|
58
|
-
/** Whether the
|
|
59
|
-
|
|
60
|
-
/** The
|
|
61
|
-
|
|
62
|
-
/**
|
|
55
|
+
/** Whether the collection's rules offer a switch: one boolean field. */
|
|
56
|
+
holdSwitch: "hidden" | "shown";
|
|
57
|
+
/** Whether the switch is on. */
|
|
58
|
+
holdOn: boolean;
|
|
59
|
+
/** The word beside the switch: its rule's label. */
|
|
60
|
+
holdLabel: string;
|
|
61
|
+
/** The switch's tooltip: what being held does, in `content/hold-state.ts`'s one sentence. */
|
|
62
|
+
holdHint: string;
|
|
63
|
+
/** Whether the sentence under the header is drawn — only while a rule holds the entry. */
|
|
63
64
|
noteState: "hidden" | "shown";
|
|
64
65
|
note: string;
|
|
65
66
|
/** The `empty` stage's first sentence, naming the document it is about. */
|
|
@@ -74,8 +75,8 @@ export interface EntryEditorView {
|
|
|
74
75
|
|
|
75
76
|
/** What the reader can do here. Both are decisions the editor owns. */
|
|
76
77
|
export interface EntryEditorActions {
|
|
77
|
-
/** The
|
|
78
|
-
|
|
78
|
+
/** The hold switch moved. A setter, never a toggle. */
|
|
79
|
+
setHold: (on: boolean) => void;
|
|
79
80
|
/** Open Project Settings › Content types — the door out of the `empty` stage. */
|
|
80
81
|
openContentTypes: () => void;
|
|
81
82
|
/** A record: show the file's previous record, its next one, or the whole file in its grid. */
|
|
@@ -109,9 +110,10 @@ function project(scope: EntryEditorScope, view: EntryEditorView): void {
|
|
|
109
110
|
scope.stage = view.stage;
|
|
110
111
|
scope.name = view.name;
|
|
111
112
|
scope.collection = view.collection;
|
|
112
|
-
scope.
|
|
113
|
-
scope.
|
|
114
|
-
scope.
|
|
113
|
+
scope.holdSwitch = view.holdSwitch;
|
|
114
|
+
scope.holdOn = view.holdOn;
|
|
115
|
+
scope.holdLabel = view.holdLabel;
|
|
116
|
+
scope.holdHint = view.holdHint;
|
|
115
117
|
scope.noteState = view.noteState;
|
|
116
118
|
scope.note = view.note;
|
|
117
119
|
scope.emptyLine = view.emptyLine;
|
|
@@ -149,9 +151,10 @@ export function mountEntryEditorSurface(
|
|
|
149
151
|
host.replaceChildren();
|
|
150
152
|
const scope: EntryEditorScope = reactive<EntryEditorScope>({
|
|
151
153
|
collection: "",
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
154
|
+
holdHint: "",
|
|
155
|
+
holdLabel: "",
|
|
156
|
+
holdOn: false,
|
|
157
|
+
holdSwitch: "hidden",
|
|
155
158
|
emptyLine: "",
|
|
156
159
|
fieldsRegion: "",
|
|
157
160
|
name: "",
|
|
@@ -164,7 +167,7 @@ export function mountEntryEditorSurface(
|
|
|
164
167
|
previousDisabled: true,
|
|
165
168
|
recordNav: "hidden",
|
|
166
169
|
region: "",
|
|
167
|
-
|
|
170
|
+
setHold: actions.setHold,
|
|
168
171
|
showNext: actions.showNext,
|
|
169
172
|
showPrevious: actions.showPrevious,
|
|
170
173
|
stage: "empty",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
3
|
"$id": "StudioEntryInspector",
|
|
4
|
-
"$description": "The Inspector's Entry tab (specs/studio.md §6, §22.5): one collection entry's own settings while it is written on the canvas, the Content-Entry board's sidebar. Its status (
|
|
4
|
+
"$description": "The Inspector's Entry tab (specs/studio.md §6, §22.5): one collection entry's own settings while it is written on the canvas, the Content-Entry board's sidebar. Its status (a hold rule's label, or Published), its fields as the collection's schema types them, the URL its collection page publishes it at, and the file it is stored in. `content/entry-inspector.ts` keeps every decision; the field form is an island it fills, `ui/schema-form.ts`'s, the same form the form-only entry editor draws.",
|
|
5
5
|
"tagName": "div",
|
|
6
6
|
"attributes": {
|
|
7
7
|
"part": "entry",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"fontSize": "var(--jx-text-sm)",
|
|
43
43
|
"color": "var(--fg-dim)"
|
|
44
44
|
},
|
|
45
|
-
"& [part=\"status\"][data-
|
|
45
|
+
"& [part=\"status\"][data-held=\"true\"]": {
|
|
46
46
|
"color": "var(--warning)"
|
|
47
47
|
},
|
|
48
48
|
"& [part=\"note\"]": {
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"tagName": "span",
|
|
95
95
|
"attributes": {
|
|
96
96
|
"part": "status",
|
|
97
|
-
"data-
|
|
97
|
+
"data-held": "${state.held ? 'true' : 'false'}"
|
|
98
98
|
},
|
|
99
99
|
"textContent": "${state.status}"
|
|
100
100
|
}
|
|
@@ -110,27 +110,27 @@
|
|
|
110
110
|
{
|
|
111
111
|
"tagName": "div",
|
|
112
112
|
"attributes": {
|
|
113
|
-
"part": "
|
|
113
|
+
"part": "hold-slot",
|
|
114
114
|
"role": "none"
|
|
115
115
|
},
|
|
116
116
|
"style": {
|
|
117
117
|
"display": "contents"
|
|
118
118
|
},
|
|
119
119
|
"$switch": {
|
|
120
|
-
"$ref": "#/state/
|
|
120
|
+
"$ref": "#/state/holdSwitch"
|
|
121
121
|
},
|
|
122
122
|
"cases": {
|
|
123
123
|
"shown": {
|
|
124
|
-
"$description": "The entry's
|
|
124
|
+
"$description": "The entry's hold switch, on a collection whose rules offer one: the one field every such collection has in common. The state this shares (site-architecture.md §7.6). A setter: the switch names the state it reaches.",
|
|
125
125
|
"tagName": "jx-switch",
|
|
126
126
|
"attributes": {
|
|
127
|
-
"part": "
|
|
127
|
+
"part": "hold"
|
|
128
128
|
},
|
|
129
129
|
"$props": {
|
|
130
130
|
"checked": {
|
|
131
|
-
"$ref": "#/state/
|
|
131
|
+
"$ref": "#/state/holdOn"
|
|
132
132
|
},
|
|
133
|
-
"hint": "${state.
|
|
133
|
+
"hint": "${state.holdHint}",
|
|
134
134
|
"size": "sm"
|
|
135
135
|
},
|
|
136
136
|
"onchange": {
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
{
|
|
140
140
|
"operator": "call",
|
|
141
141
|
"target": {
|
|
142
|
-
"$ref": "#/state/
|
|
142
|
+
"$ref": "#/state/setHold"
|
|
143
143
|
},
|
|
144
144
|
"value": [
|
|
145
145
|
{
|
|
@@ -152,7 +152,7 @@
|
|
|
152
152
|
"children": [
|
|
153
153
|
{
|
|
154
154
|
"tagName": "span",
|
|
155
|
-
"textContent": "
|
|
155
|
+
"textContent": "${state.holdLabel}"
|
|
156
156
|
}
|
|
157
157
|
]
|
|
158
158
|
}
|
|
@@ -25,12 +25,17 @@ export interface EntryInspectorView {
|
|
|
25
25
|
region: string;
|
|
26
26
|
/** What the entry is, said in the singular: "Post". */
|
|
27
27
|
kind: string;
|
|
28
|
-
/**
|
|
28
|
+
/** A `hold` rule's label, "Published", or "" for a collection with no rules. */
|
|
29
29
|
status: string;
|
|
30
|
-
/** Whether the collection
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
/** Whether the collection's rules offer a switch: one boolean field. */
|
|
31
|
+
holdSwitch: "hidden" | "shown";
|
|
32
|
+
/** Whether a rule holds the entry, whichever it is. */
|
|
33
|
+
held: boolean;
|
|
34
|
+
/** Whether the switch is on. */
|
|
35
|
+
holdOn: boolean;
|
|
36
|
+
/** The word beside the switch: its rule's label. */
|
|
37
|
+
holdLabel: string;
|
|
38
|
+
holdHint: string;
|
|
34
39
|
/** `form` draws the field form's host; `none` says the collection declares no fields. */
|
|
35
40
|
fieldsState: "form" | "none";
|
|
36
41
|
/**
|
|
@@ -47,8 +52,8 @@ export interface EntryInspectorView {
|
|
|
47
52
|
|
|
48
53
|
/** What the tab's controls do. */
|
|
49
54
|
export interface EntryInspectorActions {
|
|
50
|
-
/** The
|
|
51
|
-
|
|
55
|
+
/** The hold switch moved. A setter, never a toggle. */
|
|
56
|
+
setHold: (on: boolean) => void;
|
|
52
57
|
/** **Edit** opens Project Settings › Content types on this collection. */
|
|
53
58
|
openFields: () => void;
|
|
54
59
|
/** **Search appearance…** runs `document.openSeo` over this entry, as the Page tab's does. */
|
|
@@ -76,9 +81,11 @@ function project(scope: EntryInspectorScope, view: EntryInspectorView): void {
|
|
|
76
81
|
scope.region = view.region;
|
|
77
82
|
scope.kind = view.kind;
|
|
78
83
|
scope.status = view.status;
|
|
79
|
-
scope.
|
|
80
|
-
scope.
|
|
81
|
-
scope.
|
|
84
|
+
scope.holdSwitch = view.holdSwitch;
|
|
85
|
+
scope.holdOn = view.holdOn;
|
|
86
|
+
scope.holdLabel = view.holdLabel;
|
|
87
|
+
scope.holdHint = view.holdHint;
|
|
88
|
+
scope.held = view.held;
|
|
82
89
|
scope.fieldsState = view.fieldsState;
|
|
83
90
|
scope.urlState = view.urlState;
|
|
84
91
|
scope.url = view.url;
|