@nutui/nutui-react-taro 1.5.2 → 1.5.3-beta.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 (232) hide show
  1. package/CHANGELOG.md +0 -1
  2. package/dist/esm/ActionSheet.js +14 -90
  3. package/dist/esm/Address.js +21 -620
  4. package/dist/esm/Animate.js +7 -53
  5. package/dist/esm/AnimatingNumbers.js +7 -125
  6. package/dist/esm/Audio.js +19 -264
  7. package/dist/esm/Avatar.js +11 -130
  8. package/dist/esm/{AvatarContext-15733596.js → AvatarContext-c96afdcc.js} +3 -1
  9. package/dist/esm/AvatarGroup.js +11 -41
  10. package/dist/esm/BackTop.js +10 -138
  11. package/dist/esm/Badge.js +9 -71
  12. package/dist/esm/Barrage.js +8 -97
  13. package/dist/esm/Button.js +9 -108
  14. package/dist/esm/Calendar.js +20 -128
  15. package/dist/esm/CalendarItem.js +12 -674
  16. package/dist/esm/Card.js +11 -61
  17. package/dist/esm/Cascader.js +16 -671
  18. package/dist/esm/Cell.js +9 -101
  19. package/dist/esm/CellGroup.js +5 -2
  20. package/dist/esm/Checkbox.js +7 -5
  21. package/dist/esm/CheckboxGroup.js +8 -111
  22. package/dist/esm/CircleProgress.js +8 -114
  23. package/dist/esm/Col.js +7 -57
  24. package/dist/esm/Collapse.js +7 -97
  25. package/dist/esm/CollapseItem.js +8 -146
  26. package/dist/esm/ConfigProvider.js +8 -187
  27. package/dist/esm/CountDown.js +9 -247
  28. package/dist/esm/DatePicker.js +25 -309
  29. package/dist/esm/Dialog.js +17 -296
  30. package/dist/esm/Divider.js +7 -34
  31. package/dist/esm/Drag.js +7 -118
  32. package/dist/esm/Elevator.js +8 -234
  33. package/dist/esm/Ellipsis.js +10 -176
  34. package/dist/esm/Empty.js +8 -79
  35. package/dist/esm/FixedNav.js +14 -103
  36. package/dist/esm/Form.js +10 -215
  37. package/dist/esm/FormItem.js +10 -3
  38. package/dist/esm/Grid.js +11 -81
  39. package/dist/esm/GridItem.js +13 -123
  40. package/dist/esm/Icon.js +5 -2
  41. package/dist/esm/Image.js +11 -169
  42. package/dist/esm/ImagePreview.js +19 -225
  43. package/dist/esm/Indicator.js +7 -50
  44. package/dist/esm/Infiniteloading.js +14 -215
  45. package/dist/esm/Input.js +12 -362
  46. package/dist/esm/InputNumber.js +9 -275
  47. package/dist/esm/Layout.js +5 -13
  48. package/dist/esm/Menu.js +10 -153
  49. package/dist/esm/MenuItem.js +15 -175
  50. package/dist/esm/NavBar.js +9 -114
  51. package/dist/esm/NoticeBar.js +10 -568
  52. package/dist/esm/Notify.js +8 -234
  53. package/dist/esm/NumberKeyboard.js +17 -247
  54. package/dist/esm/Overlay.js +6 -2
  55. package/dist/esm/Pagination.js +9 -168
  56. package/dist/esm/Picker.js +22 -494
  57. package/dist/esm/Popover.js +12 -223
  58. package/dist/esm/Popup.js +13 -193
  59. package/dist/esm/Price.js +6 -84
  60. package/dist/esm/Progress.js +9 -122
  61. package/dist/esm/PullToRefresh.js +13 -276
  62. package/dist/esm/Radio.js +8 -4
  63. package/dist/esm/RadioGroup.js +7 -120
  64. package/dist/esm/Range.js +15 -406
  65. package/dist/esm/Rate.js +9 -121
  66. package/dist/esm/Row.js +7 -49
  67. package/dist/esm/SearchBar.js +12 -235
  68. package/dist/esm/ShortPassword.js +17 -191
  69. package/dist/esm/SideNavBar.js +19 -57
  70. package/dist/esm/SideNavBarItem.js +5 -24
  71. package/dist/esm/Signature.js +13 -153
  72. package/dist/esm/Skeleton.js +12 -98
  73. package/dist/esm/Step.js +10 -87
  74. package/dist/esm/Steps.js +8 -38
  75. package/dist/esm/Sticky.js +11 -190
  76. package/dist/esm/SubSideNavBar.js +6 -78
  77. package/dist/esm/Swipe.js +10 -230
  78. package/dist/esm/Swiper.js +9 -490
  79. package/dist/esm/SwiperItem.js +8 -36
  80. package/dist/esm/Switch.js +6 -71
  81. package/dist/esm/TabPane.js +5 -2
  82. package/dist/esm/Tabbar.js +6 -68
  83. package/dist/esm/TabbarItem.js +9 -78
  84. package/dist/esm/Table.js +12 -140
  85. package/dist/esm/Tabs.js +8 -5
  86. package/dist/esm/Tag.js +10 -110
  87. package/dist/esm/TextArea.js +9 -148
  88. package/dist/esm/TimeDetail.js +9 -67
  89. package/dist/esm/TimePannel.js +9 -29
  90. package/dist/esm/TimeSelect.js +19 -171
  91. package/dist/esm/Toast.js +7 -268
  92. package/dist/esm/TrendArrow.js +7 -99
  93. package/dist/esm/Uploader.js +17 -566
  94. package/dist/esm/{UserContext-101ad4a4.js → UserContext-0aac9a82.js} +3 -1
  95. package/dist/esm/{UserContext-2629d479.js → UserContext-e402e1a6.js} +3 -1
  96. package/dist/esm/{UserContext-b33bcf21.js → UserContext-e8176108.js} +3 -1
  97. package/dist/esm/Video.js +7 -90
  98. package/dist/esm/VirtualList.js +9 -313
  99. package/dist/esm/WaterMark.js +11 -111
  100. package/dist/esm/actionsheet.taro-e6a51446.js +53 -0
  101. package/dist/esm/address.taro-3a9b6396.js +461 -0
  102. package/dist/esm/animate.taro-fb7986d6.js +40 -0
  103. package/dist/esm/animatingnumbers.taro-03e5d61d.js +104 -0
  104. package/dist/esm/audio.taro-87ec8bf2.js +161 -0
  105. package/dist/esm/avatar.taro-3676f38f.js +103 -0
  106. package/dist/esm/avatargroup-f3574510.js +34 -0
  107. package/dist/esm/backtop.taro-66394a36.js +48 -0
  108. package/dist/esm/badge.taro-a4e59c11.js +52 -0
  109. package/dist/esm/barrage.taro-0495a1b2.js +94 -0
  110. package/dist/esm/{bem-3b438e61.js → bem-350c1702.js} +3 -6
  111. package/dist/esm/button.taro-9244d065.js +100 -0
  112. package/dist/esm/calendar.taro-670842ea.js +65 -0
  113. package/dist/esm/calendaritem.taro-2a603571.js +787 -0
  114. package/dist/esm/can-use-dom-3eeb5af4.js +6 -0
  115. package/dist/esm/card.taro-e4c76dad.js +33 -0
  116. package/dist/esm/cascader.taro-eb1fb011.js +438 -0
  117. package/dist/esm/cell.taro-a10a74d3.js +64 -0
  118. package/dist/esm/cellgroup.taro-abe501bc.js +25 -0
  119. package/dist/esm/checkbox.taro-6120e3e3.js +171 -0
  120. package/dist/esm/circleprogress.taro-79854448.js +109 -0
  121. package/dist/esm/col.taro-53eed3cc.js +41 -0
  122. package/dist/esm/collapse.taro-1a9e4ba2.js +83 -0
  123. package/dist/esm/collapseitem-4d0bc55d.js +83 -0
  124. package/dist/esm/configprovider-67d19d3a.js +19 -0
  125. package/dist/esm/configprovider.taro-8d71eb49.js +42 -0
  126. package/dist/esm/countdown.taro-5b17c607.js +226 -0
  127. package/dist/esm/datepicker.taro-6e9b4b8f.js +275 -0
  128. package/dist/esm/dialog.taro-a3267d29.js +118 -0
  129. package/dist/esm/divider.taro-26d1d8b4.js +35 -0
  130. package/dist/esm/drag.taro-79bb8744.js +110 -0
  131. package/dist/esm/elevator.taro-6019669e.js +178 -0
  132. package/dist/esm/ellipsis.taro-f15f26da.js +241 -0
  133. package/dist/esm/empty.taro-04ae4389.js +62 -0
  134. package/dist/esm/fixednav.taro-1f05acaf.js +53 -0
  135. package/dist/esm/form.taro-0c8e7a39.js +179 -0
  136. package/dist/esm/formitem.taro-190a3326.js +89 -0
  137. package/dist/esm/get-scroll-parent-b4a07e65.js +25 -0
  138. package/dist/esm/grid.taro-3503b82c.js +61 -0
  139. package/dist/esm/{grid.context-2ee27d95.js → grid.taro.context-c2bbfb4f.js} +4 -2
  140. package/dist/esm/griditem.taro-cdb3f119.js +98 -0
  141. package/dist/esm/icon-296a1bec.js +63 -0
  142. package/dist/esm/icon.taro-296a1bec.js +63 -0
  143. package/dist/esm/image.taro-142cf512.js +64 -0
  144. package/dist/esm/imagepreview.taro-c50bb0a3.js +167 -0
  145. package/dist/esm/index-5bcb0ff8.js +7 -0
  146. package/dist/esm/indicator.taro-cba8b010.js +37 -0
  147. package/dist/esm/infiniteloading.taro-183bccbf.js +144 -0
  148. package/dist/esm/input.taro-97af6c96.js +240 -0
  149. package/dist/esm/inputnumber.taro-91f65d17.js +130 -0
  150. package/dist/esm/layout.taro-9046d093.js +11 -0
  151. package/dist/esm/menu.taro-7e4038a1.js +99 -0
  152. package/dist/esm/menuitem.taro-96cc4f15.js +130 -0
  153. package/dist/esm/navbar.taro-777c4705.js +79 -0
  154. package/dist/esm/noticebar.taro-4a23cdee.js +448 -0
  155. package/dist/esm/notify.taro-e17c6f82.js +75 -0
  156. package/dist/esm/numberkeyboard.taro-1bc24744.js +159 -0
  157. package/dist/esm/nutui-react.es.js +119 -94
  158. package/dist/esm/offsetContext-c2a746fa.js +5 -0
  159. package/dist/esm/overlay.taro-21e87fb1.js +69 -0
  160. package/dist/esm/pagination.taro-715a173b.js +124 -0
  161. package/dist/esm/picker.taro-9ad1b7c5.js +473 -0
  162. package/dist/esm/popover.taro-ad5e76ea.js +156 -0
  163. package/dist/esm/popup.taro-01676bff.js +137 -0
  164. package/dist/esm/price.taro-776ed16e.js +83 -0
  165. package/dist/esm/progress.taro-f0ce38e9.js +90 -0
  166. package/dist/esm/pulltorefresh.taro-a294f656.js +181 -0
  167. package/dist/esm/radio.taro-a6eff96c.js +168 -0
  168. package/dist/esm/range.taro-d8fc7656.js +332 -0
  169. package/dist/esm/rate.taro-6cdf03bd.js +75 -0
  170. package/dist/esm/row.taro-f64d4a13.js +46 -0
  171. package/dist/esm/searchbar.taro-0c25927b.js +152 -0
  172. package/dist/esm/shortpassword.taro-9ee034f7.js +111 -0
  173. package/dist/esm/sidenavbar.taro-c307b35e.js +35 -0
  174. package/dist/esm/sidenavbaritem.taro-5a7965d0.js +12 -0
  175. package/dist/esm/signature.taro-ec4e713b.js +143 -0
  176. package/dist/esm/skeleton.taro-76faf63f.js +62 -0
  177. package/dist/esm/step.taro-b7903e8c.js +59 -0
  178. package/dist/esm/steps.taro-c82d2252.js +30 -0
  179. package/dist/esm/sticky.taro-218bda37.js +138 -0
  180. package/dist/esm/subsidenavbar.taro-69cb9752.js +63 -0
  181. package/dist/esm/supports-passive-c85ef996.js +18 -0
  182. package/dist/esm/swipe.taro-ea35f07f.js +177 -0
  183. package/dist/esm/swiper.taro-7a94e211.js +451 -0
  184. package/dist/esm/swiperitem-c9e3d0d5.js +29 -0
  185. package/dist/esm/switch.taro-34ca8228.js +50 -0
  186. package/dist/esm/tabbar.taro-9acfc2fa.js +59 -0
  187. package/dist/esm/tabbaritem.taro-bf517487.js +58 -0
  188. package/dist/esm/table.taro-91fc0c01.js +93 -0
  189. package/dist/esm/tabpane.taro-4ca340ef.js +23 -0
  190. package/dist/esm/tabs.taro-6a7524a4.js +140 -0
  191. package/dist/esm/tag.taro-23ba0834.js +92 -0
  192. package/dist/esm/textarea.taro-442e7350.js +94 -0
  193. package/dist/esm/timedetail.taro-5b2f2269.js +44 -0
  194. package/dist/esm/timepannel.taro-d6e40180.js +22 -0
  195. package/dist/esm/timeselect.taro-a07036f4.js +133 -0
  196. package/dist/esm/toast.taro-d6c14811.js +109 -0
  197. package/dist/esm/trendarrow.taro-b8c5ccd9.js +73 -0
  198. package/dist/esm/typings-b9828dba.js +9 -0
  199. package/dist/esm/uploader.taro-587e6bf3.js +492 -0
  200. package/dist/esm/useClientRect-1f8ed1fe.js +18 -0
  201. package/dist/esm/useTouch-db24bb5c.js +69 -0
  202. package/dist/esm/video-f1be8a91.js +67 -0
  203. package/dist/esm/virtuallist.taro-f0b0270d.js +214 -0
  204. package/dist/esm/watermark.taro-9ce2ae37.js +114 -0
  205. package/dist/esm/zh-CN-c779e6c1.js +131 -0
  206. package/dist/locales/base.js +1 -1
  207. package/dist/locales/en-US.js +1 -1
  208. package/dist/locales/id-ID.js +1 -1
  209. package/dist/locales/zh-CN.js +1 -1
  210. package/dist/locales/zh-TW.js +1 -1
  211. package/dist/locales/zh-UG.js +1 -1
  212. package/dist/nutui.react.mjs +13030 -14863
  213. package/dist/nutui.react.umd.js +13029 -14864
  214. package/dist/style.mjs +1 -1
  215. package/dist/types/index.d.ts +176 -183
  216. package/package.json +1 -1
  217. package/dist/esm/cellgroup-fcc72767.js +0 -34
  218. package/dist/esm/checkbox-44e13cd0.js +0 -137
  219. package/dist/esm/date-c7aad4c0.js +0 -97
  220. package/dist/esm/formitem-8a73a5fb.js +0 -157
  221. package/dist/esm/get-scroll-parent-5f85dee8.js +0 -24
  222. package/dist/esm/icon-4ef1581c.js +0 -70
  223. package/dist/esm/index-030b7245.js +0 -11
  224. package/dist/esm/offsetContext-3ab00d40.js +0 -16
  225. package/dist/esm/overlay-de6c79d5.js +0 -83
  226. package/dist/esm/radio-9f141e6b.js +0 -118
  227. package/dist/esm/render-bbebb760.js +0 -79
  228. package/dist/esm/tabpane-01075e6c.js +0 -29
  229. package/dist/esm/tabs-e1b4e4b1.js +0 -181
  230. package/dist/esm/typings-f27b58f4.js +0 -8
  231. package/dist/esm/useClientRect-56bb675b.js +0 -39
  232. package/dist/esm/useTouch-cf73a407.js +0 -99
@@ -0,0 +1,171 @@
1
+ import React__default, { createContext, useImperativeHandle, useState, useEffect, useCallback, useContext } from 'react';
2
+ import { I as Icon } from './icon.taro-296a1bec.js';
3
+ import { c as cn } from './bem-350c1702.js';
4
+ import { C as ComponentDefaults } from './typings-b9828dba.js';
5
+
6
+ const CheckboxGroupContext = createContext(null);
7
+
8
+ const defaultProps$1 = {
9
+ disabled: false,
10
+ checkedValue: [],
11
+ max: undefined,
12
+ textPosition: 'right',
13
+ direction: 'vertical',
14
+ onChange: (value) => { },
15
+ options: [],
16
+ };
17
+ const CheckboxGroup = React__default.forwardRef((props, ref) => {
18
+ const { children } = { ...defaultProps$1, ...props };
19
+ const b = cn('checkboxgroup');
20
+ const { className, disabled, onChange, checkedValue, max, textPosition, direction, options, ...rest } = props;
21
+ useImperativeHandle(ref, () => ({
22
+ toggleAll(state) {
23
+ if (state === false) {
24
+ setInnerValue([]);
25
+ }
26
+ else {
27
+ const childrenLabel = [];
28
+ React__default.Children.map(children, (child) => {
29
+ const childProps = child.props;
30
+ childrenLabel.push(childProps.label || child.children);
31
+ });
32
+ setInnerValue(childrenLabel);
33
+ }
34
+ },
35
+ toggleReverse() {
36
+ const childrenLabel = [];
37
+ React__default.Children.map(children, (child) => {
38
+ const childProps = child.props;
39
+ childrenLabel.push(childProps.label || child.children);
40
+ });
41
+ const reverse = childrenLabel.filter((c) => innerValue?.findIndex((v) => v === c) === -1);
42
+ setInnerValue(reverse);
43
+ },
44
+ }));
45
+ const [innerValue, setInnerValue] = useState(checkedValue || []);
46
+ useEffect(() => {
47
+ setInnerValue(checkedValue || []);
48
+ }, [checkedValue]);
49
+ const renderOptions = useCallback(() => {
50
+ return options?.map(({ label, value, disabled, onChange, ...rest }) => {
51
+ return (React__default.createElement(Checkbox, { key: value?.toString(), children: label, label: value, ...rest }));
52
+ });
53
+ }, [options, max]);
54
+ return (React__default.createElement(CheckboxGroupContext.Provider, { value: {
55
+ textPosition: textPosition || 'left',
56
+ disabled,
57
+ max,
58
+ checkedValue: innerValue || [],
59
+ check: (value) => {
60
+ const combined = [...innerValue, value];
61
+ setInnerValue(combined);
62
+ onChange && onChange(combined);
63
+ },
64
+ uncheck: (value) => {
65
+ const reduced = innerValue.filter((item) => item !== value);
66
+ setInnerValue(reduced);
67
+ onChange && onChange(reduced);
68
+ },
69
+ } },
70
+ React__default.createElement("div", { className: `${b()} nut-checkboxgroup--${props.direction} ${className || ''}`, ...rest }, options?.length ? renderOptions() : children)));
71
+ });
72
+ CheckboxGroup.defaultProps = defaultProps$1;
73
+ CheckboxGroup.displayName = 'NutCheckboxGroup';
74
+
75
+ const defaultProps = {
76
+ ...ComponentDefaults,
77
+ checked: false,
78
+ disabled: false,
79
+ textPosition: 'right',
80
+ iconSize: 18,
81
+ iconName: 'check-normal',
82
+ iconActiveName: 'checked',
83
+ iconClassPrefix: 'nut-icon',
84
+ iconFontClassName: 'nutui-iconfont',
85
+ iconIndeterminateName: 'check-disabled',
86
+ onChange: (state, label) => { },
87
+ };
88
+ const Checkbox = (props) => {
89
+ const { children } = {
90
+ ...defaultProps,
91
+ ...props,
92
+ };
93
+ const b = cn('checkbox');
94
+ const { iconName, iconSize, label, className, iconActiveName, checked, disabled, onChange, indeterminate, iconClassPrefix, iconFontClassName, iconIndeterminateName, ...others } = props;
95
+ // eslint-disable-next-line prefer-const
96
+ let { textPosition, ...rest } = others;
97
+ const ctx = useContext(CheckboxGroupContext);
98
+ let [innerChecked, setInnerChecked] = useState(checked);
99
+ // eslint-disable-next-line prefer-const
100
+ let [innerDisabled, setDisabled] = useState(disabled);
101
+ const [_indeterminate, setIndeterminate] = useState(indeterminate);
102
+ useEffect(() => {
103
+ !ctx && setInnerChecked(checked);
104
+ setDisabled(disabled);
105
+ setIndeterminate(indeterminate);
106
+ }, [disabled, checked, indeterminate]);
107
+ if (ctx) {
108
+ if (ctx.textPosition !== undefined) {
109
+ textPosition = ctx.textPosition;
110
+ }
111
+ innerDisabled = ctx.disabled;
112
+ innerChecked = ctx.checkedValue.includes(label);
113
+ setInnerChecked = (checked) => {
114
+ if (ctx.disabled)
115
+ return;
116
+ if (checked)
117
+ ctx.check(label);
118
+ if (!checked)
119
+ ctx.uncheck(label);
120
+ };
121
+ }
122
+ const getIconName = () => {
123
+ if (!innerChecked) {
124
+ return iconName;
125
+ }
126
+ if (_indeterminate) {
127
+ return iconIndeterminateName;
128
+ }
129
+ return iconActiveName;
130
+ };
131
+ const renderIcon = () => {
132
+ return (React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, name: getIconName(), size: iconSize, className: color() }));
133
+ };
134
+ const color = () => {
135
+ if (innerDisabled) {
136
+ return 'nut-checkbox__icon--disable';
137
+ }
138
+ if (innerChecked) {
139
+ if (_indeterminate) {
140
+ return 'nut-checkbox__icon--indeterminate';
141
+ }
142
+ return 'nut-checkbox__icon';
143
+ }
144
+ return 'nut-checkbox__icon--unchecked';
145
+ };
146
+ const renderLabel = () => {
147
+ return (React__default.createElement("span", { className: `${b('label', { disabled: innerDisabled })} ` }, children || label));
148
+ };
149
+ const handleClick = () => {
150
+ // 禁用的时候直接返回
151
+ if (disabled)
152
+ return;
153
+ // 先转换状态
154
+ const latestChecked = !innerChecked;
155
+ // 判断是不是有 context 和 max,有的话需要判断是不是超过最大限制
156
+ if (ctx && ctx.max !== undefined) {
157
+ if (latestChecked && ctx.checkedValue.length >= ctx.max)
158
+ return;
159
+ }
160
+ onChange && onChange(latestChecked, label || children);
161
+ setInnerChecked(latestChecked);
162
+ };
163
+ return (React__default.createElement("div", { className: `${b({ reverse: textPosition === 'left' })} ${className || ''}`, ...rest, onClick: handleClick },
164
+ renderIcon(),
165
+ renderLabel()));
166
+ };
167
+ Checkbox.defaultProps = defaultProps;
168
+ Checkbox.displayName = 'NutCheckBox';
169
+ Checkbox.Group = CheckboxGroup;
170
+
171
+ export { Checkbox as C, CheckboxGroup as a };
@@ -0,0 +1,109 @@
1
+ import React__default, { useState, useEffect } from 'react';
2
+ import classNames from 'classnames';
3
+ import { a as isObject } from './index-5bcb0ff8.js';
4
+ import { c as cn } from './bem-350c1702.js';
5
+
6
+ const defaultProps = {
7
+ strokeWidth: 5,
8
+ radius: 50,
9
+ strokeLinecap: 'round',
10
+ circleColor: '#fa2c19',
11
+ pathColor: '#e5e9f2',
12
+ clockwise: true,
13
+ };
14
+ const CircleProgress = (props) => {
15
+ const { children, progress, className, radius, pathColor, clockwise, circleColor, strokeWidth, style, strokeLinecap, ...restProps } = {
16
+ ...defaultProps,
17
+ ...props,
18
+ };
19
+ const [oldValue, setOldValue] = useState(progress);
20
+ const b = cn('circleprogress');
21
+ const classes = classNames(className, b(''));
22
+ const refRandomId = Math.random().toString(36).slice(-8);
23
+ const styles = {
24
+ height: `${Number(radius) * 2}px`,
25
+ width: `${Number(radius) * 2}px`,
26
+ ...style,
27
+ };
28
+ useEffect(() => {
29
+ let rafId;
30
+ const startTime = Date.now();
31
+ const startRate = Number(oldValue); // 30
32
+ const endRate = Number(progress); // 40
33
+ const duration = Math.abs(((startRate - endRate) * 1000) / +100); // 100
34
+ const animate = () => {
35
+ const now = Date.now();
36
+ const progress = Math.min((now - startTime) / duration, 1);
37
+ const rate = progress * (endRate - startRate) + startRate;
38
+ setOldValue(Math.min(Math.max(+rate, 0), 100));
39
+ if (endRate > startRate ? rate < endRate : rate > endRate) {
40
+ rafId = window.requestAnimationFrame(animate);
41
+ }
42
+ };
43
+ if (rafId) {
44
+ cancelAnimationFrame(rafId);
45
+ }
46
+ rafId = window.requestAnimationFrame(animate);
47
+ }, [progress]);
48
+ const cancelAnimationFrame = function (id) {
49
+ clearTimeout(id);
50
+ };
51
+ const stop = () => {
52
+ if (!isObject(circleColor)) {
53
+ return [];
54
+ }
55
+ const color = circleColor;
56
+ const colorArr = Object.keys(color).sort((a, b) => parseFloat(a) - parseFloat(b));
57
+ const stopArr = [];
58
+ colorArr.map((item) => {
59
+ const obj = {
60
+ key: '',
61
+ value: '',
62
+ };
63
+ obj.key = item;
64
+ obj.value = color[item];
65
+ stopArr.push(obj);
66
+ });
67
+ return stopArr;
68
+ };
69
+ const transColor = (color) => {
70
+ return color && color.replace('#', '%23');
71
+ };
72
+ const format = (progress) => Math.min(Math.max(+progress, 0), 100);
73
+ const circleStyle = () => {
74
+ const stopArr = stop();
75
+ const stopDom = [];
76
+ if (stopArr) {
77
+ stopArr.map((item) => {
78
+ let obj = '';
79
+ obj = `%3Cstop offset='${item.key}' stop-color='${transColor(item.value)}'/%3E`;
80
+ stopDom.push(obj);
81
+ });
82
+ }
83
+ const perimeter = 283;
84
+ const progress = +oldValue;
85
+ const offset = (perimeter * Number(format(parseFloat(progress.toFixed(1))))) / 100;
86
+ const isWise = props.clockwise ? 1 : 0;
87
+ const color = isObject(circleColor)
88
+ ? `url(%23${refRandomId})`
89
+ : transColor(circleColor);
90
+ const d = `M 50 50 m 0 -45 a 45 45 0 1 ${isWise} 0 90 a 45 45 0 1, ${isWise} 0 -90`;
91
+ const pa = `%3Cdefs%3E%3ClinearGradient id='${refRandomId}' x1='100%25' y1='0%25' x2='0%25' y2='0%25'%3E${stopDom}%3C/linearGradient%3E%3C/defs%3E`;
92
+ const path = `%3Cpath d='${d}' stroke-width='${strokeWidth}' stroke='${transColor(props.pathColor)}' fill='none'/%3E`;
93
+ const path1 = `%3Cpath d='${d}' stroke-width='${strokeWidth}' stroke-dasharray='${offset},${perimeter}' stroke-linecap='round' stroke='${transColor(color)}' fill='none'/%3E`;
94
+ return {
95
+ background: `url("data:image/svg+xml,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E${pa}${path}${path1}%3C/svg%3E")`,
96
+ width: '100%',
97
+ height: '100%',
98
+ };
99
+ };
100
+ return (React__default.createElement("div", { className: classes, style: styles, ...restProps },
101
+ React__default.createElement("div", { style: circleStyle() }),
102
+ React__default.createElement("div", { className: "nut-circleprogress-text" }, children || React__default.createElement("div", null,
103
+ progress,
104
+ "%"))));
105
+ };
106
+ CircleProgress.defaultProps = defaultProps;
107
+ CircleProgress.displayName = 'NutCircleProgress';
108
+
109
+ export { CircleProgress as C };
@@ -0,0 +1,41 @@
1
+ import React__default, { useState, useContext, useEffect } from 'react';
2
+ import classNames from 'classnames';
3
+ import { D as DataContext } from './UserContext-0aac9a82.js';
4
+
5
+ const defaultProps = {
6
+ span: '24',
7
+ offset: '0',
8
+ gutter: '0',
9
+ };
10
+ const Col = (props) => {
11
+ const { className, style = {}, span, offset, children, onClick, } = {
12
+ ...defaultProps,
13
+ ...props,
14
+ };
15
+ const [colName, setColName] = useState('');
16
+ const [colStyle, setColStyle] = useState({});
17
+ const { gutter } = useContext(DataContext);
18
+ const classs = () => {
19
+ // 定义col的class类
20
+ const prefixCls = 'nut-col';
21
+ return `${prefixCls} ${prefixCls}-${span} ${gutter ? `${prefixCls}-gutter` : ''} ${prefixCls}-${offset}`;
22
+ };
23
+ const getStyle = () => {
24
+ // 定义col的style类
25
+ const style = {};
26
+ style.paddingLeft = `${gutter / 2}px`;
27
+ style.paddingRight = `${gutter / 2}px`;
28
+ return style;
29
+ };
30
+ useEffect(() => {
31
+ setColName(classs);
32
+ setColStyle(getStyle);
33
+ }, [span, offset, gutter]);
34
+ return (React__default.createElement("div", { className: classNames(colName, className), style: { ...style, ...colStyle }, onClick: (e) => {
35
+ onClick && onClick(e, 'col');
36
+ } }, children));
37
+ };
38
+ Col.defaultProps = defaultProps;
39
+ Col.displayName = 'NutCol';
40
+
41
+ export { Col as C };
@@ -0,0 +1,83 @@
1
+ import React__default, { memo, useState, useEffect } from 'react';
2
+ import classNames from 'classnames';
3
+ import { c as cn } from './bem-350c1702.js';
4
+
5
+ const defaultProps = {
6
+ activeName: ['0'],
7
+ accordion: false,
8
+ icon: '',
9
+ iconSize: '16px',
10
+ iconColor: '',
11
+ rotate: 180,
12
+ };
13
+ function areEqual(prevProps, nextProps) {
14
+ return (prevProps.children === nextProps.children &&
15
+ JSON.stringify(prevProps.activeName) ===
16
+ JSON.stringify(nextProps.activeName));
17
+ }
18
+ const Collapse = memo((props) => {
19
+ const { className, style, children, activeName, accordion, icon, rotate, iconSize, iconColor, onChange, } = {
20
+ ...defaultProps,
21
+ ...props,
22
+ };
23
+ const childrenDom = React__default.Children.toArray(children);
24
+ const [defaultOpenIndex, setDefaultOpenIndex] = useState([]);
25
+ const handleActiveName = () => {
26
+ let activeArr = [];
27
+ if (!Array.isArray(activeName)) {
28
+ activeArr.push(activeName.toString());
29
+ }
30
+ else {
31
+ // 数组
32
+ if (accordion && activeName.length > 1) {
33
+ console.warn('手风琴模式不支持传递多个打开页签');
34
+ }
35
+ const activeNameStr = activeName.map((item) => {
36
+ return item.toString();
37
+ });
38
+ activeArr = [...activeNameStr];
39
+ }
40
+ return activeArr;
41
+ };
42
+ const colBem = cn('collapse');
43
+ useEffect(() => {
44
+ const activeArr = handleActiveName();
45
+ setDefaultOpenIndex(activeArr);
46
+ }, [activeName]);
47
+ const onToggle = (isOpen, name) => {
48
+ let newOpenIndex = [...defaultOpenIndex];
49
+ if (isOpen) {
50
+ // 当前状态为true,则变为false,闭合
51
+ const removeIndex = newOpenIndex.findIndex((value) => {
52
+ return value === name;
53
+ });
54
+ newOpenIndex.splice(removeIndex, 1);
55
+ }
56
+ else {
57
+ // 当前状态为false,变为true,展开
58
+ // eslint-disable-next-line no-lonely-if
59
+ if (accordion) {
60
+ newOpenIndex = [name];
61
+ }
62
+ else {
63
+ newOpenIndex.push(name);
64
+ }
65
+ }
66
+ setDefaultOpenIndex(newOpenIndex);
67
+ onChange && onChange(!isOpen, name);
68
+ };
69
+ return (React__default.createElement("div", { className: classNames(colBem(), className), style: style }, childrenDom.map((item) => {
70
+ return React__default.cloneElement(item, {
71
+ isOpen: defaultOpenIndex.includes(item.props.name),
72
+ onToggle: (isOpen, name) => onToggle(isOpen, name),
73
+ icon,
74
+ rotate,
75
+ iconSize,
76
+ iconColor,
77
+ });
78
+ })));
79
+ }, areEqual);
80
+ Collapse.defaultProps = defaultProps;
81
+ Collapse.displayName = 'NutCollapse';
82
+
83
+ export { Collapse as C };
@@ -0,0 +1,83 @@
1
+ import React__default, { useState, useCallback, useEffect } from 'react';
2
+ import { c as cn } from './bem-350c1702.js';
3
+ import { I as Icon } from './icon-296a1bec.js';
4
+ import { C as ComponentDefaults } from './typings-b9828dba.js';
5
+
6
+ const defaultProps = {
7
+ ...ComponentDefaults,
8
+ title: '',
9
+ name: '',
10
+ isOpen: false,
11
+ icon: '',
12
+ iconSize: '',
13
+ iconColor: '',
14
+ disabled: false,
15
+ rotate: 180,
16
+ subTitle: '',
17
+ titleIcon: '',
18
+ titleIconColor: '',
19
+ titleIconPosition: '',
20
+ titleIconSize: '',
21
+ childnull: true,
22
+ };
23
+ const CollapseItem = (props) => {
24
+ const { children, title, isOpen, onToggle, name, disabled, icon, rotate, subTitle, titleIcon, titleIconColor, titleIconPosition, titleIconSize, iconSize, iconColor, childnull, iconClassPrefix, iconFontClassName, ...rest } = {
25
+ ...defaultProps,
26
+ ...props,
27
+ };
28
+ const [domHeight, setDomHeight] = useState(-1); // 保存content的高度
29
+ const [currHeight, setCurrHeight] = useState('auto'); // 设置content的高度
30
+ const [update, setUpdate] = useState(false);
31
+ const [iconStyle, setIconStyle] = useState({
32
+ transform: 'translateY(-50%)',
33
+ });
34
+ const colBem = cn('collapse-item');
35
+ const measuredRef = useCallback((node) => {
36
+ if (node !== null) {
37
+ setDomHeight(node.getBoundingClientRect().height);
38
+ }
39
+ }, [update]);
40
+ useEffect(() => {
41
+ // 一开始content都有高度,在这里根据isOpen,改变其高度
42
+ setTimeout(() => {
43
+ if (domHeight !== -1) {
44
+ isOpen ? setCurrHeight(`${domHeight}px`) : setCurrHeight('0px');
45
+ }
46
+ const newIconStyle = isOpen
47
+ ? { transform: `translateY(-50%) rotate(${rotate}deg)` }
48
+ : { transform: 'translateY(-50%)' };
49
+ setIconStyle(newIconStyle);
50
+ }, 10);
51
+ }, [isOpen, domHeight, rotate]);
52
+ useEffect(() => {
53
+ if (!isOpen) {
54
+ setCurrHeight('0px');
55
+ }
56
+ else {
57
+ setCurrHeight('auto');
58
+ }
59
+ setUpdate(!update);
60
+ }, [children, isOpen]);
61
+ return (React__default.createElement("div", { className: colBem(), ...rest },
62
+ React__default.createElement("div", { className: colBem('header', { disabled }), onClick: () => {
63
+ if (disabled)
64
+ return;
65
+ onToggle && onToggle(isOpen, name);
66
+ } },
67
+ React__default.createElement("div", { className: colBem('title') },
68
+ titleIcon && titleIconPosition === 'left' && (React__default.createElement("b", { className: colBem('title-icon-left') },
69
+ React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, name: titleIcon, size: titleIconSize, color: disabled ? '#C2C2C2' : titleIconColor }))),
70
+ title,
71
+ titleIcon && titleIconPosition === 'right' && (React__default.createElement("b", { className: colBem('title-icon-right') },
72
+ React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, name: titleIcon, size: titleIconSize, color: disabled ? '#C2C2C2' : titleIconColor })))),
73
+ React__default.createElement("div", { className: colBem('sub-title') }, subTitle),
74
+ React__default.createElement("div", { className: colBem('icon-box') },
75
+ React__default.createElement("div", { className: colBem('icon'), style: iconStyle },
76
+ React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, name: icon, size: iconSize, color: disabled ? '#C2C2C2' : iconColor })))),
77
+ childnull && (React__default.createElement("div", { className: colBem('content'), style: { height: currHeight }, ref: measuredRef },
78
+ React__default.createElement("div", { className: colBem('content-text') }, children)))));
79
+ };
80
+ CollapseItem.defaultProps = defaultProps;
81
+ CollapseItem.displayName = 'NutCollapseItem';
82
+
83
+ export { CollapseItem as C };
@@ -0,0 +1,19 @@
1
+ import { createContext, useContext } from 'react';
2
+ import 'lodash.kebabcase';
3
+ import { z as zhCN } from './zh-CN-c779e6c1.js';
4
+
5
+ const defaultConfigRef = {
6
+ current: {
7
+ locale: zhCN,
8
+ },
9
+ };
10
+ const getDefaultConfig = () => {
11
+ return defaultConfigRef.current;
12
+ };
13
+ // 创建一个 Context 对象
14
+ const ConfigContext = createContext(null);
15
+ const useConfig = () => {
16
+ return useContext(ConfigContext) ?? getDefaultConfig();
17
+ };
18
+
19
+ export { useConfig as u };
@@ -0,0 +1,42 @@
1
+ import React__default, { createContext, useContext, useMemo } from 'react';
2
+ import kebabCase from 'lodash.kebabcase';
3
+ import { z as zhCN } from './zh-CN-c779e6c1.js';
4
+
5
+ const defaultProps = {
6
+ locale: zhCN,
7
+ };
8
+ const defaultConfigRef = {
9
+ current: {
10
+ locale: zhCN,
11
+ },
12
+ };
13
+ const getDefaultConfig = () => {
14
+ return defaultConfigRef.current;
15
+ };
16
+ // 创建一个 Context 对象
17
+ const ConfigContext = createContext(null);
18
+ const useConfig = () => {
19
+ return useContext(ConfigContext) ?? getDefaultConfig();
20
+ };
21
+ function convertThemeVarsToCSSVars(themeVars) {
22
+ const cssVars = {};
23
+ Object.keys(themeVars).forEach((key) => {
24
+ cssVars[`--${kebabCase(key)}`] = themeVars[key];
25
+ });
26
+ return cssVars;
27
+ }
28
+ const ConfigProvider = (props) => {
29
+ const { children, ...config } = { ...defaultProps, ...props };
30
+ const parentConfig = useConfig();
31
+ const theme = config.theme || {};
32
+ const style = useMemo(() => convertThemeVarsToCSSVars(theme), [theme]);
33
+ return (React__default.createElement(ConfigContext.Provider, { value: {
34
+ ...parentConfig,
35
+ ...config,
36
+ } },
37
+ React__default.createElement("div", { style: style }, children)));
38
+ };
39
+ ConfigProvider.defaultProps = defaultProps;
40
+ ConfigProvider.displayName = 'NutConfigProvider';
41
+
42
+ export { ConfigProvider as C, useConfig as u };