@unif/react-native-design 0.28.0 → 0.30.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 +14 -14
- package/jest-resolver.js +12 -1
- package/jest-setup.js +26 -8
- package/lib/module/components/ui/Avatar/Avatar.js +4 -3
- package/lib/module/components/ui/Avatar/Avatar.js.map +1 -1
- package/lib/module/components/ui/Avatar/styles.js +10 -2
- package/lib/module/components/ui/Avatar/styles.js.map +1 -1
- package/lib/module/components/ui/AvatarGroup/AvatarGroup.js +112 -0
- package/lib/module/components/ui/AvatarGroup/AvatarGroup.js.map +1 -0
- package/lib/module/components/ui/AvatarGroup/index.js +4 -0
- package/lib/module/components/ui/AvatarGroup/index.js.map +1 -0
- package/lib/module/components/ui/AvatarGroup/layout.js +44 -0
- package/lib/module/components/ui/AvatarGroup/layout.js.map +1 -0
- package/lib/module/components/ui/AvatarGroup/normalize.js +20 -0
- package/lib/module/components/ui/AvatarGroup/normalize.js.map +1 -0
- package/lib/module/components/ui/AvatarGroup/styles.js +20 -0
- package/lib/module/components/ui/AvatarGroup/styles.js.map +1 -0
- package/lib/module/components/ui/AvatarGroup/types.js +4 -0
- package/lib/module/components/ui/AvatarGroup/types.js.map +1 -0
- package/lib/module/components/ui/CircularProgress/CircularProgress.js +108 -0
- package/lib/module/components/ui/CircularProgress/CircularProgress.js.map +1 -0
- package/lib/module/components/ui/CircularProgress/index.js +4 -0
- package/lib/module/components/ui/CircularProgress/index.js.map +1 -0
- package/lib/module/components/ui/CircularProgress/normalizeCircularProgress.js +42 -0
- package/lib/module/components/ui/CircularProgress/normalizeCircularProgress.js.map +1 -0
- package/lib/module/components/ui/CircularProgress/types.js +4 -0
- package/lib/module/components/ui/CircularProgress/types.js.map +1 -0
- package/lib/module/components/ui/index.js +2 -0
- package/lib/module/components/ui/index.js.map +1 -1
- package/lib/typescript/manual-tests/runtime-api/RuntimeApiScreen.d.ts +1 -1
- package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts +2 -2
- package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Avatar/index.d.ts +1 -1
- package/lib/typescript/src/components/ui/Avatar/index.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Avatar/styles.d.ts +4 -2
- package/lib/typescript/src/components/ui/Avatar/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Avatar/types.d.ts +4 -0
- package/lib/typescript/src/components/ui/Avatar/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/AvatarGroup/AvatarGroup.d.ts +5 -0
- package/lib/typescript/src/components/ui/AvatarGroup/AvatarGroup.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/AvatarGroup/index.d.ts +3 -0
- package/lib/typescript/src/components/ui/AvatarGroup/index.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/AvatarGroup/layout.d.ts +16 -0
- package/lib/typescript/src/components/ui/AvatarGroup/layout.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/AvatarGroup/normalize.d.ts +9 -0
- package/lib/typescript/src/components/ui/AvatarGroup/normalize.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/AvatarGroup/styles.d.ts +17 -0
- package/lib/typescript/src/components/ui/AvatarGroup/styles.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/AvatarGroup/types.d.ts +36 -0
- package/lib/typescript/src/components/ui/AvatarGroup/types.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/CircularProgress/CircularProgress.d.ts +3 -0
- package/lib/typescript/src/components/ui/CircularProgress/CircularProgress.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/CircularProgress/index.d.ts +3 -0
- package/lib/typescript/src/components/ui/CircularProgress/index.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/CircularProgress/normalizeCircularProgress.d.ts +15 -0
- package/lib/typescript/src/components/ui/CircularProgress/normalizeCircularProgress.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/CircularProgress/types.d.ts +24 -0
- package/lib/typescript/src/components/ui/CircularProgress/types.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/index.d.ts +5 -1
- package/lib/typescript/src/components/ui/index.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/components/ui/Avatar/Avatar.tsx +9 -3
- package/src/components/ui/Avatar/index.ts +6 -1
- package/src/components/ui/Avatar/styles.ts +14 -3
- package/src/components/ui/Avatar/types.ts +5 -0
- package/src/components/ui/AvatarGroup/AvatarGroup.tsx +147 -0
- package/src/components/ui/AvatarGroup/index.ts +2 -0
- package/src/components/ui/AvatarGroup/layout.ts +56 -0
- package/src/components/ui/AvatarGroup/normalize.ts +28 -0
- package/src/components/ui/AvatarGroup/styles.ts +19 -0
- package/src/components/ui/AvatarGroup/types.ts +40 -0
- package/src/components/ui/CircularProgress/CircularProgress.tsx +111 -0
- package/src/components/ui/CircularProgress/index.ts +2 -0
- package/src/components/ui/CircularProgress/normalizeCircularProgress.ts +64 -0
- package/src/components/ui/CircularProgress/types.ts +24 -0
- package/src/components/ui/index.ts +10 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://unif-design.github.io/react-native-design/)
|
|
7
7
|
|
|
8
|
-
Unif 设计系统 —— theme(设计令牌)+ 组件 + 图标 + utils,面向 React Native 0.86 新架构(Fabric + TurboModule)。所有 Unif 应用与端能力包的 UI 基座。
|
|
8
|
+
Unif 设计系统 —— theme(设计令牌)+ 组件 + 图标 + utils,面向 React Native 0.86+ 新架构(Fabric + TurboModule)。所有 Unif 应用与端能力包的 UI 基座。
|
|
9
9
|
|
|
10
10
|
## 特性
|
|
11
11
|
|
|
@@ -34,7 +34,7 @@ yarn add react-native-svg \
|
|
|
34
34
|
|
|
35
35
|
iOS 另需在 `ios/` 执行 `bundle exec pod install`。完整步骤见[文档站 · 快速开始](https://unif-design.github.io/react-native-design/docs/getting-started)。
|
|
36
36
|
|
|
37
|
-
`react-native-worklets` 的 Babel 插件与 Metro transformer 由宿主工程提供,不随本库分发 ——
|
|
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
38
|
|
|
39
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 例外。
|
|
40
40
|
|
|
@@ -82,10 +82,10 @@ export const App = () => (
|
|
|
82
82
|
);
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
## RN 0.86.
|
|
85
|
+
## RN 0.86.3 组件展厅
|
|
86
86
|
|
|
87
87
|
仓库内的持久 `example/` 是 `@unif/react-native-design-example` workspace:它精确使用
|
|
88
|
-
React Native `0.86.
|
|
88
|
+
React Native `0.86.3`、React `19.2.3`、New Architecture 和 Hermes,并通过 Metro
|
|
89
89
|
直接消费本仓 public package root。展厅只挂载当前路由,共有以下 8 个 scene:
|
|
90
90
|
|
|
91
91
|
| Scene ID | 标题 | 主要覆盖 |
|
|
@@ -96,7 +96,7 @@ React Native `0.86.2`、React `19.2.3`、New Architecture 和 Hermes,并通过
|
|
|
96
96
|
| `forms` | 表单与输入 | 文本输入、选择控件、Stepper(xs 为横向触控 < 44pt 的紧凑档)、Form |
|
|
97
97
|
| `navigation` | 导航组件 | NavBar、DrawerHeader、Tabs、Segmented、TabBar |
|
|
98
98
|
| `collections` | 容器与集合 | Card、Ribbon、Cell、List、Grid、EntryCard、Carousel |
|
|
99
|
-
| `media` | 媒体展示 | Avatar、Thumbnail、Logo 与图片失败边界
|
|
99
|
+
| `media` | 媒体展示 | Avatar、AvatarGroup、Thumbnail、Logo 与图片失败边界 |
|
|
100
100
|
| `business` | 业务复合组件 | 渐变、背景、统计、头像环、版本状态 |
|
|
101
101
|
|
|
102
102
|
从仓库根目录执行:
|
|
@@ -144,12 +144,12 @@ decode 仍按 `example/README.md` 的 Android/iOS 手工矩阵标记为待执行
|
|
|
144
144
|
yarn create:runtime-harness
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
该命令**现场生成**一个一次性的 RN `0.86.
|
|
147
|
+
该命令**现场生成**一个一次性的 RN `0.86.3` app,用于人工验证 Jest 覆盖不到的部分:真实 native / Web 结构、44pt 命中框、a11y tree、reduced motion 与命令式 API 的竞态。
|
|
148
148
|
|
|
149
149
|
它做的事:
|
|
150
150
|
|
|
151
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.
|
|
152
|
+
2. 用 `yarn.lock` 里钉死的官方 `@react-native-community/cli@20.1.0` + `@react-native-community/template@0.86.3` 生成脚手架 —— 两者的版本、template 自带的 React / RN / CLI 版本、以及锁文件里的 `checksum` 都会先校验,任一不符立即失败;
|
|
153
153
|
3. 枚举根 `peerDependencies` 的**每一个**非 optional 项,从根 direct range 精确匹配 `yarn.lock` locator,并交叉验证 installed version 与 peer range;`@babel/core` / `@react-native/metro-config` 也走同一链路,在首次安装前写成精确版本;
|
|
154
154
|
4. 配好 Babel(`react-native-worklets/plugin` 排最后)、Metro、RNGH root import,拷入 `manual-tests/runtime-api/RuntimeApiScreen.tsx`,并逐文件核对生成的 Podfile / Android Gradle 文件与 installed template 捕获的摘要;
|
|
155
155
|
5. 首次 `yarn install` 只在脚本自持的临时 app 内生成 `yarn.lock`,随后立即以同一 manifest / lock 执行 `yarn install --immutable` 最终复验,再执行 `bundle install` + `bundle exec pod install`;完整流程成功后才保留并打印绝对路径与全部 provider 版本。
|
|
@@ -158,7 +158,7 @@ yarn create:runtime-harness
|
|
|
158
158
|
|
|
159
159
|
- app 只建在**脚本自持的系统临时目录**里(`fs.mkdtempSync`),**不接受调用方传目录**;脚手架之后的任一步失败也会递归删除自己那一个临时路径,只有完整成功才保留。
|
|
160
160
|
- **完全不读、不写、不复制持久 `example/`** —— 两者职责不同:`example/` 提供公共面
|
|
161
|
-
coverage 与可运行 RN `0.86.
|
|
161
|
+
coverage 与可运行 RN `0.86.3` native shell;临时 runtime harness 专门验证 packed
|
|
162
162
|
tarball、负向路径与竞态,不替代展厅。
|
|
163
163
|
- 生成物不入库。
|
|
164
164
|
|
|
@@ -173,22 +173,22 @@ harness 不继承本仓 `check:runtime-peers` 的 workspace 精确 allowlist;
|
|
|
173
173
|
|
|
174
174
|
## 兼容性
|
|
175
175
|
|
|
176
|
-
支持范围严格来自 `package.json#peerDependencies`;本仓直接验证的版本是 RN `0.86.
|
|
176
|
+
支持范围严格来自 `package.json#peerDependencies`;本仓直接验证的版本是 RN `0.86.3` + React `19.2.3`。
|
|
177
177
|
|
|
178
178
|
| 依赖 | 支持范围 | 本仓验证版本 |
|
|
179
179
|
| ---------------------------------- | ------------------ | ------------ |
|
|
180
|
-
| `react-native` | `>=0.86.0` | `0.86.
|
|
180
|
+
| `react-native` | `>=0.86.0` | `0.86.3` |
|
|
181
181
|
| `react` | `>=19.2.3 <20.0.0` | `19.2.3` |
|
|
182
182
|
| `react-native-gesture-handler` | `>=3.0.0 <4.0.0` | `3.1.0` |
|
|
183
|
-
| `react-native-reanimated` | `>=4.5.2 <4.
|
|
184
|
-
| `react-native-worklets` | `>=0.11.0 <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
185
|
| `react-native-reanimated-carousel` | `>=5.0.0 <6.0.0` | `5.0.0` |
|
|
186
186
|
| `react-native-safe-area-context` | `>=5` | `5.8.0` |
|
|
187
187
|
| `react-native-svg` | `>=15` | `15.15.5` |
|
|
188
|
-
| `@sbaiahmed1/react-native-blur` | `>=4` | `
|
|
188
|
+
| `@sbaiahmed1/react-native-blur` | `>=4` | `6.0.1` |
|
|
189
189
|
|
|
190
190
|
- 新架构(Fabric + TurboModule)必须开启;旧架构 Bridge、RN `0.85` 及更低版本不在支持范围。
|
|
191
|
-
- `react-native` peer
|
|
191
|
+
- `react-native` peer 不封顶;当前验证基线是 RN `0.86.3`,同时保留对 Portal 所用 RN `0.86.3` 的安装兼容。
|
|
192
192
|
- Node.js `^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0`(`package.json#engines`;本仓 `.nvmrc` 固定 `v24.13.0`)
|
|
193
193
|
- TypeScript 6、Yarn 4
|
|
194
194
|
|
package/jest-resolver.js
CHANGED
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
* - worklets 官方 resolver(`react-native-worklets/jest/resolver`)的语义:
|
|
11
11
|
* 对 worklets 相关请求过滤 .native.* extension,让 jest 走 web 实现,
|
|
12
12
|
* 不触发 native init。
|
|
13
|
+
* - Reanimated 4.6 的 native initializer / mapper / mutable 分别会注册
|
|
14
|
+
* native-only CSS handler、调用原生调度函数、创建原生 shareable。Jest 使用
|
|
15
|
+
* JSReanimated + Worklets mock,这些路径都不可用。只让这些模块走通用实现,
|
|
16
|
+
* 避免把其余 Jest utilities 切到依赖 react-native-web 内部路径的 web 实现。
|
|
13
17
|
*
|
|
14
18
|
* jest 的 config `resolver` 是标量,直接写 worklets 的会把 RN 的顶掉,
|
|
15
19
|
* 所以把 worklets 的 extension 过滤内联在这里,再委托给 RN 的 resolver。
|
|
@@ -18,9 +22,16 @@
|
|
|
18
22
|
const reactNativeResolver = require('@react-native/jest-preset/jest/resolver.js');
|
|
19
23
|
|
|
20
24
|
module.exports = (request, options) => {
|
|
25
|
+
const isReanimatedJestIncompatibleModule =
|
|
26
|
+
options.basedir.includes('react-native-reanimated') &&
|
|
27
|
+
(request === './initializers' ||
|
|
28
|
+
request.endsWith('/mappers') ||
|
|
29
|
+
request.endsWith('/mutables'));
|
|
30
|
+
|
|
21
31
|
if (
|
|
22
32
|
options.basedir.includes('react-native-worklets') ||
|
|
23
|
-
request.includes('react-native-worklets')
|
|
33
|
+
request.includes('react-native-worklets') ||
|
|
34
|
+
isReanimatedJestIncompatibleModule
|
|
24
35
|
) {
|
|
25
36
|
options = {
|
|
26
37
|
...options,
|
package/jest-setup.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* `@unif/react-native-design/jest-setup` —— 把本库 9 个 runtime peer 里在 Jest 中
|
|
7
7
|
* 需要接线的那 4 个接上各自的**官方**桩 / mock / setup。放进消费者的
|
|
8
|
-
* `setupFilesAfterEnv`。
|
|
8
|
+
* `setupFilesAfterEnv`。
|
|
9
9
|
*
|
|
10
10
|
* 为什么由库提供:这份接线完全由本库的 peer 集决定,peer range 一变它就得变。
|
|
11
11
|
* 让每个消费仓自己推导的结果是 5 个仓 5 种写法、3 个仓各自踩同一个坑
|
|
@@ -40,10 +40,28 @@ jest.mock('react-native-gesture-handler', () => ({
|
|
|
40
40
|
GestureDetector: ({ children }) => children,
|
|
41
41
|
}));
|
|
42
42
|
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
require('react-native-reanimated')
|
|
43
|
+
// Reanimated 4.6 的官方 mock 已覆盖本库使用的 hooks;真实 native 组件链会在
|
|
44
|
+
// React 19 test renderer 中尝试查 host instance / native style handle,不能用于 Jest。
|
|
45
|
+
// 上游 mock 的 useSharedValue 每次 render 都返回新 Proxy,会让把 shared value 放进
|
|
46
|
+
// effect 依赖数组的组件(本库 ToastHost)反复执行,所以只把这个 hook 稳定化。
|
|
47
|
+
jest.mock('react-native-reanimated', () => {
|
|
48
|
+
const React = require('react');
|
|
49
|
+
const reanimatedMock = require('react-native-reanimated/mock');
|
|
50
|
+
|
|
51
|
+
function useStableSharedValue(initialValue) {
|
|
52
|
+
const sharedValueRef = React.useRef();
|
|
53
|
+
if (sharedValueRef.current === undefined) {
|
|
54
|
+
sharedValueRef.current = reanimatedMock.useSharedValue(initialValue);
|
|
55
|
+
}
|
|
56
|
+
return sharedValueRef.current;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
...reanimatedMock,
|
|
61
|
+
useSharedValue: useStableSharedValue,
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// 用 actual 只安装官方 matcher / timer;不要提前 require 已注册的模块 mock,
|
|
66
|
+
// 否则消费仓在单测内追加的 jest.mock('react-native-reanimated', ...) 无法覆盖它。
|
|
67
|
+
jest.requireActual('react-native-reanimated').setUpTests();
|
|
@@ -5,10 +5,10 @@ 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, sizingFor, styles } from "./styles.js";
|
|
8
|
+
import { paletteFor, resolveAvatarBorderRadius, sizingFor, styles } from "./styles.js";
|
|
9
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* 头像 —— 2 种形态 × 5 档尺寸 × 4 种配色 × 可选图片 source。
|
|
12
12
|
*
|
|
13
13
|
* 合法 source 由 keyed ImageAttempt 独立持有失败状态;非法 source 或加载失败
|
|
14
14
|
* 时渲染 label + variant 背景色。
|
|
@@ -16,6 +16,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
16
16
|
export function Avatar({
|
|
17
17
|
label,
|
|
18
18
|
size = 'md',
|
|
19
|
+
shape = 'circle',
|
|
19
20
|
variant = 'neutral',
|
|
20
21
|
source,
|
|
21
22
|
style,
|
|
@@ -39,7 +40,7 @@ export function Avatar({
|
|
|
39
40
|
style: [styles.base, {
|
|
40
41
|
width: dims.box,
|
|
41
42
|
height: dims.box,
|
|
42
|
-
borderRadius:
|
|
43
|
+
borderRadius: resolveAvatarBorderRadius(size, shape),
|
|
43
44
|
backgroundColor: palette.bg
|
|
44
45
|
}, style],
|
|
45
46
|
accessible: !!label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Text","View","scaleFontMetric","useColors","useFontScale","resolveImageSource","ImageAttempt","paletteFor","sizingFor","styles","jsx","_jsx","Avatar","label","size","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,
|
|
1
|
+
{"version":3,"names":["React","Text","View","scaleFontMetric","useColors","useFontScale","resolveImageSource","ImageAttempt","paletteFor","resolveAvatarBorderRadius","sizingFor","styles","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,SACEC,UAAU,EACVC,yBAAyB,EACzBC,SAAS,EACTC,MAAM,QACD,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGlB;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,GAAGd,SAAS,CAACM,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,CAACT,MAAM,CAACI,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,CACLT,MAAM,CAACwB,IAAI,EACX;MACEC,KAAK,EAAEZ,IAAI,CAACa,GAAG;MACfC,MAAM,EAAEd,IAAI,CAACa,GAAG;MAChBE,YAAY,EAAE9B,yBAAyB,CAACO,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,EAAET,MAAM,CAACkC,KAAM;MACpBC,UAAU,EAAC;IAAO,GAJblB,cAAc,CAACmB,GAKrB;EACF,CACG,CAAC;AAEX","ignoreList":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { StyleSheet } from 'react-native';
|
|
4
|
-
import { avatar, fw, rf } from "../../../theme/index.js";
|
|
5
|
-
/** Avatar 静态 base ——
|
|
4
|
+
import { avatar, fw, radius, rf } from "../../../theme/index.js";
|
|
5
|
+
/** Avatar 静态 base —— 容器圆角 / 尺寸由 resolver 派生。 */
|
|
6
6
|
export const styles = StyleSheet.create({
|
|
7
7
|
base: {
|
|
8
8
|
alignItems: 'center',
|
|
@@ -51,6 +51,14 @@ export function sizingFor(size) {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
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
|
+
|
|
54
62
|
/** Avatar 配色推导:4 种 variant → { bg, fg }。签名与 Tag/Button 的 paletteFor 一致。 */
|
|
55
63
|
export function paletteFor(variant, c) {
|
|
56
64
|
switch (variant) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StyleSheet","avatar","fw","rf","styles","create","base","alignItems","justifyContent","overflow","label","fontWeight","semi","lineHeight","undefined","image","width","height","sizingFor","size","box","xs","fs","sm","md","lg","xl","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,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAA0B,yBAAgB;
|
|
1
|
+
{"version":3,"names":["StyleSheet","avatar","fw","radius","rf","styles","create","base","alignItems","justifyContent","overflow","label","fontWeight","semi","lineHeight","undefined","image","width","height","sizingFor","size","box","xs","fs","sm","md","lg","xl","resolveAvatarBorderRadius","shape","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,MAAM,EAAEC,EAAE,EAAEC,MAAM,EAAEC,EAAE,QAA0B,yBAAgB;AAGzE;AACA,OAAO,MAAMC,MAAM,GAAGL,UAAU,CAACM,MAAM,CAAC;EACtCC,IAAI,EAAE;IACJC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,QAAQ,EAAE;EACZ,CAAC;EACDC,KAAK,EAAE;IACLC,UAAU,EAAEV,EAAE,CAACW,IAAI;IACnBC,UAAU,EAAEC;EACd,CAAC;EACDC,KAAK,EAAE;IACLC,KAAK,EAAE,MAAM;IACbC,MAAM,EAAE;EACV;AACF,CAAC,CAAC;;AAEF;AACA;AACA,OAAO,SAASC,SAASA,CAACC,IAAgB,EAA+B;EACvE,QAAQA,IAAI;IACV,KAAK,IAAI;MACP,OAAO;QAAEC,GAAG,EAAEpB,MAAM,CAACqB,EAAE;QAAEC,EAAE,EAAEnB,EAAE,CAAC,EAAE;MAAE,CAAC;IACvC,KAAK,IAAI;MACP,OAAO;QAAEiB,GAAG,EAAEpB,MAAM,CAACuB,EAAE;QAAED,EAAE,EAAEnB,EAAE,CAAC,EAAE;MAAE,CAAC;IACvC,KAAK,IAAI;MACP,OAAO;QAAEiB,GAAG,EAAEpB,MAAM,CAACwB,EAAE;QAAEF,EAAE,EAAEnB,EAAE,CAAC,EAAE;MAAE,CAAC;IACvC,KAAK,IAAI;MACP,OAAO;QAAEiB,GAAG,EAAEpB,MAAM,CAACyB,EAAE;QAAEH,EAAE,EAAEnB,EAAE,CAAC,EAAE;MAAE,CAAC;IACvC,KAAK,IAAI;MACP,OAAO;QAAEiB,GAAG,EAAEpB,MAAM,CAAC0B,EAAE;QAAEJ,EAAE,EAAEnB,EAAE,CAAC,EAAE;MAAE,CAAC;EACzC;AACF;;AAEA;AACA,OAAO,SAASwB,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,OAAOjB,MAAM,CAACmB,EAAE;EACpD,IAAIF,IAAI,KAAK,IAAI,EAAE,OAAOjB,MAAM,CAACsB,EAAE;EACnC,OAAOtB,MAAM,CAACqB,EAAE;AAClB;;AAEA;AACA,OAAO,SAASM,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":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect } from 'react';
|
|
4
|
+
import { Text, View } from 'react-native';
|
|
5
|
+
import { Pressable } from 'react-native-gesture-handler';
|
|
6
|
+
import { pressedOpacity, scaleFontMetric, useColors, useFontScale, useThemedStyles } from "../../../theme/index.js";
|
|
7
|
+
import { createLogger } from "../../../utils/logger/index.js";
|
|
8
|
+
import { childTestID } from "../../../utils/testID/index.js";
|
|
9
|
+
import { Avatar } from "../Avatar/index.js";
|
|
10
|
+
import { resolveAvatarBorderRadius, sizingFor } from "../Avatar/styles.js";
|
|
11
|
+
import { normalizeNonBlankText } from "../shared/accessibilityName.js";
|
|
12
|
+
import { resolveAvatarGroupLayout } from "./layout.js";
|
|
13
|
+
import { normalizeAvatarGroup } from "./normalize.js";
|
|
14
|
+
import { makeStyles } from "./styles.js";
|
|
15
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
|
+
const log = createLogger('AvatarGroup');
|
|
17
|
+
const warned = new Set();
|
|
18
|
+
function warnOnce(key, message) {
|
|
19
|
+
if (warned.has(key)) return;
|
|
20
|
+
warned.add(key);
|
|
21
|
+
log.warn(message);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** 重叠头像组;只拥有布局、溢出计数和可选溢出 action。 */
|
|
25
|
+
export function AvatarGroup({
|
|
26
|
+
items,
|
|
27
|
+
size = 'md',
|
|
28
|
+
shape = 'circle',
|
|
29
|
+
max,
|
|
30
|
+
style,
|
|
31
|
+
testID,
|
|
32
|
+
onOverflowPress,
|
|
33
|
+
overflowAccessibilityLabel,
|
|
34
|
+
overflowAccessibilityHint
|
|
35
|
+
}) {
|
|
36
|
+
const colors = useColors();
|
|
37
|
+
const fontScale = useFontScale();
|
|
38
|
+
const styles = useThemedStyles(makeStyles);
|
|
39
|
+
const normalized = normalizeAvatarGroup(items, max);
|
|
40
|
+
const layout = resolveAvatarGroupLayout(size);
|
|
41
|
+
const avatarSizing = sizingFor(size);
|
|
42
|
+
const overflowFontSize = scaleFontMetric(avatarSizing.fs, fontScale);
|
|
43
|
+
const customOverflowLabel = normalizeNonBlankText(overflowAccessibilityLabel);
|
|
44
|
+
const hasBlankOverflowLabel = normalized.overflowCount > 0 && onOverflowPress !== undefined && overflowAccessibilityLabel !== undefined && customOverflowLabel === undefined;
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (typeof __DEV__ === 'undefined' || !__DEV__) return;
|
|
47
|
+
if (normalized.invalidMax) {
|
|
48
|
+
warnOnce(`max:${String(max)}`, `max 必须是大于等于 2 的有限整数,传入 ${String(max)},已展示全部成员。`);
|
|
49
|
+
}
|
|
50
|
+
if (hasBlankOverflowLabel) {
|
|
51
|
+
warnOnce('overflowAccessibilityLabel:blank', 'overflowAccessibilityLabel 不能为空白,已回退默认名称。');
|
|
52
|
+
}
|
|
53
|
+
}, [hasBlankOverflowLabel, max, normalized.invalidMax]);
|
|
54
|
+
if (items.length === 0) return null;
|
|
55
|
+
const slotStyle = index => ({
|
|
56
|
+
borderColor: colors.surface,
|
|
57
|
+
borderWidth: layout.borderWidth,
|
|
58
|
+
marginStart: index === 0 ? 0 : -layout.overlap,
|
|
59
|
+
zIndex: index
|
|
60
|
+
});
|
|
61
|
+
const overflowCount = normalized.overflowCount;
|
|
62
|
+
const overflowLabel = `+${overflowCount}`;
|
|
63
|
+
const overflowA11yLabel = onOverflowPress === undefined ? `还有 ${overflowCount} 位成员` : customOverflowLabel ?? `查看其余 ${overflowCount} 位成员`;
|
|
64
|
+
const overflowStyle = {
|
|
65
|
+
...slotStyle(normalized.visibleItems.length),
|
|
66
|
+
width: layout.box,
|
|
67
|
+
height: layout.box,
|
|
68
|
+
borderRadius: resolveAvatarBorderRadius(size, shape),
|
|
69
|
+
backgroundColor: colors.primaryContainer
|
|
70
|
+
};
|
|
71
|
+
const overflowText = /*#__PURE__*/_jsx(Text, {
|
|
72
|
+
style: [styles.overflowText, {
|
|
73
|
+
color: colors.primary,
|
|
74
|
+
fontSize: overflowFontSize
|
|
75
|
+
}],
|
|
76
|
+
numberOfLines: 1,
|
|
77
|
+
children: overflowLabel
|
|
78
|
+
});
|
|
79
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
80
|
+
style: [styles.root, style],
|
|
81
|
+
testID: testID,
|
|
82
|
+
children: [normalized.visibleItems.map((item, index) => /*#__PURE__*/_jsx(Avatar, {
|
|
83
|
+
label: item.label,
|
|
84
|
+
source: item.source,
|
|
85
|
+
variant: item.variant,
|
|
86
|
+
size: size,
|
|
87
|
+
shape: shape,
|
|
88
|
+
style: slotStyle(index)
|
|
89
|
+
}, item.key)), overflowCount === 0 ? null : onOverflowPress === undefined ? /*#__PURE__*/_jsx(View, {
|
|
90
|
+
accessible: true,
|
|
91
|
+
accessibilityLabel: overflowA11yLabel,
|
|
92
|
+
style: [styles.overflow, overflowStyle],
|
|
93
|
+
testID: childTestID(testID, 'overflow'),
|
|
94
|
+
children: overflowText
|
|
95
|
+
}) : /*#__PURE__*/_jsx(Pressable, {
|
|
96
|
+
accessible: true,
|
|
97
|
+
accessibilityRole: "button",
|
|
98
|
+
accessibilityLabel: overflowA11yLabel,
|
|
99
|
+
accessibilityHint: overflowAccessibilityHint,
|
|
100
|
+
onPress: onOverflowPress,
|
|
101
|
+
hitSlop: layout.hitSlop,
|
|
102
|
+
style: ({
|
|
103
|
+
pressed
|
|
104
|
+
}) => [styles.overflow, overflowStyle, {
|
|
105
|
+
opacity: pressed ? pressedOpacity : 1
|
|
106
|
+
}],
|
|
107
|
+
testID: childTestID(testID, 'overflow'),
|
|
108
|
+
children: overflowText
|
|
109
|
+
})]
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=AvatarGroup.js.map
|
|
@@ -0,0 +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":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AvatarGroup"],"sourceRoot":"../../../../../src","sources":["components/ui/AvatarGroup/index.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,kBAAe","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { avatar, fixed, r, space } from "../../../theme/index.js";
|
|
4
|
+
/** 五档尺寸共享的重叠、分隔边与 44pt 命中区几何。 */
|
|
5
|
+
export function resolveAvatarGroupLayout(size) {
|
|
6
|
+
const box = avatar[size];
|
|
7
|
+
let overlap;
|
|
8
|
+
let borderWidth;
|
|
9
|
+
switch (size) {
|
|
10
|
+
case 'xs':
|
|
11
|
+
overlap = space['1'];
|
|
12
|
+
borderWidth = r(1);
|
|
13
|
+
break;
|
|
14
|
+
case 'sm':
|
|
15
|
+
overlap = space['2'];
|
|
16
|
+
borderWidth = r(1);
|
|
17
|
+
break;
|
|
18
|
+
case 'md':
|
|
19
|
+
overlap = space['3'];
|
|
20
|
+
borderWidth = r(1);
|
|
21
|
+
break;
|
|
22
|
+
case 'lg':
|
|
23
|
+
overlap = space['4'];
|
|
24
|
+
borderWidth = r(2);
|
|
25
|
+
break;
|
|
26
|
+
case 'xl':
|
|
27
|
+
overlap = space['6'];
|
|
28
|
+
borderWidth = r(2);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
const inset = Math.max(0, (fixed.hitTarget - box) / 2);
|
|
32
|
+
return {
|
|
33
|
+
box,
|
|
34
|
+
overlap,
|
|
35
|
+
borderWidth,
|
|
36
|
+
hitSlop: {
|
|
37
|
+
top: inset,
|
|
38
|
+
right: inset,
|
|
39
|
+
bottom: inset,
|
|
40
|
+
left: inset
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["avatar","fixed","r","space","resolveAvatarGroupLayout","size","box","overlap","borderWidth","inset","Math","max","hitTarget","hitSlop","top","right","bottom","left"],"sourceRoot":"../../../../../src","sources":["components/ui/AvatarGroup/layout.ts"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,KAAK,EAAEC,CAAC,EAAEC,KAAK,QAAQ,yBAAgB;AAiBxD;AACA,OAAO,SAASC,wBAAwBA,CACtCC,IAAgB,EACW;EAC3B,MAAMC,GAAG,GAAGN,MAAM,CAACK,IAAI,CAAC;EACxB,IAAIE,OAAe;EACnB,IAAIC,WAAmB;EAEvB,QAAQH,IAAI;IACV,KAAK,IAAI;MACPE,OAAO,GAAGJ,KAAK,CAAC,GAAG,CAAC;MACpBK,WAAW,GAAGN,CAAC,CAAC,CAAC,CAAC;MAClB;IACF,KAAK,IAAI;MACPK,OAAO,GAAGJ,KAAK,CAAC,GAAG,CAAC;MACpBK,WAAW,GAAGN,CAAC,CAAC,CAAC,CAAC;MAClB;IACF,KAAK,IAAI;MACPK,OAAO,GAAGJ,KAAK,CAAC,GAAG,CAAC;MACpBK,WAAW,GAAGN,CAAC,CAAC,CAAC,CAAC;MAClB;IACF,KAAK,IAAI;MACPK,OAAO,GAAGJ,KAAK,CAAC,GAAG,CAAC;MACpBK,WAAW,GAAGN,CAAC,CAAC,CAAC,CAAC;MAClB;IACF,KAAK,IAAI;MACPK,OAAO,GAAGJ,KAAK,CAAC,GAAG,CAAC;MACpBK,WAAW,GAAGN,CAAC,CAAC,CAAC,CAAC;MAClB;EACJ;EAEA,MAAMO,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE,CAACV,KAAK,CAACW,SAAS,GAAGN,GAAG,IAAI,CAAC,CAAC;EACtD,OAAO;IACLA,GAAG;IACHC,OAAO;IACPC,WAAW;IACXK,OAAO,EAAE;MAAEC,GAAG,EAAEL,KAAK;MAAEM,KAAK,EAAEN,KAAK;MAAEO,MAAM,EAAEP,KAAK;MAAEQ,IAAI,EAAER;IAAM;EAClE,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** AvatarGroup 唯一的 max 与可见成员归一化入口。 */
|
|
4
|
+
export function normalizeAvatarGroup(items, max) {
|
|
5
|
+
const invalidMax = max !== undefined && (!Number.isFinite(max) || !Number.isInteger(max) || max < 2);
|
|
6
|
+
if (max === undefined || invalidMax || items.length <= max) {
|
|
7
|
+
return {
|
|
8
|
+
visibleItems: items,
|
|
9
|
+
overflowCount: 0,
|
|
10
|
+
invalidMax
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
const visibleCount = max - 1;
|
|
14
|
+
return {
|
|
15
|
+
visibleItems: items.slice(0, visibleCount),
|
|
16
|
+
overflowCount: items.length - visibleCount,
|
|
17
|
+
invalidMax: false
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["normalizeAvatarGroup","items","max","invalidMax","undefined","Number","isFinite","isInteger","length","visibleItems","overflowCount","visibleCount","slice"],"sourceRoot":"../../../../../src","sources":["components/ui/AvatarGroup/normalize.ts"],"mappings":";;AAQA;AACA,OAAO,SAASA,oBAAoBA,CAClCC,KAAiC,EACjCC,GAAuB,EACA;EACvB,MAAMC,UAAU,GACdD,GAAG,KAAKE,SAAS,KAChB,CAACC,MAAM,CAACC,QAAQ,CAACJ,GAAG,CAAC,IAAI,CAACG,MAAM,CAACE,SAAS,CAACL,GAAG,CAAC,IAAIA,GAAG,GAAG,CAAC,CAAC;EAE9D,IAAIA,GAAG,KAAKE,SAAS,IAAID,UAAU,IAAIF,KAAK,CAACO,MAAM,IAAIN,GAAG,EAAE;IAC1D,OAAO;MAAEO,YAAY,EAAER,KAAK;MAAES,aAAa,EAAE,CAAC;MAAEP;IAAW,CAAC;EAC9D;EAEA,MAAMQ,YAAY,GAAGT,GAAG,GAAG,CAAC;EAC5B,OAAO;IACLO,YAAY,EAAER,KAAK,CAACW,KAAK,CAAC,CAAC,EAAED,YAAY,CAAC;IAC1CD,aAAa,EAAET,KAAK,CAACO,MAAM,GAAGG,YAAY;IAC1CR,UAAU,EAAE;EACd,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { StyleSheet } from 'react-native';
|
|
4
|
+
import { fw } from "../../../theme/index.js";
|
|
5
|
+
export const makeStyles = _colors => StyleSheet.create({
|
|
6
|
+
root: {
|
|
7
|
+
alignItems: 'center',
|
|
8
|
+
flexDirection: 'row'
|
|
9
|
+
},
|
|
10
|
+
overflow: {
|
|
11
|
+
alignItems: 'center',
|
|
12
|
+
justifyContent: 'center',
|
|
13
|
+
overflow: 'hidden'
|
|
14
|
+
},
|
|
15
|
+
overflowText: {
|
|
16
|
+
fontWeight: fw.semi,
|
|
17
|
+
lineHeight: undefined
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","fw","makeStyles","_colors","create","root","alignItems","flexDirection","overflow","justifyContent","overflowText","fontWeight","semi","lineHeight","undefined"],"sourceRoot":"../../../../../src","sources":["components/ui/AvatarGroup/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,EAAE,QAA0B,yBAAgB;AAErD,OAAO,MAAMC,UAAU,GAAIC,OAAoB,IAC7CH,UAAU,CAACI,MAAM,CAAC;EAChBC,IAAI,EAAE;IACJC,UAAU,EAAE,QAAQ;IACpBC,aAAa,EAAE;EACjB,CAAC;EACDC,QAAQ,EAAE;IACRF,UAAU,EAAE,QAAQ;IACpBG,cAAc,EAAE,QAAQ;IACxBD,QAAQ,EAAE;EACZ,CAAC;EACDE,YAAY,EAAE;IACZC,UAAU,EAAEV,EAAE,CAACW,IAAI;IACnBC,UAAU,EAAEC;EACd;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["components/ui/AvatarGroup/types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Text, View } from 'react-native';
|
|
4
|
+
import Svg, { Circle } from 'react-native-svg';
|
|
5
|
+
import { r, type, useColors } from "../../../theme/index.js";
|
|
6
|
+
import { A11Y_HIDDEN_PROPS } from "../shared/a11y.js";
|
|
7
|
+
import { normalizeCircularProgress } from "./normalizeCircularProgress.js";
|
|
8
|
+
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
|
+
export function CircularProgress({
|
|
24
|
+
value,
|
|
25
|
+
size = r(32),
|
|
26
|
+
thickness = r(2),
|
|
27
|
+
color,
|
|
28
|
+
trackColor,
|
|
29
|
+
showLabel = false,
|
|
30
|
+
labelColor,
|
|
31
|
+
accessibilityLabel = '进度',
|
|
32
|
+
style,
|
|
33
|
+
testID
|
|
34
|
+
}) {
|
|
35
|
+
const colors = useColors();
|
|
36
|
+
const normalized = normalizeCircularProgress({
|
|
37
|
+
value,
|
|
38
|
+
size,
|
|
39
|
+
thickness
|
|
40
|
+
});
|
|
41
|
+
const {
|
|
42
|
+
circumference,
|
|
43
|
+
dashOffset,
|
|
44
|
+
percentage,
|
|
45
|
+
radius,
|
|
46
|
+
safeSize,
|
|
47
|
+
safeThickness
|
|
48
|
+
} = normalized;
|
|
49
|
+
const center = safeSize / 2;
|
|
50
|
+
return /*#__PURE__*/_jsx(View, {
|
|
51
|
+
accessible: true,
|
|
52
|
+
accessibilityLabel: accessibilityLabel,
|
|
53
|
+
accessibilityRole: "progressbar",
|
|
54
|
+
accessibilityValue: {
|
|
55
|
+
min: 0,
|
|
56
|
+
max: 100,
|
|
57
|
+
now: percentage,
|
|
58
|
+
text: `${percentage}%`
|
|
59
|
+
},
|
|
60
|
+
style: [{
|
|
61
|
+
height: safeSize,
|
|
62
|
+
width: safeSize
|
|
63
|
+
}, style, OUTER_CENTER_STYLE],
|
|
64
|
+
testID: testID,
|
|
65
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
66
|
+
style: [{
|
|
67
|
+
height: safeSize,
|
|
68
|
+
width: safeSize
|
|
69
|
+
}, VISUAL_CONTAINER_STYLE],
|
|
70
|
+
...A11Y_HIDDEN_PROPS,
|
|
71
|
+
children: [/*#__PURE__*/_jsxs(Svg, {
|
|
72
|
+
height: safeSize,
|
|
73
|
+
width: safeSize,
|
|
74
|
+
children: [/*#__PURE__*/_jsx(Circle, {
|
|
75
|
+
cx: center,
|
|
76
|
+
cy: center,
|
|
77
|
+
fill: "none",
|
|
78
|
+
r: radius,
|
|
79
|
+
stroke: trackColor ?? colors.outline,
|
|
80
|
+
strokeWidth: safeThickness
|
|
81
|
+
}), /*#__PURE__*/_jsx(Circle, {
|
|
82
|
+
cx: center,
|
|
83
|
+
cy: center,
|
|
84
|
+
fill: "none",
|
|
85
|
+
r: radius,
|
|
86
|
+
rotation: -90,
|
|
87
|
+
originX: center,
|
|
88
|
+
originY: center,
|
|
89
|
+
stroke: color ?? colors.primary,
|
|
90
|
+
strokeDasharray: circumference,
|
|
91
|
+
strokeDashoffset: dashOffset,
|
|
92
|
+
strokeLinecap: "round",
|
|
93
|
+
strokeWidth: safeThickness
|
|
94
|
+
})]
|
|
95
|
+
}), showLabel ? /*#__PURE__*/_jsx(Text, {
|
|
96
|
+
style: [{
|
|
97
|
+
color: labelColor ?? colors.foreground,
|
|
98
|
+
fontSize: type.nano,
|
|
99
|
+
height: safeSize,
|
|
100
|
+
lineHeight: safeSize,
|
|
101
|
+
width: safeSize
|
|
102
|
+
}, LABEL_CENTER_STYLE],
|
|
103
|
+
children: `${percentage}%`
|
|
104
|
+
}) : null]
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=CircularProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Text","View","Svg","Circle","r","type","useColors","A11Y_HIDDEN_PROPS","normalizeCircularProgress","jsx","_jsx","jsxs","_jsxs","OUTER_CENTER_STYLE","alignItems","justifyContent","VISUAL_CONTAINER_STYLE","position","LABEL_CENTER_STYLE","fontWeight","left","textAlign","top","CircularProgress","value","size","thickness","color","trackColor","showLabel","labelColor","accessibilityLabel","style","testID","colors","normalized","circumference","dashOffset","percentage","radius","safeSize","safeThickness","center","accessible","accessibilityRole","accessibilityValue","min","max","now","text","height","width","children","cx","cy","fill","stroke","outline","strokeWidth","rotation","originX","originY","primary","strokeDasharray","strokeDashoffset","strokeLinecap","foreground","fontSize","nano","lineHeight"],"sourceRoot":"../../../../../src","sources":["components/ui/CircularProgress/CircularProgress.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CircularProgress"],"sourceRoot":"../../../../../src","sources":["components/ui/CircularProgress/index.ts"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,uBAAoB","ignoreList":[]}
|