@snacky/ui 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -396,6 +396,32 @@ interface SectionProps {
396
396
  */
397
397
  declare function Section({ title, onAction, children, className }: SectionProps): react.JSX.Element;
398
398
 
399
+ type ProductGroupLayout = 'horizontal' | 'banner' | 'grid';
400
+ interface ProductGroupSectionProps {
401
+ title: string;
402
+ /**
403
+ * `horizontal`: one scrolling row of cards (Figma Section `Group-Products-Horizontal`).
404
+ * `banner`: the row laid over a full-bleed banner from x160, scrolling over it (`Group-Products-Banner`).
405
+ * `grid`: two columns (`Group-Products-vertical`).
406
+ */
407
+ layout: ProductGroupLayout;
408
+ /** The products, normally `ProductCard`s with `variant="list"`. */
409
+ children: ReactNode;
410
+ /** Shows the header chevron and, in the scrolling layouts, the trailing "See other products" card. */
411
+ onSeeMore?: () => void;
412
+ seeMoreLabel?: string;
413
+ /** Required for `layout="banner"`, normally a `SquareBanner`. It sits still behind the scrolling row. */
414
+ banner?: ReactNode;
415
+ className?: string;
416
+ }
417
+ /**
418
+ * Snacky Product Group Section: a titled group of product cards, the pattern
419
+ * behind three of Figma's Section variants (8 instances across Home and product
420
+ * detail). Section itself stays a generic shell; this packages the product
421
+ * layouts so they can be used by name instead of rebuilt by hand.
422
+ */
423
+ declare function ProductGroupSection({ title, layout, children, onSeeMore, seeMoreLabel, banner, className, }: ProductGroupSectionProps): react.JSX.Element;
424
+
399
425
  type StepState = 'done' | 'pending' | 'cancelled';
400
426
  interface Step {
401
427
  label: string;
@@ -585,7 +611,7 @@ interface IconProps extends SVGProps<SVGSVGElement> {
585
611
  }
586
612
 
587
613
  declare const account$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
588
- declare const address: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
614
+ declare const address$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
589
615
  declare const back: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
590
616
  declare const balance$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
591
617
  declare const bell$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
@@ -627,7 +653,6 @@ declare const trash: ({ width, height, color, ...rest }: IconProps) => react.JSX
627
653
  declare const truck$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
628
654
  declare const unsent: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
629
655
 
630
- declare const outline_address: typeof address;
631
656
  declare const outline_back: typeof back;
632
657
  declare const outline_calendar: typeof calendar;
633
658
  declare const outline_camera: typeof camera;
@@ -661,10 +686,11 @@ declare const outline_smartphone: typeof smartphone;
661
686
  declare const outline_trash: typeof trash;
662
687
  declare const outline_unsent: typeof unsent;
663
688
  declare namespace outline {
664
- export { account$1 as account, outline_address as address, outline_back as back, balance$1 as balance, bell$1 as bell, outline_calendar as calendar, outline_camera as camera, cart$1 as cart, outline_cartAdd as cartAdd, category$1 as category, outline_chat as chat, outline_chevronDown as chevronDown, outline_chevronRight as chevronRight, outline_chevronUp as chevronUp, outline_close as close, outline_closeInput as closeInput, outline_creditCard as creditCard, outline_document as document, outline_edit as edit, outline_eye as eye, outline_eyeOff as eyeOff, heart$1 as heart, outline_help as help, history$1 as history, home$1 as home, outline_key as key, outline_lock as lock, outline_logout as logout, outline_map as map, outline_messageSquare as messageSquare, outline_minus as minus, outline_phone as phone, outline_plus as plus, outline_referral as referral, outline_search as search, outline_send as send, outline_sent as sent, outline_share as share, outline_smartphone as smartphone, outline_trash as trash, truck$1 as truck, outline_unsent as unsent };
689
+ export { account$1 as account, address$1 as address, outline_back as back, balance$1 as balance, bell$1 as bell, outline_calendar as calendar, outline_camera as camera, cart$1 as cart, outline_cartAdd as cartAdd, category$1 as category, outline_chat as chat, outline_chevronDown as chevronDown, outline_chevronRight as chevronRight, outline_chevronUp as chevronUp, outline_close as close, outline_closeInput as closeInput, outline_creditCard as creditCard, outline_document as document, outline_edit as edit, outline_eye as eye, outline_eyeOff as eyeOff, heart$1 as heart, outline_help as help, history$1 as history, home$1 as home, outline_key as key, outline_lock as lock, outline_logout as logout, outline_map as map, outline_messageSquare as messageSquare, outline_minus as minus, outline_phone as phone, outline_plus as plus, outline_referral as referral, outline_search as search, outline_send as send, outline_sent as sent, outline_share as share, outline_smartphone as smartphone, outline_trash as trash, truck$1 as truck, outline_unsent as unsent };
665
690
  }
666
691
 
667
692
  declare const account: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
693
+ declare const address: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
668
694
  declare const angleSmallRight: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
669
695
  declare const balance: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
670
696
  declare const bell: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
@@ -678,6 +704,7 @@ declare const star: ({ width, height, color, ...rest }: IconProps) => react.JSX.
678
704
  declare const truck: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
679
705
 
680
706
  declare const solid_account: typeof account;
707
+ declare const solid_address: typeof address;
681
708
  declare const solid_angleSmallRight: typeof angleSmallRight;
682
709
  declare const solid_balance: typeof balance;
683
710
  declare const solid_bell: typeof bell;
@@ -690,7 +717,7 @@ declare const solid_points: typeof points;
690
717
  declare const solid_star: typeof star;
691
718
  declare const solid_truck: typeof truck;
692
719
  declare namespace solid {
693
- export { solid_account as account, solid_angleSmallRight as angleSmallRight, solid_balance as balance, solid_bell as bell, solid_cart as cart, solid_category as category, solid_heart as heart, solid_history as history, solid_home as home, solid_points as points, solid_star as star, solid_truck as truck };
720
+ export { solid_account as account, solid_address as address, solid_angleSmallRight as angleSmallRight, solid_balance as balance, solid_bell as bell, solid_cart as cart, solid_category as category, solid_heart as heart, solid_history as history, solid_home as home, solid_points as points, solid_star as star, solid_truck as truck };
694
721
  }
695
722
 
696
723
  /** Matches the `<SnackyIcons.outline.home />` / `<SnackyIcons.solid.home />` namespace used throughout the design system's documented code samples. */
@@ -699,4 +726,4 @@ declare const SnackyIcons: {
699
726
  solid: typeof solid;
700
727
  };
701
728
 
702
- export { Accordion, type AccordionProps, AddressResult, type AddressResultProps, AlertBanner, type AlertBannerProps, Avatar, type AvatarProps, type AvatarSize, BottomSheet, type BottomSheetProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Callout, type CalloutProps, type CalloutVariant, ChatInput, type ChatInputProps, Checkbox, type CheckboxProps, CopyField, type CopyFieldProps, DiscountTag, type DiscountTagProps, FilterChip, type FilterChipProps, FullWidthBanner, Header, type HeaderLeadingIcon, type HeaderProps, HeroBanner, IconButton, type IconButtonProps, type IconButtonVariant, type IconProps, Illustration, type IllustrationProps, type IllustrationVariant, type ImageBannerProps, ImagePlaceholder, type ImagePlaceholderProps, InfoBadge, type InfoBadgeProps, NavBar, type NavBarProps, type NavItem, NotificationBadge, type NotificationBadgeProps, NotificationListItem, type NotificationListItemProps, OrderListItem, type OrderListItemProps, type OrderStatus, OtpField, type OtpFieldProps, PageIndicator, type PageIndicatorProps, PointBalanceBanner, type PointBalanceBannerProps, ProductCard, type ProductCardDetailsProps, type ProductCardListProps, type ProductCardProps, ProductChip, type ProductChipProps, ProductImage, type ProductImageProps, type ProductImageUsage, RadioOption, type RadioOptionProps, SearchField, type SearchFieldProps, Section, type SectionProps, SnackyIcons, SoldOutBadge, type SoldOutBadgeProps, SquareBanner, type Step, type StepState, Stepper, type StepperProps, TabRow, type TabRowProps, TextField, type TextFieldProps, Toggle, type ToggleProps, UploadButton, type UploadButtonProps, VariantBadge, type VariantBadgeProps, typography };
729
+ export { Accordion, type AccordionProps, AddressResult, type AddressResultProps, AlertBanner, type AlertBannerProps, Avatar, type AvatarProps, type AvatarSize, BottomSheet, type BottomSheetProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Callout, type CalloutProps, type CalloutVariant, ChatInput, type ChatInputProps, Checkbox, type CheckboxProps, CopyField, type CopyFieldProps, DiscountTag, type DiscountTagProps, FilterChip, type FilterChipProps, FullWidthBanner, Header, type HeaderLeadingIcon, type HeaderProps, HeroBanner, IconButton, type IconButtonProps, type IconButtonVariant, type IconProps, Illustration, type IllustrationProps, type IllustrationVariant, type ImageBannerProps, ImagePlaceholder, type ImagePlaceholderProps, InfoBadge, type InfoBadgeProps, NavBar, type NavBarProps, type NavItem, NotificationBadge, type NotificationBadgeProps, NotificationListItem, type NotificationListItemProps, OrderListItem, type OrderListItemProps, type OrderStatus, OtpField, type OtpFieldProps, PageIndicator, type PageIndicatorProps, PointBalanceBanner, type PointBalanceBannerProps, ProductCard, type ProductCardDetailsProps, type ProductCardListProps, type ProductCardProps, ProductChip, type ProductChipProps, type ProductGroupLayout, ProductGroupSection, type ProductGroupSectionProps, ProductImage, type ProductImageProps, type ProductImageUsage, RadioOption, type RadioOptionProps, SearchField, type SearchFieldProps, Section, type SectionProps, SnackyIcons, SoldOutBadge, type SoldOutBadgeProps, SquareBanner, type Step, type StepState, Stepper, type StepperProps, TabRow, type TabRowProps, TextField, type TextFieldProps, Toggle, type ToggleProps, UploadButton, type UploadButtonProps, VariantBadge, type VariantBadgeProps, typography };
package/dist/index.d.ts CHANGED
@@ -396,6 +396,32 @@ interface SectionProps {
396
396
  */
397
397
  declare function Section({ title, onAction, children, className }: SectionProps): react.JSX.Element;
398
398
 
399
+ type ProductGroupLayout = 'horizontal' | 'banner' | 'grid';
400
+ interface ProductGroupSectionProps {
401
+ title: string;
402
+ /**
403
+ * `horizontal`: one scrolling row of cards (Figma Section `Group-Products-Horizontal`).
404
+ * `banner`: the row laid over a full-bleed banner from x160, scrolling over it (`Group-Products-Banner`).
405
+ * `grid`: two columns (`Group-Products-vertical`).
406
+ */
407
+ layout: ProductGroupLayout;
408
+ /** The products, normally `ProductCard`s with `variant="list"`. */
409
+ children: ReactNode;
410
+ /** Shows the header chevron and, in the scrolling layouts, the trailing "See other products" card. */
411
+ onSeeMore?: () => void;
412
+ seeMoreLabel?: string;
413
+ /** Required for `layout="banner"`, normally a `SquareBanner`. It sits still behind the scrolling row. */
414
+ banner?: ReactNode;
415
+ className?: string;
416
+ }
417
+ /**
418
+ * Snacky Product Group Section: a titled group of product cards, the pattern
419
+ * behind three of Figma's Section variants (8 instances across Home and product
420
+ * detail). Section itself stays a generic shell; this packages the product
421
+ * layouts so they can be used by name instead of rebuilt by hand.
422
+ */
423
+ declare function ProductGroupSection({ title, layout, children, onSeeMore, seeMoreLabel, banner, className, }: ProductGroupSectionProps): react.JSX.Element;
424
+
399
425
  type StepState = 'done' | 'pending' | 'cancelled';
400
426
  interface Step {
401
427
  label: string;
@@ -585,7 +611,7 @@ interface IconProps extends SVGProps<SVGSVGElement> {
585
611
  }
586
612
 
587
613
  declare const account$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
588
- declare const address: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
614
+ declare const address$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
589
615
  declare const back: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
590
616
  declare const balance$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
591
617
  declare const bell$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
@@ -627,7 +653,6 @@ declare const trash: ({ width, height, color, ...rest }: IconProps) => react.JSX
627
653
  declare const truck$1: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
628
654
  declare const unsent: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
629
655
 
630
- declare const outline_address: typeof address;
631
656
  declare const outline_back: typeof back;
632
657
  declare const outline_calendar: typeof calendar;
633
658
  declare const outline_camera: typeof camera;
@@ -661,10 +686,11 @@ declare const outline_smartphone: typeof smartphone;
661
686
  declare const outline_trash: typeof trash;
662
687
  declare const outline_unsent: typeof unsent;
663
688
  declare namespace outline {
664
- export { account$1 as account, outline_address as address, outline_back as back, balance$1 as balance, bell$1 as bell, outline_calendar as calendar, outline_camera as camera, cart$1 as cart, outline_cartAdd as cartAdd, category$1 as category, outline_chat as chat, outline_chevronDown as chevronDown, outline_chevronRight as chevronRight, outline_chevronUp as chevronUp, outline_close as close, outline_closeInput as closeInput, outline_creditCard as creditCard, outline_document as document, outline_edit as edit, outline_eye as eye, outline_eyeOff as eyeOff, heart$1 as heart, outline_help as help, history$1 as history, home$1 as home, outline_key as key, outline_lock as lock, outline_logout as logout, outline_map as map, outline_messageSquare as messageSquare, outline_minus as minus, outline_phone as phone, outline_plus as plus, outline_referral as referral, outline_search as search, outline_send as send, outline_sent as sent, outline_share as share, outline_smartphone as smartphone, outline_trash as trash, truck$1 as truck, outline_unsent as unsent };
689
+ export { account$1 as account, address$1 as address, outline_back as back, balance$1 as balance, bell$1 as bell, outline_calendar as calendar, outline_camera as camera, cart$1 as cart, outline_cartAdd as cartAdd, category$1 as category, outline_chat as chat, outline_chevronDown as chevronDown, outline_chevronRight as chevronRight, outline_chevronUp as chevronUp, outline_close as close, outline_closeInput as closeInput, outline_creditCard as creditCard, outline_document as document, outline_edit as edit, outline_eye as eye, outline_eyeOff as eyeOff, heart$1 as heart, outline_help as help, history$1 as history, home$1 as home, outline_key as key, outline_lock as lock, outline_logout as logout, outline_map as map, outline_messageSquare as messageSquare, outline_minus as minus, outline_phone as phone, outline_plus as plus, outline_referral as referral, outline_search as search, outline_send as send, outline_sent as sent, outline_share as share, outline_smartphone as smartphone, outline_trash as trash, truck$1 as truck, outline_unsent as unsent };
665
690
  }
666
691
 
667
692
  declare const account: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
693
+ declare const address: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
668
694
  declare const angleSmallRight: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
669
695
  declare const balance: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
670
696
  declare const bell: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
@@ -678,6 +704,7 @@ declare const star: ({ width, height, color, ...rest }: IconProps) => react.JSX.
678
704
  declare const truck: ({ width, height, color, ...rest }: IconProps) => react.JSX.Element;
679
705
 
680
706
  declare const solid_account: typeof account;
707
+ declare const solid_address: typeof address;
681
708
  declare const solid_angleSmallRight: typeof angleSmallRight;
682
709
  declare const solid_balance: typeof balance;
683
710
  declare const solid_bell: typeof bell;
@@ -690,7 +717,7 @@ declare const solid_points: typeof points;
690
717
  declare const solid_star: typeof star;
691
718
  declare const solid_truck: typeof truck;
692
719
  declare namespace solid {
693
- export { solid_account as account, solid_angleSmallRight as angleSmallRight, solid_balance as balance, solid_bell as bell, solid_cart as cart, solid_category as category, solid_heart as heart, solid_history as history, solid_home as home, solid_points as points, solid_star as star, solid_truck as truck };
720
+ export { solid_account as account, solid_address as address, solid_angleSmallRight as angleSmallRight, solid_balance as balance, solid_bell as bell, solid_cart as cart, solid_category as category, solid_heart as heart, solid_history as history, solid_home as home, solid_points as points, solid_star as star, solid_truck as truck };
694
721
  }
695
722
 
696
723
  /** Matches the `<SnackyIcons.outline.home />` / `<SnackyIcons.solid.home />` namespace used throughout the design system's documented code samples. */
@@ -699,4 +726,4 @@ declare const SnackyIcons: {
699
726
  solid: typeof solid;
700
727
  };
701
728
 
702
- export { Accordion, type AccordionProps, AddressResult, type AddressResultProps, AlertBanner, type AlertBannerProps, Avatar, type AvatarProps, type AvatarSize, BottomSheet, type BottomSheetProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Callout, type CalloutProps, type CalloutVariant, ChatInput, type ChatInputProps, Checkbox, type CheckboxProps, CopyField, type CopyFieldProps, DiscountTag, type DiscountTagProps, FilterChip, type FilterChipProps, FullWidthBanner, Header, type HeaderLeadingIcon, type HeaderProps, HeroBanner, IconButton, type IconButtonProps, type IconButtonVariant, type IconProps, Illustration, type IllustrationProps, type IllustrationVariant, type ImageBannerProps, ImagePlaceholder, type ImagePlaceholderProps, InfoBadge, type InfoBadgeProps, NavBar, type NavBarProps, type NavItem, NotificationBadge, type NotificationBadgeProps, NotificationListItem, type NotificationListItemProps, OrderListItem, type OrderListItemProps, type OrderStatus, OtpField, type OtpFieldProps, PageIndicator, type PageIndicatorProps, PointBalanceBanner, type PointBalanceBannerProps, ProductCard, type ProductCardDetailsProps, type ProductCardListProps, type ProductCardProps, ProductChip, type ProductChipProps, ProductImage, type ProductImageProps, type ProductImageUsage, RadioOption, type RadioOptionProps, SearchField, type SearchFieldProps, Section, type SectionProps, SnackyIcons, SoldOutBadge, type SoldOutBadgeProps, SquareBanner, type Step, type StepState, Stepper, type StepperProps, TabRow, type TabRowProps, TextField, type TextFieldProps, Toggle, type ToggleProps, UploadButton, type UploadButtonProps, VariantBadge, type VariantBadgeProps, typography };
729
+ export { Accordion, type AccordionProps, AddressResult, type AddressResultProps, AlertBanner, type AlertBannerProps, Avatar, type AvatarProps, type AvatarSize, BottomSheet, type BottomSheetProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, type CalendarProps, Callout, type CalloutProps, type CalloutVariant, ChatInput, type ChatInputProps, Checkbox, type CheckboxProps, CopyField, type CopyFieldProps, DiscountTag, type DiscountTagProps, FilterChip, type FilterChipProps, FullWidthBanner, Header, type HeaderLeadingIcon, type HeaderProps, HeroBanner, IconButton, type IconButtonProps, type IconButtonVariant, type IconProps, Illustration, type IllustrationProps, type IllustrationVariant, type ImageBannerProps, ImagePlaceholder, type ImagePlaceholderProps, InfoBadge, type InfoBadgeProps, NavBar, type NavBarProps, type NavItem, NotificationBadge, type NotificationBadgeProps, NotificationListItem, type NotificationListItemProps, OrderListItem, type OrderListItemProps, type OrderStatus, OtpField, type OtpFieldProps, PageIndicator, type PageIndicatorProps, PointBalanceBanner, type PointBalanceBannerProps, ProductCard, type ProductCardDetailsProps, type ProductCardListProps, type ProductCardProps, ProductChip, type ProductChipProps, type ProductGroupLayout, ProductGroupSection, type ProductGroupSectionProps, ProductImage, type ProductImageProps, type ProductImageUsage, RadioOption, type RadioOptionProps, SearchField, type SearchFieldProps, Section, type SectionProps, SnackyIcons, SoldOutBadge, type SoldOutBadgeProps, SquareBanner, type Step, type StepState, Stepper, type StepperProps, TabRow, type TabRowProps, TextField, type TextFieldProps, Toggle, type ToggleProps, UploadButton, type UploadButtonProps, VariantBadge, type VariantBadgeProps, typography };
package/dist/index.js CHANGED
@@ -643,6 +643,7 @@ function TabRow({ tabs, selected, onSelect, className }) {
643
643
  var solid_exports = {};
644
644
  __export(solid_exports, {
645
645
  account: () => account2,
646
+ address: () => address2,
646
647
  angleSmallRight: () => angleSmallRight,
647
648
  balance: () => balance2,
648
649
  bell: () => bell2,
@@ -674,6 +675,9 @@ var account2 = icon2(20, [
674
675
  ["M10 10C12.7614 10 15 7.76142 15 5C15 2.23858 12.7614 0 10 0C7.23858 0 5 2.23858 5 5C5 7.76142 7.23858 10 10 10Z", "nonzero"],
675
676
  ["M10 11.6659C5.85977 11.6705 2.50461 15.0257 2.5 19.1659C2.5 19.6261 2.87309 19.9992 3.33332 19.9992H16.6666C17.1269 19.9992 17.5 19.6261 17.5 19.1659C17.4954 15.0257 14.1402 11.6705 10 11.6659Z", "nonzero"]
676
677
  ]);
678
+ var address2 = icon2(16, [
679
+ ["M8.00001 0.0283203C6.23597 0.030261 4.54473 0.731837 3.2973 1.97914C2.04987 3.22644 1.34813 4.91762 1.34601 6.68165C1.34601 8.39499 2.67268 11.0763 5.28934 14.651C5.60085 15.0777 6.00871 15.4249 6.47974 15.6643C6.95077 15.9036 7.47166 16.0283 8.00001 16.0283C8.52836 16.0283 9.04924 15.9036 9.52027 15.6643C9.9913 15.4249 10.3992 15.0777 10.7107 14.651C13.3273 11.0763 14.654 8.39499 14.654 6.68165C14.6519 4.91762 13.9501 3.22644 12.7027 1.97914C11.4553 0.731837 9.76405 0.030261 8.00001 0.0283203V0.0283203ZM8.00001 9.33365C7.47259 9.33365 6.95702 9.17726 6.51849 8.88424C6.07996 8.59122 5.73816 8.17475 5.53633 7.68748C5.3345 7.20021 5.28169 6.66403 5.38458 6.14675C5.48747 5.62946 5.74145 5.15431 6.11439 4.78137C6.48733 4.40843 6.96248 4.15445 7.47977 4.05156C7.99705 3.94867 8.53323 4.00148 9.0205 4.20331C9.50777 4.40514 9.92424 4.74694 10.2173 5.18547C10.5103 5.624 10.6667 6.13957 10.6667 6.66699C10.6667 7.37423 10.3857 8.05251 9.88563 8.55261C9.38553 9.0527 8.70725 9.33365 8.00001 9.33365Z", "nonzero"]
680
+ ]);
677
681
  var angleSmallRight = icon2(24, [
678
682
  ["M15.75 9.525L11.164 4.939C10.8827 4.65774 10.5011 4.49978 10.1032 4.49988C9.70534 4.49997 9.32381 4.65811 9.04255 4.9395C8.76129 5.2209 8.60333 5.6025 8.60342 6.00036C8.60352 6.39822 8.76166 6.77974 9.04305 7.061L13.629 11.646C13.6756 11.6925 13.7125 11.7476 13.7378 11.8084C13.763 11.8691 13.7759 11.9342 13.7759 12C13.7759 12.0658 13.763 12.1309 13.7378 12.1916C13.7125 12.2524 13.6756 12.3076 13.629 12.354L9.04305 16.939C8.76166 17.2203 8.60352 17.6018 8.60342 17.9997C8.60333 18.3975 8.76129 18.7791 9.04255 19.0605C9.32381 19.3419 9.70534 19.5 10.1032 19.5001C10.5011 19.5002 10.8827 19.3423 11.164 19.061L15.75 14.475C16.4053 13.818 16.7732 12.9279 16.7732 12C16.7732 11.0721 16.4053 10.182 15.75 9.525Z", "nonzero"]
679
683
  ]);
@@ -1001,18 +1005,102 @@ function Section({ title, onAction, children, className }) {
1001
1005
  ] });
1002
1006
  }
1003
1007
 
1004
- // src/components/Stepper/Stepper.tsx
1008
+ // src/components/ProductGroupSection/ProductGroupSection.tsx
1009
+ import { useRef as useRef2 } from "react";
1005
1010
  import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
1011
+ function ProductGroupSection({
1012
+ title,
1013
+ layout,
1014
+ children,
1015
+ onSeeMore,
1016
+ seeMoreLabel = "See other products",
1017
+ banner,
1018
+ className
1019
+ }) {
1020
+ const drag = useDragScroll();
1021
+ const seeMore = onSeeMore && layout !== "grid" && /* @__PURE__ */ jsxs20("div", { className: "snacky-product-group__see-more", children: [
1022
+ /* @__PURE__ */ jsx28(IconButton, { size: "small", icon: /* @__PURE__ */ jsx28(angleSmallRight, {}), onClick: onSeeMore, ariaLabel: seeMoreLabel }),
1023
+ /* @__PURE__ */ jsx28("span", { className: "snacky-product-group__see-more-label", children: seeMoreLabel })
1024
+ ] });
1025
+ return /* @__PURE__ */ jsxs20(
1026
+ Section,
1027
+ {
1028
+ title,
1029
+ onAction: onSeeMore,
1030
+ className: cx("snacky-product-group", `snacky-product-group--${layout}`, className),
1031
+ children: [
1032
+ layout === "grid" && /* @__PURE__ */ jsx28("div", { className: "snacky-product-group__grid", children }),
1033
+ layout === "horizontal" && /* @__PURE__ */ jsxs20("div", { className: "snacky-product-group__row", ...drag, children: [
1034
+ children,
1035
+ seeMore
1036
+ ] }),
1037
+ layout === "banner" && /* @__PURE__ */ jsxs20("div", { className: "snacky-product-group__stage", children: [
1038
+ /* @__PURE__ */ jsx28("div", { className: "snacky-product-group__banner", children: banner }),
1039
+ /* @__PURE__ */ jsxs20("div", { className: "snacky-product-group__row", ...drag, children: [
1040
+ children,
1041
+ seeMore
1042
+ ] })
1043
+ ] })
1044
+ ]
1045
+ }
1046
+ );
1047
+ }
1048
+ function useDragScroll() {
1049
+ const state = useRef2(null);
1050
+ const justDragged = useRef2(false);
1051
+ return {
1052
+ onPointerDown(e) {
1053
+ if (e.pointerType !== "mouse") return;
1054
+ state.current = { x: e.clientX, left: e.currentTarget.scrollLeft, moved: false, id: e.pointerId };
1055
+ },
1056
+ onPointerMove(e) {
1057
+ const d = state.current;
1058
+ if (!d) return;
1059
+ const dx = e.clientX - d.x;
1060
+ if (!d.moved && Math.abs(dx) > 4) {
1061
+ d.moved = true;
1062
+ e.currentTarget.setPointerCapture(d.id);
1063
+ e.currentTarget.classList.add("snacky-product-group__row--dragging");
1064
+ }
1065
+ if (d.moved) e.currentTarget.scrollLeft = d.left - dx;
1066
+ },
1067
+ onPointerUp(e) {
1068
+ if (state.current?.moved) {
1069
+ e.currentTarget.classList.remove("snacky-product-group__row--dragging");
1070
+ justDragged.current = true;
1071
+ setTimeout(() => {
1072
+ justDragged.current = false;
1073
+ }, 0);
1074
+ }
1075
+ state.current = null;
1076
+ },
1077
+ onPointerCancel() {
1078
+ state.current = null;
1079
+ },
1080
+ onClickCapture(e) {
1081
+ if (justDragged.current) {
1082
+ e.stopPropagation();
1083
+ e.preventDefault();
1084
+ }
1085
+ },
1086
+ onDragStart(e) {
1087
+ e.preventDefault();
1088
+ }
1089
+ };
1090
+ }
1091
+
1092
+ // src/components/Stepper/Stepper.tsx
1093
+ import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
1006
1094
  function Stepper({ steps, className }) {
1007
- return /* @__PURE__ */ jsx28("ol", { className: cx("snacky-stepper", className), children: steps.map((step, i) => /* @__PURE__ */ jsxs20(
1095
+ return /* @__PURE__ */ jsx29("ol", { className: cx("snacky-stepper", className), children: steps.map((step, i) => /* @__PURE__ */ jsxs21(
1008
1096
  "li",
1009
1097
  {
1010
1098
  className: cx("snacky-stepper__step", i === steps.length - 1 && "snacky-stepper__step--last"),
1011
1099
  children: [
1012
- /* @__PURE__ */ jsx28("span", { className: cx("snacky-stepper__dot", `snacky-stepper__dot--${step.state}`), children: step.state === "cancelled" && /* @__PURE__ */ jsx28(close, { width: 12, height: 12 }) }),
1013
- /* @__PURE__ */ jsxs20("span", { className: "snacky-stepper__body", children: [
1014
- /* @__PURE__ */ jsx28("span", { className: cx("snacky-stepper__label", `snacky-stepper__label--${step.state}`), children: step.label }),
1015
- step.timestamp && /* @__PURE__ */ jsx28("span", { className: "snacky-stepper__time", children: step.timestamp })
1100
+ /* @__PURE__ */ jsx29("span", { className: cx("snacky-stepper__dot", `snacky-stepper__dot--${step.state}`), children: step.state === "cancelled" && /* @__PURE__ */ jsx29(close, { width: 12, height: 12 }) }),
1101
+ /* @__PURE__ */ jsxs21("span", { className: "snacky-stepper__body", children: [
1102
+ /* @__PURE__ */ jsx29("span", { className: cx("snacky-stepper__label", `snacky-stepper__label--${step.state}`), children: step.label }),
1103
+ step.timestamp && /* @__PURE__ */ jsx29("span", { className: "snacky-stepper__time", children: step.timestamp })
1016
1104
  ] })
1017
1105
  ]
1018
1106
  },
@@ -1021,7 +1109,7 @@ function Stepper({ steps, className }) {
1021
1109
  }
1022
1110
 
1023
1111
  // src/components/Calendar/Calendar.tsx
1024
- import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
1112
+ import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
1025
1113
  var WEEKDAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
1026
1114
  var MONTHS = [
1027
1115
  "January",
@@ -1068,39 +1156,39 @@ function Calendar({
1068
1156
  const [lo, hi] = range ? [range[0], range[1]].sort((a, b) => a.getTime() - b.getTime()) : [null, null];
1069
1157
  const isEnd = (d) => single && sameDay(d, single) || lo && hi && (sameDay(d, lo) || sameDay(d, hi));
1070
1158
  const isInRange = (d) => lo && hi && d > lo && d < hi;
1071
- return /* @__PURE__ */ jsxs21("div", { className: cx("snacky-calendar", className), children: [
1072
- /* @__PURE__ */ jsxs21("div", { className: "snacky-calendar__header", children: [
1073
- /* @__PURE__ */ jsx29(
1159
+ return /* @__PURE__ */ jsxs22("div", { className: cx("snacky-calendar", className), children: [
1160
+ /* @__PURE__ */ jsxs22("div", { className: "snacky-calendar__header", children: [
1161
+ /* @__PURE__ */ jsx30(
1074
1162
  "button",
1075
1163
  {
1076
1164
  type: "button",
1077
1165
  className: "snacky-calendar__nav",
1078
1166
  onClick: onPrevMonth,
1079
1167
  "aria-label": "Previous month",
1080
- children: /* @__PURE__ */ jsx29(back, { width: 24, height: 24 })
1168
+ children: /* @__PURE__ */ jsx30(back, { width: 24, height: 24 })
1081
1169
  }
1082
1170
  ),
1083
- /* @__PURE__ */ jsxs21("span", { className: "snacky-calendar__label", children: [
1171
+ /* @__PURE__ */ jsxs22("span", { className: "snacky-calendar__label", children: [
1084
1172
  MONTHS[month.getMonth()],
1085
1173
  " ",
1086
1174
  month.getFullYear()
1087
1175
  ] }),
1088
- /* @__PURE__ */ jsx29(
1176
+ /* @__PURE__ */ jsx30(
1089
1177
  "button",
1090
1178
  {
1091
1179
  type: "button",
1092
1180
  className: "snacky-calendar__nav snacky-calendar__nav--next",
1093
1181
  onClick: onNextMonth,
1094
1182
  "aria-label": "Next month",
1095
- children: /* @__PURE__ */ jsx29(back, { width: 24, height: 24 })
1183
+ children: /* @__PURE__ */ jsx30(back, { width: 24, height: 24 })
1096
1184
  }
1097
1185
  )
1098
1186
  ] }),
1099
- /* @__PURE__ */ jsxs21("div", { className: "snacky-calendar__grid", children: [
1100
- WEEKDAYS.map((d) => /* @__PURE__ */ jsx29("span", { className: "snacky-calendar__weekday", children: d }, d)),
1187
+ /* @__PURE__ */ jsxs22("div", { className: "snacky-calendar__grid", children: [
1188
+ WEEKDAYS.map((d) => /* @__PURE__ */ jsx30("span", { className: "snacky-calendar__weekday", children: d }, d)),
1101
1189
  days.map((d, i) => {
1102
1190
  const outside = d.getMonth() !== month.getMonth();
1103
- return /* @__PURE__ */ jsxs21(
1191
+ return /* @__PURE__ */ jsxs22(
1104
1192
  "button",
1105
1193
  {
1106
1194
  type: "button",
@@ -1114,26 +1202,26 @@ function Calendar({
1114
1202
  disabled: outside,
1115
1203
  "aria-current": isEnd(d) ? "date" : void 0,
1116
1204
  children: [
1117
- /* @__PURE__ */ jsx29("span", { className: "snacky-calendar__day-number", children: d.getDate() }),
1118
- marked.some((m) => sameDay(m, d)) && /* @__PURE__ */ jsx29("span", { className: "snacky-calendar__marker" })
1205
+ /* @__PURE__ */ jsx30("span", { className: "snacky-calendar__day-number", children: d.getDate() }),
1206
+ marked.some((m) => sameDay(m, d)) && /* @__PURE__ */ jsx30("span", { className: "snacky-calendar__marker" })
1119
1207
  ]
1120
1208
  },
1121
1209
  i
1122
1210
  );
1123
1211
  })
1124
1212
  ] }),
1125
- onAction && /* @__PURE__ */ jsx29(Button, { onClick: onAction, style: { width: "100%" }, children: actionLabel })
1213
+ onAction && /* @__PURE__ */ jsx30(Button, { onClick: onAction, style: { width: "100%" }, children: actionLabel })
1126
1214
  ] });
1127
1215
  }
1128
1216
 
1129
1217
  // src/components/Avatar/Avatar.tsx
1130
- import { jsx as jsx30 } from "react/jsx-runtime";
1218
+ import { jsx as jsx31 } from "react/jsx-runtime";
1131
1219
  function Avatar({ src, alt, size = "md", className }) {
1132
- return /* @__PURE__ */ jsx30("img", { src, alt, className: cx("snacky-avatar", `snacky-avatar--${size}`, className) });
1220
+ return /* @__PURE__ */ jsx31("img", { src, alt, className: cx("snacky-avatar", `snacky-avatar--${size}`, className) });
1133
1221
  }
1134
1222
 
1135
1223
  // src/components/Illustration/Illustration.tsx
1136
- import { jsx as jsx31 } from "react/jsx-runtime";
1224
+ import { jsx as jsx32 } from "react/jsx-runtime";
1137
1225
  var SIZE = {
1138
1226
  empty: { width: 268, height: 200 },
1139
1227
  createAccount: { width: 360, height: 240 },
@@ -1143,54 +1231,54 @@ var SIZE = {
1143
1231
  };
1144
1232
  function Illustration({ variant, src, alt, className }) {
1145
1233
  const { width, height } = SIZE[variant];
1146
- return /* @__PURE__ */ jsx31("img", { src, alt, width, height, className: cx("snacky-illustration", className) });
1234
+ return /* @__PURE__ */ jsx32("img", { src, alt, width, height, className: cx("snacky-illustration", className) });
1147
1235
  }
1148
1236
 
1149
1237
  // src/components/ProductImage/ProductImage.tsx
1150
- import { jsx as jsx32, jsxs as jsxs22 } from "react/jsx-runtime";
1238
+ import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
1151
1239
  function ProductImage({ src, alt, usage, sold = false, className }) {
1152
- return /* @__PURE__ */ jsxs22("span", { className: cx("snacky-product-image-wrap", `snacky-product-image-wrap--${usage}`, className), children: [
1153
- /* @__PURE__ */ jsx32("img", { src, alt, className: cx("snacky-product-image", `snacky-product-image--${usage}`) }),
1154
- sold && /* @__PURE__ */ jsx32("span", { className: "snacky-product-image-sold-overlay", children: /* @__PURE__ */ jsx32("span", { className: "snacky-product-image-sold-label", children: "Sold Out" }) })
1240
+ return /* @__PURE__ */ jsxs23("span", { className: cx("snacky-product-image-wrap", `snacky-product-image-wrap--${usage}`, className), children: [
1241
+ /* @__PURE__ */ jsx33("img", { src, alt, className: cx("snacky-product-image", `snacky-product-image--${usage}`) }),
1242
+ sold && /* @__PURE__ */ jsx33("span", { className: "snacky-product-image-sold-overlay", children: /* @__PURE__ */ jsx33("span", { className: "snacky-product-image-sold-label", children: "Sold Out" }) })
1155
1243
  ] });
1156
1244
  }
1157
1245
 
1158
1246
  // src/components/ProductCard/ProductCard.tsx
1159
- import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
1247
+ import { jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
1160
1248
  function ProductCard(props) {
1161
1249
  if (props.variant === "details") {
1162
1250
  const { productName: productName2, imageUrl: imageUrl2, price: price2, rating: rating2, originalPrice: originalPrice2, discountLabel: discountLabel2, ratingCount, favorited, onFavoriteClick, onShareClick, onChatClick, sold, ratingIcon: ratingIcon2, favoriteIcon, shareIcon, chatIcon, onClick: onClick2, className: className2 } = props;
1163
- return /* @__PURE__ */ jsxs23("div", { className: cx("snacky-product-card", "snacky-product-card--details", className2), children: [
1164
- /* @__PURE__ */ jsx33("div", { className: "snacky-product-card__image-block", children: /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__image-wrap", onClick: onClick2, children: [
1165
- /* @__PURE__ */ jsx33("img", { className: "snacky-product-card__image", src: imageUrl2, alt: productName2 }),
1166
- sold && /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__sold-overlay", children: /* @__PURE__ */ jsx33(SoldOutBadge, {}) })
1251
+ return /* @__PURE__ */ jsxs24("div", { className: cx("snacky-product-card", "snacky-product-card--details", className2), children: [
1252
+ /* @__PURE__ */ jsx34("div", { className: "snacky-product-card__image-block", children: /* @__PURE__ */ jsxs24("div", { className: "snacky-product-card__image-wrap", onClick: onClick2, children: [
1253
+ /* @__PURE__ */ jsx34("img", { className: "snacky-product-card__image", src: imageUrl2, alt: productName2 }),
1254
+ sold && /* @__PURE__ */ jsx34("span", { className: "snacky-product-card__sold-overlay", children: /* @__PURE__ */ jsx34(SoldOutBadge, {}) })
1167
1255
  ] }) }),
1168
- /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__details-body", children: [
1169
- /* @__PURE__ */ jsx33("p", { className: "snacky-product-card__name", children: productName2 }),
1170
- /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__price-row", children: [
1171
- /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__price", children: price2 }),
1172
- originalPrice2 && /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__original-price", children: originalPrice2 }),
1173
- discountLabel2 && /* @__PURE__ */ jsx33(DiscountTag, { label: discountLabel2 })
1256
+ /* @__PURE__ */ jsxs24("div", { className: "snacky-product-card__details-body", children: [
1257
+ /* @__PURE__ */ jsx34("p", { className: "snacky-product-card__name", children: productName2 }),
1258
+ /* @__PURE__ */ jsxs24("div", { className: "snacky-product-card__price-row", children: [
1259
+ /* @__PURE__ */ jsx34("span", { className: "snacky-product-card__price", children: price2 }),
1260
+ originalPrice2 && /* @__PURE__ */ jsx34("span", { className: "snacky-product-card__original-price", children: originalPrice2 }),
1261
+ discountLabel2 && /* @__PURE__ */ jsx34(DiscountTag, { label: discountLabel2 })
1174
1262
  ] }),
1175
- /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__footer-row", children: [
1176
- /* @__PURE__ */ jsxs23("span", { className: "snacky-product-card__rating", children: [
1177
- /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__rating-icon", children: ratingIcon2 ?? /* @__PURE__ */ jsx33(star, { width: 16, height: 16 }) }),
1263
+ /* @__PURE__ */ jsxs24("div", { className: "snacky-product-card__footer-row", children: [
1264
+ /* @__PURE__ */ jsxs24("span", { className: "snacky-product-card__rating", children: [
1265
+ /* @__PURE__ */ jsx34("span", { className: "snacky-product-card__rating-icon", children: ratingIcon2 ?? /* @__PURE__ */ jsx34(star, { width: 16, height: 16 }) }),
1178
1266
  rating2,
1179
1267
  " (",
1180
1268
  ratingCount,
1181
1269
  ")"
1182
1270
  ] }),
1183
- /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__actions snacky-product-card__actions--details", children: [
1184
- /* @__PURE__ */ jsx33(IconButton, { variant: "secondary", icon: favoriteIcon ?? (favorited ? /* @__PURE__ */ jsx33(heart2, { width: 20, height: 20 }) : /* @__PURE__ */ jsx33(heart, { width: 20, height: 20 })), selected: favorited, onClick: onFavoriteClick, ariaLabel: "Favorite" }),
1185
- /* @__PURE__ */ jsx33(IconButton, { variant: "secondary", icon: shareIcon ?? /* @__PURE__ */ jsx33(share, { width: 20, height: 20 }), onClick: onShareClick, ariaLabel: "Share" }),
1186
- /* @__PURE__ */ jsx33(IconButton, { variant: "secondary", icon: chatIcon ?? /* @__PURE__ */ jsx33(chat, { width: 20, height: 20 }), onClick: onChatClick, ariaLabel: "Chat with seller" })
1271
+ /* @__PURE__ */ jsxs24("div", { className: "snacky-product-card__actions snacky-product-card__actions--details", children: [
1272
+ /* @__PURE__ */ jsx34(IconButton, { variant: "secondary", icon: favoriteIcon ?? (favorited ? /* @__PURE__ */ jsx34(heart2, { width: 20, height: 20 }) : /* @__PURE__ */ jsx34(heart, { width: 20, height: 20 })), selected: favorited, onClick: onFavoriteClick, ariaLabel: "Favorite" }),
1273
+ /* @__PURE__ */ jsx34(IconButton, { variant: "secondary", icon: shareIcon ?? /* @__PURE__ */ jsx34(share, { width: 20, height: 20 }), onClick: onShareClick, ariaLabel: "Share" }),
1274
+ /* @__PURE__ */ jsx34(IconButton, { variant: "secondary", icon: chatIcon ?? /* @__PURE__ */ jsx34(chat, { width: 20, height: 20 }), onClick: onChatClick, ariaLabel: "Chat with seller" })
1187
1275
  ] })
1188
1276
  ] })
1189
1277
  ] })
1190
1278
  ] });
1191
1279
  }
1192
1280
  const { productName, imageUrl, price, rating, originalPrice, discountLabel, onAddToCart, cartIcon, ratingIcon, onClick, className } = props;
1193
- return /* @__PURE__ */ jsxs23(
1281
+ return /* @__PURE__ */ jsxs24(
1194
1282
  "div",
1195
1283
  {
1196
1284
  className: cx("snacky-product-card", "snacky-product-card--list", className),
@@ -1199,25 +1287,25 @@ function ProductCard(props) {
1199
1287
  onClick,
1200
1288
  onKeyDown: (e) => (e.key === "Enter" || e.key === " ") && onClick?.(),
1201
1289
  children: [
1202
- /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__image-wrap", children: [
1203
- /* @__PURE__ */ jsx33("img", { className: "snacky-product-card__image", src: imageUrl, alt: productName }),
1204
- discountLabel && /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__discount", children: /* @__PURE__ */ jsx33(DiscountTag, { label: discountLabel }) })
1290
+ /* @__PURE__ */ jsxs24("div", { className: "snacky-product-card__image-wrap", children: [
1291
+ /* @__PURE__ */ jsx34("img", { className: "snacky-product-card__image", src: imageUrl, alt: productName }),
1292
+ discountLabel && /* @__PURE__ */ jsx34("span", { className: "snacky-product-card__discount", children: /* @__PURE__ */ jsx34(DiscountTag, { label: discountLabel }) })
1205
1293
  ] }),
1206
- /* @__PURE__ */ jsx33("p", { className: "snacky-product-card__name", children: productName }),
1207
- /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__price-row", children: [
1208
- /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__price", children: price }),
1209
- originalPrice && /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__original-price", children: originalPrice })
1294
+ /* @__PURE__ */ jsx34("p", { className: "snacky-product-card__name", children: productName }),
1295
+ /* @__PURE__ */ jsxs24("div", { className: "snacky-product-card__price-row", children: [
1296
+ /* @__PURE__ */ jsx34("span", { className: "snacky-product-card__price", children: price }),
1297
+ originalPrice && /* @__PURE__ */ jsx34("span", { className: "snacky-product-card__original-price", children: originalPrice })
1210
1298
  ] }),
1211
- /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__footer-row", children: [
1212
- /* @__PURE__ */ jsxs23("span", { className: "snacky-product-card__rating", children: [
1213
- /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__rating-icon", children: ratingIcon ?? /* @__PURE__ */ jsx33(star, { width: 16, height: 16 }) }),
1299
+ /* @__PURE__ */ jsxs24("div", { className: "snacky-product-card__footer-row", children: [
1300
+ /* @__PURE__ */ jsxs24("span", { className: "snacky-product-card__rating", children: [
1301
+ /* @__PURE__ */ jsx34("span", { className: "snacky-product-card__rating-icon", children: ratingIcon ?? /* @__PURE__ */ jsx34(star, { width: 16, height: 16 }) }),
1214
1302
  rating
1215
1303
  ] }),
1216
- /* @__PURE__ */ jsx33(
1304
+ /* @__PURE__ */ jsx34(
1217
1305
  IconButton,
1218
1306
  {
1219
1307
  variant: "primary",
1220
- icon: cartIcon ?? /* @__PURE__ */ jsx33(cartAdd, { width: 16, height: 16 }),
1308
+ icon: cartIcon ?? /* @__PURE__ */ jsx34(cartAdd, { width: 16, height: 16 }),
1221
1309
  onClick: (e) => {
1222
1310
  e.stopPropagation();
1223
1311
  onAddToCart();
@@ -1232,17 +1320,17 @@ function ProductCard(props) {
1232
1320
  }
1233
1321
 
1234
1322
  // src/components/ImagePlaceholder/ImagePlaceholder.tsx
1235
- import { jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
1323
+ import { jsx as jsx35, jsxs as jsxs25 } from "react/jsx-runtime";
1236
1324
  function ImagePlaceholder({ width, height, className }) {
1237
1325
  const iconSize = Math.round(Math.min(width, height) * 0.32);
1238
- return /* @__PURE__ */ jsx34(
1326
+ return /* @__PURE__ */ jsx35(
1239
1327
  "div",
1240
1328
  {
1241
1329
  className: cx("snacky-image-placeholder", className),
1242
1330
  style: { width, height },
1243
1331
  role: "img",
1244
1332
  "aria-label": "No image",
1245
- children: /* @__PURE__ */ jsxs24(
1333
+ children: /* @__PURE__ */ jsxs25(
1246
1334
  "svg",
1247
1335
  {
1248
1336
  width: iconSize,
@@ -1254,9 +1342,9 @@ function ImagePlaceholder({ width, height, className }) {
1254
1342
  strokeLinecap: "round",
1255
1343
  strokeLinejoin: "round",
1256
1344
  children: [
1257
- /* @__PURE__ */ jsx34("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
1258
- /* @__PURE__ */ jsx34("circle", { cx: "8.5", cy: "8.5", r: "1.5", fill: "currentColor", stroke: "none" }),
1259
- /* @__PURE__ */ jsx34("polyline", { points: "21 15 16 10 5 21" })
1345
+ /* @__PURE__ */ jsx35("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
1346
+ /* @__PURE__ */ jsx35("circle", { cx: "8.5", cy: "8.5", r: "1.5", fill: "currentColor", stroke: "none" }),
1347
+ /* @__PURE__ */ jsx35("polyline", { points: "21 15 16 10 5 21" })
1260
1348
  ]
1261
1349
  }
1262
1350
  )
@@ -1293,6 +1381,7 @@ export {
1293
1381
  PointBalanceBanner,
1294
1382
  ProductCard,
1295
1383
  ProductChip,
1384
+ ProductGroupSection,
1296
1385
  ProductImage,
1297
1386
  RadioOption,
1298
1387
  SearchField,