@xiwebdesign/xicms-core 6.5.0 → 7.1.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 +90 -61
- package/dist/XiCMSProvider.js.map +1 -1
- package/dist/admin/AdminApp.d.ts +1 -1
- package/dist/admin/AdminApp.js +81 -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/CoreVersion.d.ts +13 -0
- package/dist/admin/CoreVersion.js +38 -0
- package/dist/admin/CoreVersion.js.map +1 -0
- 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 +66 -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 +46 -44
- package/dist/index.js +39 -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 +233 -1074
- package/dist/schema/settings.js +71 -56
- 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 +78 -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 +11 -9
- package/dist/server/index.js +13 -10
- package/dist/server/index.js.map +1 -1
- package/dist/server/pages.d.ts +11 -4
- package/dist/server/pages.js +43 -15
- package/dist/server/pages.js.map +1 -1
- package/dist/server/revalidate.js +11 -2
- package/dist/server/revalidate.js.map +1 -1
- 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/server/version.d.ts +16 -0
- package/dist/server/version.js +17 -0
- package/dist/server/version.js.map +1 -0
- 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 +30 -4
- package/dist/theme/presets.d.ts +1 -1
- package/dist/version.d.ts +8 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/package.json +35 -34
package/dist/admin/shop/lib.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { getFunctions, httpsCallable } from "firebase/functions";
|
|
3
|
-
import { getFirebaseApp } from "../../firebase/client";
|
|
4
|
-
import { functionsRegion } from "../../firebase/region";
|
|
3
|
+
import { getFirebaseApp } from "../../firebase/client.js";
|
|
4
|
+
import { functionsRegion } from "../../firebase/region.js";
|
|
5
5
|
function shopCallable(name) {
|
|
6
6
|
return async (data) => {
|
|
7
7
|
const app = getFirebaseApp();
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useMemo, useState } from "react";
|
|
4
4
|
import { collection, getDocs } from "firebase/firestore";
|
|
5
|
-
import { getDb } from "../../firebase/client";
|
|
6
|
-
import { Card } from "../ui/primitives";
|
|
5
|
+
import { getDb } from "../../firebase/client.js";
|
|
6
|
+
import { Card } from "../ui/primitives.js";
|
|
7
7
|
function StatsPanel({ siteId }) {
|
|
8
8
|
const [months, setMonths] = useState([]);
|
|
9
9
|
const [loading, setLoading] = useState(true);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useRef } from "react";
|
|
4
|
-
import { Button } from "./primitives";
|
|
4
|
+
import { Button } from "./primitives.js";
|
|
5
5
|
let keyCounter = 0;
|
|
6
6
|
const genKey = () => `row-${++keyCounter}`;
|
|
7
7
|
function ArrayEditor({
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
const PADEN = {
|
|
4
|
+
pages: "M4 3h9l4 4v14H4z M13 3v5h4",
|
|
5
|
+
news: "M4 5h16v14H4z M7 9h10 M7 13h10 M7 17h6",
|
|
6
|
+
media: "M3 5h18v14H3z M3 15l5-5 4 4 3-3 6 6",
|
|
7
|
+
forms: "M5 3h14v18H5z M9 8h6 M9 12h6 M9 16h3",
|
|
8
|
+
stats: "M4 20V10 M10 20V4 M16 20v-7 M22 20H2",
|
|
9
|
+
blocks: "M4 4h7v7H4z M13 4h7v7h-7z M4 13h7v7H4z M13 13h7v7h-7z",
|
|
10
|
+
settings: "M12 15a3 3 0 100-6 3 3 0 000 6z M19.4 15a1.6 1.6 0 00.3 1.8l.1.1a2 2 0 11-2.8 2.8l-.1-.1a1.6 1.6 0 00-2.7 1.1V21a2 2 0 11-4 0v-.1A1.6 1.6 0 007.5 19.4l-.1.1a2 2 0 11-2.8-2.8l.1-.1A1.6 1.6 0 003 14.6H3a2 2 0 110-4h.1A1.6 1.6 0 004.6 7.5l-.1-.1a2 2 0 112.8-2.8l.1.1a1.6 1.6 0 001.8.3H9.4a1.6 1.6 0 001-1.5V3a2 2 0 114 0v.1a1.6 1.6 0 001 1.5 1.6 1.6 0 001.8-.3l.1-.1a2 2 0 112.8 2.8l-.1.1a1.6 1.6 0 00-.3 1.8v.1a1.6 1.6 0 001.5 1H21a2 2 0 110 4h-.1a1.6 1.6 0 00-1.5 1z"
|
|
11
|
+
};
|
|
12
|
+
const FALLBACK = "M12 3l9 9-9 9-9-9z";
|
|
13
|
+
function PanelIcon({ id }) {
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
"svg",
|
|
16
|
+
{
|
|
17
|
+
"aria-hidden": "true",
|
|
18
|
+
viewBox: "0 0 24 24",
|
|
19
|
+
width: "18",
|
|
20
|
+
height: "18",
|
|
21
|
+
fill: "none",
|
|
22
|
+
stroke: "currentColor",
|
|
23
|
+
strokeWidth: "1.6",
|
|
24
|
+
strokeLinecap: "round",
|
|
25
|
+
strokeLinejoin: "round",
|
|
26
|
+
className: "shrink-0",
|
|
27
|
+
children: (PADEN[id] ?? FALLBACK).split(" M").map((d, i) => /* @__PURE__ */ jsx("path", { d: i === 0 ? d : `M${d}` }, i))
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
PanelIcon
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=PanelIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/ui/PanelIcon.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Kleine lijn-iconen voor de zijbalk. Bewust inline SVG en geen icoon-pakket: het zijn er zeven,\n * en een dependency voor zeven paden is niet te verdedigen in een bundel die élke klantsite laadt.\n *\n * Iconen zijn hier geen versiering maar herkenning: de beheerder van een hoveniersbedrijf logt een\n * keer per maand in en zoekt \"waar stond die tekst ook alweer\" — een vorm vindt hij sneller terug\n * dan een woord.\n */\nconst PADEN: Record<string, string> = {\n pages: \"M4 3h9l4 4v14H4z M13 3v5h4\",\n news: \"M4 5h16v14H4z M7 9h10 M7 13h10 M7 17h6\",\n media: \"M3 5h18v14H3z M3 15l5-5 4 4 3-3 6 6\",\n forms: \"M5 3h14v18H5z M9 8h6 M9 12h6 M9 16h3\",\n stats: \"M4 20V10 M10 20V4 M16 20v-7 M22 20H2\",\n blocks: \"M4 4h7v7H4z M13 4h7v7h-7z M4 13h7v7H4z M13 13h7v7h-7z\",\n settings: \"M12 15a3 3 0 100-6 3 3 0 000 6z M19.4 15a1.6 1.6 0 00.3 1.8l.1.1a2 2 0 11-2.8 2.8l-.1-.1a1.6 1.6 0 00-2.7 1.1V21a2 2 0 11-4 0v-.1A1.6 1.6 0 007.5 19.4l-.1.1a2 2 0 11-2.8-2.8l.1-.1A1.6 1.6 0 003 14.6H3a2 2 0 110-4h.1A1.6 1.6 0 004.6 7.5l-.1-.1a2 2 0 112.8-2.8l.1.1a1.6 1.6 0 001.8.3H9.4a1.6 1.6 0 001-1.5V3a2 2 0 114 0v.1a1.6 1.6 0 001 1.5 1.6 1.6 0 001.8-.3l.1-.1a2 2 0 112.8 2.8l-.1.1a1.6 1.6 0 00-.3 1.8v.1a1.6 1.6 0 001.5 1H21a2 2 0 110 4h-.1a1.6 1.6 0 00-1.5 1z\",\n};\n/** Onbekende module (klant-paneel): een neutrale ruit, zodat het rijtje visueel niet breekt. */\nconst FALLBACK = \"M12 3l9 9-9 9-9-9z\";\n\nexport function PanelIcon({ id }: { id: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0\"\n >\n {(PADEN[id] ?? FALLBACK).split(\" M\").map((d, i) => (\n <path key={i} d={i === 0 ? d : `M${d}`} />\n ))}\n </svg>\n );\n}\n"],"mappings":";AAqCQ;AA3BR,MAAM,QAAgC;AAAA,EACpC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AACZ;AAEA,MAAM,WAAW;AAEV,SAAS,UAAU,EAAE,GAAG,GAAmB;AAChD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,QAAO;AAAA,MACP,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,WAAU;AAAA,MAER,iBAAM,EAAE,KAAK,UAAU,MAAM,IAAI,EAAE,IAAI,CAAC,GAAG,MAC3C,oBAAC,UAAa,GAAG,MAAM,IAAI,IAAI,IAAI,CAAC,MAAzB,CAA6B,CACzC;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -1,9 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export declare function Dialog({ open: controlled, onOpenChange, children, }: {
|
|
3
|
+
open?: boolean;
|
|
4
|
+
onOpenChange?: (v: boolean) => void;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
/** `asChild` blijft geaccepteerd voor een ongewijzigde aanroep-API; het kind wordt altijd gekloond. */
|
|
8
|
+
export declare function DialogTrigger({ children }: {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
asChild?: boolean;
|
|
11
|
+
}): import("react").JSX.Element;
|
|
12
|
+
export declare function DialogClose({ children }: {
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
asChild?: boolean;
|
|
15
|
+
}): import("react").JSX.Element;
|
|
16
|
+
export declare function DialogContent({ title, width, className, children, }: {
|
|
6
17
|
title: string;
|
|
18
|
+
/** Breedte van de dialoog. Verving de `max-w-*`-klassen: Astryx zet de breedte inline. */
|
|
19
|
+
width?: number | string;
|
|
20
|
+
className?: string;
|
|
21
|
+
children: ReactNode;
|
|
7
22
|
}): import("react").JSX.Element;
|
|
8
|
-
export declare function DialogDescription({ className, ...props }: React.ComponentProps<
|
|
23
|
+
export declare function DialogDescription({ className, ...props }: React.ComponentProps<"p">): import("react").JSX.Element;
|
|
9
24
|
export declare function DialogFooter({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
|
package/dist/admin/ui/dialog.js
CHANGED
|
@@ -1,44 +1,65 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import {
|
|
4
|
+
cloneElement,
|
|
5
|
+
createContext,
|
|
6
|
+
isValidElement,
|
|
7
|
+
useContext,
|
|
8
|
+
useState
|
|
9
|
+
} from "react";
|
|
10
|
+
import { Dialog as AstryxDialog, DialogHeader } from "@astryxdesign/core/Dialog";
|
|
11
|
+
import { cn } from "./cn.js";
|
|
12
|
+
const Ctx = createContext(null);
|
|
13
|
+
const useDialog = () => {
|
|
14
|
+
const ctx = useContext(Ctx);
|
|
15
|
+
if (!ctx) throw new Error("Dialog-onderdelen horen binnen <Dialog> te staan.");
|
|
16
|
+
return ctx;
|
|
17
|
+
};
|
|
18
|
+
function withClick(children, action) {
|
|
19
|
+
if (!isValidElement(children)) return children;
|
|
20
|
+
const el = children;
|
|
21
|
+
return cloneElement(el, {
|
|
22
|
+
onClick: (e) => {
|
|
23
|
+
el.props.onClick?.(e);
|
|
24
|
+
action();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function Dialog({
|
|
29
|
+
open: controlled,
|
|
30
|
+
onOpenChange,
|
|
31
|
+
children
|
|
32
|
+
}) {
|
|
33
|
+
const [uncontrolled, setUncontrolled] = useState(false);
|
|
34
|
+
const open = controlled ?? uncontrolled;
|
|
35
|
+
const setOpen = (v) => {
|
|
36
|
+
if (controlled === void 0) setUncontrolled(v);
|
|
37
|
+
onOpenChange?.(v);
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ jsx(Ctx.Provider, { value: { open, setOpen }, children });
|
|
40
|
+
}
|
|
41
|
+
function DialogTrigger({ children }) {
|
|
42
|
+
const { setOpen } = useDialog();
|
|
43
|
+
return /* @__PURE__ */ jsx(Fragment, { children: withClick(children, () => setOpen(true)) });
|
|
44
|
+
}
|
|
45
|
+
function DialogClose({ children }) {
|
|
46
|
+
const { setOpen } = useDialog();
|
|
47
|
+
return /* @__PURE__ */ jsx(Fragment, { children: withClick(children, () => setOpen(false)) });
|
|
48
|
+
}
|
|
8
49
|
function DialogContent({
|
|
9
|
-
className,
|
|
10
|
-
children,
|
|
11
50
|
title,
|
|
12
|
-
|
|
51
|
+
width = "min(92vw, 32rem)",
|
|
52
|
+
className,
|
|
53
|
+
children
|
|
13
54
|
}) {
|
|
14
|
-
const
|
|
15
|
-
return /* @__PURE__ */ jsxs(
|
|
16
|
-
/* @__PURE__ */ jsx(
|
|
17
|
-
|
|
18
|
-
DialogPrimitive.Content,
|
|
19
|
-
{
|
|
20
|
-
style: {
|
|
21
|
-
position: "fixed",
|
|
22
|
-
left: "50%",
|
|
23
|
-
top: "50%",
|
|
24
|
-
transform: "translate(-50%, -50%)",
|
|
25
|
-
width: "min(92vw, 32rem)",
|
|
26
|
-
maxHeight: "85vh",
|
|
27
|
-
overflowY: "auto",
|
|
28
|
-
zIndex: 10011
|
|
29
|
-
},
|
|
30
|
-
className: cn("rounded-xl bg-white p-5 shadow-xl focus:outline-none", className),
|
|
31
|
-
...props,
|
|
32
|
-
children: [
|
|
33
|
-
/* @__PURE__ */ jsx(DialogPrimitive.Title, { className: "mb-3 text-lg font-semibold", children: title }),
|
|
34
|
-
children
|
|
35
|
-
]
|
|
36
|
-
}
|
|
37
|
-
)
|
|
55
|
+
const { open, setOpen } = useDialog();
|
|
56
|
+
return /* @__PURE__ */ jsxs(AstryxDialog, { isOpen: open, onOpenChange: setOpen, width, purpose: "form", className, children: [
|
|
57
|
+
/* @__PURE__ */ jsx(DialogHeader, { title }),
|
|
58
|
+
children
|
|
38
59
|
] });
|
|
39
60
|
}
|
|
40
61
|
function DialogDescription({ className, ...props }) {
|
|
41
|
-
return /* @__PURE__ */ jsx(
|
|
62
|
+
return /* @__PURE__ */ jsx("p", { className: cn("text-sm text-slate-600", className), ...props });
|
|
42
63
|
}
|
|
43
64
|
function DialogFooter({ className, ...props }) {
|
|
44
65
|
return /* @__PURE__ */ jsx("div", { className: cn("mt-5 flex items-center justify-end gap-2", className), ...props });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/ui/dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/ui/dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n cloneElement,\n createContext,\n isValidElement,\n useContext,\n useState,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Dialog as AstryxDialog, DialogHeader } from \"@astryxdesign/core/Dialog\";\nimport { cn } from \"./cn\";\n\n/**\n * Dialogen op Astryx in plaats van Radix.\n *\n * De aanroep-API blijft ongewijzigd (Dialog/DialogTrigger/DialogContent/DialogClose), zodat de\n * mediakiezer, de bevestiging, de patroonkiezer en de factuurweergave hetzelfde blijven lezen.\n *\n * Waarom dit een vereenvoudiging is: Astryx rendert een NATIEVE `<dialog>` en opent hem met\n * `showModal()`. Daarmee staat hij in de top layer van de browser, boven alles — inclusief de\n * editor-overlay. De hele reeks workarounds die het Radix-pad nodig had, vervalt:\n *\n * - portalen ín `.xicms-ve`/`.xicms-admin` omdat Radix anders buiten de gescopete admin-CSS\n * landde en volledig ongestyled rendeerde;\n * - `z-index: 10010/10011` om boven die overlay te komen;\n * - inline centreren omdat `-translate-x-1/2` in de gescopete Tailwind-context niet aansloeg,\n * waardoor de dialoog op smalle schermen rechts buiten beeld liep.\n *\n * Astryx regelt bovendien zelf scroll-lock, focus-insluiting én focusherstel naar het element dat\n * de dialoog opende, en stemt zijn Escape-afhandeling af op een actieve focus trap.\n */\ninterface DialogCtx {\n open: boolean;\n setOpen: (v: boolean) => void;\n}\nconst Ctx = createContext<DialogCtx | null>(null);\nconst useDialog = (): DialogCtx => {\n const ctx = useContext(Ctx);\n if (!ctx) throw new Error(\"Dialog-onderdelen horen binnen <Dialog> te staan.\");\n return ctx;\n};\n\n/** Kloont het kind en hangt er een klik-actie aan (het `asChild`-patroon van de vorige API). */\nfunction withClick(children: ReactNode, action: () => void): ReactNode {\n if (!isValidElement(children)) return children;\n const el = children as ReactElement<{ onClick?: (e: MouseEvent) => void }>;\n return cloneElement(el, {\n onClick: (e: MouseEvent) => {\n el.props.onClick?.(e);\n action();\n },\n });\n}\n\nexport function Dialog({\n open: controlled,\n onOpenChange,\n children,\n}: {\n open?: boolean;\n onOpenChange?: (v: boolean) => void;\n children: ReactNode;\n}) {\n const [uncontrolled, setUncontrolled] = useState(false);\n const open = controlled ?? uncontrolled;\n const setOpen = (v: boolean) => {\n if (controlled === undefined) setUncontrolled(v);\n onOpenChange?.(v);\n };\n return <Ctx.Provider value={{ open, setOpen }}>{children}</Ctx.Provider>;\n}\n\n/** `asChild` blijft geaccepteerd voor een ongewijzigde aanroep-API; het kind wordt altijd gekloond. */\nexport function DialogTrigger({ children }: { children: ReactNode; asChild?: boolean }) {\n const { setOpen } = useDialog();\n return <>{withClick(children, () => setOpen(true))}</>;\n}\n\nexport function DialogClose({ children }: { children: ReactNode; asChild?: boolean }) {\n const { setOpen } = useDialog();\n return <>{withClick(children, () => setOpen(false))}</>;\n}\n\nexport function DialogContent({\n title,\n width = \"min(92vw, 32rem)\",\n className,\n children,\n}: {\n title: string;\n /** Breedte van de dialoog. Verving de `max-w-*`-klassen: Astryx zet de breedte inline. */\n width?: number | string;\n className?: string;\n children: ReactNode;\n}) {\n const { open, setOpen } = useDialog();\n return (\n <AstryxDialog isOpen={open} onOpenChange={setOpen} width={width} purpose=\"form\" className={className}>\n <DialogHeader title={title} />\n {children}\n </AstryxDialog>\n );\n}\n\nexport function DialogDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p className={cn(\"text-sm text-slate-600\", className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"mt-5 flex items-center justify-end gap-2\", className)} {...props} />;\n}\n"],"mappings":";AAwES,SAMA,UANA,KA4BL,YA5BK;AAtET;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP,SAAS,UAAU,cAAc,oBAAoB;AACrD,SAAS,UAAU;AAyBnB,MAAM,MAAM,cAAgC,IAAI;AAChD,MAAM,YAAY,MAAiB;AACjC,QAAM,MAAM,WAAW,GAAG;AAC1B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mDAAmD;AAC7E,SAAO;AACT;AAGA,SAAS,UAAU,UAAqB,QAA+B;AACrE,MAAI,CAAC,eAAe,QAAQ,EAAG,QAAO;AACtC,QAAM,KAAK;AACX,SAAO,aAAa,IAAI;AAAA,IACtB,SAAS,CAAC,MAAkB;AAC1B,SAAG,MAAM,UAAU,CAAC;AACpB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEO,SAAS,OAAO;AAAA,EACrB,MAAM;AAAA,EACN;AAAA,EACA;AACF,GAIG;AACD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,OAAO,cAAc;AAC3B,QAAM,UAAU,CAAC,MAAe;AAC9B,QAAI,eAAe,OAAW,iBAAgB,CAAC;AAC/C,mBAAe,CAAC;AAAA,EAClB;AACA,SAAO,oBAAC,IAAI,UAAJ,EAAa,OAAO,EAAE,MAAM,QAAQ,GAAI,UAAS;AAC3D;AAGO,SAAS,cAAc,EAAE,SAAS,GAA+C;AACtF,QAAM,EAAE,QAAQ,IAAI,UAAU;AAC9B,SAAO,gCAAG,oBAAU,UAAU,MAAM,QAAQ,IAAI,CAAC,GAAE;AACrD;AAEO,SAAS,YAAY,EAAE,SAAS,GAA+C;AACpF,QAAM,EAAE,QAAQ,IAAI,UAAU;AAC9B,SAAO,gCAAG,oBAAU,UAAU,MAAM,QAAQ,KAAK,CAAC,GAAE;AACtD;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AACF,GAMG;AACD,QAAM,EAAE,MAAM,QAAQ,IAAI,UAAU;AACpC,SACE,qBAAC,gBAAa,QAAQ,MAAM,cAAc,SAAS,OAAc,SAAQ,QAAO,WAC9E;AAAA,wBAAC,gBAAa,OAAc;AAAA,IAC3B;AAAA,KACH;AAEJ;AAEO,SAAS,kBAAkB,EAAE,WAAW,GAAG,MAAM,GAA8B;AACpF,SAAO,oBAAC,OAAE,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAO;AAC3E;AAEO,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAAgC;AACjF,SAAO,oBAAC,SAAI,WAAW,GAAG,4CAA4C,SAAS,GAAI,GAAG,OAAO;AAC/F;","names":[]}
|
package/dist/admin/ui/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { cn } from "./cn";
|
|
2
|
-
export { Button, Input, Textarea, Field, Card, Badge } from "./primitives";
|
|
3
|
-
export { ToastProvider, useToast } from "./toast";
|
|
4
|
-
export { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs";
|
|
5
|
-
export { Dialog, DialogTrigger, DialogClose, DialogContent } from "./dialog";
|
|
6
|
-
export { Select } from "./select";
|
|
7
|
-
export { Switch } from "./switch";
|
|
1
|
+
export { cn } from "./cn.js";
|
|
2
|
+
export { Button, Input, Textarea, Field, Card, Badge } from "./primitives.js";
|
|
3
|
+
export { ToastProvider, useToast } from "./toast.js";
|
|
4
|
+
export { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs.js";
|
|
5
|
+
export { Dialog, DialogTrigger, DialogClose, DialogContent } from "./dialog.js";
|
|
6
|
+
export { Select } from "./select.js";
|
|
7
|
+
export { Switch } from "./switch.js";
|
package/dist/admin/ui/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { cn } from "./cn";
|
|
2
|
-
import { Button, Input, Textarea, Field, Card, Badge } from "./primitives";
|
|
3
|
-
import { ToastProvider, useToast } from "./toast";
|
|
4
|
-
import { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs";
|
|
5
|
-
import { Dialog, DialogTrigger, DialogClose, DialogContent } from "./dialog";
|
|
6
|
-
import { Select } from "./select";
|
|
7
|
-
import { Switch } from "./switch";
|
|
1
|
+
import { cn } from "./cn.js";
|
|
2
|
+
import { Button, Input, Textarea, Field, Card, Badge } from "./primitives.js";
|
|
3
|
+
import { ToastProvider, useToast } from "./toast.js";
|
|
4
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent } from "./tabs.js";
|
|
5
|
+
import { Dialog, DialogTrigger, DialogClose, DialogContent } from "./dialog.js";
|
|
6
|
+
import { Select } from "./select.js";
|
|
7
|
+
import { Switch } from "./switch.js";
|
|
8
8
|
export {
|
|
9
9
|
Badge,
|
|
10
10
|
Button,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { forwardRef } from "react";
|
|
4
|
-
import { cn } from "./cn";
|
|
4
|
+
import { cn } from "./cn.js";
|
|
5
5
|
import { TextInput } from "@astryxdesign/core/TextInput";
|
|
6
6
|
import { NumberInput } from "@astryxdesign/core/NumberInput";
|
|
7
7
|
import { TextArea } from "@astryxdesign/core/TextArea";
|
package/dist/admin/ui/tabs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
4
|
-
import { cn } from "./cn";
|
|
4
|
+
import { cn } from "./cn.js";
|
|
5
5
|
const Tabs = TabsPrimitive.Root;
|
|
6
6
|
function TabsList({ className, ...props }) {
|
|
7
7
|
return /* @__PURE__ */ jsx(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BlockRegistry } from "../../blocks/registry";
|
|
1
|
+
import type { BlockRegistry } from "../../blocks/registry.js";
|
|
2
2
|
export declare function TranslationPanel({ block, siteId, registry, locale, overlay, onTranslate, }: {
|
|
3
3
|
block: Record<string, unknown> & {
|
|
4
4
|
_key: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useMemo } from "react";
|
|
4
|
-
import { introspectToFields } from "../lib/zodFields";
|
|
5
|
-
import { RichTextEditor } from "../editors/RichTextEditor";
|
|
6
|
-
import { Field as FieldRow, Input, Textarea } from "../ui/primitives";
|
|
4
|
+
import { introspectToFields } from "../lib/zodFields.js";
|
|
5
|
+
import { RichTextEditor } from "../editors/RichTextEditor.js";
|
|
6
|
+
import { Field as FieldRow, Input, Textarea } from "../ui/primitives.js";
|
|
7
7
|
function collectEntries(fields, value, prefix = "", labelPrefix = "") {
|
|
8
8
|
const out = [];
|
|
9
9
|
for (const f of fields) {
|
|
@@ -2,28 +2,38 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import "@xiwebdesign/xicms-core/admin.css";
|
|
4
4
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
|
-
import { useSiteConfig } from "../../config";
|
|
6
|
-
import { useRegistry } from "../../blocks/context";
|
|
7
|
-
import { introspectToFields } from "../lib/zodFields";
|
|
8
|
-
import { BlockErrorBoundary } from "../../blocks/BlockErrorBoundary";
|
|
9
|
-
import { InlineImageEditProvider } from "../../media/ImageContext";
|
|
10
|
-
import { MediaPickerDialog } from "../media/MediaPicker";
|
|
5
|
+
import { useSiteConfig } from "../../config.js";
|
|
6
|
+
import { useRegistry } from "../../blocks/context.js";
|
|
7
|
+
import { introspectToFields } from "../lib/zodFields.js";
|
|
8
|
+
import { BlockErrorBoundary } from "../../blocks/BlockErrorBoundary.js";
|
|
9
|
+
import { InlineImageEditProvider } from "../../media/ImageContext.js";
|
|
10
|
+
import { MediaPickerDialog } from "../media/MediaPicker.js";
|
|
11
11
|
import { EmptyState } from "@astryxdesign/core/EmptyState";
|
|
12
|
-
import {
|
|
12
|
+
import { useFocusTrap, useScrollLock } from "@astryxdesign/core/hooks";
|
|
13
|
+
import { useNestedDialogOpen } from "../lib/useNestedDialog.js";
|
|
14
|
+
import { useThemeVars } from "../../XiCMSProvider.js";
|
|
15
|
+
import { buildBlockAddOptions } from "../../blocks/registry.js";
|
|
16
|
+
import { safeParse } from "zod/v4/core";
|
|
13
17
|
import DOMPurify from "dompurify";
|
|
14
|
-
import { createPage, getDraftByPath, saveDraft, publishPage, subscribeDraft, subscribeVersions, restoreVersion } from "../lib/pagesClient";
|
|
15
|
-
import { isDemoActive } from "../../demo/demoStore";
|
|
16
|
-
import { builtinBlockEditors, GenericEditor } from "../blockEditors";
|
|
17
|
-
import { StyleEditor } from "../blockEditors/StyleEditor";
|
|
18
|
-
import { siteLocales, parseLocaleSlugs, localizeBlocks } from "../../i18n/overlay";
|
|
19
|
-
import { TranslationPanel } from "./TranslationPanel";
|
|
20
|
-
import { reorderBlocks } from "./reorder";
|
|
21
|
-
import { PatternInserter } from "../patterns/PatternInserter";
|
|
22
|
-
import { Button, Field, Input, Textarea } from "../ui/primitives";
|
|
23
|
-
import { Select } from "../ui/select";
|
|
24
|
-
import { ToastProvider, useToast } from "../ui/toast";
|
|
25
|
-
import { ConfirmHost, useConfirm } from "../ui/ConfirmDialog";
|
|
18
|
+
import { createPage, getDraftByPath, saveDraft, publishPage, subscribeDraft, subscribeVersions, restoreVersion } from "../lib/pagesClient.js";
|
|
19
|
+
import { isDemoActive } from "../../demo/demoStore.js";
|
|
20
|
+
import { builtinBlockEditors, GenericEditor } from "../blockEditors/index.js";
|
|
21
|
+
import { StyleEditor } from "../blockEditors/StyleEditor.js";
|
|
22
|
+
import { siteLocales, parseLocaleSlugs, localizeBlocks } from "../../i18n/overlay.js";
|
|
23
|
+
import { TranslationPanel } from "./TranslationPanel.js";
|
|
24
|
+
import { reorderBlocks } from "./reorder.js";
|
|
25
|
+
import { PatternInserter } from "../patterns/PatternInserter.js";
|
|
26
|
+
import { Button, Field, Input, Textarea } from "../ui/primitives.js";
|
|
27
|
+
import { Select } from "../ui/select.js";
|
|
28
|
+
import { ToastProvider, useToast } from "../ui/toast.js";
|
|
29
|
+
import { ConfirmHost, useConfirm } from "../ui/ConfirmDialog.js";
|
|
26
30
|
const GLOBAL_INLINE = [
|
|
31
|
+
// `field: "html"` is de AANNAME, geen wet: een element mag met `data-xicms-edit` zeggen welk veld
|
|
32
|
+
// het werkelijk toont, en dat wint (zie de bind hieronder). Zonder die voorrang schreef élk
|
|
33
|
+
// `.xicms-richtext`-element naar een veld dat letterlijk "html" heet — waar de FAQ zijn antwoord
|
|
34
|
+
// in `items[].aHtml` bewaart en het accordeon in `items[].bodyHtml`. Inline bewerken van een
|
|
35
|
+
// FAQ-antwoord landde daardoor op een niet-bestaand veld: de wijziging verdween stil en het blok
|
|
36
|
+
// hield een zwerfveld over.
|
|
27
37
|
{ selector: ".xicms-richtext", field: "html", html: true },
|
|
28
38
|
{ selector: "[data-xicms-edit]", field: "", html: false, fromData: true }
|
|
29
39
|
];
|
|
@@ -90,6 +100,15 @@ function VisualEditorInner({ onClose }) {
|
|
|
90
100
|
const firstSave = useRef(true);
|
|
91
101
|
const canvasRef = useRef(null);
|
|
92
102
|
const [conflict, setConflict] = useState(false);
|
|
103
|
+
const { vars: themeVars, darkAuto } = useThemeVars();
|
|
104
|
+
const nestedDialogOpen = useNestedDialogOpen();
|
|
105
|
+
const { containerRef, focusFirst } = useFocusTrap({ isActive: !nestedDialogOpen });
|
|
106
|
+
useScrollLock(true);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
const opener = document.activeElement;
|
|
109
|
+
focusFirst();
|
|
110
|
+
return () => opener?.focus?.();
|
|
111
|
+
}, [focusFirst]);
|
|
93
112
|
const [dragIndex, setDragIndex] = useState(null);
|
|
94
113
|
const [dropIndex, setDropIndex] = useState(null);
|
|
95
114
|
const draggingRef = useRef(false);
|
|
@@ -323,7 +342,10 @@ function VisualEditorInner({ onClose }) {
|
|
|
323
342
|
const apply = () => {
|
|
324
343
|
for (const m of specs) {
|
|
325
344
|
host.querySelectorAll(m.selector).forEach(
|
|
326
|
-
(el) =>
|
|
345
|
+
(el) => (
|
|
346
|
+
// Een expliciete `data-xicms-edit` wint altijd; anders het veld van de matcher.
|
|
347
|
+
bind(el, el.dataset.xicmsEdit ?? m.field, !!m.html)
|
|
348
|
+
)
|
|
327
349
|
);
|
|
328
350
|
}
|
|
329
351
|
};
|
|
@@ -382,7 +404,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
382
404
|
if (e.key === "Escape") {
|
|
383
405
|
const t2 = e.target;
|
|
384
406
|
const inField2 = !!t2 && (t2.isContentEditable || t2.tagName === "INPUT" || t2.tagName === "TEXTAREA" || t2.tagName === "SELECT");
|
|
385
|
-
const dialogOpen = document.querySelector('[role="dialog"][data-state="open"], [role="alertdialog"][data-state="open"]');
|
|
407
|
+
const dialogOpen = document.querySelector('dialog[open], [role="dialog"][data-state="open"], [role="alertdialog"][data-state="open"]');
|
|
386
408
|
if (!inField2 && !dialogOpen) handleClose();
|
|
387
409
|
return;
|
|
388
410
|
}
|
|
@@ -436,7 +458,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
436
458
|
confirmLabel: "Loskoppelen"
|
|
437
459
|
});
|
|
438
460
|
if (!ok) return;
|
|
439
|
-
const { getSymbolOnce } = await import("../lib/symbolsClient");
|
|
461
|
+
const { getSymbolOnce } = await import("../lib/symbolsClient.js");
|
|
440
462
|
const sym = await getSymbolOnce(siteId, blk.symbolId);
|
|
441
463
|
if (!sym) {
|
|
442
464
|
toast({ title: "Symbool niet gevonden", tone: "error" });
|
|
@@ -509,7 +531,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
509
531
|
}
|
|
510
532
|
setConflict(false);
|
|
511
533
|
}, [siteId, path, mutateDraft]);
|
|
512
|
-
return /* @__PURE__ */ jsxs("div", { className: "xicms-ve__shell", role: "dialog", "aria-modal": "true", "aria-label": `Pagina bewerken: ${path}`, children: [
|
|
534
|
+
return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "xicms-ve__shell", role: "dialog", "aria-modal": "true", "aria-label": `Pagina bewerken: ${path}`, children: [
|
|
513
535
|
/* @__PURE__ */ jsxs("header", { className: "xicms-ve__bar", children: [
|
|
514
536
|
/* @__PURE__ */ jsxs("strong", { className: "xicms-ve__title", children: [
|
|
515
537
|
"Bewerken \xB7 ",
|
|
@@ -542,7 +564,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
542
564
|
/* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", onClick: () => setConflict(false), children: "Mijn versie behouden" })
|
|
543
565
|
] }),
|
|
544
566
|
/* @__PURE__ */ jsxs("div", { className: "xicms-ve__body", children: [
|
|
545
|
-
/* @__PURE__ */ jsxs("main", { className: "xicms-ve__canvas", children: [
|
|
567
|
+
/* @__PURE__ */ jsxs("main", { className: "xicms-ve__canvas xicms-root", "data-dark": darkAuto ? "auto" : void 0, style: themeVars, children: [
|
|
546
568
|
status === "loading" && /* @__PURE__ */ jsx("p", { className: "xicms-ve__hint", children: "Laden\u2026" }),
|
|
547
569
|
status === "none" && /* @__PURE__ */ jsxs("div", { className: "xicms-ve__empty", children: [
|
|
548
570
|
/* @__PURE__ */ jsx(
|
|
@@ -561,7 +583,7 @@ function VisualEditorInner({ onClose }) {
|
|
|
561
583
|
const def = registry.get(b._type);
|
|
562
584
|
const Render = def?.Render;
|
|
563
585
|
const safe = (() => {
|
|
564
|
-
const parsed = def?.schema
|
|
586
|
+
const parsed = def?.schema ? safeParse(def.schema, b) : void 0;
|
|
565
587
|
return parsed?.success ? parsed.data : b;
|
|
566
588
|
})();
|
|
567
589
|
const dropClass = dropIndex === i ? " is-drop-before" : dropIndex === i + 1 ? " is-drop-after" : "";
|