@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,251 @@
1
+ import { cls } from '@arco-design/mobile-utils';
2
+ import React, {
3
+ useRef,
4
+ forwardRef,
5
+ Ref,
6
+ useImperativeHandle,
7
+ useContext,
8
+ ReactNode,
9
+ useState,
10
+ } from 'react';
11
+ import { ContextLayout, GlobalContext } from '../context-provider';
12
+ import { IconSearch } from '../icon';
13
+ import { useInputLogic } from '../input/hooks';
14
+ import { SearchBarAssociation } from './association';
15
+ import { CancelButton } from './cancel-button';
16
+ import { SearchAssociationBaseItem, SearchBarProps, SearchBarRef } from './type';
17
+
18
+ export type {
19
+ SearchBarProps,
20
+ SearchBarRef,
21
+ SearchAssociationHighlightMode,
22
+ SearchAssociationItem,
23
+ SearchAssociationShowType,
24
+ SearchBarShape,
25
+ } from './type';
26
+
27
+ /**
28
+ * 搜索栏组件
29
+ * @en SearchBar component
30
+ * @type 数据录入
31
+ * @type_en Data Entry
32
+ * @name 搜索栏
33
+ * @name_en SearchBar
34
+ */
35
+ const SearchBar = forwardRef(
36
+ <Data extends SearchAssociationBaseItem = SearchAssociationBaseItem>(
37
+ props: SearchBarProps<Data>,
38
+ ref: Ref<SearchBarRef>,
39
+ ) => {
40
+ const { prefixCls, locale } = useContext(GlobalContext);
41
+ const searchBarPrefixCls = `${prefixCls}-search-bar`;
42
+
43
+ const {
44
+ inputClass,
45
+ inputStyle,
46
+ type = 'search',
47
+ nativeProps,
48
+ id,
49
+ name,
50
+ maxLength,
51
+ placeholder = locale?.SearchBar.placeholder,
52
+ readOnly,
53
+ onKeyUp,
54
+ onKeyPress,
55
+ disabled,
56
+ pattern,
57
+ prefix = <IconSearch className={`${searchBarPrefixCls}-search-icon`} />,
58
+ append,
59
+ textAlign = 'left',
60
+ actionButton,
61
+ clearable = true,
62
+ clearShowType = 'value',
63
+ shape = 'square',
64
+ className,
65
+ enableAssociation = false,
66
+ associationVisible,
67
+ associationShowType = 'default',
68
+ associationItems,
69
+ highlightClassName,
70
+ highlightMode,
71
+ highlightStyle,
72
+ onCancel,
73
+ onAssociationClick,
74
+ onAssociationItemClick,
75
+ renderAssociation,
76
+ renderAssociationItem,
77
+ ...inputProps
78
+ } = props;
79
+ const inputRef = useRef<HTMLInputElement | null>(null);
80
+
81
+ /**
82
+ * 格式化搜索输入框尾部要插入的内容
83
+ * @en Format the content to be inserted at the end of the search input box
84
+ */
85
+ const formatAppendProp = (focusing: boolean, currentInputValue: string) => {
86
+ let appendNode: ReactNode = null;
87
+
88
+ if (typeof append === 'function') {
89
+ appendNode = append(focusing, currentInputValue);
90
+ } else {
91
+ appendNode = append;
92
+ }
93
+
94
+ // 默认情况下,在激活时或有内容时插入一个cancelBtn
95
+ // @en By default inserts a cancelBtn on activation or when there is content
96
+ const formatActionButton: ReactNode =
97
+ typeof actionButton === 'undefined' ? (
98
+ <CancelButton
99
+ focusing={focusing}
100
+ currentInputValue={currentInputValue}
101
+ className={`${searchBarPrefixCls}-cancel-btn`}
102
+ onCancel={onCancel}
103
+ text={locale?.SearchBar.cancelBtn}
104
+ />
105
+ ) : (
106
+ actionButton
107
+ );
108
+
109
+ return (
110
+ <>
111
+ {appendNode}
112
+ {formatActionButton}
113
+ {enableAssociation ? (
114
+ <SearchBarAssociation
115
+ prefixCls={searchBarPrefixCls}
116
+ keyword={currentInputValue}
117
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
118
+ visible={actualVisible}
119
+ associationItems={associationItems}
120
+ highlightClassName={highlightClassName}
121
+ highlightMode={highlightMode}
122
+ highlightStyle={highlightStyle}
123
+ onAssociationClick={onAssociationClick}
124
+ onAssociationItemClick={onAssociationItemClick}
125
+ renderAssociation={renderAssociation}
126
+ renderAssociationItem={renderAssociationItem}
127
+ />
128
+ ) : null}
129
+ </>
130
+ );
131
+ };
132
+
133
+ const {
134
+ inputValue,
135
+ handleChange,
136
+ handleInput,
137
+ handleKeyDown,
138
+ handleFocus,
139
+ handleBlur,
140
+ handleClick,
141
+ renderWrapper,
142
+ wrapRef,
143
+ } = useInputLogic(
144
+ {
145
+ className: cls(className, `${searchBarPrefixCls}-${shape}`),
146
+ prefix,
147
+ clearable,
148
+ append: formatAppendProp,
149
+ clearShowType,
150
+ ...inputProps,
151
+ },
152
+ inputRef,
153
+ );
154
+
155
+ const [visible, setVisible] = useState(
156
+ associationShowType === 'always' ||
157
+ ((associationShowType === 'value' || associationShowType === 'default') &&
158
+ Boolean(inputValue)),
159
+ );
160
+ // 真实的控制搜索联想框显隐,受控模式优先生效
161
+ // @en Control the display and hide of the search association box, and the controlled mode takes effect first
162
+ const actualVisible = associationVisible ?? visible;
163
+
164
+ useImperativeHandle(ref, () => ({
165
+ dom: wrapRef.current,
166
+ input: inputRef.current,
167
+ toggleAssociation(newVisible) {
168
+ setVisible(newVisible ?? !visible);
169
+ },
170
+ }));
171
+
172
+ /**
173
+ * 处理非受控逻辑下,搜索联想框的显隐状态
174
+ * @en Handle the display state of the search association box under uncontrolled logic
175
+ *
176
+ * @param {boolean} newVisible 新的visible
177
+ * @param {string} newValue 新的输入框值
178
+ */
179
+ const formatSetAssociationVisible = (newVisible: boolean, newValue: string) => {
180
+ if (associationShowType === 'always') {
181
+ setVisible(true);
182
+ // 聚焦模式下,直接把visible和newVisible对齐即可
183
+ // @en In focus mode, just align visible and newVisible directly
184
+ } else if (associationShowType === 'focus') {
185
+ setVisible(newVisible);
186
+ // 聚焦 + 有值模式下,需要newVisible为true和newValue.length > 0同时满足
187
+ // @en In focus + valued mode, newVisible is required to be true and newValue.length > 0 to be satisfied at the same time
188
+ } else if (associationShowType === 'default') {
189
+ setVisible(newVisible && Boolean(newValue));
190
+ // 仅有值模式下,visible需要newValue.length > 0
191
+ // @en In value-only mode, visible requires newValue.length > 0
192
+ } else if (associationShowType === 'value') {
193
+ setVisible(Boolean(newValue));
194
+ }
195
+ };
196
+
197
+ const handleInputFocus = (e: React.FocusEvent<HTMLInputElement>) => {
198
+ formatSetAssociationVisible(true, e.target.value);
199
+ handleFocus(e);
200
+ };
201
+
202
+ const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>) => {
203
+ formatSetAssociationVisible(false, e.target.value);
204
+ handleBlur(e);
205
+ };
206
+
207
+ const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
208
+ const newValue = e.target.value;
209
+ formatSetAssociationVisible(Boolean(newValue), newValue);
210
+ handleChange(e);
211
+ };
212
+
213
+ const renderSearchBar = () => {
214
+ return renderWrapper(
215
+ searchBarPrefixCls,
216
+ type,
217
+ <input
218
+ {...nativeProps}
219
+ id={id}
220
+ name={name}
221
+ maxLength={maxLength}
222
+ placeholder={placeholder}
223
+ readOnly={readOnly}
224
+ onFocus={handleInputFocus}
225
+ onBlur={handleInputBlur}
226
+ onKeyUp={onKeyUp}
227
+ onKeyPress={onKeyPress}
228
+ ref={inputRef}
229
+ className={cls(
230
+ `${searchBarPrefixCls}-input`,
231
+ inputClass,
232
+ `${searchBarPrefixCls}-input-${textAlign}`,
233
+ )}
234
+ style={inputStyle}
235
+ value={inputValue}
236
+ type={type}
237
+ disabled={disabled}
238
+ pattern={pattern}
239
+ onChange={handleInputChange}
240
+ onInput={handleInput}
241
+ onKeyDown={handleKeyDown}
242
+ onClick={handleClick}
243
+ />,
244
+ );
245
+ };
246
+
247
+ return <ContextLayout>{renderSearchBar}</ContextLayout>;
248
+ },
249
+ );
250
+
251
+ export default SearchBar;
@@ -0,0 +1,34 @@
1
+ ### 其他
2
+
3
+ # 滚动视口监听 ShowMonitor
4
+
5
+ 通过滚动事件监测 children 是否进入视口或离开视口。
6
+
7
+ ======
8
+
9
+ > 属性/Props
10
+
11
+ |参数|描述|类型|默认值|
12
+ |----------|-------------|------|------|
13
+ |className|自定义类名|string|-|
14
+ |style|自定义样式|CSSProperties|-|
15
+ |getScrollContainer|滚动视口选择器|() =\> HTMLElement \| Window|() => window|
16
+ |throttle|节流粒度(ms)|number|300|
17
+ |listenResize|是否监听 resize|boolean|true|
18
+ |listenScroll|是否监听 scroll|boolean|true|
19
+ |once|只监听变化一次,为 true 时仅在进入视口时触发一次 onVisibleChange|boolean|false|
20
+ |overflow|是否为局部滚动|boolean|false|
21
+ |threshold|元素进入视口区域触发回调比例,\[0\-1\]|number|0|
22
+ |offset|预加载提前量 \[offsetTop, offsetRight, offsetBottom, offsetLeft\]。 如果类型为 number,等效为\[number, number, number, number\]; 如果类型为 \[number1, number2\], 等效为\[number1, 0, number2, 0\]; 支持 Intersection Observer 的浏览器需要搭配 getScrollContainer, 设置父级容器|number \| \[number, number\] \| \[number, number, number, number\]|0|
23
+ |children|子节点|ReactNode|必填|
24
+ |disabled|是否禁用监听|boolean|false|
25
+ |onVisibleChange|进入或离开视口的回调函数|(visible: boolean, node: HTMLDivElement) =\> void|必填|
26
+ |onClick|点击组件的回调事件|(e: MouseEvent\<Element, MouseEvent\>) =\> void|-|
27
+
28
+ > 引用/Refs
29
+
30
+ |参数|描述|类型|
31
+ |----------|-------------|------|
32
+ |dom|最外层元素 DOM|HTMLDivElement|
33
+ |checkVisible|忽略元素前后状态,手动检查元素是否在视口内,触发onVisibleChange回调函数|() =\> boolean|
34
+ |flushVisibleStatus|重置元素初始可见态为false,并重新对元素可见度发起检测,优先级低于disabled(通常用在对ShowMonitor内部元素变化时发起的重新监听)|() =\> void|