@unif/react-native-design 0.31.3 → 0.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -171
- 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 +2 -2
- 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
|
@@ -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,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useState","Platform","Text","TextInput","View","fixed","
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useState","Platform","Text","TextInput","View","fixed","useColors","useThemedStyles","childTestID","createLogger","normalizeInputHeight","normalizeTextareaHeights","sanitizeTextFieldContainerStyle","makeStyles","TextFieldSlot","useErrorAnnouncement","useTextFieldValue","useMultilineLayout","jsx","_jsx","jsxs","_jsxs","log","TextFieldBase","props","forwardedRef","multiline","height","minHeight","maxHeight","searchLayout","leading","trailing","error","disabled","editable","containerStyle","value","defaultValue","onChangeText","accessibilityState","accessibilityRole","placeholderTextColor","callerPlaceholder","onFocus","onBlur","onContentSizeChange","onLayout","scrollEnabled","testID","style","_style","numberOfLines","_numberOfLines","_ariaDisabled","readOnly","_readOnly","role","_role","enterKeyHint","_enterKeyHint","clearTextOnFocus","_clearTextOnFocus","allowedNativeProps","removedNativeAliasKey","Object","entries","filter","entry","undefined","map","name","join","colors","styles","focused","setFocused","nativeRef","useRef","scope","controller","normalizedInputHeight","hitTarget","normalizedTextareaHeights","multilineLayout","enabled","fontSize","input","placeholder","inputRef","sanitizedContainer","effectiveEditable","mergedAccessibilityState","normalizedHeight","filled","length","diagnostics","diagnosticKey","warn","focus","current","blur","wrapStateStyles","wrapActive","wrapError","wrapFocus","wrapFilled","wrapIdle","interactiveHeight","containerDisabled","rootCentered","minWidth","children","wrap","wrapMultiline","searchInteractiveRow","pointerEvents","searchVisibleSurface","top","verticalInset","bottom","slot","ref","event","inputMultiline","inputScrolling","inputClipped","inputStyle","foregroundSubtle","errorMsg","accessibilityLiveRegion","OS","displayName"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/TextFieldBase.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { space } from "../../../theme/index.js";
|
|
4
|
+
export const TEXT_FIELD_BORDER_WIDTH = 1;
|
|
5
|
+
export const TEXTAREA_VERTICAL_PADDING = space[4];
|
|
6
|
+
export const TEXTAREA_VERTICAL_INSET = 2 * (TEXTAREA_VERTICAL_PADDING + TEXT_FIELD_BORDER_WIDTH);
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["space","TEXT_FIELD_BORDER_WIDTH","TEXTAREA_VERTICAL_PADDING","TEXTAREA_VERTICAL_INSET"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/constants.ts"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,yBAAgB;AAEtC,OAAO,MAAMC,uBAAuB,GAAG,CAAC;AACxC,OAAO,MAAMC,yBAAyB,GAAGF,KAAK,CAAC,CAAC,CAAC;AACjD,OAAO,MAAMG,uBAAuB,GAClC,CAAC,IAAID,yBAAyB,GAAGD,uBAAuB,CAAC","ignoreList":[]}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { StyleSheet } from 'react-native';
|
|
4
4
|
import { fw, radius, space, type as t } from "../../../theme/index.js";
|
|
5
|
+
import { TEXTAREA_VERTICAL_PADDING, TEXT_FIELD_BORDER_WIDTH } from "./constants.js";
|
|
6
|
+
|
|
5
7
|
/** TextField primitive styles —— Input + Textarea 共享。 */
|
|
6
8
|
export const makeStyles = c => StyleSheet.create({
|
|
7
9
|
wrap: {
|
|
@@ -10,10 +12,10 @@ export const makeStyles = c => StyleSheet.create({
|
|
|
10
12
|
gap: space[3],
|
|
11
13
|
paddingHorizontal: space[5],
|
|
12
14
|
borderRadius: radius.md,
|
|
13
|
-
borderWidth:
|
|
15
|
+
borderWidth: TEXT_FIELD_BORDER_WIDTH
|
|
14
16
|
},
|
|
15
17
|
wrapMultiline: {
|
|
16
|
-
paddingVertical:
|
|
18
|
+
paddingVertical: TEXTAREA_VERTICAL_PADDING,
|
|
17
19
|
alignItems: 'flex-start'
|
|
18
20
|
},
|
|
19
21
|
/** Search 的可见底色/边框绝不承载命中区域。 */
|
|
@@ -58,6 +60,12 @@ export const makeStyles = c => StyleSheet.create({
|
|
|
58
60
|
inputMultiline: {
|
|
59
61
|
textAlignVertical: 'top'
|
|
60
62
|
},
|
|
63
|
+
inputScrolling: {
|
|
64
|
+
overflow: 'scroll'
|
|
65
|
+
},
|
|
66
|
+
inputClipped: {
|
|
67
|
+
overflow: 'hidden'
|
|
68
|
+
},
|
|
61
69
|
slotDisplay: {
|
|
62
70
|
alignItems: 'center',
|
|
63
71
|
justifyContent: 'center',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StyleSheet","fw","radius","space","type","t","makeStyles","c","create","wrap","flexDirection","alignItems","gap","paddingHorizontal","borderRadius","md","borderWidth","wrapMultiline","paddingVertical","searchInteractiveRow","searchVisibleSurface","position","left","right","wrapIdle","backgroundColor","surfaceContainerHigh","borderColor","wrapActive","surface","wrapFocus","primary","wrapFilled","outline","wrapError","error","input","flex","minWidth","fontSize","body","color","foreground","padding","margin","outlineWidth","inputMultiline","textAlignVertical","slotDisplay","justifyContent","minHeight","slotText","foregroundMuted","sm","slotActionLabel","xs","fontWeight","medium","slotActionLabelDisabled","foregroundSubtle","actionFrame","height","errorMsg","micro","marginTop","regular","containerDisabled","opacity","rootCentered"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,EAAE,EAAEC,MAAM,EAAEC,KAAK,EAAEC,IAAI,IAAIC,CAAC,QAAQ,yBAAgB;
|
|
1
|
+
{"version":3,"names":["StyleSheet","fw","radius","space","type","t","TEXTAREA_VERTICAL_PADDING","TEXT_FIELD_BORDER_WIDTH","makeStyles","c","create","wrap","flexDirection","alignItems","gap","paddingHorizontal","borderRadius","md","borderWidth","wrapMultiline","paddingVertical","searchInteractiveRow","searchVisibleSurface","position","left","right","wrapIdle","backgroundColor","surfaceContainerHigh","borderColor","wrapActive","surface","wrapFocus","primary","wrapFilled","outline","wrapError","error","input","flex","minWidth","fontSize","body","color","foreground","padding","margin","outlineWidth","inputMultiline","textAlignVertical","inputScrolling","overflow","inputClipped","slotDisplay","justifyContent","minHeight","slotText","foregroundMuted","sm","slotActionLabel","xs","fontWeight","medium","slotActionLabelDisabled","foregroundSubtle","actionFrame","height","errorMsg","micro","marginTop","regular","containerDisabled","opacity","rootCentered"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/styles.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { TEXTAREA_VERTICAL_INSET } from "./constants.js";
|
|
4
|
+
/** 原生 Yoga 直接测量文本;固定 height 会阻断 iOS Fabric 的后续内容尺寸通知。 */
|
|
5
|
+
export function useMultilineLayout({
|
|
6
|
+
minHeight,
|
|
7
|
+
maxHeight
|
|
8
|
+
}) {
|
|
9
|
+
return {
|
|
10
|
+
inputStyle: {
|
|
11
|
+
minHeight: Math.max(0, minHeight - TEXTAREA_VERTICAL_INSET),
|
|
12
|
+
maxHeight: maxHeight === undefined ? undefined : Math.max(0, maxHeight - TEXTAREA_VERTICAL_INSET)
|
|
13
|
+
},
|
|
14
|
+
// 原生仅在内容溢出时滚动;min=max 时也不等待不会再变化的框高事件。
|
|
15
|
+
scrollEnabled: true
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=useMultilineLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TEXTAREA_VERTICAL_INSET","useMultilineLayout","minHeight","maxHeight","inputStyle","Math","max","undefined","scrollEnabled"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/useMultilineLayout.ts"],"mappings":";;AAAA,SAASA,uBAAuB,QAAQ,gBAAa;AAGrD;AACA,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,SAAS;EACTC;AACoB,CAAC,EAAmB;EACxC,OAAO;IACLC,UAAU,EAAE;MACVF,SAAS,EAAEG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,SAAS,GAAGF,uBAAuB,CAAC;MAC3DG,SAAS,EACPA,SAAS,KAAKI,SAAS,GACnBA,SAAS,GACTF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,SAAS,GAAGH,uBAAuB;IACvD,CAAC;IACD;IACAQ,aAAa,EAAE;EACjB,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useLayoutEffect, useState } from 'react';
|
|
4
|
+
import { TEXTAREA_VERTICAL_INSET } from "./constants.js";
|
|
5
|
+
/** RNW 的 contentSize 使用 scrollHeight,固定高度会阻止缩短,须临时解除高度后测量。 */
|
|
6
|
+
export function useMultilineLayout({
|
|
7
|
+
enabled,
|
|
8
|
+
value,
|
|
9
|
+
minHeight,
|
|
10
|
+
maxHeight,
|
|
11
|
+
fontSize,
|
|
12
|
+
placeholder,
|
|
13
|
+
inputRef
|
|
14
|
+
}) {
|
|
15
|
+
const [contentHeight, setContentHeight] = useState(0);
|
|
16
|
+
const [width, setWidth] = useState(0);
|
|
17
|
+
const minimum = Math.max(0, minHeight - TEXTAREA_VERTICAL_INSET);
|
|
18
|
+
const maximum = maxHeight === undefined ? Infinity : Math.max(0, maxHeight - TEXTAREA_VERTICAL_INSET);
|
|
19
|
+
useLayoutEffect(() => {
|
|
20
|
+
if (!enabled || inputRef.current === null) return;
|
|
21
|
+
const node = inputRef.current;
|
|
22
|
+
const {
|
|
23
|
+
height,
|
|
24
|
+
minHeight: previousMinimum
|
|
25
|
+
} = node.style;
|
|
26
|
+
const scrollTop = node.scrollTop;
|
|
27
|
+
node.style.height = '0px';
|
|
28
|
+
node.style.minHeight = '0px';
|
|
29
|
+
const measured = node.scrollHeight;
|
|
30
|
+
node.style.height = height;
|
|
31
|
+
node.style.minHeight = previousMinimum;
|
|
32
|
+
node.scrollTop = scrollTop;
|
|
33
|
+
if (Number.isFinite(measured)) setContentHeight(measured);
|
|
34
|
+
}, [enabled, value, width, fontSize, placeholder, minHeight, maxHeight, inputRef]);
|
|
35
|
+
const onLayout = useCallback(event => setWidth(event.nativeEvent.layout.width), []);
|
|
36
|
+
return {
|
|
37
|
+
inputStyle: {
|
|
38
|
+
height: Math.min(maximum, Math.max(minimum, contentHeight))
|
|
39
|
+
},
|
|
40
|
+
scrollEnabled: contentHeight > maximum,
|
|
41
|
+
onLayout
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=useMultilineLayout.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useLayoutEffect","useState","TEXTAREA_VERTICAL_INSET","useMultilineLayout","enabled","value","minHeight","maxHeight","fontSize","placeholder","inputRef","contentHeight","setContentHeight","width","setWidth","minimum","Math","max","maximum","undefined","Infinity","current","node","height","previousMinimum","style","scrollTop","measured","scrollHeight","Number","isFinite","onLayout","event","nativeEvent","layout","inputStyle","min","scrollEnabled"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/useMultilineLayout.web.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,eAAe,EAAEC,QAAQ,QAAQ,OAAO;AAC9D,SAASC,uBAAuB,QAAQ,gBAAa;AAOrD;AACA,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,OAAO;EACPC,KAAK;EACLC,SAAS;EACTC,SAAS;EACTC,QAAQ;EACRC,WAAW;EACXC;AACoB,CAAC,EAAmB;EACxC,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGX,QAAQ,CAAC,CAAC,CAAC;EACrD,MAAM,CAACY,KAAK,EAAEC,QAAQ,CAAC,GAAGb,QAAQ,CAAC,CAAC,CAAC;EACrC,MAAMc,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEX,SAAS,GAAGJ,uBAAuB,CAAC;EAChE,MAAMgB,OAAO,GACXX,SAAS,KAAKY,SAAS,GACnBC,QAAQ,GACRJ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEV,SAAS,GAAGL,uBAAuB,CAAC;EACtDF,eAAe,CAAC,MAAM;IACpB,IAAI,CAACI,OAAO,IAAIM,QAAQ,CAACW,OAAO,KAAK,IAAI,EAAE;IAC3C,MAAMC,IAAI,GAAGZ,QAAQ,CAACW,OAA6C;IACnE,MAAM;MAAEE,MAAM;MAAEjB,SAAS,EAAEkB;IAAgB,CAAC,GAAGF,IAAI,CAACG,KAAK;IACzD,MAAMC,SAAS,GAAGJ,IAAI,CAACI,SAAS;IAChCJ,IAAI,CAACG,KAAK,CAACF,MAAM,GAAG,KAAK;IACzBD,IAAI,CAACG,KAAK,CAACnB,SAAS,GAAG,KAAK;IAC5B,MAAMqB,QAAQ,GAAGL,IAAI,CAACM,YAAY;IAClCN,IAAI,CAACG,KAAK,CAACF,MAAM,GAAGA,MAAM;IAC1BD,IAAI,CAACG,KAAK,CAACnB,SAAS,GAAGkB,eAAe;IACtCF,IAAI,CAACI,SAAS,GAAGA,SAAS;IAC1B,IAAIG,MAAM,CAACC,QAAQ,CAACH,QAAQ,CAAC,EAAEf,gBAAgB,CAACe,QAAQ,CAAC;EAC3D,CAAC,EAAE,CACDvB,OAAO,EACPC,KAAK,EACLQ,KAAK,EACLL,QAAQ,EACRC,WAAW,EACXH,SAAS,EACTC,SAAS,EACTG,QAAQ,CACT,CAAC;EACF,MAAMqB,QAAQ,GAAGhC,WAAW,CACzBiC,KAAK,IAAKlB,QAAQ,CAACkB,KAAK,CAACC,WAAW,CAACC,MAAM,CAACrB,KAAK,CAAC,EACnD,EACF,CAAC;EACD,OAAO;IACLsB,UAAU,EAAE;MACVZ,MAAM,EAAEP,IAAI,CAACoB,GAAG,CAAClB,OAAO,EAAEF,IAAI,CAACC,GAAG,CAACF,OAAO,EAAEJ,aAAa,CAAC;IAC5D,CAAC;IACD0B,aAAa,EAAE1B,aAAa,GAAGO,OAAO;IACtCa;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -7,8 +7,8 @@ import { resolveImageSource } from "../../../utils/imageSource.js";
|
|
|
7
7
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
8
8
|
import { ImageAttempt } from "../shared/ImageAttempt.js";
|
|
9
9
|
import { A11Y_HIDDEN_PROPS } from "../shared/a11y.js";
|
|
10
|
-
import { sanitizeThumbnailImageStyle } from "./normalize.js";
|
|
11
|
-
import { makeStyles
|
|
10
|
+
import { normalizeThumbnailDimensions, sanitizeThumbnailImageStyle } from "./normalize.js";
|
|
11
|
+
import { makeStyles } from "./styles.js";
|
|
12
12
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
13
|
const log = createLogger('Thumbnail');
|
|
14
14
|
const hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
|
|
@@ -22,6 +22,7 @@ export function Thumbnail(props) {
|
|
|
22
22
|
uri,
|
|
23
23
|
source,
|
|
24
24
|
size = 'md',
|
|
25
|
+
fallback,
|
|
25
26
|
selected,
|
|
26
27
|
containerStyle,
|
|
27
28
|
imageStyle,
|
|
@@ -31,7 +32,8 @@ export function Thumbnail(props) {
|
|
|
31
32
|
} = props;
|
|
32
33
|
const colors = useColors();
|
|
33
34
|
const styles = useThemedStyles(makeStyles);
|
|
34
|
-
const
|
|
35
|
+
const normalizedDimensions = normalizeThumbnailDimensions(size);
|
|
36
|
+
const dim = normalizedDimensions.dimensions;
|
|
35
37
|
const hasUri = hasOwn(props, 'uri');
|
|
36
38
|
const hasSource = hasOwn(props, 'source');
|
|
37
39
|
const sourceCandidate = hasUri !== hasSource ? hasUri && typeof uri === 'string' ? {
|
|
@@ -39,7 +41,7 @@ export function Thumbnail(props) {
|
|
|
39
41
|
} : source : undefined;
|
|
40
42
|
const resolvedSource = resolveImageSource(sourceCandidate);
|
|
41
43
|
const sanitizedImageStyle = sanitizeThumbnailImageStyle(imageStyle);
|
|
42
|
-
const diagnostics = [...(resolvedSource === undefined ? ['source'] : []), ...sanitizedImageStyle.diagnostics.map(field => field === 'style' ? 'imageStyle' : `imageStyle.${field}`)];
|
|
44
|
+
const diagnostics = [...normalizedDimensions.diagnostics, ...(resolvedSource === undefined ? ['source'] : []), ...sanitizedImageStyle.diagnostics.map(field => field === 'style' ? 'imageStyle' : `imageStyle.${field}`)];
|
|
43
45
|
const diagnosticKey = diagnostics.join(',');
|
|
44
46
|
useEffect(() => {
|
|
45
47
|
if (__DEV__ && diagnosticKey.length > 0) {
|
|
@@ -56,16 +58,21 @@ export function Thumbnail(props) {
|
|
|
56
58
|
borderRadius: dim.borderRadius,
|
|
57
59
|
borderColor: selected ? colors.primary : 'transparent'
|
|
58
60
|
};
|
|
61
|
+
const fallbackContent = fallback === undefined ? null : /*#__PURE__*/_jsx(View, {
|
|
62
|
+
...imageAccessibilityProps,
|
|
63
|
+
style: styles.fallback,
|
|
64
|
+
children: fallback
|
|
65
|
+
});
|
|
59
66
|
return /*#__PURE__*/_jsx(View, {
|
|
60
67
|
style: containerStyle,
|
|
61
68
|
testID: testID,
|
|
62
69
|
children: /*#__PURE__*/_jsxs(View, {
|
|
63
70
|
style: [styles.visualFrame, dim],
|
|
64
|
-
children: [resolvedSource === undefined ?
|
|
71
|
+
children: [resolvedSource === undefined ? fallbackContent : /*#__PURE__*/_createElement(ImageAttempt, {
|
|
65
72
|
...imageAccessibilityProps,
|
|
66
73
|
key: resolvedSource.key,
|
|
67
74
|
source: resolvedSource.source,
|
|
68
|
-
fallback:
|
|
75
|
+
fallback: fallbackContent,
|
|
69
76
|
style: [sanitizedImageStyle.style, StyleSheet.absoluteFill],
|
|
70
77
|
resizeMode: resizeMode
|
|
71
78
|
}), /*#__PURE__*/_jsx(View, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","createElement","_createElement","StyleSheet","View","useColors","useThemedStyles","resolveImageSource","createLogger","ImageAttempt","A11Y_HIDDEN_PROPS","
|
|
1
|
+
{"version":3,"names":["React","useEffect","createElement","_createElement","StyleSheet","View","useColors","useThemedStyles","resolveImageSource","createLogger","ImageAttempt","A11Y_HIDDEN_PROPS","normalizeThumbnailDimensions","sanitizeThumbnailImageStyle","makeStyles","jsx","_jsx","jsxs","_jsxs","log","hasOwn","value","key","Object","prototype","hasOwnProperty","call","Thumbnail","props","uri","source","size","fallback","selected","containerStyle","imageStyle","resizeMode","accessibilityLabel","testID","colors","styles","normalizedDimensions","dim","dimensions","hasUri","hasSource","sourceCandidate","trim","undefined","resolvedSource","sanitizedImageStyle","diagnostics","map","field","diagnosticKey","join","__DEV__","length","warn","normalizedLabel","imageAccessibilityProps","accessible","accessibilityRole","ringStyle","borderRadius","borderColor","primary","fallbackContent","style","children","visualFrame","absoluteFill","pointerEvents","ring"],"sourceRoot":"../../../../../src","sources":["components/ui/Thumbnail/Thumbnail.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { r } from "../../../theme/index.js";
|
|
4
|
+
export const THUMBNAIL_DIMENSIONS = {
|
|
5
|
+
sm: {
|
|
6
|
+
width: r(64),
|
|
7
|
+
height: r(40),
|
|
8
|
+
borderRadius: r(6)
|
|
9
|
+
},
|
|
10
|
+
md: {
|
|
11
|
+
width: r(113),
|
|
12
|
+
height: r(67),
|
|
13
|
+
borderRadius: r(8)
|
|
14
|
+
},
|
|
15
|
+
lg: {
|
|
16
|
+
width: r(160),
|
|
17
|
+
height: r(96),
|
|
18
|
+
borderRadius: r(10)
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
export const RESERVED_IMAGE_STYLE_KEYS = ['position', 'top', 'right', 'bottom', 'left', 'width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight'];
|
|
22
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["r","THUMBNAIL_DIMENSIONS","sm","width","height","borderRadius","md","lg","RESERVED_IMAGE_STYLE_KEYS"],"sourceRoot":"../../../../../src","sources":["components/ui/Thumbnail/constants.ts"],"mappings":";;AAAA,SAASA,CAAC,QAAQ,yBAAgB;AAGlC,OAAO,MAAMC,oBAEZ,GAAG;EACFC,EAAE,EAAE;IAAEC,KAAK,EAAEH,CAAC,CAAC,EAAE,CAAC;IAAEI,MAAM,EAAEJ,CAAC,CAAC,EAAE,CAAC;IAAEK,YAAY,EAAEL,CAAC,CAAC,CAAC;EAAE,CAAC;EACvDM,EAAE,EAAE;IAAEH,KAAK,EAAEH,CAAC,CAAC,GAAG,CAAC;IAAEI,MAAM,EAAEJ,CAAC,CAAC,EAAE,CAAC;IAAEK,YAAY,EAAEL,CAAC,CAAC,CAAC;EAAE,CAAC;EACxDO,EAAE,EAAE;IAAEJ,KAAK,EAAEH,CAAC,CAAC,GAAG,CAAC;IAAEI,MAAM,EAAEJ,CAAC,CAAC,EAAE,CAAC;IAAEK,YAAY,EAAEL,CAAC,CAAC,EAAE;EAAE;AAC1D,CAAC;AAED,OAAO,MAAMQ,yBAAyB,GAAG,CACvC,UAAU,EACV,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,CACH","ignoreList":[]}
|
|
@@ -1,7 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { StyleSheet } from 'react-native';
|
|
4
|
-
|
|
4
|
+
import { RESERVED_IMAGE_STYLE_KEYS, THUMBNAIL_DIMENSIONS } from "./constants.js";
|
|
5
|
+
export function normalizeThumbnailDimensions(size) {
|
|
6
|
+
if (size === undefined || size === 'sm' || size === 'md' || size === 'lg') {
|
|
7
|
+
return {
|
|
8
|
+
dimensions: THUMBNAIL_DIMENSIONS[size ?? 'md'],
|
|
9
|
+
diagnostics: []
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (typeof size === 'object' && size !== null && !Array.isArray(size)) {
|
|
13
|
+
const {
|
|
14
|
+
width,
|
|
15
|
+
height,
|
|
16
|
+
borderRadius
|
|
17
|
+
} = size;
|
|
18
|
+
if (typeof width === 'number' && Number.isFinite(width) && width > 0 && typeof height === 'number' && Number.isFinite(height) && height > 0 && (borderRadius === undefined || typeof borderRadius === 'number' && Number.isFinite(borderRadius) && borderRadius >= 0)) {
|
|
19
|
+
return {
|
|
20
|
+
dimensions: {
|
|
21
|
+
width,
|
|
22
|
+
height,
|
|
23
|
+
borderRadius: borderRadius ?? THUMBNAIL_DIMENSIONS.md.borderRadius
|
|
24
|
+
},
|
|
25
|
+
diagnostics: []
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
dimensions: THUMBNAIL_DIMENSIONS.md,
|
|
31
|
+
diagnostics: ['size']
|
|
32
|
+
};
|
|
33
|
+
}
|
|
5
34
|
function invalidStyle() {
|
|
6
35
|
return {
|
|
7
36
|
style: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StyleSheet","RESERVED_IMAGE_STYLE_KEYS","
|
|
1
|
+
{"version":3,"names":["StyleSheet","RESERVED_IMAGE_STYLE_KEYS","THUMBNAIL_DIMENSIONS","normalizeThumbnailDimensions","size","undefined","dimensions","diagnostics","Array","isArray","width","height","borderRadius","Number","isFinite","md","invalidStyle","style","isEmptyStyleInput","value","every","sanitizeThumbnailImageStyle","flattened","flatten","source","reserved","Set","foundReserved","sanitized","key","Object","entries","has","add","filter"],"sourceRoot":"../../../../../src","sources":["components/ui/Thumbnail/normalize.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { StyleSheet } from 'react-native';
|
|
4
|
-
import { r } from "../../../theme/index.js";
|
|
5
4
|
/** Thumbnail 静态样式 ——
|
|
6
5
|
* - `visualFrame`:固定尺寸、裁切、加载失败 placeholder
|
|
7
6
|
* - `ring`:始终存在的 2pt visual overlay,selected 只切颜色 */
|
|
@@ -12,33 +11,11 @@ export const makeStyles = c => StyleSheet.create({
|
|
|
12
11
|
},
|
|
13
12
|
ring: {
|
|
14
13
|
borderWidth: 2
|
|
14
|
+
},
|
|
15
|
+
fallback: {
|
|
16
|
+
...StyleSheet.absoluteFill,
|
|
17
|
+
alignItems: 'center',
|
|
18
|
+
justifyContent: 'center'
|
|
15
19
|
}
|
|
16
20
|
});
|
|
17
|
-
|
|
18
|
-
/** Thumbnail size 阶梯 —— width / height / borderRadius 全 r() 缩放。
|
|
19
|
-
* 新增 size 在 types.ts 加 union + 这里加 case,两处同步。 */
|
|
20
|
-
export const sizingFor = size => {
|
|
21
|
-
switch (size) {
|
|
22
|
-
case 'sm':
|
|
23
|
-
return {
|
|
24
|
-
width: r(64),
|
|
25
|
-
height: r(40),
|
|
26
|
-
borderRadius: r(6)
|
|
27
|
-
};
|
|
28
|
-
case 'lg':
|
|
29
|
-
return {
|
|
30
|
-
width: r(160),
|
|
31
|
-
height: r(96),
|
|
32
|
-
borderRadius: r(10)
|
|
33
|
-
};
|
|
34
|
-
case 'md':
|
|
35
|
-
default:
|
|
36
|
-
// 113×67 与 NewsList / NewsArea 历史一致,16:9.5 接近视频宽高比
|
|
37
|
-
return {
|
|
38
|
-
width: r(113),
|
|
39
|
-
height: r(67),
|
|
40
|
-
borderRadius: r(8)
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
21
|
//# sourceMappingURL=styles.js.map
|