@panphora/clayjs 1.20.0 → 1.22.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/dist/all.js +1 -1
- package/dist/clay-dom.js +1 -1
- package/dist/clay-events.js +1 -1
- package/dist/clay-internals.js +1 -1
- package/dist/clay-options.js +1 -1
- package/dist/clay-router.js +1 -1
- package/dist/clay-ui.js +1 -1
- package/dist/clay-utils.js +1 -1
- package/dist/clay.js +1 -1
- package/dist/clay.standalone.js +7865 -8022
- package/dist/m/{c-JOH753EJ.js → c-26KVJS6J.js} +1 -1
- package/dist/m/{c-ZE46QDIH.js → c-3TLG3OLG.js} +1 -1
- package/dist/m/{c-RT3C74GY.js → c-4OGEVKR3.js} +1 -1
- package/dist/m/{c-Y33LUUIQ.js → c-4PHDUV3H.js} +1 -1
- package/dist/m/{c-SJPD46ZO.js → c-4RFZROCF.js} +4 -4
- package/dist/m/{c-XQSXKIKM.js → c-4TWARTLS.js} +1 -1
- package/dist/m/{c-S5IEIZCN.js → c-5AQYL27I.js} +1 -1
- package/dist/m/{c-OJYM642Q.js → c-5FKRZNJV.js} +1 -1
- package/dist/m/{c-CJFDLD43.js → c-6KBKYLPO.js} +1 -1
- package/dist/m/{c-DHXPDLW6.js → c-6PBXRWDX.js} +1 -1
- package/dist/m/{c-BRLCTNMC.js → c-6RC66MYY.js} +1 -1
- package/dist/m/{c-PIVIYLTY.js → c-6UEFPHHE.js} +1 -1
- package/dist/m/{c-YQUJ74R3.js → c-BV6FQQXM.js} +1 -1
- package/dist/m/{c-YSB6JKV2.js → c-DEAFCHDO.js} +2 -2
- package/dist/m/{c-NLZ5AN4L.js → c-DKFSOJCV.js} +1 -1
- package/dist/m/c-DP4X4JID.js +1 -0
- package/dist/m/{c-LIBE4HPD.js → c-DZBZ57EE.js} +1 -1
- package/dist/m/c-ECY5AZMH.js +1 -0
- package/dist/m/{c-VAK7SG37.js → c-EUGJVHDD.js} +1 -1
- package/dist/m/{c-GPGYKER7.js → c-F5AER2ID.js} +1 -1
- package/dist/m/{c-RG6XUZFA.js → c-FAXQU7MQ.js} +1 -1
- package/dist/m/{c-XD5MOROJ.js → c-FLBUYV3P.js} +1 -1
- package/dist/m/{c-NFR673TL.js → c-FMCPQ4VT.js} +2 -2
- package/dist/m/{c-VBLFAQD2.js → c-FNIGX4FI.js} +1 -1
- package/dist/m/{c-BTLFLLML.js → c-FWFJUU3T.js} +1 -1
- package/dist/m/{c-2VB555FG.js → c-GPTKI7AQ.js} +1 -1
- package/dist/m/{c-EZ7B5AZT.js → c-GY4ODHO2.js} +1 -1
- package/dist/m/{c-5734MF2P.js → c-H6DXQEH2.js} +1 -1
- package/dist/m/{c-Z32V4MHK.js → c-HAVGDXAL.js} +1 -1
- package/dist/m/{c-D3E4WJ4M.js → c-HDWZEJHM.js} +49 -32
- package/dist/m/{c-W23KVGUO.js → c-HWR6GMGK.js} +1 -1
- package/dist/m/{c-BJ7YQ5QZ.js → c-IHUWUKIU.js} +1 -1
- package/dist/m/{c-AL4RBJF2.js → c-ILGQ3UXQ.js} +1 -1
- package/dist/m/{c-W3K23S72.js → c-IWTTOC2V.js} +1 -1
- package/dist/m/c-JFST6QE7.js +1 -0
- package/dist/m/{c-FNVQAACK.js → c-KE33W4RE.js} +1 -1
- package/dist/m/c-KV7R47FR.js +1 -0
- package/dist/m/{c-LPUJXRXW.js → c-L7K5EXU2.js} +1 -1
- package/dist/m/{c-3YH6JSIL.js → c-LF6HNVPU.js} +1 -1
- package/dist/m/{c-MIL4B2JQ.js → c-MRURHLKV.js} +1 -1
- package/dist/m/{c-LQU7TXIH.js → c-N33TPVTL.js} +1 -1
- package/dist/m/{c-EOCZ2YVL.js → c-NBNRLZXO.js} +1 -1
- package/dist/m/{c-JUE7B4OX.js → c-NLWEZYKJ.js} +1 -1
- package/dist/m/{c-DDDOKPI6.js → c-NNNR7OXA.js} +1 -1
- package/dist/m/{c-E4IBSAQM.js → c-OI2BYWVV.js} +1 -1
- package/dist/m/{c-SBSMJIPC.js → c-P3WATEDR.js} +1 -1
- package/dist/m/{c-ZJLU56DV.js → c-PCEMXY2K.js} +1 -1
- package/dist/m/{c-3GJ4XARY.js → c-PWBJVHA4.js} +1 -1
- package/dist/m/{c-67ILSNPR.js → c-Q5KAQJAG.js} +1 -1
- package/dist/m/{c-U5X57T4L.js → c-QHVCUTJV.js} +1 -1
- package/dist/m/{c-GKEATME6.js → c-QJFYVCJO.js} +1 -1
- package/dist/m/{c-VY6XRBOW.js → c-QTC6VGA4.js} +1 -1
- package/dist/m/{c-44B5ODN7.js → c-TMT5TL65.js} +2 -2
- package/dist/m/{c-OABVRYOT.js → c-TV7JHSRL.js} +1 -1
- package/dist/m/{c-SO63UGPQ.js → c-UWT4CXQ4.js} +1 -1
- package/dist/m/{c-EFD6QNTE.js → c-VFES2BP5.js} +1 -1
- package/dist/m/{c-UXEVJ63W.js → c-VIW5X35H.js} +1 -1
- package/dist/m/{c-EOCKLMKX.js → c-WWE67K5Y.js} +1 -1
- package/dist/m/{c-J3BXFTZS.js → c-XDVAZDUE.js} +1 -1
- package/dist/m/{c-K76AUL4I.js → c-XZJ5IK6Q.js} +1 -1
- package/dist/m/{c-2ZZBC45O.js → c-Z7RJANGO.js} +1 -1
- package/dist/m/{c-I2IFKJX2.js → c-ZAHTFCXQ.js} +1 -1
- package/dist/m/{c-GVPNDIKJ.js → c-ZKELCT4T.js} +1 -1
- package/dist/m/{c-7SXYQCN4.js → c-ZO6VL2SC.js} +1 -1
- package/dist/m/{c-M4FSPNQ2.js → c-ZYEJLZEY.js} +1 -1
- package/dist/m/core/{autosave-VPORYJSE.js → autosave-GI3WNJYN.js} +1 -1
- package/dist/m/core/{conflict-notice-JMAZLVRX.js → conflict-notice-CEI3XY6A.js} +1 -1
- package/dist/m/core/{save-AOJBDSOK.js → save-OJ5NSLS7.js} +1 -1
- package/dist/m/core/{save-core-IOCMXO5L.js → save-core-DX3RFVO3.js} +1 -1
- package/dist/m/core/{unsaved-warning-U5VUJFOE.js → unsaved-warning-HGYH7O4H.js} +1 -1
- package/dist/m/internals/{index-HDRANDWE.js → index-V4WC44FU.js} +1 -1
- package/dist/m/loader-V6VI46HU.js +1 -0
- package/dist/m/{manifest-3AEF5191.js → manifest-83C18DED.js} +1 -1
- package/dist/m/{manifest-edit-29A26F22.js → manifest-edit-B28C1985.js} +1 -1
- package/dist/m/manifest.json +567 -567
- package/dist/m/page/{editor-EY2WAAGB.js → editor-BQEPCJLG.js} +2 -2
- package/dist/m/plugins/ai-edit-45A2J6LC.js +6 -0
- package/dist/m/plugins/cms-IFTKWF4S.js +2235 -0
- package/dist/m/plugins/{derive-FRE5JJQE.js → derive-QVI3LI3A.js} +1 -1
- package/dist/m/plugins/{indicator-4VDXWYTD.js → indicator-IPZJ35K6.js} +1 -1
- package/dist/m/plugins/{live-5EZN2EYP.js → live-GPQXSXSM.js} +1 -1
- package/dist/m/plugins/menu-UN3KRCOF.js +1 -0
- package/dist/m/plugins/{page-LVW5DWA4.js → page-BAVLWCP6.js} +2 -2
- package/dist/m/plugins/{page-view-5KQ76IJB.js → page-view-P3UGJFDZ.js} +1 -1
- package/dist/m/plugins/{people-C7TVBBMR.js → people-Z4RGVQAV.js} +1 -1
- package/dist/m/plugins/{quickcrop-BQ5YYFCH.js → quickcrop-E34PUYA3.js} +2 -2
- package/dist/m/plugins/{richclay-KLGETK77.js → richclay-S4NVJYIK.js} +2 -2
- package/dist/m/plugins/{source-CCEUM3OR.js → source-KVN6YNTY.js} +1 -1
- package/dist/m/plugins/{upgrade-NW556WJD.js → upgrade-KTSICB22.js} +1 -1
- package/dist/m/plugins/{wire-VRYPY6EJ.js → wire-SYVIBNSE.js} +1 -1
- package/dist/m/{reader-core-2GXY7SHY.js → reader-core-RUIFH32Y.js} +2 -2
- package/dist/m/sync/{live-sync-SKPMFYOO.js → live-sync-RGQMMWK2.js} +1 -1
- package/dist/m/ui/{index-QNIPDHXQ.js → index-EZGLEM5P.js} +1 -1
- package/dist/m/vendor/{sap-core.vendor-RN4ZVY4X.js → sap-core.vendor-OA5SKL7Q.js} +1 -1
- package/dist/offline-manifest.json +463 -469
- package/docs/guide.md +16 -8
- package/entries/sap.js +1 -1
- package/package.json +2 -2
- package/src/loader-logic.js +4 -1
- package/src/plugins/ai-edit.js +6 -17
- package/src/plugins/cms.js +3 -6
- package/src/plugins/menu/style.js +59 -31
- package/src/plugins/menu.js +131 -28
- package/src/ui/bevel.js +1 -1
- package/src/ui/skins/cms.js +1 -1
- package/src/ui/skins/quickcrop.js +1 -1
- package/src/ui/skins/richclay.js +1 -1
- package/src/vendor/hypercms.vendor.js +16 -69
- package/src/vendor/sap-core.vendor.js +1 -1
- package/dist/m/c-FSWRGBVQ.js +0 -1
- package/dist/m/c-HMYWIHFG.js +0 -1
- package/dist/m/c-M6FNQCTQ.js +0 -1
- package/dist/m/c-WFMRX5RZ.js +0 -1
- package/dist/m/loader-DZZLUBVB.js +0 -1
- package/dist/m/plugins/ai-edit-J5VLSW5I.js +0 -6
- package/dist/m/plugins/cms-LRAOZHT7.js +0 -2293
- package/dist/m/plugins/menu-KGWKT6CS.js +0 -1
- package/src/ui/skins/cms-toggle.js +0 -15
- /package/dist/m/plugins/{quickcrop-BQ5YYFCH.js.LEGAL.txt → quickcrop-E34PUYA3.js.LEGAL.txt} +0 -0
- /package/dist/m/plugins/{richclay-KLGETK77.js.LEGAL.txt → richclay-S4NVJYIK.js.LEGAL.txt} +0 -0
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
// The surface and muted ink below, per scheme, for ui/page-colour.js's tint.
|
|
4
4
|
export const MENU_SURFACE = { light: [0xFF, 0xFC, 0xF6], dark: [0x1A, 0x1D, 0x2C], mutedLight: [0x6B, 0x59, 0x42], mutedDark: [0xA3, 0xA9, 0xC2] };
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// The parts of the look a page may replace, through <style clay-menu-skin="1">. Everything
|
|
7
|
+
// else below stays: layout, hidden, focus rings, touch targets and reduced motion.
|
|
8
|
+
export const MENU_BASE = `.clay-menu-dock, .clay-menu-spots, .clay-seo {
|
|
7
9
|
--bevel-font-sans: system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
8
10
|
--bevel-font-serif: Newsreader, Georgia, "Times New Roman", serif;
|
|
9
11
|
--bevel-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
@@ -40,19 +42,11 @@ export default `.clay-menu-dock, .clay-menu-spots, .clay-seo {
|
|
|
40
42
|
text-size-adjust: 100%;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
.clay-menu-dock { position:
|
|
45
|
-
.clay-menu-dock[data-corner$="left"] { right: auto; left: max(12px, env(safe-area-inset-left)); flex-direction: row-reverse; }
|
|
46
|
-
.clay-menu-dock[data-corner^="bottom"] { top: auto; bottom: max(12px, env(safe-area-inset-bottom)); }
|
|
45
|
+
.clay-menu-dock { display: flex; align-items: center; gap: 6px; font-size: 13px; line-height: 1.4; }
|
|
46
|
+
.clay-menu-dock[data-embedded] { position: relative; display: inline-flex; }
|
|
47
47
|
.clay-menu-dock[hidden], .clay-menu-spots[hidden], .clay-menu-dock [hidden], .clay-seo [hidden] { display: none !important; }
|
|
48
48
|
|
|
49
|
-
.clay-menu { box-sizing: border-box; display: inline-flex; align-items: center; gap: 2px;
|
|
50
|
-
.clay-menu-dock[data-dragging] .clay-menu { border-color: var(--bevel-brass); cursor: grabbing; }
|
|
51
|
-
|
|
52
|
-
.clay-menu-grip { position: relative; display: inline-grid; place-items: center; width: 18px; height: 28px; margin: 0; padding: 0; border: 0; background: none; color: var(--bevel-faint); cursor: grab; touch-action: none; }
|
|
53
|
-
.clay-menu-grip::before { content: ""; position: absolute; inset: -8px -2px -8px -10px; }
|
|
54
|
-
.clay-menu-grip:hover { color: var(--bevel-ink-2); }
|
|
55
|
-
.clay-menu-grip svg { display: block; width: 6px; height: 12px; fill: currentColor; }
|
|
49
|
+
.clay-menu { box-sizing: border-box; display: inline-flex; align-items: center; gap: 2px; user-select: none; -webkit-user-select: none; }
|
|
56
50
|
|
|
57
51
|
.clay-menu-edit { position: relative; display: inline-flex; align-items: center; gap: 8px; height: 28px; margin: 0; padding: 0 8px 0 5px; border: 0; background: none; font: 500 13px/1 var(--bevel-font-sans); color: var(--bevel-ink); cursor: pointer; }
|
|
58
52
|
.clay-menu-edit::before { content: ""; position: absolute; inset: -8px 0; }
|
|
@@ -68,12 +62,8 @@ export default `.clay-menu-dock, .clay-menu-spots, .clay-seo {
|
|
|
68
62
|
|
|
69
63
|
.clay-menu-divider { width: 1px; height: 18px; margin: 0 2px; background: var(--bevel-line-2); }
|
|
70
64
|
|
|
71
|
-
.clay-menu-goo { position: relative; display: inline-grid; place-items: center; box-sizing: border-box;
|
|
72
|
-
.clay-menu-goo
|
|
73
|
-
.clay-menu-goo svg { display: block; width: 18px; height: auto; fill: currentColor; }
|
|
74
|
-
.clay-menu-goo:hover svg { translate: 0 -1px; }
|
|
75
|
-
.clay-menu-goo:active, .clay-menu-goo[aria-expanded="true"] { background: var(--bevel-face-in); border-color: var(--bevel-edge-in) var(--bevel-edge-in-hi) var(--bevel-edge-in-hi) var(--bevel-edge-in); }
|
|
76
|
-
.clay-menu-goo:active svg, .clay-menu-goo[aria-expanded="true"] svg { translate: 1px 1px; }
|
|
65
|
+
.clay-menu-goo { position: relative; display: inline-grid; place-items: center; box-sizing: border-box; margin: 0; padding: 0; cursor: pointer; }
|
|
66
|
+
.clay-menu-goo svg { display: block; }
|
|
77
67
|
.clay-menu-dot { position: absolute; top: -1px; right: -2px; width: 8px; height: 8px; border-radius: 50%; background: var(--bevel-brass); box-shadow: 0 0 0 2px var(--bevel-surface); }
|
|
78
68
|
|
|
79
69
|
.clay-menu :focus-visible, .clay-roster:focus-visible { outline: 2px solid var(--bevel-brass); outline-offset: 2px; }
|
|
@@ -98,22 +88,24 @@ export default `.clay-menu-dock, .clay-menu-spots, .clay-seo {
|
|
|
98
88
|
.clay-avatar[data-tone="teal"] { background: var(--bevel-teal-soft); color: var(--bevel-teal); border-color: color-mix(in srgb, var(--bevel-teal) 35%, var(--bevel-teal-soft)); }
|
|
99
89
|
|
|
100
90
|
/* Popovers: the menu, the people panel, the status note. Below the dock, above it in a bottom corner. */
|
|
101
|
-
.clay-menu-list, .clay-people, .clay-menu-note { position: absolute; z-index: 1; top: calc(100% + 8px); right: 0; box-sizing: border-box; margin: 0;
|
|
102
|
-
.clay-
|
|
103
|
-
.clay-menu-dock[data-corner^="bottom"] :is(.clay-menu-list, .clay-people, .clay-menu-note) { top: auto; bottom: calc(100% + 8px); }
|
|
91
|
+
.clay-menu-list, .clay-people, .clay-menu-note { position: absolute; z-index: 1; top: calc(100% + 8px); right: 0; box-sizing: border-box; margin: 0; color: var(--bevel-ink); text-align: left; }
|
|
92
|
+
.clay-people, .clay-menu-note { border: 1px solid var(--bevel-line-2); background: var(--bevel-surface); box-shadow: var(--clay-shadow); }
|
|
104
93
|
|
|
105
|
-
.clay-menu-list { width: max-content;
|
|
106
|
-
.clay-menu-list
|
|
94
|
+
.clay-menu-list { width: max-content; max-width: calc(100vw - 24px); max-height: calc(100dvh - 72px); overflow-y: auto; overscroll-behavior: contain; }
|
|
95
|
+
.clay-menu-list[popover] { position: fixed; inset: auto; margin: 0; }
|
|
96
|
+
.clay-menu-list [role="menuitem"] { box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; margin: 0; border: 0; background: none; text-align: left; text-decoration: none; cursor: pointer; }
|
|
107
97
|
.clay-menu-list [role="menuitem"]:hover:not([aria-disabled="true"]), .clay-menu-list [role="menuitem"]:focus-visible { outline: none; background: var(--bevel-sunk); }
|
|
108
|
-
.clay-menu-list [role="menuitem"][aria-disabled="true"] {
|
|
109
|
-
.clay-menu-list [role="menuitem"][aria-disabled="true"] kbd { opacity: .6; }
|
|
98
|
+
.clay-menu-list [role="menuitem"][aria-disabled="true"] { cursor: default; }
|
|
110
99
|
.clay-menu-pair { display: flex; gap: 12px; padding: 3px 9px; }
|
|
111
|
-
.clay-menu-list .clay-menu-pair [role="menuitem"] { flex: none; width: auto;
|
|
112
|
-
.clay-menu-list kbd { flex: none;
|
|
113
|
-
.clay-menu-
|
|
100
|
+
.clay-menu-list .clay-menu-pair [role="menuitem"] { flex: none; width: auto; justify-content: flex-start; gap: 9px; }
|
|
101
|
+
.clay-menu-list kbd { flex: none; white-space: nowrap; }
|
|
102
|
+
.clay-menu-row { display: flex; align-items: center; gap: 2px; }
|
|
103
|
+
.clay-menu-list .clay-menu-row > [part~="item"] { flex: 1; width: auto; min-width: 0; }
|
|
104
|
+
.clay-menu-list .clay-menu-row > [part~="dismiss"] { flex: none; width: 28px; justify-content: center; padding: 0; }
|
|
105
|
+
.clay-menu-row > [part~="dismiss"] svg { display: block; width: 10px; height: 10px; fill: currentColor; }
|
|
114
106
|
.clay-menu-upgrade { display: inline-flex; align-items: center; gap: 8px; }
|
|
115
107
|
.clay-menu-upgrade::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--bevel-brass); }
|
|
116
|
-
.clay-menu-version { margin: 0;
|
|
108
|
+
.clay-menu-version { margin: 0; }
|
|
117
109
|
|
|
118
110
|
.clay-menu-note { z-index: 2; width: max-content; max-width: 264px; padding: 8px 12px; font-size: 13px; line-height: 1.45; }
|
|
119
111
|
|
|
@@ -149,6 +141,19 @@ export default `.clay-menu-dock, .clay-menu-spots, .clay-seo {
|
|
|
149
141
|
.clay-menu-btn-small { height: 26px; padding: 0 9px; font-size: 12px; }
|
|
150
142
|
.clay-menu-btn-primary { --bevel-face: var(--bevel-ink); --bevel-edge-hi: color-mix(in srgb, var(--bevel-ink), light-dark(#FFFCF6, #FFFFFF) 22%); --bevel-edge-lo: color-mix(in srgb, var(--bevel-ink), light-dark(#0B0C13, #6A7090) 34%); color: var(--bevel-ground); }
|
|
151
143
|
.clay-menu-btn-primary:hover { background: color-mix(in srgb, var(--bevel-ink), var(--bevel-ground) 12%); }
|
|
144
|
+
`;
|
|
145
|
+
|
|
146
|
+
export const MENU_FLOATING = `/* The dock: the roster (when a page opts in) and the capsule, fixed in one corner. */
|
|
147
|
+
.clay-menu-dock { position: fixed; z-index: 2147482000; top: max(12px, env(safe-area-inset-top)); right: max(12px, env(safe-area-inset-right)); }
|
|
148
|
+
.clay-menu-dock[data-corner$="left"] { right: auto; left: max(12px, env(safe-area-inset-left)); flex-direction: row-reverse; }
|
|
149
|
+
.clay-menu-dock[data-corner^="bottom"] { top: auto; bottom: max(12px, env(safe-area-inset-bottom)); }
|
|
150
|
+
.clay-menu-dock[data-corner$="left"] :is(.clay-menu-list, .clay-people, .clay-menu-note) { right: auto; left: 0; }
|
|
151
|
+
.clay-menu-dock[data-corner^="bottom"] :is(.clay-menu-list, .clay-people, .clay-menu-note) { top: auto; bottom: calc(100% + 8px); }
|
|
152
|
+
.clay-menu-dock[data-dragging] .clay-menu { border-color: var(--bevel-brass); cursor: grabbing; }
|
|
153
|
+
.clay-menu-grip { position: relative; display: inline-grid; place-items: center; width: 18px; height: 28px; margin: 0; padding: 0; border: 0; background: none; color: var(--bevel-faint); cursor: grab; touch-action: none; }
|
|
154
|
+
.clay-menu-grip::before { content: ""; position: absolute; inset: -8px -2px -8px -10px; }
|
|
155
|
+
.clay-menu-grip:hover { color: var(--bevel-ink-2); }
|
|
156
|
+
.clay-menu-grip svg { display: block; width: 6px; height: 12px; fill: currentColor; }
|
|
152
157
|
|
|
153
158
|
/* Drop spots while dragging. */
|
|
154
159
|
.clay-menu-spots { position: fixed; inset: 0; z-index: 2147481999; pointer-events: none; }
|
|
@@ -158,8 +163,28 @@ export default `.clay-menu-dock, .clay-menu-spots, .clay-seo {
|
|
|
158
163
|
.clay-menu-spot[data-to$="left"] { left: 12px; }
|
|
159
164
|
.clay-menu-spot[data-to$="right"] { right: 12px; }
|
|
160
165
|
.clay-menu-spot[data-near] { border: 2px solid var(--bevel-brass); background: var(--bevel-brass-soft); }
|
|
166
|
+
`;
|
|
161
167
|
|
|
162
|
-
|
|
168
|
+
export const MENU_SKIN = `.clay-menu { height: 34px; padding: 0 4px 0 2px; border: 1px solid var(--bevel-line-3); background: var(--bevel-surface); box-shadow: var(--clay-shadow); }
|
|
169
|
+
.clay-menu-goo { width: 28px; height: 28px; min-height: 0; border-radius: 0; border: 2px solid transparent; background: none; color: var(--bevel-ink); }
|
|
170
|
+
.clay-menu-goo::before { content: ""; position: absolute; inset: -8px -8px -8px -4px; }
|
|
171
|
+
.clay-menu-goo svg { width: 18px; height: auto; fill: currentColor; }
|
|
172
|
+
.clay-menu-goo:hover svg { translate: 0 -1px; }
|
|
173
|
+
.clay-menu-goo:active, .clay-menu-goo[aria-expanded="true"] { background: var(--bevel-face-in); border-color: var(--bevel-edge-in) var(--bevel-edge-in-hi) var(--bevel-edge-in-hi) var(--bevel-edge-in); }
|
|
174
|
+
.clay-menu-goo:active svg, .clay-menu-goo[aria-expanded="true"] svg { translate: 1px 1px; }
|
|
175
|
+
.clay-menu-list { min-width: 284px; padding: 6px; border: 1px solid var(--bevel-line-2); background: var(--bevel-surface); box-shadow: var(--clay-shadow); }
|
|
176
|
+
.clay-menu-list [role="menuitem"] { min-height: 32px; padding: 5px 9px; font: 400 13px/1.35 var(--bevel-font-sans); color: var(--bevel-ink); }
|
|
177
|
+
.clay-menu-list [role="menuitem"][aria-disabled="true"] { color: var(--bevel-faint); }
|
|
178
|
+
.clay-menu-list [role="menuitem"][aria-disabled="true"] kbd { opacity: .6; }
|
|
179
|
+
.clay-menu-list .clay-menu-pair [role="menuitem"] { min-height: 30px; padding: 4px 6px 4px 9px; border: 1px solid var(--bevel-line); }
|
|
180
|
+
.clay-menu-list kbd { font: 500 11px/1 var(--bevel-font-mono); padding: 3px 5px; border: 1px solid var(--bevel-line-2); background: var(--bevel-sunk); color: var(--bevel-muted); }
|
|
181
|
+
.clay-menu-list [part~="quiet"] { font-size: 12px; color: var(--bevel-muted); }
|
|
182
|
+
.clay-menu-sep { height: 1px; margin: 4px 2px; background: var(--bevel-line); }
|
|
183
|
+
.clay-menu-version { padding: 6px 9px 4px; font: 400 11.5px/1.4 var(--bevel-font-mono); color: var(--bevel-muted); }
|
|
184
|
+
`;
|
|
185
|
+
|
|
186
|
+
// Last, so no skin can shrink a touch target or bring motion back.
|
|
187
|
+
export const MENU_TOUCH = `@media (pointer: coarse), (max-width: 680px) {
|
|
163
188
|
.clay-menu-list [role="menuitem"] { min-height: 44px; font-size: 15px; }
|
|
164
189
|
.clay-menu-list .clay-menu-pair [role="menuitem"] { min-height: 44px; }
|
|
165
190
|
:is(.clay-menu-dock, .clay-seo) :is(input, textarea, select) { font-size: 16px; }
|
|
@@ -168,4 +193,7 @@ export default `.clay-menu-dock, .clay-menu-spots, .clay-seo {
|
|
|
168
193
|
}
|
|
169
194
|
@media (prefers-reduced-motion: reduce) {
|
|
170
195
|
.clay-menu-track, .clay-menu-thumb { transition: none; }
|
|
171
|
-
}
|
|
196
|
+
}
|
|
197
|
+
`;
|
|
198
|
+
|
|
199
|
+
export default MENU_BASE + MENU_FLOATING + MENU_SKIN + MENU_TOUCH;
|
package/src/plugins/menu.js
CHANGED
|
@@ -5,7 +5,7 @@ import { canEdit, isDraftMode, isEditMode, mode as startMode } from "../core/is-
|
|
|
5
5
|
import onDomReady from "../lib/dom-ready.js";
|
|
6
6
|
import CLAYGOO from "./menu/claygoo.svg.js";
|
|
7
7
|
import { modeRefusalText } from "../core/mode-refusal.js";
|
|
8
|
-
import
|
|
8
|
+
import { MENU_BASE, MENU_FLOATING, MENU_SKIN, MENU_TOUCH, MENU_SURFACE } from "./menu/style.js";
|
|
9
9
|
import { attachPlacement } from "./menu/placement.js";
|
|
10
10
|
import { attachActions } from "./menu/actions.js";
|
|
11
11
|
import { attachPeople } from "./menu/people.js";
|
|
@@ -14,6 +14,9 @@ import { followLook } from "../ui/page-colour.js";
|
|
|
14
14
|
import { mountEditorUI } from "../ui/editor-ui.js";
|
|
15
15
|
|
|
16
16
|
const SEO_ITEM = true;
|
|
17
|
+
const SKIN_VERSION = "1";
|
|
18
|
+
const EDGE_GAP = 8;
|
|
19
|
+
const DISMISS_ICON = '<svg viewBox="0 0 10 10" aria-hidden="true" focusable="false"><path d="M1 0 5 4l4-4 1 1-4 4 4 4-1 1-4-4-4 4-1-1 4-4-4-4z"/></svg>';
|
|
17
20
|
const NOTE_MS = 6000;
|
|
18
21
|
const INTRO_GAP = 12;
|
|
19
22
|
const GRIP =
|
|
@@ -23,6 +26,7 @@ const GRIP =
|
|
|
23
26
|
// Built-in items keep fixed slots, so the order never depends on which plugin
|
|
24
27
|
// registered first. Any other id goes in its own section above the footer, in the
|
|
25
28
|
// order it was added.
|
|
29
|
+
// An item may also ask for the first or the last section with `section: "start" | "end"`.
|
|
26
30
|
const SECTIONS = [
|
|
27
31
|
["clay.undo", "clay.cms", "clay.ai", "clay.code"],
|
|
28
32
|
["seo", "clay.variants.keep", "clay.share", "clay.people"],
|
|
@@ -37,25 +41,51 @@ const SLOTTED = new Set(SECTIONS.flat().filter(Boolean));
|
|
|
37
41
|
const currentMode = () =>
|
|
38
42
|
window.clay && typeof window.clay.mode === "string" ? window.clay.mode : startMode;
|
|
39
43
|
|
|
44
|
+
// The first [clay-menu-slot] on the page holds the menu. With none, it floats in a corner.
|
|
45
|
+
function findSlot() {
|
|
46
|
+
const slots = document.querySelectorAll("[clay-menu-slot]");
|
|
47
|
+
if (slots.length > 1) console.warn("[clay] This page has more than one clay-menu-slot. The menu uses the first.");
|
|
48
|
+
return slots[0] || null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// A skin the page wrote, in <style clay-menu-skin="1" media="not all">. The media keeps it
|
|
52
|
+
// off the page itself. An unknown version means the default skin.
|
|
53
|
+
function pageSkin() {
|
|
54
|
+
const style = document.querySelector("style[clay-menu-skin]");
|
|
55
|
+
if (!style) return null;
|
|
56
|
+
if (style.getAttribute("clay-menu-skin") !== SKIN_VERSION) {
|
|
57
|
+
console.warn(`[clay] This runtime reads clay-menu-skin="${SKIN_VERSION}". The menu keeps its default look.`);
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return style.textContent;
|
|
61
|
+
}
|
|
62
|
+
|
|
40
63
|
function mount() {
|
|
41
64
|
if (document.querySelector('clay-editor-ui[data-clay-ui="menu"]')) return;
|
|
42
65
|
|
|
66
|
+
const slot = findSlot();
|
|
67
|
+
const embedded = Boolean(slot);
|
|
68
|
+
const skin = embedded ? pageSkin() : null;
|
|
69
|
+
const hideSwitch = embedded && slot.hasAttribute("no-edit-switch");
|
|
70
|
+
|
|
43
71
|
const root = document.createElement("div");
|
|
44
72
|
root.className = "clay-menu-dock";
|
|
45
73
|
root.setAttribute("clay", "editor-ui");
|
|
74
|
+
root.setAttribute("part", "dock");
|
|
75
|
+
if (embedded) root.dataset.embedded = "";
|
|
46
76
|
root.dataset.corner = "top-right";
|
|
47
77
|
root.innerHTML =
|
|
48
|
-
`<div class="clay-menu" clay="editor-ui">` +
|
|
78
|
+
`<div class="clay-menu" part="capsule" clay="editor-ui">` +
|
|
49
79
|
`<button type="button" class="clay-menu-grip" aria-label="Move the menu. Drag it, or use the arrow keys to move it to another corner.">${GRIP}</button>` +
|
|
50
|
-
`<button type="button" class="clay-menu-edit" role="switch" aria-checked="false">` +
|
|
80
|
+
`<button type="button" class="clay-menu-edit" part="edit" role="switch" aria-checked="false">` +
|
|
51
81
|
`<span class="clay-menu-track" aria-hidden="true"><span class="clay-menu-thumb"></span></span>` +
|
|
52
82
|
`<span class="clay-menu-label">Edit</span>` +
|
|
53
83
|
`</button>` +
|
|
54
84
|
`<span class="clay-menu-divider" aria-hidden="true"></span>` +
|
|
55
|
-
`<button type="button" class="clay-menu-goo" aria-haspopup="menu" aria-expanded="false" aria-label="Clay menu">${CLAYGOO}</button>` +
|
|
85
|
+
`<button type="button" class="clay-menu-goo" part="button" aria-haspopup="menu" aria-expanded="false" aria-label="Clay menu">${CLAYGOO}</button>` +
|
|
56
86
|
`</div>` +
|
|
57
|
-
`<div class="clay-menu-list" role="menu" aria-label="Clay menu" hidden></div>` +
|
|
58
|
-
`<div class="clay-menu-note" role="status" hidden></div>`;
|
|
87
|
+
`<div class="clay-menu-list" part="list" role="menu" aria-label="Clay menu" hidden></div>` +
|
|
88
|
+
`<div class="clay-menu-note" part="note" role="status" hidden></div>`;
|
|
59
89
|
|
|
60
90
|
const grip = root.querySelector(".clay-menu-grip");
|
|
61
91
|
const edit = root.querySelector(".clay-menu-edit");
|
|
@@ -64,6 +94,36 @@ function mount() {
|
|
|
64
94
|
const noteEl = root.querySelector(".clay-menu-note");
|
|
65
95
|
const items = new Map();
|
|
66
96
|
|
|
97
|
+
if (embedded) {
|
|
98
|
+
grip.hidden = true;
|
|
99
|
+
const icon = slot.querySelector("template[clay-menu-icon]");
|
|
100
|
+
if (icon) goo.replaceChildren(icon.content.cloneNode(true));
|
|
101
|
+
const name = slot.getAttribute("clay-menu-label");
|
|
102
|
+
if (name) {
|
|
103
|
+
goo.setAttribute("aria-label", name);
|
|
104
|
+
goo.title = name;
|
|
105
|
+
list.setAttribute("aria-label", name);
|
|
106
|
+
}
|
|
107
|
+
if (hideSwitch) {
|
|
108
|
+
edit.hidden = true;
|
|
109
|
+
root.querySelector(".clay-menu-divider").hidden = true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Embedded, the list opens in the top layer, so a header's overflow cannot clip it.
|
|
114
|
+
const topLayer = embedded && typeof list.showPopover === "function";
|
|
115
|
+
if (topLayer) list.setAttribute("popover", "manual");
|
|
116
|
+
|
|
117
|
+
function placeList() {
|
|
118
|
+
const anchor = goo.getBoundingClientRect();
|
|
119
|
+
const { offsetWidth: width, offsetHeight: height } = list;
|
|
120
|
+
const left = Math.max(EDGE_GAP, Math.min(anchor.right - width, window.innerWidth - width - EDGE_GAP));
|
|
121
|
+
const below = anchor.bottom + EDGE_GAP;
|
|
122
|
+
const top = below + height > window.innerHeight - EDGE_GAP ? Math.max(EDGE_GAP, anchor.top - height - EDGE_GAP) : below;
|
|
123
|
+
list.style.left = `${Math.round(left)}px`;
|
|
124
|
+
list.style.top = `${Math.round(top)}px`;
|
|
125
|
+
}
|
|
126
|
+
|
|
67
127
|
// Focus inside the shadow root: document.activeElement only ever names the host.
|
|
68
128
|
const focusedEl = () => root.getRootNode().activeElement || null;
|
|
69
129
|
const isOpen = () => !list.hidden;
|
|
@@ -71,6 +131,13 @@ function mount() {
|
|
|
71
131
|
function setExpanded(open) {
|
|
72
132
|
list.hidden = !open;
|
|
73
133
|
goo.setAttribute("aria-expanded", open ? "true" : "false");
|
|
134
|
+
if (!topLayer) return;
|
|
135
|
+
if (open) {
|
|
136
|
+
list.showPopover();
|
|
137
|
+
placeList();
|
|
138
|
+
} else if (list.matches(":popover-open")) {
|
|
139
|
+
list.hidePopover();
|
|
140
|
+
}
|
|
74
141
|
}
|
|
75
142
|
|
|
76
143
|
const buttons = () => [...list.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')];
|
|
@@ -108,6 +175,7 @@ function mount() {
|
|
|
108
175
|
button.type = "button";
|
|
109
176
|
}
|
|
110
177
|
button.setAttribute("role", "menuitem");
|
|
178
|
+
button.setAttribute("part", item.quiet ? "item quiet" : "item");
|
|
111
179
|
button.dataset.menuId = item.id;
|
|
112
180
|
if (item.badge && item.id === "upgrade") {
|
|
113
181
|
const label = document.createElement("span");
|
|
@@ -126,7 +194,7 @@ function mount() {
|
|
|
126
194
|
button.addEventListener("click", () => {
|
|
127
195
|
if (item.disabled) return;
|
|
128
196
|
close();
|
|
129
|
-
if (item.run) item.run();
|
|
197
|
+
if (item.run) item.run({ anchor: goo });
|
|
130
198
|
});
|
|
131
199
|
return button;
|
|
132
200
|
}
|
|
@@ -135,6 +203,7 @@ function mount() {
|
|
|
135
203
|
if (item.text) {
|
|
136
204
|
const line = document.createElement("p");
|
|
137
205
|
line.className = "clay-menu-version";
|
|
206
|
+
line.setAttribute("part", "text");
|
|
138
207
|
line.dataset.menuId = item.id;
|
|
139
208
|
line.textContent = item.label;
|
|
140
209
|
return line;
|
|
@@ -146,12 +215,35 @@ function mount() {
|
|
|
146
215
|
for (const part of item.pair) pair.append(itemButton(part));
|
|
147
216
|
return pair;
|
|
148
217
|
}
|
|
218
|
+
if (item.dismiss) return dismissibleRow(item);
|
|
149
219
|
return itemButton(item);
|
|
150
220
|
}
|
|
151
221
|
|
|
222
|
+
function dismissibleRow(item) {
|
|
223
|
+
const row = document.createElement("div");
|
|
224
|
+
row.className = "clay-menu-row";
|
|
225
|
+
row.dataset.menuId = item.id;
|
|
226
|
+
const dismiss = document.createElement("button");
|
|
227
|
+
dismiss.type = "button";
|
|
228
|
+
dismiss.setAttribute("role", "menuitem");
|
|
229
|
+
dismiss.setAttribute("part", "dismiss");
|
|
230
|
+
dismiss.dataset.menuId = `${item.id}.dismiss`;
|
|
231
|
+
dismiss.setAttribute("aria-label", item.dismiss.label);
|
|
232
|
+
dismiss.title = item.dismiss.label;
|
|
233
|
+
dismiss.innerHTML = DISMISS_ICON;
|
|
234
|
+
dismiss.addEventListener("click", () => {
|
|
235
|
+
removeItem(item.id);
|
|
236
|
+
item.dismiss.run?.();
|
|
237
|
+
});
|
|
238
|
+
row.append(itemButton(item), dismiss);
|
|
239
|
+
return row;
|
|
240
|
+
}
|
|
241
|
+
|
|
152
242
|
function sections() {
|
|
153
|
-
const
|
|
154
|
-
|
|
243
|
+
const inSection = (name) => [...items.values()].filter((item) => item.section === name);
|
|
244
|
+
const extra = [...items.keys()].filter((id) => !SLOTTED.has(id) && !items.get(id).section);
|
|
245
|
+
const fixed = SECTIONS.map((ids) => (ids || extra).map((id) => items.get(id)).filter(Boolean));
|
|
246
|
+
return [inSection("start"), ...fixed, inSection("end")].filter((group) => group.length);
|
|
155
247
|
}
|
|
156
248
|
|
|
157
249
|
function render() {
|
|
@@ -163,6 +255,7 @@ function mount() {
|
|
|
163
255
|
const sep = document.createElement("div");
|
|
164
256
|
sep.className = "clay-menu-sep";
|
|
165
257
|
sep.setAttribute("role", "separator");
|
|
258
|
+
sep.setAttribute("part", "separator");
|
|
166
259
|
list.append(sep);
|
|
167
260
|
}
|
|
168
261
|
for (const item of group) list.append(itemNode(item));
|
|
@@ -194,11 +287,14 @@ function mount() {
|
|
|
194
287
|
disabled: Boolean(disabled),
|
|
195
288
|
});
|
|
196
289
|
|
|
197
|
-
function addItem({ id, label, run, badge, keys, disabled, text, pair, href } = {}) {
|
|
290
|
+
function addItem({ id, label, run, badge, keys, disabled, text, pair, href, section, quiet, dismiss } = {}) {
|
|
198
291
|
if (!id) return null;
|
|
199
292
|
const item = clean({ id, label, run, badge, keys, disabled, href });
|
|
200
293
|
if (text) item.text = true;
|
|
201
294
|
if (Array.isArray(pair)) item.pair = pair.map(clean);
|
|
295
|
+
if (section === "start" || section === "end") item.section = section;
|
|
296
|
+
if (quiet) item.quiet = true;
|
|
297
|
+
if (dismiss) item.dismiss = { label: String(dismiss.label || "Dismiss"), run: typeof dismiss.run === "function" ? dismiss.run : null };
|
|
202
298
|
items.set(id, item);
|
|
203
299
|
render();
|
|
204
300
|
return id;
|
|
@@ -228,6 +324,7 @@ function mount() {
|
|
|
228
324
|
|
|
229
325
|
function setChecked() {
|
|
230
326
|
edit.setAttribute("aria-checked", currentMode() === "edit" ? "true" : "false");
|
|
327
|
+
if (hideSwitch) addItem({ id: "clay.mode", label: currentMode() === "edit" ? "View mode" : "Edit mode", section: "start", run: () => edit.click() });
|
|
231
328
|
}
|
|
232
329
|
setChecked();
|
|
233
330
|
|
|
@@ -360,24 +457,30 @@ function mount() {
|
|
|
360
457
|
`:root { --clay-menu-width: ${Math.ceil(rect.width)}px; --clay-menu-height: ${Math.ceil(rect.height)}px; }`;
|
|
361
458
|
}
|
|
362
459
|
|
|
363
|
-
const
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
460
|
+
const css = embedded ? [MENU_BASE, skin ?? MENU_SKIN, MENU_TOUCH] : [MENU_BASE, MENU_FLOATING, MENU_SKIN, MENU_TOUCH];
|
|
461
|
+
const ui = mountEditorUI({ name: "menu", content: root, css, parent: slot || document.body, attributes: { "clay-mode-toggle": "" } });
|
|
462
|
+
if (embedded) {
|
|
463
|
+
window.addEventListener("resize", close);
|
|
464
|
+
window.addEventListener("scroll", () => { if (topLayer && isOpen()) placeList(); }, { capture: true, passive: true });
|
|
465
|
+
} else {
|
|
466
|
+
attachPlacement({
|
|
467
|
+
dock: root,
|
|
468
|
+
container: ui.shadow,
|
|
469
|
+
grip,
|
|
470
|
+
storage: window.clay.storage && window.clay.storage.local,
|
|
471
|
+
onMove: replace,
|
|
472
|
+
onDragStart: () => {
|
|
473
|
+
close();
|
|
474
|
+
people?.close({ restore: false });
|
|
475
|
+
},
|
|
476
|
+
});
|
|
477
|
+
reserveSpace();
|
|
478
|
+
if (typeof ResizeObserver === "function") new ResizeObserver(reserveSpace).observe(root);
|
|
377
479
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
480
|
+
new MutationObserver(watchIntro).observe(doc.body, { childList: true });
|
|
481
|
+
watchIntro();
|
|
482
|
+
}
|
|
483
|
+
if (!skin) followLook(root, root.querySelector(".clay-menu"), MENU_SURFACE);
|
|
381
484
|
|
|
382
485
|
const openSeo = () => import("./menu/seo.js").then((m) => m.open({ returnFocus: goo }));
|
|
383
486
|
|
|
@@ -404,7 +507,7 @@ function mount() {
|
|
|
404
507
|
followCapability = applyHidden;
|
|
405
508
|
if (currentMode() !== "edit") import("../core/host-permission.js").then((m) => m.checkHostPermission()).catch(() => {});
|
|
406
509
|
|
|
407
|
-
window.clay.menu = { addItem, removeItem, open, close, note: showNote };
|
|
510
|
+
window.clay.menu = { addItem, removeItem, open, close, note: showNote, embedded, button: goo };
|
|
408
511
|
document.dispatchEvent(new CustomEvent("clay:menu-ready"));
|
|
409
512
|
}
|
|
410
513
|
|
package/src/ui/bevel.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// GENERATED from bevel/bevel.css and bevel/icons by scripts/build-bevel-subset.mjs. Run `npm run build:bevel`.
|
|
2
|
-
export const SOURCE_SHA256 = "
|
|
2
|
+
export const SOURCE_SHA256 = "0b54b9f2165dcd7d79a4b9749fe4ea5666f14b6f83461d952f5f6c034d224ab9";
|
|
3
3
|
export const FONT_SANS = "system-ui,-apple-system,\"Segoe UI\",sans-serif";
|
|
4
4
|
export const FONT_MONO = "ui-monospace,SFMono-Regular,Menlo,Consolas,monospace";
|
|
5
5
|
export const SHADOW = "0 1px 2px rgba(0,0,0,.12),0 10px 28px -12px rgba(0,0,0,.35)";
|
package/src/ui/skins/cms.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// GENERATED from src/vendor/hypercms.vendor.js by scripts/build-vendor-skins.mjs. Run `npm run build:skins`.
|
|
2
|
-
export const SOURCE_SHA256 = "
|
|
2
|
+
export const SOURCE_SHA256 = "34ad22f65c67a35a9e8062b83bd00395ecd5620badabfa012598840bdd980f32";
|
|
3
3
|
export const ROOTS = [".hcms-shell"];
|
|
4
4
|
export const CSS = "@layer clay-skin{\n:is(.hcms-shell):not([data-theme]),:is(.hcms-shell):not([data-theme]) *{--mirk-canvas:light-dark(#FDF8F0, #0B0C13) !important;--mirk-bg:light-dark(#FFFCF6, #11131E) !important;--mirk-fg:light-dark(#2B241B, #ECEAF2) !important;--mirk-accent:light-dark(#F4ECDF, #1A1D2C) !important;--mirk-destructive:light-dark(#A83A2C, #FF5566) !important;--mirk-focus-color:light-dark(#8F6310, #D9A445) !important;--mirk-bevel-bg:light-dark(#F1E7D4, #22273E) !important;--mirk-bevel-fg:light-dark(#2B241B, #ECEAF2) !important;--mirk-bevel-tl:light-dark(#FFF9ED, #3C4260) !important;--mirk-bevel-br:light-dark(#D6C3A5, #1B2033) !important;--mirk-bevel-hover-bg:color-mix(in srgb, light-dark(#F1E7D4, #22273E), light-dark(#FFF9ED, #3C4260) 45%) !important;--mirk-pill-inner-top:light-dark(#FFF9ED, #3C4260) !important;--mirk-input-border:light-dark(#D8C8AF, #353B52) !important;--mirk-placeholder-color:light-dark(#9A8A70, #6A7090) !important;--mirk-ctrl-bg:light-dark(#6B5942, #8A90AB) !important;--mirk-toggle-bg:light-dark(#FCF8F1, #4A5275) !important;--mirk-toggle-hi:light-dark(#FFF9ED, #6C759A) !important;--mirk-toggle-lo:light-dark(#D6C3A5, #1B2033) !important;--mirk-mark-fg:light-dark(#2B241B, #ECEAF2) !important;--mirk-sortable-dot:light-dark(#D8C8AF, #353B52) !important;--mirk-sortable-shadow:light-dark(#D6C3A5, #1B2033) !important;--mirk-sortable-label:light-dark(#6B5942, #8A90AB) !important;--mirk-sortable-placeholder:light-dark(#9A8A70, #6A7090) !important;--mirk-slider-fill:light-dark(#F0E4CC, #3A2F17) !important;--mirk-slider-nub-bg:light-dark(#FCF8F1, #4A5275) !important;--mirk-slider-nub-hi:light-dark(#FFF9ED, #6C759A) !important;--mirk-slider-nub-lo:light-dark(#D6C3A5, #1B2033) !important;--mirk-chip-surface:light-dark(#FFFCF6, #11131E) !important;--mirk-chip-edge:light-dark(#D8C8AF, #353B52) !important;--mirk-chip-primary-bg:light-dark(#2B241B, #ECEAF2) !important;--mirk-chip-primary-fg:light-dark(#FDF8F0, #0B0C13) !important;--mirk-chip-alert:light-dark(#A83A2C, #FF5566) !important;--mirk-radius:0px !important;--mirk-focus-offset:2px !important}\n:is(.hcms-shell){font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace !important}\n.hcms-shell .mirk-chip__actions .mirk-chip__action--primary{--mirk-bevel-bg:var(--mirk-chip-primary-bg) !important;--mirk-bevel-fg:var(--mirk-chip-primary-fg) !important;--mirk-bevel-tl:color-mix(in srgb, var(--mirk-chip-primary-bg), white 24%) !important;--mirk-bevel-br:color-mix(in srgb, var(--mirk-chip-primary-bg), black 32%) !important;--mirk-bevel-hover-bg:color-mix(in srgb, var(--mirk-chip-primary-bg), white 10%) !important}\n}";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// GENERATED from src/vendor/quickcrop.vendor.js and bevel/integrations/quickcrop.css by scripts/build-vendor-skins.mjs. Run `npm run build:skins`.
|
|
2
|
-
export const SOURCE_SHA256 = "
|
|
2
|
+
export const SOURCE_SHA256 = "c7f2d2e24de702a5932c49e16c4599f7e4a2c60f05e80ea0fa17b635ccd3b39e";
|
|
3
3
|
export const ROOTS = [".qc-stage",".qc-backdrop"];
|
|
4
4
|
export const CSS = "@layer clay-skin{\n:is(.qc-stage, .qc-backdrop),:is(.qc-stage, .qc-backdrop) *{--qc-surface:light-dark(#FFFCF6, #11131E) !important;--qc-text:light-dark(#2B241B, #ECEAF2) !important;--qc-border:light-dark(#D8C8AF, #353B52) !important;--qc-radius:0px !important;--qc-font:system-ui,-apple-system,\"Segoe UI\",sans-serif !important;--qc-surface-hover:light-dark(#F4ECDF, #1A1D2C) !important;--qc-text-hover:color-mix(in srgb, light-dark(#2B241B, #ECEAF2), light-dark(#FDF8F0, #0B0C13) 12%) !important;--qc-on-dark:light-dark(#FDF8F0, #0B0C13) !important;--qc-overlay:color-mix(in srgb, light-dark(#FDF8F0, #0B0C13) 70%, transparent) !important;--qc-dim:rgba(0,0,0,.55) !important;--qc-crop-line:#fff !important}\n.qc-stage{margin-inline:auto !important;inline-size:fit-content !important;background:light-dark(#F4ECDF, #1A1D2C) !important}\n.qc-stage img{display:block !important;max-inline-size:100% !important}\n.qc-backdrop{position:fixed !important;inset:0 !important;background:var(--qc-overlay) !important;display:grid !important;place-items:center !important;z-index:1000 !important;animation:qc-fade .15s ease !important}\n.qc-modal{background:var(--qc-surface) !important;border:1px solid var(--qc-border) !important;border-radius:var(--qc-radius) !important;padding:16px !important;max-width:92vw !important;font-family:var(--qc-font) !important}\n.qc-bar{display:flex !important;justify-content:flex-end !important;gap:10px !important;margin-top:12px !important}\n.qc-btn{font:inherit !important;font-family:var(--qc-font) !important;font-size:.85rem !important;padding:.3rem .75rem !important;border:1px solid var(--qc-border) !important;border-radius:6px !important;background:var(--qc-surface) !important;color:var(--qc-text) !important;cursor:pointer !important}\n.qc-btn:hover{background:var(--qc-surface-hover) !important}\n.qc-btn-primary{background:var(--qc-text) !important;border-color:var(--qc-text) !important;color:var(--qc-on-dark) !important;font-weight:600 !important}\n.qc-btn-primary:hover{background:var(--qc-text-hover) !important;border-color:var(--qc-text-hover) !important}\n.qc-stage{position:relative !important;line-height:0 !important;user-select:none !important;-webkit-user-select:none !important;touch-action:none !important}\n.qc-stage img{display:block !important;max-width:100% !important;pointer-events:none !important}\n.qc-dim{position:absolute !important;inset:0 !important;background:var(--qc-dim) !important;pointer-events:none !important}\n.qc-box{position:absolute !important;cursor:move !important;outline:1px solid var(--qc-crop-line) !important;background:linear-gradient(var(--qc-crop-line),var(--qc-crop-line)) 0 33.33%/100% 1px no-repeat,linear-gradient(var(--qc-crop-line),var(--qc-crop-line)) 0 66.66%/100% 1px no-repeat,linear-gradient(var(--qc-crop-line),var(--qc-crop-line)) 33.33% 0/1px 100% no-repeat,linear-gradient(var(--qc-crop-line),var(--qc-crop-line)) 66.66% 0/1px 100% no-repeat !important;background-blend-mode:overlay !important}\n.qc-handle{position:absolute !important;box-sizing:border-box !important;width:28px !important;height:28px !important;border:7px solid transparent !important;background:var(--qc-crop-line) !important;background-clip:padding-box !important;border-radius:9px !important}\n.qc-nw{left:-14px !important;top:-14px !important;cursor:nwse-resize !important}\n.qc-ne{right:-14px !important;top:-14px !important;cursor:nesw-resize !important}\n.qc-sw{left:-14px !important;bottom:-14px !important;cursor:nesw-resize !important}\n.qc-se{right:-14px !important;bottom:-14px !important;cursor:nwse-resize !important}\n.qc-mount{line-height:0 !important}\n.qc-stage img[hidden]{display:none !important}\n.qc-backdrop[hidden]{display:none !important}\n.qc-bar[hidden]{display:none !important}\n}";
|
package/src/ui/skins/richclay.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// GENERATED from src/vendor/richclay.vendor.js and bevel/integrations/richclay.css by scripts/build-vendor-skins.mjs. Run `npm run build:skins`.
|
|
2
|
-
export const SOURCE_SHA256 = "
|
|
2
|
+
export const SOURCE_SHA256 = "1989b03f549880bea355a97b4946ee3a6922e8f3c9612406ba18e440878def3a";
|
|
3
3
|
export const ROOTS = [".richclay-toolbar",".richclay-float",".richclay-dialog"];
|
|
4
4
|
export const CSS = "@layer clay-skin{\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog),:is(.richclay-toolbar, .richclay-float, .richclay-dialog) *{--richclay-surface:light-dark(#FFFCF6, #11131E) !important;--richclay-surface-alt:light-dark(#F4ECDF, #1A1D2C) !important;--richclay-text:light-dark(#2B241B, #ECEAF2) !important;--richclay-muted:light-dark(#6B5942, #8A90AB) !important;--richclay-border:light-dark(#D8C8AF, #353B52) !important;--richclay-accent:light-dark(#8F6310, #D9A445) !important;--richclay-accent-ink:light-dark(#FDF8F0, #0B0C13) !important;--richclay-focus:light-dark(#8F6310, #D9A445) !important;--richclay-danger:light-dark(#A83A2C, #FF5566) !important;--richclay-radius:0px !important;--richclay-control-size:32px !important;--richclay-shadow:0 1px 2px rgba(0,0,0,.12),0 10px 28px -12px rgba(0,0,0,.35) !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog){font-family:system-ui,-apple-system,\"Segoe UI\",sans-serif !important}\n:where(.richclay-float, .richclay-dialog):is(.richclay-toolbar, .richclay-float, .richclay-dialog){color:light-dark(#2B241B, #ECEAF2) !important;background:light-dark(#FFFCF6, #11131E) !important;border:1px solid light-dark(#D8C8AF, #353B52) !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-toolbar{gap:3px !important;margin:0 !important;padding:8px !important;border:1px solid light-dark(#D8C8AF, #353B52) !important;border-radius:0 !important;background:light-dark(#F4ECDF, #1A1D2C) !important;color:light-dark(#2B241B, #ECEAF2) !important}\n.richclay-toolbar:is(.richclay-toolbar, .richclay-float, .richclay-dialog){gap:3px !important;padding:8px !important;border:1px solid light-dark(#D8C8AF, #353B52) !important;border-radius:0 !important;background:light-dark(#F4ECDF, #1A1D2C) !important;color:light-dark(#2B241B, #ECEAF2) !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-button{min-width:32px !important;height:32px !important;padding:0 7px !important;gap:6px !important;border:2px solid !important;border-color:light-dark(#FFF9ED, #3C4260) light-dark(#D6C3A5, #1B2033) light-dark(#D6C3A5, #1B2033) light-dark(#FFF9ED, #3C4260) !important;border-radius:0 !important;background:light-dark(#F1E7D4, #22273E) !important;font:14px system-ui,-apple-system,\"Segoe UI\",sans-serif !important;cursor:pointer !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-button:is([aria-pressed=\"true\"], [aria-expanded=\"true\"]){background:light-dark(#E3D0B3, #28304D) !important;border-color:light-dark(#B89F7B, #1F2339) light-dark(#F0E1C9, #4D587A) light-dark(#F0E1C9, #4D587A) light-dark(#B89F7B, #1F2339) !important;box-shadow:none !important;color:light-dark(#2B241B, #ECEAF2) !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-button[aria-pressed=\"true\"] > svg{translate:1px 1px !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-button:disabled{opacity:.45 !important;cursor:not-allowed !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-button:hover:not([aria-pressed=\"true\"], [aria-expanded=\"true\"], :disabled){border-color:light-dark(#FFF9ED, #3C4260) light-dark(#D6C3A5, #1B2033) light-dark(#D6C3A5, #1B2033) light-dark(#FFF9ED, #3C4260) !important;background:color-mix(in srgb, light-dark(#F1E7D4, #22273E), light-dark(#FFF9ED, #3C4260) 45%) !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-separator{align-self:center !important;height:22px !important;margin:0 5px !important;background:light-dark(#D8C8AF, #353B52) !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-menu{inset-block-start:38px !important;min-width:210px !important;padding:5px !important;border-radius:0 !important;box-shadow:0 1px 2px rgba(0,0,0,.12),0 10px 28px -12px rgba(0,0,0,.35) !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-menu-item{padding:8px 10px !important;border:0 !important;border-radius:0 !important;font:14px system-ui,-apple-system,\"Segoe UI\",sans-serif !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-menu-item[aria-checked=\"true\"]{background:light-dark(#F4ECDF, #1A1D2C) !important;box-shadow:inset 2px 0 light-dark(#8F6310, #D9A445) !important}\n.richclay-dialog:is(.richclay-toolbar, .richclay-float, .richclay-dialog){width:min(100%, 360px) !important;padding:14px 16px 12px !important;border:1px solid light-dark(#D8C8AF, #353B52) !important;border-radius:0 !important;background:light-dark(#FFFCF6, #11131E) !important;color:light-dark(#2B241B, #ECEAF2) !important;box-shadow:0 1px 2px rgba(0,0,0,.12),0 10px 28px -12px rgba(0,0,0,.35) !important}\n.richclay-dialog:is(.richclay-toolbar, .richclay-float, .richclay-dialog)::before{content:\"\" !important;position:absolute !important;left:calc(var(--richclay-dialog-arrow, 28px) - 6px) !important;top:-7px !important;width:12px !important;height:12px !important;background:light-dark(#FFFCF6, #11131E) !important;border-top:1px solid light-dark(#D8C8AF, #353B52) !important;border-left:1px solid light-dark(#D8C8AF, #353B52) !important;transform:rotate(45deg) !important}\n.richclay-dialog:is(.richclay-toolbar, .richclay-float, .richclay-dialog)[data-richclay-side=\"above\"]::before{top:auto !important;bottom:-7px !important;border:0 !important;border-right:1px solid light-dark(#D8C8AF, #353B52) !important;border-bottom:1px solid light-dark(#D8C8AF, #353B52) !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-dialog-title{margin-bottom:2px !important;font:500 10px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace !important;text-transform:uppercase !important;letter-spacing:.12em !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-field{gap:5px !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-field > span{color:light-dark(#4A4033, #C9CDE0) !important;font-size:12px !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-input{min-height:30px !important;padding:4px 8px !important;border:2px solid !important;border-color:light-dark(#B89F7B, #1F2339) light-dark(#F0E1C9, #4D587A) light-dark(#F0E1C9, #4D587A) light-dark(#B89F7B, #1F2339) !important;border-radius:0 !important;background:light-dark(#F4ECDF, #1A1D2C) !important;color:light-dark(#2B241B, #ECEAF2) !important;font:13px system-ui,-apple-system,\"Segoe UI\",sans-serif !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-dialog-actions{margin-top:4px !important;padding-top:12px !important;border-top:1px solid light-dark(#E8DCC6, #262B42) !important;flex-wrap:wrap !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) :is(.richclay-primary, .richclay-secondary){min-height:30px !important;padding:4px 10px !important;border:2px solid !important;border-color:light-dark(#FFF9ED, #3C4260) light-dark(#D6C3A5, #1B2033) light-dark(#D6C3A5, #1B2033) light-dark(#FFF9ED, #3C4260) !important;border-radius:0 !important;background:light-dark(#F1E7D4, #22273E) !important;color:light-dark(#2B241B, #ECEAF2) !important;font:13px system-ui,-apple-system,\"Segoe UI\",sans-serif !important}\n:is(.richclay-toolbar, .richclay-float, .richclay-dialog) .richclay-primary{background:light-dark(#2B241B, #ECEAF2) !important;color:light-dark(#FDF8F0, #0B0C13) !important;border-color:color-mix(in srgb, light-dark(#2B241B, #ECEAF2), white 24%) color-mix(in srgb, light-dark(#2B241B, #ECEAF2), black 32%) color-mix(in srgb, light-dark(#2B241B, #ECEAF2), black 32%) color-mix(in srgb, light-dark(#2B241B, #ECEAF2), white 24%) !important}\n.richclay-float:is(.richclay-toolbar, .richclay-float, .richclay-dialog){border-radius:0 !important;box-shadow:0 1px 2px rgba(0,0,0,.12),0 10px 28px -12px rgba(0,0,0,.35) !important}\n.richclay-float:is(.richclay-toolbar, .richclay-float, .richclay-dialog) > .richclay-toolbar{padding:5px !important}\n.richclay-toolbar{align-items:center !important;background:var(--richclay-surface-alt) !important;border:1px solid var(--richclay-border) !important;border-radius:var(--richclay-radius) !important;color:var(--richclay-text) !important;display:flex !important;flex-wrap:wrap !important;gap:2px !important;margin-block:0 6px !important;padding:4px !important}\n.richclay-toolbar:has(+ .richclay-editor){margin-block-end:0 !important;border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important}\n.richclay-button{align-items:center !important;appearance:none !important;background:transparent !important;border:1px solid transparent !important;border-radius:5px !important;color:currentColor !important;display:inline-flex !important;height:var(--richclay-control-size) !important;justify-content:center !important;margin:0 !important;min-width:var(--richclay-control-size) !important;padding:0 !important;position:relative !important}\n.richclay-button:hover,.richclay-button[aria-expanded=\"true\"],.richclay-menu-item:hover{background:var(--richclay-surface) !important;border-color:var(--richclay-border) !important}\n.richclay-button.is-active,.richclay-button[aria-pressed=\"true\"],.richclay-menu-item.is-active{background:rgb(0 0 0 / 0.13) !important;border-color:rgb(0 0 0 / 0.22) !important;color:var(--richclay-text) !important;box-shadow:inset 0 1px 3px rgb(0 0 0 / 0.26) !important}\n.richclay-button:focus-visible,.richclay-menu-item:focus-visible,.richclay-input:focus-visible,.richclay-primary:focus-visible,.richclay-secondary:focus-visible{outline:3px solid var(--richclay-focus) !important;outline-offset:2px !important}\n.richclay-button:disabled{color:var(--richclay-muted) !important;cursor:not-allowed !important;opacity:0.55 !important}\n.richclay-separator{align-self:stretch !important;background:var(--richclay-border) !important;display:inline-block !important;margin:5px 4px !important;width:1px !important}\n.richclay-menu-wrap{display:inline-flex !important;position:relative !important}\n.richclay-menu{background:var(--richclay-surface) !important;border:1px solid var(--richclay-border) !important;border-radius:var(--richclay-radius) !important;box-shadow:var(--richclay-shadow) !important;color:var(--richclay-text) !important;display:grid !important;gap:2px !important;inset-block-start:calc(100% + 4px) !important;inset-inline-start:0 !important;min-width:160px !important;padding:4px !important;position:absolute !important;z-index:1000 !important}\n.richclay-menu[hidden]{display:none !important}\n.richclay-menu-item{align-items:center !important;appearance:none !important;background:transparent !important;border:1px solid transparent !important;border-radius:4px !important;color:inherit !important;display:flex !important;font:inherit !important;gap:8px !important;min-height:32px !important;padding:5px 9px !important;text-align:start !important}\n.richclay-float{left:0 !important;position:fixed !important;top:0 !important;will-change:transform !important;z-index:99999 !important}\n.richclay-float .richclay-toolbar{box-shadow:var(--richclay-shadow) !important;margin-block:0 !important}\n.richclay-float-rail .richclay-toolbar{--richclay-control-size:28px !important;flex-direction:column !important;flex-wrap:nowrap !important}\n.richclay-float-rail .richclay-toolbar svg{height:15px !important;width:15px !important}\n.richclay-float-rail .richclay-separator{align-self:stretch !important;height:1px !important;margin:4px 5px !important;width:auto !important}\n.richclay-float-rail .richclay-menu{inset-block-start:0 !important;inset-inline-start:calc(100% + 4px) !important}\n.richclay-dialog{background:var(--richclay-surface) !important;border:1px solid var(--richclay-border) !important;border-radius:var(--richclay-radius) !important;box-shadow:var(--richclay-shadow) !important;color:var(--richclay-text) !important;display:grid !important;gap:10px !important;box-sizing:border-box !important;width:min(420px, calc(100vw - 16px)) !important;z-index:99999 !important;padding:12px !important}\n.richclay-dialog-title{font-weight:650 !important}\n.richclay-field{display:grid !important;gap:4px !important}\n.richclay-field span{color:var(--richclay-muted) !important;font-size:0.875rem !important}\n.richclay-input{background:var(--richclay-surface) !important;border:1px solid var(--richclay-border) !important;border-radius:4px !important;color:var(--richclay-text) !important;font:inherit !important;min-height:36px !important;padding:6px 8px !important}\n.richclay-dialog-actions{display:flex !important;gap:8px !important;justify-content:flex-end !important}\n.richclay-dialog-actions [data-richclay-remove-link]{margin-inline-end:auto !important}\n.richclay-primary,.richclay-secondary{appearance:none !important;border:1px solid var(--richclay-border) !important;border-radius:4px !important;font:inherit !important;min-height:34px !important;padding:5px 10px !important}\n.richclay-primary{background:var(--richclay-accent) !important;border-color:var(--richclay-accent) !important;color:var(--richclay-accent-ink) !important}\n.richclay-secondary{background:var(--richclay-surface-alt) !important;color:var(--richclay-text) !important}\n.richclay-sr-only{border:0 !important;clip:rect(0 0 0 0) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:1px !important}\n@media (forced-colors: active){\n.richclay-toolbar,.richclay-menu,.richclay-input{border-color:CanvasText !important}\n.richclay-dialog{border-color:CanvasText !important}\n.richclay-button.is-active,.richclay-button[aria-pressed=\"true\"],.richclay-menu-item.is-active,.richclay-primary{background:Highlight !important;color:HighlightText !important}\n.richclay-button:focus-visible,.richclay-menu-item:focus-visible,.richclay-input:focus-visible{outline-color:Highlight !important}\n}\n.richclay-toolbar[hidden]{display:none !important}\n.richclay-button[hidden]{display:none !important}\n.richclay-separator[hidden]{display:none !important}\n.richclay-menu-wrap[hidden]{display:none !important}\n.richclay-menu[hidden]{display:none !important}\n.richclay-menu-item[hidden]{display:none !important}\n.richclay-dialog[hidden]{display:none !important}\n.richclay-field[hidden]{display:none !important}\n.richclay-dialog-actions[hidden]{display:none !important}\n}";
|