@cossistant/react 0.0.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.
- package/_virtual/rolldown_runtime.js +13 -0
- package/conversation.d.ts +312 -0
- package/conversation.d.ts.map +1 -0
- package/hooks/index.d.ts +23 -0
- package/hooks/index.js +24 -0
- package/hooks/private/store/use-conversations-store.d.ts +13 -0
- package/hooks/private/store/use-conversations-store.d.ts.map +1 -0
- package/hooks/private/store/use-conversations-store.js +34 -0
- package/hooks/private/store/use-conversations-store.js.map +1 -0
- package/hooks/private/store/use-store-selector.d.ts +10 -0
- package/hooks/private/store/use-store-selector.d.ts.map +1 -0
- package/hooks/private/store/use-store-selector.js +17 -0
- package/hooks/private/store/use-store-selector.js.map +1 -0
- package/hooks/private/store/use-website-store.d.ts +18 -0
- package/hooks/private/store/use-website-store.d.ts.map +1 -0
- package/hooks/private/store/use-website-store.js +39 -0
- package/hooks/private/store/use-website-store.js.map +1 -0
- package/hooks/private/use-client-query.d.ts +25 -0
- package/hooks/private/use-client-query.d.ts.map +1 -0
- package/hooks/private/use-client-query.js +122 -0
- package/hooks/private/use-client-query.js.map +1 -0
- package/hooks/private/use-default-messages.d.ts +18 -0
- package/hooks/private/use-default-messages.d.ts.map +1 -0
- package/hooks/private/use-default-messages.js +45 -0
- package/hooks/private/use-default-messages.js.map +1 -0
- package/hooks/private/use-grouped-messages.d.ts +54 -0
- package/hooks/private/use-grouped-messages.d.ts.map +1 -0
- package/hooks/private/use-grouped-messages.js +157 -0
- package/hooks/private/use-grouped-messages.js.map +1 -0
- package/hooks/private/use-multimodal-input.d.ts +40 -0
- package/hooks/private/use-multimodal-input.d.ts.map +1 -0
- package/hooks/private/use-multimodal-input.js +129 -0
- package/hooks/private/use-multimodal-input.js.map +1 -0
- package/hooks/private/use-rest-client.d.ts +17 -0
- package/hooks/private/use-rest-client.d.ts.map +1 -0
- package/hooks/private/use-rest-client.js +41 -0
- package/hooks/private/use-rest-client.js.map +1 -0
- package/hooks/private/use-visitor-typing-reporter.d.ts +19 -0
- package/hooks/private/use-visitor-typing-reporter.d.ts.map +1 -0
- package/hooks/private/use-visitor-typing-reporter.js +140 -0
- package/hooks/private/use-visitor-typing-reporter.js.map +1 -0
- package/hooks/use-composer-refocus.d.ts +20 -0
- package/hooks/use-composer-refocus.d.ts.map +1 -0
- package/hooks/use-composer-refocus.js +32 -0
- package/hooks/use-composer-refocus.js.map +1 -0
- package/hooks/use-conversation-auto-seen.d.ts +54 -0
- package/hooks/use-conversation-auto-seen.d.ts.map +1 -0
- package/hooks/use-conversation-auto-seen.js +106 -0
- package/hooks/use-conversation-auto-seen.js.map +1 -0
- package/hooks/use-conversation-history-page.d.ts +86 -0
- package/hooks/use-conversation-history-page.d.ts.map +1 -0
- package/hooks/use-conversation-history-page.js +97 -0
- package/hooks/use-conversation-history-page.js.map +1 -0
- package/hooks/use-conversation-lifecycle.d.ts +80 -0
- package/hooks/use-conversation-lifecycle.d.ts.map +1 -0
- package/hooks/use-conversation-lifecycle.js +54 -0
- package/hooks/use-conversation-lifecycle.js.map +1 -0
- package/hooks/use-conversation-page.d.ts +82 -0
- package/hooks/use-conversation-page.d.ts.map +1 -0
- package/hooks/use-conversation-page.js +138 -0
- package/hooks/use-conversation-page.js.map +1 -0
- package/hooks/use-conversation-seen.d.ts +17 -0
- package/hooks/use-conversation-seen.d.ts.map +1 -0
- package/hooks/use-conversation-seen.js +58 -0
- package/hooks/use-conversation-seen.js.map +1 -0
- package/hooks/use-conversation-timeline-items.d.ts +21 -0
- package/hooks/use-conversation-timeline-items.d.ts.map +1 -0
- package/hooks/use-conversation-timeline-items.js +87 -0
- package/hooks/use-conversation-timeline-items.js.map +1 -0
- package/hooks/use-conversation-typing.d.ts +13 -0
- package/hooks/use-conversation-typing.d.ts.map +1 -0
- package/hooks/use-conversation-typing.js +34 -0
- package/hooks/use-conversation-typing.js.map +1 -0
- package/hooks/use-conversation.d.ts +18 -0
- package/hooks/use-conversation.d.ts.map +1 -0
- package/hooks/use-conversation.js +44 -0
- package/hooks/use-conversation.js.map +1 -0
- package/hooks/use-conversations.d.ts +20 -0
- package/hooks/use-conversations.d.ts.map +1 -0
- package/hooks/use-conversations.js +68 -0
- package/hooks/use-conversations.js.map +1 -0
- package/hooks/use-create-conversation.d.ts +30 -0
- package/hooks/use-create-conversation.d.ts.map +1 -0
- package/hooks/use-create-conversation.js +67 -0
- package/hooks/use-create-conversation.js.map +1 -0
- package/hooks/use-home-page.d.ts +82 -0
- package/hooks/use-home-page.d.ts.map +1 -0
- package/hooks/use-home-page.js +89 -0
- package/hooks/use-home-page.js.map +1 -0
- package/hooks/use-message-composer.d.ts +88 -0
- package/hooks/use-message-composer.d.ts.map +1 -0
- package/hooks/use-message-composer.js +94 -0
- package/hooks/use-message-composer.js.map +1 -0
- package/hooks/use-realtime-support.d.ts +25 -0
- package/hooks/use-realtime-support.d.ts.map +1 -0
- package/hooks/use-realtime-support.js +29 -0
- package/hooks/use-realtime-support.js.map +1 -0
- package/hooks/use-send-message.d.ts +34 -0
- package/hooks/use-send-message.d.ts.map +1 -0
- package/hooks/use-send-message.js +118 -0
- package/hooks/use-send-message.js.map +1 -0
- package/hooks/use-visitor.d.ts +28 -0
- package/hooks/use-visitor.d.ts.map +1 -0
- package/hooks/use-visitor.js +59 -0
- package/hooks/use-visitor.js.map +1 -0
- package/hooks/use-window-visibility-focus.d.ts +9 -0
- package/hooks/use-window-visibility-focus.d.ts.map +1 -0
- package/hooks/use-window-visibility-focus.js +53 -0
- package/hooks/use-window-visibility-focus.js.map +1 -0
- package/identify-visitor.d.ts +18 -0
- package/identify-visitor.d.ts.map +1 -0
- package/identify-visitor.js +26 -0
- package/identify-visitor.js.map +1 -0
- package/index.d.ts +38 -0
- package/index.js +38 -0
- package/package.json +121 -0
- package/primitives/avatar/avatar.d.ts +31 -0
- package/primitives/avatar/avatar.d.ts.map +1 -0
- package/primitives/avatar/avatar.js +49 -0
- package/primitives/avatar/avatar.js.map +1 -0
- package/primitives/avatar/fallback.d.ts +24 -0
- package/primitives/avatar/fallback.d.ts.map +1 -0
- package/primitives/avatar/fallback.js +57 -0
- package/primitives/avatar/fallback.js.map +1 -0
- package/primitives/avatar/image.d.ts +27 -0
- package/primitives/avatar/image.d.ts.map +1 -0
- package/primitives/avatar/image.js +58 -0
- package/primitives/avatar/image.js.map +1 -0
- package/primitives/avatar/index.d.ts +4 -0
- package/primitives/avatar/index.js +5 -0
- package/primitives/avatar/index.parts.d.ts +4 -0
- package/primitives/avatar/index.parts.js +5 -0
- package/primitives/bubble.d.ts +28 -0
- package/primitives/bubble.d.ts.map +1 -0
- package/primitives/bubble.js +43 -0
- package/primitives/bubble.js.map +1 -0
- package/primitives/button.d.ts +19 -0
- package/primitives/button.d.ts.map +1 -0
- package/primitives/button.js +27 -0
- package/primitives/button.js.map +1 -0
- package/primitives/conversation-timeline.d.ts +86 -0
- package/primitives/conversation-timeline.d.ts.map +1 -0
- package/primitives/conversation-timeline.js +119 -0
- package/primitives/conversation-timeline.js.map +1 -0
- package/primitives/index.d.ts +20 -0
- package/primitives/index.d.ts.map +1 -0
- package/primitives/index.js +45 -0
- package/primitives/index.js.map +1 -0
- package/primitives/index.parts.d.ts +13 -0
- package/primitives/index.parts.js +14 -0
- package/primitives/multimodal-input.d.ts +53 -0
- package/primitives/multimodal-input.d.ts.map +1 -0
- package/primitives/multimodal-input.js +106 -0
- package/primitives/multimodal-input.js.map +1 -0
- package/primitives/timeline-item-group.d.ts +166 -0
- package/primitives/timeline-item-group.d.ts.map +1 -0
- package/primitives/timeline-item-group.js +204 -0
- package/primitives/timeline-item-group.js.map +1 -0
- package/primitives/timeline-item.d.ts +75 -0
- package/primitives/timeline-item.d.ts.map +1 -0
- package/primitives/timeline-item.js +145 -0
- package/primitives/timeline-item.js.map +1 -0
- package/primitives/window.d.ts +31 -0
- package/primitives/window.d.ts.map +1 -0
- package/primitives/window.js +58 -0
- package/primitives/window.js.map +1 -0
- package/provider.d.ts +95 -0
- package/provider.d.ts.map +1 -0
- package/provider.js +124 -0
- package/provider.js.map +1 -0
- package/realtime/event-filter.d.ts +8 -0
- package/realtime/event-filter.d.ts.map +1 -0
- package/realtime/event-filter.js +21 -0
- package/realtime/event-filter.js.map +1 -0
- package/realtime/index.d.ts +6 -0
- package/realtime/index.js +7 -0
- package/realtime/provider.d.ts +57 -0
- package/realtime/provider.d.ts.map +1 -0
- package/realtime/provider.js +351 -0
- package/realtime/provider.js.map +1 -0
- package/realtime/seen-store.d.ts +23 -0
- package/realtime/seen-store.d.ts.map +1 -0
- package/realtime/seen-store.js +34 -0
- package/realtime/seen-store.js.map +1 -0
- package/realtime/support-provider.d.ts +17 -0
- package/realtime/support-provider.d.ts.map +1 -0
- package/realtime/support-provider.js +54 -0
- package/realtime/support-provider.js.map +1 -0
- package/realtime/typing-store.d.ts +30 -0
- package/realtime/typing-store.d.ts.map +1 -0
- package/realtime/typing-store.js +34 -0
- package/realtime/typing-store.js.map +1 -0
- package/realtime/use-realtime.d.ts +29 -0
- package/realtime/use-realtime.d.ts.map +1 -0
- package/realtime/use-realtime.js +47 -0
- package/realtime/use-realtime.js.map +1 -0
- package/realtime-events.d.ts +344 -0
- package/realtime-events.d.ts.map +1 -0
- package/schemas.d.ts +90 -0
- package/schemas.d.ts.map +1 -0
- package/support/components/avatar-stack.d.ts +45 -0
- package/support/components/avatar-stack.d.ts.map +1 -0
- package/support/components/avatar-stack.js +72 -0
- package/support/components/avatar-stack.js.map +1 -0
- package/support/components/avatar.d.ts +15 -0
- package/support/components/avatar.d.ts.map +1 -0
- package/support/components/avatar.js +23 -0
- package/support/components/avatar.js.map +1 -0
- package/support/components/bubble.d.ts +10 -0
- package/support/components/bubble.d.ts.map +1 -0
- package/support/components/bubble.js +95 -0
- package/support/components/bubble.js.map +1 -0
- package/support/components/button.d.ts +20 -0
- package/support/components/button.d.ts.map +1 -0
- package/support/components/button.js +41 -0
- package/support/components/button.js.map +1 -0
- package/support/components/container.d.ts +14 -0
- package/support/components/container.d.ts.map +1 -0
- package/support/components/container.js +115 -0
- package/support/components/container.js.map +1 -0
- package/support/components/conversation-button-link.d.ts +34 -0
- package/support/components/conversation-button-link.d.ts.map +1 -0
- package/support/components/conversation-button-link.js +195 -0
- package/support/components/conversation-button-link.js.map +1 -0
- package/support/components/conversation-event.d.ts +14 -0
- package/support/components/conversation-event.d.ts.map +1 -0
- package/support/components/conversation-event.js +76 -0
- package/support/components/conversation-event.js.map +1 -0
- package/support/components/conversation-timeline.d.ts +17 -0
- package/support/components/conversation-timeline.d.ts.map +1 -0
- package/support/components/conversation-timeline.js +95 -0
- package/support/components/conversation-timeline.js.map +1 -0
- package/support/components/cossistant-branding.d.ts +12 -0
- package/support/components/cossistant-branding.d.ts.map +1 -0
- package/support/components/cossistant-branding.js +22 -0
- package/support/components/cossistant-branding.js.map +1 -0
- package/support/components/header.d.ts +11 -0
- package/support/components/header.d.ts.map +1 -0
- package/support/components/header.js +43 -0
- package/support/components/header.js.map +1 -0
- package/support/components/icons.d.ts +21 -0
- package/support/components/icons.d.ts.map +1 -0
- package/support/components/icons.js +131 -0
- package/support/components/icons.js.map +1 -0
- package/support/components/index.d.ts +11 -0
- package/support/components/index.js +12 -0
- package/support/components/multimodal-input.d.ts +28 -0
- package/support/components/multimodal-input.d.ts.map +1 -0
- package/support/components/multimodal-input.js +138 -0
- package/support/components/multimodal-input.js.map +1 -0
- package/support/components/navigation-tab.d.ts +7 -0
- package/support/components/navigation-tab.d.ts.map +1 -0
- package/support/components/navigation-tab.js +40 -0
- package/support/components/navigation-tab.js.map +1 -0
- package/support/components/support-content.d.ts +22 -0
- package/support/components/support-content.d.ts.map +1 -0
- package/support/components/support-content.js +50 -0
- package/support/components/support-content.js.map +1 -0
- package/support/components/text-effect.d.ts +49 -0
- package/support/components/text-effect.d.ts.map +1 -0
- package/support/components/text-effect.js +221 -0
- package/support/components/text-effect.js.map +1 -0
- package/support/components/timeline-message-group.d.ts +16 -0
- package/support/components/timeline-message-group.d.ts.map +1 -0
- package/support/components/timeline-message-group.js +117 -0
- package/support/components/timeline-message-group.js.map +1 -0
- package/support/components/timeline-message-item.d.ts +17 -0
- package/support/components/timeline-message-item.d.ts.map +1 -0
- package/support/components/timeline-message-item.js +42 -0
- package/support/components/timeline-message-item.js.map +1 -0
- package/support/components/typing-indicator.d.ts +26 -0
- package/support/components/typing-indicator.d.ts.map +1 -0
- package/support/components/typing-indicator.js +37 -0
- package/support/components/typing-indicator.js.map +1 -0
- package/support/components/watermark.d.ts +8 -0
- package/support/components/watermark.d.ts.map +1 -0
- package/support/components/watermark.js +34 -0
- package/support/components/watermark.js.map +1 -0
- package/support/context/config.d.ts +32 -0
- package/support/context/config.d.ts.map +1 -0
- package/support/context/config.js +27 -0
- package/support/context/config.js.map +1 -0
- package/support/context/websocket.d.ts +22 -0
- package/support/context/websocket.d.ts.map +1 -0
- package/support/context/websocket.js +113 -0
- package/support/context/websocket.js.map +1 -0
- package/support/index.d.ts +39 -0
- package/support/index.d.ts.map +1 -0
- package/support/index.js +43 -0
- package/support/index.js.map +1 -0
- package/support/pages/articles.d.ts +7 -0
- package/support/pages/articles.d.ts.map +1 -0
- package/support/pages/articles.js +39 -0
- package/support/pages/articles.js.map +1 -0
- package/support/pages/conversation-history.d.ts +18 -0
- package/support/pages/conversation-history.d.ts.map +1 -0
- package/support/pages/conversation-history.js +120 -0
- package/support/pages/conversation-history.js.map +1 -0
- package/support/pages/conversation.d.ts +32 -0
- package/support/pages/conversation.d.ts.map +1 -0
- package/support/pages/conversation.js +92 -0
- package/support/pages/conversation.js.map +1 -0
- package/support/pages/home.d.ts +20 -0
- package/support/pages/home.d.ts.map +1 -0
- package/support/pages/home.js +184 -0
- package/support/pages/home.js.map +1 -0
- package/support/router.d.ts +14 -0
- package/support/router.d.ts.map +1 -0
- package/support/router.js +31 -0
- package/support/router.js.map +1 -0
- package/support/store/index.d.ts +2 -0
- package/support/store/index.js +3 -0
- package/support/store/support-store.d.ts +42 -0
- package/support/store/support-store.d.ts.map +1 -0
- package/support/store/support-store.js +66 -0
- package/support/store/support-store.js.map +1 -0
- package/support/support-CMoDLQoC.css +408 -0
- package/support/support-CMoDLQoC.css.map +1 -0
- package/support/support.js +1 -0
- package/support/text/index.d.ts +35 -0
- package/support/text/index.d.ts.map +1 -0
- package/support/text/index.js +71 -0
- package/support/text/index.js.map +1 -0
- package/support/text/locales/en.d.ts +7 -0
- package/support/text/locales/en.d.ts.map +1 -0
- package/support/text/locales/en.js +65 -0
- package/support/text/locales/en.js.map +1 -0
- package/support/text/locales/es.d.ts +7 -0
- package/support/text/locales/es.d.ts.map +1 -0
- package/support/text/locales/es.js +64 -0
- package/support/text/locales/es.js.map +1 -0
- package/support/text/locales/fr.d.ts +7 -0
- package/support/text/locales/fr.d.ts.map +1 -0
- package/support/text/locales/fr.js +64 -0
- package/support/text/locales/fr.js.map +1 -0
- package/support/text/locales/keys.d.ts +216 -0
- package/support/text/locales/keys.d.ts.map +1 -0
- package/support/text/locales/keys.js +54 -0
- package/support/text/locales/keys.js.map +1 -0
- package/support/text/runtime.d.ts +17 -0
- package/support/text/runtime.d.ts.map +1 -0
- package/support/text/runtime.js +156 -0
- package/support/text/runtime.js.map +1 -0
- package/support/utils/index.d.ts +7 -0
- package/support/utils/index.d.ts.map +1 -0
- package/support/utils/index.js +11 -0
- package/support/utils/index.js.map +1 -0
- package/support/utils/time.d.ts +5 -0
- package/support/utils/time.d.ts.map +1 -0
- package/support/utils/time.js +28 -0
- package/support/utils/time.js.map +1 -0
- package/support-config.d.ts +20 -0
- package/support-config.d.ts.map +1 -0
- package/support-config.js +25 -0
- package/support-config.js.map +1 -0
- package/support.css +2 -0
- package/timeline-item.d.ts +133 -0
- package/timeline-item.d.ts.map +1 -0
- package/utils/id.d.ts +6 -0
- package/utils/id.d.ts.map +1 -0
- package/utils/id.js +13 -0
- package/utils/id.js.map +1 -0
- package/utils/index.d.ts +3 -0
- package/utils/index.js +4 -0
- package/utils/text.d.ts +5 -0
- package/utils/text.d.ts.map +1 -0
- package/utils/text.js +9 -0
- package/utils/text.js.map +1 -0
- package/utils/use-render-element.d.ts +22 -0
- package/utils/use-render-element.d.ts.map +1 -0
- package/utils/use-render-element.js +35 -0
- package/utils/use-render-element.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","names":[],"sources":["../../../src/support/pages/conversation.tsx"],"sourcesContent":["import type { TimelineItem } from \"@cossistant/types/api/timeline-item\";\nimport { useConversationPage } from \"../../hooks/use-conversation-page\";\nimport { useSupport } from \"../../provider\";\nimport { AvatarStack } from \"../components/avatar-stack\";\nimport { ConversationTimelineList } from \"../components/conversation-timeline\";\nimport { Header } from \"../components/header\";\nimport { MultimodalInput } from \"../components/multimodal-input\";\nimport { useSupportNavigation } from \"../store\";\nimport { Text, useSupportText } from \"../text\";\n\ntype ConversationPageProps = {\n\t/**\n\t * The conversation ID to display (can be PENDING_CONVERSATION_ID or a real ID).\n\t */\n\tconversationId: string;\n\n\t/**\n\t * Optional initial message to send when opening the conversation.\n\t */\n\tinitialMessage?: string;\n\n\t/**\n\t * Optional timeline items to display (for optimistic updates or initial state).\n\t */\n\titems?: TimelineItem[];\n};\n\n/**\n * Main conversation page component.\n *\n * All conversation logic is handled by the useConversationPage hook,\n * making this component focused purely on rendering and user interaction.\n */\nexport const ConversationPage = ({\n\tconversationId: initialConversationId,\n\tinitialMessage,\n\titems: passedItems = [],\n}: ConversationPageProps) => {\n\tconst { website, availableAIAgents, availableHumanAgents, visitor } =\n\t\tuseSupport();\n\tconst { navigate, replace, goBack, canGoBack } = useSupportNavigation();\n\tconst text = useSupportText();\n\n\t// Main conversation hook - handles all logic\n\tconst conversation = useConversationPage({\n\t\tconversationId: initialConversationId,\n\t\titems: passedItems,\n\t\tinitialMessage,\n\t\tonConversationIdChange: (newConversationId) => {\n\t\t\t// Update navigation when conversation is created\n\t\t\treplace({\n\t\t\t\tpage: \"CONVERSATION\",\n\t\t\t\tparams: { conversationId: newConversationId },\n\t\t\t});\n\t\t},\n\t});\n\n\tconst handleGoBack = () => {\n\t\tif (canGoBack) {\n\t\t\tgoBack();\n\t\t} else {\n\t\t\tnavigate({ page: \"HOME\" });\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"flex h-full flex-col gap-0 overflow-hidden\">\n\t\t\t<Header onGoBack={handleGoBack}>\n\t\t\t\t<div className=\"flex w-full items-center justify-between gap-2 py-3\">\n\t\t\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t\t\t<p className=\"font-medium text-sm\">{website?.name}</p>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tas=\"p\"\n\t\t\t\t\t\t\tclassName=\"text-muted-foreground text-sm\"\n\t\t\t\t\t\t\ttextKey=\"common.labels.supportOnline\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AvatarStack\n\t\t\t\t\t\taiAgents={availableAIAgents}\n\t\t\t\t\t\tgapWidth={2}\n\t\t\t\t\t\thumanAgents={availableHumanAgents}\n\t\t\t\t\t\tsize={32}\n\t\t\t\t\t\tspacing={28}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</Header>\n\n\t\t\t<ConversationTimelineList\n\t\t\t\tavailableAIAgents={availableAIAgents}\n\t\t\t\tavailableHumanAgents={availableHumanAgents}\n\t\t\t\tclassName=\"min-h-0 flex-1 px-4\"\n\t\t\t\tconversationId={conversation.conversationId}\n\t\t\t\tcurrentVisitorId={visitor?.id}\n\t\t\t\titems={conversation.items}\n\t\t\t/>\n\n\t\t\t<div className=\"flex-shrink-0 p-1\">\n\t\t\t\t<MultimodalInput\n\t\t\t\t\tdisabled={conversation.composer.isSubmitting}\n\t\t\t\t\terror={conversation.error}\n\t\t\t\t\tfiles={conversation.composer.files}\n\t\t\t\t\tisSubmitting={conversation.composer.isSubmitting}\n\t\t\t\t\tonChange={conversation.composer.setMessage}\n\t\t\t\t\tonFileSelect={conversation.composer.addFiles}\n\t\t\t\t\tonRemoveFile={conversation.composer.removeFile}\n\t\t\t\t\tonSubmit={conversation.composer.submit}\n\t\t\t\t\tplaceholder={text(\"component.multimodalInput.placeholder\")}\n\t\t\t\t\tvalue={conversation.composer.message}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAiCA,MAAa,oBAAoB,EAChC,gBAAgB,uBAChB,gBACA,OAAO,cAAc,EAAE,OACK;CAC5B,MAAM,EAAE,SAAS,mBAAmB,sBAAsB,YACzD,YAAY;CACb,MAAM,EAAE,UAAU,SAAS,QAAQ,cAAc,sBAAsB;CACvE,MAAM,OAAO,gBAAgB;CAG7B,MAAM,eAAe,oBAAoB;EACxC,gBAAgB;EAChB,OAAO;EACP;EACA,yBAAyB,sBAAsB;AAE9C,WAAQ;IACP,MAAM;IACN,QAAQ,EAAE,gBAAgB,mBAAmB;IAC7C,CAAC;;EAEH,CAAC;CAEF,MAAM,qBAAqB;AAC1B,MAAI,UACH,SAAQ;MAER,UAAS,EAAE,MAAM,QAAQ,CAAC;;AAI5B,QACC,qBAAC;EAAI,WAAU;;GACd,oBAAC;IAAO,UAAU;cACjB,qBAAC;KAAI,WAAU;gBACd,qBAAC;MAAI,WAAU;iBACd,oBAAC;OAAE,WAAU;iBAAuB,SAAS;QAAS,EACtD,oBAAC;OACA,IAAG;OACH,WAAU;OACV,SAAQ;QACP;OACG,EACN,oBAAC;MACA,UAAU;MACV,UAAU;MACV,aAAa;MACb,MAAM;MACN,SAAS;OACR;MACG;KACE;GAET,oBAAC;IACmB;IACG;IACtB,WAAU;IACV,gBAAgB,aAAa;IAC7B,kBAAkB,SAAS;IAC3B,OAAO,aAAa;KACnB;GAEF,oBAAC;IAAI,WAAU;cACd,oBAAC;KACA,UAAU,aAAa,SAAS;KAChC,OAAO,aAAa;KACpB,OAAO,aAAa,SAAS;KAC7B,cAAc,aAAa,SAAS;KACpC,UAAU,aAAa,SAAS;KAChC,cAAc,aAAa,SAAS;KACpC,cAAc,aAAa,SAAS;KACpC,UAAU,aAAa,SAAS;KAChC,aAAa,KAAK,wCAAwC;KAC1D,OAAO,aAAa,SAAS;MAC5B;KACG;;GACD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as react_jsx_runtime5 from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/support/pages/home.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Home page component for the support widget.
|
|
7
|
+
*
|
|
8
|
+
* Displays:
|
|
9
|
+
* - Welcome message with available agents
|
|
10
|
+
* - Quick action buttons
|
|
11
|
+
* - Last open conversation (if any)
|
|
12
|
+
* - Button to start new conversation
|
|
13
|
+
* - Link to conversation history
|
|
14
|
+
*
|
|
15
|
+
* All logic is handled by the useHomePage hook.
|
|
16
|
+
*/
|
|
17
|
+
declare const HomePage: () => react_jsx_runtime5.JSX.Element;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { HomePage };
|
|
20
|
+
//# sourceMappingURL=home.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home.d.ts","names":[],"sources":["../../../src/support/pages/home.tsx"],"sourcesContent":[],"mappings":";;;;;;;AA0BA;;;;;;;;;cAAa,gBAAQ,kBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { AvatarStack } from "../components/avatar-stack.js";
|
|
2
|
+
import { useSupportNavigation } from "../store/support-store.js";
|
|
3
|
+
import { Button } from "../components/button.js";
|
|
4
|
+
import icons_default from "../components/icons.js";
|
|
5
|
+
import { Header } from "../components/header.js";
|
|
6
|
+
import { Text, useSupportText } from "../text/index.js";
|
|
7
|
+
import { PENDING_CONVERSATION_ID } from "../../utils/id.js";
|
|
8
|
+
import { Watermark } from "../components/watermark.js";
|
|
9
|
+
import { ConversationButtonLink } from "../components/conversation-button-link.js";
|
|
10
|
+
import { TextEffect } from "../components/text-effect.js";
|
|
11
|
+
import { useHomePage } from "../../hooks/use-home-page.js";
|
|
12
|
+
import { useSupport } from "../../provider.js";
|
|
13
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { motion } from "motion/react";
|
|
15
|
+
|
|
16
|
+
//#region src/support/pages/home.tsx
|
|
17
|
+
/**
|
|
18
|
+
* Home page component for the support widget.
|
|
19
|
+
*
|
|
20
|
+
* Displays:
|
|
21
|
+
* - Welcome message with available agents
|
|
22
|
+
* - Quick action buttons
|
|
23
|
+
* - Last open conversation (if any)
|
|
24
|
+
* - Button to start new conversation
|
|
25
|
+
* - Link to conversation history
|
|
26
|
+
*
|
|
27
|
+
* All logic is handled by the useHomePage hook.
|
|
28
|
+
*/
|
|
29
|
+
const HomePage = () => {
|
|
30
|
+
const { website, availableHumanAgents, visitor, quickOptions } = useSupport();
|
|
31
|
+
const { navigate } = useSupportNavigation();
|
|
32
|
+
const text = useSupportText();
|
|
33
|
+
const home = useHomePage({
|
|
34
|
+
onStartConversation: (initialMessage) => {
|
|
35
|
+
navigate({
|
|
36
|
+
page: "CONVERSATION",
|
|
37
|
+
params: {
|
|
38
|
+
conversationId: PENDING_CONVERSATION_ID,
|
|
39
|
+
initialMessage
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
onOpenConversation: (conversationId) => {
|
|
44
|
+
navigate({
|
|
45
|
+
page: "CONVERSATION",
|
|
46
|
+
params: { conversationId }
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
onOpenConversationHistory: () => {
|
|
50
|
+
navigate({ page: "CONVERSATION_HISTORY" });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
54
|
+
/* @__PURE__ */ jsx(Header, {}),
|
|
55
|
+
/* @__PURE__ */ jsx("div", {
|
|
56
|
+
className: "sticky top-4 flex flex-1 items-center justify-center",
|
|
57
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
58
|
+
className: "flex flex-col items-center gap-2",
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ jsxs(motion.div, {
|
|
61
|
+
animate: "visible",
|
|
62
|
+
className: "flex flex-col items-center justify-center gap-2",
|
|
63
|
+
exit: "exit",
|
|
64
|
+
initial: "hidden",
|
|
65
|
+
transition: { delay: .1 },
|
|
66
|
+
variants: {
|
|
67
|
+
hidden: {
|
|
68
|
+
opacity: 0,
|
|
69
|
+
y: 20,
|
|
70
|
+
filter: "blur(12px)"
|
|
71
|
+
},
|
|
72
|
+
visible: {
|
|
73
|
+
opacity: 1,
|
|
74
|
+
y: 0,
|
|
75
|
+
filter: "blur(0px)"
|
|
76
|
+
},
|
|
77
|
+
exit: {
|
|
78
|
+
opacity: 0,
|
|
79
|
+
y: 20,
|
|
80
|
+
filter: "blur(12px)"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
children: [/* @__PURE__ */ jsx(AvatarStack, {
|
|
84
|
+
aiAgents: website?.availableAIAgents || [],
|
|
85
|
+
humanAgents: availableHumanAgents,
|
|
86
|
+
size: 44,
|
|
87
|
+
spacing: 32
|
|
88
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
89
|
+
as: "p",
|
|
90
|
+
className: "mb-4 text-co-primary/80 text-sm",
|
|
91
|
+
textKey: "page.home.tagline",
|
|
92
|
+
variables: { websiteName: website?.name ?? null }
|
|
93
|
+
})]
|
|
94
|
+
}),
|
|
95
|
+
/* @__PURE__ */ jsx(TextEffect, {
|
|
96
|
+
as: "h2",
|
|
97
|
+
className: "max-w-xs text-balance text-center font-co-sans text-2xl leading-normal",
|
|
98
|
+
delay: .5,
|
|
99
|
+
preset: "fade-in-blur",
|
|
100
|
+
children: text("page.home.greeting", { visitorName: visitor?.contact?.name ?? void 0 })
|
|
101
|
+
}),
|
|
102
|
+
quickOptions.length > 0 && /* @__PURE__ */ jsx(motion.div, {
|
|
103
|
+
animate: "visible",
|
|
104
|
+
className: "mt-6 inline-flex gap-2",
|
|
105
|
+
exit: "exit",
|
|
106
|
+
initial: "hidden",
|
|
107
|
+
transition: { delay: 1.3 },
|
|
108
|
+
variants: {
|
|
109
|
+
hidden: {
|
|
110
|
+
opacity: 0,
|
|
111
|
+
y: 20,
|
|
112
|
+
filter: "blur(12px)"
|
|
113
|
+
},
|
|
114
|
+
visible: {
|
|
115
|
+
opacity: 1,
|
|
116
|
+
y: 0,
|
|
117
|
+
filter: "blur(0px)"
|
|
118
|
+
},
|
|
119
|
+
exit: {
|
|
120
|
+
opacity: 0,
|
|
121
|
+
y: 20,
|
|
122
|
+
filter: "blur(12px)"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
children: quickOptions?.map((option) => /* @__PURE__ */ jsx(Button, {
|
|
126
|
+
className: "rounded-full border-dashed",
|
|
127
|
+
onClick: () => home.startConversation(option),
|
|
128
|
+
size: "default",
|
|
129
|
+
variant: "outline",
|
|
130
|
+
children: option
|
|
131
|
+
}, option))
|
|
132
|
+
})
|
|
133
|
+
]
|
|
134
|
+
})
|
|
135
|
+
}),
|
|
136
|
+
/* @__PURE__ */ jsxs("div", {
|
|
137
|
+
className: "flex flex-shrink-0 flex-col items-center justify-center gap-2 px-6 pb-4",
|
|
138
|
+
children: [
|
|
139
|
+
home.availableConversationsCount > 0 && /* @__PURE__ */ jsx(Button, {
|
|
140
|
+
className: "relative w-full text-co-primary/40 text-xs hover:text-co-primary",
|
|
141
|
+
onClick: home.openConversationHistory,
|
|
142
|
+
variant: "ghost",
|
|
143
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
144
|
+
as: "span",
|
|
145
|
+
textKey: "page.home.history.more",
|
|
146
|
+
variables: { count: home.availableConversationsCount }
|
|
147
|
+
})
|
|
148
|
+
}),
|
|
149
|
+
home.lastOpenConversation && /* @__PURE__ */ jsx("div", {
|
|
150
|
+
className: "flex w-full flex-col overflow-clip rounded-md border border-co-border/80",
|
|
151
|
+
children: /* @__PURE__ */ jsx(ConversationButtonLink, {
|
|
152
|
+
className: "rounded-none",
|
|
153
|
+
conversation: home.lastOpenConversation,
|
|
154
|
+
onClick: () => {
|
|
155
|
+
if (home.lastOpenConversation) home.openConversation(home.lastOpenConversation.id);
|
|
156
|
+
}
|
|
157
|
+
}, home.lastOpenConversation.id)
|
|
158
|
+
}),
|
|
159
|
+
/* @__PURE__ */ jsxs("div", {
|
|
160
|
+
className: "sticky bottom-4 z-10 flex w-full flex-col items-center gap-2",
|
|
161
|
+
children: [/* @__PURE__ */ jsxs(Button, {
|
|
162
|
+
className: "relative w-full justify-between",
|
|
163
|
+
onClick: () => home.startConversation(),
|
|
164
|
+
size: "large",
|
|
165
|
+
variant: "secondary",
|
|
166
|
+
children: [/* @__PURE__ */ jsx(icons_default, {
|
|
167
|
+
className: "-translate-y-1/2 absolute top-1/2 right-4 size-3 text-co-primary/60 transition-transform duration-200 group-hover/btn:translate-x-0.5 group-hover/btn:text-co-primary",
|
|
168
|
+
name: "arrow-right",
|
|
169
|
+
variant: "default"
|
|
170
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
171
|
+
as: "span",
|
|
172
|
+
textKey: "common.actions.askQuestion"
|
|
173
|
+
})]
|
|
174
|
+
}), /* @__PURE__ */ jsx(Watermark, { className: "mt-4 mb-2" })]
|
|
175
|
+
}),
|
|
176
|
+
/* @__PURE__ */ jsx("div", {})
|
|
177
|
+
]
|
|
178
|
+
})
|
|
179
|
+
] });
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
//#endregion
|
|
183
|
+
export { HomePage };
|
|
184
|
+
//# sourceMappingURL=home.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home.js","names":["Icon"],"sources":["../../../src/support/pages/home.tsx"],"sourcesContent":["import { motion } from \"motion/react\";\nimport { useHomePage } from \"../../hooks/use-home-page\";\nimport { useSupport } from \"../../provider\";\nimport { PENDING_CONVERSATION_ID } from \"../../utils/id\";\nimport { AvatarStack } from \"../components/avatar-stack\";\nimport { Button } from \"../components/button\";\nimport { ConversationButtonLink } from \"../components/conversation-button-link\";\nimport { Header } from \"../components/header\";\nimport Icon from \"../components/icons\";\nimport { TextEffect } from \"../components/text-effect\";\nimport { Watermark } from \"../components/watermark\";\nimport { useSupportNavigation } from \"../store/support-store\";\nimport { Text, useSupportText } from \"../text\";\n\n/**\n * Home page component for the support widget.\n *\n * Displays:\n * - Welcome message with available agents\n * - Quick action buttons\n * - Last open conversation (if any)\n * - Button to start new conversation\n * - Link to conversation history\n *\n * All logic is handled by the useHomePage hook.\n */\nexport const HomePage = () => {\n\tconst { website, availableHumanAgents, visitor, quickOptions } = useSupport();\n\tconst { navigate } = useSupportNavigation();\n\tconst text = useSupportText();\n\n\t// Main home page hook - handles all logic\n\tconst home = useHomePage({\n\t\tonStartConversation: (initialMessage) => {\n\t\t\tnavigate({\n\t\t\t\tpage: \"CONVERSATION\",\n\t\t\t\tparams: {\n\t\t\t\t\tconversationId: PENDING_CONVERSATION_ID,\n\t\t\t\t\tinitialMessage,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tonOpenConversation: (conversationId) => {\n\t\t\tnavigate({\n\t\t\t\tpage: \"CONVERSATION\",\n\t\t\t\tparams: {\n\t\t\t\t\tconversationId,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tonOpenConversationHistory: () => {\n\t\t\tnavigate({\n\t\t\t\tpage: \"CONVERSATION_HISTORY\",\n\t\t\t});\n\t\t},\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t<Header>{/* <NavigationTab /> */}</Header>\n\t\t\t<div className=\"sticky top-4 flex flex-1 items-center justify-center\">\n\t\t\t\t<div className=\"flex flex-col items-center gap-2\">\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\tclassName=\"flex flex-col items-center justify-center gap-2\"\n\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tdelay: 0.1,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tvariants={{\n\t\t\t\t\t\t\thidden: { opacity: 0, y: 20, filter: \"blur(12px)\" },\n\t\t\t\t\t\t\tvisible: { opacity: 1, y: 0, filter: \"blur(0px)\" },\n\t\t\t\t\t\t\texit: { opacity: 0, y: 20, filter: \"blur(12px)\" },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<AvatarStack\n\t\t\t\t\t\t\taiAgents={website?.availableAIAgents || []}\n\t\t\t\t\t\t\thumanAgents={availableHumanAgents}\n\t\t\t\t\t\t\tsize={44}\n\t\t\t\t\t\t\tspacing={32}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tas=\"p\"\n\t\t\t\t\t\t\tclassName=\"mb-4 text-co-primary/80 text-sm\"\n\t\t\t\t\t\t\ttextKey=\"page.home.tagline\"\n\t\t\t\t\t\t\tvariables={{ websiteName: website?.name ?? null }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</motion.div>\n\n\t\t\t\t\t<TextEffect\n\t\t\t\t\t\tas=\"h2\"\n\t\t\t\t\t\tclassName=\"max-w-xs text-balance text-center font-co-sans text-2xl leading-normal\"\n\t\t\t\t\t\tdelay={0.5}\n\t\t\t\t\t\tpreset=\"fade-in-blur\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{text(\"page.home.greeting\", {\n\t\t\t\t\t\t\tvisitorName: visitor?.contact?.name ?? undefined,\n\t\t\t\t\t\t})}\n\t\t\t\t\t</TextEffect>\n\n\t\t\t\t\t{quickOptions.length > 0 && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\tclassName=\"mt-6 inline-flex gap-2\"\n\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\tdelay: 1.3,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tvariants={{\n\t\t\t\t\t\t\t\thidden: { opacity: 0, y: 20, filter: \"blur(12px)\" },\n\t\t\t\t\t\t\t\tvisible: { opacity: 1, y: 0, filter: \"blur(0px)\" },\n\t\t\t\t\t\t\t\texit: { opacity: 0, y: 20, filter: \"blur(12px)\" },\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{quickOptions?.map((option) => (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-full border-dashed\"\n\t\t\t\t\t\t\t\t\tkey={option}\n\t\t\t\t\t\t\t\t\tonClick={() => home.startConversation(option)}\n\t\t\t\t\t\t\t\t\tsize=\"default\"\n\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-shrink-0 flex-col items-center justify-center gap-2 px-6 pb-4\">\n\t\t\t\t{home.availableConversationsCount > 0 && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tclassName=\"relative w-full text-co-primary/40 text-xs hover:text-co-primary\"\n\t\t\t\t\t\tonClick={home.openConversationHistory}\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\ttextKey=\"page.home.history.more\"\n\t\t\t\t\t\t\tvariables={{ count: home.availableConversationsCount }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\n\t\t\t\t{home.lastOpenConversation && (\n\t\t\t\t\t<div className=\"flex w-full flex-col overflow-clip rounded-md border border-co-border/80\">\n\t\t\t\t\t\t<ConversationButtonLink\n\t\t\t\t\t\t\tclassName=\"rounded-none\"\n\t\t\t\t\t\t\tconversation={home.lastOpenConversation}\n\t\t\t\t\t\t\tkey={home.lastOpenConversation.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (home.lastOpenConversation) {\n\t\t\t\t\t\t\t\t\thome.openConversation(home.lastOpenConversation.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"sticky bottom-4 z-10 flex w-full flex-col items-center gap-2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tclassName=\"relative w-full justify-between\"\n\t\t\t\t\t\tonClick={() => home.startConversation()}\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tclassName=\"-translate-y-1/2 absolute top-1/2 right-4 size-3 text-co-primary/60 transition-transform duration-200 group-hover/btn:translate-x-0.5 group-hover/btn:text-co-primary\"\n\t\t\t\t\t\t\tname=\"arrow-right\"\n\t\t\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text as=\"span\" textKey=\"common.actions.askQuestion\" />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Watermark className=\"mt-4 mb-2\" />\n\t\t\t\t</div>\n\t\t\t\t<div />\n\t\t\t</div>\n\t\t</>\n\t);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAa,iBAAiB;CAC7B,MAAM,EAAE,SAAS,sBAAsB,SAAS,iBAAiB,YAAY;CAC7E,MAAM,EAAE,aAAa,sBAAsB;CAC3C,MAAM,OAAO,gBAAgB;CAG7B,MAAM,OAAO,YAAY;EACxB,sBAAsB,mBAAmB;AACxC,YAAS;IACR,MAAM;IACN,QAAQ;KACP,gBAAgB;KAChB;KACA;IACD,CAAC;;EAEH,qBAAqB,mBAAmB;AACvC,YAAS;IACR,MAAM;IACN,QAAQ,EACP,gBACA;IACD,CAAC;;EAEH,iCAAiC;AAChC,YAAS,EACR,MAAM,wBACN,CAAC;;EAEH,CAAC;AAEF,QACC;EACC,oBAAC,WAAyC;EAC1C,oBAAC;GAAI,WAAU;aACd,qBAAC;IAAI,WAAU;;KACd,qBAAC,OAAO;MACP,SAAQ;MACR,WAAU;MACV,MAAK;MACL,SAAQ;MACR,YAAY,EACX,OAAO,IACP;MACD,UAAU;OACT,QAAQ;QAAE,SAAS;QAAG,GAAG;QAAI,QAAQ;QAAc;OACnD,SAAS;QAAE,SAAS;QAAG,GAAG;QAAG,QAAQ;QAAa;OAClD,MAAM;QAAE,SAAS;QAAG,GAAG;QAAI,QAAQ;QAAc;OACjD;iBAED,oBAAC;OACA,UAAU,SAAS,qBAAqB,EAAE;OAC1C,aAAa;OACb,MAAM;OACN,SAAS;QACR,EACF,oBAAC;OACA,IAAG;OACH,WAAU;OACV,SAAQ;OACR,WAAW,EAAE,aAAa,SAAS,QAAQ,MAAM;QAChD;OACU;KAEb,oBAAC;MACA,IAAG;MACH,WAAU;MACV,OAAO;MACP,QAAO;gBAEN,KAAK,sBAAsB,EAC3B,aAAa,SAAS,SAAS,QAAQ,QACvC,CAAC;OACU;KAEZ,aAAa,SAAS,KACtB,oBAAC,OAAO;MACP,SAAQ;MACR,WAAU;MACV,MAAK;MACL,SAAQ;MACR,YAAY,EACX,OAAO,KACP;MACD,UAAU;OACT,QAAQ;QAAE,SAAS;QAAG,GAAG;QAAI,QAAQ;QAAc;OACnD,SAAS;QAAE,SAAS;QAAG,GAAG;QAAG,QAAQ;QAAa;OAClD,MAAM;QAAE,SAAS;QAAG,GAAG;QAAI,QAAQ;QAAc;OACjD;gBAEA,cAAc,KAAK,WACnB,oBAAC;OACA,WAAU;OAEV,eAAe,KAAK,kBAAkB,OAAO;OAC7C,MAAK;OACL,SAAQ;iBAEP;SALI,OAMG,CACR;OACU;;KAET;IACD;EACN,qBAAC;GAAI,WAAU;;IACb,KAAK,8BAA8B,KACnC,oBAAC;KACA,WAAU;KACV,SAAS,KAAK;KACd,SAAQ;eAER,oBAAC;MACA,IAAG;MACH,SAAQ;MACR,WAAW,EAAE,OAAO,KAAK,6BAA6B;OACrD;MACM;IAGT,KAAK,wBACL,oBAAC;KAAI,WAAU;eACd,oBAAC;MACA,WAAU;MACV,cAAc,KAAK;MAEnB,eAAe;AACd,WAAI,KAAK,qBACR,MAAK,iBAAiB,KAAK,qBAAqB,GAAG;;QAHhD,KAAK,qBAAqB,GAM9B;MACG;IAGP,qBAAC;KAAI,WAAU;gBACd,qBAAC;MACA,WAAU;MACV,eAAe,KAAK,mBAAmB;MACvC,MAAK;MACL,SAAQ;iBAER,oBAACA;OACA,WAAU;OACV,MAAK;OACL,SAAQ;QACP,EACF,oBAAC;OAAK,IAAG;OAAO,SAAQ;QAA+B;OAC/C,EACT,oBAAC,aAAU,WAAU,cAAc;MAC9B;IACN,oBAAC,UAAM;;IACF;KACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/support/router.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Routes between different support widget pages based on navigation state.
|
|
7
|
+
*
|
|
8
|
+
* Each page manages its own state internally via dedicated hooks,
|
|
9
|
+
* so the router simply maps navigation state to the appropriate page component.
|
|
10
|
+
*/
|
|
11
|
+
declare const SupportRouter: React.FC;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { SupportRouter };
|
|
14
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","names":[],"sources":["../../src/support/router.tsx"],"sourcesContent":[],"mappings":";;;;;;AAaA;;;;cAAa,eAAe,KAAA,CAAM"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useSupportNavigation } from "./store/support-store.js";
|
|
2
|
+
import { ArticlesPage } from "./pages/articles.js";
|
|
3
|
+
import { ConversationPage } from "./pages/conversation.js";
|
|
4
|
+
import { ConversationHistoryPage } from "./pages/conversation-history.js";
|
|
5
|
+
import { HomePage } from "./pages/home.js";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
|
|
8
|
+
//#region src/support/router.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Routes between different support widget pages based on navigation state.
|
|
11
|
+
*
|
|
12
|
+
* Each page manages its own state internally via dedicated hooks,
|
|
13
|
+
* so the router simply maps navigation state to the appropriate page component.
|
|
14
|
+
*/
|
|
15
|
+
const SupportRouter = () => {
|
|
16
|
+
const { current } = useSupportNavigation();
|
|
17
|
+
switch (current.page) {
|
|
18
|
+
case "HOME": return /* @__PURE__ */ jsx(HomePage, {});
|
|
19
|
+
case "ARTICLES": return /* @__PURE__ */ jsx(ArticlesPage, {});
|
|
20
|
+
case "CONVERSATION": return /* @__PURE__ */ jsx(ConversationPage, {
|
|
21
|
+
conversationId: current.params.conversationId,
|
|
22
|
+
initialMessage: current.params.initialMessage
|
|
23
|
+
});
|
|
24
|
+
case "CONVERSATION_HISTORY": return /* @__PURE__ */ jsx(ConversationHistoryPage, {});
|
|
25
|
+
default: return /* @__PURE__ */ jsx(HomePage, {});
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { SupportRouter };
|
|
31
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","names":["SupportRouter: React.FC"],"sources":["../../src/support/router.tsx"],"sourcesContent":["import type React from \"react\";\nimport { ArticlesPage } from \"./pages/articles\";\nimport { ConversationPage } from \"./pages/conversation\";\nimport { ConversationHistoryPage } from \"./pages/conversation-history\";\nimport { HomePage } from \"./pages/home\";\nimport { useSupportNavigation } from \"./store/support-store\";\n\n/**\n * Routes between different support widget pages based on navigation state.\n *\n * Each page manages its own state internally via dedicated hooks,\n * so the router simply maps navigation state to the appropriate page component.\n */\nexport const SupportRouter: React.FC = () => {\n\tconst { current } = useSupportNavigation();\n\n\tswitch (current.page) {\n\t\tcase \"HOME\":\n\t\t\treturn <HomePage />;\n\n\t\tcase \"ARTICLES\":\n\t\t\treturn <ArticlesPage />;\n\n\t\tcase \"CONVERSATION\":\n\t\t\treturn (\n\t\t\t\t<ConversationPage\n\t\t\t\t\tconversationId={current.params.conversationId}\n\t\t\t\t\tinitialMessage={current.params.initialMessage}\n\t\t\t\t/>\n\t\t\t);\n\n\t\tcase \"CONVERSATION_HISTORY\":\n\t\t\treturn <ConversationHistoryPage />;\n\n\t\tdefault: {\n\t\t\treturn <HomePage />;\n\t\t}\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAaA,sBAAgC;CAC5C,MAAM,EAAE,YAAY,sBAAsB;AAE1C,SAAQ,QAAQ,MAAhB;EACC,KAAK,OACJ,QAAO,oBAAC,aAAW;EAEpB,KAAK,WACJ,QAAO,oBAAC,iBAAe;EAExB,KAAK,eACJ,QACC,oBAAC;GACA,gBAAgB,QAAQ,OAAO;GAC/B,gBAAgB,QAAQ,OAAO;IAC9B;EAGJ,KAAK,uBACJ,QAAO,oBAAC,4BAA0B;EAEnC,QACC,QAAO,oBAAC,aAAW"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as _cossistant_core0 from "@cossistant/core";
|
|
2
|
+
import { SupportConfig, SupportStore, SupportStoreState } from "@cossistant/core";
|
|
3
|
+
|
|
4
|
+
//#region src/support/store/support-store.d.ts
|
|
5
|
+
type UseSupportStoreResult = SupportStoreState & Pick<SupportStore, "navigate" | "replace" | "goBack" | "open" | "close" | "toggle" | "updateConfig" | "reset">;
|
|
6
|
+
declare function useSupportStore(): UseSupportStoreResult;
|
|
7
|
+
declare const useSupportConfig: () => {
|
|
8
|
+
open: () => void;
|
|
9
|
+
close: () => void;
|
|
10
|
+
toggle: () => void;
|
|
11
|
+
mode: "floating" | "responsive";
|
|
12
|
+
size: "normal" | "larger";
|
|
13
|
+
isOpen: boolean;
|
|
14
|
+
content: {
|
|
15
|
+
home?: {
|
|
16
|
+
header?: string;
|
|
17
|
+
subheader?: string;
|
|
18
|
+
ctaLabel?: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
declare const useSupportNavigation: () => {
|
|
23
|
+
current: _cossistant_core0.NavigationState;
|
|
24
|
+
page: "HOME" | "ARTICLES" | "CONVERSATION" | "CONVERSATION_HISTORY";
|
|
25
|
+
params: {
|
|
26
|
+
conversationId: string;
|
|
27
|
+
initialMessage?: string;
|
|
28
|
+
} | undefined;
|
|
29
|
+
previousPages: _cossistant_core0.NavigationState[];
|
|
30
|
+
navigate: (state: _cossistant_core0.NavigationState) => void;
|
|
31
|
+
replace: (state: _cossistant_core0.NavigationState) => void;
|
|
32
|
+
goBack: () => void;
|
|
33
|
+
canGoBack: boolean;
|
|
34
|
+
};
|
|
35
|
+
declare const initializeSupportStore: (props: {
|
|
36
|
+
mode?: SupportConfig["mode"];
|
|
37
|
+
size?: SupportConfig["size"];
|
|
38
|
+
defaultOpen?: boolean;
|
|
39
|
+
}) => void;
|
|
40
|
+
//#endregion
|
|
41
|
+
export { UseSupportStoreResult, initializeSupportStore, useSupportConfig, useSupportNavigation, useSupportStore };
|
|
42
|
+
//# sourceMappingURL=support-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-store.d.ts","names":[],"sources":["../../../src/support/store/support-store.ts"],"sourcesContent":[],"mappings":";;;;KA8CY,qBAAA,GAAwB,oBACnC,KACC;iBAWc,eAAA,CAAA,GAAmB;cAmBtB;EAhCD,IAAA,EAAA,GAAA,GAAA,IAAA;EAAqB,KAAA,EAAA,GAAA,GAAA,IAAA;QAAG,EAAA,GAAA,GAAA,IAAA;MAElC,EAAA,UAAA,GAAA,YAAA;MADD,EAAA,QAAA,GAAA,QAAA;EAAI,MAAA,EAAA,OAAA;EAYW,OAAA,EAAA;IAmBH,IAAA,CAAA,EAAA;MAcA,MAAA,CAAA,EAAA,MAiBZ;MAAA,SAAA,CAAA,EAAA,MAAA;MAAA,QAAA,CAAA,EAAA,MAAA;;;;cAjBY;EAmBA,OAAA,EAFZ,iBAAA,CAAA,eAwBA;EAAA,IAAA,EAAA,MAAA,GAAA,UAAA,GAAA,cAAA,GAAA,sBAAA;QArBO,EAAA;IACA,cAAA,EAAA,MAAA;IAAa,cAAA,CAAA,EAAA,MAAA;;;;;;;;cAFR;SACL;SACA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
import { useMemo, useRef, useSyncExternalStore } from "react";
|
|
5
|
+
import { createSupportStore } from "@cossistant/core";
|
|
6
|
+
|
|
7
|
+
//#region src/support/store/support-store.ts
|
|
8
|
+
const storage = typeof window !== "undefined" ? window.localStorage : void 0;
|
|
9
|
+
const store = createSupportStore({ storage });
|
|
10
|
+
function useSelector(selector, isEqual = Object.is) {
|
|
11
|
+
const selectionRef = useRef(void 0);
|
|
12
|
+
const subscribe = (onStoreChange) => store.subscribe(() => {
|
|
13
|
+
onStoreChange();
|
|
14
|
+
});
|
|
15
|
+
const snapshot = useSyncExternalStore(subscribe, store.getState, store.getState);
|
|
16
|
+
const selected = selector(snapshot);
|
|
17
|
+
if (selectionRef.current === void 0 || !isEqual(selectionRef.current, selected)) selectionRef.current = selected;
|
|
18
|
+
return selectionRef.current;
|
|
19
|
+
}
|
|
20
|
+
function useSupportStore() {
|
|
21
|
+
const state = useSelector((current) => current);
|
|
22
|
+
return useMemo(() => ({
|
|
23
|
+
...state,
|
|
24
|
+
navigate: store.navigate,
|
|
25
|
+
replace: store.replace,
|
|
26
|
+
goBack: store.goBack,
|
|
27
|
+
open: store.open,
|
|
28
|
+
close: store.close,
|
|
29
|
+
toggle: store.toggle,
|
|
30
|
+
updateConfig: store.updateConfig,
|
|
31
|
+
reset: store.reset
|
|
32
|
+
}), [state]);
|
|
33
|
+
}
|
|
34
|
+
const useSupportConfig = () => {
|
|
35
|
+
const config = useSelector((state) => state.config);
|
|
36
|
+
return useMemo(() => ({
|
|
37
|
+
...config,
|
|
38
|
+
open: store.open,
|
|
39
|
+
close: store.close,
|
|
40
|
+
toggle: store.toggle
|
|
41
|
+
}), [config]);
|
|
42
|
+
};
|
|
43
|
+
const useSupportNavigation = () => {
|
|
44
|
+
const { current, previousPages } = useSelector((state) => state.navigation);
|
|
45
|
+
return useMemo(() => ({
|
|
46
|
+
current,
|
|
47
|
+
page: current.page,
|
|
48
|
+
params: current.params,
|
|
49
|
+
previousPages,
|
|
50
|
+
navigate: store.navigate,
|
|
51
|
+
replace: store.replace,
|
|
52
|
+
goBack: store.goBack,
|
|
53
|
+
canGoBack: previousPages.length > 0
|
|
54
|
+
}), [current, previousPages]);
|
|
55
|
+
};
|
|
56
|
+
const initializeSupportStore = (props) => {
|
|
57
|
+
const patch = {};
|
|
58
|
+
if (props.mode !== void 0) patch.mode = props.mode;
|
|
59
|
+
if (props.size !== void 0) patch.size = props.size;
|
|
60
|
+
if (props.defaultOpen !== void 0) patch.isOpen = props.defaultOpen;
|
|
61
|
+
if (Object.keys(patch).length > 0) store.updateConfig(patch);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
export { initializeSupportStore, useSupportConfig, useSupportNavigation, useSupportStore };
|
|
66
|
+
//# sourceMappingURL=support-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-store.js","names":["patch: Partial<SupportConfig>"],"sources":["../../../src/support/store/support-store.ts"],"sourcesContent":["\"use client\";\n\nimport {\n\tcreateSupportStore,\n\ttype SupportConfig,\n\ttype SupportStore,\n\ttype SupportStoreState,\n} from \"@cossistant/core\";\nimport { useMemo, useRef, useSyncExternalStore } from \"react\";\n\nconst storage = typeof window !== \"undefined\" ? window.localStorage : undefined;\nconst store = createSupportStore({ storage });\n\ntype Selector<T> = (state: SupportStoreState) => T;\n\ntype EqualityChecker<T> = (previous: T, next: T) => boolean;\n\nfunction useSelector<TSelected>(\n\tselector: Selector<TSelected>,\n\tisEqual: EqualityChecker<TSelected> = Object.is\n): TSelected {\n\tconst selectionRef = useRef<TSelected>(undefined);\n\n\tconst subscribe = (onStoreChange: () => void) =>\n\t\tstore.subscribe(() => {\n\t\t\tonStoreChange();\n\t\t});\n\n\tconst snapshot = useSyncExternalStore(\n\t\tsubscribe,\n\t\tstore.getState,\n\t\tstore.getState\n\t);\n\n\tconst selected = selector(snapshot);\n\n\tif (\n\t\tselectionRef.current === undefined ||\n\t\t!isEqual(selectionRef.current, selected)\n\t) {\n\t\tselectionRef.current = selected;\n\t}\n\n\treturn selectionRef.current as TSelected;\n}\n\nexport type UseSupportStoreResult = SupportStoreState &\n\tPick<\n\t\tSupportStore,\n\t\t| \"navigate\"\n\t\t| \"replace\"\n\t\t| \"goBack\"\n\t\t| \"open\"\n\t\t| \"close\"\n\t\t| \"toggle\"\n\t\t| \"updateConfig\"\n\t\t| \"reset\"\n\t>;\n\nexport function useSupportStore(): UseSupportStoreResult {\n\tconst state = useSelector((current) => current);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\t...state,\n\t\t\tnavigate: store.navigate,\n\t\t\treplace: store.replace,\n\t\t\tgoBack: store.goBack,\n\t\t\topen: store.open,\n\t\t\tclose: store.close,\n\t\t\ttoggle: store.toggle,\n\t\t\tupdateConfig: store.updateConfig,\n\t\t\treset: store.reset,\n\t\t}),\n\t\t[state]\n\t);\n}\n\nexport const useSupportConfig = () => {\n\tconst config = useSelector((state) => state.config);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\t...config,\n\t\t\topen: store.open,\n\t\t\tclose: store.close,\n\t\t\ttoggle: store.toggle,\n\t\t}),\n\t\t[config]\n\t);\n};\n\nexport const useSupportNavigation = () => {\n\tconst navigation = useSelector((state) => state.navigation);\n\tconst { current, previousPages } = navigation;\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tcurrent,\n\t\t\tpage: current.page,\n\t\t\tparams: current.params,\n\t\t\tpreviousPages,\n\t\t\tnavigate: store.navigate,\n\t\t\treplace: store.replace,\n\t\t\tgoBack: store.goBack,\n\t\t\tcanGoBack: previousPages.length > 0,\n\t\t}),\n\t\t[current, previousPages]\n\t);\n};\n\nexport const initializeSupportStore = (props: {\n\tmode?: SupportConfig[\"mode\"];\n\tsize?: SupportConfig[\"size\"];\n\tdefaultOpen?: boolean;\n}) => {\n\tconst patch: Partial<SupportConfig> = {};\n\n\tif (props.mode !== undefined) {\n\t\tpatch.mode = props.mode;\n\t}\n\n\tif (props.size !== undefined) {\n\t\tpatch.size = props.size;\n\t}\n\n\tif (props.defaultOpen !== undefined) {\n\t\tpatch.isOpen = props.defaultOpen;\n\t}\n\n\tif (Object.keys(patch).length > 0) {\n\t\tstore.updateConfig(patch);\n\t}\n};\n"],"mappings":";;;;;;;AAUA,MAAM,UAAU,OAAO,WAAW,cAAc,OAAO,eAAe;AACtE,MAAM,QAAQ,mBAAmB,EAAE,SAAS,CAAC;AAM7C,SAAS,YACR,UACA,UAAsC,OAAO,IACjC;CACZ,MAAM,eAAe,OAAkB,OAAU;CAEjD,MAAM,aAAa,kBAClB,MAAM,gBAAgB;AACrB,iBAAe;GACd;CAEH,MAAM,WAAW,qBAChB,WACA,MAAM,UACN,MAAM,SACN;CAED,MAAM,WAAW,SAAS,SAAS;AAEnC,KACC,aAAa,YAAY,UACzB,CAAC,QAAQ,aAAa,SAAS,SAAS,CAExC,cAAa,UAAU;AAGxB,QAAO,aAAa;;AAgBrB,SAAgB,kBAAyC;CACxD,MAAM,QAAQ,aAAa,YAAY,QAAQ;AAE/C,QAAO,eACC;EACN,GAAG;EACH,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,cAAc,MAAM;EACpB,OAAO,MAAM;EACb,GACD,CAAC,MAAM,CACP;;AAGF,MAAa,yBAAyB;CACrC,MAAM,SAAS,aAAa,UAAU,MAAM,OAAO;AAEnD,QAAO,eACC;EACN,GAAG;EACH,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,GACD,CAAC,OAAO,CACR;;AAGF,MAAa,6BAA6B;CAEzC,MAAM,EAAE,SAAS,kBADE,aAAa,UAAU,MAAM,WAAW;AAG3D,QAAO,eACC;EACN;EACA,MAAM,QAAQ;EACd,QAAQ,QAAQ;EAChB;EACA,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,WAAW,cAAc,SAAS;EAClC,GACD,CAAC,SAAS,cAAc,CACxB;;AAGF,MAAa,0BAA0B,UAIjC;CACL,MAAMA,QAAgC,EAAE;AAExC,KAAI,MAAM,SAAS,OAClB,OAAM,OAAO,MAAM;AAGpB,KAAI,MAAM,SAAS,OAClB,OAAM,OAAO,MAAM;AAGpB,KAAI,MAAM,gBAAgB,OACzB,OAAM,SAAS,MAAM;AAGtB,KAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAC/B,OAAM,aAAa,MAAM"}
|