camox 0.40.0 → 0.41.1
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/components/PlatformLabel.js +62 -0
- package/dist/core/components/lexical/GradientNode.js +126 -0
- package/dist/core/components/lexical/InlineLexicalEditor.js +37 -56
- package/dist/core/components/lexical/InlineStylesPlugin.js +183 -0
- package/dist/core/components/lexical/SelectionBroadcaster.js +49 -46
- package/dist/core/components/lexical/SidebarLexicalEditor.js +197 -151
- package/dist/core/components/lexical/editorConfig.js +25 -7
- package/dist/core/components/lexical/selectTextLink.js +21 -0
- package/dist/core/createApp.d.ts +30 -17
- package/dist/core/createApp.js +14 -3
- package/dist/core/createBlock.d.ts +2 -2
- package/dist/core/createBlock.js +17 -28
- package/dist/core/createLayout.d.ts +48 -4
- package/dist/core/createLayout.js +51 -23
- package/dist/core/derivedRoutes.js +36 -0
- package/dist/core/editing/BlockEditingRuntime.js +4 -4
- package/dist/core/editing/CompleteBlockEditingRuntime.js +5 -5
- package/dist/core/editing/createEditableBlock.d.ts +9 -8
- package/dist/core/editing/createEditableBlock.js +265 -403
- package/dist/core/hooks/useIsEditable.js +4 -7
- package/dist/core/hooks/useRequireDraftSource.js +7 -11
- package/dist/core/lib/lexicalReact.d.ts +1 -26
- package/dist/core/lib/lexicalReact.js +46 -60
- package/dist/core/lib/lexicalState.js +164 -81
- package/dist/core/lib/modifierFormats.js +4 -15
- package/dist/core/lib/textStyles.d.ts +27 -0
- package/dist/core/lib/textStyles.js +47 -0
- package/dist/features/navigation/navigation.d.ts +2 -0
- package/dist/features/navigation/navigation.js +51 -46
- package/dist/features/page/DerivedPageContent.js +61 -0
- package/dist/features/page/PublishedPageContent.js +52 -83
- package/dist/features/page/SharedLayoutContent.js +66 -0
- package/dist/features/preview/CamoxPreview.d.ts +16 -1
- package/dist/features/preview/CamoxPreview.js +246 -290
- package/dist/features/preview/DerivedPreview.js +134 -0
- package/dist/features/preview/EditablePageExperience.js +25 -8
- package/dist/features/preview/components/AddBlockSidebar.js +43 -33
- package/dist/features/preview/components/AssetLightbox.js +1 -1
- package/dist/features/preview/components/BlockActionsPopover.js +8 -8
- package/dist/features/preview/components/BlockThumbnail.js +192 -0
- package/dist/features/preview/components/CreatePageModal.js +123 -115
- package/dist/features/preview/components/DerivedLayoutDialog.js +100 -0
- package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +5 -0
- package/dist/features/preview/components/DerivedLayoutSidebar.js +160 -0
- package/dist/features/preview/components/DerivedPageInfoSidebar.js +57 -0
- package/dist/features/preview/components/FieldToolbar.js +42 -20
- package/dist/features/preview/components/Frame.js +133 -140
- package/dist/features/preview/components/LeftSidebar.js +42 -38
- package/dist/features/preview/components/LinkFieldEditor.js +3 -4
- package/dist/features/preview/components/MobilePreviewDrawer.js +4 -4
- package/dist/features/preview/components/Overlays.js +59 -47
- package/dist/features/preview/components/PageEditorSidebar.js +194 -203
- package/dist/features/preview/components/PageInfoSidebar.js +63 -55
- package/dist/features/preview/components/PageNavigatorSidebar.js +34 -483
- package/dist/features/preview/components/PagePicker.js +205 -153
- package/dist/features/preview/components/PageTree.js +366 -340
- package/dist/features/preview/components/PreviewActivation.js +78 -0
- package/dist/features/preview/components/PreviewPanel.js +98 -68
- package/dist/features/preview/components/PreviewToolbar.js +224 -241
- package/dist/features/preview/components/PreviewToolbarSpacer.js +43 -0
- package/dist/features/preview/components/PublicationRow.js +425 -0
- package/dist/features/preview/components/PublishDialog.js +180 -97
- package/dist/features/preview/components/RightSidebar.js +19 -34
- package/dist/features/preview/components/previewStyles.js +8 -0
- package/dist/features/preview/components/useUpdateBlockPosition.js +7 -13
- package/dist/features/preview/previewConstants.js +8 -0
- package/dist/features/preview/previewStore.js +18 -39
- package/dist/features/preview/publication.js +71 -0
- package/dist/features/provider/AuthenticatedCamoxProvider.js +2 -1
- package/dist/features/provider/CoreCamoxProvider.js +11 -2
- package/dist/features/provider/LocalhostPreviewProvider.js +6 -7
- package/dist/features/provider/useAdminShortcuts.js +5 -4
- package/dist/features/routes/pageRuntime.d.ts +10 -0
- package/dist/features/routes/pageRuntime.js +7 -9
- package/dist/features/runtime/PreviewDocumentContext.js +7 -0
- package/dist/features/runtime/RuntimeChrome.js +149 -0
- package/dist/features/runtime/SharedChromeContext.js +7 -0
- package/dist/features/runtime/navigationRequest.js +21 -0
- package/dist/features/runtime/navigationTarget.js +23 -0
- package/dist/features/runtime/pageApp.js +196 -121
- package/dist/features/runtime/pageNavigation.js +79 -130
- package/dist/features/runtime/runtime.d.ts +11 -0
- package/dist/features/runtime/runtime.js +183 -47
- package/dist/features/runtime/studioApp.d.ts +2 -11
- package/dist/features/runtime/studioApp.js +14 -177
- package/dist/features/studio/CamoxStudio.js +27 -13
- package/dist/features/studio/components/Navbar.js +80 -74
- package/dist/features/studio/components/UserButton.js +4 -4
- package/dist/features/studio/studioTheme.js +25 -0
- package/dist/features/studio/useTheme.js +94 -109
- package/dist/features/vite/appGeneration.js +12 -3
- package/dist/features/vite/definitionsSync.js +4 -2
- package/dist/features/vite/layoutGeneration.js +38 -0
- package/dist/features/vite/runtimeDev.js +3 -1
- package/dist/lib/auth.js +15 -13
- package/dist/lib/normalized-data.js +4 -4
- package/dist/lib/platform.js +13 -0
- package/dist/lib/utils.js +90 -38
- package/dist/studio-overlays.css +5 -40
- package/dist/studio.css +1 -1
- package/package.json +8 -4
- package/skills/camox/SKILL.md +2 -0
- package/skills/camox/references/block-definitions.md +31 -12
- package/skills/camox/references/layout-definitions.md +2 -0
- package/dist/core/lib/modifiers.js +0 -24
- package/dist/features/preview/components/DraftSwitchDialog.js +0 -66
- package/dist/features/preview/previewQueryFns.js +0 -23
- package/dist/features/runtime/studioNavigation.js +0 -120
package/dist/lib/auth.js
CHANGED
|
@@ -217,9 +217,9 @@ function useProcessOtt(authClient) {
|
|
|
217
217
|
const AuthContext = React.createContext(null);
|
|
218
218
|
function useAuthContext() {
|
|
219
219
|
const $ = c(1);
|
|
220
|
-
if ($[0] !== "
|
|
220
|
+
if ($[0] !== "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b") {
|
|
221
221
|
for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
222
|
-
$[0] = "
|
|
222
|
+
$[0] = "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b";
|
|
223
223
|
}
|
|
224
224
|
const ctx = React.useContext(AuthContext);
|
|
225
225
|
if (!ctx) throw new Error("Missing CamoxProvider");
|
|
@@ -227,34 +227,36 @@ function useAuthContext() {
|
|
|
227
227
|
}
|
|
228
228
|
function useProjectSlug() {
|
|
229
229
|
const $ = c(1);
|
|
230
|
-
if ($[0] !== "
|
|
230
|
+
if ($[0] !== "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b") {
|
|
231
231
|
for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
232
|
-
$[0] = "
|
|
232
|
+
$[0] = "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b";
|
|
233
233
|
}
|
|
234
234
|
return useAuthContext().projectSlug;
|
|
235
235
|
}
|
|
236
|
+
const subscribeToHydration = () => () => {};
|
|
236
237
|
function useAuthState() {
|
|
237
|
-
const { authClient } = useAuthContext();
|
|
238
|
+
const { authClient, initialAuthenticated = false } = useAuthContext();
|
|
238
239
|
const { data: session, isPending } = authClient.useSession();
|
|
240
|
+
const useInitial = !React.useSyncExternalStore(subscribeToHydration, () => true, () => false) || isPending;
|
|
239
241
|
return {
|
|
240
|
-
isAuthenticated: !!session,
|
|
241
|
-
isLoading:
|
|
242
|
+
isAuthenticated: useInitial ? initialAuthenticated : !!session,
|
|
243
|
+
isLoading: useInitial && !initialAuthenticated
|
|
242
244
|
};
|
|
243
245
|
}
|
|
244
246
|
function useIsAuthenticated() {
|
|
245
247
|
const $ = c(1);
|
|
246
|
-
if ($[0] !== "
|
|
248
|
+
if ($[0] !== "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b") {
|
|
247
249
|
for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
248
|
-
$[0] = "
|
|
250
|
+
$[0] = "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b";
|
|
249
251
|
}
|
|
250
252
|
const { isAuthenticated } = useAuthState();
|
|
251
253
|
return isAuthenticated;
|
|
252
254
|
}
|
|
253
255
|
function useSignInRedirect(callbackHref) {
|
|
254
256
|
const $ = c(4);
|
|
255
|
-
if ($[0] !== "
|
|
257
|
+
if ($[0] !== "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b") {
|
|
256
258
|
for (let $i = 0; $i < 4; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
257
|
-
$[0] = "
|
|
259
|
+
$[0] = "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b";
|
|
258
260
|
}
|
|
259
261
|
const { authenticationUrl } = useAuthContext();
|
|
260
262
|
let t0;
|
|
@@ -276,9 +278,9 @@ function useSignInRedirect(callbackHref) {
|
|
|
276
278
|
*/
|
|
277
279
|
function useAuthActions() {
|
|
278
280
|
const $ = c(5);
|
|
279
|
-
if ($[0] !== "
|
|
281
|
+
if ($[0] !== "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b") {
|
|
280
282
|
for (let $i = 0; $i < 5; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
281
|
-
$[0] = "
|
|
283
|
+
$[0] = "613abd4be0f81de0bf8df48c671a83e40c3e6ac86dab4c38ebcffe92268b614b";
|
|
282
284
|
}
|
|
283
285
|
const { authClient, authenticationUrl } = useAuthContext();
|
|
284
286
|
let t0;
|
|
@@ -11,9 +11,9 @@ const NormalizedDataContext = React.createContext({
|
|
|
11
11
|
});
|
|
12
12
|
const NormalizedDataProvider = (t0) => {
|
|
13
13
|
const $ = c(13);
|
|
14
|
-
if ($[0] !== "
|
|
14
|
+
if ($[0] !== "28aab7b25bd21e351d34503ab3d745344dc158d8c4a4ad7a8c63e2c8732703bb") {
|
|
15
15
|
for (let $i = 0; $i < 13; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
16
|
-
$[0] = "
|
|
16
|
+
$[0] = "28aab7b25bd21e351d34503ab3d745344dc158d8c4a4ad7a8c63e2c8732703bb";
|
|
17
17
|
}
|
|
18
18
|
const { files, repeatableItems, children } = t0;
|
|
19
19
|
let t1;
|
|
@@ -74,9 +74,9 @@ function useStableArray(next) {
|
|
|
74
74
|
}
|
|
75
75
|
function usePageBlocks(pageStructure, t0) {
|
|
76
76
|
const $ = c(37);
|
|
77
|
-
if ($[0] !== "
|
|
77
|
+
if ($[0] !== "28aab7b25bd21e351d34503ab3d745344dc158d8c4a4ad7a8c63e2c8732703bb") {
|
|
78
78
|
for (let $i = 0; $i < 37; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
79
|
-
$[0] = "
|
|
79
|
+
$[0] = "28aab7b25bd21e351d34503ab3d745344dc158d8c4a4ad7a8c63e2c8732703bb";
|
|
80
80
|
}
|
|
81
81
|
const source = t0 === void 0 ? "draft" : t0;
|
|
82
82
|
const blockIds = pageStructure.page.blockIds;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/lib/platform.ts
|
|
2
|
+
function bootstrapPlatform() {
|
|
3
|
+
document.documentElement.dataset.camoxPlatform = /Mac|iPhone|iPad|iPod/i.test(navigator.userAgent) ? "mac" : "other";
|
|
4
|
+
}
|
|
5
|
+
const PLATFORM_SCRIPT = `(${bootstrapPlatform.toString()})();`;
|
|
6
|
+
const PLATFORM_LABEL_CSS = `
|
|
7
|
+
.camox-platform-mac{display:none}
|
|
8
|
+
:root[data-camox-platform="mac"] .camox-platform-mac{display:inline}
|
|
9
|
+
:root[data-camox-platform="mac"] .camox-platform-other{display:none}
|
|
10
|
+
`;
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { PLATFORM_LABEL_CSS, PLATFORM_SCRIPT, bootstrapPlatform };
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PlatformLabel } from "../components/PlatformLabel.js";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
4
|
import { Kbd } from "@camox/ui/kbd";
|
|
3
5
|
import { INPUT_BASE_STYLES, INPUT_FOCUS_STYLES, cn } from "@camox/ui/utils";
|
|
4
6
|
|
|
@@ -21,44 +23,94 @@ function checkIfInputFocused(document = window.document) {
|
|
|
21
23
|
*/
|
|
22
24
|
function formatShortcut(shortcut) {
|
|
23
25
|
if (!shortcut) return null;
|
|
24
|
-
|
|
25
|
-
const modifiers = [];
|
|
26
|
-
if (shortcut.withMeta) modifiers.push(isMac ? "⌘" : "Ctrl");
|
|
27
|
-
if (shortcut.withAlt) modifiers.push(isMac ? "⌥" : "Alt");
|
|
28
|
-
if (shortcut.withShift) modifiers.push(isMac ? "⇧" : "Shift");
|
|
29
|
-
const formattedKey = (() => {
|
|
30
|
-
if (shortcut.key === "Enter") return "↵";
|
|
31
|
-
if (shortcut.key === "Escape") return "Esc";
|
|
32
|
-
if (shortcut.key === "Backspace") return "⌫";
|
|
33
|
-
if (shortcut.key === "ArrowUp") return "↑";
|
|
34
|
-
if (shortcut.key === "ArrowDown") return "↓";
|
|
35
|
-
if (shortcut.key === "ArrowLeft") return "←";
|
|
36
|
-
if (shortcut.key === "ArrowRight") return "→";
|
|
37
|
-
return shortcut.key.toUpperCase();
|
|
38
|
-
})();
|
|
39
|
-
return /* @__PURE__ */ jsxs(Kbd, { children: [
|
|
40
|
-
modifiers.join(),
|
|
41
|
-
" ",
|
|
42
|
-
formattedKey
|
|
43
|
-
] });
|
|
26
|
+
return /* @__PURE__ */ jsx(Shortcut, { shortcut });
|
|
44
27
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
28
|
+
function Shortcut(t0) {
|
|
29
|
+
const $ = c(15);
|
|
30
|
+
if ($[0] !== "45dff80dbc1805709c694dadbd04b0216f01c3a1a826daf47b8bb5bac9e42d9a") {
|
|
31
|
+
for (let $i = 0; $i < 15; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
32
|
+
$[0] = "45dff80dbc1805709c694dadbd04b0216f01c3a1a826daf47b8bb5bac9e42d9a";
|
|
33
|
+
}
|
|
34
|
+
const { shortcut } = t0;
|
|
35
|
+
let t1;
|
|
36
|
+
bb0: {
|
|
37
|
+
if (shortcut.key === "Enter") {
|
|
38
|
+
t1 = "↵";
|
|
39
|
+
break bb0;
|
|
40
|
+
}
|
|
41
|
+
if (shortcut.key === "Escape") {
|
|
42
|
+
t1 = "Esc";
|
|
43
|
+
break bb0;
|
|
44
|
+
}
|
|
45
|
+
if (shortcut.key === "Backspace") {
|
|
46
|
+
t1 = "⌫";
|
|
47
|
+
break bb0;
|
|
48
|
+
}
|
|
49
|
+
if (shortcut.key === "ArrowUp") {
|
|
50
|
+
t1 = "↑";
|
|
51
|
+
break bb0;
|
|
52
|
+
}
|
|
53
|
+
if (shortcut.key === "ArrowDown") {
|
|
54
|
+
t1 = "↓";
|
|
55
|
+
break bb0;
|
|
56
|
+
}
|
|
57
|
+
if (shortcut.key === "ArrowLeft") {
|
|
58
|
+
t1 = "←";
|
|
59
|
+
break bb0;
|
|
60
|
+
}
|
|
61
|
+
if (shortcut.key === "ArrowRight") {
|
|
62
|
+
t1 = "→";
|
|
63
|
+
break bb0;
|
|
64
|
+
}
|
|
65
|
+
let t2;
|
|
66
|
+
if ($[1] !== shortcut.key) {
|
|
67
|
+
t2 = shortcut.key.toUpperCase();
|
|
68
|
+
$[1] = shortcut.key;
|
|
69
|
+
$[2] = t2;
|
|
70
|
+
} else t2 = $[2];
|
|
71
|
+
t1 = t2;
|
|
72
|
+
}
|
|
73
|
+
const formattedKey = t1;
|
|
74
|
+
let t2;
|
|
75
|
+
if ($[3] !== formattedKey || $[4] !== shortcut.withAlt || $[5] !== shortcut.withMeta || $[6] !== shortcut.withShift) {
|
|
76
|
+
t2 = (mac) => {
|
|
77
|
+
const modifiers = [];
|
|
78
|
+
if (shortcut.withMeta) modifiers.push(mac ? "⌘" : "Ctrl");
|
|
79
|
+
if (shortcut.withAlt) modifiers.push(mac ? "⌥" : "Alt");
|
|
80
|
+
if (shortcut.withShift) modifiers.push(mac ? "⇧" : "Shift");
|
|
81
|
+
return `${modifiers.join()} ${formattedKey}`.trim();
|
|
82
|
+
};
|
|
83
|
+
$[3] = formattedKey;
|
|
84
|
+
$[4] = shortcut.withAlt;
|
|
85
|
+
$[5] = shortcut.withMeta;
|
|
86
|
+
$[6] = shortcut.withShift;
|
|
87
|
+
$[7] = t2;
|
|
88
|
+
} else t2 = $[7];
|
|
89
|
+
const label = t2;
|
|
90
|
+
let t3;
|
|
91
|
+
if ($[8] !== label) {
|
|
92
|
+
t3 = label(true);
|
|
93
|
+
$[8] = label;
|
|
94
|
+
$[9] = t3;
|
|
95
|
+
} else t3 = $[9];
|
|
96
|
+
let t4;
|
|
97
|
+
if ($[10] !== label) {
|
|
98
|
+
t4 = label(false);
|
|
99
|
+
$[10] = label;
|
|
100
|
+
$[11] = t4;
|
|
101
|
+
} else t4 = $[11];
|
|
102
|
+
let t5;
|
|
103
|
+
if ($[12] !== t3 || $[13] !== t4) {
|
|
104
|
+
t5 = /* @__PURE__ */ jsx(Kbd, { children: /* @__PURE__ */ jsx(PlatformLabel, {
|
|
105
|
+
mac: t3,
|
|
106
|
+
other: t4
|
|
107
|
+
}) });
|
|
108
|
+
$[12] = t3;
|
|
109
|
+
$[13] = t4;
|
|
110
|
+
$[14] = t5;
|
|
111
|
+
} else t5 = $[14];
|
|
112
|
+
return t5;
|
|
61
113
|
}
|
|
62
114
|
|
|
63
115
|
//#endregion
|
|
64
|
-
export { INPUT_BASE_STYLES, INPUT_FOCUS_STYLES, checkIfInputFocused, cn, formatShortcut
|
|
116
|
+
export { INPUT_BASE_STYLES, INPUT_FOCUS_STYLES, checkIfInputFocused, cn, formatShortcut };
|
package/dist/studio-overlays.css
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* State is driven by data attributes on the elements:
|
|
5
5
|
* - data-camox-hovered: element is hovered
|
|
6
6
|
* - data-camox-focused: element is focused/selected
|
|
7
|
-
* - data-camox-overlay-mode="
|
|
7
|
+
* - data-camox-overlay-mode="synced": use synced-block (purple) colors
|
|
8
8
|
*
|
|
9
9
|
* Elements are targeted via their existing data attributes:
|
|
10
10
|
* - [data-camox-field-id]: Field, Link, Image, Embed
|
|
@@ -15,8 +15,6 @@
|
|
|
15
15
|
:root {
|
|
16
16
|
--camox-overlay-color-hover: #f472b6bf; /* pink-400 at 75% */
|
|
17
17
|
--camox-overlay-color-selected: #f472b6; /* pink-400 */
|
|
18
|
-
--camox-overlay-layout-color-hover: #c084fcbf; /* purple-400 at 75% */
|
|
19
|
-
--camox-overlay-layout-color-selected: #c084fc; /* purple-400 */
|
|
20
18
|
--camox-overlay-width-hover: 3px;
|
|
21
19
|
--camox-overlay-width-selected: 1px;
|
|
22
20
|
--camox-overlay-inset-field-hover: -1px;
|
|
@@ -79,35 +77,10 @@
|
|
|
79
77
|
box-shadow: 0 0 0 var(--camox-overlay-width-selected) var(--camox-overlay-color-selected) !important;
|
|
80
78
|
}
|
|
81
79
|
|
|
82
|
-
/*
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
[data-camox-detached]
|
|
87
|
-
)::after,
|
|
88
|
-
[data-camox-repeater-item-id][data-camox-overlay-mode="layout"][data-camox-hovered]::after {
|
|
89
|
-
border-color: var(--camox-overlay-layout-color-hover);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
[data-camox-field-id][data-camox-field-type][data-camox-overlay-mode="layout"][data-camox-focused]::after,
|
|
93
|
-
[data-camox-block-id][data-camox-overlay-mode="layout"][data-camox-focused]:not(
|
|
94
|
-
[data-camox-detached]
|
|
95
|
-
)::after {
|
|
96
|
-
border-color: var(--camox-overlay-layout-color-selected);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
[data-camox-field-id]:not(
|
|
100
|
-
[data-camox-field-type]
|
|
101
|
-
)[data-camox-overlay-mode="layout"][data-camox-hovered] {
|
|
102
|
-
box-shadow: 0 0 0 var(--camox-overlay-width-hover) var(--camox-overlay-layout-color-hover) !important;
|
|
103
|
-
border-radius: 0 !important;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
[data-camox-field-id]:not(
|
|
107
|
-
[data-camox-field-type]
|
|
108
|
-
)[data-camox-overlay-mode="layout"][data-camox-focused] {
|
|
109
|
-
box-shadow: 0 0 0 var(--camox-overlay-width-selected) var(--camox-overlay-layout-color-selected) !important;
|
|
110
|
-
border-radius: 0 !important;
|
|
80
|
+
/* Shared data is purple, regardless of whether its placement is in a layout. */
|
|
81
|
+
[data-camox-overlay-mode="synced"] {
|
|
82
|
+
--camox-overlay-color-hover: #c084fcbf;
|
|
83
|
+
--camox-overlay-color-selected: #c084fc;
|
|
111
84
|
}
|
|
112
85
|
|
|
113
86
|
/* ---- Embed: z-index above click-interceptor ---- */
|
|
@@ -130,14 +103,6 @@
|
|
|
130
103
|
border: var(--camox-overlay-width-selected) solid var(--camox-overlay-color-selected);
|
|
131
104
|
}
|
|
132
105
|
|
|
133
|
-
[data-camox-detached][data-camox-overlay-mode="layout"][data-camox-hovered] {
|
|
134
|
-
border-color: var(--camox-overlay-layout-color-hover);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
[data-camox-detached][data-camox-overlay-mode="layout"][data-camox-focused] {
|
|
138
|
-
border-color: var(--camox-overlay-layout-color-selected);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
106
|
/* ---- Add-block overlay ---- */
|
|
142
107
|
|
|
143
108
|
.camox-sheet-overlay {
|