@xiwebdesign/xicms-core 6.4.7 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SiteChrome.d.ts +12 -0
- package/dist/SiteChrome.js +24 -0
- package/dist/SiteChrome.js.map +1 -0
- package/dist/XiCMSProvider.d.ts +16 -8
- package/dist/XiCMSProvider.js +83 -58
- package/dist/XiCMSProvider.js.map +1 -1
- package/dist/admin/AdminApp.d.ts +1 -1
- package/dist/admin/AdminApp.js +79 -35
- package/dist/admin/AdminApp.js.map +1 -1
- package/dist/admin/AdminHelp.d.ts +8 -1
- package/dist/admin/AdminHelp.js +2 -2
- package/dist/admin/AdminHelp.js.map +1 -1
- package/dist/admin/NewsEditor.js +9 -9
- package/dist/admin/SuperadminPanel.js +5 -5
- package/dist/admin/blockEditors/GenericEditor.d.ts +2 -2
- package/dist/admin/blockEditors/GenericEditor.js +12 -11
- package/dist/admin/blockEditors/GenericEditor.js.map +1 -1
- package/dist/admin/blockEditors/StyleEditor.d.ts +1 -1
- package/dist/admin/blockEditors/StyleEditor.js +2 -2
- package/dist/admin/blockEditors/SymbolRefEditor.d.ts +1 -1
- package/dist/admin/blockEditors/SymbolRefEditor.js +5 -5
- package/dist/admin/blockEditors/index.d.ts +1 -1
- package/dist/admin/blockEditors/index.js +10 -10
- package/dist/admin/customBlocks/CustomBlocksPanel.js +7 -7
- package/dist/admin/editors/RichTextEditor.js +8 -7
- package/dist/admin/editors/RichTextEditor.js.map +1 -1
- package/dist/admin/editors/fontSizeExtension.js +1 -1
- package/dist/admin/editors/fontSizeExtension.js.map +1 -1
- package/dist/admin/forms/FormsPanel.js +9 -9
- package/dist/admin/index.d.ts +16 -16
- package/dist/admin/index.js +16 -16
- package/dist/admin/lib/mediaUsage.js +1 -1
- package/dist/admin/lib/pagesClient.d.ts +1 -1
- package/dist/admin/lib/pagesClient.js +11 -7
- package/dist/admin/lib/pagesClient.js.map +1 -1
- package/dist/admin/lib/sanitizeDraft.d.ts +9 -0
- package/dist/admin/lib/sanitizeDraft.js +28 -0
- package/dist/admin/lib/sanitizeDraft.js.map +1 -0
- package/dist/admin/lib/symbolsClient.d.ts +1 -1
- package/dist/admin/lib/symbolsClient.js +3 -3
- package/dist/admin/lib/upload.js +3 -3
- package/dist/admin/lib/useNestedDialog.d.ts +15 -0
- package/dist/admin/lib/useNestedDialog.js +23 -0
- package/dist/admin/lib/useNestedDialog.js.map +1 -0
- package/dist/admin/lib/zodFields.d.ts +4 -18
- package/dist/admin/lib/zodFields.js +54 -35
- package/dist/admin/lib/zodFields.js.map +1 -1
- package/dist/admin/media/MediaManager.js +7 -7
- package/dist/admin/media/MediaPicker.js +7 -7
- package/dist/admin/media/MediaPicker.js.map +1 -1
- package/dist/admin/pages/PageEditor.d.ts +1 -1
- package/dist/admin/pages/PageEditor.js +13 -13
- package/dist/admin/pages/PagesPanel.js +30 -30
- package/dist/admin/pages/PagesPanel.js.map +1 -1
- package/dist/admin/panelRegistry.js +7 -7
- package/dist/admin/patterns/PatternInserter.d.ts +1 -1
- package/dist/admin/patterns/PatternInserter.js +5 -5
- package/dist/admin/patterns/PatternInserter.js.map +1 -1
- package/dist/admin/settings/MailSettings.js +5 -5
- package/dist/admin/settings/MailTemplates.d.ts +1 -1
- package/dist/admin/settings/MailTemplates.js +5 -5
- package/dist/admin/settings/SettingsPanel.js +20 -20
- package/dist/admin/settings/SettingsPanel.js.map +1 -1
- package/dist/admin/settings/SnapshotsCard.js +5 -5
- package/dist/admin/settings/moduleSettingsForm.d.ts +1 -1
- package/dist/admin/settings/moduleSettingsForm.js +4 -4
- package/dist/admin/settings/moduleSettingsForm.js.map +1 -1
- package/dist/admin/shop/CategoriesTab.js +8 -8
- package/dist/admin/shop/ConnectionsTab.js +3 -3
- package/dist/admin/shop/DiscountsTab.js +8 -8
- package/dist/admin/shop/OrdersTab.js +10 -10
- package/dist/admin/shop/OrdersTab.js.map +1 -1
- package/dist/admin/shop/ProductsTab.js +10 -10
- package/dist/admin/shop/ShopPanel.js +9 -9
- package/dist/admin/shop/ShopSettingsTab.js +4 -4
- package/dist/admin/shop/index.d.ts +2 -2
- package/dist/admin/shop/index.js +2 -2
- package/dist/admin/shop/lib.js +2 -2
- package/dist/admin/stats/StatsPanel.js +2 -2
- package/dist/admin/ui/ArrayEditor.js +1 -1
- package/dist/admin/ui/PanelIcon.d.ts +3 -0
- package/dist/admin/ui/PanelIcon.js +34 -0
- package/dist/admin/ui/PanelIcon.js.map +1 -0
- package/dist/admin/ui/dialog.d.ts +21 -6
- package/dist/admin/ui/dialog.js +55 -34
- package/dist/admin/ui/dialog.js.map +1 -1
- package/dist/admin/ui/index.d.ts +7 -7
- package/dist/admin/ui/index.js +7 -7
- package/dist/admin/ui/primitives.js +1 -1
- package/dist/admin/ui/tabs.js +1 -1
- package/dist/admin/visual/TranslationPanel.d.ts +1 -1
- package/dist/admin/visual/TranslationPanel.js +3 -3
- package/dist/admin/visual/VisualEditor.js +47 -25
- package/dist/admin/visual/VisualEditor.js.map +1 -1
- package/dist/admin.css +2 -1
- package/dist/agentFiles/catalog.d.ts +2 -2
- package/dist/agentFiles/catalog.js +6 -5
- package/dist/agentFiles/catalog.js.map +1 -1
- package/dist/agentFiles/files.d.ts +5 -5
- package/dist/agentFiles/files.js +17 -17
- package/dist/agentFiles/files.js.map +1 -1
- package/dist/all.d.ts +4 -4
- package/dist/all.js +6 -6
- package/dist/auth/AuthProvider.d.ts +2 -2
- package/dist/auth/AuthProvider.js +51 -28
- package/dist/auth/AuthProvider.js.map +1 -1
- package/dist/auth/LoginForm.js +1 -1
- package/dist/auth/roles.js +4 -1
- package/dist/auth/roles.js.map +1 -1
- package/dist/blocks/BlockRenderer.d.ts +1 -1
- package/dist/blocks/BlockRenderer.js +3 -3
- package/dist/blocks/blockStyle.d.ts +1 -1
- package/dist/blocks/builtins/Accordion.d.ts +1 -1
- package/dist/blocks/builtins/Accordion.js +13 -6
- package/dist/blocks/builtins/Accordion.js.map +1 -1
- package/dist/blocks/builtins/Agenda.d.ts +1 -1
- package/dist/blocks/builtins/Agenda.js +5 -5
- package/dist/blocks/builtins/Banner.d.ts +1 -1
- package/dist/blocks/builtins/Banner.js +2 -2
- package/dist/blocks/builtins/BeforeAfter.d.ts +1 -1
- package/dist/blocks/builtins/BeforeAfter.js +4 -4
- package/dist/blocks/builtins/BeforeAfter.js.map +1 -1
- package/dist/blocks/builtins/Booking.d.ts +1 -1
- package/dist/blocks/builtins/Booking.js +5 -5
- package/dist/blocks/builtins/Breadcrumbs.d.ts +1 -1
- package/dist/blocks/builtins/Breadcrumbs.js +3 -3
- package/dist/blocks/builtins/Cards.d.ts +1 -1
- package/dist/blocks/builtins/Cards.js +5 -5
- package/dist/blocks/builtins/Cards.js.map +1 -1
- package/dist/blocks/builtins/Columns.d.ts +1 -1
- package/dist/blocks/builtins/Columns.js +4 -4
- package/dist/blocks/builtins/Contact.d.ts +3 -3
- package/dist/blocks/builtins/Contact.js +4 -4
- package/dist/blocks/builtins/Countdown.d.ts +1 -1
- package/dist/blocks/builtins/Countdown.js +4 -4
- package/dist/blocks/builtins/Countdown.js.map +1 -1
- package/dist/blocks/builtins/Cta.d.ts +1 -1
- package/dist/blocks/builtins/Cta.js +3 -3
- package/dist/blocks/builtins/Downloads.d.ts +1 -1
- package/dist/blocks/builtins/Downloads.js +4 -4
- package/dist/blocks/builtins/Elements.d.ts +3 -3
- package/dist/blocks/builtins/Elements.js +3 -3
- package/dist/blocks/builtins/Embed.d.ts +1 -1
- package/dist/blocks/builtins/Embed.js +3 -3
- package/dist/blocks/builtins/Faq.d.ts +1 -1
- package/dist/blocks/builtins/Faq.js +14 -6
- package/dist/blocks/builtins/Faq.js.map +1 -1
- package/dist/blocks/builtins/FormBlock.d.ts +1 -1
- package/dist/blocks/builtins/FormBlock.js +28 -18
- package/dist/blocks/builtins/FormBlock.js.map +1 -1
- package/dist/blocks/builtins/Gallery.d.ts +2 -2
- package/dist/blocks/builtins/Gallery.js +5 -5
- package/dist/blocks/builtins/Hero.d.ts +1 -1
- package/dist/blocks/builtins/Hero.js +4 -4
- package/dist/blocks/builtins/ImageBlock.d.ts +1 -1
- package/dist/blocks/builtins/ImageBlock.js +3 -3
- package/dist/blocks/builtins/Jobs.d.ts +2 -2
- package/dist/blocks/builtins/Jobs.js +5 -5
- package/dist/blocks/builtins/Layout.d.ts +2 -2
- package/dist/blocks/builtins/Layout.js +4 -4
- package/dist/blocks/builtins/MapBlock.d.ts +1 -1
- package/dist/blocks/builtins/MapBlock.js +3 -3
- package/dist/blocks/builtins/NewsListBlock.d.ts +1 -1
- package/dist/blocks/builtins/NewsListBlock.js +4 -4
- package/dist/blocks/builtins/Newsletter.d.ts +1 -1
- package/dist/blocks/builtins/Newsletter.js +7 -7
- package/dist/blocks/builtins/Newsletter.js.map +1 -1
- package/dist/blocks/builtins/OpenNowBadge.d.ts +1 -1
- package/dist/blocks/builtins/OpenNowBadge.js +8 -3
- package/dist/blocks/builtins/OpenNowBadge.js.map +1 -1
- package/dist/blocks/builtins/OpeningHours.d.ts +1 -1
- package/dist/blocks/builtins/OpeningHours.js +6 -6
- package/dist/blocks/builtins/PdfBlock.d.ts +1 -1
- package/dist/blocks/builtins/PdfBlock.js +3 -3
- package/dist/blocks/builtins/Portfolio.d.ts +1 -1
- package/dist/blocks/builtins/Portfolio.js +5 -5
- package/dist/blocks/builtins/Pricing.d.ts +2 -2
- package/dist/blocks/builtins/Pricing.js +5 -5
- package/dist/blocks/builtins/Pricing.js.map +1 -1
- package/dist/blocks/builtins/RichTextBlock.d.ts +1 -1
- package/dist/blocks/builtins/RichTextBlock.js +2 -2
- package/dist/blocks/builtins/RichTextBlock.js.map +1 -1
- package/dist/blocks/builtins/Search.d.ts +1 -1
- package/dist/blocks/builtins/Search.js +9 -7
- package/dist/blocks/builtins/Search.js.map +1 -1
- package/dist/blocks/builtins/Sections.d.ts +4 -4
- package/dist/blocks/builtins/Sections.js +4 -4
- package/dist/blocks/builtins/Slider.d.ts +1 -1
- package/dist/blocks/builtins/Slider.js +3 -3
- package/dist/blocks/builtins/Spacer.d.ts +1 -1
- package/dist/blocks/builtins/Spacer.js +2 -2
- package/dist/blocks/builtins/SymbolRef.d.ts +1 -1
- package/dist/blocks/builtins/SymbolRef.js +31 -17
- package/dist/blocks/builtins/SymbolRef.js.map +1 -1
- package/dist/blocks/builtins/Team.d.ts +1 -1
- package/dist/blocks/builtins/Team.js +4 -4
- package/dist/blocks/builtins/Testimonials.d.ts +2 -2
- package/dist/blocks/builtins/Testimonials.js +4 -4
- package/dist/blocks/builtins/Video.d.ts +2 -2
- package/dist/blocks/builtins/Video.js +4 -4
- package/dist/blocks/builtins/Video.js.map +1 -1
- package/dist/blocks/builtins/WhatsappChat.d.ts +1 -1
- package/dist/blocks/builtins/WhatsappChat.js +2 -2
- package/dist/blocks/builtins/Widgets.d.ts +12 -12
- package/dist/blocks/builtins/Widgets.js +19 -19
- package/dist/blocks/builtins/Widgets.js.map +1 -1
- package/dist/blocks/builtins/consentEmbed.js +2 -2
- package/dist/blocks/builtins/index.d.ts +40 -40
- package/dist/blocks/builtins/index.js +40 -40
- package/dist/blocks/builtins/lib/submitForm.js +5 -3
- package/dist/blocks/builtins/lib/submitForm.js.map +1 -1
- package/dist/blocks/context.d.ts +1 -1
- package/dist/blocks/customTemplate/definition.d.ts +3 -3
- package/dist/blocks/customTemplate/definition.js +6 -6
- package/dist/blocks/customTemplate/definition.js.map +1 -1
- package/dist/blocks/customTemplate/interpret.js +1 -1
- package/dist/blocks/index.d.ts +5 -5
- package/dist/blocks/index.js +5 -5
- package/dist/blocks/registry.d.ts +17 -7
- package/dist/blocks/registry.js +2 -1
- package/dist/blocks/registry.js.map +1 -1
- package/dist/components/EditBar.js +3 -3
- package/dist/components/FeedbackWidget.js +4 -4
- package/dist/components/News.d.ts +1 -1
- package/dist/components/News.js +50 -37
- package/dist/components/News.js.map +1 -1
- package/dist/components/PageView.js +11 -8
- package/dist/components/PageView.js.map +1 -1
- package/dist/components/ResponsiveImage.d.ts +1 -1
- package/dist/components/site/SiteFooter.d.ts +1 -1
- package/dist/components/site/SiteFooter.js +2 -2
- package/dist/config.d.ts +1 -1
- package/dist/demo/DemoStudio.js +3 -3
- package/dist/demo/demoStore.d.ts +3 -3
- package/dist/demo/index.d.ts +2 -2
- package/dist/demo/index.js +2 -2
- package/dist/editor/EditorProvider.js +1 -1
- package/dist/firebase/admin.d.ts +0 -2
- package/dist/firebase/admin.js +0 -6
- package/dist/firebase/admin.js.map +1 -1
- package/dist/firebase/appcheck.d.ts +1 -1
- package/dist/firebase/appcheck.js +5 -3
- package/dist/firebase/appcheck.js.map +1 -1
- package/dist/firebase/client.d.ts +2 -1
- package/dist/firebase/client.js +2 -14
- package/dist/firebase/client.js.map +1 -1
- package/dist/firebase/config.d.ts +31 -0
- package/dist/firebase/config.js +39 -0
- package/dist/firebase/config.js.map +1 -0
- package/dist/firebase/feedback.js +5 -3
- package/dist/firebase/feedback.js.map +1 -1
- package/dist/i18n/overlay.d.ts +2 -2
- package/dist/i18n/overlay.js +6 -4
- package/dist/i18n/overlay.js.map +1 -1
- package/dist/index.d.ts +45 -44
- package/dist/index.js +35 -33
- package/dist/index.js.map +1 -1
- package/dist/lock/DemoLock.js +1 -1
- package/dist/modules/builtins.d.ts +1 -1
- package/dist/modules/builtins.js +53 -55
- package/dist/modules/builtins.js.map +1 -1
- package/dist/modules/consent/ConsentBanner.js +1 -1
- package/dist/modules/consent/useConsent.js +1 -1
- package/dist/modules/context.d.ts +1 -1
- package/dist/modules/contract.d.ts +1 -1
- package/dist/modules/defineModule.d.ts +1 -1
- package/dist/modules/index.d.ts +9 -9
- package/dist/modules/index.js +8 -8
- package/dist/modules/overrides.d.ts +1 -1
- package/dist/modules/registry.d.ts +2 -7
- package/dist/modules/registry.js +2 -1
- package/dist/modules/registry.js.map +1 -1
- package/dist/modules/shop/blocks/Cart.d.ts +1 -1
- package/dist/modules/shop/blocks/Cart.js +6 -6
- package/dist/modules/shop/blocks/Checkout.d.ts +1 -1
- package/dist/modules/shop/blocks/Checkout.js +6 -6
- package/dist/modules/shop/blocks/Donation.d.ts +1 -1
- package/dist/modules/shop/blocks/Donation.js +5 -5
- package/dist/modules/shop/blocks/OrderStatus.d.ts +1 -1
- package/dist/modules/shop/blocks/OrderStatus.js +5 -5
- package/dist/modules/shop/blocks/ProductDetail.d.ts +1 -1
- package/dist/modules/shop/blocks/ProductDetail.js +8 -8
- package/dist/modules/shop/blocks/ProductGrid.d.ts +3 -3
- package/dist/modules/shop/blocks/ProductGrid.js +7 -7
- package/dist/modules/shop/blocks/ShopCategories.d.ts +1 -1
- package/dist/modules/shop/blocks/ShopCategories.js +6 -6
- package/dist/modules/shop/index.d.ts +5 -5
- package/dist/modules/shop/index.js +5 -5
- package/dist/modules/shop/lib.d.ts +2 -2
- package/dist/modules/shop/lib.js +18 -13
- package/dist/modules/shop/lib.js.map +1 -1
- package/dist/modules/shop/module.d.ts +1 -1
- package/dist/modules/shop/module.js +9 -9
- package/dist/modules/shop/settings.d.ts +18 -50
- package/dist/modules/shop/settings.js +16 -16
- package/dist/modules/shop/settings.js.map +1 -1
- package/dist/modules/shop/strings.js +1 -1
- package/dist/modules/shop/types.d.ts +1 -1
- package/dist/modules/types.d.ts +2 -2
- package/dist/patterns/builtins.d.ts +1 -1
- package/dist/patterns/builtins.js +1 -1
- package/dist/patterns/index.d.ts +2 -2
- package/dist/patterns/index.js +2 -2
- package/dist/render/PageRenderer.d.ts +2 -2
- package/dist/render/PageRenderer.js +1 -1
- package/dist/render/PublishedPage.d.ts +1 -1
- package/dist/render/PublishedPage.js +2 -2
- package/dist/schema/blocks.d.ts +6793 -15095
- package/dist/schema/blocks.js +335 -355
- package/dist/schema/blocks.js.map +1 -1
- package/dist/schema/customBlocks.d.ts +10 -29
- package/dist/schema/customBlocks.js +14 -13
- package/dist/schema/customBlocks.js.map +1 -1
- package/dist/schema/fields.d.ts +10 -16
- package/dist/schema/fields.js +37 -37
- package/dist/schema/fields.js.map +1 -1
- package/dist/schema/forms.d.ts +62 -111
- package/dist/schema/forms.js +17 -17
- package/dist/schema/forms.js.map +1 -1
- package/dist/schema/index.d.ts +7 -7
- package/dist/schema/index.js +7 -7
- package/dist/schema/mail.d.ts +39 -87
- package/dist/schema/mail.js +4 -4
- package/dist/schema/mail.js.map +1 -1
- package/dist/schema/pages.d.ts +152 -674
- package/dist/schema/pages.js +26 -15
- package/dist/schema/pages.js.map +1 -1
- package/dist/schema/seo.d.ts +9 -27
- package/dist/schema/seo.js +7 -7
- package/dist/schema/seo.js.map +1 -1
- package/dist/schema/settings.d.ts +218 -1074
- package/dist/schema/settings.js +55 -55
- package/dist/schema/settings.js.map +1 -1
- package/dist/schema/shop.d.ts +470 -1214
- package/dist/schema/shop.js +124 -124
- package/dist/schema/shop.js.map +1 -1
- package/dist/schema/siteConfig.d.ts +73 -597
- package/dist/schema/siteConfig.js +17 -17
- package/dist/schema/siteConfig.js.map +1 -1
- package/dist/schema/symbols.d.ts +34 -191
- package/dist/schema/symbols.js +8 -8
- package/dist/schema/symbols.js.map +1 -1
- package/dist/server/auth.d.ts +17 -0
- package/dist/server/auth.js +11 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/bundle.d.ts +15 -6
- package/dist/server/bundle.js +5 -1
- package/dist/server/bundle.js.map +1 -1
- package/dist/server/draft.d.ts +16 -0
- package/dist/server/draft.js +12 -0
- package/dist/server/draft.js.map +1 -0
- package/dist/server/env.js +8 -8
- package/dist/server/env.js.map +1 -1
- package/dist/server/index.d.ts +10 -8
- package/dist/server/index.js +12 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/pages.d.ts +14 -7
- package/dist/server/pages.js +183 -17
- package/dist/server/pages.js.map +1 -1
- package/dist/server/revalidate.d.ts +6 -0
- package/dist/server/revalidate.js +40 -0
- package/dist/server/revalidate.js.map +1 -0
- package/dist/server/seo.d.ts +3 -3
- package/dist/server/seo.js +1 -1
- package/dist/server/shop.d.ts +3 -3
- package/dist/server/shop.js +6 -3
- package/dist/server/shop.js.map +1 -1
- package/dist/settings/useSiteSettings.d.ts +2 -2
- package/dist/settings/useSiteSettings.js +48 -28
- package/dist/settings/useSiteSettings.js.map +1 -1
- package/dist/styles.css +4 -1
- package/dist/theme/presets.d.ts +1 -1
- package/package.json +35 -34
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { ImageBlockSchema } from "../../schema/blocks";
|
|
4
|
-
import { defineBlock } from "../registry";
|
|
5
|
-
import { Img } from "../../media/ImageContext";
|
|
3
|
+
import { ImageBlockSchema } from "../../schema/blocks.js";
|
|
4
|
+
import { defineBlock } from "../registry.js";
|
|
5
|
+
import { Img } from "../../media/ImageContext.js";
|
|
6
6
|
function ImageRender({ block }) {
|
|
7
7
|
if (!block.url) return null;
|
|
8
8
|
const img = /* @__PURE__ */ jsx(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
import { JobsBlockSchema } from "../../schema/blocks";
|
|
2
|
+
import { JobsBlockSchema } from "../../schema/blocks.js";
|
|
3
3
|
type Jobs = z.infer<typeof JobsBlockSchema>;
|
|
4
4
|
type JobItem = Jobs["items"][number];
|
|
5
5
|
/** Vrije-tekst dienstverband → schema.org-enum (Google keurt vrije tekst af). */
|
|
@@ -11,5 +11,5 @@ export declare function employmentTypeEnum(value?: string): string | null;
|
|
|
11
11
|
* ("€ 2.800 – € 3.400 p/m") is geen geldige MonetaryAmount en wordt bewust weggelaten.
|
|
12
12
|
*/
|
|
13
13
|
export declare function jobsJsonLd(items: JobItem[], orgName: string): Array<Record<string, unknown>>;
|
|
14
|
-
export declare const jobsBlock: import("
|
|
14
|
+
export declare const jobsBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
15
15
|
export {};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { JobsBlockSchema } from "../../schema/blocks";
|
|
4
|
-
import { defineBlock } from "../registry";
|
|
5
|
-
import { useSiteConfig } from "../../config";
|
|
6
|
-
import { VStack, Card, Heading, Text, Btn } from "../ui";
|
|
7
|
-
import { jsonLdHtml } from "./jsonld";
|
|
3
|
+
import { JobsBlockSchema } from "../../schema/blocks.js";
|
|
4
|
+
import { defineBlock } from "../registry.js";
|
|
5
|
+
import { useSiteConfig } from "../../config.js";
|
|
6
|
+
import { VStack, Card, Heading, Text, Btn } from "../ui/index.js";
|
|
7
|
+
import { jsonLdHtml } from "./jsonld.js";
|
|
8
8
|
function employmentTypeEnum(value) {
|
|
9
9
|
const v = (value ?? "").toLowerCase();
|
|
10
10
|
if (!v) return null;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const withSidebarBlock: import("
|
|
3
|
-
export declare const tabsBlock: import("
|
|
2
|
+
export declare const withSidebarBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
3
|
+
export declare const tabsBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from "react";
|
|
4
|
-
import { WithSidebarBlockSchema, TabsBlockSchema } from "../../schema/blocks";
|
|
5
|
-
import { defineBlock } from "../registry";
|
|
6
|
-
import { BlockRenderer } from "../BlockRenderer";
|
|
7
|
-
import { useRegistry } from "../context";
|
|
4
|
+
import { WithSidebarBlockSchema, TabsBlockSchema } from "../../schema/blocks.js";
|
|
5
|
+
import { defineBlock } from "../registry.js";
|
|
6
|
+
import { BlockRenderer } from "../BlockRenderer.js";
|
|
7
|
+
import { useRegistry } from "../context.js";
|
|
8
8
|
import { TabList, Tab } from "@astryxdesign/core/TabList";
|
|
9
9
|
function WithSidebarRender({ block, siteId, mode }) {
|
|
10
10
|
const registry = useRegistry();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const mapBlock: import("
|
|
2
|
+
export declare const mapBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { MapBlockSchema } from "../../schema/blocks";
|
|
4
|
-
import { defineBlock } from "../registry";
|
|
5
|
-
import { ConsentEmbed } from "./consentEmbed";
|
|
3
|
+
import { MapBlockSchema } from "../../schema/blocks.js";
|
|
4
|
+
import { defineBlock } from "../registry.js";
|
|
5
|
+
import { ConsentEmbed } from "./consentEmbed.js";
|
|
6
6
|
function osmSrc(block) {
|
|
7
7
|
if (block.lat != null && block.lng != null) {
|
|
8
8
|
const degPerTile = 360 / Math.pow(2, block.zoom);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const newsListBlock: import("
|
|
2
|
+
export declare const newsListBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { NewsListBlockSchema } from "../../schema/blocks";
|
|
4
|
-
import { defineBlock } from "../registry";
|
|
5
|
-
import { Heading } from "../ui";
|
|
6
|
-
import { NewsList } from "../../components/News";
|
|
3
|
+
import { NewsListBlockSchema } from "../../schema/blocks.js";
|
|
4
|
+
import { defineBlock } from "../registry.js";
|
|
5
|
+
import { Heading } from "../ui/index.js";
|
|
6
|
+
import { NewsList } from "../../components/News.js";
|
|
7
7
|
function NewsListRender({ block }) {
|
|
8
8
|
return /* @__PURE__ */ jsxs("section", { className: "xicms-newslist", children: [
|
|
9
9
|
block.heading && /* @__PURE__ */ jsx(Heading, { level: 2, "data-xicms-edit": "heading", children: block.heading }),
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const newsletterBlock: import("
|
|
2
|
+
export declare const newsletterBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from "react";
|
|
4
|
-
import { NewsletterBlockSchema } from "../../schema/blocks";
|
|
5
|
-
import { defineBlock } from "../registry";
|
|
4
|
+
import { NewsletterBlockSchema } from "../../schema/blocks.js";
|
|
5
|
+
import { defineBlock } from "../registry.js";
|
|
6
6
|
import { Button } from "@astryxdesign/core/Button";
|
|
7
7
|
import { TextInput } from "@astryxdesign/core/TextInput";
|
|
8
8
|
import { CheckboxInput } from "@astryxdesign/core/CheckboxInput";
|
|
9
|
-
import { VStack, Card, Heading, Text } from "../ui";
|
|
10
|
-
import { isDemoActive } from "../../demo/demoStore";
|
|
11
|
-
import {
|
|
12
|
-
import { submitFormValues } from "./lib/submitForm";
|
|
9
|
+
import { VStack, Card, Heading, Text } from "../ui/index.js";
|
|
10
|
+
import { isDemoActive } from "../../demo/demoStore.js";
|
|
11
|
+
import { isFirebaseConfigured } from "../../firebase/config.js";
|
|
12
|
+
import { submitFormValues } from "./lib/submitForm.js";
|
|
13
13
|
function NewsletterRender({ block, siteId, mode }) {
|
|
14
14
|
const [email, setEmail] = useState("");
|
|
15
15
|
const [agreed, setAgreed] = useState(false);
|
|
@@ -18,7 +18,7 @@ function NewsletterRender({ block, siteId, mode }) {
|
|
|
18
18
|
async function submitViaXicms(e) {
|
|
19
19
|
e.preventDefault();
|
|
20
20
|
if (mode === "preview" || !block.formId) return;
|
|
21
|
-
if (isDemoActive() || !
|
|
21
|
+
if (isDemoActive() || !isFirebaseConfigured()) {
|
|
22
22
|
setStatus("ok");
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Newsletter.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, type FormEvent } from \"react\";\nimport type { z } from \"zod\";\nimport { NewsletterBlockSchema } from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\nimport { Button } from \"@astryxdesign/core/Button\";\nimport { TextInput } from \"@astryxdesign/core/TextInput\";\nimport { CheckboxInput } from \"@astryxdesign/core/CheckboxInput\";\nimport { VStack, Card, Heading, Text } from \"../ui\";\nimport { isDemoActive } from \"../../demo/demoStore\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Newsletter.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, type FormEvent } from \"react\";\nimport type { z } from \"zod\";\nimport { NewsletterBlockSchema } from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\nimport { Button } from \"@astryxdesign/core/Button\";\nimport { TextInput } from \"@astryxdesign/core/TextInput\";\nimport { CheckboxInput } from \"@astryxdesign/core/CheckboxInput\";\nimport { VStack, Card, Heading, Text } from \"../ui\";\nimport { isDemoActive } from \"../../demo/demoStore\";\nimport { isFirebaseConfigured } from \"../../firebase/config\";\nimport { submitFormValues } from \"./lib/submitForm\";\n\ntype Newsletter = z.infer<typeof NewsletterBlockSchema>;\n\n/**\n * Nieuwsbrief-aanmelding. Twee modi:\n * - `actionUrl` (bv. de embed-action van Mailchimp/Brevo): native form-POST naar de provider.\n * - `formId` (zonder actionUrl): opslag via het XiCMS-formulier (submitForm-callable) — inzendingen\n * verschijnen in /beheer → Formulieren, met dezelfde rate-limiting/validatie als het formulier-blok.\n * Optionele AVG-checkbox via `consentText`.\n */\nfunction NewsletterRender({ block, siteId, mode }: BlockRenderProps<Newsletter>) {\n const [email, setEmail] = useState(\"\");\n const [agreed, setAgreed] = useState(false);\n const [status, setStatus] = useState<\"idle\" | \"busy\" | \"ok\" | \"error\">(\"idle\");\n const useXicmsForm = !block.actionUrl && Boolean(block.formId);\n\n async function submitViaXicms(e: FormEvent) {\n e.preventDefault();\n if (mode === \"preview\" || !block.formId) return;\n // Zelfde vangnet als het formulier-blok: in demo of zonder Firebase-backend lokaal \"slagen\"\n // i.p.v. een foutmelding tonen op een statische (referentie)site.\n if (isDemoActive() || !isFirebaseConfigured()) {\n setStatus(\"ok\");\n return;\n }\n setStatus(\"busy\");\n try {\n await submitFormValues(siteId, block.formId, { email });\n setStatus(\"ok\");\n setEmail(\"\");\n } catch {\n setStatus(\"error\");\n }\n }\n\n const consentBox = block.consentText ? (\n <div style={{ textAlign: \"left\", maxWidth: 440, width: \"100%\" }}>\n <CheckboxInput label={block.consentText} isRequired value={agreed} onChange={setAgreed} />\n </div>\n ) : null;\n\n const emailInput = (\n <div style={{ flex: 1, minWidth: 200, textAlign: \"left\" }}>\n <TextInput\n label=\"E-mailadres\"\n isLabelHidden\n type=\"email\"\n htmlName=\"EMAIL\"\n isRequired\n placeholder=\"je@email.nl\"\n value={email}\n onChange={setEmail}\n />\n </div>\n );\n const rowStyle = { display: \"flex\", gap: \"0.75rem\", flexWrap: \"wrap\", alignItems: \"end\", justifyContent: \"center\", maxWidth: 440, width: \"100%\" } as const;\n\n return (\n <Card padding={5} variant=\"muted\">\n <VStack gap={2} hAlign=\"center\" style={{ textAlign: \"center\" }}>\n {block.heading && <Heading level={2} data-xicms-edit=\"heading\">{block.heading}</Heading>}\n {block.text && <Text color=\"secondary\" data-xicms-edit=\"text\">{block.text}</Text>}\n {status === \"ok\" ? (\n <Text role=\"status\">Bedankt voor je aanmelding!</Text>\n ) : block.actionUrl ? (\n <form\n action={block.actionUrl}\n method=\"post\"\n target=\"_blank\"\n style={rowStyle}\n // AVG: zonder deze guard kon de native POST doorgaan zonder aangevinkte toestemming\n // (Astryx CheckboxInput heeft geen htmlName, dus de browser hield 'm niet tegen).\n onSubmit={(e) => {\n if (block.consentText && !agreed) e.preventDefault();\n }}\n >\n {emailInput}\n {consentBox}\n {/* De toestemmingswaarde ook daadwerkelijk meesturen naar de provider. */}\n {block.consentText && <input type=\"hidden\" name=\"CONSENT\" value={agreed ? \"yes\" : \"\"} />}\n <Button label={block.buttonLabel} variant=\"primary\" size=\"lg\" type=\"submit\" />\n </form>\n ) : useXicmsForm ? (\n <form onSubmit={submitViaXicms} style={rowStyle}>\n {emailInput}\n {consentBox}\n <Button\n label={status === \"busy\" ? \"Aanmelden…\" : block.buttonLabel}\n variant=\"primary\"\n size=\"lg\"\n type=\"submit\"\n isLoading={status === \"busy\"}\n />\n {status === \"error\" && (\n <Text role=\"alert\" type=\"supporting\" style={{ color: \"var(--color-error, #c0392b)\" }}>\n Aanmelden mislukt. Probeer het later opnieuw.\n </Text>\n )}\n </form>\n ) : (\n <Text type=\"supporting\" color=\"secondary\">Configureer een aanmeld-URL of formulier in de editor.</Text>\n )}\n </VStack>\n </Card>\n );\n}\n\nexport const newsletterBlock = defineBlock({\n type: \"newsletter\",\n schema: NewsletterBlockSchema,\n Render: NewsletterRender,\n label: \"Nieuwsbrief\",\n icon: \"✉️\",\n defaults: () => ({ heading: \"Blijf op de hoogte\", buttonLabel: \"Aanmelden\" }),\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type HoursRow } from "./lib/openingHours";
|
|
1
|
+
import { type HoursRow } from "./lib/openingHours.js";
|
|
2
2
|
/**
|
|
3
3
|
* "Nu geopend / Nu gesloten"-badge bij openingstijden. Client-only en pas ná mount berekend
|
|
4
4
|
* (hydration-veilig: de servertijd kan afwijken van de bezoekerstijd). Toont niets wanneer de
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useState } from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { StatusDot } from "@astryxdesign/core/StatusDot";
|
|
5
|
+
import { isOpenNow } from "./lib/openingHours.js";
|
|
5
6
|
function OpenNowBadge({ rows }) {
|
|
6
7
|
const [open, setOpen] = useState(null);
|
|
7
8
|
const rowsKey = JSON.stringify(rows);
|
|
@@ -12,7 +13,11 @@ function OpenNowBadge({ rows }) {
|
|
|
12
13
|
return () => clearInterval(id);
|
|
13
14
|
}, [rowsKey]);
|
|
14
15
|
if (open === null) return null;
|
|
15
|
-
|
|
16
|
+
const label = open ? "Nu geopend" : "Nu gesloten";
|
|
17
|
+
return /* @__PURE__ */ jsxs("span", { className: "xicms-hours__badge", "data-open": open ? "1" : "0", children: [
|
|
18
|
+
/* @__PURE__ */ jsx(StatusDot, { variant: open ? "success" : "error", label, "aria-hidden": true }),
|
|
19
|
+
label
|
|
20
|
+
] });
|
|
16
21
|
}
|
|
17
22
|
export {
|
|
18
23
|
OpenNowBadge
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/OpenNowBadge.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { isOpenNow, type HoursRow } from \"./lib/openingHours\";\n\n/**\n * \"Nu geopend / Nu gesloten\"-badge bij openingstijden. Client-only en pas ná mount berekend\n * (hydration-veilig: de servertijd kan afwijken van de bezoekerstijd). Toont niets wanneer de\n * rijen niet betrouwbaar te parsen zijn — liever geen badge dan een foute.\n */\nexport function OpenNowBadge({ rows }: { rows: HoursRow[] }) {\n const [open, setOpen] = useState<boolean | null>(null);\n // Op inhoud deppen, niet op referentie: de parent bouwt `rows` elke render opnieuw en zou de\n // minuut-interval anders bij elke render resetten (badge die nooit ververst + effect-churn).\n const rowsKey = JSON.stringify(rows);\n useEffect(() => {\n const parsed = JSON.parse(rowsKey) as HoursRow[];\n setOpen(isOpenNow(parsed));\n const id = setInterval(() => setOpen(isOpenNow(parsed)), 60_000);\n return () => clearInterval(id);\n }, [rowsKey]);\n if (open === null) return null;\n return (\n <span className=\"xicms-hours__badge\" data-open={open ? \"1\" : \"0\"}>\n {
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/OpenNowBadge.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { StatusDot } from \"@astryxdesign/core/StatusDot\";\nimport { isOpenNow, type HoursRow } from \"./lib/openingHours\";\n\n/**\n * \"Nu geopend / Nu gesloten\"-badge bij openingstijden. Client-only en pas ná mount berekend\n * (hydration-veilig: de servertijd kan afwijken van de bezoekerstijd). Toont niets wanneer de\n * rijen niet betrouwbaar te parsen zijn — liever geen badge dan een foute.\n */\nexport function OpenNowBadge({ rows }: { rows: HoursRow[] }) {\n const [open, setOpen] = useState<boolean | null>(null);\n // Op inhoud deppen, niet op referentie: de parent bouwt `rows` elke render opnieuw en zou de\n // minuut-interval anders bij elke render resetten (badge die nooit ververst + effect-churn).\n const rowsKey = JSON.stringify(rows);\n useEffect(() => {\n const parsed = JSON.parse(rowsKey) as HoursRow[];\n setOpen(isOpenNow(parsed));\n const id = setInterval(() => setOpen(isOpenNow(parsed)), 60_000);\n return () => clearInterval(id);\n }, [rowsKey]);\n if (open === null) return null;\n const label = open ? \"Nu geopend\" : \"Nu gesloten\";\n return (\n <span className=\"xicms-hours__badge\" data-open={open ? \"1\" : \"0\"}>\n {/* De stip was een `●`-TEKEN in de tekst. Schermlezers lazen dat voor als \"zwarte cirkel\",\n hij volgde de tekstkleur niet los en schaalde mee met de letterhoogte i.p.v. met het\n thema. Astryx' StatusDot is een echt element met een eigen variant; `aria-hidden` omdat\n de status er direct naast al in woorden staat — anders klinkt hij dubbel. */}\n <StatusDot variant={open ? \"success\" : \"error\"} label={label} aria-hidden />\n {label}\n </span>\n );\n}\n"],"mappings":";AAyBI,SAKE,KALF;AAvBJ,SAAS,WAAW,gBAAgB;AACpC,SAAS,iBAAiB;AAC1B,SAAS,iBAAgC;AAOlC,SAAS,aAAa,EAAE,KAAK,GAAyB;AAC3D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAyB,IAAI;AAGrD,QAAM,UAAU,KAAK,UAAU,IAAI;AACnC,YAAU,MAAM;AACd,UAAM,SAAS,KAAK,MAAM,OAAO;AACjC,YAAQ,UAAU,MAAM,CAAC;AACzB,UAAM,KAAK,YAAY,MAAM,QAAQ,UAAU,MAAM,CAAC,GAAG,GAAM;AAC/D,WAAO,MAAM,cAAc,EAAE;AAAA,EAC/B,GAAG,CAAC,OAAO,CAAC;AACZ,MAAI,SAAS,KAAM,QAAO;AAC1B,QAAM,QAAQ,OAAO,eAAe;AACpC,SACE,qBAAC,UAAK,WAAU,sBAAqB,aAAW,OAAO,MAAM,KAK3D;AAAA,wBAAC,aAAU,SAAS,OAAO,YAAY,SAAS,OAAc,eAAW,MAAC;AAAA,IACzE;AAAA,KACH;AAEJ;","names":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const openingHoursBlock: import("
|
|
2
|
+
export declare const openingHoursBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { jsonLdHtml } from "./jsonld";
|
|
3
|
-
import { OpeningHoursBlockSchema } from "../../schema/blocks";
|
|
4
|
-
import { defineBlock } from "../registry";
|
|
5
|
-
import { Heading } from "../ui";
|
|
6
|
-
import { OpenNowBadge } from "./OpenNowBadge";
|
|
7
|
-
import { openingHoursSpecJsonLd } from "./lib/openingHours";
|
|
2
|
+
import { jsonLdHtml } from "./jsonld.js";
|
|
3
|
+
import { OpeningHoursBlockSchema } from "../../schema/blocks.js";
|
|
4
|
+
import { defineBlock } from "../registry.js";
|
|
5
|
+
import { Heading } from "../ui/index.js";
|
|
6
|
+
import { OpenNowBadge } from "./OpenNowBadge.js";
|
|
7
|
+
import { openingHoursSpecJsonLd } from "./lib/openingHours.js";
|
|
8
8
|
function OpeningHoursRender({ block }) {
|
|
9
9
|
const rows = block.rows ?? [];
|
|
10
10
|
const spec = block.jsonLd ? openingHoursSpecJsonLd(rows) : [];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const pdfBlock: import("
|
|
2
|
+
export declare const pdfBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from "react";
|
|
4
|
-
import { PdfBlockSchema } from "../../schema/blocks";
|
|
5
|
-
import { defineBlock } from "../registry";
|
|
6
|
-
import { VStack, HStack, Heading, Text } from "../ui";
|
|
4
|
+
import { PdfBlockSchema } from "../../schema/blocks.js";
|
|
5
|
+
import { defineBlock } from "../registry.js";
|
|
6
|
+
import { VStack, HStack, Heading, Text } from "../ui/index.js";
|
|
7
7
|
function PdfRender({ block, mode }) {
|
|
8
8
|
const docs = (block.documents ?? []).filter((d) => d.url);
|
|
9
9
|
const [active, setActive] = useState(0);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const portfolioBlock: import("
|
|
2
|
+
export declare const portfolioBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useRef, useState } from "react";
|
|
4
|
-
import { PortfolioBlockSchema } from "../../schema/blocks";
|
|
5
|
-
import { defineBlock } from "../registry";
|
|
6
|
-
import { VStack, Grid, Heading, Text } from "../ui";
|
|
7
|
-
import { Img } from "../../media/ImageContext";
|
|
8
|
-
import { LightboxOverlay } from "./Gallery";
|
|
4
|
+
import { PortfolioBlockSchema } from "../../schema/blocks.js";
|
|
5
|
+
import { defineBlock } from "../registry.js";
|
|
6
|
+
import { VStack, Grid, Heading, Text } from "../ui/index.js";
|
|
7
|
+
import { Img } from "../../media/ImageContext.js";
|
|
8
|
+
import { LightboxOverlay } from "./Gallery.js";
|
|
9
9
|
function PortfolioRender({ block }) {
|
|
10
10
|
const allItems = (block.items ?? []).filter((i) => i.imageUrl);
|
|
11
11
|
const [activeCat, setActiveCat] = useState(null);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
import { PricingBlockSchema } from "../../schema/blocks";
|
|
2
|
+
import { PricingBlockSchema } from "../../schema/blocks.js";
|
|
3
3
|
type Pricing = z.infer<typeof PricingBlockSchema>;
|
|
4
4
|
/** "€ 120", "120,50 p/m" → "120.50"; null als er geen bedrag in te herkennen is. */
|
|
5
5
|
export declare function parsePriceAmount(price: string): string | null;
|
|
6
6
|
export declare function pricingJsonLd(items: Pricing["items"], currency?: string): Record<string, unknown>;
|
|
7
|
-
export declare const pricingBlock: import("
|
|
7
|
+
export declare const pricingBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
8
8
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { PricingBlockSchema } from "../../schema/blocks";
|
|
4
|
-
import { defineBlock } from "../registry";
|
|
5
|
-
import { VStack, Grid, Card, Heading, Text, Btn } from "../ui";
|
|
6
|
-
import { jsonLdHtml } from "./jsonld";
|
|
3
|
+
import { PricingBlockSchema } from "../../schema/blocks.js";
|
|
4
|
+
import { defineBlock } from "../registry.js";
|
|
5
|
+
import { VStack, Grid, Card, Heading, Text, Btn } from "../ui/index.js";
|
|
6
|
+
import { jsonLdHtml } from "./jsonld.js";
|
|
7
7
|
function parsePriceAmount(price) {
|
|
8
8
|
const m = price.replace(/\./g, "").replace(",", ".").match(/(\d+(?:\.\d{1,2})?)/);
|
|
9
9
|
return m ? m[1] : null;
|
|
@@ -59,7 +59,7 @@ function PricingRender({ block }) {
|
|
|
59
59
|
},
|
|
60
60
|
i
|
|
61
61
|
)) }),
|
|
62
|
-
block.note && /* @__PURE__ */ jsx(Text, { color: "secondary", justify: "center", style: { textAlign: "center" }, children: block.note }),
|
|
62
|
+
block.note && /* @__PURE__ */ jsx(Text, { color: "secondary", justify: "center", style: { textAlign: "center" }, "data-xicms-edit": "note", children: block.note }),
|
|
63
63
|
block.jsonLd && /* @__PURE__ */ jsx(
|
|
64
64
|
"script",
|
|
65
65
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Pricing.tsx"],"sourcesContent":["\"use client\";\n\nimport type { z } from \"zod\";\nimport { PricingBlockSchema } from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\nimport { VStack, Grid, Card, Heading, Text, Btn } from \"../ui\";\nimport { jsonLdHtml } from \"./jsonld\";\n\ntype Pricing = z.infer<typeof PricingBlockSchema>;\n\n/** \"€ 120\", \"120,50 p/m\" → \"120.50\"; null als er geen bedrag in te herkennen is. */\nexport function parsePriceAmount(price: string): string | null {\n const m = price.replace(/\\./g, \"\").replace(\",\", \".\").match(/(\\d+(?:\\.\\d{1,2})?)/);\n return m ? m[1] : null;\n}\n\nexport function pricingJsonLd(items: Pricing[\"items\"], currency = \"EUR\"): Record<string, unknown> {\n return {\n \"@context\": \"https://schema.org\",\n \"@type\": \"ItemList\",\n itemListElement: items\n .filter((it) => it.label)\n .map((it, i) => {\n // schema.org-`price` moet een kaal getal zijn (\"120\" of \"120.50\"); vrije tekst zoals\n // \"€ 120/mnd\" keurt Google af. Geen herkenbaar bedrag → dan geen Offer.\n const amount = parsePriceAmount(it.price);\n return {\n \"@type\": \"ListItem\",\n position: i + 1,\n item: {\n \"@type\": \"Product\",\n name: it.label,\n ...(it.detail ? { description: it.detail } : {}),\n ...(amount ? { offers: { \"@type\": \"Offer\", price: amount, priceCurrency: currency } } : {}),\n },\n };\n }),\n };\n}\n\n/** Prijzen als kaarten met optionele features, uitgelichte tier en per-tier knop (Astryx). */\nfunction PricingRender({ block }: BlockRenderProps<Pricing>) {\n const items = block.items ?? [];\n return (\n <VStack gap={4} as=\"section\" className=\"xicms-pricing\">\n {block.heading && (\n <Heading level={2} justify=\"center\" data-xicms-edit=\"heading\" style={{ textAlign: \"center\" }}>{block.heading}</Heading>\n )}\n <Grid columns={{ minWidth: 240, max: 4 }} gap={4}>\n {items.map((it, i) => (\n <Card\n key={i}\n padding={5}\n height=\"100%\"\n className={`xicms-pricing__card${it.highlighted ? \" xicms-pricing__card--highlighted\" : \"\"}`}\n style={it.highlighted ? { outline: \"2px solid var(--color-accent)\", outlineOffset: -2 } : undefined}\n >\n <VStack gap={2} style={{ height: \"100%\" }}>\n <Text type=\"label\" color=\"secondary\" className=\"xicms-pricing__label\" data-xicms-edit={`items.${i}.label`} style={{ textTransform: \"uppercase\", letterSpacing: \"0.05em\" }}>\n {it.label}\n </Text>\n <VStack gap={0}>\n <Heading level={3} className=\"xicms-pricing__price\" data-xicms-edit={`items.${i}.price`} style={{ fontSize: \"clamp(1.75rem, 4vw, 2.25rem)\", lineHeight: 1.1, fontWeight: 700 }}>\n {it.price}\n </Heading>\n {it.billingPeriod && <Text type=\"supporting\" color=\"secondary\">{it.billingPeriod}</Text>}\n </VStack>\n {it.detail && <Text color=\"secondary\">{it.detail}</Text>}\n {it.features && it.features.length > 0 && (\n <VStack gap={1} as=\"ul\" style={{ listStyle: \"none\", margin: 0, padding: 0, flex: 1 }}>\n {it.features.map((f, j) => (\n // Echte <li> binnen de <ul> (geldige HTML; screenreaders kondigen de lijst aan).\n // Inline edit op een span BINNEN de tekst: anders zou het ✓-teken mee worden\n // teruggeschreven in de opgeslagen feature (zelfde patroon als Testimonials).\n <li key={j}>\n <Text display=\"block\">✓ <span data-xicms-edit={`items.${i}.features.${j}`}>{f}</span></Text>\n </li>\n ))}\n </VStack>\n )}\n {it.ctaLabel && (\n <Btn label={it.ctaLabel} href={it.ctaHref ?? \"#\"} variant={it.highlighted ? \"primary\" : \"outline\"} />\n )}\n </VStack>\n </Card>\n ))}\n </Grid>\n {block.note && <Text color=\"secondary\" justify=\"center\" style={{ textAlign: \"center\" }}>{block.note}</Text>}\n {block.jsonLd && (\n <script\n type=\"application/ld+json\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: jsonLdHtml(pricingJsonLd(items, block.currency)) }}\n />\n )}\n </VStack>\n );\n}\n\nexport const pricingBlock = defineBlock({\n type: \"pricing\",\n schema: PricingBlockSchema,\n Render: PricingRender,\n label: \"Prijzen\",\n icon: \"💶\",\n defaults: () => ({\n heading: \"Prijzen\",\n items: [{ label: \"Pakket\", price: \"€ 00\", billingPeriod: \"/maand\", features: [], highlighted: false }],\n }),\n});\n"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Pricing.tsx"],"sourcesContent":["\"use client\";\n\nimport type { z } from \"zod\";\nimport { PricingBlockSchema } from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\nimport { VStack, Grid, Card, Heading, Text, Btn } from \"../ui\";\nimport { jsonLdHtml } from \"./jsonld\";\n\ntype Pricing = z.infer<typeof PricingBlockSchema>;\n\n/** \"€ 120\", \"120,50 p/m\" → \"120.50\"; null als er geen bedrag in te herkennen is. */\nexport function parsePriceAmount(price: string): string | null {\n const m = price.replace(/\\./g, \"\").replace(\",\", \".\").match(/(\\d+(?:\\.\\d{1,2})?)/);\n return m ? m[1] : null;\n}\n\nexport function pricingJsonLd(items: Pricing[\"items\"], currency = \"EUR\"): Record<string, unknown> {\n return {\n \"@context\": \"https://schema.org\",\n \"@type\": \"ItemList\",\n itemListElement: items\n .filter((it) => it.label)\n .map((it, i) => {\n // schema.org-`price` moet een kaal getal zijn (\"120\" of \"120.50\"); vrije tekst zoals\n // \"€ 120/mnd\" keurt Google af. Geen herkenbaar bedrag → dan geen Offer.\n const amount = parsePriceAmount(it.price);\n return {\n \"@type\": \"ListItem\",\n position: i + 1,\n item: {\n \"@type\": \"Product\",\n name: it.label,\n ...(it.detail ? { description: it.detail } : {}),\n ...(amount ? { offers: { \"@type\": \"Offer\", price: amount, priceCurrency: currency } } : {}),\n },\n };\n }),\n };\n}\n\n/** Prijzen als kaarten met optionele features, uitgelichte tier en per-tier knop (Astryx). */\nfunction PricingRender({ block }: BlockRenderProps<Pricing>) {\n const items = block.items ?? [];\n return (\n <VStack gap={4} as=\"section\" className=\"xicms-pricing\">\n {block.heading && (\n <Heading level={2} justify=\"center\" data-xicms-edit=\"heading\" style={{ textAlign: \"center\" }}>{block.heading}</Heading>\n )}\n <Grid columns={{ minWidth: 240, max: 4 }} gap={4}>\n {items.map((it, i) => (\n <Card\n key={i}\n padding={5}\n height=\"100%\"\n className={`xicms-pricing__card${it.highlighted ? \" xicms-pricing__card--highlighted\" : \"\"}`}\n style={it.highlighted ? { outline: \"2px solid var(--color-accent)\", outlineOffset: -2 } : undefined}\n >\n <VStack gap={2} style={{ height: \"100%\" }}>\n <Text type=\"label\" color=\"secondary\" className=\"xicms-pricing__label\" data-xicms-edit={`items.${i}.label`} style={{ textTransform: \"uppercase\", letterSpacing: \"0.05em\" }}>\n {it.label}\n </Text>\n <VStack gap={0}>\n <Heading level={3} className=\"xicms-pricing__price\" data-xicms-edit={`items.${i}.price`} style={{ fontSize: \"clamp(1.75rem, 4vw, 2.25rem)\", lineHeight: 1.1, fontWeight: 700 }}>\n {it.price}\n </Heading>\n {it.billingPeriod && <Text type=\"supporting\" color=\"secondary\">{it.billingPeriod}</Text>}\n </VStack>\n {it.detail && <Text color=\"secondary\">{it.detail}</Text>}\n {it.features && it.features.length > 0 && (\n <VStack gap={1} as=\"ul\" style={{ listStyle: \"none\", margin: 0, padding: 0, flex: 1 }}>\n {it.features.map((f, j) => (\n // Echte <li> binnen de <ul> (geldige HTML; screenreaders kondigen de lijst aan).\n // Inline edit op een span BINNEN de tekst: anders zou het ✓-teken mee worden\n // teruggeschreven in de opgeslagen feature (zelfde patroon als Testimonials).\n <li key={j}>\n <Text display=\"block\">✓ <span data-xicms-edit={`items.${i}.features.${j}`}>{f}</span></Text>\n </li>\n ))}\n </VStack>\n )}\n {it.ctaLabel && (\n <Btn label={it.ctaLabel} href={it.ctaHref ?? \"#\"} variant={it.highlighted ? \"primary\" : \"outline\"} />\n )}\n </VStack>\n </Card>\n ))}\n </Grid>\n {block.note && <Text color=\"secondary\" justify=\"center\" style={{ textAlign: \"center\" }} data-xicms-edit=\"note\">{block.note}</Text>}\n {block.jsonLd && (\n <script\n type=\"application/ld+json\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: jsonLdHtml(pricingJsonLd(items, block.currency)) }}\n />\n )}\n </VStack>\n );\n}\n\nexport const pricingBlock = defineBlock({\n type: \"pricing\",\n schema: PricingBlockSchema,\n Render: PricingRender,\n label: \"Prijzen\",\n icon: \"💶\",\n defaults: () => ({\n heading: \"Prijzen\",\n items: [{ label: \"Pakket\", price: \"€ 00\", billingPeriod: \"/maand\", features: [], highlighted: false }],\n }),\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const richTextBlock: import("
|
|
2
|
+
export declare const richTextBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { RichTextBlockSchema } from "../../schema/blocks";
|
|
3
|
-
import { defineBlock } from "../registry";
|
|
2
|
+
import { RichTextBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import { defineBlock } from "../registry.js";
|
|
4
4
|
function RichTextRender({ block }) {
|
|
5
5
|
return /* @__PURE__ */ jsx("div", { className: "xicms-richtext", dangerouslySetInnerHTML: { __html: block.html } });
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/RichTextBlock.tsx"],"sourcesContent":["import type { z } from \"zod\";\nimport { RichTextBlockSchema } from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\n\ntype RichText = z.infer<typeof RichTextBlockSchema>;\n\nfunction RichTextRender({ block }: BlockRenderProps<RichText>) {\n // `
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/RichTextBlock.tsx"],"sourcesContent":["import type { z } from \"zod\";\nimport { RichTextBlockSchema } from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\n\ntype RichText = z.infer<typeof RichTextBlockSchema>;\n\nfunction RichTextRender({ block }: BlockRenderProps<RichText>) {\n // Twee bronnen, twee saneringen — allebei vóór dit punt:\n // - GEPUBLICEERD: `publishPage` haalt de blokken door `sanitizeBlocks`, en de Firestore-rules\n // maken `pages` Functions-only. Wat hier binnenkomt is dus al server-side gesaneerd.\n // - WERKVERSIE: die schrijven editors rechtstreeks naar `drafts`, waar rules geen HTML kunnen\n // saneren. Daarom saneert de editor bij het INLEZEN (admin/lib/sanitizeDraft.ts).\n // Ga hier dus niet vanuit \"opslaan heeft het al gedaan\" — dat gold nooit voor werkversies.\n return <div className=\"xicms-richtext\" dangerouslySetInnerHTML={{ __html: block.html }} />;\n}\n\nexport const richTextBlock = defineBlock({\n type: \"richText\",\n schema: RichTextBlockSchema,\n Render: RichTextRender,\n label: \"Tekst\",\n icon: \"¶\",\n defaults: () => ({ html: \"<p></p>\" }),\n});\n"],"mappings":"AAaS;AAZT,SAAS,2BAA2B;AACpC,SAAS,mBAA0C;AAInD,SAAS,eAAe,EAAE,MAAM,GAA+B;AAO7D,SAAO,oBAAC,SAAI,WAAU,kBAAiB,yBAAyB,EAAE,QAAQ,MAAM,KAAK,GAAG;AAC1F;AAEO,MAAM,gBAAgB,YAAY;AAAA,EACvC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU,OAAO,EAAE,MAAM,UAAU;AACrC,CAAC;","names":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const searchBlock: import("
|
|
2
|
+
export declare const searchBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useMemo, useState } from "react";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { defineBlock } from "../registry";
|
|
7
|
-
import { getDb } from "../../firebase/client";
|
|
4
|
+
import { SearchBlockSchema } from "../../schema/blocks.js";
|
|
5
|
+
import { defineBlock } from "../registry.js";
|
|
8
6
|
import { TextInput } from "@astryxdesign/core/TextInput";
|
|
9
|
-
import { rankResults, highlightParts } from "./lib/searchRank";
|
|
7
|
+
import { rankResults, highlightParts } from "./lib/searchRank.js";
|
|
10
8
|
function collectStrings(v, parts, depth) {
|
|
11
9
|
if (depth > 6 || v == null) return;
|
|
12
10
|
if (typeof v === "string") {
|
|
@@ -33,10 +31,14 @@ function SearchRender({ block, siteId }) {
|
|
|
33
31
|
const [entries, setEntries] = useState([]);
|
|
34
32
|
const [q, setQ] = useState("");
|
|
35
33
|
useEffect(() => {
|
|
36
|
-
const db = getDb();
|
|
37
|
-
if (!db) return;
|
|
38
34
|
let cancelled = false;
|
|
39
35
|
(async () => {
|
|
36
|
+
const [{ getDb }, { collection, getDocs, query, where }] = await Promise.all([
|
|
37
|
+
import("../../firebase/client.js"),
|
|
38
|
+
import("firebase/firestore")
|
|
39
|
+
]);
|
|
40
|
+
const db = getDb();
|
|
41
|
+
if (!db || cancelled) return;
|
|
40
42
|
const out = [];
|
|
41
43
|
try {
|
|
42
44
|
const pagesSnap = await getDocs(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/blocks/builtins/Search.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/blocks/builtins/Search.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { z } from \"zod\";\nimport { SearchBlockSchema } from \"../../schema/blocks\";\nimport { defineBlock, type BlockRenderProps } from \"../registry\";\nimport { TextInput } from \"@astryxdesign/core/TextInput\";\nimport { rankResults, highlightParts } from \"./lib/searchRank\";\n\ntype SearchBlock = z.infer<typeof SearchBlockSchema>;\n\ninterface Entry {\n title: string;\n path: string;\n text: string;\n}\n\n/**\n * Vlakt block-content uit tot doorzoekbare tekst. RECURSIEF: de meeste content leeft genest —\n * `cards.items[].title/text`, `faq.items[].q/a`, en alles binnen columns/withSidebar/tabs. Alleen\n * top-level strings pakken zou zoeken vrijwel leeg maken op content-rijke pagina's.\n */\nfunction collectStrings(v: unknown, parts: string[], depth: number): void {\n if (depth > 6 || v == null) return; // diepte-cap tegen pathologische structuren\n if (typeof v === \"string\") {\n parts.push(v);\n return;\n }\n if (Array.isArray(v)) {\n for (const item of v) collectStrings(item, parts, depth + 1);\n return;\n }\n if (typeof v === \"object\") {\n for (const [k, val] of Object.entries(v as Record<string, unknown>)) {\n if (k.startsWith(\"_\") || k === \"url\" || k === \"imageUrl\" || k === \"href\") continue; // meta/urls niet doorzoekbaar\n collectStrings(val, parts, depth + 1);\n }\n }\n}\nfunction blocksToText(blocks: unknown): string {\n const parts: string[] = [];\n collectStrings(blocks, parts, 0);\n return parts.join(\" \").replace(/<[^>]*>/g, \" \");\n}\n\n/** Site-zoek — leest gepubliceerde pagina's (en optioneel nieuws) en filtert client-side. */\nfunction SearchRender({ block, siteId }: BlockRenderProps<SearchBlock>) {\n const [entries, setEntries] = useState<Entry[]>([]);\n const [q, setQ] = useState(\"\");\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n // Firestore dynamisch: de zoekindex wordt pas opgebouwd wanneer het zoekblok in beeld is,\n // dus een gewone pagina downloadt de SDK niet.\n const [{ getDb }, { collection, getDocs, query, where }] = await Promise.all([\n import(\"../../firebase/client\"),\n import(\"firebase/firestore\"),\n ]);\n const db = getDb();\n if (!db || cancelled) return;\n const out: Entry[] = [];\n try {\n const pagesSnap = await getDocs(\n query(collection(db, `sites/${siteId}/pages`), where(\"status\", \"==\", \"published\")),\n );\n pagesSnap.forEach((d) => {\n const data = d.data() as Record<string, unknown>;\n out.push({\n title: String(data.title ?? \"\"),\n path: String(data.path ?? \"/\"),\n text: blocksToText(data.blocks),\n });\n });\n if (block.includeNews) {\n const newsSnap = await getDocs(\n query(collection(db, `sites/${siteId}/news`), where(\"published\", \"==\", true)),\n );\n newsSnap.forEach((d) => {\n const data = d.data() as Record<string, unknown>;\n out.push({\n title: String(data.title ?? \"\"),\n path: `/nieuws/${String(data.slug ?? d.id)}`,\n text: String(data.excerpt ?? \"\") + \" \" + String(data.body ?? \"\").replace(/<[^>]*>/g, \" \"),\n });\n });\n }\n } catch {\n /* stil: zonder leesrechten/Firebase blijft het zoekveld leeg */\n }\n if (!cancelled) setEntries(out);\n })();\n return () => {\n cancelled = true;\n };\n }, [siteId, block.includeNews]);\n\n // Debounce (250ms): niet bij elke toetsaanslag opnieuw ranken/renderen.\n const [debouncedQ, setDebouncedQ] = useState(\"\");\n useEffect(() => {\n const t = setTimeout(() => setDebouncedQ(q), 250);\n return () => clearTimeout(t);\n }, [q]);\n\n const results = useMemo(() => rankResults(debouncedQ, entries), [entries, debouncedQ]);\n\n const mark = (text: string) =>\n highlightParts(text, debouncedQ).map((p, i) => (p.hit ? <mark key={i}>{p.text}</mark> : <span key={i}>{p.text}</span>));\n\n return (\n <div className=\"xicms-search\">\n <TextInput\n label={block.placeholder}\n isLabelHidden\n placeholder={block.placeholder}\n value={q}\n onChange={setQ}\n />\n {debouncedQ.trim() && (\n <ul className=\"xicms-search__results\">\n {results.length === 0 ? (\n <li className=\"xicms-search__empty\">Niets gevonden.</li>\n ) : (\n results.map((r, i) => (\n <li key={i} className=\"xicms-search__result\">\n <a href={r.path}>{mark(r.title || r.path)}</a>\n {r.snippet && <p className=\"xicms-search__snippet\">{mark(r.snippet)}</p>}\n </li>\n ))\n )}\n </ul>\n )}\n </div>\n );\n}\n\nexport const searchBlock = defineBlock({\n type: \"search\",\n schema: SearchBlockSchema,\n Render: SearchRender,\n label: \"Zoeken\",\n icon: \"🔍\",\n defaults: () => ({ placeholder: \"Zoeken…\", includeNews: true }),\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const featureBlock: import("
|
|
3
|
-
export declare const countersBlock: import("
|
|
4
|
-
export declare const logosBlock: import("
|
|
5
|
-
export declare const timelineBlock: import("
|
|
2
|
+
export declare const featureBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
3
|
+
export declare const countersBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
4
|
+
export declare const logosBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
5
|
+
export declare const timelineBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
CountersBlockSchema,
|
|
7
7
|
LogosBlockSchema,
|
|
8
8
|
TimelineBlockSchema
|
|
9
|
-
} from "../../schema/blocks";
|
|
10
|
-
import { defineBlock } from "../registry";
|
|
11
|
-
import { VStack, HStack, Grid, Heading, Text, Btn } from "../ui";
|
|
12
|
-
import { Img } from "../../media/ImageContext";
|
|
9
|
+
} from "../../schema/blocks.js";
|
|
10
|
+
import { defineBlock } from "../registry.js";
|
|
11
|
+
import { VStack, HStack, Grid, Heading, Text, Btn } from "../ui/index.js";
|
|
12
|
+
import { Img } from "../../media/ImageContext.js";
|
|
13
13
|
function FeatureRender({ block }) {
|
|
14
14
|
const media = block.imageUrl ? /* @__PURE__ */ jsx(
|
|
15
15
|
Img,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const sliderBlock: import("
|
|
2
|
+
export declare const sliderBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
|
-
import { SliderBlockSchema } from "../../schema/blocks";
|
|
5
|
-
import { defineBlock } from "../registry";
|
|
6
|
-
import { Img } from "../../media/ImageContext";
|
|
4
|
+
import { SliderBlockSchema } from "../../schema/blocks.js";
|
|
5
|
+
import { defineBlock } from "../registry.js";
|
|
6
|
+
import { Img } from "../../media/ImageContext.js";
|
|
7
7
|
function prefersReducedMotion() {
|
|
8
8
|
return typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
9
9
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const spacerBlock: import("
|
|
2
|
+
export declare const spacerBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { SpacerBlockSchema } from "../../schema/blocks";
|
|
3
|
-
import { defineBlock } from "../registry";
|
|
2
|
+
import { SpacerBlockSchema } from "../../schema/blocks.js";
|
|
3
|
+
import { defineBlock } from "../registry.js";
|
|
4
4
|
const HEIGHTS = { sm: 16, md: 32, lg: 64, xl: 120 };
|
|
5
5
|
function SpacerRender({ block }) {
|
|
6
6
|
return /* @__PURE__ */ jsx("div", { "aria-hidden": true, style: { height: HEIGHTS[block.size] } });
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
export declare const symbolRefBlock: import("
|
|
2
|
+
export declare const symbolRefBlock: import("../index.js").BlockDefinition<z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
|