From 4d1fc77ec6c42254249ee15ae4a23a4b4ba35351 Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Tue, 17 Sep 2024 16:54:59 +0200 Subject: [PATCH 1/2] feat: add voice recording option --- .../src/lib/icon/icon.component.ts | 3 ++- .../message-input/message-input.component.html | 7 +++++++ .../message-input.component.spec.ts | 18 +++++++++++++++++- .../message-input/message-input.component.ts | 4 ++++ 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/projects/stream-chat-angular/src/lib/icon/icon.component.ts b/projects/stream-chat-angular/src/lib/icon/icon.component.ts index a4b47637..3bc04abf 100644 --- a/projects/stream-chat-angular/src/lib/icon/icon.component.ts +++ b/projects/stream-chat-angular/src/lib/icon/icon.component.ts @@ -20,7 +20,8 @@ export type Icon = | 'download' | 'error' | 'play' - | 'pause'; + | 'pause' + | 'mic'; /** * The `Icon` component can be used to display different icons (i. e. message delivered icon). diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.html b/projects/stream-chat-angular/src/lib/message-input/message-input.component.html index 7842f3da..388c3ad8 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.html +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.html @@ -157,6 +157,13 @@ > {{ cooldown$ | async }} + diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts b/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts index 80d56d7b..bf73a136 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts @@ -233,7 +233,7 @@ describe('MessageInputComponent', () => { expect(spy).not.toHaveBeenCalledWith(); }); - it(`shouldn't display send button if corresponding input if #displaySendButton`, () => { + it(`shouldn't display send button if corresponding input is false`, () => { component.displaySendButton = false; fixture.detectChanges(); @@ -245,6 +245,22 @@ describe('MessageInputComponent', () => { expect(querySendButton()).not.toBeNull(); }); + it(`shouldn't display voice recording button if corresponding input is false`, () => { + component.displayVoiceRecordingButton = false; + fixture.detectChanges(); + + expect( + nativeElement.querySelector('[data-testid="start-voice-recording"]') + ).toBeNull(); + + component.displayVoiceRecordingButton = true; + fixture.detectChanges(); + + expect( + nativeElement.querySelector('[data-testid="start-voice-recording"]') + ).not.toBeNull(); + }); + it('should emit #messageUpdate event if message update was successful', async () => { const messageToEdit = mockMessage(); component.message = messageToEdit; diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts b/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts index 5f3f25f1..e2fb51d1 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts @@ -99,6 +99,10 @@ export class MessageInputComponent * Use this input to control wether a send button is rendered or not. If you don't render a send button, you can still trigger message send using the `sendMessage$` input. */ @Input() displaySendButton = true; + /** + * You can enable/disable voice recordings with this input + */ + @Input() displayVoiceRecordingButton = false; /** * Emits when a message was successfuly sent or updated */ From 463a19f579f9f6dfc3034a1da275fa1d8d986fc7 Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Fri, 20 Sep 2024 17:06:55 +0200 Subject: [PATCH 2/2] feat: voice recording --- .../Angular/assets/start-voice-recording.png | Bin 0 -> 19169 bytes .../Angular/assets/voice-recorder-wavebar.png | Bin 0 -> 13551 bytes .../docs/Angular/assets/voice-recorder.png | Bin 0 -> 13855 bytes .../Angular/assets/voice-recording-demo.png | Bin 0 -> 527440 bytes .../assets/voice-recording-playback.png | Bin 0 -> 12923 bytes .../code-examples/voice-recordings.mdx | 187 ++++++++++++ .../components/AttachmentListComponent.mdx | 8 +- .../AttachmentPreviewListComponent.mdx | 6 +- .../AutocompleteTextareaComponent.mdx | 18 +- .../Angular/components/AvatarComponent.mdx | 16 +- .../components/AvatarPlaceholderComponent.mdx | 16 +- .../components/ChannelPreviewComponent.mdx | 2 +- .../docs/Angular/components/IconComponent.mdx | 2 +- .../components/IconPlaceholderComponent.mdx | 2 +- .../components/MessageActionsBoxComponent.mdx | 8 +- .../Angular/components/MessageComponent.mdx | 12 +- .../components/MessageInputComponent.mdx | 49 +++- .../components/MessageListComponent.mdx | 18 +- .../components/MessageReactionsComponent.mdx | 28 +- .../MessageReactionsSelectorComponent.mdx | 4 +- .../Angular/components/ModalComponent.mdx | 6 +- .../components/NotificationComponent.mdx | 4 +- .../components/PaginatedListComponent.mdx | 65 +++++ .../Angular/components/TextareaComponent.mdx | 12 +- .../Angular/components/UserListComponent.mdx | 51 ++++ .../components/VoiceRecorderComponent.mdx | 16 ++ .../VoiceRecorderWavebarComponent.mdx | 28 ++ .../components/VoiceRecordingComponent.mdx | 2 +- .../VoiceRecordingWavebarComponent.mdx | 6 +- .../services/AmplitudeRecorderService.mdx | 89 ++++++ .../AttachmentConfigurationService.mdx | 18 +- .../Angular/services/AttachmentService.mdx | 42 ++- .../Angular/services/AudioRecorderService.mdx | 117 ++++++++ .../docs/Angular/services/ChannelService.mdx | 150 +++++----- .../Angular/services/ChatClientService.mdx | 22 +- .../services/CustomTemplatesService.mdx | 82 +++--- .../Angular/services/DateParserService.mdx | 12 +- .../Angular/services/EmojiInputService.mdx | 2 +- .../services/MessageActionsService.mdx | 10 +- .../services/MessageInputConfigService.mdx | 23 +- .../services/MessageReactionsService.mdx | 36 ++- .../docs/Angular/services/MessageService.mdx | 4 +- .../Angular/services/NotificationService.mdx | 6 +- .../Angular/services/StreamI18nService.mdx | 2 +- .../docs/Angular/services/ThemeService.mdx | 2 +- .../Angular/services/TranscoderService.mdx | 30 ++ .../services/TransliterationService.mdx | 2 +- .../services/VirtualizedListService.mdx | 8 +- .../VirtualizedMessageListService.mdx | 8 +- .../Angular/services/VoiceRecorderService.mdx | 27 ++ .../Angular/theming/component-variables.mdx | 60 ++-- .../docs/Angular/theming/global-variables.mdx | 4 +- .../docs/Angular/theming/introduction.mdx | 38 ++- .../Angular/theming/palette-variables.mdx | 13 - package-lock.json | 36 ++- package.json | 4 +- .../sample-app/src/app/app.component.html | 16 +- projects/sample-app/src/app/app.component.ts | 3 +- projects/sample-app/src/app/app.module.ts | 2 + projects/stream-chat-angular/ng-package.json | 1 + projects/stream-chat-angular/package.json | 7 + .../stream-chat-angular/src/assets/i18n/en.ts | 6 + .../attachment-preview-list.component.html | 13 +- .../src/lib/attachment.service.ts | 65 ++++- .../channel-preview.component.spec.ts | 6 +- .../stream-chat-angular/src/lib/file-utils.ts | 49 ++++ .../src/lib/format-duration.ts | 18 ++ .../icon-placeholder.component.html | 0 .../icon-placeholder.component.spec.ts | 2 +- .../icon-placeholder.component.ts | 6 +- .../src/lib/icon/icon.component.ts | 3 +- .../src/lib/icon/icon.module.ts | 23 ++ ...ading-indicator-placeholder.component.html | 0 ...loading-indicator-placeholder.component.ts | 2 +- .../loading-indicator.component.html | 0 .../loading-indicator.component.ts | 0 .../src/lib/is-image-file.ts | 4 - .../stream-chat-angular/src/lib/is-safari.ts | 3 + .../message-input-config.service.ts | 6 +- .../message-input.component.html | 18 +- .../message-input.component.spec.ts | 8 +- .../message-input/message-input.component.ts | 48 +++- .../message-input/voice-recorder.service.ts | 22 ++ .../message-list/message-list.component.ts | 6 +- .../src/lib/message/message.component.spec.ts | 2 +- .../src/lib/stream-chat.module.ts | 26 +- projects/stream-chat-angular/src/lib/types.ts | 12 +- .../amplitude-recorder.service.ts | 167 +++++++++++ .../voice-recorder/audio-recorder.service.ts | 96 +++++++ .../src/lib/voice-recorder/media-recorder.ts | 270 ++++++++++++++++++ .../src/lib/voice-recorder/mp3-transcoder.ts | 92 ++++++ .../lib/voice-recorder/transcoder.service.ts | 193 +++++++++++++ .../voice-recorder-wavebar.component.html | 17 ++ .../voice-recorder-wavebar.component.spec.ts | 30 ++ .../voice-recorder-wavebar.component.ts | 44 +++ .../voice-recorder.component.html | 75 +++++ .../voice-recorder.component.spec.ts | 23 ++ .../voice-recorder.component.ts | 92 ++++++ .../voice-recorder/voice-recorder.module.ts | 22 ++ .../voice-recording-wavebar.component.ts | 145 +--------- .../voice-recording.component.ts | 18 +- .../voice-recording/voice-recording.module.ts | 13 + .../src/lib/wave-form-sampler.ts | 124 ++++++++ .../stream-chat-angular/src/public-api.ts | 21 +- 104 files changed, 2673 insertions(+), 559 deletions(-) create mode 100644 docusaurus/docs/Angular/assets/start-voice-recording.png create mode 100644 docusaurus/docs/Angular/assets/voice-recorder-wavebar.png create mode 100644 docusaurus/docs/Angular/assets/voice-recorder.png create mode 100644 docusaurus/docs/Angular/assets/voice-recording-demo.png create mode 100644 docusaurus/docs/Angular/assets/voice-recording-playback.png create mode 100644 docusaurus/docs/Angular/code-examples/voice-recordings.mdx create mode 100644 docusaurus/docs/Angular/components/VoiceRecorderComponent.mdx create mode 100644 docusaurus/docs/Angular/components/VoiceRecorderWavebarComponent.mdx create mode 100644 docusaurus/docs/Angular/services/AmplitudeRecorderService.mdx create mode 100644 docusaurus/docs/Angular/services/AudioRecorderService.mdx create mode 100644 docusaurus/docs/Angular/services/TranscoderService.mdx create mode 100644 docusaurus/docs/Angular/services/VoiceRecorderService.mdx create mode 100644 projects/stream-chat-angular/src/lib/file-utils.ts create mode 100644 projects/stream-chat-angular/src/lib/format-duration.ts rename projects/stream-chat-angular/src/lib/{ => icon}/icon-placeholder/icon-placeholder.component.html (100%) rename projects/stream-chat-angular/src/lib/{ => icon}/icon-placeholder/icon-placeholder.component.spec.ts (96%) rename projects/stream-chat-angular/src/lib/{ => icon}/icon-placeholder/icon-placeholder.component.ts (85%) create mode 100644 projects/stream-chat-angular/src/lib/icon/icon.module.ts rename projects/stream-chat-angular/src/lib/{ => icon}/loading-indicator-placeholder/loading-indicator-placeholder.component.html (100%) rename projects/stream-chat-angular/src/lib/{ => icon}/loading-indicator-placeholder/loading-indicator-placeholder.component.ts (89%) rename projects/stream-chat-angular/src/lib/{ => icon}/loading-indicator/loading-indicator.component.html (100%) rename projects/stream-chat-angular/src/lib/{ => icon}/loading-indicator/loading-indicator.component.ts (100%) delete mode 100644 projects/stream-chat-angular/src/lib/is-image-file.ts create mode 100644 projects/stream-chat-angular/src/lib/is-safari.ts create mode 100644 projects/stream-chat-angular/src/lib/message-input/voice-recorder.service.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/media-recorder.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/mp3-transcoder.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/transcoder.service.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.html create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.spec.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.html create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.spec.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.module.ts create mode 100644 projects/stream-chat-angular/src/lib/voice-recording/voice-recording.module.ts create mode 100644 projects/stream-chat-angular/src/lib/wave-form-sampler.ts diff --git a/docusaurus/docs/Angular/assets/start-voice-recording.png b/docusaurus/docs/Angular/assets/start-voice-recording.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7058afaf3eef16782d0627f0dc436afccf7807 GIT binary patch literal 19169 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 z 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

M#3Ze`L3CQx~c{iY*&S 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�m+lKPgbHzBki5hXu|w?L%q*+` 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/Angular/assets/voice-recording-playback.png b/docusaurus/docs/Angular/assets/voice-recording-playback.png new file mode 100644 index 0000000000000000000000000000000000000000..5cf959651f34a3cf2fa75b34576c9a1154e5525c GIT binary patch literal 12923 zcmd_R1y@|n(kMI-2$BGU2e;rBAV_f6AcI?QcXww9E(sPUFu>sMBzSOlcMDE%C%`v6 z?>Xl^>wbUWu61|s-rc*qs=B+XT6Wb;q>7RZ20Af1006*{la*8j01#pDyann@_!GEu z?gaq67PXd;P?3|6pj2^jw6L}_2LNOvleJK^)%ppbdS4Snt+Ex+TF|If5oOV`krP(z z!EZ$wI9`TCk?E*Au@*)IVSK^|9ljTUX=~&88nQ4j9GJA1H_IXJHdgpKwmKgDz0Tx% z`rvvr)Zz(H`OuFYS*@Z0s19q`C=@mH5jVlfn0nDCN~kGdG_bxM@eLb08<4Vob-cBV z5hS}<;-Oj=c=a?3>)G6KLJ*~(#KY&91$>FI zHq0W*vSLw9iiBylP%>)Utn*{6T==YMw1o+EKqt7rBdYmo9!K5&9)HcCCAu<3C{b!{PsgHZBjf}8*M|_SYDg2YabX0JTbch<|Mhvsgy2}Pw#A38jS=IbYTj{8KQRG z0Z~wEI>f_olGMcjBql$_$I?RdJzjV51KHPiZe+0L?Ff{kiO<4j3Zis|s2)jWSk9R* zFGar+4U$d-W{g;3?U@eT?s1#~)hKxeal69AN?%v`D_OYpB@EyEb<>=yjMc`Wja_}c z!O;3{OshP8D=+E=?DJuCjqB%~XnQ5X%FfRx!Alq4D7^zJHQ8hcMABb*q_LazU>=;f z;)sXubZp+=4(`NVo`hA6OYl=jHnf7ys`#Xm@Hx!lzn|0~<~5^rDShxBmoPp3ssEF5 z>&~l~ftOmEoF1Cljuw~D8(M*s9fbTBKqhOXh%hPo66kipebFx9tqfQLaLB&!`^mgD zbQ0mE6Av`V5fi?_r55fZBHCd-*a{Ww3nVk%(h^8uIv7rj?L$(g8hJ@Y`D#VMEC)=p zvhfSI5A|_9;{`Ke&v)dK+Nag?&O^`7XlY|q(wv81$~o=iF6i&DLn9C*ZS}FPJA_VD zye@;Mu`SmeI?rz$l)dD4-wIOe)4O3iDC6Tr1V*_a?uOhUNHoaaauEJRo^tE)cUCUM zOm=3~$C_JL8pFc9{tV5a8YGU=gW%sOF9d#X$5J-!i#rsR?q4vYsGc6BNw!bQkWtTV zc;pZ{(^iu{8z$bnofkO>KRh=gIjf>38viQ3xVrQGj&Y z4f!r_7tB-x)DzZhL{A9YJEZ(y=p((@KLJ>4FaCoLB zVatGny{H~#8F0ehQuoUeQ%k<>BQ?WT4N0QL?<2^4IUoO?svzN9mfnTLJK}=6;)^oF zXQpi8LIj)OI58pyTnsVOv3@IJezIYiSL0h&A9Q1nqz}f`cBL-(7s6UaQQieHn&^Jx zun6aPM?erqYh3j0&G&G8Q*&)@&2a9{9Y6eoj=RcuKJ0>Zw#nfix;;cSw360>O&1l)2azz$jF6@E>p|n9GUX9d`vgQj!%$JC1+U zEot)7na7#P`Gqt4>D#Krn{Rxg)L-1>>fb7>@ZiU&qVMmI-q!i!_p2YKb6q?O9^&^IM^_6we|oS~obxNzO#G<^S?29vJJ^-?uq zAW8~La*-$7dc8%y6$^vGB4OW6a$%y*!6pqG!riV>Sok7LMa=UIRY`P=a!D!7e^mI3 z-1PP^lI82N?o<*B8>Y6Vi1)4cU+klpL#kUi_0kFi4I5M&3~r;&6!5E~8qn3uqvTuV z(+0$n6`1^s%`{$Vq%g_2Lv8YG689CS5x5}>+I3EKc6H`9O;aN!mxYN_tWyuu-uq$u zdeh1!BKgMe)rg~e@>pT^IT_jRwm@zc?m1#2Vp?L~_x$hgxTm=@-fzCQw9&L7pFEuC zsAZ|0)78;suEn%k9=pr6&l;ZEwq>6#pKOIa7+5C7#bX*4Xj@i{xMwIgx_t^<{aHsXi2 z-MG=XX_0Av{m_rnx@JqMy0dzSgND8PFvM!Oa-?>}$bbH2opZh1kD}TJv*?A!IdnVT zIgdEH7!MLw(oaHn`59lyCfP>IXO6O4Qv3`3gZ)Dv201KDzxI?8Px5Sk53P|%>EsD- zGM(;y8PED=QShoRCzfWmYT|T(Z~teI^La0KobQ&|L6_&kuG?VRwqUz=m23357NHhl zl|qI>MM;`%wQcf&;^&t%AyqNXBe84S2Ry5P3KwNO39t39UmOK`&v~2q9G>kGIevhO z1T5b4Lg}ESqpZ+R25uE*6~hLfR(e)Qk8O@+g!6?3Gye#Wew!J3z3s5AV2EN^b!@zP z&Eh$uKO-kH#6DIrSJ7#>EHcy9@gx=`C#oxIFB+KTx_0<0Q4E}wkfkBUJO9#-t?BbJ z#UZgE?@w+?#<%>r)W1Q6iiLc&-iZ8EULE^r*BwKhU}KDR%5<_;{=WfW^R9~snlD{_ z5q$%F1t8O$ZOJ;RNmzmOaZ~`|CP@wTwnM2#>Dzi*C0YkneZ{4FueO_sn{qG*nkz0F z-99Zk4oRY{oU`0w;!C>JnFgad2JtgRe+rM}%j5=y@iW+GHX+H1L5=b+f znQvdwr>hMU$r=}^=Uuq!EV(Zc3R0{P8?dh?8V&@e?5F8M781A9>iNrfmjzl_T9kj` zsG}N~BbnO`cx4hn8)#hLF$>!|){A?%cqFQP`o?INVZmp=U90q^tWb7}d)fbPVeerB zczQ+p*3w1EwEX4YFOI3&asgiiht3B|hVI|dIP|oq*>Ht%En3bG>GB`w1c*L5)|}2S z&9l13?69PtJF&SQrFi!>Cwa4;EA9}E92)?C8tsS=bPR>H5%S?B5j20oYb$IR%W@K1 z-!w!FEMiqUiJRoPHc)jTsN@|+Jd?0wXIJXkxM z+9G4t*R<1@(`VH8Hch@R&d9ULyUmN&Qr7;|_PI6RYk09vZ5GPz%CuM;SFKcCULsiA z?A$VcmweEso~xx_aZ$FUmuFa4yZ`WVkCDzt~c zsgc#U?keT*#r@lR=&|xj;HGF_a7t)QsC)PjmIhfq8C$u`zUA~aZ!WJJHyw`$4>E7v zd*AmI!X|-cy`asU47~hKBp)M#6Jd$|1rtg_4rvQ6*KQqqwq;++$SlQ2 z(gjGIuG~m!{&am9b(I-y%5-e}^>fT=e9OeY$@PAHH6u`DX?+3|*ng?IY5rqyIAc>F z-te^5WxsfJx@LB6mdyaGX~mo7s;BIGqJzis#`1nchWq_=MzcWXG22g>pIUx~mjUxH z9#EzOwV$ef4CWooNwkIkiHA`v`w#j5-H;neWM2+bE>a$Z5($;;IUjylAQ|($z3tjr zW|w3azQ%tjy0V;BC`k=}Ji9Gv5y@`5PrjL6J1}>2TRrqTxTrU$G+AqJI`qt3B@7&U zs640HG+ivXQ63c@y%E1teVo3tJ^zv5c>S^l1x1RKL*|M(s68q_AMwNo1u!KEusZRR zPGb;x>PM#*sTly?C~F5uC*czU_Sc?#%_#mhHK6@!wLiH*zSN*Y0E!_~_F!af_QX!D z*FX;S8CfO0Fz3>5xM>BD|9+R{}gf^^@E`d9U(Nrv_+OaX|BK1P`~JT%|EuQz#ME##cadc zlKpdW!JiE9_?*HcE+!ooeg|By7UU$w)V&Z6Gknt(w}^W)TP(j3#n=*W_ZfA({!07_ z%*N!xyhr*LoP@_DLr?9QoivcQ`Bsi8RUbX?YXnTZP=8{#=c9yl$I{S{@PSTK-SvX+ z%mSBh#lcFzF-6Uc&#do5t8L(4!Q*@3icVT2aR37FzwSgdK1xYNy10E&0MdVMNkky* z2Kb*>c!q@vKxKpGp^lD73HZ-V73KI}NTR=R;AkmEGI{?6@=WOE|DA*=#Zk@7%|RX> zJX_n_Q9@DC(K-9mC2Hd0;@}J5GMq&b@8P}w!UNmILJj(bEJGtOz>7|aGqILN)2ZbzW3CtXa4YG^Es^r$$;tT=v4nK)OCLyP5&T~mX_9~ zMUYceRK!0WVe-rsQ3`kycTSRw&nz=SLx9GK_*^h__x7sgNXOzWR@%<8akMIB@PEtK zdJC3?%dG@eG(uO3{4xZ98We#ndiFiaG}t?U5t=qsX2g z+J-mzEv44z@T7eqBP@9IPxTRyvq z#5D*46)`D$?#pLA(Zil=@#SsMXOmY@cs0jXAH`3K*?2a<{35?o0bYHMdMK#=k;D^! ze8yiY3A#R^?(6~!UEqm_=}o{2%}opPtA~bOQ`ykjPa*%q7TkpVyYaS2=HSWYf4FaHoDG*S{ zPe{0GZ#v%oLcBDlQ@paZ~c=a!P-&j2ZVjjmTLb;7J>+K0<}%iC{g$XSS0jsyl9WTvyU@vxPGvLlGw1*4ofY-FhqCipD~arU z&X|#mX}uE^bLSvnofkkw=(zza_$(|ABR>lXdPI_L)fYXeC)_ivM4 zM-_muyavJuI%KAwhme&FAGl^n9~R;r_M0nJ1pj6(LCM0Y13f+I@x%3*NYEnsc#Y*K z=&DE!ryyu{f4UfyCy)Okzx`RTz=-EH;0s^zt{NW>D!oFXh#@m;PCYK{_V)H-W+M6G z;W6|v9Z{Iq{;PP4@3IsJ2M5CBI_+~OC2`;~k|kEWpw&kMcS6P{=5*^UrZmNqq;{ig zb|z181Cx3bP9M6t*E)Sh++l?!uSL>i{=DmWQtW)t(xP7g$%`{6w0%8jgWF1 zZ>dNhY=mc(TbBojzt@++{1bqu z$atVnt9|-3%H)x#_59ug4AlCvMRc#Ol}jUn&7eBw%KyG)hR1ebb>qxps=yOV(VUVC zzMzCj8BNbnLmH-pE_tf8KJ2gX4DbL#@L|VgtFpMgLR9suR#awgxAjC|APHx{#A|-f zqx5f0Cf!l_u?i8xQamDves()kv|l)Ak7v1wCkxW8dxIfNk|K|0T>dxXbWe|vyQOS@ zfyT>i62&syoSJ77lmh*IZ=2q`_Pnjy zH400BRH{c~)%(>w7AHGu_|*A?#!}pN@ny1P$3-hsdA$q!HLp*&EJ(dtU9%Z`^fpuR zssEfqol)sq2`}F_CP`Npm)$)gb`=8yX#27%n=lVg3e;}{RIHL6;u7*M;^Clz3#M1% zBj?_kRcA$wI+rL~DbA5+SgtIC$rgv3IsM!x;p74G-+wZN#)JlwQc~y?Kxdjbr7l#& zr9f5O6r0oblnOe&>46_i{&I~+Z|bfJyGu?%(O4;=x&qi08NW*LcdQ?E?R|A?e{{^@ zy!4FC?|n4?+pmz14wBZ?*Z+uu`6ybT^kB^*);3Y1Q6gW&7~8k!cGrSd(Hk0$IT;e> zIEK#(QM-2d#K1OUpN3XpkX1)%#2RcA27>^(`3>0kwiFP5{|P+*@<9DjD69|ysYYY-wWc=)<9C zpf76a|I}8};uK5Ug)V&bV>pg`iOHrBINi4uGRlSqdf85n=ySQN)O>`GfFzoAh!jJR z;FHWwn0`i!aCSx`7x9w$SE+mj-QQB1c-6^Ieq0$5r;XDe3CtHujshHpfoqQfu-LYLR_5F4ys zFI3QR0b5y>I<7?oRx^)wY&=9%Blg-6)8G}$~i^bB9@OBY7arFU4vY%mxST%GK7 z-P>;`ulyvZ-|;oc4eb+yy z4K7p{i7pYoz5q(4;1Q0@mTuBp?Nw`ZiBE}~1ack`#JMXL`$j%7XIj=b2R3>$+XDr8 zDpfA9?6{AoPBk||v1-8&D464Co-+}MQ*G%bMJr8FZj2McUvJv_mqrVrbRE5rfC2w{;vCKYw`k&HO%Y z6%malXk%rs?h?v8;&$m$X}1lnb`Q9OTwdH>u`B#el&RbaUzeZ&vX-5BEivN;0WV$9 zEM}V_MxxEWHYB7MTWb&Ue*z13Y6Y+B-%~MRSE(it3kf+!0=M?YQ+L|vPPw=E%}xOF z4!}oxreuu>PIUrdf8+zJO0~KC*RqVsmH4g$wL7~Pdu?4wf@GryMh8=Jxtk%$7a7UN z<5e*qPstn?AbbIM-ARP?H@9IzzHNE5j%6oZ^-X&|HmszV#Q0=VO&-U2mmNiPUz2N1 z!}WHzJ!X9;ig(WXDssgAOD`$&S^3V>4`LXv?^+gtE2_s<k$%h{OfcKN)D28|*NK_PQ_4^$K}A=P1F?9D^^# zlTZ;=4H1e6m5;S-j+sp_7EvyNAXIlQX@GD9N)hP^T5>okZu zg2GQ7f_I;^qx;47vJe9~7XMr+Z4m2nbgl+^@%yjCc)RIo#RkoXyso4+xWBUiDM*CD zHnU0zgklP*6|jt^s|aTnaTJWhgL7#2MXja5iMB_$kekS9qcS5N>Oo#_T;KvtL^vjq z7WbioEQ=johb8kj;yi9`pW+TVIX1wTYxCbdAEE(7weTJP6NsD13> zFonOHEx*=`kk`>kXuWT!91Mv3pmtUBIi(;@%T}+Iu5S4WooZjXYkM>s6?BB7cjj~T zGZA7qGqo+`#_O2>j+Q-gDEQ%+3d(rWexLlvH^65VKTinC^ z3U5|C{pe`hUwPMUR$yi#$y5$iD2mTYzaw0p3X7h8tkTQlbu@MMlk$(m*XT%;k}WEf zl2q`}(iX0A6ysz}(o@fvP7ruuWyCg@Ks6dt~jjP{vFE7uK82sLdo0U|8 zzSDL8v+Y{5?IXy3a;LCTN{f8EFxGT*C|_3IBJZ>1D&)tPvCZ!FDdzl#)tS$>Gj4%* zX|li1^~vetKsZ>8dzwkIpeRW|@wRq1}^w z%-Ii|GxaO@$uZ(sTJSDm_e>6|)rj>L=fiN7Y1+lsY*S%C%Uck5VA-@PIk7B*v=Q~F z#-X{j&a2|WvhkhJsM=prataO>t5l_fnLyd^BKP`3qbNitUtb~d2ES@IWVlwh<`wc7 z_6gS4{?iqXD*_#!+1|8 zr=-h0|82`32-9t)e04S;1)15OCj&P5$p7Tyqe#^~U}Y7daQQX!5wonkA?j#1r&DYScIA96yVtxjthfEf4k8a-< zWX2zs2MRrW_2EDbQt^A~eMZSVgEOVms~<~dBwET8=#Rqi17^)!^GL=5ZWB!P)mf}# zDz77*4_d;6{LIUGfC!g;2ws_&zfTX#z=$wyD~Z6}Ds0lP8yxV3eFS=Z>de1^-M$ae z9%K)@2DSDi`bQb~PbaUW<}IC$1YQAt1+!+`VN0Fh`~>E&HT(d=jyS@Bu`HNJD|1hd z(P9ma>FkCxQ0WhHzFpE?(aapu8ac~{S5Q>F!_+A(dyC3%F(FNjMW;^`AZ|6 z`2t-JxGKd}i%;>n6|? zVB$=~a6$|+U>?YRFUH6&BfKnZzVR&xidK(0xo;b`=Z=|&X6H@zUHBnpWwjC%vvHZX zi9Dt=mn*L=UF;VqwPl~kd|vRD~}zew-9 zRU<50O|U{(r4v1j@m{H8Jh#mvYz9HN^7PjM5ElF<_3lXAV^y7rlnUW^=4iHnP@_~k zo24H^k;e0IBtT_;qKJT#GoWC{FrB_NQ+X@y~XUBLt zDPkEtK5pM*Ul@a9G5TAe2>xGi^{OgnUKxFI@m$TdKs(mH%ib4qKO?{=i2mw%3<)oM zI-`OfaSoYkbLWZnuA@8}`PlOH=OZ5e zHbp~qwM7jnUir*%dVA-cTT=2^{CH4C{ckO~Kb$ASV{ilolJyEE4mBik=DC-XSoinHV|wqz8U-g_)j zKQ$c#%JeVGzpcQ$IrA_N=@;Wjxy4?iAR~_}aMAUj+5}s3ZI3m$?sVtYR?#r>)Hg!r z@tw~Jn#Jgqp#+;UuLHlr_r9MU(or{*rettCf9lO#o1e)$i> ziGtP6LCC~dBc4U4*}ODeJE9SR_j@l)KB=jy>c9CZa=6l>7o*#rW$wnYMk*2+IVljvuX16G?Sl@Y6QUrsGvJ!n_Zv!eyT=BtFdXBO#fa~`R67Da#Et+spJ07Hz@XoD&sRi*a-Uz z_@Sp`5%L6Z4#=CqtRpcHo!`0m)1;R{K!-jS@$O-N1ZlTxORDzVXd1cjw}u}Eiv9QA zr@%t9onbQZDH0pH?Qw|+X&ISFq3}Q(mC-K9iJ|}RKIMy^30|oe+ncz7zDc&tJf=c_ z=5AZQt=vBzxmkYKtp1bU@M?FcLTBSVq9AN#K=N{Bprb>anAf<`icqtRSTPg+aTtmm z!0(Y>e|!_SKU<<;ue&PU-rnwV=Ocy`$QWVl;ZEq|D4?HreHBKyqpCDQ0sB+91I@p& zwT&{q7O5Vwm|W5_Oq6m<9U&`JD8M|j@X`eK&1uTltg;fAN@Jqt3IAbQKoy@tLlegn zpDGq=8L60B$QHH^b6W!kY{X4p^_pX=vr1zGu^y^(Rv9aZIY!*ZvaTxQtpJ|(P9@xw()a;DUAFg)gf@s3k{QlNe z&);EWPNXi@M~_~w&c-gR%d{(n8UxcoYLrdKux<@{snHa z!hHi~fQQ2K>orBIxn}Bx=8~!JrAvZ7s301+7`=8<+LMI!-(>Qxg#ft$#b2a+m?d?N z7uTi`k`hz~Wv|_s@3*uFRJYR%yU)BNR@%&<*uI!)ATKXIMO>tkGZUe-inc28m|_r3 zN>9AEW*SR)vcxvl#h#qK?lN6L2A^}(1R+~WX4*G%m}X;CRFsw7!u!21booNc9OL6> zHF!7IsfLq1@glesiHYCG62!3NQotmB0e*)hBDO>2#Z95Jv?(NEC22UCUwS&Q)-4fn)~Eg6 zpaf_x6lvFv_1$pS$?L=BJQBfxlaMY&(vQN<*$g@0bTbA|%L;KBWoycx~^>=R?`H^bkG znhxZS;6iq|JZ_c>ipN`i2o&VWo%$?MNnU2{c5>FDjyJkH=1zs*;T&MpZgQXJX_*;o z3ekPO6P}CyYC|6-acUcezdMm2h+CWphRS*(^zS!6{i4!sJtJ$lvlCO(TNmLOb-jkR zbZPD?XjMS3Rh#PVb7fKmNH{ADgrwc0euXXRL#{eVb*yGew8D>Y2?)D2E0lWUp5leI zo8r*JplTjP7^^kN8hft@a1Yj#*|zkx7?r#&&;0~EZ7O2KwZooO4gG&rjp6*-WuFgb zvXI1kJAGz_4f`0Rqz{r@B_H#I7DEh=ob`4-tHCOxRwG`CPoWmSOxcSBnuo+h)+gyf zNOmJnr7}eVgDub`rYHR5>UgWk4QD#PISB<0w9|jDAKTGuQypaMts+BGMY&4Otb3W{ zD&_6Hxlx{NnRzP^7S^D2<3aJbv!&HzXb&x#U>oavUf%%l=?$OYx4tJlQ~quUWP?+V zTg~+17iOB>z-A)EBxjq1-Kveqy zOwYNV4Un``R=keBjH_ z7oe1+o#1IW2V0q$y~V)sxgh4TGfIS5xpL`g6ODc@A2sZwLCoiz?@0+9p>iV{hYf{pFy6jDy1id-0=vT8(X=R zyOXy%MZ(`Gh=@IXD1RFJJQ&U8i+X;Y*D2tII6WUSgY}1BU%F`WmAk9DBHY0eB%kbO ztN*4Bk7t2*AHL2+m5OZ@qk-W2`@`Jywk+}Qmr=+FdO%e0gA|oyMkY1b3ORa!?*xfT zS@!(U`*eiB8RHbGxFq>9^MVwr1>aRg>Cs$8e;i*wkgAZo=Y(&~`%+1IU$7Ea;K63m zg?vK6lYU+#b$YevPOp$Y(i^2x`6~OkJ(E^5M~tDb{mTud$MX(RDG{n5wT!;8wA$;z zfm|ANBM@tpt*_)^CncK-AuvrJG(2Wsq#pGg31Ct&jo0@-?BLQ{uOAE++NQ>BFbaFX zHG(c;-2wnyLlZP;*6B!|%_+H<%mgziqn?6cI#!f?n&puaY|&%uSNK&H{3v&>KwnLW$9u?Lurygd4-e#~sOb|k%BZO=Ipeg!EM zSPc;xRW3Uf6mIq^BQ3uZqpXrgikVw#mB%DXnD0|OOg<8iV6vus{cM(JLh|ZRWkgN3 zTspw7*ciYEef@PI9btpdqZ^hob5>Efw1v9jJ6yffqGc zTT`5C5(ZruHN@m<=1sb_jsm)`nl%^y66}B4rFpTJpC2p45%!P6=_j033WPL?v^g+-`Lrsvs=};>$Ld=y-ve{+i;Gs}q*xh11_+6)^I|KE-5^Fip?n zQ9;~!^aPJ#YL3aJ zZ%ABCiJuck^&nrY)};2Jomskd6pw1)N|#i`xY6%0`wPCAd5xM?z9NxjNzF{GMaY>L z0O@aNkS3MxJg_xTMT}MS7cUZKCR5IRFX2~8+rJwws0Uw#(+Q+w9o{*ts(7m8qk^`< z?BP2cEXON{UT|062_byLdYt%L82$;Z^cDuDV>yqfx?_}(C^Gb2eci9{#~uPS$NXFA zNzu|ow;5$hNV`+)V@cACwL2TG`(C-+1_XCB!R3+ycjMUfTLh~iNQ)llhz$R-yZ}L) z`O}yr)6~K`s-g>&Ezx_~pn27t{z|w;JK?j%?qsyIv{9XB%>y*#&wkXyXN%SmE9%oj z*ss3XD67smRXxoDneRrBhuli%LbTL9@hLF>W-`1n$~9iNq2wW-5ri#5`OeM&+kVBI zonxWF{9PUvuMD`FE*y9nibbITXEv%ne0;%+SA`ASXmdrDQ$tXdqD%PVgYz@=*_Dcc zCK|C&IlflCid)&44yxG(H}VRD3k9$R|EZ3JyImIwtJZ8pv5iXh=-Jromu8ggqVxOX z?*iNfD^B5)*$nv4_<1Pd;}4Y%iAGQe`oqP)`Nw3?&S#XTgyP((Q283ItP~E*Oapd% zR)ET9v&k!7O#K(ZgGh7ES?5n0CJXZyhle)>KH)cqb4sijSa5$IfgN1BqQ6YwLuH+z zbV5PmLt@)bo!r2nt#wgD!^d-uaf`zwBB}#&XF1r( z8jV7QI!q#5iVt6V(`l1+Foo$kwoHGn0}oQJWg>ZyvE{HfDOfMY=V=h+ee|ohCHR=3 z8d79Vvzmc#IGqvb8#zi9)^h#j+)F>Gl8JU!jkhL%8;J`-q!39iBLsKM| zNLS1gfdqHeriyMKZ`EFF6Or+QqM@OfFqrX53%ew{k5zNT}NlJQ4 z8mK?mQ5S3r2MLyj`vu2zNiUJ%$}fPZT4D9^W6T`$z|kSU>-KAN3yUb@i_cMSPEg?5 z(f#aoFBMzE{KpAPtD>zf+Z#_o7`{7w#)+-l7T}Nm>Xn*;H0g8oH#ps?_ZMCq&o8?Q zK^T)ezkjO)1hi^9NlGGhcXu1}85j;RV8EUKGH{jT?~nvNclh5o^x34Hj?eNe@_*lM z@HtgX^AYbK7y7>-*FL~?XH=*CpPwH53-bR>f=?)XQ@Up7s{zk{GXcm+DM^-#8-@IT D&TxZ9 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/Angular/code-examples/voice-recordings.mdx b/docusaurus/docs/Angular/code-examples/voice-recordings.mdx new file mode 100644 index 00000000..bbd09b64 --- /dev/null +++ b/docusaurus/docs/Angular/code-examples/voice-recordings.mdx @@ -0,0 +1,187 @@ +--- +id: voice-recordings +title: Voice recordings +--- + +import VoiceRecordingScreenshot from "../assets/voice-recording-screenshot.png"; +import StartRecording from "../assets/start-voice-recording.png"; +import RecordingDemo from "../assets/voice-recording-demo.png"; +import Playback from "../assets/voice-recording-playback.png"; + +The Stream API allows you to send voice recordings as attachments. This is an example attachment: + +```json +{ + "type": "voiceRecording", + "title": "audio_recording_2024-09-26T14:41:24.473Z.wav", + "asset_url": "https://dublin.stream-io-cdn.com/...", + // This is used to display a visual representation of the voice recording + "waveform_data": [ + 0.03389095297537962, + 0.03389095297537962, + 0.19684165186582253 //... + ], + // The duration of the recording in seconds + "duration": 31.19, + "file_size": 97964, + "mime_type": "audio/wav" +} +``` + +## Playing voice recordings + +The SDK can play these recordings without any additional setup: + + + +If you'd like to use your own UI, you can provide your own template using the [custom templates service](../../services/CustomTemplatesService/#voicerecordingattachmenttemplate). + +## Creating voice recordings + +If you want to let users to create voice recordings, you have to configure the SDK with a few easy steps. + +### Start recording button + +The [message input](../../components/MessageInputComponent) component can display the start recording button optionally. This is how you can enable it: + +```html + +``` + +This is how the input looks with the button enabled: + + + +You can also display your own start button. The easiest way is to use the `message-input-start` or `message-input-end` attributes, which will insert the element before or after the textarea element: + +```html + + + +``` + +### Import the `VoiceRecorderModule` + +The `VoiceRecorderModule` contains the voice recorder component and the services needed to make a recording. You have to import it like this: + +```typescript +import { StreamChatModule, VoiceRecorderModule } from "stream-chat-angular"; + +@NgModule({ + declarations: [AppComponent], + imports: [ + // other imports... + StreamChatModule, + VoiceRecorderModule, + // ...more imports + ], + bootstrap: [AppComponent], +}) +export class AppModule {} +``` + +### Display the voice recorder component + +You have to provide the voice recorder template to the message input component. The SDK provides the `VoiceRecorderComponent` for this: + +```html + + + + + +``` + +The message input provides a [`VoiceRecorderService`](../../services/VoiceRecorderService) instance, which is used by the two components to communicate. + +If you want to use your own UI, provide your own component here that uses `VoiceRecorderService` to communicate with the message input component. + +### Voice recorder component + +That's it. We can now start a voice recording: + + + +The recording can be paused and resumed. Once a user is finished recording, they can play it back: + + + +If they are unhappy with the recording, they can discard it. Once the recording is finalized, they can hit the send button. + +### Sending modes + +There are two ways to send voice recordings: + +1. Once a recording is finalized, you can immediately send a message with the recording; this is the default mode. +2. Once a recording is finalized, you can return it to the message composer and continue editing the message. + +This is how you can change between the modes: + +```typescript +constructor(private messageInputService: MessageInputConfigService) { + // Defaults to true + // Set false if you want to return to the message composer after a recording was added to the message + this.messageInputService.sendVoiceRecordingImmediately = true; +} +``` + +### Error states + +If an error occurs at any point during the recording, the recording will be stopped, and an error message will be emitted via the [`NotificationService`](../../services/NotificationService). The built-in `stream-notification-list` component will display this error message. + +### Custom recording title + +You can generate the recording title using your own logic using the `customGenerateRecordingTitle` field of the `AudioRecorderService`. + +```typescript +constructor(private audioRecorder: AudioRecorderService, private chatService: ChatClientService) { + this.audioRecorder.customGenerateRecordingTitle = ( + options: MediaRecordingTitleOptions + ) => { + const extension = options.mimeType.match(/\/([^/;]+)/)?.[1] || ""; + return `${ + this.chatService.chatClient.user?.name + }-${new Date().toISOString()}.${extension}`; + }; +} +``` + +### Custom transcoding + +Due to browser restrictions, the SDK records with the following configuration: + +- In Safari: recordings are sent in `mp4` files +- In all other browsers: recordings are created in `webm` and then transcoded into `wav` files + +The downside of the `wav` format is that it's uncompressed, which results in a larger file size. + +You can provide a custom transcoder to reduce the file size. The following example shows how to transcode to `mp3` using the [`@breezystack/lamejs`](https://www.npmjs.com/package/@breezystack/lamejs) library. + +First, install the library: + +``` +npm install @breezystack/lamejs +``` + +Then register the custom transcoder to the `TranscoderService`: + +```typescript +import { encodeWebmToMp3, TranscoderService } from "stream-chat-angular"; +import * as lamejs from "@breezystack/lamejs"; + +constructor(private transcoderService: TranscoderService) { + transcoderService.customTranscoder = (blob: Blob) => { + if (blob.type.includes('audio/mp4')) { + return blob; + } else { + return encodeWebmToMp3(blob, lamejs); + } + }; +} +``` diff --git a/docusaurus/docs/Angular/components/AttachmentListComponent.mdx b/docusaurus/docs/Angular/components/AttachmentListComponent.mdx index 7d4ef151..ed212008 100644 --- a/docusaurus/docs/Angular/components/AttachmentListComponent.mdx +++ b/docusaurus/docs/Angular/components/AttachmentListComponent.mdx @@ -122,7 +122,7 @@ The id of the message the attachments belong to #### Defined in -[projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts:39](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts#L39) +[projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts:39](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts#L39) --- @@ -134,7 +134,7 @@ The parent id of the message the attachments belong to #### Defined in -[projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts:43](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts#L43) +[projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts:43](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts#L43) --- @@ -146,7 +146,7 @@ The attachments to display #### Defined in -[projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts:47](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts#L47) +[projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts:47](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts#L47) --- @@ -158,6 +158,6 @@ Emits the state of the image carousel window #### Defined in -[projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts:51](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts#L51) +[projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts:51](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-list/attachment-list.component.ts#L51) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/AttachmentPreviewListComponent.mdx b/docusaurus/docs/Angular/components/AttachmentPreviewListComponent.mdx index be84fef2..3fc748a9 100644 --- a/docusaurus/docs/Angular/components/AttachmentPreviewListComponent.mdx +++ b/docusaurus/docs/Angular/components/AttachmentPreviewListComponent.mdx @@ -47,7 +47,7 @@ A stream that emits the current file uploads and their states #### Defined in -[projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts:17](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts#L17) +[projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts:17](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts#L17) --- @@ -59,7 +59,7 @@ An output to notify the parent component if the user tries to retry a failed upl #### Defined in -[projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts:21](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts#L21) +[projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts:21](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts#L21) --- @@ -71,6 +71,6 @@ An output to notify the parent component if the user wants to delete a file #### Defined in -[projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts:25](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts#L25) +[projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts:25](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.ts#L25) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/AutocompleteTextareaComponent.mdx b/docusaurus/docs/Angular/components/AutocompleteTextareaComponent.mdx index d5159d8d..4a17a50c 100644 --- a/docusaurus/docs/Angular/components/AutocompleteTextareaComponent.mdx +++ b/docusaurus/docs/Angular/components/AutocompleteTextareaComponent.mdx @@ -51,7 +51,7 @@ TextareaInterface.value #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:49](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L49) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:49](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L49) --- @@ -67,7 +67,7 @@ TextareaInterface.placeholder #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:53](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L53) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:53](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L53) --- @@ -83,7 +83,7 @@ TextareaInterface.areMentionsEnabled #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:57](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L57) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:57](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L57) --- @@ -99,7 +99,7 @@ TextareaInterface.inputMode #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:61](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L61) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:61](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L61) --- @@ -115,7 +115,7 @@ TextareaInterface.mentionScope #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:65](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L65) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:65](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L65) --- @@ -131,7 +131,7 @@ TextareaInterface.autoFocus #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:69](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L69) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:69](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L69) --- @@ -147,7 +147,7 @@ TextareaInterface.valueChange #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:73](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L73) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:73](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L73) --- @@ -163,7 +163,7 @@ TextareaInterface.send #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:77](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L77) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:77](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L77) --- @@ -179,6 +179,6 @@ TextareaInterface.userMentions #### Defined in -[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:81](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L81) +[projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts:81](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.ts#L81) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/AvatarComponent.mdx b/docusaurus/docs/Angular/components/AvatarComponent.mdx index 500fab99..16de5550 100644 --- a/docusaurus/docs/Angular/components/AvatarComponent.mdx +++ b/docusaurus/docs/Angular/components/AvatarComponent.mdx @@ -71,7 +71,7 @@ An optional name of the image, used for fallback image or image title (if `image #### Defined in -[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:36](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L36) +[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:36](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L36) --- @@ -83,7 +83,7 @@ The URL of the image to be displayed. If the image can't be displayed the first #### Defined in -[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:40](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L40) +[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:40](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L40) --- @@ -95,7 +95,7 @@ The location the avatar will be displayed in #### Defined in -[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:44](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L44) +[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:44](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L44) --- @@ -107,7 +107,7 @@ The channel the avatar belongs to (if avatar of a channel is displayed) #### Defined in -[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:48](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L48) +[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:48](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L48) --- @@ -119,7 +119,7 @@ The user the avatar belongs to (if avatar of a user is displayed) #### Defined in -[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:52](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L52) +[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:52](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L52) --- @@ -131,7 +131,7 @@ The type of the avatar: channel if channel avatar is displayed, user if user ava #### Defined in -[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:56](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L56) +[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:56](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L56) --- @@ -143,7 +143,7 @@ If a channel avatar is displayed, and if the channel has exactly two members a g #### Defined in -[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:60](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L60) +[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:60](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L60) --- @@ -155,6 +155,6 @@ If channel/user image isn't provided the initials of the name of the channel/use #### Defined in -[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:64](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L64) +[projects/stream-chat-angular/src/lib/avatar/avatar.component.ts:64](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar/avatar.component.ts#L64) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/AvatarPlaceholderComponent.mdx b/docusaurus/docs/Angular/components/AvatarPlaceholderComponent.mdx index 015840de..b5f30ff9 100644 --- a/docusaurus/docs/Angular/components/AvatarPlaceholderComponent.mdx +++ b/docusaurus/docs/Angular/components/AvatarPlaceholderComponent.mdx @@ -12,7 +12,7 @@ An optional name of the image, used for fallback image or image title (if `image #### Defined in -[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:23](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L23) +[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:23](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L23) --- @@ -24,7 +24,7 @@ The URL of the image to be displayed. If the image can't be displayed the first #### Defined in -[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:27](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L27) +[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:27](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L27) --- @@ -36,7 +36,7 @@ The location the avatar will be displayed in #### Defined in -[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:31](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L31) +[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:31](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L31) --- @@ -48,7 +48,7 @@ The channel the avatar belongs to (if avatar of a channel is displayed) #### Defined in -[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:35](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L35) +[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:35](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L35) --- @@ -60,7 +60,7 @@ The user the avatar belongs to (if avatar of a user is displayed) #### Defined in -[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:39](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L39) +[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:39](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L39) --- @@ -72,7 +72,7 @@ The type of the avatar: channel if channel avatar is displayed, user if user ava #### Defined in -[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:43](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L43) +[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:43](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L43) --- @@ -84,7 +84,7 @@ If channel/user image isn't provided the initials of the name of the channel/use #### Defined in -[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:47](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L47) +[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:47](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L47) --- @@ -96,6 +96,6 @@ If a channel avatar is displayed, and if the channel has exactly two members a g #### Defined in -[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:53](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L53) +[projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts:53](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/avatar-placeholder/avatar-placeholder.component.ts#L53) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/ChannelPreviewComponent.mdx b/docusaurus/docs/Angular/components/ChannelPreviewComponent.mdx index ba1bca02..090a41fd 100644 --- a/docusaurus/docs/Angular/components/ChannelPreviewComponent.mdx +++ b/docusaurus/docs/Angular/components/ChannelPreviewComponent.mdx @@ -37,6 +37,6 @@ The channel to be displayed #### Defined in -[projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts:28](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts#L28) +[projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts:28](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.ts#L28) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/IconComponent.mdx b/docusaurus/docs/Angular/components/IconComponent.mdx index 1ee918a2..7cc5cb57 100644 --- a/docusaurus/docs/Angular/components/IconComponent.mdx +++ b/docusaurus/docs/Angular/components/IconComponent.mdx @@ -33,6 +33,6 @@ The icon to display, the list of [supported icons](https://github.com/GetStream/ #### Defined in -[projects/stream-chat-angular/src/lib/icon/icon.component.ts:37](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/icon/icon.component.ts#L37) +[projects/stream-chat-angular/src/lib/icon/icon.component.ts:39](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/icon/icon.component.ts#L39) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/IconPlaceholderComponent.mdx b/docusaurus/docs/Angular/components/IconPlaceholderComponent.mdx index d938cca5..f66b7fe9 100644 --- a/docusaurus/docs/Angular/components/IconPlaceholderComponent.mdx +++ b/docusaurus/docs/Angular/components/IconPlaceholderComponent.mdx @@ -12,6 +12,6 @@ The icon to display, the list of [supported icons](https://github.com/GetStream/ #### Defined in -[projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.ts:18](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.ts#L18) +[projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.ts:18](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.ts#L18) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/MessageActionsBoxComponent.mdx b/docusaurus/docs/Angular/components/MessageActionsBoxComponent.mdx index ded39d6b..a2c194d2 100644 --- a/docusaurus/docs/Angular/components/MessageActionsBoxComponent.mdx +++ b/docusaurus/docs/Angular/components/MessageActionsBoxComponent.mdx @@ -48,7 +48,7 @@ Indicates if the message actions are belonging to a message that was sent by the #### Defined in -[projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts:37](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts#L37) +[projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts:37](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts#L37) --- @@ -60,7 +60,7 @@ The message the actions will be executed on #### Defined in -[projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts:41](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts#L41) +[projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts:41](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts#L41) --- @@ -72,7 +72,7 @@ The HTML element which contains the message text, it's used for the "copy messag #### Defined in -[projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts:45](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts#L45) +[projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts:45](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts#L45) --- @@ -84,6 +84,6 @@ The list of [channel capabilities](https://getstream.io/chat/docs/javascript/cha #### Defined in -[projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts:49](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts#L49) +[projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts:49](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions-box/message-actions-box.component.ts#L49) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/MessageComponent.mdx b/docusaurus/docs/Angular/components/MessageComponent.mdx index 28308e19..e7871d5a 100644 --- a/docusaurus/docs/Angular/components/MessageComponent.mdx +++ b/docusaurus/docs/Angular/components/MessageComponent.mdx @@ -73,7 +73,7 @@ The message to be displayed #### Defined in -[projects/stream-chat-angular/src/lib/message/message.component.ts:64](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message/message.component.ts#L64) +[projects/stream-chat-angular/src/lib/message/message.component.ts:64](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message/message.component.ts#L64) --- @@ -85,7 +85,7 @@ The list of [channel capabilities](https://getstream.io/chat/docs/javascript/cha #### Defined in -[projects/stream-chat-angular/src/lib/message/message.component.ts:68](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message/message.component.ts#L68) +[projects/stream-chat-angular/src/lib/message/message.component.ts:68](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message/message.component.ts#L68) --- @@ -97,7 +97,7 @@ If `true`, the message status (sending, sent, who read the message) is displayed #### Defined in -[projects/stream-chat-angular/src/lib/message/message.component.ts:72](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message/message.component.ts#L72) +[projects/stream-chat-angular/src/lib/message/message.component.ts:72](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message/message.component.ts#L72) --- @@ -109,7 +109,7 @@ Determines if the message is being dispalyed in a channel or in a [thread](https #### Defined in -[projects/stream-chat-angular/src/lib/message/message.component.ts:76](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message/message.component.ts#L76) +[projects/stream-chat-angular/src/lib/message/message.component.ts:76](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message/message.component.ts#L76) --- @@ -121,7 +121,7 @@ Highlighting is used to add visual emphasize to a message when jumping to the me #### Defined in -[projects/stream-chat-angular/src/lib/message/message.component.ts:80](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message/message.component.ts#L80) +[projects/stream-chat-angular/src/lib/message/message.component.ts:80](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message/message.component.ts#L80) --- @@ -133,6 +133,6 @@ An Observable that emits when the message list is scrolled, it's used to prevent #### Defined in -[projects/stream-chat-angular/src/lib/message/message.component.ts:84](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message/message.component.ts#L84) +[projects/stream-chat-angular/src/lib/message/message.component.ts:84](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message/message.component.ts#L84) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/MessageInputComponent.mdx b/docusaurus/docs/Angular/components/MessageInputComponent.mdx index 6f4ec10e..9ff99e01 100644 --- a/docusaurus/docs/Angular/components/MessageInputComponent.mdx +++ b/docusaurus/docs/Angular/components/MessageInputComponent.mdx @@ -8,6 +8,10 @@ The `MessageInput` component can use the [`Textarea`](./TextareaComponent.mdx) o The SDK doesn't have a built-in emoji picker, but it has support for providing your own template. Follow our [emoji picker guide](../code-examples/emoji-picker.mdx) to get to know more. +## Voice recorder + +To enable recording voice messages, please follow the [voice recordings guide](../../code-examples/voice-recordings). + ## Customization If you want to provide your own message input component you'll have to provide it in the following places: @@ -17,6 +21,15 @@ If you want to provide your own message input component you'll have to provide i You can replace the textarea inside the message input following our [Custom textarea guide](../../code-examples/custom-textarea) +You can instert custom HTML content to the start or end of the message input using the `message-input-start` or `message-input-end` attributes: + +```html + +

Custom content injected before the textarea
+
Custom content injected after the textarea
+ +``` + See [our customization guide](../concepts/customization.mdx) for more information. :::note @@ -59,7 +72,7 @@ If file upload is enabled, the user can open a file selector from the input. Ple #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:59](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L59) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:64](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L64) --- @@ -71,7 +84,7 @@ If true, users can mention other users in messages. You also [need to use the `A #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:63](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L63) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:68](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L68) --- @@ -83,7 +96,7 @@ The scope for user mentions, either members of the current channel of members of #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:67](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L67) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:72](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L72) --- @@ -95,7 +108,7 @@ Determines if the message is being dispalyed in a channel or in a [thread](https #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:71](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L71) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:76](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L76) --- @@ -107,7 +120,7 @@ If true, users can select multiple files to upload. If no value is provided, it #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:75](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L75) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:80](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L80) --- @@ -119,7 +132,7 @@ The message to edit #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:79](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L79) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:84](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L84) --- @@ -131,7 +144,7 @@ An observable that can be used to trigger message sending from the outside #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:83](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L83) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:88](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L88) --- @@ -143,7 +156,7 @@ In `desktop` mode the `Enter` key will trigger message sending, in `mobile` mode #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:87](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L87) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:92](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L92) --- @@ -155,7 +168,7 @@ Enables or disables auto focus on the textarea element #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:91](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L91) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:96](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L96) --- @@ -169,7 +182,7 @@ If you don't need that behavior, you can turn this of with this flag. In that ca #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:97](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L97) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:102](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L102) --- @@ -181,7 +194,19 @@ Use this input to control wether a send button is rendered or not. If you don't #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:101](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L101) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:106](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L106) + +--- + +### displayVoiceRecordingButton + +• **displayVoiceRecordingButton**: `boolean` = `false` + +You can enable/disable voice recordings with this input + +#### Defined in + +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:110](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L110) --- @@ -193,6 +218,6 @@ Emits when a message was successfuly sent or updated #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:105](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L105) +[projects/stream-chat-angular/src/lib/message-input/message-input.component.ts:114](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts#L114) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/MessageListComponent.mdx b/docusaurus/docs/Angular/components/MessageListComponent.mdx index b340336c..7a936cac 100644 --- a/docusaurus/docs/Angular/components/MessageListComponent.mdx +++ b/docusaurus/docs/Angular/components/MessageListComponent.mdx @@ -33,7 +33,7 @@ Determines if the message list should display channel messages or [thread messag #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:62](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L62) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:63](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L63) --- @@ -45,7 +45,7 @@ The direction of the messages in the list, `bottom-to-top` means newest message #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:66](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L66) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:67](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L67) --- @@ -57,7 +57,7 @@ You can hide the "jump to latest" button while scrolling. A potential use-case f #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:71](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L71) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:72](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L72) --- @@ -69,7 +69,7 @@ If `true` date separators will be displayed #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:75](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L75) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:76](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L76) --- @@ -81,7 +81,7 @@ If `true` unread indicator will be displayed #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:79](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L79) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:80](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L80) --- @@ -93,7 +93,7 @@ If date separators are displayed, you can set the horizontal position of the dat #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:83](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L83) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:84](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L84) --- @@ -105,7 +105,7 @@ If date separators are displayed, you can set the horizontal position of the dat #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:87](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L87) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:88](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L88) --- @@ -119,7 +119,7 @@ This is only applicable for `main` mode, as threads doesn't have read infromatio #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:94](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L94) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:95](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L95) --- @@ -131,6 +131,6 @@ You can turn on and off the loading indicator that signals to users that more me #### Defined in -[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:98](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L98) +[projects/stream-chat-angular/src/lib/message-list/message-list.component.ts:99](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts#L99) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/MessageReactionsComponent.mdx b/docusaurus/docs/Angular/components/MessageReactionsComponent.mdx index 6846f45a..d1e78d4a 100644 --- a/docusaurus/docs/Angular/components/MessageReactionsComponent.mdx +++ b/docusaurus/docs/Angular/components/MessageReactionsComponent.mdx @@ -53,7 +53,19 @@ The id of the message the reactions belong to #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:33](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L33) +[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:36](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L36) + +--- + +### messageReactionGroups + +• **messageReactionGroups**: `undefined` \| \{ `[key: string]`: `ReactionGroupResponse`; } = `undefined` + +The number of reactions grouped by [reaction types](https://github.com/GetStream/stream-chat-angular/tree/master/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts) + +#### Defined in + +[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:40](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L40) --- @@ -63,9 +75,13 @@ The id of the message the reactions belong to The number of reactions grouped by [reaction types](https://github.com/GetStream/stream-chat-angular/tree/master/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts) +**`Deprecated`** + +use `messageReactionGroups` + #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:37](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L37) +[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:47](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L47) --- @@ -75,9 +91,13 @@ The number of reactions grouped by [reaction types](https://github.com/GetStream List of reactions of a [message](../types/stream-message.mdx), used to display the users of a reaction type. +**`Deprecated`** + +you can fetch the reactions using [`messageReactionsService.queryReactions()`](https://getstream.io/chat/docs/sdk/angular/services/MessageReactionsService/#queryreactions) + #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:42](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L42) +[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:53](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L53) --- @@ -89,6 +109,6 @@ List of the user's own reactions of a [message](../types/stream-message.mdx), us #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:46](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L46) +[projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts:57](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts#L57) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/MessageReactionsSelectorComponent.mdx b/docusaurus/docs/Angular/components/MessageReactionsSelectorComponent.mdx index 3c91ff2b..9214ea13 100644 --- a/docusaurus/docs/Angular/components/MessageReactionsSelectorComponent.mdx +++ b/docusaurus/docs/Angular/components/MessageReactionsSelectorComponent.mdx @@ -46,7 +46,7 @@ List of the user's own reactions of a [message](../types/stream-message.mdx), us #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions-selector/message-reactions-selector.component.ts:29](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions-selector/message-reactions-selector.component.ts#L29) +[projects/stream-chat-angular/src/lib/message-reactions-selector/message-reactions-selector.component.ts:29](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions-selector/message-reactions-selector.component.ts#L29) --- @@ -58,6 +58,6 @@ The id of the message the reactions belong to #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions-selector/message-reactions-selector.component.ts:33](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions-selector/message-reactions-selector.component.ts#L33) +[projects/stream-chat-angular/src/lib/message-reactions-selector/message-reactions-selector.component.ts:33](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions-selector/message-reactions-selector.component.ts#L33) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/ModalComponent.mdx b/docusaurus/docs/Angular/components/ModalComponent.mdx index 764451b9..520c891a 100644 --- a/docusaurus/docs/Angular/components/ModalComponent.mdx +++ b/docusaurus/docs/Angular/components/ModalComponent.mdx @@ -28,7 +28,7 @@ If `true` the modal will be displayed, if `false` the modal will be hidden #### Defined in -[projects/stream-chat-angular/src/lib/modal/modal.component.ts:25](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/modal/modal.component.ts#L25) +[projects/stream-chat-angular/src/lib/modal/modal.component.ts:25](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/modal/modal.component.ts#L25) --- @@ -40,7 +40,7 @@ The content of the modal (can also be provided using `ng-content`) #### Defined in -[projects/stream-chat-angular/src/lib/modal/modal.component.ts:29](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/modal/modal.component.ts#L29) +[projects/stream-chat-angular/src/lib/modal/modal.component.ts:29](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/modal/modal.component.ts#L29) --- @@ -52,6 +52,6 @@ Emits `true` if the modal becomes visible, and `false` if the modal is closed. #### Defined in -[projects/stream-chat-angular/src/lib/modal/modal.component.ts:33](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/modal/modal.component.ts#L33) +[projects/stream-chat-angular/src/lib/modal/modal.component.ts:33](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/modal/modal.component.ts#L33) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/NotificationComponent.mdx b/docusaurus/docs/Angular/components/NotificationComponent.mdx index a61fae78..1e760ad4 100644 --- a/docusaurus/docs/Angular/components/NotificationComponent.mdx +++ b/docusaurus/docs/Angular/components/NotificationComponent.mdx @@ -24,7 +24,7 @@ The type of the notification #### Defined in -[projects/stream-chat-angular/src/lib/notification/notification.component.ts:16](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/notification/notification.component.ts#L16) +[projects/stream-chat-angular/src/lib/notification/notification.component.ts:16](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/notification/notification.component.ts#L16) --- @@ -36,6 +36,6 @@ The content of the notification (can also be provided using `ng-content`) #### Defined in -[projects/stream-chat-angular/src/lib/notification/notification.component.ts:20](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/notification/notification.component.ts#L20) +[projects/stream-chat-angular/src/lib/notification/notification.component.ts:20](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/notification/notification.component.ts#L20) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/PaginatedListComponent.mdx b/docusaurus/docs/Angular/components/PaginatedListComponent.mdx index 6fb1ad44..accfa433 100644 --- a/docusaurus/docs/Angular/components/PaginatedListComponent.mdx +++ b/docusaurus/docs/Angular/components/PaginatedListComponent.mdx @@ -24,4 +24,69 @@ The paginated list component relies on data provided by the parent component. Yo You can provide the HTML template for the list items, see above example. [//]: # "Start of generated content" + +## Inputs and outputs + +### items + +• **items**: `T`[] = `[]` + +The items to display + +#### Defined in + +[projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts:28](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts#L28) + +--- + +### isLoading + +• **isLoading**: `boolean` = `false` + +If `true`, the loading indicator will be displayed + +#### Defined in + +[projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts:32](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts#L32) + +--- + +### hasMore + +• **hasMore**: `boolean` = `false` + +If `false` the component won't ask for more data vua the `loadMore` output + +#### Defined in + +[projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts:36](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts#L36) + +--- + +### trackBy + +• **trackBy**: `TrackByFunction`\<`T`\> + +The `trackBy` to use with the `NgFor` directive + +**`Param`** + +#### Defined in + +[projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts:42](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts#L42) + +--- + +### loadMore + +• `Readonly` **loadMore**: `EventEmitter`\<`void`\> + +The component will signal via this output when more items should be fetched + +The new items should be appended to the `items` array + +#### Defined in + +[projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts:49](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/paginated-list/paginated-list.component.ts#L49) + [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/TextareaComponent.mdx b/docusaurus/docs/Angular/components/TextareaComponent.mdx index 7f8cb803..c82cdb17 100644 --- a/docusaurus/docs/Angular/components/TextareaComponent.mdx +++ b/docusaurus/docs/Angular/components/TextareaComponent.mdx @@ -48,7 +48,7 @@ TextareaInterface.value #### Defined in -[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:35](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L35) +[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:35](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L35) --- @@ -64,7 +64,7 @@ TextareaInterface.placeholder #### Defined in -[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:39](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L39) +[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:39](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L39) --- @@ -80,7 +80,7 @@ TextareaInterface.inputMode #### Defined in -[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:43](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L43) +[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:43](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L43) --- @@ -96,7 +96,7 @@ TextareaInterface.autoFocus #### Defined in -[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:47](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L47) +[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:47](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L47) --- @@ -112,7 +112,7 @@ TextareaInterface.valueChange #### Defined in -[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:51](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L51) +[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:51](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L51) --- @@ -128,6 +128,6 @@ TextareaInterface.send #### Defined in -[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:55](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L55) +[projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts:55](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/textarea/textarea.component.ts#L55) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/UserListComponent.mdx b/docusaurus/docs/Angular/components/UserListComponent.mdx index 011d55de..385e2b65 100644 --- a/docusaurus/docs/Angular/components/UserListComponent.mdx +++ b/docusaurus/docs/Angular/components/UserListComponent.mdx @@ -18,4 +18,55 @@ The user list component relies on data provided by the parent component: The component is built on top of the [`PaginatedListComponent`](../../components/PaginatedListComponent.mdx), you can use that component to build your own user list component. [//]: # "Start of generated content" + +## Inputs and outputs + +### users + +• **users**: `UserResponse`\<`DefaultStreamChatGenerics`\>[] = `[]` + +The users to display + +#### Defined in + +[projects/stream-chat-angular/src/lib/user-list/user-list.component.ts:17](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/user-list/user-list.component.ts#L17) + +--- + +### isLoading + +• **isLoading**: `boolean` = `false` + +If `true`, the loading indicator will be displayed + +#### Defined in + +[projects/stream-chat-angular/src/lib/user-list/user-list.component.ts:21](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/user-list/user-list.component.ts#L21) + +--- + +### hasMore + +• **hasMore**: `boolean` = `false` + +If `false` the component won't ask for more data vua the `loadMore` output + +#### Defined in + +[projects/stream-chat-angular/src/lib/user-list/user-list.component.ts:25](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/user-list/user-list.component.ts#L25) + +--- + +### loadMore + +• `Readonly` **loadMore**: `EventEmitter`\<`void`\> + +The component will signal via this output when more items should be fetched + +The new items should be appended to the `items` array + +#### Defined in + +[projects/stream-chat-angular/src/lib/user-list/user-list.component.ts:31](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/user-list/user-list.component.ts#L31) + [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/VoiceRecorderComponent.mdx b/docusaurus/docs/Angular/components/VoiceRecorderComponent.mdx new file mode 100644 index 00000000..dbb19b40 --- /dev/null +++ b/docusaurus/docs/Angular/components/VoiceRecorderComponent.mdx @@ -0,0 +1,16 @@ +import VoiceRecorder from "../assets/voice-recorder.png"; + +The `VoiceRecorderComponent` makes it possible to record audio, and then upload it as a voice recording attachment + + + +## Usage + +Please refer to the [voice recordings guide](../../code-examples/voice-recordings) + +## Customization + +Please refer to the [voice recordings guide](../../code-examples/voice-recordings) + +[//]: # "Start of generated content" +[//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/VoiceRecorderWavebarComponent.mdx b/docusaurus/docs/Angular/components/VoiceRecorderWavebarComponent.mdx new file mode 100644 index 00000000..108e08e8 --- /dev/null +++ b/docusaurus/docs/Angular/components/VoiceRecorderWavebarComponent.mdx @@ -0,0 +1,28 @@ +import VoiceRecorderWavebar from "../assets/voice-recorder-wavebar.png"; + +The `VoiceRecorderWavebarComponent` displays the amplitudes of the recording while the recoding is in progress + + + +The component doesn't have any inputs, instead it uses the [`AudioRecorderService`](../../services/AudioRecorderService.mdx) and the [`AmplitudeRecorderService`](../../services/AmplitudeRecorderService.mdx) to gather all necessary data. + +## Usage + +```html + +``` + +```typescript +isRecording$: Observable; + +constructor(public readonly recorder: AudioRecorderService) { + this.isRecording$ = this.recorder.recordingState$.pipe(map(s => s === MediaRecordingState.RECORDING || s === MediaRecordingState.PAUSED)); +} +``` + +## Customization + +[//]: # "Start of generated content" +[//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/VoiceRecordingComponent.mdx b/docusaurus/docs/Angular/components/VoiceRecordingComponent.mdx index 74b1b26f..b1295cae 100644 --- a/docusaurus/docs/Angular/components/VoiceRecordingComponent.mdx +++ b/docusaurus/docs/Angular/components/VoiceRecordingComponent.mdx @@ -82,6 +82,6 @@ The voice recording attachment #### Defined in -[projects/stream-chat-angular/src/lib/voice-recording/voice-recording.component.ts:28](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.component.ts#L28) +[projects/stream-chat-angular/src/lib/voice-recording/voice-recording.component.ts:29](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.component.ts#L29) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/components/VoiceRecordingWavebarComponent.mdx b/docusaurus/docs/Angular/components/VoiceRecordingWavebarComponent.mdx index c5b73616..e6f56be5 100644 --- a/docusaurus/docs/Angular/components/VoiceRecordingWavebarComponent.mdx +++ b/docusaurus/docs/Angular/components/VoiceRecordingWavebarComponent.mdx @@ -34,7 +34,7 @@ The audio element that plays the voice recording #### Defined in -[projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts:28](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts#L28) +[projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts:29](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts#L29) --- @@ -46,7 +46,7 @@ The waveform data to visualize #### Defined in -[projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts:32](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts#L32) +[projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts:33](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts#L33) --- @@ -58,6 +58,6 @@ The duration of the voice recording in seconds #### Defined in -[projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts:36](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts#L36) +[projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts:37](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts#L37) [//]: # "End of generated content" diff --git a/docusaurus/docs/Angular/services/AmplitudeRecorderService.mdx b/docusaurus/docs/Angular/services/AmplitudeRecorderService.mdx new file mode 100644 index 00000000..00dda070 --- /dev/null +++ b/docusaurus/docs/Angular/services/AmplitudeRecorderService.mdx @@ -0,0 +1,89 @@ +# AmplitudeRecorderService + +The `AmplitudeRecorderService` is a utility service used to create amplitude values for voice recordings, making it possible to display a wave bar + +## Accessors + +### amplitudes + +• `get` **amplitudes**(): `number`[] + +The recorded amplitudes + +#### Returns + +`number`[] + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts:76](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts#L76) + +## Methods + +### pause + +▸ **pause**(): `void` + +Temporarily pause amplitude recording, recording can be resumed with `resume` + +#### Returns + +`void` + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts:96](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts#L96) + +--- + +### resume + +▸ **resume**(): `void` + +Resume amplited recording after it was pasued + +#### Returns + +`void` + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts:104](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts#L104) + +--- + +### start + +▸ **start**(`stream`): `void` + +Start amplitude recording for the given media stream + +#### Parameters + +| Name | Type | +| :------- | :------------ | +| `stream` | `MediaStream` | + +#### Returns + +`void` + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts:84](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts#L84) + +--- + +### stop + +▸ **stop**(): `void` + +Stop the amplitude recording and frees up used resources + +#### Returns + +`void` + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts:129](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts#L129) diff --git a/docusaurus/docs/Angular/services/AttachmentConfigurationService.mdx b/docusaurus/docs/Angular/services/AttachmentConfigurationService.mdx index 8f3fca9c..17c34680 100644 --- a/docusaurus/docs/Angular/services/AttachmentConfigurationService.mdx +++ b/docusaurus/docs/Angular/services/AttachmentConfigurationService.mdx @@ -32,7 +32,7 @@ A custom handler can be provided to override the default giphy attachment (GIFs #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:37](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L37) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:37](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L37) --- @@ -60,7 +60,7 @@ A custom handler can be provided to override the default image attachment (image #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:22](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L22) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:22](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L22) --- @@ -86,7 +86,7 @@ A custom handler can be provided to override the default scraped image attachmen #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:43](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L43) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:43](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L43) --- @@ -113,7 +113,7 @@ A custom handler can be provided to override the default video attachment (video #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:30](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L30) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:30](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L30) --- @@ -125,7 +125,7 @@ You can turn on/off thumbnail generation for video attachments #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:49](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L49) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:49](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L49) ## Methods @@ -147,7 +147,7 @@ Handles the configuration for giphy attachments, it's possible to provide your o #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:180](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L180) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:180](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L180) --- @@ -171,7 +171,7 @@ Handles the configuration for image attachments, it's possible to provide your o #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:57](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L57) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:57](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L57) --- @@ -193,7 +193,7 @@ Handles the configuration for scraped image attachments, it's possible to provid #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:200](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L200) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:200](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L200) --- @@ -216,4 +216,4 @@ Handles the configuration for video attachments, it's possible to provide your o #### Defined in -[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:123](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L123) +[projects/stream-chat-angular/src/lib/attachment-configuration.service.ts:123](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment-configuration.service.ts#L123) diff --git a/docusaurus/docs/Angular/services/AttachmentService.mdx b/docusaurus/docs/Angular/services/AttachmentService.mdx index ba0dea51..93981cba 100644 --- a/docusaurus/docs/Angular/services/AttachmentService.mdx +++ b/docusaurus/docs/Angular/services/AttachmentService.mdx @@ -20,7 +20,7 @@ Emits the number of uploads in progress. #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:25](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L25) +[projects/stream-chat-angular/src/lib/attachment.service.ts:29](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L29) --- @@ -32,7 +32,7 @@ Emits the state of the uploads ([`AttachmentUpload[]`](https://github.com/GetStr #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:29](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L29) +[projects/stream-chat-angular/src/lib/attachment.service.ts:33](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L33) ## Methods @@ -56,7 +56,7 @@ Note: If you just want to use your own CDN for file uploads, you don't necessary #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:120](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L120) +[projects/stream-chat-angular/src/lib/attachment.service.ts:157](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L157) --- @@ -78,7 +78,7 @@ Maps attachments received from the Stream API to uploads. This is useful when ed #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:206](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L206) +[projects/stream-chat-angular/src/lib/attachment.service.ts:246](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L246) --- @@ -100,7 +100,7 @@ Deletes an attachment, the attachment can have any state (`error`, `uploading` o #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:145](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L145) +[projects/stream-chat-angular/src/lib/attachment.service.ts:182](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L182) --- @@ -124,7 +124,7 @@ A promise with true or false. If false is returned the upload was canceled becau #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:62](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L62) +[projects/stream-chat-angular/src/lib/attachment.service.ts:99](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L99) --- @@ -142,7 +142,7 @@ the attachments #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:175](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L175) +[projects/stream-chat-angular/src/lib/attachment.service.ts:212](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L212) --- @@ -158,7 +158,7 @@ Resets the attachments uploads (for example after the message with the attachmen #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:53](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L53) +[projects/stream-chat-angular/src/lib/attachment.service.ts:57](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L57) --- @@ -182,4 +182,28 @@ A promise with the result #### Defined in -[projects/stream-chat-angular/src/lib/attachment.service.ts:130](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/attachment.service.ts#L130) +[projects/stream-chat-angular/src/lib/attachment.service.ts:167](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L167) + +--- + +### uploadVoiceRecording + +▸ **uploadVoiceRecording**(`audioRecording`): `Promise`\<`boolean`\> + +Upload a voice recording + +#### Parameters + +| Name | Type | +| :--------------- | :--------------- | +| `audioRecording` | `AudioRecording` | + +#### Returns + +`Promise`\<`boolean`\> + +A promise with true or false. If false is returned the upload was canceled because of a client side error. The error is emitted via the `NotificationService`. + +#### Defined in + +[projects/stream-chat-angular/src/lib/attachment.service.ts:66](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/attachment.service.ts#L66) diff --git a/docusaurus/docs/Angular/services/AudioRecorderService.mdx b/docusaurus/docs/Angular/services/AudioRecorderService.mdx new file mode 100644 index 00000000..d1479ed6 --- /dev/null +++ b/docusaurus/docs/Angular/services/AudioRecorderService.mdx @@ -0,0 +1,117 @@ +# AudioRecorderService + +The `AudioRecorderService` can record an audio file, the SDK uses this to record a voice message + +## Hierarchy + +- `MultimediaRecorder`<`Omit`\<`AudioRecording`, keyof `MediaRecording`\>\> + + ↳ **`AudioRecorderService`** + +## Properties + +### config + +• **config**: `MediaRecorderConfig` + +Due to browser restrictions the following config is used: + +- In Safari we record in audio/mp4 +- For all other browsers we use audio/webm (which is then transcoded to wav) + +#### Overrides + +MultimediaRecorder.config + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts:24](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts#L24) + +## Methods + +### pause + +▸ **pause**(): `void` + +Pause audio recording, it can be restarted using `resume` + +#### Returns + +`void` + +#### Overrides + +MultimediaRecorder.pause + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts:62](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts#L62) + +--- + +### resume + +▸ **resume**(): `void` + +Resume a previously paused recording + +#### Returns + +`void` + +#### Overrides + +MultimediaRecorder.resume + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts:73](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts#L73) + +--- + +### start + +▸ **start**(): `Promise`\<`void`\> + +Start audio recording + +#### Returns + +`Promise`\<`void`\> + +#### Overrides + +MultimediaRecorder.start + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts:49](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts#L49) + +--- + +### stop + +▸ **stop**(`options?`): `Promise`\<`MediaRecording` & `Omit`\<`AudioRecording`, keyof `MediaRecording`\>\> + +Stop the recording and free up used resources + +#### Parameters + +| Name | Type | Description | +| :--------------- | :-------- | :-------------------------------------------------------------------------- | +| `options?` | `Object` | | +| `options.cancel` | `boolean` | if this is `true` no recording will be created, but resources will be freed | + +#### Returns + +`Promise`\<`MediaRecording` & `Omit`\<`AudioRecording`, keyof `MediaRecording`\>\> + +the recording + +#### Overrides + +MultimediaRecorder.stop + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts:87](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts#L87) diff --git a/docusaurus/docs/Angular/services/ChannelService.mdx b/docusaurus/docs/Angular/services/ChannelService.mdx index eef7b498..401c59d5 100644 --- a/docusaurus/docs/Angular/services/ChannelService.mdx +++ b/docusaurus/docs/Angular/services/ChannelService.mdx @@ -24,7 +24,7 @@ The active channel will always be marked as read when a new message is received #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:80](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L80) +[projects/stream-chat-angular/src/lib/channel.service.ts:80](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L80) --- @@ -38,7 +38,7 @@ This property isn't always updated, please use `channel.read` to display up-to-d #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:132](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L132) +[projects/stream-chat-angular/src/lib/channel.service.ts:132](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L132) --- @@ -50,7 +50,7 @@ Emits the list of currently loaded messages of the active channel. #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:84](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L84) +[projects/stream-chat-angular/src/lib/channel.service.ts:84](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L84) --- @@ -62,7 +62,7 @@ Emits the list of pinned messages of the active channel. #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:88](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L88) +[projects/stream-chat-angular/src/lib/channel.service.ts:88](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L88) --- @@ -76,7 +76,7 @@ This property isn't always updated, please use `channel.read` to display up-to-d #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:138](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L138) +[projects/stream-chat-angular/src/lib/channel.service.ts:138](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L138) --- @@ -88,7 +88,7 @@ Emits the currently selected parent message. If no message is selected, it emits #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:100](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L100) +[projects/stream-chat-angular/src/lib/channel.service.ts:100](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L100) --- @@ -100,7 +100,7 @@ Emits the id of the currently selected parent message. If no message is selected #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:92](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L92) +[projects/stream-chat-angular/src/lib/channel.service.ts:92](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L92) --- @@ -112,7 +112,7 @@ Emits the list of currently loaded thread replies belonging to the selected pare #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:96](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L96) +[projects/stream-chat-angular/src/lib/channel.service.ts:96](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L96) --- @@ -138,7 +138,7 @@ The provided method will be called before a new message is sent to Stream's API. #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:305](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L305) +[projects/stream-chat-angular/src/lib/channel.service.ts:305](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L305) --- @@ -164,7 +164,7 @@ The provided method will be called before a message is sent to Stream's API for #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:311](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L311) +[projects/stream-chat-angular/src/lib/channel.service.ts:311](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L311) --- @@ -178,7 +178,7 @@ If a message is bounced, it will be emitted via this `Observable`. The built-in #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:126](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L126) +[projects/stream-chat-angular/src/lib/channel.service.ts:126](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L126) --- @@ -190,7 +190,7 @@ The result of the latest channel query request. #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:70](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L70) +[projects/stream-chat-angular/src/lib/channel.service.ts:70](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L70) --- @@ -206,7 +206,7 @@ If you want to subscribe to channel events, you need to manually reenter Angular #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:66](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L66) +[projects/stream-chat-angular/src/lib/channel.service.ts:66](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L66) --- @@ -235,7 +235,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:156](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L156) +[projects/stream-chat-angular/src/lib/channel.service.ts:156](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L156) --- @@ -268,7 +268,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:180](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L180) +[projects/stream-chat-angular/src/lib/channel.service.ts:180](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L180) --- @@ -301,7 +301,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:228](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L228) +[projects/stream-chat-angular/src/lib/channel.service.ts:228](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L228) --- @@ -334,7 +334,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:212](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L212) +[projects/stream-chat-angular/src/lib/channel.service.ts:212](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L212) --- @@ -367,7 +367,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:196](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L196) +[projects/stream-chat-angular/src/lib/channel.service.ts:196](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L196) --- @@ -400,7 +400,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:244](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L244) +[projects/stream-chat-angular/src/lib/channel.service.ts:244](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L244) --- @@ -427,7 +427,7 @@ You can override the default file delete request - override this if you use your #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:288](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L288) +[projects/stream-chat-angular/src/lib/channel.service.ts:288](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L288) --- @@ -454,7 +454,7 @@ You can override the default file upload request - you can use this to upload fi #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:274](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L274) +[projects/stream-chat-angular/src/lib/channel.service.ts:274](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L274) --- @@ -481,7 +481,7 @@ You can override the default image delete request - override this if you use you #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:292](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L292) +[projects/stream-chat-angular/src/lib/channel.service.ts:292](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L292) --- @@ -508,7 +508,7 @@ You can override the default image upload request - you can use this to upload i #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:281](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L281) +[projects/stream-chat-angular/src/lib/channel.service.ts:281](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L281) --- @@ -541,7 +541,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:260](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L260) +[projects/stream-chat-angular/src/lib/channel.service.ts:260](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L260) --- @@ -570,7 +570,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:144](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L144) +[projects/stream-chat-angular/src/lib/channel.service.ts:144](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L144) --- @@ -599,7 +599,7 @@ If you're adding a new channel, make sure that it's a [watched](https://getstrea #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:168](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L168) +[projects/stream-chat-angular/src/lib/channel.service.ts:168](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L168) --- @@ -611,7 +611,7 @@ Emits `false` if there are no more pages of channels that can be loaded. #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:58](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L58) +[projects/stream-chat-angular/src/lib/channel.service.ts:58](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L58) --- @@ -623,7 +623,7 @@ Emits the ID of the message the message list should jump to (can be a channel me #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:108](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L108) +[projects/stream-chat-angular/src/lib/channel.service.ts:108](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L108) --- @@ -635,7 +635,7 @@ Emits a map that contains the date of the latest message sent by the current use #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:120](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L120) +[projects/stream-chat-angular/src/lib/channel.service.ts:120](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L120) --- @@ -661,7 +661,7 @@ The provided method will be called before deleting a message. If the returned Pr #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:299](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L299) +[projects/stream-chat-angular/src/lib/channel.service.ts:299](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L299) --- @@ -673,7 +673,7 @@ Emits the currently selected message to quote #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:104](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L104) +[projects/stream-chat-angular/src/lib/channel.service.ts:104](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L104) --- @@ -685,7 +685,7 @@ Emits the list of users that are currently typing in the channel (current user i #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:112](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L112) +[projects/stream-chat-angular/src/lib/channel.service.ts:112](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L112) --- @@ -697,7 +697,7 @@ Emits the list of users that are currently typing in the active thread (current #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:116](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L116) +[projects/stream-chat-angular/src/lib/channel.service.ts:116](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L116) --- @@ -707,7 +707,7 @@ Emits the list of users that are currently typing in the active thread (current #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:317](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L317) +[projects/stream-chat-angular/src/lib/channel.service.ts:317](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L317) ## Accessors @@ -723,7 +723,7 @@ The current active channel #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1619](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1619) +[projects/stream-chat-angular/src/lib/channel.service.ts:1619](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1619) --- @@ -739,7 +739,7 @@ The current active channel messages #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1626](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1626) +[projects/stream-chat-angular/src/lib/channel.service.ts:1626](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1626) --- @@ -755,7 +755,7 @@ The current thread replies #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1633](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1633) +[projects/stream-chat-angular/src/lib/channel.service.ts:1633](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1633) --- @@ -771,7 +771,7 @@ The current list of channels #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1612](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1612) +[projects/stream-chat-angular/src/lib/channel.service.ts:1612](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1612) --- @@ -797,7 +797,7 @@ You can return either an offset, or a filter using the [`$lte`/`$gte` operator]( #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:547](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L547) +[projects/stream-chat-angular/src/lib/channel.service.ts:547](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L547) --- @@ -813,7 +813,7 @@ If set to false, read events won't be sent as new messages are received. If set #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:523](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L523) +[projects/stream-chat-angular/src/lib/channel.service.ts:523](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L523) • `set` **shouldMarkActiveChannelAsRead**(`shouldMarkActiveChannelAsRead`): `void` @@ -831,7 +831,7 @@ If set to false, read events won't be sent as new messages are received. If set #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:530](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L530) +[projects/stream-chat-angular/src/lib/channel.service.ts:530](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L530) ## Methods @@ -854,7 +854,7 @@ The channel will be added to the beginning of the channel list #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1131](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1131) +[projects/stream-chat-angular/src/lib/channel.service.ts:1131](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1131) --- @@ -878,7 +878,7 @@ Adds a reaction to a message. #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:806](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L806) +[projects/stream-chat-angular/src/lib/channel.service.ts:806](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L806) --- @@ -902,7 +902,7 @@ The list of members matching the search filter #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1056](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1056) +[projects/stream-chat-angular/src/lib/channel.service.ts:1056](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1056) --- @@ -918,7 +918,7 @@ Clears the currently selected message to jump #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1291](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1291) +[projects/stream-chat-angular/src/lib/channel.service.ts:1291](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1291) --- @@ -940,7 +940,7 @@ Deletes an uploaded file by URL. If you want to know more about [file uploads](h #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1040](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1040) +[projects/stream-chat-angular/src/lib/channel.service.ts:1040](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1040) --- @@ -963,7 +963,7 @@ Deletes the message from the active channel #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:928](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L928) +[projects/stream-chat-angular/src/lib/channel.service.ts:928](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L928) --- @@ -979,7 +979,7 @@ Deselects the currently active (if any) channel #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:596](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L596) +[projects/stream-chat-angular/src/lib/channel.service.ts:596](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L596) --- @@ -1001,9 +1001,13 @@ Get the last 1200 reactions of a message in the current active channel. If you n all reactions of a message +**`Deprecated`** + +use [`messageReactionsService.queryReactions()`](https://getstream.io/chat/docs/sdk/angular/services/MessageReactionsService/#queryreactions) instead + #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1642](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1642) +[projects/stream-chat-angular/src/lib/channel.service.ts:1643](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1643) --- @@ -1030,7 +1034,7 @@ the list of channels found by the query #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:730](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L730) +[projects/stream-chat-angular/src/lib/channel.service.ts:730](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L730) --- @@ -1057,7 +1061,7 @@ the channels that were loaded #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:766](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L766) +[projects/stream-chat-angular/src/lib/channel.service.ts:766](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L766) --- @@ -1080,7 +1084,7 @@ Jumps to the selected message inside the message list, if the message is not yet #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1263](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1263) +[projects/stream-chat-angular/src/lib/channel.service.ts:1263](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1263) --- @@ -1096,7 +1100,7 @@ Loads the next page of channels. The page size can be set in the [query option]( #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:796](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L796) +[projects/stream-chat-angular/src/lib/channel.service.ts:796](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L796) --- @@ -1118,7 +1122,7 @@ Loads the next page of messages of the active channel. The page size can be set #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:658](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L658) +[projects/stream-chat-angular/src/lib/channel.service.ts:658](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L658) --- @@ -1140,7 +1144,7 @@ Loads the next page of messages of the active thread. The page size can be set i #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:697](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L697) +[projects/stream-chat-angular/src/lib/channel.service.ts:697](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L697) --- @@ -1164,7 +1168,7 @@ the result of the request #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1675](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1675) +[projects/stream-chat-angular/src/lib/channel.service.ts:1676](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1676) --- @@ -1186,7 +1190,7 @@ Pins the given message in the channel #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1299](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1299) +[projects/stream-chat-angular/src/lib/channel.service.ts:1299](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1299) --- @@ -1207,7 +1211,7 @@ Pins the given message in the channel #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1143](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1143) +[projects/stream-chat-angular/src/lib/channel.service.ts:1143](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1143) --- @@ -1230,7 +1234,7 @@ Removes a reaction from a message. #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:822](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L822) +[projects/stream-chat-angular/src/lib/channel.service.ts:822](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L822) --- @@ -1252,7 +1256,7 @@ Resends the given message to the active channel #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:876](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L876) +[projects/stream-chat-angular/src/lib/channel.service.ts:876](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L876) --- @@ -1268,7 +1272,7 @@ Resets the `activeChannel$`, `channels$` and `activeChannelMessages$` Observable #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:780](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L780) +[projects/stream-chat-angular/src/lib/channel.service.ts:780](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L780) --- @@ -1290,7 +1294,7 @@ Selects or deselects the current message to quote reply to #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1122](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1122) +[projects/stream-chat-angular/src/lib/channel.service.ts:1122](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1122) --- @@ -1314,7 +1318,7 @@ Selects or deselects the current message to quote reply to #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1085](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1085) +[projects/stream-chat-angular/src/lib/channel.service.ts:1085](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1085) --- @@ -1341,7 +1345,7 @@ Sends a message to the active channel. The message is immediately added to the m #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:837](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L837) +[projects/stream-chat-angular/src/lib/channel.service.ts:837](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L837) --- @@ -1364,7 +1368,7 @@ If the channel wasn't previously part of the channel, it will be added to the be #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:563](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L563) +[projects/stream-chat-angular/src/lib/channel.service.ts:563](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L563) --- @@ -1387,7 +1391,7 @@ Sets the given `message` as an active parent message. If `undefined` is provided #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:623](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L623) +[projects/stream-chat-angular/src/lib/channel.service.ts:623](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L623) --- @@ -1409,7 +1413,7 @@ Call this method if user started typing in the active channel #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1595](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1595) +[projects/stream-chat-angular/src/lib/channel.service.ts:1595](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1595) --- @@ -1431,7 +1435,7 @@ Call this method if user stopped typing in the active channel #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1604](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1604) +[projects/stream-chat-angular/src/lib/channel.service.ts:1604](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1604) --- @@ -1453,13 +1457,13 @@ Removes the given message from pinned messages #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:1318](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L1318) +[projects/stream-chat-angular/src/lib/channel.service.ts:1318](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L1318) --- ### updateMessage -▸ **updateMessage**(`message`): `Promise`\<`StreamMessage`\<`T`\> \| `T`[``"messageType"``] & {} & {} & {} & `Omit`\<`MessageResponse`\<{}\>, `"status"` \| `"created_at"` \| `"pinned_at"` \| `"updated_at"`\> & `UR` & {}\> +▸ **updateMessage**(`message`): `Promise`\<`StreamMessage`\<`T`\> \| `T`[``"messageType"``] & {} & {} & {} & `Omit`\<`MessageResponse`\<{}\>, `"status"` \| `"created_at"` \| `"pinned_at"` \| `"updated_at"` \| `"deleted_at"`\> & `UR` & {}\> Updates the message in the active channel @@ -1471,11 +1475,11 @@ Updates the message in the active channel #### Returns -`Promise`\<`StreamMessage`\<`T`\> \| `T`[``"messageType"``] & {} & {} & {} & `Omit`\<`MessageResponse`\<{}\>, `"status"` \| `"created_at"` \| `"pinned_at"` \| `"updated_at"`\> & `UR` & {}\> +`Promise`\<`StreamMessage`\<`T`\> \| `T`[``"messageType"``] & {} & {} & {} & `Omit`\<`MessageResponse`\<{}\>, `"status"` \| `"created_at"` \| `"pinned_at"` \| `"updated_at"` \| `"deleted_at"`\> & `UR` & {}\> #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:893](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L893) +[projects/stream-chat-angular/src/lib/channel.service.ts:893](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L893) --- @@ -1499,4 +1503,4 @@ the result of file upload requests #### Defined in -[projects/stream-chat-angular/src/lib/channel.service.ts:960](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/channel.service.ts#L960) +[projects/stream-chat-angular/src/lib/channel.service.ts:960](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/channel.service.ts#L960) diff --git a/docusaurus/docs/Angular/services/ChatClientService.mdx b/docusaurus/docs/Angular/services/ChatClientService.mdx index fb415885..7a610f46 100644 --- a/docusaurus/docs/Angular/services/ChatClientService.mdx +++ b/docusaurus/docs/Angular/services/ChatClientService.mdx @@ -18,7 +18,7 @@ Emits the current [application settings](https://getstream.io/chat/docs/javascri #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:49](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L49) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:49](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L49) --- @@ -30,7 +30,7 @@ The [StreamChat client](https://github.com/GetStream/stream-chat-js/blob/master/ #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:38](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L38) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:38](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L38) --- @@ -42,7 +42,7 @@ Emits the current connection state of the user (`online` or `offline`) #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:53](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L53) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:53](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L53) --- @@ -57,7 +57,7 @@ For performance reasons this Observable operates outside of the Angular change d #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:45](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L45) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:45](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L45) --- @@ -69,7 +69,7 @@ Emits the list of pending invites of the user. It emits every pending invitation #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:57](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L57) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:57](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L57) --- @@ -81,7 +81,7 @@ Emits the current chat user #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:61](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L61) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:61](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L61) ## Methods @@ -105,7 +105,7 @@ The users matching the search #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:224](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L224) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:226](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L226) --- @@ -121,7 +121,7 @@ Disconnects the current user, and closes the WebSocket connection. Useful when d #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:186](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L186) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:188](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L188) --- @@ -143,7 +143,7 @@ Flag the message with the given ID. If you want to know [more about flags](https #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:215](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L215) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:217](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L217) --- @@ -159,7 +159,7 @@ Loads the current [application settings](https://getstream.io/chat/docs/javascri #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:196](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L196) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:198](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L198) --- @@ -184,4 +184,4 @@ Creates a [`StreamChat`](https://github.com/GetStream/stream-chat-js/blob/668b3e #### Defined in -[projects/stream-chat-angular/src/lib/chat-client.service.ts:98](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/chat-client.service.ts#L98) +[projects/stream-chat-angular/src/lib/chat-client.service.ts:98](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/chat-client.service.ts#L98) diff --git a/docusaurus/docs/Angular/services/CustomTemplatesService.mdx b/docusaurus/docs/Angular/services/CustomTemplatesService.mdx index f03df5a6..3886bd43 100644 --- a/docusaurus/docs/Angular/services/CustomTemplatesService.mdx +++ b/docusaurus/docs/Angular/services/CustomTemplatesService.mdx @@ -22,7 +22,7 @@ The template that can be used to override how attachment actions are displayed i #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:276](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L276) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:276](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L276) --- @@ -34,7 +34,7 @@ The template used to display attachments of a [message](../components/MessageCom #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:109](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L109) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:109](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L109) --- @@ -46,7 +46,7 @@ The template used to display attachments in the [message input](../components/Me #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:116](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L116) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:116](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L116) --- @@ -58,7 +58,7 @@ The template used to display avatars for channels and users (instead of the [def #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:123](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L123) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:123](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L123) --- @@ -70,7 +70,7 @@ The template that can be used to override how a card attachment is displayed ins #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:270](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L270) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:270](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L270) --- @@ -82,7 +82,7 @@ The template for channel actions displayed in the [channel header](../components #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:102](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L102) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:102](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L102) --- @@ -94,7 +94,7 @@ The template used to display additional information about a channel under the ch #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:227](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L227) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:227](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L227) --- @@ -106,7 +106,7 @@ Template used to display the channel information inside the [channel list item]( #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:329](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L329) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:329](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L329) --- @@ -118,7 +118,7 @@ Template used to display an item in the [channel list](../components/ChannelList #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:67](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L67) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:67](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L67) --- @@ -130,7 +130,7 @@ The autocomplete list item template for commands (used in the [`AutocompleteText #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:60](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L60) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:60](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L60) --- @@ -142,7 +142,7 @@ The template used for displaying file upload/attachment selector inside the [mes #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:234](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L234) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:234](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L234) --- @@ -154,7 +154,7 @@ Template to display custom metadata inside [message component](../components/Mes #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:220](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L220) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:220](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L220) --- @@ -166,7 +166,7 @@ The template used to display the date separator inside the [message list](../com #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:288](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L288) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:288](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L288) --- @@ -180,7 +180,7 @@ Displayed for the last message sent by the current user, if the message isn't ye #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:195](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L195) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:195](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L195) --- @@ -192,7 +192,7 @@ The template for [emoji picker](../code-examples/emoji-picker.mdx) #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:81](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L81) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:81](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L81) --- @@ -204,7 +204,7 @@ The template to show if the main message list is empty #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:310](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L310) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:310](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L310) --- @@ -216,7 +216,7 @@ The template to show if the thread message list is empty #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:316](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L316) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:316](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L316) --- @@ -228,7 +228,7 @@ The template that can be used to override how a file attachment is displayed ins #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:264](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L264) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:264](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L264) --- @@ -240,7 +240,7 @@ The template that can be used to override how image gallery is displayed inside #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:258](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L258) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:258](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L258) --- @@ -252,7 +252,7 @@ Template for displaying icons (instead of the [default icon component](../compon #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:130](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L130) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:130](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L130) --- @@ -264,7 +264,7 @@ The template that can be used to override how a single image attachment is displ #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:240](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L240) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:240](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L240) --- @@ -276,7 +276,7 @@ Template for displaying the loading indicator (instead of the [default loading i #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:137](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L137) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:137](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L137) --- @@ -288,7 +288,7 @@ The autocomplete list item template for mentioning users (used in the [`Autocomp #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:54](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L54) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:54](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L54) --- @@ -300,7 +300,7 @@ The template used for displaying a [mention inside a message](../code-examples/m #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:74](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L74) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:74](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L74) --- @@ -312,7 +312,7 @@ The template used for displaying an item in the [message actions box](../compone #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:151](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L151) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:151](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L151) --- @@ -324,7 +324,7 @@ Template for displaying the message actions box (instead of the [default message #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:144](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L144) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:144](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L144) --- @@ -336,7 +336,7 @@ The template used to display the [message bounce prompt](../components/MessageBo #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:322](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L322) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:322](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L322) --- @@ -348,7 +348,7 @@ The template used to display the reactions of a [message](../components/MessageC #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:165](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L165) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:165](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L165) --- @@ -360,7 +360,7 @@ The template used to display the reactions of a [message](../components/MessageC #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:158](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L158) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:158](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L158) --- @@ -372,7 +372,7 @@ The template used to display a message in the [message list](../components/Messa #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:95](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L95) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:95](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L95) --- @@ -384,7 +384,7 @@ The template used to display a modal window (instead of the [default modal](../c #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:172](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L172) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:172](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L172) --- @@ -398,7 +398,7 @@ This UI element is used to separate unread messages from read messages #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:296](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L296) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:296](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L296) --- @@ -412,7 +412,7 @@ Users can use this notification to jump to the first unread message when it's cl #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:304](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L304) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:304](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L304) --- @@ -424,7 +424,7 @@ The template used to override the [default notification component](../components #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:179](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L179) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:179](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L179) --- @@ -438,7 +438,7 @@ Displayed for the last message sent by the current user, if the message is read #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:213](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L213) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:213](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L213) --- @@ -452,7 +452,7 @@ Displayed for the last message sent by the current user, if the message is curre #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:204](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L204) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:204](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L204) --- @@ -464,7 +464,7 @@ The template used to display [system messages](https://getstream.io/chat/docs/ja #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:282](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L282) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:282](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L282) --- @@ -476,7 +476,7 @@ The template used for header of a [thread](../components/ThreadComponent.mdx) #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:186](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L186) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:186](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L186) --- @@ -488,7 +488,7 @@ The typing indicator template used in the [message list](../components/MessageLi #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:88](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L88) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:88](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L88) --- @@ -500,7 +500,7 @@ The template that can be used to override how a video attachment is displayed in #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:252](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L252) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:252](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L252) --- @@ -512,4 +512,4 @@ The template that can be used to override how a voice recording attachment is di #### Defined in -[projects/stream-chat-angular/src/lib/custom-templates.service.ts:246](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L246) +[projects/stream-chat-angular/src/lib/custom-templates.service.ts:246](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/custom-templates.service.ts#L246) diff --git a/docusaurus/docs/Angular/services/DateParserService.mdx b/docusaurus/docs/Angular/services/DateParserService.mdx index e63795b6..ebcd547f 100644 --- a/docusaurus/docs/Angular/services/DateParserService.mdx +++ b/docusaurus/docs/Angular/services/DateParserService.mdx @@ -26,7 +26,7 @@ Custom parser to override `parseDate` #### Defined in -[projects/stream-chat-angular/src/lib/date-parser.service.ts:18](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/date-parser.service.ts#L18) +[projects/stream-chat-angular/src/lib/date-parser.service.ts:18](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/date-parser.service.ts#L18) --- @@ -52,7 +52,7 @@ Custom parser to override `parseDateTime` #### Defined in -[projects/stream-chat-angular/src/lib/date-parser.service.ts:22](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/date-parser.service.ts#L22) +[projects/stream-chat-angular/src/lib/date-parser.service.ts:22](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/date-parser.service.ts#L22) --- @@ -78,7 +78,7 @@ Custom parser to override `parseTime` #### Defined in -[projects/stream-chat-angular/src/lib/date-parser.service.ts:14](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/date-parser.service.ts#L14) +[projects/stream-chat-angular/src/lib/date-parser.service.ts:14](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/date-parser.service.ts#L14) ## Methods @@ -102,7 +102,7 @@ The parsed date #### Defined in -[projects/stream-chat-angular/src/lib/date-parser.service.ts:43](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/date-parser.service.ts#L43) +[projects/stream-chat-angular/src/lib/date-parser.service.ts:43](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/date-parser.service.ts#L43) --- @@ -126,7 +126,7 @@ The parsed date #### Defined in -[projects/stream-chat-angular/src/lib/date-parser.service.ts:55](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/date-parser.service.ts#L55) +[projects/stream-chat-angular/src/lib/date-parser.service.ts:55](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/date-parser.service.ts#L55) --- @@ -150,4 +150,4 @@ The parsed time #### Defined in -[projects/stream-chat-angular/src/lib/date-parser.service.ts:31](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/date-parser.service.ts#L31) +[projects/stream-chat-angular/src/lib/date-parser.service.ts:31](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/date-parser.service.ts#L31) diff --git a/docusaurus/docs/Angular/services/EmojiInputService.mdx b/docusaurus/docs/Angular/services/EmojiInputService.mdx index 99a47a88..8623f9c7 100644 --- a/docusaurus/docs/Angular/services/EmojiInputService.mdx +++ b/docusaurus/docs/Angular/services/EmojiInputService.mdx @@ -12,4 +12,4 @@ If you have an emoji picker in your application, you can propagate the selected #### Defined in -[projects/stream-chat-angular/src/lib/message-input/emoji-input.service.ts:14](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/emoji-input.service.ts#L14) +[projects/stream-chat-angular/src/lib/message-input/emoji-input.service.ts:14](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/emoji-input.service.ts#L14) diff --git a/docusaurus/docs/Angular/services/MessageActionsService.mdx b/docusaurus/docs/Angular/services/MessageActionsService.mdx index cf03d6be..73182f55 100644 --- a/docusaurus/docs/Angular/services/MessageActionsService.mdx +++ b/docusaurus/docs/Angular/services/MessageActionsService.mdx @@ -32,7 +32,7 @@ By default the [`MessageComponent`](../../components/MessageComponent) will disp #### Defined in -[projects/stream-chat-angular/src/lib/message-actions.service.ts:188](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions.service.ts#L188) +[projects/stream-chat-angular/src/lib/message-actions.service.ts:188](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions.service.ts#L188) --- @@ -44,7 +44,7 @@ You can pass your own custom actions that will be displayed inside the built-in #### Defined in -[projects/stream-chat-angular/src/lib/message-actions.service.ts:184](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions.service.ts#L184) +[projects/stream-chat-angular/src/lib/message-actions.service.ts:184](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions.service.ts#L184) --- @@ -56,7 +56,7 @@ Default actions - these are the actions that are handled by the built-in compone #### Defined in -[projects/stream-chat-angular/src/lib/message-actions.service.ts:28](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions.service.ts#L28) +[projects/stream-chat-angular/src/lib/message-actions.service.ts:28](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions.service.ts#L28) --- @@ -68,7 +68,7 @@ The built-in components will handle changes to this observable. #### Defined in -[projects/stream-chat-angular/src/lib/message-actions.service.ts:180](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions.service.ts#L180) +[projects/stream-chat-angular/src/lib/message-actions.service.ts:180](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions.service.ts#L180) ## Methods @@ -93,4 +93,4 @@ the count #### Defined in -[projects/stream-chat-angular/src/lib/message-actions.service.ts:227](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-actions.service.ts#L227) +[projects/stream-chat-angular/src/lib/message-actions.service.ts:227](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-actions.service.ts#L227) diff --git a/docusaurus/docs/Angular/services/MessageInputConfigService.mdx b/docusaurus/docs/Angular/services/MessageInputConfigService.mdx index 0bb18963..a991c948 100644 --- a/docusaurus/docs/Angular/services/MessageInputConfigService.mdx +++ b/docusaurus/docs/Angular/services/MessageInputConfigService.mdx @@ -12,7 +12,7 @@ If true, users can mention other users in messages. You also [need to use the `A #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:17](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L17) +[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:17](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L17) --- @@ -24,7 +24,7 @@ In `desktop` mode the `Enter` key will trigger message sending, in `mobile` mode #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:30](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L30) +[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:29](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L29) --- @@ -36,7 +36,7 @@ If file upload is enabled, the user can open a file selector from the input. Ple #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:13](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L13) +[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:13](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L13) --- @@ -48,7 +48,7 @@ If `false`, users can only upload one attachment per message #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:21](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L21) +[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:21](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L21) --- @@ -60,4 +60,17 @@ The scope for user mentions, either members of the current channel of members of #### Defined in -[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:25](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L25) +[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:25](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L25) + +--- + +### sendVoiceRecordingImmediately + +• **sendVoiceRecordingImmediately**: `boolean` = `true` + +If `true` the recording will be sent as a message immediately after the recording is completed. +If `false`, the recording will added to the attachment preview, and users can continue composing the message. + +#### Defined in + +[projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts:34](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts#L34) diff --git a/docusaurus/docs/Angular/services/MessageReactionsService.mdx b/docusaurus/docs/Angular/services/MessageReactionsService.mdx index 4c021648..14cfa6e7 100644 --- a/docusaurus/docs/Angular/services/MessageReactionsService.mdx +++ b/docusaurus/docs/Angular/services/MessageReactionsService.mdx @@ -10,7 +10,7 @@ The `MessageReactionsService` provides customization options to message [reactio By default the [`MessageReactionsComponent`](../../components/MessageReactionsComponent) will display the reacting users when a reaction is clicked. You can override this with your own UI by providing a custom event handler. -The event handler can retrieve all reactions of a message inside the active channel using the [`channelService.getMessageReactions` method](../../services/ChannelService/#getmessagereactions) +The event handler can retrieve all reactions of a message using the [`messageReactionsService.queryReactions()`](https://getstream.io/chat/docs/sdk/angular/services/MessageReactionsService/#queryreactions) #### Type declaration @@ -28,7 +28,7 @@ The event handler can retrieve all reactions of a message inside the active chan #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions.service.ts:30](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L30) +[projects/stream-chat-angular/src/lib/message-reactions.service.ts:32](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L32) --- @@ -42,7 +42,7 @@ You can provide any string as a reaction. The emoji can be provided as a string, #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions.service.ts:18](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L18) +[projects/stream-chat-angular/src/lib/message-reactions.service.ts:20](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L20) ## Accessors @@ -58,7 +58,7 @@ Get the currently enabled reactions #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions.service.ts:44](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L44) +[projects/stream-chat-angular/src/lib/message-reactions.service.ts:49](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L49) • `set` **reactions**(`reactions`): `void` @@ -76,4 +76,30 @@ Sets the enabled reactions #### Defined in -[projects/stream-chat-angular/src/lib/message-reactions.service.ts:37](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L37) +[projects/stream-chat-angular/src/lib/message-reactions.service.ts:42](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L42) + +## Methods + +### queryReactions + +▸ **queryReactions**(`messageId`, `type`, `next?`): `Promise`\<`QueryReactionsAPIResponse`\<`DefaultStreamChatGenerics`\>\> + +Query reactions of a specific message, more info in the [API documentation](https://getstream.io/chat/docs/javascript/send_reaction/?language=javascript#query-reactions) + +#### Parameters + +| Name | Type | +| :---------- | :------- | +| `messageId` | `string` | +| `type` | `string` | +| `next?` | `string` | + +#### Returns + +`Promise`\<`QueryReactionsAPIResponse`\<`DefaultStreamChatGenerics`\>\> + +the reactions and the cursor for the next/prev pages + +#### Defined in + +[projects/stream-chat-angular/src/lib/message-reactions.service.ts:60](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-reactions.service.ts#L60) diff --git a/docusaurus/docs/Angular/services/MessageService.mdx b/docusaurus/docs/Angular/services/MessageService.mdx index c14f42ad..005455dc 100644 --- a/docusaurus/docs/Angular/services/MessageService.mdx +++ b/docusaurus/docs/Angular/services/MessageService.mdx @@ -26,7 +26,7 @@ You can provide a custom method to display links #### Defined in -[projects/stream-chat-angular/src/lib/message.service.ts:24](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message.service.ts#L24) +[projects/stream-chat-angular/src/lib/message.service.ts:24](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message.service.ts#L24) --- @@ -43,4 +43,4 @@ If you display messages as text the following parts are still be displayed as HT #### Defined in -[projects/stream-chat-angular/src/lib/message.service.ts:17](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/message.service.ts#L17) +[projects/stream-chat-angular/src/lib/message.service.ts:17](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message.service.ts#L17) diff --git a/docusaurus/docs/Angular/services/NotificationService.mdx b/docusaurus/docs/Angular/services/NotificationService.mdx index a3394b80..e15c38dd 100644 --- a/docusaurus/docs/Angular/services/NotificationService.mdx +++ b/docusaurus/docs/Angular/services/NotificationService.mdx @@ -12,7 +12,7 @@ Emits the currently active [notifications](https://github.com/GetStream/stream-c #### Defined in -[projects/stream-chat-angular/src/lib/notification.service.ts:15](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/notification.service.ts#L15) +[projects/stream-chat-angular/src/lib/notification.service.ts:15](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/notification.service.ts#L15) ## Methods @@ -51,7 +51,7 @@ A method to clear the notification. #### Defined in -[projects/stream-chat-angular/src/lib/notification.service.ts:68](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/notification.service.ts#L68) +[projects/stream-chat-angular/src/lib/notification.service.ts:68](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/notification.service.ts#L68) --- @@ -91,4 +91,4 @@ A method to clear the notification (before the timeout). #### Defined in -[projects/stream-chat-angular/src/lib/notification.service.ts:31](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/notification.service.ts#L31) +[projects/stream-chat-angular/src/lib/notification.service.ts:31](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/notification.service.ts#L31) diff --git a/docusaurus/docs/Angular/services/StreamI18nService.mdx b/docusaurus/docs/Angular/services/StreamI18nService.mdx index a8755031..f7383536 100644 --- a/docusaurus/docs/Angular/services/StreamI18nService.mdx +++ b/docusaurus/docs/Angular/services/StreamI18nService.mdx @@ -23,4 +23,4 @@ Registers the translation to the [ngx-translate](https://github.com/ngx-translat #### Defined in -[projects/stream-chat-angular/src/lib/stream-i18n.service.ts:19](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/stream-i18n.service.ts#L19) +[projects/stream-chat-angular/src/lib/stream-i18n.service.ts:19](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/stream-i18n.service.ts#L19) diff --git a/docusaurus/docs/Angular/services/ThemeService.mdx b/docusaurus/docs/Angular/services/ThemeService.mdx index 4d51ea04..cc567dad 100644 --- a/docusaurus/docs/Angular/services/ThemeService.mdx +++ b/docusaurus/docs/Angular/services/ThemeService.mdx @@ -12,4 +12,4 @@ A Subject that can be used to get or set the currently active theme. By default #### Defined in -[projects/stream-chat-angular/src/lib/theme.service.ts:14](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/theme.service.ts#L14) +[projects/stream-chat-angular/src/lib/theme.service.ts:14](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/theme.service.ts#L14) diff --git a/docusaurus/docs/Angular/services/TranscoderService.mdx b/docusaurus/docs/Angular/services/TranscoderService.mdx new file mode 100644 index 00000000..8e1283ac --- /dev/null +++ b/docusaurus/docs/Angular/services/TranscoderService.mdx @@ -0,0 +1,30 @@ +# TranscoderService + +The `TranscoderService` is used to transcibe audio recording to a format that's supported by all major browsers. The SDK uses this to create voice messages. + +If you want to use your own transcoder you can provide a `customTranscoder`. + +## Methods + +### transcode + +▸ **transcode**(`blob`, `options`): `Promise`<`Blob`\> + +The default transcoder will leave audio/mp4 files as is, and transcode webm files to wav. If you want to customize this, you can provide your own transcoder using the `customTranscoder` field + +#### Parameters + +| Name | Type | +| :-------- | :------------------ | +| `blob` | `Blob` | +| `options` | `TranscoderOptions` | + +#### Returns + +`Promise`\<`Blob`\> + +the transcoded file + +#### Defined in + +[projects/stream-chat-angular/src/lib/voice-recorder/transcoder.service.ts:68](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/voice-recorder/transcoder.service.ts#L68) diff --git a/docusaurus/docs/Angular/services/TransliterationService.mdx b/docusaurus/docs/Angular/services/TransliterationService.mdx index 106cc3cd..ec004153 100644 --- a/docusaurus/docs/Angular/services/TransliterationService.mdx +++ b/docusaurus/docs/Angular/services/TransliterationService.mdx @@ -22,4 +22,4 @@ the result of the transliteration #### Defined in -[projects/stream-chat-angular/src/lib/transliteration.service.ts:16](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/transliteration.service.ts#L16) +[projects/stream-chat-angular/src/lib/transliteration.service.ts:16](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/transliteration.service.ts#L16) diff --git a/docusaurus/docs/Angular/services/VirtualizedListService.mdx b/docusaurus/docs/Angular/services/VirtualizedListService.mdx index 8547eb83..b34fba33 100644 --- a/docusaurus/docs/Angular/services/VirtualizedListService.mdx +++ b/docusaurus/docs/Angular/services/VirtualizedListService.mdx @@ -38,7 +38,7 @@ The result of the last query used to load more items #### Defined in -[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:46](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L46) +[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:46](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L46) --- @@ -50,7 +50,7 @@ The items that should be currently displayed, a subset of all items #### Defined in -[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:42](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L42) +[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:42](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L42) ## Accessors @@ -66,7 +66,7 @@ The current value of virtualized items #### Defined in -[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:355](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L355) +[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:355](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L355) ## Methods @@ -82,4 +82,4 @@ Remove all subscriptions, call this once you're done using an instance of this s #### Defined in -[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:362](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L362) +[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:362](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L362) diff --git a/docusaurus/docs/Angular/services/VirtualizedMessageListService.mdx b/docusaurus/docs/Angular/services/VirtualizedMessageListService.mdx index 5f27ba8b..8cc76f6a 100644 --- a/docusaurus/docs/Angular/services/VirtualizedMessageListService.mdx +++ b/docusaurus/docs/Angular/services/VirtualizedMessageListService.mdx @@ -22,7 +22,7 @@ The result of the last query used to load more items #### Defined in -[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:46](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L46) +[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:46](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L46) --- @@ -38,7 +38,7 @@ The items that should be currently displayed, a subset of all items #### Defined in -[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:42](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L42) +[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:42](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L42) ## Accessors @@ -58,7 +58,7 @@ VirtualizedListService.virtualizedItems #### Defined in -[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:355](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L355) +[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:355](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L355) ## Methods @@ -78,4 +78,4 @@ Remove all subscriptions, call this once you're done using an instance of this s #### Defined in -[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:362](https://github.com/GetStream/stream-chat-angular/blob/502385cb9d3f2df94a8714de2a742aeb1edfb77e/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L362) +[projects/stream-chat-angular/src/lib/virtualized-list.service.ts:362](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/virtualized-list.service.ts#L362) diff --git a/docusaurus/docs/Angular/services/VoiceRecorderService.mdx b/docusaurus/docs/Angular/services/VoiceRecorderService.mdx new file mode 100644 index 00000000..c709229e --- /dev/null +++ b/docusaurus/docs/Angular/services/VoiceRecorderService.mdx @@ -0,0 +1,27 @@ +# VoiceRecorderService + +The `VoiceRecorderService` provides a commincation outlet between the message input and voice recorder components. + +## Properties + +### isRecorderVisible$ + +• **isRecorderVisible$**: `BehaviorSubject`<`boolean`\> + +Use this property to get/set if the recording component should be visible + +#### Defined in + +[projects/stream-chat-angular/src/lib/message-input/voice-recorder.service.ts:15](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/voice-recorder.service.ts#L15) + +--- + +### recording$ + +• **recording$**: `BehaviorSubject`\<`undefined` \| `AudioRecording`\> + +The audio recording that was created + +#### Defined in + +[projects/stream-chat-angular/src/lib/message-input/voice-recorder.service.ts:19](https://github.com/GetStream/stream-chat-angular/blob/c4925a571484c046f73b9e63286a2e64380af0c6/projects/stream-chat-angular/src/lib/message-input/voice-recorder.service.ts#L19) diff --git a/docusaurus/docs/Angular/theming/component-variables.mdx b/docusaurus/docs/Angular/theming/component-variables.mdx index 99c1d4a0..e629202b 100644 --- a/docusaurus/docs/Angular/theming/component-variables.mdx +++ b/docusaurus/docs/Angular/theming/component-variables.mdx @@ -34,33 +34,33 @@ You can find the list of components below: | Component name | Variables | | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `AttachmentList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/AttachmentList/AttachmentList-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/AttachmentList/AttachmentList-layout.scss) | -| `AttachmentPreviewList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/AttachmentPreviewList/AttachmentPreviewList-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/AttachmentPreviewList/AttachmentPreviewList-layout.scss) | -| `Autocomplete` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Autocomplete/Autocomplete-theme.scss) | -| `Avatar` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Avatar/Avatar-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Avatar/Avatar-layout.scss) | -| `Channel` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Channel/Channel-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Channel/Channel-layout.scss) | -| `ChannelHeader` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/ChannelHeader/ChannelHeader-theme.scss) | -| `ChannelList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/ChannelList/ChannelList-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/ChannelList/ChannelList-layout.scss) | -| `ChannelPreview` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/ChannelPreview/ChannelPreview-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/ChannelPreview/ChannelPreview-layout.scss) | -| `ChannelSearch` (React SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/ChannelSearch/ChannelSearch-theme.scss) | -| `CircleFAButton` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/CircleFAButton/CircleFAButton-theme.scss) | -| `CTAButton` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/CTAButton/CTAButton-theme.scss) | -| `EditMessageForm` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/EditMessageForm/EditMessageForm-theme.scss) | -| `Icon` (Angular SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Icon/Icon-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Icon/Icon-layout.scss) | -| `ImageCarousel` (Angular SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/ImageCarousel/ImageCarousel-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/ImageCarousel/ImageCarousel-layout.scss) | -| `LoadingIndicator` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/LoadingIndicator/LoadingIndicator-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/LoadingIndicator/LoadingIndicator-layout.scss) | -| `Message` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Message/Message-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Message/Message-layout.scss) | -| `MessageActionsBox` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageActionsBox/MessageActionsBox-theme.scss) | -| `MessageBouncePrompt` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageBouncePrompt/MessageBouncePrompt-theme.scss) | -| `MessageInput` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageInput/MessageInput-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageInput/MessageInput-layout.scss) | -| `MessageList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageList/MessageList-theme.scss) | -| `MessageNotification` (React SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageNotification/MessageNotification-theme.scss) | -| `MessageReactions` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageReactions/MessageReactions-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageReactions/MessageReactions-layout.scss) | -| `MessageReactionsSelector` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/MessageReactionsSelector/MessageReactionsSelector-theme.scss) | -| `Modal` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Modal/Modal-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Modal/Modal-layout.scss) | -| `Notification` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Notification/Notification-theme.scss) | -| `NotificationList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/NotificationList/NotificationList-theme.scss) | -| `Thread` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Thread/Thread-theme.scss) | -| `Tooltip` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/Tooltip/Tooltip-theme.scss) | -| `TypingIndicator` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/TypingIndicator/TypingIndicator-theme.scss) | -| `VirtualizedMessageList` (React SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/VirtualizedMessageList/VirtualizedMessageList-theme.scss) | +| `AttachmentList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/AttachmentList/AttachmentList-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/AttachmentList/AttachmentList-layout.scss) | +| `AttachmentPreviewList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/AttachmentPreviewList/AttachmentPreviewList-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/AttachmentPreviewList/AttachmentPreviewList-layout.scss) | +| `Autocomplete` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Autocomplete/Autocomplete-theme.scss) | +| `Avatar` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Avatar/Avatar-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Avatar/Avatar-layout.scss) | +| `Channel` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Channel/Channel-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Channel/Channel-layout.scss) | +| `ChannelHeader` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/ChannelHeader/ChannelHeader-theme.scss) | +| `ChannelList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/ChannelList/ChannelList-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/ChannelList/ChannelList-layout.scss) | +| `ChannelPreview` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/ChannelPreview/ChannelPreview-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/ChannelPreview/ChannelPreview-layout.scss) | +| `ChannelSearch` (React SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/ChannelSearch/ChannelSearch-theme.scss) | +| `CircleFAButton` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/CircleFAButton/CircleFAButton-theme.scss) | +| `CTAButton` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/CTAButton/CTAButton-theme.scss) | +| `EditMessageForm` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/EditMessageForm/EditMessageForm-theme.scss) | +| `Icon` (Angular SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Icon/Icon-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Icon/Icon-layout.scss) | +| `ImageCarousel` (Angular SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/ImageCarousel/ImageCarousel-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/ImageCarousel/ImageCarousel-layout.scss) | +| `LoadingIndicator` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/LoadingIndicator/LoadingIndicator-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/LoadingIndicator/LoadingIndicator-layout.scss) | +| `Message` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Message/Message-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Message/Message-layout.scss) | +| `MessageActionsBox` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageActionsBox/MessageActionsBox-theme.scss) | +| `MessageBouncePrompt` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageBouncePrompt/MessageBouncePrompt-theme.scss) | +| `MessageInput` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageInput/MessageInput-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageInput/MessageInput-layout.scss) | +| `MessageList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageList/MessageList-theme.scss) | +| `MessageNotification` (React SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageNotification/MessageNotification-theme.scss) | +| `MessageReactions` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageReactions/MessageReactions-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageReactions/MessageReactions-layout.scss) | +| `MessageReactionsSelector` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/MessageReactionsSelector/MessageReactionsSelector-theme.scss) | +| `Modal` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Modal/Modal-theme.scss), [layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Modal/Modal-layout.scss) | +| `Notification` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Notification/Notification-theme.scss) | +| `NotificationList` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/NotificationList/NotificationList-theme.scss) | +| `Thread` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Thread/Thread-theme.scss) | +| `Tooltip` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/Tooltip/Tooltip-theme.scss) | +| `TypingIndicator` | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/TypingIndicator/TypingIndicator-theme.scss) | +| `VirtualizedMessageList` (React SDK only) | [theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/VirtualizedMessageList/VirtualizedMessageList-theme.scss) | diff --git a/docusaurus/docs/Angular/theming/global-variables.mdx b/docusaurus/docs/Angular/theming/global-variables.mdx index fd9a9633..fd206abd 100644 --- a/docusaurus/docs/Angular/theming/global-variables.mdx +++ b/docusaurus/docs/Angular/theming/global-variables.mdx @@ -27,8 +27,8 @@ Global variables change the layout/look-and-feel of the whole chat UI, meanwhile Global variables can be grouped into the following categories: -- **Theme**: colors, typography and border radiuses ([list of global theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/_global-theme-variables.scss)) +- **Theme**: colors, typography and border radiuses ([list of global theme variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/_global-theme-variables.scss)) -- **Layout**: spacing (padding and margin) and sizing ([list of global layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.18.0/src/v2/styles/_global-layout-variables.scss)) +- **Layout**: spacing (padding and margin) and sizing ([list of global layout variables](https://github.com/GetStream/stream-chat-css/tree/v4.17.5/src/v2/styles/_global-layout-variables.scss)) If you find that these variables are too high-level and you need more granular control, you also have the option to provide [component layer overrides](./component-variables.mdx). diff --git a/docusaurus/docs/Angular/theming/introduction.mdx b/docusaurus/docs/Angular/theming/introduction.mdx index 58fc8906..9f1cd1fa 100644 --- a/docusaurus/docs/Angular/theming/introduction.mdx +++ b/docusaurus/docs/Angular/theming/introduction.mdx @@ -2,7 +2,7 @@ id: themingv2 sidebar_position: 1 title: Introduction -keywords: [v2, theme-v2, theming-v2, theming, introduction] +keywords: [v2, theme-v2, theming-v2, theme, theming, introduction] --- import SDKSpecific from "./SDKSpecific"; @@ -18,25 +18,7 @@ import MessageCustomColor2Screenshot from "../assets/stream-chat-css-message-col import ChatUiSquareThemeScreenshot from "../assets/stream-chat-css-square-theme-screenshot.png"; import ChatUiRtlScreenshot from "../assets/stream-chat-css-rtl-layout-screenshot.png"; - - -The SDK has a new theming and customization system. This page contains information about the new version (refered to as version 2 or v2). The most significant improvements of the new version: - -- Refreshed design -- Better customization through CSS variables -- Support for RTL layout - -The [old theme](../customization/css-and-theming.mdx) (also refered to as version 1 or v1) can still be used with the latest SDK versions, but it's now deprecated, won't be receiving further updates and will be removed in a future major release. - - - - - -New theming system (v2) utilises updated markup and new class names in certain components which are being rendered based on which of the two systems you use. Most of the new components (and/or markup) aren't available in the old version (v1) due to compatibility reasons. - -To use the new theme, please upgrade [`stream-chat-react`](https://www.npmjs.com/package/stream-chat-react) to version `10.0.2` and follow the instructions below. - - +The SDK provides default CSS, which can be overridden by the integrators. ## Importing the stylesheet @@ -215,9 +197,14 @@ To solve this we also have to set the text color for the link attachment compone + ### Custom icons - +#### From CSS + +Starting from stream-chat-angular@5 it's possible to customize icons from CSS. + +Here is an example using the [Google Material Icon library](https://fonts.google.com/icons) to override the send icon: #### From CSS @@ -282,6 +269,15 @@ If the default rules set by the stream-chat-angular stylesheets not enough to se + +### Custom icons + + + +### CSS overrides + +If you'd like to add customizations that are not supported by CSS variables, you can override parts of the default CSS: + TODO diff --git a/docusaurus/docs/Angular/theming/palette-variables.mdx b/docusaurus/docs/Angular/theming/palette-variables.mdx index c80295f7..db1eb577 100644 --- a/docusaurus/docs/Angular/theming/palette-variables.mdx +++ b/docusaurus/docs/Angular/theming/palette-variables.mdx @@ -5,19 +5,6 @@ title: Palette variables keywords: [v2, theme-v2, theming-v2, theming, palette variables] --- -import SDKSpecific from "./SDKSpecific"; -import V2Warning from "./V2Warning"; - - - -:::info - - - -::: - - - A color palette is defined inside the library that used to define default values for the [global theme variables](./global-variables.mdx). If you want to work with the default theme but want to adjust the shades (for example, change `blue500` to a lighter color), you can update the palette variables. However, if you want to change the color scheme of the theme (for example, change the primary color from blue to green), you should take a look at [global theme variables](./global-variables.mdx). You can find the [list of palette variables on GitHub](https://github.com/GetStream/stream-chat-css/blob/main/src-v2/styles/_palette-variables.scss). diff --git a/package-lock.json b/package-lock.json index 86bc543c..a4ec67ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,15 +17,17 @@ "@angular/platform-browser": "~15.0.0", "@angular/platform-browser-dynamic": "~15.0.0", "@angular/router": "~15.0.0", + "@breezystack/lamejs": "^1.2.7", "@ctrl/ngx-emoji-mart": "^8.2.0", "@floating-ui/dom": "^1.6.3", "@ngx-translate/core": "^14.0.0", - "@stream-io/stream-chat-css": "5.0.2", + "@stream-io/stream-chat-css": "5.1.0", "@stream-io/transliterate": "^1.5.2", "angular-mentions": "1.4.0", "dayjs": "^1.11.10", "dotenv": "^16.4.5", "emoji-regex": "^10.3.0", + "fix-webm-duration": "^1.0.6", "ngx-float-ui": "^15.0.0", "pretty-bytes": "^6.1.1", "rxjs": "~7.4.0", @@ -3253,6 +3255,11 @@ "node": ">=6.9.0" } }, + "node_modules/@breezystack/lamejs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@breezystack/lamejs/-/lamejs-1.2.7.tgz", + "integrity": "sha512-6wc7ck65ctA75Hq7FYHTtTvGnYs6msgdxiSUICQ+A01nVOWg6rqouZB8IdyteRlfpYYiFovkf67dIeOgWIUzTA==" + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -4967,9 +4974,9 @@ "dev": true }, "node_modules/@stream-io/stream-chat-css": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@stream-io/stream-chat-css/-/stream-chat-css-5.0.2.tgz", - "integrity": "sha512-iwqtdBvEhuWWhROfIniItx3rffc/vqge2IyFW0Qsfp2XnWTIjE35YWjaG1wY0Q7hz7OU+iqm/qJz//3iaEPuGw==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@stream-io/stream-chat-css/-/stream-chat-css-5.1.0.tgz", + "integrity": "sha512-mPR40FzkuCRwSwzPRxOCfvmN6PUTO4DWJVX/VWtFUS8/OXnMOOcHlR1elV9zz/6p2DQEuEjkIFQB9d8wWWKM1A==" }, "node_modules/@stream-io/transliterate": { "version": "1.5.2", @@ -11237,6 +11244,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/fix-webm-duration": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fix-webm-duration/-/fix-webm-duration-1.0.6.tgz", + "integrity": "sha512-zVAqi4gE+8ywxJuAyV/rlJVX6CMtvyapEbQx6jyoeX9TMjdqAlt/FdG5d7rXSSkDVzTvS0H7CtwzHcH/vh4FPA==" + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -25943,6 +25955,11 @@ "to-fast-properties": "^2.0.0" } }, + "@breezystack/lamejs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@breezystack/lamejs/-/lamejs-1.2.7.tgz", + "integrity": "sha512-6wc7ck65ctA75Hq7FYHTtTvGnYs6msgdxiSUICQ+A01nVOWg6rqouZB8IdyteRlfpYYiFovkf67dIeOgWIUzTA==" + }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -27135,9 +27152,9 @@ "dev": true }, "@stream-io/stream-chat-css": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@stream-io/stream-chat-css/-/stream-chat-css-5.0.2.tgz", - "integrity": "sha512-iwqtdBvEhuWWhROfIniItx3rffc/vqge2IyFW0Qsfp2XnWTIjE35YWjaG1wY0Q7hz7OU+iqm/qJz//3iaEPuGw==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@stream-io/stream-chat-css/-/stream-chat-css-5.1.0.tgz", + "integrity": "sha512-mPR40FzkuCRwSwzPRxOCfvmN6PUTO4DWJVX/VWtFUS8/OXnMOOcHlR1elV9zz/6p2DQEuEjkIFQB9d8wWWKM1A==" }, "@stream-io/transliterate": { "version": "1.5.2", @@ -31691,6 +31708,11 @@ "semver-regex": "^3.1.2" } }, + "fix-webm-duration": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fix-webm-duration/-/fix-webm-duration-1.0.6.tgz", + "integrity": "sha512-zVAqi4gE+8ywxJuAyV/rlJVX6CMtvyapEbQx6jyoeX9TMjdqAlt/FdG5d7rXSSkDVzTvS0H7CtwzHcH/vh4FPA==" + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", diff --git a/package.json b/package.json index ebca0c09..060ec389 100644 --- a/package.json +++ b/package.json @@ -110,15 +110,17 @@ "@angular/platform-browser": "~15.0.0", "@angular/platform-browser-dynamic": "~15.0.0", "@angular/router": "~15.0.0", + "@breezystack/lamejs": "^1.2.7", "@ctrl/ngx-emoji-mart": "^8.2.0", "@floating-ui/dom": "^1.6.3", "@ngx-translate/core": "^14.0.0", - "@stream-io/stream-chat-css": "5.0.2", + "@stream-io/stream-chat-css": "5.1.0", "@stream-io/transliterate": "^1.5.2", "angular-mentions": "1.4.0", "dayjs": "^1.11.10", "dotenv": "^16.4.5", "emoji-regex": "^10.3.0", + "fix-webm-duration": "^1.0.6", "ngx-float-ui": "^15.0.0", "pretty-bytes": "^6.1.1", "rxjs": "~7.4.0", diff --git a/projects/sample-app/src/app/app.component.html b/projects/sample-app/src/app/app.component.html index 3e753b7e..cea3346e 100644 --- a/projects/sample-app/src/app/app.component.html +++ b/projects/sample-app/src/app/app.component.html @@ -29,10 +29,22 @@ - + + + + + - + + + + + diff --git a/projects/sample-app/src/app/app.component.ts b/projects/sample-app/src/app/app.component.ts index b122ae27..a346ccc9 100644 --- a/projects/sample-app/src/app/app.component.ts +++ b/projects/sample-app/src/app/app.component.ts @@ -4,7 +4,7 @@ import { TemplateRef, ViewChild, } from '@angular/core'; -import { Observable } from 'rxjs'; +import { Observable, Subject } from 'rxjs'; import { map } from 'rxjs/operators'; import { ChatClientService, @@ -32,6 +32,7 @@ export class AppComponent implements AfterViewInit { @ViewChild('avatar') avatarTemplate!: TemplateRef; theme$: Observable; counter = 0; + sendMessageOutsideTrigger$ = new Subject(); constructor( private chatService: ChatClientService, diff --git a/projects/sample-app/src/app/app.module.ts b/projects/sample-app/src/app/app.module.ts index bee108b1..20d80588 100644 --- a/projects/sample-app/src/app/app.module.ts +++ b/projects/sample-app/src/app/app.module.ts @@ -7,6 +7,7 @@ import { CustomMessageComponent } from './custom-message/custom-message.componen import { StreamAutocompleteTextareaModule, StreamChatModule, + VoiceRecorderModule, } from 'stream-chat-angular'; import { EmojiPickerComponent } from './emoji-picker/emoji-picker.component'; import { PickerModule } from '@ctrl/ngx-emoji-mart'; @@ -18,6 +19,7 @@ import { PickerModule } from '@ctrl/ngx-emoji-mart'; TranslateModule.forRoot(), StreamChatModule, PickerModule, + VoiceRecorderModule, StreamAutocompleteTextareaModule, ], bootstrap: [AppComponent], diff --git a/projects/stream-chat-angular/ng-package.json b/projects/stream-chat-angular/ng-package.json index 9236618a..f0393f9a 100644 --- a/projects/stream-chat-angular/ng-package.json +++ b/projects/stream-chat-angular/ng-package.json @@ -7,6 +7,7 @@ }, "allowedNonPeerDependencies": [ "dayjs", + "fix-webm-duration", "@stream-io/transliterate", "uuid", "pretty-bytes", diff --git a/projects/stream-chat-angular/package.json b/projects/stream-chat-angular/package.json index 02c775c1..d7e2f225 100644 --- a/projects/stream-chat-angular/package.json +++ b/projects/stream-chat-angular/package.json @@ -19,16 +19,23 @@ "peerDependencies": { "@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "@breezystack/lamejs": "^1.2.7", "@ngx-translate/core": "^14.0.0 || ^15.0.0", "rxjs": "^7.4.0", "stream-chat": "^8.29.0" }, + "peerDependenciesMeta": { + "@breezystack/lamejs": { + "optional": true + } + }, "dependencies": { "@floating-ui/dom": "^1.6.3", "@stream-io/transliterate": "^1.5.2", "angular-mentions": "^1.4.0", "dayjs": "^1.11.10", "emoji-regex": "^10.3.0", + "fix-webm-duration": "^1.0.6", "ngx-float-ui": "^15.0.0|| ^16.0.0 || ^17.0.0 || ^18.0.0 || ^18.0.1-rc.0", "pretty-bytes": "^6.1.1", "tslib": "^2.3.0", diff --git a/projects/stream-chat-angular/src/assets/i18n/en.ts b/projects/stream-chat-angular/src/assets/i18n/en.ts index 0e56b2ff..8c51242b 100644 --- a/projects/stream-chat-angular/src/assets/i18n/en.ts +++ b/projects/stream-chat-angular/src/assets/i18n/en.ts @@ -120,5 +120,11 @@ export const en = { Edited: 'Edited', 'Error playing audio': 'Error playing audio', 'Copy text': 'Copy text', + 'Please grant permission to use microhpone': + 'Please grant permission to use microhpone', + 'Error starting recording': 'Error starting recording', + 'An error has occurred during recording': + 'An error has occurred during recording', + 'Media recording not supported': 'Media recording not supported', }, }; diff --git a/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.html b/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.html index 58819ae5..5a0525d1 100644 --- a/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.html +++ b/projects/stream-chat-angular/src/lib/attachment-preview-list/attachment-preview-list.component.html @@ -48,9 +48,13 @@
-
+
{{ attachmentUpload.file.name }}
this.createPreview(f)); + imageFiles.forEach((f) => void this.createPreview(f)); const newUploads = [ ...imageFiles.map((file) => ({ file, @@ -177,7 +214,7 @@ export class AttachmentService< return attachmentUploads .filter((r) => r.state === 'success') .map((r) => { - const attachment: Attachment = { + let attachment: Attachment = { type: r.type, }; if (r.fromAttachment) { @@ -193,6 +230,9 @@ export class AttachmentService< attachment.file_size = r.file?.size; attachment.thumb_url = r.thumb_url; } + if (r.extraData) { + attachment = { ...attachment, ...r.extraData }; + } } return attachment; @@ -243,18 +283,23 @@ export class AttachmentService< } } - private createPreview(file: File | Blob) { - const reader = new FileReader(); - reader.onload = (event) => { + private async createPreview(file: File | Blob) { + try { + const uri = await createUriFromBlob(file); const attachmentUploads = this.attachmentUploadsSubject.getValue(); const upload = attachmentUploads.find((upload) => upload.file === file); if (!upload) { return; } - upload.previewUri = event.target?.result || undefined; + upload.previewUri = uri; this.attachmentUploadsSubject.next([...attachmentUploads]); - }; - reader.readAsDataURL(file as Blob); + } catch (e: unknown) { + this.chatClientService?.chatClient?.logger( + 'error', + e instanceof Error ? e.message : `Can't create image preview`, + { error: e, tag: ['AttachmentService'] } + ); + } } private async uploadAttachments(uploads: AttachmentUpload[]) { diff --git a/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.spec.ts b/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.spec.ts index 322148e6..a44d663f 100644 --- a/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.spec.ts +++ b/projects/stream-chat-angular/src/lib/channel-preview/channel-preview.component.spec.ts @@ -15,8 +15,9 @@ import { import { ChannelPreviewComponent } from './channel-preview.component'; import { Observable, Subject, of } from 'rxjs'; import { DefaultStreamChatGenerics } from '../types'; -import { IconPlaceholderComponent } from '../icon-placeholder/icon-placeholder.component'; import { DateParserService } from '../date-parser.service'; +import { IconModule } from '../icon/icon.module'; +import { IconPlaceholderComponent } from '../icon/icon-placeholder/icon-placeholder.component'; describe('ChannelPreviewComponent', () => { let fixture: ComponentFixture; @@ -42,12 +43,11 @@ describe('ChannelPreviewComponent', () => { user$: of({ id: 'currentUser' }), }; TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot()], + imports: [TranslateModule.forRoot(), IconModule], declarations: [ ChannelPreviewComponent, AvatarComponent, AvatarPlaceholderComponent, - IconPlaceholderComponent, ], providers: [ { provide: ChannelService, useValue: channelServiceMock }, diff --git a/projects/stream-chat-angular/src/lib/file-utils.ts b/projects/stream-chat-angular/src/lib/file-utils.ts new file mode 100644 index 00000000..84d06bc7 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/file-utils.ts @@ -0,0 +1,49 @@ +export const isImageFile = (file: File) => { + // photoshop files begin with 'image/' + return file.type.startsWith('image/') && !file.type.endsWith('.photoshop'); +}; + +export const readBlobAsArrayBuffer = (blob: Blob): Promise => + new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.onload = () => { + resolve(fileReader.result as ArrayBuffer); + }; + + fileReader.onerror = () => { + reject(fileReader.error); + }; + + fileReader.readAsArrayBuffer(blob); + }); + +export const createFileFromBlobs = ({ + blobsArray, + fileName, + mimeType, +}: { + blobsArray: Blob[]; + fileName: string; + mimeType: string; +}) => { + const concatenatedBlob = new Blob(blobsArray, { type: mimeType }); + return new File([concatenatedBlob], fileName, { + type: concatenatedBlob.type, + }); +}; + +export const getExtensionFromMimeType = (mimeType: string) => { + const match = mimeType.match(/\/([^/;]+)/); + return match && match[1]; +}; + +export const createUriFromBlob = (blob: Blob) => { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = (event) => { + resolve(event.target?.result ?? undefined); + }; + reader.onerror = (e) => reject(e); + reader.readAsDataURL(blob); + }); +}; diff --git a/projects/stream-chat-angular/src/lib/format-duration.ts b/projects/stream-chat-angular/src/lib/format-duration.ts new file mode 100644 index 00000000..2d1d86ee --- /dev/null +++ b/projects/stream-chat-angular/src/lib/format-duration.ts @@ -0,0 +1,18 @@ +export const formatDuration = (durationInSeconds?: number) => { + if (durationInSeconds === undefined || durationInSeconds <= 0) return '00:00'; + + const [hours, hoursLeftover] = divMod(durationInSeconds, 3600); + const [minutes, seconds] = divMod(hoursLeftover, 60); + const roundedSeconds = Math.ceil(seconds); + + const prependHrsZero = hours.toString().length === 1 ? '0' : ''; + const prependMinZero = minutes.toString().length === 1 ? '0' : ''; + const prependSecZero = roundedSeconds.toString().length === 1 ? '0' : ''; + const minSec = `${prependMinZero}${minutes}:${prependSecZero}${roundedSeconds}`; + + return hours ? `${prependHrsZero}${hours}:` + minSec : minSec; +}; + +const divMod = (num: number, divisor: number) => { + return [Math.floor(num / divisor), num % divisor]; +}; diff --git a/projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.html b/projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.html similarity index 100% rename from projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.html rename to projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.html diff --git a/projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.spec.ts b/projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.spec.ts similarity index 96% rename from projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.spec.ts rename to projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.spec.ts index deebb220..2e4bf8fb 100644 --- a/projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.spec.ts +++ b/projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { IconComponent } from '../icon/icon.component'; import { IconPlaceholderComponent } from './icon-placeholder.component'; +import { IconComponent } from '../icon.component'; describe('IconPlaceholderComponent', () => { let component: IconPlaceholderComponent; diff --git a/projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.ts b/projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.ts similarity index 85% rename from projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.ts rename to projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.ts index e7ddd117..0916e089 100644 --- a/projects/stream-chat-angular/src/lib/icon-placeholder/icon-placeholder.component.ts +++ b/projects/stream-chat-angular/src/lib/icon/icon-placeholder/icon-placeholder.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnChanges } from '@angular/core'; -import { CustomTemplatesService } from '../custom-templates.service'; -import { Icon } from '../icon/icon.component'; -import { IconContext } from '../types'; +import { Icon } from '../icon.component'; +import { IconContext } from '../../types'; +import { CustomTemplatesService } from '../../custom-templates.service'; /** * The `IconPlaceholder` component displays the [default icons](./IconComponent.mdx) unless a [custom template](../services/CustomTemplatesService.mdx) is provided. This component is used by the SDK internally, you likely won't need to use it. diff --git a/projects/stream-chat-angular/src/lib/icon/icon.component.ts b/projects/stream-chat-angular/src/lib/icon/icon.component.ts index 3bc04abf..6a788b83 100644 --- a/projects/stream-chat-angular/src/lib/icon/icon.component.ts +++ b/projects/stream-chat-angular/src/lib/icon/icon.component.ts @@ -21,7 +21,8 @@ export type Icon = | 'error' | 'play' | 'pause' - | 'mic'; + | 'mic' + | 'bin'; /** * The `Icon` component can be used to display different icons (i. e. message delivered icon). diff --git a/projects/stream-chat-angular/src/lib/icon/icon.module.ts b/projects/stream-chat-angular/src/lib/icon/icon.module.ts new file mode 100644 index 00000000..57abbfae --- /dev/null +++ b/projects/stream-chat-angular/src/lib/icon/icon.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { IconComponent } from './icon.component'; +import { CommonModule } from '@angular/common'; +import { LoadingIndicatorComponent } from './loading-indicator/loading-indicator.component'; +import { IconPlaceholderComponent } from './icon-placeholder/icon-placeholder.component'; +import { LoadingIndicatorPlaceholderComponent } from './loading-indicator-placeholder/loading-indicator-placeholder.component'; + +@NgModule({ + declarations: [ + IconComponent, + IconPlaceholderComponent, + LoadingIndicatorComponent, + LoadingIndicatorPlaceholderComponent, + ], + imports: [CommonModule], + exports: [ + IconComponent, + IconPlaceholderComponent, + LoadingIndicatorComponent, + LoadingIndicatorPlaceholderComponent, + ], +}) +export class IconModule {} diff --git a/projects/stream-chat-angular/src/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.html b/projects/stream-chat-angular/src/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.html similarity index 100% rename from projects/stream-chat-angular/src/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.html rename to projects/stream-chat-angular/src/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.html diff --git a/projects/stream-chat-angular/src/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.ts b/projects/stream-chat-angular/src/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.ts similarity index 89% rename from projects/stream-chat-angular/src/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.ts rename to projects/stream-chat-angular/src/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.ts index 324dd429..dc2a5c59 100644 --- a/projects/stream-chat-angular/src/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.ts +++ b/projects/stream-chat-angular/src/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core'; -import { CustomTemplatesService } from '../custom-templates.service'; +import { CustomTemplatesService } from '../../custom-templates.service'; /** * The `LoadingInficatorPlaceholder` component displays the [default loading indicator](./LoadingIndicatorComponent.mdx) unless a [custom template](../services/CustomTemplatesService.mdx) is provided. This component is used by the SDK internally, you likely won't need to use it. diff --git a/projects/stream-chat-angular/src/lib/loading-indicator/loading-indicator.component.html b/projects/stream-chat-angular/src/lib/icon/loading-indicator/loading-indicator.component.html similarity index 100% rename from projects/stream-chat-angular/src/lib/loading-indicator/loading-indicator.component.html rename to projects/stream-chat-angular/src/lib/icon/loading-indicator/loading-indicator.component.html diff --git a/projects/stream-chat-angular/src/lib/loading-indicator/loading-indicator.component.ts b/projects/stream-chat-angular/src/lib/icon/loading-indicator/loading-indicator.component.ts similarity index 100% rename from projects/stream-chat-angular/src/lib/loading-indicator/loading-indicator.component.ts rename to projects/stream-chat-angular/src/lib/icon/loading-indicator/loading-indicator.component.ts diff --git a/projects/stream-chat-angular/src/lib/is-image-file.ts b/projects/stream-chat-angular/src/lib/is-image-file.ts deleted file mode 100644 index bb6942c4..00000000 --- a/projects/stream-chat-angular/src/lib/is-image-file.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const isImageFile = (file: File) => { - // photoshop files begin with 'image/' - return file.type.startsWith('image/') && !file.type.endsWith('.photoshop'); -}; diff --git a/projects/stream-chat-angular/src/lib/is-safari.ts b/projects/stream-chat-angular/src/lib/is-safari.ts new file mode 100644 index 00000000..af3acb78 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/is-safari.ts @@ -0,0 +1,3 @@ +export const isSafari = /^((?!chrome|android).)*safari/i.test( + navigator.userAgent +); diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts b/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts index 729fc8dd..ebf9448b 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts +++ b/projects/stream-chat-angular/src/lib/message-input/message-input-config.service.ts @@ -23,11 +23,15 @@ export class MessageInputConfigService { * The scope for user mentions, either members of the current channel of members of the application */ mentionScope: 'channel' | 'application' | undefined = 'channel'; - /** * In `desktop` mode the `Enter` key will trigger message sending, in `mobile` mode the `Enter` key will insert a new line to the message input. */ inputMode: 'desktop' | 'mobile' = 'desktop'; + /** + * If `true` the recording will be sent as a message immediately after the recording is completed. + * If `false`, the recording will added to the attachment preview, and users can continue composing the message. + */ + sendVoiceRecordingImmediately = true; constructor() {} } diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.html b/projects/stream-chat-angular/src/lib/message-input/message-input.component.html index 388c3ad8..1ad80f01 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.html +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.html @@ -1,4 +1,7 @@ -
+
{{ "streamChat.Reply to Message" | translate }} @@ -29,6 +32,7 @@
+ @@ -161,9 +165,16 @@ *ngIf="displayVoiceRecordingButton" class="str-chat__start-recording-audio-button" data-testid="start-voice-recording" + [disabled]=" + voiceRecorderService.isRecorderVisible$.value || + audioRecorder?.isRecording + " + (click)="startVoiceRecording()" + (keyup.enter)="startVoiceRecording()" > +
@@ -175,3 +186,8 @@
+ diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts b/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts index bf73a136..3e499f76 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.spec.ts @@ -30,11 +30,12 @@ import { import { MessageInputComponent } from './message-input.component'; import { TextareaDirective } from './textarea.directive'; import { AutocompleteTextareaComponent } from './autocomplete-textarea/autocomplete-textarea.component'; -import { AvatarComponent } from '../avatar/avatar.component'; import { AttachmentListComponent } from '../attachment-list/attachment-list.component'; import { AvatarPlaceholderComponent } from '../avatar-placeholder/avatar-placeholder.component'; import { AttachmentPreviewListComponent } from '../attachment-preview-list/attachment-preview-list.component'; import { MessageActionsService } from '../message-actions.service'; +import { StreamAvatarModule } from '../stream-avatar.module'; +import { VoiceRecorderService } from './voice-recorder.service'; describe('MessageInputComponent', () => { let nativeElement: HTMLElement; @@ -108,18 +109,17 @@ describe('MessageInputComponent', () => { provide: textareaInjectionToken, useValue: AutocompleteTextareaComponent, }, + VoiceRecorderService, ], }, }); TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot()], + imports: [TranslateModule.forRoot(), StreamAvatarModule], declarations: [ MessageInputComponent, TextareaDirective, AutocompleteTextareaComponent, - AvatarComponent, AttachmentListComponent, - AvatarPlaceholderComponent, AttachmentPreviewListComponent, ], providers: [ diff --git a/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts b/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts index e2fb51d1..bd83c16c 100644 --- a/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts +++ b/projects/stream-chat-angular/src/lib/message-input/message-input.component.ts @@ -4,6 +4,7 @@ import { Component, ComponentFactoryResolver, ComponentRef, + ContentChild, ElementRef, EventEmitter, HostBinding, @@ -12,6 +13,7 @@ import { OnChanges, OnDestroy, OnInit, + Optional, Output, SimpleChanges, TemplateRef, @@ -28,6 +30,7 @@ import { NotificationService } from '../notification.service'; import { AttachmentPreviewListContext, AttachmentUpload, + AudioRecording, CustomAttachmentUploadContext, DefaultStreamChatGenerics, EmojiPickerContext, @@ -40,6 +43,8 @@ import { EmojiInputService } from './emoji-input.service'; import { CustomTemplatesService } from '../custom-templates.service'; import { v4 as uuidv4 } from 'uuid'; import { MessageActionsService } from '../message-actions.service'; +import { VoiceRecorderService } from './voice-recorder.service'; +import { AudioRecorderService } from '../voice-recorder/audio-recorder.service'; /** * The `MessageInput` component displays an input where users can type their messages and upload files, and sends the message to the active channel. The component can be used to compose new messages or update existing ones. To send messages, the chat user needs to have the necessary [channel capability](https://getstream.io/chat/docs/javascript/channel_capabilities/?language=javascript). @@ -48,7 +53,7 @@ import { MessageActionsService } from '../message-actions.service'; selector: 'stream-message-input', templateUrl: './message-input.component.html', styles: [], - providers: [AttachmentService, EmojiInputService], + providers: [AttachmentService, EmojiInputService, VoiceRecorderService], }) export class MessageInputComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit @@ -109,7 +114,11 @@ export class MessageInputComponent @Output() readonly messageUpdate = new EventEmitter<{ message: StreamMessage; }>(); + @ContentChild(TemplateRef) voiceRecorderRef: + | TemplateRef<{ service: VoiceRecorderService }> + | undefined; @HostBinding() class = 'str-chat__message-input-angular-host'; + isVoiceRecording = true; isFileUploadAuthorized: boolean | undefined; canSendLinks: boolean | undefined; canSendMessages: boolean | undefined; @@ -146,7 +155,7 @@ export class MessageInputComponent constructor( private channelService: ChannelService, private notificationService: NotificationService, - private attachmentService: AttachmentService, + public readonly attachmentService: AttachmentService, private configService: MessageInputConfigService, @Inject(textareaInjectionToken) private textareaType: Type, @@ -154,7 +163,9 @@ export class MessageInputComponent private cdRef: ChangeDetectorRef, private emojiInputService: EmojiInputService, private customTemplatesService: CustomTemplatesService, - private messageActionsService: MessageActionsService + private messageActionsService: MessageActionsService, + public readonly voiceRecorderService: VoiceRecorderService, + @Optional() public audioRecorder?: AudioRecorderService ) { this.textareaPlaceholder = this.defaultTextareaPlaceholder; this.subscriptions.push( @@ -172,6 +183,7 @@ export class MessageInputComponent if (channel && this.channel && channel.id !== this.channel.id) { this.textareaValue = ''; this.attachmentService.resetAttachmentUploads(); + this.voiceRecorderService.isRecorderVisible$.next(false); } const capabilities = channel?.data?.own_capabilities as string[]; if (capabilities) { @@ -216,6 +228,11 @@ export class MessageInputComponent () => void this.channelService.typingStarted(this.parentMessageId) ) ); + this.subscriptions.push( + this.voiceRecorderService.isRecorderVisible$.subscribe((isVisible) => { + this.isVoiceRecording = isVisible; + }) + ); this.subscriptions.push( combineLatest([ @@ -249,6 +266,13 @@ export class MessageInputComponent } }) ); + this.subscriptions.push( + this.voiceRecorderService.recording$.subscribe((recording) => { + if (recording) { + void this.voiceRecordingReady(recording); + } + }) + ); } ngOnInit(): void { @@ -456,6 +480,24 @@ export class MessageInputComponent }; } + async startVoiceRecording() { + await this.audioRecorder?.start(); + if (this.audioRecorder?.isRecording) { + this.voiceRecorderService.isRecorderVisible$.next(true); + } + } + + async voiceRecordingReady(recording: AudioRecording) { + try { + await this.attachmentService.uploadVoiceRecording(recording); + if (this.configService.sendVoiceRecordingImmediately) { + await this.messageSent(); + } + } finally { + this.voiceRecorderService.isRecorderVisible$.next(false); + } + } + get isUpdate() { return !!this.message; } diff --git a/projects/stream-chat-angular/src/lib/message-input/voice-recorder.service.ts b/projects/stream-chat-angular/src/lib/message-input/voice-recorder.service.ts new file mode 100644 index 00000000..656eaf5f --- /dev/null +++ b/projects/stream-chat-angular/src/lib/message-input/voice-recorder.service.ts @@ -0,0 +1,22 @@ +import { Injectable, NgModule } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; +import { AudioRecording } from '../types'; + +/** + * The `VoiceRecorderService` provides a commincation outlet between the message input and voice recorder components. + */ +@Injectable({ + providedIn: NgModule, +}) +export class VoiceRecorderService { + /** + * Use this property to get/set if the recording component should be visible + */ + isRecorderVisible$ = new BehaviorSubject(false); + /** + * The audio recording that was created + */ + recording$ = new BehaviorSubject(undefined); + + constructor() {} +} diff --git a/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts b/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts index 782341c1..4021db2b 100644 --- a/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts +++ b/projects/stream-chat-angular/src/lib/message-list/message-list.component.ts @@ -43,6 +43,7 @@ import { listUsers } from '../list-users'; import { DateParserService } from '../date-parser.service'; import { isOnSeparateDate } from '../is-on-separate-date'; import { VirtualizedMessageListService } from '../virtualized-message-list.service'; +import { isSafari } from '../is-safari'; /** * The `MessageList` component renders a scrollable list of messages. @@ -148,7 +149,6 @@ export class MessageListComponent typeof setTimeout >; private jumpToLatestButtonVisibilityTimeout?: ReturnType; - private isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); private forceRepaintSubject = new Subject(); private messageIdToAnchorTo?: string; private anchorMessageTopOffset?: number; @@ -468,7 +468,7 @@ export class MessageListComponent scrollToBottom(): void { this.scrollContainer.nativeElement.scrollTop = this.scrollContainer.nativeElement.scrollHeight + 0.1; - if (this.isSafari) { + if (isSafari) { this.forceRepaintSubject.next(); } } @@ -609,7 +609,7 @@ export class MessageListComponent (messageToAlignTo?.getBoundingClientRect()?.top || 0) - (this.anchorMessageTopOffset || 0); this.anchorMessageTopOffset = undefined; - if (this.isSafari) { + if (isSafari) { this.forceRepaintSubject.next(); } } diff --git a/projects/stream-chat-angular/src/lib/message/message.component.spec.ts b/projects/stream-chat-angular/src/lib/message/message.component.spec.ts index 146d9bc6..fc78ff42 100644 --- a/projects/stream-chat-angular/src/lib/message/message.component.spec.ts +++ b/projects/stream-chat-angular/src/lib/message/message.component.spec.ts @@ -7,7 +7,7 @@ import { import { MessageResponseBase, UserResponse } from 'stream-chat'; import { DefaultStreamChatGenerics, StreamMessage } from '../types'; -import { LoadingIndicatorComponent } from '../loading-indicator/loading-indicator.component'; +import { LoadingIndicatorComponent } from '../icon/loading-indicator/loading-indicator.component'; import { MessageComponent } from './message.component'; import { AvatarComponent } from '../avatar/avatar.component'; import { ChatClientService } from '../chat-client.service'; diff --git a/projects/stream-chat-angular/src/lib/stream-chat.module.ts b/projects/stream-chat-angular/src/lib/stream-chat.module.ts index 4522acd5..9b487fd3 100644 --- a/projects/stream-chat-angular/src/lib/stream-chat.module.ts +++ b/projects/stream-chat-angular/src/lib/stream-chat.module.ts @@ -7,8 +7,6 @@ import { MessageComponent } from './message/message.component'; import { MessageInputComponent } from './message-input/message-input.component'; import { MessageListComponent } from './message-list/message-list.component'; import { CommonModule } from '@angular/common'; -import { LoadingIndicatorComponent } from './loading-indicator/loading-indicator.component'; -import { IconComponent } from './icon/icon.component'; import { MessageActionsBoxComponent } from './message-actions-box/message-actions-box.component'; import { AttachmentListComponent } from './attachment-list/attachment-list.component'; import { MessageReactionsComponent } from './message-reactions/message-reactions.component'; @@ -19,16 +17,15 @@ import { ModalComponent } from './modal/modal.component'; import { TextareaDirective } from './message-input/textarea.directive'; import { StreamAvatarModule } from './stream-avatar.module'; import { ThreadComponent } from './thread/thread.component'; -import { IconPlaceholderComponent } from './icon-placeholder/icon-placeholder.component'; -import { LoadingIndicatorPlaceholderComponent } from './loading-indicator-placeholder/loading-indicator-placeholder.component'; import { MessageBouncePromptComponent } from './message-bounce-prompt/message-bounce-prompt.component'; -import { VoiceRecordingComponent } from './voice-recording/voice-recording.component'; -import { VoiceRecordingWavebarComponent } from './voice-recording/voice-recording-wavebar/voice-recording-wavebar.component'; import { NgxFloatUiModule } from 'ngx-float-ui'; import { TranslateModule } from '@ngx-translate/core'; import { MessageReactionsSelectorComponent } from './message-reactions-selector/message-reactions-selector.component'; import { PaginatedListComponent } from './paginated-list/paginated-list.component'; import { UserListComponent } from './user-list/user-list.component'; +import { VoiceRecordingModule } from './voice-recording/voice-recording.module'; +import { IconModule } from './icon/icon.module'; +import { VoiceRecorderService } from './message-input/voice-recorder.service'; @NgModule({ declarations: [ @@ -39,8 +36,6 @@ import { UserListComponent } from './user-list/user-list.component'; MessageComponent, MessageInputComponent, MessageListComponent, - LoadingIndicatorComponent, - IconComponent, MessageActionsBoxComponent, AttachmentListComponent, MessageReactionsComponent, @@ -50,11 +45,7 @@ import { UserListComponent } from './user-list/user-list.component'; ModalComponent, TextareaDirective, ThreadComponent, - IconPlaceholderComponent, - LoadingIndicatorPlaceholderComponent, MessageBouncePromptComponent, - VoiceRecordingComponent, - VoiceRecordingWavebarComponent, MessageReactionsSelectorComponent, UserListComponent, PaginatedListComponent, @@ -64,6 +55,8 @@ import { UserListComponent } from './user-list/user-list.component'; NgxFloatUiModule, StreamAvatarModule, TranslateModule, + VoiceRecordingModule, + IconModule, ], exports: [ ChannelComponent, @@ -73,8 +66,6 @@ import { UserListComponent } from './user-list/user-list.component'; MessageComponent, MessageInputComponent, MessageListComponent, - LoadingIndicatorComponent, - IconComponent, MessageActionsBoxComponent, AttachmentListComponent, MessageReactionsComponent, @@ -84,14 +75,13 @@ import { UserListComponent } from './user-list/user-list.component'; ModalComponent, StreamAvatarModule, ThreadComponent, - IconPlaceholderComponent, - LoadingIndicatorPlaceholderComponent, MessageBouncePromptComponent, - VoiceRecordingComponent, - VoiceRecordingWavebarComponent, + VoiceRecordingModule, MessageReactionsSelectorComponent, UserListComponent, PaginatedListComponent, + IconModule, ], + providers: [VoiceRecorderService], }) export class StreamChatModule {} diff --git a/projects/stream-chat-angular/src/lib/types.ts b/projects/stream-chat-angular/src/lib/types.ts index ec51c9fb..3dd6aaf9 100644 --- a/projects/stream-chat-angular/src/lib/types.ts +++ b/projects/stream-chat-angular/src/lib/types.ts @@ -93,9 +93,10 @@ export type AttachmentUpload< errorReason?: AttachmentUploadErrorReason; errorExtraInfo?: { param: string }[]; url?: string; - type: 'image' | 'file' | 'video'; + type: 'image' | 'file' | 'video' | 'voiceRecording'; previewUri?: string | ArrayBuffer; thumb_url?: string; + extraData?: Partial>; fromAttachment?: Attachment; }; @@ -472,3 +473,12 @@ export type VirtualizedListQueryState = { export type VirtualizedListQueryDirection = 'top' | 'bottom'; export type VirtualizedListVerticalItemPosition = 'top' | 'bottom' | 'middle'; + +export type AudioRecording = MediaRecording & { waveform_data: number[] }; + +export type MediaRecording = { + recording: File; + duration: number; + mime_type: string; + asset_url: string | ArrayBuffer | undefined; +}; diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts b/projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts new file mode 100644 index 00000000..bc8cec20 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/amplitude-recorder.service.ts @@ -0,0 +1,167 @@ +import { Injectable, NgModule } from '@angular/core'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { ChatClientService } from '../chat-client.service'; + +const MAX_FREQUENCY_AMPLITUDE = 255 as const; + +const rootMeanSquare = (values: Uint8Array) => + Math.sqrt( + values.reduce((acc, val) => acc + Math.pow(val, 2), 0) / values.length + ); + +/** + * fftSize + * An unsigned integer, representing the window size of the FFT, given in number of samples. + * A higher value will result in more details in the frequency domain but fewer details + * in the amplitude domain. + * + * Must be a power of 2 between 2^5 and 2^15, so one of: 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, and 32768. + * Defaults to 32. + * + * maxDecibels + * A double, representing the maximum decibel value for scaling the FFT analysis data, + * where 0 dB is the loudest possible sound, -10 dB is a 10th of that, etc. + * The default value is -30 dB. + * + * minDecibels + * A double, representing the minimum decibel value for scaling the FFT analysis data, + * where 0 dB is the loudest possible sound, -10 dB is a 10th of that, etc. + * The default value is -100 dB. + */ +export type AmplitudeAnalyserConfig = Pick< + AnalyserNode, + 'fftSize' | 'maxDecibels' | 'minDecibels' +>; +export type AmplitudeRecorderConfig = { + analyserConfig: AmplitudeAnalyserConfig; + sampleCount: number; + samplingFrequencyMs: number; +}; + +export const DEFAULT_AMPLITUDE_RECORDER_CONFIG: AmplitudeRecorderConfig = { + analyserConfig: { + fftSize: 32, + maxDecibels: 0, + minDecibels: -100, + } as AmplitudeAnalyserConfig, + sampleCount: 100, + samplingFrequencyMs: 60, +}; + +/** + * The `AmplitudeRecorderService` is a utility service used to create amplitude values for voice recordings, making it possible to display a wave bar + */ +@Injectable({ providedIn: NgModule }) +export class AmplitudeRecorderService { + config = DEFAULT_AMPLITUDE_RECORDER_CONFIG; + amplitudes$: Observable; + error$: Observable; + + private amplitudesSubject = new BehaviorSubject([]); + private errorSubject = new BehaviorSubject(undefined); + private audioContext: AudioContext | undefined; + private analyserNode: AnalyserNode | undefined; + private microphone: MediaStreamAudioSourceNode | undefined; + private stream: MediaStream | undefined; + private amplitudeSamplingInterval: ReturnType | undefined; + + constructor(private chatService: ChatClientService) { + this.amplitudes$ = this.amplitudesSubject.asObservable(); + this.error$ = this.errorSubject.asObservable(); + } + + /** + * The recorded amplitudes + */ + get amplitudes() { + return this.amplitudesSubject.value; + } + + /** + * Start amplitude recording for the given media stream + * @param stream + */ + start = (stream: MediaStream) => { + this.stop(); + + this.stream = stream; + this.init(); + + this.resume(); + }; + + /** + * Temporarily pause amplitude recording, recording can be resumed with `resume` + */ + pause() { + clearInterval(this.amplitudeSamplingInterval); + this.amplitudeSamplingInterval = undefined; + } + + /** + * Resume amplited recording after it was pasued + */ + resume() { + this.amplitudeSamplingInterval = setInterval(() => { + if (!this.analyserNode) { + return; + } + const frequencyBins = new Uint8Array(this.analyserNode.frequencyBinCount); + try { + this.analyserNode.getByteFrequencyData(frequencyBins); + } catch (e) { + this.logError(e as Error); + this.errorSubject.next(e as Error); + return; + } + const normalizedSignalStrength = + rootMeanSquare(frequencyBins) / MAX_FREQUENCY_AMPLITUDE; + this.amplitudesSubject.next([ + ...this.amplitudesSubject.value, + normalizedSignalStrength, + ]); + }, this.config.samplingFrequencyMs); + } + + /** + * Stop the amplitude recording and frees up used resources + */ + stop() { + if (!this.stream) { + return; + } + this.stream = undefined; + clearInterval(this.amplitudeSamplingInterval); + this.amplitudeSamplingInterval = undefined; + this.amplitudesSubject.next([]); + this.errorSubject.next(undefined); + this.microphone?.disconnect(); + this.analyserNode?.disconnect(); + if (this.audioContext?.state !== 'closed') { + void this.audioContext?.close(); + } + } + + private init() { + if (!this.stream) { + return; + } + + this.audioContext = new AudioContext(); + this.analyserNode = this.audioContext.createAnalyser(); + const { analyserConfig } = this.config; + this.analyserNode.fftSize = analyserConfig.fftSize; + this.analyserNode.maxDecibels = analyserConfig.maxDecibels; + this.analyserNode.minDecibels = analyserConfig.minDecibels; + + this.microphone = this.audioContext.createMediaStreamSource(this.stream); + this.microphone.connect(this.analyserNode); + } + + private logError(error: Error) { + this.chatService.chatClient?.logger('error', error.message, { + error: error, + tag: ['AmplitudeRecorderService'], + }); + } +} diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts b/projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts new file mode 100644 index 00000000..ee6fa79d --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/audio-recorder.service.ts @@ -0,0 +1,96 @@ +import { Injectable } from '@angular/core'; +import { AmplitudeRecorderService } from './amplitude-recorder.service'; +import { isSafari } from '../is-safari'; +import { MediaRecorderConfig, MultimediaRecorder } from './media-recorder'; +import { NotificationService } from '../notification.service'; +import { ChatClientService } from '../chat-client.service'; +import { TranscoderService } from './transcoder.service'; +import { resampleWaveForm } from '../wave-form-sampler'; +import { AudioRecording, MediaRecording } from '../types'; +import { NgModel } from '@angular/forms'; + +/** + * The `AudioRecorderService` can record an audio file, the SDK uses this to record a voice message + */ +@Injectable({ providedIn: NgModel }) +export class AudioRecorderService extends MultimediaRecorder< + Omit +> { + /** + * Due to browser restrictions the following config is used: + * - In Safari we record in audio/mp4 + * - For all other browsers we use audio/webm (which is then transcoded to wav) + */ + config: MediaRecorderConfig = { + mimeType: isSafari ? 'audio/mp4;codecs=mp4a.40.2' : 'audio/webm', + }; + + constructor( + notificationService: NotificationService, + chatService: ChatClientService, + transcoder: TranscoderService, + private amplitudeRecorder: AmplitudeRecorderService + ) { + super(notificationService, chatService, transcoder); + } + + protected enrichWithExtraData() { + const waveformData = resampleWaveForm( + this.amplitudeRecorder.amplitudes, + this.amplitudeRecorder.config.sampleCount + ); + + return { waveform_data: waveformData }; + } + + /** + * Start audio recording + */ + async start() { + const result = await super.start(); + + if (this.mediaRecorder?.stream) { + this.amplitudeRecorder.start(this.mediaRecorder?.stream); + } + + return result; + } + + /** + * Pause audio recording, it can be restarted using `resume` + */ + pause() { + const result = super.pause(); + + this.amplitudeRecorder.pause(); + + return result; + } + + /** + * Resume a previously paused recording + */ + resume() { + const result = super.resume(); + + this.amplitudeRecorder.resume(); + + return result; + } + + /** + * Stop the recording and free up used resources + * @param options + * @param options.cancel if this is `true` no recording will be created, but resources will be freed + * @returns the recording + */ + async stop(options?: { cancel: boolean }) { + try { + const result = await super.stop(options); + + return result; + } finally { + this.amplitudeRecorder.stop(); + } + } +} diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/media-recorder.ts b/projects/stream-chat-angular/src/lib/voice-recorder/media-recorder.ts new file mode 100644 index 00000000..b81afca2 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/media-recorder.ts @@ -0,0 +1,270 @@ +import { BehaviorSubject, Observable } from 'rxjs'; +import { + createFileFromBlobs, + createUriFromBlob, + getExtensionFromMimeType, +} from '../file-utils'; +import { NotificationService } from '../notification.service'; +import { ChatClientService } from '../chat-client.service'; +import fixWebmDuration from 'fix-webm-duration'; +import { TranscoderService } from './transcoder.service'; +import { MediaRecording } from '../types'; + +export type MediaRecorderConfig = Omit & + Required>; + +export enum MediaRecordingState { + PAUSED = 'paused', + RECORDING = 'recording', + STOPPED = 'stopped', + ERROR = 'error', +} + +export type MediaRecordingTitleOptions = { + mimeType: string; +}; + +export abstract class MultimediaRecorder { + abstract config: MediaRecorderConfig; + customGenerateRecordingTitle: + | ((options: MediaRecordingTitleOptions) => string) + | undefined; + recordingState$: Observable; + recording$: Observable<(MediaRecording & T) | undefined>; + + protected recordingSubject = new BehaviorSubject< + (MediaRecording & T) | undefined + >(undefined); + + protected mediaRecorder: MediaRecorder | undefined; + protected startTime: number | undefined; + protected recordedChunkDurations: number[] = []; + private recordingStateSubject = new BehaviorSubject( + MediaRecordingState.STOPPED + ); + + constructor( + protected notificationService: NotificationService, + protected chatService: ChatClientService, + private transcoder: TranscoderService + ) { + this.recording$ = this.recordingSubject.asObservable(); + this.recordingState$ = this.recordingStateSubject.asObservable(); + } + + get durationMs() { + return ( + this.recordedChunkDurations.reduce((acc, val) => acc + val, 0) + + (this.startTime ? Date.now() - this.startTime : 0) + ); + } + + get mediaType() { + return this.config.mimeType.split('/')?.[0] || 'unknown'; + } + + get isRecording() { + return ( + this.recordingStateSubject.value === MediaRecordingState.RECORDING || + this.recordingStateSubject.value === MediaRecordingState.PAUSED + ); + } + + generateRecordingTitle = (mimeType: string) => { + if (this.customGenerateRecordingTitle) { + return this.customGenerateRecordingTitle({ mimeType }); + } else { + return `${ + this.mediaType + }_recording_${new Date().toISOString()}.${getExtensionFromMimeType( + mimeType + )}`; // extension needed so that desktop Safari can play the asset + } + }; + + async makeRecording(blob: Blob) { + const { mimeType } = this.config; + try { + if (mimeType.includes('webm')) { + // The browser does not include duration metadata with the recorded blob + blob = await fixWebmDuration(blob, this.durationMs, { + logger: () => null, // prevents polluting the browser console + }); + } + blob = await this.transcoder.transcode(blob); + + if (!blob) return; + + const file = createFileFromBlobs({ + blobsArray: [blob], + fileName: this.generateRecordingTitle(blob.type), + mimeType: blob.type, + }); + const previewUrl = await createUriFromBlob(file); + + const extraData = this.enrichWithExtraData(); + this.recordingSubject.next({ + recording: file, + duration: this.durationMs / 1000, + asset_url: previewUrl, + mime_type: mimeType, + ...extraData, + }); + return file; + } catch (error) { + this.logError(error as Error); + this.recordingStateSubject.next(MediaRecordingState.ERROR); + return undefined; + } + } + + handleErrorEvent = (e: Event) => { + /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */ + this.logError((e as ErrorEvent).error); + this.recordingStateSubject.next(MediaRecordingState.ERROR); + this.notificationService.addTemporaryNotification( + 'streamChat.An error has occurred during recording' + ); + void this.stop({ cancel: true }); + }; + + handleDataavailableEvent = (e: BlobEvent) => { + if (!e.data.size) return; + void this.makeRecording(e.data); + }; + + get recordingState() { + return this.recordingStateSubject.value; + } + + async start() { + if ( + [MediaRecordingState.RECORDING, MediaRecordingState.PAUSED].includes( + this.recordingStateSubject.value + ) + ) { + return; + } + + this.recordingSubject.next(undefined); + + // account for requirement on iOS as per this bug report: https://bugs.webkit.org/show_bug.cgi?id=252303 + if (!navigator.mediaDevices) { + console.warn( + `[Stream Chat] Media devices API missing, it's possible your app is not served from a secure context (https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts)` + ); + const error = new Error('Media recording is not supported'); + this.logError(error); + this.recordingStateSubject.next(MediaRecordingState.ERROR); + this.notificationService.addTemporaryNotification( + `streamChat.Media recording not supported` + ); + return; + } + + try { + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + this.mediaRecorder = new MediaRecorder(stream, this.config); + + this.mediaRecorder.addEventListener( + 'dataavailable', + this.handleDataavailableEvent + ); + this.mediaRecorder.addEventListener('error', this.handleErrorEvent); + + this.startTime = new Date().getTime(); + this.mediaRecorder.start(); + + this.recordingStateSubject.next(MediaRecordingState.RECORDING); + } catch (error) { + this.logError(error as Error); + void this.stop({ cancel: true }); + this.recordingStateSubject.next(MediaRecordingState.ERROR); + const isNotAllowed = (error as Error).name?.includes('NotAllowedError'); + this.notificationService.addTemporaryNotification( + isNotAllowed + ? `streamChat.Please grant permission to use microhpone` + : `streamChat.Error starting recording` + ); + } + } + + pause() { + if (this.recordingStateSubject.value !== MediaRecordingState.RECORDING) + return; + if (this.startTime) { + this.recordedChunkDurations.push(new Date().getTime() - this.startTime); + this.startTime = undefined; + } + this.mediaRecorder?.pause(); + this.recordingStateSubject.next(MediaRecordingState.PAUSED); + } + + resume() { + if (this.recordingStateSubject.value !== MediaRecordingState.PAUSED) return; + this.startTime = new Date().getTime(); + this.mediaRecorder?.resume(); + this.recordingStateSubject.next(MediaRecordingState.RECORDING); + } + + async stop(options: { cancel: boolean } = { cancel: false }) { + if (this.startTime) { + this.recordedChunkDurations.push(new Date().getTime() - this.startTime); + this.startTime = undefined; + } + let recording!: MediaRecording & T; + this.mediaRecorder?.stop(); + try { + if ( + !options.cancel && + this.recordingStateSubject.value !== MediaRecordingState.ERROR + ) { + recording = await new Promise((resolve, reject) => { + this.recording$.subscribe((r) => { + if (r) { + resolve(r); + } + }); + this.recordingState$.subscribe((s) => { + if (s === MediaRecordingState.ERROR) { + reject(new Error(`Recording couldn't be created`)); + } + }); + }); + } + } catch { + this.notificationService.addTemporaryNotification( + 'streamChat.An error has occurred during recording' + ); + } finally { + this.recordedChunkDurations = []; + this.startTime = undefined; + + this.mediaRecorder?.removeEventListener( + 'dataavailable', + this.handleDataavailableEvent + ); + this.mediaRecorder?.removeEventListener('error', this.handleErrorEvent); + if (this.mediaRecorder?.stream?.active) { + this.mediaRecorder?.stream?.getTracks().forEach((track) => { + track.stop(); + this.mediaRecorder?.stream?.removeTrack(track); + }); + this.mediaRecorder = undefined; + } + + this.recordingStateSubject.next(MediaRecordingState.STOPPED); + } + + return recording; + } + + protected abstract enrichWithExtraData(): T; + + protected logError(error: Error) { + this.chatService.chatClient?.logger('error', error.message, { + error: error, + tag: ['MediaRecorder'], + }); + } +} diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/mp3-transcoder.ts b/projects/stream-chat-angular/src/lib/voice-recorder/mp3-transcoder.ts new file mode 100644 index 00000000..0692efbc --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/mp3-transcoder.ts @@ -0,0 +1,92 @@ +const ENCODING_BIT_RATE = 128; // kbps; +const COUNT_SAMPLES_PER_ENCODED_BLOCK = 1152; +const SAMPLE_RATE = 16000; + +const readFileAsArrayBuffer = (blob: Blob): Promise => + new Promise((resolve, reject) => { + const blobReader = new FileReader(); + blobReader.onload = () => { + resolve(blobReader.result as ArrayBuffer); + }; + + blobReader.onerror = () => { + reject(blobReader.error); + }; + + blobReader.readAsArrayBuffer(blob); + }); + +const toAudioBuffer = async (blob: Blob) => { + const audioCtx = new AudioContext(); + + const arrayBuffer = await readFileAsArrayBuffer(blob); + const decodedData = await audioCtx.decodeAudioData(arrayBuffer); + if (audioCtx.state !== 'closed') await audioCtx.close(); + return decodedData; +}; + +const renderAudio = async (audioBuffer: AudioBuffer, sampleRate: number) => { + const offlineAudioCtx = new OfflineAudioContext( + audioBuffer.numberOfChannels, + audioBuffer.duration * sampleRate, + sampleRate + ); + const source = offlineAudioCtx.createBufferSource(); + source.buffer = audioBuffer; + source.connect(offlineAudioCtx.destination); + source.start(); + + return await offlineAudioCtx.startRendering(); +}; + +const float32ArrayToInt16Array = (float32Arr: Float32Array) => { + const int16Arr = new Int16Array(float32Arr.length); + for (let i = 0; i < float32Arr.length; i++) { + const float32Value = float32Arr[i]; + // Clamp the float value between -1 and 1 + const clampedValue = Math.max(-1, Math.min(1, float32Value)); + // Convert the float value to a signed 16-bit integer + int16Arr[i] = Math.round(clampedValue * 32767); + } + return int16Arr; +}; + +const splitDataByChannel = (audioBuffer: AudioBuffer) => + Array.from({ length: audioBuffer.numberOfChannels }, (_, i) => + audioBuffer.getChannelData(i) + ).map(float32ArrayToInt16Array); + +/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument */ +export async function encodeWebmToMp3(blob: Blob, lameJs: any) { + const audioBuffer = await renderAudio(await toAudioBuffer(blob), SAMPLE_RATE); + const channelCount = audioBuffer.numberOfChannels; + const dataByChannel = splitDataByChannel(audioBuffer); + const mp3Encoder = new lameJs.Mp3Encoder( + channelCount, + SAMPLE_RATE, + ENCODING_BIT_RATE + ); + + const dataBuffer: Int8Array[] = []; + let remaining = dataByChannel[0].length; + for ( + let i = 0; + remaining >= COUNT_SAMPLES_PER_ENCODED_BLOCK; + i += COUNT_SAMPLES_PER_ENCODED_BLOCK + ) { + const [leftChannelBlock, rightChannelBlock] = dataByChannel.map((channel) => + channel.subarray(i, i + COUNT_SAMPLES_PER_ENCODED_BLOCK) + ); + dataBuffer.push( + new Int8Array( + mp3Encoder.encodeBuffer(leftChannelBlock, rightChannelBlock) + ) + ); + remaining -= COUNT_SAMPLES_PER_ENCODED_BLOCK; + } + + const lastBlock = mp3Encoder.flush(); + if (lastBlock.length) dataBuffer.push(new Int8Array(lastBlock)); + return new Blob(dataBuffer, { type: 'audio/mp3;sbu_type=voice' }); +} +/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument */ diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/transcoder.service.ts b/projects/stream-chat-angular/src/lib/voice-recorder/transcoder.service.ts new file mode 100644 index 00000000..e50b6ce7 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/transcoder.service.ts @@ -0,0 +1,193 @@ +import { Injectable, NgModule } from '@angular/core'; +import { readBlobAsArrayBuffer } from '../file-utils'; + +export type TranscoderConfig = { + sampleRate: number; +}; + +export type TranscodeParams = TranscoderConfig & { + blob: Blob; +}; + +const WAV_HEADER_LENGTH_BYTES = 44 as const; +const BYTES_PER_SAMPLE = 2 as const; +const RIFF_FILE_MAX_BYTES = 4294967295 as const; + +const HEADER = { + AUDIO_FORMAT: { offset: 20, value: 1 }, // PCM = 1 + BITS_PER_SAMPLE: { offset: 34, value: BYTES_PER_SAMPLE * 8 }, // 16 bits encoding + BLOCK_ALIGN: { offset: 32 }, + BYTE_RATE: { offset: 28 }, + CHANNEL_COUNT: { offset: 22 }, // 1 - mono, 2 - stereo + CHUNK_ID: { offset: 0, value: 0x52494646 }, // hex representation of string "RIFF" (Resource Interchange File Format) - identifies the file structure that defines a class of more specific file formats, e.g. WAVE + CHUNK_SIZE: { offset: 4 }, + FILE_FORMAT: { offset: 8, value: 0x57415645 }, // hex representation of string "WAVE" + SAMPLE_RATE: { offset: 24 }, + SUBCHUNK1_ID: { offset: 12, value: 0x666d7420 }, // hex representation of string "fmt " - identifies the start of "format" section of the header + SUBCHUNK1_SIZE: { offset: 16, value: 16 }, // Subchunk1 Size without SUBCHUNK1_ID and SUBCHUNK1_SIZE fields + SUBCHUNK2_ID: { offset: 36, value: 0x64617461 }, // hex representation of string "data" - identifies the start of actual audio data section + SUBCHUNK2_SIZE: { offset: 40 }, // actual audio data size +} as const; + +type WriteWaveHeaderParams = { + arrayBuffer: ArrayBuffer; + // 1 - mono, 2 - stereo + channelCount: number; + // Number of samples per second, e.g. 44100Hz + sampleRate: number; +}; + +type WriteAudioDataParams = { + arrayBuffer: ArrayBuffer; + dataByChannel: Float32Array[]; +}; + +/** + * The `TranscoderService` is used to transcibe audio recording to a format that's supported by all major browsers. The SDK uses this to create voice messages. + * + * If you want to use your own transcoder you can provide a `customTranscoder`. + */ +@Injectable({ providedIn: NgModule }) +export class TranscoderService { + config: TranscoderConfig = { + sampleRate: 16000, + }; + customTranscoder?: (blob: Blob) => Blob | Promise; + constructor() {} + + /** + * The default transcoder will leave audio/mp4 files as is, and transcode webm files to wav. If you want to customize this, you can provide your own transcoder using the `customTranscoder` field + * @param blob + * @returns the transcoded file + */ + async transcode(blob: Blob) { + if (this.customTranscoder) { + return this.customTranscoder(blob); + } + if (blob.type.includes('audio/mp4')) { + return blob; + } + const audioBuffer = await this.renderAudio( + await this.toAudioBuffer(blob), + this.config.sampleRate + ); + const numberOfSamples = audioBuffer.duration * this.config.sampleRate; + const fileSizeBytes = + numberOfSamples * audioBuffer.numberOfChannels * BYTES_PER_SAMPLE + + WAV_HEADER_LENGTH_BYTES; + + const arrayBuffer = new ArrayBuffer(fileSizeBytes); + this.writeWavHeader({ + arrayBuffer, + channelCount: audioBuffer.numberOfChannels, + sampleRate: this.config.sampleRate, + }); + this.writeWavAudioData({ + arrayBuffer, + dataByChannel: this.splitDataByChannel(audioBuffer), + }); + return new Blob([arrayBuffer], { type: 'audio/wav' }); + } + + protected async renderAudio(audioBuffer: AudioBuffer, sampleRate: number) { + const offlineAudioCtx = new OfflineAudioContext( + audioBuffer.numberOfChannels, + audioBuffer.duration * sampleRate, + sampleRate + ); + const source = offlineAudioCtx.createBufferSource(); + source.buffer = audioBuffer; + source.connect(offlineAudioCtx.destination); + source.start(); + + return await offlineAudioCtx.startRendering(); + } + + protected async toAudioBuffer(blob: Blob) { + const audioCtx = new AudioContext(); + + const arrayBuffer = await readBlobAsArrayBuffer(blob); + const decodedData = await audioCtx.decodeAudioData(arrayBuffer); + if (audioCtx.state !== 'closed') await audioCtx.close(); + return decodedData; + } + + protected writeWavAudioData({ + arrayBuffer, + dataByChannel, + }: WriteAudioDataParams) { + const dataView = new DataView(arrayBuffer); + const channelCount = dataByChannel.length; + + dataByChannel.forEach((channelData, channelIndex) => { + let writeOffset = WAV_HEADER_LENGTH_BYTES + channelCount * channelIndex; + + channelData.forEach((float32Value) => { + dataView.setInt16( + writeOffset, + float32Value < 0 + ? Math.max(-1, float32Value) * 32768 + : Math.min(1, float32Value) * 32767, + true + ); + writeOffset += channelCount * BYTES_PER_SAMPLE; + }); + }); + } + + protected writeWavHeader({ + arrayBuffer, + channelCount, + sampleRate, + }: WriteWaveHeaderParams) { + const byteRate = sampleRate * channelCount * BYTES_PER_SAMPLE; // bytes/sec + const blockAlign = channelCount * BYTES_PER_SAMPLE; + + const dataView = new DataView(arrayBuffer); + /* + * The maximum size of a RIFF file is 4294967295 bytes and since the header takes up 44 bytes there are 4294967251 bytes left for the + * data chunk. + */ + const dataChunkSize = Math.min( + dataView.byteLength - WAV_HEADER_LENGTH_BYTES, + RIFF_FILE_MAX_BYTES - WAV_HEADER_LENGTH_BYTES + ); + + dataView.setUint32(HEADER.CHUNK_ID.offset, HEADER.CHUNK_ID.value); // "RIFF" + dataView.setUint32( + HEADER.CHUNK_SIZE.offset, + arrayBuffer.byteLength - 8, + true + ); // adjustment for the first two headers - chunk id + file size + dataView.setUint32(HEADER.FILE_FORMAT.offset, HEADER.FILE_FORMAT.value); // "WAVE" + + dataView.setUint32(HEADER.SUBCHUNK1_ID.offset, HEADER.SUBCHUNK1_ID.value); // "fmt " + dataView.setUint32( + HEADER.SUBCHUNK1_SIZE.offset, + HEADER.SUBCHUNK1_SIZE.value, + true + ); + dataView.setUint16( + HEADER.AUDIO_FORMAT.offset, + HEADER.AUDIO_FORMAT.value, + true + ); + dataView.setUint16(HEADER.CHANNEL_COUNT.offset, channelCount, true); + dataView.setUint32(HEADER.SAMPLE_RATE.offset, sampleRate, true); + dataView.setUint32(HEADER.BYTE_RATE.offset, byteRate, true); + dataView.setUint16(HEADER.BLOCK_ALIGN.offset, blockAlign, true); + dataView.setUint16( + HEADER.BITS_PER_SAMPLE.offset, + HEADER.BITS_PER_SAMPLE.value, + true + ); + + dataView.setUint32(HEADER.SUBCHUNK2_ID.offset, HEADER.SUBCHUNK2_ID.value); // "data" + dataView.setUint32(HEADER.SUBCHUNK2_SIZE.offset, dataChunkSize, true); + } + + protected splitDataByChannel = (audioBuffer: AudioBuffer) => + Array.from({ length: audioBuffer.numberOfChannels }, (_, i) => + audioBuffer.getChannelData(i) + ); +} diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.html b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.html new file mode 100644 index 00000000..5b2da986 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.html @@ -0,0 +1,17 @@ +
+ {{ formattedDuration }} +
+
+
+
+
+
diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.spec.ts b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.spec.ts new file mode 100644 index 00000000..e1c6ea6d --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.spec.ts @@ -0,0 +1,30 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VoiceRecorderWavebarComponent } from './voice-recorder-wavebar.component'; +import { AudioRecorderService } from '../audio-recorder.service'; +import { AmplitudeRecorderService } from '../amplitude-recorder.service'; +import { TranscoderService } from '../transcoder.service'; + +describe('VoiceRecorderWavebarComponent', () => { + let component: VoiceRecorderWavebarComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [VoiceRecorderWavebarComponent], + providers: [ + AudioRecorderService, + AmplitudeRecorderService, + TranscoderService, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(VoiceRecorderWavebarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.ts b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.ts new file mode 100644 index 00000000..d2f95dbc --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.ts @@ -0,0 +1,44 @@ +import { Component, OnDestroy } from '@angular/core'; +import { AmplitudeRecorderService } from '../amplitude-recorder.service'; +import { Observable } from 'rxjs'; +import { AudioRecorderService } from '../audio-recorder.service'; +import { formatDuration } from '../../format-duration'; + +/** + * The `VoiceRecorderWavebarComponent` displays the amplitudes of the recording while the recoding is in progress + */ +@Component({ + selector: 'stream-voice-recorder-wavebar', + templateUrl: './voice-recorder-wavebar.component.html', + styles: [], +}) +export class VoiceRecorderWavebarComponent implements OnDestroy { + amplitudes$: Observable; + formattedDuration: string; + durationComputeInterval: ReturnType; + isLongerThanOneHour = false; + + constructor( + private amplitudeRecorder: AmplitudeRecorderService, + private audioRecorder: AudioRecorderService + ) { + this.amplitudes$ = this.amplitudeRecorder.amplitudes$; + this.formattedDuration = formatDuration( + this.audioRecorder.durationMs / 1000 + ); + this.durationComputeInterval = setInterval(() => { + this.isLongerThanOneHour = this.audioRecorder.durationMs / 1000 > 3600; + this.formattedDuration = formatDuration( + this.audioRecorder.durationMs / 1000 + ); + }, 1000); + } + + trackByIndex(i: number) { + return i; + } + + ngOnDestroy(): void { + clearInterval(this.durationComputeInterval); + } +} diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.html b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.html new file mode 100644 index 00000000..fbd238fe --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.html @@ -0,0 +1,75 @@ +
+
+ + + + + + + + + + + + + +
+
diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.spec.ts b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.spec.ts new file mode 100644 index 00000000..96c17062 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VoiceRecorderComponent } from './voice-recorder.component'; +import { VoiceRecorderModule } from './voice-recorder.module'; + +describe('VoiceRecorderComponent', () => { + let component: VoiceRecorderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [VoiceRecorderModule], + }).compileComponents(); + + fixture = TestBed.createComponent(VoiceRecorderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.ts b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.ts new file mode 100644 index 00000000..e0ee32d7 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.component.ts @@ -0,0 +1,92 @@ +import { + Component, + Input, + OnChanges, + OnDestroy, + OnInit, + SimpleChanges, +} from '@angular/core'; +import { AudioRecorderService } from './audio-recorder.service'; +import { MediaRecordingState } from './media-recorder'; +import { Subscription } from 'rxjs'; +import { AudioRecording } from '../types'; +import { VoiceRecorderService } from '../message-input/voice-recorder.service'; + +/** + * The `VoiceRecorderComponent` makes it possible to record audio, and then upload it as a voice recording attachment + */ +@Component({ + selector: 'stream-voice-recorder', + templateUrl: './voice-recorder.component.html', + styles: [], + providers: [], +}) +export class VoiceRecorderComponent implements OnInit, OnDestroy, OnChanges { + @Input() voiceRecorderService?: VoiceRecorderService; + recordState: MediaRecordingState = MediaRecordingState.STOPPED; + isLoading = false; + recording?: AudioRecording; + readonly MediaRecordingState = MediaRecordingState; + private subscriptions: Subscription[] = []; + private isVisibleSubscription?: Subscription; + + constructor(public readonly recorder: AudioRecorderService) {} + + ngOnInit(): void { + this.subscriptions.push( + this.recorder.recordingState$.subscribe((s) => { + this.recordState = s; + if (this.recordState === MediaRecordingState.ERROR) { + this.voiceRecorderService?.isRecorderVisible$.next(false); + } + }) + ); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.voiceRecorderService && this.voiceRecorderService) { + this.isVisibleSubscription = + this.voiceRecorderService.isRecorderVisible$.subscribe((isVisible) => { + if (!isVisible) { + this.recording = undefined; + this.isLoading = false; + } + }); + } else { + this.isVisibleSubscription?.unsubscribe(); + } + } + + ngOnDestroy(): void { + this.subscriptions.forEach((s) => s.unsubscribe()); + } + + cancel() { + if (this.recording) { + this.recording = undefined; + } else { + void this.recorder.stop({ cancel: true }); + } + this.voiceRecorderService?.isRecorderVisible$.next(false); + } + + async stop() { + this.recording = await this.recorder.stop(); + } + + pause() { + this.recorder.pause(); + } + + resume() { + this.recorder.resume(); + } + + uploadRecording() { + if (!this.recording) { + return; + } + this.isLoading = true; + this.voiceRecorderService?.recording$.next(this.recording); + } +} diff --git a/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.module.ts b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.module.ts new file mode 100644 index 00000000..5ca07c91 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recorder/voice-recorder.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { VoiceRecorderComponent } from './voice-recorder.component'; +import { VoiceRecordingModule } from '../voice-recording/voice-recording.module'; +import { IconModule } from '../icon/icon.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { AudioRecorderService } from './audio-recorder.service'; +import { TranscoderService } from './transcoder.service'; +import { AmplitudeRecorderService } from './amplitude-recorder.service'; +import { VoiceRecorderWavebarComponent } from './voice-recorder-wavebar/voice-recorder-wavebar.component'; + +@NgModule({ + declarations: [VoiceRecorderComponent, VoiceRecorderWavebarComponent], + imports: [CommonModule, VoiceRecordingModule, IconModule, TranslateModule], + exports: [VoiceRecorderComponent, VoiceRecorderWavebarComponent], + providers: [ + AudioRecorderService, + TranscoderService, + AmplitudeRecorderService, + ], +}) +export class VoiceRecorderModule {} diff --git a/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts b/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts index 7d022d9b..e9b8f60c 100644 --- a/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts +++ b/projects/stream-chat-angular/src/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.ts @@ -10,6 +10,7 @@ import { SimpleChanges, ViewChild, } from '@angular/core'; +import { resampleWaveForm } from '../../wave-form-sampler'; /** * This component can be used to visualize the wave bar of a voice recording @@ -57,10 +58,10 @@ export class VoiceRecordingWavebarComponent ngOnChanges(changes: SimpleChanges): void { if (changes.waveFormData) { - this.resampledWaveFormData = - this.waveFormData.length > this.sampleSize - ? this.downsample() - : this.upsample(); + this.resampledWaveFormData = resampleWaveForm( + this.waveFormData, + this.sampleSize + ); } if (changes.audioElement) { this.ngZone.runOutsideAngular(() => { @@ -124,10 +125,10 @@ export class VoiceRecordingWavebarComponent ) { this.ngZone.run(() => { this.sampleSize = sampleSize; - this.resampledWaveFormData = - this.waveFormData.length > this.sampleSize - ? this.downsample() - : this.upsample(); + this.resampledWaveFormData = resampleWaveForm( + this.waveFormData, + this.sampleSize + ); if (this.isViewInited) { this.cdRef.detectChanges(); } @@ -135,132 +136,4 @@ export class VoiceRecordingWavebarComponent } } } - - private downsample() { - if (this.waveFormData.length <= this.sampleSize) { - return this.waveFormData; - } - - if (this.sampleSize === 1) return [this.mean(this.waveFormData)]; - - const result: number[] = []; - // bucket size adjusted due to the fact that the first and the last item in the original data array is kept in target output - const bucketSize = (this.waveFormData.length - 2) / (this.sampleSize - 2); - let lastSelectedPointIndex = 0; - result.push(this.waveFormData[lastSelectedPointIndex]); // Always add the first point - let maxAreaPoint, maxArea, triangleArea; - - for ( - let bucketIndex = 1; - bucketIndex < this.sampleSize - 1; - bucketIndex++ - ) { - const previousBucketRefPoint = this.waveFormData[lastSelectedPointIndex]; - const nextBucketMean = this.getNextBucketMean( - this.waveFormData, - bucketIndex, - bucketSize - ); - - const currentBucketStartIndex = - Math.floor((bucketIndex - 1) * bucketSize) + 1; - const nextBucketStartIndex = Math.floor(bucketIndex * bucketSize) + 1; - const countUnitsBetweenAtoC = - 1 + nextBucketStartIndex - currentBucketStartIndex; - - maxArea = triangleArea = -1; - - for ( - let currentPointIndex = currentBucketStartIndex; - currentPointIndex < nextBucketStartIndex; - currentPointIndex++ - ) { - const countUnitsBetweenAtoB = - Math.abs(currentPointIndex - currentBucketStartIndex) + 1; - const countUnitsBetweenBtoC = - countUnitsBetweenAtoC - countUnitsBetweenAtoB; - const currentPointValue = this.waveFormData[currentPointIndex]; - - triangleArea = this.triangleAreaHeron( - this.triangleBase( - Math.abs(previousBucketRefPoint - currentPointValue), - countUnitsBetweenAtoB - ), - this.triangleBase( - Math.abs(currentPointValue - nextBucketMean), - countUnitsBetweenBtoC - ), - this.triangleBase( - Math.abs(previousBucketRefPoint - nextBucketMean), - countUnitsBetweenAtoC - ) - ); - - if (triangleArea > maxArea) { - maxArea = triangleArea; - maxAreaPoint = this.waveFormData[currentPointIndex]; - lastSelectedPointIndex = currentPointIndex; - } - } - - if (typeof maxAreaPoint !== 'undefined') result.push(maxAreaPoint); - } - - result.push(this.waveFormData[this.waveFormData.length - 1]); // Always add the last point - - return result; - } - - private upsample = () => { - if (this.sampleSize === this.waveFormData.length) return this.waveFormData; - - // eslint-disable-next-line prefer-const - let [bucketSize, remainder] = this.divMod( - this.sampleSize, - this.waveFormData.length - ); - const result: number[] = []; - - for (let i = 0; i < this.waveFormData.length; i++) { - const extra = remainder && remainder-- ? 1 : 0; - result.push( - ...Array(bucketSize + extra).fill(this.waveFormData[i]) - ); - } - return result; - }; - - private getNextBucketMean = ( - data: number[], - currentBucketIndex: number, - bucketSize: number - ) => { - const nextBucketStartIndex = - Math.floor(currentBucketIndex * bucketSize) + 1; - let nextNextBucketStartIndex = - Math.floor((currentBucketIndex + 1) * bucketSize) + 1; - nextNextBucketStartIndex = - nextNextBucketStartIndex < data.length - ? nextNextBucketStartIndex - : data.length; - - return this.mean( - data.slice(nextBucketStartIndex, nextNextBucketStartIndex) - ); - }; - - private mean = (values: number[]) => - values.reduce((acc, value) => acc + value, 0) / values.length; - - private triangleAreaHeron = (a: number, b: number, c: number) => { - const s = (a + b + c) / 2; - return Math.sqrt(s * (s - a) * (s - b) * (s - c)); - }; - - private triangleBase = (a: number, b: number) => - Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)); - - private divMod = (num: number, divisor: number) => { - return [Math.floor(num / divisor), num % divisor]; - }; } diff --git a/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.component.ts b/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.component.ts index e571c0ae..d7e66205 100644 --- a/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.component.ts +++ b/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.component.ts @@ -12,6 +12,7 @@ import { import { Attachment } from 'stream-chat'; import { DefaultStreamChatGenerics } from '../types'; import prettybytes from 'pretty-bytes'; +import { formatDuration } from '../format-duration'; /** * This component can be used to display an attachment with type `voiceRecording`. The component allows playing the attachment inside the browser. @@ -95,18 +96,7 @@ export class VoiceRecordingComponent implements OnChanges, AfterViewInit { } private getFormattedDuration(duration?: number) { - if (duration === undefined || duration <= 0) return '00:00'; - - const [hours, hoursLeftover] = this.divMod(duration, 3600); - const [minutes, seconds] = this.divMod(hoursLeftover, 60); - const roundedSeconds = Math.ceil(seconds); - - const prependHrsZero = hours.toString().length === 1 ? '0' : ''; - const prependMinZero = minutes.toString().length === 1 ? '0' : ''; - const prependSecZero = roundedSeconds.toString().length === 1 ? '0' : ''; - const minSec = `${prependMinZero}${minutes}:${prependSecZero}${roundedSeconds}`; - - return hours ? `${prependHrsZero}${hours}:` + minSec : minSec; + return formatDuration(duration); } private getFileSize() { @@ -118,8 +108,4 @@ export class VoiceRecordingComponent implements OnChanges, AfterViewInit { } return prettybytes(Number(this.attachment.file_size || 0)); } - - private divMod(num: number, divisor: number) { - return [Math.floor(num / divisor), num % divisor]; - } } diff --git a/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.module.ts b/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.module.ts new file mode 100644 index 00000000..dca95b42 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/voice-recording/voice-recording.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { VoiceRecordingComponent } from './voice-recording.component'; +import { VoiceRecordingWavebarComponent } from './voice-recording-wavebar/voice-recording-wavebar.component'; +import { IconModule } from '../icon/icon.module'; +import { TranslateModule } from '@ngx-translate/core'; + +@NgModule({ + declarations: [VoiceRecordingComponent, VoiceRecordingWavebarComponent], + imports: [CommonModule, IconModule, TranslateModule], + exports: [VoiceRecordingComponent, VoiceRecordingWavebarComponent], +}) +export class VoiceRecordingModule {} diff --git a/projects/stream-chat-angular/src/lib/wave-form-sampler.ts b/projects/stream-chat-angular/src/lib/wave-form-sampler.ts new file mode 100644 index 00000000..a8035f37 --- /dev/null +++ b/projects/stream-chat-angular/src/lib/wave-form-sampler.ts @@ -0,0 +1,124 @@ +export const resampleWaveForm = ( + waveFormData: number[], + sampleSize: number +) => { + return waveFormData.length > sampleSize + ? downsample(waveFormData, sampleSize) + : upsample(waveFormData, sampleSize); +}; + +const downsample = (waveFormData: number[], sampleSize: number) => { + if (waveFormData.length <= sampleSize) { + return waveFormData; + } + + if (sampleSize === 1) return [mean(waveFormData)]; + + const result: number[] = []; + // bucket size adjusted due to the fact that the first and the last item in the original data array is kept in target output + const bucketSize = (waveFormData.length - 2) / (sampleSize - 2); + let lastSelectedPointIndex = 0; + result.push(waveFormData[lastSelectedPointIndex]); // Always add the first point + let maxAreaPoint, maxArea, triangleArea; + + for (let bucketIndex = 1; bucketIndex < sampleSize - 1; bucketIndex++) { + const previousBucketRefPoint = waveFormData[lastSelectedPointIndex]; + const nextBucketMean = getNextBucketMean( + waveFormData, + bucketIndex, + bucketSize + ); + + const currentBucketStartIndex = + Math.floor((bucketIndex - 1) * bucketSize) + 1; + const nextBucketStartIndex = Math.floor(bucketIndex * bucketSize) + 1; + const countUnitsBetweenAtoC = + 1 + nextBucketStartIndex - currentBucketStartIndex; + + maxArea = triangleArea = -1; + + for ( + let currentPointIndex = currentBucketStartIndex; + currentPointIndex < nextBucketStartIndex; + currentPointIndex++ + ) { + const countUnitsBetweenAtoB = + Math.abs(currentPointIndex - currentBucketStartIndex) + 1; + const countUnitsBetweenBtoC = + countUnitsBetweenAtoC - countUnitsBetweenAtoB; + const currentPointValue = waveFormData[currentPointIndex]; + + triangleArea = triangleAreaHeron( + triangleBase( + Math.abs(previousBucketRefPoint - currentPointValue), + countUnitsBetweenAtoB + ), + triangleBase( + Math.abs(currentPointValue - nextBucketMean), + countUnitsBetweenBtoC + ), + triangleBase( + Math.abs(previousBucketRefPoint - nextBucketMean), + countUnitsBetweenAtoC + ) + ); + + if (triangleArea > maxArea) { + maxArea = triangleArea; + maxAreaPoint = waveFormData[currentPointIndex]; + lastSelectedPointIndex = currentPointIndex; + } + } + + if (typeof maxAreaPoint !== 'undefined') result.push(maxAreaPoint); + } + + result.push(waveFormData[waveFormData.length - 1]); // Always add the last point + + return result; +}; + +const upsample = (waveFormData: number[], sampleSize: number) => { + if (sampleSize === waveFormData.length) return waveFormData; + + // eslint-disable-next-line prefer-const + let [bucketSize, remainder] = divMod(sampleSize, waveFormData.length); + const result: number[] = []; + + for (let i = 0; i < waveFormData.length; i++) { + const extra = remainder && remainder-- ? 1 : 0; + result.push(...Array(bucketSize + extra).fill(waveFormData[i])); + } + return result; +}; + +const getNextBucketMean = ( + data: number[], + currentBucketIndex: number, + bucketSize: number +) => { + const nextBucketStartIndex = Math.floor(currentBucketIndex * bucketSize) + 1; + let nextNextBucketStartIndex = + Math.floor((currentBucketIndex + 1) * bucketSize) + 1; + nextNextBucketStartIndex = + nextNextBucketStartIndex < data.length + ? nextNextBucketStartIndex + : data.length; + + return mean(data.slice(nextBucketStartIndex, nextNextBucketStartIndex)); +}; + +const mean = (values: number[]) => + values.reduce((acc, value) => acc + value, 0) / values.length; + +const triangleAreaHeron = (a: number, b: number, c: number) => { + const s = (a + b + c) / 2; + return Math.sqrt(s * (s - a) * (s - b) * (s - c)); +}; + +const triangleBase = (a: number, b: number) => + Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2)); + +const divMod = (num: number, divisor: number) => { + return [Math.floor(num / divisor), num % divisor]; +}; diff --git a/projects/stream-chat-angular/src/public-api.ts b/projects/stream-chat-angular/src/public-api.ts index 5bc3c5b7..52033c53 100644 --- a/projects/stream-chat-angular/src/public-api.ts +++ b/projects/stream-chat-angular/src/public-api.ts @@ -11,9 +11,9 @@ export * from './lib/stream-i18n.service'; export * from './lib/avatar/avatar.component'; export * from './lib/avatar-placeholder/avatar-placeholder.component'; export * from './lib/icon/icon.component'; -export * from './lib/icon-placeholder/icon-placeholder.component'; -export * from './lib/loading-indicator/loading-indicator.component'; -export * from './lib/loading-indicator-placeholder/loading-indicator-placeholder.component'; +export * from './lib/icon/icon-placeholder/icon-placeholder.component'; +export * from './lib/icon/loading-indicator/loading-indicator.component'; +export * from './lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component'; export * from './lib/message-actions-box/message-actions-box.component'; export * from './lib/channel/channel.component'; export * from './lib/channel-header/channel-header.component'; @@ -43,7 +43,7 @@ export * from './lib/read-by'; export * from './lib/get-message-translation'; export * from './lib/get-channel-display-text'; export * from './lib/is-image-attachment'; -export * from './lib/is-image-file'; +export * from './lib/file-utils'; export * from './lib/message-preview'; export * from './lib/notification.service'; export * from './lib/transliteration.service'; @@ -67,3 +67,16 @@ export * from './lib/virtualized-list.service'; export * from './lib/virtualized-message-list.service'; export * from './lib/user-list/user-list.component'; export * from './lib/paginated-list/paginated-list.component'; +export * from './lib/is-safari'; +export * from './lib/voice-recorder/voice-recorder.module'; +export * from './lib/voice-recorder/amplitude-recorder.service'; +export * from './lib/voice-recorder/audio-recorder.service'; +export * from './lib/voice-recorder/media-recorder'; +export * from './lib/voice-recorder/transcoder.service'; +export * from './lib/voice-recorder/voice-recorder.component'; +export * from './lib/voice-recording/voice-recording.module'; +export * from './lib/icon/icon.module'; +export * from './lib/voice-recorder//voice-recorder-wavebar/voice-recorder-wavebar.component'; +export * from './lib/format-duration'; +export * from './lib/message-input/voice-recorder.service'; +export * from './lib/voice-recorder/mp3-transcoder';