@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.
Files changed (300) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/cms-components.css +2 -0
  4. package/dist/components/Accordion.d.ts +43 -0
  5. package/dist/components/Accordion.d.ts.map +1 -0
  6. package/dist/components/Accordion.js +81 -0
  7. package/dist/components/Accordion.js.map +1 -0
  8. package/dist/components/AnnouncementBar.d.ts +43 -0
  9. package/dist/components/AnnouncementBar.d.ts.map +1 -0
  10. package/dist/components/AnnouncementBar.js +27 -0
  11. package/dist/components/AnnouncementBar.js.map +1 -0
  12. package/dist/components/Button.d.ts +43 -0
  13. package/dist/components/Button.d.ts.map +1 -0
  14. package/dist/components/Button.js +122 -0
  15. package/dist/components/Button.js.map +1 -0
  16. package/dist/components/CategoryGrid.d.ts +43 -0
  17. package/dist/components/CategoryGrid.d.ts.map +1 -0
  18. package/dist/components/CategoryGrid.js +117 -0
  19. package/dist/components/CategoryGrid.js.map +1 -0
  20. package/dist/components/CategoryList.d.ts +43 -0
  21. package/dist/components/CategoryList.d.ts.map +1 -0
  22. package/dist/components/CategoryList.js +96 -0
  23. package/dist/components/CategoryList.js.map +1 -0
  24. package/dist/components/CmsPageContainer.d.ts +12 -0
  25. package/dist/components/CmsPageContainer.d.ts.map +1 -0
  26. package/dist/components/CmsPageContainer.js +19 -0
  27. package/dist/components/CmsPageContainer.js.map +1 -0
  28. package/dist/components/CmsProductCard.d.ts +35 -0
  29. package/dist/components/CmsProductCard.d.ts.map +1 -0
  30. package/dist/components/CmsProductCard.js +101 -0
  31. package/dist/components/CmsProductCard.js.map +1 -0
  32. package/dist/components/Column.d.ts +50 -0
  33. package/dist/components/Column.d.ts.map +1 -0
  34. package/dist/components/Column.js +127 -0
  35. package/dist/components/Column.js.map +1 -0
  36. package/dist/components/ContactFormEmbed.d.ts +43 -0
  37. package/dist/components/ContactFormEmbed.d.ts.map +1 -0
  38. package/dist/components/ContactFormEmbed.js +37 -0
  39. package/dist/components/ContactFormEmbed.js.map +1 -0
  40. package/dist/components/ContentSlider.d.ts +43 -0
  41. package/dist/components/ContentSlider.d.ts.map +1 -0
  42. package/dist/components/ContentSlider.js +96 -0
  43. package/dist/components/ContentSlider.js.map +1 -0
  44. package/dist/components/FeatureList.d.ts +43 -0
  45. package/dist/components/FeatureList.d.ts.map +1 -0
  46. package/dist/components/FeatureList.js +89 -0
  47. package/dist/components/FeatureList.js.map +1 -0
  48. package/dist/components/Heading.d.ts +43 -0
  49. package/dist/components/Heading.d.ts.map +1 -0
  50. package/dist/components/Heading.js +116 -0
  51. package/dist/components/Heading.js.map +1 -0
  52. package/dist/components/Hero.d.ts +43 -0
  53. package/dist/components/Hero.d.ts.map +1 -0
  54. package/dist/components/Hero.js +186 -0
  55. package/dist/components/Hero.js.map +1 -0
  56. package/dist/components/IconPickerField.d.ts +3 -0
  57. package/dist/components/IconPickerField.d.ts.map +1 -0
  58. package/dist/components/IconPickerField.js +30 -0
  59. package/dist/components/IconPickerField.js.map +1 -0
  60. package/dist/components/Icons.d.ts +43 -0
  61. package/dist/components/Icons.d.ts.map +1 -0
  62. package/dist/components/Icons.js +62 -0
  63. package/dist/components/Icons.js.map +1 -0
  64. package/dist/components/Image.d.ts +43 -0
  65. package/dist/components/Image.d.ts.map +1 -0
  66. package/dist/components/Image.js +179 -0
  67. package/dist/components/Image.js.map +1 -0
  68. package/dist/components/ImageSlider.d.ts +44 -0
  69. package/dist/components/ImageSlider.d.ts.map +1 -0
  70. package/dist/components/ImageSlider.js +186 -0
  71. package/dist/components/ImageSlider.js.map +1 -0
  72. package/dist/components/InsertBlock.d.ts +4 -0
  73. package/dist/components/InsertBlock.d.ts.map +1 -0
  74. package/dist/components/InsertBlock.js +30 -0
  75. package/dist/components/InsertBlock.js.map +1 -0
  76. package/dist/components/InsertTemplate.d.ts +4 -0
  77. package/dist/components/InsertTemplate.d.ts.map +1 -0
  78. package/dist/components/InsertTemplate.js +30 -0
  79. package/dist/components/InsertTemplate.js.map +1 -0
  80. package/dist/components/LogoStrip.d.ts +43 -0
  81. package/dist/components/LogoStrip.d.ts.map +1 -0
  82. package/dist/components/LogoStrip.js +155 -0
  83. package/dist/components/LogoStrip.js.map +1 -0
  84. package/dist/components/Map.d.ts +43 -0
  85. package/dist/components/Map.d.ts.map +1 -0
  86. package/dist/components/Map.js +165 -0
  87. package/dist/components/Map.js.map +1 -0
  88. package/dist/components/MissingComponentPlaceholder.d.ts +27 -0
  89. package/dist/components/MissingComponentPlaceholder.d.ts.map +1 -0
  90. package/dist/components/MissingComponentPlaceholder.js +24 -0
  91. package/dist/components/MissingComponentPlaceholder.js.map +1 -0
  92. package/dist/components/NewsletterSignup.d.ts +43 -0
  93. package/dist/components/NewsletterSignup.d.ts.map +1 -0
  94. package/dist/components/NewsletterSignup.js +43 -0
  95. package/dist/components/NewsletterSignup.js.map +1 -0
  96. package/dist/components/ProductCard.d.ts +43 -0
  97. package/dist/components/ProductCard.d.ts.map +1 -0
  98. package/dist/components/ProductCard.js +96 -0
  99. package/dist/components/ProductCard.js.map +1 -0
  100. package/dist/components/ProductGrid.d.ts +43 -0
  101. package/dist/components/ProductGrid.d.ts.map +1 -0
  102. package/dist/components/ProductGrid.js +138 -0
  103. package/dist/components/ProductGrid.js.map +1 -0
  104. package/dist/components/ProductSlider.d.ts +43 -0
  105. package/dist/components/ProductSlider.d.ts.map +1 -0
  106. package/dist/components/ProductSlider.js +134 -0
  107. package/dist/components/ProductSlider.js.map +1 -0
  108. package/dist/components/RawHtml.d.ts +43 -0
  109. package/dist/components/RawHtml.d.ts.map +1 -0
  110. package/dist/components/RawHtml.js +38 -0
  111. package/dist/components/RawHtml.js.map +1 -0
  112. package/dist/components/RawJs.d.ts +43 -0
  113. package/dist/components/RawJs.d.ts.map +1 -0
  114. package/dist/components/RawJs.js +53 -0
  115. package/dist/components/RawJs.js.map +1 -0
  116. package/dist/components/RichContent.d.ts +4 -0
  117. package/dist/components/RichContent.d.ts.map +1 -0
  118. package/dist/components/RichContent.js +48 -0
  119. package/dist/components/RichContent.js.map +1 -0
  120. package/dist/components/RichContentEditorField.d.ts +10 -0
  121. package/dist/components/RichContentEditorField.d.ts.map +1 -0
  122. package/dist/components/RichContentEditorField.js +130 -0
  123. package/dist/components/RichContentEditorField.js.map +1 -0
  124. package/dist/components/RichContentPublished.d.ts +5 -0
  125. package/dist/components/RichContentPublished.d.ts.map +1 -0
  126. package/dist/components/RichContentPublished.js +22 -0
  127. package/dist/components/RichContentPublished.js.map +1 -0
  128. package/dist/components/Row.d.ts +43 -0
  129. package/dist/components/Row.d.ts.map +1 -0
  130. package/dist/components/Row.js +305 -0
  131. package/dist/components/Row.js.map +1 -0
  132. package/dist/components/SimpleTable.d.ts +43 -0
  133. package/dist/components/SimpleTable.d.ts.map +1 -0
  134. package/dist/components/SimpleTable.js +155 -0
  135. package/dist/components/SimpleTable.js.map +1 -0
  136. package/dist/components/Slide.d.ts +44 -0
  137. package/dist/components/Slide.d.ts.map +1 -0
  138. package/dist/components/Slide.js +36 -0
  139. package/dist/components/Slide.js.map +1 -0
  140. package/dist/components/Social.d.ts +43 -0
  141. package/dist/components/Social.d.ts.map +1 -0
  142. package/dist/components/Social.js +110 -0
  143. package/dist/components/Social.js.map +1 -0
  144. package/dist/components/Spacer.d.ts +43 -0
  145. package/dist/components/Spacer.d.ts.map +1 -0
  146. package/dist/components/Spacer.js +48 -0
  147. package/dist/components/Spacer.js.map +1 -0
  148. package/dist/components/Stats.d.ts +43 -0
  149. package/dist/components/Stats.d.ts.map +1 -0
  150. package/dist/components/Stats.js +71 -0
  151. package/dist/components/Stats.js.map +1 -0
  152. package/dist/components/Tabs.d.ts +43 -0
  153. package/dist/components/Tabs.d.ts.map +1 -0
  154. package/dist/components/Tabs.js +70 -0
  155. package/dist/components/Tabs.js.map +1 -0
  156. package/dist/components/Testimonial.d.ts +43 -0
  157. package/dist/components/Testimonial.d.ts.map +1 -0
  158. package/dist/components/Testimonial.js +74 -0
  159. package/dist/components/Testimonial.js.map +1 -0
  160. package/dist/components/Text.d.ts +43 -0
  161. package/dist/components/Text.d.ts.map +1 -0
  162. package/dist/components/Text.js +87 -0
  163. package/dist/components/Text.js.map +1 -0
  164. package/dist/components/Video.d.ts +43 -0
  165. package/dist/components/Video.d.ts.map +1 -0
  166. package/dist/components/Video.js +98 -0
  167. package/dist/components/Video.js.map +1 -0
  168. package/dist/components/box-styles.d.ts +19 -0
  169. package/dist/components/box-styles.d.ts.map +1 -0
  170. package/dist/components/box-styles.js +66 -0
  171. package/dist/components/box-styles.js.map +1 -0
  172. package/dist/components/button-link.d.ts +7 -0
  173. package/dist/components/button-link.d.ts.map +1 -0
  174. package/dist/components/button-link.js +15 -0
  175. package/dist/components/button-link.js.map +1 -0
  176. package/dist/components/carousel/CarouselShell.d.ts +27 -0
  177. package/dist/components/carousel/CarouselShell.d.ts.map +1 -0
  178. package/dist/components/carousel/CarouselShell.js +210 -0
  179. package/dist/components/carousel/CarouselShell.js.map +1 -0
  180. package/dist/components/catalog/CatalogSkeletons.d.ts +27 -0
  181. package/dist/components/catalog/CatalogSkeletons.d.ts.map +1 -0
  182. package/dist/components/catalog/CatalogSkeletons.js +38 -0
  183. package/dist/components/catalog/CatalogSkeletons.js.map +1 -0
  184. package/dist/components/catalog-preview-context.d.ts +9 -0
  185. package/dist/components/catalog-preview-context.d.ts.map +1 -0
  186. package/dist/components/catalog-preview-context.js +18 -0
  187. package/dist/components/catalog-preview-context.js.map +1 -0
  188. package/dist/components/icon-catalog.d.ts +139 -0
  189. package/dist/components/icon-catalog.d.ts.map +1 -0
  190. package/dist/components/icon-catalog.js +148 -0
  191. package/dist/components/icon-catalog.js.map +1 -0
  192. package/dist/components/image-fields.d.ts +6 -0
  193. package/dist/components/image-fields.d.ts.map +1 -0
  194. package/dist/components/image-fields.js +11 -0
  195. package/dist/components/image-fields.js.map +1 -0
  196. package/dist/components/image-slider-item.d.ts +7 -0
  197. package/dist/components/image-slider-item.d.ts.map +1 -0
  198. package/dist/components/image-slider-item.js +45 -0
  199. package/dist/components/image-slider-item.js.map +1 -0
  200. package/dist/components/render-context.d.ts +29 -0
  201. package/dist/components/render-context.d.ts.map +1 -0
  202. package/dist/components/render-context.js +21 -0
  203. package/dist/components/render-context.js.map +1 -0
  204. package/dist/components/rich-content-shared.d.ts +11 -0
  205. package/dist/components/rich-content-shared.d.ts.map +1 -0
  206. package/dist/components/rich-content-shared.js +132 -0
  207. package/dist/components/rich-content-shared.js.map +1 -0
  208. package/dist/components/social-networks.d.ts +10 -0
  209. package/dist/components/social-networks.d.ts.map +1 -0
  210. package/dist/components/social-networks.js +43 -0
  211. package/dist/components/social-networks.js.map +1 -0
  212. package/dist/components/styles.d.ts +2 -0
  213. package/dist/components/styles.d.ts.map +1 -0
  214. package/dist/components/styles.js +9 -0
  215. package/dist/components/styles.js.map +1 -0
  216. package/dist/components/text-content.d.ts +13 -0
  217. package/dist/components/text-content.d.ts.map +1 -0
  218. package/dist/components/text-content.js +64 -0
  219. package/dist/components/text-content.js.map +1 -0
  220. package/dist/components/typography.d.ts +26 -0
  221. package/dist/components/typography.d.ts.map +1 -0
  222. package/dist/components/typography.js +52 -0
  223. package/dist/components/typography.js.map +1 -0
  224. package/dist/editor/row-layout-presets.d.ts +34 -0
  225. package/dist/editor/row-layout-presets.d.ts.map +1 -0
  226. package/dist/editor/row-layout-presets.js +175 -0
  227. package/dist/editor/row-layout-presets.js.map +1 -0
  228. package/dist/editor/slot-edit-props.d.ts +16 -0
  229. package/dist/editor/slot-edit-props.d.ts.map +1 -0
  230. package/dist/editor/slot-edit-props.js +25 -0
  231. package/dist/editor/slot-edit-props.js.map +1 -0
  232. package/dist/fields/catalog-data-fields.d.ts +7 -0
  233. package/dist/fields/catalog-data-fields.d.ts.map +1 -0
  234. package/dist/fields/catalog-data-fields.js +4 -0
  235. package/dist/fields/catalog-data-fields.js.map +1 -0
  236. package/dist/fields/catalog-fallback-fields.d.ts +4 -0
  237. package/dist/fields/catalog-fallback-fields.d.ts.map +1 -0
  238. package/dist/fields/catalog-fallback-fields.js +34 -0
  239. package/dist/fields/catalog-fallback-fields.js.map +1 -0
  240. package/dist/fields/catalog-resolve-fields.d.ts +5 -0
  241. package/dist/fields/catalog-resolve-fields.d.ts.map +1 -0
  242. package/dist/fields/catalog-resolve-fields.js +40 -0
  243. package/dist/fields/catalog-resolve-fields.js.map +1 -0
  244. package/dist/fields/shared-fields.d.ts +176 -0
  245. package/dist/fields/shared-fields.d.ts.map +1 -0
  246. package/dist/fields/shared-fields.js +142 -0
  247. package/dist/fields/shared-fields.js.map +1 -0
  248. package/dist/hooks/use-viewport-breakpoint-tier.d.ts +4 -0
  249. package/dist/hooks/use-viewport-breakpoint-tier.d.ts.map +1 -0
  250. package/dist/hooks/use-viewport-breakpoint-tier.js +21 -0
  251. package/dist/hooks/use-viewport-breakpoint-tier.js.map +1 -0
  252. package/dist/index.d.ts +127 -0
  253. package/dist/index.d.ts.map +1 -0
  254. package/dist/index.js +377 -0
  255. package/dist/index.js.map +1 -0
  256. package/dist/schema/catalog-types.d.ts +22 -0
  257. package/dist/schema/catalog-types.d.ts.map +1 -0
  258. package/dist/schema/catalog-types.js +2 -0
  259. package/dist/schema/catalog-types.js.map +1 -0
  260. package/dist/schema/component-types.d.ts +419 -0
  261. package/dist/schema/component-types.d.ts.map +1 -0
  262. package/dist/schema/component-types.js +2 -0
  263. package/dist/schema/component-types.js.map +1 -0
  264. package/dist/schema/envelope.d.ts +21 -0
  265. package/dist/schema/envelope.d.ts.map +1 -0
  266. package/dist/schema/envelope.js +19 -0
  267. package/dist/schema/envelope.js.map +1 -0
  268. package/dist/utils/catalog-fetch.d.ts +29 -0
  269. package/dist/utils/catalog-fetch.d.ts.map +1 -0
  270. package/dist/utils/catalog-fetch.js +88 -0
  271. package/dist/utils/catalog-fetch.js.map +1 -0
  272. package/dist/utils/catalog-load.d.ts +4 -0
  273. package/dist/utils/catalog-load.d.ts.map +1 -0
  274. package/dist/utils/catalog-load.js +11 -0
  275. package/dist/utils/catalog-load.js.map +1 -0
  276. package/dist/utils/catalog-preview-bridge.d.ts +13 -0
  277. package/dist/utils/catalog-preview-bridge.d.ts.map +1 -0
  278. package/dist/utils/catalog-preview-bridge.js +8 -0
  279. package/dist/utils/catalog-preview-bridge.js.map +1 -0
  280. package/dist/utils/catalog-skeleton-estimate.d.ts +7 -0
  281. package/dist/utils/catalog-skeleton-estimate.d.ts.map +1 -0
  282. package/dist/utils/catalog-skeleton-estimate.js +42 -0
  283. package/dist/utils/catalog-skeleton-estimate.js.map +1 -0
  284. package/dist/utils/resolve-image-url.d.ts +20 -0
  285. package/dist/utils/resolve-image-url.d.ts.map +1 -0
  286. package/dist/utils/resolve-image-url.js +24 -0
  287. package/dist/utils/resolve-image-url.js.map +1 -0
  288. package/dist/utils/sanitize-html.d.ts +6 -0
  289. package/dist/utils/sanitize-html.d.ts.map +1 -0
  290. package/dist/utils/sanitize-html.js +81 -0
  291. package/dist/utils/sanitize-html.js.map +1 -0
  292. package/dist/utils/video-embed.d.ts +11 -0
  293. package/dist/utils/video-embed.d.ts.map +1 -0
  294. package/dist/utils/video-embed.js +61 -0
  295. package/dist/utils/video-embed.js.map +1 -0
  296. package/dist/utils/walk-asset-ids.d.ts +3 -0
  297. package/dist/utils/walk-asset-ids.d.ts.map +1 -0
  298. package/dist/utils/walk-asset-ids.js +23 -0
  299. package/dist/utils/walk-asset-ids.js.map +1 -0
  300. 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":"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"}
@@ -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"}