@tiledev/sdk-apptile-live-selling 0.16.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attribution.d.ts +2 -16
- package/dist/attribution.d.ts.map +1 -1
- package/dist/attribution.js +4 -10
- package/dist/attribution.js.map +1 -1
- package/dist/auctions.d.ts.map +1 -1
- package/dist/auctions.js +11 -42
- package/dist/auctions.js.map +1 -1
- package/dist/cartAttributes.d.ts +0 -10
- package/dist/cartAttributes.d.ts.map +1 -1
- package/dist/cartAttributes.js +1 -20
- package/dist/cartAttributes.js.map +1 -1
- package/dist/client.d.ts +2 -51
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +23 -123
- package/dist/client.js.map +1 -1
- package/dist/clips.d.ts +1 -12
- package/dist/clips.d.ts.map +1 -1
- package/dist/clips.js +6 -114
- package/dist/clips.js.map +1 -1
- package/dist/commentLinks.d.ts +0 -29
- package/dist/commentLinks.d.ts.map +1 -1
- package/dist/commentLinks.js.map +1 -1
- package/dist/engine.native.d.ts.map +1 -1
- package/dist/engine.native.js +845 -17
- package/dist/engine.native.js.map +1 -1
- package/dist/index.d.ts +4 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -240
- package/dist/index.js.map +1 -1
- package/dist/polls.d.ts.map +1 -1
- package/dist/polls.js +0 -3
- package/dist/polls.js.map +1 -1
- package/dist/react/LiveSellingProvider.d.ts +1 -54
- package/dist/react/LiveSellingProvider.d.ts.map +1 -1
- package/dist/react/LiveSellingProvider.js +3 -60
- package/dist/react/LiveSellingProvider.js.map +1 -1
- package/dist/react/LiveVideoTarget.d.ts.map +1 -1
- package/dist/react/LiveVideoTarget.js +3 -41
- package/dist/react/LiveVideoTarget.js.map +1 -1
- package/dist/react/index.d.ts +3 -30
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -79
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.web.d.ts +32 -36
- package/dist/react/index.web.d.ts.map +1 -1
- package/dist/react/index.web.js +122 -102
- package/dist/react/index.web.js.map +1 -1
- package/dist/react/useAuctionBidGate.d.ts +6 -62
- package/dist/react/useAuctionBidGate.d.ts.map +1 -1
- package/dist/react/useAuctionBidGate.js +27 -228
- package/dist/react/useAuctionBidGate.js.map +1 -1
- package/dist/react/useAuctionWins.d.ts +4 -14
- package/dist/react/useAuctionWins.d.ts.map +1 -1
- package/dist/react/useAuctionWins.js +5 -16
- package/dist/react/useAuctionWins.js.map +1 -1
- package/dist/react/useClips.d.ts +1 -7
- package/dist/react/useClips.d.ts.map +1 -1
- package/dist/react/useClips.js +7 -20
- package/dist/react/useClips.js.map +1 -1
- package/dist/react/useLiveSession.d.ts +3 -15
- package/dist/react/useLiveSession.d.ts.map +1 -1
- package/dist/react/useLiveSession.js +199 -612
- package/dist/react/useLiveSession.js.map +1 -1
- package/dist/react/useLiveStreams.d.ts.map +1 -1
- package/dist/react/useLiveStreams.js +2 -6
- package/dist/react/useLiveStreams.js.map +1 -1
- package/dist/react/useOngoingLive.d.ts +0 -1
- package/dist/react/useOngoingLive.d.ts.map +1 -1
- package/dist/react/useOngoingLive.js +1 -7
- package/dist/react/useOngoingLive.js.map +1 -1
- package/dist/react/useReplays.d.ts +0 -12
- package/dist/react/useReplays.d.ts.map +1 -1
- package/dist/react/useReplays.js +24 -56
- package/dist/react/useReplays.js.map +1 -1
- package/dist/react/useStreamInfo.d.ts +2 -13
- package/dist/react/useStreamInfo.d.ts.map +1 -1
- package/dist/react/useStreamInfo.js +8 -36
- package/dist/react/useStreamInfo.js.map +1 -1
- package/dist/replays.d.ts +0 -14
- package/dist/replays.d.ts.map +1 -1
- package/dist/replays.js +22 -68
- package/dist/replays.js.map +1 -1
- package/dist/session.d.ts +6 -39
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +22 -209
- package/dist/session.js.map +1 -1
- package/dist/sessionTypes.d.ts +18 -217
- package/dist/sessionTypes.d.ts.map +1 -1
- package/dist/sessionTypes.js +1 -2
- package/dist/sessionTypes.js.map +1 -1
- package/dist/streams.d.ts +1 -27
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +21 -84
- package/dist/streams.js.map +1 -1
- package/dist/types.d.ts +10 -288
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/dist/wire.d.ts +0 -31
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +0 -25
- package/dist/wire.js.map +1 -1
- package/dist/zego.d.ts +1 -3
- package/dist/zego.d.ts.map +1 -1
- package/dist/zego.js +1 -1
- package/package.json +1 -1
- package/dist/auctionComments.d.ts +0 -25
- package/dist/auctionComments.d.ts.map +0 -1
- package/dist/auctionComments.js +0 -28
- package/dist/auctionComments.js.map +0 -1
- package/dist/auctionRules.d.ts +0 -77
- package/dist/auctionRules.d.ts.map +0 -1
- package/dist/auctionRules.js +0 -107
- package/dist/auctionRules.js.map +0 -1
- package/dist/cartExtension.d.ts +0 -39
- package/dist/cartExtension.d.ts.map +0 -1
- package/dist/cartExtension.js +0 -51
- package/dist/cartExtension.js.map +0 -1
- package/dist/checkoutRefused.d.ts +0 -9
- package/dist/checkoutRefused.d.ts.map +0 -1
- package/dist/checkoutRefused.js +0 -16
- package/dist/checkoutRefused.js.map +0 -1
- package/dist/clipsPage.d.ts +0 -29
- package/dist/clipsPage.d.ts.map +0 -1
- package/dist/clipsPage.js +0 -49
- package/dist/clipsPage.js.map +0 -1
- package/dist/commentHistory.d.ts +0 -70
- package/dist/commentHistory.d.ts.map +0 -1
- package/dist/commentHistory.js +0 -133
- package/dist/commentHistory.js.map +0 -1
- package/dist/commentLinkCards.d.ts +0 -11
- package/dist/commentLinkCards.d.ts.map +0 -1
- package/dist/commentLinkCards.js +0 -70
- package/dist/commentLinkCards.js.map +0 -1
- package/dist/giveawayPrize.d.ts +0 -13
- package/dist/giveawayPrize.d.ts.map +0 -1
- package/dist/giveawayPrize.js +0 -18
- package/dist/giveawayPrize.js.map +0 -1
- package/dist/giveawayPrizeLines.d.ts +0 -120
- package/dist/giveawayPrizeLines.d.ts.map +0 -1
- package/dist/giveawayPrizeLines.js +0 -97
- package/dist/giveawayPrizeLines.js.map +0 -1
- package/dist/giveawayPrizes.d.ts +0 -20
- package/dist/giveawayPrizes.d.ts.map +0 -1
- package/dist/giveawayPrizes.js +0 -50
- package/dist/giveawayPrizes.js.map +0 -1
- package/dist/giveawayRoster.d.ts +0 -53
- package/dist/giveawayRoster.d.ts.map +0 -1
- package/dist/giveawayRoster.js +0 -93
- package/dist/giveawayRoster.js.map +0 -1
- package/dist/heldComments.d.ts +0 -40
- package/dist/heldComments.d.ts.map +0 -1
- package/dist/heldComments.js +0 -75
- package/dist/heldComments.js.map +0 -1
- package/dist/hiddenShows.d.ts +0 -44
- package/dist/hiddenShows.d.ts.map +0 -1
- package/dist/hiddenShows.js +0 -53
- package/dist/hiddenShows.js.map +0 -1
- package/dist/linkLots.d.ts +0 -64
- package/dist/linkLots.d.ts.map +0 -1
- package/dist/linkLots.js +0 -84
- package/dist/linkLots.js.map +0 -1
- package/dist/liveHaptics.d.ts +0 -7
- package/dist/liveHaptics.d.ts.map +0 -1
- package/dist/liveHaptics.js +0 -11
- package/dist/liveHaptics.js.map +0 -1
- package/dist/liveHaptics.native.d.ts +0 -7
- package/dist/liveHaptics.native.d.ts.map +0 -1
- package/dist/liveHaptics.native.js +0 -12
- package/dist/liveHaptics.native.js.map +0 -1
- package/dist/livePages.d.ts +0 -176
- package/dist/livePages.d.ts.map +0 -1
- package/dist/livePages.js +0 -216
- package/dist/livePages.js.map +0 -1
- package/dist/liveRoom.d.ts +0 -21
- package/dist/liveRoom.d.ts.map +0 -1
- package/dist/liveRoom.js +0 -28
- package/dist/liveRoom.js.map +0 -1
- package/dist/liveShow.d.ts +0 -65
- package/dist/liveShow.d.ts.map +0 -1
- package/dist/liveShow.js +0 -65
- package/dist/liveShow.js.map +0 -1
- package/dist/missedPolls.d.ts +0 -27
- package/dist/missedPolls.d.ts.map +0 -1
- package/dist/missedPolls.js +0 -16
- package/dist/missedPolls.js.map +0 -1
- package/dist/pageOptions.d.ts +0 -149
- package/dist/pageOptions.d.ts.map +0 -1
- package/dist/pageOptions.js +0 -123
- package/dist/pageOptions.js.map +0 -1
- package/dist/pageTypes.d.ts +0 -185
- package/dist/pageTypes.d.ts.map +0 -1
- package/dist/pageTypes.js +0 -3
- package/dist/pageTypes.js.map +0 -1
- package/dist/phoneTaps.d.ts +0 -25
- package/dist/phoneTaps.d.ts.map +0 -1
- package/dist/phoneTaps.js +0 -47
- package/dist/phoneTaps.js.map +0 -1
- package/dist/pipWindow.d.ts +0 -85
- package/dist/pipWindow.d.ts.map +0 -1
- package/dist/pipWindow.js +0 -88
- package/dist/pipWindow.js.map +0 -1
- package/dist/react/clocks.d.ts +0 -29
- package/dist/react/clocks.d.ts.map +0 -1
- package/dist/react/clocks.js +0 -124
- package/dist/react/clocks.js.map +0 -1
- package/dist/react/navigation.d.ts +0 -13
- package/dist/react/navigation.d.ts.map +0 -1
- package/dist/react/navigation.js +0 -7
- package/dist/react/navigation.js.map +0 -1
- package/dist/react/platformSession.d.ts +0 -16
- package/dist/react/platformSession.d.ts.map +0 -1
- package/dist/react/platformSession.js +0 -28
- package/dist/react/platformSession.js.map +0 -1
- package/dist/react/platformSession.web.d.ts +0 -35
- package/dist/react/platformSession.web.d.ts.map +0 -1
- package/dist/react/platformSession.web.js +0 -148
- package/dist/react/platformSession.web.js.map +0 -1
- package/dist/react/replayPlayer.d.ts +0 -83
- package/dist/react/replayPlayer.d.ts.map +0 -1
- package/dist/react/replayPlayer.js +0 -315
- package/dist/react/replayPlayer.js.map +0 -1
- package/dist/react/share.d.ts +0 -22
- package/dist/react/share.d.ts.map +0 -1
- package/dist/react/share.js +0 -45
- package/dist/react/share.js.map +0 -1
- package/dist/react/shopifyProviders.d.ts +0 -82
- package/dist/react/shopifyProviders.d.ts.map +0 -1
- package/dist/react/shopifyProviders.js +0 -113
- package/dist/react/shopifyProviders.js.map +0 -1
- package/dist/react/showPages.d.ts +0 -106
- package/dist/react/showPages.d.ts.map +0 -1
- package/dist/react/showPages.js +0 -166
- package/dist/react/showPages.js.map +0 -1
- package/dist/react/showPagesOnDevice.d.ts +0 -18
- package/dist/react/showPagesOnDevice.d.ts.map +0 -1
- package/dist/react/showPagesOnDevice.js +0 -31
- package/dist/react/showPagesOnDevice.js.map +0 -1
- package/dist/react/startSignIn.d.ts +0 -3
- package/dist/react/startSignIn.d.ts.map +0 -1
- package/dist/react/startSignIn.js +0 -19
- package/dist/react/startSignIn.js.map +0 -1
- package/dist/react/systemPictureInPicture.d.ts +0 -34
- package/dist/react/systemPictureInPicture.d.ts.map +0 -1
- package/dist/react/systemPictureInPicture.js +0 -93
- package/dist/react/systemPictureInPicture.js.map +0 -1
- package/dist/react/useAccountName.d.ts +0 -8
- package/dist/react/useAccountName.d.ts.map +0 -1
- package/dist/react/useAccountName.js +0 -49
- package/dist/react/useAccountName.js.map +0 -1
- package/dist/react/useClipsPage.d.ts +0 -47
- package/dist/react/useClipsPage.d.ts.map +0 -1
- package/dist/react/useClipsPage.js +0 -130
- package/dist/react/useClipsPage.js.map +0 -1
- package/dist/react/useCommentLinkCards.d.ts +0 -6
- package/dist/react/useCommentLinkCards.d.ts.map +0 -1
- package/dist/react/useCommentLinkCards.js +0 -67
- package/dist/react/useCommentLinkCards.js.map +0 -1
- package/dist/react/useFeaturedClip.d.ts +0 -15
- package/dist/react/useFeaturedClip.d.ts.map +0 -1
- package/dist/react/useFeaturedClip.js +0 -52
- package/dist/react/useFeaturedClip.js.map +0 -1
- package/dist/react/useGiveawayEntry.d.ts +0 -59
- package/dist/react/useGiveawayEntry.d.ts.map +0 -1
- package/dist/react/useGiveawayEntry.js +0 -170
- package/dist/react/useGiveawayEntry.js.map +0 -1
- package/dist/react/useGiveawayPrize.d.ts +0 -12
- package/dist/react/useGiveawayPrize.d.ts.map +0 -1
- package/dist/react/useGiveawayPrize.js +0 -53
- package/dist/react/useGiveawayPrize.js.map +0 -1
- package/dist/react/useGiveawayPrizes.d.ts +0 -4
- package/dist/react/useGiveawayPrizes.d.ts.map +0 -1
- package/dist/react/useGiveawayPrizes.js +0 -58
- package/dist/react/useGiveawayPrizes.js.map +0 -1
- package/dist/react/useHiddenShows.d.ts +0 -10
- package/dist/react/useHiddenShows.d.ts.map +0 -1
- package/dist/react/useHiddenShows.js +0 -30
- package/dist/react/useHiddenShows.js.map +0 -1
- package/dist/react/useKeepScreenAwake.d.ts +0 -2
- package/dist/react/useKeepScreenAwake.d.ts.map +0 -1
- package/dist/react/useKeepScreenAwake.js +0 -34
- package/dist/react/useKeepScreenAwake.js.map +0 -1
- package/dist/react/useLiveAuction.d.ts +0 -106
- package/dist/react/useLiveAuction.d.ts.map +0 -1
- package/dist/react/useLiveAuction.js +0 -255
- package/dist/react/useLiveAuction.js.map +0 -1
- package/dist/react/useLiveChat.d.ts +0 -110
- package/dist/react/useLiveChat.d.ts.map +0 -1
- package/dist/react/useLiveChat.js +0 -230
- package/dist/react/useLiveChat.js.map +0 -1
- package/dist/react/useLiveGiveawaysAndPolls.d.ts +0 -95
- package/dist/react/useLiveGiveawaysAndPolls.d.ts.map +0 -1
- package/dist/react/useLiveGiveawaysAndPolls.js +0 -225
- package/dist/react/useLiveGiveawaysAndPolls.js.map +0 -1
- package/dist/react/useLivePage.d.ts +0 -136
- package/dist/react/useLivePage.d.ts.map +0 -1
- package/dist/react/useLivePage.js +0 -319
- package/dist/react/useLivePage.js.map +0 -1
- package/dist/react/useLiveShop.d.ts +0 -97
- package/dist/react/useLiveShop.d.ts.map +0 -1
- package/dist/react/useLiveShop.js +0 -197
- package/dist/react/useLiveShop.js.map +0 -1
- package/dist/react/useLiveShow.d.ts +0 -3
- package/dist/react/useLiveShow.d.ts.map +0 -1
- package/dist/react/useLiveShow.js +0 -21
- package/dist/react/useLiveShow.js.map +0 -1
- package/dist/react/useMySilentAuctionBids.d.ts +0 -29
- package/dist/react/useMySilentAuctionBids.d.ts.map +0 -1
- package/dist/react/useMySilentAuctionBids.js +0 -157
- package/dist/react/useMySilentAuctionBids.js.map +0 -1
- package/dist/react/useReplayPage.d.ts +0 -155
- package/dist/react/useReplayPage.d.ts.map +0 -1
- package/dist/react/useReplayPage.js +0 -580
- package/dist/react/useReplayPage.js.map +0 -1
- package/dist/react/useSilentAuctionLot.d.ts +0 -44
- package/dist/react/useSilentAuctionLot.d.ts.map +0 -1
- package/dist/react/useSilentAuctionLot.js +0 -168
- package/dist/react/useSilentAuctionLot.js.map +0 -1
- package/dist/react/useSilentAuctionLots.d.ts +0 -41
- package/dist/react/useSilentAuctionLots.d.ts.map +0 -1
- package/dist/react/useSilentAuctionLots.js +0 -64
- package/dist/react/useSilentAuctionLots.js.map +0 -1
- package/dist/react/useSilentAuctionRounds.d.ts +0 -15
- package/dist/react/useSilentAuctionRounds.d.ts.map +0 -1
- package/dist/react/useSilentAuctionRounds.js +0 -44
- package/dist/react/useSilentAuctionRounds.js.map +0 -1
- package/dist/replayPages.d.ts +0 -31
- package/dist/replayPages.d.ts.map +0 -1
- package/dist/replayPages.js +0 -34
- package/dist/replayPages.js.map +0 -1
- package/dist/shopifyCommerce.d.ts +0 -204
- package/dist/shopifyCommerce.d.ts.map +0 -1
- package/dist/shopifyCommerce.js +0 -217
- package/dist/shopifyCommerce.js.map +0 -1
- package/dist/shopifyIdentity.d.ts +0 -61
- package/dist/shopifyIdentity.d.ts.map +0 -1
- package/dist/shopifyIdentity.js +0 -61
- package/dist/shopifyIdentity.js.map +0 -1
- package/dist/shopifyIds.d.ts +0 -9
- package/dist/shopifyIds.d.ts.map +0 -1
- package/dist/shopifyIds.js +0 -18
- package/dist/shopifyIds.js.map +0 -1
- package/dist/showCredit.d.ts +0 -89
- package/dist/showCredit.d.ts.map +0 -1
- package/dist/showCredit.js +0 -120
- package/dist/showCredit.js.map +0 -1
- package/dist/showLinks.d.ts +0 -24
- package/dist/showLinks.d.ts.map +0 -1
- package/dist/showLinks.js +0 -23
- package/dist/showLinks.js.map +0 -1
- package/dist/showLots.d.ts +0 -44
- package/dist/showLots.d.ts.map +0 -1
- package/dist/showLots.js +0 -70
- package/dist/showLots.js.map +0 -1
- package/dist/showNames.d.ts +0 -77
- package/dist/showNames.d.ts.map +0 -1
- package/dist/showNames.js +0 -143
- package/dist/showNames.js.map +0 -1
- package/dist/showPages.d.ts +0 -56
- package/dist/showPages.d.ts.map +0 -1
- package/dist/showPages.js +0 -48
- package/dist/showPages.js.map +0 -1
- package/dist/silentAuctionFeed.d.ts +0 -49
- package/dist/silentAuctionFeed.d.ts.map +0 -1
- package/dist/silentAuctionFeed.js +0 -242
- package/dist/silentAuctionFeed.js.map +0 -1
- package/dist/silentAuctionRules.d.ts +0 -253
- package/dist/silentAuctionRules.d.ts.map +0 -1
- package/dist/silentAuctionRules.js +0 -489
- package/dist/silentAuctionRules.js.map +0 -1
- package/dist/silentAuctions.d.ts +0 -65
- package/dist/silentAuctions.d.ts.map +0 -1
- package/dist/silentAuctions.js +0 -272
- package/dist/silentAuctions.js.map +0 -1
- package/dist/storeData.d.ts +0 -16
- package/dist/storeData.d.ts.map +0 -1
- package/dist/storeData.js +0 -19
- package/dist/storeData.js.map +0 -1
- package/dist/ui/BubbleFrame.d.ts +0 -38
- package/dist/ui/BubbleFrame.d.ts.map +0 -1
- package/dist/ui/BubbleFrame.js +0 -181
- package/dist/ui/BubbleFrame.js.map +0 -1
- package/dist/ui/LiveBubble.d.ts +0 -43
- package/dist/ui/LiveBubble.d.ts.map +0 -1
- package/dist/ui/LiveBubble.js +0 -116
- package/dist/ui/LiveBubble.js.map +0 -1
- package/dist/ui/ReplayBubble.d.ts +0 -23
- package/dist/ui/ReplayBubble.d.ts.map +0 -1
- package/dist/ui/ReplayBubble.js +0 -71
- package/dist/ui/ReplayBubble.js.map +0 -1
- package/dist/ui.d.ts +0 -27
- package/dist/ui.d.ts.map +0 -1
- package/dist/ui.js +0 -34
- package/dist/ui.js.map +0 -1
- package/dist/unreadRoomMessages.d.ts +0 -26
- package/dist/unreadRoomMessages.d.ts.map +0 -1
- package/dist/unreadRoomMessages.js +0 -62
- package/dist/unreadRoomMessages.js.map +0 -1
- package/dist/viewerRules.d.ts +0 -38
- package/dist/viewerRules.d.ts.map +0 -1
- package/dist/viewerRules.js +0 -46
- package/dist/viewerRules.js.map +0 -1
- package/dist/winsAttribution.d.ts +0 -22
- package/dist/winsAttribution.d.ts.map +0 -1
- package/dist/winsAttribution.js +0 -49
- package/dist/winsAttribution.js.map +0 -1
- package/dist/zegoEngine.d.ts +0 -173
- package/dist/zegoEngine.d.ts.map +0 -1
- package/dist/zegoEngine.js +0 -1069
- package/dist/zegoEngine.js.map +0 -1
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The app's one player for recorded shows (0.14.0, moved from amore-v2's
|
|
3
|
-
* `src/core/providers/replayPlayer.tsx`: the old app's `ReplayPipProvider`, rebuilt; decided 2026-10-05,
|
|
4
|
-
* Head of Engineering: a picture-in-picture button and a cart on the Replay screen, with an in-app
|
|
5
|
-
* bubble). `useReplayPage` borrows it, and the `/ui` entry's `ReplayBubble` draws it.
|
|
6
|
-
*
|
|
7
|
-
* `createElement` rather than JSX, like the rest of the package, so this stays a plain `.ts`.
|
|
8
|
-
*/
|
|
9
|
-
import { type VideoPlayer, type VideoPlayerStatus } from 'expo-video';
|
|
10
|
-
import type { ReactNode } from 'react';
|
|
11
|
-
import type { Replay } from '../types';
|
|
12
|
-
export interface ReplayPlayerState {
|
|
13
|
-
/** The app's one video player for recorded shows: the Replay screen and the bubble both draw it. */
|
|
14
|
-
player: VideoPlayer;
|
|
15
|
-
/** The recording the player holds, or null when it holds nothing. */
|
|
16
|
-
recording: Replay | null;
|
|
17
|
-
/** That recording's video, the player's source. */
|
|
18
|
-
videoUrl: string | null;
|
|
19
|
-
/** The video has its first picture, so a poster over it can come off. */
|
|
20
|
-
videoReady: boolean;
|
|
21
|
-
status: VideoPlayerStatus;
|
|
22
|
-
playing: boolean;
|
|
23
|
-
/** The recording played to its very end (expo-video's `playToEnd`, 0.16.0); playing again, or another recording, clears it. */
|
|
24
|
-
playedToEnd: boolean;
|
|
25
|
-
muted: boolean;
|
|
26
|
-
/** The shopper paused the recording; a new recording starts unpaused. */
|
|
27
|
-
pausedByShopper: boolean;
|
|
28
|
-
/** The floating bubble shows the video, over whatever screen is open. */
|
|
29
|
-
bubbleShown: boolean;
|
|
30
|
-
/** Puts this recording in the player, from the start. Nothing changes if the player already holds it. */
|
|
31
|
-
openRecording: (recording: Replay) => void;
|
|
32
|
-
/** Whether the player holds this video now (read at the moment it is asked, not at the last render). */
|
|
33
|
-
holdsVideo: (videoUrl: string | null) => boolean;
|
|
34
|
-
/** Pauses, takes the video out of the player and closes the bubble. */
|
|
35
|
-
stop: () => void;
|
|
36
|
-
/** The video moves into the bubble. Nothing happens when the player holds nothing. */
|
|
37
|
-
showBubble: () => void;
|
|
38
|
-
/** The bubble closes and the video goes on playing, for the Replay screen to show. */
|
|
39
|
-
hideBubble: () => void;
|
|
40
|
-
setMuted: (muted: boolean) => void;
|
|
41
|
-
setPausedByShopper: (paused: boolean) => void;
|
|
42
|
-
/** A view drew the video's first picture. */
|
|
43
|
-
markVideoReady: () => void;
|
|
44
|
-
/** A Replay screen (its route key) is on show with the player's recording, or no longer is. */
|
|
45
|
-
setScreenShowing: (screenKey: string, showing: boolean) => void;
|
|
46
|
-
/** A Replay screen closed: the video stops, unless the bubble or another Replay screen shows it. */
|
|
47
|
-
screenClosed: (screenKey: string) => void;
|
|
48
|
-
/**
|
|
49
|
-
* The phone's own picture-in-picture window opened (true) or closed (false) on the video: the surfaces'
|
|
50
|
-
* `onPictureInPictureStart` and `onPictureInPictureStop` (0.15.2).
|
|
51
|
-
*/
|
|
52
|
-
noteSystemPictureInPicture: (shown: boolean) => void;
|
|
53
|
-
}
|
|
54
|
-
/** The app's replay player, for the Replay screen's hook and the bubble. Only inside `ReplayPlayerProvider`. */
|
|
55
|
-
export declare function useReplayPlayer(): ReplayPlayerState;
|
|
56
|
-
/**
|
|
57
|
-
* The app's one player for recorded shows. Mount it above the navigator, because the bubble outlives
|
|
58
|
-
* the screen that opened it: a player made in the screen is released when the screen closes, which is
|
|
59
|
-
* exactly when the bubble needs it. The Replay screen borrows it (`useReplayPage`); nothing is loaded
|
|
60
|
-
* until a recording is opened, so a session that never opens one has an idle player and no requests.
|
|
61
|
-
*
|
|
62
|
-
* - **One recording at a time,** one source per recording: opening the one the player already holds
|
|
63
|
-
* changes nothing, so a recording coming back from the bubble plays on where it was.
|
|
64
|
-
* - **When it plays:** it holds a recording, the shopper hasn't paused it, and something shows it, the
|
|
65
|
-
* bubble or the Replay screen of that recording while that screen is on show (a sheet over it, like
|
|
66
|
-
* the variant page, counts as on show). Anything else pauses it.
|
|
67
|
-
* - **One view at a time:** while the bubble is up only the bubble draws the video; the Replay screen
|
|
68
|
-
* draws it again once the bubble closes. A second view on the same player would have two native
|
|
69
|
-
* views competing for it.
|
|
70
|
-
* - **Stopping** (the bubble's ✕, the screen's close, the recording ending in the bubble, or the last
|
|
71
|
-
* Replay screen closing with no bubble) pauses, takes the video out, closes the bubble and puts the
|
|
72
|
-
* sound back to how a recording starts.
|
|
73
|
-
* - **On web** a view is a `<video>` element of its own that starts at 0, so moving between the screen
|
|
74
|
-
* and the bubble carries the time across by hand.
|
|
75
|
-
* - **The phone's own picture-in-picture window** (0.15.2, ENG-941): put away with the recording on the
|
|
76
|
-
* Replay screen or in the bubble, the phone takes it into a window (`systemPictureInPicture.ts`). It
|
|
77
|
-
* needs expo-video's config plugin with `supportsPictureInPicture` (the audio background mode on iOS,
|
|
78
|
-
* the activity's picture-in-picture flag on Android) in the app's build.
|
|
79
|
-
*/
|
|
80
|
-
export declare function ReplayPlayerProvider({ children }: {
|
|
81
|
-
children: ReactNode;
|
|
82
|
-
}): import("react").FunctionComponentElement<import("react").ProviderProps<ReplayPlayerState | null>>;
|
|
83
|
-
//# sourceMappingURL=replayPlayer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replayPlayer.d.ts","sourceRoot":"","sources":["../../src/react/replayPlayer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAkB,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAevC,MAAM,WAAW,iBAAiB;IAChC,oGAAoG;IACpG,MAAM,EAAE,WAAW,CAAC;IACpB,qEAAqE;IACrE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,+HAA+H;IAC/H,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,eAAe,EAAE,OAAO,CAAC;IACzB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,yGAAyG;IACzG,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,wGAAwG;IACxG,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC;IACjD,uEAAuE;IACvE,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,sFAAsF;IACtF,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,sFAAsF;IACtF,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,6CAA6C;IAC7C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,+FAA+F;IAC/F,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,oGAAoG;IACpG,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;OAGG;IACH,0BAA0B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACtD;AAID,gHAAgH;AAChH,wBAAgB,eAAe,IAAI,iBAAiB,CAInD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,qGAoQzE"}
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useReplayPlayer = useReplayPlayer;
|
|
4
|
-
exports.ReplayPlayerProvider = ReplayPlayerProvider;
|
|
5
|
-
/**
|
|
6
|
-
* The app's one player for recorded shows (0.14.0, moved from amore-v2's
|
|
7
|
-
* `src/core/providers/replayPlayer.tsx`: the old app's `ReplayPipProvider`, rebuilt; decided 2026-10-05,
|
|
8
|
-
* Head of Engineering: a picture-in-picture button and a cart on the Replay screen, with an in-app
|
|
9
|
-
* bubble). `useReplayPage` borrows it, and the `/ui` entry's `ReplayBubble` draws it.
|
|
10
|
-
*
|
|
11
|
-
* `createElement` rather than JSX, like the rest of the package, so this stays a plain `.ts`.
|
|
12
|
-
*/
|
|
13
|
-
const expo_video_1 = require("expo-video");
|
|
14
|
-
const react_1 = require("react");
|
|
15
|
-
const react_native_1 = require("react-native");
|
|
16
|
-
const systemPictureInPicture_1 = require("./systemPictureInPicture");
|
|
17
|
-
/** The poster comes off by now even if the video never says it has a picture. */
|
|
18
|
-
const POSTER_AT_MOST_MS = 4000;
|
|
19
|
-
/** Web: how long after the video moves to another view it is played again (see the play effect). */
|
|
20
|
-
const WEB_PLAY_AGAIN_MS = 300;
|
|
21
|
-
/**
|
|
22
|
-
* A recording starts with sound on a phone, as old Amore. Browsers refuse to start a video with sound
|
|
23
|
-
* before the visitor has touched the page (Chrome's autoplay policy; the dashboard preview opens screens
|
|
24
|
-
* without a tap, and the refusal is an unhandled `NotAllowedError` inside expo-video's web `play()`), so
|
|
25
|
-
* on web it starts muted, the sound button a tap away.
|
|
26
|
-
*/
|
|
27
|
-
const STARTS_MUTED = react_native_1.Platform.OS === 'web';
|
|
28
|
-
const ReplayPlayerContext = (0, react_1.createContext)(null);
|
|
29
|
-
/** The app's replay player, for the Replay screen's hook and the bubble. Only inside `ReplayPlayerProvider`. */
|
|
30
|
-
function useReplayPlayer() {
|
|
31
|
-
const value = (0, react_1.useContext)(ReplayPlayerContext);
|
|
32
|
-
if (!value)
|
|
33
|
-
throw new Error('useReplayPlayer must be used inside ReplayPlayerProvider');
|
|
34
|
-
return value;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* The app's one player for recorded shows. Mount it above the navigator, because the bubble outlives
|
|
38
|
-
* the screen that opened it: a player made in the screen is released when the screen closes, which is
|
|
39
|
-
* exactly when the bubble needs it. The Replay screen borrows it (`useReplayPage`); nothing is loaded
|
|
40
|
-
* until a recording is opened, so a session that never opens one has an idle player and no requests.
|
|
41
|
-
*
|
|
42
|
-
* - **One recording at a time,** one source per recording: opening the one the player already holds
|
|
43
|
-
* changes nothing, so a recording coming back from the bubble plays on where it was.
|
|
44
|
-
* - **When it plays:** it holds a recording, the shopper hasn't paused it, and something shows it, the
|
|
45
|
-
* bubble or the Replay screen of that recording while that screen is on show (a sheet over it, like
|
|
46
|
-
* the variant page, counts as on show). Anything else pauses it.
|
|
47
|
-
* - **One view at a time:** while the bubble is up only the bubble draws the video; the Replay screen
|
|
48
|
-
* draws it again once the bubble closes. A second view on the same player would have two native
|
|
49
|
-
* views competing for it.
|
|
50
|
-
* - **Stopping** (the bubble's ✕, the screen's close, the recording ending in the bubble, or the last
|
|
51
|
-
* Replay screen closing with no bubble) pauses, takes the video out, closes the bubble and puts the
|
|
52
|
-
* sound back to how a recording starts.
|
|
53
|
-
* - **On web** a view is a `<video>` element of its own that starts at 0, so moving between the screen
|
|
54
|
-
* and the bubble carries the time across by hand.
|
|
55
|
-
* - **The phone's own picture-in-picture window** (0.15.2, ENG-941): put away with the recording on the
|
|
56
|
-
* Replay screen or in the bubble, the phone takes it into a window (`systemPictureInPicture.ts`). It
|
|
57
|
-
* needs expo-video's config plugin with `supportsPictureInPicture` (the audio background mode on iOS,
|
|
58
|
-
* the activity's picture-in-picture flag on Android) in the app's build.
|
|
59
|
-
*/
|
|
60
|
-
function ReplayPlayerProvider({ children }) {
|
|
61
|
-
var _a;
|
|
62
|
-
const player = (0, expo_video_1.useVideoPlayer)(null, (created) => {
|
|
63
|
-
created.loop = false;
|
|
64
|
-
// Muted from the start on web: the first source starts playing as it is applied.
|
|
65
|
-
created.muted = STARTS_MUTED;
|
|
66
|
-
// The phone's window (0.15.2). On iOS expo-video pauses every player as the app goes to the background
|
|
67
|
-
// unless its view is already in a window, which races the window opening: kept active, the recording
|
|
68
|
-
// reaches the window, and the guard below pauses it if none opens. Android exempts a view entering
|
|
69
|
-
// its window by itself. iOS also opens no window over a mixable audio session.
|
|
70
|
-
if (react_native_1.Platform.OS === 'ios')
|
|
71
|
-
created.staysActiveInBackground = true;
|
|
72
|
-
if (react_native_1.Platform.OS !== 'web')
|
|
73
|
-
created.audioMixingMode = 'doNotMix';
|
|
74
|
-
});
|
|
75
|
-
const [recording, setRecording] = (0, react_1.useState)(null);
|
|
76
|
-
const [bubbleShown, setBubbleShown] = (0, react_1.useState)(false);
|
|
77
|
-
/** The route key of the Replay screen on show with the player's recording, if one is. */
|
|
78
|
-
const [screenShowingKey, setScreenShowingKey] = (0, react_1.useState)(null);
|
|
79
|
-
const [muted, setMuted] = (0, react_1.useState)(STARTS_MUTED);
|
|
80
|
-
const [pausedByShopper, setPausedByShopper] = (0, react_1.useState)(false);
|
|
81
|
-
const [playing, setPlaying] = (0, react_1.useState)(player.playing);
|
|
82
|
-
const [playedToEnd, setPlayedToEnd] = (0, react_1.useState)(false);
|
|
83
|
-
const [status, setStatus] = (0, react_1.useState)(player.status);
|
|
84
|
-
const [videoReady, setVideoReady] = (0, react_1.useState)(false);
|
|
85
|
-
const videoUrl = (_a = recording === null || recording === void 0 ? void 0 : recording.videoUrl) !== null && _a !== void 0 ? _a : null;
|
|
86
|
-
const shouldPlay = !!videoUrl && !pausedByShopper && (bubbleShown || screenShowingKey !== null);
|
|
87
|
-
// Read by callbacks the moment they run: a screen closing straight after `showBubble`, or a load
|
|
88
|
-
// finishing, must see what was just decided, not the last render.
|
|
89
|
-
const videoUrlNow = (0, react_1.useRef)(null);
|
|
90
|
-
const bubbleShownNow = (0, react_1.useRef)(false);
|
|
91
|
-
const screenShowingKeyNow = (0, react_1.useRef)(null);
|
|
92
|
-
const shouldPlayNow = (0, react_1.useRef)(shouldPlay);
|
|
93
|
-
shouldPlayNow.current = shouldPlay;
|
|
94
|
-
/** The status the player reports next belongs to this source only once it has left the last one's "ready". */
|
|
95
|
-
const statusIsThisSource = (0, react_1.useRef)(false);
|
|
96
|
-
/** Web only: where the video was when it moved between the screen and the bubble, for the new view. */
|
|
97
|
-
const handover = (0, react_1.useRef)(null);
|
|
98
|
-
const timeNow = (0, react_1.useCallback)(() => {
|
|
99
|
-
try {
|
|
100
|
-
return player.currentTime || 0;
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
return 0;
|
|
104
|
-
}
|
|
105
|
-
}, [player]);
|
|
106
|
-
const openRecording = (0, react_1.useCallback)((next) => {
|
|
107
|
-
const nextUrl = next.videoUrl;
|
|
108
|
-
if (!nextUrl || videoUrlNow.current === nextUrl)
|
|
109
|
-
return;
|
|
110
|
-
videoUrlNow.current = nextUrl;
|
|
111
|
-
handover.current = null;
|
|
112
|
-
statusIsThisSource.current = player.status !== 'readyToPlay';
|
|
113
|
-
setVideoReady(false);
|
|
114
|
-
setPausedByShopper(false);
|
|
115
|
-
setRecording(next);
|
|
116
|
-
player
|
|
117
|
-
.replaceAsync(nextUrl)
|
|
118
|
-
.then(() => {
|
|
119
|
-
if (videoUrlNow.current === nextUrl && shouldPlayNow.current)
|
|
120
|
-
player.play();
|
|
121
|
-
})
|
|
122
|
-
// A source that won't open reports `error` through its status.
|
|
123
|
-
.catch(() => undefined);
|
|
124
|
-
}, [player]);
|
|
125
|
-
const holdsVideo = (0, react_1.useCallback)((url) => !!url && videoUrlNow.current === url, []);
|
|
126
|
-
const stop = (0, react_1.useCallback)(() => {
|
|
127
|
-
const held = videoUrlNow.current;
|
|
128
|
-
videoUrlNow.current = null;
|
|
129
|
-
bubbleShownNow.current = false;
|
|
130
|
-
handover.current = null;
|
|
131
|
-
try {
|
|
132
|
-
player.pause();
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
// Already released (the app is closing).
|
|
136
|
-
}
|
|
137
|
-
if (held)
|
|
138
|
-
void player.replaceAsync(null).catch(() => undefined);
|
|
139
|
-
setRecording(null);
|
|
140
|
-
setBubbleShown(false);
|
|
141
|
-
setPausedByShopper(false);
|
|
142
|
-
setVideoReady(false);
|
|
143
|
-
setMuted(STARTS_MUTED);
|
|
144
|
-
}, [player]);
|
|
145
|
-
const showBubble = (0, react_1.useCallback)(() => {
|
|
146
|
-
if (!videoUrlNow.current || bubbleShownNow.current)
|
|
147
|
-
return;
|
|
148
|
-
handover.current = { videoUrl: videoUrlNow.current, atSeconds: timeNow() };
|
|
149
|
-
bubbleShownNow.current = true;
|
|
150
|
-
setBubbleShown(true);
|
|
151
|
-
}, [timeNow]);
|
|
152
|
-
const hideBubble = (0, react_1.useCallback)(() => {
|
|
153
|
-
if (!bubbleShownNow.current)
|
|
154
|
-
return;
|
|
155
|
-
if (videoUrlNow.current)
|
|
156
|
-
handover.current = { videoUrl: videoUrlNow.current, atSeconds: timeNow() };
|
|
157
|
-
bubbleShownNow.current = false;
|
|
158
|
-
setBubbleShown(false);
|
|
159
|
-
}, [timeNow]);
|
|
160
|
-
const setScreenShowing = (0, react_1.useCallback)((screenKey, showing) => {
|
|
161
|
-
if (showing) {
|
|
162
|
-
screenShowingKeyNow.current = screenKey;
|
|
163
|
-
setScreenShowingKey(screenKey);
|
|
164
|
-
}
|
|
165
|
-
else if (screenShowingKeyNow.current === screenKey) {
|
|
166
|
-
screenShowingKeyNow.current = null;
|
|
167
|
-
setScreenShowingKey(null);
|
|
168
|
-
}
|
|
169
|
-
}, []);
|
|
170
|
-
const screenClosed = (0, react_1.useCallback)((screenKey) => {
|
|
171
|
-
setScreenShowing(screenKey, false);
|
|
172
|
-
// Nothing left to show the video: it stops rather than stay loaded, paused, out of sight.
|
|
173
|
-
if (!bubbleShownNow.current && screenShowingKeyNow.current === null)
|
|
174
|
-
stop();
|
|
175
|
-
}, [setScreenShowing, stop]);
|
|
176
|
-
const markVideoReady = (0, react_1.useCallback)(() => setVideoReady(true), []);
|
|
177
|
-
// Web: the view that now shows the video is a new `<video>` element at 0; it starts where the last
|
|
178
|
-
// one was. Declared before the play effect, so the time is set before it plays.
|
|
179
|
-
(0, react_1.useEffect)(() => {
|
|
180
|
-
const moved = handover.current;
|
|
181
|
-
handover.current = null;
|
|
182
|
-
if (react_native_1.Platform.OS !== 'web' || !moved || moved.videoUrl !== videoUrlNow.current)
|
|
183
|
-
return;
|
|
184
|
-
try {
|
|
185
|
-
player.currentTime = moved.atSeconds;
|
|
186
|
-
}
|
|
187
|
-
catch {
|
|
188
|
-
// No view yet: it starts from the beginning.
|
|
189
|
-
}
|
|
190
|
-
}, [player, bubbleShown, screenShowingKey]);
|
|
191
|
-
// Also when the view showing it changes: on web the player plays through the view it is shown in.
|
|
192
|
-
(0, react_1.useEffect)(() => {
|
|
193
|
-
if (!videoUrl)
|
|
194
|
-
return;
|
|
195
|
-
if (!shouldPlay) {
|
|
196
|
-
player.pause();
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
player.play();
|
|
200
|
-
if (react_native_1.Platform.OS !== 'web')
|
|
201
|
-
return;
|
|
202
|
-
// Web: the `<video>` element that just went away pauses as the browser removes it, and expo-video's
|
|
203
|
-
// web player passes that pause on to every view it has, the new one included (seen in the preview:
|
|
204
|
-
// the bubble came up paused). Played again once that has happened.
|
|
205
|
-
const timer = setTimeout(() => {
|
|
206
|
-
if (shouldPlayNow.current)
|
|
207
|
-
player.play();
|
|
208
|
-
}, WEB_PLAY_AGAIN_MS);
|
|
209
|
-
return () => clearTimeout(timer);
|
|
210
|
-
}, [player, videoUrl, shouldPlay, bubbleShown, screenShowingKey]);
|
|
211
|
-
(0, react_1.useEffect)(() => {
|
|
212
|
-
player.muted = muted;
|
|
213
|
-
}, [player, muted]);
|
|
214
|
-
// Put away: the phone's window may take the video (0.15.2); if none has it a moment later, it pauses.
|
|
215
|
-
// Coming back picks it up again, whatever paused it while the app was away.
|
|
216
|
-
const inSystemWindow = (0, react_1.useRef)(false);
|
|
217
|
-
const noteSystemPictureInPicture = (0, react_1.useCallback)((shown) => {
|
|
218
|
-
inSystemWindow.current = shown;
|
|
219
|
-
}, []);
|
|
220
|
-
(0, react_1.useEffect)(() => {
|
|
221
|
-
const guard = (0, systemPictureInPicture_1.backgroundPauseGuard)({
|
|
222
|
-
inWindow: () => inSystemWindow.current,
|
|
223
|
-
pause: () => player.pause(),
|
|
224
|
-
resume: () => {
|
|
225
|
-
if (shouldPlayNow.current)
|
|
226
|
-
player.play();
|
|
227
|
-
},
|
|
228
|
-
});
|
|
229
|
-
const subscription = react_native_1.AppState.addEventListener('change', guard.appStateChanged);
|
|
230
|
-
return () => {
|
|
231
|
-
subscription.remove();
|
|
232
|
-
guard.stop();
|
|
233
|
-
};
|
|
234
|
-
}, [player]);
|
|
235
|
-
(0, react_1.useEffect)(() => {
|
|
236
|
-
const playingChange = player.addListener('playingChange', ({ isPlaying }) => {
|
|
237
|
-
setPlaying(isPlaying);
|
|
238
|
-
if (isPlaying)
|
|
239
|
-
setPlayedToEnd(false);
|
|
240
|
-
});
|
|
241
|
-
const statusChange = player.addListener('statusChange', ({ status: next }) => {
|
|
242
|
-
setStatus(next);
|
|
243
|
-
if (next !== 'readyToPlay')
|
|
244
|
-
statusIsThisSource.current = true;
|
|
245
|
-
else if (statusIsThisSource.current)
|
|
246
|
-
setVideoReady(true);
|
|
247
|
-
});
|
|
248
|
-
// The bubble outlives the screen, so nothing else would take it down at the end of the recording:
|
|
249
|
-
// it would sit over the app on a frozen last frame.
|
|
250
|
-
const ended = player.addListener('playToEnd', () => {
|
|
251
|
-
setPlayedToEnd(true);
|
|
252
|
-
if (bubbleShownNow.current)
|
|
253
|
-
stop();
|
|
254
|
-
});
|
|
255
|
-
return () => {
|
|
256
|
-
playingChange.remove();
|
|
257
|
-
statusChange.remove();
|
|
258
|
-
ended.remove();
|
|
259
|
-
};
|
|
260
|
-
}, [player, stop]);
|
|
261
|
-
// Another recording (or none) hasn't played to its end.
|
|
262
|
-
(0, react_1.useEffect)(() => setPlayedToEnd(false), [videoUrl]);
|
|
263
|
-
// The poster's backstop, unless the video failed: then the poster stays rather than a black picture.
|
|
264
|
-
(0, react_1.useEffect)(() => {
|
|
265
|
-
if (videoReady || !videoUrl || status === 'error')
|
|
266
|
-
return;
|
|
267
|
-
const timer = setTimeout(() => setVideoReady(true), POSTER_AT_MOST_MS);
|
|
268
|
-
return () => clearTimeout(timer);
|
|
269
|
-
}, [videoReady, videoUrl, status]);
|
|
270
|
-
const value = (0, react_1.useMemo)(() => ({
|
|
271
|
-
player,
|
|
272
|
-
recording,
|
|
273
|
-
videoUrl,
|
|
274
|
-
videoReady,
|
|
275
|
-
status,
|
|
276
|
-
playing,
|
|
277
|
-
playedToEnd,
|
|
278
|
-
muted,
|
|
279
|
-
pausedByShopper,
|
|
280
|
-
bubbleShown,
|
|
281
|
-
openRecording,
|
|
282
|
-
holdsVideo,
|
|
283
|
-
stop,
|
|
284
|
-
showBubble,
|
|
285
|
-
hideBubble,
|
|
286
|
-
setMuted,
|
|
287
|
-
setPausedByShopper,
|
|
288
|
-
markVideoReady,
|
|
289
|
-
setScreenShowing,
|
|
290
|
-
screenClosed,
|
|
291
|
-
noteSystemPictureInPicture,
|
|
292
|
-
}), [
|
|
293
|
-
player,
|
|
294
|
-
recording,
|
|
295
|
-
videoUrl,
|
|
296
|
-
videoReady,
|
|
297
|
-
status,
|
|
298
|
-
playing,
|
|
299
|
-
playedToEnd,
|
|
300
|
-
muted,
|
|
301
|
-
pausedByShopper,
|
|
302
|
-
bubbleShown,
|
|
303
|
-
openRecording,
|
|
304
|
-
holdsVideo,
|
|
305
|
-
stop,
|
|
306
|
-
showBubble,
|
|
307
|
-
hideBubble,
|
|
308
|
-
markVideoReady,
|
|
309
|
-
setScreenShowing,
|
|
310
|
-
screenClosed,
|
|
311
|
-
noteSystemPictureInPicture,
|
|
312
|
-
]);
|
|
313
|
-
return (0, react_1.createElement)(ReplayPlayerContext.Provider, { value }, children);
|
|
314
|
-
}
|
|
315
|
-
//# sourceMappingURL=replayPlayer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replayPlayer.js","sourceRoot":"","sources":["../../src/react/replayPlayer.ts"],"names":[],"mappings":"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"}
|
package/dist/react/share.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The phone's share sheet for a product's link (0.15.4: moved out of `useLiveShop`, which imports the live
|
|
3
|
-
* session, so an app's product page and its tests can share without loading the video engine). Shares
|
|
4
|
-
* from the live card, Replay, the Clips page and an app's product page all come through here, so a
|
|
5
|
-
* double tap is handled once for all of them.
|
|
6
|
-
*/
|
|
7
|
-
import { type Product } from '@tiledev/sdk-shopify';
|
|
8
|
-
/**
|
|
9
|
-
* How long after sharing a link the same link opens nothing (0.15.4, ENG-983: on Android a quick double tap
|
|
10
|
-
* opened the share sheet twice, as React Native's share answers as soon as it has started the sheet,
|
|
11
|
-
* before the shopper sees it). The same link a second later, or another link at once, is a new share.
|
|
12
|
-
*/
|
|
13
|
-
export declare const SHARE_AGAIN_AFTER_MS = 1000;
|
|
14
|
-
/**
|
|
15
|
-
* The phone's share sheet with an address (a product's page): iOS takes the link as `url`, Android as
|
|
16
|
-
* text. Nothing without one, and nothing for the same link within `SHARE_AGAIN_AFTER_MS` (a double tap);
|
|
17
|
-
* a dismissed sheet, or none (the web preview without the browser's share), is nothing to report.
|
|
18
|
-
*/
|
|
19
|
-
export declare function shareAddress(url: string | null | undefined): Promise<void>;
|
|
20
|
-
/** The phone's share sheet with a product's link (the Live card's and Replay's share): its page on the store (`productShareUrl`). */
|
|
21
|
-
export declare function shareProduct(product: Product): Promise<void>;
|
|
22
|
-
//# sourceMappingURL=share.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/react/share.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGrE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAIzC;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhF;AAED,qIAAqI;AACrI,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE"}
|
package/dist/react/share.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SHARE_AGAIN_AFTER_MS = void 0;
|
|
4
|
-
exports.shareAddress = shareAddress;
|
|
5
|
-
exports.shareProduct = shareProduct;
|
|
6
|
-
/**
|
|
7
|
-
* The phone's share sheet for a product's link (0.15.4: moved out of `useLiveShop`, which imports the live
|
|
8
|
-
* session, so an app's product page and its tests can share without loading the video engine). Shares
|
|
9
|
-
* from the live card, Replay, the Clips page and an app's product page all come through here, so a
|
|
10
|
-
* double tap is handled once for all of them.
|
|
11
|
-
*/
|
|
12
|
-
const sdk_shopify_1 = require("@tiledev/sdk-shopify");
|
|
13
|
-
const react_native_1 = require("react-native");
|
|
14
|
-
/**
|
|
15
|
-
* How long after sharing a link the same link opens nothing (0.15.4, ENG-983: on Android a quick double tap
|
|
16
|
-
* opened the share sheet twice, as React Native's share answers as soon as it has started the sheet,
|
|
17
|
-
* before the shopper sees it). The same link a second later, or another link at once, is a new share.
|
|
18
|
-
*/
|
|
19
|
-
exports.SHARE_AGAIN_AFTER_MS = 1000;
|
|
20
|
-
/** The last link shared and when, for `SHARE_AGAIN_AFTER_MS`. */
|
|
21
|
-
let lastShare = null;
|
|
22
|
-
/**
|
|
23
|
-
* The phone's share sheet with an address (a product's page): iOS takes the link as `url`, Android as
|
|
24
|
-
* text. Nothing without one, and nothing for the same link within `SHARE_AGAIN_AFTER_MS` (a double tap);
|
|
25
|
-
* a dismissed sheet, or none (the web preview without the browser's share), is nothing to report.
|
|
26
|
-
*/
|
|
27
|
-
async function shareAddress(url) {
|
|
28
|
-
if (!url)
|
|
29
|
-
return;
|
|
30
|
-
const now = Date.now();
|
|
31
|
-
if (lastShare && lastShare.url === url && now - lastShare.at < exports.SHARE_AGAIN_AFTER_MS)
|
|
32
|
-
return;
|
|
33
|
-
lastShare = { url, at: now };
|
|
34
|
-
try {
|
|
35
|
-
await react_native_1.Share.share(react_native_1.Platform.OS === 'ios' ? { url } : { message: url });
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
// Dismissed, or no share sheet.
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/** The phone's share sheet with a product's link (the Live card's and Replay's share): its page on the store (`productShareUrl`). */
|
|
42
|
-
async function shareProduct(product) {
|
|
43
|
-
await shareAddress((0, sdk_shopify_1.productShareUrl)(product));
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=share.js.map
|
package/dist/react/share.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/react/share.ts"],"names":[],"mappings":";;;AAuBA,oCAUC;AAGD,oCAEC;AAtCD;;;;;GAKG;AACH,sDAAqE;AACrE,+CAA+C;AAE/C;;;;GAIG;AACU,QAAA,oBAAoB,GAAG,IAAI,CAAC;AACzC,iEAAiE;AACjE,IAAI,SAAS,GAAuC,IAAI,CAAC;AAEzD;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,GAA8B;IAC/D,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,SAAS,IAAI,SAAS,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,SAAS,CAAC,EAAE,GAAG,4BAAoB;QAAE,OAAO;IAC5F,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,oBAAK,CAAC,KAAK,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;AACH,CAAC;AAED,qIAAqI;AAC9H,KAAK,UAAU,YAAY,CAAC,OAAgB;IACjD,MAAM,YAAY,CAAC,IAAA,6BAAe,EAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
import { type ShopifyImageTransform, type ShopifyLiveCommerceOptions } from '../shopifyCommerce';
|
|
3
|
-
import type { LiveSellingConfig, StorageAdapter } from '../types';
|
|
4
|
-
import { type LiveSellingProviderProps } from './LiveSellingProvider';
|
|
5
|
-
import type { LiveSessionProviderProps } from './useLiveSession';
|
|
6
|
-
/**
|
|
7
|
-
* The gateway's config as `ShopifyLiveSellingProvider` takes it: everything but what it builds from
|
|
8
|
-
* sdk-shopify (`identity`, `customerAccountRequest`, `commerce`), with `storage` optional.
|
|
9
|
-
*/
|
|
10
|
-
export type ShopifyLiveSellingConfig = Omit<LiveSellingConfig, 'storage' | 'identity' | 'customerAccountRequest' | 'commerce'> & {
|
|
11
|
-
/** Where poll votes, a signed-out shopper's name and the accepted terms are kept. Default: AsyncStorage. */
|
|
12
|
-
storage?: StorageAdapter;
|
|
13
|
-
};
|
|
14
|
-
export interface ShopifyLiveSellingProviderProps extends Omit<LiveSellingProviderProps, 'config' | 'viewerEmail' | 'viewerRestrictions'> {
|
|
15
|
-
/**
|
|
16
|
-
* The gateway (`apiUrl`, `companyId`, `videoCollectionId`, `zegoAppId`…), `haptics` and `hiddenShows`
|
|
17
|
-
* (`REHEARSALS` for the Apptile team's practice shows). Read when the provider mounts and when one
|
|
18
|
-
* of these props changes; the client itself reconfigures only when `apiUrl`, `companyId` or
|
|
19
|
-
* `videoCollectionId` does.
|
|
20
|
-
*/
|
|
21
|
-
config: ShopifyLiveSellingConfig;
|
|
22
|
-
/** `source_name` on the wins cart: which app the order came from (`createShopifyLiveCommerce`'s `cartSourceName`). */
|
|
23
|
-
cartSourceName: string;
|
|
24
|
-
/**
|
|
25
|
-
* The line attribute that marks a prize in the wins cart (`GIVEAWAY_PRIZE_KEY` on the Tile apps'
|
|
26
|
-
* stores). No default, as `createShopifyLiveCommerce` has none: a wrong key gets the prize charged.
|
|
27
|
-
*/
|
|
28
|
-
prizeWriteKey: string;
|
|
29
|
-
/** The products' photo size. Default: sdk-shopify's `CARD_IMAGE`, the product cards' size. */
|
|
30
|
-
imageTransform?: ShopifyImageTransform;
|
|
31
|
-
/** The wins cart's store-specific stamps, passed to `createShopifyLiveCommerce` (0.16.0). Keep it stable. */
|
|
32
|
-
wins?: Pick<ShopifyLiveCommerceOptions, 'winningBidKey' | 'extraLineAttributes' | 'extraCartAttributes'>;
|
|
33
|
-
/**
|
|
34
|
-
* The wins cart's `_apptile_attribution` (0.16.0), every won line the app's: on as sdk-shopify's
|
|
35
|
-
* `ShopifyProvider` `attribution` is, so the wins count with the rest. Default: off. An
|
|
36
|
-
* `extraCartAttributes` that writes the key keeps its own.
|
|
37
|
-
*/
|
|
38
|
-
attribution?: {
|
|
39
|
-
enabled?: boolean;
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* `LiveSellingProvider` on the app's sdk-shopify client and customer (the README's §4 "On Shopify"):
|
|
44
|
-
* products from Shopify at the card photo size; the wins checkout, a cart of its own (a won lot stamped
|
|
45
|
-
* `_winningBid`, a prize `prizeWriteKey`) with `source_name`, `source_type: "auction"` and `auction_id`
|
|
46
|
-
* for the order webhook; and the bidder, the customer's numeric id, only for a Shopify sign-in (the
|
|
47
|
-
* winner's record is on the Customer Account API). The phone's storage keeps the poll votes, a
|
|
48
|
-
* signed-out shopper's name and the accepted terms across relaunches. Hidden shows (`hiddenShows`) are
|
|
49
|
-
* hidden from every shopper whose email isn't the team's: the signed-in customer's email is the
|
|
50
|
-
* provider's `viewerEmail`, so a sign-in reaches every screen at once. What the store stops the customer
|
|
51
|
-
* doing is the provider's `viewerRestrictions`, from their tags (sdk-shopify's `useCustomerTags`, read by
|
|
52
|
-
* `viewerRestrictionsFromTags`, the store-data standard, 0.16.0): `BIDBLOCKED` or `APPBLOCKED` blocks bidding, `APPBLOCKED` mutes their
|
|
53
|
-
* comments, and a bid while the tags are unread waits for them.
|
|
54
|
-
*
|
|
55
|
-
* Mount it inside sdk-shopify's `ShopifyProvider`, above the navigator. `routes`, `track`, `onWarning`
|
|
56
|
-
* and `shopName` (and `blockedNames`, `reactionLimit`, `onReactionLimitReached`) pass through to `LiveSellingProvider`.
|
|
57
|
-
*/
|
|
58
|
-
export declare function ShopifyLiveSellingProvider({ children, config, cartSourceName, prizeWriteKey, imageTransform, wins, attribution, ...pageProps }: ShopifyLiveSellingProviderProps): import("react").FunctionComponentElement<LiveSellingProviderProps>;
|
|
59
|
-
export interface ShopifyLiveSessionProviderProps extends Omit<LiveSessionProviderProps, 'viewerName' | 'children'> {
|
|
60
|
-
children: ReactNode;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* The app's one live session (`LiveSessionProvider`; decided 2026-10-05 by amore-v2's Head of
|
|
64
|
-
* Engineering: joined app-wide, as Freckled Poppy). Mount it above the navigator, inside
|
|
65
|
-
* `ShopifyLiveSellingProvider`, because Zego's engine holds exactly one room and several places show
|
|
66
|
-
* the same show: the Live tab's card, the Live screen and the bubble. Each binds to the picture with
|
|
67
|
-
* `LiveVideoTarget`; none owns the room.
|
|
68
|
-
*
|
|
69
|
-
* - **`viewerName`** is the signed-in shopper's (`viewerNameFor`: first and last name, else whichever
|
|
70
|
-
* the account has; never an email nor its part before the @), so a name edited on Account reaches the
|
|
71
|
-
* room without a restart. Null with no name on the account, or signed out, so a name the shopper typed
|
|
72
|
-
* on this phone stays in charge (the comment box asks for one: `useLivePage`'s chat).
|
|
73
|
-
* - **`blockedNames`**: the names nobody watching may go by. `LiveSellingProvider`'s (0.15.0: the list
|
|
74
|
-
* the name asks check too, so the session and the sheets agree), unless one is passed here; Host and
|
|
75
|
-
* Moderator unless the app says otherwise.
|
|
76
|
-
* - **`onPipRestore`**: the phone's picture-in-picture window, opened from the Live screen and then
|
|
77
|
-
* expanded (or, on iOS, left up when the shopper came back by the app's icon), comes back to the Live
|
|
78
|
-
* screen (`routes.openLive`). A window opened from the bubble goes back to the bubble instead, which
|
|
79
|
-
* the session does itself without calling this. An `onPipRestore` of the app's own replaces it.
|
|
80
|
-
*/
|
|
81
|
-
export declare function ShopifyLiveSessionProvider({ children, onPipRestore, blockedNames, ...props }: ShopifyLiveSessionProviderProps): import("react").FunctionComponentElement<LiveSessionProviderProps>;
|
|
82
|
-
//# sourceMappingURL=shopifyProviders.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyProviders.d.ts","sourceRoot":"","sources":["../../src/react/shopifyProviders.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAA6B,KAAK,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAI5H,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAA2C,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAE/G,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,UAAU,GAAG,wBAAwB,GAAG,UAAU,CAAC,GAAG;IAC/H,4GAA4G;IAC5G,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,+BAAgC,SAAQ,IAAI,CAAC,wBAAwB,EAAE,QAAQ,GAAG,aAAa,GAAG,oBAAoB,CAAC;IACtI;;;;;OAKG;IACH,MAAM,EAAE,wBAAwB,CAAC;IACjC,sHAAsH;IACtH,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,6GAA6G;IAC7G,IAAI,CAAC,EAAE,IAAI,CAAC,0BAA0B,EAAE,eAAe,GAAG,qBAAqB,GAAG,qBAAqB,CAAC,CAAC;IACzG;;;;OAIG;IACH,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACrC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,EACR,MAAM,EACN,cAAc,EACd,aAAa,EACb,cAA2B,EAC3B,IAAI,EACJ,WAAW,EACX,GAAG,SAAS,EACb,EAAE,+BAA+B,sEAuCjC;AAED,MAAM,WAAW,+BAAgC,SAAQ,IAAI,CAAC,wBAAwB,EAAE,YAAY,GAAG,UAAU,CAAC;IAChH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,EAAE,+BAA+B,sEAkB7H"}
|