@unif/react-native-chat 4.6.3 → 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 CHANGED
@@ -10,7 +10,7 @@ React Native 聊天 UI 组件,提供消息列表、输入、附件和交互反
10
10
  | ------------ | ------------------ |
11
11
  | React Native | `>=0.86.0` |
12
12
  | React | `>=19.2.3 <20.0.0` |
13
- | Unif Design | `^1.7.0` |
13
+ | Unif Design | `^1.18.0` |
14
14
 
15
15
  ```sh
16
16
  yarn add @unif/react-native-chat
@@ -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,SAASC,SAAS,EAAEC,eAAe,QAAQ,2BAA2B;AACtE,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,GAAGjB,SAAS,CAAC,CAAC;EAC1B,MAAMkB,MAAM,GAAGjB,eAAe,CAACI,YAAY,CAAC;EAC5C,MAAMc,WAAW,GAAGN,QAAQ,IAAIC,IAAI;EACpC,MAAM;IAAEM,YAAY;IAAE,GAAGC;EAAc,CAAC,GAAGf,aAAa,CAACa,WAAW,CAAC;EACrE,MAAMG,OAAO,GAAGN,MAAM,KAAK,SAAS;EACpC,MAAMO,KAAK,GAAGD,OAAO,GACjBT,QAAQ,GACNI,MAAM,CAACO,gBAAgB,GACvBP,MAAM,CAACQ,SAAS,GAClBT,MAAM,KAAK,QAAQ,GACjBC,MAAM,CAACS,eAAe,GACtBT,MAAM,CAACU,UAAU;EACvB,MAAMC,KAAK,GAAGlB,IAAI;EAClB,oBACEF,IAAA,CAACV,SAAS;IACR+B,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAEnB,KAAM;IAC1BoB,kBAAkB,EAAE;MAAElB,QAAQ,EAAEM,WAAW;MAAEL,IAAI;MAAEC;IAAS,CAAE;IAC9DF,QAAQ,EAAEM,WAAY;IACtBP,OAAO,EAAEO,WAAW,GAAGa,SAAS,GAAGpB,OAAQ;IAAA,GACvCS,aAAa;IACjBY,KAAK,EAAEf,MAAM,CAACgB,MAAO;IAAAC,QAAA,EAEpBA,CAAC;MAAEC;IAAQ,CAAC,kBACX5B,IAAA,CAACT,IAAI;MACHsC,aAAa,EAAC,MAAM;MACpBJ,KAAK,EAAE,CACLf,MAAM,CAACoB,YAAY,EACnBhB,OAAO,IAAIJ,MAAM,CAACI,OAAO,EACzBN,MAAM,KAAK,QAAQ,IAAIE,MAAM,CAACqB,MAAM,EACpC,CAACH,OAAO,IAAIhB,YAAY,MACrBE,OAAO,GAAGJ,MAAM,CAACsB,cAAc,GAAGtB,MAAM,CAACuB,aAAa,CAAC,EAC1D5B,QAAQ,KACLS,OAAO,GAAGJ,MAAM,CAACwB,eAAe,GAAGxB,MAAM,CAACyB,cAAc,CAAC,CAC5D;MAAAR,QAAA,EAEDrB,IAAI,gBACHN,IAAA,CAACX,iBAAiB;QAAC+C,IAAI,EAAC,OAAO;QAACrB,KAAK,EAAEA;MAAM,CAAE,CAAC,gBAEhDf,IAAA,CAACoB,KAAK;QACJgB,IAAI,EACFtB,OAAO,GACHnB,0BAA0B,GAC1Ba,MAAM,KAAK,QAAQ,GACjBZ,yBAAyB,GACzBF,yBACP;QACDqB,KAAK,EAAEA,KAAM;QACbU,KAAK,EACHlB,QAAQ,GAAG;UAAE8B,SAAS,EAAE,CAAC;YAAEC,MAAM,EAAE;UAAQ,CAAC;QAAE,CAAC,GAAGd;MACnD,CACF;IACF,CACG;EACP,CACQ,CAAC;AAEhB","ignoreList":[]}
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":"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","ignoreList":[]}
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":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,QAAQ,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,IAAI,QAAQ,cAAc;AAC/D,SACEC,uBAAuB,EACvBC,eAAe,EACfC,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,GAAGV,uBAAuB,CAAC,CAAC;EAC/C,MAAMW,MAAM,GAAGV,eAAe,CAAC,CAAC;EAChC,MAAM,CAACW,MAAM,CAAC,GAAGjB,QAAQ,CAAC,MACxBQ,2BAA2B,CAACU,GAAG,CAC5BC,KAAK,IAAK,IAAIlB,QAAQ,CAACmB,KAAK,CAACD,KAAK,CAACE,IAAI,GAAGC,IAAI,CAACC,GAAG,CAACJ,KAAK,CAACE,IAAI,EAAEF,KAAK,CAACK,EAAE,CAAC,CAC3E,CACF,CAAC;EACDzB,SAAS,CAAC,MAAM;IACd,IAAI,CAACiB,MAAM,EAAE;IACb,MAAMS,UAAU,GAAGjB,2BAA2B,CAACU,GAAG,CAAC,CAACC,KAAK,EAAEO,KAAK,KAAK;MACnE,MAAMC,KAAK,GAAGV,MAAM,CAACS,KAAK,CAAE;MAC5B,MAAME,OAAO,GAAGN,IAAI,CAACC,GAAG,CAACJ,KAAK,CAACE,IAAI,EAAEF,KAAK,CAACK,EAAE,CAAC;MAC9CG,KAAK,CAACE,QAAQ,CAAC,CAACd,aAAa,GAAGI,KAAK,CAACK,EAAE,GAAGL,KAAK,CAACE,IAAI,IAAIO,OAAO,CAAC;MACjE,OAAO3B,QAAQ,CAAC6B,QAAQ,CAAC,CACvB7B,QAAQ,CAAC8B,KAAK,CAACL,KAAK,GAAGjB,8BAA8B,CAAC,EACtDR,QAAQ,CAAC+B,IAAI,CACX/B,QAAQ,CAAC6B,QAAQ,CACf,CAACX,KAAK,CAACK,EAAE,EAAEL,KAAK,CAACE,IAAI,CAAC,CAACH,GAAG,CAAEe,MAAM,IAChChC,QAAQ,CAACiC,MAAM,CAACP,KAAK,EAAE;QACrBQ,OAAO,EAAEF,MAAM,GAAGL,OAAO;QACzBQ,QAAQ,EAAEjB,KAAK,CAACiB,QAAQ,GAAG,CAAC;QAC5BC,MAAM,EAAEnC,MAAM,CAACoC,KAAK,CAACpC,MAAM,CAACqC,IAAI,CAAC;QACjCC,eAAe,EAAErC,QAAQ,CAACsC,EAAE,KAAK;MACnC,CAAC,CACH,CACF,CACF,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;IACF,IAAI,CAAC1B,aAAa,EAAEU,UAAU,CAACiB,OAAO,CAAEC,SAAS,IAAKA,SAAS,CAACC,KAAK,CAAC,CAAC,CAAC;IACxE,OAAO,MAAMnB,UAAU,CAACiB,OAAO,CAAEC,SAAS,IAAKA,SAAS,CAACE,IAAI,CAAC,CAAC,CAAC;IAChE;EACF,CAAC,EAAE,CAAC7B,MAAM,EAAED,aAAa,EAAEE,MAAM,CAAC,CAAC;EACnC,oBACEL,IAAA,CAACR,IAAI;IACH0C,KAAK,EAAEhC,MAAM,CAACiC,IAAK;IACnBC,aAAa,EAAC,MAAM;IACpBC,2BAA2B;IAC3BC,yBAAyB,EAAC,qBAAqB;IAAAC,QAAA,EAE9C3C,2BAA2B,CAACU,GAAG,CAAC,CAACC,KAAK,EAAEO,KAAK,kBAC5Cd,IAAA,CAACX,QAAQ,CAACG,IAAI;MAEZ0C,KAAK,EAAE,CACLhC,MAAM,CAACsC,OAAO,EACd;QACEnB,MAAM,EAAEX,IAAI,CAACC,GAAG,CAACJ,KAAK,CAACE,IAAI,EAAEF,KAAK,CAACK,EAAE,CAAC;QACtC6B,SAAS,EAAE,CAAC;UAAEC,MAAM,EAAErC,MAAM,CAACS,KAAK;QAAG,CAAC;MACxC,CAAC;IACD,GAPGA,KAQN,CACF;EAAC,CACE,CAAC;AAEX","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":"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","ignoreList":[]}
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":"AASA,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,+BA0DzB"}
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":"AAYA,wBAAgB,iBAAiB,gCAsDhC"}
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":"MessageWaiting.d.ts","sourceRoot":"","sources":["../../../../../src/components/Message/MessageWaiting.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAS,CAAC;AAEnD,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,mBAAmB,+BAqD5D"}
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",
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.7.0",
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.7.0",
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",
@@ -1,5 +1,9 @@
1
1
  import { ActivityIndicator, Pressable, View } from 'react-native';
2
- import { useColors, useThemedStyles } from '@unif/react-native-design';
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 size="small" color={color} />
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}
@@ -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}