@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
package/README.md
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
# @unif/react-native-design
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
[](https://github.com/unif-design/react-native-design/actions/workflows/ci.yml)
|
|
5
|
-
[](LICENSE)
|
|
6
|
-
[](https://unif-design.github.io/react-native-design/)
|
|
3
|
+
Unif 的 React Native 设计系统,提供基础组件、主题、字体、图标和通用 UI 组合。
|
|
7
4
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
## 特性
|
|
11
|
-
|
|
12
|
-
- **运行时主题**:`useColors()` 角色 token 跟随系统 light/dark 自动切换;`useThemedStyles` + 模块顶层 `makeStyles` 缓存样式,绝不内联 hex。
|
|
13
|
-
- **40+ 组件**:Button、Card、Ribbon、Cell、NavBar、Toast 等原子组件 + AvatarWithRing、GlassStats 等通用复合组件,全部从包根 barrel 导出,无需深路径。
|
|
14
|
-
- **a11y 内建**:交互组件预设 `accessibilityRole`;`IconButton` 的 `accessibilityLabel` 为类型必填。
|
|
15
|
-
- **图标集 + 严格 TS**:`IconName` 闭集类型、`<Icon>` 自动继承主题色;`strict` + `noUncheckedIndexedAccess`,类型随包发布。
|
|
5
|
+
[文档站](https://unif-design.github.io/react-native-design/) · [npm](https://www.npmjs.com/package/@unif/react-native-design) · [组件展厅](example/README.md)
|
|
16
6
|
|
|
17
7
|
## 安装
|
|
18
8
|
|
|
@@ -20,178 +10,40 @@ Unif 设计系统 —— theme(设计令牌)+ 组件 + 图标 + utils,面向 Rea
|
|
|
20
10
|
yarn add @unif/react-native-design
|
|
21
11
|
```
|
|
22
12
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```sh
|
|
26
|
-
yarn add react-native-svg \
|
|
27
|
-
react-native-gesture-handler \
|
|
28
|
-
react-native-reanimated \
|
|
29
|
-
react-native-worklets \
|
|
30
|
-
react-native-safe-area-context \
|
|
31
|
-
react-native-reanimated-carousel \
|
|
32
|
-
@sbaiahmed1/react-native-blur
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
iOS 另需在 `ios/` 执行 `bundle exec pod install`。完整步骤见[文档站 · 快速开始](https://unif-design.github.io/react-native-design/docs/getting-started)。
|
|
36
|
-
|
|
37
|
-
`react-native-worklets` 的 Babel 插件与 Metro transformer 由宿主工程提供,不随本库分发 —— 宿主需自备与自身 RN 版本匹配的 `@babel/core`、`@react-native/babel-preset`、`@react-native/metro-config`;本仓验证组合为 RN `0.86.3` 与对应的 `0.86.3` 工具链。
|
|
38
|
-
|
|
39
|
-
`react-native-reanimated-carousel@5.0.0` 发布的 RNGH peer 是 `>=2.9.0 <3.0.0`,与本包要求的 `>=3.0.0 <4.0.0` 无交集;该组合已实测适配。消费端只能**接受这条警告**或加**只作用于 Carousel 的窄 override**(npm `overrides`、pnpm `peerDependencyRules.allowedVersions`、Yarn scoped `logFilters`),不要用全局 peer 忽略、`--force` 或 `--legacy-peer-deps`。本仓不使用全局 `logFilters`;`yarn check:runtime-peers` 只接受 root、example、website 三条精确的 RNRC 5 / RNGH 3 例外。
|
|
13
|
+
按[接入指南](website/docs/getting-started.md)安装 peer 依赖并完成原生与 Worklets 配置。支持范围见 [package.json](package.json),本库面向 React Native 新架构。
|
|
40
14
|
|
|
41
15
|
## 快速开始
|
|
42
16
|
|
|
43
|
-
|
|
17
|
+
应用根接入主题、手势和安全区,再从包根导入组件:
|
|
44
18
|
|
|
45
19
|
```tsx
|
|
46
|
-
import {
|
|
47
|
-
ThemeProvider,
|
|
48
|
-
ToastHost,
|
|
49
|
-
ConfirmHost,
|
|
50
|
-
Button,
|
|
51
|
-
useThemedStyles,
|
|
52
|
-
type ColorTokens,
|
|
53
|
-
} from '@unif/react-native-design';
|
|
54
|
-
import { View } from 'react-native';
|
|
20
|
+
import { Button, ThemeProvider } from '@unif/react-native-design';
|
|
55
21
|
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
56
22
|
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
57
23
|
|
|
58
|
-
|
|
59
|
-
const makeStyles = (c: ColorTokens) => ({
|
|
60
|
-
wrap: { padding: 16, backgroundColor: c.surface },
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
function Demo() {
|
|
64
|
-
const styles = useThemedStyles(makeStyles);
|
|
24
|
+
export function App() {
|
|
65
25
|
return (
|
|
66
|
-
<
|
|
67
|
-
<
|
|
68
|
-
|
|
26
|
+
<GestureHandlerRootView style={{ flex: 1 }}>
|
|
27
|
+
<SafeAreaProvider>
|
|
28
|
+
<ThemeProvider>
|
|
29
|
+
<Button label="保存" onPress={() => {}} />
|
|
30
|
+
</ThemeProvider>
|
|
31
|
+
</SafeAreaProvider>
|
|
32
|
+
</GestureHandlerRootView>
|
|
69
33
|
);
|
|
70
34
|
}
|
|
71
|
-
|
|
72
|
-
export const App = () => (
|
|
73
|
-
<GestureHandlerRootView style={{ flex: 1 }}>
|
|
74
|
-
<SafeAreaProvider>
|
|
75
|
-
<ThemeProvider>
|
|
76
|
-
<Demo />
|
|
77
|
-
<ToastHost />
|
|
78
|
-
<ConfirmHost />
|
|
79
|
-
</ThemeProvider>
|
|
80
|
-
</SafeAreaProvider>
|
|
81
|
-
</GestureHandlerRootView>
|
|
82
|
-
);
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## RN 0.86.3 组件展厅
|
|
86
|
-
|
|
87
|
-
仓库内的持久 `example/` 是 `@unif/react-native-design-example` workspace:它精确使用
|
|
88
|
-
React Native `0.86.3`、React `19.2.3`、New Architecture 和 Hermes,并通过 Metro
|
|
89
|
-
直接消费本仓 public package root。展厅只挂载当前路由,共有以下 8 个 scene:
|
|
90
|
-
|
|
91
|
-
| Scene ID | 标题 | 主要覆盖 |
|
|
92
|
-
| ------------- | -------------- | --------------------------------------------- |
|
|
93
|
-
| `foundation` | 基础能力与图标 | Theme、token、Icon、logger、testID |
|
|
94
|
-
| `actions` | 操作与状态 | Button、IconButton、Chip、Tag、StatusDot |
|
|
95
|
-
| `feedback` | 反馈与浮层 | Empty、动效、Blur、Toast、Confirm |
|
|
96
|
-
| `forms` | 表单与输入 | 文本输入、选择控件、Stepper(xs 为横向触控 < 44pt 的紧凑档)、Form |
|
|
97
|
-
| `navigation` | 导航组件 | NavBar、DrawerHeader、Tabs、Segmented、TabBar |
|
|
98
|
-
| `collections` | 容器与集合 | Card、Ribbon、Cell、List、Grid、EntryCard、Carousel |
|
|
99
|
-
| `media` | 媒体展示 | Avatar、AvatarGroup、Thumbnail、Logo 与图片失败边界 |
|
|
100
|
-
| `business` | 业务复合组件 | 渐变、背景、统计、头像环、版本状态 |
|
|
101
|
-
|
|
102
|
-
从仓库根目录执行:
|
|
103
|
-
|
|
104
|
-
```sh
|
|
105
|
-
yarn install --immutable
|
|
106
|
-
yarn example start
|
|
107
|
-
yarn example android
|
|
108
|
-
yarn example ios
|
|
109
|
-
|
|
110
|
-
yarn verify:example-showcase
|
|
111
|
-
yarn example typecheck
|
|
112
|
-
yarn example lint
|
|
113
|
-
yarn example test --maxWorkers=2
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
iOS 首次运行或 native 依赖变化后,先执行
|
|
117
|
-
`cd example && bundle install`,再执行
|
|
118
|
-
`cd example && bundle exec pod install --project-directory=ios`。完整启动步骤、主题与
|
|
119
|
-
fontScale 操作,以及 VoiceOver/TalkBack、真机、旋转、remote image failure 等尚需人工
|
|
120
|
-
执行的矩阵见 [`example/README.md`](example/README.md)。自动化结果不等同于真机或 a11y
|
|
121
|
-
验收通过。
|
|
122
|
-
|
|
123
|
-
Media 默认 success fixture 是项目部署的
|
|
124
|
-
`https://unif-design.github.io/react-native-design/img/logo.png`,failure specimen 使用固定的
|
|
125
|
-
invalid-image fixture
|
|
126
|
-
`https://unif-design.github.io/react-native-design/example-fixtures/media-decode-failure-v1.png`,
|
|
127
|
-
确保 HTTP 成功后仍稳定进入 native decode failure/fallback 分支。
|
|
128
|
-
Jest 只证明 source wiring 以及合成 load/error event 后的组件状态;真实 HTTPS、缓存和 native
|
|
129
|
-
decode 仍按 `example/README.md` 的 Android/iOS 手工矩阵标记为待执行。
|
|
130
|
-
|
|
131
|
-
## 文档
|
|
132
|
-
|
|
133
|
-
- **文档站**(快速开始 · 组件 API · 设计令牌 · 设计原则):https://unif-design.github.io/react-native-design/
|
|
134
|
-
- **在宿主工程里测试**(一行接入 `@unif/react-native-design/jest-preset`):
|
|
135
|
-
https://unif-design.github.io/react-native-design/docs/testing
|
|
136
|
-
- **AI / LLM**(纯 Markdown,按需 fetch,别凭记忆猜 API):
|
|
137
|
-
[llms.txt 索引](https://unif-design.github.io/react-native-design/llms.txt) · [llms-full.txt 全文](https://unif-design.github.io/react-native-design/llms-full.txt)
|
|
138
|
-
- **Agent Skill** `design`(`unif` plugin,覆盖组件 API、token 规则、与原生 RN 的关键差异):
|
|
139
|
-
`/plugin marketplace add unif-design/skills` → `/plugin install unif@skills`
|
|
140
|
-
|
|
141
|
-
## 临时原生验证宿主(runtime harness)
|
|
142
|
-
|
|
143
|
-
```sh
|
|
144
|
-
yarn create:runtime-harness
|
|
145
35
|
```
|
|
146
36
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
它做的事:
|
|
150
|
-
|
|
151
|
-
1. `yarn prepare` + `yarn pack` 打包**当前源码**,harness 装的是 `file:` tarball,不是 registry 上的版本;
|
|
152
|
-
2. 用 `yarn.lock` 里钉死的官方 `@react-native-community/cli@20.1.0` + `@react-native-community/template@0.86.3` 生成脚手架 —— 两者的版本、template 自带的 React / RN / CLI 版本、以及锁文件里的 `checksum` 都会先校验,任一不符立即失败;
|
|
153
|
-
3. 枚举根 `peerDependencies` 的**每一个**非 optional 项,从根 direct range 精确匹配 `yarn.lock` locator,并交叉验证 installed version 与 peer range;`@babel/core` / `@react-native/metro-config` 也走同一链路,在首次安装前写成精确版本;
|
|
154
|
-
4. 配好 Babel(`react-native-worklets/plugin` 排最后)、Metro、RNGH root import,拷入 `manual-tests/runtime-api/RuntimeApiScreen.tsx`,并逐文件核对生成的 Podfile / Android Gradle 文件与 installed template 捕获的摘要;
|
|
155
|
-
5. 首次 `yarn install` 只在脚本自持的临时 app 内生成 `yarn.lock`,随后立即以同一 manifest / lock 执行 `yarn install --immutable` 最终复验,再执行 `bundle install` + `bundle exec pod install`;完整流程成功后才保留并打印绝对路径与全部 provider 版本。
|
|
156
|
-
|
|
157
|
-
边界:
|
|
158
|
-
|
|
159
|
-
- app 只建在**脚本自持的系统临时目录**里(`fs.mkdtempSync`),**不接受调用方传目录**;脚手架之后的任一步失败也会递归删除自己那一个临时路径,只有完整成功才保留。
|
|
160
|
-
- **完全不读、不写、不复制持久 `example/`** —— 两者职责不同:`example/` 提供公共面
|
|
161
|
-
coverage 与可运行 RN `0.86.3` native shell;临时 runtime harness 专门验证 packed
|
|
162
|
-
tarball、负向路径与竞态,不替代展厅。
|
|
163
|
-
- 生成物不入库。
|
|
164
|
-
|
|
165
|
-
随后在**打印出来的那个目录**里执行(不是在本仓):
|
|
166
|
-
|
|
167
|
-
```sh
|
|
168
|
-
yarn android
|
|
169
|
-
yarn ios
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
harness 不继承本仓 `check:runtime-peers` 的 workspace 精确 allowlist;安装输出会如实暴露这条已知的 RNRC / RNGH peer warning,等同消费端实际可见结果。
|
|
173
|
-
|
|
174
|
-
## 兼容性
|
|
175
|
-
|
|
176
|
-
支持范围严格来自 `package.json#peerDependencies`;本仓直接验证的版本是 RN `0.86.3` + React `19.2.3`。
|
|
177
|
-
|
|
178
|
-
| 依赖 | 支持范围 | 本仓验证版本 |
|
|
179
|
-
| ---------------------------------- | ------------------ | ------------ |
|
|
180
|
-
| `react-native` | `>=0.86.0` | `0.86.3` |
|
|
181
|
-
| `react` | `>=19.2.3 <20.0.0` | `19.2.3` |
|
|
182
|
-
| `react-native-gesture-handler` | `>=3.0.0 <4.0.0` | `3.1.0` |
|
|
183
|
-
| `react-native-reanimated` | `>=4.5.2 <4.7.0` | `4.6.0` |
|
|
184
|
-
| `react-native-worklets` | `>=0.11.0 <0.13.0` | `0.12.1` |
|
|
185
|
-
| `react-native-reanimated-carousel` | `>=5.0.0 <6.0.0` | `5.0.0` |
|
|
186
|
-
| `react-native-safe-area-context` | `>=5` | `5.8.0` |
|
|
187
|
-
| `react-native-svg` | `>=15` | `15.15.5` |
|
|
188
|
-
| `@sbaiahmed1/react-native-blur` | `>=4` | `6.0.1` |
|
|
37
|
+
需要 Toast 或 Confirm 时再接入对应 Host。组件继承主题与应用字号;主题 API、组件参数和宿主配置见文档站。
|
|
189
38
|
|
|
190
|
-
|
|
191
|
-
- `react-native` peer 不封顶;当前验证基线是 RN `0.86.3`,同时保留对 Portal 所用 RN `0.86.3` 的安装兼容。
|
|
192
|
-
- Node.js `^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0`(`package.json#engines`;本仓 `.nvmrc` 固定 `v24.13.0`)
|
|
193
|
-
- TypeScript 6、Yarn 4
|
|
39
|
+
## 按需阅读
|
|
194
40
|
|
|
195
|
-
|
|
41
|
+
| 想做什么 | 入口 |
|
|
42
|
+
| -------------------- | ----------------------------------------------- |
|
|
43
|
+
| 查组件与 API | [组件索引](website/docs/components/overview.md) |
|
|
44
|
+
| 运行展厅 | [example](example/README.md) |
|
|
45
|
+
| 验证场景与平台行为 | [展厅指南](example/GUIDE.md) |
|
|
46
|
+
| 在应用里编写测试 | [测试接入](website/docs/testing.md) |
|
|
47
|
+
| 修改库或了解目标架构 | [开发资料](docs/DEVELOPMENT.md) |
|
|
196
48
|
|
|
197
|
-
MIT
|
|
49
|
+
[AI 文档索引](https://unif-design.github.io/react-native-design/llms.txt) · [研发技能](https://github.com/unif-skill/unif-portal-dev-skills) · [MIT 许可](LICENSE)
|
|
@@ -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":[]}
|