@nutui/nutui-react-taro 1.5.2 → 1.5.3-beta.1

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 +7 -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-a5553aa5.js +437 -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-477ad357.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-0b399b30.js +178 -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-0073eeaa.js +472 -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 +13028 -14863
  213. package/dist/nutui.react.umd.js +13027 -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,6 @@
1
+ const canUseDom = !!(typeof window !== 'undefined' &&
2
+ typeof document !== 'undefined' &&
3
+ window.document &&
4
+ window.document.createElement);
5
+
6
+ export { canUseDom as c };
@@ -0,0 +1,33 @@
1
+ import React__default from 'react';
2
+ import classNames from 'classnames';
3
+ import { P as Price } from './price.taro-776ed16e.js';
4
+ import { T as Tag } from './tag.taro-23ba0834.js';
5
+ import { c as cn } from './bem-350c1702.js';
6
+
7
+ const defaultProps = {};
8
+ const Card = (props) => {
9
+ const { className, style, imgUrl, title, price, vipPrice, shopDesc, delivery, shopName, shopTagTpl, originTpl, prolistTpl, footerTpl, ...rest } = {
10
+ ...defaultProps,
11
+ ...props,
12
+ };
13
+ const b = cn('card');
14
+ return (React__default.createElement("div", { className: classNames(b(), className), style: style, ...rest },
15
+ React__default.createElement("div", { className: b('left') },
16
+ React__default.createElement("img", { src: imgUrl, alt: "" })),
17
+ React__default.createElement("div", { className: b('right') },
18
+ React__default.createElement("div", { className: b('right__title') }, title),
19
+ prolistTpl,
20
+ React__default.createElement("div", { className: b('right__price') },
21
+ React__default.createElement(Price, { price: price }),
22
+ originTpl || (React__default.createElement(Price, { className: b('right__price__origin'), price: vipPrice }))),
23
+ React__default.createElement("div", { className: b('right__other') }, shopTagTpl || (React__default.createElement(React__default.Fragment, null,
24
+ React__default.createElement(Tag, { type: "danger" }, shopDesc),
25
+ React__default.createElement(Tag, { plain: true }, delivery)))),
26
+ React__default.createElement("div", { className: b('right__shop') },
27
+ React__default.createElement("div", { className: b('right__shop__name') }, shopName),
28
+ footerTpl))));
29
+ };
30
+ Card.defaultProps = defaultProps;
31
+ Card.displayName = 'NutCard';
32
+
33
+ export { Card as C };
@@ -0,0 +1,437 @@
1
+ import React__default, { useState, useEffect } from 'react';
2
+ import classNames from 'classnames';
3
+ import { P as Popup } from './popup.taro-01676bff.js';
4
+ import { T as Tabs } from './tabs.taro-6a7524a4.js';
5
+ import { T as TabPane } from './tabpane.taro-4ca340ef.js';
6
+ import { I as Icon } from './icon.taro-296a1bec.js';
7
+ import { c as cn } from './bem-350c1702.js';
8
+
9
+ const defaultProps$1 = {
10
+ data: {
11
+ text: '',
12
+ value: '',
13
+ paneKey: '',
14
+ disabled: false,
15
+ loading: false,
16
+ children: [],
17
+ },
18
+ activeColor: '#fa2c19',
19
+ checked: false,
20
+ checkedIcon: 'checklist',
21
+ chooseItem: () => { },
22
+ };
23
+ const InternalCascaderItem = (props, ref) => {
24
+ const { data, checked, checkedIcon, chooseItem, activeColor } = {
25
+ ...defaultProps$1,
26
+ ...props,
27
+ };
28
+ const b = cn('cascader-item');
29
+ const classes = classNames({
30
+ active: checked,
31
+ disabled: data.disabled,
32
+ }, b(''));
33
+ const classesTitle = classNames({
34
+ [`${b('')}__title`]: true,
35
+ });
36
+ return (React__default.createElement("div", { style: { color: checked ? activeColor : '' }, className: classes, onClick: () => {
37
+ chooseItem(data);
38
+ } },
39
+ React__default.createElement("div", { className: classesTitle }, data.text),
40
+ data.loading ? (React__default.createElement(Icon, { color: "#969799", className: "nut-cascader-item__icon-loading", name: "loading" })) : (React__default.createElement(Icon, { className: `${checked ? b('icon-check') : ''}`, name: checked ? checkedIcon : '' }))));
41
+ };
42
+ const CascaderItem = React__default.forwardRef(InternalCascaderItem);
43
+ CascaderItem.defaultProps = defaultProps$1;
44
+ CascaderItem.displayName = 'NutCascaderItem';
45
+
46
+ const formatTree = (tree, parent, config) => tree.map((node) => {
47
+ const { value: valueKey = 'value', text: textKey = 'text', children: childrenKey = 'children', } = config;
48
+ const { [valueKey]: value, [textKey]: text, [childrenKey]: children, ...others } = node;
49
+ const newNode = {
50
+ loading: false,
51
+ ...others,
52
+ level: parent ? ((parent && parent.level) || 0) + 1 : 0,
53
+ value,
54
+ text,
55
+ children,
56
+ _parent: parent,
57
+ };
58
+ if (newNode.children && newNode.children.length) {
59
+ newNode.children = formatTree(newNode.children, newNode, config);
60
+ }
61
+ return newNode;
62
+ });
63
+ const eachTree = (tree, cb) => {
64
+ let i = 0;
65
+ let node;
66
+ while ((node = tree[i++])) {
67
+ if (cb(node) === true) {
68
+ break;
69
+ }
70
+ if (node.children && node.children.length) {
71
+ eachTree(node.children, cb);
72
+ }
73
+ }
74
+ };
75
+ const defaultConvertConfig = {
76
+ topId: null,
77
+ idKey: 'id',
78
+ pidKey: 'pid',
79
+ sortKey: '',
80
+ };
81
+ const convertListToOptions = (list, options) => {
82
+ const mergedOptions = {
83
+ ...defaultConvertConfig,
84
+ ...(options || {}),
85
+ };
86
+ const { topId, idKey, pidKey, sortKey } = mergedOptions;
87
+ let result = [];
88
+ let map = {};
89
+ list.forEach((node) => {
90
+ node = { ...node };
91
+ const { [idKey]: id, [pidKey]: pid } = node;
92
+ const children = (map[pid] = map[pid] || []);
93
+ // const children = map[pid] || []
94
+ if (!result.length && pid === topId) {
95
+ result = children;
96
+ }
97
+ children.push(node);
98
+ node.children = map[id] || (map[id] = []);
99
+ });
100
+ if (sortKey) {
101
+ Object.keys(map).forEach((i) => {
102
+ if (map[i].length > 1) {
103
+ map[i].sort((a, b) => a[sortKey] - b[sortKey]);
104
+ }
105
+ });
106
+ }
107
+ map = null;
108
+ return result;
109
+ };
110
+
111
+ class Tree {
112
+ nodes;
113
+ config;
114
+ constructor(nodes, config) {
115
+ this.config = {
116
+ value: 'value',
117
+ text: 'text',
118
+ children: 'children',
119
+ ...(config || {}),
120
+ };
121
+ this.nodes = formatTree(nodes, null, this.config);
122
+ }
123
+ updateChildren(nodes, parent) {
124
+ if (!parent) {
125
+ this.nodes = formatTree(nodes, null, this.config);
126
+ }
127
+ else {
128
+ parent.children = formatTree(nodes, parent, this.config);
129
+ }
130
+ }
131
+ // for test
132
+ getNodeByValue(value) {
133
+ let foundNode;
134
+ eachTree(this.nodes, (node) => {
135
+ if (node.value === value) {
136
+ foundNode = node;
137
+ return true;
138
+ }
139
+ return null;
140
+ });
141
+ return foundNode;
142
+ }
143
+ getPathNodesByValue(value) {
144
+ if (!value.length) {
145
+ return [];
146
+ }
147
+ const pathNodes = [];
148
+ let currentNodes = this.nodes;
149
+ while (currentNodes && currentNodes.length) {
150
+ const foundNode = currentNodes.find((node) => node.value === value[node.level]);
151
+ if (!foundNode) {
152
+ break;
153
+ }
154
+ pathNodes.push(foundNode);
155
+ currentNodes = foundNode.children;
156
+ }
157
+ return pathNodes;
158
+ }
159
+ isLeaf = (node, lazy) => {
160
+ const { leaf, children } = node;
161
+ const hasChildren = Array.isArray(children) && Boolean(children.length);
162
+ return leaf || (!hasChildren && !lazy);
163
+ };
164
+ hasChildren = (node, lazy) => {
165
+ const isLeaf = this.isLeaf(node, lazy);
166
+ if (isLeaf) {
167
+ return false;
168
+ }
169
+ const { children } = node;
170
+ return Array.isArray(children) && Boolean(children.length);
171
+ };
172
+ }
173
+
174
+ const defaultProps = {
175
+ className: '',
176
+ style: {},
177
+ activeColor: '#fa2c19',
178
+ checkedIcon: 'checklist',
179
+ tabsColor: '',
180
+ poppable: true,
181
+ visible: false,
182
+ options: [],
183
+ value: [],
184
+ title: '',
185
+ textKey: 'text',
186
+ valueKey: 'value',
187
+ childrenKey: 'children',
188
+ convertConfig: {},
189
+ closeable: false,
190
+ closeIconPosition: 'top-right',
191
+ closeIcon: 'close',
192
+ lazy: false,
193
+ lazyLoad: () => { },
194
+ onClose: () => { },
195
+ onChange: () => { },
196
+ onPathChange: () => { },
197
+ ...Popup.defaultProps,
198
+ };
199
+ const InternalCascader = (props, ref) => {
200
+ const { className, style, tabsColor, poppable, visible, options, value, title, textKey, valueKey, childrenKey, convertConfig, closeable, closeIconPosition, closeIcon, lazy, lazyLoad, onClose, onChange, onPathChange, } = { ...defaultProps, ...props };
201
+ const [tabvalue, setTabvalue] = useState('c1');
202
+ const [optionsData, setOptionsData] = useState([]);
203
+ const isLazy = () => state.configs.lazy && Boolean(state.configs.lazyLoad);
204
+ const [state] = useState({
205
+ optionsData: [],
206
+ panes: [
207
+ {
208
+ nodes: [],
209
+ selectedNode: [],
210
+ paneKey: '',
211
+ },
212
+ ],
213
+ innerValue: value,
214
+ tree: new Tree([], {}),
215
+ tabsCursor: 0,
216
+ initLoading: false,
217
+ currentProcessNode: [],
218
+ configs: {
219
+ lazy,
220
+ lazyLoad,
221
+ valueKey,
222
+ textKey,
223
+ childrenKey,
224
+ convertConfig,
225
+ },
226
+ lazyLoadMap: new Map(),
227
+ });
228
+ const b = cn('cascader');
229
+ const classes = classNames(b(''));
230
+ const classesPane = classNames({
231
+ [`${b('')}-pane`]: true,
232
+ });
233
+ useEffect(() => {
234
+ initData();
235
+ }, []);
236
+ useEffect(() => {
237
+ if (value !== state.innerValue) {
238
+ state.innerValue = value;
239
+ }
240
+ }, [value]);
241
+ useEffect(() => {
242
+ initData();
243
+ }, [options]);
244
+ const initData = async () => {
245
+ // 初始化开始处理数据
246
+ state.lazyLoadMap.clear();
247
+ if (convertConfig && Object.keys(convertConfig).length > 0) {
248
+ state.optionsData = convertListToOptions(options, convertConfig);
249
+ }
250
+ else {
251
+ state.optionsData = options;
252
+ }
253
+ state.tree = new Tree(state.optionsData, {
254
+ value: state.configs.valueKey,
255
+ text: state.configs.textKey,
256
+ children: state.configs.childrenKey,
257
+ });
258
+ if (isLazy() && !state.tree.nodes.length) {
259
+ await invokeLazyLoad({
260
+ root: true,
261
+ loading: true,
262
+ text: '',
263
+ value: '',
264
+ });
265
+ }
266
+ state.panes = [
267
+ {
268
+ nodes: state.tree.nodes,
269
+ selectedNode: null,
270
+ paneKey: 'c1',
271
+ },
272
+ ];
273
+ syncValue();
274
+ setOptionsData(state.panes);
275
+ };
276
+ // 处理有默认值时的数据
277
+ const syncValue = async () => {
278
+ const currentValue = state.innerValue;
279
+ if (currentValue === undefined || !state.tree.nodes.length) {
280
+ return;
281
+ }
282
+ if (currentValue.length === 0) {
283
+ state.tabsCursor = 0;
284
+ return;
285
+ }
286
+ let needToSync = currentValue;
287
+ if (isLazy() && Array.isArray(currentValue) && currentValue.length) {
288
+ needToSync = [];
289
+ const parent = state.tree.nodes.find((node) => node.value === currentValue[0]);
290
+ if (parent) {
291
+ needToSync = [parent.value];
292
+ state.initLoading = true;
293
+ const last = await currentValue
294
+ .slice(1)
295
+ .reduce(async (p, value) => {
296
+ const parent = await p;
297
+ await invokeLazyLoad(parent);
298
+ const node = parent?.children?.find((item) => item.value === value);
299
+ if (node) {
300
+ needToSync.push(value);
301
+ }
302
+ return Promise.resolve(node);
303
+ }, Promise.resolve(parent));
304
+ await invokeLazyLoad(last);
305
+ state.initLoading = false;
306
+ }
307
+ }
308
+ if (needToSync.length && currentValue === value) {
309
+ const pathNodes = state.tree.getPathNodesByValue(needToSync);
310
+ pathNodes.forEach((node, index) => {
311
+ state.tabsCursor = index;
312
+ // 当有默认值时,不触发 chooseItem 里的 emit 事件
313
+ chooseItem(node, true);
314
+ });
315
+ }
316
+ };
317
+ const invokeLazyLoad = async (node) => {
318
+ if (!node) {
319
+ return;
320
+ }
321
+ if (!state.configs.lazyLoad) {
322
+ node.leaf = true;
323
+ return;
324
+ }
325
+ if (state.tree.isLeaf(node, isLazy()) ||
326
+ state.tree.hasChildren(node, isLazy())) {
327
+ return;
328
+ }
329
+ node.loading = true;
330
+ const parent = node.root ? null : node;
331
+ let lazyLoadPromise = state.lazyLoadMap.get(node);
332
+ if (!lazyLoadPromise) {
333
+ lazyLoadPromise = new Promise((resolve) => {
334
+ // 外部必须resolve
335
+ state.configs.lazyLoad?.(node, resolve);
336
+ });
337
+ state.lazyLoadMap.set(node, lazyLoadPromise);
338
+ }
339
+ const nodes = await lazyLoadPromise;
340
+ if (Array.isArray(nodes) && nodes.length > 0) {
341
+ state.tree.updateChildren(nodes, parent);
342
+ }
343
+ else {
344
+ // 如果加载完成后没有提供子节点,作为叶子节点处理
345
+ node.leaf = true;
346
+ }
347
+ node.loading = false;
348
+ state.lazyLoadMap.delete(node);
349
+ };
350
+ const close = () => {
351
+ onClose && onClose();
352
+ };
353
+ const closePopup = () => {
354
+ close();
355
+ };
356
+ /* type: 是否是静默模式,是的话不触发事件
357
+ tabsCursor: tab的索引 */
358
+ const chooseItem = async (node, type) => {
359
+ if ((!type && node.disabled) || !state.panes[state.tabsCursor]) {
360
+ return;
361
+ }
362
+ // 如果没有子节点
363
+ if (state.tree.isLeaf(node, isLazy())) {
364
+ node.leaf = true;
365
+ state.panes[state.tabsCursor].selectedNode = node;
366
+ state.panes = state.panes.slice(0, node.level + 1);
367
+ if (!type) {
368
+ const pathNodes = state.panes.map((item) => item.selectedNode);
369
+ const optionParams = pathNodes.map((item) => item.value);
370
+ onChange(optionParams, pathNodes);
371
+ onPathChange(optionParams, pathNodes);
372
+ }
373
+ setOptionsData(state.panes);
374
+ close();
375
+ return;
376
+ }
377
+ // 如果有子节点,滑到下一个
378
+ if (state.tree.hasChildren(node, isLazy())) {
379
+ const level = node.level + 1;
380
+ state.panes[state.tabsCursor].selectedNode = node;
381
+ state.panes = state.panes.slice(0, level);
382
+ state.tabsCursor = level;
383
+ state.panes.push({
384
+ nodes: node.children || [],
385
+ selectedNode: null,
386
+ paneKey: `c${state.tabsCursor + 1}`,
387
+ });
388
+ setTabvalue(`c${state.tabsCursor + 1}`);
389
+ setOptionsData(state.panes);
390
+ if (!type) {
391
+ const pathNodes = state.panes.map((item) => item.selectedNode);
392
+ const optionParams = pathNodes.map((item) => item?.value);
393
+ onPathChange(optionParams, pathNodes);
394
+ }
395
+ return;
396
+ }
397
+ state.currentProcessNode = node;
398
+ if (node.loading) {
399
+ return;
400
+ }
401
+ await invokeLazyLoad(node);
402
+ if (state.currentProcessNode === node) {
403
+ state.panes[state.tabsCursor].selectedNode = node;
404
+ chooseItem(node, type);
405
+ }
406
+ setOptionsData(state.panes);
407
+ };
408
+ const renderItem = () => {
409
+ return (React__default.createElement("div", { className: `${classes} ${className}`, style: style },
410
+ poppable && React__default.createElement("div", { className: b('title') }, title),
411
+ React__default.createElement(Tabs, { value: tabvalue, titleNode: () => {
412
+ return optionsData.map((pane, index) => (React__default.createElement("div", { onClick: () => {
413
+ setTabvalue(pane.paneKey);
414
+ state.tabsCursor = index;
415
+ }, className: `nut-tabs__titles-item ${tabvalue === pane.paneKey ? 'active' : ''}`, key: pane.paneKey },
416
+ React__default.createElement("span", { className: "nut-tabs__titles-item__text" },
417
+ !state.initLoading &&
418
+ state.panes.length &&
419
+ pane?.selectedNode?.text,
420
+ !state.initLoading &&
421
+ state.panes.length &&
422
+ !pane?.selectedNode?.text &&
423
+ '请选择',
424
+ !(!state.initLoading && state.panes.length) && 'Loading...'),
425
+ React__default.createElement("span", { className: "nut-tabs__titles-item__line", style: { background: tabsColor } }))));
426
+ } }, !state.initLoading && state.panes.length ? (optionsData.map((pane) => (React__default.createElement(TabPane, { key: pane.paneKey, paneKey: pane.paneKey },
427
+ React__default.createElement("div", { className: classesPane }, pane.nodes &&
428
+ pane.nodes.map((node, index) => (React__default.createElement(CascaderItem, { key: index, ...props, data: node, checked: pane.selectedNode?.value === node.value, chooseItem: (node) => chooseItem(node, false) })))))))) : (React__default.createElement(TabPane, null,
429
+ React__default.createElement("div", { className: classesPane }))))));
430
+ };
431
+ return (React__default.createElement(React__default.Fragment, null, poppable ? (React__default.createElement(Popup, { popClass: "cascadar-popup", visible: visible, position: "bottom", round: true, closeable: closeable, closeIconPosition: closeIconPosition, closeIcon: closeIcon, onClickOverlay: closePopup, onClickCloseIcon: closePopup }, renderItem())) : (renderItem())));
432
+ };
433
+ const Cascader = React__default.forwardRef(InternalCascader);
434
+ Cascader.defaultProps = defaultProps;
435
+ Cascader.displayName = 'NutCascader';
436
+
437
+ export { Cascader as C };
@@ -0,0 +1,64 @@
1
+ import React__default from 'react';
2
+ import { redirectTo, navigateTo } from '@tarojs/taro';
3
+ import { c as cn } from './bem-350c1702.js';
4
+ import { I as Icon } from './icon.taro-296a1bec.js';
5
+ import { C as ComponentDefaults } from './typings-b9828dba.js';
6
+
7
+ const defaultProps = {
8
+ ...ComponentDefaults,
9
+ title: null,
10
+ subTitle: null,
11
+ desc: '',
12
+ descTextAlign: 'right',
13
+ isLink: false,
14
+ icon: '',
15
+ roundRadius: '6px',
16
+ url: '',
17
+ to: '',
18
+ replace: false,
19
+ center: false,
20
+ size: '',
21
+ className: '',
22
+ iconSlot: null,
23
+ linkSlot: null,
24
+ onClick: (event) => { },
25
+ };
26
+ const Cell = (props) => {
27
+ const { children, onClick, title, subTitle, desc, descTextAlign, isLink, icon, roundRadius, url, to, replace, center, size, className, iconSlot, linkSlot, iconClassPrefix, iconFontClassName, ...rest } = {
28
+ ...defaultProps,
29
+ ...props,
30
+ };
31
+ const b = cn('cell');
32
+ const handleClick = (event) => {
33
+ onClick(event);
34
+ const link = to || url;
35
+ if (link) {
36
+ replace ? redirectTo({ url: link }) : navigateTo({ url: link });
37
+ }
38
+ };
39
+ const baseStyle = {
40
+ borderRadius: Number.isNaN(Number(roundRadius))
41
+ ? String(roundRadius)
42
+ : `${roundRadius}px`,
43
+ };
44
+ const styles = title || subTitle || icon
45
+ ? { textAlign: descTextAlign }
46
+ : {
47
+ textAlign: descTextAlign,
48
+ flex: 1,
49
+ };
50
+ return (React__default.createElement("div", { className: `${b({ clickable: !!(isLink || to), center, large: size === 'large' }, [className])} `, onClick: (event) => handleClick(event), style: baseStyle, ...rest }, children || (React__default.createElement(React__default.Fragment, null,
51
+ icon || iconSlot ? (React__default.createElement("div", { className: b('icon') }, iconSlot ||
52
+ (icon ? (React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, name: icon, className: "icon" })) : null))) : null,
53
+ title || subTitle ? (React__default.createElement("div", { className: `${b('title')}` },
54
+ title ? React__default.createElement("div", { className: b('maintitle') }, title) : null,
55
+ subTitle ? (React__default.createElement("div", { className: b('subtitle') }, subTitle)) : null)) : null,
56
+ desc ? (React__default.createElement("div", { className: b('value', {
57
+ alone: !title && !subTitle,
58
+ }), style: styles }, desc)) : null,
59
+ !linkSlot && (isLink || to) ? (React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, name: "right", className: b('link') })) : (linkSlot)))));
60
+ };
61
+ Cell.defaultProps = defaultProps;
62
+ Cell.displayName = 'NutCell';
63
+
64
+ export { Cell as C };
@@ -0,0 +1,25 @@
1
+ import React__default from 'react';
2
+ import { c as cn } from './bem-350c1702.js';
3
+
4
+ const defaultProps = {
5
+ title: '',
6
+ desc: '',
7
+ className: '',
8
+ titleSlot: null,
9
+ descSlot: null,
10
+ };
11
+ const CellGroup = (props) => {
12
+ const { children, className, title, desc, titleSlot, descSlot } = {
13
+ ...defaultProps,
14
+ ...props,
15
+ };
16
+ const b = cn('cell-group');
17
+ return (React__default.createElement("div", { className: b(null, [className]) },
18
+ titleSlot || (React__default.createElement(React__default.Fragment, null, title ? React__default.createElement("div", { className: b('title') }, title) : null)),
19
+ descSlot || React__default.createElement(React__default.Fragment, null, desc ? React__default.createElement("div", { className: b('desc') }, desc) : null),
20
+ React__default.createElement("div", { className: b('wrap') }, children)));
21
+ };
22
+ CellGroup.defaultProps = defaultProps;
23
+ CellGroup.displayName = 'NutCellGroup';
24
+
25
+ export { CellGroup as C };