@unif/react-native-chat 4.6.2 → 4.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/module/components/Composer/ComposerIconAction.js +5 -2
- package/lib/module/components/Composer/ComposerIconAction.js.map +1 -1
- package/lib/module/components/Composer/ComposerVoiceWave.js +4 -2
- package/lib/module/components/Composer/ComposerVoiceWave.js.map +1 -1
- package/lib/module/components/Message/MarkdownContent/MarkdownContent.js +14 -0
- package/lib/module/components/Message/MarkdownContent/MarkdownContent.js.map +1 -1
- package/lib/module/components/Message/MessageWaiting.js +4 -2
- package/lib/module/components/Message/MessageWaiting.js.map +1 -1
- package/lib/typescript/src/components/Composer/ComposerIconAction.d.ts.map +1 -1
- package/lib/typescript/src/components/Composer/ComposerVoiceWave.d.ts.map +1 -1
- package/lib/typescript/src/components/Message/MarkdownContent/MarkdownContent.d.ts.map +1 -1
- package/lib/typescript/src/components/Message/MessageWaiting.d.ts.map +1 -1
- package/package.json +5 -4
- package/src/components/Composer/ComposerIconAction.tsx +12 -2
- package/src/components/Composer/ComposerVoiceWave.tsx +4 -1
- package/src/components/Message/MarkdownContent/MarkdownContent.tsx +19 -0
- package/src/components/Message/MessageWaiting.tsx +4 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { ActivityIndicator, Pressable, View } from 'react-native';
|
|
4
|
-
import { useColors, useThemedStyles } from '@unif/react-native-design';
|
|
4
|
+
import { useColors, useMotionActive, useThemedStyles } from '@unif/react-native-design';
|
|
5
5
|
import { COMPOSER_ACTION_ICON_SIZE, COMPOSER_PRIMARY_ICON_SIZE, COMPOSER_CANCEL_ICON_SIZE } from "./constants.js";
|
|
6
6
|
import { createStyles } from "./styles.js";
|
|
7
7
|
import { useMousePress } from "./useMousePress.js";
|
|
@@ -16,6 +16,7 @@ export function ComposerIconAction({
|
|
|
16
16
|
visual = 'icon'
|
|
17
17
|
}) {
|
|
18
18
|
const colors = useColors();
|
|
19
|
+
const motionActive = useMotionActive();
|
|
19
20
|
const styles = useThemedStyles(createStyles);
|
|
20
21
|
const unavailable = disabled || busy;
|
|
21
22
|
const {
|
|
@@ -44,7 +45,9 @@ export function ComposerIconAction({
|
|
|
44
45
|
style: [styles.actionVisual, primary && styles.primary, visual === 'cancel' && styles.cancel, (pressed || mousePressed) && (primary ? styles.primaryPressed : styles.actionPressed), disabled && (primary ? styles.primaryDisabled : styles.actionDisabled)],
|
|
45
46
|
children: busy ? /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
46
47
|
size: "small",
|
|
47
|
-
color: color
|
|
48
|
+
color: color,
|
|
49
|
+
animating: motionActive,
|
|
50
|
+
hidesWhenStopped: false
|
|
48
51
|
}) : /*#__PURE__*/_jsx(Glyph, {
|
|
49
52
|
size: primary ? COMPOSER_PRIMARY_ICON_SIZE : visual === 'cancel' ? COMPOSER_CANCEL_ICON_SIZE : COMPOSER_ACTION_ICON_SIZE,
|
|
50
53
|
color: color,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ActivityIndicator","Pressable","View","useColors","useThemedStyles","COMPOSER_ACTION_ICON_SIZE","COMPOSER_PRIMARY_ICON_SIZE","COMPOSER_CANCEL_ICON_SIZE","createStyles","useMousePress","jsx","_jsx","ComposerIconAction","icon","label","onPress","disabled","busy","expanded","visual","colors","styles","unavailable","mousePressed","mouseHandlers","primary","color","foregroundSubtle","onPrimary","foregroundMuted","foreground","Glyph","accessibilityRole","accessibilityLabel","accessibilityState","undefined","style","action","children","pressed","pointerEvents","actionVisual","cancel","primaryPressed","actionPressed","primaryDisabled","actionDisabled","size","transform","rotate"],"sourceRoot":"../../../../src","sources":["components/Composer/ComposerIconAction.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,EAAEC,SAAS,EAAEC,IAAI,QAAQ,cAAc;AACjE,
|
|
1
|
+
{"version":3,"names":["ActivityIndicator","Pressable","View","useColors","useMotionActive","useThemedStyles","COMPOSER_ACTION_ICON_SIZE","COMPOSER_PRIMARY_ICON_SIZE","COMPOSER_CANCEL_ICON_SIZE","createStyles","useMousePress","jsx","_jsx","ComposerIconAction","icon","label","onPress","disabled","busy","expanded","visual","colors","motionActive","styles","unavailable","mousePressed","mouseHandlers","primary","color","foregroundSubtle","onPrimary","foregroundMuted","foreground","Glyph","accessibilityRole","accessibilityLabel","accessibilityState","undefined","style","action","children","pressed","pointerEvents","actionVisual","cancel","primaryPressed","actionPressed","primaryDisabled","actionDisabled","size","animating","hidesWhenStopped","transform","rotate"],"sourceRoot":"../../../../src","sources":["components/Composer/ComposerIconAction.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,EAAEC,SAAS,EAAEC,IAAI,QAAQ,cAAc;AACjE,SACEC,SAAS,EACTC,eAAe,EACfC,eAAe,QACV,2BAA2B;AAClC,SACEC,yBAAyB,EACzBC,0BAA0B,EAC1BC,yBAAyB,QACpB,gBAAa;AACpB,SAASC,YAAY,QAAQ,aAAU;AACvC,SAASC,aAAa,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGhD,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC,QAAQ,GAAG,KAAK;EAChBC,IAAI,GAAG,KAAK;EACZC,QAAQ;EACRC,MAAM,GAAG;AACc,CAAC,EAAE;EAC1B,MAAMC,MAAM,GAAGlB,SAAS,CAAC,CAAC;EAC1B,MAAMmB,YAAY,GAAGlB,eAAe,CAAC,CAAC;EACtC,MAAMmB,MAAM,GAAGlB,eAAe,CAACI,YAAY,CAAC;EAC5C,MAAMe,WAAW,GAAGP,QAAQ,IAAIC,IAAI;EACpC,MAAM;IAAEO,YAAY;IAAE,GAAGC;EAAc,CAAC,GAAGhB,aAAa,CAACc,WAAW,CAAC;EACrE,MAAMG,OAAO,GAAGP,MAAM,KAAK,SAAS;EACpC,MAAMQ,KAAK,GAAGD,OAAO,GACjBV,QAAQ,GACNI,MAAM,CAACQ,gBAAgB,GACvBR,MAAM,CAACS,SAAS,GAClBV,MAAM,KAAK,QAAQ,GACjBC,MAAM,CAACU,eAAe,GACtBV,MAAM,CAACW,UAAU;EACvB,MAAMC,KAAK,GAAGnB,IAAI;EAClB,oBACEF,IAAA,CAACX,SAAS;IACRiC,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAEpB,KAAM;IAC1BqB,kBAAkB,EAAE;MAAEnB,QAAQ,EAAEO,WAAW;MAAEN,IAAI;MAAEC;IAAS,CAAE;IAC9DF,QAAQ,EAAEO,WAAY;IACtBR,OAAO,EAAEQ,WAAW,GAAGa,SAAS,GAAGrB,OAAQ;IAAA,GACvCU,aAAa;IACjBY,KAAK,EAAEf,MAAM,CAACgB,MAAO;IAAAC,QAAA,EAEpBA,CAAC;MAAEC;IAAQ,CAAC,kBACX7B,IAAA,CAACV,IAAI;MACHwC,aAAa,EAAC,MAAM;MACpBJ,KAAK,EAAE,CACLf,MAAM,CAACoB,YAAY,EACnBhB,OAAO,IAAIJ,MAAM,CAACI,OAAO,EACzBP,MAAM,KAAK,QAAQ,IAAIG,MAAM,CAACqB,MAAM,EACpC,CAACH,OAAO,IAAIhB,YAAY,MACrBE,OAAO,GAAGJ,MAAM,CAACsB,cAAc,GAAGtB,MAAM,CAACuB,aAAa,CAAC,EAC1D7B,QAAQ,KACLU,OAAO,GAAGJ,MAAM,CAACwB,eAAe,GAAGxB,MAAM,CAACyB,cAAc,CAAC,CAC5D;MAAAR,QAAA,EAEDtB,IAAI,gBACHN,IAAA,CAACZ,iBAAiB;QAChBiD,IAAI,EAAC,OAAO;QACZrB,KAAK,EAAEA,KAAM;QACbsB,SAAS,EAAE5B,YAAa;QACxB6B,gBAAgB,EAAE;MAAM,CACzB,CAAC,gBAEFvC,IAAA,CAACqB,KAAK;QACJgB,IAAI,EACFtB,OAAO,GACHpB,0BAA0B,GAC1Ba,MAAM,KAAK,QAAQ,GACjBZ,yBAAyB,GACzBF,yBACP;QACDsB,KAAK,EAAEA,KAAM;QACbU,KAAK,EACHnB,QAAQ,GAAG;UAAEiC,SAAS,EAAE,CAAC;YAAEC,MAAM,EAAE;UAAQ,CAAC;QAAE,CAAC,GAAGhB;MACnD,CACF;IACF,CACG;EACP,CACQ,CAAC;AAEhB","ignoreList":[]}
|
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useState } from 'react';
|
|
4
4
|
import { Animated, Easing, Platform, View } from 'react-native';
|
|
5
|
-
import { usePrefersReducedMotion, useThemedStyles } from '@unif/react-native-design';
|
|
5
|
+
import { usePrefersReducedMotion, useMotionActive, useThemedStyles } from '@unif/react-native-design';
|
|
6
6
|
import { COMPOSER_VOICE_WAVE_PATTERN, COMPOSER_VOICE_WAVE_STAGGER_MS } from "./constants.js";
|
|
7
7
|
import { createStyles } from "./styles.js";
|
|
8
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
9
|
export function ComposerVoiceWave() {
|
|
10
10
|
const styles = useThemedStyles(createStyles);
|
|
11
11
|
const reducedMotion = usePrefersReducedMotion();
|
|
12
|
+
const active = useMotionActive();
|
|
12
13
|
const [values] = useState(() => COMPOSER_VOICE_WAVE_PATTERN.map(group => new Animated.Value(group.from / Math.max(group.from, group.to))));
|
|
13
14
|
useEffect(() => {
|
|
15
|
+
if (!active) return;
|
|
14
16
|
const animations = COMPOSER_VOICE_WAVE_PATTERN.map((group, index) => {
|
|
15
17
|
const value = values[index];
|
|
16
18
|
const maximum = Math.max(group.from, group.to);
|
|
@@ -25,7 +27,7 @@ export function ComposerVoiceWave() {
|
|
|
25
27
|
if (!reducedMotion) animations.forEach(animation => animation.start());
|
|
26
28
|
return () => animations.forEach(animation => animation.stop());
|
|
27
29
|
// 波形规格固定,输入文字更新不重启装饰动画。
|
|
28
|
-
}, [reducedMotion, values]);
|
|
30
|
+
}, [active, reducedMotion, values]);
|
|
29
31
|
return /*#__PURE__*/_jsx(View, {
|
|
30
32
|
style: styles.wave,
|
|
31
33
|
pointerEvents: "none",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","Animated","Easing","Platform","View","usePrefersReducedMotion","useThemedStyles","COMPOSER_VOICE_WAVE_PATTERN","COMPOSER_VOICE_WAVE_STAGGER_MS","createStyles","jsx","_jsx","ComposerVoiceWave","styles","reducedMotion","values","map","group","Value","from","Math","max","to","animations","index","value","maximum","setValue","sequence","delay","loop","height","timing","toValue","duration","easing","inOut","ease","useNativeDriver","OS","forEach","animation","start","stop","style","wave","pointerEvents","accessibilityElementsHidden","importantForAccessibility","children","waveBar","transform","scaleY"],"sourceRoot":"../../../../src","sources":["components/Composer/ComposerVoiceWave.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,QAAQ,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,IAAI,QAAQ,cAAc;AAC/D,SACEC,uBAAuB,EACvBC,eAAe,QACV,2BAA2B;AAClC,SACEC,2BAA2B,EAC3BC,8BAA8B,QACzB,gBAAa;AACpB,SAASC,YAAY,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAExC,OAAO,SAASC,iBAAiBA,CAAA,EAAG;EAClC,MAAMC,MAAM,GAAGP,eAAe,CAACG,YAAY,CAAC;EAC5C,MAAMK,aAAa,
|
|
1
|
+
{"version":3,"names":["useEffect","useState","Animated","Easing","Platform","View","usePrefersReducedMotion","useMotionActive","useThemedStyles","COMPOSER_VOICE_WAVE_PATTERN","COMPOSER_VOICE_WAVE_STAGGER_MS","createStyles","jsx","_jsx","ComposerVoiceWave","styles","reducedMotion","active","values","map","group","Value","from","Math","max","to","animations","index","value","maximum","setValue","sequence","delay","loop","height","timing","toValue","duration","easing","inOut","ease","useNativeDriver","OS","forEach","animation","start","stop","style","wave","pointerEvents","accessibilityElementsHidden","importantForAccessibility","children","waveBar","transform","scaleY"],"sourceRoot":"../../../../src","sources":["components/Composer/ComposerVoiceWave.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,6 +19,20 @@ export function MarkdownContent({
|
|
|
19
19
|
const styles = useThemedStyles(outgoing ? createOutgoingStyles : createStyles);
|
|
20
20
|
const markdown = useMemo(() => {
|
|
21
21
|
const instance = new Renderer();
|
|
22
|
+
const renderList = instance.list.bind(instance);
|
|
23
|
+
instance.list = (ordered, items, listStyle, textStyle, startIndex = 1) => {
|
|
24
|
+
if (!ordered) return renderList(ordered, items, listStyle, textStyle, startIndex);
|
|
25
|
+
// 每行独立保留编号宽度,追加两位数编号不再挤压已有正文。
|
|
26
|
+
return items.map((item, index) => {
|
|
27
|
+
const content = /*#__PURE__*/isValidElement(item) ? /*#__PURE__*/cloneElement(item, {
|
|
28
|
+
key: index
|
|
29
|
+
}) : item;
|
|
30
|
+
const row = renderList(true, [content], listStyle, textStyle, startIndex + index);
|
|
31
|
+
return /*#__PURE__*/isValidElement(row) ? /*#__PURE__*/cloneElement(row, {
|
|
32
|
+
key: index
|
|
33
|
+
}) : row;
|
|
34
|
+
});
|
|
35
|
+
};
|
|
22
36
|
const renderCode = instance.code.bind(instance);
|
|
23
37
|
instance.code = (value, language, containerStyle, textStyle) => renderCode(value, language, containerStyle, {
|
|
24
38
|
...textStyle,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Children","cloneElement","Fragment","isValidElement","useMemo","Pressable","Text","View","Renderer","useMarkdown","useTheme","useThemedStyles","createStyles","createOutgoingStyles","MarkdownImage","jsx","_jsx","MarkdownContent","text","onLinkPress","outgoing","style","scheme","styles","markdown","instance","
|
|
1
|
+
{"version":3,"names":["Children","cloneElement","Fragment","isValidElement","useMemo","Pressable","Text","View","Renderer","useMarkdown","useTheme","useThemedStyles","createStyles","createOutgoingStyles","MarkdownImage","jsx","_jsx","MarkdownContent","text","onLinkPress","outgoing","style","scheme","styles","markdown","instance","renderList","list","bind","ordered","items","listStyle","textStyle","startIndex","map","item","index","content","key","row","renderCode","code","value","language","containerStyle","codeText","renderTable","table","args","children","getKey","renderImage","image","uri","alt","imageStyle","title","endsWith","undefined","label","link","href","linkStyle","selectable","accessibilityRole","accessibilityLabel","onPress","event","stopPropagation","linkImage","renderer","nodes","colorScheme","toArray","length"],"sourceRoot":"../../../../../src","sources":["components/Message/MarkdownContent/MarkdownContent.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useState } from 'react';
|
|
4
4
|
import { Animated, Easing, Platform, Text, View } from 'react-native';
|
|
5
|
-
import { usePrefersReducedMotion, useThemedStyles } from '@unif/react-native-design';
|
|
5
|
+
import { usePrefersReducedMotion, useMotionActive, useThemedStyles } from '@unif/react-native-design';
|
|
6
6
|
import { MESSAGE_WAITING_DOT_DELAYS, MESSAGE_WAITING_DOT_DURATION, MESSAGE_WAITING_DOT_MIN_OPACITY } from "./constants.js";
|
|
7
7
|
import { createStyles } from "./styles.js";
|
|
8
8
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -11,8 +11,10 @@ export function MessageWaiting({
|
|
|
11
11
|
}) {
|
|
12
12
|
const styles = useThemedStyles(createStyles);
|
|
13
13
|
const reducedMotion = usePrefersReducedMotion();
|
|
14
|
+
const active = useMotionActive();
|
|
14
15
|
const [values] = useState(() => MESSAGE_WAITING_DOT_DELAYS.map(() => new Animated.Value(1)));
|
|
15
16
|
useEffect(() => {
|
|
17
|
+
if (!active) return;
|
|
16
18
|
const animations = MESSAGE_WAITING_DOT_DELAYS.map((delay, index) => {
|
|
17
19
|
const value = values[index];
|
|
18
20
|
value.setValue(reducedMotion ? 1 : MESSAGE_WAITING_DOT_MIN_OPACITY);
|
|
@@ -25,7 +27,7 @@ export function MessageWaiting({
|
|
|
25
27
|
});
|
|
26
28
|
if (!reducedMotion) animations.forEach(animation => animation.start());
|
|
27
29
|
return () => animations.forEach(animation => animation.stop());
|
|
28
|
-
}, [reducedMotion, values]);
|
|
30
|
+
}, [active, reducedMotion, values]);
|
|
29
31
|
return /*#__PURE__*/_jsxs(View, {
|
|
30
32
|
style: styles.waitingRow,
|
|
31
33
|
accessible: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","Animated","Easing","Platform","Text","View","usePrefersReducedMotion","useThemedStyles","MESSAGE_WAITING_DOT_DELAYS","MESSAGE_WAITING_DOT_DURATION","MESSAGE_WAITING_DOT_MIN_OPACITY","createStyles","jsx","_jsx","jsxs","_jsxs","MessageWaiting","label","styles","reducedMotion","values","map","Value","animations","delay","index","value","setValue","sequence","loop","toValue","timing","duration","easing","inOut","ease","useNativeDriver","OS","forEach","animation","start","stop","style","waitingRow","accessible","accessibilityLabel","accessibilityState","busy","children","waitingDots","pointerEvents","accessibilityElementsHidden","importantForAccessibility","opacity","testID","waitingDot","waitingLabel"],"sourceRoot":"../../../../src","sources":["components/Message/MessageWaiting.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,QAAQ,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACrE,SACEC,uBAAuB,EACvBC,eAAe,QACV,2BAA2B;AAClC,SACEC,0BAA0B,EAC1BC,4BAA4B,EAC5BC,+BAA+B,QAC1B,gBAAa;AACpB,SAASC,YAAY,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGxC,OAAO,SAASC,cAAcA,CAAC;EAAEC;AAA2B,CAAC,EAAE;EAC7D,MAAMC,MAAM,GAAGX,eAAe,CAACI,YAAY,CAAC;EAC5C,MAAMQ,aAAa,
|
|
1
|
+
{"version":3,"names":["useEffect","useState","Animated","Easing","Platform","Text","View","usePrefersReducedMotion","useMotionActive","useThemedStyles","MESSAGE_WAITING_DOT_DELAYS","MESSAGE_WAITING_DOT_DURATION","MESSAGE_WAITING_DOT_MIN_OPACITY","createStyles","jsx","_jsx","jsxs","_jsxs","MessageWaiting","label","styles","reducedMotion","active","values","map","Value","animations","delay","index","value","setValue","sequence","loop","toValue","timing","duration","easing","inOut","ease","useNativeDriver","OS","forEach","animation","start","stop","style","waitingRow","accessible","accessibilityLabel","accessibilityState","busy","children","waitingDots","pointerEvents","accessibilityElementsHidden","importantForAccessibility","opacity","testID","waitingDot","waitingLabel"],"sourceRoot":"../../../../src","sources":["components/Message/MessageWaiting.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerIconAction.d.ts","sourceRoot":"","sources":["../../../../../src/components/Composer/ComposerIconAction.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ComposerIconAction.d.ts","sourceRoot":"","sources":["../../../../../src/components/Composer/ComposerIconAction.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAS,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAgB,EAChB,IAAY,EACZ,QAAQ,EACR,MAAe,GAChB,EAAE,uBAAuB,+BAgEzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerVoiceWave.d.ts","sourceRoot":"","sources":["../../../../../src/components/Composer/ComposerVoiceWave.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ComposerVoiceWave.d.ts","sourceRoot":"","sources":["../../../../../src/components/Composer/ComposerVoiceWave.tsx"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,gCAwDhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownContent.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Message/MarkdownContent/MarkdownContent.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,oBAAoB,EAAyB,MAAM,YAAS,CAAC;AAG3E,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,WAAW,EACX,QAAgB,EAChB,KAAK,GACN,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"MarkdownContent.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Message/MarkdownContent/MarkdownContent.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,oBAAoB,EAAyB,MAAM,YAAS,CAAC;AAG3E,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,WAAW,EACX,QAAgB,EAChB,KAAK,GACN,EAAE,oBAAoB,sCAoGtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageWaiting.d.ts","sourceRoot":"","sources":["../../../../../src/components/Message/MessageWaiting.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessageWaiting.d.ts","sourceRoot":"","sources":["../../../../../src/components/Message/MessageWaiting.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAS,CAAC;AAEnD,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,mBAAmB,+BAuD5D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unif/react-native-chat",
|
|
3
|
-
"version": "4.6.
|
|
3
|
+
"version": "4.6.4",
|
|
4
4
|
"description": "Unif React Native 聊天组件:消息列表、输入、附件与交互反馈",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -69,8 +69,9 @@
|
|
|
69
69
|
"@release-it/conventional-changelog": "^12.0.0",
|
|
70
70
|
"@testing-library/react-native": "13.3.3",
|
|
71
71
|
"@types/react": "^19.2.0",
|
|
72
|
-
"@unif/react-native-design": "^1.
|
|
72
|
+
"@unif/react-native-design": "^1.18.0",
|
|
73
73
|
"@unif/react-native-icons": "^0.5.0",
|
|
74
|
+
"@unif/react-native-logger": "^0.2.2",
|
|
74
75
|
"commitlint": "^21.2.1",
|
|
75
76
|
"del-cli": "^7.0.0",
|
|
76
77
|
"eslint": "^9.39.5",
|
|
@@ -99,7 +100,7 @@
|
|
|
99
100
|
},
|
|
100
101
|
"peerDependencies": {
|
|
101
102
|
"@callstack/liquid-glass": ">=0.8.2 <0.9.0",
|
|
102
|
-
"@unif/react-native-design": "^1.
|
|
103
|
+
"@unif/react-native-design": "^1.18.0",
|
|
103
104
|
"@unif/react-native-icons": ">=0.3.0 <1.0.0",
|
|
104
105
|
"react": ">=19.2.3 <20.0.0",
|
|
105
106
|
"react-native": ">=0.86.0",
|
|
@@ -135,7 +136,7 @@
|
|
|
135
136
|
},
|
|
136
137
|
"release-it": {
|
|
137
138
|
"git": {
|
|
138
|
-
"commitMessage": "chore: release ${version} [skip ci]",
|
|
139
|
+
"commitMessage": "chore: release ${version} 发布版本 [skip ci]",
|
|
139
140
|
"tagName": "v${version}",
|
|
140
141
|
"requireCommits": true
|
|
141
142
|
},
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { ActivityIndicator, Pressable, View } from 'react-native';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
useColors,
|
|
4
|
+
useMotionActive,
|
|
5
|
+
useThemedStyles,
|
|
6
|
+
} from '@unif/react-native-design';
|
|
3
7
|
import {
|
|
4
8
|
COMPOSER_ACTION_ICON_SIZE,
|
|
5
9
|
COMPOSER_PRIMARY_ICON_SIZE,
|
|
@@ -19,6 +23,7 @@ export function ComposerIconAction({
|
|
|
19
23
|
visual = 'icon',
|
|
20
24
|
}: ComposerIconActionProps) {
|
|
21
25
|
const colors = useColors();
|
|
26
|
+
const motionActive = useMotionActive();
|
|
22
27
|
const styles = useThemedStyles(createStyles);
|
|
23
28
|
const unavailable = disabled || busy;
|
|
24
29
|
const { mousePressed, ...mouseHandlers } = useMousePress(unavailable);
|
|
@@ -55,7 +60,12 @@ export function ComposerIconAction({
|
|
|
55
60
|
]}
|
|
56
61
|
>
|
|
57
62
|
{busy ? (
|
|
58
|
-
<ActivityIndicator
|
|
63
|
+
<ActivityIndicator
|
|
64
|
+
size="small"
|
|
65
|
+
color={color}
|
|
66
|
+
animating={motionActive}
|
|
67
|
+
hidesWhenStopped={false}
|
|
68
|
+
/>
|
|
59
69
|
) : (
|
|
60
70
|
<Glyph
|
|
61
71
|
size={
|
|
@@ -2,6 +2,7 @@ import { useEffect, useState } from 'react';
|
|
|
2
2
|
import { Animated, Easing, Platform, View } from 'react-native';
|
|
3
3
|
import {
|
|
4
4
|
usePrefersReducedMotion,
|
|
5
|
+
useMotionActive,
|
|
5
6
|
useThemedStyles,
|
|
6
7
|
} from '@unif/react-native-design';
|
|
7
8
|
import {
|
|
@@ -13,12 +14,14 @@ import { createStyles } from './styles';
|
|
|
13
14
|
export function ComposerVoiceWave() {
|
|
14
15
|
const styles = useThemedStyles(createStyles);
|
|
15
16
|
const reducedMotion = usePrefersReducedMotion();
|
|
17
|
+
const active = useMotionActive();
|
|
16
18
|
const [values] = useState(() =>
|
|
17
19
|
COMPOSER_VOICE_WAVE_PATTERN.map(
|
|
18
20
|
(group) => new Animated.Value(group.from / Math.max(group.from, group.to))
|
|
19
21
|
)
|
|
20
22
|
);
|
|
21
23
|
useEffect(() => {
|
|
24
|
+
if (!active) return;
|
|
22
25
|
const animations = COMPOSER_VOICE_WAVE_PATTERN.map((group, index) => {
|
|
23
26
|
const value = values[index]!;
|
|
24
27
|
const maximum = Math.max(group.from, group.to);
|
|
@@ -42,7 +45,7 @@ export function ComposerVoiceWave() {
|
|
|
42
45
|
if (!reducedMotion) animations.forEach((animation) => animation.start());
|
|
43
46
|
return () => animations.forEach((animation) => animation.stop());
|
|
44
47
|
// 波形规格固定,输入文字更新不重启装饰动画。
|
|
45
|
-
}, [reducedMotion, values]);
|
|
48
|
+
}, [active, reducedMotion, values]);
|
|
46
49
|
return (
|
|
47
50
|
<View
|
|
48
51
|
style={styles.wave}
|
|
@@ -24,6 +24,25 @@ export function MarkdownContent({
|
|
|
24
24
|
);
|
|
25
25
|
const markdown = useMemo(() => {
|
|
26
26
|
const instance = new Renderer();
|
|
27
|
+
const renderList = instance.list.bind(instance);
|
|
28
|
+
instance.list = (ordered, items, listStyle, textStyle, startIndex = 1) => {
|
|
29
|
+
if (!ordered)
|
|
30
|
+
return renderList(ordered, items, listStyle, textStyle, startIndex);
|
|
31
|
+
// 每行独立保留编号宽度,追加两位数编号不再挤压已有正文。
|
|
32
|
+
return items.map((item, index) => {
|
|
33
|
+
const content = isValidElement(item)
|
|
34
|
+
? cloneElement(item, { key: index })
|
|
35
|
+
: item;
|
|
36
|
+
const row = renderList(
|
|
37
|
+
true,
|
|
38
|
+
[content],
|
|
39
|
+
listStyle,
|
|
40
|
+
textStyle,
|
|
41
|
+
startIndex + index
|
|
42
|
+
);
|
|
43
|
+
return isValidElement(row) ? cloneElement(row, { key: index }) : row;
|
|
44
|
+
});
|
|
45
|
+
};
|
|
27
46
|
const renderCode = instance.code.bind(instance);
|
|
28
47
|
instance.code = (value, language, containerStyle, textStyle) =>
|
|
29
48
|
renderCode(value, language, containerStyle, {
|
|
@@ -2,6 +2,7 @@ import { useEffect, useState } from 'react';
|
|
|
2
2
|
import { Animated, Easing, Platform, Text, View } from 'react-native';
|
|
3
3
|
import {
|
|
4
4
|
usePrefersReducedMotion,
|
|
5
|
+
useMotionActive,
|
|
5
6
|
useThemedStyles,
|
|
6
7
|
} from '@unif/react-native-design';
|
|
7
8
|
import {
|
|
@@ -15,10 +16,12 @@ import type { MessageWaitingProps } from './types';
|
|
|
15
16
|
export function MessageWaiting({ label }: MessageWaitingProps) {
|
|
16
17
|
const styles = useThemedStyles(createStyles);
|
|
17
18
|
const reducedMotion = usePrefersReducedMotion();
|
|
19
|
+
const active = useMotionActive();
|
|
18
20
|
const [values] = useState(() =>
|
|
19
21
|
MESSAGE_WAITING_DOT_DELAYS.map(() => new Animated.Value(1))
|
|
20
22
|
);
|
|
21
23
|
useEffect(() => {
|
|
24
|
+
if (!active) return;
|
|
22
25
|
const animations = MESSAGE_WAITING_DOT_DELAYS.map((delay, index) => {
|
|
23
26
|
const value = values[index]!;
|
|
24
27
|
value.setValue(reducedMotion ? 1 : MESSAGE_WAITING_DOT_MIN_OPACITY);
|
|
@@ -40,7 +43,7 @@ export function MessageWaiting({ label }: MessageWaitingProps) {
|
|
|
40
43
|
});
|
|
41
44
|
if (!reducedMotion) animations.forEach((animation) => animation.start());
|
|
42
45
|
return () => animations.forEach((animation) => animation.stop());
|
|
43
|
-
}, [reducedMotion, values]);
|
|
46
|
+
}, [active, reducedMotion, values]);
|
|
44
47
|
return (
|
|
45
48
|
<View
|
|
46
49
|
style={styles.waitingRow}
|