@linktr.ee/messaging-react 1.36.0 → 1.38.0-rc-1777583423
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/Card-BlXnKGaR.js +127 -0
- package/dist/Card-BlXnKGaR.js.map +1 -0
- package/dist/Card-DoNJA-jg.js +138 -0
- package/dist/Card-DoNJA-jg.js.map +1 -0
- package/dist/{index-DOsC03ZN.js → index-jnKl3mQ0.js} +1404 -1352
- package/dist/index-jnKl3mQ0.js.map +1 -0
- package/dist/index.d.ts +21 -1
- package/dist/index.js +15 -13
- package/package.json +2 -2
- package/src/components/{LockedAttachment/components → AttachmentCard}/MediaPlayer.tsx +4 -3
- package/src/components/AttachmentCard/Thumbnail.tsx +150 -0
- package/src/components/AttachmentCard/index.tsx +112 -0
- package/src/components/LockedAttachment/components/Creator/Card.tsx +123 -113
- package/src/components/LockedAttachment/components/Visitor/Card.tsx +43 -42
- package/src/components/LockedAttachment/components/Visitor/LockBadge.tsx +12 -0
- package/src/components/MediaMessage/MediaMessage.stories.tsx +45 -4
- package/src/components/MediaMessage/MediaMessage.test.tsx +125 -160
- package/src/components/MediaMessage/index.tsx +226 -349
- package/src/index.ts +7 -3
- package/src/providers/MessagingProvider.test.tsx +126 -0
- package/dist/Card-BHrnmHeu.js +0 -167
- package/dist/Card-BHrnmHeu.js.map +0 -1
- package/dist/Card-D4vEgqWt.js +0 -195
- package/dist/Card-D4vEgqWt.js.map +0 -1
- package/dist/index-DOsC03ZN.js.map +0 -1
- package/src/components/LockedAttachment/components/Creator/CardThumbnail.tsx +0 -114
- package/src/components/LockedAttachment/components/Visitor/CardThumbnail.tsx +0 -81
- /package/src/components/{LockedAttachment → AttachmentCard}/utils/icons.ts +0 -0
- /package/src/components/{LockedAttachment → AttachmentCard}/utils/mimeType.test.ts +0 -0
- /package/src/components/{LockedAttachment → AttachmentCard}/utils/mimeType.ts +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { CheckCircleIcon } from '@phosphor-icons/react'
|
|
2
2
|
import React, { useCallback, useEffect, useRef, useState } from 'react'
|
|
3
3
|
|
|
4
|
+
import AttachmentCard, { AttachmentThumbnail } from '../../../AttachmentCard'
|
|
4
5
|
import type {
|
|
5
6
|
LockedAttachmentBaseProps,
|
|
6
7
|
LockedAttachmentSource,
|
|
7
8
|
} from '../../types'
|
|
8
|
-
import { renderTypeIcon } from '../../utils/icons'
|
|
9
9
|
|
|
10
10
|
import CardActions from './CardActions'
|
|
11
|
-
import
|
|
11
|
+
import { LockBadge } from './LockBadge'
|
|
12
12
|
|
|
13
13
|
export interface VisitorCardProps extends LockedAttachmentBaseProps {
|
|
14
14
|
/**
|
|
@@ -97,48 +97,49 @@ const VisitorCard: React.FC<VisitorCardProps> = ({
|
|
|
97
97
|
return () => observer.disconnect()
|
|
98
98
|
}, [paymentStatus, source, fetchSource])
|
|
99
99
|
|
|
100
|
+
const isLocked = effectiveSourceUrl === undefined
|
|
101
|
+
|
|
102
|
+
const statusBadge =
|
|
103
|
+
paymentStatus === 'paid' ? (
|
|
104
|
+
<React.Fragment>
|
|
105
|
+
<span className="text-xs font-medium text-black/55">•</span>
|
|
106
|
+
<span className="text-xs font-medium text-[#008236]">Purchased</span>
|
|
107
|
+
<CheckCircleIcon className="size-4 text-[#008236]" weight="bold" />
|
|
108
|
+
</React.Fragment>
|
|
109
|
+
) : amountText != null ? (
|
|
110
|
+
<React.Fragment>
|
|
111
|
+
<span className="text-xs font-medium text-black/55">•</span>
|
|
112
|
+
<span className="text-xs font-medium text-black/55">{amountText}</span>
|
|
113
|
+
</React.Fragment>
|
|
114
|
+
) : null
|
|
115
|
+
|
|
100
116
|
return (
|
|
101
|
-
<
|
|
102
|
-
|
|
117
|
+
<AttachmentCard
|
|
118
|
+
variant="light"
|
|
119
|
+
rootRef={cardRef}
|
|
103
120
|
data-testid="locked-attachment"
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
})}
|
|
123
|
-
|
|
124
|
-
{detail && (
|
|
125
|
-
<span className="text-xs font-medium text-black/55">{detail}</span>
|
|
121
|
+
title={title}
|
|
122
|
+
mimeType={mimeType}
|
|
123
|
+
detail={detail}
|
|
124
|
+
statusBadge={statusBadge}
|
|
125
|
+
thumbnail={
|
|
126
|
+
<div className="relative">
|
|
127
|
+
<AttachmentThumbnail
|
|
128
|
+
mimeType={mimeType}
|
|
129
|
+
sourceUrl={effectiveSourceUrl}
|
|
130
|
+
thumbnailUrl={effectiveThumbnail}
|
|
131
|
+
title={title}
|
|
132
|
+
variant="light"
|
|
133
|
+
containedImage={!isLocked}
|
|
134
|
+
/>
|
|
135
|
+
{isLocked && (
|
|
136
|
+
<div className="pointer-events-none absolute inset-0 bg-black/30">
|
|
137
|
+
<LockBadge paymentStatus={paymentStatus} />
|
|
138
|
+
</div>
|
|
126
139
|
)}
|
|
127
|
-
|
|
128
|
-
{paymentStatus === 'paid' ? (
|
|
129
|
-
<React.Fragment>
|
|
130
|
-
<span className="text-xs font-medium text-black/55">•</span>
|
|
131
|
-
<span className="text-xs font-medium text-[#008236]">Purchased</span>
|
|
132
|
-
<CheckCircleIcon className="size-4 text-[#008236]" weight="bold" />
|
|
133
|
-
</React.Fragment>
|
|
134
|
-
) : amountText != null ? (
|
|
135
|
-
<React.Fragment>
|
|
136
|
-
<span className="text-xs font-medium text-black/55">•</span>
|
|
137
|
-
<span className="text-xs font-medium text-black/55">{amountText}</span>
|
|
138
|
-
</React.Fragment>
|
|
139
|
-
) : null}
|
|
140
140
|
</div>
|
|
141
|
-
|
|
141
|
+
}
|
|
142
|
+
action={
|
|
142
143
|
<CardActions
|
|
143
144
|
isUnlocking={isUnlocking}
|
|
144
145
|
sourceUrl={effectiveSourceUrl}
|
|
@@ -146,8 +147,8 @@ const VisitorCard: React.FC<VisitorCardProps> = ({
|
|
|
146
147
|
onUnlockClicked={handleUnlockClick}
|
|
147
148
|
onDownloadClicked={onDownloadClick}
|
|
148
149
|
/>
|
|
149
|
-
|
|
150
|
-
|
|
150
|
+
}
|
|
151
|
+
/>
|
|
151
152
|
)
|
|
152
153
|
}
|
|
153
154
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LockOpenIcon, LockSimpleIcon } from '@phosphor-icons/react'
|
|
2
|
+
import React from 'react'
|
|
3
|
+
|
|
4
|
+
import type { PaymentStatus } from '../../types'
|
|
5
|
+
|
|
6
|
+
export const LockBadge: React.FC<{ paymentStatus?: PaymentStatus }> = ({
|
|
7
|
+
paymentStatus,
|
|
8
|
+
}) => (
|
|
9
|
+
<div className="absolute left-3 top-3 flex size-8 items-center justify-center rounded-full bg-black/60 text-white">
|
|
10
|
+
{paymentStatus === 'paid' ? <LockOpenIcon /> : <LockSimpleIcon />}
|
|
11
|
+
</div>
|
|
12
|
+
)
|
|
@@ -160,7 +160,7 @@ export const Attachment: StoryFn = () => (
|
|
|
160
160
|
<tbody>
|
|
161
161
|
<tr>
|
|
162
162
|
<td className="text-xs text-right font-medium text-black/40 pr-4 align-top pt-2">
|
|
163
|
-
|
|
163
|
+
Visitor
|
|
164
164
|
</td>
|
|
165
165
|
{VARIANTS.map(({ label, attachment }) => (
|
|
166
166
|
<td key={label} className="align-top">
|
|
@@ -177,7 +177,7 @@ export const Attachment: StoryFn = () => (
|
|
|
177
177
|
</tr>
|
|
178
178
|
<tr>
|
|
179
179
|
<td className="text-xs text-right font-medium text-black/40 pr-4 align-top pt-2">
|
|
180
|
-
|
|
180
|
+
Creator
|
|
181
181
|
</td>
|
|
182
182
|
{VARIANTS.map(({ label, attachment }) => (
|
|
183
183
|
<td key={label} className="align-top">
|
|
@@ -202,7 +202,7 @@ export const Links: StoryFn = () => (
|
|
|
202
202
|
<tbody>
|
|
203
203
|
<tr>
|
|
204
204
|
<td className="text-xs text-right font-medium text-black/40 pr-4 align-top pt-2">
|
|
205
|
-
|
|
205
|
+
Visitor
|
|
206
206
|
</td>
|
|
207
207
|
{LINK_VARIANTS.map(({ label, attachment }) => (
|
|
208
208
|
<td key={label} className="align-top">
|
|
@@ -219,7 +219,7 @@ export const Links: StoryFn = () => (
|
|
|
219
219
|
</tr>
|
|
220
220
|
<tr>
|
|
221
221
|
<td className="text-xs text-right font-medium text-black/40 pr-4 align-top pt-2">
|
|
222
|
-
|
|
222
|
+
Creator
|
|
223
223
|
</td>
|
|
224
224
|
{LINK_VARIANTS.map(({ label, attachment }) => (
|
|
225
225
|
<td key={label} className="align-top">
|
|
@@ -237,3 +237,44 @@ export const Links: StoryFn = () => (
|
|
|
237
237
|
</tbody>
|
|
238
238
|
</Table>
|
|
239
239
|
)
|
|
240
|
+
|
|
241
|
+
/** Standalone cards (no chat bubble shell), matching LockedAttachment story layout. */
|
|
242
|
+
export const Compound: StoryFn = () => (
|
|
243
|
+
<Table>
|
|
244
|
+
<TableHead variants={VARIANTS} />
|
|
245
|
+
<tbody>
|
|
246
|
+
<tr>
|
|
247
|
+
<td className="text-xs text-right font-medium text-black/40 pr-4 align-top pt-2">
|
|
248
|
+
MediaMessage.Visitor
|
|
249
|
+
</td>
|
|
250
|
+
{VARIANTS.map(({ label, attachment }) => (
|
|
251
|
+
<td key={label} className="align-top">
|
|
252
|
+
<MediaMessage.Visitor
|
|
253
|
+
message={base({
|
|
254
|
+
attachments: [
|
|
255
|
+
attachment as MessageAttachment,
|
|
256
|
+
],
|
|
257
|
+
})}
|
|
258
|
+
/>
|
|
259
|
+
</td>
|
|
260
|
+
))}
|
|
261
|
+
</tr>
|
|
262
|
+
<tr>
|
|
263
|
+
<td className="text-xs text-right font-medium text-black/40 pr-4 align-top pt-2">
|
|
264
|
+
MediaMessage.Creator
|
|
265
|
+
</td>
|
|
266
|
+
{VARIANTS.map(({ label, attachment }) => (
|
|
267
|
+
<td key={label} className="align-top">
|
|
268
|
+
<MediaMessage.Creator
|
|
269
|
+
message={base({
|
|
270
|
+
attachments: [
|
|
271
|
+
attachment as MessageAttachment,
|
|
272
|
+
],
|
|
273
|
+
})}
|
|
274
|
+
/>
|
|
275
|
+
</td>
|
|
276
|
+
))}
|
|
277
|
+
</tr>
|
|
278
|
+
</tbody>
|
|
279
|
+
</Table>
|
|
280
|
+
)
|