@linktr.ee/messaging-react 3.4.2 → 3.4.3-rc-1782553322

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.
Files changed (29) hide show
  1. package/dist/{Card-DxroYNrS.cjs → Card-1oglowd2.cjs} +2 -2
  2. package/dist/{Card-DxroYNrS.cjs.map → Card-1oglowd2.cjs.map} +1 -1
  3. package/dist/{Card-CphU_jG-.js → Card-BmVutVEt.js} +2 -2
  4. package/dist/{Card-CphU_jG-.js.map → Card-BmVutVEt.js.map} +1 -1
  5. package/dist/{Card-BKalDyyu.js → Card-CKn-iPjf.js} +2 -2
  6. package/dist/{Card-BKalDyyu.js.map → Card-CKn-iPjf.js.map} +1 -1
  7. package/dist/{Card-V-bNUxcw.cjs → Card-DEEK3wsC.cjs} +2 -2
  8. package/dist/{Card-V-bNUxcw.cjs.map → Card-DEEK3wsC.cjs.map} +1 -1
  9. package/dist/{Card-mpVcQ8-W.js → Card-DoBWURRU.js} +3 -3
  10. package/dist/{Card-mpVcQ8-W.js.map → Card-DoBWURRU.js.map} +1 -1
  11. package/dist/{Card-DFy_ZvFH.cjs → Card-DwaOIthl.cjs} +2 -2
  12. package/dist/{Card-DFy_ZvFH.cjs.map → Card-DwaOIthl.cjs.map} +1 -1
  13. package/dist/{LockedThumbnail-B3W7upHs.cjs → LockedThumbnail-B59cJFsF.cjs} +2 -2
  14. package/dist/{LockedThumbnail-B3W7upHs.cjs.map → LockedThumbnail-B59cJFsF.cjs.map} +1 -1
  15. package/dist/{LockedThumbnail-BD7qtcso.js → LockedThumbnail-DI-aReA7.js} +2 -2
  16. package/dist/{LockedThumbnail-BD7qtcso.js.map → LockedThumbnail-DI-aReA7.js.map} +1 -1
  17. package/dist/index-12HxQ_GM.cjs +2 -0
  18. package/dist/index-12HxQ_GM.cjs.map +1 -0
  19. package/dist/{index-CjwQ2Hj3.js → index-Dv13-2iu.js} +773 -740
  20. package/dist/index-Dv13-2iu.js.map +1 -0
  21. package/dist/index.cjs +1 -1
  22. package/dist/index.js +1 -1
  23. package/package.json +2 -2
  24. package/src/components/ChannelView.stories.tsx +7 -5
  25. package/src/components/ChannelView.test.tsx +10 -0
  26. package/src/components/ChannelView.tsx +95 -59
  27. package/dist/index-CjwQ2Hj3.js.map +0 -1
  28. package/dist/index-tI-4cxV1.cjs +0 -2
  29. package/dist/index-tI-4cxV1.cjs.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-tI-4cxV1.cjs");exports.ActionButton=e.ActionButton;exports.Avatar=e.Avatar;exports.ChannelEmptyState=e.ChannelEmptyState;exports.ChannelList=e.ChannelList;exports.ChannelView=e.ChannelView;exports.CustomMessageProvider=e.CustomMessageProvider;exports.FaqList=e.FaqList;exports.FaqListItem=e.FaqListItem;exports.LinkAttachment=e.LinkAttachment;exports.LockedAttachment=e.LockedAttachment;exports.MediaMessage=e.MediaMessage;exports.MessageAttachment=e.MessageAttachment;exports.MessageVoteButtons=e.MessageVoteButtons;exports.MessagingProvider=e.MessagingProvider;exports.MessagingShell=e.MessagingShell;exports.buildCompactMetaLabel=e.buildCompactMetaLabel;exports.formatFileSize=e.formatFileSize;exports.formatRelativeTime=e.formatRelativeTime;exports.getFileExtensionLabel=e.getFileExtensionLabel;exports.getMessageDisplayText=e.getMessageDisplayText;exports.isLinkAttachment=e.isLinkAttachment;exports.isUuidLike=e.isUuidLike;exports.messageAttachmentGroupPositionFromStream=e.bubbleGroupPositionFromStream;exports.normalizeLanguageCode=e.normalizeLanguageCode;exports.resolveLinkAttachment=e.resolveLinkAttachment;exports.resolveMediaFromMessage=e.resolveMediaFromMessage;exports.resolveParticipantDisplayName=e.resolveParticipantDisplayName;exports.useComposerLocked=e.useComposerLocked;exports.useCustomMessage=e.useCustomMessage;exports.useMessageVote=e.useMessageVote;exports.useMessaging=e.useMessaging;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-12HxQ_GM.cjs");exports.ActionButton=e.ActionButton;exports.Avatar=e.Avatar;exports.ChannelEmptyState=e.ChannelEmptyState;exports.ChannelList=e.ChannelList;exports.ChannelView=e.ChannelView;exports.CustomMessageProvider=e.CustomMessageProvider;exports.FaqList=e.FaqList;exports.FaqListItem=e.FaqListItem;exports.LinkAttachment=e.LinkAttachment;exports.LockedAttachment=e.LockedAttachment;exports.MediaMessage=e.MediaMessage;exports.MessageAttachment=e.MessageAttachment;exports.MessageVoteButtons=e.MessageVoteButtons;exports.MessagingProvider=e.MessagingProvider;exports.MessagingShell=e.MessagingShell;exports.buildCompactMetaLabel=e.buildCompactMetaLabel;exports.formatFileSize=e.formatFileSize;exports.formatRelativeTime=e.formatRelativeTime;exports.getFileExtensionLabel=e.getFileExtensionLabel;exports.getMessageDisplayText=e.getMessageDisplayText;exports.isLinkAttachment=e.isLinkAttachment;exports.isUuidLike=e.isUuidLike;exports.messageAttachmentGroupPositionFromStream=e.bubbleGroupPositionFromStream;exports.normalizeLanguageCode=e.normalizeLanguageCode;exports.resolveLinkAttachment=e.resolveLinkAttachment;exports.resolveMediaFromMessage=e.resolveMediaFromMessage;exports.resolveParticipantDisplayName=e.resolveParticipantDisplayName;exports.useComposerLocked=e.useComposerLocked;exports.useCustomMessage=e.useCustomMessage;exports.useMessageVote=e.useMessageVote;exports.useMessaging=e.useMessaging;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as e, b as t, C as i, c as o, d as n, e as m, F as g, f as r, L as l, h as M, M as u, i as L, j as c, k as h, l as d, m as p, n as C, o as v, p as A, q as k, s as F, t as b, u as f, v as x, w as y, x as P, y as S, z as q, B as z, D as B, E as D } from "./index-CjwQ2Hj3.js";
1
+ import { a as e, b as t, C as i, c as o, d as n, e as m, F as g, f as r, L as l, h as M, M as u, i as L, j as c, k as h, l as d, m as p, n as C, o as v, p as A, q as k, s as F, t as b, u as f, v as x, w as y, x as P, y as S, z as q, B as z, D as B, E as D } from "./index-Dv13-2iu.js";
2
2
  export {
3
3
  e as ActionButton,
4
4
  t as Avatar,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linktr.ee/messaging-react",
3
- "version": "3.4.2",
3
+ "version": "3.4.3-rc-1782553322",
4
4
  "description": "React messaging components built on messaging-core for web applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@linktr.ee/component-library": "11.8.6",
41
- "@linktr.ee/messaging-core": "^2.2.0",
41
+ "@linktr.ee/messaging-core": "2.3.0-rc-1782553322",
42
42
  "@phosphor-icons/react": "^2.1.10"
43
43
  },
44
44
  "devDependencies": {
@@ -251,18 +251,20 @@ Default.parameters = {
251
251
  },
252
252
  }
253
253
 
254
- export const ParticipantNameTrigger: StoryFn<TemplateProps> = Template.bind({})
255
- ParticipantNameTrigger.args = {
254
+ export const ParticipantIdentityTrigger: StoryFn<TemplateProps> = Template.bind(
255
+ {}
256
+ )
257
+ ParticipantIdentityTrigger.args = {
256
258
  showBackButton: false,
257
259
  onParticipantNameClick: () =>
258
260
  // eslint-disable-next-line no-alert
259
- window.alert('Participant name clicked — open Thread content'),
261
+ window.alert('Participant details clicked — open Thread content'),
260
262
  }
261
- ParticipantNameTrigger.parameters = {
263
+ ParticipantIdentityTrigger.parameters = {
262
264
  docs: {
263
265
  description: {
264
266
  story:
265
- 'Header with `onParticipantNameClick` set: the participant name renders as a button with a trailing caret (both the mobile and desktop header layouts). Click the name to fire the callback (shows an alert here). With the prop omitted (see Default) the name is plain, non-interactive text.',
267
+ 'Header with `onParticipantNameClick` set: the participant avatar and name render as one button with a trailing caret in both the mobile and desktop header layouts. Click the identity block to fire the callback (shows an alert here). With the prop omitted (see Default) the header remains non-interactive.',
266
268
  },
267
269
  },
268
270
  }
@@ -208,6 +208,16 @@ describe('ChannelView', () => {
208
208
  name: /view details for linker/i,
209
209
  })
210
210
  expect(buttons.length).toBeGreaterThanOrEqual(1)
211
+ expect(buttons[0]).toHaveClass(
212
+ 'appearance-none',
213
+ 'border-0',
214
+ 'bg-transparent',
215
+ 'p-0'
216
+ )
217
+
218
+ const avatars = screen.getAllByTestId('avatar')
219
+ expect(avatars.length).toBeGreaterThanOrEqual(1)
220
+ expect(avatars[0].closest('button')).toBe(buttons[0])
211
221
 
212
222
  buttons[0].click()
213
223
  expect(onParticipantNameClick).toHaveBeenCalledTimes(1)
@@ -97,6 +97,12 @@ const CustomChannelHeader: React.FC<{
97
97
  channel,
98
98
  participant,
99
99
  })
100
+ const participantTitle = (
101
+ <>
102
+ <span className="min-w-0 truncate">{participantName}</span>
103
+ {headerTitleBadges && <span className="shrink-0">{headerTitleBadges}</span>}
104
+ </>
105
+ )
100
106
 
101
107
  const handleStarClick = async () => {
102
108
  try {
@@ -132,40 +138,52 @@ const CustomChannelHeader: React.FC<{
132
138
  )}
133
139
  </div>
134
140
  <div className="flex flex-col gap-1 items-center">
135
- <Avatar
136
- id={participant?.user?.id || channel.id || 'unknown'}
137
- name={participantName}
138
- image={participantImage}
139
- starred={showStarButton && isStarred}
140
- dmAgentEnabled={dmAgentEnabled}
141
- size={48}
142
- />
143
141
  {onParticipantNameClick ? (
144
142
  <button
145
143
  type="button"
146
144
  onClick={onParticipantNameClick}
147
145
  aria-label={`View details for ${participantName}`}
148
- className="flex max-w-full items-center gap-0.5 rounded text-center text-xs font-medium text-black/90 transition-opacity hover:opacity-70"
146
+ className="flex max-w-full flex-col items-center gap-1 appearance-none rounded border-0 bg-transparent p-0 text-center text-xs font-medium text-black/90 transition-opacity hover:opacity-70 focus-ring focus-visible:outline-none"
149
147
  >
150
- <span className="min-w-0 truncate">{participantName}</span>
151
- {headerTitleBadges && (
152
- <span className="shrink-0">{headerTitleBadges}</span>
148
+ <Avatar
149
+ id={participant?.user?.id || channel.id || 'unknown'}
150
+ name={participantName}
151
+ image={participantImage}
152
+ starred={showStarButton && isStarred}
153
+ dmAgentEnabled={dmAgentEnabled}
154
+ size={48}
155
+ />
156
+ <span className="flex max-w-full items-center gap-0.5">
157
+ {participantTitle}
158
+ <CaretRightIcon className="size-3 shrink-0" weight="bold" />
159
+ </span>
160
+ {dmAgentEnabled && (
161
+ <div className="flex items-center gap-1 text-[10px] leading-3 text-black/55">
162
+ <SparkleIcon className="size-3 shrink-0 text-black/55" />
163
+ <span>{DM_AGENT_HEADER_HELPER_TEXT}</span>
164
+ </div>
153
165
  )}
154
- <CaretRightIcon className="size-3 shrink-0" weight="bold" />
155
166
  </button>
156
167
  ) : (
157
- <p className="flex max-w-full items-center justify-center gap-1 text-center text-xs font-medium text-black/90">
158
- <span className="min-w-0 truncate">{participantName}</span>
159
- {headerTitleBadges && (
160
- <span className="shrink-0">{headerTitleBadges}</span>
168
+ <>
169
+ <Avatar
170
+ id={participant?.user?.id || channel.id || 'unknown'}
171
+ name={participantName}
172
+ image={participantImage}
173
+ starred={showStarButton && isStarred}
174
+ dmAgentEnabled={dmAgentEnabled}
175
+ size={48}
176
+ />
177
+ <p className="flex max-w-full items-center justify-center gap-1 text-center text-xs font-medium text-black/90">
178
+ {participantTitle}
179
+ </p>
180
+ {dmAgentEnabled && (
181
+ <div className="flex items-center gap-1 text-[10px] leading-3 text-black/55">
182
+ <SparkleIcon className="size-3 shrink-0 text-black/55" />
183
+ <span>{DM_AGENT_HEADER_HELPER_TEXT}</span>
184
+ </div>
161
185
  )}
162
- </p>
163
- )}
164
- {dmAgentEnabled && (
165
- <div className="flex items-center gap-1 text-[10px] leading-3 text-black/55">
166
- <SparkleIcon className="size-3 shrink-0 text-black/55" />
167
- <span>{DM_AGENT_HEADER_HELPER_TEXT}</span>
168
- </div>
186
+ </>
169
187
  )}
170
188
  </div>
171
189
  <div className="flex justify-end items-center gap-2">
@@ -223,44 +241,62 @@ const CustomChannelHeader: React.FC<{
223
241
  <ArrowLeftIcon className="size-5 text-black/90" />
224
242
  </button>
225
243
  )}
226
- {/* Avatar */}
227
- <Avatar
228
- id={participant?.user?.id || channel.id || 'unknown'}
229
- name={participantName}
230
- image={participantImage}
231
- starred={showStarButton && isStarred}
232
- dmAgentEnabled={dmAgentEnabled}
233
- size={48}
234
- />
235
- <div className="min-w-0">
236
- {onParticipantNameClick ? (
237
- <button
238
- type="button"
239
- onClick={onParticipantNameClick}
240
- aria-label={`View details for ${participantName}`}
241
- className="flex min-w-0 max-w-full items-center gap-1 rounded font-medium text-black/90 transition-opacity hover:opacity-70"
242
- >
243
- <span className="min-w-0 truncate">{participantName}</span>
244
- {headerTitleBadges && (
245
- <span className="shrink-0">{headerTitleBadges}</span>
244
+ {onParticipantNameClick ? (
245
+ <button
246
+ type="button"
247
+ onClick={onParticipantNameClick}
248
+ aria-label={`View details for ${participantName}`}
249
+ className="flex min-w-0 max-w-full items-center gap-4 appearance-none rounded border-0 bg-transparent p-0 text-left text-black/90 transition-opacity hover:opacity-70 focus-ring focus-visible:outline-none"
250
+ >
251
+ <Avatar
252
+ id={participant?.user?.id || channel.id || 'unknown'}
253
+ name={participantName}
254
+ image={participantImage}
255
+ starred={showStarButton && isStarred}
256
+ dmAgentEnabled={dmAgentEnabled}
257
+ size={48}
258
+ />
259
+ <div className="min-w-0">
260
+ <h1 className="flex min-w-0 items-center gap-1 font-medium text-black/90">
261
+ {participantTitle}
262
+ <CaretRightIcon className="size-4 shrink-0" weight="bold" />
263
+ </h1>
264
+ {dmAgentEnabled && (
265
+ <div className="mt-0.5 flex items-center gap-1 text-[10px] leading-3 text-black/55">
266
+ <SparkleIcon className="size-3 shrink-0 text-black/55" />
267
+ <span className="truncate">
268
+ {DM_AGENT_HEADER_HELPER_TEXT}
269
+ </span>
270
+ </div>
246
271
  )}
247
- <CaretRightIcon className="size-4 shrink-0" weight="bold" />
248
- </button>
249
- ) : (
250
- <h1 className="flex min-w-0 items-center gap-1 font-medium text-black/90">
251
- <span className="min-w-0 truncate">{participantName}</span>
252
- {headerTitleBadges && (
253
- <span className="shrink-0">{headerTitleBadges}</span>
272
+ </div>
273
+ </button>
274
+ ) : (
275
+ <>
276
+ {/* Avatar */}
277
+ <Avatar
278
+ id={participant?.user?.id || channel.id || 'unknown'}
279
+ name={participantName}
280
+ image={participantImage}
281
+ starred={showStarButton && isStarred}
282
+ dmAgentEnabled={dmAgentEnabled}
283
+ size={48}
284
+ />
285
+ <div className="min-w-0">
286
+ <h1 className="flex min-w-0 items-center gap-1 font-medium text-black/90">
287
+ {participantTitle}
288
+ </h1>
289
+ {dmAgentEnabled && (
290
+ <div className="mt-0.5 flex items-center gap-1 text-[10px] leading-3 text-black/55">
291
+ <SparkleIcon className="size-3 shrink-0 text-black/55" />
292
+ <span className="truncate">
293
+ {DM_AGENT_HEADER_HELPER_TEXT}
294
+ </span>
295
+ </div>
254
296
  )}
255
- </h1>
256
- )}
257
- {dmAgentEnabled && (
258
- <div className="mt-0.5 flex items-center gap-1 text-[10px] leading-3 text-black/55">
259
- <SparkleIcon className="size-3 shrink-0 text-black/55" />
260
- <span className="truncate">{DM_AGENT_HEADER_HELPER_TEXT}</span>
261
297
  </div>
262
- )}
263
- </div>
298
+ </>
299
+ )}
264
300
  </div>
265
301
  <div className="flex items-center gap-2">
266
302
  {showStarButton && (