@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
package/src/ui/color-selector.ts
CHANGED
|
@@ -1,330 +1,109 @@
|
|
|
1
|
-
/// <reference lib="dom" />
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
2
|
+
* The project's colour tokens, as a projection.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* This module used to be a CONTROL — a swatch, a text field and an `sp-overlay` holding an
|
|
5
|
+
* `sp-color-area`, an `sp-color-slider` and an `sp-swatch-group` — because `specs/ui.md` §5.6 was
|
|
6
|
+
* Pending and there was no colour element in the kit to draw a colour row with. It was the last
|
|
7
|
+
* Spectrum surface in Studio, and the island `studio-ui-guidelines.md` §9.4 describes: the Style
|
|
8
|
+
* tab and the Content tab each drew an empty `[part="control-host"]` and this filled it with lit.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* §5.6 landed, so the control is `jx-color-field` and both tabs draw it inline in their own
|
|
11
|
+
* documents. What no kit element can answer is what is LEFT here: which colours this project has
|
|
12
|
+
* given a name to. That is a question about the document being edited — the `--color-*` custom
|
|
13
|
+
* properties of the effective style, site and document together — and it is Studio's to answer.
|
|
14
|
+
*
|
|
15
|
+
* A token is projected as three separate things on purpose, because they are three:
|
|
16
|
+
*
|
|
17
|
+
* - `value` is what choosing it COMMITS, and it is the reference (`var(--color-accent)`) rather than
|
|
18
|
+
* the colour behind it. Committing the literal would resolve the token at the moment of the click
|
|
19
|
+
* and quietly opt that one declaration out of the palette for ever.
|
|
20
|
+
* - `color` is how the chip LOOKS, which is the literal, and is not what the swatch means.
|
|
21
|
+
* - `label` is the word a reader would use. A colour is not a name: `jx-swatch` announces its own
|
|
22
|
+
* `value` when it is given no label, and "var(--color-primary-blue)" read one character at a time
|
|
23
|
+
* is a name in the same sense that a licence plate is.
|
|
24
|
+
*
|
|
25
|
+
* @docs studio/design/style-inspector
|
|
12
26
|
*/
|
|
13
27
|
|
|
14
|
-
import { LitElement, html, nothing } from "lit";
|
|
15
|
-
import { html as litHtml } from "lit-html";
|
|
16
|
-
import { live } from "lit-html/directives/live.js";
|
|
17
|
-
import { debouncedStyleCommit } from "../store";
|
|
18
28
|
import { activeTab } from "../workspace/workspace";
|
|
19
29
|
import { getEffectiveStyle } from "../site-context";
|
|
30
|
+
import { resolveTokenValue, tokenRefName } from "../style/token-ref";
|
|
20
31
|
import { kebabToLabel } from "../utils/studio-utils";
|
|
21
32
|
|
|
22
|
-
|
|
23
|
-
|
|
33
|
+
/**
|
|
34
|
+
* One colour the project has named, as a swatch reads it.
|
|
35
|
+
*
|
|
36
|
+
* `Record<string, unknown>` because it is a `$map` item: a repeater's scope is a record, and a
|
|
37
|
+
* shape that is not one cannot be read through `$map/item/...`.
|
|
38
|
+
*/
|
|
39
|
+
export interface ColorTokenView extends Record<string, unknown> {
|
|
40
|
+
/** What choosing this swatch commits — the reference, never the literal behind it. */
|
|
24
41
|
value: string;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/** Extract --color-* CSS custom properties from the effective (site + document) style. */
|
|
30
|
-
function getColorVars() {
|
|
31
|
-
const style = getEffectiveStyle(activeTab.value?.doc.document?.style);
|
|
32
|
-
if (!style) {
|
|
33
|
-
return [];
|
|
34
|
-
}
|
|
35
|
-
const vars = [];
|
|
36
|
-
for (const [k, v] of Object.entries(style)) {
|
|
37
|
-
if (k.startsWith("--color") && (typeof v === "string" || typeof v === "number")) {
|
|
38
|
-
vars.push({ name: k, value: String(v) });
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return vars;
|
|
42
|
+
/** The chip's colour: how the token looks, which is not what it means. */
|
|
43
|
+
color: string;
|
|
44
|
+
/** The token's name, title-cased — "Primary Blue" — and the swatch's accessible name. */
|
|
45
|
+
label: string;
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
/**
|
|
45
|
-
* Convert a
|
|
46
|
-
*
|
|
49
|
+
* Convert a colour variable's name to a title-case label.
|
|
50
|
+
*
|
|
51
|
+
* Strips the `--color-` prefix and converts kebab to title case, so `--color-primary-blue` becomes
|
|
52
|
+
* "Primary Blue". A token named `--color` alone has nothing left after the prefix, and falls back
|
|
53
|
+
* to its own name rather than announcing itself as the empty string.
|
|
54
|
+
*
|
|
55
|
+
* @param {string} name The custom property's name, with its leading dashes.
|
|
56
|
+
* @returns {string}
|
|
47
57
|
*/
|
|
48
|
-
function varToLabel(name: string) {
|
|
49
|
-
return kebabToLabel(name.replace(/^--color-?/, ""));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/** Resolve a color value for display — if it's a var() reference, look up the actual color. */
|
|
53
|
-
function resolveColorForDisplay(val: string | number | undefined) {
|
|
54
|
-
if (!val) {
|
|
55
|
-
return "transparent";
|
|
56
|
-
}
|
|
57
|
-
const s = String(val);
|
|
58
|
-
const m = s.match(/^var\((--[^)]+)\)$/);
|
|
59
|
-
if (m) {
|
|
60
|
-
const style = getEffectiveStyle(activeTab.value?.doc.document?.style);
|
|
61
|
-
const resolved = style?.[m[1]!];
|
|
62
|
-
if (typeof resolved === "string") {
|
|
63
|
-
return resolved;
|
|
64
|
-
}
|
|
65
|
-
return "transparent";
|
|
66
|
-
}
|
|
67
|
-
return s;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function safeColor(val: string | number | undefined) {
|
|
71
|
-
if (!val) {
|
|
72
|
-
return "transparent";
|
|
73
|
-
}
|
|
74
|
-
return resolveColorForDisplay(val);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/** Normalize a color string to include # prefix for hex values. */
|
|
78
|
-
function normalizeHex(c: string) {
|
|
79
|
-
if (!c) {
|
|
80
|
-
return c;
|
|
81
|
-
}
|
|
82
|
-
if (c.startsWith("var(") || c.startsWith("rgb") || c.startsWith("hsl")) {
|
|
83
|
-
return c;
|
|
84
|
-
}
|
|
85
|
-
return c.replace(/^#?/, "#");
|
|
58
|
+
function varToLabel(name: string): string {
|
|
59
|
+
return kebabToLabel(name.replace(/^--color-?/, "")) || name;
|
|
86
60
|
}
|
|
87
61
|
|
|
88
62
|
/**
|
|
89
|
-
*
|
|
63
|
+
* The `--color-*` custom properties of the effective (site + document) style, in the order they are
|
|
64
|
+
* written.
|
|
65
|
+
*
|
|
66
|
+
* Only scalars are taken. A custom property whose value is an object is a nested rule rather than a
|
|
67
|
+
* colour, and a swatch drawn from one would be a chip of nothing labelled with a name that commits
|
|
68
|
+
* a reference to something that is not a colour.
|
|
90
69
|
*
|
|
91
|
-
* @
|
|
92
|
-
* @param {{ name: string; value: string }[]} colorVars
|
|
70
|
+
* @returns {ColorTokenView[]} The palette, empty when the document defines no colours.
|
|
93
71
|
*/
|
|
94
|
-
function
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
return colorVars.find((cv) => cv.name === m[1]) || null;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// ─── JxColorPopover LitElement ──────────────────────────────────────────────
|
|
109
|
-
|
|
110
|
-
export class JxColorPopover extends LitElement {
|
|
111
|
-
static override properties = {
|
|
112
|
-
color: { type: String },
|
|
113
|
-
colorVars: { attribute: false },
|
|
114
|
-
displayColor: { attribute: false, type: String },
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
declare color: string;
|
|
118
|
-
declare displayColor: string;
|
|
119
|
-
declare colorVars: ColorVar[];
|
|
120
|
-
|
|
121
|
-
constructor() {
|
|
122
|
-
super();
|
|
123
|
-
this.color = "";
|
|
124
|
-
this.displayColor = "#000000";
|
|
125
|
-
this.colorVars = [];
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/** No shadow DOM — render directly into light DOM for Spectrum theming */
|
|
129
|
-
override createRenderRoot() {
|
|
130
|
-
return this;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/** @param {Map<string, unknown>} changed */
|
|
134
|
-
override willUpdate(changed: Map<string, unknown>) {
|
|
135
|
-
if (changed.has("color")) {
|
|
136
|
-
const raw = resolveColorForDisplay(this.color);
|
|
137
|
-
if (!raw || raw === "transparent") {
|
|
138
|
-
this.displayColor = "#000000";
|
|
139
|
-
} else if (raw.startsWith("#") || raw.startsWith("rgb") || raw.startsWith("hsl")) {
|
|
140
|
-
this.displayColor = raw;
|
|
141
|
-
} else {
|
|
142
|
-
this.displayColor = `#${raw}`;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
_handleArea(e: Event) {
|
|
148
|
-
const color = normalizeHex(String((e.target as HTMLElement & { color: string }).color));
|
|
149
|
-
this.displayColor = color;
|
|
150
|
-
this.color = color;
|
|
151
|
-
this.dispatchEvent(new CustomEvent("color-change", { bubbles: true, detail: color }));
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
_handleSlider(e: Event) {
|
|
155
|
-
const color = normalizeHex(String((e.target as HTMLElement & { color: string }).color));
|
|
156
|
-
this.displayColor = color;
|
|
157
|
-
this.color = color;
|
|
158
|
-
this.dispatchEvent(new CustomEvent("color-change", { bubbles: true, detail: color }));
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
_handleText(e: Event) {
|
|
162
|
-
const val = (e.target as HTMLInputElement).value.trim();
|
|
163
|
-
if (!val) {
|
|
164
|
-
return;
|
|
72
|
+
export function colorTokens(): ColorTokenView[] {
|
|
73
|
+
/* `getEffectiveStyle` answers with an object whatever it is given — the site's, the document's,
|
|
74
|
+
the two merged, or an empty one — so there is no absent case to guard, and the guard that used
|
|
75
|
+
to stand here was a branch no test could reach because nothing could produce it. */
|
|
76
|
+
const style = getEffectiveStyle(activeTab.value?.doc.document?.style);
|
|
77
|
+
const tokens: ColorTokenView[] = [];
|
|
78
|
+
for (const [name, value] of Object.entries(style)) {
|
|
79
|
+
if (name.startsWith("--color") && (typeof value === "string" || typeof value === "number")) {
|
|
80
|
+
tokens.push({ color: String(value), label: varToLabel(name), value: `var(${name})` });
|
|
165
81
|
}
|
|
166
|
-
this.displayColor = val;
|
|
167
|
-
this.color = val;
|
|
168
|
-
this.dispatchEvent(new CustomEvent("color-change", { bubbles: true, detail: val }));
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
_handleSwatch(e: Event, varName: string) {
|
|
172
|
-
e.stopPropagation();
|
|
173
|
-
const varRef = `var(${varName})`;
|
|
174
|
-
this.color = varRef;
|
|
175
|
-
this.dispatchEvent(new CustomEvent("color-change", { bubbles: true, detail: varRef }));
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
override render() {
|
|
179
|
-
return html`
|
|
180
|
-
<div class="color-popover-inner">
|
|
181
|
-
<sp-color-area
|
|
182
|
-
style="width:200px; height:150px; --mod-colorarea-width:200px; --mod-colorarea-height:150px"
|
|
183
|
-
.color=${this.displayColor}
|
|
184
|
-
@input=${this._handleArea}
|
|
185
|
-
></sp-color-area>
|
|
186
|
-
<sp-color-slider
|
|
187
|
-
style="width:200px; --mod-colorslider-length:200px"
|
|
188
|
-
.color=${this.displayColor}
|
|
189
|
-
@input=${this._handleSlider}
|
|
190
|
-
></sp-color-slider>
|
|
191
|
-
<sp-textfield
|
|
192
|
-
size="s"
|
|
193
|
-
style="width:200px"
|
|
194
|
-
.value=${live(this.color || "")}
|
|
195
|
-
placeholder="#000000"
|
|
196
|
-
@change=${this._handleText}
|
|
197
|
-
></sp-textfield>
|
|
198
|
-
${
|
|
199
|
-
this.colorVars.length > 0
|
|
200
|
-
? html`
|
|
201
|
-
<sp-divider size="s"></sp-divider>
|
|
202
|
-
<span class="color-popover-swatches-label">Color Tokens</span>
|
|
203
|
-
<sp-swatch-group size="xs" border="light" rounding="none">
|
|
204
|
-
${this.colorVars.map(
|
|
205
|
-
(cv) => html`
|
|
206
|
-
<sp-swatch
|
|
207
|
-
color=${cv.value}
|
|
208
|
-
.value=${cv.name}
|
|
209
|
-
title=${cv.name}
|
|
210
|
-
@click=${(e: Event) => this._handleSwatch(e, cv.name)}
|
|
211
|
-
></sp-swatch>
|
|
212
|
-
`,
|
|
213
|
-
)}
|
|
214
|
-
</sp-swatch-group>
|
|
215
|
-
`
|
|
216
|
-
: nothing
|
|
217
|
-
}
|
|
218
|
-
</div>
|
|
219
|
-
`;
|
|
220
82
|
}
|
|
83
|
+
return tokens;
|
|
221
84
|
}
|
|
222
85
|
|
|
223
|
-
// ─── Color input widget ─────────────────────────────────────────────────────
|
|
224
|
-
|
|
225
86
|
/**
|
|
226
|
-
*
|
|
227
|
-
*
|
|
87
|
+
* The literal behind a colour value that is a token reference, for a chip to draw.
|
|
88
|
+
*
|
|
89
|
+
* `var(--color-accent)` is a perfectly good value for the document being edited and nothing at all
|
|
90
|
+
* for the page drawing the Inspector: the token lives in the project's style, which the canvas
|
|
91
|
+
* iframe loads and Studio's own chrome never sees, so a `jx-color-field` handed the reference alone
|
|
92
|
+
* drew the no-colour checkerboard the moment a palette swatch was picked. This is the answer both
|
|
93
|
+
* tabs hand the field's `resolved` prop (ui.md §5.6): the chain followed through the effective
|
|
94
|
+
* style to the colour at its end.
|
|
228
95
|
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
96
|
+
* Empty for a literal, which draws itself, and for a reference the style cannot resolve — a token a
|
|
97
|
+
* stylesheet defines, or an alias loop — where the field's own fallback is the right one.
|
|
231
98
|
*
|
|
232
|
-
* @param {string}
|
|
233
|
-
* @
|
|
234
|
-
* @param {(color: string) => void} onChange — commit callback
|
|
235
|
-
* @returns {import("lit-html").TemplateResult}
|
|
99
|
+
* @param {string} value The row's value as the field holds it.
|
|
100
|
+
* @returns {string} The colour to draw, or the empty string.
|
|
236
101
|
*/
|
|
237
|
-
export function
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
/** @type {(color: string) => void} */ onChange: (color: string) => void,
|
|
241
|
-
) {
|
|
242
|
-
const colorVars = getColorVars();
|
|
243
|
-
const matchedVar = matchesColorVar(value, colorVars);
|
|
244
|
-
const triggerId = `color-trigger-${prop}`;
|
|
245
|
-
const pickerTriggerId = `color-picker-${prop}`;
|
|
246
|
-
|
|
247
|
-
// ─── Picker mode: value matches a defined color variable ───
|
|
248
|
-
if (matchedVar) {
|
|
249
|
-
return litHtml`
|
|
250
|
-
<div class="style-input-color">
|
|
251
|
-
<sp-swatch
|
|
252
|
-
size="s"
|
|
253
|
-
rounding="none"
|
|
254
|
-
border="light"
|
|
255
|
-
color=${matchedVar.value}
|
|
256
|
-
id=${triggerId}
|
|
257
|
-
></sp-swatch>
|
|
258
|
-
<sp-overlay trigger="${triggerId}@click" placement="bottom-start" type="auto">
|
|
259
|
-
<sp-popover style="padding:12px">
|
|
260
|
-
<jx-color-popover
|
|
261
|
-
.color=${value || ""}
|
|
262
|
-
.colorVars=${colorVars}
|
|
263
|
-
@color-change=${(e: CustomEvent) => onChange(e.detail as string)}
|
|
264
|
-
></jx-color-popover>
|
|
265
|
-
</sp-popover>
|
|
266
|
-
</sp-overlay>
|
|
267
|
-
<sp-picker
|
|
268
|
-
id=${pickerTriggerId}
|
|
269
|
-
size="s"
|
|
270
|
-
style="flex:1; min-width:0"
|
|
271
|
-
.value=${`var(${matchedVar.name})`}
|
|
272
|
-
@change=${(e: Event) => {
|
|
273
|
-
e.stopPropagation();
|
|
274
|
-
onChange((e.target as HTMLInputElement).value);
|
|
275
|
-
}}
|
|
276
|
-
>
|
|
277
|
-
${colorVars.map(
|
|
278
|
-
(cv) => litHtml`
|
|
279
|
-
<sp-menu-item value=${`var(${cv.name})`}>
|
|
280
|
-
<sp-swatch
|
|
281
|
-
slot="icon"
|
|
282
|
-
size="xs"
|
|
283
|
-
rounding="none"
|
|
284
|
-
border="light"
|
|
285
|
-
color=${cv.value}
|
|
286
|
-
></sp-swatch>
|
|
287
|
-
${varToLabel(cv.name)}
|
|
288
|
-
</sp-menu-item>
|
|
289
|
-
`,
|
|
290
|
-
)}
|
|
291
|
-
</sp-picker>
|
|
292
|
-
</div>
|
|
293
|
-
`;
|
|
102
|
+
export function resolvedColor(value: string): string {
|
|
103
|
+
if (tokenRefName(value) === null) {
|
|
104
|
+
return "";
|
|
294
105
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return
|
|
298
|
-
<div class="style-input-color" id=${triggerId}>
|
|
299
|
-
<sp-swatch
|
|
300
|
-
size="s"
|
|
301
|
-
rounding="none"
|
|
302
|
-
border="light"
|
|
303
|
-
color=${safeColor(value)}
|
|
304
|
-
></sp-swatch>
|
|
305
|
-
<sp-textfield
|
|
306
|
-
size="s"
|
|
307
|
-
style="flex:1; min-width:0"
|
|
308
|
-
.value=${live(value || "")}
|
|
309
|
-
@click=${(e: Event) => e.stopPropagation()}
|
|
310
|
-
@input=${debouncedStyleCommit(`color:${prop}`, 400, (e: Event) => {
|
|
311
|
-
onChange((e.target as HTMLInputElement).value.trim());
|
|
312
|
-
})}
|
|
313
|
-
></sp-textfield>
|
|
314
|
-
<sp-overlay trigger="${triggerId}@click" placement="bottom-start" type="auto">
|
|
315
|
-
<sp-popover style="padding:12px">
|
|
316
|
-
<jx-color-popover
|
|
317
|
-
.color=${value || ""}
|
|
318
|
-
.colorVars=${colorVars}
|
|
319
|
-
@color-change=${(e: CustomEvent) => onChange(e.detail as string)}
|
|
320
|
-
></jx-color-popover>
|
|
321
|
-
</sp-popover>
|
|
322
|
-
</sp-overlay>
|
|
323
|
-
</div>
|
|
324
|
-
`;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/** Whether any color popover is currently open. */
|
|
328
|
-
export function isColorPopoverOpen() {
|
|
329
|
-
return Boolean(document.querySelector(".style-input-color sp-overlay[open]"));
|
|
106
|
+
const style = getEffectiveStyle(activeTab.value?.doc.document?.style);
|
|
107
|
+
const resolved = resolveTokenValue(style, value);
|
|
108
|
+
return resolved === undefined ? "" : String(resolved);
|
|
330
109
|
}
|