@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.
- package/CHANGELOG.md +0 -1
- package/dist/esm/ActionSheet.js +14 -90
- package/dist/esm/Address.js +21 -620
- package/dist/esm/Animate.js +7 -53
- package/dist/esm/AnimatingNumbers.js +7 -125
- package/dist/esm/Audio.js +19 -264
- package/dist/esm/Avatar.js +11 -130
- package/dist/esm/{AvatarContext-15733596.js → AvatarContext-c96afdcc.js} +3 -1
- package/dist/esm/AvatarGroup.js +11 -41
- package/dist/esm/BackTop.js +10 -138
- package/dist/esm/Badge.js +9 -71
- package/dist/esm/Barrage.js +8 -97
- package/dist/esm/Button.js +9 -108
- package/dist/esm/Calendar.js +20 -128
- package/dist/esm/CalendarItem.js +12 -674
- package/dist/esm/Card.js +11 -61
- package/dist/esm/Cascader.js +16 -671
- package/dist/esm/Cell.js +9 -101
- package/dist/esm/CellGroup.js +5 -2
- package/dist/esm/Checkbox.js +7 -5
- package/dist/esm/CheckboxGroup.js +8 -111
- package/dist/esm/CircleProgress.js +8 -114
- package/dist/esm/Col.js +7 -57
- package/dist/esm/Collapse.js +7 -97
- package/dist/esm/CollapseItem.js +8 -146
- package/dist/esm/ConfigProvider.js +8 -187
- package/dist/esm/CountDown.js +9 -247
- package/dist/esm/DatePicker.js +25 -309
- package/dist/esm/Dialog.js +17 -296
- package/dist/esm/Divider.js +7 -34
- package/dist/esm/Drag.js +7 -118
- package/dist/esm/Elevator.js +8 -234
- package/dist/esm/Ellipsis.js +10 -176
- package/dist/esm/Empty.js +8 -79
- package/dist/esm/FixedNav.js +14 -103
- package/dist/esm/Form.js +10 -215
- package/dist/esm/FormItem.js +10 -3
- package/dist/esm/Grid.js +11 -81
- package/dist/esm/GridItem.js +13 -123
- package/dist/esm/Icon.js +5 -2
- package/dist/esm/Image.js +11 -169
- package/dist/esm/ImagePreview.js +19 -225
- package/dist/esm/Indicator.js +7 -50
- package/dist/esm/Infiniteloading.js +14 -215
- package/dist/esm/Input.js +12 -362
- package/dist/esm/InputNumber.js +9 -275
- package/dist/esm/Layout.js +5 -13
- package/dist/esm/Menu.js +10 -153
- package/dist/esm/MenuItem.js +15 -175
- package/dist/esm/NavBar.js +9 -114
- package/dist/esm/NoticeBar.js +10 -568
- package/dist/esm/Notify.js +8 -234
- package/dist/esm/NumberKeyboard.js +17 -247
- package/dist/esm/Overlay.js +6 -2
- package/dist/esm/Pagination.js +9 -168
- package/dist/esm/Picker.js +22 -494
- package/dist/esm/Popover.js +12 -223
- package/dist/esm/Popup.js +13 -193
- package/dist/esm/Price.js +6 -84
- package/dist/esm/Progress.js +9 -122
- package/dist/esm/PullToRefresh.js +13 -276
- package/dist/esm/Radio.js +8 -4
- package/dist/esm/RadioGroup.js +7 -120
- package/dist/esm/Range.js +15 -406
- package/dist/esm/Rate.js +9 -121
- package/dist/esm/Row.js +7 -49
- package/dist/esm/SearchBar.js +12 -235
- package/dist/esm/ShortPassword.js +17 -191
- package/dist/esm/SideNavBar.js +19 -57
- package/dist/esm/SideNavBarItem.js +5 -24
- package/dist/esm/Signature.js +13 -153
- package/dist/esm/Skeleton.js +12 -98
- package/dist/esm/Step.js +10 -87
- package/dist/esm/Steps.js +8 -38
- package/dist/esm/Sticky.js +11 -190
- package/dist/esm/SubSideNavBar.js +6 -78
- package/dist/esm/Swipe.js +10 -230
- package/dist/esm/Swiper.js +9 -490
- package/dist/esm/SwiperItem.js +8 -36
- package/dist/esm/Switch.js +6 -71
- package/dist/esm/TabPane.js +5 -2
- package/dist/esm/Tabbar.js +6 -68
- package/dist/esm/TabbarItem.js +9 -78
- package/dist/esm/Table.js +12 -140
- package/dist/esm/Tabs.js +8 -5
- package/dist/esm/Tag.js +10 -110
- package/dist/esm/TextArea.js +9 -148
- package/dist/esm/TimeDetail.js +9 -67
- package/dist/esm/TimePannel.js +9 -29
- package/dist/esm/TimeSelect.js +19 -171
- package/dist/esm/Toast.js +7 -268
- package/dist/esm/TrendArrow.js +7 -99
- package/dist/esm/Uploader.js +17 -566
- package/dist/esm/{UserContext-101ad4a4.js → UserContext-0aac9a82.js} +3 -1
- package/dist/esm/{UserContext-2629d479.js → UserContext-e402e1a6.js} +3 -1
- package/dist/esm/{UserContext-b33bcf21.js → UserContext-e8176108.js} +3 -1
- package/dist/esm/Video.js +7 -90
- package/dist/esm/VirtualList.js +9 -313
- package/dist/esm/WaterMark.js +11 -111
- package/dist/esm/actionsheet.taro-e6a51446.js +53 -0
- package/dist/esm/address.taro-3a9b6396.js +461 -0
- package/dist/esm/animate.taro-fb7986d6.js +40 -0
- package/dist/esm/animatingnumbers.taro-03e5d61d.js +104 -0
- package/dist/esm/audio.taro-87ec8bf2.js +161 -0
- package/dist/esm/avatar.taro-3676f38f.js +103 -0
- package/dist/esm/avatargroup-f3574510.js +34 -0
- package/dist/esm/backtop.taro-66394a36.js +48 -0
- package/dist/esm/badge.taro-a4e59c11.js +52 -0
- package/dist/esm/barrage.taro-0495a1b2.js +94 -0
- package/dist/esm/{bem-3b438e61.js → bem-350c1702.js} +3 -6
- package/dist/esm/button.taro-9244d065.js +100 -0
- package/dist/esm/calendar.taro-670842ea.js +65 -0
- package/dist/esm/calendaritem.taro-2a603571.js +787 -0
- package/dist/esm/can-use-dom-3eeb5af4.js +6 -0
- package/dist/esm/card.taro-e4c76dad.js +33 -0
- package/dist/esm/cascader.taro-eb1fb011.js +438 -0
- package/dist/esm/cell.taro-a10a74d3.js +64 -0
- package/dist/esm/cellgroup.taro-abe501bc.js +25 -0
- package/dist/esm/checkbox.taro-6120e3e3.js +171 -0
- package/dist/esm/circleprogress.taro-79854448.js +109 -0
- package/dist/esm/col.taro-53eed3cc.js +41 -0
- package/dist/esm/collapse.taro-1a9e4ba2.js +83 -0
- package/dist/esm/collapseitem-4d0bc55d.js +83 -0
- package/dist/esm/configprovider-67d19d3a.js +19 -0
- package/dist/esm/configprovider.taro-8d71eb49.js +42 -0
- package/dist/esm/countdown.taro-5b17c607.js +226 -0
- package/dist/esm/datepicker.taro-6e9b4b8f.js +275 -0
- package/dist/esm/dialog.taro-a3267d29.js +118 -0
- package/dist/esm/divider.taro-26d1d8b4.js +35 -0
- package/dist/esm/drag.taro-79bb8744.js +110 -0
- package/dist/esm/elevator.taro-6019669e.js +178 -0
- package/dist/esm/ellipsis.taro-f15f26da.js +241 -0
- package/dist/esm/empty.taro-04ae4389.js +62 -0
- package/dist/esm/fixednav.taro-1f05acaf.js +53 -0
- package/dist/esm/form.taro-0c8e7a39.js +179 -0
- package/dist/esm/formitem.taro-190a3326.js +89 -0
- package/dist/esm/get-scroll-parent-b4a07e65.js +25 -0
- package/dist/esm/grid.taro-3503b82c.js +61 -0
- package/dist/esm/{grid.context-2ee27d95.js → grid.taro.context-c2bbfb4f.js} +4 -2
- package/dist/esm/griditem.taro-cdb3f119.js +98 -0
- package/dist/esm/icon-296a1bec.js +63 -0
- package/dist/esm/icon.taro-296a1bec.js +63 -0
- package/dist/esm/image.taro-142cf512.js +64 -0
- package/dist/esm/imagepreview.taro-c50bb0a3.js +167 -0
- package/dist/esm/index-5bcb0ff8.js +7 -0
- package/dist/esm/indicator.taro-cba8b010.js +37 -0
- package/dist/esm/infiniteloading.taro-183bccbf.js +144 -0
- package/dist/esm/input.taro-97af6c96.js +240 -0
- package/dist/esm/inputnumber.taro-91f65d17.js +130 -0
- package/dist/esm/layout.taro-9046d093.js +11 -0
- package/dist/esm/menu.taro-7e4038a1.js +99 -0
- package/dist/esm/menuitem.taro-96cc4f15.js +130 -0
- package/dist/esm/navbar.taro-777c4705.js +79 -0
- package/dist/esm/noticebar.taro-4a23cdee.js +448 -0
- package/dist/esm/notify.taro-e17c6f82.js +75 -0
- package/dist/esm/numberkeyboard.taro-1bc24744.js +159 -0
- package/dist/esm/nutui-react.es.js +119 -94
- package/dist/esm/offsetContext-c2a746fa.js +5 -0
- package/dist/esm/overlay.taro-21e87fb1.js +69 -0
- package/dist/esm/pagination.taro-715a173b.js +124 -0
- package/dist/esm/picker.taro-9ad1b7c5.js +473 -0
- package/dist/esm/popover.taro-ad5e76ea.js +156 -0
- package/dist/esm/popup.taro-01676bff.js +137 -0
- package/dist/esm/price.taro-776ed16e.js +83 -0
- package/dist/esm/progress.taro-f0ce38e9.js +90 -0
- package/dist/esm/pulltorefresh.taro-a294f656.js +181 -0
- package/dist/esm/radio.taro-a6eff96c.js +168 -0
- package/dist/esm/range.taro-d8fc7656.js +332 -0
- package/dist/esm/rate.taro-6cdf03bd.js +75 -0
- package/dist/esm/row.taro-f64d4a13.js +46 -0
- package/dist/esm/searchbar.taro-0c25927b.js +152 -0
- package/dist/esm/shortpassword.taro-9ee034f7.js +111 -0
- package/dist/esm/sidenavbar.taro-c307b35e.js +35 -0
- package/dist/esm/sidenavbaritem.taro-5a7965d0.js +12 -0
- package/dist/esm/signature.taro-ec4e713b.js +143 -0
- package/dist/esm/skeleton.taro-76faf63f.js +62 -0
- package/dist/esm/step.taro-b7903e8c.js +59 -0
- package/dist/esm/steps.taro-c82d2252.js +30 -0
- package/dist/esm/sticky.taro-218bda37.js +138 -0
- package/dist/esm/subsidenavbar.taro-69cb9752.js +63 -0
- package/dist/esm/supports-passive-c85ef996.js +18 -0
- package/dist/esm/swipe.taro-ea35f07f.js +177 -0
- package/dist/esm/swiper.taro-7a94e211.js +451 -0
- package/dist/esm/swiperitem-c9e3d0d5.js +29 -0
- package/dist/esm/switch.taro-34ca8228.js +50 -0
- package/dist/esm/tabbar.taro-9acfc2fa.js +59 -0
- package/dist/esm/tabbaritem.taro-bf517487.js +58 -0
- package/dist/esm/table.taro-91fc0c01.js +93 -0
- package/dist/esm/tabpane.taro-4ca340ef.js +23 -0
- package/dist/esm/tabs.taro-6a7524a4.js +140 -0
- package/dist/esm/tag.taro-23ba0834.js +92 -0
- package/dist/esm/textarea.taro-442e7350.js +94 -0
- package/dist/esm/timedetail.taro-5b2f2269.js +44 -0
- package/dist/esm/timepannel.taro-d6e40180.js +22 -0
- package/dist/esm/timeselect.taro-a07036f4.js +133 -0
- package/dist/esm/toast.taro-d6c14811.js +109 -0
- package/dist/esm/trendarrow.taro-b8c5ccd9.js +73 -0
- package/dist/esm/typings-b9828dba.js +9 -0
- package/dist/esm/uploader.taro-587e6bf3.js +492 -0
- package/dist/esm/useClientRect-1f8ed1fe.js +18 -0
- package/dist/esm/useTouch-db24bb5c.js +69 -0
- package/dist/esm/video-f1be8a91.js +67 -0
- package/dist/esm/virtuallist.taro-f0b0270d.js +214 -0
- package/dist/esm/watermark.taro-9ce2ae37.js +114 -0
- package/dist/esm/zh-CN-c779e6c1.js +131 -0
- package/dist/locales/base.js +1 -1
- package/dist/locales/en-US.js +1 -1
- package/dist/locales/id-ID.js +1 -1
- package/dist/locales/zh-CN.js +1 -1
- package/dist/locales/zh-TW.js +1 -1
- package/dist/locales/zh-UG.js +1 -1
- package/dist/nutui.react.mjs +13030 -14863
- package/dist/nutui.react.umd.js +13029 -14864
- package/dist/style.mjs +1 -1
- package/dist/types/index.d.ts +176 -183
- package/package.json +1 -1
- package/dist/esm/cellgroup-fcc72767.js +0 -34
- package/dist/esm/checkbox-44e13cd0.js +0 -137
- package/dist/esm/date-c7aad4c0.js +0 -97
- package/dist/esm/formitem-8a73a5fb.js +0 -157
- package/dist/esm/get-scroll-parent-5f85dee8.js +0 -24
- package/dist/esm/icon-4ef1581c.js +0 -70
- package/dist/esm/index-030b7245.js +0 -11
- package/dist/esm/offsetContext-3ab00d40.js +0 -16
- package/dist/esm/overlay-de6c79d5.js +0 -83
- package/dist/esm/radio-9f141e6b.js +0 -118
- package/dist/esm/render-bbebb760.js +0 -79
- package/dist/esm/tabpane-01075e6c.js +0 -29
- package/dist/esm/tabs-e1b4e4b1.js +0 -181
- package/dist/esm/typings-f27b58f4.js +0 -8
- package/dist/esm/useClientRect-56bb675b.js +0 -39
- package/dist/esm/useTouch-cf73a407.js +0 -99
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import React__default, { useRef, useState, useEffect } from 'react';
|
|
2
|
+
import { c as cn } from './bem-350c1702.js';
|
|
3
|
+
import { P as Popup } from './popup.taro-01676bff.js';
|
|
4
|
+
import { I as Icon } from './icon.taro-296a1bec.js';
|
|
5
|
+
import { u as useConfig } from './configprovider.taro-8d71eb49.js';
|
|
6
|
+
import { C as ComponentDefaults } from './typings-b9828dba.js';
|
|
7
|
+
|
|
8
|
+
const defaultProps = {
|
|
9
|
+
...ComponentDefaults,
|
|
10
|
+
title: '',
|
|
11
|
+
desc: '',
|
|
12
|
+
tips: '',
|
|
13
|
+
visible: false,
|
|
14
|
+
modelValue: '',
|
|
15
|
+
errorMsg: '',
|
|
16
|
+
noButton: true,
|
|
17
|
+
closeOnClickOverlay: true,
|
|
18
|
+
length: 6,
|
|
19
|
+
className: '',
|
|
20
|
+
autoFocus: false,
|
|
21
|
+
onChange: (value) => { },
|
|
22
|
+
onOk: (value) => { },
|
|
23
|
+
onCancel: () => { },
|
|
24
|
+
onClose: () => { },
|
|
25
|
+
onTips: () => { },
|
|
26
|
+
onComplete: (value) => { },
|
|
27
|
+
};
|
|
28
|
+
const ShortPassword = (props) => {
|
|
29
|
+
const { locale } = useConfig();
|
|
30
|
+
const { title, desc, tips, visible, modelValue, errorMsg, noButton, closeOnClickOverlay, length, style, className, onChange, onOk, onTips, onCancel, onClose, onComplete, iconClassPrefix, iconFontClassName, autoFocus, ...reset } = props;
|
|
31
|
+
const b = cn('shortpassword');
|
|
32
|
+
const textInput = useRef(null);
|
|
33
|
+
const range = (val) => {
|
|
34
|
+
return Math.min(Math.max(4, val), 6);
|
|
35
|
+
};
|
|
36
|
+
const [innerVisible, setInnerVisible] = useState(visible);
|
|
37
|
+
const [comLen, setComLen] = useState(range(Number(length)));
|
|
38
|
+
const [inputValue, setInputValue] = useState('');
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
setInnerVisible(visible);
|
|
41
|
+
}, [visible]);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (typeof modelValue !== 'undefined') {
|
|
44
|
+
setInputValue(modelValue);
|
|
45
|
+
}
|
|
46
|
+
}, [modelValue]);
|
|
47
|
+
const changeValue = (e) => {
|
|
48
|
+
let inputValue = e.target.value;
|
|
49
|
+
if (String(inputValue).length > comLen) {
|
|
50
|
+
inputValue = inputValue.slice(0, comLen);
|
|
51
|
+
}
|
|
52
|
+
setInputValue(inputValue);
|
|
53
|
+
if (String(inputValue).length === comLen) {
|
|
54
|
+
onComplete && onComplete(inputValue);
|
|
55
|
+
}
|
|
56
|
+
onChange && onChange(inputValue);
|
|
57
|
+
};
|
|
58
|
+
const systemStyle = () => {
|
|
59
|
+
const u = navigator.userAgent;
|
|
60
|
+
const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; // g
|
|
61
|
+
const isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); // ios终端
|
|
62
|
+
let style = {};
|
|
63
|
+
if (isIOS) {
|
|
64
|
+
style = {
|
|
65
|
+
paddingRight: '1200px',
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (isAndroid) {
|
|
69
|
+
style = {
|
|
70
|
+
opacity: 0,
|
|
71
|
+
zIndex: 10,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return style;
|
|
75
|
+
};
|
|
76
|
+
const focus = () => {
|
|
77
|
+
if (textInput.current) {
|
|
78
|
+
textInput.current.focus();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const sure = () => {
|
|
82
|
+
onOk && onOk(inputValue);
|
|
83
|
+
};
|
|
84
|
+
return (React__default.createElement("div", null,
|
|
85
|
+
React__default.createElement(Popup, { style: {
|
|
86
|
+
padding: '32px 24px 28px 24px',
|
|
87
|
+
borderRadius: '12px',
|
|
88
|
+
textAlign: 'center',
|
|
89
|
+
}, visible: innerVisible, closeable: true, "close-on-click-overlay": closeOnClickOverlay, onClickOverlay: onClose, onClickCloseIcon: onClose },
|
|
90
|
+
React__default.createElement("div", { className: `${b()} ${className}`, style: { ...style }, ...reset },
|
|
91
|
+
React__default.createElement("div", { className: b('title') }, title || locale.shortpassword.title),
|
|
92
|
+
React__default.createElement("div", { className: b('subtitle') }, desc || locale.shortpassword.desc),
|
|
93
|
+
React__default.createElement("div", { className: b('input') },
|
|
94
|
+
React__default.createElement("input", { ref: textInput, className: b('input-real'), type: "number", style: systemStyle(), maxLength: 6, value: inputValue, autoFocus: autoFocus, onChange: (e) => changeValue(e) }),
|
|
95
|
+
React__default.createElement("div", { className: b('input-site') }),
|
|
96
|
+
React__default.createElement("div", { className: b('input-fake'), onClick: () => focus() }, [...new Array(comLen).keys()].map((item, index) => {
|
|
97
|
+
return (React__default.createElement("div", { className: b('input-fake__li'), key: index }, String(inputValue).length > index ? (React__default.createElement("div", { className: b('input-fake__li__icon') })) : null));
|
|
98
|
+
}))),
|
|
99
|
+
React__default.createElement("div", { className: b('message') },
|
|
100
|
+
React__default.createElement("div", { className: b('message__error') }, errorMsg),
|
|
101
|
+
tips || locale.shortpassword.tips ? (React__default.createElement("div", { className: b('message__forget') },
|
|
102
|
+
React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, className: "icon", size: "11px", name: "tips" }),
|
|
103
|
+
React__default.createElement("div", { onClick: onTips }, tips || locale.shortpassword.tips))) : null),
|
|
104
|
+
!noButton ? (React__default.createElement("div", { className: b('footer') },
|
|
105
|
+
React__default.createElement("div", { className: b('footer__cancel'), onClick: onCancel }, locale.cancel),
|
|
106
|
+
React__default.createElement("div", { className: b('footer__sure'), onClick: () => sure() }, locale.confirm))) : null))));
|
|
107
|
+
};
|
|
108
|
+
ShortPassword.defaultProps = defaultProps;
|
|
109
|
+
ShortPassword.displayName = 'NutShortPassword';
|
|
110
|
+
|
|
111
|
+
export { ShortPassword as S };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React__default, { useState } from 'react';
|
|
2
|
+
import { u as useConfig } from './configprovider.taro-8d71eb49.js';
|
|
3
|
+
import { P as Popup } from './popup.taro-01676bff.js';
|
|
4
|
+
import { O as OffsetContext } from './offsetContext-c2a746fa.js';
|
|
5
|
+
|
|
6
|
+
const defaultProps = {
|
|
7
|
+
showhead: false,
|
|
8
|
+
position: 'left',
|
|
9
|
+
width: '80%',
|
|
10
|
+
};
|
|
11
|
+
const SideNavBar = (props) => {
|
|
12
|
+
useConfig();
|
|
13
|
+
const { title, visible, width, position, children, className, showhead, onClose, ...rest } = {
|
|
14
|
+
...defaultProps,
|
|
15
|
+
...props,
|
|
16
|
+
};
|
|
17
|
+
const offset = props.offset ? Number(props.offset) : 20;
|
|
18
|
+
const [sidenavbarShow, setSidenavbarShow] = useState(true);
|
|
19
|
+
const handleClick = () => {
|
|
20
|
+
setSidenavbarShow(!sidenavbarShow);
|
|
21
|
+
};
|
|
22
|
+
return (React__default.createElement(Popup, { visible: visible, style: { width, height: '100%' }, position: position, onClose: onClose },
|
|
23
|
+
React__default.createElement("div", { className: className ? `${className} nut-sidenavbar` : 'nut-sidenavbar', ...rest },
|
|
24
|
+
React__default.createElement("div", { className: "nut-sidenavbar__content" },
|
|
25
|
+
React__default.createElement("div", { className: `nut-sidenavbar__list ${sidenavbarShow ? 'nutShow' : 'nutHide'}`, onClick: handleClick },
|
|
26
|
+
React__default.createElement("div", { className: "nut-sidenavbar__title border-bt ", style: { paddingLeft: `${offset}px` } },
|
|
27
|
+
title,
|
|
28
|
+
React__default.createElement("i", { className: `arrow-icon ${sidenavbarShow ? 'arrow-up' : 'arrow-down'}` })),
|
|
29
|
+
React__default.createElement(OffsetContext.Provider, { value: offset },
|
|
30
|
+
React__default.createElement("div", { className: "nut-sidenavbar__content" }, children)))))));
|
|
31
|
+
};
|
|
32
|
+
SideNavBar.defaultProps = defaultProps;
|
|
33
|
+
SideNavBar.displayName = 'NutSideNavBar';
|
|
34
|
+
|
|
35
|
+
export { SideNavBar as S };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
|
|
3
|
+
const SideNavBarItem = (props) => {
|
|
4
|
+
const { title, ikey, children, onClick, ...rest } = props;
|
|
5
|
+
const clickFn = (e) => {
|
|
6
|
+
e.stopPropagation();
|
|
7
|
+
onClick && onClick({ title, ikey });
|
|
8
|
+
};
|
|
9
|
+
return (React__default.createElement("div", { className: "nut-subsidenavbar__item border-bt", onClick: clickFn, ...rest }, title));
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { SideNavBarItem as S };
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import React__default, { useRef, useState, useEffect } from 'react';
|
|
2
|
+
import { getEnv, nextTick, createSelectorQuery, canvasToTempFilePath } from '@tarojs/taro';
|
|
3
|
+
import { B as Button } from './button.taro-9244d065.js';
|
|
4
|
+
import { c as cn } from './bem-350c1702.js';
|
|
5
|
+
import { u as useConfig } from './configprovider.taro-8d71eb49.js';
|
|
6
|
+
|
|
7
|
+
/* eslint-disable react/no-unknown-property */
|
|
8
|
+
const defaultProps = {
|
|
9
|
+
canvasId: 'spcanvas',
|
|
10
|
+
type: 'png',
|
|
11
|
+
lineWidth: 2,
|
|
12
|
+
strokeStyle: '#000',
|
|
13
|
+
className: '',
|
|
14
|
+
};
|
|
15
|
+
const Signature = (props) => {
|
|
16
|
+
const { locale } = useConfig();
|
|
17
|
+
const { canvasId, type, lineWidth, strokeStyle, unSupportTpl, className, confirm, clear, onConfirm, onClear, ...rest } = {
|
|
18
|
+
...defaultProps,
|
|
19
|
+
...props,
|
|
20
|
+
};
|
|
21
|
+
const b = cn('signature');
|
|
22
|
+
const canvasRef = useRef(null);
|
|
23
|
+
const wrapRef = useRef(null);
|
|
24
|
+
const [canvasHeight, setCanvasHeight] = useState(0);
|
|
25
|
+
const [canvasWidth, setCanvasWidth] = useState(0);
|
|
26
|
+
const ctx = useRef(null);
|
|
27
|
+
const [disalbeScroll] = useState('true');
|
|
28
|
+
const startEventHandler = (event) => {
|
|
29
|
+
if (ctx.current) {
|
|
30
|
+
ctx.current.beginPath();
|
|
31
|
+
ctx.current.lineWidth = lineWidth;
|
|
32
|
+
ctx.current.strokeStyle = strokeStyle;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const moveEventHandler = (event) => {
|
|
36
|
+
if (ctx.current) {
|
|
37
|
+
const evt = event.changedTouches[0];
|
|
38
|
+
let mouseX = evt.x || evt.clientX;
|
|
39
|
+
let mouseY = evt.y || evt.clientY;
|
|
40
|
+
if (getEnv() === 'WEB' && canvasRef.current) {
|
|
41
|
+
const coverPos = canvasRef.current.getBoundingClientRect();
|
|
42
|
+
mouseX = evt.clientX - coverPos.left;
|
|
43
|
+
mouseY = evt.clientY - coverPos.top;
|
|
44
|
+
}
|
|
45
|
+
nextTick(() => {
|
|
46
|
+
// ctx.current.lineCap = 'round'
|
|
47
|
+
// ctx.current.lineJoin = 'round'
|
|
48
|
+
ctx.current?.lineTo(mouseX, mouseY);
|
|
49
|
+
ctx.current?.stroke();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const endEventHandler = (event) => { };
|
|
54
|
+
const handleClearBtn = () => {
|
|
55
|
+
if (ctx.current) {
|
|
56
|
+
ctx.current.clearRect(0, 0, canvasWidth, canvasHeight);
|
|
57
|
+
ctx.current.closePath();
|
|
58
|
+
}
|
|
59
|
+
clear && clear();
|
|
60
|
+
onClear && onClear();
|
|
61
|
+
};
|
|
62
|
+
const handleConfirmBtn = () => {
|
|
63
|
+
onSave();
|
|
64
|
+
};
|
|
65
|
+
const onSave = () => {
|
|
66
|
+
createSelectorQuery()
|
|
67
|
+
.select(`#${canvasId}`)
|
|
68
|
+
.fields({
|
|
69
|
+
node: true,
|
|
70
|
+
size: true,
|
|
71
|
+
})
|
|
72
|
+
.exec((res) => {
|
|
73
|
+
canvasToTempFilePath({
|
|
74
|
+
canvas: res[0].node,
|
|
75
|
+
fileType: props.type,
|
|
76
|
+
canvasId: `${canvasId}`,
|
|
77
|
+
success: (res) => {
|
|
78
|
+
handleClearBtn();
|
|
79
|
+
confirm && confirm(res.tempFilePath);
|
|
80
|
+
onConfirm && onConfirm(res.tempFilePath);
|
|
81
|
+
},
|
|
82
|
+
fail: (res) => {
|
|
83
|
+
console.log('保存失败');
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
const canvasSetting = (canvasDom, width, height) => {
|
|
89
|
+
const canvas = canvasDom;
|
|
90
|
+
canvas.current = canvas;
|
|
91
|
+
ctx.current = canvas.getContext('2d');
|
|
92
|
+
setCanvasWidth(width);
|
|
93
|
+
setCanvasHeight(height);
|
|
94
|
+
canvas.width = width;
|
|
95
|
+
canvas.height = height;
|
|
96
|
+
if (ctx.current) {
|
|
97
|
+
ctx.current.clearRect(0, 0, width, height);
|
|
98
|
+
ctx.current.beginPath();
|
|
99
|
+
ctx.current.lineWidth = lineWidth;
|
|
100
|
+
ctx.current.strokeStyle = strokeStyle;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const initCanvas = () => {
|
|
104
|
+
nextTick(() => {
|
|
105
|
+
setTimeout(() => {
|
|
106
|
+
if (getEnv() === 'WEAPP' || getEnv() === 'JD') {
|
|
107
|
+
createSelectorQuery()
|
|
108
|
+
.select(`#${canvasId}`)
|
|
109
|
+
.fields({
|
|
110
|
+
node: true,
|
|
111
|
+
size: true,
|
|
112
|
+
}, (res) => {
|
|
113
|
+
const { node, width, height } = res;
|
|
114
|
+
canvasSetting(node, width, height);
|
|
115
|
+
})
|
|
116
|
+
.exec();
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
const canvasDom = document.getElementById(`${canvasId}`);
|
|
120
|
+
let canvas = canvasDom;
|
|
121
|
+
if (canvasDom?.tagName !== 'CANVAS') {
|
|
122
|
+
canvas = canvasDom?.getElementsByTagName('canvas')[0];
|
|
123
|
+
}
|
|
124
|
+
canvasSetting(canvas, canvasDom?.offsetWidth, canvasDom?.offsetHeight);
|
|
125
|
+
}
|
|
126
|
+
}, 1000);
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
initCanvas();
|
|
131
|
+
}, []);
|
|
132
|
+
return (React__default.createElement("div", { className: `${b()} ${className}`, ...rest },
|
|
133
|
+
React__default.createElement("div", { className: `${b('inner')} spcanvas_WEAPP`, ref: wrapRef }, getEnv() === 'WEAPP' || getEnv() === 'JD' ? (React__default.createElement("canvas", { id: canvasId, ref: canvasRef,
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
135
|
+
// @ts-ignore
|
|
136
|
+
canvasId: canvasId, disalbeScroll: true, type: "2d", onTouchStart: startEventHandler, onTouchMove: moveEventHandler, onTouchEnd: endEventHandler })) : (React__default.createElement("canvas", { id: canvasId, ref: canvasRef, "canvas-id": canvasId, "disalbe-scroll": disalbeScroll, onTouchStart: startEventHandler, onTouchMove: moveEventHandler, onTouchEnd: endEventHandler, onTouchCancel: endEventHandler }))),
|
|
137
|
+
React__default.createElement(Button, { className: `${b('btn')}`, type: "default", onClick: () => handleClearBtn() }, locale.signature.reSign),
|
|
138
|
+
React__default.createElement(Button, { className: `${b('btn')}`, type: "primary", onClick: () => handleConfirmBtn() }, locale.confirm)));
|
|
139
|
+
};
|
|
140
|
+
Signature.defaultProps = defaultProps;
|
|
141
|
+
Signature.displayName = 'NutSignature';
|
|
142
|
+
|
|
143
|
+
export { Signature as S };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { A as Avatar } from './avatar.taro-3676f38f.js';
|
|
4
|
+
import { c as cn } from './bem-350c1702.js';
|
|
5
|
+
|
|
6
|
+
const defaultProps = {
|
|
7
|
+
width: '100px',
|
|
8
|
+
height: '100px',
|
|
9
|
+
row: 1,
|
|
10
|
+
animated: false,
|
|
11
|
+
title: false,
|
|
12
|
+
avatar: false,
|
|
13
|
+
round: false,
|
|
14
|
+
avatarSize: '50px',
|
|
15
|
+
loading: false,
|
|
16
|
+
avatarShape: 'round',
|
|
17
|
+
};
|
|
18
|
+
const Skeleton = (props) => {
|
|
19
|
+
const { className, width, height, animated, row, title, avatar, avatarSize, round, loading, children, avatarShape, ...restProps } = {
|
|
20
|
+
...defaultProps,
|
|
21
|
+
...props,
|
|
22
|
+
};
|
|
23
|
+
const b = cn('skeleton');
|
|
24
|
+
const classes = classNames(className, b());
|
|
25
|
+
const blockClass = classNames({
|
|
26
|
+
blockClass: true,
|
|
27
|
+
'blockClass--round': round,
|
|
28
|
+
});
|
|
29
|
+
const avatarClass = classNames({
|
|
30
|
+
avatarClass: true,
|
|
31
|
+
[`avatarClass--${avatarShape}`]: avatarShape,
|
|
32
|
+
});
|
|
33
|
+
const repeatLines = (num) => {
|
|
34
|
+
return Array.from({ length: num }, (v, i) => i);
|
|
35
|
+
};
|
|
36
|
+
const getStyle = () => {
|
|
37
|
+
if (avatarSize) {
|
|
38
|
+
return {
|
|
39
|
+
width: avatarSize,
|
|
40
|
+
height: avatarSize,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
width: '50px',
|
|
45
|
+
height: '50px',
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
return (React__default.createElement(React__default.Fragment, null, loading ? (React__default.createElement("div", null, children)) : (React__default.createElement("div", { className: classes, ...restProps },
|
|
49
|
+
animated && React__default.createElement("div", { className: "skeleton-animation" }),
|
|
50
|
+
React__default.createElement("div", { className: "nut-skeleton-content" },
|
|
51
|
+
avatar && (React__default.createElement(Avatar, { className: avatarClass, bgColor: "rgb(239, 239, 239)", shape: avatarShape, style: getStyle() })),
|
|
52
|
+
row === 1 && (React__default.createElement("div", { className: blockClass, style: { width, height } })),
|
|
53
|
+
React__default.createElement("div", { className: "skeleton-content-line" },
|
|
54
|
+
title && React__default.createElement("div", { className: "skeleton-title" }),
|
|
55
|
+
repeatLines(row).map((item, index) => {
|
|
56
|
+
return (React__default.createElement("div", { className: blockClass, key: index, style: { width, height } }));
|
|
57
|
+
})))))));
|
|
58
|
+
};
|
|
59
|
+
Skeleton.defaultProps = defaultProps;
|
|
60
|
+
Skeleton.displayName = 'NutSkeleton';
|
|
61
|
+
|
|
62
|
+
export { Skeleton as S };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React__default, { useContext } from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { D as DataContext } from './UserContext-e402e1a6.js';
|
|
4
|
+
import { c as cn } from './bem-350c1702.js';
|
|
5
|
+
import { I as Icon } from './icon.taro-296a1bec.js';
|
|
6
|
+
import { C as ComponentDefaults } from './typings-b9828dba.js';
|
|
7
|
+
|
|
8
|
+
const defaultProps = {
|
|
9
|
+
...ComponentDefaults,
|
|
10
|
+
title: '',
|
|
11
|
+
content: '',
|
|
12
|
+
activeIndex: 0,
|
|
13
|
+
icon: '',
|
|
14
|
+
iconColor: '',
|
|
15
|
+
size: '12px',
|
|
16
|
+
};
|
|
17
|
+
const Step = (props) => {
|
|
18
|
+
const { children, title, content, activeIndex, icon, iconColor, size, className, renderContent, iconClassPrefix, iconFontClassName, ...restProps } = {
|
|
19
|
+
...defaultProps,
|
|
20
|
+
...props,
|
|
21
|
+
};
|
|
22
|
+
const parent = useContext(DataContext);
|
|
23
|
+
const dot = parent.propSteps.progressDot;
|
|
24
|
+
const getCurrentStatus = () => {
|
|
25
|
+
const index = activeIndex;
|
|
26
|
+
if (index < +parent.propSteps.current)
|
|
27
|
+
return 'finish';
|
|
28
|
+
return index === +parent.propSteps.current ? 'process' : 'wait';
|
|
29
|
+
};
|
|
30
|
+
const handleClickStep = () => {
|
|
31
|
+
parent.propSteps?.onClickStep && parent.propSteps?.onClickStep(activeIndex);
|
|
32
|
+
parent.propSteps?.clickStep && parent.propSteps?.clickStep(activeIndex);
|
|
33
|
+
};
|
|
34
|
+
const b = cn('step');
|
|
35
|
+
const classes = classNames({
|
|
36
|
+
[`${b('')}-${getCurrentStatus()}`]: true,
|
|
37
|
+
}, className, b(''));
|
|
38
|
+
const renderIconClass = () => {
|
|
39
|
+
if (!dot && icon) {
|
|
40
|
+
return 'nut-step-icon is-icon';
|
|
41
|
+
}
|
|
42
|
+
if (!dot && !icon) {
|
|
43
|
+
return 'nut-step-icon is-text';
|
|
44
|
+
}
|
|
45
|
+
return 'nut-step-icon';
|
|
46
|
+
};
|
|
47
|
+
return (React__default.createElement("div", { className: classes, ...restProps, onClick: handleClickStep },
|
|
48
|
+
React__default.createElement("div", { className: "nut-step-head" },
|
|
49
|
+
React__default.createElement("div", { className: "nut-step-line" }),
|
|
50
|
+
React__default.createElement("div", { className: renderIconClass() }, icon ? (React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, className: "nut-step-icon-inner", color: iconColor, name: icon, size: size })) : (!dot && React__default.createElement("span", { className: "nut-step-inner" }, activeIndex)))),
|
|
51
|
+
React__default.createElement("div", { className: "nut-step-main" },
|
|
52
|
+
React__default.createElement("span", { className: "nut-step-title" }, title),
|
|
53
|
+
content && React__default.createElement("span", { className: "nut-step-content" }, content),
|
|
54
|
+
renderContent && (React__default.createElement("span", { className: "nut-step-content" }, renderContent())))));
|
|
55
|
+
};
|
|
56
|
+
Step.defaultProps = defaultProps;
|
|
57
|
+
Step.displayName = 'NutStep';
|
|
58
|
+
|
|
59
|
+
export { Step as S };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { D as DataContext } from './UserContext-e402e1a6.js';
|
|
4
|
+
import { c as cn } from './bem-350c1702.js';
|
|
5
|
+
|
|
6
|
+
const defaultProps = {
|
|
7
|
+
current: 0,
|
|
8
|
+
direction: 'horizontal',
|
|
9
|
+
progressDot: false,
|
|
10
|
+
};
|
|
11
|
+
const Steps = (props) => {
|
|
12
|
+
const propSteps = { ...defaultProps, ...props };
|
|
13
|
+
const { children, current, direction, className, progressDot, clickStep, onClickStep, ...restProps } = propSteps;
|
|
14
|
+
const parentSteps = {
|
|
15
|
+
propSteps,
|
|
16
|
+
};
|
|
17
|
+
const b = cn('steps');
|
|
18
|
+
const classes = classNames({
|
|
19
|
+
[`${b('')}-${direction}`]: true,
|
|
20
|
+
[`${b('')}-dot`]: !!props.progressDot,
|
|
21
|
+
}, className, b(''));
|
|
22
|
+
return (React__default.createElement(DataContext.Provider, { value: parentSteps }, React__default.createElement('div', {
|
|
23
|
+
className: classes,
|
|
24
|
+
...restProps,
|
|
25
|
+
}, children)));
|
|
26
|
+
};
|
|
27
|
+
Steps.defaultProps = defaultProps;
|
|
28
|
+
Steps.displayName = 'NutSteps';
|
|
29
|
+
|
|
30
|
+
export { Steps as S };
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import React__default, { useRef, useEffect, useState, useMemo, useCallback } from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { getEnv, usePageScroll, getSystemInfoSync } from '@tarojs/taro';
|
|
4
|
+
import { g as getRectByTaro } from './useClientRect-1f8ed1fe.js';
|
|
5
|
+
import { g as getScrollParent } from './get-scroll-parent-b4a07e65.js';
|
|
6
|
+
import { c as cn } from './bem-350c1702.js';
|
|
7
|
+
|
|
8
|
+
function useWatch(dep, callback, config = { immediate: false }) {
|
|
9
|
+
const { immediate } = config;
|
|
10
|
+
const prev = useRef();
|
|
11
|
+
const inited = useRef(false);
|
|
12
|
+
const stop = useRef(false);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
const execute = () => callback(prev.current);
|
|
15
|
+
if (!stop.current) {
|
|
16
|
+
if (!inited.current) {
|
|
17
|
+
inited.current = true;
|
|
18
|
+
if (immediate) {
|
|
19
|
+
execute();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
execute();
|
|
24
|
+
}
|
|
25
|
+
prev.current = dep;
|
|
26
|
+
}
|
|
27
|
+
}, [dep]);
|
|
28
|
+
return () => {
|
|
29
|
+
stop.current = true;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const defaultProps = {
|
|
34
|
+
position: 'top',
|
|
35
|
+
top: 0,
|
|
36
|
+
bottom: 0,
|
|
37
|
+
zIndex: 2000,
|
|
38
|
+
};
|
|
39
|
+
const b = cn('sticky');
|
|
40
|
+
const Sticky = (props) => {
|
|
41
|
+
const { position = 'top', top = 0, bottom = 0, zIndex = 2000, children, container, className, onChange, ...rest } = props;
|
|
42
|
+
const stickyRef = useRef(null);
|
|
43
|
+
const rootRef = useRef(null);
|
|
44
|
+
const offset = position === 'top' ? top : bottom;
|
|
45
|
+
const [rootRect, setRootRect] = useState({});
|
|
46
|
+
const [fixed, setFixed] = useState(false);
|
|
47
|
+
const [transform, setTransform] = useState(0); // 相对容器偏移距离
|
|
48
|
+
useWatch(fixed, () => {
|
|
49
|
+
onChange && onChange(fixed);
|
|
50
|
+
});
|
|
51
|
+
const rootStyle = useMemo(() => {
|
|
52
|
+
if (!fixed) {
|
|
53
|
+
return {
|
|
54
|
+
height: '',
|
|
55
|
+
width: '',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const style = {};
|
|
59
|
+
if (rootRect.height) {
|
|
60
|
+
style.height = rootRect.height;
|
|
61
|
+
}
|
|
62
|
+
if (rootRect.width) {
|
|
63
|
+
style.width = rootRect.width;
|
|
64
|
+
}
|
|
65
|
+
return style;
|
|
66
|
+
}, [fixed, rootRect.height, rootRect.width]);
|
|
67
|
+
const stickyStyle = useMemo(() => {
|
|
68
|
+
if (!fixed) {
|
|
69
|
+
return {
|
|
70
|
+
height: '',
|
|
71
|
+
width: '',
|
|
72
|
+
[position]: '',
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
let style = {};
|
|
76
|
+
if (rootRect.height)
|
|
77
|
+
style.height = rootRect.height;
|
|
78
|
+
if (rootRect.width)
|
|
79
|
+
style.width = rootRect.width;
|
|
80
|
+
style.transform = `translate3d(0, ${transform}px, 0)`;
|
|
81
|
+
style[position] = offset;
|
|
82
|
+
style.zIndex = zIndex;
|
|
83
|
+
return style;
|
|
84
|
+
}, [fixed, rootRect.height, rootRect.width, transform, position]);
|
|
85
|
+
const handleScroll = async (scrollTop) => {
|
|
86
|
+
const curRootRect = await getRectByTaro(rootRef.current);
|
|
87
|
+
const stickyRect = await getRectByTaro(stickyRef.current);
|
|
88
|
+
if (curRootRect && stickyRect) {
|
|
89
|
+
setRootRect(curRootRect);
|
|
90
|
+
if (position === 'top') {
|
|
91
|
+
if (container) {
|
|
92
|
+
const containerRect = await getRectByTaro(container.current);
|
|
93
|
+
const difference = containerRect.bottom - top - curRootRect.height;
|
|
94
|
+
const curTransform = difference < 0 ? difference : 0;
|
|
95
|
+
setTransform(curTransform);
|
|
96
|
+
const curFixed = top > curRootRect.top && containerRect.bottom > 0;
|
|
97
|
+
setFixed(curFixed);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
setFixed(top > curRootRect.top);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
const windowHeight = getSystemInfoSync().windowHeight;
|
|
105
|
+
setFixed(windowHeight - offset < curRootRect.bottom);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log('getRectByTaro获取失败', { stickyRect, curRootRect });
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const getElement = useCallback(() => {
|
|
113
|
+
return getScrollParent(rootRef.current);
|
|
114
|
+
}, []);
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
if (getEnv() === 'WEB' && getElement() !== window) {
|
|
117
|
+
window.addEventListener('touchmove', handleScroll, true);
|
|
118
|
+
window.addEventListener('scroll', handleScroll, true);
|
|
119
|
+
return () => {
|
|
120
|
+
window.removeEventListener('touchmove', handleScroll);
|
|
121
|
+
window.removeEventListener('scroll', handleScroll);
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}, []);
|
|
125
|
+
usePageScroll((res) => {
|
|
126
|
+
if (getEnv() === 'WEAPP') {
|
|
127
|
+
handleScroll(res.scrollTop);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return (React__default.createElement("div", { ref: rootRef, style: rootStyle, className: classNames(b(), className), ...rest },
|
|
131
|
+
React__default.createElement("div", {
|
|
132
|
+
// 应符合 bem 规范
|
|
133
|
+
className: classNames('nut-sticky-box', { 'nut-sticky-fixed': fixed }), ref: stickyRef, style: stickyStyle }, children)));
|
|
134
|
+
};
|
|
135
|
+
Sticky.defaultProps = defaultProps;
|
|
136
|
+
Sticky.displayName = 'NutSticky';
|
|
137
|
+
|
|
138
|
+
export { Sticky as S };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React__default, { useState, useContext, useRef, useCallback, useEffect } from 'react';
|
|
2
|
+
import { O as OffsetContext } from './offsetContext-c2a746fa.js';
|
|
3
|
+
|
|
4
|
+
const defaultProps = {
|
|
5
|
+
open: true,
|
|
6
|
+
};
|
|
7
|
+
const SubSideNavBar = (props) => {
|
|
8
|
+
const { title, ikey, children, onClick, open, ...rest } = {
|
|
9
|
+
...defaultProps,
|
|
10
|
+
...props,
|
|
11
|
+
};
|
|
12
|
+
const [subShow, setSubShow] = useState(open);
|
|
13
|
+
const offset = useContext(OffsetContext);
|
|
14
|
+
const listRef = useRef(null);
|
|
15
|
+
const setListLevel = useCallback((nodeList, level = 1) => {
|
|
16
|
+
const titleClass = nodeList[0].className;
|
|
17
|
+
if (titleClass.includes('nut-subsidenavbar__title')) {
|
|
18
|
+
const left = offset * (level + 1);
|
|
19
|
+
nodeList[0].style.paddingLeft = `${left}px`;
|
|
20
|
+
}
|
|
21
|
+
const childNodes = nodeList[1] &&
|
|
22
|
+
nodeList[1].children &&
|
|
23
|
+
Array.from(nodeList[1].children).filter((item) => item.nodeType !== 3 && item.nodeType !== 8);
|
|
24
|
+
childNodes.forEach((item) => {
|
|
25
|
+
const itemClass = item.className;
|
|
26
|
+
if (itemClass.includes('nut-subsidenavbar__item')) {
|
|
27
|
+
const left = offset * (level + 2);
|
|
28
|
+
item.style.paddingLeft = `${left}px`;
|
|
29
|
+
}
|
|
30
|
+
if (itemClass.includes('nut-subsidenavbar__list')) {
|
|
31
|
+
let level = item.getAttribute('level')
|
|
32
|
+
? Number(item.getAttribute('level'))
|
|
33
|
+
: 1;
|
|
34
|
+
level += 1;
|
|
35
|
+
item.setAttribute('level', level.toString());
|
|
36
|
+
item.children && setListLevel(item.children, level);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}, [offset]);
|
|
40
|
+
const clickFn = (e) => {
|
|
41
|
+
e.stopPropagation();
|
|
42
|
+
setSubShow(!subShow);
|
|
43
|
+
const isShow = !subShow;
|
|
44
|
+
onClick && onClick({ title, ikey, isShow });
|
|
45
|
+
};
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
const childNodes = listRef.current?.children;
|
|
48
|
+
listRef.current?.setAttribute('level', '1');
|
|
49
|
+
childNodes && setListLevel(childNodes);
|
|
50
|
+
}, [setListLevel]);
|
|
51
|
+
const divClass = subShow
|
|
52
|
+
? 'nut-subsidenavbar__list nutShow'
|
|
53
|
+
: 'nut-subsidenavbar__list nutHide';
|
|
54
|
+
const iconClass = subShow ? 'arrow-icon arrow-down' : 'arrow-icon arrow-up';
|
|
55
|
+
return (React__default.createElement("div", { className: divClass, ref: listRef, onClick: clickFn, ...rest },
|
|
56
|
+
React__default.createElement("div", { className: "nut-subsidenavbar__title border-bt" },
|
|
57
|
+
title,
|
|
58
|
+
" ",
|
|
59
|
+
React__default.createElement("i", { className: iconClass })),
|
|
60
|
+
React__default.createElement("div", { className: "nut-subsidenavbar__content" }, children)));
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export { SubSideNavBar as S };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { c as canUseDom } from './can-use-dom-3eeb5af4.js';
|
|
2
|
+
|
|
3
|
+
let passiveSupported = false;
|
|
4
|
+
if (canUseDom) {
|
|
5
|
+
try {
|
|
6
|
+
const opts = Object.defineProperty({}, 'passive', {
|
|
7
|
+
get() {
|
|
8
|
+
passiveSupported = true;
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
window.addEventListener('test-passive-supported', null, opts);
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
console.log(e);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { passiveSupported as p };
|