camox 0.6.0 → 0.7.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/core/components/AddBlockControlBar.d.ts.map +1 -1
- package/dist/core/components/AddBlockControlBar.js +51 -117
- package/dist/core/components/lexical/InlineLexicalEditor.js +1 -1
- package/dist/core/components/lexical/SidebarLexicalEditor.js +1 -1
- package/dist/core/createApp.d.ts +314 -44
- package/dist/core/createApp.d.ts.map +1 -1
- package/dist/core/createBlock.d.ts +160 -22
- package/dist/core/createBlock.d.ts.map +1 -1
- package/dist/core/createBlock.js +467 -579
- package/dist/features/content/components/AssetCard.js +1 -1
- package/dist/features/preview/CamoxPreview.d.ts.map +1 -1
- package/dist/features/preview/CamoxPreview.js +12 -16
- package/dist/features/preview/components/AddBlockSheet.d.ts.map +1 -1
- package/dist/features/preview/components/AddBlockSheet.js +1 -2
- package/dist/features/preview/components/AssetLightbox.d.ts.map +1 -1
- package/dist/features/preview/components/AssetLightbox.js +13 -15
- package/dist/features/preview/components/BlockActionsPopover.d.ts.map +1 -1
- package/dist/features/preview/components/BlockActionsPopover.js +19 -22
- package/dist/features/preview/components/CreatePageSheet.d.ts.map +1 -1
- package/dist/features/preview/components/CreatePageSheet.js +10 -4
- package/dist/features/preview/components/EditPageSheet.d.ts +1 -1
- package/dist/features/preview/components/EditPageSheet.d.ts.map +1 -1
- package/dist/features/preview/components/EditPageSheet.js +20 -17
- package/dist/features/preview/components/FieldOverlayStyles.d.ts +2 -0
- package/dist/features/preview/components/FieldOverlayStyles.d.ts.map +1 -0
- package/dist/features/preview/components/FieldOverlayStyles.js +15 -0
- package/dist/features/preview/components/Frame.d.ts +20 -0
- package/dist/features/preview/components/Frame.d.ts.map +1 -0
- package/dist/features/preview/components/Frame.js +162 -0
- package/dist/features/preview/components/LinkFieldEditor.d.ts.map +1 -1
- package/dist/features/preview/components/LinkFieldEditor.js +11 -12
- package/dist/features/preview/components/OverlayTracker.js +1 -1
- package/dist/features/preview/components/PageContentSheet.d.ts.map +1 -1
- package/dist/features/preview/components/PageContentSheet.js +3 -3
- package/dist/features/preview/components/PageLocationFieldset.d.ts.map +1 -1
- package/dist/features/preview/components/PageLocationFieldset.js +9 -11
- package/dist/features/preview/components/PagePicker.d.ts.map +1 -1
- package/dist/features/preview/components/PagePicker.js +15 -15
- package/dist/features/preview/components/PageTree.d.ts.map +1 -1
- package/dist/features/preview/components/PageTree.js +215 -203
- package/dist/features/preview/components/PreviewPanel.d.ts.map +1 -1
- package/dist/features/preview/components/PreviewPanel.js +21 -15
- package/dist/features/preview/components/PreviewSideSheet.d.ts.map +1 -1
- package/dist/features/preview/components/PreviewSideSheet.js +42 -26
- package/dist/features/preview/components/PreviewToolbar.d.ts.map +1 -1
- package/dist/features/preview/components/PreviewToolbar.js +191 -171
- package/dist/features/preview/components/RepeatableItemsList.d.ts.map +1 -1
- package/dist/features/preview/components/RepeatableItemsList.js +4 -5
- package/dist/features/preview/components/TextFormatToolbar.d.ts.map +1 -1
- package/dist/features/preview/components/TextFormatToolbar.js +5 -6
- package/dist/features/preview/components/UnlinkAssetButton.d.ts.map +1 -1
- package/dist/features/preview/components/UnlinkAssetButton.js +70 -91
- package/dist/features/preview/studio-overlays.css?inline.js +4 -0
- package/dist/features/provider/components/CamoxAppContext.d.ts +314 -44
- package/dist/features/provider/components/CamoxAppContext.d.ts.map +1 -1
- package/dist/features/provider/components/CommandPalette.d.ts.map +1 -1
- package/dist/features/provider/components/CommandPalette.js +22 -14
- package/dist/features/studio/CamoxStudio.d.ts +2 -3
- package/dist/features/studio/CamoxStudio.d.ts.map +1 -1
- package/dist/features/studio/components/EnvironmentMenu.d.ts.map +1 -1
- package/dist/features/studio/components/EnvironmentMenu.js +39 -35
- package/dist/features/studio/components/Navbar.js +2 -2
- package/dist/features/studio/components/ProjectMenu.d.ts.map +1 -1
- package/dist/features/studio/components/ProjectMenu.js +143 -129
- package/dist/features/studio/components/UserButton.d.ts.map +1 -1
- package/dist/features/studio/components/UserButton.js +8 -9
- package/dist/features/vite/definitionsSync.d.ts.map +1 -1
- package/dist/features/vite/definitionsSync.js +24 -2
- package/dist/features/vite/vite.d.ts +2 -0
- package/dist/features/vite/vite.d.ts.map +1 -1
- package/dist/features/vite/vite.js +27 -31
- package/dist/lib/api-client.d.ts +17 -17
- package/dist/lib/queries.d.ts +7 -7
- package/dist/studio.css +1 -1
- package/package.json +5 -6
- package/skills/camox-block/SKILL.md +55 -28
- package/dist/features/preview/overlayConstants.d.ts +0 -19
- package/dist/features/preview/overlayConstants.d.ts.map +0 -1
- package/dist/features/preview/overlayConstants.js +0 -21
|
@@ -10,7 +10,7 @@ import { X } from "lucide-react";
|
|
|
10
10
|
import { AlertDialog, AlertDialogAction, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@camox/ui/alert-dialog";
|
|
11
11
|
//#region src/features/preview/components/UnlinkAssetButton.tsx
|
|
12
12
|
var UnlinkAssetButton = (t0) => {
|
|
13
|
-
const $ = c(
|
|
13
|
+
const $ = c(37);
|
|
14
14
|
const { fileId, onUnlink, className } = t0;
|
|
15
15
|
const [dialogOpen, setDialogOpen] = useState(false);
|
|
16
16
|
let t1;
|
|
@@ -60,120 +60,99 @@ var UnlinkAssetButton = (t0) => {
|
|
|
60
60
|
$[11] = t6;
|
|
61
61
|
} else t6 = $[11];
|
|
62
62
|
let t7;
|
|
63
|
-
if ($[12]
|
|
64
|
-
t7 = /* @__PURE__ */ jsx(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
asChild: true,
|
|
71
|
-
children: /* @__PURE__ */ jsx(Button, {
|
|
72
|
-
type: "button",
|
|
73
|
-
variant: "ghost",
|
|
74
|
-
size: "icon-sm",
|
|
75
|
-
className: t6,
|
|
76
|
-
onClick: handleClick,
|
|
77
|
-
children: t7
|
|
78
|
-
})
|
|
63
|
+
if ($[12] !== handleClick || $[13] !== t6) {
|
|
64
|
+
t7 = /* @__PURE__ */ jsx(Button, {
|
|
65
|
+
type: "button",
|
|
66
|
+
variant: "ghost",
|
|
67
|
+
size: "icon-sm",
|
|
68
|
+
className: t6,
|
|
69
|
+
onClick: handleClick
|
|
79
70
|
});
|
|
80
|
-
$[
|
|
81
|
-
$[
|
|
71
|
+
$[12] = handleClick;
|
|
72
|
+
$[13] = t6;
|
|
73
|
+
$[14] = t7;
|
|
74
|
+
} else t7 = $[14];
|
|
75
|
+
let t8;
|
|
76
|
+
if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
|
|
77
|
+
t8 = /* @__PURE__ */ jsx(X, { className: "h-4 w-4" });
|
|
82
78
|
$[15] = t8;
|
|
83
79
|
} else t8 = $[15];
|
|
84
80
|
let t9;
|
|
85
|
-
if ($[16]
|
|
86
|
-
t9 = /* @__PURE__ */ jsx(
|
|
87
|
-
|
|
88
|
-
|
|
81
|
+
if ($[16] !== t7) {
|
|
82
|
+
t9 = /* @__PURE__ */ jsx(TooltipTrigger, {
|
|
83
|
+
render: t7,
|
|
84
|
+
children: t8
|
|
85
|
+
});
|
|
86
|
+
$[16] = t7;
|
|
87
|
+
$[17] = t9;
|
|
88
|
+
} else t9 = $[17];
|
|
89
89
|
let t10;
|
|
90
|
-
if ($[
|
|
91
|
-
t10 = /* @__PURE__ */
|
|
92
|
-
$[17] = t8;
|
|
90
|
+
if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
|
|
91
|
+
t10 = /* @__PURE__ */ jsx(TooltipContent, { children: "Unlink" });
|
|
93
92
|
$[18] = t10;
|
|
94
93
|
} else t10 = $[18];
|
|
95
94
|
let t11;
|
|
96
|
-
if ($[19]
|
|
97
|
-
t11 = /* @__PURE__ */ jsxs(
|
|
98
|
-
$[19] =
|
|
99
|
-
|
|
95
|
+
if ($[19] !== t9) {
|
|
96
|
+
t11 = /* @__PURE__ */ jsxs(Tooltip, { children: [t9, t10] });
|
|
97
|
+
$[19] = t9;
|
|
98
|
+
$[20] = t11;
|
|
99
|
+
} else t11 = $[20];
|
|
100
100
|
let t12;
|
|
101
|
-
if ($[
|
|
102
|
-
t12 = ()
|
|
103
|
-
$[20] = onUnlink;
|
|
101
|
+
if ($[21] === Symbol.for("react.memo_cache_sentinel")) {
|
|
102
|
+
t12 = /* @__PURE__ */ jsxs(AlertDialogHeader, { children: [/* @__PURE__ */ jsx(AlertDialogTitle, { children: "Unlink file" }), /* @__PURE__ */ jsx(AlertDialogDescription, { children: "This file is not used anywhere else. Would you like to also delete it?" })] });
|
|
104
103
|
$[21] = t12;
|
|
105
104
|
} else t12 = $[21];
|
|
106
105
|
let t13;
|
|
107
|
-
if ($[22]
|
|
108
|
-
t13 = /* @__PURE__ */ jsx(
|
|
106
|
+
if ($[22] !== onUnlink) {
|
|
107
|
+
t13 = /* @__PURE__ */ jsx(AlertDialogAction, {
|
|
109
108
|
variant: "outline",
|
|
110
109
|
className: "bg-background hover:bg-accent text-foreground",
|
|
110
|
+
onClick: () => onUnlink(),
|
|
111
111
|
children: "Unlink only"
|
|
112
112
|
});
|
|
113
|
-
$[22] =
|
|
114
|
-
|
|
113
|
+
$[22] = onUnlink;
|
|
114
|
+
$[23] = t13;
|
|
115
|
+
} else t13 = $[23];
|
|
115
116
|
let t14;
|
|
116
|
-
if ($[
|
|
117
|
+
if ($[24] !== deleteFile || $[25] !== fileId || $[26] !== onUnlink) {
|
|
117
118
|
t14 = /* @__PURE__ */ jsx(AlertDialogAction, {
|
|
118
|
-
onClick:
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
onClick: () => {
|
|
120
|
+
onUnlink();
|
|
121
|
+
if (fileId) deleteFile.mutate({ id: fileId });
|
|
122
|
+
},
|
|
123
|
+
children: "Delete file"
|
|
121
124
|
});
|
|
122
|
-
$[
|
|
123
|
-
$[
|
|
124
|
-
|
|
125
|
+
$[24] = deleteFile;
|
|
126
|
+
$[25] = fileId;
|
|
127
|
+
$[26] = onUnlink;
|
|
128
|
+
$[27] = t14;
|
|
129
|
+
} else t14 = $[27];
|
|
125
130
|
let t15;
|
|
126
|
-
if ($[
|
|
127
|
-
t15 = (
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
};
|
|
131
|
-
$[25] = deleteFile;
|
|
132
|
-
$[26] = fileId;
|
|
133
|
-
$[27] = onUnlink;
|
|
134
|
-
$[28] = t15;
|
|
135
|
-
} else t15 = $[28];
|
|
136
|
-
let t16;
|
|
137
|
-
if ($[29] === Symbol.for("react.memo_cache_sentinel")) {
|
|
138
|
-
t16 = /* @__PURE__ */ jsx(Button, { children: "Delete file" });
|
|
139
|
-
$[29] = t16;
|
|
140
|
-
} else t16 = $[29];
|
|
141
|
-
let t17;
|
|
142
|
-
if ($[30] !== t15) {
|
|
143
|
-
t17 = /* @__PURE__ */ jsx(AlertDialogAction, {
|
|
144
|
-
onClick: t15,
|
|
145
|
-
asChild: true,
|
|
146
|
-
children: t16
|
|
147
|
-
});
|
|
131
|
+
if ($[28] !== t13 || $[29] !== t14) {
|
|
132
|
+
t15 = /* @__PURE__ */ jsxs(AlertDialogContent, { children: [t12, /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [t13, t14] })] });
|
|
133
|
+
$[28] = t13;
|
|
134
|
+
$[29] = t14;
|
|
148
135
|
$[30] = t15;
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
t18 = /* @__PURE__ */ jsxs(AlertDialogContent, { children: [t11, /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [t14, t17] })] });
|
|
154
|
-
$[32] = t14;
|
|
155
|
-
$[33] = t17;
|
|
156
|
-
$[34] = t18;
|
|
157
|
-
} else t18 = $[34];
|
|
158
|
-
let t19;
|
|
159
|
-
if ($[35] !== dialogOpen || $[36] !== t18) {
|
|
160
|
-
t19 = /* @__PURE__ */ jsx(AlertDialog, {
|
|
136
|
+
} else t15 = $[30];
|
|
137
|
+
let t16;
|
|
138
|
+
if ($[31] !== dialogOpen || $[32] !== t15) {
|
|
139
|
+
t16 = /* @__PURE__ */ jsx(AlertDialog, {
|
|
161
140
|
open: dialogOpen,
|
|
162
141
|
onOpenChange: setDialogOpen,
|
|
163
|
-
children:
|
|
142
|
+
children: t15
|
|
164
143
|
});
|
|
165
|
-
$[
|
|
166
|
-
$[
|
|
167
|
-
$[
|
|
168
|
-
} else
|
|
169
|
-
let
|
|
170
|
-
if ($[
|
|
171
|
-
|
|
172
|
-
$[
|
|
173
|
-
$[
|
|
174
|
-
$[
|
|
175
|
-
} else
|
|
176
|
-
return
|
|
144
|
+
$[31] = dialogOpen;
|
|
145
|
+
$[32] = t15;
|
|
146
|
+
$[33] = t16;
|
|
147
|
+
} else t16 = $[33];
|
|
148
|
+
let t17;
|
|
149
|
+
if ($[34] !== t11 || $[35] !== t16) {
|
|
150
|
+
t17 = /* @__PURE__ */ jsxs(Fragment, { children: [t11, t16] });
|
|
151
|
+
$[34] = t11;
|
|
152
|
+
$[35] = t16;
|
|
153
|
+
$[36] = t17;
|
|
154
|
+
} else t17 = $[36];
|
|
155
|
+
return t17;
|
|
177
156
|
};
|
|
178
157
|
//#endregion
|
|
179
158
|
export { UnlinkAssetButton };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
//#region src/features/preview/studio-overlays.css?inline
|
|
2
|
+
var studio_overlays_default = "/*\n * Visual editing overlay styles injected into the preview iframe.\n *\n * State is driven by data attributes on the elements:\n * - data-camox-hovered: element is hovered\n * - data-camox-focused: element is focused/selected\n * - data-camox-overlay-mode=\"layout\": use layout (purple) colors\n *\n * Elements are targeted via their existing data attributes:\n * - [data-camox-field-id]: Field, Link, Image, Embed\n * - [data-camox-block-id]: BlockComponent, Detached\n * - [data-camox-repeater-item-id]: RepeaterItemWrapper\n */\n\n:root {\n --camox-overlay-color-hover: #f472b6bf; /* pink-400 at 75% */\n --camox-overlay-color-selected: #f472b6; /* pink-400 */\n --camox-overlay-layout-color-hover: #c084fcbf; /* purple-400 at 75% */\n --camox-overlay-layout-color-selected: #c084fc; /* purple-400 */\n --camox-overlay-width-hover: 3px;\n --camox-overlay-width-selected: 1px;\n --camox-overlay-inset-field-hover: -1px;\n --camox-overlay-inset-field-selected: -2px;\n --camox-overlay-inset-block-hover: -1px;\n --camox-overlay-inset-block-selected: 0px;\n}\n\n/* Position context for field-level and repeater elements.\n BlockComponent already has position: relative inline.\n Detached wraps user elements (e.g. fixed navbars) so must NOT get position: relative. */\n[data-camox-field-id],\n[data-camox-repeater-item-id] {\n position: relative;\n}\n\n/* ---- Hovered state ---- */\n\n[data-camox-field-id][data-camox-hovered]::after,\n[data-camox-block-id][data-camox-hovered]:not([data-camox-detached])::after,\n[data-camox-repeater-item-id][data-camox-hovered]::after {\n content: \"\";\n position: absolute;\n pointer-events: none;\n z-index: 10;\n inset: var(--camox-overlay-inset-block-hover);\n border: var(--camox-overlay-width-hover) solid var(--camox-overlay-color-hover);\n}\n\n/* Field-level elements use field-specific inset */\n[data-camox-field-id][data-camox-hovered]:not([data-camox-field-type])::after {\n inset: var(--camox-overlay-inset-field-hover);\n}\n\n/* ---- Focused state (overrides hovered via source order) ---- */\n\n[data-camox-field-id][data-camox-focused]::after,\n[data-camox-block-id][data-camox-focused]:not([data-camox-detached])::after {\n content: \"\";\n position: absolute;\n pointer-events: none;\n z-index: 10;\n inset: var(--camox-overlay-inset-block-selected);\n border: var(--camox-overlay-width-selected) solid var(--camox-overlay-color-selected);\n}\n\n/* Field-level elements use field-specific inset */\n[data-camox-field-id][data-camox-focused]:not([data-camox-field-type])::after {\n inset: var(--camox-overlay-inset-field-selected);\n}\n\n/* ---- Layout mode color overrides ---- */\n\n[data-camox-field-id][data-camox-overlay-mode=\"layout\"][data-camox-hovered]::after,\n[data-camox-block-id][data-camox-overlay-mode=\"layout\"][data-camox-hovered]:not(\n [data-camox-detached]\n )::after,\n[data-camox-repeater-item-id][data-camox-overlay-mode=\"layout\"][data-camox-hovered]::after {\n border-color: var(--camox-overlay-layout-color-hover);\n}\n\n[data-camox-field-id][data-camox-overlay-mode=\"layout\"][data-camox-focused]::after,\n[data-camox-block-id][data-camox-overlay-mode=\"layout\"][data-camox-focused]:not(\n [data-camox-detached]\n )::after {\n border-color: var(--camox-overlay-layout-color-selected);\n}\n\n/* ---- Embed: z-index above click-interceptor ---- */\n\n[data-camox-field-type=\"embed\"][data-camox-hovered]::after,\n[data-camox-field-type=\"embed\"][data-camox-focused]::after {\n z-index: 11;\n}\n\n/* ---- Detached: styled directly (not ::after) because the parent element\n (e.g. fixed navbar) must not get position: relative ---- */\n\n[data-camox-detached][data-camox-hovered] {\n inset: var(--camox-overlay-inset-block-hover);\n border: var(--camox-overlay-width-hover) solid var(--camox-overlay-color-hover);\n}\n\n[data-camox-detached][data-camox-focused] {\n inset: var(--camox-overlay-inset-block-selected);\n border: var(--camox-overlay-width-selected) solid var(--camox-overlay-color-selected);\n}\n\n[data-camox-detached][data-camox-overlay-mode=\"layout\"][data-camox-hovered] {\n border-color: var(--camox-overlay-layout-color-hover);\n}\n\n[data-camox-detached][data-camox-overlay-mode=\"layout\"][data-camox-focused] {\n border-color: var(--camox-overlay-layout-color-selected);\n}\n\n/* ---- Sheet overlay (dims non-selected blocks) ---- */\n\n.camox-sheet-overlay {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(4px);\n opacity: 0;\n transition: opacity 0.3s ease-in-out;\n pointer-events: none;\n z-index: 20;\n}\n\n.camox-sheet-overlay[data-camox-visible] {\n opacity: 1;\n}\n\n/* ---- Add block control bar ---- */\n\n.camox-add-block {\n position: absolute;\n left: 50%;\n right: 0;\n height: 36px;\n width: fit-content;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 11;\n transition: opacity 150ms ease;\n}\n\n.camox-add-block[data-camox-position=\"top\"] {\n top: 0;\n transform: translateX(-50%) translateY(-50%);\n}\n\n.camox-add-block[data-camox-position=\"bottom\"] {\n bottom: 0;\n transform: translateX(-50%) translateY(50%);\n}\n\n.camox-add-block[data-camox-hidden] {\n opacity: 0;\n pointer-events: none;\n}\n\n.camox-add-block-hitarea {\n width: 120px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.camox-add-block-button {\n display: flex;\n align-items: center;\n gap: 0px;\n padding: 0px;\n width: 20px;\n height: 20px;\n justify-content: center;\n background-color: var(--camox-overlay-color-selected);\n color: white;\n border: none;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n white-space: nowrap;\n transition: all 150ms ease;\n}\n\n.camox-add-block-button[data-camox-expanded] {\n gap: 4px;\n padding: 4px 8px;\n width: auto;\n height: auto;\n}\n";
|
|
3
|
+
//#endregion
|
|
4
|
+
export { studio_overlays_default as default };
|