@unif/react-native-design 0.31.3 → 0.32.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.
- package/README.md +6 -0
- package/lib/module/components/ui/Avatar/Avatar.js +2 -1
- package/lib/module/components/ui/Avatar/Avatar.js.map +1 -1
- package/lib/module/components/ui/Avatar/geometry.js +43 -0
- package/lib/module/components/ui/Avatar/geometry.js.map +1 -0
- package/lib/module/components/ui/Avatar/styles.js +1 -41
- package/lib/module/components/ui/Avatar/styles.js.map +1 -1
- package/lib/module/components/ui/AvatarGroup/AvatarGroup.js +1 -1
- package/lib/module/components/ui/AvatarGroup/AvatarGroup.js.map +1 -1
- package/lib/module/components/ui/CircularProgress/CircularProgress.js +14 -25
- package/lib/module/components/ui/CircularProgress/CircularProgress.js.map +1 -1
- package/lib/module/components/ui/CircularProgress/normalizeCircularProgress.js.map +1 -1
- package/lib/module/components/ui/CircularProgress/styles.js +24 -0
- package/lib/module/components/ui/CircularProgress/styles.js.map +1 -0
- package/lib/module/components/ui/Pulse/PulseDot.js +5 -5
- package/lib/module/components/ui/Pulse/PulseDot.js.map +1 -1
- package/lib/module/components/ui/Pulse/constants.js +15 -0
- package/lib/module/components/ui/Pulse/constants.js.map +1 -0
- package/lib/module/components/ui/Pulse/usePulse.js +4 -62
- package/lib/module/components/ui/Pulse/usePulse.js.map +1 -1
- package/lib/module/components/ui/Skeleton/Skeleton.js +6 -2
- package/lib/module/components/ui/Skeleton/Skeleton.js.map +1 -1
- package/lib/module/components/ui/Skeleton/constants.js +9 -0
- package/lib/module/components/ui/Skeleton/constants.js.map +1 -0
- package/lib/module/components/ui/TextField/TextFieldBase.js +21 -4
- package/lib/module/components/ui/TextField/TextFieldBase.js.map +1 -1
- package/lib/module/components/ui/TextField/constants.js +7 -0
- package/lib/module/components/ui/TextField/constants.js.map +1 -0
- package/lib/module/components/ui/TextField/styles.js +10 -2
- package/lib/module/components/ui/TextField/styles.js.map +1 -1
- package/lib/module/components/ui/TextField/useMultilineLayout.js +18 -0
- package/lib/module/components/ui/TextField/useMultilineLayout.js.map +1 -0
- package/lib/module/components/ui/TextField/useMultilineLayout.web.js +44 -0
- package/lib/module/components/ui/TextField/useMultilineLayout.web.js.map +1 -0
- package/lib/module/components/ui/Thumbnail/Thumbnail.js +13 -6
- package/lib/module/components/ui/Thumbnail/Thumbnail.js.map +1 -1
- package/lib/module/components/ui/Thumbnail/constants.js +22 -0
- package/lib/module/components/ui/Thumbnail/constants.js.map +1 -0
- package/lib/module/components/ui/Thumbnail/normalize.js +30 -1
- package/lib/module/components/ui/Thumbnail/normalize.js.map +1 -1
- package/lib/module/components/ui/Thumbnail/styles.js +5 -28
- package/lib/module/components/ui/Thumbnail/styles.js.map +1 -1
- package/lib/module/components/ui/index.js.map +1 -1
- package/lib/module/components/ui/shared/pulse/constants.js +5 -0
- package/lib/module/components/ui/shared/pulse/constants.js.map +1 -0
- package/lib/module/components/ui/{Pulse → shared/pulse}/normalizePulseOptions.js +2 -12
- package/lib/module/components/ui/shared/pulse/normalizePulseOptions.js.map +1 -0
- package/lib/module/components/ui/shared/pulse/types.js +2 -0
- package/lib/module/components/ui/shared/pulse/types.js.map +1 -0
- package/lib/module/components/ui/shared/pulse/usePulseAnimation.js +30 -0
- package/lib/module/components/ui/shared/pulse/usePulseAnimation.js.map +1 -0
- package/lib/module/components/ui/{Pulse → shared/pulse}/usePulseDriver.js +1 -1
- package/lib/module/components/ui/shared/pulse/usePulseDriver.js.map +1 -0
- package/lib/module/components/ui/{Pulse → shared/pulse}/usePulseDriver.web.js +2 -17
- package/lib/module/components/ui/shared/pulse/usePulseDriver.web.js.map +1 -0
- package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Avatar/geometry.d.ts +7 -0
- package/lib/typescript/src/components/ui/Avatar/geometry.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Avatar/styles.d.ts +1 -9
- package/lib/typescript/src/components/ui/Avatar/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Avatar/types.d.ts +7 -2
- package/lib/typescript/src/components/ui/Avatar/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/CircularProgress/CircularProgress.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/CircularProgress/normalizeCircularProgress.d.ts +2 -14
- package/lib/typescript/src/components/ui/CircularProgress/normalizeCircularProgress.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/CircularProgress/styles.d.ts +19 -0
- package/lib/typescript/src/components/ui/CircularProgress/styles.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/CircularProgress/types.d.ts +17 -2
- package/lib/typescript/src/components/ui/CircularProgress/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Pulse/constants.d.ts +4 -0
- package/lib/typescript/src/components/ui/Pulse/constants.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Pulse/types.d.ts +6 -6
- package/lib/typescript/src/components/ui/Pulse/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Pulse/usePulse.d.ts +0 -9
- package/lib/typescript/src/components/ui/Pulse/usePulse.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Skeleton/constants.d.ts +3 -0
- package/lib/typescript/src/components/ui/Skeleton/constants.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Skeleton/types.d.ts +2 -2
- package/lib/typescript/src/components/ui/Skeleton/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/TextField/constants.d.ts +4 -0
- package/lib/typescript/src/components/ui/TextField/constants.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/TextField/styles.d.ts +6 -0
- package/lib/typescript/src/components/ui/TextField/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/TextField/types.d.ts +36 -11
- package/lib/typescript/src/components/ui/TextField/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/TextField/useMultilineLayout.d.ts +4 -0
- package/lib/typescript/src/components/ui/TextField/useMultilineLayout.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/TextField/useMultilineLayout.web.d.ts +4 -0
- package/lib/typescript/src/components/ui/TextField/useMultilineLayout.web.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Textarea/types.d.ts +4 -2
- package/lib/typescript/src/components/ui/Textarea/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Thumbnail/constants.d.ts +4 -0
- package/lib/typescript/src/components/ui/Thumbnail/constants.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Thumbnail/index.d.ts +1 -1
- package/lib/typescript/src/components/ui/Thumbnail/index.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Thumbnail/normalize.d.ts +2 -6
- package/lib/typescript/src/components/ui/Thumbnail/normalize.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts +9 -8
- package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Thumbnail/types.d.ts +23 -5
- package/lib/typescript/src/components/ui/Thumbnail/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/index.d.ts +1 -1
- package/lib/typescript/src/components/ui/index.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/shared/pulse/constants.d.ts +2 -0
- package/lib/typescript/src/components/ui/shared/pulse/constants.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/shared/pulse/normalizePulseOptions.d.ts +7 -0
- package/lib/typescript/src/components/ui/shared/pulse/normalizePulseOptions.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/shared/pulse/types.d.ts +17 -0
- package/lib/typescript/src/components/ui/shared/pulse/types.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/shared/pulse/usePulseAnimation.d.ts +8 -0
- package/lib/typescript/src/components/ui/shared/pulse/usePulseAnimation.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/{Pulse → shared/pulse}/usePulseDriver.d.ts +1 -1
- package/lib/typescript/src/components/ui/shared/pulse/usePulseDriver.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/shared/pulse/usePulseDriver.web.d.ts +7 -0
- package/lib/typescript/src/components/ui/shared/pulse/usePulseDriver.web.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/components/ui/Avatar/Avatar.tsx +2 -6
- package/src/components/ui/Avatar/geometry.ts +30 -0
- package/src/components/ui/Avatar/styles.ts +2 -30
- package/src/components/ui/Avatar/types.ts +8 -2
- package/src/components/ui/AvatarGroup/AvatarGroup.tsx +1 -1
- package/src/components/ui/CircularProgress/CircularProgress.tsx +20 -26
- package/src/components/ui/CircularProgress/normalizeCircularProgress.ts +7 -15
- package/src/components/ui/CircularProgress/styles.ts +13 -0
- package/src/components/ui/CircularProgress/types.ts +19 -2
- package/src/components/ui/Pulse/PulseDot.tsx +6 -5
- package/src/components/ui/Pulse/constants.ts +14 -0
- package/src/components/ui/Pulse/types.ts +6 -6
- package/src/components/ui/Pulse/usePulse.ts +4 -81
- package/src/components/ui/Skeleton/Skeleton.tsx +6 -6
- package/src/components/ui/Skeleton/constants.ts +8 -0
- package/src/components/ui/Skeleton/types.ts +2 -2
- package/src/components/ui/TextField/TextFieldBase.tsx +28 -4
- package/src/components/ui/TextField/constants.ts +6 -0
- package/src/components/ui/TextField/styles.ts +8 -2
- package/src/components/ui/TextField/types.ts +41 -11
- package/src/components/ui/TextField/useMultilineLayout.ts +20 -0
- package/src/components/ui/TextField/useMultilineLayout.web.ts +59 -0
- package/src/components/ui/Textarea/types.ts +9 -6
- package/src/components/ui/Thumbnail/Thumbnail.tsx +19 -5
- package/src/components/ui/Thumbnail/constants.ts +24 -0
- package/src/components/ui/Thumbnail/index.ts +1 -0
- package/src/components/ui/Thumbnail/normalize.ts +38 -19
- package/src/components/ui/Thumbnail/styles.ts +6 -17
- package/src/components/ui/Thumbnail/types.ts +27 -5
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/shared/pulse/constants.ts +2 -0
- package/src/components/ui/shared/pulse/normalizePulseOptions.ts +48 -0
- package/src/components/ui/shared/pulse/types.ts +18 -0
- package/src/components/ui/shared/pulse/usePulseAnimation.ts +29 -0
- package/src/components/ui/{Pulse → shared/pulse}/usePulseDriver.ts +2 -2
- package/src/components/ui/{Pulse → shared/pulse}/usePulseDriver.web.ts +4 -19
- package/lib/module/components/ui/Pulse/normalizePulseOptions.js.map +0 -1
- package/lib/module/components/ui/Pulse/usePulseDriver.js.map +0 -1
- package/lib/module/components/ui/Pulse/usePulseDriver.web.js.map +0 -1
- package/lib/typescript/src/components/ui/Pulse/normalizePulseOptions.d.ts +0 -32
- package/lib/typescript/src/components/ui/Pulse/normalizePulseOptions.d.ts.map +0 -1
- package/lib/typescript/src/components/ui/Pulse/usePulseDriver.d.ts.map +0 -1
- package/lib/typescript/src/components/ui/Pulse/usePulseDriver.web.d.ts +0 -18
- package/lib/typescript/src/components/ui/Pulse/usePulseDriver.web.d.ts.map +0 -1
- package/src/components/ui/Pulse/normalizePulseOptions.ts +0 -76
package/README.md
CHANGED
|
@@ -128,6 +128,12 @@ invalid-image fixture
|
|
|
128
128
|
Jest 只证明 source wiring 以及合成 load/error event 后的组件状态;真实 HTTPS、缓存和 native
|
|
129
129
|
decode 仍按 `example/README.md` 的 Android/iOS 手工矩阵标记为待执行。
|
|
130
130
|
|
|
131
|
+
## 多行输入与媒体消费
|
|
132
|
+
|
|
133
|
+
Textarea 的 `minHeight` / `maxHeight` 约束完整输入表面,随内容、宽度和应用字号测量,支持缩短及外部清空;键盘避让与发送由消费者负责。Thumbnail 保留原三档默认,新增 `Readonly<ThumbnailDimensions>` 实际尺寸与失败 `fallback`。CircularProgress 百分比随应用字号缩放一次,小环配大字时外层自然增大,环与描边不变。
|
|
134
|
+
|
|
135
|
+
详细契约和可操作样例见 Website 的 Textarea、Thumbnail、Loading 页面;本地验证依据见 [Design 契约验证](docs/design-contract-verification.md)。
|
|
136
|
+
|
|
131
137
|
## 文档
|
|
132
138
|
|
|
133
139
|
- **文档站**(快速开始 · 组件 API · 设计令牌 · 设计原则):https://unif-design.github.io/react-native-design/
|
|
@@ -5,7 +5,8 @@ import { Text, View } from 'react-native';
|
|
|
5
5
|
import { scaleFontMetric, useColors, useFontScale } from "../../../theme/index.js";
|
|
6
6
|
import { resolveImageSource } from "../../../utils/imageSource.js";
|
|
7
7
|
import { ImageAttempt } from "../shared/ImageAttempt.js";
|
|
8
|
-
import { paletteFor,
|
|
8
|
+
import { paletteFor, styles } from "./styles.js";
|
|
9
|
+
import { resolveAvatarBorderRadius, sizingFor } from "./geometry.js";
|
|
9
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
11
|
/**
|
|
11
12
|
* 头像 —— 2 种形态 × 5 档尺寸 × 4 种配色 × 可选图片 source。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Text","View","scaleFontMetric","useColors","useFontScale","resolveImageSource","ImageAttempt","paletteFor","
|
|
1
|
+
{"version":3,"names":["React","Text","View","scaleFontMetric","useColors","useFontScale","resolveImageSource","ImageAttempt","paletteFor","styles","resolveAvatarBorderRadius","sizingFor","jsx","_jsx","Avatar","label","size","shape","variant","source","style","testID","c","fontScale","dims","palette","labelFontSize","fs","resolvedSource","fallback","fontSize","color","fg","numberOfLines","children","base","width","box","height","borderRadius","backgroundColor","bg","accessible","accessibilityLabel","undefined","image","resizeMode","key"],"sourceRoot":"../../../../../src","sources":["components/ui/Avatar/Avatar.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACzC,SAASC,eAAe,EAAEC,SAAS,EAAEC,YAAY,QAAQ,yBAAgB;AACzE,SAASC,kBAAkB,QAAQ,+BAA4B;AAC/D,SAASC,YAAY,QAAQ,2BAAwB;AACrD,SAASC,UAAU,EAAEC,MAAM,QAAQ,aAAU;AAC7C,SAASC,yBAAyB,EAAEC,SAAS,QAAQ,eAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGlE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAAC;EACrBC,KAAK;EACLC,IAAI,GAAG,IAAI;EACXC,KAAK,GAAG,QAAQ;EAChBC,OAAO,GAAG,SAAS;EACnBC,MAAM;EACNC,KAAK;EACLC;AACW,CAAC,EAAqB;EACjC,MAAMC,CAAC,GAAGlB,SAAS,CAAC,CAAC;EACrB,MAAMmB,SAAS,GAAGlB,YAAY,CAAC,CAAC;EAChC,MAAMmB,IAAI,GAAGb,SAAS,CAACK,IAAI,CAAC;EAC5B,MAAMS,OAAO,GAAGjB,UAAU,CAACU,OAAO,EAAEI,CAAC,CAAC;EACtC,MAAMI,aAAa,GAAGvB,eAAe,CAACqB,IAAI,CAACG,EAAE,EAAEJ,SAAS,CAAC;EACzD,MAAMK,cAAc,GAAGtB,kBAAkB,CAACa,MAAM,CAAC;EACjD,MAAMU,QAAQ,gBACZhB,IAAA,CAACZ,IAAI;IACHmB,KAAK,EAAE,CAACX,MAAM,CAACM,KAAK,EAAE;MAAEe,QAAQ,EAAEJ,aAAa;MAAEK,KAAK,EAAEN,OAAO,CAACO;IAAG,CAAC,CAAE;IACtEC,aAAa,EAAE,CAAE;IAAAC,QAAA,EAEhBnB;EAAK,CACF,CACP;EAED,oBACEF,IAAA,CAACX,IAAI;IACHkB,KAAK,EAAE,CACLX,MAAM,CAAC0B,IAAI,EACX;MACEC,KAAK,EAAEZ,IAAI,CAACa,GAAG;MACfC,MAAM,EAAEd,IAAI,CAACa,GAAG;MAChBE,YAAY,EAAE7B,yBAAyB,CAACM,IAAI,EAAEC,KAAK,CAAC;MACpDuB,eAAe,EAAEf,OAAO,CAACgB;IAC3B,CAAC,EACDrB,KAAK,CACL;IACFsB,UAAU,EAAE,CAAC,CAAC3B,KAAM;IACpB4B,kBAAkB,EAAE5B,KAAM;IAC1BM,MAAM,EAAEA,MAAO;IAAAa,QAAA,EAEdN,cAAc,KAAKgB,SAAS,GAC3Bf,QAAQ,gBAERhB,IAAA,CAACN,YAAY;MAEXY,MAAM,EAAES,cAAc,CAACT,MAAO;MAC9BU,QAAQ,EAAEA,QAAS;MACnBT,KAAK,EAAEX,MAAM,CAACoC,KAAM;MACpBC,UAAU,EAAC;IAAO,GAJblB,cAAc,CAACmB,GAKrB;EACF,CACG,CAAC;AAEX","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { avatar, radius, rf } from "../../../theme/index.js";
|
|
4
|
+
/** Avatar 尺寸推导:5 档 size → { box, fs }。box 走 avatar.<size> token。
|
|
5
|
+
* 新增 size 在 types.ts 加 union + 这里加 case + tokens.ts 补 avatar.<key>。 */
|
|
6
|
+
export function sizingFor(size) {
|
|
7
|
+
switch (size) {
|
|
8
|
+
case 'xs':
|
|
9
|
+
return {
|
|
10
|
+
box: avatar.xs,
|
|
11
|
+
fs: rf(10)
|
|
12
|
+
};
|
|
13
|
+
case 'sm':
|
|
14
|
+
return {
|
|
15
|
+
box: avatar.sm,
|
|
16
|
+
fs: rf(12)
|
|
17
|
+
};
|
|
18
|
+
case 'md':
|
|
19
|
+
return {
|
|
20
|
+
box: avatar.md,
|
|
21
|
+
fs: rf(13)
|
|
22
|
+
};
|
|
23
|
+
case 'lg':
|
|
24
|
+
return {
|
|
25
|
+
box: avatar.lg,
|
|
26
|
+
fs: rf(15)
|
|
27
|
+
};
|
|
28
|
+
case 'xl':
|
|
29
|
+
return {
|
|
30
|
+
box: avatar.xl,
|
|
31
|
+
fs: rf(20)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** circle 保留直径一半的现有视觉;square 按尺寸使用既有圆角 token。 */
|
|
37
|
+
export function resolveAvatarBorderRadius(size, shape) {
|
|
38
|
+
if (shape === 'circle') return sizingFor(size).box / 2;
|
|
39
|
+
if (size === 'xs' || size === 'sm') return radius.xs;
|
|
40
|
+
if (size === 'xl') return radius.md;
|
|
41
|
+
return radius.sm;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["avatar","radius","rf","sizingFor","size","box","xs","fs","sm","md","lg","xl","resolveAvatarBorderRadius","shape"],"sourceRoot":"../../../../../src","sources":["components/ui/Avatar/geometry.ts"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,MAAM,EAAEC,EAAE,QAAQ,yBAAgB;AAGnD;AACA;AACA,OAAO,SAASC,SAASA,CAACC,IAAgB,EAAkB;EAC1D,QAAQA,IAAI;IACV,KAAK,IAAI;MACP,OAAO;QAAEC,GAAG,EAAEL,MAAM,CAACM,EAAE;QAAEC,EAAE,EAAEL,EAAE,CAAC,EAAE;MAAE,CAAC;IACvC,KAAK,IAAI;MACP,OAAO;QAAEG,GAAG,EAAEL,MAAM,CAACQ,EAAE;QAAED,EAAE,EAAEL,EAAE,CAAC,EAAE;MAAE,CAAC;IACvC,KAAK,IAAI;MACP,OAAO;QAAEG,GAAG,EAAEL,MAAM,CAACS,EAAE;QAAEF,EAAE,EAAEL,EAAE,CAAC,EAAE;MAAE,CAAC;IACvC,KAAK,IAAI;MACP,OAAO;QAAEG,GAAG,EAAEL,MAAM,CAACU,EAAE;QAAEH,EAAE,EAAEL,EAAE,CAAC,EAAE;MAAE,CAAC;IACvC,KAAK,IAAI;MACP,OAAO;QAAEG,GAAG,EAAEL,MAAM,CAACW,EAAE;QAAEJ,EAAE,EAAEL,EAAE,CAAC,EAAE;MAAE,CAAC;EACzC;AACF;;AAEA;AACA,OAAO,SAASU,yBAAyBA,CACvCR,IAAgB,EAChBS,KAAkB,EACV;EACR,IAAIA,KAAK,KAAK,QAAQ,EAAE,OAAOV,SAAS,CAACC,IAAI,CAAC,CAACC,GAAG,GAAG,CAAC;EACtD,IAAID,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK,IAAI,EAAE,OAAOH,MAAM,CAACK,EAAE;EACpD,IAAIF,IAAI,KAAK,IAAI,EAAE,OAAOH,MAAM,CAACQ,EAAE;EACnC,OAAOR,MAAM,CAACO,EAAE;AAClB","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { StyleSheet } from 'react-native';
|
|
4
|
-
import {
|
|
4
|
+
import { fw } from "../../../theme/index.js";
|
|
5
5
|
/** Avatar 静态 base —— 容器圆角 / 尺寸由 resolver 派生。 */
|
|
6
6
|
export const styles = StyleSheet.create({
|
|
7
7
|
base: {
|
|
@@ -19,46 +19,6 @@ export const styles = StyleSheet.create({
|
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
/** Avatar 尺寸推导:5 档 size → { box, fs }。box 走 avatar.<size> token。
|
|
23
|
-
* 新增 size 在 types.ts 加 union + 这里加 case + tokens.ts 补 avatar.<key>。 */
|
|
24
|
-
export function sizingFor(size) {
|
|
25
|
-
switch (size) {
|
|
26
|
-
case 'xs':
|
|
27
|
-
return {
|
|
28
|
-
box: avatar.xs,
|
|
29
|
-
fs: rf(10)
|
|
30
|
-
};
|
|
31
|
-
case 'sm':
|
|
32
|
-
return {
|
|
33
|
-
box: avatar.sm,
|
|
34
|
-
fs: rf(12)
|
|
35
|
-
};
|
|
36
|
-
case 'md':
|
|
37
|
-
return {
|
|
38
|
-
box: avatar.md,
|
|
39
|
-
fs: rf(13)
|
|
40
|
-
};
|
|
41
|
-
case 'lg':
|
|
42
|
-
return {
|
|
43
|
-
box: avatar.lg,
|
|
44
|
-
fs: rf(15)
|
|
45
|
-
};
|
|
46
|
-
case 'xl':
|
|
47
|
-
return {
|
|
48
|
-
box: avatar.xl,
|
|
49
|
-
fs: rf(20)
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** circle 保留直径一半的现有视觉;square 按尺寸使用既有圆角 token。 */
|
|
55
|
-
export function resolveAvatarBorderRadius(size, shape) {
|
|
56
|
-
if (shape === 'circle') return sizingFor(size).box / 2;
|
|
57
|
-
if (size === 'xs' || size === 'sm') return radius.xs;
|
|
58
|
-
if (size === 'xl') return radius.md;
|
|
59
|
-
return radius.sm;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
22
|
/** Avatar 配色推导:4 种 variant → { bg, fg }。签名与 Tag/Button 的 paletteFor 一致。 */
|
|
63
23
|
export function paletteFor(variant, c) {
|
|
64
24
|
switch (variant) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StyleSheet","
|
|
1
|
+
{"version":3,"names":["StyleSheet","fw","styles","create","base","alignItems","justifyContent","overflow","label","fontWeight","semi","lineHeight","undefined","image","width","height","paletteFor","variant","c","bg","primary","fg","onPrimary","info","onInfo","primaryContainer","surfaceContainerHighest","foreground"],"sourceRoot":"../../../../../src","sources":["components/ui/Avatar/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,EAAE,QAA0B,yBAAgB;AAGrD;AACA,OAAO,MAAMC,MAAM,GAAGF,UAAU,CAACG,MAAM,CAAC;EACtCC,IAAI,EAAE;IACJC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,QAAQ,EAAE;EACZ,CAAC;EACDC,KAAK,EAAE;IACLC,UAAU,EAAER,EAAE,CAACS,IAAI;IACnBC,UAAU,EAAEC;EACd,CAAC;EACDC,KAAK,EAAE;IACLC,KAAK,EAAE,MAAM;IACbC,MAAM,EAAE;EACV;AACF,CAAC,CAAC;;AAEF;AACA,OAAO,SAASC,UAAUA,CACxBC,OAAsB,EACtBC,CAAc,EACc;EAC5B,QAAQD,OAAO;IACb,KAAK,OAAO;MACV,OAAO;QAAEE,EAAE,EAAED,CAAC,CAACE,OAAO;QAAEC,EAAE,EAAEH,CAAC,CAACI;MAAU,CAAC;IAC3C,KAAK,MAAM;MACT,OAAO;QAAEH,EAAE,EAAED,CAAC,CAACK,IAAI;QAAEF,EAAE,EAAEH,CAAC,CAACM;MAAO,CAAC;IACrC,KAAK,MAAM;MACT,OAAO;QAAEL,EAAE,EAAED,CAAC,CAACO,gBAAgB;QAAEJ,EAAE,EAAEH,CAAC,CAACE;MAAQ,CAAC;IAClD,KAAK,SAAS;MACZ,OAAO;QAAED,EAAE,EAAED,CAAC,CAACQ,uBAAuB;QAAEL,EAAE,EAAEH,CAAC,CAACS;MAAW,CAAC;EAC9D;AACF","ignoreList":[]}
|
|
@@ -7,7 +7,7 @@ import { pressedOpacity, scaleFontMetric, useColors, useFontScale, useThemedStyl
|
|
|
7
7
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
8
8
|
import { childTestID } from "../../../utils/testID/index.js";
|
|
9
9
|
import { Avatar } from "../Avatar/index.js";
|
|
10
|
-
import { resolveAvatarBorderRadius, sizingFor } from "../Avatar/
|
|
10
|
+
import { resolveAvatarBorderRadius, sizingFor } from "../Avatar/geometry.js";
|
|
11
11
|
import { normalizeNonBlankText } from "../shared/accessibilityName.js";
|
|
12
12
|
import { resolveAvatarGroupLayout } from "./layout.js";
|
|
13
13
|
import { normalizeAvatarGroup } from "./normalize.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","Text","View","Pressable","pressedOpacity","scaleFontMetric","useColors","useFontScale","useThemedStyles","createLogger","childTestID","Avatar","resolveAvatarBorderRadius","sizingFor","normalizeNonBlankText","resolveAvatarGroupLayout","normalizeAvatarGroup","makeStyles","jsx","_jsx","jsxs","_jsxs","log","warned","Set","warnOnce","key","message","has","add","warn","AvatarGroup","items","size","shape","max","style","testID","onOverflowPress","overflowAccessibilityLabel","overflowAccessibilityHint","colors","fontScale","styles","normalized","layout","avatarSizing","overflowFontSize","fs","customOverflowLabel","hasBlankOverflowLabel","overflowCount","undefined","__DEV__","invalidMax","String","length","slotStyle","index","borderColor","surface","borderWidth","marginStart","overlap","zIndex","overflowLabel","overflowA11yLabel","overflowStyle","visibleItems","width","box","height","borderRadius","backgroundColor","primaryContainer","overflowText","color","primary","fontSize","numberOfLines","children","root","map","item","label","source","variant","accessible","accessibilityLabel","overflow","accessibilityRole","accessibilityHint","onPress","hitSlop","pressed","opacity"],"sourceRoot":"../../../../../src","sources":["components/ui/AvatarGroup/AvatarGroup.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,IAAI,EAAEC,IAAI,QAAwB,cAAc;AACzD,SAASC,SAAS,QAAQ,8BAA8B;AACxD,SACEC,cAAc,EACdC,eAAe,EACfC,SAAS,EACTC,YAAY,EACZC,eAAe,QACV,yBAAgB;AACvB,SAASC,YAAY,QAAQ,gCAAuB;AACpD,SAASC,WAAW,QAAQ,gCAAuB;AACnD,SAASC,MAAM,QAAQ,oBAAW;AAClC,SAASC,yBAAyB,EAAEC,SAAS,QAAQ,
|
|
1
|
+
{"version":3,"names":["React","useEffect","Text","View","Pressable","pressedOpacity","scaleFontMetric","useColors","useFontScale","useThemedStyles","createLogger","childTestID","Avatar","resolveAvatarBorderRadius","sizingFor","normalizeNonBlankText","resolveAvatarGroupLayout","normalizeAvatarGroup","makeStyles","jsx","_jsx","jsxs","_jsxs","log","warned","Set","warnOnce","key","message","has","add","warn","AvatarGroup","items","size","shape","max","style","testID","onOverflowPress","overflowAccessibilityLabel","overflowAccessibilityHint","colors","fontScale","styles","normalized","layout","avatarSizing","overflowFontSize","fs","customOverflowLabel","hasBlankOverflowLabel","overflowCount","undefined","__DEV__","invalidMax","String","length","slotStyle","index","borderColor","surface","borderWidth","marginStart","overlap","zIndex","overflowLabel","overflowA11yLabel","overflowStyle","visibleItems","width","box","height","borderRadius","backgroundColor","primaryContainer","overflowText","color","primary","fontSize","numberOfLines","children","root","map","item","label","source","variant","accessible","accessibilityLabel","overflow","accessibilityRole","accessibilityHint","onPress","hitSlop","pressed","opacity"],"sourceRoot":"../../../../../src","sources":["components/ui/AvatarGroup/AvatarGroup.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,24 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import { Text, View } from 'react-native';
|
|
4
4
|
import Svg, { Circle } from 'react-native-svg';
|
|
5
|
-
import { r, type, useColors } from "../../../theme/index.js";
|
|
5
|
+
import { r, type, useColors, useFontScale, scaleFontMetric } from "../../../theme/index.js";
|
|
6
6
|
import { A11Y_HIDDEN_PROPS } from "../shared/a11y.js";
|
|
7
7
|
import { normalizeCircularProgress } from "./normalizeCircularProgress.js";
|
|
8
|
+
import { styles } from "./styles.js";
|
|
8
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
-
const OUTER_CENTER_STYLE = {
|
|
10
|
-
alignItems: 'center',
|
|
11
|
-
justifyContent: 'center'
|
|
12
|
-
};
|
|
13
|
-
const VISUAL_CONTAINER_STYLE = {
|
|
14
|
-
position: 'relative'
|
|
15
|
-
};
|
|
16
|
-
const LABEL_CENTER_STYLE = {
|
|
17
|
-
fontWeight: '600',
|
|
18
|
-
left: 0,
|
|
19
|
-
position: 'absolute',
|
|
20
|
-
textAlign: 'center',
|
|
21
|
-
top: 0
|
|
22
|
-
};
|
|
23
10
|
export function CircularProgress({
|
|
24
11
|
value,
|
|
25
12
|
size = r(32),
|
|
@@ -33,6 +20,7 @@ export function CircularProgress({
|
|
|
33
20
|
testID
|
|
34
21
|
}) {
|
|
35
22
|
const colors = useColors();
|
|
23
|
+
const fontScale = useFontScale();
|
|
36
24
|
const normalized = normalizeCircularProgress({
|
|
37
25
|
value,
|
|
38
26
|
size,
|
|
@@ -57,20 +45,24 @@ export function CircularProgress({
|
|
|
57
45
|
now: percentage,
|
|
58
46
|
text: `${percentage}%`
|
|
59
47
|
},
|
|
60
|
-
style: [{
|
|
48
|
+
style: [showLabel ? [styles.contentSize, {
|
|
49
|
+
minHeight: safeSize,
|
|
50
|
+
minWidth: safeSize
|
|
51
|
+
}] : {
|
|
61
52
|
height: safeSize,
|
|
62
53
|
width: safeSize
|
|
63
|
-
}, style,
|
|
54
|
+
}, style, styles.center],
|
|
64
55
|
testID: testID,
|
|
65
56
|
children: /*#__PURE__*/_jsxs(View, {
|
|
66
57
|
style: [{
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
},
|
|
58
|
+
minHeight: safeSize,
|
|
59
|
+
minWidth: safeSize
|
|
60
|
+
}, styles.center],
|
|
70
61
|
...A11Y_HIDDEN_PROPS,
|
|
71
62
|
children: [/*#__PURE__*/_jsxs(Svg, {
|
|
72
63
|
height: safeSize,
|
|
73
64
|
width: safeSize,
|
|
65
|
+
style: styles.ring,
|
|
74
66
|
children: [/*#__PURE__*/_jsx(Circle, {
|
|
75
67
|
cx: center,
|
|
76
68
|
cy: center,
|
|
@@ -95,11 +87,8 @@ export function CircularProgress({
|
|
|
95
87
|
}), showLabel ? /*#__PURE__*/_jsx(Text, {
|
|
96
88
|
style: [{
|
|
97
89
|
color: labelColor ?? colors.foreground,
|
|
98
|
-
fontSize: type.nano,
|
|
99
|
-
|
|
100
|
-
lineHeight: safeSize,
|
|
101
|
-
width: safeSize
|
|
102
|
-
}, LABEL_CENTER_STYLE],
|
|
90
|
+
fontSize: scaleFontMetric(type.nano, fontScale)
|
|
91
|
+
}, styles.label],
|
|
103
92
|
children: `${percentage}%`
|
|
104
93
|
}) : null]
|
|
105
94
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Text","View","Svg","Circle","r","type","useColors","
|
|
1
|
+
{"version":3,"names":["Text","View","Svg","Circle","r","type","useColors","useFontScale","scaleFontMetric","A11Y_HIDDEN_PROPS","normalizeCircularProgress","styles","jsx","_jsx","jsxs","_jsxs","CircularProgress","value","size","thickness","color","trackColor","showLabel","labelColor","accessibilityLabel","style","testID","colors","fontScale","normalized","circumference","dashOffset","percentage","radius","safeSize","safeThickness","center","accessible","accessibilityRole","accessibilityValue","min","max","now","text","contentSize","minHeight","minWidth","height","width","children","ring","cx","cy","fill","stroke","outline","strokeWidth","rotation","originX","originY","primary","strokeDasharray","strokeDashoffset","strokeLinecap","foreground","fontSize","nano","label"],"sourceRoot":"../../../../../src","sources":["components/ui/CircularProgress/CircularProgress.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createLogger","log","warnedKeys","Set","warnOnce","key","message","has","add","warn","normalizeCircularProgress","input","value","size","thickness","Number","isFinite","safeValue","Math","min","max","safeSize","fallbackThickness","safeThickness","radius","circumference","PI","percentage","round","dashOffset"],"sourceRoot":"../../../../../src","sources":["components/ui/CircularProgress/normalizeCircularProgress.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"names":["createLogger","log","warnedKeys","Set","warnOnce","key","message","has","add","warn","normalizeCircularProgress","input","value","size","thickness","Number","isFinite","safeValue","Math","min","max","safeSize","fallbackThickness","safeThickness","radius","circumference","PI","percentage","round","dashOffset"],"sourceRoot":"../../../../../src","sources":["components/ui/CircularProgress/normalizeCircularProgress.ts"],"mappings":";;AAIA,SAASA,YAAY,QAAQ,gCAAuB;AAEpD,MAAMC,GAAG,GAAGD,YAAY,CAAC,kBAAkB,CAAC;AAC5C,MAAME,UAAU,GAAG,IAAIC,GAAG,CAAS,CAAC;AAEpC,SAASC,QAAQA,CAACC,GAAW,EAAEC,OAAe,EAAQ;EACpD,IAAIJ,UAAU,CAACK,GAAG,CAACF,GAAG,CAAC,EAAE;EACzBH,UAAU,CAACM,GAAG,CAACH,GAAG,CAAC;EACnBJ,GAAG,CAACQ,IAAI,CAACH,OAAO,CAAC;AACnB;AAEA,OAAO,SAASI,yBAAyBA,CACvCC,KAA4B,EACA;EAC5B,MAAM;IAAEC,KAAK;IAAEC,IAAI;IAAEC;EAAU,CAAC,GAAGH,KAAK;EAExC,IAAI,CAACI,MAAM,CAACC,QAAQ,CAACJ,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,IAAIA,KAAK,GAAG,CAAC,EAAE;IACrDR,QAAQ,CACN,SAASQ,KAAK,EAAE,EAChB,yBAAyBA,KAAK,WAChC,CAAC;EACH;EACA,IAAI,CAACG,MAAM,CAACC,QAAQ,CAACH,IAAI,CAAC,IAAIA,IAAI,GAAG,EAAE,EAAE;IACvCT,QAAQ,CAAC,QAAQS,IAAI,EAAE,EAAE,uBAAuBA,IAAI,SAAS,CAAC;EAChE;EACA,IAAI,CAACE,MAAM,CAACC,QAAQ,CAACF,SAAS,CAAC,IAAIA,SAAS,IAAI,CAAC,EAAE;IACjDV,QAAQ,CACN,aAAaU,SAAS,EAAE,EACxB,uBAAuBA,SAAS,iBAClC,CAAC;EACH;EAEA,MAAMG,SAAS,GAAGF,MAAM,CAACC,QAAQ,CAACJ,KAAK,CAAC,GACpCM,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,CAAC,EAAER,KAAK,CAAC,CAAC,GAC/B,CAAC;EACL,MAAMS,QAAQ,GAAGN,MAAM,CAACC,QAAQ,CAACH,IAAI,CAAC,IAAIA,IAAI,IAAI,EAAE,GAAGA,IAAI,GAAG,EAAE;EAChE,MAAMS,iBAAiB,GACrBP,MAAM,CAACC,QAAQ,CAACF,SAAS,CAAC,IAAIA,SAAS,GAAG,CAAC,GAAGA,SAAS,GAAG,CAAC;EAC7D,MAAMS,aAAa,GAAGL,IAAI,CAACC,GAAG,CAACG,iBAAiB,EAAED,QAAQ,GAAG,CAAC,CAAC;EAC/D,MAAMG,MAAM,GAAG,CAACH,QAAQ,GAAGE,aAAa,IAAI,CAAC;EAC7C,MAAME,aAAa,GAAG,CAAC,GAAGP,IAAI,CAACQ,EAAE,GAAGF,MAAM;EAE1C,OAAO;IACLP,SAAS;IACTU,UAAU,EAAET,IAAI,CAACU,KAAK,CAACX,SAAS,GAAG,GAAG,CAAC;IACvCI,QAAQ;IACRE,aAAa;IACbC,MAAM;IACNC,aAAa;IACbI,UAAU,EAAEJ,aAAa,IAAI,CAAC,GAAGR,SAAS;EAC5C,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { StyleSheet } from 'react-native';
|
|
4
|
+
export const styles = StyleSheet.create({
|
|
5
|
+
center: {
|
|
6
|
+
alignItems: 'center',
|
|
7
|
+
justifyContent: 'center'
|
|
8
|
+
},
|
|
9
|
+
// 固有尺寸避免父级 stretch 拉宽圆环,文字按自然尺寸占位。
|
|
10
|
+
contentSize: {
|
|
11
|
+
width: 'max-content',
|
|
12
|
+
height: 'max-content'
|
|
13
|
+
},
|
|
14
|
+
// 环不参与文字测量,保持显式直径;文字自然撑开最小容器。
|
|
15
|
+
ring: {
|
|
16
|
+
position: 'absolute'
|
|
17
|
+
},
|
|
18
|
+
label: {
|
|
19
|
+
fontWeight: '600',
|
|
20
|
+
textAlign: 'center',
|
|
21
|
+
flexShrink: 0
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","styles","create","center","alignItems","justifyContent","contentSize","width","height","ring","position","label","fontWeight","textAlign","flexShrink"],"sourceRoot":"../../../../../src","sources":["components/ui/CircularProgress/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,OAAO,MAAMC,MAAM,GAAGD,UAAU,CAACE,MAAM,CAAC;EACtCC,MAAM,EAAE;IAAEC,UAAU,EAAE,QAAQ;IAAEC,cAAc,EAAE;EAAS,CAAC;EAC1D;EACAC,WAAW,EAAE;IACXC,KAAK,EAAE,aAAa;IACpBC,MAAM,EAAE;EACV,CAAC;EACD;EACAC,IAAI,EAAE;IAAEC,QAAQ,EAAE;EAAW,CAAC;EAC9BC,KAAK,EAAE;IAAEC,UAAU,EAAE,KAAK;IAAEC,SAAS,EAAE,QAAQ;IAAEC,UAAU,EAAE;EAAE;AACjE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import Animated from 'react-native-reanimated';
|
|
5
5
|
import { r, useColors } from "../../../theme/index.js";
|
|
6
|
-
import {
|
|
6
|
+
import { createLogger } from "../../../utils/logger/index.js";
|
|
7
|
+
import { usePulseAnimation } from "../shared/pulse/usePulseAnimation.js";
|
|
8
|
+
import { PULSE_DOT_DEFAULTS } from "./constants.js";
|
|
7
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
+
const log = createLogger('PulseDot');
|
|
8
11
|
export function PulseDot({
|
|
9
12
|
size = r(6),
|
|
10
13
|
color,
|
|
@@ -14,10 +17,7 @@ export function PulseDot({
|
|
|
14
17
|
} = {}) {
|
|
15
18
|
const c = useColors();
|
|
16
19
|
const fill = color ?? c.primary;
|
|
17
|
-
|
|
18
|
-
// DOT_DEFAULTS,不再在解构里写 `from = 0.5` —— 那样 from 会先被默认值填满,
|
|
19
|
-
// 归一化层再也分不清「调用方没传」和「调用方传了 0.5」。
|
|
20
|
-
const animatedStyle = usePulseWithDefaults(opts, DOT_DEFAULTS, 'PulseDot');
|
|
20
|
+
const animatedStyle = usePulseAnimation(opts, PULSE_DOT_DEFAULTS, log);
|
|
21
21
|
return /*#__PURE__*/_jsx(Animated.View, {
|
|
22
22
|
style: [{
|
|
23
23
|
width: size,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Animated","r","useColors","
|
|
1
|
+
{"version":3,"names":["React","Animated","r","useColors","createLogger","usePulseAnimation","PULSE_DOT_DEFAULTS","jsx","_jsx","log","PulseDot","size","color","style","testID","opts","c","fill","primary","animatedStyle","View","width","height","borderRadius","backgroundColor","accessibilityElementsHidden","importantForAccessibility"],"sourceRoot":"../../../../../src","sources":["components/ui/Pulse/PulseDot.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAAM,yBAAyB;AAC9C,SAASC,CAAC,EAAEC,SAAS,QAAQ,yBAAgB;AAC7C,SAASC,YAAY,QAAQ,gCAAuB;AACpD,SAASC,iBAAiB,QAAQ,sCAAmC;AACrE,SAASC,kBAAkB,QAAQ,gBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGjD,MAAMC,GAAG,GAAGL,YAAY,CAAC,UAAU,CAAC;AAEpC,OAAO,SAASM,QAAQA,CAAC;EACvBC,IAAI,GAAGT,CAAC,CAAC,CAAC,CAAC;EACXU,KAAK;EACLC,KAAK;EACLC,MAAM;EACN,GAAGC;AACU,CAAC,GAAG,CAAC,CAAC,EAAqB;EACxC,MAAMC,CAAC,GAAGb,SAAS,CAAC,CAAC;EACrB,MAAMc,IAAI,GAAGL,KAAK,IAAII,CAAC,CAACE,OAAO;EAC/B,MAAMC,aAAa,GAAGd,iBAAiB,CAACU,IAAI,EAAET,kBAAkB,EAAEG,GAAG,CAAC;EACtE,oBACED,IAAA,CAACP,QAAQ,CAACmB,IAAI;IACZP,KAAK,EAAE,CACL;MACEQ,KAAK,EAAEV,IAAI;MACXW,MAAM,EAAEX,IAAI;MACZY,YAAY,EAAEZ,IAAI,GAAG,CAAC;MACtBa,eAAe,EAAEP;IACnB,CAAC,EACDE,aAAa,EACbN,KAAK,CACL;IACFC,MAAM,EAAEA,MAAO;IACfW,2BAA2B;IAC3BC,yBAAyB,EAAC;EAAqB,CAChD,CAAC;AAEN","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PULSE_DEFAULTS","duration","delay","from","to","PULSE_DOT_DEFAULTS"],"sourceRoot":"../../../../../src","sources":["components/ui/Pulse/constants.ts"],"mappings":";;AAEA,OAAO,MAAMA,cAAuC,GAAG;EACrDC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,CAAC;EACRC,IAAI,EAAE,GAAG;EACTC,EAAE,EAAE;AACN,CAAC;AACD,OAAO,MAAMC,kBAA2C,GAAG;EACzDJ,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,CAAC;EACRC,IAAI,EAAE,GAAG;EACTC,EAAE,EAAE;AACN,CAAC","ignoreList":[]}
|
|
@@ -1,68 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { useEffect, useMemo } from 'react';
|
|
4
3
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
* 在两个 opacity 值之间无限循环,返回可直接拼到 Animated.View 上的 style。
|
|
9
|
-
*
|
|
10
|
-
* 这是**唯一**的公共实现:参数校验、默认值与 dev 诊断全在这里完成,平台差异只下沉到
|
|
11
|
-
* `usePulseDriver(.web).ts`。此前 native / web 各有一份 `usePulse`,两边各自读原始
|
|
12
|
-
* props、各自解释默认值,web 侧还把未校验的 duration 直接喂给 `setInterval`。
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
const BASE_DEFAULTS = {
|
|
16
|
-
duration: 700,
|
|
17
|
-
delay: 0,
|
|
18
|
-
from: 0.6,
|
|
19
|
-
to: 1
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
/** PulseDot / Skeleton 的默认值 —— 只有 from 更低,圆点 / 骨架淡到 0.5。 */
|
|
23
|
-
export const DOT_DEFAULTS = {
|
|
24
|
-
duration: 700,
|
|
25
|
-
delay: 0,
|
|
26
|
-
from: 0.5,
|
|
27
|
-
to: 1
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
// logger 在模块加载时一次性建好 —— render 期创建每次都会产生新对象。
|
|
31
|
-
const pulseLog = createLogger('Pulse');
|
|
32
|
-
const pulseDotLog = createLogger('PulseDot');
|
|
33
|
-
const skeletonLog = createLogger('Skeleton');
|
|
34
|
-
|
|
35
|
-
/** 诊断告警的固定 scope 集合。 */
|
|
36
|
-
|
|
37
|
-
function loggerForScope(scope) {
|
|
38
|
-
switch (scope) {
|
|
39
|
-
case 'Pulse':
|
|
40
|
-
return pulseLog;
|
|
41
|
-
case 'PulseDot':
|
|
42
|
-
return pulseDotLog;
|
|
43
|
-
case 'Skeleton':
|
|
44
|
-
return skeletonLog;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** 内部:让 PulseDot / Skeleton 复用同一条归一化 + 诊断 + driver 链路。 */
|
|
49
|
-
export function usePulseWithDefaults(options, defaults, scope) {
|
|
50
|
-
// 依赖列表**故意**拆到 primitive:options / defaults 对象每次 render 都可能是新引用
|
|
51
|
-
// (调用方常写内联字面量),直接依赖对象会让 memo 恒失效、并连带每帧重启 driver 的 effect。
|
|
52
|
-
// 这八个 primitive 就是归一化的全部输入,拆开后覆盖完整、无遗漏。
|
|
53
|
-
const normalized = useMemo(() => normalizePulseOptions(options, defaults),
|
|
54
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
55
|
-
[options?.duration, options?.delay, options?.from, options?.to, defaults.duration, defaults.delay, defaults.from, defaults.to]);
|
|
56
|
-
useEffect(() => {
|
|
57
|
-
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
58
|
-
for (const item of normalized.diagnostics) {
|
|
59
|
-
loggerForScope(scope).warn(`${item.field}=${String(item.received)} 无效,已回退为 ${item.fallback}`);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}, [normalized.diagnostics, scope]);
|
|
63
|
-
return usePulseDriver(normalized);
|
|
64
|
-
}
|
|
4
|
+
import { usePulseAnimation } from "../shared/pulse/usePulseAnimation.js";
|
|
5
|
+
import { PULSE_DEFAULTS } from "./constants.js";
|
|
6
|
+
const log = createLogger('Pulse');
|
|
65
7
|
export function usePulse(options = {}) {
|
|
66
|
-
return
|
|
8
|
+
return usePulseAnimation(options, PULSE_DEFAULTS, log);
|
|
67
9
|
}
|
|
68
10
|
//# sourceMappingURL=usePulse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["createLogger","usePulseAnimation","PULSE_DEFAULTS","log","usePulse","options"],"sourceRoot":"../../../../../src","sources":["components/ui/Pulse/usePulse.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,gCAAuB;AACpD,SAASC,iBAAiB,QAAQ,sCAAmC;AACrE,SAASC,cAAc,QAAQ,gBAAa;AAG5C,MAAMC,GAAG,GAAGH,YAAY,CAAC,OAAO,CAAC;AAEjC,OAAO,SAASI,QAAQA,CAACC,OAAqB,GAAG,CAAC,CAAC,EAAE;EACnD,OAAOJ,iBAAiB,CAACI,OAAO,EAAEH,cAAc,EAAEC,GAAG,CAAC;AACxD","ignoreList":[]}
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import Animated from 'react-native-reanimated';
|
|
5
|
-
import {
|
|
5
|
+
import { createLogger } from "../../../utils/logger/index.js";
|
|
6
|
+
import { usePulseAnimation } from "../shared/pulse/usePulseAnimation.js";
|
|
7
|
+
import { SKELETON_DEFAULTS } from "./constants.js";
|
|
6
8
|
import { r, useColors } from "../../../theme/index.js";
|
|
7
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
+
const log = createLogger('Skeleton');
|
|
11
|
+
|
|
8
12
|
/**
|
|
9
13
|
* 页面级加载占位骨架。3 个形状由 `shape` 切换。
|
|
10
14
|
*
|
|
@@ -27,7 +31,7 @@ export function Skeleton({
|
|
|
27
31
|
testID
|
|
28
32
|
}) {
|
|
29
33
|
const c = useColors();
|
|
30
|
-
const animatedStyle =
|
|
34
|
+
const animatedStyle = usePulseAnimation(undefined, SKELETON_DEFAULTS, log);
|
|
31
35
|
|
|
32
36
|
// 按形状推默认尺寸 + 圆角;caller 显式传 width / height / radius 时 override
|
|
33
37
|
const dim = (() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Animated","
|
|
1
|
+
{"version":3,"names":["React","Animated","createLogger","usePulseAnimation","SKELETON_DEFAULTS","r","useColors","jsx","_jsx","log","Skeleton","shape","width","height","size","radius","style","testID","c","animatedStyle","undefined","dim","borderRadius","View","backgroundColor","surfaceContainerHigh","accessibilityElementsHidden","importantForAccessibility"],"sourceRoot":"../../../../../src","sources":["components/ui/Skeleton/Skeleton.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAAM,yBAAyB;AAC9C,SAASC,YAAY,QAAQ,gCAAuB;AACpD,SAASC,iBAAiB,QAAQ,sCAAmC;AACrE,SAASC,iBAAiB,QAAQ,gBAAa;AAC/C,SAASC,CAAC,EAAEC,SAAS,QAAQ,yBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG9C,MAAMC,GAAG,GAAGP,YAAY,CAAC,UAAU,CAAC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASQ,QAAQA,CAAC;EACvBC,KAAK,GAAG,MAAM;EACdC,KAAK;EACLC,MAAM;EACNC,IAAI,GAAGT,CAAC,CAAC,EAAE,CAAC;EACZU,MAAM;EACNC,KAAK;EACLC;AACa,CAAC,EAAqB;EACnC,MAAMC,CAAC,GAAGZ,SAAS,CAAC,CAAC;EACrB,MAAMa,aAAa,GAAGhB,iBAAiB,CAACiB,SAAS,EAAEhB,iBAAiB,EAAEK,GAAG,CAAC;;EAE1E;EACA,MAAMY,GAAG,GAAG,CAAC,MAAM;IACjB,IAAIV,KAAK,KAAK,QAAQ,EAAE;MACtB,OAAO;QAAEC,KAAK,EAAEE,IAAI;QAAED,MAAM,EAAEC,IAAI;QAAEQ,YAAY,EAAEP,MAAM,IAAID,IAAI,GAAG;MAAE,CAAC;IACxE;IACA,IAAIH,KAAK,KAAK,MAAM,EAAE;MACpB,OAAO;QACLC,KAAK,EAAEA,KAAK,IAAI,MAAM;QACtBC,MAAM,EAAEA,MAAM,IAAIR,CAAC,CAAC,EAAE,CAAC;QACvBiB,YAAY,EAAEP,MAAM,IAAIV,CAAC,CAAC,CAAC;MAC7B,CAAC;IACH;IACA,OAAO;MACLO,KAAK,EAAEA,KAAK,IAAI,MAAM;MACtBC,MAAM,EAAEA,MAAM,IAAIR,CAAC,CAAC,EAAE,CAAC;MACvBiB,YAAY,EAAEP,MAAM,IAAIV,CAAC,CAAC,CAAC;IAC7B,CAAC;EACH,CAAC,EAAE,CAAC;EAEJ,oBACEG,IAAA,CAACP,QAAQ,CAACsB,IAAI;IACZP,KAAK,EAAE,CACL;MAAE,GAAGK,GAAG;MAAEG,eAAe,EAAEN,CAAC,CAACO;IAAqB,CAAC,EACnDN,aAAa,EACbH,KAAK,CACL;IACFC,MAAM,EAAEA,MAAO;IACfS,2BAA2B;IAC3BC,yBAAyB,EAAC;EAAqB,CAChD,CAAC;AAEN","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SKELETON_DEFAULTS","duration","delay","from","to"],"sourceRoot":"../../../../../src","sources":["components/ui/Skeleton/constants.ts"],"mappings":";;AAEA,OAAO,MAAMA,iBAA0C,GAAG;EACxDC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,CAAC;EACRC,IAAI,EAAE,GAAG;EACTC,EAAE,EAAE;AACN,CAAC","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
|
|
4
4
|
import { Platform, Text, TextInput, View } from 'react-native';
|
|
5
|
-
import { fixed,
|
|
5
|
+
import { fixed, useColors, useThemedStyles } from "../../../theme/index.js";
|
|
6
6
|
import { childTestID } from "../../../utils/testID/index.js";
|
|
7
7
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
8
8
|
import { normalizeInputHeight, normalizeTextareaHeights, sanitizeTextFieldContainerStyle } from "./normalize.js";
|
|
@@ -10,6 +10,7 @@ import { makeStyles } from "./styles.js";
|
|
|
10
10
|
import { TextFieldSlot } from "./TextFieldSlot.js";
|
|
11
11
|
import { useErrorAnnouncement } from "./useErrorAnnouncement.js";
|
|
12
12
|
import { useTextFieldValue } from "./useTextFieldValue.js";
|
|
13
|
+
import { useMultilineLayout } from './useMultilineLayout';
|
|
13
14
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
15
|
const log = createLogger('TextField');
|
|
15
16
|
|
|
@@ -37,6 +38,9 @@ export const TextFieldBase = /*#__PURE__*/forwardRef(function TextFieldBase(prop
|
|
|
37
38
|
placeholderTextColor: callerPlaceholder,
|
|
38
39
|
onFocus,
|
|
39
40
|
onBlur,
|
|
41
|
+
onContentSizeChange,
|
|
42
|
+
onLayout,
|
|
43
|
+
scrollEnabled,
|
|
40
44
|
testID,
|
|
41
45
|
style: _style,
|
|
42
46
|
numberOfLines: _numberOfLines,
|
|
@@ -68,6 +72,15 @@ export const TextFieldBase = /*#__PURE__*/forwardRef(function TextFieldBase(prop
|
|
|
68
72
|
}, scope);
|
|
69
73
|
const normalizedInputHeight = normalizeInputHeight(height === undefined ? fixed.hitTarget : height);
|
|
70
74
|
const normalizedTextareaHeights = normalizeTextareaHeights(minHeight, maxHeight);
|
|
75
|
+
const multilineLayout = useMultilineLayout({
|
|
76
|
+
enabled: multiline,
|
|
77
|
+
value: controller.value,
|
|
78
|
+
minHeight: normalizedTextareaHeights.minHeight,
|
|
79
|
+
maxHeight: normalizedTextareaHeights.maxHeight,
|
|
80
|
+
fontSize: styles.input.fontSize,
|
|
81
|
+
placeholder: allowedNativeProps.placeholder,
|
|
82
|
+
inputRef: nativeRef
|
|
83
|
+
});
|
|
71
84
|
const sanitizedContainer = sanitizeTextFieldContainerStyle(containerStyle);
|
|
72
85
|
const effectiveEditable = disabled !== true && editable !== false;
|
|
73
86
|
const mergedAccessibilityState = {
|
|
@@ -127,6 +140,12 @@ export const TextFieldBase = /*#__PURE__*/forwardRef(function TextFieldBase(prop
|
|
|
127
140
|
onChangeText: controller.onChangeText,
|
|
128
141
|
editable: effectiveEditable,
|
|
129
142
|
multiline: multiline,
|
|
143
|
+
onContentSizeChange: onContentSizeChange,
|
|
144
|
+
onLayout: event => {
|
|
145
|
+
if (multiline) multilineLayout.onLayout?.(event);
|
|
146
|
+
onLayout?.(event);
|
|
147
|
+
},
|
|
148
|
+
scrollEnabled: scrollEnabled ?? (multiline ? multilineLayout.scrollEnabled : undefined),
|
|
130
149
|
onFocus: event => {
|
|
131
150
|
setFocused(true);
|
|
132
151
|
onFocus?.(event);
|
|
@@ -135,9 +154,7 @@ export const TextFieldBase = /*#__PURE__*/forwardRef(function TextFieldBase(prop
|
|
|
135
154
|
setFocused(false);
|
|
136
155
|
onBlur?.(event);
|
|
137
156
|
},
|
|
138
|
-
style: [styles.input, multiline && styles.inputMultiline, multiline && {
|
|
139
|
-
minHeight: Math.max(0, normalizedHeight - space[4] * 2)
|
|
140
|
-
}, searchLayout !== undefined && {
|
|
157
|
+
style: [styles.input, multiline && styles.inputMultiline, multiline && (multilineLayout.scrollEnabled ? styles.inputScrolling : styles.inputClipped), multiline && multilineLayout.inputStyle, searchLayout !== undefined && {
|
|
141
158
|
minHeight: searchLayout.interactiveHeight
|
|
142
159
|
}],
|
|
143
160
|
placeholderTextColor: callerPlaceholder ?? colors.foregroundSubtle,
|