@linktr.ee/messaging-react 1.27.0 → 1.28.0-rc-1776225927
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/Creator-D38dWn2X.js +318 -0
- package/dist/Creator-D38dWn2X.js.map +1 -0
- package/dist/MediaPlayer-DE9MC6k6.js +599 -0
- package/dist/MediaPlayer-DE9MC6k6.js.map +1 -0
- package/dist/Visitor-BG-9-3HU.js +199 -0
- package/dist/Visitor-BG-9-3HU.js.map +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/components/CustomMessage/CustomMessage.stories.tsx +1 -1
- package/src/components/LockedAttachment/LockedAttachment.stories.tsx +143 -49
- package/src/components/LockedAttachment/components/Creator.tsx +410 -112
- package/src/components/LockedAttachment/components/MediaPlayer.tsx +112 -52
- package/src/components/LockedAttachment/components/Visitor.tsx +206 -143
- package/src/components/LockedAttachment/types.ts +2 -3
- package/src/components/LockedAttachment/utils/icons.ts +2 -1
- package/src/components/LockedAttachment/utils/mimeType.test.ts +29 -7
- package/src/components/LockedAttachment/utils/mimeType.ts +3 -1
- package/src/types.ts +0 -1
- package/dist/Creator-B6M8dB0U.js +0 -87
- package/dist/Creator-B6M8dB0U.js.map +0 -1
- package/dist/MediaPlayer-DsjlYGGH.js +0 -539
- package/dist/MediaPlayer-DsjlYGGH.js.map +0 -1
- package/dist/Visitor-CpmFZRGO.js +0 -175
- package/dist/Visitor-CpmFZRGO.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MediaPlayer-DsjlYGGH.js","sources":["../src/components/LockedAttachment/utils/mimeType.ts","../src/components/LockedAttachment/utils/icons.ts","../../../node_modules/react-player/dist/patterns.js","../../../node_modules/react-player/dist/HtmlPlayer.js","../../../node_modules/react-player/dist/players.js","../../../node_modules/react-player/dist/props.js","../../../node_modules/react-player/dist/Player.js","../../../node_modules/react-player/dist/ReactPlayer.js","../../../node_modules/react-player/dist/index.js","../src/components/LockedAttachment/components/MediaPlayer.tsx"],"sourcesContent":["export type AttachmentSourceType = 'image' | 'audio' | 'video' | 'document'\n\nexport type DocumentIconType =\n | 'pdf'\n | 'doc'\n | 'xls'\n | 'csv'\n | 'ppt'\n | 'zip'\n | 'text'\n | 'markdown'\n | 'generic'\n\nconst DOCUMENT_ICON_PATTERNS: Array<[RegExp, DocumentIconType]> = [\n [/pdf/, 'pdf'],\n [/wordprocessingml|msword|\\.doc/, 'doc'],\n [/spreadsheetml|ms-excel|\\.xls/, 'xls'],\n [/csv/, 'csv'],\n [/presentationml|ms-powerpoint|\\.ppt/, 'ppt'],\n [/zip|x-rar|x-7z|x-tar|x-gzip/, 'zip'],\n [/plain|rtf/, 'text'],\n [/markdown/, 'markdown'],\n]\n\nexport function getSourceType(mimeType: string): AttachmentSourceType {\n if (mimeType.startsWith('video/')) return 'video'\n if (mimeType.startsWith('audio/')) return 'audio'\n if (mimeType.startsWith('image/')) return 'image'\n return 'document'\n}\n\nexport function getDocumentIconType(mimeType: string): DocumentIconType {\n const match = DOCUMENT_ICON_PATTERNS.find(([pattern]) => pattern.test(mimeType))\n return match ? match[1] : 'generic'\n}\n","import {\n FileIcon,\n FileCsvIcon,\n FileDocIcon,\n FileMdIcon,\n FilePdfIcon,\n FilePptIcon,\n FileTextIcon,\n FileXlsIcon,\n FileZipIcon,\n ImageIcon,\n SpeakerHighIcon,\n VideoCameraIcon,\n} from '@phosphor-icons/react'\nimport React from 'react'\n\nimport { getDocumentIconType, getSourceType } from './mimeType'\nimport type { AttachmentSourceType } from './mimeType'\n\nexport const MEDIA_TYPE_ICON: Record<AttachmentSourceType, React.ElementType> =\n {\n video: VideoCameraIcon,\n audio: SpeakerHighIcon,\n image: ImageIcon,\n document: FileIcon,\n }\n\nconst DOCUMENT_ICON_COMPONENT = {\n pdf: FilePdfIcon,\n doc: FileDocIcon,\n xls: FileXlsIcon,\n csv: FileCsvIcon,\n ppt: FilePptIcon,\n zip: FileZipIcon,\n text: FileTextIcon,\n markdown: FileMdIcon,\n generic: FileIcon,\n} as const\n\nexport function getTypeIcon(mimeType: string): React.ElementType {\n const sourceType = getSourceType(mimeType)\n if (sourceType !== 'document') return MEDIA_TYPE_ICON[sourceType]\n return DOCUMENT_ICON_COMPONENT[getDocumentIconType(mimeType)]\n}\n\n/** Use instead of `<TypeIcon />` where TypeIcon = getTypeIcon(mime) to satisfy react-hooks/static-components. */\nexport function renderTypeIcon(\n mimeType: string,\n props: { className?: string; weight?: 'thin' | 'light' | 'regular' | 'bold' | 'fill' | 'duotone' }\n): React.ReactElement {\n return React.createElement(getTypeIcon(mimeType), props)\n}\n","const AUDIO_EXTENSIONS = /\\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i;\nconst VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\\d+]+)?($|\\?)/i;\nconst HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nconst DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nconst MATCH_URL_MUX = /stream\\.mux\\.com\\/(?!\\w+\\.m3u8)(\\w+)/;\nconst MATCH_URL_YOUTUBE = /(?:youtu\\.be\\/|youtube(?:-nocookie|education)?\\.com\\/(?:embed\\/|v\\/|watch\\/|watch\\?v=|watch\\?.+&v=|shorts\\/|live\\/))((\\w|-){11})|youtube\\.com\\/playlist\\?list=|youtube\\.com\\/user\\//;\nconst MATCH_URL_VIMEO = /vimeo\\.com\\/(?!progressive_redirect).+/;\nconst MATCH_URL_WISTIA = /(?:wistia\\.(?:com|net)|wi\\.st)\\/(?:medias|embed)\\/(?:iframe\\/)?([^?]+)/;\nconst MATCH_URL_SPOTIFY = /open\\.spotify\\.com\\/(\\w+)\\/(\\w+)/i;\nconst MATCH_URL_TWITCH = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-zA-Z0-9_]+|(videos?\\/|\\?video=)\\d+)($|\\?)/;\nconst MATCH_URL_TIKTOK = /tiktok\\.com\\/(?:player\\/v1\\/|share\\/video\\/|@[^/]+\\/video\\/)([0-9]+)/;\nconst canPlayFile = (url, test) => {\n if (Array.isArray(url)) {\n for (const item of url) {\n if (typeof item === \"string\" && canPlayFile(item, test)) {\n return true;\n }\n if (canPlayFile(item.src, test)) {\n return true;\n }\n }\n return false;\n }\n return test(url);\n};\nconst canPlay = {\n html: (url) => canPlayFile(url, (u) => AUDIO_EXTENSIONS.test(u) || VIDEO_EXTENSIONS.test(u)),\n hls: (url) => canPlayFile(url, (u) => HLS_EXTENSIONS.test(u)),\n dash: (url) => canPlayFile(url, (u) => DASH_EXTENSIONS.test(u)),\n mux: (url) => MATCH_URL_MUX.test(url),\n youtube: (url) => MATCH_URL_YOUTUBE.test(url),\n vimeo: (url) => MATCH_URL_VIMEO.test(url) && !VIDEO_EXTENSIONS.test(url) && !HLS_EXTENSIONS.test(url),\n wistia: (url) => MATCH_URL_WISTIA.test(url),\n spotify: (url) => MATCH_URL_SPOTIFY.test(url),\n twitch: (url) => MATCH_URL_TWITCH.test(url),\n tiktok: (url) => MATCH_URL_TIKTOK.test(url)\n};\nexport {\n AUDIO_EXTENSIONS,\n DASH_EXTENSIONS,\n HLS_EXTENSIONS,\n MATCH_URL_MUX,\n MATCH_URL_SPOTIFY,\n MATCH_URL_TIKTOK,\n MATCH_URL_TWITCH,\n MATCH_URL_VIMEO,\n MATCH_URL_WISTIA,\n MATCH_URL_YOUTUBE,\n VIDEO_EXTENSIONS,\n canPlay\n};\n","import React from \"react\";\nimport { AUDIO_EXTENSIONS } from \"./patterns.js\";\nconst HtmlPlayer = React.forwardRef((props, ref) => {\n const Media = AUDIO_EXTENSIONS.test(`${props.src}`) ? \"audio\" : \"video\";\n return /* @__PURE__ */ React.createElement(Media, { ...props, ref }, props.children);\n});\nvar HtmlPlayer_default = HtmlPlayer;\nexport {\n HtmlPlayer_default as default\n};\n","import { lazy } from \"react\";\nimport { canPlay } from \"./patterns.js\";\nimport HtmlPlayer from \"./HtmlPlayer.js\";\nconst Players = [\n {\n key: \"hls\",\n name: \"hls.js\",\n canPlay: canPlay.hls,\n canEnablePIP: () => true,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerHls' */\n \"hls-video-element/react\"\n )\n )\n },\n {\n key: \"dash\",\n name: \"dash.js\",\n canPlay: canPlay.dash,\n canEnablePIP: () => true,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerDash' */\n \"dash-video-element/react\"\n )\n )\n },\n {\n key: \"mux\",\n name: \"Mux\",\n canPlay: canPlay.mux,\n canEnablePIP: () => true,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerMux' */\n \"@mux/mux-player-react\"\n )\n )\n },\n {\n key: \"youtube\",\n name: \"YouTube\",\n canPlay: canPlay.youtube,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerYouTube' */\n \"youtube-video-element/react\"\n )\n )\n },\n {\n key: \"vimeo\",\n name: \"Vimeo\",\n canPlay: canPlay.vimeo,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerVimeo' */\n \"vimeo-video-element/react\"\n )\n )\n },\n {\n key: \"wistia\",\n name: \"Wistia\",\n canPlay: canPlay.wistia,\n canEnablePIP: () => true,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerWistia' */\n \"wistia-video-element/react\"\n )\n )\n },\n {\n key: \"spotify\",\n name: \"Spotify\",\n canPlay: canPlay.spotify,\n canEnablePIP: () => false,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerSpotify' */\n \"spotify-audio-element/react\"\n )\n )\n },\n {\n key: \"twitch\",\n name: \"Twitch\",\n canPlay: canPlay.twitch,\n canEnablePIP: () => false,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerTwitch' */\n \"twitch-video-element/react\"\n )\n )\n },\n {\n key: \"tiktok\",\n name: \"TikTok\",\n canPlay: canPlay.tiktok,\n canEnablePIP: () => false,\n player: lazy(\n () => import(\n /* webpackChunkName: 'reactPlayerTiktok' */\n \"tiktok-video-element/react\"\n )\n )\n },\n {\n key: \"html\",\n name: \"html\",\n canPlay: canPlay.html,\n canEnablePIP: () => true,\n player: HtmlPlayer\n }\n];\nvar players_default = Players;\nexport {\n players_default as default\n};\n","const defaultProps = {\n // Falsy values don't need to be defined\n //\n // native video attrs\n // src: undefined,\n // preload: undefined,\n // crossOrigin: undefined,\n // autoPlay: false,\n // muted: false,\n // loop: false,\n // controls: false,\n // playsInline: false,\n // disableRemotePlayback: false,\n width: \"320px\",\n height: \"180px\",\n // native video props\n volume: 1,\n playbackRate: 1,\n // custom props\n // playing: undefined,\n // pip: false,\n // light: false,\n // fallback: null,\n previewTabIndex: 0,\n previewAriaLabel: \"\",\n oEmbedUrl: \"https://noembed.com/embed?url={url}\"\n};\nexport {\n defaultProps\n};\n","import React, { useCallback, useEffect, useRef } from \"react\";\nconst Player = React.forwardRef((props, ref) => {\n const { playing, pip } = props;\n const Player2 = props.activePlayer;\n const playerRef = useRef(null);\n const startOnPlayRef = useRef(true);\n useEffect(() => {\n var _a, _b;\n if (!playerRef.current) return;\n if (playerRef.current.paused && playing === true) {\n playerRef.current.play();\n }\n if (!playerRef.current.paused && playing === false) {\n playerRef.current.pause();\n }\n playerRef.current.playbackRate = (_a = props.playbackRate) != null ? _a : 1;\n playerRef.current.volume = (_b = props.volume) != null ? _b : 1;\n });\n useEffect(() => {\n var _a, _b, _c, _d, _e;\n if (!playerRef.current || !globalThis.document) return;\n if (pip && !document.pictureInPictureElement) {\n try {\n (_b = (_a = playerRef.current).requestPictureInPicture) == null ? void 0 : _b.call(_a);\n } catch (err) {\n }\n }\n if (!pip && document.pictureInPictureElement) {\n try {\n (_d = (_c = playerRef.current).exitPictureInPicture) == null ? void 0 : _d.call(_c);\n (_e = document.exitPictureInPicture) == null ? void 0 : _e.call(document);\n } catch (err) {\n }\n }\n }, [pip]);\n const handleLoadStart = (event) => {\n var _a, _b;\n startOnPlayRef.current = true;\n (_a = props.onReady) == null ? void 0 : _a.call(props);\n (_b = props.onLoadStart) == null ? void 0 : _b.call(props, event);\n };\n const handlePlay = (event) => {\n var _a, _b;\n if (startOnPlayRef.current) {\n startOnPlayRef.current = false;\n (_a = props.onStart) == null ? void 0 : _a.call(props, event);\n }\n (_b = props.onPlay) == null ? void 0 : _b.call(props, event);\n };\n if (!Player2) {\n return null;\n }\n const eventProps = {};\n const reactPlayerEventHandlers = [\"onReady\", \"onStart\"];\n for (const key in props) {\n if (key.startsWith(\"on\") && !reactPlayerEventHandlers.includes(key)) {\n eventProps[key] = props[key];\n }\n }\n return /* @__PURE__ */ React.createElement(\n Player2,\n {\n ...eventProps,\n style: props.style,\n className: props.className,\n slot: props.slot,\n ref: useCallback(\n (node) => {\n playerRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref !== null) {\n ref.current = node;\n }\n },\n [ref]\n ),\n src: props.src,\n crossOrigin: props.crossOrigin,\n preload: props.preload,\n controls: props.controls,\n muted: props.muted,\n autoPlay: props.autoPlay,\n loop: props.loop,\n playsInline: props.playsInline,\n disableRemotePlayback: props.disableRemotePlayback,\n config: props.config,\n onLoadStart: handleLoadStart,\n onPlay: handlePlay\n },\n props.children\n );\n});\nPlayer.displayName = \"Player\";\nvar Player_default = Player;\nexport {\n Player_default as default\n};\n","import React, { lazy, Suspense, useEffect, useState } from \"react\";\nimport { defaultProps } from \"./props.js\";\nimport Player from \"./Player.js\";\nconst Preview = lazy(() => import(\n /* webpackChunkName: 'reactPlayerPreview' */\n \"./Preview.js\"\n));\nconst customPlayers = [];\nconst createReactPlayer = (players, playerFallback) => {\n const getActivePlayer = (src) => {\n for (const player of [...customPlayers, ...players]) {\n if (src && player.canPlay(src)) {\n return player;\n }\n }\n if (playerFallback) {\n return playerFallback;\n }\n return null;\n };\n const ReactPlayer = React.forwardRef((_props, ref) => {\n const props = { ...defaultProps, ..._props };\n const { src, slot, className, style, width, height, fallback, wrapper } = props;\n const [showPreview, setShowPreview] = useState(!!props.light);\n useEffect(() => {\n if (props.light) {\n setShowPreview(true);\n } else {\n setShowPreview(false);\n }\n }, [props.light]);\n const handleClickPreview = (e) => {\n var _a;\n setShowPreview(false);\n (_a = props.onClickPreview) == null ? void 0 : _a.call(props, e);\n };\n const renderPreview = (src2) => {\n if (!src2) return null;\n const { light, playIcon, previewTabIndex, oEmbedUrl, previewAriaLabel } = props;\n return /* @__PURE__ */ React.createElement(\n Preview,\n {\n src: src2,\n light,\n playIcon,\n previewTabIndex,\n previewAriaLabel,\n oEmbedUrl,\n onClickPreview: handleClickPreview\n }\n );\n };\n const renderActivePlayer = (src2) => {\n var _a, _b;\n const player = getActivePlayer(src2);\n if (!player) return null;\n const { style: style2, width: width2, height: height2, wrapper: wrapper2 } = props;\n const config = (_a = props.config) == null ? void 0 : _a[player.key];\n return /* @__PURE__ */ React.createElement(\n Player,\n {\n ...props,\n ref,\n activePlayer: (_b = player.player) != null ? _b : player,\n slot: wrapper2 ? void 0 : slot,\n className: wrapper2 ? void 0 : className,\n style: wrapper2 ? { display: \"block\", width: \"100%\", height: \"100%\" } : { display: \"block\", width: width2, height: height2, ...style2 },\n config\n }\n );\n };\n const Wrapper = wrapper == null ? ForwardChildren : wrapper;\n const UniversalSuspense = fallback === false ? ForwardChildren : Suspense;\n return /* @__PURE__ */ React.createElement(Wrapper, { slot, className, style: { width, height, ...style } }, /* @__PURE__ */ React.createElement(UniversalSuspense, { fallback }, showPreview ? renderPreview(src) : renderActivePlayer(src)));\n });\n ReactPlayer.displayName = \"ReactPlayer\";\n ReactPlayer.addCustomPlayer = (player) => {\n customPlayers.push(player);\n };\n ReactPlayer.removeCustomPlayers = () => {\n customPlayers.length = 0;\n };\n ReactPlayer.canPlay = (src) => {\n if (src) {\n for (const Player2 of [...customPlayers, ...players]) {\n if (Player2.canPlay(src)) {\n return true;\n }\n }\n }\n return false;\n };\n ReactPlayer.canEnablePIP = (src) => {\n var _a;\n if (src) {\n for (const Player2 of [...customPlayers, ...players]) {\n if (Player2.canPlay(src) && ((_a = Player2.canEnablePIP) == null ? void 0 : _a.call(Player2))) {\n return true;\n }\n }\n }\n return false;\n };\n return ReactPlayer;\n};\nconst ForwardChildren = ({ children }) => children;\nexport {\n createReactPlayer\n};\n","\"use client\";\nimport players from \"./players.js\";\nimport { createReactPlayer } from \"./ReactPlayer.js\";\nconst fallback = players[players.length - 1];\nvar src_default = createReactPlayer(players, fallback);\nexport {\n src_default as default\n};\n","import {\n CircleNotchIcon,\n PauseIcon,\n PlayIcon,\n} from '@phosphor-icons/react'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport ReactPlayer from 'react-player'\n\nimport { isDevBuild } from '../../../utils/isDevBuild'\nimport { renderTypeIcon } from '../utils/icons'\nimport { getSourceType, type AttachmentSourceType } from '../utils/mimeType'\n\nconst getPlayerBg = (sourceType: AttachmentSourceType, poster?: string) =>\n sourceType === 'audio' && !poster ? 'bg-black/5' : 'bg-black'\n\nfunction getClientXFromEvent(\n e: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent\n): number {\n if ('touches' in e) {\n return e.touches[0]?.clientX ?? e.changedTouches[0]?.clientX ?? 0\n }\n return e.clientX\n}\n\nexport interface MediaPlayerProps {\n source: string\n mimeType: string\n poster?: string\n autoPlay?: boolean\n loop?: boolean\n controls?: boolean\n showProgress?: boolean\n onContainerClick?: () => void\n /** When true, requests muted playback (helps autoplay policies on video). */\n muted?: boolean\n}\n\nconst MediaPlayer: React.FC<MediaPlayerProps> = ({\n source,\n mimeType,\n poster,\n autoPlay = false,\n loop = false,\n controls = true,\n showProgress = false,\n onContainerClick,\n muted = false,\n}) => {\n const sourceType = getSourceType(mimeType)\n const [playing, setPlaying] = useState(autoPlay)\n const [played, setPlayed] = useState(0)\n const [seeking, setSeeking] = useState(false)\n const [scrubberHovered, setScrubberHovered] = useState(false)\n const [videoAspect, setVideoAspect] = useState<number | null>(null)\n const [buffering, setBuffering] = useState(false)\n /** Set when autoplay/play() was rejected so user can start via gesture (no controls UI). */\n const [manualPlayRequired, setManualPlayRequired] = useState(false)\n const playerRef = useRef<HTMLVideoElement>(null)\n const trackRef = useRef<HTMLDivElement>(null)\n const rafRef = useRef<number | null>(null)\n\n useEffect(() => {\n setManualPlayRequired(false)\n }, [source])\n\n useEffect(() => {\n if (!playing) {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current)\n rafRef.current = null\n }\n return\n }\n const tick = () => {\n const el = playerRef.current\n if (el && el.duration && !seeking) setPlayed(el.currentTime / el.duration)\n rafRef.current = requestAnimationFrame(tick)\n }\n rafRef.current = requestAnimationFrame(tick)\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current)\n }\n }, [playing, seeking])\n\n // ReactPlayer v3 uses native HTML media elements and does not support a\n // declarative `playing` prop — playback must be driven imperatively.\n useEffect(() => {\n const el = playerRef.current\n if (!el) return\n if (playing) {\n void el.play().catch((err) => {\n setPlaying(false)\n setManualPlayRequired(true)\n if (isDevBuild()) {\n console.debug('[MediaPlayer] play() failed', err)\n }\n })\n } else {\n el.pause()\n }\n }, [playing])\n\n const startPlaybackFromGesture = useCallback(() => {\n setManualPlayRequired(false)\n setPlaying(true)\n }, [])\n\n const getFraction = useCallback(\n (e: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent) => {\n const track = trackRef.current\n if (!track) return 0\n const rect = track.getBoundingClientRect()\n return Math.max(\n 0,\n Math.min(1, (getClientXFromEvent(e) - rect.left) / rect.width)\n )\n },\n []\n )\n\n const seekTo = useCallback((fraction: number) => {\n const el = playerRef.current\n if (el && el.duration) el.currentTime = fraction * el.duration\n }, [])\n\n const handleTrackPointerDown = (e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>) => {\n e.stopPropagation()\n setSeeking(true)\n const fraction = getFraction(e)\n setPlayed(fraction)\n seekTo(fraction)\n }\n\n useEffect(() => {\n if (!seeking) return\n const onMove = (e: MouseEvent | TouchEvent) => setPlayed(getFraction(e))\n const onUp = (e: MouseEvent | TouchEvent) => {\n setSeeking(false)\n seekTo(getFraction(e))\n }\n window.addEventListener('mousemove', onMove)\n window.addEventListener('mouseup', onUp)\n window.addEventListener('touchmove', onMove, { passive: true })\n window.addEventListener('touchend', onUp)\n return () => {\n window.removeEventListener('mousemove', onMove)\n window.removeEventListener('mouseup', onUp)\n window.removeEventListener('touchmove', onMove)\n window.removeEventListener('touchend', onUp)\n }\n }, [seeking, getFraction, seekTo])\n\n // Use natural aspect ratio once metadata loads, fall back to 16:9 before then.\n const aspectStyle = videoAspect ? { aspectRatio: String(videoAspect) } : undefined\n const aspectClass = !videoAspect ? ' aspect-video' : ''\n const scrubberPercent = Math.round(played * 100)\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className={`relative cursor-pointer overflow-hidden ${getPlayerBg(sourceType, poster)}${aspectClass}`}\n style={aspectStyle}\n onClick={() => {\n if (manualPlayRequired) return\n if (onContainerClick) { onContainerClick(); return }\n if (controls) setPlaying((p) => !p)\n }}\n onKeyDown={(e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return\n e.preventDefault()\n if (manualPlayRequired) return\n if (onContainerClick) {\n onContainerClick()\n return\n }\n if (controls) setPlaying((p) => !p)\n }}\n >\n {poster && (\n <img src={poster} alt=\"\" className=\"absolute inset-0 h-full w-full object-cover\" />\n )}\n {!poster && (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {renderTypeIcon(mimeType, { className: 'size-12 text-black/20', weight: 'regular' })}\n </div>\n )}\n <div className=\"absolute inset-0\">\n <ReactPlayer\n ref={playerRef}\n src={source}\n poster={poster}\n loop={loop}\n muted={muted}\n playsInline\n width=\"100%\"\n height=\"100%\"\n onLoadStart={() => setBuffering(true)}\n onCanPlay={() => setBuffering(false)}\n onWaiting={() => setBuffering(true)}\n onPlay={() => setManualPlayRequired(false)}\n onLoadedMetadata={() => {\n const el = playerRef.current\n if (el && el.videoWidth && el.videoHeight) {\n setVideoAspect(el.videoWidth / el.videoHeight)\n }\n }}\n onEnded={() => {\n if (!loop) {\n setPlaying(false)\n setPlayed(0)\n }\n }}\n />\n </div>\n\n {buffering && !manualPlayRequired && (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n <CircleNotchIcon className=\"size-8 animate-spin text-white/80\" weight=\"bold\" />\n </div>\n )}\n\n {manualPlayRequired && !controls && (\n <div\n className=\"absolute inset-0 z-30 flex cursor-pointer items-center justify-center bg-black/35\"\n role=\"button\"\n tabIndex={0}\n aria-label=\"Play preview\"\n onClick={(e) => {\n e.stopPropagation()\n startPlaybackFromGesture()\n }}\n onKeyDown={(e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return\n e.preventDefault()\n e.stopPropagation()\n startPlaybackFromGesture()\n }}\n >\n <span className=\"flex size-16 items-center justify-center rounded-full bg-white/20 text-white backdrop-blur-sm\">\n <PlayIcon className=\"size-9 translate-x-0.5\" weight=\"fill\" />\n </span>\n </div>\n )}\n\n {showProgress && !controls && (\n <div className=\"absolute inset-x-0 bottom-0 px-3 pb-2.5 pt-6 bg-gradient-to-t from-black/40 to-transparent pointer-events-none\">\n <div className=\"h-1 w-full overflow-hidden rounded-full bg-white/30\">\n <div className=\"h-full rounded-full bg-white\" style={{ width: `${scrubberPercent}%` }} />\n </div>\n </div>\n )}\n\n {controls && <div className=\"absolute inset-x-0 bottom-0 flex items-center gap-2 bg-gradient-to-t from-black/60 to-transparent px-3 pb-2.5 pt-6 transition-all duration-200\">\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); setPlaying((p) => !p) }}\n className=\"shrink-0 text-white\"\n aria-label={playing ? 'Pause' : 'Play'}\n >\n {playing\n ? <PauseIcon className=\"size-5\" weight=\"fill\" />\n : <PlayIcon className=\"size-5 translate-x-px\" weight=\"fill\" />\n }\n </button>\n\n <div\n role=\"slider\"\n aria-label=\"Playback position\"\n aria-valuenow={scrubberPercent}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={0}\n ref={trackRef}\n className=\"relative flex h-4 w-full cursor-pointer items-center\"\n onMouseDown={handleTrackPointerDown}\n onTouchStart={handleTrackPointerDown}\n onClick={(e) => e.stopPropagation()}\n onMouseEnter={() => setScrubberHovered(true)}\n onMouseLeave={() => setScrubberHovered(false)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight') seekTo(Math.min(1, played + 0.05))\n if (e.key === 'ArrowLeft') seekTo(Math.max(0, played - 0.05))\n }}\n >\n <div className={`w-full overflow-hidden rounded-full bg-white/30 transition-all duration-200 ${scrubberHovered || seeking ? 'h-1.5' : 'h-1'}`}>\n <div className=\"h-full rounded-full bg-white\" style={{ width: `${scrubberPercent}%` }} />\n </div>\n <div\n className={`absolute size-3 -translate-x-1/2 rounded-full bg-white shadow transition-[opacity,transform] duration-200 ${scrubberHovered || seeking ? 'scale-100 opacity-100' : 'scale-0 opacity-0'}`}\n style={{ left: `${scrubberPercent}%` }}\n />\n </div>\n </div>}\n </div>\n )\n}\n\nexport default MediaPlayer\n"],"names":["DOCUMENT_ICON_PATTERNS","getSourceType","mimeType","getDocumentIconType","match","pattern","MEDIA_TYPE_ICON","VideoCameraIcon","SpeakerHighIcon","ImageIcon","FileIcon","DOCUMENT_ICON_COMPONENT","FilePdfIcon","FileDocIcon","FileXlsIcon","FileCsvIcon","FilePptIcon","FileZipIcon","FileTextIcon","FileMdIcon","getTypeIcon","sourceType","renderTypeIcon","props","React","AUDIO_EXTENSIONS","VIDEO_EXTENSIONS","HLS_EXTENSIONS","DASH_EXTENSIONS","MATCH_URL_MUX","MATCH_URL_YOUTUBE","MATCH_URL_VIMEO","MATCH_URL_WISTIA","MATCH_URL_SPOTIFY","MATCH_URL_TWITCH","MATCH_URL_TIKTOK","canPlayFile","url","test","item","canPlay","u","HtmlPlayer","ref","Media","HtmlPlayer_default","Players","lazy","players_default","defaultProps","Player","playing","pip","Player2","playerRef","useRef","startOnPlayRef","useEffect","_a","_b","_c","_d","_e","handleLoadStart","event","handlePlay","eventProps","reactPlayerEventHandlers","key","useCallback","node","Player_default","Preview","customPlayers","createReactPlayer","players","playerFallback","getActivePlayer","src","player","ReactPlayer","_props","slot","className","style","width","height","fallback","wrapper","showPreview","setShowPreview","useState","handleClickPreview","e","renderPreview","src2","light","playIcon","previewTabIndex","oEmbedUrl","previewAriaLabel","renderActivePlayer","style2","width2","height2","wrapper2","config","Wrapper","ForwardChildren","UniversalSuspense","Suspense","children","src_default","getPlayerBg","poster","getClientXFromEvent","MediaPlayer","source","autoPlay","loop","controls","showProgress","onContainerClick","muted","setPlaying","played","setPlayed","seeking","setSeeking","scrubberHovered","setScrubberHovered","videoAspect","setVideoAspect","buffering","setBuffering","manualPlayRequired","setManualPlayRequired","trackRef","rafRef","tick","el","err","startPlaybackFromGesture","getFraction","track","rect","seekTo","fraction","handleTrackPointerDown","onMove","onUp","aspectStyle","aspectClass","scrubberPercent","jsxs","p","jsx","CircleNotchIcon","PlayIcon","PauseIcon"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8]}
|
package/dist/Visitor-CpmFZRGO.js
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { jsxs as l, jsx as e, Fragment as b } from "react/jsx-runtime";
|
|
2
|
-
import { CheckCircleIcon as R, DownloadSimpleIcon as V, LockSimpleOpenIcon as A, LockSimpleIcon as D } from "@phosphor-icons/react";
|
|
3
|
-
import { useState as x, useEffect as y } from "react";
|
|
4
|
-
import { g as E, r as z, M as F } from "./MediaPlayer-DsjlYGGH.js";
|
|
5
|
-
const $ = (t) => t === "paid" ? A : D, j = ({
|
|
6
|
-
src: t,
|
|
7
|
-
mimeType: s
|
|
8
|
-
}) => t ? /* @__PURE__ */ e(
|
|
9
|
-
"img",
|
|
10
|
-
{
|
|
11
|
-
src: t,
|
|
12
|
-
alt: "",
|
|
13
|
-
className: "absolute inset-0 h-full w-full object-cover"
|
|
14
|
-
}
|
|
15
|
-
) : /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center", children: z(s, { className: "size-12 text-black/20", weight: "regular" }) }), I = ({ icon: t }) => /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center bg-black/30", children: /* @__PURE__ */ e("div", { className: "flex size-12 items-center justify-center rounded-full bg-black/60", children: /* @__PURE__ */ e(t, { className: "size-6 text-white", weight: "regular" }) }) }), _ = ({
|
|
16
|
-
thumbnail: t,
|
|
17
|
-
mimeType: s,
|
|
18
|
-
LockIcon: a
|
|
19
|
-
}) => /* @__PURE__ */ l("div", { className: "relative aspect-video overflow-hidden bg-black/5", children: [
|
|
20
|
-
/* @__PURE__ */ e(j, { src: t, mimeType: s }),
|
|
21
|
-
/* @__PURE__ */ e(I, { icon: a })
|
|
22
|
-
] }), q = ({
|
|
23
|
-
isLocked: t,
|
|
24
|
-
loading: s,
|
|
25
|
-
paymentStatus: a,
|
|
26
|
-
source: i,
|
|
27
|
-
LockIcon: n,
|
|
28
|
-
onUnlock: c,
|
|
29
|
-
onDownload: o
|
|
30
|
-
}) => t && c ? /* @__PURE__ */ e(
|
|
31
|
-
"button",
|
|
32
|
-
{
|
|
33
|
-
type: "button",
|
|
34
|
-
onClick: c,
|
|
35
|
-
disabled: s,
|
|
36
|
-
className: "mt-3 inline-flex h-10 w-full items-center justify-center gap-2 rounded-full bg-[#121110] px-4 text-sm font-medium leading-none text-white disabled:opacity-70",
|
|
37
|
-
children: s ? /* @__PURE__ */ l("span", { className: "flex items-center gap-1", children: [
|
|
38
|
-
/* @__PURE__ */ e("span", { className: "size-1 rounded-full bg-white animate-bounce [animation-delay:-0.3s]" }),
|
|
39
|
-
/* @__PURE__ */ e("span", { className: "size-1 rounded-full bg-white animate-bounce [animation-delay:-0.15s]" }),
|
|
40
|
-
/* @__PURE__ */ e("span", { className: "size-1 rounded-full bg-white animate-bounce" })
|
|
41
|
-
] }) : /* @__PURE__ */ l(b, { children: [
|
|
42
|
-
/* @__PURE__ */ e(n, { className: "size-4", weight: "fill" }),
|
|
43
|
-
a === "paid" ? "Open" : "Unlock"
|
|
44
|
-
] })
|
|
45
|
-
}
|
|
46
|
-
) : !t && o && i ? /* @__PURE__ */ l(
|
|
47
|
-
"a",
|
|
48
|
-
{
|
|
49
|
-
href: i,
|
|
50
|
-
target: "_blank",
|
|
51
|
-
rel: "noopener noreferrer",
|
|
52
|
-
onClick: o,
|
|
53
|
-
className: "mt-3 inline-flex h-10 w-full items-center justify-center gap-2 rounded-full bg-[#121110] px-4 text-sm font-medium leading-none !text-white",
|
|
54
|
-
children: [
|
|
55
|
-
/* @__PURE__ */ e(V, { className: "size-4", weight: "bold" }),
|
|
56
|
-
"Download"
|
|
57
|
-
]
|
|
58
|
-
}
|
|
59
|
-
) : null, B = ({
|
|
60
|
-
mimeType: t,
|
|
61
|
-
detail: s,
|
|
62
|
-
paymentStatus: a,
|
|
63
|
-
amountText: i
|
|
64
|
-
}) => /* @__PURE__ */ l("div", { className: "flex items-center gap-1", children: [
|
|
65
|
-
z(t, { className: "size-5 shrink-0 text-black/55", weight: "regular" }),
|
|
66
|
-
s && /* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: s }),
|
|
67
|
-
a === "paid" ? /* @__PURE__ */ l(b, { children: [
|
|
68
|
-
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: "•" }),
|
|
69
|
-
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-[#008236]", children: "Purchased" }),
|
|
70
|
-
/* @__PURE__ */ e(R, { className: "size-4 text-[#008236]", weight: "bold" })
|
|
71
|
-
] }) : i && /* @__PURE__ */ l(b, { children: [
|
|
72
|
-
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: "•" }),
|
|
73
|
-
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-black/55", children: i })
|
|
74
|
-
] })
|
|
75
|
-
] }), Q = ({
|
|
76
|
-
title: t,
|
|
77
|
-
amountText: s,
|
|
78
|
-
thumbnail: a,
|
|
79
|
-
poster: i,
|
|
80
|
-
source: n,
|
|
81
|
-
mimeType: c = "application/octet-stream",
|
|
82
|
-
detail: o,
|
|
83
|
-
onUnlock: p,
|
|
84
|
-
onDownload: L,
|
|
85
|
-
paymentStatus: h
|
|
86
|
-
}) => {
|
|
87
|
-
const [d, g] = x(n), [N, w] = x(i), [C, v] = x(!1), [S, O] = x(!1);
|
|
88
|
-
y(() => {
|
|
89
|
-
n !== void 0 && g(n);
|
|
90
|
-
}, [n]), y(() => {
|
|
91
|
-
i !== void 0 && w(i);
|
|
92
|
-
}, [i]);
|
|
93
|
-
const r = d === void 0, m = $(h), k = E(c), M = async () => {
|
|
94
|
-
if (p) {
|
|
95
|
-
v(!0);
|
|
96
|
-
try {
|
|
97
|
-
const f = await p();
|
|
98
|
-
g(f.source), f.poster && w(f.poster);
|
|
99
|
-
} catch {
|
|
100
|
-
} finally {
|
|
101
|
-
v(!1);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
let u;
|
|
106
|
-
return k === "image" ? u = r ? /* @__PURE__ */ e(
|
|
107
|
-
_,
|
|
108
|
-
{
|
|
109
|
-
thumbnail: a,
|
|
110
|
-
mimeType: c,
|
|
111
|
-
LockIcon: m
|
|
112
|
-
}
|
|
113
|
-
) : /* @__PURE__ */ e("div", { className: "relative overflow-hidden bg-black/5", children: /* @__PURE__ */ e(
|
|
114
|
-
"img",
|
|
115
|
-
{
|
|
116
|
-
src: d,
|
|
117
|
-
alt: t,
|
|
118
|
-
className: `block w-full transition-opacity duration-300 ${S ? "opacity-100" : "opacity-0"}`,
|
|
119
|
-
onLoad: () => O(!0)
|
|
120
|
-
}
|
|
121
|
-
) }) : k === "document" ? u = /* @__PURE__ */ l("div", { className: "relative aspect-video overflow-hidden bg-black/5", children: [
|
|
122
|
-
/* @__PURE__ */ e(
|
|
123
|
-
j,
|
|
124
|
-
{
|
|
125
|
-
src: r ? a : N,
|
|
126
|
-
mimeType: c
|
|
127
|
-
}
|
|
128
|
-
),
|
|
129
|
-
r && /* @__PURE__ */ e(I, { icon: m })
|
|
130
|
-
] }) : u = r ? /* @__PURE__ */ e(
|
|
131
|
-
_,
|
|
132
|
-
{
|
|
133
|
-
thumbnail: a,
|
|
134
|
-
mimeType: c,
|
|
135
|
-
LockIcon: m
|
|
136
|
-
}
|
|
137
|
-
) : /* @__PURE__ */ e(
|
|
138
|
-
F,
|
|
139
|
-
{
|
|
140
|
-
source: d,
|
|
141
|
-
mimeType: c,
|
|
142
|
-
poster: N ?? a
|
|
143
|
-
}
|
|
144
|
-
), /* @__PURE__ */ l("div", { className: "w-[280px] overflow-hidden rounded-3xl bg-white shadow-[0px_0px_0px_1px_rgba(0,0,0,0.04),0px_1px_2px_0px_rgba(0,0,0,0.04),0px_8px_32px_0px_rgba(0,0,0,0.1)]", children: [
|
|
145
|
-
u,
|
|
146
|
-
/* @__PURE__ */ l("div", { className: "px-4 pb-3 pt-3", children: [
|
|
147
|
-
/* @__PURE__ */ e("p", { className: "mb-1.5 truncate text-base font-medium text-black", children: t }),
|
|
148
|
-
/* @__PURE__ */ e(
|
|
149
|
-
B,
|
|
150
|
-
{
|
|
151
|
-
mimeType: c,
|
|
152
|
-
detail: o,
|
|
153
|
-
paymentStatus: h,
|
|
154
|
-
amountText: s
|
|
155
|
-
}
|
|
156
|
-
),
|
|
157
|
-
/* @__PURE__ */ e(
|
|
158
|
-
q,
|
|
159
|
-
{
|
|
160
|
-
isLocked: r,
|
|
161
|
-
loading: C,
|
|
162
|
-
paymentStatus: h,
|
|
163
|
-
source: d,
|
|
164
|
-
LockIcon: m,
|
|
165
|
-
onUnlock: p ? M : void 0,
|
|
166
|
-
onDownload: L
|
|
167
|
-
}
|
|
168
|
-
)
|
|
169
|
-
] })
|
|
170
|
-
] });
|
|
171
|
-
};
|
|
172
|
-
export {
|
|
173
|
-
Q as default
|
|
174
|
-
};
|
|
175
|
-
//# sourceMappingURL=Visitor-CpmFZRGO.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Visitor-CpmFZRGO.js","sources":["../src/components/LockedAttachment/components/Visitor.tsx"],"sourcesContent":["import {\n CheckCircleIcon,\n DownloadSimpleIcon,\n LockSimpleIcon,\n LockSimpleOpenIcon,\n} from '@phosphor-icons/react'\nimport React, { useEffect, useState } from 'react'\n\nimport { isDevBuild } from '../../../utils/isDevBuild'\nimport type { LockedAttachmentBaseProps, LockedAttachmentSource, PaymentStatus } from '../types'\nimport { renderTypeIcon } from '../utils/icons'\nimport { getSourceType } from '../utils/mimeType'\n\nimport MediaPlayer from './MediaPlayer'\n\nexport interface VisitorCardProps extends LockedAttachmentBaseProps {\n title?: string\n /**\n * Called when the visitor clicks Unlock. Return the resolved source and optional poster.\n * The component manages loading state and sets source/poster internally on resolution.\n * Omit to hide the Unlock button.\n */\n onUnlock?: () => Promise<LockedAttachmentSource>\n /** Called when the visitor clicks Download on an unlocked card. */\n onDownload?: () => void\n}\n\nconst getLockIcon = (paymentStatus?: PaymentStatus): React.ElementType => {\n return paymentStatus === 'paid' ? LockSimpleOpenIcon : LockSimpleIcon\n}\n\nconst ThumbnailOrIcon: React.FC<{ src?: string; mimeType: string }> = ({\n src,\n mimeType,\n}) => {\n if (src) {\n return (\n <img\n src={src}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover\"\n />\n )\n }\n\n return (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n {renderTypeIcon(mimeType, { className: 'size-12 text-black/20', weight: 'regular' })}\n </div>\n )\n}\n\nconst LockOverlay: React.FC<{ icon: React.ElementType }> = ({ icon: Icon }) => (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/30\">\n <div className=\"flex size-12 items-center justify-center rounded-full bg-black/60\">\n <Icon className=\"size-6 text-white\" weight=\"regular\" />\n </div>\n </div>\n)\n\ninterface LockedPreviewProps {\n thumbnail?: string\n mimeType: string\n LockIcon: React.ElementType\n}\n\nconst LockedPreview: React.FC<LockedPreviewProps> = ({\n thumbnail,\n mimeType,\n LockIcon,\n}) => (\n <div className=\"relative aspect-video overflow-hidden bg-black/5\">\n <ThumbnailOrIcon src={thumbnail} mimeType={mimeType} />\n <LockOverlay icon={LockIcon} />\n </div>\n)\n\ninterface CardActionsProps {\n isLocked: boolean\n loading: boolean\n paymentStatus?: PaymentStatus\n source?: string\n LockIcon: React.ElementType\n onUnlock?: () => void\n onDownload?: () => void\n}\n\nconst CardActions: React.FC<CardActionsProps> = ({\n isLocked,\n loading,\n paymentStatus,\n source,\n LockIcon,\n onUnlock,\n onDownload,\n}) => {\n if (isLocked && onUnlock) {\n return (\n <button\n type=\"button\"\n onClick={onUnlock}\n disabled={loading}\n className=\"mt-3 inline-flex h-10 w-full items-center justify-center gap-2 rounded-full bg-[#121110] px-4 text-sm font-medium leading-none text-white disabled:opacity-70\"\n >\n {loading ? (\n <span className=\"flex items-center gap-1\">\n <span className=\"size-1 rounded-full bg-white animate-bounce [animation-delay:-0.3s]\" />\n <span className=\"size-1 rounded-full bg-white animate-bounce [animation-delay:-0.15s]\" />\n <span className=\"size-1 rounded-full bg-white animate-bounce\" />\n </span>\n ) : (\n <>\n <LockIcon className=\"size-4\" weight=\"fill\" />\n {paymentStatus === 'paid' ? 'Open' : 'Unlock'}\n </>\n )}\n </button>\n )\n }\n if (!isLocked && onDownload && source) {\n return (\n <a\n href={source}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onDownload}\n className=\"mt-3 inline-flex h-10 w-full items-center justify-center gap-2 rounded-full bg-[#121110] px-4 text-sm font-medium leading-none !text-white\"\n >\n <DownloadSimpleIcon className=\"size-4\" weight=\"bold\" />\n Download\n </a>\n )\n }\n return null\n}\n\ninterface VisitorCardMetaProps {\n mimeType: string\n detail?: string\n paymentStatus?: PaymentStatus\n amountText?: string\n}\n\nconst VisitorCardMeta: React.FC<VisitorCardMetaProps> = ({\n mimeType,\n detail,\n paymentStatus,\n amountText,\n}) => {\n return (\n <div className=\"flex items-center gap-1\">\n {renderTypeIcon(mimeType, { className: 'size-5 shrink-0 text-black/55', weight: 'regular' })}\n {detail && (\n <span className=\"text-xs font-medium text-black/55\">{detail}</span>\n )}\n {paymentStatus === 'paid' ? (\n <>\n <span className=\"text-xs font-medium text-black/55\">•</span>\n <span className=\"text-xs font-medium text-[#008236]\">Purchased</span>\n <CheckCircleIcon className=\"size-4 text-[#008236]\" weight=\"bold\" />\n </>\n ) : (\n amountText && (\n <>\n <span className=\"text-xs font-medium text-black/55\">•</span>\n <span className=\"text-xs font-medium text-black/55\">\n {amountText}\n </span>\n </>\n )\n )}\n </div>\n )\n}\n\nconst VisitorCard: React.FC<VisitorCardProps> = ({\n title,\n amountText,\n thumbnail,\n poster: posterProp,\n source: sourceProp,\n mimeType = 'application/octet-stream',\n detail,\n onUnlock,\n onDownload,\n paymentStatus,\n}) => {\n const [source, setSource] = useState(sourceProp)\n const [poster, setPoster] = useState(posterProp)\n const [loading, setLoading] = useState(false)\n const [sourceReady, setSourceReady] = useState(false)\n\n useEffect(() => {\n if (sourceProp !== undefined) setSource(sourceProp)\n }, [sourceProp])\n\n useEffect(() => {\n if (posterProp !== undefined) setPoster(posterProp)\n }, [posterProp])\n\n const isLocked = source === undefined\n const LockIcon = getLockIcon(paymentStatus)\n const sourceType = getSourceType(mimeType)\n\n const handleUnlock = async () => {\n if (!onUnlock) return\n setLoading(true)\n try {\n const result = await onUnlock()\n setSource(result.source)\n if (result.poster) setPoster(result.poster)\n } catch (err) {\n // Avoid unhandled rejection from async onClick; host may still surface UI in onUnlock.\n if (isDevBuild()) {\n console.debug('[LockedAttachment] onUnlock failed', err)\n }\n } finally {\n setLoading(false)\n }\n }\n\n let mediaPreview: React.ReactNode\n if (sourceType === 'image') {\n mediaPreview = isLocked ? (\n <LockedPreview\n thumbnail={thumbnail}\n mimeType={mimeType}\n LockIcon={LockIcon}\n />\n ) : (\n <div className=\"relative overflow-hidden bg-black/5\">\n <img\n src={source}\n alt={title}\n className={`block w-full transition-opacity duration-300 ${sourceReady ? 'opacity-100' : 'opacity-0'}`}\n onLoad={() => setSourceReady(true)}\n />\n </div>\n )\n } else if (sourceType === 'document') {\n mediaPreview = (\n <div className=\"relative aspect-video overflow-hidden bg-black/5\">\n <ThumbnailOrIcon\n src={isLocked ? thumbnail : poster}\n mimeType={mimeType}\n />\n {isLocked && <LockOverlay icon={LockIcon} />}\n </div>\n )\n } else {\n mediaPreview = isLocked ? (\n <LockedPreview\n thumbnail={thumbnail}\n mimeType={mimeType}\n LockIcon={LockIcon}\n />\n ) : (\n <MediaPlayer\n source={source}\n mimeType={mimeType}\n poster={poster ?? thumbnail}\n />\n )\n }\n\n return (\n <div className=\"w-[280px] overflow-hidden rounded-3xl bg-white shadow-[0px_0px_0px_1px_rgba(0,0,0,0.04),0px_1px_2px_0px_rgba(0,0,0,0.04),0px_8px_32px_0px_rgba(0,0,0,0.1)]\">\n {mediaPreview}\n <div className=\"px-4 pb-3 pt-3\">\n <p className=\"mb-1.5 truncate text-base font-medium text-black\">\n {title}\n </p>\n <VisitorCardMeta\n mimeType={mimeType}\n detail={detail}\n paymentStatus={paymentStatus}\n amountText={amountText}\n />\n <CardActions\n isLocked={isLocked}\n loading={loading}\n paymentStatus={paymentStatus}\n source={source}\n LockIcon={LockIcon}\n onUnlock={onUnlock ? handleUnlock : undefined}\n onDownload={onDownload}\n />\n </div>\n </div>\n )\n}\n\nexport default VisitorCard\n"],"names":["getLockIcon","paymentStatus","LockSimpleOpenIcon","LockSimpleIcon","ThumbnailOrIcon","src","mimeType","jsx","renderTypeIcon","LockOverlay","Icon","LockedPreview","thumbnail","LockIcon","jsxs","CardActions","isLocked","loading","source","onUnlock","onDownload","Fragment","DownloadSimpleIcon","VisitorCardMeta","detail","amountText","CheckCircleIcon","VisitorCard","title","posterProp","sourceProp","setSource","useState","poster","setPoster","setLoading","sourceReady","setSourceReady","useEffect","sourceType","getSourceType","handleUnlock","result","mediaPreview","MediaPlayer"],"mappings":"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"}
|