stream-chat-react-native-core 9.4.0-beta.10 → 9.4.0-beta.11
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/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +7 -0
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +2 -0
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +41 -55
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js +27 -7
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.js +55 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.js +47 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.js +39 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionItem.js +45 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionItem.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionRoleItem.js +33 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionRoleItem.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.js +26 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionUserItem.js +53 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionUserItem.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.js +38 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.js.map +1 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/index.js +60 -0
- package/lib/commonjs/components/AutoCompleteInput/mentionItems/index.js.map +1 -0
- package/lib/commonjs/components/Message/Message.js.map +1 -1
- package/lib/commonjs/components/Message/MessageItemView/MessageTextContainer.js +14 -0
- package/lib/commonjs/components/Message/MessageItemView/MessageTextContainer.js.map +1 -1
- package/lib/commonjs/components/Message/MessageItemView/utils/renderText.js +69 -11
- package/lib/commonjs/components/Message/MessageItemView/utils/renderText.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MessageComposer.js +5 -12
- package/lib/commonjs/components/MessageInput/MessageComposer.js.map +1 -1
- package/lib/commonjs/components/MessageList/MessageFlashList.js +22 -3
- package/lib/commonjs/components/MessageList/MessageFlashList.js.map +1 -1
- package/lib/commonjs/components/MessageList/MessageList.js +23 -4
- package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
- package/lib/commonjs/components/UIComponents/BottomSheetModal.js +4 -17
- package/lib/commonjs/components/UIComponents/BottomSheetModal.js.map +1 -1
- package/lib/commonjs/components/UIComponents/ClippingFadeBottom.js +56 -0
- package/lib/commonjs/components/UIComponents/ClippingFadeBottom.js.map +1 -0
- package/lib/commonjs/components/UIComponents/PortalWhileClosingView.js +0 -3
- package/lib/commonjs/components/UIComponents/PortalWhileClosingView.js.map +1 -1
- package/lib/commonjs/components/UIComponents/index.js +11 -0
- package/lib/commonjs/components/UIComponents/index.js.map +1 -1
- package/lib/commonjs/components/index.js +11 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/contexts/componentsContext/defaultComponents.js +1 -0
- package/lib/commonjs/contexts/componentsContext/defaultComponents.js.map +1 -1
- package/lib/commonjs/contexts/themeContext/utils/theme.js +6 -1
- package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/commonjs/i18n/ar.json +6 -0
- package/lib/commonjs/i18n/en.json +7 -1
- package/lib/commonjs/i18n/es.json +6 -0
- package/lib/commonjs/i18n/fr.json +6 -0
- package/lib/commonjs/i18n/he.json +6 -0
- package/lib/commonjs/i18n/hi.json +6 -0
- package/lib/commonjs/i18n/it.json +6 -0
- package/lib/commonjs/i18n/ja.json +6 -0
- package/lib/commonjs/i18n/ko.json +6 -0
- package/lib/commonjs/i18n/nl.json +6 -0
- package/lib/commonjs/i18n/pt-br.json +6 -0
- package/lib/commonjs/i18n/ru.json +6 -0
- package/lib/commonjs/i18n/tr.json +6 -0
- package/lib/commonjs/icons/megaphone.js +36 -0
- package/lib/commonjs/icons/megaphone.js.map +1 -0
- package/lib/commonjs/icons/shield.js +36 -0
- package/lib/commonjs/icons/shield.js.map +1 -0
- package/lib/commonjs/store/SqliteClient.js +1 -1
- package/lib/commonjs/store/mappers/mapDraftMessageToStorable.js +8 -0
- package/lib/commonjs/store/mappers/mapDraftMessageToStorable.js.map +1 -1
- package/lib/commonjs/store/mappers/mapStorableToDraftMessage.js +8 -0
- package/lib/commonjs/store/mappers/mapStorableToDraftMessage.js.map +1 -1
- package/lib/commonjs/store/schema.js +4 -0
- package/lib/commonjs/store/schema.js.map +1 -1
- package/lib/commonjs/theme/generated/dark/StreamTokens.android.js +10 -1
- package/lib/commonjs/theme/generated/dark/StreamTokens.android.js.map +1 -1
- package/lib/commonjs/theme/generated/dark/StreamTokens.ios.js +10 -1
- package/lib/commonjs/theme/generated/dark/StreamTokens.ios.js.map +1 -1
- package/lib/commonjs/theme/generated/dark/StreamTokens.web.js +10 -1
- package/lib/commonjs/theme/generated/dark/StreamTokens.web.js.map +1 -1
- package/lib/commonjs/theme/generated/light/StreamTokens.android.js +10 -1
- package/lib/commonjs/theme/generated/light/StreamTokens.android.js.map +1 -1
- package/lib/commonjs/theme/generated/light/StreamTokens.ios.js +10 -1
- package/lib/commonjs/theme/generated/light/StreamTokens.ios.js.map +1 -1
- package/lib/commonjs/theme/generated/light/StreamTokens.web.js +10 -1
- package/lib/commonjs/theme/generated/light/StreamTokens.web.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +7 -0
- package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +2 -0
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +41 -55
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js +27 -7
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
- package/lib/module/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.js +55 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.js +47 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.js +39 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionItem.js +45 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionItem.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionRoleItem.js +33 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionRoleItem.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.js +26 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionUserItem.js +53 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/MentionUserItem.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.js +38 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.js.map +1 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/index.js +60 -0
- package/lib/module/components/AutoCompleteInput/mentionItems/index.js.map +1 -0
- package/lib/module/components/Message/Message.js.map +1 -1
- package/lib/module/components/Message/MessageItemView/MessageTextContainer.js +14 -0
- package/lib/module/components/Message/MessageItemView/MessageTextContainer.js.map +1 -1
- package/lib/module/components/Message/MessageItemView/utils/renderText.js +69 -11
- package/lib/module/components/Message/MessageItemView/utils/renderText.js.map +1 -1
- package/lib/module/components/MessageInput/MessageComposer.js +5 -12
- package/lib/module/components/MessageInput/MessageComposer.js.map +1 -1
- package/lib/module/components/MessageList/MessageFlashList.js +22 -3
- package/lib/module/components/MessageList/MessageFlashList.js.map +1 -1
- package/lib/module/components/MessageList/MessageList.js +23 -4
- package/lib/module/components/MessageList/MessageList.js.map +1 -1
- package/lib/module/components/UIComponents/BottomSheetModal.js +4 -17
- package/lib/module/components/UIComponents/BottomSheetModal.js.map +1 -1
- package/lib/module/components/UIComponents/ClippingFadeBottom.js +56 -0
- package/lib/module/components/UIComponents/ClippingFadeBottom.js.map +1 -0
- package/lib/module/components/UIComponents/PortalWhileClosingView.js +0 -3
- package/lib/module/components/UIComponents/PortalWhileClosingView.js.map +1 -1
- package/lib/module/components/UIComponents/index.js +11 -0
- package/lib/module/components/UIComponents/index.js.map +1 -1
- package/lib/module/components/index.js +11 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/contexts/componentsContext/defaultComponents.js +1 -0
- package/lib/module/contexts/componentsContext/defaultComponents.js.map +1 -1
- package/lib/module/contexts/themeContext/utils/theme.js +6 -1
- package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/module/i18n/ar.json +6 -0
- package/lib/module/i18n/en.json +7 -1
- package/lib/module/i18n/es.json +6 -0
- package/lib/module/i18n/fr.json +6 -0
- package/lib/module/i18n/he.json +6 -0
- package/lib/module/i18n/hi.json +6 -0
- package/lib/module/i18n/it.json +6 -0
- package/lib/module/i18n/ja.json +6 -0
- package/lib/module/i18n/ko.json +6 -0
- package/lib/module/i18n/nl.json +6 -0
- package/lib/module/i18n/pt-br.json +6 -0
- package/lib/module/i18n/ru.json +6 -0
- package/lib/module/i18n/tr.json +6 -0
- package/lib/module/icons/megaphone.js +36 -0
- package/lib/module/icons/megaphone.js.map +1 -0
- package/lib/module/icons/shield.js +36 -0
- package/lib/module/icons/shield.js.map +1 -0
- package/lib/module/store/SqliteClient.js +1 -1
- package/lib/module/store/mappers/mapDraftMessageToStorable.js +8 -0
- package/lib/module/store/mappers/mapDraftMessageToStorable.js.map +1 -1
- package/lib/module/store/mappers/mapStorableToDraftMessage.js +8 -0
- package/lib/module/store/mappers/mapStorableToDraftMessage.js.map +1 -1
- package/lib/module/store/schema.js +4 -0
- package/lib/module/store/schema.js.map +1 -1
- package/lib/module/theme/generated/dark/StreamTokens.android.js +10 -1
- package/lib/module/theme/generated/dark/StreamTokens.android.js.map +1 -1
- package/lib/module/theme/generated/dark/StreamTokens.ios.js +10 -1
- package/lib/module/theme/generated/dark/StreamTokens.ios.js.map +1 -1
- package/lib/module/theme/generated/dark/StreamTokens.web.js +10 -1
- package/lib/module/theme/generated/dark/StreamTokens.web.js.map +1 -1
- package/lib/module/theme/generated/light/StreamTokens.android.js +10 -1
- package/lib/module/theme/generated/light/StreamTokens.android.js.map +1 -1
- package/lib/module/theme/generated/light/StreamTokens.ios.js +10 -1
- package/lib/module/theme/generated/light/StreamTokens.ios.js.map +1 -1
- package/lib/module/theme/generated/light/StreamTokens.web.js +10 -1
- package/lib/module/theme/generated/light/StreamTokens.web.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts.map +1 -1
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionHeader.d.ts.map +1 -1
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionItem.d.ts +8 -2
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionItem.d.ts.map +1 -1
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts +1 -1
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts.map +1 -1
- package/lib/typescript/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.d.ts +13 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.d.ts.map +1 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.d.ts +26 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.d.ts.map +1 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.d.ts +7 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.d.ts.map +1 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionItem.d.ts +17 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionItem.d.ts.map +1 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionRoleItem.d.ts +7 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionRoleItem.d.ts.map +1 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.d.ts +7 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.d.ts.map +1 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionUserItem.d.ts +7 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionUserItem.d.ts.map +1 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.d.ts +21 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.d.ts.map +1 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/index.d.ts +17 -0
- package/lib/typescript/components/AutoCompleteInput/mentionItems/index.d.ts.map +1 -0
- package/lib/typescript/components/Message/Message.d.ts +11 -1
- package/lib/typescript/components/Message/Message.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageItemView/MessageTextContainer.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageItemView/utils/renderText.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/MessageComposer.d.ts.map +1 -1
- package/lib/typescript/components/MessageList/MessageFlashList.d.ts.map +1 -1
- package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts.map +1 -1
- package/lib/typescript/components/UIComponents/ClippingFadeBottom.d.ts +18 -0
- package/lib/typescript/components/UIComponents/ClippingFadeBottom.d.ts.map +1 -0
- package/lib/typescript/components/UIComponents/index.d.ts +1 -0
- package/lib/typescript/components/UIComponents/index.d.ts.map +1 -1
- package/lib/typescript/components/index.d.ts +1 -0
- package/lib/typescript/components/index.d.ts.map +1 -1
- package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts +1 -0
- package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts.map +1 -1
- package/lib/typescript/contexts/themeContext/ThemeContext.d.ts +5 -0
- package/lib/typescript/contexts/themeContext/ThemeContext.d.ts.map +1 -1
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts +5 -0
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
- package/lib/typescript/i18n/ar.json +6 -0
- package/lib/typescript/i18n/en.json +7 -1
- package/lib/typescript/i18n/es.json +6 -0
- package/lib/typescript/i18n/fr.json +6 -0
- package/lib/typescript/i18n/he.json +6 -0
- package/lib/typescript/i18n/hi.json +6 -0
- package/lib/typescript/i18n/it.json +6 -0
- package/lib/typescript/i18n/ja.json +6 -0
- package/lib/typescript/i18n/ko.json +6 -0
- package/lib/typescript/i18n/nl.json +6 -0
- package/lib/typescript/i18n/pt-br.json +6 -0
- package/lib/typescript/i18n/ru.json +6 -0
- package/lib/typescript/i18n/tr.json +6 -0
- package/lib/typescript/icons/megaphone.d.ts +4 -0
- package/lib/typescript/icons/megaphone.d.ts.map +1 -0
- package/lib/typescript/icons/shield.d.ts +4 -0
- package/lib/typescript/icons/shield.d.ts.map +1 -0
- package/lib/typescript/store/mappers/mapDraftMessageToStorable.d.ts.map +1 -1
- package/lib/typescript/store/mappers/mapStorableToDraftMessage.d.ts.map +1 -1
- package/lib/typescript/store/schema.d.ts +4 -0
- package/lib/typescript/store/schema.d.ts.map +1 -1
- package/lib/typescript/theme/generated/StreamTokens.types.d.ts +9 -0
- package/lib/typescript/theme/generated/StreamTokens.types.d.ts.map +1 -1
- package/lib/typescript/theme/generated/dark/StreamTokens.android.d.ts.map +1 -1
- package/lib/typescript/theme/generated/dark/StreamTokens.ios.d.ts.map +1 -1
- package/lib/typescript/theme/generated/dark/StreamTokens.web.d.ts.map +1 -1
- package/lib/typescript/theme/generated/light/StreamTokens.android.d.ts.map +1 -1
- package/lib/typescript/theme/generated/light/StreamTokens.ios.d.ts.map +1 -1
- package/lib/typescript/theme/generated/light/StreamTokens.web.d.ts.map +1 -1
- package/lib/typescript/utils/i18n/Streami18n.d.ts +6 -0
- package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +13 -0
- package/src/components/AutoCompleteInput/AutoCompleteSuggestionHeader.tsx +2 -1
- package/src/components/AutoCompleteInput/AutoCompleteSuggestionItem.tsx +35 -43
- package/src/components/AutoCompleteInput/AutoCompleteSuggestionList.tsx +28 -3
- package/src/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.tsx +71 -0
- package/src/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.tsx +71 -0
- package/src/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.tsx +36 -0
- package/src/components/AutoCompleteInput/mentionItems/MentionItem.tsx +59 -0
- package/src/components/AutoCompleteInput/mentionItems/MentionRoleItem.tsx +27 -0
- package/src/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.tsx +23 -0
- package/src/components/AutoCompleteInput/mentionItems/MentionUserItem.tsx +55 -0
- package/src/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.tsx +56 -0
- package/src/components/AutoCompleteInput/mentionItems/__tests__/MentionItems.test.tsx +129 -0
- package/src/components/AutoCompleteInput/mentionItems/__tests__/TokenizedSuggestionParts.test.tsx +63 -0
- package/src/components/AutoCompleteInput/mentionItems/index.ts +16 -0
- package/src/components/Message/Message.tsx +14 -2
- package/src/components/Message/MessageItemView/MessageTextContainer.tsx +25 -0
- package/src/components/Message/MessageItemView/utils/renderText.tsx +97 -18
- package/src/components/MessageInput/MessageComposer.tsx +7 -9
- package/src/components/MessageList/MessageFlashList.tsx +28 -0
- package/src/components/MessageList/MessageList.tsx +28 -0
- package/src/components/Thread/__tests__/__snapshots__/Thread.test.tsx.snap +24 -15
- package/src/components/UIComponents/BottomSheetModal.tsx +2 -17
- package/src/components/UIComponents/ClippingFadeBottom.tsx +47 -0
- package/src/components/UIComponents/PortalWhileClosingView.tsx +0 -4
- package/src/components/UIComponents/index.ts +1 -0
- package/src/components/index.ts +1 -0
- package/src/contexts/componentsContext/defaultComponents.ts +5 -1
- package/src/contexts/themeContext/utils/theme.ts +10 -0
- package/src/i18n/ar.json +6 -0
- package/src/i18n/en.json +7 -1
- package/src/i18n/es.json +6 -0
- package/src/i18n/fr.json +6 -0
- package/src/i18n/he.json +6 -0
- package/src/i18n/hi.json +6 -0
- package/src/i18n/it.json +6 -0
- package/src/i18n/ja.json +6 -0
- package/src/i18n/ko.json +6 -0
- package/src/i18n/nl.json +6 -0
- package/src/i18n/pt-br.json +6 -0
- package/src/i18n/ru.json +6 -0
- package/src/i18n/tr.json +6 -0
- package/src/icons/megaphone.tsx +21 -0
- package/src/icons/shield.tsx +21 -0
- package/src/store/SqliteClient.ts +1 -1
- package/src/store/mappers/mapDraftMessageToStorable.ts +8 -0
- package/src/store/mappers/mapStorableToDraftMessage.ts +8 -0
- package/src/store/schema.ts +8 -0
- package/src/theme/generated/StreamTokens.types.ts +9 -0
- package/src/theme/generated/dark/StreamTokens.android.ts +10 -1
- package/src/theme/generated/dark/StreamTokens.ios.ts +10 -1
- package/src/theme/generated/dark/StreamTokens.web.ts +10 -1
- package/src/theme/generated/light/StreamTokens.android.ts +10 -1
- package/src/theme/generated/light/StreamTokens.ios.ts +10 -1
- package/src/theme/generated/light/StreamTokens.web.ts +10 -1
- package/src/version.json +1 -1
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
State,
|
|
28
28
|
} from 'simple-markdown';
|
|
29
29
|
|
|
30
|
-
import type { LocalMessage, UserResponse } from 'stream-chat';
|
|
30
|
+
import type { LocalMessage, MentionEntity, UserResponse } from 'stream-chat';
|
|
31
31
|
|
|
32
32
|
import { generateMarkdownText } from './generateMarkdownText';
|
|
33
33
|
|
|
@@ -152,7 +152,7 @@ const defaultMarkdownStyles: MarkdownStyle = {
|
|
|
152
152
|
flexDirection: 'row',
|
|
153
153
|
},
|
|
154
154
|
mentions: {
|
|
155
|
-
fontWeight:
|
|
155
|
+
fontWeight: primitives.typographyFontWeightRegular,
|
|
156
156
|
fontSize: primitives.typographyFontSizeMd,
|
|
157
157
|
lineHeight: primitives.typographyLineHeightNormal,
|
|
158
158
|
},
|
|
@@ -286,7 +286,7 @@ export const renderText = (params: RenderTextParams) => {
|
|
|
286
286
|
},
|
|
287
287
|
mentions: {
|
|
288
288
|
...defaultMarkdownStyles.mentions,
|
|
289
|
-
color: semantics.
|
|
289
|
+
color: semantics.chatTextMention,
|
|
290
290
|
...markdownStyles?.mentions,
|
|
291
291
|
},
|
|
292
292
|
table: {
|
|
@@ -404,26 +404,96 @@ export const renderText = (params: RenderTextParams) => {
|
|
|
404
404
|
);
|
|
405
405
|
};
|
|
406
406
|
|
|
407
|
-
//
|
|
408
|
-
//
|
|
409
|
-
const {
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
407
|
+
// Collect every mention type the server sent us into a single typed list so
|
|
408
|
+
// the markdown rule, the lookup, and the press payload all see the same shape.
|
|
409
|
+
const {
|
|
410
|
+
mentioned_channel,
|
|
411
|
+
mentioned_group_ids,
|
|
412
|
+
mentioned_groups,
|
|
413
|
+
mentioned_here,
|
|
414
|
+
mentioned_roles,
|
|
415
|
+
mentioned_users,
|
|
416
|
+
} = message;
|
|
417
|
+
|
|
418
|
+
const mentionEntities: MentionEntity[] = [
|
|
419
|
+
...((mentioned_users ?? []) as UserResponse[]).map(
|
|
420
|
+
(user) => ({ ...user, mentionType: 'user' }) as MentionEntity,
|
|
421
|
+
),
|
|
422
|
+
...(mentioned_channel
|
|
423
|
+
? ([{ id: 'channel', mentionType: 'channel', name: 'channel' }] as MentionEntity[])
|
|
424
|
+
: []),
|
|
425
|
+
...(mentioned_here
|
|
426
|
+
? ([{ id: 'here', mentionType: 'here', name: 'here' }] as MentionEntity[])
|
|
427
|
+
: []),
|
|
428
|
+
...((mentioned_roles ?? []) as string[]).map(
|
|
429
|
+
(role) => ({ id: role, mentionType: 'role', name: role }) as MentionEntity,
|
|
430
|
+
),
|
|
431
|
+
...(
|
|
432
|
+
(mentioned_groups ?? (mentioned_group_ids ?? []).map((id) => ({ id, name: id }))) as Array<{
|
|
433
|
+
id: string;
|
|
434
|
+
name?: string;
|
|
435
|
+
}>
|
|
436
|
+
).map(
|
|
437
|
+
(group) =>
|
|
438
|
+
({
|
|
439
|
+
id: group.id,
|
|
440
|
+
mentionType: 'user_group',
|
|
441
|
+
name: group.name ?? group.id,
|
|
442
|
+
}) as MentionEntity,
|
|
443
|
+
),
|
|
444
|
+
];
|
|
445
|
+
|
|
446
|
+
// Lookup keyed by the rendered mention text (sans `@`), lowercased so we
|
|
447
|
+
// resolve case-insensitively. First-write-wins: if a user shares a name with
|
|
448
|
+
// a role/group, the user entity is preferred — same precedence the React SDK
|
|
449
|
+
// applies via insertion order in its plugin.
|
|
450
|
+
const mentionLookup = new Map<string, MentionEntity>();
|
|
451
|
+
for (const entity of mentionEntities) {
|
|
452
|
+
const key = (entity.name ?? entity.id).toLowerCase();
|
|
453
|
+
if (!mentionLookup.has(key)) mentionLookup.set(key, entity);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
const mentionTokens = mentionEntities
|
|
457
|
+
.map((entity) => entity.name ?? entity.id)
|
|
458
|
+
.filter((value): value is string => Boolean(value))
|
|
413
459
|
.sort((a, b) => b.length - a.length)
|
|
414
|
-
.map(escapeRegExp)
|
|
415
|
-
|
|
416
|
-
const regEx = new RegExp(`^\\B(${
|
|
460
|
+
.map((value) => `@${escapeRegExp(value)}`)
|
|
461
|
+
.join('|');
|
|
462
|
+
const regEx = new RegExp(`^\\B(${mentionTokens})`, 'g');
|
|
417
463
|
const mentionsMatchFunction: MatchFunction = (source) => regEx.exec(source);
|
|
418
464
|
|
|
465
|
+
const colorForMentionType = (mentionType: MentionEntity['mentionType']) => {
|
|
466
|
+
switch (mentionType) {
|
|
467
|
+
case 'user':
|
|
468
|
+
return semantics.chatTextMentionUser;
|
|
469
|
+
case 'channel':
|
|
470
|
+
case 'here':
|
|
471
|
+
return semantics.chatTextMentionBroadcast;
|
|
472
|
+
case 'role':
|
|
473
|
+
return semantics.chatTextMentionRole;
|
|
474
|
+
case 'user_group':
|
|
475
|
+
return semantics.chatTextMentionGroup;
|
|
476
|
+
default:
|
|
477
|
+
return semantics.chatTextMention;
|
|
478
|
+
}
|
|
479
|
+
};
|
|
480
|
+
|
|
419
481
|
const mentionsReact: ReactNodeOutput = (node, output, { ...state }) => {
|
|
420
|
-
|
|
421
|
-
const
|
|
482
|
+
const matchedText: string | undefined = node.content[0]?.content;
|
|
483
|
+
const matchedName = matchedText?.substring(1) ?? '';
|
|
484
|
+
const matchedEntity = mentionLookup.get(matchedName.toLowerCase());
|
|
485
|
+
const mentionedUser =
|
|
486
|
+
matchedEntity?.mentionType === 'user' ? (matchedEntity as UserResponse) : undefined;
|
|
487
|
+
const mentionColor = matchedEntity
|
|
488
|
+
? colorForMentionType(matchedEntity.mentionType)
|
|
489
|
+
: semantics.chatTextMention;
|
|
490
|
+
|
|
422
491
|
const onPress = (event: GestureResponderEvent) => {
|
|
423
492
|
if (!preventPress && onPressParam) {
|
|
424
493
|
onPressParam({
|
|
425
494
|
additionalInfo: {
|
|
426
|
-
|
|
495
|
+
mentionedEntity: matchedEntity,
|
|
496
|
+
user: mentionedUser,
|
|
427
497
|
},
|
|
428
498
|
emitter: 'textMention',
|
|
429
499
|
event,
|
|
@@ -434,6 +504,10 @@ export const renderText = (params: RenderTextParams) => {
|
|
|
434
504
|
const onLongPress = (event: GestureResponderEvent) => {
|
|
435
505
|
if (!preventPress && onLongPressParam) {
|
|
436
506
|
onLongPressParam({
|
|
507
|
+
additionalInfo: {
|
|
508
|
+
mentionedEntity: matchedEntity,
|
|
509
|
+
user: mentionedUser,
|
|
510
|
+
},
|
|
437
511
|
emitter: 'textMention',
|
|
438
512
|
event,
|
|
439
513
|
});
|
|
@@ -441,7 +515,12 @@ export const renderText = (params: RenderTextParams) => {
|
|
|
441
515
|
};
|
|
442
516
|
|
|
443
517
|
return (
|
|
444
|
-
<Text
|
|
518
|
+
<Text
|
|
519
|
+
key={state.key}
|
|
520
|
+
onLongPress={onLongPress}
|
|
521
|
+
onPress={onPress}
|
|
522
|
+
style={[styles.mentions, { color: mentionColor }]}
|
|
523
|
+
>
|
|
445
524
|
{Array.isArray(node.content)
|
|
446
525
|
? node.content.reduce((acc, current) => acc + current.content, '') || ''
|
|
447
526
|
: output(node.content, state)}
|
|
@@ -492,7 +571,7 @@ export const renderText = (params: RenderTextParams) => {
|
|
|
492
571
|
// we have no react rendering support for reflinks
|
|
493
572
|
reflink: { match: () => null },
|
|
494
573
|
sublist: { react: listReact },
|
|
495
|
-
...(
|
|
574
|
+
...(mentionTokens
|
|
496
575
|
? {
|
|
497
576
|
mentions: {
|
|
498
577
|
match: mentionsMatchFunction,
|
|
@@ -507,7 +586,7 @@ export const renderText = (params: RenderTextParams) => {
|
|
|
507
586
|
|
|
508
587
|
return (
|
|
509
588
|
<Markdown
|
|
510
|
-
key={`${JSON.stringify(
|
|
589
|
+
key={`${JSON.stringify(mentionEntities)}-${onlyEmojis}-${
|
|
511
590
|
messageOverlay ? JSON.stringify(markdownStyles) : undefined
|
|
512
591
|
}-${JSON.stringify(semantics)}`}
|
|
513
592
|
onLink={onLink}
|
|
@@ -118,7 +118,7 @@ const useStyles = () => {
|
|
|
118
118
|
shadowRadius: 12,
|
|
119
119
|
},
|
|
120
120
|
suggestionsListContainer: {
|
|
121
|
-
backgroundColor:
|
|
121
|
+
backgroundColor: 'transparent',
|
|
122
122
|
position: 'absolute',
|
|
123
123
|
width: '100%',
|
|
124
124
|
},
|
|
@@ -200,7 +200,6 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
|
|
|
200
200
|
AudioRecordingInProgress,
|
|
201
201
|
AudioRecordingLockIndicator,
|
|
202
202
|
AudioRecordingPreview,
|
|
203
|
-
AutoCompleteSuggestionList,
|
|
204
203
|
Input,
|
|
205
204
|
InputView,
|
|
206
205
|
MessageComposerLeadingView,
|
|
@@ -227,7 +226,6 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
|
|
|
227
226
|
inputBoxWrapper,
|
|
228
227
|
inputContainer,
|
|
229
228
|
inputFloatingContainer,
|
|
230
|
-
suggestionsListContainer: { container: suggestionListContainer },
|
|
231
229
|
wrapper,
|
|
232
230
|
},
|
|
233
231
|
},
|
|
@@ -355,7 +353,12 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
|
|
|
355
353
|
layout: { height: newHeight },
|
|
356
354
|
},
|
|
357
355
|
}) => {
|
|
358
|
-
messageInputHeightStore.setHeight(
|
|
356
|
+
messageInputHeightStore.setHeight(
|
|
357
|
+
newHeight -
|
|
358
|
+
(selectedPicker && !isKeyboardVisible
|
|
359
|
+
? attachmentPickerBottomSheetHeight - bottomInset
|
|
360
|
+
: 0),
|
|
361
|
+
);
|
|
359
362
|
}}
|
|
360
363
|
style={
|
|
361
364
|
messageInputFloating
|
|
@@ -437,11 +440,6 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
|
|
|
437
440
|
<MessageComposerTrailingView />
|
|
438
441
|
)}
|
|
439
442
|
</View>
|
|
440
|
-
<View
|
|
441
|
-
style={[styles.suggestionsListContainer, { bottom: height }, suggestionListContainer]}
|
|
442
|
-
>
|
|
443
|
-
<AutoCompleteSuggestionList />
|
|
444
|
-
</View>
|
|
445
443
|
</PortalWhileClosingView>
|
|
446
444
|
</Animated.View>
|
|
447
445
|
|
|
@@ -60,6 +60,7 @@ import { MessageInputHeightState } from '../../state-store/message-input-height-
|
|
|
60
60
|
import { primitives } from '../../theme';
|
|
61
61
|
import { transitions } from '../../utils/animations/transitions';
|
|
62
62
|
import { MessageWrapper } from '../Message/MessageItemView/MessageWrapper';
|
|
63
|
+
import { PortalWhileClosingView } from '../UIComponents/PortalWhileClosingView';
|
|
63
64
|
|
|
64
65
|
type FlashListContextApi = { getRef?: () => FlashListRef<LocalMessage> | null } | undefined;
|
|
65
66
|
|
|
@@ -297,6 +298,7 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
|
|
|
297
298
|
threadList = false,
|
|
298
299
|
} = props;
|
|
299
300
|
const {
|
|
301
|
+
AutoCompleteSuggestionList,
|
|
300
302
|
EmptyStateIndicator,
|
|
301
303
|
MessageListLoadingIndicator: LoadingIndicator,
|
|
302
304
|
NetworkDownIndicator,
|
|
@@ -1135,6 +1137,22 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
|
|
|
1135
1137
|
/>
|
|
1136
1138
|
</View>
|
|
1137
1139
|
) : null}
|
|
1140
|
+
<Animated.View
|
|
1141
|
+
layout={transitions.layout200}
|
|
1142
|
+
style={[
|
|
1143
|
+
{
|
|
1144
|
+
bottom: messageInputFloating ? messageInputHeight + 16 : 0,
|
|
1145
|
+
},
|
|
1146
|
+
styles.suggestionsListContainer,
|
|
1147
|
+
]}
|
|
1148
|
+
>
|
|
1149
|
+
<PortalWhileClosingView
|
|
1150
|
+
portalHostName='overlay-suggestion-list'
|
|
1151
|
+
portalName='autocomplete-suggestion-list'
|
|
1152
|
+
>
|
|
1153
|
+
<AutoCompleteSuggestionList />
|
|
1154
|
+
</PortalWhileClosingView>
|
|
1155
|
+
</Animated.View>
|
|
1138
1156
|
<NotificationList bottomOffset={messageInputFloating ? messageInputHeight + 16 : undefined} />
|
|
1139
1157
|
</View>
|
|
1140
1158
|
);
|
|
@@ -1279,6 +1297,9 @@ const useStyles = () => {
|
|
|
1279
1297
|
scrollToBottomButtonContainer,
|
|
1280
1298
|
unreadMessagesNotificationContainer,
|
|
1281
1299
|
},
|
|
1300
|
+
messageComposer: {
|
|
1301
|
+
suggestionsListContainer: { container: suggestionListContainer },
|
|
1302
|
+
},
|
|
1282
1303
|
},
|
|
1283
1304
|
} = useTheme();
|
|
1284
1305
|
|
|
@@ -1287,6 +1308,12 @@ const useStyles = () => {
|
|
|
1287
1308
|
return useMemo(
|
|
1288
1309
|
() =>
|
|
1289
1310
|
StyleSheet.create({
|
|
1311
|
+
suggestionsListContainer: {
|
|
1312
|
+
backgroundColor: 'transparent',
|
|
1313
|
+
position: 'absolute',
|
|
1314
|
+
width: '100%',
|
|
1315
|
+
...suggestionListContainer,
|
|
1316
|
+
},
|
|
1290
1317
|
container: {
|
|
1291
1318
|
flex: 1,
|
|
1292
1319
|
width: '100%',
|
|
@@ -1338,6 +1365,7 @@ const useStyles = () => {
|
|
|
1338
1365
|
scrollToBottomButtonContainer,
|
|
1339
1366
|
stickyHeaderContainer,
|
|
1340
1367
|
unreadMessagesNotificationContainer,
|
|
1368
|
+
suggestionListContainer,
|
|
1341
1369
|
],
|
|
1342
1370
|
);
|
|
1343
1371
|
};
|
|
@@ -74,6 +74,7 @@ import { primitives } from '../../theme';
|
|
|
74
74
|
import { transitions } from '../../utils/animations/transitions';
|
|
75
75
|
import { useIncomingMessageAnnouncements } from '../Accessibility/hooks/useIncomingMessageAnnouncements';
|
|
76
76
|
import { MessageWrapper } from '../Message/MessageItemView/MessageWrapper';
|
|
77
|
+
import { PortalWhileClosingView } from '../UIComponents';
|
|
77
78
|
|
|
78
79
|
// This is just to make sure that the scrolling happens in a different task queue.
|
|
79
80
|
// TODO: Think if we really need this and strive to remove it if we can.
|
|
@@ -92,6 +93,9 @@ const useStyles = () => {
|
|
|
92
93
|
scrollToBottomButtonContainer,
|
|
93
94
|
unreadMessagesNotificationContainer,
|
|
94
95
|
},
|
|
96
|
+
messageComposer: {
|
|
97
|
+
suggestionsListContainer: { container: suggestionListContainer },
|
|
98
|
+
},
|
|
95
99
|
},
|
|
96
100
|
} = useTheme();
|
|
97
101
|
|
|
@@ -100,6 +104,12 @@ const useStyles = () => {
|
|
|
100
104
|
return useMemo(
|
|
101
105
|
() =>
|
|
102
106
|
StyleSheet.create({
|
|
107
|
+
suggestionsListContainer: {
|
|
108
|
+
backgroundColor: 'transparent',
|
|
109
|
+
position: 'absolute',
|
|
110
|
+
width: '100%',
|
|
111
|
+
...suggestionListContainer,
|
|
112
|
+
},
|
|
103
113
|
container: {
|
|
104
114
|
flex: 1,
|
|
105
115
|
width: '100%',
|
|
@@ -151,6 +161,7 @@ const useStyles = () => {
|
|
|
151
161
|
scrollToBottomButtonContainer,
|
|
152
162
|
stickyHeaderContainer,
|
|
153
163
|
unreadMessagesNotificationContainer,
|
|
164
|
+
suggestionListContainer,
|
|
154
165
|
],
|
|
155
166
|
);
|
|
156
167
|
};
|
|
@@ -360,6 +371,7 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
|
|
|
360
371
|
TypingIndicator,
|
|
361
372
|
TypingIndicatorContainer,
|
|
362
373
|
UnreadMessagesNotification,
|
|
374
|
+
AutoCompleteSuggestionList,
|
|
363
375
|
} = useComponentsContext();
|
|
364
376
|
const [isUnreadNotificationOpen, setIsUnreadNotificationOpen] = useState<boolean>(false);
|
|
365
377
|
const { theme } = useTheme();
|
|
@@ -1363,6 +1375,22 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
|
|
|
1363
1375
|
/>
|
|
1364
1376
|
</View>
|
|
1365
1377
|
) : null}
|
|
1378
|
+
<Animated.View
|
|
1379
|
+
layout={transitions.layout200}
|
|
1380
|
+
style={[
|
|
1381
|
+
{
|
|
1382
|
+
bottom: messageInputFloating ? messageInputHeight + 16 : 0,
|
|
1383
|
+
},
|
|
1384
|
+
styles.suggestionsListContainer,
|
|
1385
|
+
]}
|
|
1386
|
+
>
|
|
1387
|
+
<PortalWhileClosingView
|
|
1388
|
+
portalHostName='overlay-suggestion-list'
|
|
1389
|
+
portalName='autocomplete-suggestion-list'
|
|
1390
|
+
>
|
|
1391
|
+
<AutoCompleteSuggestionList />
|
|
1392
|
+
</PortalWhileClosingView>
|
|
1393
|
+
</Animated.View>
|
|
1366
1394
|
<NotificationList bottomOffset={messageInputFloating ? messageInputHeight + 16 : undefined} />
|
|
1367
1395
|
</View>
|
|
1368
1396
|
);
|
|
@@ -1715,6 +1715,30 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
1715
1715
|
}
|
|
1716
1716
|
}
|
|
1717
1717
|
/>
|
|
1718
|
+
<View
|
|
1719
|
+
layout={BaseAnimationMock {}}
|
|
1720
|
+
style={
|
|
1721
|
+
[
|
|
1722
|
+
{
|
|
1723
|
+
"bottom": 0,
|
|
1724
|
+
},
|
|
1725
|
+
{
|
|
1726
|
+
"backgroundColor": "transparent",
|
|
1727
|
+
"position": "absolute",
|
|
1728
|
+
"width": "100%",
|
|
1729
|
+
},
|
|
1730
|
+
]
|
|
1731
|
+
}
|
|
1732
|
+
>
|
|
1733
|
+
<View
|
|
1734
|
+
name="autocomplete-suggestion-list"
|
|
1735
|
+
>
|
|
1736
|
+
<View
|
|
1737
|
+
collapsable={false}
|
|
1738
|
+
onLayout={[Function]}
|
|
1739
|
+
/>
|
|
1740
|
+
</View>
|
|
1741
|
+
</View>
|
|
1718
1742
|
</View>
|
|
1719
1743
|
<View
|
|
1720
1744
|
layout={BaseAnimationMock {}}
|
|
@@ -2327,21 +2351,6 @@ exports[`Thread should match thread snapshot 1`] = `
|
|
|
2327
2351
|
</View>
|
|
2328
2352
|
</View>
|
|
2329
2353
|
</View>
|
|
2330
|
-
<View
|
|
2331
|
-
style={
|
|
2332
|
-
[
|
|
2333
|
-
{
|
|
2334
|
-
"backgroundColor": "#ffffff",
|
|
2335
|
-
"position": "absolute",
|
|
2336
|
-
"width": "100%",
|
|
2337
|
-
},
|
|
2338
|
-
{
|
|
2339
|
-
"bottom": 0,
|
|
2340
|
-
},
|
|
2341
|
-
{},
|
|
2342
|
-
]
|
|
2343
|
-
}
|
|
2344
|
-
/>
|
|
2345
2354
|
</View>
|
|
2346
2355
|
</View>
|
|
2347
2356
|
</View>
|
|
@@ -39,12 +39,12 @@ import {
|
|
|
39
39
|
} from './BottomSheetModal.utils';
|
|
40
40
|
|
|
41
41
|
import { useA11yLabel } from '../../a11y/hooks/useA11yLabel';
|
|
42
|
+
import { useAnnounceOnShow } from '../../a11y/hooks/useAnnounceOnShow';
|
|
42
43
|
import { useResolvedModalAccessibilityProps } from '../../a11y/hooks/useResolvedModalAccessibilityProps';
|
|
43
44
|
import { BottomSheetProvider } from '../../contexts/bottomSheetContext/BottomSheetContext';
|
|
44
45
|
import { useTheme } from '../../contexts/themeContext/ThemeContext';
|
|
45
46
|
import { useStableCallback } from '../../hooks';
|
|
46
47
|
import { primitives } from '../../theme';
|
|
47
|
-
import { useAccessibilityAnnouncer } from '../Accessibility/useAccessibilityAnnouncer';
|
|
48
48
|
|
|
49
49
|
export type BottomSheetModalProps = {
|
|
50
50
|
/**
|
|
@@ -544,25 +544,10 @@ const BottomSheetModalInner = (props: PropsWithChildren<BottomSheetModalProps>)
|
|
|
544
544
|
|
|
545
545
|
const modalA11yProps = useResolvedModalAccessibilityProps();
|
|
546
546
|
|
|
547
|
-
const announce = useAccessibilityAnnouncer();
|
|
548
547
|
const openAnnouncement = useA11yLabel(
|
|
549
548
|
'a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.',
|
|
550
549
|
);
|
|
551
|
-
|
|
552
|
-
useEffect(() => {
|
|
553
|
-
if (!visible) {
|
|
554
|
-
announcedOpenRef.current = false;
|
|
555
|
-
return;
|
|
556
|
-
}
|
|
557
|
-
if (!openAnnouncement || announcedOpenRef.current) {
|
|
558
|
-
return;
|
|
559
|
-
}
|
|
560
|
-
const id = setTimeout(() => {
|
|
561
|
-
announce(openAnnouncement, 'polite');
|
|
562
|
-
announcedOpenRef.current = true;
|
|
563
|
-
}, 800);
|
|
564
|
-
return () => clearTimeout(id);
|
|
565
|
-
}, [visible, openAnnouncement, announce]);
|
|
550
|
+
useAnnounceOnShow(visible, openAnnouncement, { delayMs: 800 });
|
|
566
551
|
|
|
567
552
|
const closeLabel = useA11yLabel('a11y/Close');
|
|
568
553
|
const closeAccessibilityActions = useMemo(
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleSheet, View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import Svg, { Defs, LinearGradient, Rect, Stop } from 'react-native-svg';
|
|
5
|
+
|
|
6
|
+
const CLIPPING_FADE_HEIGHT = 16;
|
|
7
|
+
const CLIPPING_FADE_GRADIENT_ID = 'sdk-clipping-fade-bottom';
|
|
8
|
+
|
|
9
|
+
export type ClippingFadeBottomProps = {
|
|
10
|
+
/**
|
|
11
|
+
* Color the fade ramps toward at the bottom edge. Typically the
|
|
12
|
+
* background color of the surface beneath the fade so the bottom edge of
|
|
13
|
+
* scrolling content visually melts into it.
|
|
14
|
+
*/
|
|
15
|
+
backgroundColor: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Bottom edge fade overlay. Draws a 16px tall SVG linear gradient that
|
|
20
|
+
* ramps from the supplied background's transparent variant at the top to
|
|
21
|
+
* fully opaque at the bottom - visually clipping any content that scrolls
|
|
22
|
+
* past the lower edge of its parent. `pointerEvents='none'` so it doesn't
|
|
23
|
+
* intercept taps/scrolls on the rows underneath.
|
|
24
|
+
*/
|
|
25
|
+
export const ClippingFadeBottom = ({ backgroundColor }: ClippingFadeBottomProps) => (
|
|
26
|
+
<View pointerEvents='none' style={styles.fade}>
|
|
27
|
+
<Svg height='100%' width='100%'>
|
|
28
|
+
<Defs>
|
|
29
|
+
<LinearGradient id={CLIPPING_FADE_GRADIENT_ID} x1='0' x2='0' y1='0' y2='1'>
|
|
30
|
+
<Stop offset='0' stopColor={backgroundColor} stopOpacity='0' />
|
|
31
|
+
<Stop offset='1' stopColor={backgroundColor} stopOpacity='1' />
|
|
32
|
+
</LinearGradient>
|
|
33
|
+
</Defs>
|
|
34
|
+
<Rect fill={`url(#${CLIPPING_FADE_GRADIENT_ID})`} height='100%' width='100%' />
|
|
35
|
+
</Svg>
|
|
36
|
+
</View>
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const styles = StyleSheet.create({
|
|
40
|
+
fade: {
|
|
41
|
+
bottom: 0,
|
|
42
|
+
height: CLIPPING_FADE_HEIGHT,
|
|
43
|
+
left: 0,
|
|
44
|
+
position: 'absolute',
|
|
45
|
+
right: 0,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
@@ -130,10 +130,6 @@ const useSyncingApi = (portalHostName: string, registrationId: string) => {
|
|
|
130
130
|
y: y + (Platform.OS === 'android' ? insets.top : 0),
|
|
131
131
|
};
|
|
132
132
|
|
|
133
|
-
if (!width || !height) {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
133
|
placeholderLayout.value = { h: height, w: width };
|
|
138
134
|
|
|
139
135
|
setClosingPortalLayout(portalHostName, registrationId, {
|
package/src/components/index.ts
CHANGED
|
@@ -28,6 +28,7 @@ export * from './AutoCompleteInput/AutoCompleteSuggestionHeader';
|
|
|
28
28
|
export * from './AutoCompleteInput/AutoCompleteSuggestionItem';
|
|
29
29
|
export * from './AutoCompleteInput/AutoCompleteSuggestionList';
|
|
30
30
|
export * from './AutoCompleteInput/InputView';
|
|
31
|
+
export * from './AutoCompleteInput/mentionItems';
|
|
31
32
|
|
|
32
33
|
export * from './Channel/Channel';
|
|
33
34
|
export * from './Channel/hooks/useCreateChannelContext';
|
|
@@ -24,7 +24,10 @@ import { AttachmentPickerContent } from '../../components/AttachmentPicker/compo
|
|
|
24
24
|
import { AttachmentPickerSelectionBar } from '../../components/AttachmentPicker/components/AttachmentPickerSelectionBar';
|
|
25
25
|
import { ImageOverlaySelectedComponent } from '../../components/AttachmentPicker/components/ImageOverlaySelectedComponent';
|
|
26
26
|
import { AutoCompleteSuggestionHeader } from '../../components/AutoCompleteInput/AutoCompleteSuggestionHeader';
|
|
27
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
AutoCompleteSuggestionItem,
|
|
29
|
+
MentionSuggestionItem,
|
|
30
|
+
} from '../../components/AutoCompleteInput/AutoCompleteSuggestionItem';
|
|
28
31
|
import { AutoCompleteSuggestionList } from '../../components/AutoCompleteInput/AutoCompleteSuggestionList';
|
|
29
32
|
import { InputView } from '../../components/AutoCompleteInput/InputView';
|
|
30
33
|
import { ChannelDetailsContent } from '../../components/ChannelDetails/ChannelDetails';
|
|
@@ -196,6 +199,7 @@ const components = {
|
|
|
196
199
|
AutoCompleteSuggestionHeader,
|
|
197
200
|
AutoCompleteSuggestionItem,
|
|
198
201
|
AutoCompleteSuggestionList,
|
|
202
|
+
MentionSuggestionItem,
|
|
199
203
|
ChannelDetailsBottomSheet,
|
|
200
204
|
CooldownTimer,
|
|
201
205
|
CircularProgressIndicator,
|
|
@@ -563,6 +563,10 @@ export type Theme = {
|
|
|
563
563
|
avatarSize: number;
|
|
564
564
|
column: ViewStyle;
|
|
565
565
|
container: ViewStyle;
|
|
566
|
+
enhancedMentionContainer: ViewStyle;
|
|
567
|
+
enhancedMentionIcon: ViewStyle;
|
|
568
|
+
enhancedMentionSubtitle: TextStyle;
|
|
569
|
+
enhancedMentionTitle: TextStyle;
|
|
566
570
|
name: TextStyle;
|
|
567
571
|
tag: TextStyle;
|
|
568
572
|
};
|
|
@@ -570,6 +574,7 @@ export type Theme = {
|
|
|
570
574
|
suggestionsListContainer: {
|
|
571
575
|
container: ViewStyle;
|
|
572
576
|
flatlist: ViewStyle;
|
|
577
|
+
flatlistContentContainer: ViewStyle;
|
|
573
578
|
};
|
|
574
579
|
videoAttachmentUploadPreview: {
|
|
575
580
|
durationContainer: ViewStyle;
|
|
@@ -1602,6 +1607,10 @@ export const defaultTheme: Theme = {
|
|
|
1602
1607
|
avatarSize: 40,
|
|
1603
1608
|
column: {},
|
|
1604
1609
|
container: {},
|
|
1610
|
+
enhancedMentionContainer: {},
|
|
1611
|
+
enhancedMentionIcon: {},
|
|
1612
|
+
enhancedMentionSubtitle: {},
|
|
1613
|
+
enhancedMentionTitle: {},
|
|
1605
1614
|
name: {},
|
|
1606
1615
|
tag: {},
|
|
1607
1616
|
},
|
|
@@ -1609,6 +1618,7 @@ export const defaultTheme: Theme = {
|
|
|
1609
1618
|
suggestionsListContainer: {
|
|
1610
1619
|
container: {},
|
|
1611
1620
|
flatlist: {},
|
|
1621
|
+
flatlistContentContainer: {},
|
|
1612
1622
|
},
|
|
1613
1623
|
wrapper: {},
|
|
1614
1624
|
linkPreviewList: {
|
package/src/i18n/ar.json
CHANGED
|
@@ -437,6 +437,12 @@
|
|
|
437
437
|
"a11y/Gallery Image": "صورة من المعرض",
|
|
438
438
|
"a11y/Gallery Video": "فيديو من المعرض",
|
|
439
439
|
"a11y/{{position}} of {{count}}": "{{position}} من {{count}}",
|
|
440
|
+
"Notify all {{ role }} members": "Notify all {{ role }} members",
|
|
441
|
+
"a11y/Command suggestions available": "Command suggestions available",
|
|
442
|
+
"a11y/Emoji suggestions available": "Emoji suggestions available",
|
|
443
|
+
"a11y/Mention suggestions available": "Mention suggestions available",
|
|
444
|
+
"mention/Channel Description": "Notify everyone in this channel",
|
|
445
|
+
"mention/Here Description": "Notify every online member in this channel",
|
|
440
446
|
"Pin Chat": "تثبيت الدردشة",
|
|
441
447
|
"Pin Group": "تثبيت المجموعة",
|
|
442
448
|
"Unpin Chat": "إلغاء تثبيت الدردشة",
|
package/src/i18n/en.json
CHANGED
|
@@ -440,5 +440,11 @@
|
|
|
440
440
|
"a11y/{{count}} unread messages": "{{count}} unread messages",
|
|
441
441
|
"a11y/Gallery Image": "Gallery image",
|
|
442
442
|
"a11y/Gallery Video": "Gallery video",
|
|
443
|
-
"a11y/{{position}} of {{count}}": "{{position}} of {{count}}"
|
|
443
|
+
"a11y/{{position}} of {{count}}": "{{position}} of {{count}}",
|
|
444
|
+
"Notify all {{ role }} members": "Notify all {{ role }} members",
|
|
445
|
+
"a11y/Command suggestions available": "Command suggestions available",
|
|
446
|
+
"a11y/Emoji suggestions available": "Emoji suggestions available",
|
|
447
|
+
"a11y/Mention suggestions available": "Mention suggestions available",
|
|
448
|
+
"mention/Channel Description": "Notify everyone in this channel",
|
|
449
|
+
"mention/Here Description": "Notify every online member in this channel"
|
|
444
450
|
}
|
package/src/i18n/es.json
CHANGED
|
@@ -437,6 +437,12 @@
|
|
|
437
437
|
"a11y/Gallery Image": "Imagen de la galería",
|
|
438
438
|
"a11y/Gallery Video": "Vídeo de la galería",
|
|
439
439
|
"a11y/{{position}} of {{count}}": "{{position}} de {{count}}",
|
|
440
|
+
"Notify all {{ role }} members": "Notify all {{ role }} members",
|
|
441
|
+
"a11y/Command suggestions available": "Command suggestions available",
|
|
442
|
+
"a11y/Emoji suggestions available": "Emoji suggestions available",
|
|
443
|
+
"a11y/Mention suggestions available": "Mention suggestions available",
|
|
444
|
+
"mention/Channel Description": "Notify everyone in this channel",
|
|
445
|
+
"mention/Here Description": "Notify every online member in this channel",
|
|
440
446
|
"Pin Chat": "Fijar chat",
|
|
441
447
|
"Pin Group": "Fijar grupo",
|
|
442
448
|
"Unpin Chat": "Desfijar chat",
|
package/src/i18n/fr.json
CHANGED
|
@@ -437,6 +437,12 @@
|
|
|
437
437
|
"a11y/Gallery Image": "Image de la galerie",
|
|
438
438
|
"a11y/Gallery Video": "Vidéo de la galerie",
|
|
439
439
|
"a11y/{{position}} of {{count}}": "{{position}} sur {{count}}",
|
|
440
|
+
"Notify all {{ role }} members": "Notify all {{ role }} members",
|
|
441
|
+
"a11y/Command suggestions available": "Command suggestions available",
|
|
442
|
+
"a11y/Emoji suggestions available": "Emoji suggestions available",
|
|
443
|
+
"a11y/Mention suggestions available": "Mention suggestions available",
|
|
444
|
+
"mention/Channel Description": "Notify everyone in this channel",
|
|
445
|
+
"mention/Here Description": "Notify every online member in this channel",
|
|
440
446
|
"Pin Chat": "Épingler la discussion",
|
|
441
447
|
"Pin Group": "Épingler le groupe",
|
|
442
448
|
"Unpin Chat": "Détacher la discussion",
|
package/src/i18n/he.json
CHANGED
|
@@ -437,6 +437,12 @@
|
|
|
437
437
|
"a11y/Gallery Image": "תמונה מהגלריה",
|
|
438
438
|
"a11y/Gallery Video": "סרטון מהגלריה",
|
|
439
439
|
"a11y/{{position}} of {{count}}": "{{position}} מתוך {{count}}",
|
|
440
|
+
"Notify all {{ role }} members": "Notify all {{ role }} members",
|
|
441
|
+
"a11y/Command suggestions available": "Command suggestions available",
|
|
442
|
+
"a11y/Emoji suggestions available": "Emoji suggestions available",
|
|
443
|
+
"a11y/Mention suggestions available": "Mention suggestions available",
|
|
444
|
+
"mention/Channel Description": "Notify everyone in this channel",
|
|
445
|
+
"mention/Here Description": "Notify every online member in this channel",
|
|
440
446
|
"Pin Chat": "הצמד/י צ'אט",
|
|
441
447
|
"Pin Group": "הצמד/י קבוצה",
|
|
442
448
|
"Unpin Chat": "בטל/י הצמדת צ'אט",
|