@butternutbox/pawprint-native 0.7.0 → 0.9.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
@@ -2070,16 +2070,11 @@ type ProductDisplayCardProps = ViewProps & {
2070
2070
  showQuantityPicker?: boolean;
2071
2071
  disableQuantityButtons?: boolean;
2072
2072
  hideQuantityButtons?: boolean;
2073
- showIncrementButton?: boolean;
2074
- showDecrementButton?: boolean;
2075
2073
  incrementDisabled?: boolean;
2076
2074
  decrementDisabled?: boolean;
2077
2075
  image?: string | React.ReactNode;
2078
2076
  imageBackgroundColor?: string;
2079
2077
  thumbnailWidth?: number;
2080
- thumbnailBackgroundColor?: string;
2081
- showImageQuantityBadge?: boolean;
2082
- borderless?: boolean;
2083
2078
  banner?: React.ReactNode;
2084
2079
  showBanner?: boolean;
2085
2080
  bannerType?: "error" | "success" | "warning" | "info";
@@ -2121,16 +2116,11 @@ declare const ProductDisplayCard: React.ForwardRefExoticComponent<ViewProps & {
2121
2116
  showQuantityPicker?: boolean;
2122
2117
  disableQuantityButtons?: boolean;
2123
2118
  hideQuantityButtons?: boolean;
2124
- showIncrementButton?: boolean;
2125
- showDecrementButton?: boolean;
2126
2119
  incrementDisabled?: boolean;
2127
2120
  decrementDisabled?: boolean;
2128
2121
  image?: string | React.ReactNode;
2129
2122
  imageBackgroundColor?: string;
2130
2123
  thumbnailWidth?: number;
2131
- thumbnailBackgroundColor?: string;
2132
- showImageQuantityBadge?: boolean;
2133
- borderless?: boolean;
2134
2124
  banner?: React.ReactNode;
2135
2125
  showBanner?: boolean;
2136
2126
  bannerType?: "error" | "success" | "warning" | "info";
@@ -2154,6 +2144,8 @@ type TabNavigationListProps = TabNavigationListOwnProps & Omit<ViewProps, keyof
2154
2144
  type TabNavigationTabOwnProps = {
2155
2145
  value: string;
2156
2146
  disabled?: boolean;
2147
+ icon?: PawprintIcon;
2148
+ avatar?: AvatarProps;
2157
2149
  children: React.ReactNode;
2158
2150
  };
2159
2151
  type TabNavigationTabProps = TabNavigationTabOwnProps & Omit<ViewProps, keyof TabNavigationTabOwnProps>;
@@ -2179,8 +2171,14 @@ declare const TabNavigationList: React.ForwardRefExoticComponent<TabNavigationLi
2179
2171
  * disabled state). Unlike the web version there are no hover or focus-visible
2180
2172
  * states (not applicable on mobile).
2181
2173
  *
2174
+ * Optionally renders a leading `Avatar` and/or `Icon` before the label, matching
2175
+ * the Figma design. The icon colour tracks the tab's label colour (brand when
2176
+ * active/idle, muted when disabled); the avatar is rendered as-is from its props.
2177
+ *
2182
2178
  * @param {string} value - Unique identifier; matches the `value` of a `TabNavigation.Panel`.
2183
2179
  * @param {boolean} [disabled=false] - Whether this tab is disabled.
2180
+ * @param {PawprintIcon} [icon] - Optional leading icon from `@butternutbox/pawprint-icons`.
2181
+ * @param {AvatarProps} [avatar] - Optional leading `Avatar`; props are forwarded to the `Avatar` atom.
2184
2182
  * @param {React.ReactNode} children - Tab label (and optional leading content).
2185
2183
  */
2186
2184
  declare const TabNavigationTab: React.ForwardRefExoticComponent<TabNavigationTabOwnProps & Omit<ViewProps, keyof TabNavigationTabOwnProps> & React.RefAttributes<View>>;
package/dist/index.d.ts CHANGED
@@ -2070,16 +2070,11 @@ type ProductDisplayCardProps = ViewProps & {
2070
2070
  showQuantityPicker?: boolean;
2071
2071
  disableQuantityButtons?: boolean;
2072
2072
  hideQuantityButtons?: boolean;
2073
- showIncrementButton?: boolean;
2074
- showDecrementButton?: boolean;
2075
2073
  incrementDisabled?: boolean;
2076
2074
  decrementDisabled?: boolean;
2077
2075
  image?: string | React.ReactNode;
2078
2076
  imageBackgroundColor?: string;
2079
2077
  thumbnailWidth?: number;
2080
- thumbnailBackgroundColor?: string;
2081
- showImageQuantityBadge?: boolean;
2082
- borderless?: boolean;
2083
2078
  banner?: React.ReactNode;
2084
2079
  showBanner?: boolean;
2085
2080
  bannerType?: "error" | "success" | "warning" | "info";
@@ -2121,16 +2116,11 @@ declare const ProductDisplayCard: React.ForwardRefExoticComponent<ViewProps & {
2121
2116
  showQuantityPicker?: boolean;
2122
2117
  disableQuantityButtons?: boolean;
2123
2118
  hideQuantityButtons?: boolean;
2124
- showIncrementButton?: boolean;
2125
- showDecrementButton?: boolean;
2126
2119
  incrementDisabled?: boolean;
2127
2120
  decrementDisabled?: boolean;
2128
2121
  image?: string | React.ReactNode;
2129
2122
  imageBackgroundColor?: string;
2130
2123
  thumbnailWidth?: number;
2131
- thumbnailBackgroundColor?: string;
2132
- showImageQuantityBadge?: boolean;
2133
- borderless?: boolean;
2134
2124
  banner?: React.ReactNode;
2135
2125
  showBanner?: boolean;
2136
2126
  bannerType?: "error" | "success" | "warning" | "info";
@@ -2154,6 +2144,8 @@ type TabNavigationListProps = TabNavigationListOwnProps & Omit<ViewProps, keyof
2154
2144
  type TabNavigationTabOwnProps = {
2155
2145
  value: string;
2156
2146
  disabled?: boolean;
2147
+ icon?: PawprintIcon;
2148
+ avatar?: AvatarProps;
2157
2149
  children: React.ReactNode;
2158
2150
  };
2159
2151
  type TabNavigationTabProps = TabNavigationTabOwnProps & Omit<ViewProps, keyof TabNavigationTabOwnProps>;
@@ -2179,8 +2171,14 @@ declare const TabNavigationList: React.ForwardRefExoticComponent<TabNavigationLi
2179
2171
  * disabled state). Unlike the web version there are no hover or focus-visible
2180
2172
  * states (not applicable on mobile).
2181
2173
  *
2174
+ * Optionally renders a leading `Avatar` and/or `Icon` before the label, matching
2175
+ * the Figma design. The icon colour tracks the tab's label colour (brand when
2176
+ * active/idle, muted when disabled); the avatar is rendered as-is from its props.
2177
+ *
2182
2178
  * @param {string} value - Unique identifier; matches the `value` of a `TabNavigation.Panel`.
2183
2179
  * @param {boolean} [disabled=false] - Whether this tab is disabled.
2180
+ * @param {PawprintIcon} [icon] - Optional leading icon from `@butternutbox/pawprint-icons`.
2181
+ * @param {AvatarProps} [avatar] - Optional leading `Avatar`; props are forwarded to the `Avatar` atom.
2184
2182
  * @param {React.ReactNode} children - Tab label (and optional leading content).
2185
2183
  */
2186
2184
  declare const TabNavigationTab: React.ForwardRefExoticComponent<TabNavigationTabOwnProps & Omit<ViewProps, keyof TabNavigationTabOwnProps> & React.RefAttributes<View>>;
package/dist/index.js CHANGED
@@ -7847,7 +7847,9 @@ var StyledThumb = styled51(Animated.View)(({ thumbSize, thumbBgColor }) => ({
7847
7847
  position: "absolute"
7848
7848
  }));
7849
7849
  var StyledContent = styled51(View)(({ contentGap }) => ({
7850
- gap: contentGap
7850
+ gap: contentGap,
7851
+ flex: 1,
7852
+ minWidth: 0
7851
7853
  }));
7852
7854
  var Switch = React60.forwardRef(
7853
7855
  (_a, ref) => {
@@ -12659,7 +12661,7 @@ var Notification = React60.forwardRef(
12659
12661
  if (variant === "system") {
12660
12662
  const isLarge = size === "lg";
12661
12663
  const sizeTokens = isLarge ? systemNotifications.notification.spacing.large : systemNotifications.notification.spacing.small;
12662
- return /* @__PURE__ */ jsxs(
12664
+ return /* @__PURE__ */ jsx(
12663
12665
  StyledSystemRoot,
12664
12666
  __spreadProps(__spreadValues({
12665
12667
  ref,
@@ -12672,7 +12674,7 @@ var Notification = React60.forwardRef(
12672
12674
  rootBgColor: bgMap[type],
12673
12675
  rootAlignCenter: isLarge
12674
12676
  }, rest), {
12675
- children: [
12677
+ children: /* @__PURE__ */ jsxs(View, { style: { flexDirection: "column", flex: 1 }, children: [
12676
12678
  showIcon && /* @__PURE__ */ jsx(
12677
12679
  Icon,
12678
12680
  {
@@ -12682,27 +12684,31 @@ var Notification = React60.forwardRef(
12682
12684
  "aria-label": type
12683
12685
  }
12684
12686
  ),
12685
- /* @__PURE__ */ jsxs(View, { style: { flexDirection: "column", gap: 8, flex: 1 }, children: [
12686
- /* @__PURE__ */ jsx(
12687
- Typography,
12688
- {
12689
- token: systemNotifications.notifications.typography.default,
12690
- color: systemNotifications.notification.colour.text.default,
12691
- children
12692
- }
12693
- ),
12694
- link && /* @__PURE__ */ jsx(
12695
- Link,
12696
- {
12697
- href: link.href,
12698
- onPress: link.onPress,
12699
- weight: "semiBold",
12700
- size: "md",
12701
- children: link.label
12702
- }
12703
- )
12704
- ] })
12705
- ]
12687
+ /* @__PURE__ */ jsx(View, { style: { flexDirection: "column", gap: 8, flex: 1 }, children: /* @__PURE__ */ jsx(
12688
+ Typography,
12689
+ {
12690
+ token: systemNotifications.notifications.typography.default,
12691
+ color: systemNotifications.notification.colour.text.default,
12692
+ children
12693
+ }
12694
+ ) }),
12695
+ link && /* @__PURE__ */ jsx(
12696
+ StyledLinkWrapper,
12697
+ {
12698
+ linkPaddingLeft: parseTokenValue49(sizeTokens.content.gap),
12699
+ children: /* @__PURE__ */ jsx(
12700
+ Link,
12701
+ {
12702
+ href: link.href,
12703
+ onPress: link.onPress,
12704
+ weight: "semiBold",
12705
+ size: "md",
12706
+ children: link.label
12707
+ }
12708
+ )
12709
+ }
12710
+ )
12711
+ ] })
12706
12712
  })
12707
12713
  );
12708
12714
  }
@@ -12795,59 +12801,57 @@ var Notification = React60.forwardRef(
12795
12801
  rootBgColor: bgMap[type]
12796
12802
  }, rest), {
12797
12803
  children: [
12798
- /* @__PURE__ */ jsxs(StyledContents, { contentsGap: parseTokenValue49(content.spacing.gap), children: [
12799
- /* @__PURE__ */ jsxs(StyledCopyRow, { copyGap: parseTokenValue49(content.spacing.gap), children: [
12800
- showIcon && /* @__PURE__ */ jsx(
12801
- Icon,
12802
- {
12803
- icon: IconComponent,
12804
- size: "md",
12805
- colour: type,
12806
- "aria-label": type
12807
- }
12808
- ),
12809
- /* @__PURE__ */ jsxs(
12810
- StyledInlineCopy,
12811
- {
12812
- copyGap: parseTokenValue49(content.copy.spacing.gap),
12813
- children: [
12814
- title && /* @__PURE__ */ jsx(
12815
- Typography,
12816
- {
12817
- token: notifications.typography.title,
12818
- color: colour.text.title,
12819
- children: title
12820
- }
12821
- ),
12822
- /* @__PURE__ */ jsx(
12823
- Typography,
12824
- {
12825
- token: notifications.typography.body,
12826
- color: colour.text.body,
12827
- children
12828
- }
12829
- )
12830
- ]
12831
- }
12832
- )
12833
- ] }),
12834
- link && /* @__PURE__ */ jsx(
12835
- StyledLinkWrapper,
12804
+ /* @__PURE__ */ jsx(StyledContents, { contentsGap: parseTokenValue49(content.spacing.gap), children: /* @__PURE__ */ jsxs(StyledCopyRow, { copyGap: parseTokenValue49(content.spacing.gap), children: [
12805
+ showIcon && /* @__PURE__ */ jsx(
12806
+ Icon,
12836
12807
  {
12837
- linkPaddingLeft: parseTokenValue49(content.copy.spacing.gap),
12838
- children: /* @__PURE__ */ jsx(
12839
- Link,
12840
- {
12841
- href: link.href,
12842
- onPress: link.onPress,
12843
- weight: "semiBold",
12844
- size: "md",
12845
- children: link.label
12846
- }
12847
- )
12808
+ icon: IconComponent,
12809
+ size: "md",
12810
+ colour: type,
12811
+ "aria-label": type
12812
+ }
12813
+ ),
12814
+ /* @__PURE__ */ jsxs(
12815
+ StyledInlineCopy,
12816
+ {
12817
+ copyGap: parseTokenValue49(content.copy.spacing.gap),
12818
+ children: [
12819
+ title && /* @__PURE__ */ jsx(
12820
+ Typography,
12821
+ {
12822
+ token: notifications.typography.title,
12823
+ color: colour.text.title,
12824
+ children: title
12825
+ }
12826
+ ),
12827
+ /* @__PURE__ */ jsx(
12828
+ Typography,
12829
+ {
12830
+ token: notifications.typography.body,
12831
+ color: colour.text.body,
12832
+ children
12833
+ }
12834
+ ),
12835
+ link && /* @__PURE__ */ jsx(
12836
+ StyledLinkWrapper,
12837
+ {
12838
+ linkPaddingLeft: parseTokenValue49(content.copy.spacing.gap),
12839
+ children: /* @__PURE__ */ jsx(
12840
+ Link,
12841
+ {
12842
+ href: link.href,
12843
+ onPress: link.onPress,
12844
+ weight: "semiBold",
12845
+ size: "md",
12846
+ children: link.label
12847
+ }
12848
+ )
12849
+ }
12850
+ )
12851
+ ]
12848
12852
  }
12849
12853
  )
12850
- ] }),
12854
+ ] }) }),
12851
12855
  onClose && /* @__PURE__ */ jsx(
12852
12856
  StyledCloseButton,
12853
12857
  {
@@ -14238,8 +14242,8 @@ var BadgeContainer = styled51(View)(({ theme: theme2 }) => {
14238
14242
  alignItems: "center",
14239
14243
  justifyContent: "center",
14240
14244
  height: parseTokenValue55(sizing["2xl"]),
14241
- paddingRight: parseTokenValue55(spacing.sm),
14242
- backgroundColor: colour.background.container.alt,
14245
+ paddingRight: parseTokenValue55(spacing.xs),
14246
+ backgroundColor: colour.background.container.brand,
14243
14247
  borderTopRightRadius: parseTokenValue55(borderRadius.xs),
14244
14248
  borderBottomRightRadius: parseTokenValue55(borderRadius.xs)
14245
14249
  };
@@ -14316,37 +14320,25 @@ var StyledRoot16 = styled51(Pressable)(({ theme: theme2 }) => {
14316
14320
  width: "100%"
14317
14321
  };
14318
14322
  });
14319
- var ImageContainer = styled51(View)({
14323
+ var ImageContainer = styled51(View)(({ theme: theme2 }) => ({
14320
14324
  position: "relative",
14321
14325
  width: "100%",
14322
14326
  aspectRatio: 1,
14323
- overflow: "hidden"
14324
- });
14327
+ overflow: "hidden",
14328
+ borderRadius: parseTokenValue56(
14329
+ theme2.tokens.semantics.dimensions.borderRadius.md
14330
+ )
14331
+ }));
14325
14332
  var StyledImage2 = styled51(Image)({
14326
14333
  width: "100%",
14327
14334
  height: "100%",
14328
14335
  resizeMode: "cover"
14329
14336
  });
14330
- var BadgeContainer2 = styled51(View)(({ theme: theme2 }) => {
14331
- const spacing = theme2.tokens.semantics.dimensions.spacing;
14332
- const { sizing, borderRadius } = theme2.tokens.semantics.dimensions;
14333
- const { colour } = theme2.tokens.semantics;
14334
- return {
14335
- position: "absolute",
14336
- top: parseTokenValue56(spacing.md),
14337
- left: 0,
14338
- display: "flex",
14339
- flexDirection: "row",
14340
- gap: parseTokenValue56(spacing["2xs"]),
14341
- alignItems: "center",
14342
- justifyContent: "center",
14343
- height: parseTokenValue56(sizing["2xl"]),
14344
- paddingRight: parseTokenValue56(spacing.sm),
14345
- backgroundColor: colour.background.container.alt,
14346
- borderTopRightRadius: parseTokenValue56(borderRadius.sm),
14347
- borderBottomRightRadius: parseTokenValue56(borderRadius.sm)
14348
- };
14349
- });
14337
+ var BadgeContainer2 = styled51(View)(({ theme: theme2 }) => ({
14338
+ position: "absolute",
14339
+ top: parseTokenValue56(theme2.tokens.semantics.dimensions.spacing.md),
14340
+ left: 0
14341
+ }));
14350
14342
  var ContentContainer = styled51(View)(({ theme: theme2 }) => {
14351
14343
  const spacing = theme2.tokens.semantics.dimensions.spacing;
14352
14344
  return {
@@ -14369,20 +14361,12 @@ var CategoryWrapper = styled51(View)(({ theme: theme2 }) => {
14369
14361
  marginBottom: parseTokenValue56(spacing["3xs"])
14370
14362
  };
14371
14363
  });
14372
- var TitleContainer = styled51(View)(({ theme: theme2 }) => {
14373
- const spacing = theme2.tokens.semantics.dimensions.spacing;
14374
- return {
14375
- display: "flex",
14376
- flexDirection: "row",
14377
- width: "100%",
14378
- marginBottom: parseTokenValue56(spacing.xs)
14379
- };
14380
- });
14381
- var SizeWrapper = styled51(View)(({ theme: theme2 }) => {
14382
- const spacing = theme2.tokens.semantics.dimensions.spacing;
14383
- return {
14384
- marginBottom: parseTokenValue56(spacing.md)
14385
- };
14364
+ var TitleContainer = styled51(View)({
14365
+ display: "flex",
14366
+ flexDirection: "row",
14367
+ width: "100%",
14368
+ // 6px below the title to match Figma (4px title bottom padding + 2px gap).
14369
+ marginBottom: 6
14386
14370
  });
14387
14371
  var PricingContainer = styled51(View)(({ theme: theme2 }) => {
14388
14372
  const spacing = theme2.tokens.semantics.dimensions.spacing;
@@ -14443,7 +14427,7 @@ var _ProductListingCard = React60.forwardRef(
14443
14427
  /* @__PURE__ */ jsxs(DetailsContainer, { children: [
14444
14428
  showCategory && category && /* @__PURE__ */ jsx(CategoryWrapper, { children: /* @__PURE__ */ jsx(Typography, { variant: "body", size: "sm", color: "secondary", children: category }) }),
14445
14429
  showTitle && /* @__PURE__ */ jsx(TitleContainer, { children: /* @__PURE__ */ jsx(Typography, { variant: "heading", size: "xs", children: title }) }),
14446
- showSize && size && /* @__PURE__ */ jsx(SizeWrapper, { children: /* @__PURE__ */ jsx(Typography, { variant: "body", size: "md", color: "secondary", children: size }) })
14430
+ showSize && size && /* @__PURE__ */ jsx(Typography, { variant: "body", size: "md", color: "secondary", children: size })
14447
14431
  ] }),
14448
14432
  showPrice && price && /* @__PURE__ */ jsxs(PricingContainer, { children: [
14449
14433
  /* @__PURE__ */ jsx(Typography, { variant: "body", size: "md", color: "secondary", children: price }),
@@ -14467,78 +14451,50 @@ var ProductListingCardWithBadgeAndGrid = Object.assign(_ProductListingCard, {
14467
14451
  Badge: Badge2,
14468
14452
  Grid
14469
14453
  });
14470
- var StyledCardContainer = styled51(View)(({
14471
- theme: theme2,
14472
- borderless
14473
- }) => {
14454
+ var StyledCardContainer = styled51(View)(({ theme: theme2 }) => {
14474
14455
  const { spacing, borderRadius } = theme2.tokens.semantics.dimensions;
14475
14456
  const { colour } = theme2.tokens.semantics;
14476
14457
  const spacingMd = parseTokenValue8(spacing.md);
14477
14458
  const spacingXl = parseTokenValue8(spacing.xl);
14478
- return __spreadProps(__spreadValues({
14459
+ return {
14479
14460
  flexDirection: "row",
14480
14461
  width: "100%",
14481
- height: borderless ? void 0 : "100%",
14482
- maxHeight: spacingXl * 6 + spacingMd,
14483
- backgroundColor: colour.background.surface.default
14484
- }, borderless ? {} : {
14462
+ // Cap at the Figma mobile card width (can be narrower — responsive).
14463
+ maxWidth: 358,
14464
+ // The 148px image sets the baseline height; the card grows if the content
14465
+ // is taller (e.g. a long or translated title wrapping to multiple lines)
14466
+ // so nothing is clipped.
14467
+ minHeight: 148,
14468
+ backgroundColor: colour.background.surface.default,
14485
14469
  borderWidth: 1,
14486
14470
  borderColor: colour.border.default,
14487
14471
  shadowColor: "#522a10",
14488
14472
  shadowOffset: { width: 0, height: spacingMd / 4 },
14489
14473
  shadowOpacity: 0.05,
14490
14474
  shadowRadius: spacingXl - 4,
14491
- elevation: 5
14492
- }), {
14475
+ elevation: 5,
14493
14476
  borderRadius: parseTokenValue8(borderRadius.md),
14494
14477
  overflow: "hidden",
14495
14478
  zIndex: 1
14496
- });
14497
- });
14498
- var StyledImage3 = styled51(View)(
14499
- ({
14500
- theme: theme2,
14501
- imageBackgroundColor,
14502
- thumbnailWidth = 100,
14503
- thumbnailBackgroundColor
14504
- }) => ({
14505
- flexShrink: 0,
14506
- backgroundColor: thumbnailBackgroundColor || imageBackgroundColor || theme2.tokens.semantics.colour.background.container.secondary,
14507
- overflow: "hidden",
14508
- aspectRatio: "1 / 1",
14509
- width: thumbnailWidth,
14510
- height: thumbnailWidth,
14511
- position: "relative"
14512
- })
14513
- );
14514
- var StyledQuantityBadge = styled51(View)(({ theme: theme2 }) => {
14515
- const spacing = theme2.tokens.semantics.dimensions.spacing;
14516
- const borderRadius = theme2.tokens.semantics.dimensions.borderRadius;
14517
- const { colour } = theme2.tokens.semantics;
14518
- return {
14519
- position: "absolute",
14520
- top: parseTokenValue8(spacing["2xs"]),
14521
- right: parseTokenValue8(spacing["2xs"]),
14522
- backgroundColor: colour.background.container.brand,
14523
- borderRadius: parseTokenValue8(borderRadius.xs),
14524
- paddingHorizontal: parseTokenValue8(spacing.sm),
14525
- height: parseTokenValue8(spacing["2xl"]),
14526
- minWidth: parseTokenValue8(spacing["2xl"]),
14527
- alignItems: "center",
14528
- justifyContent: "center",
14529
- zIndex: 2
14530
14479
  };
14531
14480
  });
14532
- var StyledContentArea = styled51(View)(({
14533
- theme: theme2,
14534
- borderless
14535
- }) => {
14481
+ var StyledImage3 = styled51(View)(({ theme: theme2, imageBackgroundColor, thumbnailWidth = 148 }) => ({
14482
+ flexShrink: 0,
14483
+ backgroundColor: imageBackgroundColor || theme2.tokens.semantics.colour.background.container.secondary,
14484
+ overflow: "hidden",
14485
+ width: thumbnailWidth,
14486
+ // Square (148) by default; stretches taller to fill the card when the
14487
+ // content makes it taller than the image.
14488
+ minHeight: thumbnailWidth,
14489
+ position: "relative"
14490
+ }));
14491
+ var StyledContentArea = styled51(View)(({ theme: theme2 }) => {
14536
14492
  const { spacing } = theme2.tokens.semantics.dimensions;
14537
14493
  const paddingValue = parseTokenValue8(spacing.md);
14538
14494
  return {
14539
14495
  flex: 1,
14540
14496
  paddingHorizontal: paddingValue,
14541
- paddingVertical: borderless ? 0 : paddingValue,
14497
+ paddingVertical: paddingValue,
14542
14498
  gap: parseTokenValue8(spacing.xs),
14543
14499
  justifyContent: "space-between"
14544
14500
  };
@@ -14546,25 +14502,38 @@ var StyledContentArea = styled51(View)(({
14546
14502
  var StyledTextContainer = styled51(View)(() => ({
14547
14503
  gap: 2
14548
14504
  }));
14549
- var StyledBannerWrapper = styled51(View)(() => ({
14550
- width: "100%",
14551
- marginTop: -48,
14552
- paddingTop: 24,
14553
- paddingBottom: 16
14554
- }));
14505
+ var StyledBannerWrapper = styled51(View)(({ theme: theme2 }) => {
14506
+ const { spacing, borderRadius } = theme2.tokens.semantics.dimensions;
14507
+ return {
14508
+ width: "100%",
14509
+ // Tuck the banner up behind the card by the corner radius so its square top
14510
+ // corners hide under the card's rounded bottom; the rest sits below.
14511
+ marginTop: -parseTokenValue8(borderRadius.md),
14512
+ paddingBottom: parseTokenValue8(spacing.md)
14513
+ };
14514
+ });
14555
14515
  var StyledRootWrapper = styled51(View)(() => {
14556
14516
  return {
14557
14517
  flexDirection: "column",
14558
14518
  width: "100%",
14559
- height: "100%"
14519
+ maxWidth: 358
14560
14520
  };
14561
14521
  });
14562
14522
  var StyledNotification = styled51(Notification)(({ theme: theme2 }) => {
14563
- const { spacing } = theme2.tokens.semantics.dimensions;
14523
+ const { spacing, borderRadius } = theme2.tokens.semantics.dimensions;
14524
+ const spacingMd = parseTokenValue8(spacing.md);
14525
+ const radiusMd = parseTokenValue8(borderRadius.md);
14564
14526
  return {
14565
- top: parseTokenValue8(spacing.md),
14566
- paddingHorizontal: parseTokenValue8(spacing.xl),
14567
- paddingVertical: parseTokenValue8(spacing.md)
14527
+ paddingHorizontal: spacingMd,
14528
+ // 27px top padding (Figma) leaves a small cream reveal above the text once
14529
+ // the banner tucks behind the card.
14530
+ paddingTop: 27,
14531
+ paddingBottom: spacingMd,
14532
+ // Square top corners, rounded bottom corners (banner tucks under the card).
14533
+ borderTopLeftRadius: 0,
14534
+ borderTopRightRadius: 0,
14535
+ borderBottomLeftRadius: radiusMd,
14536
+ borderBottomRightRadius: radiusMd
14568
14537
  };
14569
14538
  });
14570
14539
  var ProductDisplayCard = React60.forwardRef(
@@ -14578,16 +14547,11 @@ var ProductDisplayCard = React60.forwardRef(
14578
14547
  showQuantityPicker = false,
14579
14548
  disableQuantityButtons = false,
14580
14549
  hideQuantityButtons = false,
14581
- showIncrementButton,
14582
- showDecrementButton,
14583
14550
  incrementDisabled = false,
14584
14551
  decrementDisabled = false,
14585
14552
  image,
14586
14553
  imageBackgroundColor,
14587
14554
  thumbnailWidth,
14588
- thumbnailBackgroundColor,
14589
- showImageQuantityBadge = false,
14590
- borderless = false,
14591
14555
  banner,
14592
14556
  showBanner = false,
14593
14557
  bannerType = "info",
@@ -14601,16 +14565,11 @@ var ProductDisplayCard = React60.forwardRef(
14601
14565
  "showQuantityPicker",
14602
14566
  "disableQuantityButtons",
14603
14567
  "hideQuantityButtons",
14604
- "showIncrementButton",
14605
- "showDecrementButton",
14606
14568
  "incrementDisabled",
14607
14569
  "decrementDisabled",
14608
14570
  "image",
14609
14571
  "imageBackgroundColor",
14610
14572
  "thumbnailWidth",
14611
- "thumbnailBackgroundColor",
14612
- "showImageQuantityBadge",
14613
- "borderless",
14614
14573
  "banner",
14615
14574
  "showBanner",
14616
14575
  "bannerType",
@@ -14621,26 +14580,23 @@ var ProductDisplayCard = React60.forwardRef(
14621
14580
  onQuantityChange == null ? void 0 : onQuantityChange(newQuantity);
14622
14581
  }
14623
14582
  };
14624
- const cardContent = /* @__PURE__ */ jsxs(StyledCardContainer, __spreadProps(__spreadValues({ ref, borderless }, rest), { children: [
14625
- image && /* @__PURE__ */ jsxs(
14583
+ const cardContent = /* @__PURE__ */ jsxs(StyledCardContainer, __spreadProps(__spreadValues({ ref }, rest), { children: [
14584
+ image && /* @__PURE__ */ jsx(
14626
14585
  StyledImage3,
14627
14586
  {
14628
14587
  imageBackgroundColor,
14629
14588
  thumbnailWidth,
14630
- thumbnailBackgroundColor,
14631
- children: [
14632
- typeof image === "string" ? /* @__PURE__ */ jsx(
14633
- Image,
14634
- {
14635
- source: { uri: image },
14636
- style: { width: "100%", height: "100%" }
14637
- }
14638
- ) : image,
14639
- showImageQuantityBadge && quantity && /* @__PURE__ */ jsx(StyledQuantityBadge, { children: /* @__PURE__ */ jsx(Typography, { variant: "body", size: "sm", weight: "bold", children: quantity }) })
14640
- ]
14589
+ children: typeof image === "string" ? /* @__PURE__ */ jsx(
14590
+ Image,
14591
+ {
14592
+ source: { uri: image },
14593
+ resizeMode: "cover",
14594
+ style: { flex: 1, width: "100%" }
14595
+ }
14596
+ ) : image
14641
14597
  }
14642
14598
  ),
14643
- /* @__PURE__ */ jsxs(StyledContentArea, { borderless, children: [
14599
+ /* @__PURE__ */ jsxs(StyledContentArea, { children: [
14644
14600
  /* @__PURE__ */ jsxs(StyledTextContainer, { children: [
14645
14601
  /* @__PURE__ */ jsx(Typography, { variant: "heading", size: "2xs", color: "primary", children: title }),
14646
14602
  showSubtext && subtext && /* @__PURE__ */ jsx(Typography, { variant: "body", size: "sm", color: "secondary", children: subtext })
@@ -14661,8 +14617,8 @@ var ProductDisplayCard = React60.forwardRef(
14661
14617
  min: 1,
14662
14618
  accessible: true,
14663
14619
  accessibilityLabel: `Quantity: ${quantity}`,
14664
- showIncrementButton: showIncrementButton !== void 0 ? showIncrementButton : !hideQuantityButtons,
14665
- showDecrementButton: showDecrementButton !== void 0 ? showDecrementButton : !hideQuantityButtons,
14620
+ showIncrementButton: !hideQuantityButtons,
14621
+ showDecrementButton: !hideQuantityButtons,
14666
14622
  incrementDisabled: incrementDisabled || disableQuantityButtons,
14667
14623
  decrementDisabled: decrementDisabled || disableQuantityButtons
14668
14624
  }
@@ -14749,7 +14705,7 @@ var TabNavigationList = React60.forwardRef(
14749
14705
  TabNavigationList.displayName = "TabNavigation.List";
14750
14706
  var TabNavigationTab = React60.forwardRef(
14751
14707
  (_a, ref) => {
14752
- var _b = _a, { value, disabled = false, children } = _b, rest = __objRest(_b, ["value", "disabled", "children"]);
14708
+ var _b = _a, { value, disabled = false, icon, avatar, children } = _b, rest = __objRest(_b, ["value", "disabled", "icon", "avatar", "children"]);
14753
14709
  const { layout } = useTabNavigationContext();
14754
14710
  const { value: selectedValue } = TabsPrimitive.useRootContext();
14755
14711
  const theme2 = useTheme();
@@ -14759,7 +14715,7 @@ var TabNavigationTab = React60.forwardRef(
14759
14715
  const token = selected ? typography.selected : typography.default;
14760
14716
  const borderColour = selected ? colour.border.default : colour.border.disabled;
14761
14717
  const textColour = disabled ? theme2.tokens.primitives.colour.brand.brown["5"] : colour.text.default;
14762
- return /* @__PURE__ */ jsx(TabsPrimitive.Trigger, { value, disabled, asChild: true, children: /* @__PURE__ */ jsx(
14718
+ return /* @__PURE__ */ jsx(TabsPrimitive.Trigger, { value, disabled, asChild: true, children: /* @__PURE__ */ jsxs(
14763
14719
  StyledTab,
14764
14720
  __spreadProps(__spreadValues({
14765
14721
  ref,
@@ -14773,7 +14729,11 @@ var TabNavigationTab = React60.forwardRef(
14773
14729
  tabBorderColor: borderColour,
14774
14730
  tabFlex: layout === "fixed" ? 1 : void 0
14775
14731
  }, rest), {
14776
- children: /* @__PURE__ */ jsx(Typography, { token, color: textColour, children })
14732
+ children: [
14733
+ avatar && /* @__PURE__ */ jsx(Avatar, __spreadValues({}, avatar)),
14734
+ icon && /* @__PURE__ */ jsx(Icon, { icon, customColour: textColour, "aria-hidden": true }),
14735
+ /* @__PURE__ */ jsx(Typography, { token, color: textColour, children })
14736
+ ]
14777
14737
  })
14778
14738
  ) });
14779
14739
  }