@shopify/shop-minis-react 0.7.0 → 0.8.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.
@@ -0,0 +1,23 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ function n({
3
+ position: i,
4
+ children: t
5
+ }) {
6
+ return /* @__PURE__ */ e(
7
+ "div",
8
+ {
9
+ style: {
10
+ position: "fixed",
11
+ left: 0,
12
+ right: 0,
13
+ [i]: 0,
14
+ viewTransitionName: `minis-fixed-${i}`
15
+ },
16
+ children: t
17
+ }
18
+ );
19
+ }
20
+ export {
21
+ n as StaticArea
22
+ };
23
+ //# sourceMappingURL=static-area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-area.js","sources":["../../../src/components/atoms/static-area.tsx"],"sourcesContent":["export interface StaticAreaDocProps {\n /** Position of the fixed area on screen - either pinned to top or bottom */\n position: 'top' | 'bottom'\n /** Static area content */\n children?: React.ReactNode\n}\n\nexport function StaticArea({\n position,\n children,\n}: {\n position: 'top' | 'bottom'\n children: React.ReactNode\n}) {\n return (\n <div\n style={{\n position: 'fixed',\n left: 0,\n right: 0,\n [position]: 0,\n viewTransitionName: `minis-fixed-${position}`,\n }}\n >\n {children}\n </div>\n )\n}\n"],"names":["StaticArea","position","children","jsx"],"mappings":";AAOO,SAASA,EAAW;AAAA,EACzB,UAAAC;AAAA,EACA,UAAAC;AACF,GAGG;AAEC,SAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,QACP,CAACF,CAAQ,GAAG;AAAA,QACZ,oBAAoB,eAAeA,CAAQ;AAAA,MAC7C;AAAA,MAEC,UAAAC;AAAA,IAAA;AAAA,EACH;AAEJ;"}
@@ -0,0 +1,12 @@
1
+ import { useHandleAction as o } from "../../internal/useHandleAction.js";
2
+ import { useShopActions as r } from "../../internal/useShopActions.js";
3
+ const i = () => {
4
+ const { previewProductInAR: e } = r();
5
+ return {
6
+ previewProductInAR: o(e)
7
+ };
8
+ };
9
+ export {
10
+ i as useARPreview
11
+ };
12
+ //# sourceMappingURL=useARPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useARPreview.js","sources":["../../../src/hooks/product/useARPreview.ts"],"sourcesContent":["import {PreviewProductInARParams} from '@shopify/shop-minis-platform/actions'\n\nimport {useHandleAction} from '../../internal/useHandleAction'\nimport {useShopActions} from '../../internal/useShopActions'\n\ninterface UseARPreviewReturns {\n /**\n * Previews a product in AR. Fetches the product's 3D model and launches the native AR viewer.\n * @param params - The parameters for the AR preview, including the product ID.\n * @throws Error if the product has no 3D model or if the model sources are missing.\n */\n previewProductInAR: (params: PreviewProductInARParams) => Promise<void>\n}\n\nexport const useARPreview = (): UseARPreviewReturns => {\n const {previewProductInAR} = useShopActions()\n\n return {\n previewProductInAR: useHandleAction(previewProductInAR),\n }\n}\n"],"names":["useARPreview","previewProductInAR","useShopActions","useHandleAction"],"mappings":";;AAcO,MAAMA,IAAe,MAA2B;AAC/C,QAAA,EAAC,oBAAAC,EAAkB,IAAIC,EAAe;AAErC,SAAA;AAAA,IACL,oBAAoBC,EAAgBF,CAAkB;AAAA,EACxD;AACF;"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { DATA_NAVIGATION_TYPE_ATTRIBUTE as o, NAVIGATION_TYPES as t } from "./types/index.js";
2
2
  import { MinisContainer as i } from "./components/MinisContainer.js";
3
- import { AddToCartButton as n } from "./components/commerce/add-to-cart.js";
3
+ import { AddToCartButton as m } from "./components/commerce/add-to-cart.js";
4
4
  import { BuyNowButton as s } from "./components/commerce/buy-now.js";
5
- import { ProductCard as u, ProductCardBadge as f, ProductCardContainer as x, ProductCardFavoriteButton as c, ProductCardImage as d, ProductCardImageContainer as C, ProductCardInfo as g, ProductCardPrice as S, ProductCardReviewStars as D, ProductCardTitle as A } from "./components/commerce/product-card.js";
5
+ import { ProductCard as u, ProductCardBadge as f, ProductCardContainer as x, ProductCardFavoriteButton as c, ProductCardImage as d, ProductCardImageContainer as C, ProductCardInfo as g, ProductCardPrice as S, ProductCardReviewStars as A, ProductCardTitle as D } from "./components/commerce/product-card.js";
6
6
  import { ProductLink as T } from "./components/commerce/product-link.js";
7
7
  import { MerchantCard as I, MerchantCardContainer as R, MerchantCardHeader as v, MerchantCardInfo as w, MerchantCardName as B, MerchantCardRating as E } from "./components/commerce/merchant-card.js";
8
8
  import { ProductCardSkeleton as F } from "./components/commerce/product-card-skeleton.js";
@@ -19,157 +19,159 @@ import { Image as rr } from "./components/atoms/image.js";
19
19
  import { Touchable as or } from "./components/atoms/touchable.js";
20
20
  import { LongPressDetector as ar } from "./components/atoms/long-press-detector.js";
21
21
  import { AlertDialogAtom as pr } from "./components/atoms/alert-dialog.js";
22
- import { List as mr } from "./components/atoms/list.js";
22
+ import { List as nr } from "./components/atoms/list.js";
23
23
  import { VideoPlayer as lr } from "./components/atoms/video-player.js";
24
24
  import { TextInput as fr } from "./components/atoms/text-input.js";
25
25
  import { ContentWrapper as cr } from "./components/atoms/content-wrapper.js";
26
26
  import { ProductVariantPrice as Cr } from "./components/atoms/product-variant-price.js";
27
- import { Accordion as Sr, AccordionContent as Dr, AccordionItem as Ar, AccordionTrigger as Pr } from "./components/ui/accordion.js";
28
- import { Alert as hr, AlertDescription as Ir, AlertTitle as Rr } from "./components/ui/alert.js";
29
- import { AlertDialog as wr, AlertDialogAction as Br, AlertDialogCancel as Er, AlertDialogContent as Mr, AlertDialogDescription as Fr, AlertDialogFooter as Ur, AlertDialogHeader as br, AlertDialogOverlay as Lr, AlertDialogPortal as kr, AlertDialogTitle as Nr, AlertDialogTrigger as Or } from "./components/ui/alert-dialog.js";
30
- import { Avatar as yr, AvatarFallback as Gr, AvatarImage as Hr } from "./components/ui/avatar.js";
31
- import { Badge as zr, badgeVariants as Wr } from "./components/ui/badge.js";
32
- import { Card as qr, CardAction as Kr, CardContent as Qr, CardDescription as Zr, CardFooter as jr, CardHeader as Jr, CardTitle as Xr } from "./components/ui/card.js";
33
- import { Carousel as re, CarouselContent as ee, CarouselItem as oe, CarouselNext as te, CarouselPrevious as ae } from "./components/ui/carousel.js";
34
- import { Checkbox as pe } from "./components/ui/checkbox.js";
35
- import { Dialog as me, DialogClose as se, DialogContent as le, DialogDescription as ue, DialogFooter as fe, DialogHeader as xe, DialogOverlay as ce, DialogPortal as de, DialogTitle as Ce, DialogTrigger as ge } from "./components/ui/dialog.js";
36
- import { Drawer as De, DrawerClose as Ae, DrawerContent as Pe, DrawerDescription as Te, DrawerFooter as he, DrawerHeader as Ie, DrawerOverlay as Re, DrawerPortal as ve, DrawerTitle as we, DrawerTrigger as Be } from "./components/ui/drawer.js";
37
- import { Input as Me } from "./components/ui/input.js";
38
- import { Label as Ue } from "./components/ui/label.js";
39
- import { Progress as Le } from "./components/ui/progress.js";
40
- import { RadioGroup as Ne, RadioGroupItem as Oe } from "./components/ui/radio-group.js";
41
- import { ResizableHandle as ye, ResizablePanel as Ge, ResizablePanelGroup as He } from "./components/ui/resizable.js";
42
- import { ScrollArea as ze, ScrollBar as We } from "./components/ui/scroll-area.js";
43
- import { Select as qe, SelectContent as Ke, SelectGroup as Qe, SelectItem as Ze, SelectLabel as je, SelectScrollDownButton as Je, SelectScrollUpButton as Xe, SelectSeparator as $e, SelectTrigger as ro, SelectValue as eo } from "./components/ui/select.js";
44
- import { Separator as to } from "./components/ui/separator.js";
45
- import { Sheet as io, SheetClose as po, SheetContent as no, SheetDescription as mo, SheetFooter as so, SheetHeader as lo, SheetTitle as uo, SheetTrigger as fo } from "./components/ui/sheet.js";
46
- import { Toaster as co } from "./components/ui/sonner.js";
47
- import { toast as go } from "./shop-minis-react/node_modules/.pnpm/sonner@2.0.5_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/sonner/dist/index.js";
48
- import { Skeleton as Do } from "./components/ui/skeleton.js";
49
- import { useRecentProducts as Po } from "./hooks/user/useRecentProducts.js";
50
- import { useRecentShops as ho } from "./hooks/user/useRecentShops.js";
51
- import { useSavedProducts as Ro } from "./hooks/user/useSavedProducts.js";
52
- import { useSavedProductsActions as wo } from "./hooks/user/useSavedProductsActions.js";
53
- import { useFollowedShops as Eo } from "./hooks/user/useFollowedShops.js";
54
- import { useFollowedShopsActions as Fo } from "./hooks/user/useFollowedShopsActions.js";
55
- import { useCurrentUser as bo } from "./hooks/user/useCurrentUser.js";
56
- import { useOrders as ko } from "./hooks/user/useOrders.js";
57
- import { useBuyerAttributes as Oo } from "./hooks/user/useBuyerAttributes.js";
58
- import { useGenerateUserToken as yo } from "./hooks/user/useGenerateUserToken.js";
59
- import { useProductListActions as Ho } from "./hooks/product/useProductListActions.js";
60
- import { useProductLists as zo } from "./hooks/product/useProductLists.js";
61
- import { useProductList as Yo } from "./hooks/product/useProductList.js";
62
- import { useProduct as Ko } from "./hooks/product/useProduct.js";
63
- import { useProducts as Zo } from "./hooks/product/useProducts.js";
64
- import { useProductVariants as Jo } from "./hooks/product/useProductVariants.js";
65
- import { useProductMedia as $o } from "./hooks/product/useProductMedia.js";
66
- import { useProductReviews as et } from "./hooks/product/useProductReviews.js";
67
- import { useProductSearch as tt } from "./hooks/product/useProductSearch.js";
68
- import { useRecommendedProducts as it } from "./hooks/product/useRecommendedProducts.js";
69
- import { usePopularProducts as nt } from "./hooks/product/usePopularProducts.js";
70
- import { useAsyncStorage as st } from "./hooks/storage/useAsyncStorage.js";
71
- import { useSecureStorage as ut } from "./hooks/storage/useSecureStorage.js";
72
- import { useImageUpload as xt } from "./hooks/storage/useImageUpload.js";
73
- import { useShopNavigation as dt } from "./hooks/navigation/useShopNavigation.js";
74
- import { useCloseMini as gt } from "./hooks/navigation/useCloseMini.js";
75
- import { useDeeplink as Dt } from "./hooks/navigation/useDeeplink.js";
76
- import { useNavigateWithTransition as Pt } from "./hooks/navigation/useNavigateWithTransition.js";
77
- import { useShop as ht } from "./hooks/shop/useShop.js";
78
- import { useRecommendedShops as Rt } from "./hooks/shop/useRecommendedShops.js";
79
- import { useCreateImageContent as wt } from "./hooks/content/useCreateImageContent.js";
80
- import { useErrorToast as Et } from "./hooks/util/useErrorToast.js";
81
- import { useErrorScreen as Ft } from "./hooks/util/useErrorScreen.js";
82
- import { useShare as bt } from "./hooks/util/useShare.js";
83
- import { useImagePicker as kt } from "./hooks/util/useImagePicker.js";
84
- import { useKeyboardAvoidingView as Ot } from "./hooks/util/useKeyboardAvoidingView.js";
85
- import { useRequestPermissions as yt } from "./hooks/util/useRequestPermissions.js";
86
- import { useOnMiniFocus as Ht } from "./hooks/events/useOnMiniFocus.js";
87
- import { useOnMiniBlur as zt } from "./hooks/events/useOnMiniBlur.js";
88
- import { useOnMiniClose as Yt } from "./hooks/events/useOnMiniClose.js";
89
- import { useOnAppStateChange as Kt } from "./hooks/events/useOnAppStateChange.js";
90
- import { useOnNavigateBack as Zt } from "./hooks/events/useOnNavigateBack.js";
91
- import { buildDeeplinkUrl as Jt } from "./utils/buildDeeplinkUrl.js";
92
- import { MiniEntityNotFoundError as $t, MiniError as ra, MiniNetworkError as ea, formatError as oa } from "./utils/errors.js";
93
- import { extractBrandTheme as aa, formatReviewCount as ia, getFeaturedImages as pa, normalizeRating as na } from "./utils/merchant-card.js";
94
- import { parseUrl as sa } from "./utils/parseUrl.js";
95
- import { dataURLToBlob as ua, fileToDataUri as fa, getResizedImageUrl as xa, getThumbhashBlobURL as ca, getThumbhashDataURL as da } from "./utils/image.js";
96
- import { formatMoney as ga } from "./utils/formatMoney.js";
97
- import { UserState as Da, UserTokenGenerateUserErrorCode as Aa } from "./shop-minis-platform/src/types/user.js";
98
- import { ContentCreateUserErrorCode as Ta, MinisContentStatus as ha } from "./shop-minis-platform/src/types/content.js";
99
- import { Social as Ra } from "./shop-minis-platform/src/types/share.js";
100
- import { DATA_FETCHING_DEFAULT_FETCH_POLICY as wa, DATA_FETCHING_DEFAULT_PAGE_SIZE as Ba } from "./shop-minis-platform/src/constants.js";
27
+ import { StaticArea as Sr } from "./components/atoms/static-area.js";
28
+ import { Accordion as Dr, AccordionContent as Pr, AccordionItem as Tr, AccordionTrigger as hr } from "./components/ui/accordion.js";
29
+ import { Alert as Rr, AlertDescription as vr, AlertTitle as wr } from "./components/ui/alert.js";
30
+ import { AlertDialog as Er, AlertDialogAction as Mr, AlertDialogCancel as Fr, AlertDialogContent as Ur, AlertDialogDescription as br, AlertDialogFooter as Lr, AlertDialogHeader as kr, AlertDialogOverlay as Nr, AlertDialogPortal as Or, AlertDialogTitle as _r, AlertDialogTrigger as yr } from "./components/ui/alert-dialog.js";
31
+ import { Avatar as Hr, AvatarFallback as Vr, AvatarImage as zr } from "./components/ui/avatar.js";
32
+ import { Badge as Yr, badgeVariants as qr } from "./components/ui/badge.js";
33
+ import { Card as Qr, CardAction as Zr, CardContent as jr, CardDescription as Jr, CardFooter as Xr, CardHeader as $r, CardTitle as re } from "./components/ui/card.js";
34
+ import { Carousel as oe, CarouselContent as te, CarouselItem as ae, CarouselNext as ie, CarouselPrevious as pe } from "./components/ui/carousel.js";
35
+ import { Checkbox as ne } from "./components/ui/checkbox.js";
36
+ import { Dialog as le, DialogClose as ue, DialogContent as fe, DialogDescription as xe, DialogFooter as ce, DialogHeader as de, DialogOverlay as Ce, DialogPortal as ge, DialogTitle as Se, DialogTrigger as Ae } from "./components/ui/dialog.js";
37
+ import { Drawer as Pe, DrawerClose as Te, DrawerContent as he, DrawerDescription as Ie, DrawerFooter as Re, DrawerHeader as ve, DrawerOverlay as we, DrawerPortal as Be, DrawerTitle as Ee, DrawerTrigger as Me } from "./components/ui/drawer.js";
38
+ import { Input as Ue } from "./components/ui/input.js";
39
+ import { Label as Le } from "./components/ui/label.js";
40
+ import { Progress as Ne } from "./components/ui/progress.js";
41
+ import { RadioGroup as _e, RadioGroupItem as ye } from "./components/ui/radio-group.js";
42
+ import { ResizableHandle as He, ResizablePanel as Ve, ResizablePanelGroup as ze } from "./components/ui/resizable.js";
43
+ import { ScrollArea as Ye, ScrollBar as qe } from "./components/ui/scroll-area.js";
44
+ import { Select as Qe, SelectContent as Ze, SelectGroup as je, SelectItem as Je, SelectLabel as Xe, SelectScrollDownButton as $e, SelectScrollUpButton as ro, SelectSeparator as eo, SelectTrigger as oo, SelectValue as to } from "./components/ui/select.js";
45
+ import { Separator as io } from "./components/ui/separator.js";
46
+ import { Sheet as mo, SheetClose as no, SheetContent as so, SheetDescription as lo, SheetFooter as uo, SheetHeader as fo, SheetTitle as xo, SheetTrigger as co } from "./components/ui/sheet.js";
47
+ import { Toaster as go } from "./components/ui/sonner.js";
48
+ import { toast as Ao } from "./shop-minis-react/node_modules/.pnpm/sonner@2.0.5_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/sonner/dist/index.js";
49
+ import { Skeleton as Po } from "./components/ui/skeleton.js";
50
+ import { useRecentProducts as ho } from "./hooks/user/useRecentProducts.js";
51
+ import { useRecentShops as Ro } from "./hooks/user/useRecentShops.js";
52
+ import { useSavedProducts as wo } from "./hooks/user/useSavedProducts.js";
53
+ import { useSavedProductsActions as Eo } from "./hooks/user/useSavedProductsActions.js";
54
+ import { useFollowedShops as Fo } from "./hooks/user/useFollowedShops.js";
55
+ import { useFollowedShopsActions as bo } from "./hooks/user/useFollowedShopsActions.js";
56
+ import { useCurrentUser as ko } from "./hooks/user/useCurrentUser.js";
57
+ import { useOrders as Oo } from "./hooks/user/useOrders.js";
58
+ import { useBuyerAttributes as yo } from "./hooks/user/useBuyerAttributes.js";
59
+ import { useGenerateUserToken as Ho } from "./hooks/user/useGenerateUserToken.js";
60
+ import { useProductListActions as zo } from "./hooks/product/useProductListActions.js";
61
+ import { useProductLists as Yo } from "./hooks/product/useProductLists.js";
62
+ import { useProductList as Ko } from "./hooks/product/useProductList.js";
63
+ import { useProduct as Zo } from "./hooks/product/useProduct.js";
64
+ import { useProducts as Jo } from "./hooks/product/useProducts.js";
65
+ import { useProductVariants as $o } from "./hooks/product/useProductVariants.js";
66
+ import { useProductMedia as et } from "./hooks/product/useProductMedia.js";
67
+ import { useProductReviews as tt } from "./hooks/product/useProductReviews.js";
68
+ import { useProductSearch as it } from "./hooks/product/useProductSearch.js";
69
+ import { useRecommendedProducts as mt } from "./hooks/product/useRecommendedProducts.js";
70
+ import { usePopularProducts as st } from "./hooks/product/usePopularProducts.js";
71
+ import { useARPreview as ut } from "./hooks/product/useARPreview.js";
72
+ import { useAsyncStorage as xt } from "./hooks/storage/useAsyncStorage.js";
73
+ import { useSecureStorage as dt } from "./hooks/storage/useSecureStorage.js";
74
+ import { useImageUpload as gt } from "./hooks/storage/useImageUpload.js";
75
+ import { useShopNavigation as At } from "./hooks/navigation/useShopNavigation.js";
76
+ import { useCloseMini as Pt } from "./hooks/navigation/useCloseMini.js";
77
+ import { useDeeplink as ht } from "./hooks/navigation/useDeeplink.js";
78
+ import { useNavigateWithTransition as Rt } from "./hooks/navigation/useNavigateWithTransition.js";
79
+ import { useShop as wt } from "./hooks/shop/useShop.js";
80
+ import { useRecommendedShops as Et } from "./hooks/shop/useRecommendedShops.js";
81
+ import { useCreateImageContent as Ft } from "./hooks/content/useCreateImageContent.js";
82
+ import { useErrorToast as bt } from "./hooks/util/useErrorToast.js";
83
+ import { useErrorScreen as kt } from "./hooks/util/useErrorScreen.js";
84
+ import { useShare as Ot } from "./hooks/util/useShare.js";
85
+ import { useImagePicker as yt } from "./hooks/util/useImagePicker.js";
86
+ import { useKeyboardAvoidingView as Ht } from "./hooks/util/useKeyboardAvoidingView.js";
87
+ import { useRequestPermissions as zt } from "./hooks/util/useRequestPermissions.js";
88
+ import { useOnMiniFocus as Yt } from "./hooks/events/useOnMiniFocus.js";
89
+ import { useOnMiniBlur as Kt } from "./hooks/events/useOnMiniBlur.js";
90
+ import { useOnMiniClose as Zt } from "./hooks/events/useOnMiniClose.js";
91
+ import { useOnAppStateChange as Jt } from "./hooks/events/useOnAppStateChange.js";
92
+ import { useOnNavigateBack as $t } from "./hooks/events/useOnNavigateBack.js";
93
+ import { buildDeeplinkUrl as ea } from "./utils/buildDeeplinkUrl.js";
94
+ import { MiniEntityNotFoundError as ta, MiniError as aa, MiniNetworkError as ia, formatError as pa } from "./utils/errors.js";
95
+ import { extractBrandTheme as na, formatReviewCount as sa, getFeaturedImages as la, normalizeRating as ua } from "./utils/merchant-card.js";
96
+ import { parseUrl as xa } from "./utils/parseUrl.js";
97
+ import { dataURLToBlob as da, fileToDataUri as Ca, getResizedImageUrl as ga, getThumbhashBlobURL as Sa, getThumbhashDataURL as Aa } from "./utils/image.js";
98
+ import { formatMoney as Pa } from "./utils/formatMoney.js";
99
+ import { UserState as ha, UserTokenGenerateUserErrorCode as Ia } from "./shop-minis-platform/src/types/user.js";
100
+ import { ContentCreateUserErrorCode as va, MinisContentStatus as wa } from "./shop-minis-platform/src/types/content.js";
101
+ import { Social as Ea } from "./shop-minis-platform/src/types/share.js";
102
+ import { DATA_FETCHING_DEFAULT_FETCH_POLICY as Fa, DATA_FETCHING_DEFAULT_PAGE_SIZE as Ua } from "./shop-minis-platform/src/constants.js";
101
103
  export {
102
- Sr as Accordion,
103
- Dr as AccordionContent,
104
- Ar as AccordionItem,
105
- Pr as AccordionTrigger,
106
- n as AddToCartButton,
107
- hr as Alert,
108
- Ir as AlertDescription,
109
- wr as AlertDialog,
110
- Br as AlertDialogAction,
104
+ Dr as Accordion,
105
+ Pr as AccordionContent,
106
+ Tr as AccordionItem,
107
+ hr as AccordionTrigger,
108
+ m as AddToCartButton,
109
+ Rr as Alert,
110
+ vr as AlertDescription,
111
+ Er as AlertDialog,
112
+ Mr as AlertDialogAction,
111
113
  pr as AlertDialogAtom,
112
- Er as AlertDialogCancel,
113
- Mr as AlertDialogContent,
114
- Fr as AlertDialogDescription,
115
- Ur as AlertDialogFooter,
116
- br as AlertDialogHeader,
117
- Lr as AlertDialogOverlay,
118
- kr as AlertDialogPortal,
119
- Nr as AlertDialogTitle,
120
- Or as AlertDialogTrigger,
121
- Rr as AlertTitle,
122
- yr as Avatar,
123
- Gr as AvatarFallback,
124
- Hr as AvatarImage,
125
- zr as Badge,
114
+ Fr as AlertDialogCancel,
115
+ Ur as AlertDialogContent,
116
+ br as AlertDialogDescription,
117
+ Lr as AlertDialogFooter,
118
+ kr as AlertDialogHeader,
119
+ Nr as AlertDialogOverlay,
120
+ Or as AlertDialogPortal,
121
+ _r as AlertDialogTitle,
122
+ yr as AlertDialogTrigger,
123
+ wr as AlertTitle,
124
+ Hr as Avatar,
125
+ Vr as AvatarFallback,
126
+ zr as AvatarImage,
127
+ Yr as Badge,
126
128
  j as Button,
127
129
  s as BuyNowButton,
128
- qr as Card,
129
- Kr as CardAction,
130
- Qr as CardContent,
131
- Zr as CardDescription,
132
- jr as CardFooter,
133
- Jr as CardHeader,
134
- Xr as CardTitle,
135
- re as Carousel,
136
- ee as CarouselContent,
137
- oe as CarouselItem,
138
- te as CarouselNext,
139
- ae as CarouselPrevious,
140
- pe as Checkbox,
141
- Ta as ContentCreateUserErrorCode,
130
+ Qr as Card,
131
+ Zr as CardAction,
132
+ jr as CardContent,
133
+ Jr as CardDescription,
134
+ Xr as CardFooter,
135
+ $r as CardHeader,
136
+ re as CardTitle,
137
+ oe as Carousel,
138
+ te as CarouselContent,
139
+ ae as CarouselItem,
140
+ ie as CarouselNext,
141
+ pe as CarouselPrevious,
142
+ ne as Checkbox,
143
+ va as ContentCreateUserErrorCode,
142
144
  cr as ContentWrapper,
143
- wa as DATA_FETCHING_DEFAULT_FETCH_POLICY,
144
- Ba as DATA_FETCHING_DEFAULT_PAGE_SIZE,
145
+ Fa as DATA_FETCHING_DEFAULT_FETCH_POLICY,
146
+ Ua as DATA_FETCHING_DEFAULT_PAGE_SIZE,
145
147
  o as DATA_NAVIGATION_TYPE_ATTRIBUTE,
146
- me as Dialog,
147
- se as DialogClose,
148
- le as DialogContent,
149
- ue as DialogDescription,
150
- fe as DialogFooter,
151
- xe as DialogHeader,
152
- ce as DialogOverlay,
153
- de as DialogPortal,
154
- Ce as DialogTitle,
155
- ge as DialogTrigger,
156
- De as Drawer,
157
- Ae as DrawerClose,
158
- Pe as DrawerContent,
159
- Te as DrawerDescription,
160
- he as DrawerFooter,
161
- Ie as DrawerHeader,
162
- Re as DrawerOverlay,
163
- ve as DrawerPortal,
164
- we as DrawerTitle,
165
- Be as DrawerTrigger,
148
+ le as Dialog,
149
+ ue as DialogClose,
150
+ fe as DialogContent,
151
+ xe as DialogDescription,
152
+ ce as DialogFooter,
153
+ de as DialogHeader,
154
+ Ce as DialogOverlay,
155
+ ge as DialogPortal,
156
+ Se as DialogTitle,
157
+ Ae as DialogTrigger,
158
+ Pe as Drawer,
159
+ Te as DrawerClose,
160
+ he as DrawerContent,
161
+ Ie as DrawerDescription,
162
+ Re as DrawerFooter,
163
+ ve as DrawerHeader,
164
+ we as DrawerOverlay,
165
+ Be as DrawerPortal,
166
+ Ee as DrawerTitle,
167
+ Me as DrawerTrigger,
166
168
  V as FavoriteButton,
167
169
  X as IconButton,
168
170
  rr as Image,
169
171
  W as ImageContentWrapper,
170
- Me as Input,
171
- Ue as Label,
172
- mr as List,
172
+ Ue as Input,
173
+ Le as Label,
174
+ nr as List,
173
175
  ar as LongPressDetector,
174
176
  I as MerchantCard,
175
177
  R as MerchantCardContainer,
@@ -178,11 +180,11 @@ export {
178
180
  B as MerchantCardName,
179
181
  E as MerchantCardRating,
180
182
  b as MerchantCardSkeleton,
181
- $t as MiniEntityNotFoundError,
182
- ra as MiniError,
183
- ea as MiniNetworkError,
183
+ ta as MiniEntityNotFoundError,
184
+ aa as MiniError,
185
+ ia as MiniNetworkError,
184
186
  i as MinisContainer,
185
- ha as MinisContentStatus,
187
+ wa as MinisContentStatus,
186
188
  q as MinisRouter,
187
189
  t as NAVIGATION_TYPES,
188
190
  u as ProductCard,
@@ -193,108 +195,110 @@ export {
193
195
  C as ProductCardImageContainer,
194
196
  g as ProductCardInfo,
195
197
  S as ProductCardPrice,
196
- D as ProductCardReviewStars,
198
+ A as ProductCardReviewStars,
197
199
  F as ProductCardSkeleton,
198
- A as ProductCardTitle,
200
+ D as ProductCardTitle,
199
201
  T as ProductLink,
200
202
  Cr as ProductVariantPrice,
201
- Le as Progress,
203
+ Ne as Progress,
202
204
  k as QuantitySelector,
203
- Ne as RadioGroup,
204
- Oe as RadioGroupItem,
205
- ye as ResizableHandle,
206
- Ge as ResizablePanel,
207
- He as ResizablePanelGroup,
208
- ze as ScrollArea,
209
- We as ScrollBar,
205
+ _e as RadioGroup,
206
+ ye as RadioGroupItem,
207
+ He as ResizableHandle,
208
+ Ve as ResizablePanel,
209
+ ze as ResizablePanelGroup,
210
+ Ye as ScrollArea,
211
+ qe as ScrollBar,
210
212
  O as Search,
211
213
  _ as SearchInput,
212
214
  y as SearchProvider,
213
215
  G as SearchResultsList,
214
- qe as Select,
215
- Ke as SelectContent,
216
- Qe as SelectGroup,
217
- Ze as SelectItem,
218
- je as SelectLabel,
219
- Je as SelectScrollDownButton,
220
- Xe as SelectScrollUpButton,
221
- $e as SelectSeparator,
222
- ro as SelectTrigger,
223
- eo as SelectValue,
224
- to as Separator,
225
- io as Sheet,
226
- po as SheetClose,
227
- no as SheetContent,
228
- mo as SheetDescription,
229
- so as SheetFooter,
230
- lo as SheetHeader,
231
- uo as SheetTitle,
232
- fo as SheetTrigger,
233
- Do as Skeleton,
234
- Ra as Social,
216
+ Qe as Select,
217
+ Ze as SelectContent,
218
+ je as SelectGroup,
219
+ Je as SelectItem,
220
+ Xe as SelectLabel,
221
+ $e as SelectScrollDownButton,
222
+ ro as SelectScrollUpButton,
223
+ eo as SelectSeparator,
224
+ oo as SelectTrigger,
225
+ to as SelectValue,
226
+ io as Separator,
227
+ mo as Sheet,
228
+ no as SheetClose,
229
+ so as SheetContent,
230
+ lo as SheetDescription,
231
+ uo as SheetFooter,
232
+ fo as SheetHeader,
233
+ xo as SheetTitle,
234
+ co as SheetTrigger,
235
+ Po as Skeleton,
236
+ Ea as Social,
237
+ Sr as StaticArea,
235
238
  fr as TextInput,
236
- co as Toaster,
239
+ go as Toaster,
237
240
  or as Touchable,
238
241
  Q as TransitionLink,
239
- Da as UserState,
240
- Aa as UserTokenGenerateUserErrorCode,
242
+ ha as UserState,
243
+ Ia as UserTokenGenerateUserErrorCode,
241
244
  lr as VideoPlayer,
242
- Wr as badgeVariants,
243
- Jt as buildDeeplinkUrl,
244
- ua as dataURLToBlob,
245
- aa as extractBrandTheme,
246
- fa as fileToDataUri,
247
- oa as formatError,
248
- ga as formatMoney,
249
- ia as formatReviewCount,
250
- pa as getFeaturedImages,
251
- xa as getResizedImageUrl,
252
- ca as getThumbhashBlobURL,
253
- da as getThumbhashDataURL,
254
- na as normalizeRating,
255
- sa as parseUrl,
256
- go as toast,
257
- st as useAsyncStorage,
258
- Oo as useBuyerAttributes,
259
- gt as useCloseMini,
260
- wt as useCreateImageContent,
261
- bo as useCurrentUser,
262
- Dt as useDeeplink,
263
- Ft as useErrorScreen,
264
- Et as useErrorToast,
265
- Eo as useFollowedShops,
266
- Fo as useFollowedShopsActions,
267
- yo as useGenerateUserToken,
268
- kt as useImagePicker,
269
- xt as useImageUpload,
270
- Ot as useKeyboardAvoidingView,
271
- Pt as useNavigateWithTransition,
272
- Kt as useOnAppStateChange,
273
- zt as useOnMiniBlur,
274
- Yt as useOnMiniClose,
275
- Ht as useOnMiniFocus,
276
- Zt as useOnNavigateBack,
277
- ko as useOrders,
278
- nt as usePopularProducts,
279
- Ko as useProduct,
280
- Yo as useProductList,
281
- Ho as useProductListActions,
282
- zo as useProductLists,
283
- $o as useProductMedia,
284
- et as useProductReviews,
285
- tt as useProductSearch,
286
- Jo as useProductVariants,
287
- Zo as useProducts,
288
- Po as useRecentProducts,
289
- ho as useRecentShops,
290
- it as useRecommendedProducts,
291
- Rt as useRecommendedShops,
292
- yt as useRequestPermissions,
293
- Ro as useSavedProducts,
294
- wo as useSavedProductsActions,
295
- ut as useSecureStorage,
296
- bt as useShare,
297
- ht as useShop,
298
- dt as useShopNavigation
245
+ qr as badgeVariants,
246
+ ea as buildDeeplinkUrl,
247
+ da as dataURLToBlob,
248
+ na as extractBrandTheme,
249
+ Ca as fileToDataUri,
250
+ pa as formatError,
251
+ Pa as formatMoney,
252
+ sa as formatReviewCount,
253
+ la as getFeaturedImages,
254
+ ga as getResizedImageUrl,
255
+ Sa as getThumbhashBlobURL,
256
+ Aa as getThumbhashDataURL,
257
+ ua as normalizeRating,
258
+ xa as parseUrl,
259
+ Ao as toast,
260
+ ut as useARPreview,
261
+ xt as useAsyncStorage,
262
+ yo as useBuyerAttributes,
263
+ Pt as useCloseMini,
264
+ Ft as useCreateImageContent,
265
+ ko as useCurrentUser,
266
+ ht as useDeeplink,
267
+ kt as useErrorScreen,
268
+ bt as useErrorToast,
269
+ Fo as useFollowedShops,
270
+ bo as useFollowedShopsActions,
271
+ Ho as useGenerateUserToken,
272
+ yt as useImagePicker,
273
+ gt as useImageUpload,
274
+ Ht as useKeyboardAvoidingView,
275
+ Rt as useNavigateWithTransition,
276
+ Jt as useOnAppStateChange,
277
+ Kt as useOnMiniBlur,
278
+ Zt as useOnMiniClose,
279
+ Yt as useOnMiniFocus,
280
+ $t as useOnNavigateBack,
281
+ Oo as useOrders,
282
+ st as usePopularProducts,
283
+ Zo as useProduct,
284
+ Ko as useProductList,
285
+ zo as useProductListActions,
286
+ Yo as useProductLists,
287
+ et as useProductMedia,
288
+ tt as useProductReviews,
289
+ it as useProductSearch,
290
+ $o as useProductVariants,
291
+ Jo as useProducts,
292
+ ho as useRecentProducts,
293
+ Ro as useRecentShops,
294
+ mt as useRecommendedProducts,
295
+ Et as useRecommendedShops,
296
+ zt as useRequestPermissions,
297
+ wo as useSavedProducts,
298
+ Eo as useSavedProductsActions,
299
+ dt as useSecureStorage,
300
+ Ot as useShare,
301
+ wt as useShop,
302
+ At as useShopNavigation
299
303
  };
300
304
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/mocks.js CHANGED
@@ -420,7 +420,7 @@ function w() {
420
420
  ],
421
421
  pageInfo: a()
422
422
  },
423
- previewProductInAr: void 0,
423
+ previewProductInAR: void 0,
424
424
  createContent: {
425
425
  data: {
426
426
  publicId: "content-123",
package/dist/mocks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.js","sources":["../src/mocks.ts"],"sourcesContent":["import {\n Product,\n ProductReview,\n Gender,\n UserState,\n MinisContentStatus,\n} from '@shopify/shop-minis-platform'\nimport {ShopActions} from '@shopify/shop-minis-platform/actions'\n\nconst SAMPLE_IMAGE_NAMES = [\n 'garnished.jpeg',\n 'bath.jpeg',\n 'teapot.jpg',\n 'shoes.jpeg',\n]\n\n// Simple hash function to get a deterministic index from a string\nconst hashString = (str: string): number => {\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) - hash + str.charCodeAt(i)\n hash |= 0\n }\n return Math.abs(hash)\n}\n\n// Helper functions for common data structures\nexport const createProduct = (\n id: string,\n title: string,\n price = '99.99',\n compareAtPrice?: string\n): Product => {\n const imageIndex = hashString(id) % SAMPLE_IMAGE_NAMES.length\n const imageName = SAMPLE_IMAGE_NAMES[imageIndex]\n\n return {\n id,\n title,\n price: {amount: price, currencyCode: 'USD'},\n ...(compareAtPrice && {\n compareAtPrice: {amount: compareAtPrice, currencyCode: 'USD'},\n }),\n reviewAnalytics: {averageRating: 4.5, reviewCount: 10},\n shop: createShop('shop1', 'Mock Shop'),\n defaultVariantId: `variant-${id}`,\n isFavorited: false,\n featuredImage: {\n url: `https://cdn.shopify.com/static/sample-images/${imageName}`,\n altText: title,\n },\n }\n}\n\nexport const createProductReview = (\n id: string,\n overrides: Partial<ProductReview> = {}\n): ProductReview => {\n return {\n id,\n rating: 5,\n title: 'Great product',\n body: 'Loved it. Would buy again.',\n submittedAt: new Date().toISOString(),\n merchantReply: null,\n merchantRepliedAt: null,\n ...overrides,\n }\n}\n\nexport const createShop = (\n id: string,\n name: string,\n options?: {\n themeType?: 'coverImage' | 'brandColor' | 'logoColor' | 'none'\n withBrandSettings?: boolean\n primaryColor?: string\n logoDominantColor?: string\n logoAverageColor?: string\n coverDominantColor?: string\n wordmarkUrl?: string\n coverImageUrl?: string\n featuredImagesLimit?: number\n }\n) => {\n // Determine theme configuration\n const themeType = options?.themeType || 'none'\n const shouldHaveBrandSettings =\n options?.withBrandSettings || themeType !== 'none'\n\n // Generate featured images\n const featuredImagesCount = options?.featuredImagesLimit || 3\n const featuredImages = Array.from({length: featuredImagesCount}, (_, i) => ({\n url: `https://picsum.photos/400/400?random=${id}-${i}`,\n sensitive: false,\n altText: `${name} featured image ${i + 1}`,\n }))\n\n // Configure colors based on theme type\n const getThemeColors = () => {\n switch (themeType) {\n case 'coverImage':\n return {\n primary: options?.primaryColor,\n logoDominant: options?.logoDominantColor,\n logoAverage: options?.logoAverageColor,\n coverDominant: options?.coverDominantColor || '#FF6B35',\n }\n case 'brandColor':\n return {\n primary: options?.primaryColor || '#27AE60',\n logoDominant: options?.logoDominantColor,\n logoAverage: options?.logoAverageColor,\n coverDominant: options?.coverDominantColor,\n }\n case 'logoColor':\n return {\n primary: options?.primaryColor,\n logoDominant: options?.logoDominantColor || '#E74C3C',\n logoAverage: options?.logoAverageColor,\n coverDominant: options?.coverDominantColor,\n }\n default:\n return {\n primary: options?.primaryColor,\n logoDominant: options?.logoDominantColor,\n logoAverage: options?.logoAverageColor,\n coverDominant: options?.coverDominantColor,\n }\n }\n }\n\n // Configure header theme\n const createHeaderTheme = () => {\n if (themeType === 'coverImage' || options?.coverImageUrl) {\n return {\n id: `header-theme-${id}`,\n coverImage: {\n url:\n options?.coverImageUrl ||\n 'https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=800&h=400&fit=crop',\n altText: `${name} cover image`,\n sensitive: false,\n thumbhash: 'k9oGHQRnh493V4dIeHeXh4h3iIeI',\n },\n wordmark:\n options?.wordmarkUrl || themeType === 'coverImage'\n ? {\n url:\n options?.wordmarkUrl ||\n 'https://merrypeople.com/cdn/shop/files/Transparent_Background_1.png?v=1696465429&width=1024',\n altText: `${name} wordmark`,\n sensitive: false,\n }\n : undefined,\n }\n }\n\n if (options?.wordmarkUrl) {\n return {\n id: `header-theme-${id}`,\n wordmark: {\n url: options.wordmarkUrl,\n altText: `${name} wordmark`,\n sensitive: false,\n },\n }\n }\n\n return undefined\n }\n\n return {\n id,\n name,\n primaryDomain: {\n url: `https://${name.toLowerCase().replace(/\\s+/g, '-')}.com`,\n },\n reviewAnalytics: {averageRating: 4.3, reviewCount: 50},\n visualTheme: {\n id: `visual-theme-${id}`,\n featuredImages,\n logoImage: {\n url: `https://picsum.photos/100/100?random=${id}`,\n sensitive: false,\n },\n brandSettings: shouldHaveBrandSettings\n ? {\n id: `brand-settings-${id}`,\n colors: {\n id: `colors-${id}`,\n ...getThemeColors(),\n },\n headerTheme: createHeaderTheme(),\n }\n : undefined,\n },\n }\n}\n\nconst createPagination = (hasNext = false) => ({\n hasNextPage: hasNext,\n endCursor: hasNext ? 'cursor123' : null,\n})\n\nconst createProductList = (id: string, name: string, products: any[] = []) => ({\n id,\n publicId: `public-${id}`,\n name,\n privacyStatus: 'PRIVATE' as const,\n products,\n})\n\n// Helper type to extract the data type from a ShopAction\ntype ShopActionDataType<T> = T extends (\n ...args: any[]\n) => Promise<{ok: true; data: infer R} | {ok: false; error: any}>\n ? R\n : never\n\n// Use window._mockLogs instead of console.log so logs aren't stripped in production builds\n// This allows e2e tests to verify mock actions are being called\nexport interface MockLog {\n action: string\n params?: unknown\n}\n\ndeclare global {\n interface Window {\n _mockLogs?: MockLog[]\n }\n}\n\nfunction logMockAction(action: string, params?: unknown) {\n window._mockLogs = window._mockLogs || []\n window._mockLogs.push({action, params})\n}\n\nfunction makeMockMethod<K extends keyof ShopActions>(\n key: K,\n result: ShopActionDataType<ShopActions[K]>\n): ShopActions[K] {\n return ((params: Parameters<ShopActions[K]>[0]) => {\n logMockAction(String(key), params)\n return Promise.resolve({\n ok: true as const,\n data: result,\n mocked: true,\n })\n }) as ShopActions[K]\n}\n\nexport function makeMockActions(): ShopActions {\n const results: {\n [K in keyof ShopActions]: ShopActionDataType<ShopActions[K]>\n } = {\n translateContentUp: undefined,\n translateContentDown: undefined,\n followShop: true,\n unfollowShop: false,\n favorite: undefined,\n unfavorite: undefined,\n getShopAppInformation: {\n appVersion: '1.0.0',\n buildNumber: '12345',\n buildId: 'dev-build-123',\n },\n productRecommendationImpression: undefined,\n productRecommendationClick: undefined,\n closeMini: undefined,\n getAccountInformation: {\n status: 'available',\n value: 'user@example.com',\n },\n getCurrentUser: {\n data: {\n displayName: 'John Doe',\n avatarImage: {url: 'https://example.com/avatar.jpg'},\n },\n },\n createOrderAttribution: undefined,\n addToCart: undefined,\n buyProduct: undefined,\n buyProducts: undefined,\n showErrorScreen: undefined,\n showErrorToast: undefined,\n getDeeplinkPaths: {\n matchers: ['/products', '/collections', '/cart'],\n },\n navigateToDeeplink: undefined,\n navigateToShop: undefined,\n navigateToProduct: undefined,\n navigateToOrder: undefined,\n navigateToCheckout: undefined,\n createImageUploadLink: {\n // This action is mocked in the actual hook. See `useImageUpload` for more details.\n targets: [\n {\n url: 'https://example.com/upload',\n resourceUrl: 'https://example.com/resource',\n parameters: [{name: 'key', value: 'upload-123'}],\n },\n ],\n },\n completeImageUpload: {\n files: [\n {\n id: 'file-123',\n fileStatus: 'READY',\n image: {\n url: 'https://example.com/image.jpg',\n },\n },\n ],\n },\n getPersistedItem: null,\n setPersistedItem: undefined,\n removePersistedItem: undefined,\n getAllPersistedKeys: ['key1', 'key2', 'key3'],\n clearPersistedItems: undefined,\n getInternalPersistedItem: null,\n setInternalPersistedItem: undefined,\n removeInternalPersistedItem: undefined,\n getAllInternalPersistedKeys: ['internal-key1', 'internal-key2'],\n clearInternalPersistedItems: undefined,\n getSecret: 'secret-value',\n setSecret: undefined,\n removeSecret: undefined,\n reportInteraction: undefined,\n reportImpression: undefined,\n reportContentImpression: undefined,\n getProductLists: {\n data: [\n createProductList('list-1', 'Wishlist'),\n createProductList('list-2', 'Favorites'),\n ],\n pageInfo: createPagination(),\n },\n getProductList: {\n data: createProductList('list-1', 'Wishlist', [\n createProduct('prod-1', 'Sample Product'),\n ]),\n pageInfo: createPagination(),\n },\n addProductList: createProductList('list-3', 'New List'),\n removeProductList: undefined,\n renameProductList: createProductList('list-1', 'Updated Wishlist'),\n setProductListVisibility: createProductList('list-1', 'Wishlist'),\n addProductListItem: undefined,\n removeProductListItem: undefined,\n getRecommendedProducts: {\n data: [\n createProduct('rec-1', 'Recommended Product 1', '79.99'),\n createProduct('rec-2', 'Recommended Product 2', '129.99'),\n createProduct('rec-3', 'Recommended Product 3', '129.99'),\n createProduct('rec-4', 'Recommended Product 4', '29.99'),\n createProduct('rec-5', 'Recommended Product 5', '39.99'),\n createProduct('rec-6', 'Recommended Product 6', '49.99'),\n createProduct('rec-7', 'Recommended Product 7', '59.99'),\n createProduct('rec-8', 'Recommended Product 8', '69.99'),\n createProduct('rec-9', 'Recommended Product 9', '129.99'),\n ],\n pageInfo: createPagination(),\n },\n getRecommendedShops: {\n data: [\n createShop('shop-1', 'Amazing Store'),\n createShop('shop-2', 'Best Deals Shop'),\n createShop('shop-3', 'Great Products'),\n createShop('shop-4', 'Top Brands'),\n createShop('shop-5', 'Exclusive Offers'),\n ],\n pageInfo: createPagination(),\n },\n searchProductsByShop: {\n data: [\n createProduct('search-1', 'Search Result 1', '59.99'),\n createProduct('search-2', 'Search Result 2', '89.99'),\n createProduct('search-3', 'Search Result 3', '119.99'),\n createProduct('search-4', 'Search Result 4', '149.99'),\n createProduct('search-5', 'Search Result 5', '179.99'),\n ],\n pageInfo: createPagination(),\n },\n getOrders: {\n data: [\n {\n id: 'order-1',\n name: '#1001',\n lineItems: [\n {\n productTitle: 'Sample Product',\n variantTitle: 'Medium',\n quantity: 2,\n product: null,\n },\n ],\n shop: createShop('shop-1', 'Sample Shop'),\n },\n ],\n pageInfo: createPagination(),\n },\n getBuyerAttributes: {\n data: {\n genderAffinity: 'NEUTRAL' as Gender,\n categoryAffinities: [\n {id: 'cat1', name: 'Electronics'},\n {id: 'cat2', name: 'Clothing'},\n ],\n },\n },\n showFeedbackSheet: undefined,\n getPopularProducts: {\n data: [\n createProduct('pop-1', 'The Hero Snowboard', '702.95'),\n createProduct('pop-2', 'Snow Jacket', '605.95', '702.00'),\n createProduct('pop-3', 'Winter Gloves', '89.95'),\n createProduct('pop-4', 'Summer Gloves', '89.95'),\n createProduct('pop-5', 'Spring Gloves', '89.95'),\n createProduct('pop-6', 'Playstation 5', '499.95'),\n createProduct('pop-7', 'Xbox Series X', '499.95'),\n createProduct('pop-8', 'Nintendo Switch', '299.95'),\n createProduct('pop-9', 'Playstation 4', '299.95'),\n createProduct('pop-10', 'Nintendo 3DS', '89.95'),\n ],\n pageInfo: createPagination(),\n },\n share: {\n message: 'Shared!',\n success: true,\n },\n shareSingle: {\n message: 'Shared!',\n success: true,\n },\n getSavedProducts: {\n data: [\n createProduct('saved-1', 'Saved Product 1', '49.99'),\n createProduct('saved-2', 'Saved Product 2', '59.99'),\n createProduct('saved-3', 'Saved Product 3', '69.99'),\n createProduct('saved-4', 'Saved Product 4', '79.99'),\n createProduct('saved-5', 'Saved Product 5', '89.99'),\n ],\n pageInfo: createPagination(),\n },\n getRecentProducts: {\n data: [\n createProduct('recent-1', 'Recent Product 1', '59.99'),\n createProduct('recent-2', 'Recent Product 2', '69.99'),\n createProduct('recent-3', 'Recent Product 3', '79.99'),\n createProduct('recent-4', 'Recent Product 4', '89.99'),\n createProduct('recent-5', 'Recent Product 5', '99.99'),\n ],\n pageInfo: createPagination(),\n },\n getProductSearch: {\n data: [\n createProduct('search-1', 'Search Product 1', '39.99'),\n createProduct('search-2', 'Search Product 2', '19.99'),\n createProduct('search-3', 'Search Product 3', '29.99'),\n createProduct('search-4', 'Search Product 4', '49.99'),\n createProduct('search-5', 'Search Product 5', '9.99'),\n ],\n pageInfo: createPagination(),\n },\n getProducts: {\n data: [\n createProduct('prod-1', 'Product 1', '9.99'),\n createProduct('prod-2', 'Product 2', '19.99'),\n createProduct('prod-3', 'Product 3', '29.99'),\n createProduct('prod-4', 'Product 4', '39.99'),\n createProduct('prod-5', 'Product 5', '49.99'),\n ],\n },\n getProduct: {data: createProduct('prod-1', 'Sample Product')},\n getProductVariants: {\n data: [\n {\n id: 'variant-1',\n title: 'Variant 1',\n isFavorited: false,\n image: {url: 'https://example.com/variant-1.jpg'},\n price: {amount: '19.99', currencyCode: 'USD'},\n compareAtPrice: {amount: '29.99', currencyCode: 'USD'},\n },\n ],\n pageInfo: createPagination(),\n },\n getProductMedia: {\n data: [\n {\n id: 'media-1',\n image: {url: 'https://example.com/media-1.jpg'},\n mediaContentType: 'IMAGE',\n alt: 'Sample product image',\n },\n ],\n pageInfo: createPagination(),\n },\n getProductReviews: {\n data: [\n createProductReview('review-1'),\n createProductReview('review-2', {rating: 4, title: 'Pretty good'}),\n createProductReview('review-3', {\n rating: 3,\n title: 'Okay',\n merchantReply: 'Thanks for the feedback!',\n merchantRepliedAt: new Date().toISOString(),\n }),\n ],\n pageInfo: createPagination(),\n },\n getShop: {\n data: createShop('shop-1', 'Sample Shop', {featuredImagesLimit: 4}),\n },\n getRecentShops: {\n data: [\n createShop('recent-shop-1', 'Recent Shop 1'),\n createShop('recent-shop-2', 'Recent Shop 2'),\n createShop('recent-shop-3', 'Recent Shop 3'),\n ],\n pageInfo: createPagination(),\n },\n getFollowedShops: {\n data: [\n createShop('followed-shop-1', 'Followed Shop 1'),\n createShop('followed-shop-2', 'Followed Shop 2'),\n createShop('followed-shop-3', 'Followed Shop 3'),\n ],\n pageInfo: createPagination(),\n },\n previewProductInAr: undefined,\n createContent: {\n data: {\n publicId: 'content-123',\n externalId: null,\n image: {\n id: 'img-123',\n url: 'https://cdn.shopify.com/s/files/1/0633/6574/2742/files/Namnlosdesign-47.png?v=1740438079',\n width: 800,\n height: 600,\n },\n title: 'Mock Content',\n description: 'This is a mock content item',\n visibility: ['DISCOVERABLE'],\n shareableUrl: 'https://example.com/content/123',\n products: null,\n },\n },\n getContent: {\n data: [\n {\n publicId: 'content-123',\n image: {\n id: 'img-123',\n url: 'https://cdn.shopify.com/s/files/1/0633/6574/2742/files/Namnlosdesign-47.png?v=1740438079',\n width: 800,\n height: 600,\n },\n title: 'Mock Content',\n visibility: ['DISCOVERABLE'],\n status: MinisContentStatus.READY,\n },\n ],\n },\n generateUserToken: {\n data: {\n token: 'user-token-123',\n expiresAt: '2025-01-01',\n userState: UserState.VERIFIED,\n },\n },\n navigateToCart: undefined,\n requestPermission: {\n granted: true,\n },\n reportError: undefined,\n reportFetch: undefined,\n } as const\n\n const mock: Partial<ShopActions> = {}\n for (const key in results) {\n if (Object.prototype.hasOwnProperty.call(results, key)) {\n // @ts-expect-error: dynamic assignment is safe due to exhaustive mapping\n mock[key] = makeMockMethod(\n key as keyof ShopActions,\n results[key as keyof typeof results]\n )\n }\n }\n return mock as ShopActions\n}\n\n// Detect if running on a mobile device\nconst isMobile = (): boolean => {\n const userAgent = navigator.userAgent.toLowerCase()\n const isIOS = /iphone|ipad|ipod/.test(userAgent)\n const isAndroid = /android/.test(userAgent)\n\n return isIOS || isAndroid\n}\n\nexport const injectMocks = ({force}: {force?: boolean} = {}) => {\n // Only inject mocks if we aren't on a mobile device or we force it\n if (isMobile() && !force) {\n return\n }\n\n if (!window.minisSDK) {\n window.minisSDK = makeMockActions()\n window.minisParams = {\n handle: 'mock-handle',\n initialUrl: '/',\n platform: 'web',\n }\n }\n}\n"],"names":["SAMPLE_IMAGE_NAMES","hashString","str","hash","i","createProduct","id","title","price","compareAtPrice","imageIndex","imageName","createShop","createProductReview","overrides","name","options","themeType","shouldHaveBrandSettings","featuredImagesCount","featuredImages","_","getThemeColors","createHeaderTheme","createPagination","hasNext","createProductList","products","logMockAction","action","params","makeMockMethod","key","result","makeMockActions","results","MinisContentStatus","UserState","mock","isMobile","userAgent","isIOS","isAndroid","injectMocks","force"],"mappings":"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"}
1
+ {"version":3,"file":"mocks.js","sources":["../src/mocks.ts"],"sourcesContent":["import {\n Product,\n ProductReview,\n Gender,\n UserState,\n MinisContentStatus,\n} from '@shopify/shop-minis-platform'\nimport {ShopActions} from '@shopify/shop-minis-platform/actions'\n\nconst SAMPLE_IMAGE_NAMES = [\n 'garnished.jpeg',\n 'bath.jpeg',\n 'teapot.jpg',\n 'shoes.jpeg',\n]\n\n// Simple hash function to get a deterministic index from a string\nconst hashString = (str: string): number => {\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) - hash + str.charCodeAt(i)\n hash |= 0\n }\n return Math.abs(hash)\n}\n\n// Helper functions for common data structures\nexport const createProduct = (\n id: string,\n title: string,\n price = '99.99',\n compareAtPrice?: string\n): Product => {\n const imageIndex = hashString(id) % SAMPLE_IMAGE_NAMES.length\n const imageName = SAMPLE_IMAGE_NAMES[imageIndex]\n\n return {\n id,\n title,\n price: {amount: price, currencyCode: 'USD'},\n ...(compareAtPrice && {\n compareAtPrice: {amount: compareAtPrice, currencyCode: 'USD'},\n }),\n reviewAnalytics: {averageRating: 4.5, reviewCount: 10},\n shop: createShop('shop1', 'Mock Shop'),\n defaultVariantId: `variant-${id}`,\n isFavorited: false,\n featuredImage: {\n url: `https://cdn.shopify.com/static/sample-images/${imageName}`,\n altText: title,\n },\n }\n}\n\nexport const createProductReview = (\n id: string,\n overrides: Partial<ProductReview> = {}\n): ProductReview => {\n return {\n id,\n rating: 5,\n title: 'Great product',\n body: 'Loved it. Would buy again.',\n submittedAt: new Date().toISOString(),\n merchantReply: null,\n merchantRepliedAt: null,\n ...overrides,\n }\n}\n\nexport const createShop = (\n id: string,\n name: string,\n options?: {\n themeType?: 'coverImage' | 'brandColor' | 'logoColor' | 'none'\n withBrandSettings?: boolean\n primaryColor?: string\n logoDominantColor?: string\n logoAverageColor?: string\n coverDominantColor?: string\n wordmarkUrl?: string\n coverImageUrl?: string\n featuredImagesLimit?: number\n }\n) => {\n // Determine theme configuration\n const themeType = options?.themeType || 'none'\n const shouldHaveBrandSettings =\n options?.withBrandSettings || themeType !== 'none'\n\n // Generate featured images\n const featuredImagesCount = options?.featuredImagesLimit || 3\n const featuredImages = Array.from({length: featuredImagesCount}, (_, i) => ({\n url: `https://picsum.photos/400/400?random=${id}-${i}`,\n sensitive: false,\n altText: `${name} featured image ${i + 1}`,\n }))\n\n // Configure colors based on theme type\n const getThemeColors = () => {\n switch (themeType) {\n case 'coverImage':\n return {\n primary: options?.primaryColor,\n logoDominant: options?.logoDominantColor,\n logoAverage: options?.logoAverageColor,\n coverDominant: options?.coverDominantColor || '#FF6B35',\n }\n case 'brandColor':\n return {\n primary: options?.primaryColor || '#27AE60',\n logoDominant: options?.logoDominantColor,\n logoAverage: options?.logoAverageColor,\n coverDominant: options?.coverDominantColor,\n }\n case 'logoColor':\n return {\n primary: options?.primaryColor,\n logoDominant: options?.logoDominantColor || '#E74C3C',\n logoAverage: options?.logoAverageColor,\n coverDominant: options?.coverDominantColor,\n }\n default:\n return {\n primary: options?.primaryColor,\n logoDominant: options?.logoDominantColor,\n logoAverage: options?.logoAverageColor,\n coverDominant: options?.coverDominantColor,\n }\n }\n }\n\n // Configure header theme\n const createHeaderTheme = () => {\n if (themeType === 'coverImage' || options?.coverImageUrl) {\n return {\n id: `header-theme-${id}`,\n coverImage: {\n url:\n options?.coverImageUrl ||\n 'https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=800&h=400&fit=crop',\n altText: `${name} cover image`,\n sensitive: false,\n thumbhash: 'k9oGHQRnh493V4dIeHeXh4h3iIeI',\n },\n wordmark:\n options?.wordmarkUrl || themeType === 'coverImage'\n ? {\n url:\n options?.wordmarkUrl ||\n 'https://merrypeople.com/cdn/shop/files/Transparent_Background_1.png?v=1696465429&width=1024',\n altText: `${name} wordmark`,\n sensitive: false,\n }\n : undefined,\n }\n }\n\n if (options?.wordmarkUrl) {\n return {\n id: `header-theme-${id}`,\n wordmark: {\n url: options.wordmarkUrl,\n altText: `${name} wordmark`,\n sensitive: false,\n },\n }\n }\n\n return undefined\n }\n\n return {\n id,\n name,\n primaryDomain: {\n url: `https://${name.toLowerCase().replace(/\\s+/g, '-')}.com`,\n },\n reviewAnalytics: {averageRating: 4.3, reviewCount: 50},\n visualTheme: {\n id: `visual-theme-${id}`,\n featuredImages,\n logoImage: {\n url: `https://picsum.photos/100/100?random=${id}`,\n sensitive: false,\n },\n brandSettings: shouldHaveBrandSettings\n ? {\n id: `brand-settings-${id}`,\n colors: {\n id: `colors-${id}`,\n ...getThemeColors(),\n },\n headerTheme: createHeaderTheme(),\n }\n : undefined,\n },\n }\n}\n\nconst createPagination = (hasNext = false) => ({\n hasNextPage: hasNext,\n endCursor: hasNext ? 'cursor123' : null,\n})\n\nconst createProductList = (id: string, name: string, products: any[] = []) => ({\n id,\n publicId: `public-${id}`,\n name,\n privacyStatus: 'PRIVATE' as const,\n products,\n})\n\n// Helper type to extract the data type from a ShopAction\ntype ShopActionDataType<T> = T extends (\n ...args: any[]\n) => Promise<{ok: true; data: infer R} | {ok: false; error: any}>\n ? R\n : never\n\n// Use window._mockLogs instead of console.log so logs aren't stripped in production builds\n// This allows e2e tests to verify mock actions are being called\nexport interface MockLog {\n action: string\n params?: unknown\n}\n\ndeclare global {\n interface Window {\n _mockLogs?: MockLog[]\n }\n}\n\nfunction logMockAction(action: string, params?: unknown) {\n window._mockLogs = window._mockLogs || []\n window._mockLogs.push({action, params})\n}\n\nfunction makeMockMethod<K extends keyof ShopActions>(\n key: K,\n result: ShopActionDataType<ShopActions[K]>\n): ShopActions[K] {\n return ((params: Parameters<ShopActions[K]>[0]) => {\n logMockAction(String(key), params)\n return Promise.resolve({\n ok: true as const,\n data: result,\n mocked: true,\n })\n }) as ShopActions[K]\n}\n\nexport function makeMockActions(): ShopActions {\n const results: {\n [K in keyof ShopActions]: ShopActionDataType<ShopActions[K]>\n } = {\n translateContentUp: undefined,\n translateContentDown: undefined,\n followShop: true,\n unfollowShop: false,\n favorite: undefined,\n unfavorite: undefined,\n getShopAppInformation: {\n appVersion: '1.0.0',\n buildNumber: '12345',\n buildId: 'dev-build-123',\n },\n productRecommendationImpression: undefined,\n productRecommendationClick: undefined,\n closeMini: undefined,\n getAccountInformation: {\n status: 'available',\n value: 'user@example.com',\n },\n getCurrentUser: {\n data: {\n displayName: 'John Doe',\n avatarImage: {url: 'https://example.com/avatar.jpg'},\n },\n },\n createOrderAttribution: undefined,\n addToCart: undefined,\n buyProduct: undefined,\n buyProducts: undefined,\n showErrorScreen: undefined,\n showErrorToast: undefined,\n getDeeplinkPaths: {\n matchers: ['/products', '/collections', '/cart'],\n },\n navigateToDeeplink: undefined,\n navigateToShop: undefined,\n navigateToProduct: undefined,\n navigateToOrder: undefined,\n navigateToCheckout: undefined,\n createImageUploadLink: {\n // This action is mocked in the actual hook. See `useImageUpload` for more details.\n targets: [\n {\n url: 'https://example.com/upload',\n resourceUrl: 'https://example.com/resource',\n parameters: [{name: 'key', value: 'upload-123'}],\n },\n ],\n },\n completeImageUpload: {\n files: [\n {\n id: 'file-123',\n fileStatus: 'READY',\n image: {\n url: 'https://example.com/image.jpg',\n },\n },\n ],\n },\n getPersistedItem: null,\n setPersistedItem: undefined,\n removePersistedItem: undefined,\n getAllPersistedKeys: ['key1', 'key2', 'key3'],\n clearPersistedItems: undefined,\n getInternalPersistedItem: null,\n setInternalPersistedItem: undefined,\n removeInternalPersistedItem: undefined,\n getAllInternalPersistedKeys: ['internal-key1', 'internal-key2'],\n clearInternalPersistedItems: undefined,\n getSecret: 'secret-value',\n setSecret: undefined,\n removeSecret: undefined,\n reportInteraction: undefined,\n reportImpression: undefined,\n reportContentImpression: undefined,\n getProductLists: {\n data: [\n createProductList('list-1', 'Wishlist'),\n createProductList('list-2', 'Favorites'),\n ],\n pageInfo: createPagination(),\n },\n getProductList: {\n data: createProductList('list-1', 'Wishlist', [\n createProduct('prod-1', 'Sample Product'),\n ]),\n pageInfo: createPagination(),\n },\n addProductList: createProductList('list-3', 'New List'),\n removeProductList: undefined,\n renameProductList: createProductList('list-1', 'Updated Wishlist'),\n setProductListVisibility: createProductList('list-1', 'Wishlist'),\n addProductListItem: undefined,\n removeProductListItem: undefined,\n getRecommendedProducts: {\n data: [\n createProduct('rec-1', 'Recommended Product 1', '79.99'),\n createProduct('rec-2', 'Recommended Product 2', '129.99'),\n createProduct('rec-3', 'Recommended Product 3', '129.99'),\n createProduct('rec-4', 'Recommended Product 4', '29.99'),\n createProduct('rec-5', 'Recommended Product 5', '39.99'),\n createProduct('rec-6', 'Recommended Product 6', '49.99'),\n createProduct('rec-7', 'Recommended Product 7', '59.99'),\n createProduct('rec-8', 'Recommended Product 8', '69.99'),\n createProduct('rec-9', 'Recommended Product 9', '129.99'),\n ],\n pageInfo: createPagination(),\n },\n getRecommendedShops: {\n data: [\n createShop('shop-1', 'Amazing Store'),\n createShop('shop-2', 'Best Deals Shop'),\n createShop('shop-3', 'Great Products'),\n createShop('shop-4', 'Top Brands'),\n createShop('shop-5', 'Exclusive Offers'),\n ],\n pageInfo: createPagination(),\n },\n searchProductsByShop: {\n data: [\n createProduct('search-1', 'Search Result 1', '59.99'),\n createProduct('search-2', 'Search Result 2', '89.99'),\n createProduct('search-3', 'Search Result 3', '119.99'),\n createProduct('search-4', 'Search Result 4', '149.99'),\n createProduct('search-5', 'Search Result 5', '179.99'),\n ],\n pageInfo: createPagination(),\n },\n getOrders: {\n data: [\n {\n id: 'order-1',\n name: '#1001',\n lineItems: [\n {\n productTitle: 'Sample Product',\n variantTitle: 'Medium',\n quantity: 2,\n product: null,\n },\n ],\n shop: createShop('shop-1', 'Sample Shop'),\n },\n ],\n pageInfo: createPagination(),\n },\n getBuyerAttributes: {\n data: {\n genderAffinity: 'NEUTRAL' as Gender,\n categoryAffinities: [\n {id: 'cat1', name: 'Electronics'},\n {id: 'cat2', name: 'Clothing'},\n ],\n },\n },\n showFeedbackSheet: undefined,\n getPopularProducts: {\n data: [\n createProduct('pop-1', 'The Hero Snowboard', '702.95'),\n createProduct('pop-2', 'Snow Jacket', '605.95', '702.00'),\n createProduct('pop-3', 'Winter Gloves', '89.95'),\n createProduct('pop-4', 'Summer Gloves', '89.95'),\n createProduct('pop-5', 'Spring Gloves', '89.95'),\n createProduct('pop-6', 'Playstation 5', '499.95'),\n createProduct('pop-7', 'Xbox Series X', '499.95'),\n createProduct('pop-8', 'Nintendo Switch', '299.95'),\n createProduct('pop-9', 'Playstation 4', '299.95'),\n createProduct('pop-10', 'Nintendo 3DS', '89.95'),\n ],\n pageInfo: createPagination(),\n },\n share: {\n message: 'Shared!',\n success: true,\n },\n shareSingle: {\n message: 'Shared!',\n success: true,\n },\n getSavedProducts: {\n data: [\n createProduct('saved-1', 'Saved Product 1', '49.99'),\n createProduct('saved-2', 'Saved Product 2', '59.99'),\n createProduct('saved-3', 'Saved Product 3', '69.99'),\n createProduct('saved-4', 'Saved Product 4', '79.99'),\n createProduct('saved-5', 'Saved Product 5', '89.99'),\n ],\n pageInfo: createPagination(),\n },\n getRecentProducts: {\n data: [\n createProduct('recent-1', 'Recent Product 1', '59.99'),\n createProduct('recent-2', 'Recent Product 2', '69.99'),\n createProduct('recent-3', 'Recent Product 3', '79.99'),\n createProduct('recent-4', 'Recent Product 4', '89.99'),\n createProduct('recent-5', 'Recent Product 5', '99.99'),\n ],\n pageInfo: createPagination(),\n },\n getProductSearch: {\n data: [\n createProduct('search-1', 'Search Product 1', '39.99'),\n createProduct('search-2', 'Search Product 2', '19.99'),\n createProduct('search-3', 'Search Product 3', '29.99'),\n createProduct('search-4', 'Search Product 4', '49.99'),\n createProduct('search-5', 'Search Product 5', '9.99'),\n ],\n pageInfo: createPagination(),\n },\n getProducts: {\n data: [\n createProduct('prod-1', 'Product 1', '9.99'),\n createProduct('prod-2', 'Product 2', '19.99'),\n createProduct('prod-3', 'Product 3', '29.99'),\n createProduct('prod-4', 'Product 4', '39.99'),\n createProduct('prod-5', 'Product 5', '49.99'),\n ],\n },\n getProduct: {data: createProduct('prod-1', 'Sample Product')},\n getProductVariants: {\n data: [\n {\n id: 'variant-1',\n title: 'Variant 1',\n isFavorited: false,\n image: {url: 'https://example.com/variant-1.jpg'},\n price: {amount: '19.99', currencyCode: 'USD'},\n compareAtPrice: {amount: '29.99', currencyCode: 'USD'},\n },\n ],\n pageInfo: createPagination(),\n },\n getProductMedia: {\n data: [\n {\n id: 'media-1',\n image: {url: 'https://example.com/media-1.jpg'},\n mediaContentType: 'IMAGE',\n alt: 'Sample product image',\n },\n ],\n pageInfo: createPagination(),\n },\n getProductReviews: {\n data: [\n createProductReview('review-1'),\n createProductReview('review-2', {rating: 4, title: 'Pretty good'}),\n createProductReview('review-3', {\n rating: 3,\n title: 'Okay',\n merchantReply: 'Thanks for the feedback!',\n merchantRepliedAt: new Date().toISOString(),\n }),\n ],\n pageInfo: createPagination(),\n },\n getShop: {\n data: createShop('shop-1', 'Sample Shop', {featuredImagesLimit: 4}),\n },\n getRecentShops: {\n data: [\n createShop('recent-shop-1', 'Recent Shop 1'),\n createShop('recent-shop-2', 'Recent Shop 2'),\n createShop('recent-shop-3', 'Recent Shop 3'),\n ],\n pageInfo: createPagination(),\n },\n getFollowedShops: {\n data: [\n createShop('followed-shop-1', 'Followed Shop 1'),\n createShop('followed-shop-2', 'Followed Shop 2'),\n createShop('followed-shop-3', 'Followed Shop 3'),\n ],\n pageInfo: createPagination(),\n },\n previewProductInAR: undefined,\n createContent: {\n data: {\n publicId: 'content-123',\n externalId: null,\n image: {\n id: 'img-123',\n url: 'https://cdn.shopify.com/s/files/1/0633/6574/2742/files/Namnlosdesign-47.png?v=1740438079',\n width: 800,\n height: 600,\n },\n title: 'Mock Content',\n description: 'This is a mock content item',\n visibility: ['DISCOVERABLE'],\n shareableUrl: 'https://example.com/content/123',\n products: null,\n },\n },\n getContent: {\n data: [\n {\n publicId: 'content-123',\n image: {\n id: 'img-123',\n url: 'https://cdn.shopify.com/s/files/1/0633/6574/2742/files/Namnlosdesign-47.png?v=1740438079',\n width: 800,\n height: 600,\n },\n title: 'Mock Content',\n visibility: ['DISCOVERABLE'],\n status: MinisContentStatus.READY,\n },\n ],\n },\n generateUserToken: {\n data: {\n token: 'user-token-123',\n expiresAt: '2025-01-01',\n userState: UserState.VERIFIED,\n },\n },\n navigateToCart: undefined,\n requestPermission: {\n granted: true,\n },\n reportError: undefined,\n reportFetch: undefined,\n } as const\n\n const mock: Partial<ShopActions> = {}\n for (const key in results) {\n if (Object.prototype.hasOwnProperty.call(results, key)) {\n // @ts-expect-error: dynamic assignment is safe due to exhaustive mapping\n mock[key] = makeMockMethod(\n key as keyof ShopActions,\n results[key as keyof typeof results]\n )\n }\n }\n return mock as ShopActions\n}\n\n// Detect if running on a mobile device\nconst isMobile = (): boolean => {\n const userAgent = navigator.userAgent.toLowerCase()\n const isIOS = /iphone|ipad|ipod/.test(userAgent)\n const isAndroid = /android/.test(userAgent)\n\n return isIOS || isAndroid\n}\n\nexport const injectMocks = ({force}: {force?: boolean} = {}) => {\n // Only inject mocks if we aren't on a mobile device or we force it\n if (isMobile() && !force) {\n return\n }\n\n if (!window.minisSDK) {\n window.minisSDK = makeMockActions()\n window.minisParams = {\n handle: 'mock-handle',\n initialUrl: '/',\n platform: 'web',\n }\n }\n}\n"],"names":["SAMPLE_IMAGE_NAMES","hashString","str","hash","i","createProduct","id","title","price","compareAtPrice","imageIndex","imageName","createShop","createProductReview","overrides","name","options","themeType","shouldHaveBrandSettings","featuredImagesCount","featuredImages","_","getThemeColors","createHeaderTheme","createPagination","hasNext","createProductList","products","logMockAction","action","params","makeMockMethod","key","result","makeMockActions","results","MinisContentStatus","UserState","mock","isMobile","userAgent","isIOS","isAndroid","injectMocks","force"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shopify/shop-minis-react",
3
3
  "license": "SEE LICENSE IN LICENSE.txt",
4
- "version": "0.7.0",
4
+ "version": "0.8.0",
5
5
  "sideEffects": false,
6
6
  "type": "module",
7
7
  "engines": {
@@ -46,7 +46,7 @@
46
46
  "typescript": ">=5.0.0"
47
47
  },
48
48
  "dependencies": {
49
- "@shopify/shop-minis-platform": "0.10.0",
49
+ "@shopify/shop-minis-platform": "0.11.0",
50
50
  "@tailwindcss/vite": "4.1.8",
51
51
  "@tanstack/react-query": "5.86.0",
52
52
  "@types/color": "3.0.6",
@@ -0,0 +1,28 @@
1
+ export interface StaticAreaDocProps {
2
+ /** Position of the fixed area on screen - either pinned to top or bottom */
3
+ position: 'top' | 'bottom'
4
+ /** Static area content */
5
+ children?: React.ReactNode
6
+ }
7
+
8
+ export function StaticArea({
9
+ position,
10
+ children,
11
+ }: {
12
+ position: 'top' | 'bottom'
13
+ children: React.ReactNode
14
+ }) {
15
+ return (
16
+ <div
17
+ style={{
18
+ position: 'fixed',
19
+ left: 0,
20
+ right: 0,
21
+ [position]: 0,
22
+ viewTransitionName: `minis-fixed-${position}`,
23
+ }}
24
+ >
25
+ {children}
26
+ </div>
27
+ )
28
+ }
@@ -27,6 +27,7 @@ export * from './atoms/video-player'
27
27
  export * from './atoms/text-input'
28
28
  export * from './atoms/content-wrapper'
29
29
  export * from './atoms/product-variant-price'
30
+ export * from './atoms/static-area'
30
31
 
31
32
  export * from './ui/accordion'
32
33
  export * from './ui/alert'
@@ -22,6 +22,7 @@ export * from './product/useProductReviews'
22
22
  export * from './product/useProductSearch'
23
23
  export * from './product/useRecommendedProducts'
24
24
  export * from './product/usePopularProducts'
25
+ export * from './product/useARPreview'
25
26
 
26
27
  // - Storage Hooks
27
28
  export * from './storage/useAsyncStorage'
@@ -0,0 +1,21 @@
1
+ import {PreviewProductInARParams} from '@shopify/shop-minis-platform/actions'
2
+
3
+ import {useHandleAction} from '../../internal/useHandleAction'
4
+ import {useShopActions} from '../../internal/useShopActions'
5
+
6
+ interface UseARPreviewReturns {
7
+ /**
8
+ * Previews a product in AR. Fetches the product's 3D model and launches the native AR viewer.
9
+ * @param params - The parameters for the AR preview, including the product ID.
10
+ * @throws Error if the product has no 3D model or if the model sources are missing.
11
+ */
12
+ previewProductInAR: (params: PreviewProductInARParams) => Promise<void>
13
+ }
14
+
15
+ export const useARPreview = (): UseARPreviewReturns => {
16
+ const {previewProductInAR} = useShopActions()
17
+
18
+ return {
19
+ previewProductInAR: useHandleAction(previewProductInAR),
20
+ }
21
+ }
package/src/mocks.ts CHANGED
@@ -529,7 +529,7 @@ export function makeMockActions(): ShopActions {
529
529
  ],
530
530
  pageInfo: createPagination(),
531
531
  },
532
- previewProductInAr: undefined,
532
+ previewProductInAR: undefined,
533
533
  createContent: {
534
534
  data: {
535
535
  publicId: 'content-123',
@@ -141,4 +141,16 @@
141
141
  animation: 0 !important;
142
142
  opacity: 0 !important;
143
143
  }
144
+
145
+ /* Fixed elements that persist across view transitions */
146
+ ::view-transition-group(minis-fixed-top),
147
+ ::view-transition-old(minis-fixed-top),
148
+ ::view-transition-new(minis-fixed-top),
149
+ ::view-transition-group(minis-fixed-bottom),
150
+ ::view-transition-old(minis-fixed-bottom),
151
+ ::view-transition-new(minis-fixed-bottom) {
152
+ animation: none !important;
153
+ }
144
154
  }
155
+
156
+