@unif/react-native-chat 2.1.2 → 2.2.0

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 (44) hide show
  1. package/README.md +6 -6
  2. package/lib/module/components/Attachments/AttachmentItem.js +3 -5
  3. package/lib/module/components/Attachments/AttachmentItem.js.map +1 -1
  4. package/lib/module/components/ProcessingProgress/ProcessingProgress.js +46 -0
  5. package/lib/module/components/ProcessingProgress/ProcessingProgress.js.map +1 -0
  6. package/lib/module/components/ProcessingProgress/ProcessingProgressPrefix.js +53 -0
  7. package/lib/module/components/ProcessingProgress/ProcessingProgressPrefix.js.map +1 -0
  8. package/lib/module/components/ProcessingProgress/constants.js +7 -0
  9. package/lib/module/components/ProcessingProgress/constants.js.map +1 -0
  10. package/lib/module/components/ProcessingProgress/index.js +4 -0
  11. package/lib/module/components/ProcessingProgress/index.js.map +1 -0
  12. package/lib/module/components/ProcessingProgress/styles.js +17 -0
  13. package/lib/module/components/ProcessingProgress/styles.js.map +1 -0
  14. package/lib/module/components/ProcessingProgress/types.js +2 -0
  15. package/lib/module/components/ProcessingProgress/types.js.map +1 -0
  16. package/lib/module/index.js +1 -0
  17. package/lib/module/index.js.map +1 -1
  18. package/lib/typescript/src/components/Attachments/AttachmentItem.d.ts.map +1 -1
  19. package/lib/typescript/src/components/Attachments/types.d.ts +1 -1
  20. package/lib/typescript/src/components/Attachments/types.d.ts.map +1 -1
  21. package/lib/typescript/src/components/ProcessingProgress/ProcessingProgress.d.ts +3 -0
  22. package/lib/typescript/src/components/ProcessingProgress/ProcessingProgress.d.ts.map +1 -0
  23. package/lib/typescript/src/components/ProcessingProgress/ProcessingProgressPrefix.d.ts +3 -0
  24. package/lib/typescript/src/components/ProcessingProgress/ProcessingProgressPrefix.d.ts.map +1 -0
  25. package/lib/typescript/src/components/ProcessingProgress/constants.d.ts +5 -0
  26. package/lib/typescript/src/components/ProcessingProgress/constants.d.ts.map +1 -0
  27. package/lib/typescript/src/components/ProcessingProgress/index.d.ts +3 -0
  28. package/lib/typescript/src/components/ProcessingProgress/index.d.ts.map +1 -0
  29. package/lib/typescript/src/components/ProcessingProgress/styles.d.ts +14 -0
  30. package/lib/typescript/src/components/ProcessingProgress/styles.d.ts.map +1 -0
  31. package/lib/typescript/src/components/ProcessingProgress/types.d.ts +9 -0
  32. package/lib/typescript/src/components/ProcessingProgress/types.d.ts.map +1 -0
  33. package/lib/typescript/src/index.d.ts +2 -0
  34. package/lib/typescript/src/index.d.ts.map +1 -1
  35. package/package.json +3 -3
  36. package/src/components/Attachments/AttachmentItem.tsx +2 -7
  37. package/src/components/Attachments/types.ts +1 -1
  38. package/src/components/ProcessingProgress/ProcessingProgress.tsx +49 -0
  39. package/src/components/ProcessingProgress/ProcessingProgressPrefix.tsx +68 -0
  40. package/src/components/ProcessingProgress/constants.ts +4 -0
  41. package/src/components/ProcessingProgress/index.ts +2 -0
  42. package/src/components/ProcessingProgress/styles.ts +17 -0
  43. package/src/components/ProcessingProgress/types.ts +9 -0
  44. package/src/index.tsx +2 -0
package/README.md CHANGED
@@ -6,12 +6,12 @@
6
6
 
7
7
  ## 提供什么
8
8
 
9
- | 用途 | 组件 |
10
- | -------------- | ---------------------------------- |
11
- | 聊天布局与消息 | Chat、MessageList、Message |
12
- | 输入与附件 | Composer、Attachments、Suggestions |
13
- | 交互与反馈 | Confirmation、Process、Feedback |
14
- | 来源与引用 | Sources、Citation |
9
+ | 用途 | 组件 |
10
+ | -------------- | --------------------------------------------------- |
11
+ | 聊天布局与消息 | Chat、MessageList、Message |
12
+ | 输入与附件 | Composer、Attachments、Suggestions |
13
+ | 交互与反馈 | Confirmation、Process、ProcessingProgress、Feedback |
14
+ | 来源与引用 | Sources、Citation |
15
15
 
16
16
  组件负责展示和事件;应用负责会话、草稿、文件上传、Agent 请求和业务处理。Markdown 使用 `react-native-marked`。
17
17
 
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { Text, View } from 'react-native';
4
- import { BorderBeam, Button, CircularProgress, Icon, IconButton, radius, Spinner, useThemedStyles } from '@unif/react-native-design';
4
+ import { Button, CircularProgress, Icon, IconButton, radius, Spinner, useThemedStyles } from '@unif/react-native-design';
5
5
  import { ATTACHMENT_ICONS, STATUS_LABELS } from "./constants.js";
6
6
  import { createStyles } from "./styles.js";
7
7
  import { Thumbnail } from '@unif/react-native-design';
@@ -63,9 +63,7 @@ export function AttachmentItem({
63
63
  style: [styles.item, row ? styles.row : {
64
64
  width
65
65
  }],
66
- children: [busy && loadingVisual === 'border' ? /*#__PURE__*/_jsx(BorderBeam, {
67
- children: media
68
- }) : media, /*#__PURE__*/_jsxs(View, {
66
+ children: [media, /*#__PURE__*/_jsxs(View, {
69
67
  style: [styles.content, row && styles.rowContent],
70
68
  children: [/*#__PURE__*/_jsx(Text, {
71
69
  style: styles.name,
@@ -77,7 +75,7 @@ export function AttachmentItem({
77
75
  style: [styles.meta, status === 'failed' && styles.failed],
78
76
  accessibilityLiveRegion: "polite",
79
77
  children: statusText
80
- }) : null, busy && loadingVisual !== 'center' && showProgressLabel && progress !== undefined ? /*#__PURE__*/_jsx(Text, {
78
+ }) : null, busy && loadingVisual === 'caption' && showProgressLabel && progress !== undefined ? /*#__PURE__*/_jsx(Text, {
81
79
  style: styles.meta,
82
80
  children: `${Math.round(progress * 100)}%`
83
81
  }) : null, /*#__PURE__*/_jsxs(View, {
@@ -1 +1 @@
1
- {"version":3,"names":["Text","View","BorderBeam","Button","CircularProgress","Icon","IconButton","radius","Spinner","useThemedStyles","ATTACHMENT_ICONS","STATUS_LABELS","createStyles","Thumbnail","jsx","_jsx","jsxs","_jsxs","AttachmentItem","item","width","imageSize","row","showProgressLabel","onPreview","onRemove","styles","name","status","loadingVisual","busy","progress","Number","isFinite","undefined","statusText","icon","kind","size","media","style","minWidth","minHeight","children","pointerEvents","imageLayer","thumbnail","source","height","borderRadius","sm","fallback","placeholder","value","showLabel","accessibilityLabel","content","rowContent","meta","failed","accessibilityLiveRegion","Math","round","actions","previewable","onPress","removable","disabled","removeDisabled","map","action","label","leftIcon","variant","loading","accessibilityHint","id"],"sourceRoot":"../../../../src","sources":["components/Attachments/AttachmentItem.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Text","View","Button","CircularProgress","Icon","IconButton","radius","Spinner","useThemedStyles","ATTACHMENT_ICONS","STATUS_LABELS","createStyles","Thumbnail","jsx","_jsx","jsxs","_jsxs","AttachmentItem","item","width","imageSize","row","showProgressLabel","onPreview","onRemove","styles","name","status","loadingVisual","busy","progress","Number","isFinite","undefined","statusText","icon","kind","size","media","style","minWidth","minHeight","children","pointerEvents","imageLayer","thumbnail","source","height","borderRadius","sm","fallback","placeholder","value","showLabel","accessibilityLabel","content","rowContent","meta","failed","accessibilityLiveRegion","Math","round","actions","previewable","onPress","removable","disabled","removeDisabled","map","action","label","leftIcon","variant","loading","accessibilityHint","id"],"sourceRoot":"../../../../src","sources":["components/Attachments/AttachmentItem.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ import { Text, View } from 'react-native';
4
+ import { usePrefersReducedMotion, useThemedStyles } from '@unif/react-native-design';
5
+ import { PROCESSING_PROGRESS_SEPARATOR } from "./constants.js";
6
+ import { ProcessingProgressPrefix } from "./ProcessingProgressPrefix.js";
7
+ import { createStyles } from "./styles.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ export function ProcessingProgress({
10
+ progress
11
+ }) {
12
+ const styles = useThemedStyles(createStyles);
13
+ const reducedMotion = usePrefersReducedMotion();
14
+ const separatorIndex = progress.indexOf(PROCESSING_PROGRESS_SEPARATOR);
15
+ const prefix = separatorIndex === -1 ? progress : progress.slice(0, separatorIndex);
16
+ const suffix = separatorIndex === -1 ? '' : progress.slice(separatorIndex);
17
+ return /*#__PURE__*/_jsx(View, {
18
+ style: styles.root,
19
+ accessible: true,
20
+ accessibilityRole: "text",
21
+ accessibilityLabel: progress,
22
+ accessibilityState: {
23
+ busy: true
24
+ },
25
+ "aria-busy": true,
26
+ accessibilityLiveRegion: "polite",
27
+ children: /*#__PURE__*/_jsxs(Text, {
28
+ testID: "processing-progress-line",
29
+ style: styles.text,
30
+ numberOfLines: 1,
31
+ ellipsizeMode: "tail",
32
+ accessible: false,
33
+ "aria-hidden": true,
34
+ children: [/*#__PURE__*/_jsx(ProcessingProgressPrefix
35
+ // Each prefix/motion generation owns its value, including late frames.
36
+ , {
37
+ text: prefix,
38
+ reducedMotion: reducedMotion
39
+ }, `${reducedMotion}:${prefix}`), suffix ? /*#__PURE__*/_jsx(Text, {
40
+ testID: "processing-progress-suffix",
41
+ children: suffix
42
+ }) : null]
43
+ })
44
+ });
45
+ }
46
+ //# sourceMappingURL=ProcessingProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Text","View","usePrefersReducedMotion","useThemedStyles","PROCESSING_PROGRESS_SEPARATOR","ProcessingProgressPrefix","createStyles","jsx","_jsx","jsxs","_jsxs","ProcessingProgress","progress","styles","reducedMotion","separatorIndex","indexOf","prefix","slice","suffix","style","root","accessible","accessibilityRole","accessibilityLabel","accessibilityState","busy","accessibilityLiveRegion","children","testID","text","numberOfLines","ellipsizeMode"],"sourceRoot":"../../../../src","sources":["components/ProcessingProgress/ProcessingProgress.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACzC,SACEC,uBAAuB,EACvBC,eAAe,QACV,2BAA2B;AAClC,SAASC,6BAA6B,QAAQ,gBAAa;AAC3D,SAASC,wBAAwB,QAAQ,+BAA4B;AACrE,SAASC,YAAY,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGxC,OAAO,SAASC,kBAAkBA,CAAC;EAAEC;AAAkC,CAAC,EAAE;EACxE,MAAMC,MAAM,GAAGV,eAAe,CAACG,YAAY,CAAC;EAC5C,MAAMQ,aAAa,GAAGZ,uBAAuB,CAAC,CAAC;EAC/C,MAAMa,cAAc,GAAGH,QAAQ,CAACI,OAAO,CAACZ,6BAA6B,CAAC;EACtE,MAAMa,MAAM,GACVF,cAAc,KAAK,CAAC,CAAC,GAAGH,QAAQ,GAAGA,QAAQ,CAACM,KAAK,CAAC,CAAC,EAAEH,cAAc,CAAC;EACtE,MAAMI,MAAM,GAAGJ,cAAc,KAAK,CAAC,CAAC,GAAG,EAAE,GAAGH,QAAQ,CAACM,KAAK,CAACH,cAAc,CAAC;EAE1E,oBACEP,IAAA,CAACP,IAAI;IACHmB,KAAK,EAAEP,MAAM,CAACQ,IAAK;IACnBC,UAAU;IACVC,iBAAiB,EAAC,MAAM;IACxBC,kBAAkB,EAAEZ,QAAS;IAC7Ba,kBAAkB,EAAE;MAAEC,IAAI,EAAE;IAAK,CAAE;IACnC,iBAAS;IACTC,uBAAuB,EAAC,QAAQ;IAAAC,QAAA,eAEhClB,KAAA,CAACV,IAAI;MACH6B,MAAM,EAAC,0BAA0B;MACjCT,KAAK,EAAEP,MAAM,CAACiB,IAAK;MACnBC,aAAa,EAAE,CAAE;MACjBC,aAAa,EAAC,MAAM;MACpBV,UAAU,EAAE,KAAM;MAClB,mBAAW;MAAAM,QAAA,gBAEXpB,IAAA,CAACH;MACC;MAAA;QAEAyB,IAAI,EAAEb,MAAO;QACbH,aAAa,EAAEA;MAAc,GAFxB,GAAGA,aAAa,IAAIG,MAAM,EAGhC,CAAC,EACDE,MAAM,gBACLX,IAAA,CAACR,IAAI;QAAC6B,MAAM,EAAC,4BAA4B;QAAAD,QAAA,EAAET;MAAM,CAAO,CAAC,GACvD,IAAI;IAAA,CACJ;EAAC,CACH,CAAC;AAEX","ignoreList":[]}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ import { memo, useEffect, useRef } from 'react';
4
+ import { Animated, Easing, Platform, Text } from 'react-native';
5
+ import { useTheme } from '@unif/react-native-design';
6
+ import { PROCESSING_PROGRESS_SHINE_DURATION_MS, PROCESSING_PROGRESS_SHINE_PEAK, PROCESSING_PROGRESS_SHINE_RADIUS } from "./constants.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ export const ProcessingProgressPrefix = /*#__PURE__*/memo(function Prefix({
9
+ text,
10
+ reducedMotion
11
+ }) {
12
+ const {
13
+ colors,
14
+ scheme
15
+ } = useTheme();
16
+ const animation = useRef(new Animated.Value(-PROCESSING_PROGRESS_SHINE_RADIUS)).current;
17
+ const characters = Array.from(text);
18
+ useEffect(() => {
19
+ if (reducedMotion || !characters.length) return undefined;
20
+ const loop = Animated.loop(Animated.timing(animation, {
21
+ toValue: characters.length + PROCESSING_PROGRESS_SHINE_RADIUS,
22
+ duration: PROCESSING_PROGRESS_SHINE_DURATION_MS,
23
+ easing: Easing.linear,
24
+ useNativeDriver: Platform.OS !== 'web',
25
+ isInteraction: false
26
+ }));
27
+ loop.start();
28
+ return () => loop.stop();
29
+ }, [animation, characters.length, reducedMotion]);
30
+ const baseColor = scheme === 'dark' ? colors.foregroundMuted : colors.foreground;
31
+ if (reducedMotion) return /*#__PURE__*/_jsx(Text, {
32
+ style: {
33
+ color: baseColor
34
+ },
35
+ children: text
36
+ });
37
+ return /*#__PURE__*/_jsx(Text, {
38
+ children: characters.map((character, index) => /*#__PURE__*/_jsx(Animated.Text, {
39
+ style: {
40
+ color: animation.interpolate({
41
+ inputRange: [index - PROCESSING_PROGRESS_SHINE_RADIUS, index, index + PROCESSING_PROGRESS_SHINE_RADIUS],
42
+ outputRange: [0, PROCESSING_PROGRESS_SHINE_PEAK, 0],
43
+ extrapolate: 'clamp'
44
+ }).interpolate({
45
+ inputRange: [0, 1],
46
+ outputRange: [baseColor, colors.onPrimary]
47
+ })
48
+ },
49
+ children: character
50
+ }, `${index}:${character}`))
51
+ });
52
+ });
53
+ //# sourceMappingURL=ProcessingProgressPrefix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useEffect","useRef","Animated","Easing","Platform","Text","useTheme","PROCESSING_PROGRESS_SHINE_DURATION_MS","PROCESSING_PROGRESS_SHINE_PEAK","PROCESSING_PROGRESS_SHINE_RADIUS","jsx","_jsx","ProcessingProgressPrefix","Prefix","text","reducedMotion","colors","scheme","animation","Value","current","characters","Array","from","length","undefined","loop","timing","toValue","duration","easing","linear","useNativeDriver","OS","isInteraction","start","stop","baseColor","foregroundMuted","foreground","style","color","children","map","character","index","interpolate","inputRange","outputRange","extrapolate","onPrimary"],"sourceRoot":"../../../../src","sources":["components/ProcessingProgress/ProcessingProgressPrefix.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAC/C,SAASC,QAAQ,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,IAAI,QAAQ,cAAc;AAC/D,SAASC,QAAQ,QAAQ,2BAA2B;AACpD,SACEC,qCAAqC,EACrCC,8BAA8B,EAC9BC,gCAAgC,QAC3B,gBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGrB,OAAO,MAAMC,wBAAwB,gBAAGb,IAAI,CAAC,SAASc,MAAMA,CAAC;EAC3DC,IAAI;EACJC;AAC6B,CAAC,EAAE;EAChC,MAAM;IAAEC,MAAM;IAAEC;EAAO,CAAC,GAAGX,QAAQ,CAAC,CAAC;EACrC,MAAMY,SAAS,GAAGjB,MAAM,CACtB,IAAIC,QAAQ,CAACiB,KAAK,CAAC,CAACV,gCAAgC,CACtD,CAAC,CAACW,OAAO;EACT,MAAMC,UAAU,GAAGC,KAAK,CAACC,IAAI,CAACT,IAAI,CAAC;EAEnCd,SAAS,CAAC,MAAM;IACd,IAAIe,aAAa,IAAI,CAACM,UAAU,CAACG,MAAM,EAAE,OAAOC,SAAS;IACzD,MAAMC,IAAI,GAAGxB,QAAQ,CAACwB,IAAI,CACxBxB,QAAQ,CAACyB,MAAM,CAACT,SAAS,EAAE;MACzBU,OAAO,EAAEP,UAAU,CAACG,MAAM,GAAGf,gCAAgC;MAC7DoB,QAAQ,EAAEtB,qCAAqC;MAC/CuB,MAAM,EAAE3B,MAAM,CAAC4B,MAAM;MACrBC,eAAe,EAAE5B,QAAQ,CAAC6B,EAAE,KAAK,KAAK;MACtCC,aAAa,EAAE;IACjB,CAAC,CACH,CAAC;IACDR,IAAI,CAACS,KAAK,CAAC,CAAC;IACZ,OAAO,MAAMT,IAAI,CAACU,IAAI,CAAC,CAAC;EAC1B,CAAC,EAAE,CAAClB,SAAS,EAAEG,UAAU,CAACG,MAAM,EAAET,aAAa,CAAC,CAAC;EAEjD,MAAMsB,SAAS,GACbpB,MAAM,KAAK,MAAM,GAAGD,MAAM,CAACsB,eAAe,GAAGtB,MAAM,CAACuB,UAAU;EAEhE,IAAIxB,aAAa,EAAE,oBAAOJ,IAAA,CAACN,IAAI;IAACmC,KAAK,EAAE;MAAEC,KAAK,EAAEJ;IAAU,CAAE;IAAAK,QAAA,EAAE5B;EAAI,CAAO,CAAC;EAE1E,oBACEH,IAAA,CAACN,IAAI;IAAAqC,QAAA,EACFrB,UAAU,CAACsB,GAAG,CAAC,CAACC,SAAS,EAAEC,KAAK,kBAC/BlC,IAAA,CAACT,QAAQ,CAACG,IAAI;MAEZmC,KAAK,EAAE;QACLC,KAAK,EAAEvB,SAAS,CACb4B,WAAW,CAAC;UACXC,UAAU,EAAE,CACVF,KAAK,GAAGpC,gCAAgC,EACxCoC,KAAK,EACLA,KAAK,GAAGpC,gCAAgC,CACzC;UACDuC,WAAW,EAAE,CAAC,CAAC,EAAExC,8BAA8B,EAAE,CAAC,CAAC;UACnDyC,WAAW,EAAE;QACf,CAAC,CAAC,CACDH,WAAW,CAAC;UACXC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAClBC,WAAW,EAAE,CAACX,SAAS,EAAErB,MAAM,CAACkC,SAAS;QAC3C,CAAC;MACL,CAAE;MAAAR,QAAA,EAEDE;IAAS,GAlBL,GAAGC,KAAK,IAAID,SAAS,EAmBb,CAChB;EAAC,CACE,CAAC;AAEX,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ export const PROCESSING_PROGRESS_SEPARATOR = '·';
4
+ export const PROCESSING_PROGRESS_SHINE_DURATION_MS = 1800;
5
+ export const PROCESSING_PROGRESS_SHINE_RADIUS = 2;
6
+ export const PROCESSING_PROGRESS_SHINE_PEAK = 0.85;
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PROCESSING_PROGRESS_SEPARATOR","PROCESSING_PROGRESS_SHINE_DURATION_MS","PROCESSING_PROGRESS_SHINE_RADIUS","PROCESSING_PROGRESS_SHINE_PEAK"],"sourceRoot":"../../../../src","sources":["components/ProcessingProgress/constants.ts"],"mappings":";;AAAA,OAAO,MAAMA,6BAA6B,GAAG,GAAG;AAChD,OAAO,MAAMC,qCAAqC,GAAG,IAAI;AACzD,OAAO,MAAMC,gCAAgC,GAAG,CAAC;AACjD,OAAO,MAAMC,8BAA8B,GAAG,IAAI","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { ProcessingProgress } from "./ProcessingProgress.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ProcessingProgress"],"sourceRoot":"../../../../src","sources":["components/ProcessingProgress/index.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,yBAAsB","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet } from 'react-native';
4
+ import { r, space, type } from '@unif/react-native-design';
5
+ export const createStyles = colors => StyleSheet.create({
6
+ root: {
7
+ minWidth: 0,
8
+ paddingHorizontal: space[4],
9
+ paddingVertical: space[3]
10
+ },
11
+ text: {
12
+ color: colors.foregroundMuted,
13
+ fontSize: type.xs,
14
+ lineHeight: r(20)
15
+ }
16
+ });
17
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","r","space","type","createStyles","colors","create","root","minWidth","paddingHorizontal","paddingVertical","text","color","foregroundMuted","fontSize","xs","lineHeight"],"sourceRoot":"../../../../src","sources":["components/ProcessingProgress/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,CAAC,EAAEC,KAAK,EAAEC,IAAI,QAAQ,2BAA2B;AAG1D,OAAO,MAAMC,YAAY,GAAIC,MAAmB,IAC9CL,UAAU,CAACM,MAAM,CAAC;EAChBC,IAAI,EAAE;IACJC,QAAQ,EAAE,CAAC;IACXC,iBAAiB,EAAEP,KAAK,CAAC,CAAC,CAAC;IAC3BQ,eAAe,EAAER,KAAK,CAAC,CAAC;EAC1B,CAAC;EACDS,IAAI,EAAE;IACJC,KAAK,EAAEP,MAAM,CAACQ,eAAe;IAC7BC,QAAQ,EAAEX,IAAI,CAACY,EAAE;IACjBC,UAAU,EAAEf,CAAC,CAAC,EAAE;EAClB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../src","sources":["components/ProcessingProgress/types.ts"],"mappings":"","ignoreList":[]}
@@ -8,6 +8,7 @@ export { Chat } from "./components/Chat/index.js";
8
8
  export { Suggestions } from "./components/Suggestions/index.js";
9
9
  export { Confirmation } from "./components/Confirmation/index.js";
10
10
  export { Process } from "./components/Process/index.js";
11
+ export { ProcessingProgress } from "./components/ProcessingProgress/index.js";
11
12
  export { Feedback } from "./components/Feedback/index.js";
12
13
  export { Sources } from "./components/Sources/index.js";
13
14
  export { Citation } from "./components/Citation/index.js";
@@ -1 +1 @@
1
- {"version":3,"names":["Composer","Attachments","Message","MessageList","Chat","Suggestions","Confirmation","Process","Feedback","Sources","Citation"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,gCAAuB;AAWhD,SAASC,WAAW,QAAQ,mCAA0B;AAMtD,SAASC,OAAO,QAAQ,+BAAsB;AAU9C,SAASC,WAAW,QAAQ,mCAA0B;AAMtD,SAASC,IAAI,QAAQ,4BAAmB;AAExC,SAASC,WAAW,QAAQ,mCAA0B;AAKtD,SAASC,YAAY,QAAQ,oCAA2B;AAKxD,SAASC,OAAO,QAAQ,+BAAsB;AAS9C,SAASC,QAAQ,QAAQ,gCAAuB;AAEhD,SAASC,OAAO,QAAQ,+BAAsB;AAE9C,SAASC,QAAQ,QAAQ,gCAAuB","ignoreList":[]}
1
+ {"version":3,"names":["Composer","Attachments","Message","MessageList","Chat","Suggestions","Confirmation","Process","ProcessingProgress","Feedback","Sources","Citation"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,gCAAuB;AAWhD,SAASC,WAAW,QAAQ,mCAA0B;AAMtD,SAASC,OAAO,QAAQ,+BAAsB;AAU9C,SAASC,WAAW,QAAQ,mCAA0B;AAMtD,SAASC,IAAI,QAAQ,4BAAmB;AAExC,SAASC,WAAW,QAAQ,mCAA0B;AAKtD,SAASC,YAAY,QAAQ,oCAA2B;AAKxD,SAASC,OAAO,QAAQ,+BAAsB;AAS9C,SAASC,kBAAkB,QAAQ,0CAAiC;AAEpE,SAASC,QAAQ,QAAQ,gCAAuB;AAEhD,SAASC,OAAO,QAAQ,+BAAsB;AAE9C,SAASC,QAAQ,QAAQ,gCAAuB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"AttachmentItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/Attachments/AttachmentItem.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAS,CAAC;AAEnD,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,GAAG,EACH,iBAAyB,EACzB,SAAS,EACT,QAAQ,GACT,EAAE,mBAAmB,+BAkHrB"}
1
+ {"version":3,"file":"AttachmentItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/Attachments/AttachmentItem.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAS,CAAC;AAEnD,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,GAAG,EACH,iBAAyB,EACzB,SAAS,EACT,QAAQ,GACT,EAAE,mBAAmB,+BA8GrB"}
@@ -10,7 +10,7 @@ export interface ChatAttachmentItem {
10
10
  status?: ChatAttachmentStatus;
11
11
  statusText?: string;
12
12
  progress?: number;
13
- loadingVisual?: 'center' | 'border' | 'caption';
13
+ loadingVisual?: 'center' | 'caption';
14
14
  previewable?: boolean;
15
15
  removable?: boolean;
16
16
  removeDisabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/Attachments/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAe,CAAC;AAEhD,MAAM,MAAM,oBAAoB,GAC9B,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC3D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC;AACD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,gBAAgB,EAChB,mBAAmB,GAAG,WAAW,GAAG,UAAU,CAC/C;IACC,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/Attachments/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAe,CAAC;AAEhD,MAAM,MAAM,oBAAoB,GAC9B,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC3D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAC5C,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC;AACD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,gBAAgB,EAChB,mBAAmB,GAAG,WAAW,GAAG,UAAU,CAC/C;IACC,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;CACd"}
@@ -0,0 +1,3 @@
1
+ import type { ProcessingProgressProps } from './types.js';
2
+ export declare function ProcessingProgress({ progress }: ProcessingProgressProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=ProcessingProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessingProgress.d.ts","sourceRoot":"","sources":["../../../../../src/components/ProcessingProgress/ProcessingProgress.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAS,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE,uBAAuB,+BAsCvE"}
@@ -0,0 +1,3 @@
1
+ import type { ProcessingProgressPrefixProps } from './types.js';
2
+ export declare const ProcessingProgressPrefix: import("react").MemoExoticComponent<({ text, reducedMotion, }: ProcessingProgressPrefixProps) => import("react").JSX.Element>;
3
+ //# sourceMappingURL=ProcessingProgressPrefix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessingProgressPrefix.d.ts","sourceRoot":"","sources":["../../../../../src/components/ProcessingProgress/ProcessingProgressPrefix.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,YAAS,CAAC;AAE7D,eAAO,MAAM,wBAAwB,iEAGlC,6BAA6B,iCAsD9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const PROCESSING_PROGRESS_SEPARATOR = "\u00B7";
2
+ export declare const PROCESSING_PROGRESS_SHINE_DURATION_MS = 1800;
3
+ export declare const PROCESSING_PROGRESS_SHINE_RADIUS = 2;
4
+ export declare const PROCESSING_PROGRESS_SHINE_PEAK = 0.85;
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/components/ProcessingProgress/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,WAAM,CAAC;AACjD,eAAO,MAAM,qCAAqC,OAAO,CAAC;AAC1D,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,8BAA8B,OAAO,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ProcessingProgress } from './ProcessingProgress.js';
2
+ export type { ProcessingProgressProps } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/ProcessingProgress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAsB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAS,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ColorTokens } from '@unif/react-native-design';
2
+ export declare const createStyles: (colors: ColorTokens) => Readonly<{
3
+ root: {
4
+ minWidth: number;
5
+ paddingHorizontal: number;
6
+ paddingVertical: number;
7
+ };
8
+ text: {
9
+ color: string;
10
+ fontSize: number;
11
+ lineHeight: number;
12
+ };
13
+ }>;
14
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/ProcessingProgress/styles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAO,MAAM,YAAY,GAAI,QAAQ,WAAW;;;;;;;;;;;EAY5C,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface ProcessingProgressProps {
2
+ /** 当前公开进度;文案和展示结束时机由调用方提供。 */
3
+ progress: string;
4
+ }
5
+ export interface ProcessingProgressPrefixProps {
6
+ text: string;
7
+ reducedMotion: boolean;
8
+ }
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ProcessingProgress/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;CACxB"}
@@ -15,6 +15,8 @@ export { Confirmation } from './components/Confirmation/index.js';
15
15
  export type { ConfirmationProps, ConfirmationStatus, } from './components/Confirmation/index.js';
16
16
  export { Process } from './components/Process/index.js';
17
17
  export type { ProcessBaseProps, ProcessControlledExpansion, ProcessLocalExpansion, ProcessProps, ProcessStep, ProcessStepStatus, } from './components/Process/index.js';
18
+ export { ProcessingProgress } from './components/ProcessingProgress/index.js';
19
+ export type { ProcessingProgressProps } from './components/ProcessingProgress/index.js';
18
20
  export { Feedback } from './components/Feedback/index.js';
19
21
  export type { FeedbackProps, FeedbackTone } from './components/Feedback/index.js';
20
22
  export { Sources } from './components/Sources/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAW,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAuB,CAAC;AACjD,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gCAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAA0B,CAAC;AACvD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mCAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAAsB,CAAC;AAC/C,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,+BAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAA0B,CAAC;AACvD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,mCAA0B,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,4BAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,4BAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAA0B,CAAC;AACvD,YAAY,EACV,cAAc,EACd,gBAAgB,GACjB,MAAM,mCAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAA2B,CAAC;AACzD,YAAY,EACV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oCAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAAsB,CAAC;AAC/C,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,iBAAiB,GAClB,MAAM,+BAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAuB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gCAAuB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAAsB,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,+BAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAuB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAW,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAuB,CAAC;AACjD,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gCAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAA0B,CAAC;AACvD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mCAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAAsB,CAAC;AAC/C,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,+BAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAA0B,CAAC;AACvD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,mCAA0B,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,4BAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,4BAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAA0B,CAAC;AACvD,YAAY,EACV,cAAc,EACd,gBAAgB,GACjB,MAAM,mCAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAA2B,CAAC;AACzD,YAAY,EACV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,oCAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAAsB,CAAC;AAC/C,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,iBAAiB,GAClB,MAAM,+BAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAAiC,CAAC;AACrE,YAAY,EAAE,uBAAuB,EAAE,MAAM,0CAAiC,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAuB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gCAAuB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAAsB,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,+BAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAuB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unif/react-native-chat",
3
- "version": "2.1.2",
3
+ "version": "2.2.0",
4
4
  "description": "Unif React Native 聊天组件:消息、输入、附件和交互展示",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -68,7 +68,7 @@
68
68
  "@sbaiahmed1/react-native-blur": "6.0.1",
69
69
  "@testing-library/react-native": "13.3.3",
70
70
  "@types/react": "^19.2.0",
71
- "@unif/react-native-design": "0.33.0",
71
+ "@unif/react-native-design": "0.34.0",
72
72
  "commitlint": "^21.2.1",
73
73
  "del-cli": "^7.0.0",
74
74
  "eslint": "^9.39.5",
@@ -96,7 +96,7 @@
96
96
  "typescript": "^6.0.3"
97
97
  },
98
98
  "peerDependencies": {
99
- "@unif/react-native-design": "^0.33.0",
99
+ "@unif/react-native-design": "^0.34.0",
100
100
  "react": ">=19.2.3 <20.0.0",
101
101
  "react-native": ">=0.86.0",
102
102
  "react-native-svg": ">=15"
@@ -1,6 +1,5 @@
1
1
  import { Text, View } from 'react-native';
2
2
  import {
3
- BorderBeam,
4
3
  Button,
5
4
  CircularProgress,
6
5
  Icon,
@@ -81,11 +80,7 @@ export function AttachmentItem({
81
80
 
82
81
  return (
83
82
  <View style={[styles.item, row ? styles.row : { width }]}>
84
- {busy && loadingVisual === 'border' ? (
85
- <BorderBeam>{media}</BorderBeam>
86
- ) : (
87
- media
88
- )}
83
+ {media}
89
84
  <View style={[styles.content, row && styles.rowContent]}>
90
85
  <Text style={styles.name}>{name}</Text>
91
86
  {item.meta ? <Text style={styles.meta}>{item.meta}</Text> : null}
@@ -98,7 +93,7 @@ export function AttachmentItem({
98
93
  </Text>
99
94
  ) : null}
100
95
  {busy &&
101
- loadingVisual !== 'center' &&
96
+ loadingVisual === 'caption' &&
102
97
  showProgressLabel &&
103
98
  progress !== undefined ? (
104
99
  <Text style={styles.meta}>{`${Math.round(progress * 100)}%`}</Text>
@@ -12,7 +12,7 @@ export interface ChatAttachmentItem {
12
12
  status?: ChatAttachmentStatus;
13
13
  statusText?: string;
14
14
  progress?: number;
15
- loadingVisual?: 'center' | 'border' | 'caption';
15
+ loadingVisual?: 'center' | 'caption';
16
16
  previewable?: boolean;
17
17
  removable?: boolean;
18
18
  removeDisabled?: boolean;
@@ -0,0 +1,49 @@
1
+ import { Text, View } from 'react-native';
2
+ import {
3
+ usePrefersReducedMotion,
4
+ useThemedStyles,
5
+ } from '@unif/react-native-design';
6
+ import { PROCESSING_PROGRESS_SEPARATOR } from './constants';
7
+ import { ProcessingProgressPrefix } from './ProcessingProgressPrefix';
8
+ import { createStyles } from './styles';
9
+ import type { ProcessingProgressProps } from './types';
10
+
11
+ export function ProcessingProgress({ progress }: ProcessingProgressProps) {
12
+ const styles = useThemedStyles(createStyles);
13
+ const reducedMotion = usePrefersReducedMotion();
14
+ const separatorIndex = progress.indexOf(PROCESSING_PROGRESS_SEPARATOR);
15
+ const prefix =
16
+ separatorIndex === -1 ? progress : progress.slice(0, separatorIndex);
17
+ const suffix = separatorIndex === -1 ? '' : progress.slice(separatorIndex);
18
+
19
+ return (
20
+ <View
21
+ style={styles.root}
22
+ accessible
23
+ accessibilityRole="text"
24
+ accessibilityLabel={progress}
25
+ accessibilityState={{ busy: true }}
26
+ aria-busy
27
+ accessibilityLiveRegion="polite"
28
+ >
29
+ <Text
30
+ testID="processing-progress-line"
31
+ style={styles.text}
32
+ numberOfLines={1}
33
+ ellipsizeMode="tail"
34
+ accessible={false}
35
+ aria-hidden
36
+ >
37
+ <ProcessingProgressPrefix
38
+ // Each prefix/motion generation owns its value, including late frames.
39
+ key={`${reducedMotion}:${prefix}`}
40
+ text={prefix}
41
+ reducedMotion={reducedMotion}
42
+ />
43
+ {suffix ? (
44
+ <Text testID="processing-progress-suffix">{suffix}</Text>
45
+ ) : null}
46
+ </Text>
47
+ </View>
48
+ );
49
+ }
@@ -0,0 +1,68 @@
1
+ import { memo, useEffect, useRef } from 'react';
2
+ import { Animated, Easing, Platform, Text } from 'react-native';
3
+ import { useTheme } from '@unif/react-native-design';
4
+ import {
5
+ PROCESSING_PROGRESS_SHINE_DURATION_MS,
6
+ PROCESSING_PROGRESS_SHINE_PEAK,
7
+ PROCESSING_PROGRESS_SHINE_RADIUS,
8
+ } from './constants';
9
+ import type { ProcessingProgressPrefixProps } from './types';
10
+
11
+ export const ProcessingProgressPrefix = memo(function Prefix({
12
+ text,
13
+ reducedMotion,
14
+ }: ProcessingProgressPrefixProps) {
15
+ const { colors, scheme } = useTheme();
16
+ const animation = useRef(
17
+ new Animated.Value(-PROCESSING_PROGRESS_SHINE_RADIUS)
18
+ ).current;
19
+ const characters = Array.from(text);
20
+
21
+ useEffect(() => {
22
+ if (reducedMotion || !characters.length) return undefined;
23
+ const loop = Animated.loop(
24
+ Animated.timing(animation, {
25
+ toValue: characters.length + PROCESSING_PROGRESS_SHINE_RADIUS,
26
+ duration: PROCESSING_PROGRESS_SHINE_DURATION_MS,
27
+ easing: Easing.linear,
28
+ useNativeDriver: Platform.OS !== 'web',
29
+ isInteraction: false,
30
+ })
31
+ );
32
+ loop.start();
33
+ return () => loop.stop();
34
+ }, [animation, characters.length, reducedMotion]);
35
+
36
+ const baseColor =
37
+ scheme === 'dark' ? colors.foregroundMuted : colors.foreground;
38
+
39
+ if (reducedMotion) return <Text style={{ color: baseColor }}>{text}</Text>;
40
+
41
+ return (
42
+ <Text>
43
+ {characters.map((character, index) => (
44
+ <Animated.Text
45
+ key={`${index}:${character}`}
46
+ style={{
47
+ color: animation
48
+ .interpolate({
49
+ inputRange: [
50
+ index - PROCESSING_PROGRESS_SHINE_RADIUS,
51
+ index,
52
+ index + PROCESSING_PROGRESS_SHINE_RADIUS,
53
+ ],
54
+ outputRange: [0, PROCESSING_PROGRESS_SHINE_PEAK, 0],
55
+ extrapolate: 'clamp',
56
+ })
57
+ .interpolate({
58
+ inputRange: [0, 1],
59
+ outputRange: [baseColor, colors.onPrimary],
60
+ }),
61
+ }}
62
+ >
63
+ {character}
64
+ </Animated.Text>
65
+ ))}
66
+ </Text>
67
+ );
68
+ });
@@ -0,0 +1,4 @@
1
+ export const PROCESSING_PROGRESS_SEPARATOR = '·';
2
+ export const PROCESSING_PROGRESS_SHINE_DURATION_MS = 1800;
3
+ export const PROCESSING_PROGRESS_SHINE_RADIUS = 2;
4
+ export const PROCESSING_PROGRESS_SHINE_PEAK = 0.85;
@@ -0,0 +1,2 @@
1
+ export { ProcessingProgress } from './ProcessingProgress';
2
+ export type { ProcessingProgressProps } from './types';
@@ -0,0 +1,17 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { r, space, type } from '@unif/react-native-design';
3
+ import type { ColorTokens } from '@unif/react-native-design';
4
+
5
+ export const createStyles = (colors: ColorTokens) =>
6
+ StyleSheet.create({
7
+ root: {
8
+ minWidth: 0,
9
+ paddingHorizontal: space[4],
10
+ paddingVertical: space[3],
11
+ },
12
+ text: {
13
+ color: colors.foregroundMuted,
14
+ fontSize: type.xs,
15
+ lineHeight: r(20),
16
+ },
17
+ });
@@ -0,0 +1,9 @@
1
+ export interface ProcessingProgressProps {
2
+ /** 当前公开进度;文案和展示结束时机由调用方提供。 */
3
+ progress: string;
4
+ }
5
+
6
+ export interface ProcessingProgressPrefixProps {
7
+ text: string;
8
+ reducedMotion: boolean;
9
+ }
package/src/index.tsx CHANGED
@@ -53,6 +53,8 @@ export type {
53
53
  ProcessStep,
54
54
  ProcessStepStatus,
55
55
  } from './components/Process';
56
+ export { ProcessingProgress } from './components/ProcessingProgress';
57
+ export type { ProcessingProgressProps } from './components/ProcessingProgress';
56
58
  export { Feedback } from './components/Feedback';
57
59
  export type { FeedbackProps, FeedbackTone } from './components/Feedback';
58
60
  export { Sources } from './components/Sources';