@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.
Files changed (191) hide show
  1. package/README.md +85 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +244 -0
  4. package/metaData/components/action-sheet/doc.md +102 -0
  5. package/metaData/components/action-sheet/example/index.tsx +199 -0
  6. package/metaData/components/action-sheet/example/methods.tsx +6 -0
  7. package/metaData/components/avatar/doc.md +57 -0
  8. package/metaData/components/avatar/example/group.tsx +69 -0
  9. package/metaData/components/avatar/example/index.tsx +196 -0
  10. package/metaData/components/badge/doc.md +28 -0
  11. package/metaData/components/badge/example/index.tsx +128 -0
  12. package/metaData/components/button/doc.md +45 -0
  13. package/metaData/components/button/example/index.tsx +264 -0
  14. package/metaData/components/carousel/doc.md +89 -0
  15. package/metaData/components/carousel/example/index.tsx +1481 -0
  16. package/metaData/components/cell/doc.md +68 -0
  17. package/metaData/components/cell/example/arrow.tsx +13 -0
  18. package/metaData/components/cell/example/cell.tsx +71 -0
  19. package/metaData/components/cell/example/group.tsx +63 -0
  20. package/metaData/components/cell/example/index.tsx +19 -0
  21. package/metaData/components/checkbox/doc.md +91 -0
  22. package/metaData/components/checkbox/example/checkbox.tsx +158 -0
  23. package/metaData/components/checkbox/example/group.tsx +103 -0
  24. package/metaData/components/checkbox/example/index.tsx +25 -0
  25. package/metaData/components/circle-progress/doc.md +40 -0
  26. package/metaData/components/circle-progress/example/index.tsx +323 -0
  27. package/metaData/components/collapse/doc.md +74 -0
  28. package/metaData/components/collapse/example/collapse.tsx +183 -0
  29. package/metaData/components/collapse/example/group.tsx +136 -0
  30. package/metaData/components/collapse/example/index.tsx +16 -0
  31. package/metaData/components/collapse/example/utils.tsx +20 -0
  32. package/metaData/components/context-provider/doc.md +44 -0
  33. package/metaData/components/context-provider/example/index.tsx +208 -0
  34. package/metaData/components/count-down/doc.md +40 -0
  35. package/metaData/components/count-down/example/hooks.tsx +118 -0
  36. package/metaData/components/count-down/example/index.tsx +63 -0
  37. package/metaData/components/date-picker/doc.md +102 -0
  38. package/metaData/components/date-picker/example/index.tsx +545 -0
  39. package/metaData/components/dialog/doc.md +200 -0
  40. package/metaData/components/dialog/example/index.tsx +328 -0
  41. package/metaData/components/dialog/example/methods.tsx +56 -0
  42. package/metaData/components/divider/doc.md +25 -0
  43. package/metaData/components/divider/example/index.tsx +87 -0
  44. package/metaData/components/dropdown/doc.md +80 -0
  45. package/metaData/components/dropdown/example/dropdown.tsx +308 -0
  46. package/metaData/components/dropdown/example/index.tsx +19 -0
  47. package/metaData/components/dropdown/example/options.tsx +103 -0
  48. package/metaData/components/dropdown-menu/doc.md +91 -0
  49. package/metaData/components/dropdown-menu/example/dropdown-menu.tsx +270 -0
  50. package/metaData/components/dropdown-menu/example/index.tsx +16 -0
  51. package/metaData/components/ellipsis/doc.md +33 -0
  52. package/metaData/components/ellipsis/example/index.tsx +93 -0
  53. package/metaData/components/ellipsis/example/js-ellipsis.tsx +229 -0
  54. package/metaData/components/ellipsis/example/native-ellipsis.tsx +48 -0
  55. package/metaData/components/form/doc.md +90 -0
  56. package/metaData/components/form/example/form-item-context.tsx +8 -0
  57. package/metaData/components/form/example/form-item.tsx +378 -0
  58. package/metaData/components/form/example/index.tsx +87 -0
  59. package/metaData/components/form/example/linked-container.tsx +66 -0
  60. package/metaData/components/grid/doc.md +39 -0
  61. package/metaData/components/grid/example/index.tsx +252 -0
  62. package/metaData/components/icon/doc.md +15 -0
  63. package/metaData/components/icon/example/index.tsx +32 -0
  64. package/metaData/components/image/doc.md +62 -0
  65. package/metaData/components/image/example/index.tsx +528 -0
  66. package/metaData/components/image-picker/doc.md +116 -0
  67. package/metaData/components/image-picker/example/add-icon.tsx +14 -0
  68. package/metaData/components/image-picker/example/index.tsx +175 -0
  69. package/metaData/components/image-preview/doc.md +119 -0
  70. package/metaData/components/image-preview/example/index.tsx +1290 -0
  71. package/metaData/components/image-preview/example/methods.tsx +72 -0
  72. package/metaData/components/index-bar/doc.md +83 -0
  73. package/metaData/components/index-bar/example/group.tsx +93 -0
  74. package/metaData/components/index-bar/example/index.tsx +271 -0
  75. package/metaData/components/index-bar/example/side-bar.tsx +82 -0
  76. package/metaData/components/input/doc.md +60 -0
  77. package/metaData/components/input/example/hooks.tsx +259 -0
  78. package/metaData/components/input/example/index.tsx +134 -0
  79. package/metaData/components/input/example/props.tsx +183 -0
  80. package/metaData/components/keyboard/doc.md +73 -0
  81. package/metaData/components/keyboard/example/index.tsx +238 -0
  82. package/metaData/components/load-more/doc.md +48 -0
  83. package/metaData/components/load-more/example/index.tsx +395 -0
  84. package/metaData/components/loading/doc.md +34 -0
  85. package/metaData/components/loading/example/index.tsx +312 -0
  86. package/metaData/components/masking/doc.md +93 -0
  87. package/metaData/components/masking/example/index.tsx +410 -0
  88. package/metaData/components/masking/example/methods.tsx +88 -0
  89. package/metaData/components/nav-bar/doc.md +40 -0
  90. package/metaData/components/nav-bar/example/back-icon.tsx +28 -0
  91. package/metaData/components/nav-bar/example/index.tsx +305 -0
  92. package/metaData/components/notice-bar/doc.md +34 -0
  93. package/metaData/components/notice-bar/example/index.tsx +294 -0
  94. package/metaData/components/notify/doc.md +81 -0
  95. package/metaData/components/notify/example/index.tsx +171 -0
  96. package/metaData/components/notify/example/methods.tsx +83 -0
  97. package/metaData/components/pagination/doc.md +41 -0
  98. package/metaData/components/pagination/example/arrow.tsx +14 -0
  99. package/metaData/components/pagination/example/index.tsx +292 -0
  100. package/metaData/components/picker/doc.md +89 -0
  101. package/metaData/components/picker/example/index.tsx +217 -0
  102. package/metaData/components/picker-view/doc.md +57 -0
  103. package/metaData/components/picker-view/example/cascader.tsx +141 -0
  104. package/metaData/components/picker-view/example/index.tsx +297 -0
  105. package/metaData/components/picker-view/example/multi-picker.tsx +66 -0
  106. package/metaData/components/picker-view/example/picker-cell.tsx +416 -0
  107. package/metaData/components/popover/doc.md +144 -0
  108. package/metaData/components/popover/example/index.tsx +23 -0
  109. package/metaData/components/popover/example/menu.tsx +145 -0
  110. package/metaData/components/popover/example/popover-inner.tsx +147 -0
  111. package/metaData/components/popover/example/popover.tsx +268 -0
  112. package/metaData/components/popup/doc.md +101 -0
  113. package/metaData/components/popup/example/index.tsx +125 -0
  114. package/metaData/components/popup/example/methods.tsx +6 -0
  115. package/metaData/components/popup-swiper/doc.md +108 -0
  116. package/metaData/components/popup-swiper/example/index.tsx +332 -0
  117. package/metaData/components/popup-swiper/example/methods.tsx +6 -0
  118. package/metaData/components/portal/doc.md +14 -0
  119. package/metaData/components/portal/example/index.tsx +35 -0
  120. package/metaData/components/progress/doc.md +42 -0
  121. package/metaData/components/progress/example/index.tsx +256 -0
  122. package/metaData/components/pull-refresh/doc.md +37 -0
  123. package/metaData/components/pull-refresh/example/android-pull-refresh.tsx +260 -0
  124. package/metaData/components/pull-refresh/example/index.tsx +44 -0
  125. package/metaData/components/pull-refresh/example/ios-pull-refresh.tsx +216 -0
  126. package/metaData/components/radio/doc.md +89 -0
  127. package/metaData/components/radio/example/group.tsx +92 -0
  128. package/metaData/components/radio/example/index.tsx +25 -0
  129. package/metaData/components/radio/example/radio.tsx +22 -0
  130. package/metaData/components/rate/doc.md +33 -0
  131. package/metaData/components/rate/example/index.tsx +281 -0
  132. package/metaData/components/search-bar/doc.md +97 -0
  133. package/metaData/components/search-bar/example/association.tsx +89 -0
  134. package/metaData/components/search-bar/example/cancel-button.tsx +34 -0
  135. package/metaData/components/search-bar/example/highlight.tsx +66 -0
  136. package/metaData/components/search-bar/example/index.tsx +251 -0
  137. package/metaData/components/show-monitor/doc.md +34 -0
  138. package/metaData/components/show-monitor/example/index.tsx +646 -0
  139. package/metaData/components/skeleton/doc.md +101 -0
  140. package/metaData/components/skeleton/example/elements.tsx +290 -0
  141. package/metaData/components/skeleton/example/index.tsx +96 -0
  142. package/metaData/components/skeleton/example/skeleton-context.tsx +7 -0
  143. package/metaData/components/slider/doc.md +42 -0
  144. package/metaData/components/slider/example/index.tsx +326 -0
  145. package/metaData/components/slider/example/marks.tsx +50 -0
  146. package/metaData/components/slider/example/popover.tsx +38 -0
  147. package/metaData/components/slider/example/thumb.tsx +48 -0
  148. package/metaData/components/slider/example/useSliderIcon.tsx +38 -0
  149. package/metaData/components/slider/example/useSliderInit.tsx +170 -0
  150. package/metaData/components/stepper/doc.md +46 -0
  151. package/metaData/components/stepper/example/index.tsx +166 -0
  152. package/metaData/components/stepper/example/useButtonClick.tsx +74 -0
  153. package/metaData/components/stepper/example/useInputEvent.tsx +65 -0
  154. package/metaData/components/stepper/example/useValue.tsx +43 -0
  155. package/metaData/components/steps/doc.md +57 -0
  156. package/metaData/components/steps/example/index.tsx +123 -0
  157. package/metaData/components/steps/example/step.tsx +126 -0
  158. package/metaData/components/sticky/doc.md +45 -0
  159. package/metaData/components/sticky/example/index.tsx +430 -0
  160. package/metaData/components/swipe-action/doc.md +44 -0
  161. package/metaData/components/swipe-action/example/index.tsx +338 -0
  162. package/metaData/components/swipe-action/example/item.tsx +40 -0
  163. package/metaData/components/swipe-load/doc.md +43 -0
  164. package/metaData/components/swipe-load/example/index.tsx +339 -0
  165. package/metaData/components/swipe-load/example/type.tsx +153 -0
  166. package/metaData/components/switch/doc.md +38 -0
  167. package/metaData/components/switch/example/index.tsx +237 -0
  168. package/metaData/components/tab-bar/doc.md +57 -0
  169. package/metaData/components/tab-bar/example/index.tsx +18 -0
  170. package/metaData/components/tab-bar/example/item.tsx +74 -0
  171. package/metaData/components/tab-bar/example/tab-bar.tsx +105 -0
  172. package/metaData/components/tabs/doc.md +187 -0
  173. package/metaData/components/tabs/example/index.tsx +514 -0
  174. package/metaData/components/tabs/example/tab-cell-underline.tsx +320 -0
  175. package/metaData/components/tabs/example/tab-cell.tsx +433 -0
  176. package/metaData/components/tabs/example/tab-pane.tsx +349 -0
  177. package/metaData/components/tag/doc.md +80 -0
  178. package/metaData/components/tag/example/index.tsx +23 -0
  179. package/metaData/components/tag/example/list.tsx +97 -0
  180. package/metaData/components/tag/example/tag.tsx +85 -0
  181. package/metaData/components/textarea/doc.md +67 -0
  182. package/metaData/components/textarea/example/index.tsx +258 -0
  183. package/metaData/components/toast/doc.md +90 -0
  184. package/metaData/components/toast/example/index.tsx +335 -0
  185. package/metaData/components/toast/example/methods.tsx +87 -0
  186. package/metaData/components/transition/doc.md +19 -0
  187. package/metaData/components/transition/example/index.tsx +113 -0
  188. package/metaData/components/uploader/doc.md +82 -0
  189. package/metaData/components/uploader/example/index.tsx +208 -0
  190. package/metaData/components-index.json +242 -0
  191. package/package.json +56 -0
@@ -0,0 +1,68 @@
1
+ ### 信息展示
2
+
3
+ # 单元格 Cell
4
+
5
+ 单元格组件,含单元格及单元格组合,常用于设置项、表单等。
6
+
7
+ ======
8
+
9
+ > 属性/Props
10
+
11
+ |参数|描述|类型|默认值|
12
+ |----------|-------------|------|------|
13
+ |style|自定义样式|CSSProperties|-|
14
+ |className|自定义类名|string|-|
15
+ |icon|单元格左侧图标|ReactNode|-|
16
+ |label|标签名|ReactNode|-|
17
+ |desc|描述|ReactNode|-|
18
+ |text|主体文字,如果有标签名则靠右,否则靠左|string|-|
19
+ |children|主体内容,如果有标签名则靠右,否则靠左|ReactNode|-|
20
+ |showArrow|是否展示右侧箭头|boolean|-|
21
+ |arrow|右侧箭头内容|ReactNode|-|
22
+ |prepend|单元格前缀内容,在单元格上方|ReactNode|-|
23
+ |append|单元格后缀内容,在单元格下方|ReactNode|-|
24
+ |bordered|是否有外边框|boolean|true|
25
+ |onClick|点击单元格事件回调|(e: MouseEvent\<HTMLDivElement, MouseEvent\>) =\> void|-|
26
+
27
+ > 引用/Refs
28
+
29
+ |参数|描述|类型|
30
+ |----------|-------------|------|
31
+ |dom|最外层元素 DOM|HTMLDivElement|
32
+
33
+ > Cell.Group
34
+
35
+ |参数|描述|类型|默认值|
36
+ |----------|-------------|------|------|
37
+ |style|自定义样式|CSSProperties|-|
38
+ |className|自定义类名|string|-|
39
+ |header|自定义头部内容|ReactNode|-|
40
+ |footer|自定义尾部内容|ReactNode|-|
41
+ |bordered|是否有外边框|boolean|true|
42
+ |options|单元格配置,优先级高于children|(CellProps & RefAttributes\<CellRef\>)\[\]|-|
43
+ |children|内部单元格|ReactNode|-|
44
+ |onClick|点击单元格组回调|(e: MouseEvent\<HTMLDivElement, MouseEvent\>) =\> void|-|
45
+
46
+ > CellProps
47
+
48
+ |参数|描述|类型|默认值|
49
+ |----------|-------------|------|------|
50
+ |style|自定义样式|CSSProperties|-|
51
+ |className|自定义类名|string|-|
52
+ |icon|单元格左侧图标|ReactNode|-|
53
+ |label|标签名|ReactNode|-|
54
+ |desc|描述|ReactNode|-|
55
+ |text|主体文字,如果有标签名则靠右,否则靠左|string|-|
56
+ |children|主体内容,如果有标签名则靠右,否则靠左|ReactNode|-|
57
+ |showArrow|是否展示右侧箭头|boolean|-|
58
+ |arrow|右侧箭头内容|ReactNode|-|
59
+ |prepend|单元格前缀内容,在单元格上方|ReactNode|-|
60
+ |append|单元格后缀内容,在单元格下方|ReactNode|-|
61
+ |bordered|是否有外边框|boolean|true|
62
+ |onClick|点击单元格事件回调|(e: MouseEvent\<HTMLDivElement, MouseEvent\>) =\> void|-|
63
+
64
+ > CellGroupRef
65
+
66
+ |参数|描述|类型|
67
+ |----------|-------------|------|
68
+ |dom|最外层元素 DOM|HTMLDivElement|
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+
3
+ export default function Arrow() {
4
+ return (
5
+ <svg viewBox="0 0 8 14" fill="none" className="arrow-icon-svg">
6
+ <path
7
+ fillRule="evenodd"
8
+ clipRule="evenodd"
9
+ d="M0.594858 1.24219C0.399596 1.43745 0.399596 1.75403 0.594859 1.94929L5.59905 6.95348L0.636039 11.9165C0.440776 12.1118 0.440776 12.4283 0.636038 12.6236L0.989592 12.9771C1.18485 13.1724 1.50144 13.1724 1.6967 12.9771L7.35355 7.3203C7.5296 7.14425 7.54692 6.86959 7.40553 6.67413C7.38216 6.62774 7.35111 6.58423 7.31237 6.54549L1.65552 0.888634C1.46026 0.693372 1.14367 0.693372 0.948411 0.888634L0.594858 1.24219Z"
10
+ />
11
+ </svg>
12
+ );
13
+ }
@@ -0,0 +1,71 @@
1
+ import React, { useRef, forwardRef, Ref, useImperativeHandle } from 'react';
2
+ import { cls } from '@arco-design/mobile-utils';
3
+ import { ContextLayout } from '../context-provider';
4
+ import Arrow from './arrow';
5
+ import { GroupContext } from './group';
6
+ import { CellProps, CellRef } from './type';
7
+
8
+ export const Cell = forwardRef((props: CellProps, ref: Ref<CellRef>) => {
9
+ const {
10
+ className = '',
11
+ style,
12
+ icon,
13
+ label,
14
+ desc,
15
+ text,
16
+ children,
17
+ showArrow,
18
+ arrow,
19
+ prepend,
20
+ append,
21
+ bordered = true,
22
+ onClick,
23
+ } = props;
24
+ const domRef = useRef<HTMLDivElement | null>(null);
25
+
26
+ useImperativeHandle(ref, () => ({
27
+ dom: domRef.current,
28
+ }));
29
+
30
+ return (
31
+ <ContextLayout>
32
+ {({ prefixCls }) => (
33
+ <GroupContext.Consumer>
34
+ {({ isFromGroup }) => (
35
+ <div
36
+ className={cls(
37
+ `${prefixCls}-cell`,
38
+ 'all-border-box',
39
+ { 'without-group': !isFromGroup },
40
+ { bordered },
41
+ className,
42
+ )}
43
+ style={style}
44
+ ref={domRef}
45
+ onClick={e => onClick && onClick(e)}
46
+ >
47
+ {prepend}
48
+ <div className={cls(`${prefixCls}-cell-inner`, { 'has-desc': desc })}>
49
+ {icon ? <div className="cell-label-icon">{icon}</div> : null}
50
+ {label || desc ? (
51
+ <div className="cell-label">
52
+ <div className="cell-title">{label}</div>
53
+ {desc ? <div className="cell-desc">{desc}</div> : null}
54
+ </div>
55
+ ) : null}
56
+ <div className={`cell-content ${label || desc ? 'has-label' : ''}`}>
57
+ {text ? <div className="cell-text">{text}</div> : null}
58
+ {children}
59
+ </div>
60
+ {showArrow ? (
61
+ <div className="cell-arrow-icon">{arrow || <Arrow />}</div>
62
+ ) : null}
63
+ </div>
64
+ {append}
65
+ </div>
66
+ )}
67
+ </GroupContext.Consumer>
68
+ )}
69
+ </ContextLayout>
70
+ );
71
+ });
@@ -0,0 +1,63 @@
1
+ import React, { forwardRef, Ref, useRef, useImperativeHandle } from 'react';
2
+ import { cls } from '@arco-design/mobile-utils';
3
+ import { ContextLayout } from '../context-provider';
4
+ import { CellGroupProps, CellGroupRef, CellProps, CellRef } from './type';
5
+
6
+ export interface GroupContextParams {
7
+ isFromGroup: boolean;
8
+ }
9
+
10
+ export const GroupContext = React.createContext<GroupContextParams>({
11
+ isFromGroup: false,
12
+ });
13
+
14
+ export function componentGenerator<P extends CellProps = CellProps, R extends CellRef = CellRef>(
15
+ Comp: React.ForwardRefExoticComponent<P & React.RefAttributes<R>>,
16
+ ) {
17
+ return forwardRef((props: CellGroupProps<P>, ref: Ref<CellGroupRef>) => {
18
+ const {
19
+ className = '',
20
+ style,
21
+ header,
22
+ footer,
23
+ bordered = true,
24
+ options,
25
+ children,
26
+ onClick,
27
+ } = props;
28
+ const domRef = useRef<HTMLDivElement | null>(null);
29
+
30
+ useImperativeHandle(ref, () => ({
31
+ dom: domRef.current,
32
+ }));
33
+
34
+ function handleClick(e: React.MouseEvent<HTMLDivElement, MouseEvent>) {
35
+ onClick && onClick(e);
36
+ }
37
+
38
+ return (
39
+ <ContextLayout>
40
+ {({ prefixCls }) => (
41
+ <div
42
+ className={cls(`${prefixCls}-cell-group`, 'all-border-box', className)}
43
+ ref={domRef}
44
+ onClick={handleClick}
45
+ style={style}
46
+ >
47
+ {header ? <div className="cell-group-header">{header}</div> : null}
48
+ <div className={cls('cell-group-body', { bordered })}>
49
+ <GroupContext.Provider value={{ isFromGroup: true }}>
50
+ {children}
51
+ {options &&
52
+ options.map((option, index) => (
53
+ <Comp key={index} {...option} />
54
+ ))}
55
+ </GroupContext.Provider>
56
+ </div>
57
+ {footer ? <div className="cell-group-footer">{footer}</div> : null}
58
+ </div>
59
+ )}
60
+ </ContextLayout>
61
+ );
62
+ });
63
+ }
@@ -0,0 +1,19 @@
1
+ import { componentWrapper } from '@arco-design/mobile-utils';
2
+ import { componentGenerator } from './group';
3
+ import { Cell } from './cell';
4
+
5
+ export * from './type';
6
+
7
+ const Group = componentGenerator(Cell);
8
+
9
+ /**
10
+ * 单元格组件,含单元格及单元格组合,常用于设置项、表单等。
11
+ * @en Cell, including cells and cell group, are often used to set items, forms, etc.
12
+ * @type 信息展示
13
+ * @type_en Data Display
14
+ * @name 单元格
15
+ * @name_en Cell
16
+ */
17
+ export default componentWrapper(Cell, {
18
+ Group,
19
+ });
@@ -0,0 +1,91 @@
1
+ ### 数据录入
2
+
3
+ # 复选框 Checkbox
4
+
5
+ 复选框,可用状态下点击切换选择,支持禁用,支持复选项组。
6
+
7
+ ======
8
+
9
+ > 属性/Props
10
+
11
+ |参数|描述|类型|默认值|
12
+ |----------|-------------|------|------|
13
+ |label|选项的文字说明,传入children时此属性无效|string|""|
14
+ |value|Checkbox的值|ValueType|必填|
15
+ |defaultCheck|默认选中状态|boolean|false|
16
+ |checked|是否选中,传值即为受控模式|boolean|-|
17
+ |onChange|复选框选中状态回调函数|(checked: boolean, value: ValueType, e: MouseEvent\<Element, MouseEvent\>) =\> void|() => {}|
18
+ |shape|图标的形状|"circle" \| "square"|'circle'|
19
+ |layout|排版样式(内联\|块级\|图标靠右两端对齐)|"inline" \| "block" \| "justify"|'inline'|
20
+ |disabled|是否禁用|boolean|false|
21
+ |icons|自定义图标合集,传 null 表示无图标|IconType|Default icon|
22
+ |isRadio|是否为Radio组件,不推荐使用,仅用于支持Radio组件|boolean|false|
23
+ |children|自定义组件内容|ReactNode|null|
24
+ |className|自定义类名|string|""|
25
+ |style|自定义样式|CSSProperties|{}|
26
+
27
+ > 引用/Refs
28
+
29
+ |参数|描述|类型|
30
+ |----------|-------------|------|
31
+ |dom|组件外层dom元素|HTMLDivElement|
32
+
33
+ > Checkbox.Group
34
+
35
+ 复选项组
36
+
37
+ |参数|描述|类型|默认值|
38
+ |----------|-------------|------|------|
39
+ |options|复选框组可选项, 传入children后此值无效|(CheckboxProps\<ValueType\> & RefAttributes\<CheckboxRef\>)\[\]|-|
40
+ |value|受控模式,复选框选中的选项值|ValueType\[\]|-|
41
+ |defaultValue|默认选中项|ValueType\[\]|[]|
42
+ |min|最小可选值数量|number|0|
43
+ |max|最大可选值数量,0表示没有限制|number|0|
44
+ |onChange|点击复选框值变化回调|(value: ValueType\[\]) =\> void|() => {}|
45
+ |shape|图标的形状|"circle" \| "square"|'circle'|
46
+ |layout|排版样式(内联\|块级\|图标靠右两端对齐)|"inline" \| "block" \| "justify"|'inline'|
47
+ |disabled|是否禁用|boolean|false|
48
+ |icons|自定义图标合集,传 null 表示无图标|IconType|Default icon|
49
+ |isRadio|是否为Radio组件,不推荐使用,仅用于支持Radio组件|boolean|false|
50
+ |children|自定义组件内容|ReactNode|null|
51
+ |className|自定义类名|string|""|
52
+ |style|自定义样式|CSSProperties|{}|
53
+
54
+ > ValueType
55
+
56
+ ```
57
+ string | number
58
+ ```
59
+
60
+ > IconType
61
+
62
+ |参数|描述|类型|
63
+ |----------|-------------|------|
64
+ |normal|未选中|ReactNode|
65
+ |active|选中态|ReactNode|
66
+ |disabled|禁用态|ReactNode|
67
+ |activeDisabled|禁用选中态|ReactNode|
68
+
69
+ > CheckboxProps
70
+
71
+ |参数|描述|类型|默认值|
72
+ |----------|-------------|------|------|
73
+ |label|选项的文字说明,传入children时此属性无效|string|""|
74
+ |value|Checkbox的值|ValueType|必填|
75
+ |defaultCheck|默认选中状态|boolean|false|
76
+ |checked|是否选中,传值即为受控模式|boolean|-|
77
+ |onChange|复选框选中状态回调函数|(checked: boolean, value: ValueType, e: MouseEvent\<Element, MouseEvent\>) =\> void|() => {}|
78
+ |shape|图标的形状|"circle" \| "square"|'circle'|
79
+ |layout|排版样式(内联\|块级\|图标靠右两端对齐)|"inline" \| "block" \| "justify"|'inline'|
80
+ |disabled|是否禁用|boolean|false|
81
+ |icons|自定义图标合集,传 null 表示无图标|IconType|Default icon|
82
+ |isRadio|是否为Radio组件,不推荐使用,仅用于支持Radio组件|boolean|false|
83
+ |children|自定义组件内容|ReactNode|null|
84
+ |className|自定义类名|string|""|
85
+ |style|自定义样式|CSSProperties|{}|
86
+
87
+ > CheckboxGroupRef
88
+
89
+ |参数|描述|类型|
90
+ |----------|-------------|------|
91
+ |dom|组件外层dom元素|HTMLDivElement|
@@ -0,0 +1,158 @@
1
+ import React, { useState, useEffect, forwardRef, Ref, useImperativeHandle, useRef } from 'react';
2
+ import { cls } from '@arco-design/mobile-utils';
3
+ import { ContextLayout } from '../context-provider';
4
+ import IconCircleUnchecked from '../icon/IconCircleUnchecked';
5
+ import IconCircleChecked from '../icon/IconCircleChecked';
6
+ import IconCircleDisabled from '../icon/IconCircleDisabled';
7
+ import IconSquareChecked from '../icon/IconSquareChecked';
8
+ import IconSquareUnchecked from '../icon/IconSquareUnchecked';
9
+ import IconSquareDisabled from '../icon/IconSquareDisabled';
10
+ import { CheckboxGroupContext } from './group';
11
+ import { IconStatus, IconType, CheckboxProps, CheckboxRef, ValueType } from './type';
12
+ import { useMergeProps } from './hooks';
13
+
14
+ const getDefaultIcon = (shape: string, status: IconStatus) => {
15
+ const defaultIcons: Record<string, IconType> = {
16
+ circle: {
17
+ normal: <IconCircleUnchecked />,
18
+ active: <IconCircleChecked />,
19
+ disabled: <IconCircleDisabled />,
20
+ activeDisabled: <IconCircleChecked />,
21
+ },
22
+ square: {
23
+ normal: <IconSquareUnchecked />,
24
+ active: <IconSquareChecked />,
25
+ disabled: <IconSquareDisabled />,
26
+ activeDisabled: <IconSquareChecked />,
27
+ },
28
+ justify: {
29
+ normal: <IconCircleUnchecked />,
30
+ active: <IconCircleChecked />,
31
+ disabled: <IconCircleDisabled />,
32
+ activeDisabled: <IconCircleChecked />,
33
+ },
34
+ };
35
+ return defaultIcons[shape][status];
36
+ };
37
+
38
+ export const Checkbox = forwardRef(
39
+ <T extends ValueType = ValueType>(props: CheckboxProps<T>, ref: Ref<CheckboxRef>) => {
40
+ const {
41
+ style = {},
42
+ className = '',
43
+ children = null,
44
+ label = '',
45
+ layout = 'inline',
46
+ value,
47
+ defaultCheck = false,
48
+ disabled = false,
49
+ shape = 'circle',
50
+ icons,
51
+ isRadio = false,
52
+ checked: propsChecked,
53
+ onChange,
54
+ } = useMergeProps<T>(props, CheckboxGroupContext);
55
+
56
+ const [checked, setChecked] = useState(
57
+ propsChecked === void 0 ? defaultCheck : propsChecked,
58
+ );
59
+
60
+ const [componentName] = useState(isRadio ? 'radio' : 'checkbox');
61
+
62
+ const domRef = useRef<HTMLDivElement | null>(null);
63
+ useImperativeHandle(ref, () => ({
64
+ dom: domRef.current,
65
+ }));
66
+
67
+ useEffect(() => {
68
+ if (propsChecked !== void 0) setChecked(Boolean(propsChecked));
69
+ }, [propsChecked]);
70
+
71
+ /**
72
+ * 获得图标样式
73
+ * @en Get icon style
74
+ */
75
+ const getStatus = (): IconStatus => {
76
+ if (checked) {
77
+ if (disabled) return IconStatus.ACTIVE_DISABLED;
78
+ return IconStatus.ACTIVE;
79
+ }
80
+ if (disabled) return IconStatus.DISABLED;
81
+ return IconStatus.NORMAL;
82
+ };
83
+
84
+ /**
85
+ * 计算展示的icon
86
+ * @en Calculate the displayed icon
87
+ */
88
+ const renderIcon = () => {
89
+ let Icon;
90
+ const iconKey = getStatus();
91
+ if (icons && icons[iconKey] !== void 0) {
92
+ Icon = icons[iconKey];
93
+ } else if (icons === null) {
94
+ Icon = null;
95
+ } else {
96
+ Icon =
97
+ layout === 'justify'
98
+ ? getDefaultIcon('justify', iconKey)
99
+ : getDefaultIcon(shape, iconKey);
100
+ }
101
+ return Icon ? (
102
+ <div
103
+ className={cls(`${componentName}-icon`, {
104
+ disabled,
105
+ checked,
106
+ })}
107
+ >
108
+ {Icon}
109
+ </div>
110
+ ) : null;
111
+ };
112
+
113
+ /**
114
+ * 处理点击事件
115
+ * @en Handling click events
116
+ */
117
+ const onClick = (e: React.MouseEvent) => {
118
+ if (disabled) return;
119
+
120
+ // Radio组件不支持点击取消选中
121
+ // @en Radio component does not support click to uncheck
122
+ if (isRadio && checked) return;
123
+
124
+ onChange && onChange(!checked, value, e);
125
+
126
+ if (propsChecked === void 0) {
127
+ setChecked(!checked);
128
+ }
129
+ };
130
+
131
+ return (
132
+ <ContextLayout>
133
+ {({ prefixCls }) => (
134
+ <div
135
+ role="checkbox"
136
+ aria-checked={checked}
137
+ aria-disabled={disabled}
138
+ tabIndex={0}
139
+ ref={domRef}
140
+ style={style}
141
+ className={cls(
142
+ className,
143
+ `${prefixCls}-${componentName}`,
144
+ `shape-${shape}`,
145
+ { disabled },
146
+ layout,
147
+ )}
148
+ onClick={onClick}
149
+ >
150
+ {layout !== 'justify' && renderIcon()}
151
+ <div className={`${componentName}-text`}>{children || label || value}</div>
152
+ {layout === 'justify' && renderIcon()}
153
+ </div>
154
+ )}
155
+ </ContextLayout>
156
+ );
157
+ },
158
+ );
@@ -0,0 +1,103 @@
1
+ import React, { useState, useEffect, forwardRef, Ref, useImperativeHandle, useRef } from 'react';
2
+ import { cls } from '@arco-design/mobile-utils';
3
+ import { ContextLayout } from '../context-provider';
4
+ import {
5
+ GroupContextParams,
6
+ CheckboxGroupProps,
7
+ CheckboxGroupRef,
8
+ ValueType,
9
+ CheckboxProps,
10
+ CheckboxRef,
11
+ } from './type';
12
+
13
+ export const CheckboxGroupContext = React.createContext<GroupContextParams<ValueType>>({
14
+ isGroup: false,
15
+ shape: 'circle',
16
+ layout: 'inline',
17
+ disabled: false,
18
+ value: [],
19
+ onChange: () => {},
20
+ });
21
+
22
+ export function componentGenerator<
23
+ T extends ValueType = ValueType,
24
+ P extends CheckboxProps<T> = CheckboxProps<T>,
25
+ R extends CheckboxRef = CheckboxRef,
26
+ >(Comp: React.ForwardRefExoticComponent<P & React.RefAttributes<R>>) {
27
+ return forwardRef((props: CheckboxGroupProps<T, P>, ref: Ref<CheckboxGroupRef | null>) => {
28
+ const {
29
+ style = {},
30
+ className = '',
31
+ defaultValue = [],
32
+ disabled = false,
33
+ shape = 'circle',
34
+ options,
35
+ icons,
36
+ onChange,
37
+ value,
38
+ children = null,
39
+ layout = 'inline',
40
+ min = 0,
41
+ max = 0,
42
+ } = props;
43
+
44
+ const [groupValue, setGroupValue] = useState(value || defaultValue);
45
+ const domRef = useRef<HTMLDivElement | null>(null);
46
+ useImperativeHandle(ref, () => ({
47
+ dom: domRef.current,
48
+ }));
49
+
50
+ useEffect(() => {
51
+ value !== void 0 && setGroupValue(value);
52
+ }, [value]);
53
+
54
+ /**
55
+ * 切换checkbox状态回调
56
+ * @en callback when toggling checkbox state
57
+ */
58
+ const handleChange = (checked: boolean, val: T) => {
59
+ if (
60
+ (!checked && groupValue.length <= min) ||
61
+ (max && checked && groupValue.length >= max)
62
+ )
63
+ return;
64
+ const newGroupValue = checked
65
+ ? [...groupValue, val]
66
+ : groupValue.filter(item => item !== val);
67
+
68
+ onChange && onChange(newGroupValue);
69
+ if (value === void 0) {
70
+ setGroupValue(newGroupValue);
71
+ }
72
+ };
73
+
74
+ return (
75
+ <ContextLayout>
76
+ {({ prefixCls }) => (
77
+ <div
78
+ ref={domRef}
79
+ style={style}
80
+ className={cls(className, `${prefixCls}-checkbox-group`)}
81
+ >
82
+ <CheckboxGroupContext.Provider
83
+ value={{
84
+ isGroup: true,
85
+ shape,
86
+ layout,
87
+ disabled,
88
+ icons,
89
+ value: groupValue,
90
+ onChange: handleChange,
91
+ }}
92
+ >
93
+ {children}
94
+ {!children &&
95
+ options &&
96
+ options.map(option => <Comp key={option.value} {...option} />)}
97
+ </CheckboxGroupContext.Provider>
98
+ </div>
99
+ )}
100
+ </ContextLayout>
101
+ );
102
+ });
103
+ }
@@ -0,0 +1,25 @@
1
+ import { componentWrapper } from '@arco-design/mobile-utils';
2
+ import { componentGenerator } from './group';
3
+ import { Checkbox } from './checkbox';
4
+
5
+ export * from './type';
6
+
7
+ /**
8
+ * 复选项组
9
+ * @en Checkbox group
10
+ * @displayName CheckboxGroup
11
+ */
12
+ const Group = componentWrapper(componentGenerator(Checkbox), 'CheckboxGroup');
13
+
14
+ /**
15
+ * 复选框,可用状态下点击切换选择,支持禁用,支持复选项组。
16
+ * @en Checkbox, click to switch selection when available, support disabled status, support checkbox group.
17
+ * @name 复选框
18
+ * @name_en Checkbox
19
+ * @type 数据录入
20
+ * @type_en Data Entry
21
+ * @displayName Checkbox
22
+ */
23
+ export default componentWrapper(Checkbox, 'Checkbox', {
24
+ Group,
25
+ });
@@ -0,0 +1,40 @@
1
+ ### 反馈
2
+
3
+ # 环形进度条 CircleProgress
4
+
5
+ 环形进度条组件,以圆环形式表示百分比进度
6
+
7
+ ======
8
+
9
+ > 属性/Props
10
+
11
+ |参数|描述|类型|默认值|
12
+ |----------|-------------|------|------|
13
+ |className|自定义类名|string|-|
14
+ |style|自定义样式|CSSProperties|-|
15
+ |percentPosition|文字显示位置|"center" \| "bottom"|"center"|
16
+ |showPercent|是否显示圆环内部文字|boolean|true|
17
+ |percentage|进度环百分比|number|必填|
18
+ |renderPercent|圆环内部文字显示(一个函数,返回ReactNode类型,回调参数为当前进度百分比)|(percentage: number) =\> ReactNode|-|
19
+ |trackColor|轨道颜色|string|-|
20
+ |progressColor|进度环颜色|string|-|
21
+ |disabled|是否置灰|boolean|false|
22
+ |trackStroke|轨道宽度|number|10|
23
+ |progressStroke|进度环宽度|number|12|
24
+ |progressColorStart|进度环渐变开始的颜色(当设置progressColorStart和progressColorEnd其中一个时,颜色会覆盖掉progressColor的颜色)|string|-|
25
+ |progressColorEnd|进度环渐变结束的颜色|string|-|
26
+ |duration|每增加step步长所需的毫秒数|number|30|
27
+ |step|步长(增加步长,以step增长)|number|1|
28
+ |clockwise|是否逆时针增加|boolean|false|
29
+ |radius|圆环半径|number|-|
30
+ |filleted|进度条两端是否圆角|boolean|true|
31
+ |mountedTransition|初始化percentage时是否以动画形式过渡到目的值|boolean|true|
32
+ |size|进度环尺寸|"mini" \| "default"|"default"|
33
+ |mountedBezier|初始化时动画的贝塞尔曲线|\[number, number, number, number\]|[0.34, 0.69, 0.1, 1]|
34
+ |svgKey|区分不同svg的\`\<def\>\`内容|string|-|
35
+
36
+ > 引用/Refs
37
+
38
+ |参数|描述|类型|
39
+ |----------|-------------|------|
40
+ |dom|最外层元素 DOM|HTMLDivElement|