@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,419 @@
1
+ import type { Slot } from '@measured/puck';
2
+ import type { BorderValue, BackgroundProp, CornerRadius, HideOn, ResponsiveProp, Shadow, SpacingValue } from '@endora-commerce/page-builder-core';
3
+ export type ButtonVariant = 'primary' | 'secondary' | 'ghost';
4
+ export type ButtonTarget = '_self' | '_blank';
5
+ export type ButtonLinkType = 'url' | 'product' | 'category' | 'page';
6
+ export type HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
7
+ export interface HideOnProps {
8
+ editorName?: string;
9
+ hideOn?: HideOn;
10
+ }
11
+ export interface BoxStyleProps {
12
+ margin?: SpacingValue | ResponsiveProp<SpacingValue>;
13
+ padding?: SpacingValue | ResponsiveProp<SpacingValue>;
14
+ border?: BorderValue | ResponsiveProp<BorderValue>;
15
+ }
16
+ export interface AppearanceProps {
17
+ background?: BackgroundProp;
18
+ cornerRadius?: CornerRadius;
19
+ shadow?: Shadow;
20
+ }
21
+ export interface ColumnProps extends HideOnProps, BoxStyleProps, AppearanceProps {
22
+ span: number | ResponsiveProp<number>;
23
+ content: Slot;
24
+ }
25
+ export interface RowColumnItem {
26
+ span: number | ResponsiveProp<number>;
27
+ content: Slot;
28
+ }
29
+ export interface RowProps extends HideOnProps, BoxStyleProps, AppearanceProps {
30
+ content: Slot;
31
+ /** @deprecated migrated to Column components in content slot */
32
+ columnItems?: RowColumnItem[];
33
+ sectionLayout: RowSectionLayout | ResponsiveProp<RowSectionLayout>;
34
+ contentMaxWidth: RowContentMaxWidth | ResponsiveProp<RowContentMaxWidth>;
35
+ customMaxWidthPx?: number | ResponsiveProp<number>;
36
+ /** @deprecated use sectionLayout */
37
+ fullBleed?: boolean;
38
+ /** @deprecated use contentMaxWidth */
39
+ contentWidth?: 'full' | 'narrow' | 'wide' | ResponsiveProp<'full' | 'narrow' | 'wide'>;
40
+ contentPosition: 'top' | 'middle' | 'bottom' | ResponsiveProp<'top' | 'middle' | 'bottom'>;
41
+ minHeight: number | ResponsiveProp<number>;
42
+ gap: number | ResponsiveProp<number>;
43
+ rowGap?: number | ResponsiveProp<number>;
44
+ verticalAlign?: 'top' | 'middle' | 'bottom' | 'stretch' | ResponsiveProp<'top' | 'middle' | 'bottom' | 'stretch'>;
45
+ columnDivider?: boolean;
46
+ reverseOnMobile?: boolean;
47
+ overflow: boolean;
48
+ }
49
+ export type RowSectionLayout = 'in_flow' | 'full_width' | 'full_viewport' | 'full_bleed';
50
+ export type RowContentMaxWidth = 'none' | 'narrow' | 'wide' | 'custom';
51
+ export type TextFontFamily = 'sans' | 'serif' | 'mono';
52
+ export type TextFontStyle = 'normal' | 'italic';
53
+ export interface TypographyProps {
54
+ fontFamily?: TextFontFamily;
55
+ fontStyle?: TextFontStyle;
56
+ color?: string;
57
+ fontSize?: number | ResponsiveProp<number>;
58
+ fontWeight?: number | ResponsiveProp<number>;
59
+ textAlign?: 'left' | 'center' | 'right' | ResponsiveProp<'left' | 'center' | 'right'>;
60
+ lineHeight?: number | ResponsiveProp<number>;
61
+ }
62
+ export interface HeadingProps extends HideOnProps, BoxStyleProps, TypographyProps {
63
+ level: HeadingLevel;
64
+ text: string;
65
+ /** @deprecated use textAlign */
66
+ align?: 'left' | 'center' | 'right' | ResponsiveProp<'left' | 'center' | 'right'>;
67
+ }
68
+ export interface TextProps extends HideOnProps, BoxStyleProps, TypographyProps {
69
+ text?: string;
70
+ /** Legacy rows saved before Simple Text — read-only fallback at render time. */
71
+ tiptapContent?: {
72
+ type?: string;
73
+ content?: unknown[];
74
+ } | null;
75
+ /** Legacy rows saved before Simple Text — read-only fallback at render time. */
76
+ html?: string;
77
+ }
78
+ export type ImageAlign = 'left' | 'center' | 'right';
79
+ export interface IconsProps extends HideOnProps, BoxStyleProps {
80
+ name: string;
81
+ size?: number;
82
+ color?: string;
83
+ strokeWidth?: number;
84
+ align?: ImageAlign | ResponsiveProp<ImageAlign>;
85
+ href?: string;
86
+ linkTarget?: '_self' | '_blank';
87
+ }
88
+ export type SocialNetwork = 'facebook' | 'x' | 'instagram' | 'linkedin' | 'youtube' | 'tiktok' | 'website' | 'email';
89
+ export type SocialLayout = 'icons-only' | 'icons-with-labels' | 'vertical-list' | 'pills';
90
+ export interface SocialItem {
91
+ network: SocialNetwork;
92
+ label?: string;
93
+ url: string;
94
+ }
95
+ export interface SocialProps extends HideOnProps, BoxStyleProps {
96
+ items: SocialItem[];
97
+ layout?: SocialLayout;
98
+ size?: number;
99
+ gap?: number;
100
+ color?: string;
101
+ useBrandColors?: boolean;
102
+ align?: ImageAlign | ResponsiveProp<ImageAlign>;
103
+ }
104
+ export type ImageObjectFit = 'cover' | 'contain' | 'fill' | 'none';
105
+ export type ImageWidthMode = 'auto' | 'full' | 'custom';
106
+ export type ImageSourceKind = 'url' | 'library';
107
+ export interface ImageProps extends HideOnProps, BoxStyleProps {
108
+ imageSource?: ImageSourceKind;
109
+ src: string;
110
+ assetId?: string;
111
+ alt: string;
112
+ href: string;
113
+ linkTarget: '_self' | '_blank';
114
+ objectFit: ImageObjectFit;
115
+ opacity: number;
116
+ cornerRadius?: CornerRadius;
117
+ widthMode: ImageWidthMode | ResponsiveProp<ImageWidthMode>;
118
+ widthPx: number | ResponsiveProp<number>;
119
+ align: ImageAlign | ResponsiveProp<ImageAlign>;
120
+ }
121
+ export interface RichContentProps extends HideOnProps, BoxStyleProps {
122
+ content: import('@tiptap/core').JSONContent | null;
123
+ /** Synced from TipTap in resolveData — not shown as an author-facing field. */
124
+ html: string;
125
+ }
126
+ export interface ButtonProps extends HideOnProps, BoxStyleProps {
127
+ label: string;
128
+ linkType: ButtonLinkType;
129
+ linkSlug?: string;
130
+ href: string;
131
+ target: ButtonTarget;
132
+ variant: ButtonVariant | ResponsiveProp<ButtonVariant>;
133
+ backgroundColor?: string;
134
+ textColor?: string;
135
+ }
136
+ export interface InsertBlockProps extends HideOnProps {
137
+ code: string;
138
+ }
139
+ export interface InsertTemplateProps extends HideOnProps {
140
+ code: string;
141
+ }
142
+ export type VideoProvider = 'auto' | 'youtube' | 'vimeo' | 'generic';
143
+ export type VideoAspectRatio = '16:9' | '4:3' | '1:1';
144
+ export interface RawHtmlProps extends HideOnProps, BoxStyleProps {
145
+ html: string;
146
+ sanitize?: boolean;
147
+ }
148
+ export interface RawJsProps extends HideOnProps, BoxStyleProps {
149
+ script: string;
150
+ runOnce?: boolean;
151
+ }
152
+ export interface VideoProps extends HideOnProps, BoxStyleProps {
153
+ url: string;
154
+ provider?: VideoProvider;
155
+ aspectRatio?: VideoAspectRatio;
156
+ title?: string;
157
+ autoplay?: boolean;
158
+ muted?: boolean;
159
+ loop?: boolean;
160
+ controls?: boolean;
161
+ maxWidth?: number | ResponsiveProp<number>;
162
+ align?: ImageAlign | ResponsiveProp<ImageAlign>;
163
+ }
164
+ export interface ContentSliderProps extends HideOnProps, BoxStyleProps {
165
+ slides: Slot;
166
+ slidesPerView?: number | ResponsiveProp<number>;
167
+ gap?: number | ResponsiveProp<number>;
168
+ autoplay?: boolean;
169
+ intervalMs?: number;
170
+ showArrows?: boolean;
171
+ showDots?: boolean;
172
+ equalHeight?: boolean;
173
+ }
174
+ export interface SlideProps extends HideOnProps, BoxStyleProps {
175
+ content: Slot;
176
+ }
177
+ export type ImageSliderTitlePlacement = 'none' | 'top-left' | 'top-center' | 'top-right' | 'center' | 'bottom-left' | 'bottom-center' | 'bottom-right';
178
+ export interface ImageSliderItem {
179
+ /** Nested image fields for the editor (conditional source UI). Flat fields kept in sync via resolveData. */
180
+ image?: {
181
+ imageSource?: ImageSourceKind;
182
+ src?: string;
183
+ assetId?: string;
184
+ };
185
+ imageSource?: ImageSourceKind;
186
+ src: string;
187
+ assetId?: string;
188
+ title?: string;
189
+ titlePlacement?: ImageSliderTitlePlacement;
190
+ titleBackground?: string;
191
+ titleColor?: string;
192
+ titleBorderColor?: string;
193
+ titleBorderWidth?: number;
194
+ titleBorderRadius?: CornerRadius;
195
+ titlePaddingPx?: number;
196
+ }
197
+ export interface ImageSliderProps extends HideOnProps, BoxStyleProps {
198
+ items: ImageSliderItem[];
199
+ slidesPerView?: number | ResponsiveProp<number>;
200
+ gap?: number | ResponsiveProp<number>;
201
+ autoplay?: boolean;
202
+ intervalMs?: number;
203
+ showArrows?: boolean;
204
+ showDots?: boolean;
205
+ equalHeight?: boolean;
206
+ }
207
+ export interface TabItem {
208
+ label: string;
209
+ content: string;
210
+ }
211
+ export interface TabsProps extends HideOnProps, BoxStyleProps {
212
+ items: TabItem[];
213
+ defaultTab?: number;
214
+ variant?: 'underline' | 'pills' | 'boxed';
215
+ align?: 'start' | 'center' | 'stretch';
216
+ }
217
+ export interface AccordionItem {
218
+ title: string;
219
+ content: string;
220
+ }
221
+ export interface AccordionProps extends HideOnProps, BoxStyleProps {
222
+ items: AccordionItem[];
223
+ allowMultiple?: boolean;
224
+ defaultOpen?: number[];
225
+ iconPosition?: 'start' | 'end';
226
+ variant?: 'default' | 'flush' | 'bordered';
227
+ }
228
+ export type ProductSource = 'manual' | 'category' | 'query';
229
+ export interface CmsProductCardProps extends HideOnProps, BoxStyleProps, AppearanceProps {
230
+ productSlug: string;
231
+ showPrice?: boolean;
232
+ showSku?: boolean;
233
+ showStock?: boolean;
234
+ imageRatio?: 'square' | '4:3' | '16:9' | 'auto';
235
+ imageObjectFit?: 'cover' | 'contain' | 'fill' | 'none';
236
+ /** Max card width in px; omit or 0 = stretch to container. */
237
+ maxWidthPx?: number | ResponsiveProp<number>;
238
+ /** Fixed media height in px; when set, overrides aspect-ratio from imageRatio. */
239
+ imageHeightPx?: number | ResponsiveProp<number>;
240
+ variant?: 'default' | 'compact' | 'horizontal';
241
+ ctaLabel?: string;
242
+ }
243
+ export interface ProductGridProps extends HideOnProps, BoxStyleProps {
244
+ source?: ProductSource;
245
+ productSlugs?: string[];
246
+ categorySlug?: string;
247
+ searchQuery?: string;
248
+ limit?: number;
249
+ columns?: number | ResponsiveProp<number>;
250
+ gap?: number | ResponsiveProp<number>;
251
+ view?: 'grid' | 'list' | ResponsiveProp<'grid' | 'list'>;
252
+ equalItemHeight?: boolean;
253
+ }
254
+ export interface ProductSliderProps extends HideOnProps, BoxStyleProps {
255
+ source?: ProductSource;
256
+ productSlugs?: string[];
257
+ categorySlug?: string;
258
+ searchQuery?: string;
259
+ limit?: number;
260
+ slidesPerView?: number | ResponsiveProp<number>;
261
+ gap?: number | ResponsiveProp<number>;
262
+ autoplay?: boolean;
263
+ intervalMs?: number;
264
+ showArrows?: boolean;
265
+ showDots?: boolean;
266
+ equalHeight?: boolean;
267
+ }
268
+ export type CategorySelectionMode = 'all' | 'manual' | 'childrenOf';
269
+ export interface CategoryListProps extends HideOnProps, BoxStyleProps {
270
+ selectionMode?: CategorySelectionMode;
271
+ categorySlugs?: string[];
272
+ parentSlug?: string;
273
+ layout?: 'list' | 'inline' | 'chips';
274
+ showCounts?: boolean;
275
+ maxDepth?: number;
276
+ }
277
+ export interface CategoryGridProps extends HideOnProps, BoxStyleProps {
278
+ selectionMode?: CategorySelectionMode;
279
+ categorySlugs?: string[];
280
+ parentSlug?: string;
281
+ columns?: number | ResponsiveProp<number>;
282
+ gap?: number | ResponsiveProp<number>;
283
+ showImage?: boolean;
284
+ cardStyle?: 'overlay' | 'stacked' | 'minimal';
285
+ showCounts?: boolean;
286
+ maxDepth?: number;
287
+ equalItemHeight?: boolean;
288
+ }
289
+ export interface MapMarker {
290
+ lat: number;
291
+ lng: number;
292
+ label?: string;
293
+ link?: string;
294
+ }
295
+ export type MapProvider = 'leaflet' | 'google';
296
+ export interface MapProps extends HideOnProps, BoxStyleProps {
297
+ provider?: MapProvider;
298
+ height?: number | ResponsiveProp<number>;
299
+ centerLat?: number;
300
+ centerLng?: number;
301
+ zoom?: number;
302
+ markers?: MapMarker[];
303
+ googleApiKey?: string;
304
+ }
305
+ export interface SpacerProps extends HideOnProps {
306
+ heightPx?: number | ResponsiveProp<number>;
307
+ showDivider?: boolean;
308
+ dividerColor?: string;
309
+ }
310
+ export interface FeatureListItem {
311
+ icon?: string;
312
+ title: string;
313
+ description?: string;
314
+ }
315
+ export interface FeatureListProps extends HideOnProps, BoxStyleProps {
316
+ items: FeatureListItem[];
317
+ columns?: number | ResponsiveProp<number>;
318
+ gap?: number | ResponsiveProp<number>;
319
+ iconColor?: string;
320
+ iconSize?: number;
321
+ align?: ImageAlign;
322
+ }
323
+ export interface HeroProps extends HideOnProps, BoxStyleProps, AppearanceProps {
324
+ heading: string;
325
+ subtitle?: string;
326
+ buttonLabel?: string;
327
+ buttonLinkType?: ButtonLinkType;
328
+ buttonLinkSlug?: string;
329
+ buttonHref?: string;
330
+ buttonTarget?: ButtonTarget;
331
+ buttonVariant?: ButtonVariant | ResponsiveProp<ButtonVariant>;
332
+ buttonBackgroundColor?: string;
333
+ buttonTextColor?: string;
334
+ minHeightPx?: number | ResponsiveProp<number>;
335
+ contentAlign?: ImageAlign;
336
+ overlayOpacity?: number;
337
+ textColor?: string;
338
+ }
339
+ export interface LogoStripItem {
340
+ /** Nested image control (URL vs asset library) — same pattern as Image Slider. */
341
+ image?: {
342
+ imageSource?: ImageSourceKind;
343
+ src?: string;
344
+ assetId?: string;
345
+ };
346
+ imageSource?: ImageSourceKind;
347
+ src?: string;
348
+ assetId?: string;
349
+ alt?: string;
350
+ href?: string;
351
+ }
352
+ export interface LogoStripProps extends HideOnProps, BoxStyleProps {
353
+ items: LogoStripItem[];
354
+ gap?: number;
355
+ logoMaxHeightPx?: number;
356
+ grayscale?: boolean;
357
+ align?: ImageAlign;
358
+ }
359
+ export interface TestimonialProps extends HideOnProps, BoxStyleProps, AppearanceProps {
360
+ quote: string;
361
+ author?: string;
362
+ role?: string;
363
+ /** Avatar image source — same pattern as Image (`url` | `library`). */
364
+ avatarSource?: ImageSourceKind;
365
+ avatarUrl?: string;
366
+ avatarAssetId?: string;
367
+ }
368
+ export interface StatsItem {
369
+ value: string;
370
+ label: string;
371
+ }
372
+ export interface StatsProps extends HideOnProps, BoxStyleProps {
373
+ items: StatsItem[];
374
+ columns?: number | ResponsiveProp<number>;
375
+ gap?: number;
376
+ align?: ImageAlign;
377
+ valueColor?: string;
378
+ }
379
+ export interface AnnouncementBarProps extends HideOnProps {
380
+ text: string;
381
+ href?: string;
382
+ backgroundColor?: string;
383
+ textColor?: string;
384
+ }
385
+ export interface SimpleTableHeader {
386
+ label: string;
387
+ }
388
+ export interface SimpleTableCell {
389
+ value: string;
390
+ }
391
+ export interface SimpleTableRow {
392
+ cells: SimpleTableCell[];
393
+ }
394
+ export interface SimpleTableProps extends HideOnProps, BoxStyleProps {
395
+ /** @deprecated legacy pipe-separated headers — migrated in resolveData */
396
+ headers?: string | SimpleTableHeader[];
397
+ /** @deprecated legacy pipe-separated rows — migrated in resolveData */
398
+ rows?: string | SimpleTableRow[];
399
+ columns?: SimpleTableHeader[];
400
+ tableRows?: SimpleTableRow[];
401
+ striped?: boolean;
402
+ }
403
+ export interface NewsletterSignupProps extends HideOnProps, BoxStyleProps, AppearanceProps {
404
+ heading?: string;
405
+ description?: string;
406
+ placeholder?: string;
407
+ buttonLabel?: string;
408
+ /** Form action URL (newsletter endpoint or external). */
409
+ actionUrl?: string;
410
+ }
411
+ export interface ContactFormEmbedProps extends HideOnProps, BoxStyleProps {
412
+ heading?: string;
413
+ description?: string;
414
+ /** External form embed URL (iframe) or leave empty for mailto fallback. */
415
+ embedUrl?: string;
416
+ mailto?: string;
417
+ heightPx?: number;
418
+ }
419
+ //# sourceMappingURL=component-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-types.d.ts","sourceRoot":"","sources":["../../src/schema/component-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=component-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-types.js","sourceRoot":"","sources":["../../src/schema/component-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * A single Puck data tree as produced by the editor for one language.
3
+ * Treated as opaque at this layer — Puck's actual type lives in
4
+ * `@measured/puck` and may change across pre-1.0 bumps; we round-trip the
5
+ * shape verbatim through the envelope.
6
+ */
7
+ export type PuckDataTree = {
8
+ root?: {
9
+ props?: Record<string, unknown>;
10
+ };
11
+ content?: unknown[];
12
+ zones?: Record<string, unknown[]>;
13
+ } & Record<string, unknown>;
14
+ export interface ContentEnvelope {
15
+ /** Per-language content trees keyed by BCP-47 language code. */
16
+ languages: Record<string, PuckDataTree>;
17
+ }
18
+ export declare function emptyEnvelope(): ContentEnvelope;
19
+ /** Normalize stored JSONB that may still carry a legacy `schema_version` key. */
20
+ export declare function normalizeContentEnvelope(raw: unknown): ContentEnvelope;
21
+ //# sourceMappingURL=envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/schema/envelope.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;CACnC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACzC;AAED,wBAAgB,aAAa,IAAI,eAAe,CAE/C;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAUtE"}
@@ -0,0 +1,19 @@
1
+ // Page Builder content envelope — feature 014.
2
+ //
3
+ // Every saved CMS content tree (cms_pages.content, cms_blocks.content,
4
+ // cms_templates.content) is wrapped in this envelope.
5
+ export function emptyEnvelope() {
6
+ return { languages: {} };
7
+ }
8
+ /** Normalize stored JSONB that may still carry a legacy `schema_version` key. */
9
+ export function normalizeContentEnvelope(raw) {
10
+ if (!raw || typeof raw !== 'object') {
11
+ return emptyEnvelope();
12
+ }
13
+ const obj = raw;
14
+ const languages = obj['languages'] && typeof obj['languages'] === 'object' && !Array.isArray(obj['languages'])
15
+ ? obj['languages']
16
+ : {};
17
+ return { languages };
18
+ }
19
+ //# sourceMappingURL=envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/schema/envelope.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,uEAAuE;AACvE,sDAAsD;AAmBtD,MAAM,UAAU,aAAa;IAC3B,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC3B,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,SAAS,GACb,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1F,CAAC,CAAE,GAAG,CAAC,WAAW,CAAkC;QACpD,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { CmsCategoryNode, CmsProductSummary } from '../schema/catalog-types.js';
2
+ export interface ListProductsResponse {
3
+ data: CmsProductSummary[];
4
+ }
5
+ export declare function fetchProductsBySlugs(slugs: string[]): Promise<CmsProductSummary[]>;
6
+ export declare function fetchProductsList(query: {
7
+ categorySlug?: string;
8
+ q?: string;
9
+ limit?: number;
10
+ }): Promise<CmsProductSummary[]>;
11
+ export declare function fetchCategoryTree(): Promise<CmsCategoryNode[]>;
12
+ export declare function flattenCategories(nodes: CmsCategoryNode[], depth?: number): {
13
+ slug: string;
14
+ name: string;
15
+ productCount: number;
16
+ depth: number;
17
+ }[];
18
+ export declare function filterCategories(nodes: CmsCategoryNode[], opts: {
19
+ selectionMode: 'all' | 'manual' | 'childrenOf';
20
+ categorySlugs?: string[];
21
+ parentSlug?: string;
22
+ maxDepth?: number;
23
+ }): {
24
+ slug: string;
25
+ name: string;
26
+ productCount: number;
27
+ depth: number;
28
+ }[];
29
+ //# sourceMappingURL=catalog-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-fetch.d.ts","sourceRoot":"","sources":["../../src/utils/catalog-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAsBrF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAmBxF;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAW/B;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAMpE;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EAAE,EACxB,KAAK,SAAI,GACR;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAOvE;AAWD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,eAAe,EAAE,EACxB,IAAI,EAAE;IACJ,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAYvE"}
@@ -0,0 +1,88 @@
1
+ import { getCatalogPreviewApi } from './catalog-preview-bridge.js';
2
+ function apiBase() {
3
+ if (typeof window !== 'undefined') {
4
+ return (window.__B2B_API_BASE__ ??
5
+ process.env['NEXT_PUBLIC_API_BASE_URL'] ??
6
+ '');
7
+ }
8
+ return process.env['NEXT_PUBLIC_API_BASE_URL'] ?? '';
9
+ }
10
+ async function fetchJson(path, init) {
11
+ const base = apiBase();
12
+ const url = base ? `${base.replace(/\/$/, '')}${path}` : path;
13
+ const res = await fetch(url, { credentials: 'include', ...init });
14
+ if (!res.ok)
15
+ throw new Error(`Catalog fetch failed: ${res.status}`);
16
+ return res.json();
17
+ }
18
+ export async function fetchProductsBySlugs(slugs) {
19
+ if (slugs.length === 0)
20
+ return [];
21
+ const preview = getCatalogPreviewApi();
22
+ if (preview)
23
+ return preview.fetchProductsBySlugs(slugs);
24
+ const results = await Promise.all(slugs.map(async (slug) => {
25
+ try {
26
+ const res = await fetchJson(`/api/v1/catalog/products/${encodeURIComponent(slug)}`);
27
+ return res.data;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }));
33
+ const bySlug = new Map(results.filter(Boolean).map((p) => [p.slug, p]));
34
+ return slugs.map((s) => bySlug.get(s)).filter(Boolean);
35
+ }
36
+ export async function fetchProductsList(query) {
37
+ const preview = getCatalogPreviewApi();
38
+ if (preview)
39
+ return preview.fetchProductsList(query);
40
+ const params = new URLSearchParams();
41
+ if (query.categorySlug)
42
+ params.set('filter[category]', query.categorySlug);
43
+ if (query.q)
44
+ params.set('q', query.q);
45
+ params.set('limit', String(query.limit ?? 12));
46
+ const qs = params.toString();
47
+ const res = await fetchJson(`/api/v1/catalog/products?${qs}`);
48
+ return res.data;
49
+ }
50
+ export async function fetchCategoryTree() {
51
+ const preview = getCatalogPreviewApi();
52
+ if (preview)
53
+ return preview.fetchCategoryTree();
54
+ const res = await fetchJson('/api/v1/catalog/categories');
55
+ return res.data;
56
+ }
57
+ export function flattenCategories(nodes, depth = 0) {
58
+ const out = [];
59
+ for (const node of nodes) {
60
+ out.push({ slug: node.slug, name: node.name, productCount: node.productCount, depth });
61
+ out.push(...flattenCategories(node.children, depth + 1));
62
+ }
63
+ return out;
64
+ }
65
+ function findCategory(nodes, slug) {
66
+ for (const node of nodes) {
67
+ if (node.slug === slug)
68
+ return node;
69
+ const found = findCategory(node.children, slug);
70
+ if (found)
71
+ return found;
72
+ }
73
+ return null;
74
+ }
75
+ export function filterCategories(nodes, opts) {
76
+ const flat = flattenCategories(nodes);
77
+ if (opts.selectionMode === 'manual') {
78
+ const slugSet = new Set(opts.categorySlugs ?? []);
79
+ return flat.filter((c) => slugSet.has(c.slug));
80
+ }
81
+ if (opts.selectionMode === 'childrenOf' && opts.parentSlug) {
82
+ const parent = findCategory(nodes, opts.parentSlug);
83
+ return flattenCategories(parent?.children ?? [], 0);
84
+ }
85
+ const maxDepth = opts.maxDepth;
86
+ return maxDepth !== undefined ? flat.filter((c) => c.depth <= maxDepth) : flat;
87
+ }
88
+ //# sourceMappingURL=catalog-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-fetch.js","sourceRoot":"","sources":["../../src/utils/catalog-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Minimum time catalog skeletons stay visible so loading state is perceptible on fast/local APIs. */
2
+ export declare const CATALOG_SKELETON_MIN_MS = 320;
3
+ export declare function waitForCatalogSkeletonMin(startedAt: number): Promise<void>;
4
+ //# sourceMappingURL=catalog-load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-load.d.ts","sourceRoot":"","sources":["../../src/utils/catalog-load.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,wBAAsB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF"}
@@ -0,0 +1,11 @@
1
+ /** Minimum time catalog skeletons stay visible so loading state is perceptible on fast/local APIs. */
2
+ export const CATALOG_SKELETON_MIN_MS = 320;
3
+ export async function waitForCatalogSkeletonMin(startedAt) {
4
+ const remaining = CATALOG_SKELETON_MIN_MS - (Date.now() - startedAt);
5
+ if (remaining > 0) {
6
+ await new Promise((resolve) => {
7
+ window.setTimeout(resolve, remaining);
8
+ });
9
+ }
10
+ }
11
+ //# sourceMappingURL=catalog-load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-load.js","sourceRoot":"","sources":["../../src/utils/catalog-load.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,SAAiB;IAC/D,MAAM,SAAS,GAAG,uBAAuB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;IACrE,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}