@xiwebdesign/xicms-core 7.12.1 → 7.14.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/admin/AdminApp.js +2 -0
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/lib/mediaUsage.d.ts +17 -0
- package/dist/admin/lib/mediaUsage.js +32 -1
- package/dist/admin/lib/mediaUsage.js.map +1 -1
- package/dist/admin/lib/zodFields.d.ts +2 -2
- package/dist/admin/lib/zodFields.js +2 -0
- package/dist/admin/lib/zodFields.js.map +1 -1
- package/dist/admin/media/MediaManager.js +74 -17
- package/dist/admin/media/MediaManager.js.map +1 -1
- package/dist/admin/ui/toast.d.ts +4 -0
- package/dist/admin/ui/toast.js +9 -3
- package/dist/admin/ui/toast.js.map +1 -1
- package/dist/admin/visual/VisualEditor.js +69 -5
- package/dist/admin/visual/VisualEditor.js.map +1 -1
- package/dist/blocks/BlockErrorBoundary.d.ts +1 -0
- package/dist/blocks/BlockErrorBoundary.js +4 -0
- package/dist/blocks/BlockErrorBoundary.js.map +1 -1
- package/dist/blocks/BlockRenderer.js +1 -1
- package/dist/blocks/BlockRenderer.js.map +1 -1
- package/dist/blocks/builtinSchemas.d.ts +23 -0
- package/dist/blocks/builtinSchemas.js +138 -0
- package/dist/blocks/builtinSchemas.js.map +1 -0
- package/dist/blocks/builtins/Accordion.js +0 -2
- package/dist/blocks/builtins/Accordion.js.map +1 -1
- package/dist/blocks/builtins/Agenda.js +0 -2
- package/dist/blocks/builtins/Agenda.js.map +1 -1
- package/dist/blocks/builtins/Banner.js +0 -2
- package/dist/blocks/builtins/Banner.js.map +1 -1
- package/dist/blocks/builtins/BeforeAfter.js +0 -2
- package/dist/blocks/builtins/BeforeAfter.js.map +1 -1
- package/dist/blocks/builtins/Booking.js +0 -2
- package/dist/blocks/builtins/Booking.js.map +1 -1
- package/dist/blocks/builtins/Breadcrumbs.js +0 -2
- package/dist/blocks/builtins/Breadcrumbs.js.map +1 -1
- package/dist/blocks/builtins/Cards.js +0 -2
- package/dist/blocks/builtins/Cards.js.map +1 -1
- package/dist/blocks/builtins/Columns.js +0 -2
- package/dist/blocks/builtins/Columns.js.map +1 -1
- package/dist/blocks/builtins/Contact.d.ts +1 -1
- package/dist/blocks/builtins/Contact.js +0 -3
- package/dist/blocks/builtins/Contact.js.map +1 -1
- package/dist/blocks/builtins/Countdown.js +0 -2
- package/dist/blocks/builtins/Countdown.js.map +1 -1
- package/dist/blocks/builtins/Cta.js +0 -2
- package/dist/blocks/builtins/Cta.js.map +1 -1
- package/dist/blocks/builtins/Downloads.js +0 -2
- package/dist/blocks/builtins/Downloads.js.map +1 -1
- package/dist/blocks/builtins/Elements.js +0 -4
- package/dist/blocks/builtins/Elements.js.map +1 -1
- package/dist/blocks/builtins/Embed.js +0 -2
- package/dist/blocks/builtins/Embed.js.map +1 -1
- package/dist/blocks/builtins/Faq.js +0 -2
- package/dist/blocks/builtins/Faq.js.map +1 -1
- package/dist/blocks/builtins/FormBlock.js +0 -2
- package/dist/blocks/builtins/FormBlock.js.map +1 -1
- package/dist/blocks/builtins/Gallery.d.ts +1 -1
- package/dist/blocks/builtins/Gallery.js +0 -2
- package/dist/blocks/builtins/Gallery.js.map +1 -1
- package/dist/blocks/builtins/Hero.js +0 -2
- package/dist/blocks/builtins/Hero.js.map +1 -1
- package/dist/blocks/builtins/ImageBlock.js +0 -2
- package/dist/blocks/builtins/ImageBlock.js.map +1 -1
- package/dist/blocks/builtins/Jobs.d.ts +1 -1
- package/dist/blocks/builtins/Jobs.js +0 -2
- package/dist/blocks/builtins/Jobs.js.map +1 -1
- package/dist/blocks/builtins/Layout.js +0 -3
- package/dist/blocks/builtins/Layout.js.map +1 -1
- package/dist/blocks/builtins/MapBlock.js +0 -2
- package/dist/blocks/builtins/MapBlock.js.map +1 -1
- package/dist/blocks/builtins/NewsListBlock.js +0 -2
- package/dist/blocks/builtins/NewsListBlock.js.map +1 -1
- package/dist/blocks/builtins/Newsletter.js +0 -2
- package/dist/blocks/builtins/Newsletter.js.map +1 -1
- package/dist/blocks/builtins/OpeningHours.js +0 -2
- package/dist/blocks/builtins/OpeningHours.js.map +1 -1
- package/dist/blocks/builtins/PdfBlock.js +0 -2
- package/dist/blocks/builtins/PdfBlock.js.map +1 -1
- package/dist/blocks/builtins/Portfolio.js +0 -2
- package/dist/blocks/builtins/Portfolio.js.map +1 -1
- package/dist/blocks/builtins/Pricing.d.ts +1 -1
- package/dist/blocks/builtins/Pricing.js +0 -2
- package/dist/blocks/builtins/Pricing.js.map +1 -1
- package/dist/blocks/builtins/RichTextBlock.js +0 -2
- package/dist/blocks/builtins/RichTextBlock.js.map +1 -1
- package/dist/blocks/builtins/Search.js +0 -2
- package/dist/blocks/builtins/Search.js.map +1 -1
- package/dist/blocks/builtins/Sections.js +0 -10
- package/dist/blocks/builtins/Sections.js.map +1 -1
- package/dist/blocks/builtins/Slider.js +0 -2
- package/dist/blocks/builtins/Slider.js.map +1 -1
- package/dist/blocks/builtins/Spacer.js +0 -2
- package/dist/blocks/builtins/Spacer.js.map +1 -1
- package/dist/blocks/builtins/SymbolRef.js +3 -5
- package/dist/blocks/builtins/SymbolRef.js.map +1 -1
- package/dist/blocks/builtins/Team.js +0 -2
- package/dist/blocks/builtins/Team.js.map +1 -1
- package/dist/blocks/builtins/Testimonials.d.ts +1 -1
- package/dist/blocks/builtins/Testimonials.js +0 -2
- package/dist/blocks/builtins/Testimonials.js.map +1 -1
- package/dist/blocks/builtins/Video.d.ts +1 -1
- package/dist/blocks/builtins/Video.js +0 -2
- package/dist/blocks/builtins/Video.js.map +1 -1
- package/dist/blocks/builtins/WhatsappChat.js +0 -2
- package/dist/blocks/builtins/WhatsappChat.js.map +1 -1
- package/dist/blocks/builtins/Widgets.js +0 -26
- package/dist/blocks/builtins/Widgets.js.map +1 -1
- package/dist/blocks/customTemplate/definition.js +1 -1
- package/dist/blocks/customTemplate/definition.js.map +1 -1
- package/dist/blocks/registry.d.ts +24 -13
- package/dist/blocks/registry.js +15 -4
- package/dist/blocks/registry.js.map +1 -1
- package/dist/blocks/reportRenderFout.d.ts +13 -0
- package/dist/blocks/reportRenderFout.js +31 -0
- package/dist/blocks/reportRenderFout.js.map +1 -0
- package/dist/media/ImageContext.js +24 -1
- package/dist/media/ImageContext.js.map +1 -1
- package/dist/modules/shop/blocks/Cart.js +1 -2
- package/dist/modules/shop/blocks/Cart.js.map +1 -1
- package/dist/modules/shop/blocks/Checkout.js +1 -2
- package/dist/modules/shop/blocks/Checkout.js.map +1 -1
- package/dist/modules/shop/blocks/Donation.js +1 -2
- package/dist/modules/shop/blocks/Donation.js.map +1 -1
- package/dist/modules/shop/blocks/OrderStatus.js +0 -2
- package/dist/modules/shop/blocks/OrderStatus.js.map +1 -1
- package/dist/modules/shop/blocks/ProductDetail.js +1 -7
- package/dist/modules/shop/blocks/ProductDetail.js.map +1 -1
- package/dist/modules/shop/blocks/ProductGrid.js +1 -2
- package/dist/modules/shop/blocks/ProductGrid.js.map +1 -1
- package/dist/modules/shop/blocks/ShopCategories.js +0 -2
- package/dist/modules/shop/blocks/ShopCategories.js.map +1 -1
- package/dist/modules/shop/module.js +1 -0
- package/dist/modules/shop/module.js.map +1 -1
- package/dist/modules/shop/schemas.d.ts +1 -0
- package/dist/modules/shop/schemas.js +32 -0
- package/dist/modules/shop/schemas.js.map +1 -0
- package/dist/modules/types.d.ts +6 -0
- package/dist/schema/blockBase.d.ts +99 -0
- package/dist/schema/blockBase.js +22 -0
- package/dist/schema/blockBase.js.map +1 -0
- package/dist/schema/blocks.d.ts +1 -91
- package/dist/schema/blocks.js +64 -77
- package/dist/schema/blocks.js.map +1 -1
- package/dist/schema/pages.js +1 -1
- package/dist/schema/pages.js.map +1 -1
- package/dist/schema/shop.d.ts +1 -11
- package/dist/schema/shop.js +2 -21
- package/dist/schema/shop.js.map +1 -1
- package/dist/schema/shopGeld.d.ts +18 -0
- package/dist/schema/shopGeld.js +27 -0
- package/dist/schema/shopGeld.js.map +1 -0
- package/dist/schema/symbols.js +1 -1
- package/dist/schema/symbols.js.map +1 -1
- package/dist/server/blockData.js +14 -1
- package/dist/server/blockData.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/pages.d.ts +16 -0
- package/dist/server/pages.js +9 -0
- package/dist/server/pages.js.map +1 -1
- package/dist/styles.css +62 -0
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { registerBuiltinSchemas } from "../../blocks/builtinSchemas.js";
|
|
4
|
+
import { useModules } from "../../modules/context.js";
|
|
5
|
+
registerBuiltinSchemas();
|
|
3
6
|
import "@xiwebdesign/xicms-core/admin.css";
|
|
4
7
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
8
|
import { useSiteConfig } from "../../config.js";
|
|
@@ -130,6 +133,27 @@ function VisualEditorInner({ onClose }) {
|
|
|
130
133
|
draftRef.current = draft;
|
|
131
134
|
}, [draft]);
|
|
132
135
|
const historyRef = useRef({ past: [], future: [], lastPush: 0 });
|
|
136
|
+
const undoOpslagSleutel = useCallback((id) => `xicms-undo:${siteId}:${id}`, [siteId]);
|
|
137
|
+
const bewaarHistory = useCallback(() => {
|
|
138
|
+
try {
|
|
139
|
+
const id = draftRef.current?.id;
|
|
140
|
+
if (!id) return;
|
|
141
|
+
sessionStorage.setItem(undoOpslagSleutel(id), JSON.stringify(historyRef.current.past.slice(-25)));
|
|
142
|
+
} catch {
|
|
143
|
+
}
|
|
144
|
+
}, [undoOpslagSleutel]);
|
|
145
|
+
const herstelHistory = useCallback((id) => {
|
|
146
|
+
try {
|
|
147
|
+
const raw = sessionStorage.getItem(undoOpslagSleutel(id));
|
|
148
|
+
if (!raw || historyRef.current.past.length > 0) return;
|
|
149
|
+
const past = JSON.parse(raw);
|
|
150
|
+
if (Array.isArray(past) && past.length) {
|
|
151
|
+
historyRef.current.past = past;
|
|
152
|
+
setHistVersion((v) => v + 1);
|
|
153
|
+
}
|
|
154
|
+
} catch {
|
|
155
|
+
}
|
|
156
|
+
}, [undoOpslagSleutel]);
|
|
133
157
|
const [, setHistVersion] = useState(0);
|
|
134
158
|
const pushHistory = useCallback((prev, coalesce) => {
|
|
135
159
|
const h = historyRef.current;
|
|
@@ -203,6 +227,20 @@ function VisualEditorInner({ onClose }) {
|
|
|
203
227
|
const handleClose = useCallback(() => {
|
|
204
228
|
void flushSave().finally(() => onClose());
|
|
205
229
|
}, [flushSave, onClose]);
|
|
230
|
+
const [toonStartHint, setToonStartHint] = useState(false);
|
|
231
|
+
useEffect(() => {
|
|
232
|
+
try {
|
|
233
|
+
if (!localStorage.getItem("xicms-hint-bewerken-v1")) setToonStartHint(true);
|
|
234
|
+
} catch {
|
|
235
|
+
}
|
|
236
|
+
}, []);
|
|
237
|
+
const sluitStartHint = useCallback(() => {
|
|
238
|
+
setToonStartHint(false);
|
|
239
|
+
try {
|
|
240
|
+
localStorage.setItem("xicms-hint-bewerken-v1", "1");
|
|
241
|
+
} catch {
|
|
242
|
+
}
|
|
243
|
+
}, []);
|
|
206
244
|
useEffect(() => {
|
|
207
245
|
let active = true;
|
|
208
246
|
getDraftByPath(siteId, path).then((d) => {
|
|
@@ -210,6 +248,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
210
248
|
if (d) {
|
|
211
249
|
setDraft(d);
|
|
212
250
|
lastSavedRef.current = stableStringify(draftPayload(d));
|
|
251
|
+
herstelHistory(d.id);
|
|
213
252
|
setStatus("idle");
|
|
214
253
|
} else {
|
|
215
254
|
setStatus("none");
|
|
@@ -279,6 +318,13 @@ function VisualEditorInner({ onClose }) {
|
|
|
279
318
|
);
|
|
280
319
|
nietLiveRef.current = wijzigingen.iets;
|
|
281
320
|
const { publishDraft, zetFotoVervanger } = useEditor();
|
|
321
|
+
const actieveModules = useModules();
|
|
322
|
+
useEffect(() => {
|
|
323
|
+
for (const m of actieveModules.defs) {
|
|
324
|
+
if (actieveModules.activeIds.has(m.id)) void m.loadSchemas?.().catch(() => {
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
}, [actieveModules]);
|
|
282
328
|
useEffect(() => {
|
|
283
329
|
zetFotoVervanger((field, blockKey) => {
|
|
284
330
|
if (blockKey) setImgPicker({ key: blockKey, field });
|
|
@@ -711,10 +757,14 @@ function VisualEditorInner({ onClose }) {
|
|
|
711
757
|
e.preventDefault();
|
|
712
758
|
e.returnValue = "";
|
|
713
759
|
}
|
|
760
|
+
bewaarHistory();
|
|
714
761
|
};
|
|
715
762
|
const onVisibility = () => {
|
|
716
|
-
if (document.visibilityState === "hidden")
|
|
717
|
-
|
|
763
|
+
if (document.visibilityState === "hidden") {
|
|
764
|
+
void flushSave().catch(() => {
|
|
765
|
+
});
|
|
766
|
+
bewaarHistory();
|
|
767
|
+
}
|
|
718
768
|
};
|
|
719
769
|
const onKeyDown = (e) => {
|
|
720
770
|
if (e.key === "Escape") {
|
|
@@ -749,7 +799,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
749
799
|
);
|
|
750
800
|
}
|
|
751
801
|
};
|
|
752
|
-
}, [siteId, handleClose, flushSave, undo, redo]);
|
|
802
|
+
}, [siteId, handleClose, flushSave, undo, redo, bewaarHistory]);
|
|
753
803
|
function setBlocks(next, opts) {
|
|
754
804
|
mutateDraft((d) => ({ ...d, blocks: next }), opts);
|
|
755
805
|
}
|
|
@@ -856,8 +906,10 @@ function VisualEditorInner({ onClose }) {
|
|
|
856
906
|
setLiveBlocks(structuredClone(d.blocks));
|
|
857
907
|
toast({
|
|
858
908
|
title: "Gepubliceerd",
|
|
859
|
-
description: demo ? "In deze demo blijft de wijziging in je browser staan." : "
|
|
860
|
-
tone: "success"
|
|
909
|
+
description: demo ? "In deze demo blijft de wijziging in je browser staan." : "Binnen enkele seconden zichtbaar voor iedereen.",
|
|
910
|
+
tone: "success",
|
|
911
|
+
// Sluit de mentale lus "staat het er nu echt?": één klik en je kijkt als bezoeker.
|
|
912
|
+
action: { label: "Bekijk als bezoeker \u2192", onClick: handleClose }
|
|
861
913
|
});
|
|
862
914
|
} catch (e) {
|
|
863
915
|
toast({ title: "Publiceren mislukt", description: e.message, tone: "error" });
|
|
@@ -881,6 +933,18 @@ function VisualEditorInner({ onClose }) {
|
|
|
881
933
|
setConflict(false);
|
|
882
934
|
}, [siteId, path, mutateDraft]);
|
|
883
935
|
return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "xicms-ve__shell", "data-xicms-tooling": "", role: "group", "aria-label": `Pagina bewerken: ${path}`, children: [
|
|
936
|
+
toonStartHint && /* @__PURE__ */ jsxs("div", { className: "xicms-ve-starthint", role: "status", children: [
|
|
937
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
938
|
+
"\u270F\uFE0F Klik het ",
|
|
939
|
+
/* @__PURE__ */ jsx("strong", { children: "potlood" }),
|
|
940
|
+
" naast een tekst om die op de pagina zelf te bewerken; foto's wissel je met ",
|
|
941
|
+
/* @__PURE__ */ jsx("strong", { children: "\u{1F4F7} Foto wijzigen" }),
|
|
942
|
+
". Klaar? ",
|
|
943
|
+
/* @__PURE__ */ jsx("strong", { children: "Publiceren" }),
|
|
944
|
+
" staat rechtsonder."
|
|
945
|
+
] }),
|
|
946
|
+
/* @__PURE__ */ jsx("button", { type: "button", onClick: sluitStartHint, children: "Begrepen" })
|
|
947
|
+
] }),
|
|
884
948
|
/* @__PURE__ */ jsxs("header", { className: "xicms-ve__bar", role: "toolbar", "aria-label": "Beheer", children: [
|
|
885
949
|
/* @__PURE__ */ jsx("span", { className: "xicms-editbar__brand", children: isDemoActive() ? "XiCMS \xB7 demo" : "XiCMS" }),
|
|
886
950
|
/* @__PURE__ */ jsx(
|