@endora-commerce/cms-components 0.100.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/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/cms-components.css +2 -0
- package/dist/components/Accordion.d.ts +43 -0
- package/dist/components/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion.js +81 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/AnnouncementBar.d.ts +43 -0
- package/dist/components/AnnouncementBar.d.ts.map +1 -0
- package/dist/components/AnnouncementBar.js +27 -0
- package/dist/components/AnnouncementBar.js.map +1 -0
- package/dist/components/Button.d.ts +43 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +122 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/CategoryGrid.d.ts +43 -0
- package/dist/components/CategoryGrid.d.ts.map +1 -0
- package/dist/components/CategoryGrid.js +117 -0
- package/dist/components/CategoryGrid.js.map +1 -0
- package/dist/components/CategoryList.d.ts +43 -0
- package/dist/components/CategoryList.d.ts.map +1 -0
- package/dist/components/CategoryList.js +96 -0
- package/dist/components/CategoryList.js.map +1 -0
- package/dist/components/CmsPageContainer.d.ts +12 -0
- package/dist/components/CmsPageContainer.d.ts.map +1 -0
- package/dist/components/CmsPageContainer.js +19 -0
- package/dist/components/CmsPageContainer.js.map +1 -0
- package/dist/components/CmsProductCard.d.ts +35 -0
- package/dist/components/CmsProductCard.d.ts.map +1 -0
- package/dist/components/CmsProductCard.js +101 -0
- package/dist/components/CmsProductCard.js.map +1 -0
- package/dist/components/Column.d.ts +50 -0
- package/dist/components/Column.d.ts.map +1 -0
- package/dist/components/Column.js +127 -0
- package/dist/components/Column.js.map +1 -0
- package/dist/components/ContactFormEmbed.d.ts +43 -0
- package/dist/components/ContactFormEmbed.d.ts.map +1 -0
- package/dist/components/ContactFormEmbed.js +37 -0
- package/dist/components/ContactFormEmbed.js.map +1 -0
- package/dist/components/ContentSlider.d.ts +43 -0
- package/dist/components/ContentSlider.d.ts.map +1 -0
- package/dist/components/ContentSlider.js +96 -0
- package/dist/components/ContentSlider.js.map +1 -0
- package/dist/components/FeatureList.d.ts +43 -0
- package/dist/components/FeatureList.d.ts.map +1 -0
- package/dist/components/FeatureList.js +89 -0
- package/dist/components/FeatureList.js.map +1 -0
- package/dist/components/Heading.d.ts +43 -0
- package/dist/components/Heading.d.ts.map +1 -0
- package/dist/components/Heading.js +116 -0
- package/dist/components/Heading.js.map +1 -0
- package/dist/components/Hero.d.ts +43 -0
- package/dist/components/Hero.d.ts.map +1 -0
- package/dist/components/Hero.js +186 -0
- package/dist/components/Hero.js.map +1 -0
- package/dist/components/IconPickerField.d.ts +3 -0
- package/dist/components/IconPickerField.d.ts.map +1 -0
- package/dist/components/IconPickerField.js +30 -0
- package/dist/components/IconPickerField.js.map +1 -0
- package/dist/components/Icons.d.ts +43 -0
- package/dist/components/Icons.d.ts.map +1 -0
- package/dist/components/Icons.js +62 -0
- package/dist/components/Icons.js.map +1 -0
- package/dist/components/Image.d.ts +43 -0
- package/dist/components/Image.d.ts.map +1 -0
- package/dist/components/Image.js +179 -0
- package/dist/components/Image.js.map +1 -0
- package/dist/components/ImageSlider.d.ts +44 -0
- package/dist/components/ImageSlider.d.ts.map +1 -0
- package/dist/components/ImageSlider.js +186 -0
- package/dist/components/ImageSlider.js.map +1 -0
- package/dist/components/InsertBlock.d.ts +4 -0
- package/dist/components/InsertBlock.d.ts.map +1 -0
- package/dist/components/InsertBlock.js +30 -0
- package/dist/components/InsertBlock.js.map +1 -0
- package/dist/components/InsertTemplate.d.ts +4 -0
- package/dist/components/InsertTemplate.d.ts.map +1 -0
- package/dist/components/InsertTemplate.js +30 -0
- package/dist/components/InsertTemplate.js.map +1 -0
- package/dist/components/LogoStrip.d.ts +43 -0
- package/dist/components/LogoStrip.d.ts.map +1 -0
- package/dist/components/LogoStrip.js +155 -0
- package/dist/components/LogoStrip.js.map +1 -0
- package/dist/components/Map.d.ts +43 -0
- package/dist/components/Map.d.ts.map +1 -0
- package/dist/components/Map.js +165 -0
- package/dist/components/Map.js.map +1 -0
- package/dist/components/MissingComponentPlaceholder.d.ts +27 -0
- package/dist/components/MissingComponentPlaceholder.d.ts.map +1 -0
- package/dist/components/MissingComponentPlaceholder.js +24 -0
- package/dist/components/MissingComponentPlaceholder.js.map +1 -0
- package/dist/components/NewsletterSignup.d.ts +43 -0
- package/dist/components/NewsletterSignup.d.ts.map +1 -0
- package/dist/components/NewsletterSignup.js +43 -0
- package/dist/components/NewsletterSignup.js.map +1 -0
- package/dist/components/ProductCard.d.ts +43 -0
- package/dist/components/ProductCard.d.ts.map +1 -0
- package/dist/components/ProductCard.js +96 -0
- package/dist/components/ProductCard.js.map +1 -0
- package/dist/components/ProductGrid.d.ts +43 -0
- package/dist/components/ProductGrid.d.ts.map +1 -0
- package/dist/components/ProductGrid.js +138 -0
- package/dist/components/ProductGrid.js.map +1 -0
- package/dist/components/ProductSlider.d.ts +43 -0
- package/dist/components/ProductSlider.d.ts.map +1 -0
- package/dist/components/ProductSlider.js +134 -0
- package/dist/components/ProductSlider.js.map +1 -0
- package/dist/components/RawHtml.d.ts +43 -0
- package/dist/components/RawHtml.d.ts.map +1 -0
- package/dist/components/RawHtml.js +38 -0
- package/dist/components/RawHtml.js.map +1 -0
- package/dist/components/RawJs.d.ts +43 -0
- package/dist/components/RawJs.d.ts.map +1 -0
- package/dist/components/RawJs.js +53 -0
- package/dist/components/RawJs.js.map +1 -0
- package/dist/components/RichContent.d.ts +4 -0
- package/dist/components/RichContent.d.ts.map +1 -0
- package/dist/components/RichContent.js +48 -0
- package/dist/components/RichContent.js.map +1 -0
- package/dist/components/RichContentEditorField.d.ts +10 -0
- package/dist/components/RichContentEditorField.d.ts.map +1 -0
- package/dist/components/RichContentEditorField.js +130 -0
- package/dist/components/RichContentEditorField.js.map +1 -0
- package/dist/components/RichContentPublished.d.ts +5 -0
- package/dist/components/RichContentPublished.d.ts.map +1 -0
- package/dist/components/RichContentPublished.js +22 -0
- package/dist/components/RichContentPublished.js.map +1 -0
- package/dist/components/Row.d.ts +43 -0
- package/dist/components/Row.d.ts.map +1 -0
- package/dist/components/Row.js +305 -0
- package/dist/components/Row.js.map +1 -0
- package/dist/components/SimpleTable.d.ts +43 -0
- package/dist/components/SimpleTable.d.ts.map +1 -0
- package/dist/components/SimpleTable.js +155 -0
- package/dist/components/SimpleTable.js.map +1 -0
- package/dist/components/Slide.d.ts +44 -0
- package/dist/components/Slide.d.ts.map +1 -0
- package/dist/components/Slide.js +36 -0
- package/dist/components/Slide.js.map +1 -0
- package/dist/components/Social.d.ts +43 -0
- package/dist/components/Social.d.ts.map +1 -0
- package/dist/components/Social.js +110 -0
- package/dist/components/Social.js.map +1 -0
- package/dist/components/Spacer.d.ts +43 -0
- package/dist/components/Spacer.d.ts.map +1 -0
- package/dist/components/Spacer.js +48 -0
- package/dist/components/Spacer.js.map +1 -0
- package/dist/components/Stats.d.ts +43 -0
- package/dist/components/Stats.d.ts.map +1 -0
- package/dist/components/Stats.js +71 -0
- package/dist/components/Stats.js.map +1 -0
- package/dist/components/Tabs.d.ts +43 -0
- package/dist/components/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs.js +70 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/Testimonial.d.ts +43 -0
- package/dist/components/Testimonial.d.ts.map +1 -0
- package/dist/components/Testimonial.js +74 -0
- package/dist/components/Testimonial.js.map +1 -0
- package/dist/components/Text.d.ts +43 -0
- package/dist/components/Text.d.ts.map +1 -0
- package/dist/components/Text.js +87 -0
- package/dist/components/Text.js.map +1 -0
- package/dist/components/Video.d.ts +43 -0
- package/dist/components/Video.d.ts.map +1 -0
- package/dist/components/Video.js +98 -0
- package/dist/components/Video.js.map +1 -0
- package/dist/components/box-styles.d.ts +19 -0
- package/dist/components/box-styles.d.ts.map +1 -0
- package/dist/components/box-styles.js +66 -0
- package/dist/components/box-styles.js.map +1 -0
- package/dist/components/button-link.d.ts +7 -0
- package/dist/components/button-link.d.ts.map +1 -0
- package/dist/components/button-link.js +15 -0
- package/dist/components/button-link.js.map +1 -0
- package/dist/components/carousel/CarouselShell.d.ts +27 -0
- package/dist/components/carousel/CarouselShell.d.ts.map +1 -0
- package/dist/components/carousel/CarouselShell.js +210 -0
- package/dist/components/carousel/CarouselShell.js.map +1 -0
- package/dist/components/catalog/CatalogSkeletons.d.ts +27 -0
- package/dist/components/catalog/CatalogSkeletons.d.ts.map +1 -0
- package/dist/components/catalog/CatalogSkeletons.js +38 -0
- package/dist/components/catalog/CatalogSkeletons.js.map +1 -0
- package/dist/components/catalog-preview-context.d.ts +9 -0
- package/dist/components/catalog-preview-context.d.ts.map +1 -0
- package/dist/components/catalog-preview-context.js +18 -0
- package/dist/components/catalog-preview-context.js.map +1 -0
- package/dist/components/icon-catalog.d.ts +139 -0
- package/dist/components/icon-catalog.d.ts.map +1 -0
- package/dist/components/icon-catalog.js +148 -0
- package/dist/components/icon-catalog.js.map +1 -0
- package/dist/components/image-fields.d.ts +6 -0
- package/dist/components/image-fields.d.ts.map +1 -0
- package/dist/components/image-fields.js +11 -0
- package/dist/components/image-fields.js.map +1 -0
- package/dist/components/image-slider-item.d.ts +7 -0
- package/dist/components/image-slider-item.d.ts.map +1 -0
- package/dist/components/image-slider-item.js +45 -0
- package/dist/components/image-slider-item.js.map +1 -0
- package/dist/components/render-context.d.ts +29 -0
- package/dist/components/render-context.d.ts.map +1 -0
- package/dist/components/render-context.js +21 -0
- package/dist/components/render-context.js.map +1 -0
- package/dist/components/rich-content-shared.d.ts +11 -0
- package/dist/components/rich-content-shared.d.ts.map +1 -0
- package/dist/components/rich-content-shared.js +132 -0
- package/dist/components/rich-content-shared.js.map +1 -0
- package/dist/components/social-networks.d.ts +10 -0
- package/dist/components/social-networks.d.ts.map +1 -0
- package/dist/components/social-networks.js +43 -0
- package/dist/components/social-networks.js.map +1 -0
- package/dist/components/styles.d.ts +2 -0
- package/dist/components/styles.d.ts.map +1 -0
- package/dist/components/styles.js +9 -0
- package/dist/components/styles.js.map +1 -0
- package/dist/components/text-content.d.ts +13 -0
- package/dist/components/text-content.d.ts.map +1 -0
- package/dist/components/text-content.js +64 -0
- package/dist/components/text-content.js.map +1 -0
- package/dist/components/typography.d.ts +26 -0
- package/dist/components/typography.d.ts.map +1 -0
- package/dist/components/typography.js +52 -0
- package/dist/components/typography.js.map +1 -0
- package/dist/editor/row-layout-presets.d.ts +34 -0
- package/dist/editor/row-layout-presets.d.ts.map +1 -0
- package/dist/editor/row-layout-presets.js +175 -0
- package/dist/editor/row-layout-presets.js.map +1 -0
- package/dist/editor/slot-edit-props.d.ts +16 -0
- package/dist/editor/slot-edit-props.d.ts.map +1 -0
- package/dist/editor/slot-edit-props.js +25 -0
- package/dist/editor/slot-edit-props.js.map +1 -0
- package/dist/fields/catalog-data-fields.d.ts +7 -0
- package/dist/fields/catalog-data-fields.d.ts.map +1 -0
- package/dist/fields/catalog-data-fields.js +4 -0
- package/dist/fields/catalog-data-fields.js.map +1 -0
- package/dist/fields/catalog-fallback-fields.d.ts +4 -0
- package/dist/fields/catalog-fallback-fields.d.ts.map +1 -0
- package/dist/fields/catalog-fallback-fields.js +34 -0
- package/dist/fields/catalog-fallback-fields.js.map +1 -0
- package/dist/fields/catalog-resolve-fields.d.ts +5 -0
- package/dist/fields/catalog-resolve-fields.d.ts.map +1 -0
- package/dist/fields/catalog-resolve-fields.js +40 -0
- package/dist/fields/catalog-resolve-fields.js.map +1 -0
- package/dist/fields/shared-fields.d.ts +176 -0
- package/dist/fields/shared-fields.d.ts.map +1 -0
- package/dist/fields/shared-fields.js +142 -0
- package/dist/fields/shared-fields.js.map +1 -0
- package/dist/hooks/use-viewport-breakpoint-tier.d.ts +4 -0
- package/dist/hooks/use-viewport-breakpoint-tier.d.ts.map +1 -0
- package/dist/hooks/use-viewport-breakpoint-tier.js +21 -0
- package/dist/hooks/use-viewport-breakpoint-tier.js.map +1 -0
- package/dist/index.d.ts +127 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +377 -0
- package/dist/index.js.map +1 -0
- package/dist/schema/catalog-types.d.ts +22 -0
- package/dist/schema/catalog-types.d.ts.map +1 -0
- package/dist/schema/catalog-types.js +2 -0
- package/dist/schema/catalog-types.js.map +1 -0
- package/dist/schema/component-types.d.ts +419 -0
- package/dist/schema/component-types.d.ts.map +1 -0
- package/dist/schema/component-types.js +2 -0
- package/dist/schema/component-types.js.map +1 -0
- package/dist/schema/envelope.d.ts +21 -0
- package/dist/schema/envelope.d.ts.map +1 -0
- package/dist/schema/envelope.js +19 -0
- package/dist/schema/envelope.js.map +1 -0
- package/dist/utils/catalog-fetch.d.ts +29 -0
- package/dist/utils/catalog-fetch.d.ts.map +1 -0
- package/dist/utils/catalog-fetch.js +88 -0
- package/dist/utils/catalog-fetch.js.map +1 -0
- package/dist/utils/catalog-load.d.ts +4 -0
- package/dist/utils/catalog-load.d.ts.map +1 -0
- package/dist/utils/catalog-load.js +11 -0
- package/dist/utils/catalog-load.js.map +1 -0
- package/dist/utils/catalog-preview-bridge.d.ts +13 -0
- package/dist/utils/catalog-preview-bridge.d.ts.map +1 -0
- package/dist/utils/catalog-preview-bridge.js +8 -0
- package/dist/utils/catalog-preview-bridge.js.map +1 -0
- package/dist/utils/catalog-skeleton-estimate.d.ts +7 -0
- package/dist/utils/catalog-skeleton-estimate.d.ts.map +1 -0
- package/dist/utils/catalog-skeleton-estimate.js +42 -0
- package/dist/utils/catalog-skeleton-estimate.js.map +1 -0
- package/dist/utils/resolve-image-url.d.ts +20 -0
- package/dist/utils/resolve-image-url.d.ts.map +1 -0
- package/dist/utils/resolve-image-url.js +24 -0
- package/dist/utils/resolve-image-url.js.map +1 -0
- package/dist/utils/sanitize-html.d.ts +6 -0
- package/dist/utils/sanitize-html.d.ts.map +1 -0
- package/dist/utils/sanitize-html.js +81 -0
- package/dist/utils/sanitize-html.js.map +1 -0
- package/dist/utils/video-embed.d.ts +11 -0
- package/dist/utils/video-embed.d.ts.map +1 -0
- package/dist/utils/video-embed.js +61 -0
- package/dist/utils/video-embed.js.map +1 -0
- package/dist/utils/walk-asset-ids.d.ts +3 -0
- package/dist/utils/walk-asset-ids.d.ts.map +1 -0
- package/dist/utils/walk-asset-ids.js +23 -0
- package/dist/utils/walk-asset-ids.js.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import {} from '@measured/puck';
|
|
4
|
+
import { PB_RESPONSIVE_METADATA, withHideOn } from '@endora-commerce/page-builder-core';
|
|
5
|
+
import { usePreviewBreakpointTier } from '@endora-commerce/page-builder-core/client';
|
|
6
|
+
import { useViewportBreakpointTier } from '../hooks/use-viewport-breakpoint-tier.js';
|
|
7
|
+
import { BoxStyled } from './box-styles.js';
|
|
8
|
+
import { createCatalogSlugFallbackField } from '../fields/catalog-fallback-fields.js';
|
|
9
|
+
import { BOX_BORDER_FIELD, BOX_MARGIN_FIELD, BOX_PADDING_FIELD, CORNER_RADIUS_FIELD, DEFAULT_BOX_PROPS, } from '../fields/shared-fields.js';
|
|
10
|
+
import { CmsProductCardLoader } from './CmsProductCard.js';
|
|
11
|
+
function ProductCardShell({ margin, padding, border, cardProps, tier, editing, }) {
|
|
12
|
+
return (_jsx(BoxStyled, { ...(margin !== undefined ? { margin } : {}), ...(padding !== undefined ? { padding } : {}), ...(border !== undefined ? { border } : {}), ...(editing ? { previewTier: tier } : {}), children: _jsx(CmsProductCardLoader, { editing: editing, previewTier: tier, ...cardProps }) }));
|
|
13
|
+
}
|
|
14
|
+
const ProductCardEditingRender = (props) => {
|
|
15
|
+
const { puck: _puck, margin, padding, border, ...cardProps } = props;
|
|
16
|
+
return (_jsx(ProductCardShell, { margin: margin, padding: padding, border: border, cardProps: cardProps, tier: usePreviewBreakpointTier(), editing: true }));
|
|
17
|
+
};
|
|
18
|
+
const ProductCardPublishedRender = (props) => {
|
|
19
|
+
const { puck: _puck, margin, padding, border, ...cardProps } = props;
|
|
20
|
+
return (_jsx(ProductCardShell, { margin: margin, padding: padding, border: border, cardProps: cardProps, tier: useViewportBreakpointTier(), editing: false }));
|
|
21
|
+
};
|
|
22
|
+
const productCardConfig = {
|
|
23
|
+
label: 'Product card',
|
|
24
|
+
fields: {
|
|
25
|
+
productSlug: createCatalogSlugFallbackField('Product'),
|
|
26
|
+
showPrice: { type: 'radio', label: 'Show price', options: [{ label: 'Yes', value: true }, { label: 'No', value: false }] },
|
|
27
|
+
showSku: { type: 'radio', label: 'Show SKU', options: [{ label: 'Yes', value: true }, { label: 'No', value: false }] },
|
|
28
|
+
showStock: { type: 'radio', label: 'Show stock', options: [{ label: 'Yes', value: true }, { label: 'No', value: false }] },
|
|
29
|
+
imageRatio: {
|
|
30
|
+
type: 'select',
|
|
31
|
+
label: 'Image ratio',
|
|
32
|
+
options: [
|
|
33
|
+
{ label: 'Square', value: 'square' },
|
|
34
|
+
{ label: '4:3', value: '4:3' },
|
|
35
|
+
{ label: '16:9', value: '16:9' },
|
|
36
|
+
{ label: 'Auto', value: 'auto' },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
imageHeightPx: {
|
|
40
|
+
type: 'number',
|
|
41
|
+
label: 'Image height (px, optional)',
|
|
42
|
+
min: 0,
|
|
43
|
+
max: 800,
|
|
44
|
+
step: 8,
|
|
45
|
+
metadata: PB_RESPONSIVE_METADATA,
|
|
46
|
+
},
|
|
47
|
+
imageObjectFit: {
|
|
48
|
+
type: 'select',
|
|
49
|
+
label: 'Image object fit',
|
|
50
|
+
options: [
|
|
51
|
+
{ label: 'Contain', value: 'contain' },
|
|
52
|
+
{ label: 'Cover', value: 'cover' },
|
|
53
|
+
{ label: 'Fill', value: 'fill' },
|
|
54
|
+
{ label: 'None', value: 'none' },
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
maxWidthPx: {
|
|
58
|
+
type: 'number',
|
|
59
|
+
label: 'Max width (px, 0 = full)',
|
|
60
|
+
min: 0,
|
|
61
|
+
max: 1200,
|
|
62
|
+
step: 8,
|
|
63
|
+
metadata: PB_RESPONSIVE_METADATA,
|
|
64
|
+
},
|
|
65
|
+
cornerRadius: CORNER_RADIUS_FIELD,
|
|
66
|
+
variant: {
|
|
67
|
+
type: 'select',
|
|
68
|
+
label: 'Variant',
|
|
69
|
+
options: [
|
|
70
|
+
{ label: 'Default', value: 'default' },
|
|
71
|
+
{ label: 'Compact', value: 'compact' },
|
|
72
|
+
{ label: 'Horizontal', value: 'horizontal' },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
ctaLabel: { type: 'text', label: 'CTA label (optional)' },
|
|
76
|
+
margin: BOX_MARGIN_FIELD,
|
|
77
|
+
padding: BOX_PADDING_FIELD,
|
|
78
|
+
border: BOX_BORDER_FIELD,
|
|
79
|
+
},
|
|
80
|
+
defaultProps: {
|
|
81
|
+
productSlug: '',
|
|
82
|
+
showPrice: true,
|
|
83
|
+
showSku: true,
|
|
84
|
+
showStock: true,
|
|
85
|
+
imageRatio: 'square',
|
|
86
|
+
imageObjectFit: 'contain',
|
|
87
|
+
maxWidthPx: 0,
|
|
88
|
+
imageHeightPx: 0,
|
|
89
|
+
variant: 'default',
|
|
90
|
+
ctaLabel: '',
|
|
91
|
+
...DEFAULT_BOX_PROPS,
|
|
92
|
+
},
|
|
93
|
+
render: (props) => props.puck?.isEditing ? (_jsx(ProductCardEditingRender, { ...props })) : (_jsx(ProductCardPublishedRender, { ...props })),
|
|
94
|
+
};
|
|
95
|
+
export const ProductCard = withHideOn(productCardConfig);
|
|
96
|
+
//# sourceMappingURL=ProductCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductCard.js","sourceRoot":"","sources":["../../src/components/ProductCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type PuckComponent } from '@measured/puck';
|
|
2
|
+
import type { ProductGridProps } from '../schema/component-types.js';
|
|
3
|
+
export declare const ProductGrid: {
|
|
4
|
+
render: PuckComponent<ProductGridProps>;
|
|
5
|
+
label?: string;
|
|
6
|
+
defaultProps?: ProductGridProps;
|
|
7
|
+
fields?: import("@measured/puck").Fields<ProductGridProps, {}>;
|
|
8
|
+
permissions?: Partial<import("@measured/puck").Permissions>;
|
|
9
|
+
inline?: boolean;
|
|
10
|
+
resolveFields?: (data: Omit<import("@measured/puck").ComponentData<ProductGridProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
11
|
+
changed: Partial<Record<keyof ProductGridProps, boolean> & {
|
|
12
|
+
id: string;
|
|
13
|
+
}>;
|
|
14
|
+
fields: import("@measured/puck").Fields<ProductGridProps, {}>;
|
|
15
|
+
lastFields: import("@measured/puck").Fields<ProductGridProps, {}>;
|
|
16
|
+
lastData: Omit<import("@measured/puck").ComponentData<ProductGridProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
17
|
+
appState: import("@measured/puck").AppState;
|
|
18
|
+
parent: import("@measured/puck").ComponentData | null;
|
|
19
|
+
}) => import("@measured/puck").Fields<ProductGridProps, {}> | Promise<import("@measured/puck").Fields<ProductGridProps, {}>>;
|
|
20
|
+
resolveData?: (data: Omit<import("@measured/puck").ComponentData<ProductGridProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
21
|
+
changed: Partial<Record<keyof ProductGridProps, boolean> & {
|
|
22
|
+
id: string;
|
|
23
|
+
}>;
|
|
24
|
+
lastData: Omit<import("@measured/puck").ComponentData<ProductGridProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
25
|
+
metadata: import("@measured/puck").Metadata;
|
|
26
|
+
trigger: import("@measured/puck").ResolveDataTrigger;
|
|
27
|
+
}) => (Omit<Omit<import("@measured/puck").ComponentData<ProductGridProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
|
|
28
|
+
props?: Partial<ProductGridProps>;
|
|
29
|
+
}) | Promise<Omit<Omit<import("@measured/puck").ComponentData<ProductGridProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
|
|
30
|
+
props?: Partial<ProductGridProps>;
|
|
31
|
+
}>;
|
|
32
|
+
resolvePermissions?: (data: Omit<import("@measured/puck").ComponentData<ProductGridProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
33
|
+
changed: Partial<Record<keyof ProductGridProps, boolean> & {
|
|
34
|
+
id: string;
|
|
35
|
+
}>;
|
|
36
|
+
lastPermissions: Partial<import("@measured/puck").Permissions>;
|
|
37
|
+
permissions: Partial<import("@measured/puck").Permissions>;
|
|
38
|
+
appState: import("@measured/puck").AppState;
|
|
39
|
+
lastData: Omit<import("@measured/puck").ComponentData<ProductGridProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
40
|
+
}) => Promise<Partial<import("@measured/puck").Permissions>> | Partial<import("@measured/puck").Permissions>;
|
|
41
|
+
metadata?: import("@measured/puck").Metadata;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=ProductGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductGrid.d.ts","sourceRoot":"","sources":["../../src/components/ProductGrid.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAU1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAmMrE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAgC,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import {} from '@measured/puck';
|
|
5
|
+
import { PB_RESPONSIVE_METADATA, resolveResponsive, resolveResponsiveNumber, withHideOn, } from '@endora-commerce/page-builder-core';
|
|
6
|
+
import { usePreviewBreakpointTier } from '@endora-commerce/page-builder-core/client';
|
|
7
|
+
import { useViewportBreakpointTier } from '../hooks/use-viewport-breakpoint-tier.js';
|
|
8
|
+
import { BoxStyled } from './box-styles.js';
|
|
9
|
+
import { BOX_BORDER_FIELD, BOX_MARGIN_FIELD, BOX_PADDING_FIELD, DEFAULT_BOX_PROPS, } from '../fields/shared-fields.js';
|
|
10
|
+
import { CmsProductCardView } from './CmsProductCard.js';
|
|
11
|
+
import { fetchProductsBySlugs, fetchProductsList } from '../utils/catalog-fetch.js';
|
|
12
|
+
import { waitForCatalogSkeletonMin } from '../utils/catalog-load.js';
|
|
13
|
+
import { estimateProductGridSkeletonCount } from '../utils/catalog-skeleton-estimate.js';
|
|
14
|
+
import { ProductGridSkeleton } from './catalog/CatalogSkeletons.js';
|
|
15
|
+
import { resolveProductSourceFields } from '../fields/catalog-resolve-fields.js';
|
|
16
|
+
import { CATALOG_DATA_FIELD_META } from '../fields/catalog-data-fields.js';
|
|
17
|
+
import { createCatalogSlugFallbackField, createCatalogSlugsFallbackField, } from '../fields/catalog-fallback-fields.js';
|
|
18
|
+
function ProductGridBody({ props, tier, editing, }) {
|
|
19
|
+
const { source = 'manual', productSlugs = [], categorySlug = '', searchQuery = '', limit = 12, columns = 4, gap = 16, view = 'grid', equalItemHeight = true, puck: _puck, ...box } = props;
|
|
20
|
+
const [products, setProducts] = useState([]);
|
|
21
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
22
|
+
const colCount = resolveResponsiveNumber(columns, tier, 4);
|
|
23
|
+
const gapPx = resolveResponsiveNumber(gap, tier, 16);
|
|
24
|
+
const gridView = resolveResponsive(view, tier, 'grid');
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
let cancelled = false;
|
|
27
|
+
setIsLoading(true);
|
|
28
|
+
const startedAt = Date.now();
|
|
29
|
+
void (async () => {
|
|
30
|
+
try {
|
|
31
|
+
let list = [];
|
|
32
|
+
if (source === 'manual')
|
|
33
|
+
list = await fetchProductsBySlugs(productSlugs);
|
|
34
|
+
else
|
|
35
|
+
list = await fetchProductsList({
|
|
36
|
+
...(source === 'category' && categorySlug ? { categorySlug } : {}),
|
|
37
|
+
...(source === 'query' && searchQuery ? { q: searchQuery } : {}),
|
|
38
|
+
limit,
|
|
39
|
+
});
|
|
40
|
+
await waitForCatalogSkeletonMin(startedAt);
|
|
41
|
+
if (!cancelled)
|
|
42
|
+
setProducts(list);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
await waitForCatalogSkeletonMin(startedAt);
|
|
46
|
+
if (!cancelled)
|
|
47
|
+
setProducts([]);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
if (!cancelled)
|
|
51
|
+
setIsLoading(false);
|
|
52
|
+
}
|
|
53
|
+
})();
|
|
54
|
+
return () => {
|
|
55
|
+
cancelled = true;
|
|
56
|
+
};
|
|
57
|
+
}, [source, productSlugs, categorySlug, searchQuery, limit]);
|
|
58
|
+
if (isLoading) {
|
|
59
|
+
return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: tier } : {}), children: _jsx(ProductGridSkeleton, { count: estimateProductGridSkeletonCount(source, productSlugs, limit, colCount), columns: colCount, gap: gapPx }) }));
|
|
60
|
+
}
|
|
61
|
+
if (products.length === 0) {
|
|
62
|
+
return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: tier } : {}), children: _jsx("p", { className: "cmsc-pb-product-grid__empty", children: editing
|
|
63
|
+
? source === 'category' && !categorySlug
|
|
64
|
+
? 'Select a category in the sidebar to preview products.'
|
|
65
|
+
: source === 'category'
|
|
66
|
+
? 'No products in this category (or none visible for preview).'
|
|
67
|
+
: source === 'query' && !searchQuery
|
|
68
|
+
? 'Enter a search query in the sidebar to preview products.'
|
|
69
|
+
: 'No products to preview — configure the source in the sidebar.'
|
|
70
|
+
: 'No products found' }) }));
|
|
71
|
+
}
|
|
72
|
+
const listClass = [
|
|
73
|
+
gridView === 'list' ? 'cmsc-pb-product-grid cmsc-pb-product-grid--list' : 'cmsc-pb-product-grid',
|
|
74
|
+
equalItemHeight ? 'cmsc-pb-product-grid--equal-height' : '',
|
|
75
|
+
]
|
|
76
|
+
.filter(Boolean)
|
|
77
|
+
.join(' ');
|
|
78
|
+
return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: tier } : {}), children: _jsx("ul", { className: listClass, style: {
|
|
79
|
+
gap: `${gapPx}px`,
|
|
80
|
+
gridTemplateColumns: gridView === 'grid' ? `repeat(${colCount}, minmax(0, 1fr))` : undefined,
|
|
81
|
+
}, children: products.map((p) => (_jsx("li", { children: _jsx(CmsProductCardView, { product: p, variant: gridView === 'list' ? 'horizontal' : 'default' }) }, p.id))) }) }));
|
|
82
|
+
}
|
|
83
|
+
const ProductGridEditingRender = (props) => (_jsx(ProductGridBody, { props: props, tier: usePreviewBreakpointTier(), editing: true }));
|
|
84
|
+
const ProductGridPublishedRender = (props) => (_jsx(ProductGridBody, { props: props, tier: useViewportBreakpointTier(), editing: false }));
|
|
85
|
+
const productGridConfig = {
|
|
86
|
+
label: 'Product grid',
|
|
87
|
+
fields: {
|
|
88
|
+
source: {
|
|
89
|
+
type: 'select',
|
|
90
|
+
label: 'Source',
|
|
91
|
+
metadata: CATALOG_DATA_FIELD_META,
|
|
92
|
+
options: [
|
|
93
|
+
{ label: 'Manual selection', value: 'manual' },
|
|
94
|
+
{ label: 'Category', value: 'category' },
|
|
95
|
+
{ label: 'Search query', value: 'query' },
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
productSlugs: createCatalogSlugsFallbackField('Products'),
|
|
99
|
+
categorySlug: createCatalogSlugFallbackField('Category'),
|
|
100
|
+
searchQuery: { type: 'text', label: 'Search query', metadata: CATALOG_DATA_FIELD_META },
|
|
101
|
+
limit: { type: 'number', label: 'Limit', min: 1, max: 24, metadata: CATALOG_DATA_FIELD_META },
|
|
102
|
+
equalItemHeight: {
|
|
103
|
+
type: 'radio',
|
|
104
|
+
label: 'Equal items height',
|
|
105
|
+
options: [{ label: 'Yes', value: true }, { label: 'No', value: false }],
|
|
106
|
+
},
|
|
107
|
+
columns: { type: 'number', label: 'Columns', min: 1, max: 4, metadata: PB_RESPONSIVE_METADATA },
|
|
108
|
+
gap: { type: 'number', label: 'Gap (px)', min: 0, max: 48, metadata: PB_RESPONSIVE_METADATA },
|
|
109
|
+
view: {
|
|
110
|
+
type: 'select',
|
|
111
|
+
label: 'View',
|
|
112
|
+
metadata: PB_RESPONSIVE_METADATA,
|
|
113
|
+
options: [
|
|
114
|
+
{ label: 'Grid', value: 'grid' },
|
|
115
|
+
{ label: 'List', value: 'list' },
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
margin: BOX_MARGIN_FIELD,
|
|
119
|
+
padding: BOX_PADDING_FIELD,
|
|
120
|
+
border: BOX_BORDER_FIELD,
|
|
121
|
+
},
|
|
122
|
+
defaultProps: {
|
|
123
|
+
source: 'manual',
|
|
124
|
+
productSlugs: [],
|
|
125
|
+
categorySlug: '',
|
|
126
|
+
searchQuery: '',
|
|
127
|
+
limit: 12,
|
|
128
|
+
columns: 4,
|
|
129
|
+
gap: 16,
|
|
130
|
+
view: 'grid',
|
|
131
|
+
equalItemHeight: true,
|
|
132
|
+
...DEFAULT_BOX_PROPS,
|
|
133
|
+
},
|
|
134
|
+
render: (props) => props.puck?.isEditing ? _jsx(ProductGridEditingRender, { ...props }) : _jsx(ProductGridPublishedRender, { ...props }),
|
|
135
|
+
resolveFields: (data, { fields }) => resolveProductSourceFields(fields, data.props.source ?? 'manual'),
|
|
136
|
+
};
|
|
137
|
+
export const ProductGrid = withHideOn(productGridConfig);
|
|
138
|
+
//# sourceMappingURL=ProductGrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductGrid.js","sourceRoot":"","sources":["../../src/components/ProductGrid.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAA4C,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,GACX,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAErF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,sCAAsC,CAAC;AAE9C,SAAS,eAAe,CAAC,EACvB,KAAK,EACL,IAAI,EACJ,OAAO,GAKR;IACC,MAAM,EACJ,MAAM,GAAG,QAAQ,EACjB,YAAY,GAAG,EAAE,EACjB,YAAY,GAAG,EAAE,EACjB,WAAW,GAAG,EAAE,EAChB,KAAK,GAAG,EAAE,EACV,OAAO,GAAG,CAAC,EACX,GAAG,GAAG,EAAE,EACR,IAAI,GAAG,MAAM,EACb,eAAe,GAAG,IAAI,EACtB,IAAI,EAAE,KAAK,EACX,GAAG,GAAG,EACP,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,IAAI,IAAI,GAAwB,EAAE,CAAC;gBACnC,IAAI,MAAM,KAAK,QAAQ;oBAAE,IAAI,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;;oBAEvE,IAAI,GAAG,MAAM,iBAAiB,CAAC;wBAC7B,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAClE,GAAG,CAAC,MAAM,KAAK,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAChE,KAAK;qBACN,CAAC,CAAC;gBACL,MAAM,yBAAyB,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS;oBAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,yBAAyB,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS;oBAAE,WAAW,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAE7D,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,KAAC,SAAS,OAAK,GAAG,KAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAC5D,KAAC,mBAAmB,IAClB,KAAK,EAAE,gCAAgC,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,EAC9E,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,KAAK,GACV,GACQ,CACb,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CACL,KAAC,SAAS,OAAK,GAAG,KAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAC5D,YAAG,SAAS,EAAC,6BAA6B,YACvC,OAAO;oBACN,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,YAAY;wBACtC,CAAC,CAAC,uDAAuD;wBACzD,CAAC,CAAC,MAAM,KAAK,UAAU;4BACrB,CAAC,CAAC,6DAA6D;4BAC/D,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,WAAW;gCAClC,CAAC,CAAC,0DAA0D;gCAC5D,CAAC,CAAC,+DAA+D;oBACvE,CAAC,CAAC,mBAAmB,GACrB,GACM,CACb,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG;QAChB,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,sBAAsB;QAChG,eAAe,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,EAAE;KAC5D;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,CACL,KAAC,SAAS,OAAK,GAAG,KAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAC5D,aACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;gBACL,GAAG,EAAE,GAAG,KAAK,IAAI;gBACjB,mBAAmB,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,QAAQ,mBAAmB,CAAC,CAAC,CAAC,SAAS;aAC7F,YAEA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,uBACE,KAAC,kBAAkB,IAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,GAAI,IADpF,CAAC,CAAC,EAAE,CAER,CACN,CAAC,GACC,GACK,CACb,CAAC;AACJ,CAAC;AAED,MAAM,wBAAwB,GAAoC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3E,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,OAAO,SAAG,CAC5E,CAAC;AAEF,MAAM,0BAA0B,GAAoC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC7E,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,KAAK,GAAI,CACrF,CAAC;AAEF,MAAM,iBAAiB,GAAsC;IAC3D,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE;QACN,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,uBAAuB;YACjC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC9C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;gBACxC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;aAC1C;SACF;QACD,YAAY,EAAE,+BAA+B,CAAC,UAAU,CAAC;QACzD,YAAY,EAAE,8BAA8B,CAAC,UAAU,CAAC;QACxD,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,uBAAuB,EAAE;QACvF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE;QAC7F,eAAe,EAAE;YACf,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SACxE;QACD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE;QAC/F,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE;QAC7F,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,sBAAsB;YAChC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAChC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACjC;SACF;QACD,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,iBAAiB;QAC1B,MAAM,EAAE,gBAAgB;KACzB;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC;QACV,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,MAAM;QACZ,eAAe,EAAE,IAAI;QACrB,GAAG,iBAAiB;KACrB;IACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAC,wBAAwB,OAAK,KAAK,GAAI,CAAC,CAAC,CAAC,KAAC,0BAA0B,OAAK,KAAK,GAAI;IAC7G,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC;CACvG,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type PuckComponent } from '@measured/puck';
|
|
2
|
+
import type { ProductSliderProps } from '../schema/component-types.js';
|
|
3
|
+
export declare const ProductSlider: {
|
|
4
|
+
render: PuckComponent<ProductSliderProps>;
|
|
5
|
+
label?: string;
|
|
6
|
+
defaultProps?: ProductSliderProps;
|
|
7
|
+
fields?: import("@measured/puck").Fields<ProductSliderProps, {}>;
|
|
8
|
+
permissions?: Partial<import("@measured/puck").Permissions>;
|
|
9
|
+
inline?: boolean;
|
|
10
|
+
resolveFields?: (data: Omit<import("@measured/puck").ComponentData<ProductSliderProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
11
|
+
changed: Partial<Record<keyof ProductSliderProps, boolean> & {
|
|
12
|
+
id: string;
|
|
13
|
+
}>;
|
|
14
|
+
fields: import("@measured/puck").Fields<ProductSliderProps, {}>;
|
|
15
|
+
lastFields: import("@measured/puck").Fields<ProductSliderProps, {}>;
|
|
16
|
+
lastData: Omit<import("@measured/puck").ComponentData<ProductSliderProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
17
|
+
appState: import("@measured/puck").AppState;
|
|
18
|
+
parent: import("@measured/puck").ComponentData | null;
|
|
19
|
+
}) => import("@measured/puck").Fields<ProductSliderProps, {}> | Promise<import("@measured/puck").Fields<ProductSliderProps, {}>>;
|
|
20
|
+
resolveData?: (data: Omit<import("@measured/puck").ComponentData<ProductSliderProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
21
|
+
changed: Partial<Record<keyof ProductSliderProps, boolean> & {
|
|
22
|
+
id: string;
|
|
23
|
+
}>;
|
|
24
|
+
lastData: Omit<import("@measured/puck").ComponentData<ProductSliderProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
25
|
+
metadata: import("@measured/puck").Metadata;
|
|
26
|
+
trigger: import("@measured/puck").ResolveDataTrigger;
|
|
27
|
+
}) => (Omit<Omit<import("@measured/puck").ComponentData<ProductSliderProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
|
|
28
|
+
props?: Partial<ProductSliderProps>;
|
|
29
|
+
}) | Promise<Omit<Omit<import("@measured/puck").ComponentData<ProductSliderProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
|
|
30
|
+
props?: Partial<ProductSliderProps>;
|
|
31
|
+
}>;
|
|
32
|
+
resolvePermissions?: (data: Omit<import("@measured/puck").ComponentData<ProductSliderProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
33
|
+
changed: Partial<Record<keyof ProductSliderProps, boolean> & {
|
|
34
|
+
id: string;
|
|
35
|
+
}>;
|
|
36
|
+
lastPermissions: Partial<import("@measured/puck").Permissions>;
|
|
37
|
+
permissions: Partial<import("@measured/puck").Permissions>;
|
|
38
|
+
appState: import("@measured/puck").AppState;
|
|
39
|
+
lastData: Omit<import("@measured/puck").ComponentData<ProductSliderProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
40
|
+
}) => Promise<Partial<import("@measured/puck").Permissions>> | Partial<import("@measured/puck").Permissions>;
|
|
41
|
+
metadata?: import("@measured/puck").Metadata;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=ProductSlider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductSlider.d.ts","sourceRoot":"","sources":["../../src/components/ProductSlider.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAU1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAsMvE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAkC,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import {} from '@measured/puck';
|
|
5
|
+
import { PB_RESPONSIVE_METADATA, resolveResponsiveNumber, withHideOn, } from '@endora-commerce/page-builder-core';
|
|
6
|
+
import { useEditorCarouselPage } from '@endora-commerce/page-builder-core/editor/carousel-preview';
|
|
7
|
+
import { usePreviewBreakpointTier } from '@endora-commerce/page-builder-core/client';
|
|
8
|
+
import { useViewportBreakpointTier } from '../hooks/use-viewport-breakpoint-tier.js';
|
|
9
|
+
import { BoxStyled } from './box-styles.js';
|
|
10
|
+
import { BOX_BORDER_FIELD, BOX_MARGIN_FIELD, BOX_PADDING_FIELD, DEFAULT_BOX_PROPS, } from '../fields/shared-fields.js';
|
|
11
|
+
import { CmsProductCardView } from './CmsProductCard.js';
|
|
12
|
+
import { CarouselShell } from './carousel/CarouselShell.js';
|
|
13
|
+
import { ProductSliderSkeleton } from './catalog/CatalogSkeletons.js';
|
|
14
|
+
import { fetchProductsBySlugs, fetchProductsList } from '../utils/catalog-fetch.js';
|
|
15
|
+
import { waitForCatalogSkeletonMin } from '../utils/catalog-load.js';
|
|
16
|
+
import { estimateProductSliderSkeletonCount } from '../utils/catalog-skeleton-estimate.js';
|
|
17
|
+
import { resolveProductSourceFields } from '../fields/catalog-resolve-fields.js';
|
|
18
|
+
import { CATALOG_DATA_FIELD_META } from '../fields/catalog-data-fields.js';
|
|
19
|
+
import { createCatalogSlugFallbackField, createCatalogSlugsFallbackField, } from '../fields/catalog-fallback-fields.js';
|
|
20
|
+
function ProductSliderBody({ props, tier, editing, previewPage = 0, }) {
|
|
21
|
+
const { source = 'manual', productSlugs = [], categorySlug = '', searchQuery = '', limit = 12, slidesPerView = { base: 1, tablet: 4, desktop: 8 }, gap = 16, autoplay = false, intervalMs = 5000, showArrows = true, showDots = true, equalHeight = true, puck: _puck, ...box } = props;
|
|
22
|
+
const [products, setProducts] = useState([]);
|
|
23
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
24
|
+
const perViewFallback = tier === 'desktop' ? 8 : tier === 'tablet' ? 4 : 1;
|
|
25
|
+
const perView = resolveResponsiveNumber(slidesPerView, tier, perViewFallback);
|
|
26
|
+
const gapPx = resolveResponsiveNumber(gap, tier, 16);
|
|
27
|
+
const carouselId = typeof props.id === 'string' ? props.id : undefined;
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
let cancelled = false;
|
|
30
|
+
setIsLoading(true);
|
|
31
|
+
const startedAt = Date.now();
|
|
32
|
+
void (async () => {
|
|
33
|
+
try {
|
|
34
|
+
let list = [];
|
|
35
|
+
if (source === 'manual')
|
|
36
|
+
list = await fetchProductsBySlugs(productSlugs);
|
|
37
|
+
else
|
|
38
|
+
list = await fetchProductsList({
|
|
39
|
+
...(source === 'category' && categorySlug ? { categorySlug } : {}),
|
|
40
|
+
...(source === 'query' && searchQuery ? { q: searchQuery } : {}),
|
|
41
|
+
limit,
|
|
42
|
+
});
|
|
43
|
+
await waitForCatalogSkeletonMin(startedAt);
|
|
44
|
+
if (!cancelled)
|
|
45
|
+
setProducts(list);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
await waitForCatalogSkeletonMin(startedAt);
|
|
49
|
+
if (!cancelled)
|
|
50
|
+
setProducts([]);
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
if (!cancelled)
|
|
54
|
+
setIsLoading(false);
|
|
55
|
+
}
|
|
56
|
+
})();
|
|
57
|
+
return () => {
|
|
58
|
+
cancelled = true;
|
|
59
|
+
};
|
|
60
|
+
}, [source, productSlugs, categorySlug, searchQuery, limit]);
|
|
61
|
+
if (isLoading) {
|
|
62
|
+
return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: tier } : {}), children: _jsx(ProductSliderSkeleton, { count: estimateProductSliderSkeletonCount(source, productSlugs, limit, perView), slidesPerView: slidesPerView, gap: gap }) }));
|
|
63
|
+
}
|
|
64
|
+
if (products.length === 0) {
|
|
65
|
+
return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: tier } : {}), children: _jsx("p", { className: "cmsc-pb-product-grid__empty", children: editing
|
|
66
|
+
? source === 'category' && !categorySlug
|
|
67
|
+
? 'Select a category in the sidebar to preview products.'
|
|
68
|
+
: source === 'category'
|
|
69
|
+
? 'No products in this category (or none visible for preview).'
|
|
70
|
+
: source === 'query' && !searchQuery
|
|
71
|
+
? 'Enter a search query in the sidebar to preview products.'
|
|
72
|
+
: 'No products to preview — configure the source in the sidebar.'
|
|
73
|
+
: 'No products found' }) }));
|
|
74
|
+
}
|
|
75
|
+
return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: tier } : {}), children: _jsx(CarouselShell, { slidesPerView: perView, gap: gapPx, autoplay: autoplay, intervalMs: intervalMs, showArrows: showArrows, showDots: showDots, equalHeight: equalHeight, editorPreview: editing, previewPage: editing ? previewPage : 0, ...(editing && carouselId !== undefined ? { editorCarouselId: carouselId } : {}), children: products.map((p) => (_jsx(CmsProductCardView, { product: p }, p.id))) }) }));
|
|
76
|
+
}
|
|
77
|
+
const ProductSliderEditingRender = (props) => {
|
|
78
|
+
const carouselId = props.id;
|
|
79
|
+
const previewPage = useEditorCarouselPage(carouselId);
|
|
80
|
+
return _jsx(ProductSliderBody, { props: props, tier: usePreviewBreakpointTier(), editing: true, previewPage: previewPage });
|
|
81
|
+
};
|
|
82
|
+
const ProductSliderPublishedRender = (props) => (_jsx(ProductSliderBody, { props: props, tier: useViewportBreakpointTier(), editing: false }));
|
|
83
|
+
const productSliderConfig = {
|
|
84
|
+
label: 'Product slider',
|
|
85
|
+
fields: {
|
|
86
|
+
source: {
|
|
87
|
+
type: 'select',
|
|
88
|
+
label: 'Source',
|
|
89
|
+
metadata: CATALOG_DATA_FIELD_META,
|
|
90
|
+
options: [
|
|
91
|
+
{ label: 'Manual selection', value: 'manual' },
|
|
92
|
+
{ label: 'Category', value: 'category' },
|
|
93
|
+
{ label: 'Search query', value: 'query' },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
productSlugs: createCatalogSlugsFallbackField('Products'),
|
|
97
|
+
categorySlug: createCatalogSlugFallbackField('Category'),
|
|
98
|
+
searchQuery: { type: 'text', label: 'Search query', metadata: CATALOG_DATA_FIELD_META },
|
|
99
|
+
limit: { type: 'number', label: 'Limit', min: 1, max: 24, metadata: CATALOG_DATA_FIELD_META },
|
|
100
|
+
slidesPerView: { type: 'number', label: 'Slides per view', min: 1, max: 8, metadata: PB_RESPONSIVE_METADATA },
|
|
101
|
+
gap: { type: 'number', label: 'Gap (px)', min: 0, max: 48, metadata: PB_RESPONSIVE_METADATA },
|
|
102
|
+
autoplay: { type: 'radio', label: 'Autoplay', options: [{ label: 'Yes', value: true }, { label: 'No', value: false }] },
|
|
103
|
+
intervalMs: { type: 'number', label: 'Interval (ms)', min: 2000, max: 15000 },
|
|
104
|
+
showArrows: { type: 'radio', label: 'Arrows', options: [{ label: 'Show', value: true }, { label: 'Hide', value: false }] },
|
|
105
|
+
showDots: { type: 'radio', label: 'Dots', options: [{ label: 'Show', value: true }, { label: 'Hide', value: false }] },
|
|
106
|
+
equalHeight: {
|
|
107
|
+
type: 'radio',
|
|
108
|
+
label: 'Equal slide height',
|
|
109
|
+
options: [{ label: 'Yes', value: true }, { label: 'No', value: false }],
|
|
110
|
+
},
|
|
111
|
+
margin: BOX_MARGIN_FIELD,
|
|
112
|
+
padding: BOX_PADDING_FIELD,
|
|
113
|
+
border: BOX_BORDER_FIELD,
|
|
114
|
+
},
|
|
115
|
+
defaultProps: {
|
|
116
|
+
source: 'manual',
|
|
117
|
+
productSlugs: [],
|
|
118
|
+
categorySlug: '',
|
|
119
|
+
searchQuery: '',
|
|
120
|
+
limit: 12,
|
|
121
|
+
slidesPerView: { base: 1, tablet: 4, desktop: 8 },
|
|
122
|
+
gap: 16,
|
|
123
|
+
autoplay: false,
|
|
124
|
+
intervalMs: 5000,
|
|
125
|
+
showArrows: true,
|
|
126
|
+
showDots: true,
|
|
127
|
+
equalHeight: true,
|
|
128
|
+
...DEFAULT_BOX_PROPS,
|
|
129
|
+
},
|
|
130
|
+
render: (props) => props.puck?.isEditing ? _jsx(ProductSliderEditingRender, { ...props }) : _jsx(ProductSliderPublishedRender, { ...props }),
|
|
131
|
+
resolveFields: (data, { fields }) => resolveProductSourceFields(fields, data.props.source ?? 'manual'),
|
|
132
|
+
};
|
|
133
|
+
export const ProductSlider = withHideOn(productSliderConfig);
|
|
134
|
+
//# sourceMappingURL=ProductSlider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductSlider.js","sourceRoot":"","sources":["../../src/components/ProductSlider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type PuckComponent } from '@measured/puck';
|
|
2
|
+
import type { RawHtmlProps } from '../schema/component-types.js';
|
|
3
|
+
export declare const RawHtml: {
|
|
4
|
+
render: PuckComponent<RawHtmlProps>;
|
|
5
|
+
label?: string;
|
|
6
|
+
defaultProps?: RawHtmlProps;
|
|
7
|
+
fields?: import("@measured/puck").Fields<RawHtmlProps, {}>;
|
|
8
|
+
permissions?: Partial<import("@measured/puck").Permissions>;
|
|
9
|
+
inline?: boolean;
|
|
10
|
+
resolveFields?: (data: Omit<import("@measured/puck").ComponentData<RawHtmlProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
11
|
+
changed: Partial<Record<keyof RawHtmlProps, boolean> & {
|
|
12
|
+
id: string;
|
|
13
|
+
}>;
|
|
14
|
+
fields: import("@measured/puck").Fields<RawHtmlProps, {}>;
|
|
15
|
+
lastFields: import("@measured/puck").Fields<RawHtmlProps, {}>;
|
|
16
|
+
lastData: Omit<import("@measured/puck").ComponentData<RawHtmlProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
17
|
+
appState: import("@measured/puck").AppState;
|
|
18
|
+
parent: import("@measured/puck").ComponentData | null;
|
|
19
|
+
}) => import("@measured/puck").Fields<RawHtmlProps, {}> | Promise<import("@measured/puck").Fields<RawHtmlProps, {}>>;
|
|
20
|
+
resolveData?: (data: Omit<import("@measured/puck").ComponentData<RawHtmlProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
21
|
+
changed: Partial<Record<keyof RawHtmlProps, boolean> & {
|
|
22
|
+
id: string;
|
|
23
|
+
}>;
|
|
24
|
+
lastData: Omit<import("@measured/puck").ComponentData<RawHtmlProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
25
|
+
metadata: import("@measured/puck").Metadata;
|
|
26
|
+
trigger: import("@measured/puck").ResolveDataTrigger;
|
|
27
|
+
}) => (Omit<Omit<import("@measured/puck").ComponentData<RawHtmlProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
|
|
28
|
+
props?: Partial<RawHtmlProps>;
|
|
29
|
+
}) | Promise<Omit<Omit<import("@measured/puck").ComponentData<RawHtmlProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, "props"> & {
|
|
30
|
+
props?: Partial<RawHtmlProps>;
|
|
31
|
+
}>;
|
|
32
|
+
resolvePermissions?: (data: Omit<import("@measured/puck").ComponentData<RawHtmlProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type">, params: {
|
|
33
|
+
changed: Partial<Record<keyof RawHtmlProps, boolean> & {
|
|
34
|
+
id: string;
|
|
35
|
+
}>;
|
|
36
|
+
lastPermissions: Partial<import("@measured/puck").Permissions>;
|
|
37
|
+
permissions: Partial<import("@measured/puck").Permissions>;
|
|
38
|
+
appState: import("@measured/puck").AppState;
|
|
39
|
+
lastData: Omit<import("@measured/puck").ComponentData<RawHtmlProps, string, Record<string, import("@measured/puck").DefaultComponentProps>>, "type"> | null;
|
|
40
|
+
}) => Promise<Partial<import("@measured/puck").Permissions>> | Partial<import("@measured/puck").Permissions>;
|
|
41
|
+
metadata?: import("@measured/puck").Metadata;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=RawHtml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RawHtml.d.ts","sourceRoot":"","sources":["../../src/components/RawHtml.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAkDjE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA4B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import {} from '@measured/puck';
|
|
4
|
+
import { withHideOn } from '@endora-commerce/page-builder-core';
|
|
5
|
+
import { BoxStyled } from './box-styles.js';
|
|
6
|
+
import { BOX_BORDER_FIELD, BOX_MARGIN_FIELD, BOX_PADDING_FIELD, DEFAULT_BOX_PROPS, } from '../fields/shared-fields.js';
|
|
7
|
+
import { sanitizeHtml } from '../utils/sanitize-html.js';
|
|
8
|
+
const RawHtmlRender = (props) => {
|
|
9
|
+
const { html, sanitize = true, puck, ...box } = props;
|
|
10
|
+
const editing = puck?.isEditing === true;
|
|
11
|
+
const safe = sanitizeHtml(html ?? '', sanitize);
|
|
12
|
+
return (_jsx(BoxStyled, { ...box, ...(editing ? { previewTier: 'desktop' } : {}), className: "cmsc-pb-raw-html", children: editing && !html ? (_jsx("p", { className: "cmsc:text-sm cmsc:text-[#64748b] cmsc:italic", children: "Raw HTML \u2014 trusted admin content" })) : (_jsx("div", { dangerouslySetInnerHTML: { __html: safe } })) }));
|
|
13
|
+
};
|
|
14
|
+
const rawHtmlConfig = {
|
|
15
|
+
label: 'Raw HTML',
|
|
16
|
+
fields: {
|
|
17
|
+
html: { type: 'textarea', label: 'HTML' },
|
|
18
|
+
sanitize: {
|
|
19
|
+
type: 'radio',
|
|
20
|
+
label: 'Sanitize',
|
|
21
|
+
options: [
|
|
22
|
+
{ label: 'On (recommended)', value: true },
|
|
23
|
+
{ label: 'Off (trusted)', value: false },
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
margin: BOX_MARGIN_FIELD,
|
|
27
|
+
padding: BOX_PADDING_FIELD,
|
|
28
|
+
border: BOX_BORDER_FIELD,
|
|
29
|
+
},
|
|
30
|
+
defaultProps: {
|
|
31
|
+
html: '<p>Custom HTML</p>',
|
|
32
|
+
sanitize: true,
|
|
33
|
+
...DEFAULT_BOX_PROPS,
|
|
34
|
+
},
|
|
35
|
+
render: RawHtmlRender,
|
|
36
|
+
};
|
|
37
|
+
export const RawHtml = withHideOn(rawHtmlConfig);
|
|
38
|
+
//# sourceMappingURL=RawHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RawHtml.js","sourceRoot":"","sources":["../../src/components/RawHtml.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAA4C,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,aAAa,GAAgC,CAAC,KAAK,EAAE,EAAE;IAC3D,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEhD,OAAO,CACL,KAAC,SAAS,OAAK,GAAG,KAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAC,kBAAkB,YACvG,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAClB,YAAG,SAAS,EAAC,8CAA8C,sDAAqC,CACjG,CAAC,CAAC,CAAC,CACF,cAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,CACnD,GACS,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAkC;IACnD,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE;QACN,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;QACzC,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC1C,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE;aACzC;SACF;QACD,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,iBAAiB;QAC1B,MAAM,EAAE,gBAAgB;KACzB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,IAAI;QACd,GAAG,iBAAiB;KACrB;IACD,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC"}
|