@droppii-org/chat-sdk 0.6.56 → 0.7.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/dist/components/canned-response/CannedResponseBody.d.ts.map +1 -1
- package/dist/components/canned-response/CannedResponseBody.js +4 -3
- package/dist/components/canned-response/CannedResponsePanel.d.ts +9 -0
- package/dist/components/canned-response/CannedResponsePanel.d.ts.map +1 -0
- package/dist/components/canned-response/CannedResponsePanel.js +72 -0
- package/dist/components/canned-response/CannedResponseRow.d.ts +10 -0
- package/dist/components/canned-response/CannedResponseRow.d.ts.map +1 -0
- package/dist/components/canned-response/CannedResponseRow.js +6 -0
- package/dist/components/canned-response/CannedScopeChips.d.ts +10 -0
- package/dist/components/canned-response/CannedScopeChips.d.ts.map +1 -0
- package/dist/components/canned-response/CannedScopeChips.js +34 -0
- package/dist/components/canned-response/cannedScopes.d.ts +16 -0
- package/dist/components/canned-response/cannedScopes.d.ts.map +1 -0
- package/dist/components/canned-response/cannedScopes.js +39 -0
- package/dist/components/canned-response/index.d.ts.map +1 -1
- package/dist/components/canned-response/index.js +11 -10
- package/dist/components/canned-response/insertCannedContent.d.ts +7 -0
- package/dist/components/canned-response/insertCannedContent.d.ts.map +1 -0
- package/dist/components/canned-response/insertCannedContent.js +39 -0
- package/dist/components/canned-response/team/TeamItem.d.ts.map +1 -1
- package/dist/components/canned-response/team/TeamItem.js +5 -4
- package/dist/components/common/ConfirmModal.d.ts +13 -1
- package/dist/components/common/ConfirmModal.d.ts.map +1 -1
- package/dist/components/common/ConfirmModal.js +24 -6
- package/dist/components/common/DeskPanelDrawer.d.ts +17 -0
- package/dist/components/common/DeskPanelDrawer.d.ts.map +1 -0
- package/dist/components/common/DeskPanelDrawer.js +21 -0
- package/dist/components/common/DeskSidePanel.d.ts +17 -0
- package/dist/components/common/DeskSidePanel.d.ts.map +1 -0
- package/dist/components/common/DeskSidePanel.js +23 -0
- package/dist/components/common/TintedAvatar.d.ts +11 -0
- package/dist/components/common/TintedAvatar.d.ts.map +1 -0
- package/dist/components/common/TintedAvatar.js +17 -0
- package/dist/components/compose/ComposeNewMessageModal.d.ts.map +1 -1
- package/dist/components/compose/ComposeNewMessageModal.js +11 -1
- package/dist/components/conversation/ConversationByGroupItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationByGroupItem.js +10 -6
- package/dist/components/conversation/ConversationBySessionItem.d.ts +4 -1
- package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationBySessionItem.js +36 -10
- package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
- package/dist/components/conversation/DeskConversationList.js +44 -29
- package/dist/components/conversation/DeskConversationRow.d.ts +19 -0
- package/dist/components/conversation/DeskConversationRow.d.ts.map +1 -0
- package/dist/components/conversation/DeskConversationRow.js +18 -0
- package/dist/components/conversation/DeskListEmptyState.d.ts +6 -0
- package/dist/components/conversation/DeskListEmptyState.d.ts.map +1 -0
- package/dist/components/conversation/DeskListEmptyState.js +11 -0
- package/dist/components/conversation/DeskListHeader.d.ts +14 -0
- package/dist/components/conversation/DeskListHeader.d.ts.map +1 -0
- package/dist/components/conversation/DeskListHeader.js +39 -0
- package/dist/components/conversation/DeskListSkeleton.d.ts +6 -0
- package/dist/components/conversation/DeskListSkeleton.d.ts.map +1 -0
- package/dist/components/conversation/DeskListSkeleton.js +9 -0
- package/dist/components/conversation/DeskRowAvatar.d.ts +8 -0
- package/dist/components/conversation/DeskRowAvatar.d.ts.map +1 -0
- package/dist/components/conversation/DeskRowAvatar.js +6 -0
- package/dist/components/conversation/RowChip.d.ts +14 -0
- package/dist/components/conversation/RowChip.d.ts.map +1 -0
- package/dist/components/conversation/RowChip.js +11 -0
- package/dist/components/conversation/avatarTint.d.ts +6 -0
- package/dist/components/conversation/avatarTint.d.ts.map +1 -0
- package/dist/components/conversation/avatarTint.js +27 -0
- package/dist/components/conversation/folderEmptyState.d.ts +2 -0
- package/dist/components/conversation/folderEmptyState.d.ts.map +1 -0
- package/dist/components/conversation/folderEmptyState.js +14 -0
- package/dist/components/conversation/internalNotePreview.d.ts +6 -0
- package/dist/components/conversation/internalNotePreview.d.ts.map +1 -0
- package/dist/components/conversation/internalNotePreview.js +11 -0
- package/dist/components/conversation/listHeading.d.ts +19 -0
- package/dist/components/conversation/listHeading.d.ts.map +1 -0
- package/dist/components/conversation/listHeading.js +24 -0
- package/dist/components/conversation/rowDisplayName.d.ts +7 -0
- package/dist/components/conversation/rowDisplayName.d.ts.map +1 -0
- package/dist/components/conversation/rowDisplayName.js +8 -0
- package/dist/components/conversation/rowTime.d.ts +4 -0
- package/dist/components/conversation/rowTime.d.ts.map +1 -0
- package/dist/components/conversation/rowTime.js +10 -0
- package/dist/components/conversation-detail/PinLimitModal.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinLimitModal.js +3 -1
- package/dist/components/group/AddMemberModal.d.ts.map +1 -1
- package/dist/components/group/AddMemberModal.js +15 -4
- package/dist/components/group/AdminPermissionModal.d.ts +1 -0
- package/dist/components/group/AdminPermissionModal.d.ts.map +1 -1
- package/dist/components/group/AdminPermissionModal.js +38 -3
- package/dist/components/group/CreateGroupForm.d.ts +3 -1
- package/dist/components/group/CreateGroupForm.d.ts.map +1 -1
- package/dist/components/group/CreateGroupForm.js +7 -1
- package/dist/components/group/CreateGroupFormCrmView.d.ts +23 -0
- package/dist/components/group/CreateGroupFormCrmView.d.ts.map +1 -0
- package/dist/components/group/CreateGroupFormCrmView.js +25 -0
- package/dist/components/group/DisableSendPermissionConfirm.d.ts +11 -0
- package/dist/components/group/DisableSendPermissionConfirm.d.ts.map +1 -0
- package/dist/components/group/DisableSendPermissionConfirm.js +10 -0
- package/dist/components/group/GroupCompositeAvatar.d.ts.map +1 -1
- package/dist/components/group/GroupCompositeAvatar.js +39 -4
- package/dist/components/group/GroupMemberPicker.d.ts +5 -2
- package/dist/components/group/GroupMemberPicker.d.ts.map +1 -1
- package/dist/components/group/GroupMemberPicker.js +8 -42
- package/dist/components/group/GroupMemberPickerCrm.d.ts +4 -0
- package/dist/components/group/GroupMemberPickerCrm.d.ts.map +1 -0
- package/dist/components/group/GroupMemberPickerCrm.js +48 -0
- package/dist/components/group/GroupMemberPickerLegacy.d.ts +8 -0
- package/dist/components/group/GroupMemberPickerLegacy.d.ts.map +1 -0
- package/dist/components/group/GroupMemberPickerLegacy.js +46 -0
- package/dist/components/group/GroupPanelHeader.d.ts +10 -0
- package/dist/components/group/GroupPanelHeader.d.ts.map +1 -0
- package/dist/components/group/GroupPanelHeader.js +11 -0
- package/dist/components/group/MemberPermissionPanel.d.ts.map +1 -1
- package/dist/components/group/MemberPermissionPanel.js +31 -2
- package/dist/components/group/PermissionPanelCrm.d.ts +24 -0
- package/dist/components/group/PermissionPanelCrm.d.ts.map +1 -0
- package/dist/components/group/PermissionPanelCrm.js +16 -0
- package/dist/components/group/PersonAvatar.d.ts +11 -0
- package/dist/components/group/PersonAvatar.d.ts.map +1 -0
- package/dist/components/group/PersonAvatar.js +21 -0
- package/dist/components/group/crmIcon.d.ts +9 -0
- package/dist/components/group/crmIcon.d.ts.map +1 -0
- package/dist/components/group/crmIcon.js +38 -0
- package/dist/components/icon/AdaptiveIcon.d.ts +15 -0
- package/dist/components/icon/AdaptiveIcon.d.ts.map +1 -0
- package/dist/components/icon/AdaptiveIcon.js +10 -0
- package/dist/components/icon/StrokeIcon.d.ts +14 -0
- package/dist/components/icon/StrokeIcon.d.ts.map +1 -0
- package/dist/components/icon/StrokeIcon.js +5 -0
- package/dist/components/icon/strokeIconNodes.d.ts +431 -0
- package/dist/components/icon/strokeIconNodes.d.ts.map +1 -0
- package/dist/components/icon/strokeIconNodes.js +269 -0
- package/dist/components/media-collection/index.d.ts.map +1 -1
- package/dist/components/media-collection/index.js +21 -5
- package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
- package/dist/components/message/GroupMembersDrawer.js +60 -13
- package/dist/components/message/GroupMembersPanelCrm.d.ts +23 -0
- package/dist/components/message/GroupMembersPanelCrm.d.ts.map +1 -0
- package/dist/components/message/GroupMembersPanelCrm.js +55 -0
- package/dist/components/message/MessageHeader.d.ts.map +1 -1
- package/dist/components/message/MessageHeader.js +76 -27
- package/dist/components/message/MessageInfiniteScroll.d.ts +4 -2
- package/dist/components/message/MessageInfiniteScroll.d.ts.map +1 -1
- package/dist/components/message/MessageInfiniteScroll.js +1 -1
- package/dist/components/message/MessageList.d.ts +2 -1
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +12 -1
- package/dist/components/message/SelectSession.d.ts +4 -1
- package/dist/components/message/SelectSession.d.ts.map +1 -1
- package/dist/components/message/SelectSession.js +13 -4
- package/dist/components/message/UnassignedSessionFooter.js +2 -2
- package/dist/components/message/footer/ActionBar.d.ts +5 -1
- package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
- package/dist/components/message/footer/ActionBar.js +14 -1
- package/dist/components/message/footer/CannedResponsePlugin.d.ts.map +1 -1
- package/dist/components/message/footer/CannedResponsePlugin.js +18 -3
- package/dist/components/message/footer/ClosedSessionBanner.d.ts +9 -0
- package/dist/components/message/footer/ClosedSessionBanner.d.ts.map +1 -0
- package/dist/components/message/footer/ClosedSessionBanner.js +13 -0
- package/dist/components/message/footer/ComposerEditor.d.ts.map +1 -1
- package/dist/components/message/footer/ComposerEditor.js +9 -4
- package/dist/components/message/footer/ComposerTabs.d.ts +1 -2
- package/dist/components/message/footer/ComposerTabs.d.ts.map +1 -1
- package/dist/components/message/footer/ComposerTabs.js +14 -35
- package/dist/components/message/footer/CrmComposerCard.d.ts +11 -0
- package/dist/components/message/footer/CrmComposerCard.d.ts.map +1 -0
- package/dist/components/message/footer/CrmComposerCard.js +30 -0
- package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
- package/dist/components/message/footer/EnterHandler.js +3 -0
- package/dist/components/message/footer/FilePreview.js +2 -2
- package/dist/components/message/footer/LinkInputPreview.js +2 -2
- package/dist/components/message/footer/MediaActions.d.ts +2 -1
- package/dist/components/message/footer/MediaActions.d.ts.map +1 -1
- package/dist/components/message/footer/MediaActions.js +21 -4
- package/dist/components/message/footer/SessionClosedModal.d.ts +3 -1
- package/dist/components/message/footer/SessionClosedModal.d.ts.map +1 -1
- package/dist/components/message/footer/SessionClosedModal.js +6 -2
- package/dist/components/message/footer/ToolbarPlugin.d.ts +3 -1
- package/dist/components/message/footer/ToolbarPlugin.d.ts.map +1 -1
- package/dist/components/message/footer/ToolbarPlugin.js +2 -2
- package/dist/components/message/footer/clearComposerHistory.d.ts +3 -0
- package/dist/components/message/footer/clearComposerHistory.d.ts.map +1 -0
- package/dist/components/message/footer/clearComposerHistory.js +11 -0
- package/dist/components/message/footer/index.d.ts +2 -2
- package/dist/components/message/footer/index.d.ts.map +1 -1
- package/dist/components/message/footer/index.js +15 -5
- package/dist/components/message/footer/mention/MentionMenu.d.ts.map +1 -1
- package/dist/components/message/footer/mention/MentionMenu.js +4 -1
- package/dist/components/message/footer/useComposerFocusRequest.d.ts +10 -0
- package/dist/components/message/footer/useComposerFocusRequest.d.ts.map +1 -0
- package/dist/components/message/footer/useComposerFocusRequest.js +28 -0
- package/dist/components/message/groupMemberMenuCrm.d.ts +32 -0
- package/dist/components/message/groupMemberMenuCrm.d.ts.map +1 -0
- package/dist/components/message/groupMemberMenuCrm.js +83 -0
- package/dist/components/message/groupMemberTypes.d.ts +13 -0
- package/dist/components/message/groupMemberTypes.d.ts.map +1 -0
- package/dist/components/message/groupMemberTypes.js +1 -0
- package/dist/components/message/headerIconButton.d.ts +10 -0
- package/dist/components/message/headerIconButton.d.ts.map +1 -0
- package/dist/components/message/headerIconButton.js +9 -0
- package/dist/components/message/item/CrmSystemLine.d.ts +10 -0
- package/dist/components/message/item/CrmSystemLine.d.ts.map +1 -0
- package/dist/components/message/item/CrmSystemLine.js +6 -0
- package/dist/components/message/item/DateDivider.d.ts +5 -0
- package/dist/components/message/item/DateDivider.d.ts.map +1 -0
- package/dist/components/message/item/DateDivider.js +5 -0
- package/dist/components/message/item/GroupNotificationMessage.d.ts.map +1 -1
- package/dist/components/message/item/GroupNotificationMessage.js +9 -0
- package/dist/components/message/item/MemberEventSummary.d.ts +8 -0
- package/dist/components/message/item/MemberEventSummary.d.ts.map +1 -0
- package/dist/components/message/item/MemberEventSummary.js +18 -0
- package/dist/components/message/item/MessageBubble.d.ts +3 -1
- package/dist/components/message/item/MessageBubble.d.ts.map +1 -1
- package/dist/components/message/item/MessageBubble.js +27 -13
- package/dist/components/message/item/MessageMoreButton.d.ts +13 -0
- package/dist/components/message/item/MessageMoreButton.d.ts.map +1 -0
- package/dist/components/message/item/MessageMoreButton.js +42 -0
- package/dist/components/message/item/RevokeMessage.js +1 -1
- package/dist/components/message/item/SessionEventMessage.d.ts.map +1 -1
- package/dist/components/message/item/SessionEventMessage.js +13 -1
- package/dist/components/message/item/SystemLogMessage.d.ts.map +1 -1
- package/dist/components/message/item/SystemLogMessage.js +7 -0
- package/dist/components/message/item/index.d.ts.map +1 -1
- package/dist/components/message/item/index.js +64 -15
- package/dist/components/message/item/otherSenders.d.ts +7 -0
- package/dist/components/message/item/otherSenders.d.ts.map +1 -0
- package/dist/components/message/item/otherSenders.js +29 -0
- package/dist/components/message/item/textStyle.d.ts +1 -1
- package/dist/components/message/item/textStyle.d.ts.map +1 -1
- package/dist/components/message/item/textStyle.js +2 -2
- package/dist/components/message/messageKeyboardNav.d.ts +8 -0
- package/dist/components/message/messageKeyboardNav.d.ts.map +1 -0
- package/dist/components/message/messageKeyboardNav.js +24 -0
- package/dist/components/message/reply/ReplyPreviewBar.js +2 -2
- package/dist/components/message/toolbox/MessageToolboxMenu.d.ts.map +1 -1
- package/dist/components/message/toolbox/MessageToolboxMenu.js +16 -1
- package/dist/components/search-conversation/SearchAll.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchAll.js +12 -1
- package/dist/components/search-conversation/SearchDrawer.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchDrawer.js +31 -15
- package/dist/components/search-conversation/SearchMessageOnCurrentConversation.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchMessageOnCurrentConversation.js +5 -2
- package/dist/components/search-conversation/index.d.ts.map +1 -1
- package/dist/components/search-conversation/index.js +3 -1
- package/dist/components/search-conversation/item/SearchItemAsGroup.d.ts.map +1 -1
- package/dist/components/search-conversation/item/SearchItemAsGroup.js +14 -4
- package/dist/components/search-conversation/item/SearchItemAsMessage.d.ts.map +1 -1
- package/dist/components/search-conversation/item/SearchItemAsMessage.js +18 -7
- package/dist/components/search-conversation/item/SearchItemAsUser.d.ts.map +1 -1
- package/dist/components/search-conversation/item/SearchItemAsUser.js +23 -5
- package/dist/components/search-conversation/item/searchRowClass.d.ts +3 -0
- package/dist/components/search-conversation/item/searchRowClass.d.ts.map +1 -0
- package/dist/components/search-conversation/item/searchRowClass.js +5 -0
- package/dist/components/session/DeskAssignedSession.d.ts +5 -1
- package/dist/components/session/DeskAssignedSession.d.ts.map +1 -1
- package/dist/components/session/DeskAssignedSession.js +40 -12
- package/dist/components/session/DeskTeamInbox.d.ts.map +1 -1
- package/dist/components/session/DeskTeamInbox.js +15 -22
- package/dist/components/session/FolderRow.d.ts +21 -0
- package/dist/components/session/FolderRow.d.ts.map +1 -0
- package/dist/components/session/FolderRow.js +16 -0
- package/dist/components/session/SessionFolderList.d.ts +23 -0
- package/dist/components/session/SessionFolderList.d.ts.map +1 -0
- package/dist/components/session/SessionFolderList.js +27 -0
- package/dist/components/session/sessionFilters.d.ts +24 -0
- package/dist/components/session/sessionFilters.d.ts.map +1 -0
- package/dist/components/session/sessionFilters.js +80 -0
- package/dist/components/shortcut-help/ShortcutHelpModal.d.ts +8 -0
- package/dist/components/shortcut-help/ShortcutHelpModal.d.ts.map +1 -0
- package/dist/components/shortcut-help/ShortcutHelpModal.js +23 -0
- package/dist/components/thread/AssignConfirmModal.d.ts.map +1 -1
- package/dist/components/thread/AssignConfirmModal.js +4 -3
- package/dist/components/thread/EndSessionConfirm.d.ts +11 -0
- package/dist/components/thread/EndSessionConfirm.d.ts.map +1 -0
- package/dist/components/thread/EndSessionConfirm.js +31 -0
- package/dist/components/thread/EndSessionToast.d.ts +6 -0
- package/dist/components/thread/EndSessionToast.d.ts.map +1 -0
- package/dist/components/thread/EndSessionToast.js +18 -0
- package/dist/components/thread/GroupInfoBodyCrm.d.ts +46 -0
- package/dist/components/thread/GroupInfoBodyCrm.d.ts.map +1 -0
- package/dist/components/thread/GroupInfoBodyCrm.js +41 -0
- package/dist/components/thread/GroupInfoRows.d.ts +33 -0
- package/dist/components/thread/GroupInfoRows.d.ts.map +1 -0
- package/dist/components/thread/GroupInfoRows.js +18 -0
- package/dist/components/thread/GroupThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/GroupThreadInfo.js +23 -6
- package/dist/components/thread/ManualAssignPopover.d.ts +3 -1
- package/dist/components/thread/ManualAssignPopover.d.ts.map +1 -1
- package/dist/components/thread/ManualAssignPopover.js +21 -9
- package/dist/components/thread/SessionDetailCard.d.ts +6 -0
- package/dist/components/thread/SessionDetailCard.d.ts.map +1 -0
- package/dist/components/thread/SessionDetailCard.js +103 -0
- package/dist/components/thread/SessionSection.d.ts +2 -4
- package/dist/components/thread/SessionSection.d.ts.map +1 -1
- package/dist/components/thread/SessionSection.js +19 -122
- package/dist/components/thread/SessionTagPicker.d.ts +11 -0
- package/dist/components/thread/SessionTagPicker.d.ts.map +1 -0
- package/dist/components/thread/SessionTagPicker.js +27 -0
- package/dist/components/thread/SingleThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/SingleThreadInfo.js +16 -6
- package/dist/components/thread/SupportSessionPanel.d.ts +18 -0
- package/dist/components/thread/SupportSessionPanel.d.ts.map +1 -0
- package/dist/components/thread/SupportSessionPanel.js +46 -0
- package/dist/components/thread/ThreadInfo.d.ts +8 -1
- package/dist/components/thread/ThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/ThreadInfo.js +27 -29
- package/dist/components/thread/ThreadInfoHeader.d.ts +13 -0
- package/dist/components/thread/ThreadInfoHeader.d.ts.map +1 -0
- package/dist/components/thread/ThreadInfoHeader.js +11 -0
- package/dist/components/thread/UserSection.d.ts.map +1 -1
- package/dist/components/thread/UserSection.js +35 -22
- package/dist/components/thread/sessionDateFormat.d.ts +3 -0
- package/dist/components/thread/sessionDateFormat.d.ts.map +1 -0
- package/dist/components/thread/sessionDateFormat.js +13 -0
- package/dist/components/thread/sessionDuration.d.ts +5 -0
- package/dist/components/thread/sessionDuration.d.ts.map +1 -0
- package/dist/components/thread/sessionDuration.js +24 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +2 -0
- package/dist/constants/layout.d.ts +24 -0
- package/dist/constants/layout.d.ts.map +1 -0
- package/dist/constants/layout.js +23 -0
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/context/ChatContext.js +27 -1
- package/dist/hooks/canned-response/useSearchCannedAcrossScopes.d.ts +7 -0
- package/dist/hooks/canned-response/useSearchCannedAcrossScopes.d.ts.map +1 -0
- package/dist/hooks/canned-response/useSearchCannedAcrossScopes.js +46 -0
- package/dist/hooks/common/useCloseOnSidePanelOpen.d.ts +3 -0
- package/dist/hooks/common/useCloseOnSidePanelOpen.d.ts.map +1 -0
- package/dist/hooks/common/useCloseOnSidePanelOpen.js +15 -0
- package/dist/hooks/common/useDeskShortcuts.d.ts +11 -0
- package/dist/hooks/common/useDeskShortcuts.d.ts.map +1 -0
- package/dist/hooks/common/useDeskShortcuts.js +94 -0
- package/dist/hooks/common/useEscapeLayer.d.ts +3 -0
- package/dist/hooks/common/useEscapeLayer.d.ts.map +1 -0
- package/dist/hooks/common/useEscapeLayer.js +18 -0
- package/dist/hooks/common/useMediaQuery.d.ts +3 -0
- package/dist/hooks/common/useMediaQuery.d.ts.map +1 -0
- package/dist/hooks/common/useMediaQuery.js +12 -0
- package/dist/hooks/common/useSidePanel.d.ts +12 -0
- package/dist/hooks/common/useSidePanel.d.ts.map +1 -0
- package/dist/hooks/common/useSidePanel.js +32 -0
- package/dist/hooks/group/useConversationGroups.d.ts.map +1 -1
- package/dist/hooks/group/useConversationGroups.js +3 -0
- package/dist/hooks/message/useNewMessageAnnouncement.d.ts +3 -0
- package/dist/hooks/message/useNewMessageAnnouncement.d.ts.map +1 -0
- package/dist/hooks/message/useNewMessageAnnouncement.js +30 -0
- package/dist/hooks/search/useSearchGroups.js +2 -1
- package/dist/hooks/search/useSearchMessage.d.ts +3 -1
- package/dist/hooks/search/useSearchMessage.d.ts.map +1 -1
- package/dist/hooks/search/useSearchMessage.js +2 -2
- package/dist/hooks/session/useBotSessionOwnerIdentity.d.ts +12 -0
- package/dist/hooks/session/useBotSessionOwnerIdentity.d.ts.map +1 -0
- package/dist/hooks/session/useBotSessionOwnerIdentity.js +22 -0
- package/dist/hooks/session/useCloseSession.d.ts +1 -0
- package/dist/hooks/session/useCloseSession.d.ts.map +1 -1
- package/dist/hooks/session/useCloseSession.js +9 -8
- package/dist/hooks/session/useEndSession.d.ts +11 -0
- package/dist/hooks/session/useEndSession.d.ts.map +1 -0
- package/dist/hooks/session/useEndSession.js +45 -0
- package/dist/hooks/session/useGetSession.d.ts.map +1 -1
- package/dist/hooks/session/useGetSession.js +27 -6
- package/dist/hooks/session/usePendingSessionClose.d.ts +5 -0
- package/dist/hooks/session/usePendingSessionClose.d.ts.map +1 -0
- package/dist/hooks/session/usePendingSessionClose.js +12 -0
- package/dist/hooks/session/useSessionCustomerName.d.ts +3 -0
- package/dist/hooks/session/useSessionCustomerName.d.ts.map +1 -0
- package/dist/hooks/session/useSessionCustomerName.js +19 -0
- package/dist/hooks/session/useSessionFieldAutosave.d.ts +19 -0
- package/dist/hooks/session/useSessionFieldAutosave.d.ts.map +1 -0
- package/dist/hooks/session/useSessionFieldAutosave.js +52 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/locales/vi/common.json +201 -21
- package/dist/locales/vi/conversation-inbox.json +21 -2
- package/dist/screens/desk-message/DeskWorkspace.d.ts +12 -0
- package/dist/screens/desk-message/DeskWorkspace.d.ts.map +1 -0
- package/dist/screens/desk-message/DeskWorkspace.js +57 -0
- package/dist/screens/desk-message/FolderOverlay.d.ts +4 -0
- package/dist/screens/desk-message/FolderOverlay.d.ts.map +1 -0
- package/dist/screens/desk-message/FolderOverlay.js +32 -0
- package/dist/screens/desk-message/SkipLinks.d.ts +4 -0
- package/dist/screens/desk-message/SkipLinks.d.ts.map +1 -0
- package/dist/screens/desk-message/SkipLinks.js +19 -0
- package/dist/screens/desk-message/ViewportNotice.d.ts +4 -0
- package/dist/screens/desk-message/ViewportNotice.d.ts.map +1 -0
- package/dist/screens/desk-message/ViewportNotice.js +9 -0
- package/dist/screens/desk-message/index.d.ts +3 -2
- package/dist/screens/desk-message/index.d.ts.map +1 -1
- package/dist/screens/desk-message/index.js +4 -12
- package/dist/store/deskPanelHost.d.ts +13 -0
- package/dist/store/deskPanelHost.d.ts.map +1 -0
- package/dist/store/deskPanelHost.js +9 -0
- package/dist/store/escapeLayers.d.ts +15 -0
- package/dist/store/escapeLayers.d.ts.map +1 -0
- package/dist/store/escapeLayers.js +15 -0
- package/dist/store/pendingSessionClose.d.ts +19 -0
- package/dist/store/pendingSessionClose.d.ts.map +1 -0
- package/dist/store/pendingSessionClose.js +74 -0
- package/dist/store/session.d.ts +2 -1
- package/dist/store/session.d.ts.map +1 -1
- package/dist/store/session.js +4 -1
- package/dist/store/sessionFolder.d.ts +15 -0
- package/dist/store/sessionFolder.d.ts.map +1 -0
- package/dist/store/sessionFolder.js +18 -0
- package/dist/store/shortcutPrefs.d.ts +9 -0
- package/dist/store/shortcutPrefs.d.ts.map +1 -0
- package/dist/store/shortcutPrefs.js +23 -0
- package/dist/store/sidePanel.d.ts +12 -0
- package/dist/store/sidePanel.d.ts.map +1 -0
- package/dist/store/sidePanel.js +9 -0
- package/dist/store/workspaceLayout.d.ts +12 -0
- package/dist/store/workspaceLayout.d.ts.map +1 -0
- package/dist/store/workspaceLayout.js +9 -0
- package/dist/styles/global.css +1 -1
- package/dist/types/chat.d.ts +18 -0
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/dto.d.ts +2 -1
- package/dist/types/dto.d.ts.map +1 -1
- package/dist/utils/a11yClickable.d.ts +10 -0
- package/dist/utils/a11yClickable.d.ts.map +1 -0
- package/dist/utils/a11yClickable.js +15 -0
- package/dist/utils/events.d.ts +4 -0
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/headerMemberCount.d.ts +10 -0
- package/dist/utils/headerMemberCount.d.ts.map +1 -0
- package/dist/utils/headerMemberCount.js +3 -0
- package/dist/utils/memberEventRun.d.ts +16 -0
- package/dist/utils/memberEventRun.d.ts.map +1 -0
- package/dist/utils/memberEventRun.js +40 -0
- package/package.json +2 -2
- package/dist/components/session/SessionFilterMenu.d.ts +0 -15
- package/dist/components/session/SessionFilterMenu.d.ts.map +0 -1
- package/dist/components/session/SessionFilterMenu.js +0 -30
- package/dist/components/session/sessionMenuItems.d.ts +0 -28
- package/dist/components/session/sessionMenuItems.d.ts.map +0 -1
- package/dist/components/session/sessionMenuItems.js +0 -119
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { Switch, message } from "antd";
|
|
4
4
|
import ConfirmModal from "../../components/common/ConfirmModal";
|
|
5
5
|
import { useTranslation } from "react-i18next";
|
|
6
6
|
import { MessageReceiveOptType } from "@droppii-org/wasm-client-sdk";
|
|
7
|
-
import {
|
|
7
|
+
import { StrokeIcon } from "../../components/icon/StrokeIcon";
|
|
8
|
+
import TintedAvatar from "../../components/common/TintedAvatar";
|
|
8
9
|
import useConversationStore from "../../store/conversation";
|
|
9
10
|
import { useConversationDisplayData } from "../../hooks/conversation/useConversation";
|
|
10
11
|
import { useIsUserBlocked, useBlockUser } from "../../hooks/session/useBlockUser";
|
|
11
12
|
import { useDeleteConversation } from "../../hooks/session/useDeleteConversation";
|
|
12
13
|
import { useToggleConversationNotification } from "../../hooks/session/useToggleConversationNotification";
|
|
13
|
-
import
|
|
14
|
+
import ThreadInfoHeader from "./ThreadInfoHeader";
|
|
15
|
+
import { splitDisplayName } from "../../components/conversation/rowDisplayName";
|
|
16
|
+
import { useBotSessionOwnerIdentity } from "../../hooks/session/useBotSessionOwnerIdentity";
|
|
14
17
|
const SingleThreadInfo = ({ onClose }) => {
|
|
15
18
|
var _a;
|
|
16
19
|
const { t } = useTranslation();
|
|
17
20
|
const conversationData = useConversationStore((state) => state.conversationData);
|
|
18
|
-
const
|
|
21
|
+
const conversationDisplay = useConversationDisplayData(conversationData);
|
|
22
|
+
// A support thread is about its customer, as in the chat header, not the bot group.
|
|
23
|
+
const { identity: ownerIdentity } = useBotSessionOwnerIdentity(conversationData);
|
|
24
|
+
const displayName = (_a = ownerIdentity === null || ownerIdentity === void 0 ? void 0 : ownerIdentity.displayName) !== null && _a !== void 0 ? _a : conversationDisplay.displayName;
|
|
25
|
+
const avatar = ownerIdentity ? ownerIdentity.avatarUrl : conversationDisplay.avatar;
|
|
19
26
|
const conversationID = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "";
|
|
20
27
|
const peerUserID = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.userID) || "";
|
|
21
|
-
const isBot = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.peerType) === PeerType.BOT;
|
|
22
28
|
const [confirmDelete, setConfirmDelete] = useState(false);
|
|
29
|
+
const [confirmBlock, setConfirmBlock] = useState(false);
|
|
23
30
|
const [notifyEnabled, setNotifyEnabled] = useState((conversationData === null || conversationData === void 0 ? void 0 : conversationData.recvMsgOpt) !== MessageReceiveOptType.NotNotify);
|
|
24
31
|
const { isBlocked } = useIsUserBlocked(peerUserID);
|
|
25
32
|
const { mutate: toggleBlock, isPending: isTogglingBlock } = useBlockUser();
|
|
@@ -38,6 +45,7 @@ const SingleThreadInfo = ({ onClose }) => {
|
|
|
38
45
|
});
|
|
39
46
|
};
|
|
40
47
|
const handleToggleBlock = () => {
|
|
48
|
+
setConfirmBlock(false);
|
|
41
49
|
if (!peerUserID)
|
|
42
50
|
return;
|
|
43
51
|
toggleBlock({ userID: peerUserID, block: !isBlocked }, {
|
|
@@ -66,6 +74,8 @@ const SingleThreadInfo = ({ onClose }) => {
|
|
|
66
74
|
if (!conversationID) {
|
|
67
75
|
return null;
|
|
68
76
|
}
|
|
69
|
-
return (_jsxs("div", { className: "h-full w-
|
|
77
|
+
return (_jsxs("div", { className: "h-full w-full bg-white flex flex-col relative", "data-cp-name": "SingleThreadInfo", children: [_jsx(ThreadInfoHeader, { onClose: onClose }), _jsxs("div", { className: "flex-1 overflow-y-auto", children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-4", children: [_jsx(TintedAvatar, { name: splitDisplayName(displayName !== null && displayName !== void 0 ? displayName : "").name, src: avatar, size: 48 }), _jsx("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: _jsx("p", { className: "text-base font-semibold truncate", children: splitDisplayName(displayName !== null && displayName !== void 0 ? displayName : "").name }) })] }), _jsx("div", { className: "bg-gray-5 mx-4 rounded-lg overflow-hidden", children: _jsxs("div", { className: "flex items-center justify-between px-3 py-3", children: [_jsxs("span", { className: "flex items-center gap-3 text-sm", children: [_jsx(StrokeIcon, { name: "bell", size: 18 }), t("notification")] }), _jsx(Switch, { checked: notifyEnabled, onChange: handleToggleNotification, loading: isTogglingNotification })] }) }), _jsx("div", { className: "bg-gray-5 mx-4 mt-3 rounded-lg overflow-hidden", children: _jsxs("button", { type: "button", className: "flex items-center gap-3 px-3 py-3 text-left text-sm w-full", onClick: () => setConfirmBlock(true), disabled: isTogglingBlock, children: [_jsx(StrokeIcon, { name: "user-x", size: 18 }), t(isBlocked ? "unblock_user" : "block_user")] }) }), _jsx("div", { className: "flex flex-col gap-1 bg-gray-5 mx-4 mt-3 rounded-lg overflow-hidden", children: _jsxs("button", { type: "button", className: "flex items-center gap-3 px-3 py-3 text-left text-sm text-danger-600", onClick: () => setConfirmDelete(true), children: [_jsx(StrokeIcon, { name: "trash", size: 18 }), t("thread_delete_action")] }) })] }), _jsx(ConfirmModal, { open: confirmBlock, onOk: handleToggleBlock, onCancel: () => setConfirmBlock(false), title: t(isBlocked ? "unblock_user_confirm_title" : "block_user_confirm_title", {
|
|
78
|
+
name: splitDisplayName(displayName !== null && displayName !== void 0 ? displayName : "").name,
|
|
79
|
+
}), okText: t(isBlocked ? "unblock_user_confirm_ok" : "block_user_confirm_ok"), cancelText: t("action_cancel"), okType: isBlocked ? "primary" : "danger", destructive: !isBlocked, children: _jsx("p", { children: t(isBlocked ? "unblock_user_confirm_body" : "block_user_confirm_body") }) }), _jsx(ConfirmModal, { open: confirmDelete, onOk: handleConfirmDelete, onCancel: () => setConfirmDelete(false), title: t("thread_delete_confirm_title"), okText: t("thread_delete_action"), okIcon: "trash", warning: t("thread_delete_irreversible"), cancelText: t("action_cancel"), okType: "danger", destructive: true, confirmLoading: isDeleting, children: _jsx("p", { children: t("thread_delete_confirm_message") }) })] }));
|
|
70
80
|
};
|
|
71
81
|
export default SingleThreadInfo;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface SupportSessionPanelProps {
|
|
2
|
+
conversationId: string;
|
|
3
|
+
width: number;
|
|
4
|
+
/** Drawer variant only: "Thông tin" over this panel, opened from its ⓘ button. */
|
|
5
|
+
isDetailsOpen?: boolean;
|
|
6
|
+
onCloseDetails?: () => void;
|
|
7
|
+
/** `drawer` (narrow screens) adds × and an ⓘ button; `inline` is always on screen. */
|
|
8
|
+
variant: "inline" | "drawer";
|
|
9
|
+
onClose?: () => void;
|
|
10
|
+
onOpenDetails?: () => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* "Phiên hỗ trợ" for a bot support thread: customer, past sessions and the active
|
|
14
|
+
* session card. In the drawer variant, ⓘ opens "Thông tin" over it inside the same box.
|
|
15
|
+
*/
|
|
16
|
+
declare const SupportSessionPanel: ({ conversationId, width, isDetailsOpen, onCloseDetails, variant, onClose, onOpenDetails, }: SupportSessionPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export default SupportSessionPanel;
|
|
18
|
+
//# sourceMappingURL=SupportSessionPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupportSessionPanel.d.ts","sourceRoot":"","sources":["../../../src/components/thread/SupportSessionPanel.tsx"],"names":[],"mappings":"AAeA,UAAU,wBAAwB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sFAAsF;IACtF,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,QAAA,MAAM,mBAAmB,GAAI,4FAQ1B,wBAAwB,4CAgG1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Drawer } from "antd";
|
|
4
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
5
|
+
import { useTranslation } from "react-i18next";
|
|
6
|
+
import UserSection from "./UserSection";
|
|
7
|
+
import SessionSection from "./SessionSection";
|
|
8
|
+
import { SessionDetailCard } from "./SessionDetailCard";
|
|
9
|
+
import SingleThreadInfo from "./SingleThreadInfo";
|
|
10
|
+
import ThreadInfoHeader, { threadInfoIconButtonClass, } from "./ThreadInfoHeader";
|
|
11
|
+
import { StrokeIcon } from "../../components/icon/StrokeIcon";
|
|
12
|
+
import { useGetListSessionByConversation } from "../../hooks/session/useGetListSessionByConversation";
|
|
13
|
+
import { PAGE_SIZE } from "../../constants";
|
|
14
|
+
/**
|
|
15
|
+
* "Phiên hỗ trợ" for a bot support thread: customer, past sessions and the active
|
|
16
|
+
* session card. In the drawer variant, ⓘ opens "Thông tin" over it inside the same box.
|
|
17
|
+
*/
|
|
18
|
+
const SupportSessionPanel = ({ conversationId, width, isDetailsOpen = false, onCloseDetails, variant, onClose, onOpenDetails, }) => {
|
|
19
|
+
const { t } = useTranslation();
|
|
20
|
+
const [panelEl, setPanelEl] = useState(null);
|
|
21
|
+
const detailsButtonRef = useRef(null);
|
|
22
|
+
const { data: sessions, isLoading } = useGetListSessionByConversation({
|
|
23
|
+
conversationId,
|
|
24
|
+
page: 1,
|
|
25
|
+
pageSize: PAGE_SIZE.large,
|
|
26
|
+
enabled: !!conversationId,
|
|
27
|
+
});
|
|
28
|
+
const { closedSessions, activeSession } = useMemo(() => {
|
|
29
|
+
if (!sessions)
|
|
30
|
+
return { closedSessions: [], activeSession: null };
|
|
31
|
+
return {
|
|
32
|
+
closedSessions: sessions.filter((s) => s.isClosed),
|
|
33
|
+
activeSession: sessions.find((s) => !s.isClosed),
|
|
34
|
+
};
|
|
35
|
+
}, [sessions]);
|
|
36
|
+
// Focus goes back to the in-panel ⓘ button when the details drawer closes over it.
|
|
37
|
+
const wasDetailsOpen = useRef(isDetailsOpen);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
var _a;
|
|
40
|
+
if (wasDetailsOpen.current && !isDetailsOpen)
|
|
41
|
+
(_a = detailsButtonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
42
|
+
wasDetailsOpen.current = isDetailsOpen;
|
|
43
|
+
}, [isDetailsOpen]);
|
|
44
|
+
return (_jsxs("div", { ref: setPanelEl, className: "relative flex h-full shrink-0 flex-col overflow-hidden rounded-xl bg-white shadow-sm", style: { width }, "data-cp-name": "SupportSessionPanel", "data-testid": "session-info-column", children: [variant === "drawer" ? (_jsx(ThreadInfoHeader, { title: t("support_session_panel_title"), onClose: onClose, actions: _jsx("button", { ref: detailsButtonRef, type: "button", "aria-label": t("thread_info_open"), title: t("thread_info_open"), "aria-expanded": isDetailsOpen, onClick: onOpenDetails, className: threadInfoIconButtonClass, children: _jsx(StrokeIcon, { name: "info", size: 18 }) }) })) : (_jsx("div", { className: "flex h-14 shrink-0 items-center border-b border-gray-25 px-4", children: _jsx("h2", { className: "m-0 truncate text-base font-bold text-gray-900", children: t("support_session_panel_title") }) })), _jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto", children: [_jsx(UserSection, {}), _jsx(SessionSection, { sessions: closedSessions, isLoading: isLoading })] }), activeSession && (_jsx("div", { className: "max-h-[70%] shrink-0 overflow-y-auto border-t border-gray-25 bg-white p-4", "data-testid": "active-session-dock", children: _jsx(SessionDetailCard, { session: activeSession, isActive: true }, activeSession.id) })), variant === "drawer" && panelEl && (_jsx(Drawer, { open: isDetailsOpen, onClose: onCloseDetails, "aria-label": t("thread_info_title"), getContainer: panelEl, rootStyle: { position: "absolute" }, width: "100%", mask: false, closeIcon: false, destroyOnHidden: true, styles: { body: { padding: 0 }, wrapper: { boxShadow: "none" } }, children: _jsx("div", { className: "h-full", "data-testid": "thread-details-overlay", children: _jsx(SingleThreadInfo, { onClose: onCloseDetails }) }) }))] }));
|
|
45
|
+
};
|
|
46
|
+
export default SupportSessionPanel;
|
|
@@ -3,7 +3,14 @@ export interface ThreadInfoProps {
|
|
|
3
3
|
isOpen?: boolean;
|
|
4
4
|
onClose?: () => void;
|
|
5
5
|
groupConfig?: GroupThreadInfoConfig;
|
|
6
|
+
/** Element the "Phiên hỗ trợ" drawer (and its scrim) is rendered into; it must be positioned. */
|
|
7
|
+
drawerContainer?: HTMLElement | null;
|
|
8
|
+
/**
|
|
9
|
+
* Bot support threads: "Phiên hỗ trợ" stays on screen from this width and `isOpen` opens
|
|
10
|
+
* "Thông tin" like the other side panels. Below it the panel is a drawer that `isOpen` shows.
|
|
11
|
+
*/
|
|
12
|
+
supportPanelInline?: boolean;
|
|
6
13
|
}
|
|
7
|
-
declare const ThreadInfo: ({ isOpen, onClose, groupConfig }: ThreadInfoProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
14
|
+
declare const ThreadInfo: ({ isOpen, onClose, groupConfig, drawerContainer, supportPanelInline, }: ThreadInfoProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
8
15
|
export default ThreadInfo;
|
|
9
16
|
//# sourceMappingURL=ThreadInfo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadInfo.d.ts","sourceRoot":"","sources":["../../../src/components/thread/ThreadInfo.tsx"],"names":[],"mappings":"AAGA,OAAwB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ThreadInfo.d.ts","sourceRoot":"","sources":["../../../src/components/thread/ThreadInfo.tsx"],"names":[],"mappings":"AAGA,OAAwB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAU3E,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,iGAAiG;IACjG,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,QAAA,MAAM,UAAU,GAAI,wEAMjB,eAAe,mDAuEjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,44 +1,42 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
2
4
|
import useConversationStore from "../../store/conversation";
|
|
3
|
-
import UserSection from "./UserSection";
|
|
4
|
-
import SessionSection, { SessionDetailCard } from "./SessionSection";
|
|
5
5
|
import GroupThreadInfo from "./GroupThreadInfo";
|
|
6
6
|
import SingleThreadInfo from "./SingleThreadInfo";
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import { PAGE_SIZE } from "../../constants";
|
|
7
|
+
import SupportSessionPanel from "./SupportSessionPanel";
|
|
8
|
+
import { useEscapeLayer } from "../../hooks/common/useEscapeLayer";
|
|
10
9
|
import { PeerType } from "../../types/conversation";
|
|
11
10
|
import { isGroupConversation } from "../../utils/imCommon";
|
|
12
|
-
|
|
11
|
+
import { LAYOUT_WIDTHS } from "../../constants/layout";
|
|
12
|
+
import DeskSidePanel from "../../components/common/DeskSidePanel";
|
|
13
|
+
import DeskPanelDrawer from "../../components/common/DeskPanelDrawer";
|
|
14
|
+
const ThreadInfo = ({ isOpen = true, onClose, groupConfig, drawerContainer, supportPanelInline = true, }) => {
|
|
15
|
+
const { t } = useTranslation();
|
|
13
16
|
const conversationData = useConversationStore((state) => state.conversationData);
|
|
14
17
|
const conversationId = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "";
|
|
15
18
|
const isGroup = isGroupConversation(conversationData !== null && conversationData !== void 0 ? conversationData : undefined);
|
|
16
19
|
const isBot = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.peerType) === PeerType.BOT;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const { closedSessions, activeSession } = useMemo(() => {
|
|
24
|
-
if (!sessions)
|
|
25
|
-
return { closedSessions: [], activeSession: null };
|
|
26
|
-
const active = sessions.find((s) => !s.isClosed);
|
|
27
|
-
const closed = sessions.filter((s) => s.isClosed);
|
|
28
|
-
return { closedSessions: closed, activeSession: active };
|
|
29
|
-
}, [sessions]);
|
|
20
|
+
// Narrow screens only: "Thông tin" over the "Phiên hỗ trợ" drawer, opened from inside it.
|
|
21
|
+
const [isNarrowDetailsOpen, setIsNarrowDetailsOpen] = useState(false);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
setIsNarrowDetailsOpen(false);
|
|
24
|
+
}, [conversationId, isOpen]);
|
|
25
|
+
useEscapeLayer(isNarrowDetailsOpen, () => setIsNarrowDetailsOpen(false));
|
|
30
26
|
if (!conversationId) {
|
|
31
27
|
return null;
|
|
32
28
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
// "Thông tin" opens like the members, search and library panels.
|
|
30
|
+
const details = (_jsx(DeskSidePanel, { open: isOpen, label: t("thread_info_open"), onClose: () => onClose === null || onClose === void 0 ? void 0 : onClose(), children: () => isGroup && !isBot ? (
|
|
31
|
+
// Keyed so switching threads remounts it and its edit state never leaks across.
|
|
32
|
+
_jsx(GroupThreadInfo, { onClose: onClose, config: groupConfig }, conversationId)) : (_jsx("div", { className: "h-full", "data-cp-name": "ThreadInfo", "data-testid": "thread-details-overlay", children: _jsx(SingleThreadInfo, { onClose: onClose }) })) }));
|
|
33
|
+
if (!isBot)
|
|
34
|
+
return details;
|
|
35
|
+
if (supportPanelInline) {
|
|
36
|
+
return (_jsxs(_Fragment, { children: [_jsx(SupportSessionPanel, { conversationId: conversationId, width: LAYOUT_WIDTHS.infoInline, variant: "inline" }), details] }));
|
|
38
37
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return (_jsxs("div", { className: "h-full flex flex-row", "data-cp-name": "ThreadInfo", children: [isOpen && _jsx(SingleThreadInfo, { onClose: onClose }), isBot && (_jsxs("div", { className: "h-full w-[330px] bg-white shadow-md flex flex-col relative", children: [_jsxs("div", { className: `flex-grow overflow-y-auto ${activeSession ? "pb-60" : ""}`, children: [_jsx(UserSection, {}), _jsx(SessionSection, { sessions: closedSessions, isLoading: isLoading })] }), activeSession && (_jsx("div", { className: "absolute bottom-0 left-0 right-0 p-4 z-20 bg-white backdrop-blur-sm", children: _jsx(SessionDetailCard, { session: activeSession, isActive: true }) }))] }))] }));
|
|
38
|
+
return (_jsx(DeskPanelDrawer, { open: isOpen, label: t("support_session_panel_title"), onClose: () => onClose === null || onClose === void 0 ? void 0 : onClose(), container: drawerContainer,
|
|
39
|
+
// Esc closes "Thông tin" first, then the drawer.
|
|
40
|
+
keyboard: !isNarrowDetailsOpen, children: _jsx(SupportSessionPanel, { conversationId: conversationId, width: LAYOUT_WIDTHS.infoDrawer, isDetailsOpen: isNarrowDetailsOpen, onCloseDetails: () => setIsNarrowDetailsOpen(false), variant: "drawer", onClose: onClose, onOpenDetails: () => setIsNarrowDetailsOpen(true) }) }));
|
|
43
41
|
};
|
|
44
42
|
export default ThreadInfo;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
interface ThreadInfoHeaderProps {
|
|
3
|
+
/** Defaults to "Thông tin". */
|
|
4
|
+
title?: string;
|
|
5
|
+
onClose?: () => void;
|
|
6
|
+
/** Extra icon buttons placed before the close button. */
|
|
7
|
+
actions?: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare const threadInfoIconButtonClass = "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-gray-600 hover:bg-gray-5 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-200";
|
|
10
|
+
/** 56px title bar shared by the right-hand panels, inline and in the drawer. */
|
|
11
|
+
declare const ThreadInfoHeader: ({ title, onClose, actions }: ThreadInfoHeaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default ThreadInfoHeader;
|
|
13
|
+
//# sourceMappingURL=ThreadInfoHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadInfoHeader.d.ts","sourceRoot":"","sources":["../../../src/components/thread/ThreadInfoHeader.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,UAAU,qBAAqB;IAC7B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,yDAAyD;IACzD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,yBAAyB,+KACwI,CAAC;AAE/K,gFAAgF;AAChF,QAAA,MAAM,gBAAgB,GAAI,6BAA6B,qBAAqB,4CAmB3E,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { StrokeIcon } from "../../components/icon/StrokeIcon";
|
|
5
|
+
export const threadInfoIconButtonClass = "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-gray-600 hover:bg-gray-5 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-200";
|
|
6
|
+
/** 56px title bar shared by the right-hand panels, inline and in the drawer. */
|
|
7
|
+
const ThreadInfoHeader = ({ title, onClose, actions }) => {
|
|
8
|
+
const { t } = useTranslation();
|
|
9
|
+
return (_jsxs("div", { className: "flex h-14 shrink-0 items-center gap-1 border-b border-gray-25 pl-4 pr-2", children: [_jsx("h2", { className: "m-0 min-w-0 flex-1 truncate text-base font-bold text-gray-900", children: title !== null && title !== void 0 ? title : t("thread_info_title") }), actions, _jsx("button", { type: "button", "aria-label": t("thread_info_close"), title: t("thread_info_close"), onClick: onClose, className: threadInfoIconButtonClass, children: _jsx(StrokeIcon, { name: "x", size: 18 }) })] }));
|
|
10
|
+
};
|
|
11
|
+
export default ThreadInfoHeader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserSection.d.ts","sourceRoot":"","sources":["../../../src/components/thread/UserSection.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UserSection.d.ts","sourceRoot":"","sources":["../../../src/components/thread/UserSection.tsx"],"names":[],"mappings":"AAwBA,QAAA,MAAM,WAAW,+CAyJhB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1,28 +1,40 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { message } from "antd";
|
|
3
3
|
import { useGetUserSideInfo } from "../../hooks/session/useGetUserSideInfo";
|
|
4
4
|
import useConversationStore from "../../store/conversation";
|
|
5
|
-
import {
|
|
5
|
+
import { resolveSupportSessionOwnerId } from "../../utils/conversation";
|
|
6
|
+
import { StrokeIcon } from "../../components/icon/StrokeIcon";
|
|
7
|
+
import TintedAvatar from "../../components/common/TintedAvatar";
|
|
6
8
|
import { useCreateNote } from "../../hooks/session/useCreateNote";
|
|
7
9
|
import { useUpdateNote } from "../../hooks/session/useUpdateNote";
|
|
8
10
|
import { useEffect, useRef, useState } from "react";
|
|
9
11
|
import { useTranslation } from "react-i18next";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
const readExOwnerId = (ex) => {
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
try {
|
|
15
|
+
return ((_c = (_b = (_a = JSON.parse(ex || "{}")) === null || _a === void 0 ? void 0 : _a.sessionInfo) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.ownerId) || "";
|
|
16
|
+
}
|
|
17
|
+
catch (_d) {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
/** "5364d782…97b": keeps both ends of an id that would otherwise be cut at the end. */
|
|
22
|
+
const middleEllipsis = (value, head = 8, tail = 3) => value.length > head + tail + 1 ? `${value.slice(0, head)}…${value.slice(-tail)}` : value;
|
|
12
23
|
const UserSection = () => {
|
|
13
|
-
var _a, _b, _c
|
|
24
|
+
var _a, _b, _c;
|
|
14
25
|
const { t } = useTranslation();
|
|
15
26
|
const conversationData = useConversationStore((state) => state.conversationData);
|
|
16
|
-
const exConversationInfo = JSON.parse((conversationData === null || conversationData === void 0 ? void 0 : conversationData.ex) || "{}");
|
|
17
27
|
const timerRef = useRef(null);
|
|
18
28
|
const conversationId = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "";
|
|
19
|
-
|
|
29
|
+
// Core leaves ex without the session on some rows, so the owner also comes from the id.
|
|
30
|
+
const userId = readExOwnerId(conversationData === null || conversationData === void 0 ? void 0 : conversationData.ex) ||
|
|
31
|
+
resolveSupportSessionOwnerId(conversationData !== null && conversationData !== void 0 ? conversationData : undefined);
|
|
20
32
|
const { data } = useGetUserSideInfo(conversationId, userId);
|
|
21
33
|
const { mutate: createNote } = useCreateNote();
|
|
22
34
|
const { mutate: updateNote } = useUpdateNote();
|
|
23
|
-
const initialNote = (
|
|
35
|
+
const initialNote = (_b = (_a = data === null || data === void 0 ? void 0 : data.note) === null || _a === void 0 ? void 0 : _a.content) !== null && _b !== void 0 ? _b : "";
|
|
24
36
|
const [noteValue, setNoteValue] = useState(initialNote);
|
|
25
|
-
const [
|
|
37
|
+
const [isEditingNote, setIsEditingNote] = useState(false);
|
|
26
38
|
const scheduleSave = (value) => {
|
|
27
39
|
if (timerRef.current) {
|
|
28
40
|
window.clearTimeout(timerRef.current);
|
|
@@ -65,17 +77,18 @@ const UserSection = () => {
|
|
|
65
77
|
var _a, _b;
|
|
66
78
|
setNoteValue((_b = (_a = data === null || data === void 0 ? void 0 : data.note) === null || _a === void 0 ? void 0 : _a.content) !== null && _b !== void 0 ? _b : "");
|
|
67
79
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
68
|
-
}, [(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
}, [(_c = data === null || data === void 0 ? void 0 : data.note) === null || _c === void 0 ? void 0 : _c.content, conversationId, userId]);
|
|
81
|
+
const copyValue = (value) => {
|
|
82
|
+
navigator.clipboard.writeText(value);
|
|
83
|
+
message.success(t("copied_to_clipboard"));
|
|
84
|
+
};
|
|
85
|
+
const rowLabelClass = "text-gray-600";
|
|
86
|
+
const copyButtonClass = "flex h-6 w-6 shrink-0 items-center justify-center rounded-lg text-gray-600 hover:bg-gray-5";
|
|
87
|
+
const fullName = (data === null || data === void 0 ? void 0 : data.fullName) || "";
|
|
88
|
+
return (_jsxs("div", { className: "flex flex-col gap-4 px-4 py-4", "data-cp-name": "UserSection", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(TintedAvatar, { name: fullName, src: data === null || data === void 0 ? void 0 : data.avatar, size: 48 }), _jsx("div", { className: "flex min-w-0 flex-col gap-1", children: _jsx("p", { className: "m-0 truncate text-base font-semibold text-gray-900", children: fullName }) })] }), _jsxs("dl", { className: "m-0 grid grid-cols-[112px_minmax(0,1fr)] items-center gap-y-2 text-[13px]", children: [_jsx("dt", { className: rowLabelClass, children: t("user_username_label") }), _jsxs("dd", { className: "m-0 flex min-w-0 items-center gap-1 text-gray-900", children: [_jsx("span", { className: "truncate", children: (data === null || data === void 0 ? void 0 : data.username) || "" }), _jsx("button", { type: "button", className: copyButtonClass, "aria-label": t("user_copy_username"), title: t("user_copy_username"), onClick: () => copyValue((data === null || data === void 0 ? void 0 : data.username) || ""), children: _jsx(StrokeIcon, { name: "copy", size: 14 }) })] }), _jsx("dt", { className: rowLabelClass, children: t("user_id_label") }), _jsxs("dd", { className: "m-0 flex min-w-0 items-center gap-1 text-gray-900", children: [_jsx("span", { className: "truncate", title: (data === null || data === void 0 ? void 0 : data.id) || undefined, children: middleEllipsis((data === null || data === void 0 ? void 0 : data.id) || "") }), _jsx("button", { type: "button", className: copyButtonClass, "aria-label": t("user_copy_id"), title: t("user_copy_id"), onClick: () => copyValue((data === null || data === void 0 ? void 0 : data.id) || ""), children: _jsx(StrokeIcon, { name: "copy", size: 14 }) })] }), _jsx("dt", { className: `${rowLabelClass} self-start`, children: _jsx("label", { htmlFor: "customer-note", children: t("user_note_label") }) }), _jsx("dd", { className: "m-0", children: isEditingNote ? (_jsx("textarea", { id: "customer-note", autoFocus: true, rows: Math.min(Math.max(noteValue.split("\n").length, 2), 6), value: noteValue, placeholder: t("add_note"), className: "w-full resize-none rounded-lg border border-gray-50 px-2.5 py-1.5 text-[13px] text-gray-900 outline-none focus:border-primary-400", onChange: (e) => {
|
|
89
|
+
const v = e.target.value;
|
|
90
|
+
setNoteValue(v);
|
|
91
|
+
scheduleSave(v);
|
|
92
|
+
}, onBlur: () => setIsEditingNote(false) })) : (_jsx("button", { id: "customer-note", type: "button", onClick: () => setIsEditingNote(true), className: "m-0 w-full whitespace-pre-wrap break-words border-0 bg-transparent p-0 text-left text-[13px] font-medium leading-5 text-primary-500 hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-200", children: noteValue ? (_jsx("span", { className: "font-normal text-gray-900", children: noteValue })) : (t("add_note")) })) })] })] }));
|
|
80
93
|
};
|
|
81
94
|
export default UserSection;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionDateFormat.d.ts","sourceRoot":"","sources":["../../../src/components/thread/sessionDateFormat.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,GAAG,IAAI,WAI3D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,GAAG,IAAI,WAI3D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const pad = (value) => String(value).padStart(2, "0");
|
|
2
|
+
export const formatSessionTime = (dateString) => {
|
|
3
|
+
if (!dateString)
|
|
4
|
+
return "";
|
|
5
|
+
const date = new Date(dateString);
|
|
6
|
+
return `${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
7
|
+
};
|
|
8
|
+
export const formatSessionDate = (dateString) => {
|
|
9
|
+
if (!dateString)
|
|
10
|
+
return "";
|
|
11
|
+
const date = new Date(dateString);
|
|
12
|
+
return `${formatSessionTime(dateString)} ${pad(date.getDate())}/${pad(date.getMonth() + 1)}`;
|
|
13
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
type Translate = (key: string, options?: Record<string, unknown>) => string;
|
|
2
|
+
/** Human duration of a closed session ("12 phút", "1 giờ 5 phút"); "" while open or invalid. */
|
|
3
|
+
export declare const formatSessionDuration: (createdDate: string | null | undefined, closedDate: string | null | undefined, t: Translate) => string;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=sessionDuration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionDuration.d.ts","sourceRoot":"","sources":["../../../src/components/thread/sessionDuration.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;AAM5E,gGAAgG;AAChG,eAAO,MAAM,qBAAqB,GAChC,aAAa,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,YAAY,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,GAAG,SAAS,WAiBb,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const MINUTE_MS = 60 * 1000;
|
|
2
|
+
const HOUR_MS = 60 * MINUTE_MS;
|
|
3
|
+
const DAY_MS = 24 * HOUR_MS;
|
|
4
|
+
/** Human duration of a closed session ("12 phút", "1 giờ 5 phút"); "" while open or invalid. */
|
|
5
|
+
export const formatSessionDuration = (createdDate, closedDate, t) => {
|
|
6
|
+
if (!createdDate || !closedDate)
|
|
7
|
+
return "";
|
|
8
|
+
const ms = new Date(closedDate).getTime() - new Date(createdDate).getTime();
|
|
9
|
+
if (!Number.isFinite(ms) || ms < 0)
|
|
10
|
+
return "";
|
|
11
|
+
if (ms < MINUTE_MS)
|
|
12
|
+
return t("duration_under_minute");
|
|
13
|
+
if (ms < HOUR_MS) {
|
|
14
|
+
return t("duration_minutes", { count: Math.floor(ms / MINUTE_MS) });
|
|
15
|
+
}
|
|
16
|
+
if (ms < DAY_MS) {
|
|
17
|
+
const hours = Math.floor(ms / HOUR_MS);
|
|
18
|
+
const minutes = Math.floor((ms % HOUR_MS) / MINUTE_MS);
|
|
19
|
+
return minutes
|
|
20
|
+
? t("duration_hours_minutes", { hours, minutes })
|
|
21
|
+
: t("duration_hours", { count: hours });
|
|
22
|
+
}
|
|
23
|
+
return t("duration_days", { count: Math.floor(ms / DAY_MS) });
|
|
24
|
+
};
|
|
@@ -6,6 +6,7 @@ export declare const PAGE_SIZE: {
|
|
|
6
6
|
readonly large: 50;
|
|
7
7
|
};
|
|
8
8
|
export declare const VIEW_ONLY_REFRESH_INTERVAL_MS = 10000;
|
|
9
|
+
export declare const SUPPORT_SYSTEM_SENDER_ID = "00000000-0000-0000-0000-000000000000";
|
|
9
10
|
export declare const MSG_ITEM_PREFIX = "msg-item-";
|
|
10
11
|
export declare const MSG_ITEM_CONTENT_PREFIX = "msg-item-content-";
|
|
11
12
|
export declare const MSG_ITEM_BUBBLE_GROUP_PREFIX = "msg-item-bubble-group-";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,qFAC2D,CAAC;AAErF,eAAO,MAAM,SAAS;;;;;CAKZ,CAAC;AAGX,eAAO,MAAM,6BAA6B,QAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,qFAC2D,CAAC;AAErF,eAAO,MAAM,SAAS;;;;;CAKZ,CAAC;AAGX,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAGpD,eAAO,MAAM,wBAAwB,yCAAyC,CAAC;AAE/E,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAE3D,eAAO,MAAM,4BAA4B,2BAA2B,CAAC;AAMrE,eAAO,MAAM,sBAAsB,4BAA4B,CAAC"}
|
package/dist/constants/index.js
CHANGED
|
@@ -7,6 +7,8 @@ export const PAGE_SIZE = {
|
|
|
7
7
|
};
|
|
8
8
|
// A non-member viewing a public group gets no pushes, so the view polls at this pace.
|
|
9
9
|
export const VIEW_ONLY_REFRESH_INTERVAL_MS = 10000;
|
|
10
|
+
// chat-service sends bot, greeting and closing messages in support threads as the OpenIM admin.
|
|
11
|
+
export const SUPPORT_SYSTEM_SENDER_ID = "00000000-0000-0000-0000-000000000000";
|
|
10
12
|
export const MSG_ITEM_PREFIX = "msg-item-";
|
|
11
13
|
export const MSG_ITEM_CONTENT_PREFIX = "msg-item-content-";
|
|
12
14
|
// Bubble plus its pin badge, so the jump-to-message pulse moves both together.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Viewport breakpoints (px) for the CRM desk workspace. */
|
|
2
|
+
export declare const LAYOUT_BREAKPOINTS: {
|
|
3
|
+
/** Below this the desk shows a "use a wider screen" notice. */
|
|
4
|
+
readonly minWorkspace: 1024;
|
|
5
|
+
/** From this width the folder panel stays inline; below it, it overlays the list. */
|
|
6
|
+
readonly folderInline: 1600;
|
|
7
|
+
/** From this width a bot thread's "Phiên hỗ trợ" panel is always on screen; below it, a drawer. */
|
|
8
|
+
readonly supportPanelInline: 1280;
|
|
9
|
+
/** From this width the info panel sits inline; below it, it is an overlay drawer. */
|
|
10
|
+
readonly infoInline: 1600;
|
|
11
|
+
/** From this width the "new message" button shows its label; below it, an icon with a tooltip. */
|
|
12
|
+
readonly composeLabel: 1440;
|
|
13
|
+
};
|
|
14
|
+
/** Panel widths (px) of the desk workspace. */
|
|
15
|
+
export declare const LAYOUT_WIDTHS: {
|
|
16
|
+
readonly folder: 220;
|
|
17
|
+
readonly folderCollapsed: 48;
|
|
18
|
+
readonly list: 320;
|
|
19
|
+
readonly listCompact: 300;
|
|
20
|
+
readonly infoInline: 330;
|
|
21
|
+
readonly infoDrawer: 360;
|
|
22
|
+
readonly chatMin: 480;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/constants/layout.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB;IAC7B,+DAA+D;;IAE/D,qFAAqF;;IAErF,mGAAmG;;IAEnG,qFAAqF;;IAErF,kGAAkG;;CAE1F,CAAC;AAEX,+CAA+C;AAC/C,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Viewport breakpoints (px) for the CRM desk workspace. */
|
|
2
|
+
export const LAYOUT_BREAKPOINTS = {
|
|
3
|
+
/** Below this the desk shows a "use a wider screen" notice. */
|
|
4
|
+
minWorkspace: 1024,
|
|
5
|
+
/** From this width the folder panel stays inline; below it, it overlays the list. */
|
|
6
|
+
folderInline: 1600,
|
|
7
|
+
/** From this width a bot thread's "Phiên hỗ trợ" panel is always on screen; below it, a drawer. */
|
|
8
|
+
supportPanelInline: 1280,
|
|
9
|
+
/** From this width the info panel sits inline; below it, it is an overlay drawer. */
|
|
10
|
+
infoInline: 1600,
|
|
11
|
+
/** From this width the "new message" button shows its label; below it, an icon with a tooltip. */
|
|
12
|
+
composeLabel: 1440,
|
|
13
|
+
};
|
|
14
|
+
/** Panel widths (px) of the desk workspace. */
|
|
15
|
+
export const LAYOUT_WIDTHS = {
|
|
16
|
+
folder: 220,
|
|
17
|
+
folderCollapsed: 48,
|
|
18
|
+
list: 320,
|
|
19
|
+
listCompact: 300,
|
|
20
|
+
infoInline: 330,
|
|
21
|
+
infoDrawer: 360,
|
|
22
|
+
chatMin: 480,
|
|
23
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatContext.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,iBAAiB,EAGlB,MAAM,cAAc,CAAC;AAUtB,eAAO,MAAM,WAAW,0CAStB,CAAC;AAEH,eAAO,MAAM,cAAc,uBAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatContext.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,iBAAiB,EAGlB,MAAM,cAAc,CAAC;AAUtB,eAAO,MAAM,WAAW,0CAStB,CAAC;AAEH,eAAO,MAAM,cAAc,uBAAgC,CAAC;AA2B5D,eAAO,MAAM,YAAY,GAAI,sIAS1B,iBAAiB,4CAoLnB,CAAC"}
|
|
@@ -31,9 +31,22 @@ const DEFAULT_THEME = {
|
|
|
31
31
|
"--dc-color-header-icon": "#686F72",
|
|
32
32
|
"--dc-color-nav-icon": "#393E40",
|
|
33
33
|
"--dc-color-link": "#1B3FE4",
|
|
34
|
+
"--dc-composer-bg": "#A1D0FF",
|
|
35
|
+
"--dc-composer-border": "#6366F1",
|
|
36
|
+
"--dc-composer-border-focus": "#6366F1",
|
|
37
|
+
"--dc-color-bubble-mine": "rgba(0, 81, 255, 0.1)",
|
|
38
|
+
"--dc-color-bubble-mine-text": "inherit",
|
|
39
|
+
"--dc-color-bubble-other": "rgba(131, 137, 157, 0.1)",
|
|
40
|
+
"--dc-color-bubble-other-text": "inherit",
|
|
41
|
+
"--dc-color-highlight": "Mark",
|
|
42
|
+
"--dc-color-highlight-text": "MarkText",
|
|
43
|
+
"--dc-highlight-weight": "inherit",
|
|
44
|
+
"--dc-color-neutral-surface": "#EFEFEF",
|
|
45
|
+
"--dc-message-font-size": "16px",
|
|
46
|
+
"--dc-message-line-height": "160%",
|
|
34
47
|
};
|
|
35
48
|
export const ChatProvider = ({ children, config, renderCustomMessage, onNavigate, useUrlState = true, allowPinMessageWithoutPermission = false, renderGroupAccessModal, theme, }) => {
|
|
36
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
49
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
37
50
|
// The store's clearSelectedConversation touches window.history directly
|
|
38
51
|
// (it has no React context access) — mirror the flag there so bubble mode
|
|
39
52
|
// doesn't clobber the host page's own URL.
|
|
@@ -60,6 +73,19 @@ export const ChatProvider = ({ children, config, renderCustomMessage, onNavigate
|
|
|
60
73
|
"--dc-color-header-icon": (_g = theme === null || theme === void 0 ? void 0 : theme.headerIcon) !== null && _g !== void 0 ? _g : DEFAULT_THEME["--dc-color-header-icon"],
|
|
61
74
|
"--dc-color-nav-icon": (_h = theme === null || theme === void 0 ? void 0 : theme.navIcon) !== null && _h !== void 0 ? _h : DEFAULT_THEME["--dc-color-nav-icon"],
|
|
62
75
|
"--dc-color-link": (_j = theme === null || theme === void 0 ? void 0 : theme.link) !== null && _j !== void 0 ? _j : DEFAULT_THEME["--dc-color-link"],
|
|
76
|
+
"--dc-composer-bg": (_k = theme === null || theme === void 0 ? void 0 : theme.composerBg) !== null && _k !== void 0 ? _k : DEFAULT_THEME["--dc-composer-bg"],
|
|
77
|
+
"--dc-composer-border": (_l = theme === null || theme === void 0 ? void 0 : theme.composerBorder) !== null && _l !== void 0 ? _l : DEFAULT_THEME["--dc-composer-border"],
|
|
78
|
+
"--dc-composer-border-focus": (_m = theme === null || theme === void 0 ? void 0 : theme.composerBorderFocus) !== null && _m !== void 0 ? _m : DEFAULT_THEME["--dc-composer-border-focus"],
|
|
79
|
+
"--dc-color-bubble-mine": (_o = theme === null || theme === void 0 ? void 0 : theme.bubbleMine) !== null && _o !== void 0 ? _o : DEFAULT_THEME["--dc-color-bubble-mine"],
|
|
80
|
+
"--dc-color-bubble-mine-text": (_p = theme === null || theme === void 0 ? void 0 : theme.bubbleMineText) !== null && _p !== void 0 ? _p : DEFAULT_THEME["--dc-color-bubble-mine-text"],
|
|
81
|
+
"--dc-color-bubble-other": (_q = theme === null || theme === void 0 ? void 0 : theme.bubbleOther) !== null && _q !== void 0 ? _q : DEFAULT_THEME["--dc-color-bubble-other"],
|
|
82
|
+
"--dc-color-bubble-other-text": (_r = theme === null || theme === void 0 ? void 0 : theme.bubbleOtherText) !== null && _r !== void 0 ? _r : DEFAULT_THEME["--dc-color-bubble-other-text"],
|
|
83
|
+
"--dc-color-highlight": (_s = theme === null || theme === void 0 ? void 0 : theme.highlight) !== null && _s !== void 0 ? _s : DEFAULT_THEME["--dc-color-highlight"],
|
|
84
|
+
"--dc-color-highlight-text": (_t = theme === null || theme === void 0 ? void 0 : theme.highlightText) !== null && _t !== void 0 ? _t : DEFAULT_THEME["--dc-color-highlight-text"],
|
|
85
|
+
"--dc-highlight-weight": (_u = theme === null || theme === void 0 ? void 0 : theme.highlightWeight) !== null && _u !== void 0 ? _u : DEFAULT_THEME["--dc-highlight-weight"],
|
|
86
|
+
"--dc-color-neutral-surface": (_v = theme === null || theme === void 0 ? void 0 : theme.neutralSurface) !== null && _v !== void 0 ? _v : DEFAULT_THEME["--dc-color-neutral-surface"],
|
|
87
|
+
"--dc-message-font-size": (_w = theme === null || theme === void 0 ? void 0 : theme.messageFontSize) !== null && _w !== void 0 ? _w : DEFAULT_THEME["--dc-message-font-size"],
|
|
88
|
+
"--dc-message-line-height": (_x = theme === null || theme === void 0 ? void 0 : theme.messageLineHeight) !== null && _x !== void 0 ? _x : DEFAULT_THEME["--dc-message-line-height"],
|
|
63
89
|
};
|
|
64
90
|
const rootRef = useRef(null);
|
|
65
91
|
const [connectStatus, setConnectStatus] = useState(ConnectStatus.Disconnected);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CannedRow, CannedScope } from "../../components/canned-response/cannedScopes";
|
|
2
|
+
export declare const useSearchCannedAcrossScopes: (scopes: CannedScope[], shortcut: string) => {
|
|
3
|
+
rows: CannedRow[];
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
isError: boolean;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=useSearchCannedAcrossScopes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSearchCannedAcrossScopes.d.ts","sourceRoot":"","sources":["../../../src/hooks/canned-response/useSearchCannedAcrossScopes.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,SAAS,EACT,WAAW,EAEZ,MAAM,2CAA2C,CAAC;AAGnD,eAAO,MAAM,2BAA2B,GACtC,QAAQ,WAAW,EAAE,EACrB,UAAU,MAAM;;;;CA6CjB,CAAC"}
|