react-native-chatbot-ai 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/lib/module/components/chat/ChatEmpty.js +6 -1
  2. package/lib/module/components/chat/ChatEmpty.js.map +1 -1
  3. package/lib/module/components/chat/ChatMessageList.js +33 -6
  4. package/lib/module/components/chat/ChatMessageList.js.map +1 -1
  5. package/lib/module/components/chat/item/ChatAIAnswerMessageItem.js +28 -7
  6. package/lib/module/components/chat/item/ChatAIAnswerMessageItem.js.map +1 -1
  7. package/lib/module/components/chat/item/ChatAIThinkingMessageItem.js +18 -7
  8. package/lib/module/components/chat/item/ChatAIThinkingMessageItem.js.map +1 -1
  9. package/lib/module/constants/events.js +2 -1
  10. package/lib/module/constants/events.js.map +1 -1
  11. package/lib/typescript/src/assets/icons/index.d.ts.map +1 -1
  12. package/lib/typescript/src/components/chat/ChatEmpty.d.ts.map +1 -1
  13. package/lib/typescript/src/components/chat/ChatMessageList.d.ts.map +1 -1
  14. package/lib/typescript/src/components/chat/item/ChatAIAnswerMessageItem.d.ts.map +1 -1
  15. package/lib/typescript/src/components/chat/item/ChatAIThinkingMessageItem.d.ts.map +1 -1
  16. package/lib/typescript/src/constants/events.d.ts +1 -0
  17. package/lib/typescript/src/constants/events.d.ts.map +1 -1
  18. package/package.json +4 -4
  19. package/src/assets/icons/index.ts +1 -1
  20. package/src/components/chat/ChatEmpty.tsx +5 -2
  21. package/src/components/chat/ChatMessageList.tsx +42 -5
  22. package/src/components/chat/item/ChatAIAnswerMessageItem.tsx +47 -29
  23. package/src/components/chat/item/ChatAIThinkingMessageItem.tsx +37 -31
  24. package/src/constants/events.ts +1 -0
@@ -19,6 +19,11 @@ const ChatEmpty = () => {
19
19
  }, 200);
20
20
  return /*#__PURE__*/_jsxs(KContainer.ScrollView, {
21
21
  contentContainerStyle: styles.container,
22
+ style: {
23
+ transform: [{
24
+ scaleY: -1
25
+ }]
26
+ },
22
27
  children: [/*#__PURE__*/_jsx(KLabel.Text, {
23
28
  typo: "TextXLgMedium",
24
29
  center: true,
@@ -34,7 +39,7 @@ const ChatEmpty = () => {
34
39
  typo: "TextMdNormal",
35
40
  center: true,
36
41
  color: KColors.gray.normal,
37
- children: 'Xem qua những gợi ý dành cho bạn:'
42
+ children: 'Những gợi ý dành cho bạn:'
38
43
  })]
39
44
  }), data?.suggestions?.map(item => /*#__PURE__*/_jsx(SuggestionItem, {
40
45
  item: item,
@@ -1 +1 @@
1
- {"version":3,"names":["KColors","KContainer","KLabel","KSpacingValue","StyleSheet","useFetchSuggestions","SuggestionItem","useSendMessage","debounce","jsx","_jsx","jsxs","_jsxs","ChatEmpty","data","onSendMessage","onPress","item","content","ScrollView","contentContainerStyle","styles","container","children","Text","typo","center","View","color","gray","normal","suggestions","map","onPressItem","suggestion_id","light","textAlign","create","flexGrow","justifyContent","alignItems","padding","gap"],"sourceRoot":"../../../../src","sources":["components/chat/ChatEmpty.tsx"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,UAAU,EAAEC,MAAM,EAAEC,aAAa,QAAQ,eAAe;AAC1E,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,mBAAmB,QAAQ,gDAA6C;AACjF,OAAOC,cAAc,MAAM,qBAAkB;AAC7C,SAASC,cAAc,QAAQ,uCAAoC;AACnE,OAAOC,QAAQ,MAAM,iBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGvC,MAAMC,SAAS,GAAGA,CAAA,KAAM;EACtB,MAAM;IAAEC;EAAK,CAAC,GAAGT,mBAAmB,CAAC,CAAC;EACtC,MAAM;IAAEU;EAAc,CAAC,GAAGR,cAAc,CAAC,CAAC;EAE1C,MAAMS,OAAO,GAAGR,QAAQ,CAAES,IAAqB,IAAK;IAClDF,aAAa,CAACE,IAAI,CAACC,OAAO,CAAC;EAC7B,CAAC,EAAE,GAAG,CAAC;EAEP,oBACEN,KAAA,CAACX,UAAU,CAACkB,UAAU;IAACC,qBAAqB,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,gBAC7Db,IAAA,CAACR,MAAM,CAACsB,IAAI;MAACC,IAAI,EAAC,eAAe;MAACC,MAAM;MAAAH,QAAA,EACrC;IAA4B,CAClB,CAAC,eACdX,KAAA,CAACX,UAAU,CAAC0B,IAAI;MAACD,MAAM;MAAAH,QAAA,gBACrBb,IAAA,CAACR,MAAM,CAACsB,IAAI;QAACC,IAAI,EAAC,cAAc;QAACC,MAAM;QAACE,KAAK,EAAE5B,OAAO,CAAC6B,IAAI,CAACC,MAAO;QAAAP,QAAA,EAChE;MAA8C,CACpC,CAAC,eACdb,IAAA,CAACR,MAAM,CAACsB,IAAI;QAACC,IAAI,EAAC,cAAc;QAACC,MAAM;QAACE,KAAK,EAAE5B,OAAO,CAAC6B,IAAI,CAACC,MAAO;QAAAP,QAAA,EAChE;MAAmC,CACzB,CAAC;IAAA,CACC,CAAC,EACjBT,IAAI,EAAEiB,WAAW,EAAEC,GAAG,CAAEf,IAAqB,iBAC5CP,IAAA,CAACJ,cAAc;MAEbW,IAAI,EAAEA,IAAK;MACXgB,WAAW,EAAEjB;IAAQ,GAFhBC,IAAI,CAACiB,aAGX,CACF,CAAC,eACFxB,IAAA,CAACR,MAAM,CAACsB,IAAI;MACVC,IAAI,EAAC,cAAc;MACnBG,KAAK,EAAE5B,OAAO,CAAC6B,IAAI,CAACM,KAAM;MAC1BC,SAAS,EAAC,QAAQ;MAAAb,QAAA,EAGhB;IAAgG,CAEvF,CAAC;EAAA,CACO,CAAC;AAE5B,CAAC;AAED,eAAeV,SAAS;AAExB,MAAMQ,MAAM,GAAGjB,UAAU,CAACiC,MAAM,CAAC;EAC/Bf,SAAS,EAAE;IACTgB,QAAQ,EAAE,CAAC;IACXC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,OAAO,EAAEtC,aAAa,CAAC,SAAS,CAAC;IACjCuC,GAAG,EAAEvC,aAAa,CAAC,QAAQ;EAC7B;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["KColors","KContainer","KLabel","KSpacingValue","StyleSheet","useFetchSuggestions","SuggestionItem","useSendMessage","debounce","jsx","_jsx","jsxs","_jsxs","ChatEmpty","data","onSendMessage","onPress","item","content","ScrollView","contentContainerStyle","styles","container","style","transform","scaleY","children","Text","typo","center","View","color","gray","normal","suggestions","map","onPressItem","suggestion_id","light","textAlign","create","flexGrow","justifyContent","alignItems","padding","gap"],"sourceRoot":"../../../../src","sources":["components/chat/ChatEmpty.tsx"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,UAAU,EAAEC,MAAM,EAAEC,aAAa,QAAQ,eAAe;AAC1E,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,mBAAmB,QAAQ,gDAA6C;AACjF,OAAOC,cAAc,MAAM,qBAAkB;AAC7C,SAASC,cAAc,QAAQ,uCAAoC;AACnE,OAAOC,QAAQ,MAAM,iBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGvC,MAAMC,SAAS,GAAGA,CAAA,KAAM;EACtB,MAAM;IAAEC;EAAK,CAAC,GAAGT,mBAAmB,CAAC,CAAC;EACtC,MAAM;IAAEU;EAAc,CAAC,GAAGR,cAAc,CAAC,CAAC;EAE1C,MAAMS,OAAO,GAAGR,QAAQ,CAAES,IAAqB,IAAK;IAClDF,aAAa,CAACE,IAAI,CAACC,OAAO,CAAC;EAC7B,CAAC,EAAE,GAAG,CAAC;EAEP,oBACEN,KAAA,CAACX,UAAU,CAACkB,UAAU;IACpBC,qBAAqB,EAAEC,MAAM,CAACC,SAAU;IACxCC,KAAK,EAAE;MAAEC,SAAS,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;MAAE,CAAC;IAAE,CAAE;IAAAC,QAAA,gBAEvChB,IAAA,CAACR,MAAM,CAACyB,IAAI;MAACC,IAAI,EAAC,eAAe;MAACC,MAAM;MAAAH,QAAA,EACrC;IAA4B,CAClB,CAAC,eACdd,KAAA,CAACX,UAAU,CAAC6B,IAAI;MAACD,MAAM;MAAAH,QAAA,gBACrBhB,IAAA,CAACR,MAAM,CAACyB,IAAI;QAACC,IAAI,EAAC,cAAc;QAACC,MAAM;QAACE,KAAK,EAAE/B,OAAO,CAACgC,IAAI,CAACC,MAAO;QAAAP,QAAA,EAChE;MAA8C,CACpC,CAAC,eACdhB,IAAA,CAACR,MAAM,CAACyB,IAAI;QAACC,IAAI,EAAC,cAAc;QAACC,MAAM;QAACE,KAAK,EAAE/B,OAAO,CAACgC,IAAI,CAACC,MAAO;QAAAP,QAAA,EAChE;MAA2B,CACjB,CAAC;IAAA,CACC,CAAC,EACjBZ,IAAI,EAAEoB,WAAW,EAAEC,GAAG,CAAElB,IAAqB,iBAC5CP,IAAA,CAACJ,cAAc;MAEbW,IAAI,EAAEA,IAAK;MACXmB,WAAW,EAAEpB;IAAQ,GAFhBC,IAAI,CAACoB,aAGX,CACF,CAAC,eACF3B,IAAA,CAACR,MAAM,CAACyB,IAAI;MACVC,IAAI,EAAC,cAAc;MACnBG,KAAK,EAAE/B,OAAO,CAACgC,IAAI,CAACM,KAAM;MAC1BC,SAAS,EAAC,QAAQ;MAAAb,QAAA,EAGhB;IAAgG,CAEvF,CAAC;EAAA,CACO,CAAC;AAE5B,CAAC;AAED,eAAeb,SAAS;AAExB,MAAMQ,MAAM,GAAGjB,UAAU,CAACoC,MAAM,CAAC;EAC/BlB,SAAS,EAAE;IACTmB,QAAQ,EAAE,CAAC;IACXC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,OAAO,EAAEzC,aAAa,CAAC,SAAS,CAAC;IACjC0C,GAAG,EAAE1C,aAAa,CAAC,QAAQ;EAC7B;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,19 +1,43 @@
1
1
  "use strict";
2
2
 
3
- import { FlatList, StyleSheet } from 'react-native';
3
+ import { FlatList, StyleSheet, DeviceEventEmitter } from 'react-native';
4
4
  import ChatEmpty from "./ChatEmpty.js";
5
5
  import { useMessage } from "../../hooks/message/useMessage.js";
6
6
  import ChatItem from "./item/index.js";
7
7
  import { KSpacingValue } from '@droppii/libs';
8
+ import { useCallback, useRef } from 'react';
9
+ import { useEffect } from 'react';
10
+ import { events } from "../../constants/events.js";
8
11
  import { jsx as _jsx } from "react/jsx-runtime";
9
12
  const ChatMessageList = () => {
10
13
  const {
11
14
  messageState
12
15
  } = useMessage();
13
- if (!messageState?.messages?.length) {
14
- return /*#__PURE__*/_jsx(ChatEmpty, {});
15
- }
16
+ const flatListRef = useRef(null);
17
+ const scrollOffsetRef = useRef(0);
18
+ const onScroll = useCallback(event => {
19
+ scrollOffsetRef.current = event?.nativeEvent?.contentOffset?.y;
20
+ }, []);
21
+ useEffect(() => {
22
+ const subExpandThinkingStep = DeviceEventEmitter.addListener(events.expandThinkingStep, isExpand => {
23
+ try {
24
+ const scrollToOffset = flatListRef.current?.scrollToOffset({
25
+ offset: scrollOffsetRef.current + (isExpand ? 60 : -60),
26
+ animated: true
27
+ });
28
+ setTimeout(() => {
29
+ scrollToOffset?.();
30
+ }, 100);
31
+ } catch (error) {
32
+ console.error(error);
33
+ }
34
+ });
35
+ return () => {
36
+ subExpandThinkingStep.remove();
37
+ };
38
+ }, []);
16
39
  return /*#__PURE__*/_jsx(FlatList, {
40
+ ref: flatListRef,
17
41
  data: messageState?.messages || [],
18
42
  renderItem: ({
19
43
  item,
@@ -24,7 +48,9 @@ const ChatMessageList = () => {
24
48
  }),
25
49
  keyExtractor: item => item.id,
26
50
  contentContainerStyle: styles.container,
27
- inverted: true
51
+ inverted: true,
52
+ ListEmptyComponent: /*#__PURE__*/_jsx(ChatEmpty, {}),
53
+ onScroll: onScroll
28
54
  });
29
55
  };
30
56
  export default ChatMessageList;
@@ -32,7 +58,8 @@ const styles = StyleSheet.create({
32
58
  container: {
33
59
  flexGrow: 1,
34
60
  gap: KSpacingValue['0.5rem'],
35
- paddingVertical: KSpacingValue['1rem']
61
+ paddingVertical: KSpacingValue['1rem'],
62
+ justifyContent: 'flex-end'
36
63
  }
37
64
  });
38
65
  //# sourceMappingURL=ChatMessageList.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["FlatList","StyleSheet","ChatEmpty","useMessage","ChatItem","KSpacingValue","jsx","_jsx","ChatMessageList","messageState","messages","length","data","renderItem","item","index","keyExtractor","id","contentContainerStyle","styles","container","inverted","create","flexGrow","gap","paddingVertical"],"sourceRoot":"../../../../src","sources":["components/chat/ChatMessageList.tsx"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,UAAU,QAAQ,cAAc;AACnD,OAAOC,SAAS,MAAM,gBAAa;AACnC,SAASC,UAAU,QAAQ,mCAAgC;AAC3D,OAAOC,QAAQ,MAAM,iBAAQ;AAC7B,SAASC,aAAa,QAAQ,eAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG9C,MAAMC,eAAe,GAAGA,CAAA,KAAM;EAC5B,MAAM;IAAEC;EAAa,CAAC,GAAGN,UAAU,CAAC,CAAC;EAErC,IAAI,CAACM,YAAY,EAAEC,QAAQ,EAAEC,MAAM,EAAE;IACnC,oBAAOJ,IAAA,CAACL,SAAS,IAAE,CAAC;EACtB;EACA,oBACEK,IAAA,CAACP,QAAQ;IACPY,IAAI,EAAEH,YAAY,EAAEC,QAAQ,IAAI,EAAG;IACnCG,UAAU,EAAEA,CAAC;MAAEC,IAAI;MAAEC;IAA6C,CAAC,kBACjER,IAAA,CAACH,QAAQ;MAACU,IAAI,EAAEA,IAAK;MAACC,KAAK,EAAEA;IAAM,CAAE,CACrC;IACFC,YAAY,EAAGF,IAAkB,IAAKA,IAAI,CAACG,EAAG;IAC9CC,qBAAqB,EAAEC,MAAM,CAACC,SAAU;IACxCC,QAAQ;EAAA,CACT,CAAC;AAEN,CAAC;AAED,eAAeb,eAAe;AAE9B,MAAMW,MAAM,GAAGlB,UAAU,CAACqB,MAAM,CAAC;EAC/BF,SAAS,EAAE;IACTG,QAAQ,EAAE,CAAC;IACXC,GAAG,EAAEnB,aAAa,CAAC,QAAQ,CAAC;IAC5BoB,eAAe,EAAEpB,aAAa,CAAC,MAAM;EACvC;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["FlatList","StyleSheet","DeviceEventEmitter","ChatEmpty","useMessage","ChatItem","KSpacingValue","useCallback","useRef","useEffect","events","jsx","_jsx","ChatMessageList","messageState","flatListRef","scrollOffsetRef","onScroll","event","current","nativeEvent","contentOffset","y","subExpandThinkingStep","addListener","expandThinkingStep","isExpand","scrollToOffset","offset","animated","setTimeout","error","console","remove","ref","data","messages","renderItem","item","index","keyExtractor","id","contentContainerStyle","styles","container","inverted","ListEmptyComponent","create","flexGrow","gap","paddingVertical","justifyContent"],"sourceRoot":"../../../../src","sources":["components/chat/ChatMessageList.tsx"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,UAAU,EAAEC,kBAAkB,QAAQ,cAAc;AACvE,OAAOC,SAAS,MAAM,gBAAa;AACnC,SAASC,UAAU,QAAQ,mCAAgC;AAC3D,OAAOC,QAAQ,MAAM,iBAAQ;AAC7B,SAASC,aAAa,QAAQ,eAAe;AAE7C,SAASC,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAC3C,SAASC,SAAS,QAAQ,OAAO;AACjC,SAASC,MAAM,QAAQ,2BAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhD,MAAMC,eAAe,GAAGA,CAAA,KAAM;EAC5B,MAAM;IAAEC;EAAa,CAAC,GAAGV,UAAU,CAAC,CAAC;EAErC,MAAMW,WAAW,GAAGP,MAAM,CAAM,IAAI,CAAC;EACrC,MAAMQ,eAAe,GAAGR,MAAM,CAAC,CAAC,CAAC;EAEjC,MAAMS,QAAQ,GAAGV,WAAW,CACzBW,KAAU,IAAK;IACdF,eAAe,CAACG,OAAO,GAAGD,KAAK,EAAEE,WAAW,EAAEC,aAAa,EAAEC,CAAC;EAChE,CAAC,EACD,EACF,CAAC;EAEDb,SAAS,CAAC,MAAM;IACd,MAAMc,qBAAqB,GAAGrB,kBAAkB,CAACsB,WAAW,CAC1Dd,MAAM,CAACe,kBAAkB,EACxBC,QAAiB,IAAK;MACrB,IAAI;QACF,MAAMC,cAAc,GAAGZ,WAAW,CAACI,OAAO,EAAEQ,cAAc,CAAC;UACzDC,MAAM,EAAEZ,eAAe,CAACG,OAAO,IAAIO,QAAQ,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;UACvDG,QAAQ,EAAE;QACZ,CAAC,CAAC;QACFC,UAAU,CAAC,MAAM;UACfH,cAAc,GAAG,CAAC;QACpB,CAAC,EAAE,GAAG,CAAC;MACT,CAAC,CAAC,OAAOI,KAAK,EAAE;QACdC,OAAO,CAACD,KAAK,CAACA,KAAK,CAAC;MACtB;IACF,CACF,CAAC;IAED,OAAO,MAAM;MACXR,qBAAqB,CAACU,MAAM,CAAC,CAAC;IAChC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,oBACErB,IAAA,CAACZ,QAAQ;IACPkC,GAAG,EAAEnB,WAAY;IACjBoB,IAAI,EAAErB,YAAY,EAAEsB,QAAQ,IAAI,EAAG;IACnCC,UAAU,EAAEA,CAAC;MAAEC,IAAI;MAAEC;IAA6C,CAAC,kBACjE3B,IAAA,CAACP,QAAQ;MAACiC,IAAI,EAAEA,IAAK;MAACC,KAAK,EAAEA;IAAM,CAAE,CACrC;IACFC,YAAY,EAAGF,IAAkB,IAAKA,IAAI,CAACG,EAAG;IAC9CC,qBAAqB,EAAEC,MAAM,CAACC,SAAU;IACxCC,QAAQ;IACRC,kBAAkB,eAAElC,IAAA,CAACT,SAAS,IAAE,CAAE;IAClCc,QAAQ,EAAEA;EAAS,CACpB,CAAC;AAEN,CAAC;AAED,eAAeJ,eAAe;AAE9B,MAAM8B,MAAM,GAAG1C,UAAU,CAAC8C,MAAM,CAAC;EAC/BH,SAAS,EAAE;IACTI,QAAQ,EAAE,CAAC;IACXC,GAAG,EAAE3C,aAAa,CAAC,QAAQ,CAAC;IAC5B4C,eAAe,EAAE5C,aAAa,CAAC,MAAM,CAAC;IACtC6C,cAAc,EAAE;EAClB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -4,7 +4,7 @@ import { KColors, KContainer, KLabel, KSpacingValue } from '@droppii/libs';
4
4
  import { StyleSheet } from 'react-native';
5
5
  import useStreamMessageStore from "../../../store/streamMessage.js";
6
6
  import { useEffect, useRef, useState } from 'react';
7
- import Markdown, { Renderer, MarkedTokenizer } from "react-native-marked";
7
+ import Markdown, { Renderer, MarkedTokenizer } from 'react-native-marked';
8
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  class CustomTokenizer extends MarkedTokenizer {}
10
10
  class CustomRenderer extends Renderer {
@@ -15,13 +15,14 @@ class CustomRenderer extends Renderer {
15
15
  const match = /^<!--\s*@component:product\(id:([\w-]+)\)\s*-->/.exec(text);
16
16
  return /*#__PURE__*/_jsx(KLabel.Text, {
17
17
  typo: "TextMdNormal",
18
- children: match?.[1] || ""
18
+ children: match?.[1] || ''
19
19
  }, this.getKey());
20
20
  }
21
- paragraph(children) {
21
+ paragraph(children, style) {
22
22
  return /*#__PURE__*/_jsx(KContainer.View, {
23
23
  background: KColors.white,
24
24
  paddingV: 0,
25
+ style: style,
25
26
  children: children
26
27
  }, this.getKey());
27
28
  }
@@ -46,11 +47,24 @@ class CustomRenderer extends Renderer {
46
47
  }
47
48
  const tokenizer = new CustomTokenizer();
48
49
  const renderer = new CustomRenderer();
50
+ const markedStyles = {
51
+ paragraph: {
52
+ marginVertical: 5
53
+ },
54
+ blockquote: {
55
+ marginVertical: 5
56
+ },
57
+ li: {
58
+ marginVertical: 5,
59
+ justifyContent: 'center'
60
+ }
61
+ };
49
62
  const ChatAIAnswerMessageItem = ({
50
63
  item,
51
64
  isLast = false
52
65
  }) => {
53
66
  const streamMessage = useStreamMessageStore(state => state.streamMessage?.[item.id]);
67
+ const isStreaming = useStreamMessageStore(state => state.isStreaming);
54
68
  const [display, setDisplay] = useState('');
55
69
  const indexRef = useRef(0);
56
70
  useEffect(() => {
@@ -65,11 +79,11 @@ const ChatAIAnswerMessageItem = ({
65
79
  clearInterval(interval);
66
80
  return;
67
81
  }
68
- const chunkSize = 100;
82
+ const chunkSize = 50;
69
83
  const chunk = remaining.slice(0, chunkSize);
70
84
  setDisplay(prev => prev + chunk);
71
85
  indexRef.current += chunk.length;
72
- }, 100);
86
+ }, 50);
73
87
  return () => clearInterval(interval);
74
88
  }, [streamMessage, item]);
75
89
  return /*#__PURE__*/_jsxs(KContainer.View, {
@@ -77,9 +91,13 @@ const ChatAIAnswerMessageItem = ({
77
91
  children: [/*#__PURE__*/_jsx(Markdown, {
78
92
  renderer: renderer,
79
93
  value: display,
80
- tokenizer: tokenizer
94
+ tokenizer: tokenizer,
95
+ styles: markedStyles,
96
+ flatListProps: {
97
+ style: styles.flatList
98
+ }
81
99
  }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
82
- visible: isLast && !streamMessage,
100
+ visible: isLast && !isStreaming,
83
101
  children: /*#__PURE__*/_jsx(KLabel.Text, {
84
102
  typo: "TextSmNormal",
85
103
  color: KColors.gray.light,
@@ -94,6 +112,9 @@ const styles = StyleSheet.create({
94
112
  container: {
95
113
  paddingHorizontal: KSpacingValue['1rem'],
96
114
  gap: KSpacingValue['0.5rem']
115
+ },
116
+ flatList: {
117
+ backgroundColor: KColors.transparent
97
118
  }
98
119
  });
99
120
  //# sourceMappingURL=ChatAIAnswerMessageItem.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["KColors","KContainer","KLabel","KSpacingValue","StyleSheet","useStreamMessageStore","useEffect","useRef","useState","Markdown","Renderer","MarkedTokenizer","jsx","_jsx","jsxs","_jsxs","CustomTokenizer","CustomRenderer","constructor","html","text","match","exec","Text","typo","children","getKey","paragraph","View","background","white","paddingV","codespan","strong","tokenizer","renderer","ChatAIAnswerMessageItem","item","isLast","streamMessage","state","id","display","setDisplay","indexRef","current","content","interval","setInterval","remaining","slice","length","clearInterval","chunkSize","chunk","prev","style","styles","container","value","VisibleView","visible","color","gray","light","textAlign","create","paddingHorizontal","gap"],"sourceRoot":"../../../../../src","sources":["components/chat/item/ChatAIAnswerMessageItem.tsx"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,UAAU,EAAEC,MAAM,EAAEC,aAAa,QAAQ,eAAe;AAE1E,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,qBAAqB,MAAM,iCAA8B;AAChE,SAAoBC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC9D,OAAOC,QAAQ,IAAIC,QAAQ,EAAqBC,eAAe,QAAQ,qBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAO7F,MAAMC,eAAe,SAASL,eAAe,CAAC;AAG9C,MAAMM,cAAc,SAASP,QAAQ,CAA8B;EACjEQ,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;EACT;EAEAC,IAAIA,CAACC,IAAY,EAAa;IAC5B,MAAMC,KAAK,GAAG,iDAAiD,CAACC,IAAI,CAACF,IAAI,CAAC;IAC1E,oBACEP,IAAA,CAACX,MAAM,CAACqB,IAAI;MAEVC,IAAI,EAAC,cAAc;MAAAC,QAAA,EAElBJ,KAAK,GAAG,CAAC,CAAC,IAAI;IAAE,GAHZ,IAAI,CAACK,MAAM,CAAC,CAIN,CAAC;EAElB;EAEAC,SAASA,CAACF,QAAqB,EAAa;IAC1C,oBACEZ,IAAA,CAACZ,UAAU,CAAC2B,IAAI;MAEdC,UAAU,EAAE7B,OAAO,CAAC8B,KAAM;MAC1BC,QAAQ,EAAE,CAAE;MAAAN,QAAA,EAEXA;IAAQ,GAJJ,IAAI,CAACC,MAAM,CAAC,CAKF,CAAC;EAEtB;EAEAN,IAAIA,CAACA,IAA0B,EAAa;IAC1C,oBACEP,IAAA,CAACX,MAAM,CAACqB,IAAI;MAEVC,IAAI,EAAC,cAAc;MAAAC,QAAA,EAElBL;IAAI,GAHA,IAAI,CAACM,MAAM,CAAC,CAIN,CAAC;EAElB;EAEAM,QAAQA,CAACZ,IAAY,EAAa;IAChC,oBACEP,IAAA,CAACX,MAAM,CAACqB,IAAI;MAEVC,IAAI,EAAC,cAAc;MAAAC,QAAA,EAElBL;IAAI,GAHA,IAAI,CAACM,MAAM,CAAC,CAIN,CAAC;EAElB;EAEAO,MAAMA,CAACR,QAA8B,EAAa;IAChD,oBACEZ,IAAA,CAACX,MAAM,CAACqB,IAAI;MAEVC,IAAI,EAAC,YAAY;MAAAC,QAAA,EAEhBA;IAAQ,GAHJ,IAAI,CAACC,MAAM,CAAC,CAIN,CAAC;EAElB;AACF;AAEA,MAAMQ,SAAS,GAAG,IAAIlB,eAAe,CAAC,CAAC;AACvC,MAAMmB,QAAQ,GAAG,IAAIlB,cAAc,CAAC,CAAC;AAErC,MAAMmB,uBAAuB,GAAGA,CAAC;EAC/BC,IAAI;EACJC,MAAM,GAAG;AACmB,CAAC,KAAK;EAClC,MAAMC,aAAa,GAAGlC,qBAAqB,CACxCmC,KAAK,IAAKA,KAAK,CAACD,aAAa,GAAGF,IAAI,CAACI,EAAE,CAC1C,CAAC;EAED,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGnC,QAAQ,CAAC,EAAE,CAAC;EAC1C,MAAMoC,QAAQ,GAAGrC,MAAM,CAAC,CAAC,CAAC;EAE1BD,SAAS,CAAC,MAAM;IACd,IAAI,CAACiC,aAAa,EAAE;MAClBK,QAAQ,CAACC,OAAO,GAAG,CAAC;MACpBF,UAAU,CAACN,IAAI,CAACS,OAAO,CAAC;MACxB;IACF;IAEA,MAAMC,QAAQ,GAAGC,WAAW,CAAC,MAAM;MACjC,MAAMC,SAAS,GAAGV,aAAa,CAACO,OAAO,CAACI,KAAK,CAACN,QAAQ,CAACC,OAAO,CAAC;MAC/D,IAAII,SAAS,CAACE,MAAM,KAAK,CAAC,EAAE;QAC1BC,aAAa,CAACL,QAAQ,CAAC;QACvB;MACF;MAEA,MAAMM,SAAS,GAAG,GAAG;MACrB,MAAMC,KAAK,GAAGL,SAAS,CAACC,KAAK,CAAC,CAAC,EAAEG,SAAS,CAAC;MAE3CV,UAAU,CAAEY,IAAI,IAAKA,IAAI,GAAGD,KAAK,CAAC;MAClCV,QAAQ,CAACC,OAAO,IAAIS,KAAK,CAACH,MAAM;IAClC,CAAC,EAAE,GAAG,CAAC;IAEP,OAAO,MAAMC,aAAa,CAACL,QAAQ,CAAC;EACtC,CAAC,EAAE,CAACR,aAAa,EAAEF,IAAI,CAAC,CAAC;EAEzB,oBACEtB,KAAA,CAACd,UAAU,CAAC2B,IAAI;IAAC4B,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAjC,QAAA,gBACvCZ,IAAA,CAACJ,QAAQ;MAAC0B,QAAQ,EAAEA,QAAS;MAACwB,KAAK,EAAEjB,OAAQ;MAACR,SAAS,EAAEA;IAAU,CAAE,CAAC,eACtErB,IAAA,CAACZ,UAAU,CAAC2D,WAAW;MAACC,OAAO,EAAEvB,MAAM,IAAI,CAACC,aAAc;MAAAd,QAAA,eACxDZ,IAAA,CAACX,MAAM,CAACqB,IAAI;QACVC,IAAI,EAAC,cAAc;QACnBsC,KAAK,EAAE9D,OAAO,CAAC+D,IAAI,CAACC,KAAM;QAC1BC,SAAS,EAAC,QAAQ;QAAAxC,QAAA,EAGhB;MAAgG,CAEvF;IAAC,CACQ,CAAC;EAAA,CACV,CAAC;AAEtB,CAAC;AACD,eAAeW,uBAAuB;AAEtC,MAAMqB,MAAM,GAAGrD,UAAU,CAAC8D,MAAM,CAAC;EAC/BR,SAAS,EAAE;IACTS,iBAAiB,EAAEhE,aAAa,CAAC,MAAM,CAAC;IACxCiE,GAAG,EAAEjE,aAAa,CAAC,QAAQ;EAC7B;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["KColors","KContainer","KLabel","KSpacingValue","StyleSheet","useStreamMessageStore","useEffect","useRef","useState","Markdown","Renderer","MarkedTokenizer","jsx","_jsx","jsxs","_jsxs","CustomTokenizer","CustomRenderer","constructor","html","text","match","exec","Text","typo","children","getKey","paragraph","style","View","background","white","paddingV","codespan","strong","tokenizer","renderer","markedStyles","marginVertical","blockquote","li","justifyContent","ChatAIAnswerMessageItem","item","isLast","streamMessage","state","id","isStreaming","display","setDisplay","indexRef","current","content","interval","setInterval","remaining","slice","length","clearInterval","chunkSize","chunk","prev","styles","container","value","flatListProps","flatList","VisibleView","visible","color","gray","light","textAlign","create","paddingHorizontal","gap","backgroundColor","transparent"],"sourceRoot":"../../../../../src","sources":["components/chat/item/ChatAIAnswerMessageItem.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  import { KContainer, KLabel, KColors, KSpacingValue, KListItem, KImage } from '@droppii/libs';
4
- import { StyleSheet } from 'react-native';
4
+ import { StyleSheet, DeviceEventEmitter } from 'react-native';
5
5
  import { useCallback, useEffect, useRef, useState } from 'react';
6
6
  import { IconThinkingStep } from "../../../assets/svgIcon/IconThinkingStep.js";
7
7
  import { IconChatArrow } from "../../../assets/svgIcon/IconChatArrow.js";
8
8
  import useStreamMessageStore from "../../../store/streamMessage.js";
9
- import Markdown, { Renderer } from "react-native-marked";
9
+ import Markdown, { Renderer } from 'react-native-marked';
10
10
  import icons from "../../../assets/icons/index.js";
11
+ import { events } from "../../../constants/events.js";
11
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
13
  class CustomRenderer extends Renderer {
13
14
  constructor() {
@@ -16,7 +17,7 @@ class CustomRenderer extends Renderer {
16
17
  paragraph(children, styles) {
17
18
  return /*#__PURE__*/_jsx(KContainer.View, {
18
19
  style: styles,
19
- background: KColors.hexToRgba(KColors.gray.light, 0.1),
20
+ background: KColors.transparent,
20
21
  paddingV: 0,
21
22
  children: children
22
23
  }, this.getKey());
@@ -42,7 +43,7 @@ class CustomRenderer extends Renderer {
42
43
  image(uri, _alt, _style) {
43
44
  return /*#__PURE__*/_jsx(KImage.Thumbnail, {
44
45
  uri: uri,
45
- resizeMode: "contain",
46
+ resizeMode: 'contain',
46
47
  size: 'lg'
47
48
  }, this.getKey());
48
49
  }
@@ -55,6 +56,9 @@ const ChatAIThinkingMessageItem = ({
55
56
  const streamMessage = useStreamMessageStore(state => state.streamMessage?.[item.id]);
56
57
  const [display, setDisplay] = useState('');
57
58
  const indexRef = useRef(0);
59
+ const onPressExpandThinkingStep = useCallback(expand => {
60
+ DeviceEventEmitter.emit(events.expandThinkingStep, expand);
61
+ }, []);
58
62
  const renderHeader = useCallback(() => {
59
63
  return /*#__PURE__*/_jsxs(KContainer.View, {
60
64
  style: styles.header,
@@ -77,7 +81,7 @@ const ChatAIThinkingMessageItem = ({
77
81
  clearInterval(interval);
78
82
  return;
79
83
  }
80
- const chunkSize = 2;
84
+ const chunkSize = 5;
81
85
  const chunk = remaining.slice(0, chunkSize);
82
86
  setDisplay(prev => prev + chunk);
83
87
  indexRef.current += chunk.length;
@@ -90,13 +94,16 @@ const ChatAIThinkingMessageItem = ({
90
94
  children: [/*#__PURE__*/_jsx(KContainer.View, {
91
95
  style: styles.arrow,
92
96
  children: /*#__PURE__*/_jsx(IconChatArrow, {
93
- fill: '#0077FF'
97
+ fill: KColors.gray.light
94
98
  })
95
99
  }), /*#__PURE__*/_jsx(KContainer.View, {
96
100
  style: styles.content,
97
101
  children: /*#__PURE__*/_jsx(Markdown, {
98
102
  renderer: renderer,
99
- value: display
103
+ value: display,
104
+ flatListProps: {
105
+ style: styles.flatList
106
+ }
100
107
  })
101
108
  })]
102
109
  });
@@ -107,6 +114,7 @@ const ChatAIThinkingMessageItem = ({
107
114
  containerStyle: styles.container,
108
115
  headerStyle: styles.mHeader,
109
116
  defaultValue: true,
117
+ onChangeValue: onPressExpandThinkingStep,
110
118
  children: renderThinkingContent()
111
119
  }, item.id.toString()) : /*#__PURE__*/_jsxs(KContainer.View, {
112
120
  style: styles.containerLoading,
@@ -153,6 +161,9 @@ const styles = StyleSheet.create({
153
161
  transform: [{
154
162
  rotateY: '180deg'
155
163
  }]
164
+ },
165
+ flatList: {
166
+ backgroundColor: KColors.transparent
156
167
  }
157
168
  });
158
169
  //# sourceMappingURL=ChatAIThinkingMessageItem.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["KContainer","KLabel","KColors","KSpacingValue","KListItem","KImage","StyleSheet","useCallback","useEffect","useRef","useState","IconThinkingStep","IconChatArrow","useStreamMessageStore","Markdown","Renderer","icons","jsx","_jsx","jsxs","_jsxs","CustomRenderer","constructor","paragraph","children","styles","View","style","background","hexToRgba","gray","light","paddingV","getKey","text","Text","typo","codespan","strong","image","uri","_alt","_style","Thumbnail","resizeMode","size","renderer","ChatAIThinkingMessageItem","item","isLast","streamMessage","state","id","display","setDisplay","indexRef","renderHeader","header","color","normal","current","content","interval","setInterval","remaining","slice","length","clearInterval","chunkSize","chunk","prev","renderThinkingContent","contentContainer","arrow","fill","value","metadata","status","Accordion","containerStyle","container","headerStyle","mHeader","defaultValue","toString","containerLoading","Base","icon_thinking_step","create","paddingHorizontal","borderBottomWidth","paddingVertical","gap","flexDirection","alignItems","marginBottom","maxWidth","backgroundColor","borderRadius","borderTopLeftRadius","transform","rotateY"],"sourceRoot":"../../../../../src","sources":["components/chat/item/ChatAIThinkingMessageItem.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["KContainer","KLabel","KColors","KSpacingValue","KListItem","KImage","StyleSheet","DeviceEventEmitter","useCallback","useEffect","useRef","useState","IconThinkingStep","IconChatArrow","useStreamMessageStore","Markdown","Renderer","icons","events","jsx","_jsx","jsxs","_jsxs","CustomRenderer","constructor","paragraph","children","styles","View","style","background","transparent","paddingV","getKey","text","Text","typo","codespan","strong","image","uri","_alt","_style","Thumbnail","resizeMode","size","renderer","ChatAIThinkingMessageItem","item","isLast","streamMessage","state","id","display","setDisplay","indexRef","onPressExpandThinkingStep","expand","emit","expandThinkingStep","renderHeader","header","color","gray","normal","current","content","interval","setInterval","remaining","slice","length","clearInterval","chunkSize","chunk","prev","renderThinkingContent","contentContainer","arrow","fill","light","value","flatListProps","flatList","metadata","status","Accordion","containerStyle","container","headerStyle","mHeader","defaultValue","onChangeValue","toString","containerLoading","Base","icon_thinking_step","create","paddingHorizontal","borderBottomWidth","paddingVertical","gap","flexDirection","alignItems","marginBottom","maxWidth","backgroundColor","hexToRgba","borderRadius","borderTopLeftRadius","transform","rotateY"],"sourceRoot":"../../../../../src","sources":["components/chat/item/ChatAIThinkingMessageItem.tsx"],"mappings":"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","ignoreList":[]}
@@ -3,6 +3,7 @@
3
3
  export const events = {
4
4
  updateOneMessage: 'update_one_message',
5
5
  updateMultipleMessage: 'update_multiple_message',
6
- forceUpdateMessages: 'force_update_messages'
6
+ forceUpdateMessages: 'force_update_messages',
7
+ expandThinkingStep: 'expand_thinking_step'
7
8
  };
8
9
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["events","updateOneMessage","updateMultipleMessage","forceUpdateMessages"],"sourceRoot":"../../../src","sources":["constants/events.ts"],"mappings":";;AAAA,OAAO,MAAMA,MAAM,GAAG;EACpBC,gBAAgB,EAAE,oBAAoB;EACtCC,qBAAqB,EAAE,yBAAyB;EAChDC,mBAAmB,EAAE;AACvB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["events","updateOneMessage","updateMultipleMessage","forceUpdateMessages","expandThinkingStep"],"sourceRoot":"../../../src","sources":["constants/events.ts"],"mappings":";;AAAA,OAAO,MAAMA,MAAM,GAAG;EACpBC,gBAAgB,EAAE,oBAAoB;EACtCC,qBAAqB,EAAE,yBAAyB;EAChDC,mBAAmB,EAAE,uBAAuB;EAC5CC,kBAAkB,EAAE;AACtB,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/assets/icons/index.ts"],"names":[],"mappings":";;;AAAA,wBAEC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/assets/icons/index.ts"],"names":[],"mappings":";;;AAAA,wBAEE"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatEmpty.d.ts","sourceRoot":"","sources":["../../../../../src/components/chat/ChatEmpty.tsx"],"names":[],"mappings":"AAQA,QAAA,MAAM,SAAS,+CAuCd,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"ChatEmpty.d.ts","sourceRoot":"","sources":["../../../../../src/components/chat/ChatEmpty.tsx"],"names":[],"mappings":"AAQA,QAAA,MAAM,SAAS,+CA0Cd,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatMessageList.d.ts","sourceRoot":"","sources":["../../../../../src/components/chat/ChatMessageList.tsx"],"names":[],"mappings":"AAOA,QAAA,MAAM,eAAe,+CAiBpB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ChatMessageList.d.ts","sourceRoot":"","sources":["../../../../../src/components/chat/ChatMessageList.tsx"],"names":[],"mappings":"AAUA,QAAA,MAAM,eAAe,+CAkDpB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatAIAnswerMessageItem.d.ts","sourceRoot":"","sources":["../../../../../../src/components/chat/item/ChatAIAnswerMessageItem.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM9C,UAAU,4BAA4B;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuED,QAAA,MAAM,uBAAuB,GAAI,mBAG9B,4BAA4B,4CAgD9B,CAAC;AACF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"ChatAIAnswerMessageItem.d.ts","sourceRoot":"","sources":["../../../../../../src/components/chat/item/ChatAIAnswerMessageItem.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAW9C,UAAU,4BAA4B;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAwED,QAAA,MAAM,uBAAuB,GAAI,mBAG9B,4BAA4B,4CAyD9B,CAAC;AACF,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatAIThinkingMessageItem.d.ts","sourceRoot":"","sources":["../../../../../../src/components/chat/item/ChatAIThinkingMessageItem.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AASnD,UAAU,8BAA8B;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmED,QAAA,MAAM,yBAAyB,GAAI,mBAGhC,8BAA8B,4CA4EhC,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"ChatAIThinkingMessageItem.d.ts","sourceRoot":"","sources":["../../../../../../src/components/chat/item/ChatAIThinkingMessageItem.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAUnD,UAAU,8BAA8B;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA0DD,QAAA,MAAM,yBAAyB,GAAI,mBAGhC,8BAA8B,4CAuFhC,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
@@ -2,5 +2,6 @@ export declare const events: {
2
2
  updateOneMessage: string;
3
3
  updateMultipleMessage: string;
4
4
  forceUpdateMessages: string;
5
+ expandThinkingStep: string;
5
6
  };
6
7
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/constants/events.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;CAIlB,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/constants/events.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;CAKlB,CAAC"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "react-native-chatbot-ai",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "React Native library for Chatbot AI",
5
- "main": "./src/index.ts",
5
+ "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
7
7
  "exports": {
8
8
  ".": {
9
9
  "source": "./src/index.ts",
10
10
  "types": "./lib/typescript/src/index.d.ts",
11
- "default": "./src/index.ts"
11
+ "default": "./lib/module/index.js"
12
12
  },
13
13
  "./package.json": "./package.json"
14
14
  },
@@ -38,7 +38,7 @@
38
38
  "lint": "eslint \"**/*.{js,ts,tsx}\"",
39
39
  "clean": "del-cli lib",
40
40
  "prepare": "bob build",
41
- "release": "release-it --no-git --ci"
41
+ "release": "release-it --no-git --ci --no-increment"
42
42
  },
43
43
  "keywords": [
44
44
  "react-native",
@@ -1,3 +1,3 @@
1
1
  export default {
2
2
  icon_thinking_step: require('./icon_thinking_step.gif'),
3
- }
3
+ };
@@ -15,7 +15,10 @@ const ChatEmpty = () => {
15
15
  }, 200);
16
16
 
17
17
  return (
18
- <KContainer.ScrollView contentContainerStyle={styles.container}>
18
+ <KContainer.ScrollView
19
+ contentContainerStyle={styles.container}
20
+ style={{ transform: [{ scaleY: -1 }] }}
21
+ >
19
22
  <KLabel.Text typo="TextXLgMedium" center>
20
23
  {'Bạn cần hỗ trợ gì hôm nay?'}
21
24
  </KLabel.Text>
@@ -24,7 +27,7 @@ const ChatEmpty = () => {
24
27
  {'Hãy đặt câu hỏi hoặc chia sẻ vấn đề của bạn!'}
25
28
  </KLabel.Text>
26
29
  <KLabel.Text typo="TextMdNormal" center color={KColors.gray.normal}>
27
- {'Xem qua những gợi ý dành cho bạn:'}
30
+ {'Những gợi ý dành cho bạn:'}
28
31
  </KLabel.Text>
29
32
  </KContainer.View>
30
33
  {data?.suggestions?.map((item: ISuggestionItem) => (
@@ -1,18 +1,52 @@
1
- import { FlatList, StyleSheet } from 'react-native';
1
+ import { FlatList, StyleSheet, DeviceEventEmitter } from 'react-native';
2
2
  import ChatEmpty from './ChatEmpty';
3
3
  import { useMessage } from '../../hooks/message/useMessage';
4
4
  import ChatItem from './item';
5
5
  import { KSpacingValue } from '@droppii/libs';
6
- import type { IMessageItem } from 'src/types';
6
+ import type { IMessageItem } from '../../types';
7
+ import { useCallback, useRef } from 'react';
8
+ import { useEffect } from 'react';
9
+ import { events } from '../../constants/events';
7
10
 
8
11
  const ChatMessageList = () => {
9
12
  const { messageState } = useMessage();
10
13
 
11
- if (!messageState?.messages?.length) {
12
- return <ChatEmpty />;
13
- }
14
+ const flatListRef = useRef<any>(null);
15
+ const scrollOffsetRef = useRef(0);
16
+
17
+ const onScroll = useCallback(
18
+ (event: any) => {
19
+ scrollOffsetRef.current = event?.nativeEvent?.contentOffset?.y;
20
+ },
21
+ []
22
+ );
23
+
24
+ useEffect(() => {
25
+ const subExpandThinkingStep = DeviceEventEmitter.addListener(
26
+ events.expandThinkingStep,
27
+ (isExpand: boolean) => {
28
+ try {
29
+ const scrollToOffset = flatListRef.current?.scrollToOffset({
30
+ offset: scrollOffsetRef.current + (isExpand ? 60 : -60),
31
+ animated: true,
32
+ });
33
+ setTimeout(() => {
34
+ scrollToOffset?.();
35
+ }, 100);
36
+ } catch (error) {
37
+ console.error(error);
38
+ }
39
+ }
40
+ );
41
+
42
+ return () => {
43
+ subExpandThinkingStep.remove();
44
+ };
45
+ }, []);
46
+
14
47
  return (
15
48
  <FlatList
49
+ ref={flatListRef}
16
50
  data={messageState?.messages || []}
17
51
  renderItem={({ item, index }: { item: IMessageItem; index: number }) => (
18
52
  <ChatItem item={item} index={index} />
@@ -20,6 +54,8 @@ const ChatMessageList = () => {
20
54
  keyExtractor={(item: IMessageItem) => item.id}
21
55
  contentContainerStyle={styles.container}
22
56
  inverted
57
+ ListEmptyComponent={<ChatEmpty />}
58
+ onScroll={onScroll}
23
59
  />
24
60
  );
25
61
  };
@@ -31,5 +67,6 @@ const styles = StyleSheet.create({
31
67
  flexGrow: 1,
32
68
  gap: KSpacingValue['0.5rem'],
33
69
  paddingVertical: KSpacingValue['1rem'],
70
+ justifyContent: 'flex-end',
34
71
  },
35
72
  });
@@ -3,15 +3,19 @@ import { IMessageItem } from '../../../types';
3
3
  import { StyleSheet } from 'react-native';
4
4
  import useStreamMessageStore from '../../../store/streamMessage';
5
5
  import { ReactNode, useEffect, useRef, useState } from 'react';
6
- import Markdown, { Renderer, RendererInterface, MarkedTokenizer } from "react-native-marked";
6
+ import Markdown, {
7
+ Renderer,
8
+ RendererInterface,
9
+ MarkedTokenizer,
10
+ MarkedStyles,
11
+ } from 'react-native-marked';
7
12
 
8
13
  interface ChatAIAnswerMessageItemProps {
9
14
  item: IMessageItem;
10
15
  isLast?: boolean;
11
16
  }
12
17
 
13
- class CustomTokenizer extends MarkedTokenizer {
14
- }
18
+ class CustomTokenizer extends MarkedTokenizer {}
15
19
 
16
20
  class CustomRenderer extends Renderer implements RendererInterface {
17
21
  constructor() {
@@ -21,21 +25,19 @@ class CustomRenderer extends Renderer implements RendererInterface {
21
25
  html(text: string): ReactNode {
22
26
  const match = /^<!--\s*@component:product\(id:([\w-]+)\)\s*-->/.exec(text);
23
27
  return (
24
- <KLabel.Text
25
- key={this.getKey()}
26
- typo="TextMdNormal"
27
- >
28
- {match?.[1] || ""}
28
+ <KLabel.Text key={this.getKey()} typo="TextMdNormal">
29
+ {match?.[1] || ''}
29
30
  </KLabel.Text>
30
- )
31
+ );
31
32
  }
32
33
 
33
- paragraph(children: ReactNode[]): ReactNode {
34
+ paragraph(children: ReactNode[], style?: any): ReactNode {
34
35
  return (
35
36
  <KContainer.View
36
37
  key={this.getKey()}
37
38
  background={KColors.white}
38
39
  paddingV={0}
40
+ style={style}
39
41
  >
40
42
  {children}
41
43
  </KContainer.View>
@@ -44,41 +46,45 @@ class CustomRenderer extends Renderer implements RendererInterface {
44
46
 
45
47
  text(text: string | ReactNode[]): ReactNode {
46
48
  return (
47
- <KLabel.Text
48
- key={this.getKey()}
49
- typo="TextMdNormal"
50
- >
49
+ <KLabel.Text key={this.getKey()} typo="TextMdNormal">
51
50
  {text}
52
51
  </KLabel.Text>
53
- )
52
+ );
54
53
  }
55
54
 
56
55
  codespan(text: string): ReactNode {
57
56
  return (
58
- <KLabel.Text
59
- key={this.getKey()}
60
- typo="TextMdNormal"
61
- >
57
+ <KLabel.Text key={this.getKey()} typo="TextMdNormal">
62
58
  {text}
63
59
  </KLabel.Text>
64
- )
60
+ );
65
61
  }
66
62
 
67
63
  strong(children: string | ReactNode[]): ReactNode {
68
64
  return (
69
- <KLabel.Text
70
- key={this.getKey()}
71
- typo="TextMdBold"
72
- >
65
+ <KLabel.Text key={this.getKey()} typo="TextMdBold">
73
66
  {children}
74
67
  </KLabel.Text>
75
- )
68
+ );
76
69
  }
77
70
  }
78
71
 
79
72
  const tokenizer = new CustomTokenizer();
80
73
  const renderer = new CustomRenderer();
81
74
 
75
+ const markedStyles: MarkedStyles = {
76
+ paragraph: {
77
+ marginVertical: 5,
78
+ },
79
+ blockquote: {
80
+ marginVertical: 5,
81
+ },
82
+ li: {
83
+ marginVertical: 5,
84
+ justifyContent: 'center',
85
+ },
86
+ };
87
+
82
88
  const ChatAIAnswerMessageItem = ({
83
89
  item,
84
90
  isLast = false,
@@ -86,6 +92,7 @@ const ChatAIAnswerMessageItem = ({
86
92
  const streamMessage = useStreamMessageStore(
87
93
  (state) => state.streamMessage?.[item.id]
88
94
  );
95
+ const isStreaming = useStreamMessageStore((state) => state.isStreaming);
89
96
 
90
97
  const [display, setDisplay] = useState('');
91
98
  const indexRef = useRef(0);
@@ -104,20 +111,28 @@ const ChatAIAnswerMessageItem = ({
104
111
  return;
105
112
  }
106
113
 
107
- const chunkSize = 100;
114
+ const chunkSize = 50;
108
115
  const chunk = remaining.slice(0, chunkSize);
109
116
 
110
117
  setDisplay((prev) => prev + chunk);
111
118
  indexRef.current += chunk.length;
112
- }, 100);
119
+ }, 50);
113
120
 
114
121
  return () => clearInterval(interval);
115
122
  }, [streamMessage, item]);
116
123
 
117
124
  return (
118
125
  <KContainer.View style={styles.container}>
119
- <Markdown renderer={renderer} value={display} tokenizer={tokenizer} />
120
- <KContainer.VisibleView visible={isLast && !streamMessage}>
126
+ <Markdown
127
+ renderer={renderer}
128
+ value={display}
129
+ tokenizer={tokenizer}
130
+ styles={markedStyles}
131
+ flatListProps={{
132
+ style: styles.flatList,
133
+ }}
134
+ />
135
+ <KContainer.VisibleView visible={isLast && !isStreaming}>
121
136
  <KLabel.Text
122
137
  typo="TextSmNormal"
123
138
  color={KColors.gray.light}
@@ -138,4 +153,7 @@ const styles = StyleSheet.create({
138
153
  paddingHorizontal: KSpacingValue['1rem'],
139
154
  gap: KSpacingValue['0.5rem'],
140
155
  },
156
+ flatList: {
157
+ backgroundColor: KColors.transparent,
158
+ },
141
159
  });
@@ -7,13 +7,14 @@ import {
7
7
  KImage,
8
8
  } from '@droppii/libs';
9
9
  import type { IMessageItem } from '../../../types';
10
- import { StyleSheet } from 'react-native';
10
+ import { StyleSheet, DeviceEventEmitter } from 'react-native';
11
11
  import { ReactNode, useCallback, useEffect, useRef, useState } from 'react';
12
12
  import { IconThinkingStep } from '../../../assets/svgIcon/IconThinkingStep';
13
13
  import { IconChatArrow } from '../../../assets/svgIcon/IconChatArrow';
14
14
  import useStreamMessageStore from '../../../store/streamMessage';
15
- import Markdown, { Renderer, RendererInterface } from "react-native-marked";
15
+ import Markdown, { Renderer, RendererInterface } from 'react-native-marked';
16
16
  import icons from '../../../assets/icons';
17
+ import { events } from '../../../constants/events';
17
18
 
18
19
  interface ChatAIThinkingMessageItemProps {
19
20
  item: IMessageItem;
@@ -30,7 +31,7 @@ class CustomRenderer extends Renderer implements RendererInterface {
30
31
  <KContainer.View
31
32
  key={this.getKey()}
32
33
  style={styles}
33
- background={KColors.hexToRgba(KColors.gray.light, 0.1)}
34
+ background={KColors.transparent}
34
35
  paddingV={0}
35
36
  >
36
37
  {children}
@@ -40,35 +41,26 @@ class CustomRenderer extends Renderer implements RendererInterface {
40
41
 
41
42
  text(text: string | ReactNode[]): ReactNode {
42
43
  return (
43
- <KLabel.Text
44
- key={this.getKey()}
45
- typo="TextSmNormal"
46
- >
44
+ <KLabel.Text key={this.getKey()} typo="TextSmNormal">
47
45
  {text}
48
46
  </KLabel.Text>
49
- )
47
+ );
50
48
  }
51
49
 
52
50
  codespan(text: string): ReactNode {
53
51
  return (
54
- <KLabel.Text
55
- key={this.getKey()}
56
- typo="TextSmNormal"
57
- >
52
+ <KLabel.Text key={this.getKey()} typo="TextSmNormal">
58
53
  {text}
59
54
  </KLabel.Text>
60
- )
55
+ );
61
56
  }
62
57
 
63
58
  strong(children: string | ReactNode[]): ReactNode {
64
59
  return (
65
- <KLabel.Text
66
- key={this.getKey()}
67
- typo="TextSmNormal"
68
- >
60
+ <KLabel.Text key={this.getKey()} typo="TextSmNormal">
69
61
  {children}
70
62
  </KLabel.Text>
71
- )
63
+ );
72
64
  }
73
65
 
74
66
  image(uri: string, _alt?: string, _style?: any): ReactNode {
@@ -76,7 +68,7 @@ class CustomRenderer extends Renderer implements RendererInterface {
76
68
  <KImage.Thumbnail
77
69
  key={this.getKey()}
78
70
  uri={uri}
79
- resizeMode={"contain"}
71
+ resizeMode={'contain'}
80
72
  size={'lg'}
81
73
  />
82
74
  );
@@ -96,6 +88,10 @@ const ChatAIThinkingMessageItem = ({
96
88
  const [display, setDisplay] = useState('');
97
89
  const indexRef = useRef(0);
98
90
 
91
+ const onPressExpandThinkingStep = useCallback((expand: boolean) => {
92
+ DeviceEventEmitter.emit(events.expandThinkingStep, expand);
93
+ }, []);
94
+
99
95
  const renderHeader = useCallback(() => {
100
96
  return (
101
97
  <KContainer.View style={styles.header}>
@@ -121,7 +117,7 @@ const ChatAIThinkingMessageItem = ({
121
117
  return;
122
118
  }
123
119
 
124
- const chunkSize = 2;
120
+ const chunkSize = 5;
125
121
  const chunk = remaining.slice(0, chunkSize);
126
122
 
127
123
  setDisplay((prev) => prev + chunk);
@@ -135,34 +131,41 @@ const ChatAIThinkingMessageItem = ({
135
131
  return (
136
132
  <KContainer.View style={styles.contentContainer}>
137
133
  <KContainer.View style={styles.arrow}>
138
- <IconChatArrow fill={'#0077FF'} />
134
+ <IconChatArrow fill={KColors.gray.light} />
139
135
  </KContainer.View>
140
136
  <KContainer.View style={styles.content}>
141
- <Markdown renderer={renderer} value={display} />
137
+ <Markdown
138
+ renderer={renderer}
139
+ value={display}
140
+ flatListProps={{
141
+ style: styles.flatList,
142
+ }}
143
+ />
142
144
  </KContainer.View>
143
145
  </KContainer.View>
144
- )
146
+ );
145
147
  }, [display]);
148
+
146
149
  return (
147
150
  <KContainer.View>
148
- {!isLast || streamMessage?.metadata?.status === 'done' ?
151
+ {!isLast || streamMessage?.metadata?.status === 'done' ? (
149
152
  <KListItem.Accordion
150
153
  header={renderHeader}
151
154
  key={item.id.toString()}
152
155
  containerStyle={styles.container}
153
156
  headerStyle={styles.mHeader}
154
157
  defaultValue={true}
158
+ onChangeValue={onPressExpandThinkingStep}
155
159
  >
156
160
  {renderThinkingContent()}
157
161
  </KListItem.Accordion>
158
- :
159
- <KContainer.View style={styles.containerLoading}>
160
- {renderThinkingContent()}
161
- {isLast && <KImage.Base size={42} uri={icons.icon_thinking_step} />}
162
- </KContainer.View>
163
- }
162
+ ) : (
163
+ <KContainer.View style={styles.containerLoading}>
164
+ {renderThinkingContent()}
165
+ {isLast && <KImage.Base size={42} uri={icons.icon_thinking_step} />}
166
+ </KContainer.View>
167
+ )}
164
168
  </KContainer.View>
165
-
166
169
  );
167
170
  };
168
171
 
@@ -202,4 +205,7 @@ const styles = StyleSheet.create({
202
205
  arrow: {
203
206
  transform: [{ rotateY: '180deg' }],
204
207
  },
208
+ flatList: {
209
+ backgroundColor: KColors.transparent,
210
+ },
205
211
  });
@@ -2,4 +2,5 @@ export const events = {
2
2
  updateOneMessage: 'update_one_message',
3
3
  updateMultipleMessage: 'update_multiple_message',
4
4
  forceUpdateMessages: 'force_update_messages',
5
+ expandThinkingStep: 'expand_thinking_step',
5
6
  };