@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
|
@@ -7,21 +7,30 @@ import { Button, Upload, message as antdMessage } from "antd";
|
|
|
7
7
|
import clsx from "clsx";
|
|
8
8
|
import { useTranslation } from "react-i18next";
|
|
9
9
|
import EmojiPicker from "./EmojiPicker";
|
|
10
|
+
import { useEscapeLayer } from "../../../hooks/common/useEscapeLayer";
|
|
11
|
+
import { useCloseOnSidePanelOpen } from "../../../hooks/common/useCloseOnSidePanelOpen";
|
|
10
12
|
import { Icon } from "../../../components/icon";
|
|
11
13
|
import { createUploadFile, validateFile, } from "../../../utils/fileValidation";
|
|
12
14
|
import { DOCUMENT_TYPES } from "./editorConfig";
|
|
13
15
|
import CannedResponseIcon from "../../../assets/svg/canned-response";
|
|
14
16
|
import { useMessageFooterContext } from ".";
|
|
15
17
|
import useAuthStore from "../../../store/auth";
|
|
18
|
+
import { StrokeIcon } from "../../../components/icon/StrokeIcon";
|
|
16
19
|
const EmojiIcon = (_jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M7.59997 12.4C7.59997 12.4 8.49997 13.2 9.99997 13.2C11.5 13.2 12.4 12.4 12.4 12.4M14 8.39997C14 8.8418 13.6418 9.19997 13.2 9.19997C12.7581 9.19997 12.4 8.8418 12.4 8.39997C12.4 7.95814 12.7581 7.59997 13.2 7.59997C13.6418 7.59997 14 7.95814 14 8.39997ZM18 9.99997C18 14.4182 14.4182 18 9.99997 18C5.58169 18 1.99997 14.4182 1.99997 9.99997C1.99997 5.58169 5.58169 1.99997 9.99997 1.99997C14.4182 1.99997 18 5.58169 18 9.99997ZM7.59997 8.39997C7.59997 8.8418 7.2418 9.19997 6.79997 9.19997C6.35814 9.19997 5.99997 8.8418 5.99997 8.39997C5.99997 7.95814 6.35814 7.59997 6.79997 7.59997C7.2418 7.59997 7.59997 7.95814 7.59997 8.39997Z", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
|
|
17
20
|
const AttachIcon = (_jsx("svg", { width: "22", height: "22", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M15.6 10.0001V11.2001C15.6 14.5137 12.9137 17.2001 9.59998 17.2001C6.28626 17.2001 3.59998 14.5137 3.59998 11.2001V6.79999C3.59998 4.59085 5.39084 2.79999 7.59998 2.79999C9.8091 2.79999 11.6 4.59085 11.6 6.79999V11.2C11.6 12.3045 10.7045 13.2 9.59998 13.2C8.49542 13.2 7.59998 12.3045 7.59998 11.2V7.99999", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
|
|
18
|
-
export default function MediaActions({ listUploadFiles, onFilesChange, buttonClassName, showMediaUpload = true, }) {
|
|
21
|
+
export default function MediaActions({ listUploadFiles, onFilesChange, buttonClassName, showMediaUpload = true, crmComposer = false, }) {
|
|
19
22
|
const [editor] = useLexicalComposerContext();
|
|
20
23
|
const { t } = useTranslation();
|
|
21
24
|
const [showEmojiPicker, setShowEmojiPicker] = useState(false);
|
|
22
25
|
const containerRef = useRef(null);
|
|
23
26
|
const { isOpenCanned, setIsOpenCanned } = useMessageFooterContext();
|
|
24
27
|
const isCrm = useAuthStore((state) => state.isCrm);
|
|
28
|
+
useEscapeLayer(showEmojiPicker, () => setShowEmojiPicker(false));
|
|
29
|
+
useEscapeLayer(isOpenCanned, () => setIsOpenCanned(false));
|
|
30
|
+
useCloseOnSidePanelOpen(() => {
|
|
31
|
+
setShowEmojiPicker(false);
|
|
32
|
+
setIsOpenCanned(false);
|
|
33
|
+
});
|
|
25
34
|
const handleEmojiSelect = useCallback((emoji) => {
|
|
26
35
|
editor.update(() => {
|
|
27
36
|
const selection = $getSelection();
|
|
@@ -86,7 +95,15 @@ export default function MediaActions({ listUploadFiles, onFilesChange, buttonCla
|
|
|
86
95
|
document.addEventListener("mousedown", handleClickOutside);
|
|
87
96
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
88
97
|
}, []);
|
|
89
|
-
const btnClass =
|
|
90
|
-
|
|
91
|
-
|
|
98
|
+
const btnClass = crmComposer
|
|
99
|
+
? "!flex !h-8 !w-8 items-center justify-center rounded-lg p-0 text-gray-600 hover:!bg-gray-5 hover:!text-gray-900"
|
|
100
|
+
: buttonClassName !== null && buttonClassName !== void 0 ? buttonClassName : "w-8 h-8 p-0 text-gray-500 hover:text-gray-700 hover:bg-gray-100";
|
|
101
|
+
const activeCls = crmComposer
|
|
102
|
+
? "!bg-primary-25 !text-primary-500"
|
|
103
|
+
: "bg-blue-100 text-blue-600";
|
|
104
|
+
const crmLabel = (key) => crmComposer ? { "aria-label": t(key), title: t(key) } : {};
|
|
105
|
+
return (_jsxs("div", { "data-cp-name": "MediaActions", className: clsx("flex items-center relative", crmComposer ? "gap-0.5" : "gap-1"), ref: containerRef, children: [isCrm && (_jsx(Button, Object.assign({ type: "text", shape: "default", className: clsx(btnClass, isOpenCanned && activeCls), onClick: onPressCanned }, crmLabel("composer_quick_reply"), { children: crmComposer ? (_jsx(StrokeIcon, { name: "hash", size: 18 })) : (_jsx(CannedResponseIcon, { className: clsx("hover:text-gray-700", isOpenCanned && "text-blue-600") })) }))), _jsx(Button, Object.assign({ type: "text", shape: "default", className: clsx(btnClass, showEmojiPicker &&
|
|
106
|
+
(crmComposer
|
|
107
|
+
? activeCls
|
|
108
|
+
: "bg-[var(--dc-color-primary-light)] text-[var(--dc-color-primary)]")), onClick: () => setShowEmojiPicker(!showEmojiPicker) }, crmLabel("composer_emoji"), { children: crmComposer ? _jsx(StrokeIcon, { name: "smile", size: 18 }) : EmojiIcon })), showMediaUpload && (_jsxs(_Fragment, { children: [_jsx(Upload, { accept: "image/jpeg, image/png, image/jpg, video/*", beforeUpload: beforeUploadImagesAndVideo, multiple: true, onChange: handleChange, showUploadList: false, fileList: listUploadFiles, children: _jsx(Button, Object.assign({ type: "text", shape: "default", className: btnClass }, crmLabel("composer_attach_image"), { children: crmComposer ? (_jsx(StrokeIcon, { name: "image", size: 18 })) : (_jsx(Icon, { icon: "image-02-o", size: 22 })) })) }), _jsx(Upload, { accept: ".doc,.docx,.pdf", beforeUpload: beforeUploadFile, onChange: handleChange, showUploadList: false, fileList: listUploadFiles, children: _jsx(Button, Object.assign({ type: "text", shape: "default", className: btnClass }, crmLabel("composer_attach_file"), { children: crmComposer ? _jsx(StrokeIcon, { name: "paperclip", size: 18 }) : AttachIcon })) })] })), showEmojiPicker && (_jsx(EmojiPicker, { onEmojiSelect: handleEmojiSelect, onClose: () => setShowEmojiPicker(false) }))] }));
|
|
92
109
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
interface SessionClosedModalProps {
|
|
2
2
|
open: boolean;
|
|
3
3
|
loading: boolean;
|
|
4
|
+
/** Order of the closed session, shown in the reopen hint (CRM). */
|
|
5
|
+
sessionOrder?: number;
|
|
4
6
|
onReopen: () => void;
|
|
5
7
|
onCreateNew: () => void;
|
|
6
8
|
onClose: () => void;
|
|
7
9
|
}
|
|
8
|
-
declare const SessionClosedModal: ({ open, loading, onReopen, onCreateNew, onClose, }: SessionClosedModalProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
declare const SessionClosedModal: ({ open, loading, sessionOrder, onReopen, onCreateNew, onClose, }: SessionClosedModalProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
11
|
export default SessionClosedModal;
|
|
10
12
|
//# sourceMappingURL=SessionClosedModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionClosedModal.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/SessionClosedModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SessionClosedModal.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/SessionClosedModal.tsx"],"names":[],"mappings":"AAMA,UAAU,uBAAuB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,kBAAkB,GAAI,kEAOzB,uBAAuB,4CA8FzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Modal, Button } from "antd";
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
|
-
|
|
5
|
+
import useAuthStore from "../../../store/auth";
|
|
6
|
+
const SessionClosedModal = ({ open, loading, sessionOrder, onReopen, onCreateNew, onClose, }) => {
|
|
6
7
|
const { t } = useTranslation();
|
|
7
|
-
|
|
8
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
9
|
+
return (_jsx(Modal, { "data-cp-name": "SessionClosedModal", open: open, onCancel: onClose, footer: null, closable: !loading, centered: true, width: 400, maskClosable: !loading, keyboard: !loading, forceRender: !isCrm, destroyOnHidden: isCrm, children: isCrm ? (_jsxs("div", { className: "flex flex-col gap-4 pt-2", role: "alertdialog", "aria-label": t("session_closed_crm_title"), children: [_jsx("p", { className: "text-lg font-bold text-gray-900", children: t("session_closed_crm_title") }), _jsx("p", { className: "text-sm text-gray-600", children: t("session_closed_crm_description") }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Button, { type: "primary", onClick: onReopen, loading: loading, disabled: loading, children: t("session_closed_crm_reopen") }), _jsx("span", { className: "text-xs text-gray-600", children: sessionOrder
|
|
10
|
+
? t("session_closed_crm_reopen_hint", { order: sessionOrder })
|
|
11
|
+
: t("session_closed_crm_reopen_hint_no_order") })] }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Button, { onClick: onCreateNew, disabled: loading, children: t("session_closed_crm_create") }), _jsx("span", { className: "text-xs text-gray-600", children: t("session_closed_crm_create_hint") })] })] })] })) : (_jsxs("div", { className: "flex flex-col gap-4 pt-2", role: "alertdialog", "aria-label": t("session_closed_modal_title"), children: [_jsx("p", { className: "text-base font-semibold", children: t("session_closed_modal_title") }), _jsx("p", { className: "text-sm text-gray-600", children: t("session_closed_modal_description") }), _jsxs("div", { className: "flex gap-3 w-full", children: [_jsx(Button, { type: "primary", className: "flex-1", size: "large", onClick: onReopen, loading: loading, disabled: loading, children: t("session_closed_modal_reopen") }), _jsx(Button, { type: "primary", className: "flex-1", size: "large", onClick: onCreateNew, loading: loading, disabled: loading, children: t("session_closed_modal_create_new") })] })] })) }));
|
|
8
12
|
};
|
|
9
13
|
export default SessionClosedModal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarPlugin.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/ToolbarPlugin.tsx"],"names":[],"mappings":"AA4DA,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"ToolbarPlugin.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/ToolbarPlugin.tsx"],"names":[],"mappings":"AA4DA,eAAO,MAAM,aAAa,GAAI,aAAqB;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,4CA2NvE,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { useCallback, useEffect, useMemo, useState } from "react";
|
|
|
9
9
|
import { BoldOutlined, ItalicOutlined, StrikethroughOutlined, OrderedListOutlined, UnorderedListOutlined, } from "@ant-design/icons";
|
|
10
10
|
import { Button } from "antd";
|
|
11
11
|
const quoteIcon = (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("path", { d: "M5.24615 10.5714C4.5616 10.5714 3.99078 10.5715 3.53762 10.5105C3.0593 10.4462 2.62745 10.3047 2.28042 9.95769C1.9334 9.61072 1.79194 9.17887 1.72763 8.70055C1.6667 8.24737 1.66673 7.67654 1.66675 6.99199V6.91274C1.66673 6.22819 1.6667 5.65734 1.72763 5.20419C1.79194 4.72586 1.9334 4.29401 2.28043 3.94699C2.62746 3.59997 3.0593 3.4585 3.53762 3.3942C3.99078 3.33327 4.56161 3.33329 5.24615 3.33331H5.32541C6.00995 3.33329 6.5808 3.33327 7.03397 3.3942C7.51228 3.4585 7.94413 3.59997 8.29116 3.94699C8.63817 4.29401 8.77966 4.72586 8.84396 5.20419C8.90491 5.65734 8.90484 6.22817 8.90484 6.91272V6.99198C8.90484 7.67652 8.90491 8.24737 8.84396 8.70055C8.77966 9.17887 8.63817 9.61072 8.29116 9.95769C7.94413 10.3047 7.51228 10.4462 7.03397 10.5105C6.5808 10.5715 6.00998 10.5714 5.32544 10.5714H5.24615Z", fill: "currentColor" }), _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M2.84403 16.1313C2.71884 15.7295 2.94301 15.3023 3.34474 15.1772C5.71249 14.4393 7.38095 12.3426 7.38095 9.914V6.76172C7.38095 6.34094 7.72207 5.99982 8.14286 5.99982C8.56366 5.99982 8.90476 6.34094 8.90476 6.76172V9.914C8.90476 13.0731 6.73976 15.7152 3.79812 16.6319C3.39638 16.7572 2.96923 16.533 2.84403 16.1313Z", fill: "currentColor" }), _jsx("path", { d: "M14.389 10.5714C13.7044 10.5714 13.1336 10.5715 12.6804 10.5105C12.2021 10.4462 11.7703 10.3047 11.4233 9.95769C11.0762 9.61072 10.9348 9.17887 10.8704 8.70055C10.8095 8.24737 10.8096 7.67654 10.8096 6.99199V6.91274C10.8096 6.22819 10.8095 5.65734 10.8704 5.20419C10.9348 4.72586 11.0762 4.29401 11.4233 3.94699C11.7703 3.59997 12.2021 3.4585 12.6804 3.3942C13.1336 3.33327 13.7044 3.33329 14.389 3.33331H14.4682C15.1528 3.33329 15.7236 3.33327 16.1768 3.3942C16.6551 3.4585 17.087 3.59997 17.4339 3.94699C17.781 4.29401 17.9225 4.72586 17.9868 5.20419C18.0477 5.65734 18.0477 6.22817 18.0477 6.91272V6.99198C18.0477 7.67652 18.0477 8.24737 17.9868 8.70055C17.9225 9.17887 17.781 9.61072 17.4339 9.95769C17.087 10.3047 16.6551 10.4462 16.1768 10.5105C15.7236 10.5715 15.1528 10.5714 14.4682 10.5714H14.389Z", fill: "currentColor" }), _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M11.9869 16.1313C11.8617 15.7295 12.0858 15.3023 12.4876 15.1772C14.8553 14.4393 16.5238 12.3426 16.5238 9.914V6.76172C16.5238 6.34094 16.8649 5.99982 17.2857 5.99982C17.7065 5.99982 18.0476 6.34094 18.0476 6.76172V9.914C18.0476 13.0731 15.8825 15.7152 12.9409 16.6319C12.5392 16.7572 12.112 16.533 11.9869 16.1313Z", fill: "currentColor" })] }));
|
|
12
|
-
export const ToolbarPlugin = () => {
|
|
12
|
+
export const ToolbarPlugin = ({ compact = false }) => {
|
|
13
13
|
const [editor] = useLexicalComposerContext();
|
|
14
14
|
const [activeMarks, setActiveMarks] = useState([]);
|
|
15
15
|
const formatTextButtons = useMemo(() => {
|
|
@@ -153,7 +153,7 @@ export const ToolbarPlugin = () => {
|
|
|
153
153
|
removeSelectionListener();
|
|
154
154
|
};
|
|
155
155
|
}, [editor]);
|
|
156
|
-
return (_jsxs("div", { "data-cp-name": "ToolbarPlugin", className: "flex items-center gap-2 px-4 pt-1", children: [formatTextButtons.map((button) => {
|
|
156
|
+
return (_jsxs("div", { "data-cp-name": "ToolbarPlugin", className: compact ? "flex items-center gap-1" : "flex items-center gap-2 px-4 pt-1", children: [formatTextButtons.map((button) => {
|
|
157
157
|
const { icon, onPress, key, isActive } = button;
|
|
158
158
|
return (_jsx(Button, { type: "text", shape: "default", className: getButtonClasses(isActive), onClick: onPress, children: icon }, key));
|
|
159
159
|
}), insertListButtons.map((button) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearComposerHistory.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/clearComposerHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAKpE,eAAO,MAAM,+BAA+B,GAAI,QAAQ,aAAa,SAKpE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CLEAR_HISTORY_COMMAND } from "lexical";
|
|
2
|
+
import useAuthStore from "../../../store/auth";
|
|
3
|
+
// Call in the same tick as a post-send clear, so Cmd+Z cannot bring a sent message back.
|
|
4
|
+
// Only the CRM composer mounts the history plugin; other hosts are left untouched.
|
|
5
|
+
export const clearComposerHistoryAfterUpdate = (editor) => {
|
|
6
|
+
if (!useAuthStore.getState().isCrm)
|
|
7
|
+
return;
|
|
8
|
+
editor.update(() => { }, {
|
|
9
|
+
onUpdate: () => editor.dispatchCommand(CLEAR_HISTORY_COMMAND, undefined),
|
|
10
|
+
});
|
|
11
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { MessageFooterContextType } from "../../../types/chat";
|
|
1
|
+
import { CannedCreateRequest, MessageFooterContextType } from "../../../types/chat";
|
|
2
2
|
import { ISessionResponse } from "../../../types/dto";
|
|
3
3
|
interface MessageFooterProps {
|
|
4
4
|
currentSession?: ISessionResponse;
|
|
5
|
-
openCreateCannedModal?: () => void;
|
|
5
|
+
openCreateCannedModal?: (request?: CannedCreateRequest) => void;
|
|
6
6
|
}
|
|
7
7
|
export declare const MessageFooterContext: import("react").Context<MessageFooterContextType>;
|
|
8
8
|
export declare const useMessageFooterContext: () => MessageFooterContextType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAEL,mBAAmB,EAEnB,wBAAwB,EAEzB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAwB/C,UAAU,kBAAkB;IAC1B,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,qBAAqB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACjE;AASD,eAAO,MAAM,oBAAoB,mDAc/B,CAAC;AAEH,eAAO,MAAM,uBAAuB,gCAAyC,CAAC;AAE9E,QAAA,MAAM,qBAAqB,GAAI,4CAG5B,kBAAkB,4CA+apB,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { ListPlugin } from "@lexical/react/LexicalListPlugin";
|
|
|
7
7
|
import { editorTheme, editorNodes, editorOnError } from "./editorConfig";
|
|
8
8
|
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
9
9
|
import EnterHandler from "./EnterHandler";
|
|
10
|
+
import { useComposerFocusRequest } from "./useComposerFocusRequest";
|
|
10
11
|
import ActionBar from "./ActionBar";
|
|
11
12
|
import { AccountType, } from "../../../types/chat";
|
|
12
13
|
import { useSendMessage } from "../../../hooks/message/useSendMessage";
|
|
@@ -21,15 +22,18 @@ import { useTranslation } from "react-i18next";
|
|
|
21
22
|
import PasteAndDropPlugin from "./PasteAndDropPlugin";
|
|
22
23
|
import { ReplyPreviewBar } from "../../../components/message/reply/ReplyPreviewBar";
|
|
23
24
|
import CannedResponse from "../../../components/canned-response";
|
|
25
|
+
import CannedResponsePanel from "../../../components/canned-response/CannedResponsePanel";
|
|
26
|
+
import CrmComposerCard from "./CrmComposerCard";
|
|
24
27
|
import { CannedResponseTriggerPlugin } from "./CannedResponsePlugin";
|
|
25
28
|
import { useBoolean } from "ahooks";
|
|
26
29
|
import useAuthStore from "../../../store/auth";
|
|
27
30
|
import useConversationStore from "../../../store/conversation";
|
|
28
31
|
import { useCurrentUserAccountType } from "../../../hooks/user/useCurrentUserAccountType";
|
|
29
|
-
import ComposerTabs from "./ComposerTabs";
|
|
30
32
|
import ComposerEditor from "./ComposerEditor";
|
|
31
33
|
import MentionMenu, { COMPOSER_AREA_CP_NAME } from "./mention/MentionMenu";
|
|
32
34
|
import SessionClosedModal from "./SessionClosedModal";
|
|
35
|
+
import ClosedSessionBanner from "./ClosedSessionBanner";
|
|
36
|
+
import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
|
|
33
37
|
import { useCreateSession, useReopenSession, } from "../../../hooks/session/useReopenOrCreateSession";
|
|
34
38
|
import { emit } from "../../../utils/events";
|
|
35
39
|
import { isGroupConversation } from "../../../utils/imCommon";
|
|
@@ -113,6 +117,12 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
|
|
|
113
117
|
accountType === AccountType.Staff &&
|
|
114
118
|
!isGroupConversation(conversationData !== null && conversationData !== void 0 ? conversationData : undefined);
|
|
115
119
|
const lockToInternal = Boolean((quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID) && (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.isInternal));
|
|
120
|
+
useComposerFocusRequest({
|
|
121
|
+
enabled: isCrm,
|
|
122
|
+
canUseInternal,
|
|
123
|
+
lockToInternal,
|
|
124
|
+
setIsInternal,
|
|
125
|
+
});
|
|
116
126
|
const previewUrl = useMemo(() => {
|
|
117
127
|
const urls = extractLinkUrls(composerText);
|
|
118
128
|
return urls.length === 1 ? urls[0] : null;
|
|
@@ -234,9 +244,9 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
|
|
|
234
244
|
return;
|
|
235
245
|
closeSessionClosedModal();
|
|
236
246
|
};
|
|
237
|
-
const onOpenCreateCannedModal = () => {
|
|
247
|
+
const onOpenCreateCannedModal = (request) => {
|
|
238
248
|
closeCanned();
|
|
239
|
-
openCreateCannedModal === null || openCreateCannedModal === void 0 ? void 0 : openCreateCannedModal();
|
|
249
|
+
openCreateCannedModal === null || openCreateCannedModal === void 0 ? void 0 : openCreateCannedModal(request);
|
|
240
250
|
};
|
|
241
251
|
const onOpenCanned = (query) => {
|
|
242
252
|
setCannedQuery(query);
|
|
@@ -266,8 +276,8 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
|
|
|
266
276
|
setMaxActiveCannedIndex,
|
|
267
277
|
isMentionMenuOpen,
|
|
268
278
|
setIsMentionMenuOpen,
|
|
269
|
-
}, children: [_jsxs(LexicalComposer, { initialConfig: initialConfig, children: [_jsx(Popover, { open: isOpenCanned, content: _jsx(CannedResponse, { onClose: closeCanned, openCreateCannedModal: onOpenCreateCannedModal, cannedQuery: cannedQuery }), placement: "topLeft", trigger: "click", arrow: false, classNames: {
|
|
279
|
+
}, children: [_jsxs(LexicalComposer, { initialConfig: initialConfig, children: [isCrm ? (_jsxs("div", { "data-cp-name": COMPOSER_AREA_CP_NAME, className: "relative flex flex-col gap-2 bg-white px-4 pb-4 pt-2", children: [isOpenCanned && (_jsx(CannedResponsePanel, { query: cannedQuery, viewedTeamId: currentSession === null || currentSession === void 0 ? void 0 : currentSession.teamId, onCreate: onOpenCreateCannedModal })), (currentSession === null || currentSession === void 0 ? void 0 : currentSession.isClosed) && (_jsx(ClosedSessionBanner, { closedDate: currentSession.closedDate, loading: isSessionActionLoading, onReopen: handleReopenSession, onCreateNew: handleCreateNewSession })), _jsx(ReplyPreviewBar, {}), listUploadFiles.length > 0 && _jsx(FilePreview, {}), showLinkPreview && previewUrl && (_jsx(LinkInputPreview, { url: previewUrl, onRemove: () => setIsLinkPreviewDismissed(true) })), _jsx(CrmComposerCard, { canUseInternal: canUseInternal, isInternal: isInternal, lockToInternal: lockToInternal, setIsInternal: setIsInternal, replyLocked: Boolean(currentSession === null || currentSession === void 0 ? void 0 : currentSession.isClosed) && !isInternal })] })) : (_jsx(Popover, { open: isOpenCanned, content: _jsx(CannedResponse, { onClose: closeCanned, openCreateCannedModal: () => onOpenCreateCannedModal(), cannedQuery: cannedQuery }), placement: "topLeft", trigger: "click", arrow: false, classNames: {
|
|
270
280
|
body: "mx-1 !p-0",
|
|
271
|
-
}, destroyOnHidden: true, children: _jsxs("div", { "data-cp-name": COMPOSER_AREA_CP_NAME, className: "border-t pb-2 flex flex-col gap-1 bg-white", children: [_jsx(ReplyPreviewBar, {}), listUploadFiles.length > 0 && _jsx(FilePreview, {}), showLinkPreview && previewUrl && (_jsx(LinkInputPreview, { url: previewUrl, onRemove: () => setIsLinkPreviewDismissed(true) })), _jsx(ToolbarPlugin, {}),
|
|
281
|
+
}, destroyOnHidden: true, children: _jsxs("div", { "data-cp-name": COMPOSER_AREA_CP_NAME, className: "border-t pb-2 flex flex-col gap-1 bg-white", children: [_jsx(ReplyPreviewBar, {}), listUploadFiles.length > 0 && _jsx(FilePreview, {}), showLinkPreview && previewUrl && (_jsx(LinkInputPreview, { url: previewUrl, onRemove: () => setIsLinkPreviewDismissed(true) })), _jsx(ToolbarPlugin, {}), _jsx("div", { children: _jsx(ComposerEditor, { isInternal: isInternal, placeholderText: placeholderText }) }), _jsx(ActionBar, {})] }) })), _jsx(LinkPlugin, {}), _jsx(ListPlugin, {}), isCrm && _jsx(HistoryPlugin, {}), _jsx(ComposerTextSyncPlugin, { onChange: setComposerText }), _jsx(EnterHandler, {}), _jsx(PasteAndDropPlugin, {}), isGroupConversation(conversationData !== null && conversationData !== void 0 ? conversationData : undefined) && (_jsx(MentionMenu, { groupID: conversationData === null || conversationData === void 0 ? void 0 : conversationData.groupID, isBotThread: conversationData ? isBotPeer(conversationData) : false })), isCrm && (_jsx(CannedResponseTriggerPlugin, { onClose: closeCanned, onOpen: onOpenCanned }))] }), _jsx(SessionClosedModal, { open: isSessionClosedModalOpen, loading: isSessionActionLoading, sessionOrder: currentSession === null || currentSession === void 0 ? void 0 : currentSession.order, onReopen: handleReopenSession, onCreateNew: handleCreateNewSession, onClose: handleCloseSessionModal })] }));
|
|
272
282
|
};
|
|
273
283
|
export default MessageFooterProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentionMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/message/footer/mention/MentionMenu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MentionMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/message/footer/mention/MentionMenu.tsx"],"names":[],"mappings":"AAgCA,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAWjE,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,QAAA,MAAM,WAAW,GAAI,0BAA0B,gBAAgB,mDAmJ9D,CAAC;AA+CF,eAAe,WAAW,CAAC"}
|
|
@@ -20,6 +20,8 @@ import { $createTextNode, $getRoot } from "lexical";
|
|
|
20
20
|
import { $createMentionNode, $getMentionedUserIDs } from "./MentionNode";
|
|
21
21
|
import { useMentionOptions } from "./useMentionOptions";
|
|
22
22
|
import { Avatar } from "antd";
|
|
23
|
+
import useAuthStore from "../../../../store/auth";
|
|
24
|
+
import TintedAvatar from "../../../../components/common/TintedAvatar";
|
|
23
25
|
import { useMessageFooterContext } from "..";
|
|
24
26
|
const MAX_MENTIONED_USERS = 10;
|
|
25
27
|
// Marks the composer's outer boundary (footer/index.tsx) so
|
|
@@ -35,6 +37,7 @@ class MentionTypeaheadOption extends MenuOption {
|
|
|
35
37
|
}
|
|
36
38
|
const MentionMenu = ({ groupID, isBotThread }) => {
|
|
37
39
|
const { t } = useTranslation();
|
|
40
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
38
41
|
const [editor] = useLexicalComposerContext();
|
|
39
42
|
const [query, setQuery] = useState(null);
|
|
40
43
|
const { setIsMentionMenuOpen } = useMessageFooterContext();
|
|
@@ -94,7 +97,7 @@ const MentionMenu = ({ groupID, isBotThread }) => {
|
|
|
94
97
|
// actual top edge, so the menu clears the input entirely.
|
|
95
98
|
_jsxs(MentionMenuOffset, { "data-cp-name": "MentionMenu", className: "absolute left-0 z-50 max-h-[220px] w-[260px] overflow-y-auto rounded-md border border-gray-200 bg-white py-1 shadow-lg", children: [_jsx("div", { className: "px-3 py-1 text-xs font-medium text-gray-400", children: t("mention.menu_title") }), typeaheadOptions.length === 0 ? (_jsx("div", { className: "px-3 py-2 text-sm text-gray-500", children: limitReached
|
|
96
99
|
? t("mention.limit_reached", { max: MAX_MENTIONED_USERS })
|
|
97
|
-
: t("mention.no_result") })) : (typeaheadOptions.map((option, index) => (_jsxs("button", { type: "button", className: `flex w-full items-center gap-2 px-3 py-2 text-left text-sm ${index === selectedIndex ? "bg-blue-50" : "hover:bg-gray-50"}`, onMouseEnter: () => setHighlightedIndex(index), onClick: () => selectOptionAndCleanUp(option), children: [option.option.isAtAll ? (_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-500", children: "@" })) : (_jsx(Avatar, { size: 24, src: option.option.faceURL, children: option.option.displayName.charAt(0) })), _jsx("span", { className: "min-w-0 flex-1 truncate", children: option.option.displayName })] }, option.key))))] }), anchorElementRef.current);
|
|
100
|
+
: t("mention.no_result") })) : (typeaheadOptions.map((option, index) => (_jsxs("button", { type: "button", className: `flex w-full items-center gap-2 px-3 py-2 text-left text-sm ${index === selectedIndex ? "bg-blue-50" : "hover:bg-gray-50"}`, onMouseEnter: () => setHighlightedIndex(index), onClick: () => selectOptionAndCleanUp(option), children: [option.option.isAtAll ? (_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-100 text-gray-500", children: "@" })) : isCrm ? (_jsx(TintedAvatar, { name: option.option.displayName, src: option.option.faceURL, size: 24 })) : (_jsx(Avatar, { size: 24, src: option.option.faceURL, children: option.option.displayName.charAt(0) })), _jsx("span", { className: "min-w-0 flex-1 truncate", children: option.option.displayName })] }, option.key))))] }), anchorElementRef.current);
|
|
98
101
|
} }));
|
|
99
102
|
};
|
|
100
103
|
// Renders inside Lexical's own typeahead container, which it portals
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface Options {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
canUseInternal: boolean;
|
|
4
|
+
lockToInternal: boolean;
|
|
5
|
+
setIsInternal: (isInternal: boolean) => void;
|
|
6
|
+
}
|
|
7
|
+
/** Desk shortcuts R / N: switch the composer mode, then put the cursor in the editor. */
|
|
8
|
+
export declare const useComposerFocusRequest: ({ enabled, canUseInternal, lockToInternal, setIsInternal, }: Options) => void;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=useComposerFocusRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useComposerFocusRequest.d.ts","sourceRoot":"","sources":["../../../../src/components/message/footer/useComposerFocusRequest.ts"],"names":[],"mappings":"AAIA,UAAU,OAAO;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,GAAI,6DAKrC,OAAO,SAwBT,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import emitter from "../../../utils/events";
|
|
4
|
+
/** Desk shortcuts R / N: switch the composer mode, then put the cursor in the editor. */
|
|
5
|
+
export const useComposerFocusRequest = ({ enabled, canUseInternal, lockToInternal, setIsInternal, }) => {
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (!enabled)
|
|
8
|
+
return;
|
|
9
|
+
const onRequest = ({ mode }) => {
|
|
10
|
+
if (mode === "internal") {
|
|
11
|
+
if (!canUseInternal)
|
|
12
|
+
return;
|
|
13
|
+
setIsInternal(true);
|
|
14
|
+
}
|
|
15
|
+
else if (!lockToInternal) {
|
|
16
|
+
setIsInternal(false);
|
|
17
|
+
}
|
|
18
|
+
// Defer so a mode switch has re-rendered before focusing.
|
|
19
|
+
window.setTimeout(() => {
|
|
20
|
+
var _a;
|
|
21
|
+
return (_a = document
|
|
22
|
+
.querySelector('[data-cp-name="ComposerEditor"] [contenteditable="true"]')) === null || _a === void 0 ? void 0 : _a.focus();
|
|
23
|
+
}, 0);
|
|
24
|
+
};
|
|
25
|
+
emitter.on("COMPOSER_FOCUS_REQUEST", onRequest);
|
|
26
|
+
return () => emitter.off("COMPOSER_FOCUS_REQUEST", onRequest);
|
|
27
|
+
}, [enabled, canUseInternal, lockToInternal, setIsInternal]);
|
|
28
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { MenuProps } from "antd";
|
|
2
|
+
import type { GroupPermissions } from "../../hooks/group/useGroupPermission";
|
|
3
|
+
import type { MemberDisplayItem } from "./groupMemberTypes";
|
|
4
|
+
type Translate = (key: string, options?: Record<string, unknown>) => string;
|
|
5
|
+
export interface CrmMemberMenuHandlers {
|
|
6
|
+
onToggleMute: (member: MemberDisplayItem) => void;
|
|
7
|
+
onAskMute: (member: MemberDisplayItem) => void;
|
|
8
|
+
onAskTransfer: (member: MemberDisplayItem) => void;
|
|
9
|
+
onConfigureAdmin: (member: MemberDisplayItem) => void;
|
|
10
|
+
onRemoveAdmin: (member: MemberDisplayItem) => void;
|
|
11
|
+
onAskAssignAdmin: (member: MemberDisplayItem) => void;
|
|
12
|
+
onAskRemove: (member: MemberDisplayItem) => void;
|
|
13
|
+
onLeave: () => void;
|
|
14
|
+
}
|
|
15
|
+
interface BuildCrmMemberMenuParams {
|
|
16
|
+
member: MemberDisplayItem;
|
|
17
|
+
isRealGroup: boolean;
|
|
18
|
+
permissions: GroupPermissions;
|
|
19
|
+
actingIsOwner: boolean;
|
|
20
|
+
/** Set when leaving is not allowed; shown under the item instead of failing on click. */
|
|
21
|
+
leaveBlockedReason?: string;
|
|
22
|
+
handlers: CrmMemberMenuHandlers;
|
|
23
|
+
t: Translate;
|
|
24
|
+
}
|
|
25
|
+
type MenuItems = NonNullable<MenuProps["items"]>;
|
|
26
|
+
/**
|
|
27
|
+
* CRM member menu: no always-disabled entries, a short reason under every
|
|
28
|
+
* entry that is disabled for lack of rights, owner transfer and removal set apart.
|
|
29
|
+
*/
|
|
30
|
+
export declare const buildCrmMemberMenu: ({ member, isRealGroup, permissions, actingIsOwner, leaveBlockedReason, handlers, t, }: BuildCrmMemberMenuParams) => MenuItems;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=groupMemberMenuCrm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupMemberMenuCrm.d.ts","sourceRoot":"","sources":["../../../src/components/message/groupMemberMenuCrm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,SAAS,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,gBAAgB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,gBAAgB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,CAAC,EAAE,SAAS,CAAC;CACd;AAED,KAAK,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAWjD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,uFAQhC,wBAAwB,KAAG,SAsF7B,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CrmIcon as Icon } from "../../components/group/crmIcon";
|
|
3
|
+
const label = (title, hint, tone) => (_jsxs("span", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: tone, children: title }), hint && _jsx("span", { className: "text-xs font-normal text-gray-600", children: hint })] }));
|
|
4
|
+
const DIVIDER = { type: "divider" };
|
|
5
|
+
/**
|
|
6
|
+
* CRM member menu: no always-disabled entries, a short reason under every
|
|
7
|
+
* entry that is disabled for lack of rights, owner transfer and removal set apart.
|
|
8
|
+
*/
|
|
9
|
+
export const buildCrmMemberMenu = ({ member, isRealGroup, permissions, actingIsOwner, leaveBlockedReason, handlers, t, }) => {
|
|
10
|
+
const ownerOnly = actingIsOwner ? undefined : t("group_owner_only");
|
|
11
|
+
if (member.isCurrentUser) {
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
key: "leave-group",
|
|
15
|
+
label: label(t("leave_group"), leaveBlockedReason),
|
|
16
|
+
icon: _jsx(Icon, { icon: "logout-o", size: 16 }),
|
|
17
|
+
danger: true,
|
|
18
|
+
disabled: Boolean(leaveBlockedReason),
|
|
19
|
+
onClick: handlers.onLeave,
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
const removeReason = !permissions.removeMember
|
|
24
|
+
? t("need_remove_member_permission")
|
|
25
|
+
: member.isOwner
|
|
26
|
+
? t("cannot_remove_group_owner")
|
|
27
|
+
: member.isAdmin && !actingIsOwner
|
|
28
|
+
? t("group_owner_only")
|
|
29
|
+
: undefined;
|
|
30
|
+
const adminItems = member.isAdmin
|
|
31
|
+
? [
|
|
32
|
+
{
|
|
33
|
+
key: "configure-admin-permission",
|
|
34
|
+
label: label(t("admin_permission_settings"), permissions.transferOwnership ? undefined : ownerOnly),
|
|
35
|
+
icon: _jsx(Icon, { icon: "shield-o", size: 16 }),
|
|
36
|
+
disabled: !permissions.transferOwnership,
|
|
37
|
+
onClick: () => handlers.onConfigureAdmin(member),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
key: "remove-admin",
|
|
41
|
+
label: label(t("remove_from_admin"), permissions.addAdmin ? undefined : ownerOnly),
|
|
42
|
+
icon: _jsx(Icon, { icon: "shield-fail-o", size: 16 }),
|
|
43
|
+
disabled: !permissions.addAdmin,
|
|
44
|
+
onClick: () => handlers.onRemoveAdmin(member),
|
|
45
|
+
},
|
|
46
|
+
]
|
|
47
|
+
: [
|
|
48
|
+
{
|
|
49
|
+
key: "assign-admin",
|
|
50
|
+
label: label(t("assign_as_admin"), permissions.addAdmin ? undefined : ownerOnly),
|
|
51
|
+
icon: _jsx(Icon, { icon: "shield-o", size: 16 }),
|
|
52
|
+
disabled: !permissions.addAdmin,
|
|
53
|
+
onClick: () => handlers.onAskAssignAdmin(member),
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
return [
|
|
57
|
+
{
|
|
58
|
+
key: "mute",
|
|
59
|
+
label: label(member.isSendMessageDisabled ? t("unmute_member") : t("mute_member"), permissions.removeMember ? undefined : t("need_remove_member_permission")),
|
|
60
|
+
icon: _jsx(Icon, { icon: "bell-off-o", size: 16 }),
|
|
61
|
+
disabled: !permissions.removeMember,
|
|
62
|
+
onClick: () => member.isSendMessageDisabled ? handlers.onToggleMute(member) : handlers.onAskMute(member),
|
|
63
|
+
},
|
|
64
|
+
...adminItems,
|
|
65
|
+
DIVIDER,
|
|
66
|
+
{
|
|
67
|
+
key: "transfer-owner",
|
|
68
|
+
label: label(t("transfer_owner"), permissions.transferOwnership ? t("transfer_owner_hint") : ownerOnly, permissions.transferOwnership ? "text-warning-800" : undefined),
|
|
69
|
+
icon: _jsx(Icon, { icon: "key-o", size: 16, className: permissions.transferOwnership ? "text-warning-800" : undefined }),
|
|
70
|
+
disabled: !permissions.transferOwnership,
|
|
71
|
+
onClick: () => handlers.onAskTransfer(member),
|
|
72
|
+
},
|
|
73
|
+
DIVIDER,
|
|
74
|
+
{
|
|
75
|
+
key: "remove-member",
|
|
76
|
+
label: label(t("remove_from_group"), removeReason),
|
|
77
|
+
icon: _jsx(Icon, { icon: "user-x", size: 16 }),
|
|
78
|
+
danger: true,
|
|
79
|
+
disabled: Boolean(removeReason),
|
|
80
|
+
onClick: () => handlers.onAskRemove(member),
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface MemberDisplayItem {
|
|
2
|
+
userID: string;
|
|
3
|
+
nickname: string;
|
|
4
|
+
faceURL?: string;
|
|
5
|
+
isCustomer: boolean;
|
|
6
|
+
isCurrentUser: boolean;
|
|
7
|
+
isOwner: boolean;
|
|
8
|
+
isAdmin: boolean;
|
|
9
|
+
permissions: string[];
|
|
10
|
+
isSendMessageDisabled: boolean;
|
|
11
|
+
roleLabel: string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=groupMemberTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupMemberTypes.d.ts","sourceRoot":"","sources":["../../../src/components/message/groupMemberTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { StrokeIconName } from "../../components/icon/strokeIconNodes";
|
|
2
|
+
/** Classes of a header icon button; an open panel gets the Primary-25 tile in CRM. */
|
|
3
|
+
export declare const headerIconButtonClass: (isCrm: boolean, isOpen: boolean) => string;
|
|
4
|
+
/** Mockup line icon in CRM, the icon-font glyph elsewhere. */
|
|
5
|
+
export declare const HeaderIcon: ({ isCrm, stroke, font, }: {
|
|
6
|
+
isCrm: boolean;
|
|
7
|
+
stroke: StrokeIconName;
|
|
8
|
+
font: string;
|
|
9
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=headerIconButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headerIconButton.d.ts","sourceRoot":"","sources":["../../../src/components/message/headerIconButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,EAAE,QAAQ,OAAO,WAKjE,CAAC;AAEL,8DAA8D;AAC9D,eAAO,MAAM,UAAU,GAAI,0BAIxB;IACD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,4CACgF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Icon } from "../../components/icon";
|
|
3
|
+
import { StrokeIcon } from "../../components/icon/StrokeIcon";
|
|
4
|
+
/** Classes of a header icon button; an open panel gets the Primary-25 tile in CRM. */
|
|
5
|
+
export const headerIconButtonClass = (isCrm, isOpen) => `${isCrm ? "w-9 h-9 [@container(max-width:699px)]:!w-8 [@container(max-width:699px)]:!h-8" : "w-8 h-8"} p-0 ${isCrm && isOpen
|
|
6
|
+
? "bg-primary-25 text-primary-500"
|
|
7
|
+
: "text-[var(--dc-color-header-icon)]"}`;
|
|
8
|
+
/** Mockup line icon in CRM, the icon-font glyph elsewhere. */
|
|
9
|
+
export const HeaderIcon = ({ isCrm, stroke, font, }) => isCrm ? _jsx(StrokeIcon, { name: stroke, size: 20 }) : _jsx(Icon, { icon: font, size: 22 });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { StrokeIconName } from "../../../components/icon/strokeIconNodes";
|
|
3
|
+
/** CRM timeline system line: a 14px line icon and quiet 12px text on a Gray-50 pill, centred. */
|
|
4
|
+
declare const CrmSystemLine: ({ icon, children, className, }: {
|
|
5
|
+
icon: StrokeIconName;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
className?: string;
|
|
8
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export default CrmSystemLine;
|
|
10
|
+
//# sourceMappingURL=CrmSystemLine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrmSystemLine.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/CrmSystemLine.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,iGAAiG;AACjG,QAAA,MAAM,aAAa,GAAI,gCAIpB;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,4CAUA,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { StrokeIcon } from "../../../components/icon/StrokeIcon";
|
|
4
|
+
/** CRM timeline system line: a 14px line icon and quiet 12px text on a Gray-50 pill, centred. */
|
|
5
|
+
const CrmSystemLine = ({ icon, children, className, }) => (_jsx("div", { className: "flex justify-center", children: _jsxs("span", { "data-testid": "crm-system-line", className: `inline-flex items-center gap-1.5 rounded-xl bg-gray-50 px-3 py-1 text-center text-xs text-gray-600 ${className !== null && className !== void 0 ? className : ""}`, children: [_jsx(StrokeIcon, { name: icon, size: 14 }), children] }) }));
|
|
6
|
+
export default CrmSystemLine;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateDivider.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/DateDivider.tsx"],"names":[],"mappings":"AAGA,QAAA,MAAM,WAAW,GAAI,WAAW;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,4CAShD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
// CRM day/time divider: label between two hairlines, no pill background.
|
|
4
|
+
const DateDivider = ({ label }) => (_jsxs("div", { className: "flex items-center gap-3 text-xs font-medium text-gray-600", "data-testid": "message-date-divider", children: [_jsx("span", { "aria-hidden": true, className: "h-px flex-1 bg-gray-25" }), label, _jsx("span", { "aria-hidden": true, className: "h-px flex-1 bg-gray-25" })] }));
|
|
5
|
+
export default DateDivider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupNotificationMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/GroupNotificationMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupNotificationMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/GroupNotificationMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAO3D,UAAU,iCAAiC;IACzC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,QAAA,MAAM,4BAA4B,GAAI,aAAa,iCAAiC,mDA4BnF,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useTranslation } from "react-i18next";
|
|
4
|
+
import useAuthStore from "../../../store/auth";
|
|
5
|
+
import { MessageType } from "@droppii-org/wasm-client-sdk";
|
|
4
6
|
import { getGroupNotificationText } from "../../../utils/messageLog";
|
|
7
|
+
import CrmSystemLine from "./CrmSystemLine";
|
|
5
8
|
const GroupNotificationMessageItem = ({ message }) => {
|
|
6
9
|
var _a;
|
|
10
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
7
11
|
const { t } = useTranslation();
|
|
8
12
|
const text = getGroupNotificationText(message.contentType, (_a = message.notificationElem) === null || _a === void 0 ? void 0 : _a.detail, t, message.senderNickname);
|
|
9
13
|
if (!text)
|
|
10
14
|
return null;
|
|
15
|
+
if (isCrm) {
|
|
16
|
+
const joined = message.contentType === MessageType.MemberEnter ||
|
|
17
|
+
message.contentType === MessageType.MemberInvited;
|
|
18
|
+
return _jsx(CrmSystemLine, { icon: joined ? "user-plus" : "users", children: text });
|
|
19
|
+
}
|
|
11
20
|
return (_jsx("div", { className: "flex justify-center", "data-cp-name": "GroupNotificationMessageItem", children: _jsx("span", { className: "rounded-full bg-gray-200 px-3 py-1.5 text-center text-[13px] font-normal text-gray-900", children: text }) }));
|
|
12
21
|
};
|
|
13
22
|
export default GroupNotificationMessageItem;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MessageItem } from "@droppii-org/wasm-client-sdk";
|
|
2
|
+
interface MemberEventSummaryProps {
|
|
3
|
+
/** Consecutive member events, oldest first. */
|
|
4
|
+
messages: MessageItem[];
|
|
5
|
+
}
|
|
6
|
+
declare const MemberEventSummary: ({ messages }: MemberEventSummaryProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default MemberEventSummary;
|
|
8
|
+
//# sourceMappingURL=MemberEventSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemberEventSummary.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/MemberEventSummary.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGhE,UAAU,uBAAuB;IAC/B,+CAA+C;IAC/C,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAMD,QAAA,MAAM,kBAAkB,GAAI,cAAc,uBAAuB,4CAmChE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|