@cossistant/next 0.0.20 → 0.0.22

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/README.md CHANGED
@@ -9,11 +9,13 @@ Build fully featured customer support experiences in your NextJS app with the of
9
9
  Pick the command that matches your package manager:
10
10
 
11
11
  ```bash
12
- bun add @cossistant/next
12
+ bun add @cossistant/next @cossistant/react
13
13
  # or
14
- npm install @cossistant/next
14
+ npm install @cossistant/next @cossistant/react
15
15
  # or
16
- yarn add @cossistant/next
16
+ pnpm add @cossistant/next @cossistant/react
17
+ # or
18
+ yarn add @cossistant/next @cossistant/react
17
19
  ```
18
20
 
19
21
  ## Need help or spot a typo?
package/hooks/index.d.ts CHANGED
@@ -18,10 +18,13 @@ import { UseConversationsOptions, UseConversationsResult, useConversations } fro
18
18
  import { CreateConversationVariables, UseCreateConversationOptions, UseCreateConversationResult, useCreateConversation } from "../use-create-conversation.js";
19
19
  import { UseHomePageOptions, UseHomePageReturn, useHomePage } from "../use-home-page.js";
20
20
  import { UseMessageComposerOptions, UseMessageComposerReturn, useMessageComposer } from "../use-message-composer.js";
21
+ import { useNewMessageSound } from "../use-new-message-sound.js";
21
22
  import { UseRealtimeSupportOptions, UseRealtimeSupportResult, useRealtimeSupport } from "../use-realtime-support.js";
22
23
  import { UseScrollMaskOptions, UseScrollMaskReturn, useScrollMask } from "../use-scroll-mask.js";
23
24
  import { SendMessageOptions, SendMessageResult, UseSendMessageOptions, UseSendMessageResult, useSendMessage } from "../use-send-message.js";
25
+ import { UseSoundEffectOptions, UseSoundEffectReturn, useSoundEffect } from "../use-sound-effect.js";
26
+ import { useTypingSound } from "../use-typing-sound.js";
24
27
  import { UseVisitorReturn, useVisitor } from "../use-visitor.js";
25
28
  import { WindowVisibilityFocusState, useWindowVisibilityFocus } from "../use-window-visibility-focus.js";
26
29
  import "../index2.js";
27
- export { CONVERSATION_AUTO_SEEN_DELAY_MS, ConversationItem, ConversationLifecycleState, ConversationPreviewAssignedAgent, ConversationPreviewLastMessage, ConversationPreviewTypingParticipant, ConversationPreviewTypingState, ConversationTimelineTypingParticipant, ConversationTypingParticipant, CreateConversationVariables, GroupedMessage, SendMessageOptions, SendMessageResult, TimelineEventItem, TimelineToolItem, UseClientResult, UseComposerRefocusOptions, UseComposerRefocusReturn, UseConversationAutoSeenOptions, UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, UseConversationLifecycleOptions, UseConversationLifecycleReturn, UseConversationOptions, UseConversationPageOptions, UseConversationPageReturn, UseConversationPreviewOptions, UseConversationPreviewReturn, UseConversationResult, UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, UseConversationTimelineOptions, UseConversationTimelineReturn, UseConversationsOptions, UseConversationsResult, UseCreateConversationOptions, UseCreateConversationResult, UseGroupedMessagesOptions, UseGroupedMessagesProps, UseHomePageOptions, UseHomePageReturn, UseMessageComposerOptions, UseMessageComposerReturn, UseMultimodalInputOptions, UseMultimodalInputReturn, UseRealtimeSupportOptions, UseRealtimeSupportResult, UseScrollMaskOptions, UseScrollMaskReturn, UseSendMessageOptions, UseSendMessageResult, UseVisitorReturn, WindowVisibilityFocusState, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationPreview, useConversationSeen, useConversationTimeline, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useRealtimeSupport, useScrollMask, useSendMessage, useVisitor, useWindowVisibilityFocus };
30
+ export { CONVERSATION_AUTO_SEEN_DELAY_MS, ConversationItem, ConversationLifecycleState, ConversationPreviewAssignedAgent, ConversationPreviewLastMessage, ConversationPreviewTypingParticipant, ConversationPreviewTypingState, ConversationTimelineTypingParticipant, ConversationTypingParticipant, CreateConversationVariables, GroupedMessage, SendMessageOptions, SendMessageResult, TimelineEventItem, TimelineToolItem, UseClientResult, UseComposerRefocusOptions, UseComposerRefocusReturn, UseConversationAutoSeenOptions, UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, UseConversationLifecycleOptions, UseConversationLifecycleReturn, UseConversationOptions, UseConversationPageOptions, UseConversationPageReturn, UseConversationPreviewOptions, UseConversationPreviewReturn, UseConversationResult, UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, UseConversationTimelineOptions, UseConversationTimelineReturn, UseConversationsOptions, UseConversationsResult, UseCreateConversationOptions, UseCreateConversationResult, UseGroupedMessagesOptions, UseGroupedMessagesProps, UseHomePageOptions, UseHomePageReturn, UseMessageComposerOptions, UseMessageComposerReturn, UseMultimodalInputOptions, UseMultimodalInputReturn, UseRealtimeSupportOptions, UseRealtimeSupportResult, UseScrollMaskOptions, UseScrollMaskReturn, UseSendMessageOptions, UseSendMessageResult, UseSoundEffectOptions, UseSoundEffectReturn, UseVisitorReturn, WindowVisibilityFocusState, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationPreview, useConversationSeen, useConversationTimeline, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useNewMessageSound, useRealtimeSupport, useScrollMask, useSendMessage, useSoundEffect, useTypingSound, useVisitor, useWindowVisibilityFocus };
package/index.d.ts CHANGED
@@ -18,9 +18,12 @@ import { UseConversationsOptions, UseConversationsResult, useConversations } fro
18
18
  import { CreateConversationVariables, UseCreateConversationOptions, UseCreateConversationResult, useCreateConversation } from "./use-create-conversation.js";
19
19
  import { UseHomePageOptions, UseHomePageReturn, useHomePage } from "./use-home-page.js";
20
20
  import { UseMessageComposerOptions, UseMessageComposerReturn, useMessageComposer } from "./use-message-composer.js";
21
+ import { useNewMessageSound } from "./use-new-message-sound.js";
21
22
  import { UseRealtimeSupportOptions, UseRealtimeSupportResult, useRealtimeSupport } from "./use-realtime-support.js";
22
23
  import { UseScrollMaskOptions, UseScrollMaskReturn, useScrollMask } from "./use-scroll-mask.js";
23
24
  import { SendMessageOptions, SendMessageResult, UseSendMessageOptions, UseSendMessageResult, useSendMessage } from "./use-send-message.js";
25
+ import { UseSoundEffectOptions, UseSoundEffectReturn, useSoundEffect } from "./use-sound-effect.js";
26
+ import { useTypingSound } from "./use-typing-sound.js";
24
27
  import { UseVisitorReturn, useVisitor } from "./use-visitor.js";
25
28
  import { WindowVisibilityFocusState, useWindowVisibilityFocus } from "./use-window-visibility-focus.js";
26
29
  import "./hooks/index.js";
@@ -35,9 +38,7 @@ import { SupportBubble } from "./bubble.js";
35
38
  import { Button } from "./button.js";
36
39
  import { ConversationTimeline, ConversationTimelineContainer, ConversationTimelineEmpty, ConversationTimelineLoading } from "./conversation-timeline.js";
37
40
  import { FileInput, MultimodalInput, SupportInput } from "./multimodal-input.js";
38
- import { Page, PageProps } from "./page.js";
39
- import { PageRegistryProvider, usePageRegistry, useRegisterPage } from "./page-registry.js";
40
- import { Router, RouterProps } from "./router.js";
41
+ import { PageDefinition, Router, RouterProps } from "./router.js";
41
42
  import { TimelineItem, TimelineItemContent, TimelineItemTimestamp } from "./timeline-item.js";
42
43
  import { TimelineItemGroup, TimelineItemGroupAvatar, TimelineItemGroupContent, TimelineItemGroupHeader, TimelineItemGroupReadIndicator, TimelineItemGroupSeenIndicator } from "./timeline-item-group.js";
43
44
  import { SupportWindow } from "./window.js";
@@ -59,4 +60,4 @@ import { shouldDisplayConversation } from "./conversation.js";
59
60
  import { PENDING_CONVERSATION_ID, generateShortPrimaryId } from "./id.js";
60
61
  import { useRenderElement } from "./use-render-element.js";
61
62
  import "./utils/index.js";
62
- export { Avatar, AvatarFallback, AvatarImage, SupportBubble as Bubble, Button, CONVERSATION_AUTO_SEEN_DELAY_MS, SupportConfig as Config, ConversationItem, ConversationLifecycleState, ConversationPreviewAssignedAgent, ConversationPreviewLastMessage, ConversationPreviewTypingParticipant, ConversationPreviewTypingState, ConversationTimeline, ConversationTimelineContainer, ConversationTimelineEmpty, ConversationTimelineLoading, ConversationTimelineTypingParticipant, ConversationTypingParticipant, CossistantContextValue, CossistantProviderProps, CreateConversationVariables, FileInput, GroupedMessage, IdentifySupportVisitor, IdentifySupportVisitorProps, SupportInput as Input, MultimodalInput, PENDING_CONVERSATION_ID, Page, PageProps, PageRegistryProvider, RealtimeAuthConfig, RealtimeContextValue, RealtimeEventHandler, RealtimeEventHandlerEntry, RealtimeEventHandlersMap, RealtimeEventMeta, RealtimeProvider, RealtimeProviderProps, Router, RouterProps, SendMessageOptions, SendMessageResult, Support, SupportConfig, SupportConfigProps, SupportContext, SupportProps, SupportProvider, SupportProviderProps, SupportRealtimeProvider, TimelineEventItem, TimelineItem, TimelineItemContent, TimelineItemGroup, TimelineItemGroupAvatar, TimelineItemGroupContent, TimelineItemGroupHeader, TimelineItemGroupReadIndicator, TimelineItemGroupSeenIndicator, TimelineItemTimestamp, TimelineToolItem, TypingIndicator, TypingIndicatorProps, TypingParticipant, TypingParticipantType, UseClientResult, UseComposerRefocusOptions, UseComposerRefocusReturn, UseConversationAutoSeenOptions, UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, UseConversationLifecycleOptions, UseConversationLifecycleReturn, UseConversationOptions, UseConversationPageOptions, UseConversationPageReturn, UseConversationPreviewOptions, UseConversationPreviewReturn, UseConversationResult, UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, UseConversationTimelineOptions, UseConversationTimelineReturn, UseConversationsOptions, UseConversationsResult, UseCreateConversationOptions, UseCreateConversationResult, UseGroupedMessagesOptions, UseGroupedMessagesProps, UseHomePageOptions, UseHomePageReturn, UseMessageComposerOptions, UseMessageComposerReturn, UseMultimodalInputOptions, UseMultimodalInputReturn, UseRealtimeSupportOptions, UseRealtimeSupportResult, UseScrollMaskOptions, UseScrollMaskReturn, UseSendMessageOptions, UseSendMessageResult, UseSupportValue, UseVisitorReturn, WebSocketContextValue, WebSocketProvider, SupportWindow as Window, WindowVisibilityFocusState, applyConversationSeenEvent, applyConversationTypingEvent, clearTypingFromTimelineItem, clearTypingState, generateShortPrimaryId, hydrateConversationSeen, setTypingState, shouldDisplayConversation, upsertConversationSeen, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationPreview, useConversationSeen, useConversationTimeline, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, usePageRegistry, useRealtime, useRealtimeConnection, useRealtimeSupport, useRegisterPage, useRenderElement, useScrollMask, useSendMessage, useSupport, useSupportConfig, useSupportStore, useVisitor, useWebSocket, useWindowVisibilityFocus };
63
+ export { Avatar, AvatarFallback, AvatarImage, SupportBubble as Bubble, Button, CONVERSATION_AUTO_SEEN_DELAY_MS, SupportConfig as Config, ConversationItem, ConversationLifecycleState, ConversationPreviewAssignedAgent, ConversationPreviewLastMessage, ConversationPreviewTypingParticipant, ConversationPreviewTypingState, ConversationTimeline, ConversationTimelineContainer, ConversationTimelineEmpty, ConversationTimelineLoading, ConversationTimelineTypingParticipant, ConversationTypingParticipant, CossistantContextValue, CossistantProviderProps, CreateConversationVariables, FileInput, GroupedMessage, IdentifySupportVisitor, IdentifySupportVisitorProps, SupportInput as Input, MultimodalInput, PENDING_CONVERSATION_ID, PageDefinition, RealtimeAuthConfig, RealtimeContextValue, RealtimeEventHandler, RealtimeEventHandlerEntry, RealtimeEventHandlersMap, RealtimeEventMeta, RealtimeProvider, RealtimeProviderProps, Router, RouterProps, SendMessageOptions, SendMessageResult, Support, SupportConfig, SupportConfigProps, SupportContext, SupportProps, SupportProvider, SupportProviderProps, SupportRealtimeProvider, TimelineEventItem, TimelineItem, TimelineItemContent, TimelineItemGroup, TimelineItemGroupAvatar, TimelineItemGroupContent, TimelineItemGroupHeader, TimelineItemGroupReadIndicator, TimelineItemGroupSeenIndicator, TimelineItemTimestamp, TimelineToolItem, TypingIndicator, TypingIndicatorProps, TypingParticipant, TypingParticipantType, UseClientResult, UseComposerRefocusOptions, UseComposerRefocusReturn, UseConversationAutoSeenOptions, UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, UseConversationLifecycleOptions, UseConversationLifecycleReturn, UseConversationOptions, UseConversationPageOptions, UseConversationPageReturn, UseConversationPreviewOptions, UseConversationPreviewReturn, UseConversationResult, UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, UseConversationTimelineOptions, UseConversationTimelineReturn, UseConversationsOptions, UseConversationsResult, UseCreateConversationOptions, UseCreateConversationResult, UseGroupedMessagesOptions, UseGroupedMessagesProps, UseHomePageOptions, UseHomePageReturn, UseMessageComposerOptions, UseMessageComposerReturn, UseMultimodalInputOptions, UseMultimodalInputReturn, UseRealtimeSupportOptions, UseRealtimeSupportResult, UseScrollMaskOptions, UseScrollMaskReturn, UseSendMessageOptions, UseSendMessageResult, UseSoundEffectOptions, UseSoundEffectReturn, UseSupportValue, UseVisitorReturn, WebSocketContextValue, WebSocketProvider, SupportWindow as Window, WindowVisibilityFocusState, applyConversationSeenEvent, applyConversationTypingEvent, clearTypingFromTimelineItem, clearTypingState, generateShortPrimaryId, hydrateConversationSeen, setTypingState, shouldDisplayConversation, upsertConversationSeen, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationPreview, useConversationSeen, useConversationTimeline, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useNewMessageSound, useRealtime, useRealtimeConnection, useRealtimeSupport, useRenderElement, useScrollMask, useSendMessage, useSoundEffect, useSupport, useSupportConfig, useSupportStore, useTypingSound, useVisitor, useWebSocket, useWindowVisibilityFocus };
package/index2.d.ts CHANGED
@@ -18,8 +18,11 @@ import { UseConversationsOptions, UseConversationsResult, useConversations } fro
18
18
  import { CreateConversationVariables, UseCreateConversationOptions, UseCreateConversationResult, useCreateConversation } from "./use-create-conversation.js";
19
19
  import { UseHomePageOptions, UseHomePageReturn, useHomePage } from "./use-home-page.js";
20
20
  import { UseMessageComposerOptions, UseMessageComposerReturn, useMessageComposer } from "./use-message-composer.js";
21
+ import { useNewMessageSound } from "./use-new-message-sound.js";
21
22
  import { UseRealtimeSupportOptions, UseRealtimeSupportResult, useRealtimeSupport } from "./use-realtime-support.js";
22
23
  import { UseScrollMaskOptions, UseScrollMaskReturn, useScrollMask } from "./use-scroll-mask.js";
23
24
  import { SendMessageOptions, SendMessageResult, UseSendMessageOptions, UseSendMessageResult, useSendMessage } from "./use-send-message.js";
25
+ import { UseSoundEffectOptions, UseSoundEffectReturn, useSoundEffect } from "./use-sound-effect.js";
26
+ import { useTypingSound } from "./use-typing-sound.js";
24
27
  import { UseVisitorReturn, useVisitor } from "./use-visitor.js";
25
28
  import { WindowVisibilityFocusState, useWindowVisibilityFocus } from "./use-window-visibility-focus.js";
package/index2.parts.d.ts CHANGED
@@ -8,9 +8,7 @@ import { SupportBubble } from "./bubble.js";
8
8
  import { Button } from "./button.js";
9
9
  import { ConversationTimeline, ConversationTimelineContainer, ConversationTimelineEmpty, ConversationTimelineLoading } from "./conversation-timeline.js";
10
10
  import { FileInput, MultimodalInput, SupportInput } from "./multimodal-input.js";
11
- import { Page, PageProps } from "./page.js";
12
- import { PageRegistryProvider, usePageRegistry, useRegisterPage } from "./page-registry.js";
13
- import { Router, RouterProps } from "./router.js";
11
+ import { PageDefinition, Router, RouterProps } from "./router.js";
14
12
  import { TimelineItem, TimelineItemContent, TimelineItemTimestamp } from "./timeline-item.js";
15
13
  import { TimelineItemGroup, TimelineItemGroupAvatar, TimelineItemGroupContent, TimelineItemGroupHeader, TimelineItemGroupReadIndicator, TimelineItemGroupSeenIndicator } from "./timeline-item-group.js";
16
14
  import { SupportWindow } from "./window.js";
package/index4.d.ts CHANGED
@@ -7,9 +7,7 @@ import { SupportBubble } from "./bubble.js";
7
7
  import { Button } from "./button.js";
8
8
  import { ConversationTimeline, ConversationTimelineContainer, ConversationTimelineEmpty, ConversationTimelineLoading } from "./conversation-timeline.js";
9
9
  import { FileInput, MultimodalInput, SupportInput } from "./multimodal-input.js";
10
- import { Page, PageProps } from "./page.js";
11
- import { PageRegistryProvider, usePageRegistry, useRegisterPage } from "./page-registry.js";
12
- import { Router, RouterProps } from "./router.js";
10
+ import { PageDefinition, Router, RouterProps } from "./router.js";
13
11
  import { TimelineItem, TimelineItemContent, TimelineItemTimestamp } from "./timeline-item.js";
14
12
  import { TimelineItemGroup, TimelineItemGroupAvatar, TimelineItemGroupContent, TimelineItemGroupHeader, TimelineItemGroupReadIndicator, TimelineItemGroupSeenIndicator } from "./timeline-item-group.js";
15
13
  import { SupportWindow } from "./window.js";
package/index7.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { SupportLocale, SupportTextContentOverrides } from "./keys.js";
2
- import { Page, PageProps } from "./page.js";
3
- import "./index4.js";
2
+ import { CustomPage } from "./router2.js";
4
3
  import "./index6.js";
5
4
  import { BubbleSlotProps, ContainerSlotProps, RouterSlotProps } from "./types.js";
6
5
  import "./button2.js";
@@ -30,6 +29,7 @@ type SupportProps<Locale extends string = SupportLocale> = {
30
29
  bubble?: string;
31
30
  container?: string;
32
31
  };
32
+ customPages?: CustomPage[];
33
33
  children?: React.ReactNode;
34
34
  };
35
35
  /**
@@ -40,10 +40,14 @@ type SupportProps<Locale extends string = SupportLocale> = {
40
40
  * <Support />
41
41
  *
42
42
  * @example
43
- * // With customization
44
- * <Support theme="dark" classNames={{ bubble: "bg-purple-600" }}>
45
- * <Page name="FAQ" component={FAQPage} />
46
- * </Support>
43
+ * // With customization and custom pages
44
+ * <Support
45
+ * theme="dark"
46
+ * classNames={{ bubble: "bg-purple-600" }}
47
+ * customPages={[
48
+ * { name: "FAQ", component: FAQPage }
49
+ * ]}
50
+ * />
47
51
  */
48
52
  declare function Support<Locale extends string = SupportLocale>({
49
53
  className,
@@ -58,6 +62,7 @@ declare function Support<Locale extends string = SupportLocale>({
58
62
  theme,
59
63
  slots,
60
64
  classNames,
65
+ customPages,
61
66
  children
62
67
  }: SupportProps<Locale>): ReactElement | null;
63
68
  //#endregion
package/index7.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index7.d.ts","names":[],"sources":["../../react/src/support/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;;KAmBY,qCAAqC;;;;;;EAArC,eAAY,CAAA,EAOL,cAPK,EAAA;EAAyB,WAAA,CAAA,EAAA,OAAA;EAO9B,MAAA,CAAA,EAET,MAFS;EAET,OAAA,CAAA,EACC,2BADD,CAC6B,MAD7B,CAAA;EAC6B,KAAA,CAAA,EAAA,OAAA,GAAA,MAAA;EAA5B,KAAA,CAAA,EAAA;IAOoB,MAAA,CAAA,EAApB,KAAA,CAAM,aAAc,CAAA,eAAA,CAAA;IAAd,SAAA,CAAA,EACH,KAAA,CAAM,aADH,CACiB,kBADjB,CAAA;IACiB,MAAA,CAAA,EACvB,KAAA,CAAM,aADiB,CACH,eADG,CAAA;EAApB,CAAA;EACiB,UAAA,CAAA,EAAA;IAAd,IAAA,CAAA,EAAA,MAAA;IAWC,MAAA,CAAA,EAAA,MAAA;IAAS,SAAA,CAAA,EAAA,MAAA;EAgBX,CAAA;EAAgC,QAAA,CAAA,EAhBpC,KAAA,CAAM,SAgB8B;CAC/C;;;;;;;;;;;;;;AAaE,iBAda,OAcb,CAAA,eAAA,MAAA,GAd6C,aAc7C,CAAA,CAAA;EAAA,SAAA;EAAA,QAAA;EAAA,KAAA;EAAA,WAAA;EAAA,YAAA;EAAA,eAAA;EAAA,WAAA;EAAA,MAAA;EAAA,OAAA;EAAA,KAAA;EAAA,KAAA;EAAA,UAAA;EAAA;AAAA,CAAA,EAAA,YAAA,CAAa,MAAb,CAAA,CAAA,EAAuB,YAAvB,GAAA,IAAA"}
1
+ {"version":3,"file":"index7.d.ts","names":[],"sources":["../../react/src/support/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;KAmBY,qCAAqC;;;;EAArC,WAAA,CAAA,EAAA,OAAY,GAAA,UAAA;EAAyB,YAAA,CAAA,EAAA,MAAA,EAAA;EAO9B,eAAA,CAAA,EAAA,cAAA,EAAA;EAET,WAAA,CAAA,EAAA,OAAA;EAC6B,MAAA,CAAA,EAD7B,MAC6B;EAA5B,OAAA,CAAA,EAAA,2BAAA,CAA4B,MAA5B,CAAA;EAOoB,KAAA,CAAA,EAAA,OAAA,GAAA,MAAA;EAApB,KAAM,CAAA,EAAA;IACiB,MAAA,CAAA,EADvB,KAAA,CAAM,aACiB,CADH,eACG,CAAA;IAAd,SAAA,CAAA,EAAN,KAAA,CAAM,aAAA,CAAc,kBAAd,CAAA;IACW,MAAA,CAAA,EAApB,KAAA,CAAM,aAAc,CAAA,eAAA,CAAA;EAApB,CAAA;EAWI,UAAA,CAAA,EAAA;IAEG,IAAA,CAAA,EAAA,MAAA;IAAS,MAAA,CAAA,EAAA,MAAA;IAoBX,SAAO,CAAA,EAAA,MAAA;EAAyB,CAAA;EAC/C,WAAA,CAAA,EAvBc,UAuBd,EAAA;EACA,QAAA,CAAA,EAtBW,KAAA,CAAM,SAsBjB;CACA;;;;;;;;;;;;;;;;;;iBAHe,gCAAgC;;;;;;;;;;;;;;;GAe7C,aAAa,UAAU"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cossistant/next",
3
3
  "type": "module",
4
- "version": "0.0.20",
4
+ "version": "0.0.22",
5
5
  "private": false,
6
6
  "author": "Cossistant team",
7
7
  "description": "Next.js-ready SDK for building AI-powered support/chat widgets. Hooks + primitives, WS-driven, TypeScript-first. Next.js-ready, Tailwind optional.",
@@ -91,13 +91,13 @@
91
91
  "access": "public"
92
92
  },
93
93
  "dependencies": {
94
- "@cossistant/react": "0.0.20",
94
+ "@cossistant/react": "0.0.22",
95
95
  "tailwindcss": "^4.1.13"
96
96
  },
97
97
  "peerDependencies": {
98
98
  "react": ">=18 <20",
99
99
  "react-dom": ">=18 <20",
100
- "next": ">=13.5.2 || ^14.0.0 || ^15.0.0"
100
+ "next": ">=13.5.2 || ^14.0.0 || ^15.0.0 || ^16.0.0"
101
101
  },
102
102
  "peerDependenciesMeta": {
103
103
  "@types/react": {
@@ -7,11 +7,9 @@ import { SupportBubble } from "../bubble.js";
7
7
  import { Button } from "../button.js";
8
8
  import { ConversationTimeline, ConversationTimelineContainer, ConversationTimelineEmpty, ConversationTimelineLoading } from "../conversation-timeline.js";
9
9
  import { FileInput, MultimodalInput, SupportInput } from "../multimodal-input.js";
10
- import { Page, PageProps } from "../page.js";
11
- import { PageRegistryProvider, usePageRegistry, useRegisterPage } from "../page-registry.js";
12
- import { Router, RouterProps } from "../router.js";
10
+ import { PageDefinition, Router, RouterProps } from "../router.js";
13
11
  import { TimelineItem, TimelineItemContent, TimelineItemTimestamp } from "../timeline-item.js";
14
12
  import { TimelineItemGroup, TimelineItemGroupAvatar, TimelineItemGroupContent, TimelineItemGroupHeader, TimelineItemGroupReadIndicator, TimelineItemGroupSeenIndicator } from "../timeline-item-group.js";
15
13
  import { SupportWindow } from "../window.js";
16
14
  import "../index4.js";
17
- export { Avatar, AvatarFallback, AvatarImage, SupportBubble as Bubble, Button, SupportConfig as Config, ConversationTimeline, ConversationTimelineContainer, ConversationTimelineEmpty, ConversationTimelineLoading, FileInput, SupportInput as Input, MultimodalInput, Page, PageProps, PageRegistryProvider, Router, RouterProps, TimelineItem, TimelineItemContent, TimelineItemGroup, TimelineItemGroupAvatar, TimelineItemGroupContent, TimelineItemGroupHeader, TimelineItemGroupReadIndicator, TimelineItemGroupSeenIndicator, TimelineItemTimestamp, TypingIndicator, TypingIndicatorProps, TypingParticipant, TypingParticipantType, SupportWindow as Window, usePageRegistry, useRegisterPage };
15
+ export { Avatar, AvatarFallback, AvatarImage, SupportBubble as Bubble, Button, SupportConfig as Config, ConversationTimeline, ConversationTimelineContainer, ConversationTimelineEmpty, ConversationTimelineLoading, FileInput, SupportInput as Input, MultimodalInput, PageDefinition, Router, RouterProps, TimelineItem, TimelineItemContent, TimelineItemGroup, TimelineItemGroupAvatar, TimelineItemGroupContent, TimelineItemGroupHeader, TimelineItemGroupReadIndicator, TimelineItemGroupSeenIndicator, TimelineItemTimestamp, TypingIndicator, TypingIndicatorProps, TypingParticipant, TypingParticipantType, SupportWindow as Window };
package/router.d.ts CHANGED
@@ -1,35 +1,33 @@
1
1
  import React from "react";
2
2
 
3
3
  //#region ../react/src/primitives/router.d.ts
4
+ type PageDefinition<K extends keyof RouteRegistry = keyof RouteRegistry> = {
5
+ name: K;
6
+ component: React.ComponentType<{
7
+ params?: RouteRegistry[K];
8
+ }>;
9
+ };
4
10
  type RouterProps = {
5
- /**
6
- * Current page name to render
7
- */
8
- page: string;
9
- /**
10
- * Params to pass to the page component
11
- */
12
- params?: unknown;
13
- /**
14
- * Fallback component when page is not found
15
- */
11
+ page: keyof RouteRegistry;
12
+ params?: RouteRegistry[keyof RouteRegistry];
13
+ pages: PageDefinition[];
16
14
  fallback?: React.ComponentType<{
17
15
  params?: unknown;
18
16
  }>;
19
- /**
20
- * Children (Page components for registration)
21
- */
22
- children?: React.ReactNode;
23
17
  };
24
18
  /**
25
- * Router that renders registered pages based on current page name.
19
+ * Type-safe router that renders pages based on current page name.
20
+ * Pages are matched synchronously without effects or registries.
26
21
  *
27
22
  * @example
28
- * <Router page={currentPage} params={params} fallback={NotFoundPage}>
29
- * <Page name="HOME" component={HomePage} />
30
- * </Router>
23
+ * const pages = [
24
+ * { name: "HOME", component: HomePage },
25
+ * { name: "SETTINGS", component: SettingsPage }
26
+ * ];
27
+ *
28
+ * <Router page={currentPage} params={params} pages={pages} fallback={NotFoundPage} />
31
29
  */
32
30
  declare const Router: React.FC<RouterProps>;
33
31
  //#endregion
34
- export { Router, RouterProps };
32
+ export { PageDefinition, Router, RouterProps };
35
33
  //# sourceMappingURL=router.d.ts.map
package/router.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","names":[],"sources":["../../react/src/primitives/router.tsx"],"sourcesContent":[],"mappings":";;;KAGY,WAAA;;AAAZ;AA8BA;;;;;;;;;aAhBY,KAAA,CAAM;;;;;;aAKN,KAAA,CAAM;;;;;;;;;;cAWL,QAAQ,KAAA,CAAM,GAAG"}
1
+ {"version":3,"file":"router.d.ts","names":[],"sources":["../../react/src/primitives/router.tsx"],"sourcesContent":[],"mappings":";;;KAIY,+BACK,sBAAsB;EAD3B,IAAA,EAGL,CAHK;EACK,SAAA,EAGL,KAAA,CAAM,aAHD,CAAA;IAAsB,MAAA,CAAA,EAGI,aAHJ,CAGkB,CAHlB,CAAA;EAEhC,CAAA,CAAA;CACoC;AAAc,KAI7C,WAAA,GAJ6C;EAA7C,IAAM,EAAA,MAKL,aALK;EAAa,MAAA,CAAA,EAMrB,aANqB,CAAA,MAMD,aANC,CAAA;EAInB,KAAA,EAGJ,cAHe,EAAA;EACV,QAAA,CAAA,EAGD,KAAA,CAAM,aAHL,CAAA;IACH,MAAA,CAAA,EAAA,OAAA;EAAoB,CAAA,CAAA;CACtB;;;AAgBR;;;;;;;;;;cAAa,QAAQ,KAAA,CAAM,GAAG"}
package/router2.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+
3
+ //#region ../react/src/support/router.d.ts
4
+ type CustomPage<K extends keyof RouteRegistry = keyof RouteRegistry> = {
5
+ name: K;
6
+ component: React.ComponentType<{
7
+ params?: RouteRegistry[K];
8
+ }>;
9
+ };
10
+ //#endregion
11
+ export { CustomPage };
12
+ //# sourceMappingURL=router2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router2.d.ts","names":[],"sources":["../../react/src/support/router.tsx"],"sourcesContent":[],"mappings":";;;KAWY,2BAA2B,sBAAsB;EAAjD,IAAA,EACL,CADK;EAA2B,SAAA,EAE3B,KAAA,CAAM,aAFqB,CAAA;IAAsB,MAAA,CAAA,EAElB,aAFkB,CAEJ,CAFI,CAAA;EACtD,CAAA,CAAA;CACoC"}
@@ -1 +1 @@
1
- {"version":3,"file":"support-config2.d.ts","names":[],"sources":["../../react/src/support-config.tsx"],"sourcesContent":[],"mappings":";;;KAMY,kBAAA;EAAA,eAAA,CAAA,EACO,cADW,EACX;EAON,YAAA,CAAA,EAAA,MAoBZ,EAAA;;;;;AAjByC,cAH7B,aAG6B,EAAA;;;;KAAvC,qBAAqB,OAAA,CAAM"}
1
+ {"version":3,"file":"support-config2.d.ts","names":[],"sources":["../../react/src/support-config.tsx"],"sourcesContent":[],"mappings":";;;KAMY,kBAAA;EAAA,eAAA,CAAA,EACO,cAAA,EAAA;EAON,YAAA,CAAA,EAAA,MAoBZ,EAAA;;;;;AAjByC,cAH7B,aAG6B,EAAA;;;;KAAvC,qBAAqB,OAAA,CAAM"}
@@ -35,7 +35,7 @@ type UseConversationAutoSeenOptions = {
35
35
  /**
36
36
  * Automatically marks timeline items as seen when:
37
37
  * - A new timeline item arrives from someone else
38
- * - The page is visible/focused
38
+ * - The page is visible
39
39
  * - The support widget is open/visible
40
40
  * - The visitor is the current user
41
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"use-conversation-seen.d.ts","names":[],"sources":["../../react/src/hooks/use-conversation-seen.ts"],"sourcesContent":[],"mappings":";AAAkE,KAI7D,0BAAA,GAA0B;EAgBf,WAAA,CAAA,EAfD,gBAeoB,EAAA;AAwDnC,CAAA;;;;;iBAxDgB,mBAAA,sDAEN,6BACP;;;;;;;iBAqDa,4BAAA,sDAEN,6CAEP"}
1
+ {"version":3,"file":"use-conversation-seen.d.ts","names":[],"sources":["../../react/src/hooks/use-conversation-seen.ts"],"sourcesContent":[],"mappings":";AAAkE,KAI7D,0BAAA,GAA0B;EAgBf,WAAA,CAAA,EAfD,gBAeoB,EAAA;AA8DnC,CAAA;;;;;iBA9DgB,mBAAA,sDAEN,6BACP;;;;;;;iBA2Da,4BAAA,sDAEN,6CAEP"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-grouped-messages.d.ts","names":[],"sources":["../../react/src/hooks/private/use-grouped-messages.ts"],"sourcesContent":[],"mappings":";;AASQ,KAJI,cAAA,GAIJ;EAGW,IAAA,EAAA,eAAA;EACD,QAAA,EAAA,MAAA;EAAI,UAAA,EALT,UAKS;EAGV,KAAA,EAPJ,YAOI,EAAiB;EAMjB,cAAA,EAAA,MAAgB;EAOhB,aAAA,EAAA,MAAgB;EACzB,gBAAA,EAlBgB,IAkBhB;EACA,eAAA,EAlBe,IAkBf;CACA;AAAgB,KAhBP,iBAAA,GAgBO;EAEP,IAAA,EAAA,gBAAA;EACJ,IAAA,EAjBD,YAiBC;EACI,SAAA,EAjBA,IAiBA;CAEE;AAAU,KAhBZ,gBAAA,GAgBY;EAGZ,IAAA,EAAA,eAAA;EAwNC,IAAA,EAzON,YAyOM;EAAsB,IAAA,EAAA,MAAA,GAAA,IAAA;EAAA,SAAA,EAvOvB,IAuOuB;CAAA;AAAA,KApOvB,gBAAA,GACT,cAmOgC,GAlOhC,iBAkOgC,GAjOhC,gBAiOgC;AAKhC,KApOS,yBAAA,GAoOT;SAnOK;aACI;;eAEE;;KAGF,uBAAA,GAA0B;;;;;;;cAwNzB;;;;;GAKV"}
1
+ {"version":3,"file":"use-grouped-messages.d.ts","names":[],"sources":["../../react/src/hooks/private/use-grouped-messages.ts"],"sourcesContent":[],"mappings":";;AASQ,KAJI,cAAA,GAIJ;EAGW,IAAA,EAAA,eAAA;EACD,QAAA,EAAA,MAAA;EAAI,UAAA,EALT,UAKS;EAGV,KAAA,EAPJ,YAOI,EAAiB;EAMjB,cAAA,EAAA,MAAgB;EAOhB,aAAA,EAAA,MAAgB;EACzB,gBAAA,EAlBgB,IAkBhB;EACA,eAAA,EAlBe,IAkBf;CACA;AAAgB,KAhBP,iBAAA,GAgBO;EAEP,IAAA,EAAA,gBAAA;EACJ,IAAA,EAjBD,YAiBC;EACI,SAAA,EAjBA,IAiBA;CAEE;AAAU,KAhBZ,gBAAA,GAgBY;EAGZ,IAAA,EAAA,eAAA;EA+LC,IAAA,EAhNN,YAgNM;EAAsB,IAAA,EAAA,MAAA,GAAA,IAAA;EAAA,SAAA,EA9MvB,IA8MuB;CAAA;AAAA,KA3MvB,gBAAA,GACT,cA0MgC,GAzMhC,iBAyMgC,GAxMhC,gBAwMgC;AAKhC,KA3MS,yBAAA,GA2MT;SA1MK;aACI;;eAEE;;KAGF,uBAAA,GAA0B;;;;;;;cA+LzB;;;;;GAKV"}
@@ -0,0 +1,23 @@
1
+ //#region ../react/src/hooks/use-new-message-sound.d.ts
2
+ /**
3
+ * Hook to play a sound when a new message arrives.
4
+ *
5
+ * @param options - Optional configuration for volume and playback speed
6
+ * @returns Function to play the new message sound
7
+ *
8
+ * @example
9
+ * const playNewMessageSound = useNewMessageSound({ volume: 0.8, playbackRate: 1.1 });
10
+ *
11
+ * useEffect(() => {
12
+ * if (hasNewMessage) {
13
+ * playNewMessageSound();
14
+ * }
15
+ * }, [hasNewMessage]);
16
+ */
17
+ declare function useNewMessageSound(options?: {
18
+ volume?: number;
19
+ playbackRate?: number;
20
+ }): () => void;
21
+ //#endregion
22
+ export { useNewMessageSound };
23
+ //# sourceMappingURL=use-new-message-sound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-new-message-sound.d.ts","names":[],"sources":["../../react/src/hooks/use-new-message-sound.ts"],"sourcesContent":[],"mappings":";;AAqBA;;;;;;;;;;;;;;iBAAgB,kBAAA"}
@@ -0,0 +1,30 @@
1
+ //#region ../react/src/hooks/use-sound-effect.d.ts
2
+ type UseSoundEffectOptions = {
3
+ loop?: boolean;
4
+ volume?: number;
5
+ playbackRate?: number;
6
+ };
7
+ type UseSoundEffectReturn = {
8
+ play: () => void;
9
+ stop: () => void;
10
+ isPlaying: boolean;
11
+ isLoading: boolean;
12
+ error: Error | null;
13
+ };
14
+ /**
15
+ * Hook to play sound effects using the Web Audio API.
16
+ *
17
+ * @param soundPath - Path to the sound file (relative to public directory or absolute URL)
18
+ * @param options - Configuration options for the sound
19
+ * @returns Object with play, stop functions and state
20
+ *
21
+ * @example
22
+ * const { play, stop, isPlaying } = useSoundEffect('/sounds/notification.wav', {
23
+ * loop: false,
24
+ * volume: 0.5
25
+ * });
26
+ */
27
+ declare function useSoundEffect(soundPath: string, options?: UseSoundEffectOptions): UseSoundEffectReturn;
28
+ //#endregion
29
+ export { UseSoundEffectOptions, UseSoundEffectReturn, useSoundEffect };
30
+ //# sourceMappingURL=use-sound-effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-sound-effect.d.ts","names":[],"sources":["../../react/src/hooks/use-sound-effect.ts"],"sourcesContent":[],"mappings":";KAEY,qBAAA;EAAA,IAAA,CAAA,EAAA,OAAA;EAMA,MAAA,CAAA,EAAA,MAAA;EAqBI,YAAA,CAAA,EAAA,MAAc;;KArBlB,oBAAA;;;;;SAKJ;;;;;;;;;;;;;;;iBAgBQ,cAAA,8BAEN,wBACP"}
@@ -0,0 +1,18 @@
1
+ //#region ../react/src/hooks/use-typing-sound.d.ts
2
+ /**
3
+ * Hook to play a looping typing sound while someone is typing.
4
+ *
5
+ * @param isTyping - Whether someone is currently typing
6
+ * @param options - Optional configuration for volume and playback speed
7
+ *
8
+ * @example
9
+ * const { isTyping } = useTypingIndicator();
10
+ * useTypingSound(isTyping, { volume: 1.0, playbackRate: 1.2 });
11
+ */
12
+ declare function useTypingSound(isTyping: boolean, options?: {
13
+ volume?: number;
14
+ playbackRate?: number;
15
+ }): void;
16
+ //#endregion
17
+ export { useTypingSound };
18
+ //# sourceMappingURL=use-typing-sound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-typing-sound.d.ts","names":[],"sources":["../../react/src/hooks/use-typing-sound.ts"],"sourcesContent":[],"mappings":";;AAiBA;;;;;;;;;iBAAgB,cAAA"}
@@ -1,30 +0,0 @@
1
- import React from "react";
2
-
3
- //#region ../react/src/primitives/page-registry.d.ts
4
- type PageComponent<P = unknown> = React.ComponentType<{
5
- params?: P;
6
- }>;
7
- type PageRegistry = Map<string, PageComponent>;
8
- /**
9
- * Context provider for declarative page registration.
10
- *
11
- * @example
12
- * <PageRegistryProvider>
13
- * <Page name="HOME" component={HomePage} />
14
- * <Router page={currentPage} />
15
- * </PageRegistryProvider>
16
- */
17
- declare const PageRegistryProvider: React.FC<{
18
- children: React.ReactNode;
19
- }>;
20
- /**
21
- * Access the page registry (used internally by Router and Page).
22
- */
23
- declare const usePageRegistry: () => PageRegistry;
24
- /**
25
- * Register a page in the registry (used internally by Page component).
26
- */
27
- declare const useRegisterPage: (name: string, component: PageComponent) => void;
28
- //#endregion
29
- export { PageRegistryProvider, usePageRegistry, useRegisterPage };
30
- //# sourceMappingURL=page-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-registry.d.ts","names":[],"sources":["../../react/src/primitives/page-registry.tsx"],"sourcesContent":[],"mappings":";;;KAEK,6BAA6B,KAAA,CAAM;WAAyB;AAFC,CAAA,CAAA;AAEb,KAEhD,YAAA,GAAe,GAAH,CAAA,MAAA,EAAe,aAAA,CAAA;AAahC;AAeA;AAKA;;;;;;;cApBa,sBAAsB,KAAA,CAAM;YAAe,KAAA,CAAM;;;;;cAejD,uBAAe;;;;cAKf,2CAA4C"}
package/page.d.ts DELETED
@@ -1,21 +0,0 @@
1
- //#region ../react/src/primitives/page.d.ts
2
- type PageProps<Params = unknown> = {
3
- name: string;
4
- component: React.ComponentType<{
5
- params?: Params;
6
- }>;
7
- };
8
- /**
9
- * Declaratively register a page component.
10
- *
11
- * @example
12
- * <Page name="HOME" component={HomePage} />
13
- * <Page name="SETTINGS" component={SettingsPage} />
14
- */
15
- declare function Page<Params = unknown>({
16
- name,
17
- component
18
- }: PageProps<Params>): null;
19
- //#endregion
20
- export { Page, PageProps };
21
- //# sourceMappingURL=page.d.ts.map
package/page.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"page.d.ts","names":[],"sources":["../../react/src/primitives/page.tsx"],"sourcesContent":[],"mappings":";KAEY;EAAA,IAAA,EAAA,MAAS;EAYL,SAAI,EAVR,KAAA,CAAM,aAUE,CAAA;IACnB,MAAA,CAAA,EAX0C,MAW1C;EACA,CAAA,CAAA;CACY;;;;;;;;iBAHG;;;GAGb,UAAU"}