@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/.turbo/turbo-build.log +7 -7
- package/CHANGELOG.md +31 -0
- package/dist/index.cjs +164 -204
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -10
- package/dist/index.d.ts +8 -10
- package/dist/index.js +164 -204
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/atoms/Switch/Switch.tsx +3 -1
- package/src/components/molecules/Notification/Notification.stories.tsx +4 -0
- package/src/components/molecules/Notification/Notification.tsx +43 -36
- package/src/components/molecules/ProductDisplayCard/ProductDisplayCard.stories.tsx +2 -84
- package/src/components/molecules/ProductDisplayCard/ProductDisplayCard.test.tsx +1 -7
- package/src/components/molecules/ProductDisplayCard/ProductDisplayCard.tsx +58 -104
- package/src/components/molecules/ProductListingCard/Badge.tsx +2 -2
- package/src/components/molecules/ProductListingCard/ProductListingCard.tsx +22 -46
- package/src/components/molecules/TabNavigation/TabNavigation.stories.tsx +35 -0
- package/src/components/molecules/TabNavigation/TabNavigation.tsx +15 -1
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__ */
|
|
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__ */
|
|
12686
|
-
|
|
12687
|
-
|
|
12688
|
-
|
|
12689
|
-
|
|
12690
|
-
|
|
12691
|
-
|
|
12692
|
-
|
|
12693
|
-
|
|
12694
|
-
|
|
12695
|
-
|
|
12696
|
-
|
|
12697
|
-
|
|
12698
|
-
|
|
12699
|
-
|
|
12700
|
-
|
|
12701
|
-
|
|
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__ */
|
|
12799
|
-
/* @__PURE__ */
|
|
12800
|
-
|
|
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
|
-
|
|
12838
|
-
|
|
12839
|
-
|
|
12840
|
-
|
|
12841
|
-
|
|
12842
|
-
|
|
12843
|
-
|
|
12844
|
-
|
|
12845
|
-
|
|
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.
|
|
14242
|
-
backgroundColor: colour.background.container.
|
|
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
|
-
|
|
14332
|
-
|
|
14333
|
-
|
|
14334
|
-
|
|
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)(
|
|
14373
|
-
|
|
14374
|
-
|
|
14375
|
-
|
|
14376
|
-
|
|
14377
|
-
|
|
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(
|
|
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
|
|
14459
|
+
return {
|
|
14479
14460
|
flexDirection: "row",
|
|
14480
14461
|
width: "100%",
|
|
14481
|
-
|
|
14482
|
-
|
|
14483
|
-
|
|
14484
|
-
|
|
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
|
|
14533
|
-
|
|
14534
|
-
|
|
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:
|
|
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
|
-
|
|
14551
|
-
|
|
14552
|
-
|
|
14553
|
-
|
|
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
|
-
|
|
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
|
-
|
|
14566
|
-
|
|
14567
|
-
|
|
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
|
|
14625
|
-
image && /* @__PURE__ */
|
|
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
|
-
|
|
14631
|
-
|
|
14632
|
-
|
|
14633
|
-
|
|
14634
|
-
|
|
14635
|
-
|
|
14636
|
-
|
|
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, {
|
|
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:
|
|
14665
|
-
showDecrementButton:
|
|
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__ */
|
|
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:
|
|
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
|
}
|