@jxsuite/studio 4.0.0 → 5.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 +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-xp8vnwma.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-fyf63pmy.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-2w1f35qs.js +18 -0
- package/dist/chunks/content-source-3wqeas45.js +46 -0
- package/dist/chunks/convert-to-repeater-d0cgnb6d.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-d6g50j7s.js +42 -0
- package/dist/chunks/extension-sections-fy7q4fe9.js +651 -0
- package/dist/chunks/file-ops-3btj6st0.js +47 -0
- package/dist/chunks/files-ef8fgs3w.js +72 -0
- package/dist/chunks/format-host-3c33nwr8.js +40 -0
- package/dist/chunks/fs-events-13tj6sex.js +18 -0
- package/dist/chunks/git-panel-4wp2rn9b.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-jgesd924.js +115 -0
- package/dist/chunks/{index-nj44jpzj.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-1nq5evsh.js +29 -0
- package/dist/chunks/layers-panel-ar2gh90g.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-2qbetq73.js +33 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/menu-rf7n72mf.js +14 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-rws7k4br.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-98f7sr3g.js +27 -0
- package/dist/chunks/quick-search-srzz83k2.js +45 -0
- package/dist/chunks/references-n553f0e1.js +26 -0
- package/dist/chunks/right-panel-rrgx2dn3.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/studio-18avnhjp.js +2430 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-hbtp0eh1.js → studio-25hkdrkw.js} +356 -85
- package/dist/chunks/studio-26d7myd1.js +258 -0
- package/dist/chunks/{studio-p8j86wag.js → studio-38emantv.js} +22 -5
- package/dist/chunks/studio-3gxv60tn.js +422 -0
- package/dist/chunks/{studio-8swrjbny.js → studio-3hxkd92t.js} +275 -163
- package/dist/chunks/studio-4m0haseg.js +185 -0
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/{studio-gv8vvshc.js → studio-5523bpzt.js} +11 -11
- package/dist/chunks/{studio-5q69gfag.js → studio-57mf66w2.js} +1753 -2484
- package/dist/chunks/studio-5jy81t3s.js +17463 -0
- package/dist/chunks/studio-5rt7sqa0.js +1168 -0
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-eenfkt4e.js → studio-79y5sz51.js} +52 -38
- package/dist/chunks/{studio-4q0wznzf.js → studio-7e11jpa9.js} +461 -145
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xptrg0j.js +954 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-81390n6f.js} +22 -22
- package/dist/chunks/{studio-q43a5y9h.js → studio-8jn5yhyn.js} +16 -16
- package/dist/chunks/studio-8qtrpzr3.js +839 -0
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-9xxz1q69.js +1356 -0
- package/dist/chunks/studio-akbww0j5.js +13615 -0
- package/dist/chunks/studio-arfpe389.js +195 -0
- package/dist/chunks/{studio-2zkz8evn.js → studio-az3zd49t.js} +473 -281
- package/dist/chunks/studio-cpvb2ed1.js +1171 -0
- package/dist/chunks/{studio-9r6j5ev1.js → studio-d0300636.js} +5078 -19
- package/dist/chunks/{studio-bgxt93ga.js → studio-d055c37e.js} +13 -13
- package/dist/chunks/studio-d1ja2x9r.js +362 -0
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/{studio-4pqqxbrt.js → studio-em9nw8eh.js} +301 -112
- package/dist/chunks/studio-erdatzvp.js +1190 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/studio-fabxk6r9.js +2811 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/studio-hhvs4sdg.js +195 -0
- package/dist/chunks/{studio-68n67094.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/studio-pm6hgy7r.js +4763 -0
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/studio-qahxvnan.js +111 -0
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-kjjsjak4.js → studio-rkstz940.js} +3661 -6136
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rpyah2ew.js +2805 -0
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/{studio-yxrkyv8a.js → studio-s6z853aq.js} +12108 -11766
- package/dist/chunks/{studio-sf7zjgv1.js → studio-sgdc5pfc.js} +8 -8
- package/dist/chunks/studio-tb3ev01j.js +763 -0
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-htsf0w6m.js → studio-vz68yn9e.js} +31 -154
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/{studio-eesa1myv.js → studio-x3rty6tr.js} +58 -58
- package/dist/chunks/studio-xsykpvsh.js +8448 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-wrew8zk4.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1812 -698
- package/dist/manifest.json +7 -0
- package/dist/studio.js +52900 -36573
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/favicon.ico +0 -0
- package/index.html +2 -0
- package/package.json +22 -55
- package/src/about/about-modal.ts +73 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +310 -117
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +369 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +165 -8
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +65 -26
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +949 -664
- package/src/files/json-layout.ts +474 -0
- package/src/files/media-paths.ts +13 -42
- package/src/files/media-usage.ts +41 -131
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/document.ts +2 -0
- package/src/hosting/layout.ts +10 -0
- package/src/i18n/i18n-commands.ts +127 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +201 -250
- package/src/new-project/location-fields.ts +101 -165
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -153
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +210 -185
- package/src/panels/block-action-bar.ts +437 -643
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +153 -133
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +174 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +177 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +217 -172
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +109 -646
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +385 -287
- package/src/platforms/cloud.ts +347 -86
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +165 -299
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +468 -0
- package/src/services/ai-import-tools.ts +50 -12
- package/src/services/ai-models.ts +108 -1
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +110 -18
- package/src/services/ai-tools.ts +28 -143
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/context-manager.ts +12 -1
- package/src/services/document-assistant.ts +50 -2
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +17 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +193 -12
- package/src/settings/preferences-dialog.ts +384 -307
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +90 -67
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +984 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +414 -389
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +163 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +71 -15
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +49 -3
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +116 -49
- package/src/ui/ai-model-picker.ts +102 -47
- package/src/ui/cf-account-picker.ts +135 -0
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +293 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +15 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1532
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-723bv0df.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-t88vb2dr.js +0 -49
- package/dist/chunks/convert-to-repeater-dhw1nrz9.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-6z6bhxg0.js +0 -46
- package/dist/chunks/extension-sections-3ydgjbdy.js +0 -311
- package/dist/chunks/file-ops-rskmhxyq.js +0 -48
- package/dist/chunks/files-0cratsr0.js +0 -92
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-ggawf1hy.js +0 -1024
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-tgcmfs4p.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-0yywyk76.js +0 -58
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8q2g05x1.js +0 -19
- package/dist/chunks/layers-panel-z3tqe5cd.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-54jvhskq.js +0 -28
- package/dist/chunks/quick-search-cgfmjwq5.js +0 -65
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-cqp8bc4v.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-yztmtrs1.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-xcvpnqr0.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1hbqnt19.js +0 -1823
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5rywrkxz.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-9c4k4vhv.js +0 -357
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahjfdy6e.js +0 -387
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-bw5dz6km.js +0 -608
- package/dist/chunks/studio-cb12yz9w.js +0 -15055
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ex8zyp98.js +0 -1813
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-kyk2v92a.js +0 -659
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mmv72a27.js +0 -4344
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-pdfjntbk.js +0 -6939
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-r1r7afxx.js +0 -1066
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-txwkm6p9.js +0 -12
- package/dist/chunks/studio-v38hmvx1.js +0 -390
- package/dist/chunks/studio-vadzgkrz.js +0 -318
- package/dist/chunks/studio-wx5609xd.js +0 -341
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/workspace-xpres40v.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
/// <reference lib="dom" />
|
|
2
1
|
/**
|
|
3
|
-
* The Library's five layouts.
|
|
2
|
+
* The Library's five layouts, as geometry and projections rather than as markup.
|
|
4
3
|
*
|
|
5
4
|
* All five draw the SAME rows — one scan, one filter — so switching layout is a repaint, never a
|
|
6
5
|
* re-read. What differs is the geometry, and the geometry is data ({@link LAYOUT_METRICS}) rather
|
|
@@ -11,20 +10,21 @@
|
|
|
11
10
|
* **Two of them are grouped, and grouped lists are bounded differently.** Table, Cards and Media
|
|
12
11
|
* are flat and uniform, so they window. Calendar and Board are grouped, and a window over a grouped
|
|
13
12
|
* list either breaks the groups or needs variable-height measurement; both draw text only (no live
|
|
14
|
-
* preview, so an item costs
|
|
13
|
+
* preview, so an item costs one `<li>`), and each caps what it draws and SAYS what it left out. A
|
|
15
14
|
* layout that silently truncated would be the same class of lie as "No files found".
|
|
15
|
+
*
|
|
16
|
+
* The markup itself is `surfaces/library-pane.json`. What is left here is what a document cannot
|
|
17
|
+
* express: how tall a row is, how many fit across, how many a group may draw, and what a file's
|
|
18
|
+
* fields say once they are text.
|
|
16
19
|
*/
|
|
17
20
|
|
|
18
|
-
import { html, nothing } from "lit-html";
|
|
19
|
-
import { repeat } from "lit-html/directives/repeat.js";
|
|
20
|
-
import { ref } from "lit-html/directives/ref.js";
|
|
21
21
|
import { isImage } from "../files/media-upload";
|
|
22
22
|
import { previewFileSrc } from "../files/media-paths";
|
|
23
23
|
import { localeLabel } from "@jxsuite/schema/locale";
|
|
24
24
|
import { groupByCategory, groupByDate } from "./library-model";
|
|
25
25
|
import type { LibraryFile, LibraryLayout } from "./library-model";
|
|
26
26
|
import type { GridColumn, GridCellValue } from "../grid/grid-source";
|
|
27
|
-
import type {
|
|
27
|
+
import type { LibraryGroup, LibraryRow } from "../surfaces/library-pane";
|
|
28
28
|
|
|
29
29
|
/** The geometry a layout scrolls at. `itemWidth` of 0 means one item per row. */
|
|
30
30
|
export interface LayoutMetric {
|
|
@@ -39,9 +39,9 @@ export interface LayoutMetric {
|
|
|
39
39
|
/**
|
|
40
40
|
* Per-layout geometry.
|
|
41
41
|
*
|
|
42
|
-
* These are nominal sizes that must match
|
|
43
|
-
* purpose: the window's job is to keep the rendered count proportional to the
|
|
44
|
-
* one row out costs one row of overscan, not correctness.
|
|
42
|
+
* These are nominal sizes that must match the Library surface's own style block. They are
|
|
43
|
+
* approximate on purpose: the window's job is to keep the rendered count proportional to the
|
|
44
|
+
* viewport, and being one row out costs one row of overscan, not correctness.
|
|
45
45
|
*/
|
|
46
46
|
export const LAYOUT_METRICS: Readonly<Record<LibraryLayout, LayoutMetric>> = {
|
|
47
47
|
board: { itemWidth: 0, rowHeight: 0, windowed: false },
|
|
@@ -66,20 +66,6 @@ export function columnsAt(layout: LibraryLayout, width: number): number {
|
|
|
66
66
|
return Math.max(1, Math.floor(width / metric.itemWidth));
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
// ─── What a layout is handed ─────────────────────────────────────────────────
|
|
70
|
-
|
|
71
|
-
export interface LayoutContext {
|
|
72
|
-
/** The source's columns — the Table layout's headers and cell order come from the GridSource. */
|
|
73
|
-
columns: readonly GridColumn[];
|
|
74
|
-
openFile: (path: string) => void;
|
|
75
|
-
contextMenu: (event: MouseEvent, file: LibraryFile) => void;
|
|
76
|
-
/**
|
|
77
|
-
* Register a card's preview slot for lazy mounting. Called from a lit `ref`, so it receives
|
|
78
|
-
* `undefined` on unmount and must tolerate it.
|
|
79
|
-
*/
|
|
80
|
-
mountPreview: (element: Element | undefined, file: LibraryFile) => void;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
69
|
// ─── Cell text ───────────────────────────────────────────────────────────────
|
|
84
70
|
|
|
85
71
|
/** Bytes as a short human string. `null` when the platform did not report a size. */
|
|
@@ -146,138 +132,42 @@ export function cellTextOf(value: GridCellValue): string {
|
|
|
146
132
|
return value === null || value === undefined ? "" : String(value);
|
|
147
133
|
}
|
|
148
134
|
|
|
149
|
-
// ───
|
|
135
|
+
// ─── Rows ────────────────────────────────────────────────────────────────────
|
|
150
136
|
|
|
151
|
-
/**
|
|
152
|
-
|
|
153
|
-
if (isImage(file.ext)) {
|
|
154
|
-
return html`<img
|
|
155
|
-
class="library-thumb"
|
|
156
|
-
loading="lazy"
|
|
157
|
-
src=${previewFileSrc(file.path)}
|
|
158
|
-
alt=""
|
|
159
|
-
/>`;
|
|
160
|
-
}
|
|
161
|
-
const previewable =
|
|
162
|
-
file.category === "Components" ||
|
|
163
|
-
file.category === "Pages" ||
|
|
164
|
-
file.category === "Layouts" ||
|
|
165
|
-
file.category === "Content";
|
|
166
|
-
if (!previewable) {
|
|
167
|
-
return html`<sp-icon-document size="xl"></sp-icon-document>`;
|
|
168
|
-
}
|
|
169
|
-
return html`<div
|
|
170
|
-
class="library-preview-slot"
|
|
171
|
-
${ref((element) => ctx.mountPreview(element, file))}
|
|
172
|
-
></div>`;
|
|
173
|
-
}
|
|
137
|
+
/** The four categories whose files are documents the runtime can render a preview of. */
|
|
138
|
+
const PREVIEWABLE = new Set(["Components", "Content", "Layouts", "Pages"]);
|
|
174
139
|
|
|
175
|
-
/**
|
|
176
|
-
|
|
140
|
+
/**
|
|
141
|
+
* One file, as the surface reads it.
|
|
142
|
+
*
|
|
143
|
+
* `live` is whether this layout may draw a real document render at all: Cards may, Media never
|
|
144
|
+
* does. Getting that from the caller rather than from the file is what keeps a tile cheap — a
|
|
145
|
+
* thumbnail of an asset is an `<img>`, and a live runtime render inside one is the whole cost the
|
|
146
|
+
* Media layout exists to avoid.
|
|
147
|
+
*
|
|
148
|
+
* @param file The scanned file.
|
|
149
|
+
* @param columns The Table's columns, from the grid source. Empty for a layout with no cells.
|
|
150
|
+
* @param live Whether a previewable document may claim the `doc` island.
|
|
151
|
+
*/
|
|
152
|
+
export function libraryRow(
|
|
153
|
+
file: LibraryFile,
|
|
154
|
+
columns: readonly GridColumn[],
|
|
155
|
+
live: boolean,
|
|
156
|
+
): LibraryRow {
|
|
157
|
+
const image = isImage(file.ext);
|
|
177
158
|
return {
|
|
178
|
-
|
|
179
|
-
|
|
159
|
+
art: image ? "image" : live && PREVIEWABLE.has(file.category) ? "doc" : "glyph",
|
|
160
|
+
cells: columns.map((column) => ({ field: column.field, text: cellText(file, column.field) })),
|
|
161
|
+
meta: file.type,
|
|
162
|
+
name: file.name,
|
|
163
|
+
path: file.path,
|
|
164
|
+
src: image ? previewFileSrc(file.path) : "",
|
|
180
165
|
};
|
|
181
166
|
}
|
|
182
167
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
export function tableHeadTpl(columns: readonly GridColumn[]): TemplateResult {
|
|
187
|
-
return html`<div class="library-table-head" role="row">
|
|
188
|
-
${columns.map(
|
|
189
|
-
(column) =>
|
|
190
|
-
html`<div class="library-table-cell" role="columnheader" data-field=${column.field}>
|
|
191
|
-
${column.title}
|
|
192
|
-
</div>`,
|
|
193
|
-
)}
|
|
194
|
-
</div>`;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/** The windowed slice of table rows. */
|
|
198
|
-
export function tableRowsTpl(
|
|
199
|
-
files: readonly LibraryFile[],
|
|
200
|
-
ctx: LayoutContext,
|
|
201
|
-
): TemplateResult | typeof nothing {
|
|
202
|
-
if (files.length === 0) {
|
|
203
|
-
return nothing;
|
|
204
|
-
}
|
|
205
|
-
return html`${repeat(
|
|
206
|
-
files,
|
|
207
|
-
(file) => file.path,
|
|
208
|
-
(file) => {
|
|
209
|
-
const attrs = itemAttrs(file, ctx);
|
|
210
|
-
return html`<div
|
|
211
|
-
class="library-table-row"
|
|
212
|
-
role="row"
|
|
213
|
-
data-path=${file.path}
|
|
214
|
-
@click=${attrs.open}
|
|
215
|
-
@contextmenu=${attrs.contextmenu}
|
|
216
|
-
>
|
|
217
|
-
${ctx.columns.map(
|
|
218
|
-
(column) =>
|
|
219
|
-
html`<div class="library-table-cell" role="cell" data-field=${column.field}>
|
|
220
|
-
${cellText(file, column.field)}
|
|
221
|
-
</div>`,
|
|
222
|
-
)}
|
|
223
|
-
</div>`;
|
|
224
|
-
},
|
|
225
|
-
)}`;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// ─── Cards and Media ─────────────────────────────────────────────────────────
|
|
229
|
-
|
|
230
|
-
/** Cards: a preview, a name, and the category beneath it. */
|
|
231
|
-
export function cardsTpl(files: readonly LibraryFile[], ctx: LayoutContext): TemplateResult {
|
|
232
|
-
return html`${repeat(
|
|
233
|
-
files,
|
|
234
|
-
(file) => file.path,
|
|
235
|
-
(file) => {
|
|
236
|
-
const attrs = itemAttrs(file, ctx);
|
|
237
|
-
return html`<div
|
|
238
|
-
class="library-card"
|
|
239
|
-
data-path=${file.path}
|
|
240
|
-
@click=${attrs.open}
|
|
241
|
-
@contextmenu=${attrs.contextmenu}
|
|
242
|
-
>
|
|
243
|
-
<div class="library-card-preview">${previewTpl(file, ctx)}</div>
|
|
244
|
-
<div class="library-card-label" title=${file.path}>${file.name}</div>
|
|
245
|
-
<div class="library-card-meta">${file.type}</div>
|
|
246
|
-
</div>`;
|
|
247
|
-
},
|
|
248
|
-
)}`;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/** Media: tighter tiles, image-first, no live document renders at all. */
|
|
252
|
-
export function mediaTpl(files: readonly LibraryFile[], ctx: LayoutContext): TemplateResult {
|
|
253
|
-
return html`${repeat(
|
|
254
|
-
files,
|
|
255
|
-
(file) => file.path,
|
|
256
|
-
(file) => {
|
|
257
|
-
const attrs = itemAttrs(file, ctx);
|
|
258
|
-
return html`<div
|
|
259
|
-
class="library-tile"
|
|
260
|
-
data-path=${file.path}
|
|
261
|
-
title=${file.path}
|
|
262
|
-
@click=${attrs.open}
|
|
263
|
-
@contextmenu=${attrs.contextmenu}
|
|
264
|
-
>
|
|
265
|
-
<div class="library-tile-preview">
|
|
266
|
-
${
|
|
267
|
-
isImage(file.ext)
|
|
268
|
-
? html`<img
|
|
269
|
-
class="library-thumb"
|
|
270
|
-
loading="lazy"
|
|
271
|
-
src=${previewFileSrc(file.path)}
|
|
272
|
-
alt=""
|
|
273
|
-
/>`
|
|
274
|
-
: html`<sp-icon-document size="l"></sp-icon-document>`
|
|
275
|
-
}
|
|
276
|
-
</div>
|
|
277
|
-
<div class="library-tile-label">${file.name}</div>
|
|
278
|
-
</div>`;
|
|
279
|
-
},
|
|
280
|
-
)}`;
|
|
168
|
+
/** The text-only row both grouped layouts draw: a name, and the path it opens. */
|
|
169
|
+
function nameRow(file: LibraryFile): LibraryRow {
|
|
170
|
+
return { art: "glyph", cells: [], meta: file.type, name: file.name, path: file.path, src: "" };
|
|
281
171
|
}
|
|
282
172
|
|
|
283
173
|
// ─── Calendar ────────────────────────────────────────────────────────────────
|
|
@@ -288,82 +178,61 @@ export function mediaTpl(files: readonly LibraryFile[], ctx: LayoutContext): Tem
|
|
|
288
178
|
* A file's day comes from a `YYYY-MM-DD` filename prefix or the filesystem's mtime — never from
|
|
289
179
|
* "now". Files with neither are listed under "No date" rather than parked on today, because a
|
|
290
180
|
* calendar that invents dates is worse than one that admits it cannot place a file.
|
|
181
|
+
*
|
|
182
|
+
* @returns The day sections, and the sentence naming the older days it did not draw.
|
|
291
183
|
*/
|
|
292
|
-
export function
|
|
184
|
+
export function calendarView(files: readonly LibraryFile[]): {
|
|
185
|
+
groups: LibraryGroup[];
|
|
186
|
+
truncated: string;
|
|
187
|
+
} {
|
|
293
188
|
const { days, undated } = groupByDate(files);
|
|
294
189
|
const shown = days.slice(0, CALENDAR_DAY_LIMIT);
|
|
295
190
|
const hiddenDays = days.length - shown.length;
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
191
|
+
const groups: LibraryGroup[] = shown.map((day) => ({
|
|
192
|
+
count: "",
|
|
193
|
+
files: day.files.map((file) => nameRow(file)),
|
|
194
|
+
id: day.date,
|
|
195
|
+
note: "",
|
|
196
|
+
noteState: "hidden",
|
|
197
|
+
title: day.date,
|
|
198
|
+
undated: "false",
|
|
199
|
+
}));
|
|
200
|
+
if (undated.length > 0) {
|
|
201
|
+
groups.push({
|
|
202
|
+
count: "",
|
|
203
|
+
files: undated.slice(0, BOARD_COLUMN_LIMIT).map((file) => nameRow(file)),
|
|
204
|
+
/* Not a date, and it must never collide with one: the section's identity is what keeps its
|
|
205
|
+
node across a repaint, and a day is always `YYYY-MM-DD`, so a leading underscore pair cannot be one. */
|
|
206
|
+
id: "__undated",
|
|
207
|
+
note: `${undated.length} file${undated.length === 1 ? "" : "s"} with no dated name and no modification time.`,
|
|
208
|
+
noteState: "shown",
|
|
209
|
+
title: "No date",
|
|
210
|
+
undated: "true",
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
groups,
|
|
215
|
+
truncated:
|
|
304
216
|
hiddenDays > 0
|
|
305
|
-
?
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
</p>`
|
|
309
|
-
: nothing
|
|
310
|
-
}
|
|
311
|
-
${
|
|
312
|
-
undated.length > 0
|
|
313
|
-
? html`<section class="library-day library-day-undated">
|
|
314
|
-
<h3 class="library-day-date">No date</h3>
|
|
315
|
-
<p class="library-day-note">
|
|
316
|
-
${undated.length} file${undated.length === 1 ? "" : "s"} with no dated name and no
|
|
317
|
-
modification time.
|
|
318
|
-
</p>
|
|
319
|
-
${listTpl(undated.slice(0, BOARD_COLUMN_LIMIT), ctx)}
|
|
320
|
-
</section>`
|
|
321
|
-
: nothing
|
|
322
|
-
}
|
|
323
|
-
</div>`;
|
|
217
|
+
? `${hiddenDays} older ${hiddenDays === 1 ? "day is" : "days are"} not shown — filter, or switch to Table.`
|
|
218
|
+
: "",
|
|
219
|
+
};
|
|
324
220
|
}
|
|
325
221
|
|
|
326
222
|
// ─── Board ───────────────────────────────────────────────────────────────────
|
|
327
223
|
|
|
328
224
|
/** Board: one column per category present, each capped and each stating its own total. */
|
|
329
|
-
export function
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
: nothing
|
|
343
|
-
}
|
|
344
|
-
</section>`;
|
|
345
|
-
})}
|
|
346
|
-
</div>`;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
/** The plain name list both grouped layouts draw. Text only: a group must stay cheap. */
|
|
350
|
-
function listTpl(files: readonly LibraryFile[], ctx: LayoutContext): TemplateResult {
|
|
351
|
-
return html`<ul class="library-list">
|
|
352
|
-
${repeat(
|
|
353
|
-
files,
|
|
354
|
-
(file) => file.path,
|
|
355
|
-
(file) => {
|
|
356
|
-
const attrs = itemAttrs(file, ctx);
|
|
357
|
-
return html`<li
|
|
358
|
-
class="library-list-item"
|
|
359
|
-
data-path=${file.path}
|
|
360
|
-
title=${file.path}
|
|
361
|
-
@click=${attrs.open}
|
|
362
|
-
@contextmenu=${attrs.contextmenu}
|
|
363
|
-
>
|
|
364
|
-
${file.name}
|
|
365
|
-
</li>`;
|
|
366
|
-
},
|
|
367
|
-
)}
|
|
368
|
-
</ul>`;
|
|
225
|
+
export function boardView(files: readonly LibraryFile[]): LibraryGroup[] {
|
|
226
|
+
return groupByCategory(files).map((group) => {
|
|
227
|
+
const hidden = group.files.length - BOARD_COLUMN_LIMIT;
|
|
228
|
+
return {
|
|
229
|
+
count: String(group.files.length),
|
|
230
|
+
files: group.files.slice(0, BOARD_COLUMN_LIMIT).map((file) => nameRow(file)),
|
|
231
|
+
id: group.group,
|
|
232
|
+
note: hidden > 0 ? `${hidden} more — switch to Table to see them.` : "",
|
|
233
|
+
noteState: hidden > 0 ? "shown" : "hidden",
|
|
234
|
+
title: group.group,
|
|
235
|
+
undated: "false",
|
|
236
|
+
};
|
|
237
|
+
});
|
|
369
238
|
}
|