@enadhq/enad-react-sdk 1.1.0 → 1.3.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 (232) hide show
  1. package/dist/client/cart/components/cart-drawer.mjs +3 -3
  2. package/dist/client/cart/components/cart-drawer.mjs.map +1 -1
  3. package/dist/client/cart/components/cart-trigger.mjs +1 -1
  4. package/dist/client/cart/components/cart-trigger.mjs.map +1 -1
  5. package/dist/client/storefront/blocks/card-video.mjs +1 -1
  6. package/dist/client/storefront/blocks/card-video.mjs.map +1 -1
  7. package/dist/client/storefront/blocks/gallery-with-link-blocks.d.ts.map +1 -1
  8. package/dist/client/storefront/blocks/gallery-with-link-blocks.mjs +13 -5
  9. package/dist/client/storefront/blocks/gallery-with-link-blocks.mjs.map +1 -1
  10. package/dist/client/storefront/blocks/gallery.d.ts +10 -1
  11. package/dist/client/storefront/blocks/gallery.d.ts.map +1 -1
  12. package/dist/client/storefront/blocks/gallery.mjs +51 -27
  13. package/dist/client/storefront/blocks/gallery.mjs.map +1 -1
  14. package/dist/client/storefront/blocks/hero.d.ts +12 -1
  15. package/dist/client/storefront/blocks/hero.d.ts.map +1 -1
  16. package/dist/client/storefront/blocks/hero.mjs +143 -145
  17. package/dist/client/storefront/blocks/hero.mjs.map +1 -1
  18. package/dist/client/storefront/blocks/link-block-small.d.ts.map +1 -1
  19. package/dist/client/storefront/blocks/link-block-small.mjs +1 -1
  20. package/dist/client/storefront/blocks/link-block-small.mjs.map +1 -1
  21. package/dist/client/storefront/blocks/link-block.d.ts.map +1 -1
  22. package/dist/client/storefront/blocks/link-block.mjs +4 -4
  23. package/dist/client/storefront/blocks/link-block.mjs.map +1 -1
  24. package/dist/client/storefront/blocks/product-card-parts.d.ts +1 -1
  25. package/dist/client/storefront/blocks/product-card-parts.d.ts.map +1 -1
  26. package/dist/client/storefront/blocks/product-card-parts.mjs +2 -2
  27. package/dist/client/storefront/blocks/product-card-parts.mjs.map +1 -1
  28. package/dist/client/storefront/blocks/product-card.d.ts +10 -1
  29. package/dist/client/storefront/blocks/product-card.d.ts.map +1 -1
  30. package/dist/client/storefront/blocks/product-card.mjs +122 -116
  31. package/dist/client/storefront/blocks/product-card.mjs.map +1 -1
  32. package/dist/client/storefront/blocks/product-image.mjs +2 -2
  33. package/dist/client/storefront/blocks/product-image.mjs.map +1 -1
  34. package/dist/client/storefront/blocks/text-content-with-image.d.ts +14 -1
  35. package/dist/client/storefront/blocks/text-content-with-image.d.ts.map +1 -1
  36. package/dist/client/storefront/blocks/text-content-with-image.mjs +141 -164
  37. package/dist/client/storefront/blocks/text-content-with-image.mjs.map +1 -1
  38. package/dist/client/storefront/carousel/swipeable-carousel.d.ts +5 -1
  39. package/dist/client/storefront/carousel/swipeable-carousel.d.ts.map +1 -1
  40. package/dist/client/storefront/carousel/swipeable-carousel.mjs +2 -1
  41. package/dist/client/storefront/carousel/swipeable-carousel.mjs.map +1 -1
  42. package/dist/client/storefront/checkout/cart-summary.mjs +1 -1
  43. package/dist/client/storefront/checkout/cart-summary.mjs.map +1 -1
  44. package/dist/client/storefront/components/language-selector.d.ts.map +1 -1
  45. package/dist/client/storefront/components/language-selector.mjs +1 -1
  46. package/dist/client/storefront/components/language-selector.mjs.map +1 -1
  47. package/dist/client/storefront/components/product-recommendations.d.ts.map +1 -1
  48. package/dist/client/storefront/components/product-recommendations.mjs +29 -37
  49. package/dist/client/storefront/components/product-recommendations.mjs.map +1 -1
  50. package/dist/client/storefront/filters/filter-chip.d.ts +5 -2
  51. package/dist/client/storefront/filters/filter-chip.d.ts.map +1 -1
  52. package/dist/client/storefront/filters/filter-chip.mjs +6 -4
  53. package/dist/client/storefront/filters/filter-chip.mjs.map +1 -1
  54. package/dist/client/storefront/filters/filter-panel.mjs +2 -2
  55. package/dist/client/storefront/filters/filter-panel.mjs.map +1 -1
  56. package/dist/client/storefront/filters/toggle-list-view.mjs +1 -1
  57. package/dist/client/storefront/filters/toggle-list-view.mjs.map +1 -1
  58. package/dist/client/storefront/index.d.ts +12 -1
  59. package/dist/client/storefront/index.mjs +12 -1
  60. package/dist/client/storefront/layout/header.d.ts.map +1 -1
  61. package/dist/client/storefront/layout/header.mjs +1 -1
  62. package/dist/client/storefront/layout/header.mjs.map +1 -1
  63. package/dist/client/storefront/layout/mobile-menu-drawer.mjs +1 -1
  64. package/dist/client/storefront/layout/promotion-bar.d.ts.map +1 -1
  65. package/dist/client/storefront/layout/promotion-bar.mjs +3 -3
  66. package/dist/client/storefront/layout/promotion-bar.mjs.map +1 -1
  67. package/dist/client/storefront/primitives/block-heading.d.ts +40 -0
  68. package/dist/client/storefront/primitives/block-heading.d.ts.map +1 -0
  69. package/dist/client/storefront/primitives/block-heading.mjs +43 -0
  70. package/dist/client/storefront/primitives/block-heading.mjs.map +1 -0
  71. package/dist/client/storefront/primitives/button.d.ts +2 -2
  72. package/dist/client/storefront/primitives/button.d.ts.map +1 -1
  73. package/dist/client/storefront/primitives/button.mjs +4 -4
  74. package/dist/client/storefront/primitives/button.mjs.map +1 -1
  75. package/dist/client/storefront/primitives/cta-group.d.ts +25 -0
  76. package/dist/client/storefront/primitives/cta-group.d.ts.map +1 -0
  77. package/dist/client/storefront/primitives/cta-group.mjs +27 -0
  78. package/dist/client/storefront/primitives/cta-group.mjs.map +1 -0
  79. package/dist/client/storefront/primitives/image-with-hover.d.ts +18 -0
  80. package/dist/client/storefront/primitives/image-with-hover.d.ts.map +1 -0
  81. package/dist/client/storefront/primitives/image-with-hover.mjs +16 -0
  82. package/dist/client/storefront/primitives/image-with-hover.mjs.map +1 -0
  83. package/dist/client/storefront/primitives/index.d.ts +4 -1
  84. package/dist/client/storefront/primitives/index.mjs +4 -1
  85. package/dist/client/storefront/primitives/input.d.ts +1 -1
  86. package/dist/client/storefront/primitives/input.mjs.map +1 -1
  87. package/dist/client/storefront/primitives/pagination.mjs +2 -2
  88. package/dist/client/storefront/primitives/pagination.mjs.map +1 -1
  89. package/dist/client/storefront/product/quantity-picker.mjs +2 -2
  90. package/dist/client/storefront/product/quantity-picker.mjs.map +1 -1
  91. package/dist/client/storefront/types.d.ts +1 -1
  92. package/dist/client/storefront/types.d.ts.map +1 -1
  93. package/dist/client/storefront/types.mjs.map +1 -1
  94. package/dist/client/theme/apply.d.ts +1 -1
  95. package/dist/client/theme/apply.d.ts.map +1 -1
  96. package/dist/client/theme/apply.mjs +0 -12
  97. package/dist/client/theme/apply.mjs.map +1 -1
  98. package/dist/client/theme/cli.mjs +0 -16
  99. package/dist/client/theme/cli.mjs.map +1 -1
  100. package/dist/client/theme/codec.d.ts.map +1 -1
  101. package/dist/client/theme/codec.mjs +0 -2
  102. package/dist/client/theme/codec.mjs.map +1 -1
  103. package/dist/client/theme/defaults.d.ts +0 -2
  104. package/dist/client/theme/defaults.mjs +0 -2
  105. package/dist/client/theme/defaults.mjs.map +1 -1
  106. package/dist/client/ui/accordion.d.ts +12 -1
  107. package/dist/client/ui/accordion.d.ts.map +1 -1
  108. package/dist/client/ui/accordion.mjs +23 -5
  109. package/dist/client/ui/accordion.mjs.map +1 -1
  110. package/dist/client/ui/alert.d.ts +16 -7
  111. package/dist/client/ui/alert.d.ts.map +1 -1
  112. package/dist/client/ui/alert.mjs +21 -8
  113. package/dist/client/ui/alert.mjs.map +1 -1
  114. package/dist/client/ui/avatar.d.ts +10 -1
  115. package/dist/client/ui/avatar.d.ts.map +1 -1
  116. package/dist/client/ui/avatar.mjs +18 -4
  117. package/dist/client/ui/avatar.mjs.map +1 -1
  118. package/dist/client/ui/breadcrumb.d.ts +13 -1
  119. package/dist/client/ui/breadcrumb.d.ts.map +1 -1
  120. package/dist/client/ui/breadcrumb.mjs +27 -7
  121. package/dist/client/ui/breadcrumb.mjs.map +1 -1
  122. package/dist/client/ui/button.d.ts +28 -10
  123. package/dist/client/ui/button.d.ts.map +1 -1
  124. package/dist/client/ui/button.mjs +45 -20
  125. package/dist/client/ui/button.mjs.map +1 -1
  126. package/dist/client/ui/card.d.ts +20 -1
  127. package/dist/client/ui/card.d.ts.map +1 -1
  128. package/dist/client/ui/card.mjs +36 -8
  129. package/dist/client/ui/card.mjs.map +1 -1
  130. package/dist/client/ui/carousel.d.ts +9 -1
  131. package/dist/client/ui/carousel.d.ts.map +1 -1
  132. package/dist/client/ui/carousel.mjs +20 -4
  133. package/dist/client/ui/carousel.mjs.map +1 -1
  134. package/dist/client/ui/checkbox.d.ts +9 -1
  135. package/dist/client/ui/checkbox.d.ts.map +1 -1
  136. package/dist/client/ui/checkbox.mjs +12 -3
  137. package/dist/client/ui/checkbox.mjs.map +1 -1
  138. package/dist/client/ui/dialog.d.ts +13 -1
  139. package/dist/client/ui/dialog.d.ts.map +1 -1
  140. package/dist/client/ui/dialog.mjs +27 -7
  141. package/dist/client/ui/dialog.mjs.map +1 -1
  142. package/dist/client/ui/hover-card.d.ts +6 -1
  143. package/dist/client/ui/hover-card.d.ts.map +1 -1
  144. package/dist/client/ui/hover-card.mjs +4 -2
  145. package/dist/client/ui/hover-card.mjs.map +1 -1
  146. package/dist/client/ui/input.d.ts +20 -7
  147. package/dist/client/ui/input.d.ts.map +1 -1
  148. package/dist/client/ui/input.mjs +33 -9
  149. package/dist/client/ui/input.mjs.map +1 -1
  150. package/dist/client/ui/label.d.ts +6 -1
  151. package/dist/client/ui/label.d.ts.map +1 -1
  152. package/dist/client/ui/label.mjs +4 -2
  153. package/dist/client/ui/label.mjs.map +1 -1
  154. package/dist/client/ui/navigation-menu.d.ts +20 -3
  155. package/dist/client/ui/navigation-menu.d.ts.map +1 -1
  156. package/dist/client/ui/navigation-menu.mjs +34 -12
  157. package/dist/client/ui/navigation-menu.mjs.map +1 -1
  158. package/dist/client/ui/pagination.d.ts.map +1 -1
  159. package/dist/client/ui/pagination.mjs +3 -3
  160. package/dist/client/ui/pagination.mjs.map +1 -1
  161. package/dist/client/ui/popover.d.ts +11 -1
  162. package/dist/client/ui/popover.d.ts.map +1 -1
  163. package/dist/client/ui/popover.mjs +21 -5
  164. package/dist/client/ui/popover.mjs.map +1 -1
  165. package/dist/client/ui/progress.d.ts +9 -1
  166. package/dist/client/ui/progress.d.ts.map +1 -1
  167. package/dist/client/ui/progress.mjs +12 -3
  168. package/dist/client/ui/progress.mjs.map +1 -1
  169. package/dist/client/ui/select.d.ts +14 -2
  170. package/dist/client/ui/select.d.ts.map +1 -1
  171. package/dist/client/ui/select.mjs +35 -9
  172. package/dist/client/ui/select.mjs.map +1 -1
  173. package/dist/client/ui/separator.d.ts +6 -1
  174. package/dist/client/ui/separator.d.ts.map +1 -1
  175. package/dist/client/ui/separator.mjs +4 -2
  176. package/dist/client/ui/separator.mjs.map +1 -1
  177. package/dist/client/ui/sheet.d.ts +13 -1
  178. package/dist/client/ui/sheet.d.ts.map +1 -1
  179. package/dist/client/ui/sheet.mjs +35 -7
  180. package/dist/client/ui/sheet.mjs.map +1 -1
  181. package/dist/client/ui/slot-wrapper.d.ts +28 -0
  182. package/dist/client/ui/slot-wrapper.d.ts.map +1 -0
  183. package/dist/client/ui/slot-wrapper.mjs +38 -0
  184. package/dist/client/ui/slot-wrapper.mjs.map +1 -0
  185. package/dist/client/ui/tabs.d.ts +11 -1
  186. package/dist/client/ui/tabs.d.ts.map +1 -1
  187. package/dist/client/ui/tabs.mjs +21 -5
  188. package/dist/client/ui/tabs.mjs.map +1 -1
  189. package/dist/client/ui/toggle-group.d.ts +7 -4
  190. package/dist/client/ui/toggle-group.d.ts.map +1 -1
  191. package/dist/client/ui/toggle-group.mjs +4 -4
  192. package/dist/client/ui/toggle-group.mjs.map +1 -1
  193. package/dist/client/ui/toggle.d.ts +17 -8
  194. package/dist/client/ui/toggle.d.ts.map +1 -1
  195. package/dist/client/ui/toggle.mjs +11 -9
  196. package/dist/client/ui/toggle.mjs.map +1 -1
  197. package/dist/client/ui/tooltip.d.ts +6 -1
  198. package/dist/client/ui/tooltip.d.ts.map +1 -1
  199. package/dist/client/ui/tooltip.mjs +4 -2
  200. package/dist/client/ui/tooltip.mjs.map +1 -1
  201. package/dist/client/ui-resolver/button.d.ts +3 -4
  202. package/dist/client/ui-resolver/button.d.ts.map +1 -1
  203. package/dist/client/ui-resolver/button.mjs +2 -2
  204. package/dist/client/ui-resolver/button.mjs.map +1 -1
  205. package/dist/client/ui-resolver/card.d.ts +14 -1
  206. package/dist/client/ui-resolver/card.d.ts.map +1 -1
  207. package/dist/client/ui-resolver/card.mjs +3 -2
  208. package/dist/client/ui-resolver/card.mjs.map +1 -1
  209. package/dist/client/ui-resolver/context.mjs +1 -1
  210. package/dist/client/ui-resolver/context.mjs.map +1 -1
  211. package/dist/client/ui-resolver/index.d.ts +7 -4
  212. package/dist/client/ui-resolver/index.mjs +8 -6
  213. package/dist/client/ui-resolver/input.d.ts +3 -4
  214. package/dist/client/ui-resolver/input.d.ts.map +1 -1
  215. package/dist/client/ui-resolver/input.mjs +2 -2
  216. package/dist/client/ui-resolver/input.mjs.map +1 -1
  217. package/dist/client/ui-resolver/navigation-menu.d.ts +1 -2
  218. package/dist/client/ui-resolver/navigation-menu.d.ts.map +1 -1
  219. package/dist/client/ui-resolver/recipe.d.ts +95 -0
  220. package/dist/client/ui-resolver/recipe.d.ts.map +1 -0
  221. package/dist/client/ui-resolver/recipe.mjs +134 -0
  222. package/dist/client/ui-resolver/recipe.mjs.map +1 -0
  223. package/dist/client/ui-resolver/toggle.d.ts +2 -2
  224. package/dist/client/ui-resolver/toggle.mjs +2 -2
  225. package/dist/client/ui-resolver/toggle.mjs.map +1 -1
  226. package/dist/client/ui-resolver/types.d.ts +14 -0
  227. package/dist/client/ui-resolver/types.d.ts.map +1 -0
  228. package/dist/client/ui-resolver/types.mjs +1 -0
  229. package/dist/client/wishlist/wishlist-drawer.mjs +4 -4
  230. package/dist/client/wishlist/wishlist-drawer.mjs.map +1 -1
  231. package/dist/styles.css +1 -1
  232. package/package.json +4 -3
@@ -37,7 +37,7 @@ function CartEmptyState({ message, onClose, buttonLabel }) {
37
37
  children: message
38
38
  }), /* @__PURE__ */ jsx(Button, {
39
39
  onClick: onClose,
40
- variant: "outline",
40
+ variant: "outlined",
41
41
  children: buttonLabel
42
42
  })]
43
43
  });
@@ -64,7 +64,7 @@ function CartItemDetails({ item, currencyCode, onClose, onUpdateQuantity, onRemo
64
64
  onClick: onClose,
65
65
  children: item.displayName
66
66
  }), /* @__PURE__ */ jsx(Button, {
67
- variant: "ghost",
67
+ variant: "plain",
68
68
  size: "icon",
69
69
  className: "h-5 w-5 flex-shrink-0",
70
70
  onClick: () => onRemove(item.id),
@@ -236,7 +236,7 @@ function CartDrawer({ isOpen, onClose, className, labels = {} }) {
236
236
  children: title
237
237
  }), /* @__PURE__ */ jsx(Button, {
238
238
  ref: closeButtonRef,
239
- variant: "ghost",
239
+ variant: "plain",
240
240
  size: "icon",
241
241
  onClick: onClose,
242
242
  "aria-label": "Close cart",
@@ -1 +1 @@
1
- {"version":3,"file":"cart-drawer.mjs","names":[],"sources":["../../../../src/client/cart/components/cart-drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useCallback } from \"react\";\nimport { useCart } from \"../../cart/hooks/useCart\";\nimport type { CartItem, CartTotals as CartTotalsType } from \"../../cart/types/adapter\";\nimport { useIcon } from \"../../icons/icon-context\";\nimport { Button } from \"../../ui/button\";\nimport { Price } from \"../../storefront/components/price\";\nimport { QuantityPicker } from \"../../storefront/product/quantity-picker\";\n\nexport interface CartDrawerProps {\n isOpen: boolean;\n onClose: () => void;\n className?: string;\n labels?: {\n title?: string;\n emptyCartMessage?: string;\n continueShopping?: string;\n subtotal?: string;\n discount?: string;\n tax?: string;\n total?: string;\n proceedToCheckout?: string;\n };\n}\n\nfunction CartLoadingSkeleton() {\n return (\n <div className=\"space-y-6\" aria-busy=\"true\" aria-label=\"Loading cart items\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex gap-4 animate-pulse\">\n <div className=\"w-24 h-24 flex-shrink-0 bg-(--enad-border-color) rounded-(--enad-border-radius)\" />\n <div className=\"flex flex-1 flex-col gap-2\">\n <div className=\"h-4 w-3/4 bg-(--enad-border-color) rounded-(--enad-border-radius)\" />\n <div className=\"h-4 w-1/3 bg-(--enad-border-color) rounded-(--enad-border-radius)\" />\n <div className=\"h-4 w-1/4 bg-(--enad-border-color) rounded-(--enad-border-radius)\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction CartEmptyState({\n message,\n onClose,\n buttonLabel,\n}: {\n message: string;\n onClose: () => void;\n buttonLabel: string;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full text-center\">\n <p className=\"text-(--enad-text-muted-color) mb-4\">{message}</p>\n <Button onClick={onClose} variant=\"outline\">\n {buttonLabel}\n </Button>\n </div>\n );\n}\n\nfunction CartItemImage({ imageUrl, alt }: { imageUrl?: string; alt: string }) {\n return (\n <div className=\"relative w-24 h-24 flex-shrink-0 bg-(--enad-border-color) rounded-(--enad-border-radius) overflow-hidden\">\n {imageUrl ? (\n <img src={imageUrl} alt={alt} className=\"object-cover\" />\n ) : (\n <div className=\"w-full h-full bg-(--enad-border-color)\" />\n )}\n </div>\n );\n}\n\nfunction CartItemDetails({\n item,\n currencyCode,\n onClose,\n onUpdateQuantity,\n onRemove,\n}: {\n item: CartItem;\n currencyCode: string;\n onClose: () => void;\n onUpdateQuantity: (itemId: string, quantity: number) => void;\n onRemove: (itemId: string) => void;\n}) {\n const TrashIcon = useIcon(\"trash\");\n\n return (\n <div className=\"flex flex-1 min-w-0 justify-between flex-col\">\n <div className=\"flex justify-between gap-2 mb-2\">\n <a\n href={`/products/${item.productSlug || item.productVariantId}`}\n className=\"font-medium text-sm text-(--enad-link-color) hover:text-(--enad-link-hover-color) transition-colors\"\n onClick={onClose}\n >\n {item.displayName}\n </a>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5 flex-shrink-0\"\n onClick={() => onRemove(item.id)}\n aria-label={`Remove ${item.displayName}`}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div>\n <Price\n amount={item.unitPrice.amount / 100}\n currency={currencyCode}\n className=\"text-sm text-(--enad-text-muted-color) mb-1\"\n />\n\n <QuantityPicker\n value={item.quantity}\n onChange={(qty) => onUpdateQuantity(item.id, qty)}\n size=\"sm\"\n />\n </div>\n </div>\n );\n}\n\nfunction CartItemRow({\n item,\n currencyCode,\n onClose,\n onUpdateQuantity,\n onRemove,\n}: {\n item: CartItem;\n currencyCode: string;\n onClose: () => void;\n onUpdateQuantity: (itemId: string, quantity: number) => void;\n onRemove: (itemId: string) => void;\n}) {\n return (\n <div className=\"flex gap-4\" role=\"listitem\">\n <CartItemImage imageUrl={item.imageUrl} alt={item.displayName} />\n <CartItemDetails\n item={item}\n currencyCode={currencyCode}\n onClose={onClose}\n onUpdateQuantity={onUpdateQuantity}\n onRemove={onRemove}\n />\n </div>\n );\n}\n\nfunction CartTotals({\n totals,\n currencyCode,\n labels,\n}: {\n totals: CartTotalsType;\n currencyCode: string;\n labels: {\n subtotal: string;\n discount: string;\n tax: string;\n total: string;\n proceedToCheckout: string;\n };\n}) {\n return (\n <div className=\"p-6 space-y-4\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-(--enad-text-muted-color)\">{labels.subtotal}</span>\n <Price amount={totals.subtotal.amount / 100} currency={currencyCode} />\n </div>\n\n {totals.discount.amount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-(--enad-text-muted-color)\">{labels.discount}</span>\n <span className=\"text-(--enad-success-color)\">\n -<Price amount={totals.discount.amount / 100} currency={currencyCode} />\n </span>\n </div>\n )}\n\n {totals.tax.amount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-(--enad-text-muted-color)\">{labels.tax}</span>\n <Price amount={totals.tax.amount / 100} currency={currencyCode} />\n </div>\n )}\n\n <div className=\"flex justify-between text-lg font-bold pt-4 border-t border-(--enad-border-color)\">\n <span className=\"text-(--enad-text-primary-color)\">{labels.total}</span>\n <Price amount={totals.total.amount / 100} currency={currencyCode} />\n </div>\n\n <Button className=\"w-full py-6 text-sm font-medium uppercase tracking-wider\" size=\"lg\">\n {labels.proceedToCheckout}\n </Button>\n </div>\n );\n}\n\nfunction useCartDrawer(isOpen: boolean, onClose: () => void) {\n const drawerRef = useRef<HTMLDivElement>(null);\n const closeButtonRef = useRef<HTMLButtonElement>(null);\n const { cart, isLoading, removeItem, updateItem } = useCart();\n\n useEffect(() => {\n if (isOpen) {\n const timer = setTimeout(() => closeButtonRef.current?.focus(), 100);\n return () => clearTimeout(timer);\n }\n }, [isOpen]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n }\n },\n [onClose],\n );\n\n const handleUpdateQuantity = (itemId: string, newQuantity: number) => {\n updateItem({ itemId, quantity: newQuantity });\n };\n\n const handleRemoveItem = (itemId: string) => {\n removeItem({ itemId });\n };\n\n return {\n drawerRef,\n closeButtonRef,\n cart,\n isLoading,\n items: cart?.items || [],\n totals: cart?.totals,\n currencyCode: cart?.currencyCode || \"SEK\",\n handleKeyDown,\n handleUpdateQuantity,\n handleRemoveItem,\n };\n}\n\nfunction CartContent({\n isLoading,\n items,\n currencyCode,\n emptyCartMessage,\n continueShopping,\n onClose,\n onUpdateQuantity,\n onRemove,\n}: {\n isLoading: boolean;\n items: CartItem[];\n currencyCode: string;\n emptyCartMessage: string;\n continueShopping: string;\n onClose: () => void;\n onUpdateQuantity: (itemId: string, quantity: number) => void;\n onRemove: (itemId: string) => void;\n}) {\n if (isLoading) return <CartLoadingSkeleton />;\n if (items.length === 0) {\n return (\n <CartEmptyState message={emptyCartMessage} onClose={onClose} buttonLabel={continueShopping} />\n );\n }\n return (\n <div className=\"space-y-6\" role=\"list\" aria-label=\"Cart items\">\n {items.map((item) => (\n <CartItemRow\n key={item.id}\n item={item}\n currencyCode={currencyCode}\n onClose={onClose}\n onUpdateQuantity={onUpdateQuantity}\n onRemove={onRemove}\n />\n ))}\n </div>\n );\n}\n\nexport function CartDrawer({ isOpen, onClose, className, labels = {} }: CartDrawerProps) {\n const CloseIcon = useIcon(\"close\");\n\n const {\n title = \"Shopping Cart\",\n emptyCartMessage = \"Your cart is empty\",\n continueShopping = \"Continue Shopping\",\n subtotal = \"Subtotal\",\n discount = \"Discount\",\n tax = \"Tax\",\n total = \"Total\",\n proceedToCheckout = \"Proceed to Checkout\",\n } = labels;\n\n const {\n drawerRef,\n closeButtonRef,\n isLoading,\n items,\n totals,\n currencyCode,\n handleKeyDown,\n handleUpdateQuantity,\n handleRemoveItem,\n } = useCartDrawer(isOpen, onClose);\n\n return (\n <>\n <div\n className={`fixed font-enad inset-0 bg-black/60 backdrop-blur-sm z-50 transition-opacity duration-300 motion-reduce:transition-none ${\n isOpen ? \"opacity-100\" : \"opacity-0 pointer-events-none\"\n }`}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n <div\n ref={drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n onKeyDown={handleKeyDown}\n className={`fixed top-0 right-0 h-full w-full md:w-[480px] bg-(--enad-surface) z-50 transform transition-transform duration-300 ease-in-out motion-reduce:transition-none ${\n isOpen ? \"translate-x-0\" : \"translate-x-full\"\n } ${className ?? \"\"}`}\n >\n <div className=\"flex flex-col h-full\">\n <div className=\"flex items-center justify-between p-6\">\n <h2 className=\"text-xl font-heading font-bold tracking-wider uppercase text-(--enad-text-primary-color)\">\n {title}\n </h2>\n <Button\n ref={closeButtonRef}\n variant=\"ghost\"\n size=\"icon\"\n onClick={onClose}\n aria-label=\"Close cart\"\n >\n <CloseIcon className=\"h-5 w-5\" />\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-6\">\n <CartContent\n isLoading={isLoading}\n items={items}\n currencyCode={currencyCode}\n emptyCartMessage={emptyCartMessage}\n continueShopping={continueShopping}\n onClose={onClose}\n onUpdateQuantity={handleUpdateQuantity}\n onRemove={handleRemoveItem}\n />\n </div>\n\n {items.length > 0 && totals && (\n <CartTotals\n totals={totals}\n currencyCode={currencyCode}\n labels={{ subtotal, discount, tax, total, proceedToCheckout }}\n />\n )}\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cart-drawer.mjs","names":[],"sources":["../../../../src/client/cart/components/cart-drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useCallback } from \"react\";\nimport { useCart } from \"../../cart/hooks/useCart\";\nimport type { CartItem, CartTotals as CartTotalsType } from \"../../cart/types/adapter\";\nimport { useIcon } from \"../../icons/icon-context\";\nimport { Button } from \"../../ui/button\";\nimport { Price } from \"../../storefront/components/price\";\nimport { QuantityPicker } from \"../../storefront/product/quantity-picker\";\n\nexport interface CartDrawerProps {\n isOpen: boolean;\n onClose: () => void;\n className?: string;\n labels?: {\n title?: string;\n emptyCartMessage?: string;\n continueShopping?: string;\n subtotal?: string;\n discount?: string;\n tax?: string;\n total?: string;\n proceedToCheckout?: string;\n };\n}\n\nfunction CartLoadingSkeleton() {\n return (\n <div className=\"space-y-6\" aria-busy=\"true\" aria-label=\"Loading cart items\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex gap-4 animate-pulse\">\n <div className=\"w-24 h-24 flex-shrink-0 bg-(--enad-border-color) rounded-(--enad-border-radius)\" />\n <div className=\"flex flex-1 flex-col gap-2\">\n <div className=\"h-4 w-3/4 bg-(--enad-border-color) rounded-(--enad-border-radius)\" />\n <div className=\"h-4 w-1/3 bg-(--enad-border-color) rounded-(--enad-border-radius)\" />\n <div className=\"h-4 w-1/4 bg-(--enad-border-color) rounded-(--enad-border-radius)\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction CartEmptyState({\n message,\n onClose,\n buttonLabel,\n}: {\n message: string;\n onClose: () => void;\n buttonLabel: string;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full text-center\">\n <p className=\"text-(--enad-text-muted-color) mb-4\">{message}</p>\n <Button onClick={onClose} variant=\"outlined\">\n {buttonLabel}\n </Button>\n </div>\n );\n}\n\nfunction CartItemImage({ imageUrl, alt }: { imageUrl?: string; alt: string }) {\n return (\n <div className=\"relative w-24 h-24 flex-shrink-0 bg-(--enad-border-color) rounded-(--enad-border-radius) overflow-hidden\">\n {imageUrl ? (\n <img src={imageUrl} alt={alt} className=\"object-cover\" />\n ) : (\n <div className=\"w-full h-full bg-(--enad-border-color)\" />\n )}\n </div>\n );\n}\n\nfunction CartItemDetails({\n item,\n currencyCode,\n onClose,\n onUpdateQuantity,\n onRemove,\n}: {\n item: CartItem;\n currencyCode: string;\n onClose: () => void;\n onUpdateQuantity: (itemId: string, quantity: number) => void;\n onRemove: (itemId: string) => void;\n}) {\n const TrashIcon = useIcon(\"trash\");\n\n return (\n <div className=\"flex flex-1 min-w-0 justify-between flex-col\">\n <div className=\"flex justify-between gap-2 mb-2\">\n <a\n href={`/products/${item.productSlug || item.productVariantId}`}\n className=\"font-medium text-sm text-(--enad-link-color) hover:text-(--enad-link-hover-color) transition-colors\"\n onClick={onClose}\n >\n {item.displayName}\n </a>\n <Button\n variant=\"plain\"\n size=\"icon\"\n className=\"h-5 w-5 flex-shrink-0\"\n onClick={() => onRemove(item.id)}\n aria-label={`Remove ${item.displayName}`}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div>\n <Price\n amount={item.unitPrice.amount / 100}\n currency={currencyCode}\n className=\"text-sm text-(--enad-text-muted-color) mb-1\"\n />\n\n <QuantityPicker\n value={item.quantity}\n onChange={(qty) => onUpdateQuantity(item.id, qty)}\n size=\"sm\"\n />\n </div>\n </div>\n );\n}\n\nfunction CartItemRow({\n item,\n currencyCode,\n onClose,\n onUpdateQuantity,\n onRemove,\n}: {\n item: CartItem;\n currencyCode: string;\n onClose: () => void;\n onUpdateQuantity: (itemId: string, quantity: number) => void;\n onRemove: (itemId: string) => void;\n}) {\n return (\n <div className=\"flex gap-4\" role=\"listitem\">\n <CartItemImage imageUrl={item.imageUrl} alt={item.displayName} />\n <CartItemDetails\n item={item}\n currencyCode={currencyCode}\n onClose={onClose}\n onUpdateQuantity={onUpdateQuantity}\n onRemove={onRemove}\n />\n </div>\n );\n}\n\nfunction CartTotals({\n totals,\n currencyCode,\n labels,\n}: {\n totals: CartTotalsType;\n currencyCode: string;\n labels: {\n subtotal: string;\n discount: string;\n tax: string;\n total: string;\n proceedToCheckout: string;\n };\n}) {\n return (\n <div className=\"p-6 space-y-4\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-(--enad-text-muted-color)\">{labels.subtotal}</span>\n <Price amount={totals.subtotal.amount / 100} currency={currencyCode} />\n </div>\n\n {totals.discount.amount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-(--enad-text-muted-color)\">{labels.discount}</span>\n <span className=\"text-(--enad-success-color)\">\n -<Price amount={totals.discount.amount / 100} currency={currencyCode} />\n </span>\n </div>\n )}\n\n {totals.tax.amount > 0 && (\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-(--enad-text-muted-color)\">{labels.tax}</span>\n <Price amount={totals.tax.amount / 100} currency={currencyCode} />\n </div>\n )}\n\n <div className=\"flex justify-between text-lg font-bold pt-4 border-t border-(--enad-border-color)\">\n <span className=\"text-(--enad-text-primary-color)\">{labels.total}</span>\n <Price amount={totals.total.amount / 100} currency={currencyCode} />\n </div>\n\n <Button className=\"w-full py-6 text-sm font-medium uppercase tracking-wider\" size=\"lg\">\n {labels.proceedToCheckout}\n </Button>\n </div>\n );\n}\n\nfunction useCartDrawer(isOpen: boolean, onClose: () => void) {\n const drawerRef = useRef<HTMLDivElement>(null);\n const closeButtonRef = useRef<HTMLButtonElement>(null);\n const { cart, isLoading, removeItem, updateItem } = useCart();\n\n useEffect(() => {\n if (isOpen) {\n const timer = setTimeout(() => closeButtonRef.current?.focus(), 100);\n return () => clearTimeout(timer);\n }\n }, [isOpen]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n }\n },\n [onClose],\n );\n\n const handleUpdateQuantity = (itemId: string, newQuantity: number) => {\n updateItem({ itemId, quantity: newQuantity });\n };\n\n const handleRemoveItem = (itemId: string) => {\n removeItem({ itemId });\n };\n\n return {\n drawerRef,\n closeButtonRef,\n cart,\n isLoading,\n items: cart?.items || [],\n totals: cart?.totals,\n currencyCode: cart?.currencyCode || \"SEK\",\n handleKeyDown,\n handleUpdateQuantity,\n handleRemoveItem,\n };\n}\n\nfunction CartContent({\n isLoading,\n items,\n currencyCode,\n emptyCartMessage,\n continueShopping,\n onClose,\n onUpdateQuantity,\n onRemove,\n}: {\n isLoading: boolean;\n items: CartItem[];\n currencyCode: string;\n emptyCartMessage: string;\n continueShopping: string;\n onClose: () => void;\n onUpdateQuantity: (itemId: string, quantity: number) => void;\n onRemove: (itemId: string) => void;\n}) {\n if (isLoading) return <CartLoadingSkeleton />;\n if (items.length === 0) {\n return (\n <CartEmptyState message={emptyCartMessage} onClose={onClose} buttonLabel={continueShopping} />\n );\n }\n return (\n <div className=\"space-y-6\" role=\"list\" aria-label=\"Cart items\">\n {items.map((item) => (\n <CartItemRow\n key={item.id}\n item={item}\n currencyCode={currencyCode}\n onClose={onClose}\n onUpdateQuantity={onUpdateQuantity}\n onRemove={onRemove}\n />\n ))}\n </div>\n );\n}\n\nexport function CartDrawer({ isOpen, onClose, className, labels = {} }: CartDrawerProps) {\n const CloseIcon = useIcon(\"close\");\n\n const {\n title = \"Shopping Cart\",\n emptyCartMessage = \"Your cart is empty\",\n continueShopping = \"Continue Shopping\",\n subtotal = \"Subtotal\",\n discount = \"Discount\",\n tax = \"Tax\",\n total = \"Total\",\n proceedToCheckout = \"Proceed to Checkout\",\n } = labels;\n\n const {\n drawerRef,\n closeButtonRef,\n isLoading,\n items,\n totals,\n currencyCode,\n handleKeyDown,\n handleUpdateQuantity,\n handleRemoveItem,\n } = useCartDrawer(isOpen, onClose);\n\n return (\n <>\n <div\n className={`fixed font-enad inset-0 bg-black/60 backdrop-blur-sm z-50 transition-opacity duration-300 motion-reduce:transition-none ${\n isOpen ? \"opacity-100\" : \"opacity-0 pointer-events-none\"\n }`}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n <div\n ref={drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n onKeyDown={handleKeyDown}\n className={`fixed top-0 right-0 h-full w-full md:w-[480px] bg-(--enad-surface) z-50 transform transition-transform duration-300 ease-in-out motion-reduce:transition-none ${\n isOpen ? \"translate-x-0\" : \"translate-x-full\"\n } ${className ?? \"\"}`}\n >\n <div className=\"flex flex-col h-full\">\n <div className=\"flex items-center justify-between p-6\">\n <h2 className=\"text-xl font-heading font-bold tracking-wider uppercase text-(--enad-text-primary-color)\">\n {title}\n </h2>\n <Button\n ref={closeButtonRef}\n variant=\"plain\"\n size=\"icon\"\n onClick={onClose}\n aria-label=\"Close cart\"\n >\n <CloseIcon className=\"h-5 w-5\" />\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-6\">\n <CartContent\n isLoading={isLoading}\n items={items}\n currencyCode={currencyCode}\n emptyCartMessage={emptyCartMessage}\n continueShopping={continueShopping}\n onClose={onClose}\n onUpdateQuantity={handleUpdateQuantity}\n onRemove={handleRemoveItem}\n />\n </div>\n\n {items.length > 0 && totals && (\n <CartTotals\n totals={totals}\n currencyCode={currencyCode}\n labels={{ subtotal, discount, tax, total, proceedToCheckout }}\n />\n )}\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ function CartTrigger({ isOpen, onOpenChange, labels = {}, className = "" }) {
11
11
  const itemCount = cart?.items?.reduce((total, item) => total + item.quantity, 0) ?? 0;
12
12
  const ariaLabel = itemCount > 0 ? `${cartLabel} (${itemCount} ${itemCount === 1 ? "item" : "items"})` : cartLabel;
13
13
  return /* @__PURE__ */ jsxs(Button, {
14
- variant: "ghost",
14
+ variant: "plain",
15
15
  className: `relative size-10 ${className}`,
16
16
  onClick: () => onOpenChange(!isOpen),
17
17
  "aria-label": ariaLabel,
@@ -1 +1 @@
1
- {"version":3,"file":"cart-trigger.mjs","names":[],"sources":["../../../../src/client/cart/components/cart-trigger.tsx"],"sourcesContent":["\"use client\"\n\nimport { Button } from \"../../ui/button\"\nimport { useIcon } from \"../../icons/icon-context\"\nimport { useCart } from \"../hooks/useCart\"\n\nexport interface CartTriggerProps {\n isOpen: boolean\n onOpenChange: (open: boolean) => void\n labels?: {\n cartLabel?: string\n }\n className?: string\n}\n\nexport function CartTrigger({\n isOpen,\n onOpenChange,\n labels = {},\n className = \"\",\n}: CartTriggerProps) {\n const CartIcon = useIcon(\"cart\")\n const { cartLabel = \"Cart\" } = labels\n const { cart } = useCart()\n\n const itemCount =\n cart?.items?.reduce((total, item) => total + item.quantity, 0) ?? 0\n\n const ariaLabel =\n itemCount > 0\n ? `${cartLabel} (${itemCount} ${itemCount === 1 ? \"item\" : \"items\"})`\n : cartLabel\n\n return (\n <Button\n variant=\"ghost\"\n className={`relative size-10 ${className}`}\n onClick={() => onOpenChange(!isOpen)}\n aria-label={ariaLabel}\n >\n <CartIcon className=\"size-5\" />\n {itemCount > 0 && (\n <span className=\"absolute -top-1 -right-1 flex size-5 items-center justify-center rounded-full bg-primary text-primary-foreground text-xs font-bold\">\n {itemCount}\n </span>\n )}\n </Button>\n )\n}\n"],"mappings":";;;;;;AAeA,SAAgB,YAAY,EAC1B,QACA,cACA,SAAS,EAAE,EACX,YAAY,MACO;CACnB,MAAM,WAAW,QAAQ,OAAO;CAChC,MAAM,EAAE,YAAY,WAAW;CAC/B,MAAM,EAAE,SAAS,SAAS;CAE1B,MAAM,YACJ,MAAM,OAAO,QAAQ,OAAO,SAAS,QAAQ,KAAK,UAAU,EAAE,IAAI;CAEpE,MAAM,YACJ,YAAY,IACR,GAAG,UAAU,IAAI,UAAU,GAAG,cAAc,IAAI,SAAS,QAAQ,KACjE;AAEN,QACE,qBAAC,QAAD;EACE,SAAQ;EACR,WAAW,oBAAoB;EAC/B,eAAe,aAAa,CAAC,OAAO;EACpC,cAAY;YAJd,CAME,oBAAC,UAAD,EAAU,WAAU,UAAW,CAAA,EAC9B,YAAY,KACX,oBAAC,QAAD;GAAM,WAAU;aACb;GACI,CAAA,CAEF"}
1
+ {"version":3,"file":"cart-trigger.mjs","names":[],"sources":["../../../../src/client/cart/components/cart-trigger.tsx"],"sourcesContent":["\"use client\";\n\nimport { Button } from \"../../ui/button\";\nimport { useIcon } from \"../../icons/icon-context\";\nimport { useCart } from \"../hooks/useCart\";\n\nexport interface CartTriggerProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n labels?: {\n cartLabel?: string;\n };\n className?: string;\n}\n\nexport function CartTrigger({\n isOpen,\n onOpenChange,\n labels = {},\n className = \"\",\n}: CartTriggerProps) {\n const CartIcon = useIcon(\"cart\");\n const { cartLabel = \"Cart\" } = labels;\n const { cart } = useCart();\n\n const itemCount = cart?.items?.reduce((total, item) => total + item.quantity, 0) ?? 0;\n\n const ariaLabel =\n itemCount > 0 ? `${cartLabel} (${itemCount} ${itemCount === 1 ? \"item\" : \"items\"})` : cartLabel;\n\n return (\n <Button\n variant=\"plain\"\n className={`relative size-10 ${className}`}\n onClick={() => onOpenChange(!isOpen)}\n aria-label={ariaLabel}\n >\n <CartIcon className=\"size-5\" />\n {itemCount > 0 && (\n <span className=\"absolute -top-1 -right-1 flex size-5 items-center justify-center rounded-full bg-primary text-primary-foreground text-xs font-bold\">\n {itemCount}\n </span>\n )}\n </Button>\n );\n}\n"],"mappings":";;;;;;AAeA,SAAgB,YAAY,EAC1B,QACA,cACA,SAAS,EAAE,EACX,YAAY,MACO;CACnB,MAAM,WAAW,QAAQ,OAAO;CAChC,MAAM,EAAE,YAAY,WAAW;CAC/B,MAAM,EAAE,SAAS,SAAS;CAE1B,MAAM,YAAY,MAAM,OAAO,QAAQ,OAAO,SAAS,QAAQ,KAAK,UAAU,EAAE,IAAI;CAEpF,MAAM,YACJ,YAAY,IAAI,GAAG,UAAU,IAAI,UAAU,GAAG,cAAc,IAAI,SAAS,QAAQ,KAAK;AAExF,QACE,qBAAC,QAAD;EACE,SAAQ;EACR,WAAW,oBAAoB;EAC/B,eAAe,aAAa,CAAC,OAAO;EACpC,cAAY;YAJd,CAME,oBAAC,UAAD,EAAU,WAAU,UAAW,CAAA,EAC9B,YAAY,KACX,oBAAC,QAAD;GAAM,WAAU;aACb;GACI,CAAA,CAEF"}
@@ -21,7 +21,7 @@ function CardVideo({ thumbnail, videoUrl, title, caption, aspectRatio = "16:9",
21
21
  }) : /* @__PURE__ */ jsx("div", { className: "size-full bg-muted" }), /* @__PURE__ */ jsx("div", {
22
22
  className: "absolute inset-0 flex items-center justify-center bg-black/20 transition-colors group-hover:bg-black/30",
23
23
  children: /* @__PURE__ */ jsx("div", {
24
- className: "flex size-14 items-center justify-center rounded-full bg-white/90 text-foreground transition-transform group-hover:scale-110",
24
+ className: "flex size-14 items-center justify-center rounded-full bg-white/90 text-foreground",
25
25
  children: /* @__PURE__ */ jsx(PlayIcon, { className: "ml-0.5 size-6 fill-current" })
26
26
  })
27
27
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"card-video.mjs","names":[],"sources":["../../../../src/client/storefront/blocks/card-video.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { useIcon } from \"../../icons/icon-context\"\nimport { cn } from \"../../ui/utils\"\nimport type { CardVideoProps } from \"../types\"\n\nconst aspectClasses: Record<string, string> = {\n \"4:3\": \"aspect-[4/3]\",\n \"1:1\": \"aspect-square\",\n \"16:9\": \"aspect-video\",\n}\n\nfunction CardVideo({\n thumbnail,\n videoUrl,\n title,\n caption,\n aspectRatio = \"16:9\",\n className,\n}: CardVideoProps) {\n const PlayIcon = useIcon(\"play\")\n const card = (\n <div className={cn(\"group overflow-hidden\", className)}>\n <div className={cn(\"relative bg-muted\", aspectClasses[aspectRatio])}>\n {thumbnail?.src ? (\n <img\n src={thumbnail.src}\n alt={thumbnail.alt ?? title ?? \"\"}\n className=\"size-full object-cover\"\n />\n ) : (\n <div className=\"size-full bg-muted\" />\n )}\n\n {/* Play button overlay */}\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/20 transition-colors group-hover:bg-black/30\">\n <div className=\"flex size-14 items-center justify-center rounded-full bg-white/90 text-foreground transition-transform group-hover:scale-110\">\n <PlayIcon className=\"ml-0.5 size-6 fill-current\" />\n </div>\n </div>\n </div>\n\n {(title || caption) && (\n <div className=\"mt-3\">\n {title && <p className=\"text-sm font-medium text-foreground\">{title}</p>}\n {caption && <p className=\"mt-1 text-sm text-muted-foreground\">{caption}</p>}\n </div>\n )}\n </div>\n )\n\n if (videoUrl) {\n return (\n <a href={videoUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"block\">\n {card}\n </a>\n )\n }\n\n return card\n}\n\nexport { CardVideo, type CardVideoProps }\n"],"mappings":";;;;;AAKA,MAAM,gBAAwC;CAC5C,OAAO;CACP,OAAO;CACP,QAAQ;CACT;AAED,SAAS,UAAU,EACjB,WACA,UACA,OACA,SACA,cAAc,QACd,aACiB;CACjB,MAAM,WAAW,QAAQ,OAAO;CAChC,MAAM,OACJ,qBAAC,OAAD;EAAK,WAAW,GAAG,yBAAyB,UAAU;YAAtD,CACE,qBAAC,OAAD;GAAK,WAAW,GAAG,qBAAqB,cAAc,aAAa;aAAnE,CACG,WAAW,MACV,oBAAC,OAAD;IACE,KAAK,UAAU;IACf,KAAK,UAAU,OAAO,SAAS;IAC/B,WAAU;IACV,CAAA,GAEF,oBAAC,OAAD,EAAK,WAAU,sBAAuB,CAAA,EAIxC,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,UAAD,EAAU,WAAU,8BAA+B,CAAA;KAC/C,CAAA;IACF,CAAA,CACF;OAEJ,SAAS,YACT,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,SAAS,oBAAC,KAAD;IAAG,WAAU;cAAuC;IAAU,CAAA,EACvE,WAAW,oBAAC,KAAD;IAAG,WAAU;cAAsC;IAAY,CAAA,CACvE;KAEJ;;AAGR,KAAI,SACF,QACE,oBAAC,KAAD;EAAG,MAAM;EAAU,QAAO;EAAS,KAAI;EAAsB,WAAU;YACpE;EACC,CAAA;AAIR,QAAO"}
1
+ {"version":3,"file":"card-video.mjs","names":[],"sources":["../../../../src/client/storefront/blocks/card-video.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useIcon } from \"../../icons/icon-context\";\nimport { cn } from \"../../ui/utils\";\nimport type { CardVideoProps } from \"../types\";\n\nconst aspectClasses: Record<string, string> = {\n \"4:3\": \"aspect-[4/3]\",\n \"1:1\": \"aspect-square\",\n \"16:9\": \"aspect-video\",\n};\n\nfunction CardVideo({\n thumbnail,\n videoUrl,\n title,\n caption,\n aspectRatio = \"16:9\",\n className,\n}: CardVideoProps) {\n const PlayIcon = useIcon(\"play\");\n const card = (\n <div className={cn(\"group overflow-hidden\", className)}>\n <div className={cn(\"relative bg-muted\", aspectClasses[aspectRatio])}>\n {thumbnail?.src ? (\n <img\n src={thumbnail.src}\n alt={thumbnail.alt ?? title ?? \"\"}\n className=\"size-full object-cover\"\n />\n ) : (\n <div className=\"size-full bg-muted\" />\n )}\n\n {/* Play button overlay */}\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/20 transition-colors group-hover:bg-black/30\">\n <div className=\"flex size-14 items-center justify-center rounded-full bg-white/90 text-foreground\">\n <PlayIcon className=\"ml-0.5 size-6 fill-current\" />\n </div>\n </div>\n </div>\n\n {(title || caption) && (\n <div className=\"mt-3\">\n {title && <p className=\"text-sm font-medium text-foreground\">{title}</p>}\n {caption && <p className=\"mt-1 text-sm text-muted-foreground\">{caption}</p>}\n </div>\n )}\n </div>\n );\n\n if (videoUrl) {\n return (\n <a href={videoUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"block\">\n {card}\n </a>\n );\n }\n\n return card;\n}\n\nexport { CardVideo, type CardVideoProps };\n"],"mappings":";;;;;AAKA,MAAM,gBAAwC;CAC5C,OAAO;CACP,OAAO;CACP,QAAQ;CACT;AAED,SAAS,UAAU,EACjB,WACA,UACA,OACA,SACA,cAAc,QACd,aACiB;CACjB,MAAM,WAAW,QAAQ,OAAO;CAChC,MAAM,OACJ,qBAAC,OAAD;EAAK,WAAW,GAAG,yBAAyB,UAAU;YAAtD,CACE,qBAAC,OAAD;GAAK,WAAW,GAAG,qBAAqB,cAAc,aAAa;aAAnE,CACG,WAAW,MACV,oBAAC,OAAD;IACE,KAAK,UAAU;IACf,KAAK,UAAU,OAAO,SAAS;IAC/B,WAAU;IACV,CAAA,GAEF,oBAAC,OAAD,EAAK,WAAU,sBAAuB,CAAA,EAIxC,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,UAAD,EAAU,WAAU,8BAA+B,CAAA;KAC/C,CAAA;IACF,CAAA,CACF;OAEJ,SAAS,YACT,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,SAAS,oBAAC,KAAD;IAAG,WAAU;cAAuC;IAAU,CAAA,EACvE,WAAW,oBAAC,KAAD;IAAG,WAAU;cAAsC;IAAY,CAAA,CACvE;KAEJ;;AAGR,KAAI,SACF,QACE,oBAAC,KAAD;EAAG,MAAM;EAAU,QAAO;EAAS,KAAI;EAAsB,WAAU;YACpE;EACC,CAAA;AAIR,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"gallery-with-link-blocks.d.ts","names":[],"sources":["../../../../src/client/storefront/blocks/gallery-with-link-blocks.tsx"],"mappings":";;;;iBAIS,qBAAA,CAAA;EACP,OAAA;EACA,QAAA;EACA;AAAA,GACC,0BAAA,GAA0B,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"gallery-with-link-blocks.d.ts","names":[],"sources":["../../../../src/client/storefront/blocks/gallery-with-link-blocks.tsx"],"mappings":";;;;iBAKS,qBAAA,CAAA;EAAwB,OAAA;EAAS,QAAA;EAAU;AAAA,GAAa,0BAAA,GAA0B,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,4 +1,5 @@
1
1
  import { cn } from "../../ui/utils.mjs";
2
+ import { Carousel, CarouselContent, CarouselItem } from "../../ui-resolver/carousel.mjs";
2
3
  import * as React$1 from "react";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
4
5
  //#region src/client/storefront/blocks/gallery-with-link-blocks.tsx
@@ -17,11 +18,18 @@ function GalleryWithLinkBlocks({ heading, children, className }) {
17
18
  children: heading
18
19
  })
19
20
  }), /* @__PURE__ */ jsx("div", {
20
- className: "flex gap-4 overflow-x-auto px-4 scrollbar-none md:px-8",
21
- children: React$1.Children.map(children, (child) => /* @__PURE__ */ jsx("div", {
22
- className: "w-52 shrink-0 sm:w-60 md:w-72 lg:w-80",
23
- children: child
24
- }))
21
+ className: "px-4 md:px-8",
22
+ children: /* @__PURE__ */ jsx(Carousel, {
23
+ opts: {
24
+ align: "start",
25
+ slidesToScroll: "auto",
26
+ containScroll: "trimSnaps"
27
+ },
28
+ children: /* @__PURE__ */ jsx(CarouselContent, { children: React$1.Children.map(children, (child, i) => /* @__PURE__ */ jsx(CarouselItem, {
29
+ className: "basis-auto w-52 sm:w-60 md:w-72 lg:w-80",
30
+ children: child
31
+ }, i)) })
32
+ })
25
33
  })]
26
34
  });
27
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gallery-with-link-blocks.mjs","names":["React"],"sources":["../../../../src/client/storefront/blocks/gallery-with-link-blocks.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { cn } from \"../../ui/utils\"\nimport type { GalleryWithLinkBlocksProps } from \"../types\"\n\nfunction GalleryWithLinkBlocks({\n heading,\n children,\n className,\n}: GalleryWithLinkBlocksProps) {\n return (\n <section className={cn(\"py-12\", className)}>\n <div className=\"mx-auto max-w-7xl px-4 md:px-8\">\n {heading && (\n <h2\n className=\"mb-6 text-2xl font-heading text-foreground md:text-3xl\"\n style={{ fontWeight: \"var(--enad-heading-weight)\", letterSpacing: \"var(--enad-heading-tracking)\", textTransform: \"var(--enad-heading-transform)\" } as unknown as React.CSSProperties}\n >\n {heading}\n </h2>\n )}\n </div>\n <div className=\"flex gap-4 overflow-x-auto px-4 scrollbar-none md:px-8\">\n {React.Children.map(children, (child) => (\n <div className=\"w-52 shrink-0 sm:w-60 md:w-72 lg:w-80\">{child}</div>\n ))}\n </div>\n </section>\n )\n}\n\nexport { GalleryWithLinkBlocks, type GalleryWithLinkBlocksProps }\n"],"mappings":";;;;AAIA,SAAS,sBAAsB,EAC7B,SACA,UACA,aAC6B;AAC7B,QACE,qBAAC,WAAD;EAAS,WAAW,GAAG,SAAS,UAAU;YAA1C,CACE,oBAAC,OAAD;GAAK,WAAU;aACZ,WACC,oBAAC,MAAD;IACE,WAAU;IACV,OAAO;KAAE,YAAY;KAA8B,eAAe;KAAgC,eAAe;KAAiC;cAEjJ;IACE,CAAA;GAEH,CAAA,EACN,oBAAC,OAAD;GAAK,WAAU;aACZA,QAAM,SAAS,IAAI,WAAW,UAC7B,oBAAC,OAAD;IAAK,WAAU;cAAyC;IAAY,CAAA,CACpE;GACE,CAAA,CACE"}
1
+ {"version":3,"file":"gallery-with-link-blocks.mjs","names":["React"],"sources":["../../../../src/client/storefront/blocks/gallery-with-link-blocks.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../ui/utils\";\nimport { Carousel, CarouselContent, CarouselItem } from \"../../ui-resolver/carousel\";\nimport type { GalleryWithLinkBlocksProps } from \"../types\";\n\nfunction GalleryWithLinkBlocks({ heading, children, className }: GalleryWithLinkBlocksProps) {\n return (\n <section className={cn(\"py-12\", className)}>\n <div className=\"mx-auto max-w-7xl px-4 md:px-8\">\n {heading && (\n <h2\n className=\"mb-6 text-2xl font-heading text-foreground md:text-3xl\"\n style={\n {\n fontWeight: \"var(--enad-heading-weight)\",\n letterSpacing: \"var(--enad-heading-tracking)\",\n textTransform: \"var(--enad-heading-transform)\",\n } as unknown as React.CSSProperties\n }\n >\n {heading}\n </h2>\n )}\n </div>\n <div className=\"px-4 md:px-8\">\n <Carousel opts={{ align: \"start\", slidesToScroll: \"auto\", containScroll: \"trimSnaps\" }}>\n <CarouselContent>\n {React.Children.map(children, (child, i) => (\n <CarouselItem key={i} className=\"basis-auto w-52 sm:w-60 md:w-72 lg:w-80\">\n {child}\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n </div>\n </section>\n );\n}\n\nexport { GalleryWithLinkBlocks, type GalleryWithLinkBlocksProps };\n"],"mappings":";;;;;AAKA,SAAS,sBAAsB,EAAE,SAAS,UAAU,aAAyC;AAC3F,QACE,qBAAC,WAAD;EAAS,WAAW,GAAG,SAAS,UAAU;YAA1C,CACE,oBAAC,OAAD;GAAK,WAAU;aACZ,WACC,oBAAC,MAAD;IACE,WAAU;IACV,OACE;KACE,YAAY;KACZ,eAAe;KACf,eAAe;KAChB;cAGF;IACE,CAAA;GAEH,CAAA,EACN,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,UAAD;IAAU,MAAM;KAAE,OAAO;KAAS,gBAAgB;KAAQ,eAAe;KAAa;cACpF,oBAAC,iBAAD,EAAA,UACGA,QAAM,SAAS,IAAI,WAAW,OAAO,MACpC,oBAAC,cAAD;KAAsB,WAAU;eAC7B;KACY,EAFI,EAEJ,CACf,EACc,CAAA;IACT,CAAA;GACP,CAAA,CACE"}
@@ -2,6 +2,15 @@ import { GalleryProps } from "../types.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/client/storefront/blocks/gallery.d.ts
5
+ declare const galleryRecipe: (props?: ({
6
+ layout?: "grid" | "masonry" | "filmstrip" | undefined;
7
+ } & {
8
+ className?: Partial<Record<"grid" | "root" | "heading", string>> | undefined;
9
+ }) | undefined) => {
10
+ grid: string;
11
+ root: string;
12
+ heading: string;
13
+ };
5
14
  declare function Gallery({
6
15
  heading,
7
16
  variant,
@@ -9,5 +18,5 @@ declare function Gallery({
9
18
  className
10
19
  }: GalleryProps): react_jsx_runtime0.JSX.Element | null;
11
20
  //#endregion
12
- export { Gallery, type GalleryProps };
21
+ export { Gallery, type GalleryProps, galleryRecipe };
13
22
  //# sourceMappingURL=gallery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gallery.d.ts","names":[],"sources":["../../../../src/client/storefront/blocks/gallery.tsx"],"mappings":";;;;iBAIS,OAAA,CAAA;EAAU,OAAA;EAAS,OAAA;EAAkB,QAAA;EAAU;AAAA,GAAa,YAAA,GAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"gallery.d.ts","names":[],"sources":["../../../../src/client/storefront/blocks/gallery.tsx"],"mappings":";;;;cAOM,aAAA,GAAa,KAAA;;;cAqBjB,OAAA,CAAA,MAAA;AAAA;;;;;iBAQO,OAAA,CAAA;EAAU,OAAA;EAAS,OAAA;EAAS,QAAA;EAAU;AAAA,GAAa,YAAA,GAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,54 +1,78 @@
1
1
  import { cn } from "../../ui/utils.mjs";
2
+ import { defineSlotRecipe } from "../../ui-resolver/recipe.mjs";
3
+ import { useVariantDefault } from "../../ui-resolver/context.mjs";
4
+ import { Carousel, CarouselContent, CarouselItem } from "../../ui-resolver/carousel.mjs";
2
5
  import * as React$1 from "react";
3
6
  import { jsx, jsxs } from "react/jsx-runtime";
4
7
  //#region src/client/storefront/blocks/gallery.tsx
5
- function Gallery({ heading, variant = "grid", children, className }) {
8
+ const galleryRecipe = defineSlotRecipe({
9
+ slots: [
10
+ "root",
11
+ "heading",
12
+ "grid"
13
+ ],
14
+ base: {
15
+ root: "px-4 py-12 md:px-8",
16
+ heading: "mb-6 text-2xl font-heading text-foreground md:text-3xl",
17
+ grid: ""
18
+ },
19
+ variants: { layout: {
20
+ grid: { grid: "grid gap-[var(--enad-gallery-gap,1rem)]" },
21
+ masonry: { grid: "columns-2 gap-[var(--enad-gallery-gap,1rem)] md:columns-3 [&>*]:mb-[var(--enad-gallery-gap,1rem)] [&>*]:break-inside-avoid" },
22
+ filmstrip: { grid: "flex gap-[var(--enad-gallery-gap,1rem)] overflow-x-auto snap-x snap-mandatory scrollbar-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 [&>*]:w-64 [&>*]:shrink-0 [&>*]:snap-start md:[&>*]:w-80" }
23
+ } },
24
+ defaultVariants: { layout: "grid" }
25
+ });
26
+ const headingStyle = {
27
+ fontWeight: "var(--enad-heading-weight)",
28
+ letterSpacing: "var(--enad-heading-tracking)",
29
+ textTransform: "var(--enad-heading-transform)"
30
+ };
31
+ function Gallery({ heading, variant, children, className }) {
32
+ const galleryDefault = useVariantDefault("gallery");
33
+ const layout = variant ?? galleryDefault ?? "grid";
6
34
  const childCount = React$1.Children.count(children);
7
35
  if (childCount === 0) return null;
36
+ const classes = galleryRecipe({ layout });
37
+ const gridColsClass = layout === "grid" ? childCount === 1 ? "grid-cols-1" : "grid-cols-2 md:grid-cols-3 lg:grid-cols-[repeat(var(--enad-gallery-columns,4),minmax(0,1fr))]" : "";
8
38
  const headingEl = heading ? /* @__PURE__ */ jsx("h2", {
9
- className: "mb-6 text-2xl font-heading text-foreground md:text-3xl",
10
- style: {
11
- fontWeight: "var(--enad-heading-weight)",
12
- letterSpacing: "var(--enad-heading-tracking)",
13
- textTransform: "var(--enad-heading-transform)"
14
- },
39
+ className: classes.heading,
40
+ style: headingStyle,
15
41
  children: heading
16
42
  }) : null;
17
- if (variant === "masonry") return /* @__PURE__ */ jsx("section", {
18
- className: cn("px-4 py-12 md:px-8", className),
43
+ if (layout === "filmstrip") return /* @__PURE__ */ jsx("section", {
44
+ className: cn(classes.root, className),
19
45
  children: /* @__PURE__ */ jsxs("div", {
20
46
  className: "mx-auto max-w-7xl",
21
- children: [headingEl, /* @__PURE__ */ jsx("div", {
22
- className: "columns-2 gap-4 md:columns-3 [&>*]:mb-4 [&>*]:break-inside-avoid",
23
- children
24
- })]
25
- })
26
- });
27
- if (variant === "filmstrip") return /* @__PURE__ */ jsx("section", {
28
- className: cn("px-4 py-12 md:px-8", className),
29
- children: /* @__PURE__ */ jsxs("div", {
30
- className: "mx-auto max-w-7xl",
31
- children: [headingEl, /* @__PURE__ */ jsx("div", {
32
- role: "region",
47
+ children: [headingEl, /* @__PURE__ */ jsx(Carousel, {
48
+ opts: {
49
+ align: "start",
50
+ slidesToScroll: "auto",
51
+ containScroll: "trimSnaps"
52
+ },
33
53
  "aria-label": heading ?? "Gallery",
34
- tabIndex: 0,
35
- className: "flex gap-4 overflow-x-auto snap-x snap-mandatory scrollbar-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 [&>*]:w-64 [&>*]:shrink-0 [&>*]:snap-start md:[&>*]:w-80",
36
- children
54
+ children: /* @__PURE__ */ jsx(CarouselContent, {
55
+ className: "-ml-[var(--enad-gallery-gap,1rem)]",
56
+ children: React$1.Children.map(children, (child, i) => /* @__PURE__ */ jsx(CarouselItem, {
57
+ className: "basis-auto pl-[var(--enad-gallery-gap,1rem)] w-64 md:w-80",
58
+ children: child
59
+ }, i))
60
+ })
37
61
  })]
38
62
  })
39
63
  });
40
64
  return /* @__PURE__ */ jsx("section", {
41
- className: cn("px-4 py-12 md:px-8", className),
65
+ className: cn(classes.root, className),
42
66
  children: /* @__PURE__ */ jsxs("div", {
43
67
  className: "mx-auto max-w-7xl",
44
68
  children: [headingEl, /* @__PURE__ */ jsx("div", {
45
- className: cn("grid gap-4", childCount === 1 ? "grid-cols-1" : "grid-cols-2 md:grid-cols-3 lg:grid-cols-4"),
69
+ className: cn(classes.grid, gridColsClass),
46
70
  children
47
71
  })]
48
72
  })
49
73
  });
50
74
  }
51
75
  //#endregion
52
- export { Gallery };
76
+ export { Gallery, galleryRecipe };
53
77
 
54
78
  //# sourceMappingURL=gallery.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"gallery.mjs","names":["React"],"sources":["../../../../src/client/storefront/blocks/gallery.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { cn } from \"../../ui/utils\"\nimport type { GalleryProps } from \"../types\"\n\nfunction Gallery({ heading, variant = \"grid\", children, className }: GalleryProps) {\n const childCount = React.Children.count(children)\n\n if (childCount === 0) return null\n\n const headingEl = heading ? (\n <h2\n className=\"mb-6 text-2xl font-heading text-foreground md:text-3xl\"\n style={{ fontWeight: \"var(--enad-heading-weight)\", letterSpacing: \"var(--enad-heading-tracking)\", textTransform: \"var(--enad-heading-transform)\" } as unknown as React.CSSProperties}\n >\n {heading}\n </h2>\n ) : null\n\n /* ─── Masonry variant ─── */\n if (variant === \"masonry\") {\n return (\n <section className={cn(\"px-4 py-12 md:px-8\", className)}>\n <div className=\"mx-auto max-w-7xl\">\n {headingEl}\n <div className=\"columns-2 gap-4 md:columns-3 [&>*]:mb-4 [&>*]:break-inside-avoid\">\n {children}\n </div>\n </div>\n </section>\n )\n }\n\n /* ─── Filmstrip variant ─── */\n if (variant === \"filmstrip\") {\n return (\n <section className={cn(\"px-4 py-12 md:px-8\", className)}>\n <div className=\"mx-auto max-w-7xl\">\n {headingEl}\n <div\n role=\"region\"\n aria-label={heading ?? \"Gallery\"}\n tabIndex={0}\n className=\"flex gap-4 overflow-x-auto snap-x snap-mandatory scrollbar-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 [&>*]:w-64 [&>*]:shrink-0 [&>*]:snap-start md:[&>*]:w-80\"\n >\n {children}\n </div>\n </div>\n </section>\n )\n }\n\n /* ─── Grid variant (default) ─── */\n return (\n <section className={cn(\"px-4 py-12 md:px-8\", className)}>\n <div className=\"mx-auto max-w-7xl\">\n {headingEl}\n <div className={cn(\n \"grid gap-4\",\n childCount === 1\n ? \"grid-cols-1\"\n : \"grid-cols-2 md:grid-cols-3 lg:grid-cols-4\",\n )}>\n {children}\n </div>\n </div>\n </section>\n )\n}\n\nexport { Gallery, type GalleryProps }\n"],"mappings":";;;;AAIA,SAAS,QAAQ,EAAE,SAAS,UAAU,QAAQ,UAAU,aAA2B;CACjF,MAAM,aAAaA,QAAM,SAAS,MAAM,SAAS;AAEjD,KAAI,eAAe,EAAG,QAAO;CAE7B,MAAM,YAAY,UAChB,oBAAC,MAAD;EACE,WAAU;EACV,OAAO;GAAE,YAAY;GAA8B,eAAe;GAAgC,eAAe;GAAiC;YAEjJ;EACE,CAAA,GACH;AAGJ,KAAI,YAAY,UACd,QACE,oBAAC,WAAD;EAAS,WAAW,GAAG,sBAAsB,UAAU;YACrD,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,WACD,oBAAC,OAAD;IAAK,WAAU;IACZ;IACG,CAAA,CACF;;EACE,CAAA;AAKd,KAAI,YAAY,YACd,QACE,oBAAC,WAAD;EAAS,WAAW,GAAG,sBAAsB,UAAU;YACrD,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,WACD,oBAAC,OAAD;IACE,MAAK;IACL,cAAY,WAAW;IACvB,UAAU;IACV,WAAU;IAET;IACG,CAAA,CACF;;EACE,CAAA;AAKd,QACE,oBAAC,WAAD;EAAS,WAAW,GAAG,sBAAsB,UAAU;YACrD,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,WACD,oBAAC,OAAD;IAAK,WAAW,GACd,cACA,eAAe,IACX,gBACA,4CACL;IACE;IACG,CAAA,CACF;;EACE,CAAA"}
1
+ {"version":3,"file":"gallery.mjs","names":["React"],"sources":["../../../../src/client/storefront/blocks/gallery.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../ui/utils\";\nimport { Carousel, CarouselContent, CarouselItem } from \"../../ui-resolver/carousel\";\nimport { defineSlotRecipe } from \"../../ui-resolver/recipe\";\nimport { useVariantDefault } from \"../../ui-resolver/context\";\nimport type { GalleryProps } from \"../types\";\n\nconst galleryRecipe = defineSlotRecipe({\n slots: [\"root\", \"heading\", \"grid\"] as const,\n base: {\n root: \"px-4 py-12 md:px-8\",\n heading: \"mb-6 text-2xl font-heading text-foreground md:text-3xl\",\n grid: \"\",\n },\n variants: {\n layout: {\n grid: {\n grid: \"grid gap-[var(--enad-gallery-gap,1rem)]\",\n },\n masonry: {\n grid: \"columns-2 gap-[var(--enad-gallery-gap,1rem)] md:columns-3 [&>*]:mb-[var(--enad-gallery-gap,1rem)] [&>*]:break-inside-avoid\",\n },\n filmstrip: {\n grid: \"flex gap-[var(--enad-gallery-gap,1rem)] overflow-x-auto snap-x snap-mandatory scrollbar-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 [&>*]:w-64 [&>*]:shrink-0 [&>*]:snap-start md:[&>*]:w-80\",\n },\n },\n },\n defaultVariants: { layout: \"grid\" },\n});\n\nconst headingStyle = {\n fontWeight: \"var(--enad-heading-weight)\",\n letterSpacing: \"var(--enad-heading-tracking)\",\n textTransform: \"var(--enad-heading-transform)\",\n} as unknown as React.CSSProperties;\n\nfunction Gallery({ heading, variant, children, className }: GalleryProps) {\n const galleryDefault = useVariantDefault(\"gallery\");\n const layout = variant ?? galleryDefault ?? \"grid\";\n const childCount = React.Children.count(children);\n\n if (childCount === 0) return null;\n\n const classes = galleryRecipe({ layout });\n\n const gridColsClass =\n layout === \"grid\"\n ? childCount === 1\n ? \"grid-cols-1\"\n : \"grid-cols-2 md:grid-cols-3 lg:grid-cols-[repeat(var(--enad-gallery-columns,4),minmax(0,1fr))]\"\n : \"\";\n\n const headingEl = heading ? (\n <h2 className={classes.heading} style={headingStyle}>\n {heading}\n </h2>\n ) : null;\n\n if (layout === \"filmstrip\") {\n return (\n <section className={cn(classes.root, className)}>\n <div className=\"mx-auto max-w-7xl\">\n {headingEl}\n <Carousel\n opts={{ align: \"start\", slidesToScroll: \"auto\", containScroll: \"trimSnaps\" }}\n aria-label={heading ?? \"Gallery\"}\n >\n <CarouselContent className=\"-ml-[var(--enad-gallery-gap,1rem)]\">\n {React.Children.map(children, (child, i) => (\n <CarouselItem\n key={i}\n className=\"basis-auto pl-[var(--enad-gallery-gap,1rem)] w-64 md:w-80\"\n >\n {child}\n </CarouselItem>\n ))}\n </CarouselContent>\n </Carousel>\n </div>\n </section>\n );\n }\n\n return (\n <section className={cn(classes.root, className)}>\n <div className=\"mx-auto max-w-7xl\">\n {headingEl}\n <div className={cn(classes.grid, gridColsClass)}>{children}</div>\n </div>\n </section>\n );\n}\n\nexport { Gallery, galleryRecipe, type GalleryProps };\n"],"mappings":";;;;;;;AAOA,MAAM,gBAAgB,iBAAiB;CACrC,OAAO;EAAC;EAAQ;EAAW;EAAO;CAClC,MAAM;EACJ,MAAM;EACN,SAAS;EACT,MAAM;EACP;CACD,UAAU,EACR,QAAQ;EACN,MAAM,EACJ,MAAM,2CACP;EACD,SAAS,EACP,MAAM,8HACP;EACD,WAAW,EACT,MAAM,6PACP;EACF,EACF;CACD,iBAAiB,EAAE,QAAQ,QAAQ;CACpC,CAAC;AAEF,MAAM,eAAe;CACnB,YAAY;CACZ,eAAe;CACf,eAAe;CAChB;AAED,SAAS,QAAQ,EAAE,SAAS,SAAS,UAAU,aAA2B;CACxE,MAAM,iBAAiB,kBAAkB,UAAU;CACnD,MAAM,SAAS,WAAW,kBAAkB;CAC5C,MAAM,aAAaA,QAAM,SAAS,MAAM,SAAS;AAEjD,KAAI,eAAe,EAAG,QAAO;CAE7B,MAAM,UAAU,cAAc,EAAE,QAAQ,CAAC;CAEzC,MAAM,gBACJ,WAAW,SACP,eAAe,IACb,gBACA,kGACF;CAEN,MAAM,YAAY,UAChB,oBAAC,MAAD;EAAI,WAAW,QAAQ;EAAS,OAAO;YACpC;EACE,CAAA,GACH;AAEJ,KAAI,WAAW,YACb,QACE,oBAAC,WAAD;EAAS,WAAW,GAAG,QAAQ,MAAM,UAAU;YAC7C,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,WACD,oBAAC,UAAD;IACE,MAAM;KAAE,OAAO;KAAS,gBAAgB;KAAQ,eAAe;KAAa;IAC5E,cAAY,WAAW;cAEvB,oBAAC,iBAAD;KAAiB,WAAU;eACxBA,QAAM,SAAS,IAAI,WAAW,OAAO,MACpC,oBAAC,cAAD;MAEE,WAAU;gBAET;MACY,EAJR,EAIQ,CACf;KACc,CAAA;IACT,CAAA,CACP;;EACE,CAAA;AAId,QACE,oBAAC,WAAD;EAAS,WAAW,GAAG,QAAQ,MAAM,UAAU;YAC7C,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,WACD,oBAAC,OAAD;IAAK,WAAW,GAAG,QAAQ,MAAM,cAAc;IAAG;IAAe,CAAA,CAC7D;;EACE,CAAA"}
@@ -2,7 +2,18 @@ import { HeroProps } from "../types.js";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/client/storefront/blocks/hero.d.ts
5
+ declare const heroRecipe: (props?: ({
6
+ layout?: "overlay" | "minimal" | "split" | "banner" | "image-only" | undefined;
7
+ contentWidth?: "sm" | "md" | "lg" | undefined;
8
+ } & {
9
+ className?: Partial<Record<"overlay" | "root" | "content" | "background", string>> | undefined;
10
+ }) | undefined) => {
11
+ overlay: string;
12
+ root: string;
13
+ content: string;
14
+ background: string;
15
+ };
5
16
  declare function Hero(props: HeroProps): react_jsx_runtime0.JSX.Element;
6
17
  //#endregion
7
- export { Hero, type HeroProps };
18
+ export { Hero, type HeroProps, heroRecipe };
8
19
  //# sourceMappingURL=hero.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hero.d.ts","names":[],"sources":["../../../../src/client/storefront/blocks/hero.tsx"],"mappings":";;;;iBA4bS,IAAA,CAAK,KAAA,EAAO,SAAA,GAAS,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"hero.d.ts","names":[],"sources":["../../../../src/client/storefront/blocks/hero.tsx"],"mappings":";;;;cAkBM,UAAA,GAAU,KAAA;;;;cAoCd,OAAA,CAAA,MAAA;AAAA;;;;;;iBAgTO,IAAA,CAAK,KAAA,EAAO,SAAA,GAAS,kBAAA,CAAA,GAAA,CAAA,OAAA"}