@linktr.ee/messaging-react 1.6.0 → 1.6.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.
Files changed (64) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/assets/index.css +1 -1
  3. package/dist/components/ActionButton/ActionButton.test.d.ts +2 -0
  4. package/dist/components/ActionButton/ActionButton.test.d.ts.map +1 -0
  5. package/dist/components/ActionButton/index.d.ts +7 -0
  6. package/dist/components/ActionButton/index.d.ts.map +1 -0
  7. package/dist/components/Avatar/avatarColors.d.ts +8 -0
  8. package/dist/components/Avatar/avatarColors.d.ts.map +1 -0
  9. package/dist/components/Avatar/index.d.ts +13 -0
  10. package/dist/components/Avatar/index.d.ts.map +1 -0
  11. package/dist/components/ChannelList/CustomChannelPreview.d.ts +13 -0
  12. package/dist/components/ChannelList/CustomChannelPreview.d.ts.map +1 -0
  13. package/dist/components/ChannelList/index.d.ts +7 -0
  14. package/dist/components/ChannelList/index.d.ts.map +1 -0
  15. package/dist/components/ChannelView.d.ts +7 -0
  16. package/dist/components/ChannelView.d.ts.map +1 -0
  17. package/dist/components/CloseButton/index.d.ts +6 -0
  18. package/dist/components/CloseButton/index.d.ts.map +1 -0
  19. package/dist/components/FaqList/FaqListItem.d.ts +9 -0
  20. package/dist/components/FaqList/FaqListItem.d.ts.map +1 -0
  21. package/dist/components/FaqList/index.d.ts +19 -0
  22. package/dist/components/FaqList/index.d.ts.map +1 -0
  23. package/dist/components/IconButton/index.d.ts +9 -0
  24. package/dist/components/IconButton/index.d.ts.map +1 -0
  25. package/dist/components/Loading/index.d.ts +7 -0
  26. package/dist/components/Loading/index.d.ts.map +1 -0
  27. package/dist/components/MessagingShell/EmptyState.d.ts +10 -0
  28. package/dist/components/MessagingShell/EmptyState.d.ts.map +1 -0
  29. package/dist/components/MessagingShell/ErrorState.d.ts +9 -0
  30. package/dist/components/MessagingShell/ErrorState.d.ts.map +1 -0
  31. package/dist/components/MessagingShell/LoadingState.d.ts +5 -0
  32. package/dist/components/MessagingShell/LoadingState.d.ts.map +1 -0
  33. package/dist/components/MessagingShell/index.d.ts +7 -0
  34. package/dist/components/MessagingShell/index.d.ts.map +1 -0
  35. package/dist/components/ParticipantPicker/ParticipantItem.d.ts +13 -0
  36. package/dist/components/ParticipantPicker/ParticipantItem.d.ts.map +1 -0
  37. package/dist/components/ParticipantPicker/ParticipantPicker.d.ts +7 -0
  38. package/dist/components/ParticipantPicker/ParticipantPicker.d.ts.map +1 -0
  39. package/dist/components/ParticipantPicker/index.d.ts +7 -0
  40. package/dist/components/ParticipantPicker/index.d.ts.map +1 -0
  41. package/dist/components/SearchInput/SearchInput.test.d.ts +2 -0
  42. package/dist/components/SearchInput/SearchInput.test.d.ts.map +1 -0
  43. package/dist/components/SearchInput/index.d.ts +8 -0
  44. package/dist/components/SearchInput/index.d.ts.map +1 -0
  45. package/dist/hooks/useMessaging.d.ts +6 -0
  46. package/dist/hooks/useMessaging.d.ts.map +1 -0
  47. package/dist/hooks/useParticipants.d.ts +19 -0
  48. package/dist/hooks/useParticipants.d.ts.map +1 -0
  49. package/dist/index.d.ts +16 -253
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +418 -418
  52. package/dist/index.js.map +1 -1
  53. package/dist/providers/MessagingProvider.d.ts +27 -0
  54. package/dist/providers/MessagingProvider.d.ts.map +1 -0
  55. package/dist/stories/mocks.d.ts +29 -0
  56. package/dist/stories/mocks.d.ts.map +1 -0
  57. package/dist/test/setup.d.ts +2 -0
  58. package/dist/test/setup.d.ts.map +1 -0
  59. package/dist/test/utils.d.ts +12 -0
  60. package/dist/test/utils.d.ts.map +1 -0
  61. package/dist/types.d.ts +134 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/package.json +1 -1
  64. package/src/components/ChannelList/CustomChannelPreview.tsx +6 -6
@@ -0,0 +1,27 @@
1
+ import { StreamChatService } from '@linktr.ee/messaging-core';
2
+ import React from 'react';
3
+ import type { StreamChat } from 'stream-chat';
4
+ import type { MessagingProviderProps, MessagingCapabilities, MessagingCustomization } from '../types';
5
+ /**
6
+ * Context value for messaging state and service
7
+ */
8
+ export interface MessagingContextValue {
9
+ service: StreamChatService | null;
10
+ client: StreamChat | null;
11
+ isConnected: boolean;
12
+ isLoading: boolean;
13
+ error: string | null;
14
+ capabilities: MessagingCapabilities;
15
+ customization: MessagingCustomization;
16
+ refreshConnection: () => Promise<void>;
17
+ debug: boolean;
18
+ }
19
+ /**
20
+ * Hook to access messaging context
21
+ */
22
+ export declare const useMessagingContext: () => MessagingContextValue;
23
+ /**
24
+ * Provider component that wraps messaging-core with React state management
25
+ */
26
+ export declare const MessagingProvider: React.FC<MessagingProviderProps>;
27
+ //# sourceMappingURL=MessagingProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessagingProvider.d.ts","sourceRoot":"","sources":["../../src/providers/MessagingProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAON,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG7C,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,UAAU,CAAA;AAEjB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACjC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,YAAY,EAAE,qBAAqB,CAAA;IACnC,aAAa,EAAE,sBAAsB,CAAA;IACrC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,KAAK,EAAE,OAAO,CAAA;CACf;AAcD;;GAEG;AACH,eAAO,MAAM,mBAAmB,6BAAqC,CAAA;AAErE;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAkT9D,CAAA"}
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ export declare const MockChatProvider: React.FC<{
3
+ children: React.ReactNode;
4
+ }>;
5
+ export declare const MockChatProviderWithChannels: React.FC<{
6
+ children: React.ReactNode;
7
+ channelCount?: number;
8
+ }>;
9
+ export declare const mockParticipants: {
10
+ id: string;
11
+ name: string;
12
+ email: string;
13
+ image: string;
14
+ }[];
15
+ export declare const mockParticipantSource: {
16
+ loadParticipants: (options?: {
17
+ search?: string;
18
+ limit?: number;
19
+ }) => Promise<{
20
+ participants: {
21
+ id: string;
22
+ name: string;
23
+ email: string;
24
+ image: string;
25
+ }[];
26
+ hasMore: boolean;
27
+ }>;
28
+ };
29
+ //# sourceMappingURL=mocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/stories/mocks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AA+BzB,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAYpE,CAAA;AAGD,eAAO,MAAM,4BAA4B,EAAE,KAAK,CAAC,EAAE,CAAC;IAClD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAwDA,CAAA;AAGD,eAAO,MAAM,gBAAgB;;;;;GA+B5B,CAAA;AAGD,eAAO,MAAM,qBAAqB;iCACG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;CAYvE,CAAA"}
@@ -0,0 +1,2 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { RenderOptions, RenderResult } from '@testing-library/react';
2
+ import { ReactElement } from 'react';
3
+ /**
4
+ * Custom render function that wraps components with common providers
5
+ */
6
+ export declare function renderWithProviders(ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>): RenderResult;
7
+ /**
8
+ * Re-export everything from React Testing Library
9
+ */
10
+ export * from '@testing-library/react';
11
+ export { default as userEvent } from '@testing-library/user-event';
12
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/test/utils.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAa,MAAM,OAAO,CAAA;AAE/C;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,YAAY,EAChB,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GACvC,YAAY,CAMd;AAED;;GAEG;AACH,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6BAA6B,CAAA"}
@@ -0,0 +1,134 @@
1
+ import type { MessagingUser, StreamChatServiceConfig } from '@linktr.ee/messaging-core';
2
+ import type { Channel } from 'stream-chat';
3
+ /**
4
+ * Generic participant interface for different host environments
5
+ */
6
+ export interface Participant {
7
+ id: string;
8
+ name: string;
9
+ email?: string;
10
+ image?: string;
11
+ username?: string;
12
+ phone?: string;
13
+ metadata?: Record<string, unknown>;
14
+ }
15
+ /**
16
+ * Source for loading participants (followers, team members, etc.)
17
+ */
18
+ export interface ParticipantSource {
19
+ loadParticipants: (options?: {
20
+ search?: string;
21
+ limit?: number;
22
+ cursor?: string;
23
+ }) => Promise<{
24
+ participants: Participant[];
25
+ hasMore: boolean;
26
+ nextCursor?: string;
27
+ }>;
28
+ totalCount?: number;
29
+ loading?: boolean;
30
+ }
31
+ /**
32
+ * Messaging capabilities configuration
33
+ */
34
+ export interface MessagingCapabilities {
35
+ showStartConversation?: boolean;
36
+ participantSource?: ParticipantSource;
37
+ participantLabel?: string;
38
+ }
39
+ /**
40
+ * Customization options
41
+ */
42
+ export interface MessagingCustomization {
43
+ theme?: 'light' | 'dark' | 'auto';
44
+ accentColor?: string;
45
+ showParticipantStatus?: boolean;
46
+ }
47
+ /**
48
+ * Main MessagingShell component props
49
+ */
50
+ export interface MessagingShellProps {
51
+ capabilities?: MessagingCapabilities;
52
+ customization?: MessagingCustomization;
53
+ className?: string;
54
+ renderMessageInputActions?: (channel: Channel) => React.ReactNode;
55
+ onChannelSelect?: (channel: Channel) => void;
56
+ onParticipantSelect?: (participant: Participant) => void;
57
+ /**
58
+ * Auto-select a conversation with this participant on mount.
59
+ * Useful for deep-linking to a specific conversation (e.g., /messages/[accountUuid])
60
+ *
61
+ * If a channel with this participant exists, it will be auto-selected.
62
+ * If no channel exists, you can provide initialParticipantData to automatically
63
+ * create the channel using the existing ChannelCreator.
64
+ */
65
+ initialParticipantFilter?: string;
66
+ /**
67
+ * Participant data for auto-creating a channel when initialParticipantFilter
68
+ * is provided but no channel exists. If this is provided, MessagingShell will
69
+ * automatically call service.startChannelWithParticipant() to create the channel.
70
+ *
71
+ * This reuses the existing ChannelCreator from StreamChatServiceConfig.
72
+ */
73
+ initialParticipantData?: Participant;
74
+ /**
75
+ * Custom empty state component to render when a channel has no messages.
76
+ * Useful for showing FAQs or other contextual information in empty channels.
77
+ */
78
+ CustomChannelEmptyState?: React.ComponentType;
79
+ /**
80
+ * Controls whether the channel list is shown. When false, the channel list
81
+ * is immediately hidden. Useful for direct conversation mode where you want
82
+ * to show only the channel view without the list.
83
+ */
84
+ showChannelList?: boolean;
85
+ }
86
+ /**
87
+ * ChannelList component props
88
+ */
89
+ export interface ChannelListProps {
90
+ onChannelSelect: (channel: Channel) => void;
91
+ selectedChannel?: Channel;
92
+ showStartConversation?: boolean;
93
+ onStartConversation?: () => void;
94
+ participantLabel?: string;
95
+ className?: string;
96
+ }
97
+ /**
98
+ * ChannelView component props
99
+ */
100
+ export interface ChannelViewProps {
101
+ channel: Channel;
102
+ onBack?: () => void;
103
+ showBackButton?: boolean;
104
+ renderMessageInputActions?: (channel: Channel) => React.ReactNode;
105
+ onLeaveConversation?: (channel: Channel) => void;
106
+ onBlockParticipant?: (participantId?: string) => void;
107
+ className?: string;
108
+ CustomChannelEmptyState?: React.ComponentType;
109
+ }
110
+ /**
111
+ * ParticipantPicker component props
112
+ */
113
+ export interface ParticipantPickerProps {
114
+ participantSource: ParticipantSource;
115
+ onSelectParticipant: (participant: Participant) => void;
116
+ onClose: () => void;
117
+ existingParticipantIds?: Set<string>;
118
+ participantLabel?: string;
119
+ searchPlaceholder?: string;
120
+ className?: string;
121
+ }
122
+ /**
123
+ * MessagingProvider component props
124
+ */
125
+ export interface MessagingProviderProps {
126
+ children: React.ReactNode;
127
+ user: MessagingUser | null;
128
+ serviceConfig: Omit<StreamChatServiceConfig, 'apiKey'>;
129
+ apiKey: string;
130
+ capabilities?: MessagingCapabilities;
131
+ customization?: MessagingCustomization;
132
+ debug?: boolean;
133
+ }
134
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linktr.ee/messaging-react",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "React messaging components built on messaging-core for web applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,7 @@ const CustomChannelPreview: React.FC<
14
14
  onChannelSelect: (channel: Channel) => void
15
15
  debug?: boolean
16
16
  }
17
- > = ({ channel, selectedChannel, onChannelSelect, debug = false }) => {
17
+ > = ({ channel, selectedChannel, onChannelSelect, debug = false, unread }) => {
18
18
  const isSelected = selectedChannel?.id === channel?.id
19
19
 
20
20
  const handleClick = () => {
@@ -42,15 +42,15 @@ const CustomChannelPreview: React.FC<
42
42
  })
43
43
  : ''
44
44
 
45
- // Get unread count from channel state
46
- const unread = channel?.state?.unreadCount || 0
45
+ // Use the unread prop passed by Stream Chat (reactive and updates automatically)
46
+ const unreadCount = unread ?? 0
47
47
 
48
48
  if (debug) {
49
49
  console.log('📺 [ChannelList] 📋 CHANNEL PREVIEW RENDER', {
50
50
  channelId: channel?.id,
51
51
  isSelected,
52
52
  participantName,
53
- unread,
53
+ unreadCount,
54
54
  hasTimestamp: !!lastMessageTime,
55
55
  })
56
56
  }
@@ -100,9 +100,9 @@ const CustomChannelPreview: React.FC<
100
100
  <p className="text-xs text-stone mr-2 flex-1 line-clamp-2">
101
101
  {lastMessageText}
102
102
  </p>
103
- {unread > 0 && (
103
+ {unreadCount > 0 && (
104
104
  <span className="bg-primary text-white text-xs px-2 py-0.5 rounded-full min-w-[20px] text-center flex-shrink-0">
105
- {unread > 99 ? '99+' : unread}
105
+ {unreadCount > 99 ? '99+' : unreadCount}
106
106
  </span>
107
107
  )}
108
108
  </div>