@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/CHANGELOG.md +61 -0
- package/README.md +4 -3
- package/dist/index.cjs +155 -65
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +75 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +32 -5
- package/dist/index.d.ts +32 -5
- package/dist/index.js +154 -65
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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,
|
|
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,
|
|
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/
|
|
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__ */
|
|
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__ */
|
|
1013
|
-
/* @__PURE__ */
|
|
1014
|
-
/* @__PURE__ */
|
|
1015
|
-
step.timestamp && /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
1072
|
-
/* @__PURE__ */
|
|
1073
|
-
/* @__PURE__ */
|
|
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__ */
|
|
1168
|
+
children: /* @__PURE__ */ jsx30(back, { width: 24, height: 24 })
|
|
1081
1169
|
}
|
|
1082
1170
|
),
|
|
1083
|
-
/* @__PURE__ */
|
|
1171
|
+
/* @__PURE__ */ jsxs22("span", { className: "snacky-calendar__label", children: [
|
|
1084
1172
|
MONTHS[month.getMonth()],
|
|
1085
1173
|
" ",
|
|
1086
1174
|
month.getFullYear()
|
|
1087
1175
|
] }),
|
|
1088
|
-
/* @__PURE__ */
|
|
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__ */
|
|
1183
|
+
children: /* @__PURE__ */ jsx30(back, { width: 24, height: 24 })
|
|
1096
1184
|
}
|
|
1097
1185
|
)
|
|
1098
1186
|
] }),
|
|
1099
|
-
/* @__PURE__ */
|
|
1100
|
-
WEEKDAYS.map((d) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1118
|
-
marked.some((m) => sameDay(m, d)) && /* @__PURE__ */
|
|
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__ */
|
|
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
|
|
1218
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
1131
1219
|
function Avatar({ src, alt, size = "md", className }) {
|
|
1132
|
-
return /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
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
|
|
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__ */
|
|
1153
|
-
/* @__PURE__ */
|
|
1154
|
-
sold && /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
1164
|
-
/* @__PURE__ */
|
|
1165
|
-
/* @__PURE__ */
|
|
1166
|
-
sold && /* @__PURE__ */
|
|
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__ */
|
|
1169
|
-
/* @__PURE__ */
|
|
1170
|
-
/* @__PURE__ */
|
|
1171
|
-
/* @__PURE__ */
|
|
1172
|
-
originalPrice2 && /* @__PURE__ */
|
|
1173
|
-
discountLabel2 && /* @__PURE__ */
|
|
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__ */
|
|
1176
|
-
/* @__PURE__ */
|
|
1177
|
-
/* @__PURE__ */
|
|
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__ */
|
|
1184
|
-
/* @__PURE__ */
|
|
1185
|
-
/* @__PURE__ */
|
|
1186
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1203
|
-
/* @__PURE__ */
|
|
1204
|
-
discountLabel && /* @__PURE__ */
|
|
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__ */
|
|
1207
|
-
/* @__PURE__ */
|
|
1208
|
-
/* @__PURE__ */
|
|
1209
|
-
originalPrice && /* @__PURE__ */
|
|
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__ */
|
|
1212
|
-
/* @__PURE__ */
|
|
1213
|
-
/* @__PURE__ */
|
|
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__ */
|
|
1304
|
+
/* @__PURE__ */ jsx34(
|
|
1217
1305
|
IconButton,
|
|
1218
1306
|
{
|
|
1219
1307
|
variant: "primary",
|
|
1220
|
-
icon: cartIcon ?? /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1258
|
-
/* @__PURE__ */
|
|
1259
|
-
/* @__PURE__ */
|
|
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,
|