@fjyueke/arco-mcp 1.0.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 +85 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +244 -0
- package/metaData/components/action-sheet/doc.md +102 -0
- package/metaData/components/action-sheet/example/index.tsx +199 -0
- package/metaData/components/action-sheet/example/methods.tsx +6 -0
- package/metaData/components/avatar/doc.md +57 -0
- package/metaData/components/avatar/example/group.tsx +69 -0
- package/metaData/components/avatar/example/index.tsx +196 -0
- package/metaData/components/badge/doc.md +28 -0
- package/metaData/components/badge/example/index.tsx +128 -0
- package/metaData/components/button/doc.md +45 -0
- package/metaData/components/button/example/index.tsx +264 -0
- package/metaData/components/carousel/doc.md +89 -0
- package/metaData/components/carousel/example/index.tsx +1481 -0
- package/metaData/components/cell/doc.md +68 -0
- package/metaData/components/cell/example/arrow.tsx +13 -0
- package/metaData/components/cell/example/cell.tsx +71 -0
- package/metaData/components/cell/example/group.tsx +63 -0
- package/metaData/components/cell/example/index.tsx +19 -0
- package/metaData/components/checkbox/doc.md +91 -0
- package/metaData/components/checkbox/example/checkbox.tsx +158 -0
- package/metaData/components/checkbox/example/group.tsx +103 -0
- package/metaData/components/checkbox/example/index.tsx +25 -0
- package/metaData/components/circle-progress/doc.md +40 -0
- package/metaData/components/circle-progress/example/index.tsx +323 -0
- package/metaData/components/collapse/doc.md +74 -0
- package/metaData/components/collapse/example/collapse.tsx +183 -0
- package/metaData/components/collapse/example/group.tsx +136 -0
- package/metaData/components/collapse/example/index.tsx +16 -0
- package/metaData/components/collapse/example/utils.tsx +20 -0
- package/metaData/components/context-provider/doc.md +44 -0
- package/metaData/components/context-provider/example/index.tsx +208 -0
- package/metaData/components/count-down/doc.md +40 -0
- package/metaData/components/count-down/example/hooks.tsx +118 -0
- package/metaData/components/count-down/example/index.tsx +63 -0
- package/metaData/components/date-picker/doc.md +102 -0
- package/metaData/components/date-picker/example/index.tsx +545 -0
- package/metaData/components/dialog/doc.md +200 -0
- package/metaData/components/dialog/example/index.tsx +328 -0
- package/metaData/components/dialog/example/methods.tsx +56 -0
- package/metaData/components/divider/doc.md +25 -0
- package/metaData/components/divider/example/index.tsx +87 -0
- package/metaData/components/dropdown/doc.md +80 -0
- package/metaData/components/dropdown/example/dropdown.tsx +308 -0
- package/metaData/components/dropdown/example/index.tsx +19 -0
- package/metaData/components/dropdown/example/options.tsx +103 -0
- package/metaData/components/dropdown-menu/doc.md +91 -0
- package/metaData/components/dropdown-menu/example/dropdown-menu.tsx +270 -0
- package/metaData/components/dropdown-menu/example/index.tsx +16 -0
- package/metaData/components/ellipsis/doc.md +33 -0
- package/metaData/components/ellipsis/example/index.tsx +93 -0
- package/metaData/components/ellipsis/example/js-ellipsis.tsx +229 -0
- package/metaData/components/ellipsis/example/native-ellipsis.tsx +48 -0
- package/metaData/components/form/doc.md +90 -0
- package/metaData/components/form/example/form-item-context.tsx +8 -0
- package/metaData/components/form/example/form-item.tsx +378 -0
- package/metaData/components/form/example/index.tsx +87 -0
- package/metaData/components/form/example/linked-container.tsx +66 -0
- package/metaData/components/grid/doc.md +39 -0
- package/metaData/components/grid/example/index.tsx +252 -0
- package/metaData/components/icon/doc.md +15 -0
- package/metaData/components/icon/example/index.tsx +32 -0
- package/metaData/components/image/doc.md +62 -0
- package/metaData/components/image/example/index.tsx +528 -0
- package/metaData/components/image-picker/doc.md +116 -0
- package/metaData/components/image-picker/example/add-icon.tsx +14 -0
- package/metaData/components/image-picker/example/index.tsx +175 -0
- package/metaData/components/image-preview/doc.md +119 -0
- package/metaData/components/image-preview/example/index.tsx +1290 -0
- package/metaData/components/image-preview/example/methods.tsx +72 -0
- package/metaData/components/index-bar/doc.md +83 -0
- package/metaData/components/index-bar/example/group.tsx +93 -0
- package/metaData/components/index-bar/example/index.tsx +271 -0
- package/metaData/components/index-bar/example/side-bar.tsx +82 -0
- package/metaData/components/input/doc.md +60 -0
- package/metaData/components/input/example/hooks.tsx +259 -0
- package/metaData/components/input/example/index.tsx +134 -0
- package/metaData/components/input/example/props.tsx +183 -0
- package/metaData/components/keyboard/doc.md +73 -0
- package/metaData/components/keyboard/example/index.tsx +238 -0
- package/metaData/components/load-more/doc.md +48 -0
- package/metaData/components/load-more/example/index.tsx +395 -0
- package/metaData/components/loading/doc.md +34 -0
- package/metaData/components/loading/example/index.tsx +312 -0
- package/metaData/components/masking/doc.md +93 -0
- package/metaData/components/masking/example/index.tsx +410 -0
- package/metaData/components/masking/example/methods.tsx +88 -0
- package/metaData/components/nav-bar/doc.md +40 -0
- package/metaData/components/nav-bar/example/back-icon.tsx +28 -0
- package/metaData/components/nav-bar/example/index.tsx +305 -0
- package/metaData/components/notice-bar/doc.md +34 -0
- package/metaData/components/notice-bar/example/index.tsx +294 -0
- package/metaData/components/notify/doc.md +81 -0
- package/metaData/components/notify/example/index.tsx +171 -0
- package/metaData/components/notify/example/methods.tsx +83 -0
- package/metaData/components/pagination/doc.md +41 -0
- package/metaData/components/pagination/example/arrow.tsx +14 -0
- package/metaData/components/pagination/example/index.tsx +292 -0
- package/metaData/components/picker/doc.md +89 -0
- package/metaData/components/picker/example/index.tsx +217 -0
- package/metaData/components/picker-view/doc.md +57 -0
- package/metaData/components/picker-view/example/cascader.tsx +141 -0
- package/metaData/components/picker-view/example/index.tsx +297 -0
- package/metaData/components/picker-view/example/multi-picker.tsx +66 -0
- package/metaData/components/picker-view/example/picker-cell.tsx +416 -0
- package/metaData/components/popover/doc.md +144 -0
- package/metaData/components/popover/example/index.tsx +23 -0
- package/metaData/components/popover/example/menu.tsx +145 -0
- package/metaData/components/popover/example/popover-inner.tsx +147 -0
- package/metaData/components/popover/example/popover.tsx +268 -0
- package/metaData/components/popup/doc.md +101 -0
- package/metaData/components/popup/example/index.tsx +125 -0
- package/metaData/components/popup/example/methods.tsx +6 -0
- package/metaData/components/popup-swiper/doc.md +108 -0
- package/metaData/components/popup-swiper/example/index.tsx +332 -0
- package/metaData/components/popup-swiper/example/methods.tsx +6 -0
- package/metaData/components/portal/doc.md +14 -0
- package/metaData/components/portal/example/index.tsx +35 -0
- package/metaData/components/progress/doc.md +42 -0
- package/metaData/components/progress/example/index.tsx +256 -0
- package/metaData/components/pull-refresh/doc.md +37 -0
- package/metaData/components/pull-refresh/example/android-pull-refresh.tsx +260 -0
- package/metaData/components/pull-refresh/example/index.tsx +44 -0
- package/metaData/components/pull-refresh/example/ios-pull-refresh.tsx +216 -0
- package/metaData/components/radio/doc.md +89 -0
- package/metaData/components/radio/example/group.tsx +92 -0
- package/metaData/components/radio/example/index.tsx +25 -0
- package/metaData/components/radio/example/radio.tsx +22 -0
- package/metaData/components/rate/doc.md +33 -0
- package/metaData/components/rate/example/index.tsx +281 -0
- package/metaData/components/search-bar/doc.md +97 -0
- package/metaData/components/search-bar/example/association.tsx +89 -0
- package/metaData/components/search-bar/example/cancel-button.tsx +34 -0
- package/metaData/components/search-bar/example/highlight.tsx +66 -0
- package/metaData/components/search-bar/example/index.tsx +251 -0
- package/metaData/components/show-monitor/doc.md +34 -0
- package/metaData/components/show-monitor/example/index.tsx +646 -0
- package/metaData/components/skeleton/doc.md +101 -0
- package/metaData/components/skeleton/example/elements.tsx +290 -0
- package/metaData/components/skeleton/example/index.tsx +96 -0
- package/metaData/components/skeleton/example/skeleton-context.tsx +7 -0
- package/metaData/components/slider/doc.md +42 -0
- package/metaData/components/slider/example/index.tsx +326 -0
- package/metaData/components/slider/example/marks.tsx +50 -0
- package/metaData/components/slider/example/popover.tsx +38 -0
- package/metaData/components/slider/example/thumb.tsx +48 -0
- package/metaData/components/slider/example/useSliderIcon.tsx +38 -0
- package/metaData/components/slider/example/useSliderInit.tsx +170 -0
- package/metaData/components/stepper/doc.md +46 -0
- package/metaData/components/stepper/example/index.tsx +166 -0
- package/metaData/components/stepper/example/useButtonClick.tsx +74 -0
- package/metaData/components/stepper/example/useInputEvent.tsx +65 -0
- package/metaData/components/stepper/example/useValue.tsx +43 -0
- package/metaData/components/steps/doc.md +57 -0
- package/metaData/components/steps/example/index.tsx +123 -0
- package/metaData/components/steps/example/step.tsx +126 -0
- package/metaData/components/sticky/doc.md +45 -0
- package/metaData/components/sticky/example/index.tsx +430 -0
- package/metaData/components/swipe-action/doc.md +44 -0
- package/metaData/components/swipe-action/example/index.tsx +338 -0
- package/metaData/components/swipe-action/example/item.tsx +40 -0
- package/metaData/components/swipe-load/doc.md +43 -0
- package/metaData/components/swipe-load/example/index.tsx +339 -0
- package/metaData/components/swipe-load/example/type.tsx +153 -0
- package/metaData/components/switch/doc.md +38 -0
- package/metaData/components/switch/example/index.tsx +237 -0
- package/metaData/components/tab-bar/doc.md +57 -0
- package/metaData/components/tab-bar/example/index.tsx +18 -0
- package/metaData/components/tab-bar/example/item.tsx +74 -0
- package/metaData/components/tab-bar/example/tab-bar.tsx +105 -0
- package/metaData/components/tabs/doc.md +187 -0
- package/metaData/components/tabs/example/index.tsx +514 -0
- package/metaData/components/tabs/example/tab-cell-underline.tsx +320 -0
- package/metaData/components/tabs/example/tab-cell.tsx +433 -0
- package/metaData/components/tabs/example/tab-pane.tsx +349 -0
- package/metaData/components/tag/doc.md +80 -0
- package/metaData/components/tag/example/index.tsx +23 -0
- package/metaData/components/tag/example/list.tsx +97 -0
- package/metaData/components/tag/example/tag.tsx +85 -0
- package/metaData/components/textarea/doc.md +67 -0
- package/metaData/components/textarea/example/index.tsx +258 -0
- package/metaData/components/toast/doc.md +90 -0
- package/metaData/components/toast/example/index.tsx +335 -0
- package/metaData/components/toast/example/methods.tsx +87 -0
- package/metaData/components/transition/doc.md +19 -0
- package/metaData/components/transition/example/index.tsx +113 -0
- package/metaData/components/uploader/doc.md +82 -0
- package/metaData/components/uploader/example/index.tsx +208 -0
- package/metaData/components-index.json +242 -0
- package/package.json +56 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
### 反馈
|
|
2
|
+
|
|
3
|
+
# 加载 Loading
|
|
4
|
+
|
|
5
|
+
加载中组件,分为四种类型,`circle`为环形,`arc`为弧线,`spin`为旋转,`dot`为圆点。所有类型均可定制颜色,环形和弧线类型可定制线圈半径及粗细,旋转和圆点类型可定制内部元素透明度。
|
|
6
|
+
|
|
7
|
+
======
|
|
8
|
+
|
|
9
|
+
> 属性/Props
|
|
10
|
+
|
|
11
|
+
|参数|描述|类型|默认值|
|
|
12
|
+
|----------|-------------|------|------|
|
|
13
|
+
|style|自定义样式|CSSProperties|-|
|
|
14
|
+
|className|自定义类名|string|-|
|
|
15
|
+
|color|主颜色,如果想使用 css 控制主颜色,可使用公共 mixin \`\.set\-loading\-color(@color)\`|string|-|
|
|
16
|
+
|type|loading类型|"spin" \| "circle" \| "arc" \| "dot"|"dot"|
|
|
17
|
+
|list|当类型为\`dot\`或\`spin\`时有效,定义内部各元素的透明度|number\[\]|-|
|
|
18
|
+
|duration|一次loading周期的毫秒数|number|1000|
|
|
19
|
+
|svgKey|区分不同loading组件间的\`\<def\>\`内容|string|-|
|
|
20
|
+
|radius|圆圈半径,类型为\`circle\`或\`arc\`时可用|number|9|
|
|
21
|
+
|stroke|圆圈描边宽度,类型为\`circle\`或\`arc\`或\`spin\`时可用|number|2|
|
|
22
|
+
|filleted|边缘是否为圆角|boolean|true|
|
|
23
|
+
|
|
24
|
+
> 引用/Refs
|
|
25
|
+
|
|
26
|
+
|参数|描述|类型|
|
|
27
|
+
|----------|-------------|------|
|
|
28
|
+
|dom|最外层元素 DOM|HTMLDivElement|
|
|
29
|
+
|
|
30
|
+
> LoadingType
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
"spin" | "circle" | "arc" | "dot"
|
|
34
|
+
```
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import React, { useState, useEffect, useRef, forwardRef, Ref, useImperativeHandle } from 'react';
|
|
2
|
+
import { cls, isOneOf } from '@arco-design/mobile-utils';
|
|
3
|
+
import { ContextLayout } from '../context-provider';
|
|
4
|
+
import { getStyleWithVendor, useGenSvgKey } from '../_helpers';
|
|
5
|
+
|
|
6
|
+
export type LoadingType = 'spin' | 'circle' | 'arc' | 'dot';
|
|
7
|
+
|
|
8
|
+
export interface LoadingProps {
|
|
9
|
+
/**
|
|
10
|
+
* 自定义样式
|
|
11
|
+
* @en Custom stylesheet
|
|
12
|
+
*/
|
|
13
|
+
style?: React.CSSProperties;
|
|
14
|
+
/**
|
|
15
|
+
* 自定义类名
|
|
16
|
+
* @en Custom classname
|
|
17
|
+
*/
|
|
18
|
+
className?: string;
|
|
19
|
+
/**
|
|
20
|
+
* 主颜色,如果想使用 css 控制主颜色,可使用公共 mixin `.set-loading-color(@color)`
|
|
21
|
+
* @en The main color, if you want to use css to control the main color, you can use the public mixin `.set-loading-color(@color)`
|
|
22
|
+
*/
|
|
23
|
+
color?: string;
|
|
24
|
+
/**
|
|
25
|
+
* loading类型
|
|
26
|
+
* @en Loading type
|
|
27
|
+
* @default "dot"
|
|
28
|
+
*/
|
|
29
|
+
type?: LoadingType;
|
|
30
|
+
/**
|
|
31
|
+
* 当类型为`dot`或`spin`时有效,定义内部各元素的透明度
|
|
32
|
+
* @en Valid when the type is `dot` or `spin`, defines the transparency of each element inside
|
|
33
|
+
*/
|
|
34
|
+
list?: number[];
|
|
35
|
+
/**
|
|
36
|
+
* 一次loading周期的毫秒数
|
|
37
|
+
* @en A loading cycle in millisecond
|
|
38
|
+
* @default 1000
|
|
39
|
+
*/
|
|
40
|
+
duration?: number;
|
|
41
|
+
/**
|
|
42
|
+
* 区分不同loading组件间的`<def>`内容
|
|
43
|
+
* @en Distinguish the `<def>` content of different svg
|
|
44
|
+
*/
|
|
45
|
+
svgKey?: string;
|
|
46
|
+
/**
|
|
47
|
+
* 圆圈半径,类型为`circle`或`arc`时可用
|
|
48
|
+
* @en Circle radius, available when type is `circle` or `arc`
|
|
49
|
+
* @default 9
|
|
50
|
+
*/
|
|
51
|
+
radius?: number;
|
|
52
|
+
/**
|
|
53
|
+
* 圆圈描边宽度,类型为`circle`或`arc`或`spin`时可用
|
|
54
|
+
* @en Circle stroke width, available when type is `circle` or `arc` or `spin`
|
|
55
|
+
* @default 2
|
|
56
|
+
*/
|
|
57
|
+
stroke?: number;
|
|
58
|
+
/**
|
|
59
|
+
* 边缘是否为圆角
|
|
60
|
+
* @en Whether the edges are rounded
|
|
61
|
+
* @default true
|
|
62
|
+
*/
|
|
63
|
+
filleted?: boolean;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface LoadingRef {
|
|
67
|
+
/**
|
|
68
|
+
* 最外层元素 DOM
|
|
69
|
+
* @en The outermost element DOM
|
|
70
|
+
*/
|
|
71
|
+
dom: HTMLDivElement | null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* 加载中组件,分为四种类型,`circle`为环形,`arc`为弧线,`spin`为旋转,`dot`为圆点。所有类型均可定制颜色,环形和弧线类型可定制线圈半径及粗细,旋转和圆点类型可定制内部元素透明度。
|
|
76
|
+
* @en Loading component, divided into four types, `circle` is a ring, `arc` is an arc `spin` is a rotation, and `dot` is a dot. All types can be customized in color, ring and arc types can be customized with coil radius and thickness, and rotation and dot types can be customized with internal element transparency.
|
|
77
|
+
* @type 反馈
|
|
78
|
+
* @type_en Feedback
|
|
79
|
+
* @name 加载
|
|
80
|
+
* @name_en Loading
|
|
81
|
+
*/
|
|
82
|
+
const Loading = forwardRef((props: LoadingProps, ref: Ref<LoadingRef>) => {
|
|
83
|
+
const {
|
|
84
|
+
style,
|
|
85
|
+
className = '',
|
|
86
|
+
color,
|
|
87
|
+
type = 'dot',
|
|
88
|
+
list,
|
|
89
|
+
duration = 1000,
|
|
90
|
+
svgKey: userSetSvgKey = '',
|
|
91
|
+
radius = 9,
|
|
92
|
+
stroke = 2,
|
|
93
|
+
filleted = true,
|
|
94
|
+
} = props;
|
|
95
|
+
const [statusList, setStatusList] = useState<number[]>([]);
|
|
96
|
+
const timerId = useRef(-1);
|
|
97
|
+
const halfCircle = Math.PI * radius;
|
|
98
|
+
const circlePos = 0.5 * stroke + radius;
|
|
99
|
+
const circleSize = radius * 2 + stroke;
|
|
100
|
+
const domRef = useRef<HTMLDivElement | null>(null);
|
|
101
|
+
const { svgKey } = useGenSvgKey(userSetSvgKey);
|
|
102
|
+
|
|
103
|
+
useImperativeHandle(ref, () => ({
|
|
104
|
+
dom: domRef.current,
|
|
105
|
+
}));
|
|
106
|
+
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
if (type === 'dot' && statusList.length) {
|
|
109
|
+
const interval = duration / statusList.length;
|
|
110
|
+
timerId.current = setInterval(
|
|
111
|
+
(() => {
|
|
112
|
+
const newList = [...statusList];
|
|
113
|
+
const item = newList.pop();
|
|
114
|
+
item && newList.unshift(item);
|
|
115
|
+
setStatusList(newList);
|
|
116
|
+
}) as TimerHandler,
|
|
117
|
+
interval,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
return () => {
|
|
121
|
+
if (timerId.current >= 0) {
|
|
122
|
+
clearInterval(timerId.current);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}, [type, statusList, duration]);
|
|
126
|
+
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
let newList;
|
|
129
|
+
if (list && list.length) {
|
|
130
|
+
newList = list;
|
|
131
|
+
} else {
|
|
132
|
+
switch (type) {
|
|
133
|
+
case 'spin':
|
|
134
|
+
newList = [1, 0.1, 0.2286, 0.3572, 0.4858, 0.6144, 0.743, 0.8716];
|
|
135
|
+
break;
|
|
136
|
+
case 'dot':
|
|
137
|
+
newList = [0.2, 0.6, 1];
|
|
138
|
+
break;
|
|
139
|
+
default:
|
|
140
|
+
newList = [];
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
setStatusList(newList);
|
|
145
|
+
}, [list, type]);
|
|
146
|
+
|
|
147
|
+
function renderSpin() {
|
|
148
|
+
const len = statusList.length;
|
|
149
|
+
return statusList.map((opacity, index) => (
|
|
150
|
+
<span
|
|
151
|
+
key={index}
|
|
152
|
+
className="spin-cell"
|
|
153
|
+
style={getStyleWithVendor({
|
|
154
|
+
opacity,
|
|
155
|
+
transform: `rotate(${index / len}turn)`,
|
|
156
|
+
width: stroke,
|
|
157
|
+
})}
|
|
158
|
+
>
|
|
159
|
+
<span
|
|
160
|
+
className="spin-cell-inner bg-color-with-config"
|
|
161
|
+
style={{
|
|
162
|
+
backgroundColor: color,
|
|
163
|
+
...(filleted ? { borderRadius: stroke } : {}),
|
|
164
|
+
}}
|
|
165
|
+
/>
|
|
166
|
+
</span>
|
|
167
|
+
));
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function renderDot() {
|
|
171
|
+
return statusList.map((opacity, index) => (
|
|
172
|
+
<span
|
|
173
|
+
key={index}
|
|
174
|
+
className={cls('dot-cell', 'bg-color-with-config', { filleted })}
|
|
175
|
+
style={{ opacity, backgroundColor: color }}
|
|
176
|
+
/>
|
|
177
|
+
));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function renderCircle() {
|
|
181
|
+
return (
|
|
182
|
+
<svg viewBox={`0 0 ${circleSize} ${circleSize}`}>
|
|
183
|
+
<defs>
|
|
184
|
+
<linearGradient id={`grad1-${svgKey}`} x1="0%" y1="0%" x2="100%" y2="0%">
|
|
185
|
+
<stop
|
|
186
|
+
offset="0%"
|
|
187
|
+
className="loading-circle-middle stop-color-with-config"
|
|
188
|
+
style={{ stopColor: color }}
|
|
189
|
+
/>
|
|
190
|
+
<stop
|
|
191
|
+
offset="100%"
|
|
192
|
+
className="loading-circle-start stop-color-with-config"
|
|
193
|
+
style={{ stopColor: color }}
|
|
194
|
+
/>
|
|
195
|
+
</linearGradient>
|
|
196
|
+
<linearGradient id={`grad2-${svgKey}`} x1="0%" y1="0%" x2="100%" y2="0%">
|
|
197
|
+
<stop
|
|
198
|
+
offset="0%"
|
|
199
|
+
className="loading-circle-middle stop-color-with-config"
|
|
200
|
+
style={{ stopColor: color }}
|
|
201
|
+
/>
|
|
202
|
+
<stop
|
|
203
|
+
offset="100%"
|
|
204
|
+
className="loading-circle-end stop-color-with-config"
|
|
205
|
+
style={{ stopColor: color }}
|
|
206
|
+
/>
|
|
207
|
+
</linearGradient>
|
|
208
|
+
</defs>
|
|
209
|
+
<circle
|
|
210
|
+
cx={circlePos}
|
|
211
|
+
cy={circlePos}
|
|
212
|
+
r={radius}
|
|
213
|
+
stroke={`url(#grad1-${svgKey})`}
|
|
214
|
+
strokeWidth={stroke}
|
|
215
|
+
strokeDasharray={halfCircle}
|
|
216
|
+
strokeDashoffset={halfCircle}
|
|
217
|
+
fill="none"
|
|
218
|
+
/>
|
|
219
|
+
<circle
|
|
220
|
+
cx={circlePos}
|
|
221
|
+
cy={circlePos}
|
|
222
|
+
r={radius}
|
|
223
|
+
stroke={`url(#grad2-${svgKey})`}
|
|
224
|
+
strokeWidth={stroke}
|
|
225
|
+
strokeDasharray={halfCircle}
|
|
226
|
+
fill="none"
|
|
227
|
+
/>
|
|
228
|
+
{filleted ? (
|
|
229
|
+
<circle
|
|
230
|
+
cx={circlePos * 2 - stroke / 2}
|
|
231
|
+
cy={circlePos}
|
|
232
|
+
r={stroke / 2}
|
|
233
|
+
className="loading-circle-filleted fill-color-with-config"
|
|
234
|
+
style={{ fill: color }}
|
|
235
|
+
/>
|
|
236
|
+
) : null}
|
|
237
|
+
</svg>
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function renderArc() {
|
|
242
|
+
return (
|
|
243
|
+
<svg viewBox={`0 0 ${circleSize} ${circleSize}`}>
|
|
244
|
+
<circle
|
|
245
|
+
className="arc-bg"
|
|
246
|
+
cx={circlePos}
|
|
247
|
+
cy={circlePos}
|
|
248
|
+
r={radius}
|
|
249
|
+
strokeWidth={stroke}
|
|
250
|
+
fill="none"
|
|
251
|
+
/>
|
|
252
|
+
<circle
|
|
253
|
+
className="arc-line stroke-color-with-config"
|
|
254
|
+
cx={circlePos}
|
|
255
|
+
cy={circlePos}
|
|
256
|
+
r={radius}
|
|
257
|
+
style={{ stroke: color }}
|
|
258
|
+
strokeWidth={stroke}
|
|
259
|
+
strokeDashoffset={halfCircle * 0.5}
|
|
260
|
+
strokeDasharray={`${halfCircle * 0.5} ${halfCircle * 1.5}`}
|
|
261
|
+
fill="none"
|
|
262
|
+
{...(filleted ? { strokeLinecap: 'round' } : {})}
|
|
263
|
+
/>
|
|
264
|
+
</svg>
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function renderLoadingByType() {
|
|
269
|
+
switch (type) {
|
|
270
|
+
case 'spin':
|
|
271
|
+
return renderSpin();
|
|
272
|
+
case 'dot':
|
|
273
|
+
return renderDot();
|
|
274
|
+
case 'circle':
|
|
275
|
+
return renderCircle();
|
|
276
|
+
case 'arc':
|
|
277
|
+
return renderArc();
|
|
278
|
+
default:
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function getLoadingStyle(): React.CSSProperties {
|
|
284
|
+
const circleStyle = isOneOf(type, ['circle', 'arc'])
|
|
285
|
+
? {
|
|
286
|
+
width: circleSize,
|
|
287
|
+
height: circleSize,
|
|
288
|
+
}
|
|
289
|
+
: {};
|
|
290
|
+
return getStyleWithVendor({
|
|
291
|
+
animationDuration: `${duration}ms`,
|
|
292
|
+
...circleStyle,
|
|
293
|
+
...(style || {}),
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return (
|
|
298
|
+
<ContextLayout>
|
|
299
|
+
{({ prefixCls }) => (
|
|
300
|
+
<div
|
|
301
|
+
className={cls(`${prefixCls}-loading all-border-box`, type, className)}
|
|
302
|
+
style={getLoadingStyle()}
|
|
303
|
+
ref={domRef}
|
|
304
|
+
>
|
|
305
|
+
{renderLoadingByType()}
|
|
306
|
+
</div>
|
|
307
|
+
)}
|
|
308
|
+
</ContextLayout>
|
|
309
|
+
);
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
export default Loading;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
### 反馈
|
|
2
|
+
|
|
3
|
+
# 模态弹窗 Masking
|
|
4
|
+
|
|
5
|
+
通用模态弹窗,内部内容自定义。默认做了防滚动穿透处理,如果弹层内容中需要滚动,则需将滚动容器传入`getScrollContainer`属性以在未滚动到顶部或底部时释放滚动。
|
|
6
|
+
|
|
7
|
+
======
|
|
8
|
+
|
|
9
|
+
> 属性/Props
|
|
10
|
+
|
|
11
|
+
|参数|描述|类型|默认值|
|
|
12
|
+
|----------|-------------|------|------|
|
|
13
|
+
|contentAtCenter|弹窗内容是否居中|boolean|false|
|
|
14
|
+
|className|自定义类名|string|-|
|
|
15
|
+
|maskClass|自定义蒙层类名|string|-|
|
|
16
|
+
|maskStyle|自定义蒙层样式|CSSProperties|-|
|
|
17
|
+
|contentClass|自定义内容类名|string|-|
|
|
18
|
+
|contentStyle|自定义内容样式|CSSProperties|-|
|
|
19
|
+
|visible|是否展示菜单(受控)|boolean|必填|
|
|
20
|
+
|close|关闭菜单方法|(e: MouseEvent\<HTMLElement, MouseEvent\>) =\> void|必填|
|
|
21
|
+
|maskTransitionType|蒙层过渡动画类名|string|"fade"|
|
|
22
|
+
|contentTransitionType|内容过渡动画类名|string|"fade"|
|
|
23
|
+
|contentTransitionVarType|内容过渡动画类名变量标识|string|-|
|
|
24
|
+
|children|菜单内部内容|ReactNode|-|
|
|
25
|
+
|maskTransitionTimeout|蒙层动画时长|number \| \{ appear?: number; enter?: number; exit?: number; \}|300|
|
|
26
|
+
|contentTransitionTimeout|内容动画时长|number \| \{ appear?: number; enter?: number; exit?: number; \}|300|
|
|
27
|
+
|maskClosable|点击蒙层是否关闭菜单|boolean|true|
|
|
28
|
+
|animatingClosable|执行进场动画时点击蒙层是否可关闭菜单|boolean|false|
|
|
29
|
+
|mountOnEnter|是否在打开菜单时再加载内容|boolean|true|
|
|
30
|
+
|unmountOnExit|是否在退出时卸载内容|boolean|true|
|
|
31
|
+
|orientationDirection|transform方向,用于通过transform模拟横屏的情况|"top" \| "bottom" \| "left" \| "right"|"top"|
|
|
32
|
+
|preventBodyScroll|弹窗打开时是否禁止body的滚动|boolean|true|
|
|
33
|
+
|initialBodyOverflow|页面初始 overflow 状态,即关闭弹窗时 overflow 应该还原的状态|string|第一个全屏组件(弹窗、toast等)打开时页面overflow值|
|
|
34
|
+
|gestureOutOfControl|是否禁用滚动容器手势判断,禁用后交给业务方自己判断|boolean|false|
|
|
35
|
+
|onClose|关闭后回调(动画执行完毕)|(scene?: string) =\> void|-|
|
|
36
|
+
|onOpen|打开后回调(动画执行完毕)|() =\> void|-|
|
|
37
|
+
|onMaskClick|点击蒙层回调,maskClosable=false时也会触发|() =\> void|-|
|
|
38
|
+
|onTouchMove|弹窗的touchmove回调|(e: TouchEvent, prevented: boolean, direction: "x" \| "y") =\> void|-|
|
|
39
|
+
|onPreventTouchMove|非滚动区域或滚动到顶部及底部时的触摸事件回调|(e: TouchEvent, direction: "x" \| "y") =\> void|-|
|
|
40
|
+
|getContainer|获取挂载容器|() =\> HTMLElement|-|
|
|
41
|
+
|getScrollContainer|内容内部滚动区域容器,在该容器中未滚动到顶部或底部时会释放滚动|() =\> HTMLElement \| HTMLElement\[\]|-|
|
|
42
|
+
|
|
43
|
+
> 引用/Refs
|
|
44
|
+
|
|
45
|
+
|参数|描述|类型|
|
|
46
|
+
|----------|-------------|------|
|
|
47
|
+
|dom|最外层元素 DOM|HTMLDivElement|
|
|
48
|
+
|mask|蒙层 DOM|HTMLDivElement|
|
|
49
|
+
|content|内容 DOM|HTMLDivElement|
|
|
50
|
+
|setCloseScene|在关闭弹窗前修改 onClose 的 scene 参数值|(scene: string) =\> void|
|
|
51
|
+
|
|
52
|
+
> 方法/Methods
|
|
53
|
+
|
|
54
|
+
|方法名|描述|类型|
|
|
55
|
+
|----------|-------------|------|
|
|
56
|
+
|open|打开模态弹窗|(config: MaskingProps) =\> \{ close: () =\> void; update: (newConfig: MaskingProps) =\> void; \}|
|
|
57
|
+
|
|
58
|
+
> GlobalContextParams
|
|
59
|
+
|
|
60
|
+
|参数|描述|类型|默认值|
|
|
61
|
+
|----------|-------------|------|------|
|
|
62
|
+
|prefixCls|组件类名前缀|string|"arco"|
|
|
63
|
+
|system|手动控制当前所在系统,传入后将直接使用传入的值,ssr场景需指定系统初始值时适用|"" \| "pc" \| "android" \| "ios"|""|
|
|
64
|
+
|useDarkMode|是否监听系统原生的暗黑模式变化(prefers\-color\-scheme: dark)以判断是否切为暗黑模式|boolean|false|
|
|
65
|
+
|isDarkMode|是否处于暗黑模式,指定后以指定的值为准|boolean|false|
|
|
66
|
+
|darkModeSelector|当处于暗黑模式时,body上挂载的类名,为空值时不挂载类名|string|"arco-theme-dark"|
|
|
67
|
+
|theme|主题变量,传入后将在线替换css变量,需设置less变量 @use\-css\-vars: 1|Record\<string, string\>|-|
|
|
68
|
+
|locale|国际化语言包配置|ILocale|-|
|
|
69
|
+
|useRtl|是否使用Rtl模式|boolean|false|
|
|
70
|
+
|onDarkModeChange|当系统原生暗黑模式发生变化时触发,useDarkMode=true 时有效|(isDark: boolean) =\> void|-|
|
|
71
|
+
|createRoot|React19 修改了 createRoot 的引入路径,导致组件内部无法直接引入(低react版本会找不到模块)。因此使用 react 19 的用户需从外部传入 createRoot 方法|CreateRootFnType|-|
|
|
72
|
+
|
|
73
|
+
> ILocale
|
|
74
|
+
|
|
75
|
+
|参数|描述|类型|
|
|
76
|
+
|----------|-------------|------|
|
|
77
|
+
|locale|语言类型|string|
|
|
78
|
+
|LoadMore|-|\{ loadMoreText: string; loadingText: string; noDataText: string; failLoadText: string; prepareScrollText: string; prepareClickText: string; \}|
|
|
79
|
+
|Picker|-|\{ okText: string; cancelText: string; \}|
|
|
80
|
+
|Tag|-|\{ addTag: string; \}|
|
|
81
|
+
|Dialog|-|\{ okText: string; cancelText: string; \}|
|
|
82
|
+
|SwipeLoad|-|\{ normalText: string; activeText: string; \}|
|
|
83
|
+
|PullRefresh|-|\{ loadingText: string; pullingText: string; finishText: string; loosingText: string; \}|
|
|
84
|
+
|DropdownMenu|-|\{ select: string; \}|
|
|
85
|
+
|Pagination|-|\{ previousPage: string; nextPage: string; \}|
|
|
86
|
+
|Image|-|\{ loadError: string; \}|
|
|
87
|
+
|ImagePicker|-|\{ loadError: string; \}|
|
|
88
|
+
|SearchBar|-|\{ placeholder: string; cancelBtn: string; \}|
|
|
89
|
+
|Stepper|-|\{ minusButtonName: string; addButtonName: string; \}|
|
|
90
|
+
|Keyboard|-|\{ confirm: string; \}|
|
|
91
|
+
|Form|-|\{ required: string; type: \{ email: string; url: string; string: string; number: string; array: string; object: string; boolean: string; \}; number: \{ min: string; max: string; equal: string; range: string; positive: string; negative: string; \}; \.\.\. 4 more \.\.\.; pickerDefaultHint: string; \}|
|
|
92
|
+
|NavBar|-|\{ backBtnAriaLabel: string; \}|
|
|
93
|
+
|Uploader|-|\{ uploadBtn: string; retryUpload: string; \}|
|