taro-react-uilib 1.2.2 → 1.3.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/components/AmountInput/index.js +2 -0
- package/dist/components/AmountInput/index.js.map +1 -0
- package/dist/components/AmountKeyboard/index.js +2 -0
- package/dist/components/AmountKeyboard/index.js.map +1 -0
- package/dist/components/Badge/index.js +2 -0
- package/dist/components/Badge/index.js.map +1 -0
- package/dist/components/Button/DotJump.js +2 -0
- package/dist/components/Button/DotJump.js.map +1 -0
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Collapse/index.js +2 -0
- package/dist/components/Collapse/index.js.map +1 -0
- package/dist/components/Picker/Picker.js +1 -1
- package/dist/components/Picker/Picker.js.map +1 -1
- package/dist/components/Picker/PickerSlot.js +2 -0
- package/dist/components/Picker/PickerSlot.js.map +1 -0
- package/dist/components/Picker/index.js +1 -1
- package/dist/components/Picker/index.js.map +1 -1
- package/dist/components/src/index.js +1 -1
- package/dist/components/src/utils/index.js.map +1 -1
- package/dist/index.js +6 -7
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +6 -7
- package/dist/index.umd.js.map +1 -1
- package/dist/styles/components/amountinput.scss +107 -0
- package/dist/styles/components/amountkeyboard.scss +127 -0
- package/dist/styles/components/badge.scss +11 -0
- package/dist/styles/components/button.scss +5 -0
- package/dist/styles/components/collapse.scss +17 -0
- package/dist/styles/components/images/closeKeyboard.png +0 -0
- package/dist/styles/components/index.scss +4 -1
- package/dist/styles/components/picker.scss +99 -0
- package/dist/styles/components/space.scss +2 -6
- package/lib/components/AmountInput/index.js +51 -0
- package/lib/components/AmountInput/index.js.map +1 -0
- package/lib/components/AmountKeyboard/index.js +97 -0
- package/lib/components/AmountKeyboard/index.js.map +1 -0
- package/lib/components/Badge/index.js +11 -0
- package/lib/components/Badge/index.js.map +1 -0
- package/lib/components/Button/DotJump.js +13 -0
- package/lib/components/Button/DotJump.js.map +1 -0
- package/lib/components/Button/index.js +6 -3
- package/lib/components/Button/index.js.map +1 -1
- package/lib/components/Collapse/index.js +43 -0
- package/lib/components/Collapse/index.js.map +1 -0
- package/lib/components/Picker/Picker.js +3 -3
- package/lib/components/Picker/Picker.js.map +1 -1
- package/lib/components/{PickerSlot/index.js → Picker/PickerSlot.js} +6 -6
- package/lib/components/Picker/PickerSlot.js.map +1 -0
- package/lib/components/Picker/index.js +3 -2
- package/lib/components/Picker/index.js.map +1 -1
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/utils/index.js +12 -0
- package/lib/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/types/components/Button/DotJump.d.ts +7 -0
- package/types/components/Button/index.d.ts +3 -0
- package/types/components/Captcha/index.d.ts +1 -1
- package/types/components/Collapse/index.d.ts +12 -0
- package/types/components/Picker/Picker.d.ts +3 -3
- package/types/components/Picker/PickerSlot.d.ts +24 -0
- package/types/components/Picker/index.d.ts +4 -5
- package/types/index.d.ts +4 -0
- package/types/utils/index.d.ts +1 -0
- package/dist/components/PickerSlot/index.js +0 -2
- package/dist/components/PickerSlot/index.js.map +0 -1
- package/dist/styles/components/pickerslot.scss +0 -98
- package/lib/components/PickerSlot/index.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
# [1.3.0-0](https://code.xhdev.xyz/h5group/taro-uilib/compare/v1.2.2...v1.3.0-0) (2023-05-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* build ([5a4e6c9](https://code.xhdev.xyz/h5group/taro-uilib/commits/5a4e6c94141fd6e94f42b61c587ec425dc004595))
|
|
7
|
+
* step增加box-sizing ([17237b4](https://code.xhdev.xyz/h5group/taro-uilib/commits/17237b4596e35720821a7a0142a0d7f82c74c1c2))
|
|
8
|
+
* 修复amountKeyBoard依赖space问题 ([747d8de](https://code.xhdev.xyz/h5group/taro-uilib/commits/747d8de11e6392d494fdf5c10b70cd225639502f))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* add collapse component ([d2b1224](https://code.xhdev.xyz/h5group/taro-uilib/commits/d2b12240d139b45ab9516170552d91654eea2256))
|
|
14
|
+
* 开发业务组件 ([458b4be](https://code.xhdev.xyz/h5group/taro-uilib/commits/458b4be31ddb15aff2ba09864b9c8b0994f07ff4))
|
|
15
|
+
* 新增AmountInpInput组件、AmountKeyBoard组件、Badge组件 ([ba072af](https://code.xhdev.xyz/h5group/taro-uilib/commits/ba072af9d075ee79b10154432a4024dc4d962f3a))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Performance Improvements
|
|
19
|
+
|
|
20
|
+
* amountInput shortcut ([a0e358a](https://code.xhdev.xyz/h5group/taro-uilib/commits/a0e358aab4c1895bd15ccb1448bdcd459118d6ca))
|
|
21
|
+
* picker 默认选中优化、amountkeyboard recommend height fix ([994a63b](https://code.xhdev.xyz/h5group/taro-uilib/commits/994a63bd01f48954dbc792e21a6ac7994cb68406))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
1
25
|
## [1.2.2](https://code.xhdev.xyz/h5group/taro-uilib/compare/v1.2.1...v1.2.2) (2023-04-24)
|
|
2
26
|
|
|
3
27
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import t from"react";import{View as e}from"@tarojs/components";import a from"classnames";var n=function(n){var o=n.value,m=n.maxlength,u=void 0===m?o.length:m,c=n.onFocus,r=n.className,s=n.focus,l=void 0!==s&&s,p=n.shortcut,i=void 0===p?"借全部":p,h=n.step,x=void 0===h?100:h,N=n.errTip,E=void 0===N?"":N,v=n.onUpgrade,f=n.minAmount,d=n.maxAmount,g=n.loanOnekey,k=void 0===g?function(){}:g,b=n.placeholder,y=void 0===b?"单笔".concat(f,"-").concat(d,"元,").concat(x,"的整数倍"):b;var C=a("xh-amount-input",r);return t.createElement(e,{className:C},t.createElement(e,{className:"xh-amount-input-top"},t.createElement(e,{className:"xh-amount-input-top-unit"},"¥"),t.createElement(e,{className:"xh-amount-input-top-amount",onClick:function(t){t.stopPropagation(),c&&c(t)}},t.createElement(e,{className:"xh-amount-input-top-amount-num"},t.createElement(e,{className:"xh-amount-input-top-amount-num-key"}," "),function(){var a=[""];if(""===o)return t.createElement(e,{className:"xh-amount-input-top-amount-num-placeholder"},y);for(var n=0;n<u;n++){var m=o[n];a.push(t.createElement(e,{key:n,className:"xh-amount-input-top-amount-num-key"},m))}return a}(),t.createElement(e,{className:a("xh-amount-input-top-amount-num-cursor",{focus:l})})),t.createElement(e,{className:"xh-amount-input-top-amount-shortcut",onClick:k},i))),t.createElement(e,{className:"xh-amount-input-error"},E&&E),t.createElement(e,{className:"xh-amount-input-bottom"},t.createElement(e,{className:"xh-amount-input-bottom-range"},"单笔可借:",t.createElement(e,{className:"xh-amount-input-bottom-range-number"},f,"-",d,"元")),t.createElement(e,{className:"xh-amount-input-bottom-tip"},"额度不满意?",t.createElement(e,{className:"xh-amount-input-bottom-tip-update",onClick:function(t){t.stopPropagation(),null==v||v()}},"立即提额"))))};export{n as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/AmountInput/index.tsx"],"sourcesContent":["import React, { ReactNode } from \"react\";\nimport { XHComponentCommonProps } from \"@/types\";\nimport { ITouchEvent, View } from \"@tarojs/components\";\nimport classNames from \"classnames\";\nimport \"./index.scss\";\n\nexport type AmountInputProps = {\n space?: number;\n value: string;\n maxlength: number;\n onFocus?: (e) => void;\n unit?: string;\n slot?: ReactNode;\n shortcut?: string;\n errTip?: string;\n maxAmount?: number | string;\n minAmount?: number | string;\n onUpgrade?: () => void;\n loanOnekey?: () => void;\n placeholder?: string;\n focus?: boolean;\n /** 借款步长 */\n step?: number;\n} & XHComponentCommonProps;\n\nconst AmountInput: React.FC<AmountInputProps> = props => {\n const {\n value,\n maxlength = value.length,\n onFocus,\n className,\n focus = false,\n shortcut = \"借全部\",\n step = 100,\n errTip = \"\",\n onUpgrade,\n minAmount,\n maxAmount,\n loanOnekey = () => {},\n placeholder = `单笔${minAmount}-${maxAmount}元,${step}的整数倍`,\n } = props;\n\n function renderInputs(): ReactNode {\n const Inputs: any = [\"\"];\n\n if (value === \"\")\n return (\n <View className=\"xh-amount-input-top-amount-num-placeholder\">\n {placeholder}\n </View>\n );\n for (let i = 0; i < maxlength; i++) {\n const char = value[i];\n Inputs.push(\n <View key={i} className=\"xh-amount-input-top-amount-num-key\">\n {char}\n </View>\n );\n }\n return Inputs;\n }\n\n function handlerClick(e: ITouchEvent): void {\n e.stopPropagation();\n onFocus && onFocus(e);\n }\n const cls = classNames(\"xh-amount-input\", className);\n\n const handleUpgrade = (e: ITouchEvent) => {\n e.stopPropagation();\n onUpgrade?.();\n };\n\n return (\n <View className={cls}>\n <View className=\"xh-amount-input-top\">\n <View className=\"xh-amount-input-top-unit\">¥</View>\n <View className=\"xh-amount-input-top-amount\" onClick={handlerClick}>\n <View className=\"xh-amount-input-top-amount-num\">\n <View className=\"xh-amount-input-top-amount-num-key\"> </View>\n {renderInputs()}\n <View\n className={classNames(\"xh-amount-input-top-amount-num-cursor\", {\n focus,\n })}\n ></View>\n </View>\n <View\n className=\"xh-amount-input-top-amount-shortcut\"\n onClick={loanOnekey}\n >\n {shortcut}\n </View>\n </View>\n </View>\n <View className=\"xh-amount-input-error\">{errTip && errTip}</View>\n <View className=\"xh-amount-input-bottom\">\n <View className=\"xh-amount-input-bottom-range\">\n 单笔可借:\n <View className=\"xh-amount-input-bottom-range-number\">\n {minAmount}-{maxAmount}元\n </View>\n </View>\n <View className=\"xh-amount-input-bottom-tip\">\n 额度不满意?\n <View\n className=\"xh-amount-input-bottom-tip-update\"\n onClick={handleUpgrade}\n >\n 立即提额\n </View>\n </View>\n </View>\n </View>\n );\n};\n\nexport default AmountInput;\n"],"names":["AmountInput","props","value","_a","maxlength","length","onFocus","className","_b","focus","_c","shortcut","_d","step","_e","errTip","onUpgrade","minAmount","maxAmount","_f","loanOnekey","_g","placeholder","concat","cls","classNames","React","createElement","View","onClick","e","stopPropagation","Inputs","i","char","push","key","renderInputs"],"mappings":"yFAyBM,IAAAA,EAA0C,SAAAC,GAE5C,IAAAC,EAaED,EAAKC,MAZPC,EAYEF,EAZsBG,UAAxBA,OAAS,IAAAD,EAAGD,EAAMG,SAClBC,EAWEL,EAAKK,QAVPC,EAUEN,YATFO,EASEP,EATWQ,MAAbA,OAAQ,IAAAD,GAAKA,EACbE,EAQET,WARFU,aAAW,MAAKD,EAChBE,EAOEX,EAPQY,KAAVA,OAAI,IAAAD,EAAG,IAAGA,EACVE,EAMEb,EAAKc,OANPA,OAAM,IAAAD,EAAG,GAAEA,EACXE,EAKEf,EAAKe,UAJPC,EAIEhB,EAJOgB,UACTC,EAGEjB,EAAKiB,UAFPC,EAEElB,aAFFmB,aAAa,WAAQ,EAAAD,EACrBE,EACEpB,cADFqB,OAAc,IAAAD,EAAA,KAAAE,OAAKN,EAAS,KAAAM,OAAIL,EAAc,MAAAK,OAAAV,EAAU,QAAAQ,EA2B1D,IAAMG,EAAMC,EAAW,kBAAmBlB,GAO1C,OACEmB,EAACC,cAAAC,EAAK,CAAArB,UAAWiB,GACfE,EAAAC,cAACC,EAAI,CAACrB,UAAU,uBACdmB,EAAAC,cAACC,EAAI,CAACrB,UAAU,4BAAuC,KACvDmB,EAACC,cAAAC,GAAKrB,UAAU,6BAA6BsB,QAfnD,SAAsBC,GACpBA,EAAEC,kBACFzB,GAAWA,EAAQwB,EACpB,GAaOJ,EAAAC,cAACC,EAAI,CAACrB,UAAU,kCACdmB,EAAAC,cAACC,EAAI,CAACrB,UAAU,sCAAkD,KArC5E,WACE,IAAMyB,EAAc,CAAC,IAErB,GAAc,KAAV9B,EACF,OACEwB,EAACC,cAAAC,EAAK,CAAArB,UAAU,8CACbe,GAGP,IAAK,IAAIW,EAAI,EAAGA,EAAI7B,EAAW6B,IAAK,CAClC,IAAMC,EAAOhC,EAAM+B,GACnBD,EAAOG,KACLT,EAACC,cAAAC,GAAKQ,IAAKH,EAAG1B,UAAU,sCACrB2B,GAGN,CACD,OAAOF,CACR,CAoBUK,GACDX,EAAAC,cAACC,EACC,CAAArB,UAAWkB,EAAW,wCAAyC,CAC7DhB,MAAKA,OAIXiB,EAAAC,cAACC,EAAI,CACHrB,UAAU,sCACVsB,QAAST,GAERT,KAIPe,EAACC,cAAAC,GAAKrB,UAAU,yBAAyBQ,GAAUA,GACnDW,EAAAC,cAACC,EAAI,CAACrB,UAAU,0BACdmB,EAAAC,cAACC,EAAI,CAACrB,UAAU,wCAEdmB,EAAAC,cAACC,EAAI,CAACrB,UAAU,uCACbU,MAAYC,QAGjBQ,EAAAC,cAACC,EAAI,CAACrB,UAAU,uCAEdmB,EAAAC,cAACC,EAAI,CACHrB,UAAU,oCACVsB,QAvCY,SAACC,GACrBA,EAAEC,kBACFf,SAAAA,GACF,GAuCe,UAKjB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__read as e}from"../node_modules/tslib/tslib.es6.js";import t,{useState as n,useEffect as a,useCallback as o}from"react";import r from"classnames";import{View as l}from"@tarojs/components";import{pxTransform as m}from"../src/utils/index.js";import u from"../Badge/index.js";import c from"../Space/index.js";import s from"../node_modules/react-transition-group/esm/CSSTransition.js";var i=[{text:1,value:1,type:"number"},{text:2,value:2,type:"number"},{text:3,value:3,type:"number"},{text:"",value:"",type:"delete"},{text:4,value:4,type:"number"},{text:5,value:5,type:"number"},{text:6,value:6,type:"number"},{text:"",value:"",type:"none"},{text:7,value:7,type:"number"},{text:8,value:8,type:"number"},{text:9,value:9,type:"number"},{text:"",value:"",type:"none"},{text:"00",value:"00",type:"number"},{text:0,value:0,type:"number"},{text:"",value:"",type:"close"},{text:"",value:"",type:"none"}],p=function(p){var d=p.onBlur,y=p.show,v=p.maxLength,x=void 0===v?Number.MAX_SAFE_INTEGER:v,f=p.closeOnClickSpace,b=void 0===f||f,k=p.onClose,h=p.onChange,E=p.value,g=p.className,N=p.onConfirm,C=p.recommend,j=void 0===C?[]:C,S=p.header,_=e(n(E),2),L=_[0],w=_[1];function A(e){k&&k(e),d&&d(e)}a((function(){return b&&document.addEventListener("click",A),function(){document.removeEventListener("click",A)}}),[]),a((function(){w(E)}),[E]);var O=o((function(e,t){var n=t.type,a=t.value;if("h5"===process.env.TARO_ENV&&e.stopImmediatePropagation(),"none"!==n)if("close"!==n){var o=L;"delete"===n?o=L.slice(0,L.length-1):o.replace(/^0+/g,"").length<x&&(o=L+a),o!==L&&(w(o),null==h||h(o))}else A(e)}),[L]),P=r("xh-amount-keyboard",g);return t.createElement(s,{classNames:"slide-up",in:y,unmountOnExit:!0,timeout:200},t.createElement(l,{className:P},t.createElement(l,{className:"xh-amount-keyboard-header"},t.createElement(l,{className:"xh-amount-keyboard-header-wrapper"},S||j.length>0&&t.createElement(l,{className:"xh-amount-keyboard-header-wrapper-text"},"猜您想借"," ",t.createElement(c,{style:{marginLeft:m(24)}},null==j?void 0:j.map((function(e,n){return t.createElement(l,{key:n,onClick:function(t){return function(e,t){e.stopPropagation(),null==N||N("".concat(t))}(t,e)}},t.createElement(u,{content:"¥".concat(e),key:n}))})))))),t.createElement(l,{className:"xh-amount-keyboard-body"},i.map((function(e,n){return t.createElement(l,{key:n,className:r("xh-amount-keyboard-body-key",{none:"none"===e.type,delete:"delete"===e.type,close:"close"===e.type}),onClick:function(t){O(t,e)}},e.text)})),t.createElement(l,{className:"xh-amount-keyboard-body-key confirm-fake",onClick:function(e){e.stopPropagation(),null==N||N(L)}},"确定"))))};export{p as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/AmountKeyboard/index.tsx"],"sourcesContent":["import React, {\n FC,\n useState,\n useEffect,\n MouseEvent,\n ReactNode,\n useCallback,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { ITouchEvent, View } from \"@tarojs/components\";\nimport { pxTransform } from \"@/utils\";\n\nimport Badge from \"../Badge\";\nimport \"./index.scss\";\nimport { XHComponentCommonProps } from \"../../types\";\nimport Space from \"../Space\";\n\nexport type NumberKeyboardProps = {\n show: boolean;\n showClose?: boolean;\n closeOnClickSpace?: boolean;\n maxLength?: number;\n onBlur?: (e: MouseEvent | Event) => void;\n onClose?: (e: MouseEvent | Event) => void;\n onChange?: (value: string) => void;\n value: string;\n header?: ReactNode;\n onConfirm?: (value: string) => void;\n recommend?: Array<number | string>;\n} & XHComponentCommonProps;\n\nexport type KeyType = \"number\" | \"delete\" | \"string\" | \"none\" | \"close\";\n\nexport interface IKey {\n text: number | string;\n value: number | string;\n type: KeyType;\n}\n\nconst XHAmountKeys: IKey[] = [\n { text: 1, value: 1, type: \"number\" },\n { text: 2, value: 2, type: \"number\" },\n { text: 3, value: 3, type: \"number\" },\n { text: \"\", value: \"\", type: \"delete\" },\n { text: 4, value: 4, type: \"number\" },\n { text: 5, value: 5, type: \"number\" },\n { text: 6, value: 6, type: \"number\" },\n { text: \"\", value: \"\", type: \"none\" },\n { text: 7, value: 7, type: \"number\" },\n { text: 8, value: 8, type: \"number\" },\n { text: 9, value: 9, type: \"number\" },\n { text: \"\", value: \"\", type: \"none\" },\n { text: \"00\", value: \"00\", type: \"number\" },\n { text: 0, value: 0, type: \"number\" },\n { text: \"\", value: \"\", type: \"close\" },\n { text: \"\", value: \"\", type: \"none\" },\n];\n\nconst AmountKeyboard: FC<NumberKeyboardProps> = props => {\n const {\n onBlur,\n show,\n maxLength = Number.MAX_SAFE_INTEGER,\n closeOnClickSpace = true,\n onClose,\n onChange,\n value,\n className,\n onConfirm,\n recommend = [],\n header,\n } = props;\n const [input, setInput] = useState(value);\n\n useEffect(() => {\n if (closeOnClickSpace) {\n document.addEventListener(\"click\", handleClose);\n }\n\n return () => {\n document.removeEventListener(\"click\", handleClose);\n };\n }, []);\n\n useEffect(() => {\n setInput(value);\n }, [value]);\n\n function handleClose(e): void {\n onClose && onClose(e);\n onBlur && onBlur(e);\n }\n\n const handleOnRecommand = (e: ITouchEvent, amount: number | string) => {\n e.stopPropagation();\n onConfirm?.(`${amount}`);\n };\n\n const handleKeyPress = useCallback(\n (e, { type, value }: IKey): void => {\n if (process.env.TARO_ENV === \"h5\") {\n e.stopImmediatePropagation();\n }\n if (type === \"none\") return;\n\n if (type === \"close\") {\n handleClose(e);\n return;\n }\n let newInput = input;\n\n if (type === \"delete\") {\n newInput = input.slice(0, input.length - 1);\n } else if (newInput.replace(/^0+/g, \"\").length < maxLength) {\n newInput = input + value;\n }\n\n // 前后两个值相等就不触发onchange\n if (newInput === input) return;\n setInput(newInput);\n onChange?.(newInput);\n },\n [input]\n );\n\n const handleConfirm = (e: ITouchEvent) => {\n e.stopPropagation();\n onConfirm?.(input);\n };\n const keyboardcls = classNames(\"xh-amount-keyboard\", className);\n\n return (\n <CSSTransition classNames=\"slide-up\" in={show} unmountOnExit timeout={200}>\n <View className={keyboardcls}>\n <View className=\"xh-amount-keyboard-header\">\n <View className=\"xh-amount-keyboard-header-wrapper\">\n {header ||\n (recommend.length > 0 && (\n <View className=\"xh-amount-keyboard-header-wrapper-text\">\n 猜您想借{\" \"}\n <Space style={{ marginLeft: pxTransform(24) }}>\n {recommend?.map((amount, index) => (\n <View\n key={index}\n onClick={e => handleOnRecommand(e, amount)}\n >\n <Badge content={`¥${amount}`} key={index} />\n </View>\n ))}\n </Space>\n </View>\n ))}\n </View>\n </View>\n <View className=\"xh-amount-keyboard-body\">\n {XHAmountKeys.map((key, index) => (\n <View\n key={index}\n className={classNames(\"xh-amount-keyboard-body-key\", {\n none: key.type === \"none\",\n delete: key.type === \"delete\",\n close: key.type === \"close\",\n })}\n onClick={e => {\n handleKeyPress(e, key);\n }}\n >\n {key.text}\n </View>\n ))}\n <View\n className=\"xh-amount-keyboard-body-key confirm-fake\"\n onClick={handleConfirm}\n >\n 确定\n </View>\n </View>\n </View>\n </CSSTransition>\n );\n};\n\nexport default AmountKeyboard;\n"],"names":["XHAmountKeys","text","value","type","AmountKeyboard","props","onBlur","show","_a","maxLength","Number","MAX_SAFE_INTEGER","_b","closeOnClickSpace","onClose","onChange","className","onConfirm","_c","recommend","header","_d","__read","useState","input","setInput","handleClose","e","useEffect","document","addEventListener","removeEventListener","handleKeyPress","useCallback","process","env","TARO_ENV","stopImmediatePropagation","newInput","slice","length","replace","keyboardcls","classNames","React","createElement","CSSTransition","in","unmountOnExit","timeout","View","Space","style","marginLeft","pxTransform","map","amount","index","key","onClick","stopPropagation","concat","handleOnRecommand","Badge","content","none","delete","close"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Badge/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { XHComponentCommonProps } from \"@/types\";\nimport classNames from \"classnames\";\nimport { View } from \"@tarojs/components\";\n\nimport \"./index.scss\";\n\nexport type BadgeProps = {\n content?: string;\n} & XHComponentCommonProps;\n\nconst Badge: React.FC<BadgeProps> = props => {\n const { content, children } = props;\n const cls = classNames(\"xh-badge\", classNames);\n\n return <View className={cls}>{!!children ? children : content}</View>;\n};\n\nexport default Badge;\n"],"names":["Badge","props","content","children","cls","classNames","React","View","className"],"mappings":"yFAWM,IAAAA,EAA8B,SAAAC,GAC1B,IAAAC,EAAsBD,EAAKC,QAAlBC,EAAaF,EAAKE,SAC7BC,EAAMC,EAAW,WAAYA,GAEnC,OAAOC,gBAACC,EAAI,CAACC,UAAWJ,GAAQD,GAAsBD,EACxD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"react";var t=function(t){var r=t.style,a=t.space,n=void 0===a?20:a;return e.createElement("div",{className:"xh-dot-loading",style:r},e.createElement("svg",{height:"1em",viewBox:"0 0 100 40",style:{verticalAlign:"-0.125em"}},e.createElement("g",{stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},e.createElement("g",{transform:"translate(-100.000000, -71.000000)"},e.createElement("g",{transform:"translate(95.000000, 71.000000)"},e.createElement("g",{transform:"translate(5.000000, 0.000000)"},[0,1,2].map((function(t){return e.createElement("rect",{key:t,fill:"currentColor",x:20+t*n,y:"16",width:"8",height:"8",rx:"2"},e.createElement("animate",{attributeName:"y",from:"16",to:"16",dur:"2s",begin:"".concat(.2*t,"s"),repeatCount:"indefinite",values:"16; 6; 26; 16; 16",keyTimes:"0; 0.1; 0.3; 0.4; 1"}))}))))))))};export{t as default};
|
|
2
|
+
//# sourceMappingURL=DotJump.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DotJump.js","sources":["../../../src/components/Button/DotJump.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type DotJumpProps = {\n style?: React.CSSProperties;\n space?: number;\n};\n\nconst DotJump: React.FC<DotJumpProps> = props => {\n const { style, space = 20 } = props;\n return (\n <div className=\"xh-dot-loading\" style={style}>\n <svg\n height=\"1em\"\n viewBox=\"0 0 100 40\"\n style={{ verticalAlign: \"-0.125em\" }}\n >\n <g stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(-100.000000, -71.000000)\">\n <g transform=\"translate(95.000000, 71.000000)\">\n <g transform=\"translate(5.000000, 0.000000)\">\n {[0, 1, 2].map(i => (\n <rect\n key={i}\n fill=\"currentColor\"\n x={20 + i * space}\n y=\"16\"\n width=\"8\"\n height=\"8\"\n rx=\"2\"\n >\n <animate\n attributeName=\"y\"\n from=\"16\"\n to=\"16\"\n dur=\"2s\"\n begin={`${i * 0.2}s`}\n repeatCount=\"indefinite\"\n values=\"16; 6; 26; 16; 16\"\n keyTimes=\"0; 0.1; 0.3; 0.4; 1\"\n />\n </rect>\n ))}\n </g>\n </g>\n </g>\n </g>\n </svg>\n </div>\n );\n};\n\nexport default DotJump;\n"],"names":["DotJump","props","style","_a","space","React","className","createElement","height","viewBox","verticalAlign","stroke","strokeWidth","fill","fillRule","transform","map","i","key","x","y","width","rx","attributeName","from","to","dur","begin","concat","repeatCount","values","keyTimes"],"mappings":"qBAOM,IAAAA,EAAkC,SAAAC,GAC9B,IAAAC,EAAsBD,EAAKC,MAApBC,EAAeF,EAAKG,MAApBA,OAAQ,IAAAD,EAAA,KACvB,OACEE,uBAAKC,UAAU,iBAAiBJ,MAAOA,GACrCG,EAAAE,cAAA,MAAA,CACEC,OAAO,MACPC,QAAQ,aACRP,MAAO,CAAEQ,cAAe,aAExBL,EAAAE,cAAA,IAAA,CAAGI,OAAO,OAAOC,YAAY,IAAIC,KAAK,OAAOC,SAAS,WACpDT,EAAGE,cAAA,IAAA,CAAAQ,UAAU,sCACXV,EAAGE,cAAA,IAAA,CAAAQ,UAAU,mCACXV,EAAGE,cAAA,IAAA,CAAAQ,UAAU,iCACV,CAAC,EAAG,EAAG,GAAGC,KAAI,SAAAC,GAAK,OAClBZ,EACEE,cAAA,OAAA,CAAAW,IAAKD,EACLJ,KAAK,eACLM,EAAG,GAAKF,EAAIb,EACZgB,EAAE,KACFC,MAAM,IACNb,OAAO,IACPc,GAAG,KAEHjB,EACEE,cAAA,UAAA,CAAAgB,cAAc,IACdC,KAAK,KACLC,GAAG,KACHC,IAAI,KACJC,MAAO,GAAGC,OAAI,GAAJX,EAAU,KACpBY,YAAY,aACZC,OAAO,oBACPC,SAAS,wBAGd,SAQjB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__read as e}from"../node_modules/tslib/tslib.es6.js";import t,{useState as
|
|
1
|
+
import{__read as e}from"../node_modules/tslib/tslib.es6.js";import t,{useState as o,useRef as n,useEffect as r}from"react";import a from"classnames";import{Button as s}from"@tarojs/components";import{useTaroEnv as i}from"../src/hooks/index.js";import l from"./DotJump.js";var m=function(m){var u=m.disabled,d=void 0!==u&&u,p=m.type,c=void 0===p?"default":p,h=m.size,b=void 0===h?"normal":h,g=m.shape,f=void 0===g?"round":g,x=m.children,y=m.className,v=m.htmlType,P=m.formType,T=m.text,E=m.openType,M=m.lang,C=m.sessionFrom,w=m.sendMessageTitle,I=m.sendMessagePath,N=m.sendMessageImg,j=m.showMessageCard,k=m.appParameter,G=m.onGetUserInfo,S=m.onGetPhoneNumber,W=m.onOpenSetting,q=m.onError,A=m.onContact,D=m.onClick,F=m.preventTime,O=void 0===F?2500:F,U=m.style,z=m.loading,B=m.loadingStyle,J=m.loadingSpace,_=i(),H=e(o(!1),2),K=H[0],L=H[1],Q=n(),R=a("xh-button",{"xh-button-default":"default"===c,"xh-button-primary":"primary"===c,"xh-button-secondary":"secondary"===c,"xh-button-ghost":"ghost"===c,"xh-button-warn":"warn"===c,"xh-button-square":"square"===f,"xh-button-round":"round"===f,"xh-button-rectangle":"rectangle"===f,"xh-button-normal":"normal"===b,"xh-button-small":"mini"===b,"xh-button-full":"full"===b,"xh-button-disabled":d,"xh-button-webutton":"WEAPP"===_},y),V=function(e){"WEB"===_&&e.nativeEvent.stopImmediatePropagation(),e.preventDefault(),K&&0!==O||(0!==O&&(Q.current=setTimeout((function(){L(!1),clearTimeout(Q.current)}),O)),0!==O&&L(!0),D&&D(e))};r((function(){return function(){clearTimeout(Q.current)}}),[]);var X=t.createElement(s,{className:R,formType:P,openType:E,lang:M,type:c,sessionFrom:C,sendMessageTitle:w,sendMessagePath:I,sendMessageImg:N,showMessageCard:j,appParameter:k,onGetUserInfo:G,onGetPhoneNumber:S,onOpenSetting:W,onError:q,onContact:A,onClick:V,disabled:d,style:U,loading:z},x);return"WEAPP"===_?X:t.createElement("button",{className:R,disabled:d,type:v,onClick:d?void 0:V,style:U},x||T,z&&t.createElement(l,{style:B,space:J}))};export{m as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Button/index.tsx"],"sourcesContent":["import React, {\n FC,\n MouseEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { Button } from \"@tarojs/components\";\nimport { ButtonProps } from \"@tarojs/components/types/Button\";\nimport {\n ITouchEvent,\n TouchEventFunction,\n} from \"@tarojs/components/types/common\";\n\nimport { useTaroEnv } from \"../../hooks\";\nimport \"./index.scss\";\n\nexport type ButtonType = \"default\" | \"secondary\" | \"primary\" | \"warn\" | \"ghost\";\n\nexport type ButtonShape = \"square\" | \"round\" | \"rectangle\";\n\nexport type ButtonSize = \"default\" | \"mini\" | \"full\";\n\nexport type WechatOpenType =\n | \"contact\"\n /** 触发用户转发,使用前建议先阅读使用指引\n * @see https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html#%E4%BD%BF%E7%94%A8%E6%8C%87%E5%BC%95\n */\n | \"share\"\n /** 获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息\n * @see https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html\n */\n | \"getPhoneNumber\"\n /** 获取用户信息,可以从 bindgetuserinfo 回调中获取到用户信息 */\n | \"getUserInfo\"\n /** 用户实名信息授权,已经弃用 */\n | \"getRealnameAuthInfo\"\n /** 打开APP,可以通过app-parameter属性设定向APP传的参数\n * @see https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.html\n */\n | \"launchApp\"\n /** 打开授权设置页 */\n | \"openSetting\"\n /** 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容 */\n | \"feedback\";\nexport type XhButtonProps = {\n htmlType?: \"button\" | \"submit\" | \"reset\";\n type?: ButtonType;\n size?: ButtonSize;\n shape?: ButtonShape;\n disabled?: boolean;\n className?: string;\n styleName?: string;\n text?: string;\n preventTime?: number;\n onClick?: (e: ITouchEvent | MouseEvent) => void;\n style?: React.CSSProperties;\n} & Omit<ButtonProps, \"type\" | \"size\">;\n\nconst XhButton: FC<XhButtonProps> = props => {\n const {\n disabled = false,\n type = \"default\",\n size = \"normal\",\n shape = \"round\",\n children,\n className,\n htmlType,\n formType,\n text,\n openType,\n lang,\n sessionFrom,\n sendMessageTitle,\n sendMessagePath,\n sendMessageImg,\n showMessageCard,\n appParameter,\n onGetUserInfo,\n onGetPhoneNumber,\n onOpenSetting,\n onError,\n onContact,\n onClick,\n preventTime = 2500,\n style,\n } = props;\n const state = useTaroEnv();\n const [preventClick, setPreventClick] = useState(false);\n const timer = useRef<NodeJS.Timeout | undefined>();\n const classObj = classNames(\n \"xh-button\",\n {\n \"xh-button-default\": type === \"default\",\n \"xh-button-primary\": type === \"primary\",\n \"xh-button-secondary\": type === \"secondary\",\n \"xh-button-ghost\": type === \"ghost\",\n \"xh-button-warn\": type === \"warn\",\n \"xh-button-square\": shape === \"square\",\n \"xh-button-round\": shape === \"round\",\n \"xh-button-rectangle\": shape === \"rectangle\",\n \"xh-button-normal\": size === \"normal\",\n \"xh-button-small\": size === \"mini\",\n \"xh-button-full\": size === \"full\",\n \"xh-button-disabled\": disabled,\n \"xh-button-webutton\": state === \"WEAPP\",\n },\n className\n );\n\n const handleClick: MouseEventHandler & TouchEventFunction = e => {\n state === \"WEB\" && e.nativeEvent.stopImmediatePropagation();\n e.preventDefault();\n\n if (preventClick && preventTime !== 0) {\n console.log(\"重复点击\");\n return;\n }\n if (preventTime !== 0) {\n timer.current = setTimeout(() => {\n setPreventClick(false);\n clearTimeout(timer.current);\n }, preventTime);\n }\n if (preventTime !== 0) setPreventClick(true);\n console.log(\"正常点击\");\n onClick && onClick(e);\n };\n\n useEffect(() => {\n return () => {\n clearTimeout(timer.current);\n };\n }, []);\n\n const weButton = (\n <Button\n className={classObj}\n formType={formType}\n openType={openType}\n lang={lang}\n type={type as ButtonProps[\"type\"]}\n sessionFrom={sessionFrom}\n sendMessageTitle={sendMessageTitle}\n sendMessagePath={sendMessagePath}\n sendMessageImg={sendMessageImg}\n showMessageCard={showMessageCard}\n appParameter={appParameter}\n onGetUserInfo={onGetUserInfo}\n onGetPhoneNumber={onGetPhoneNumber}\n onOpenSetting={onOpenSetting}\n onError={onError}\n onContact={onContact}\n onClick={handleClick}\n disabled={disabled}\n style={style}\n >\n {children}\n </Button>\n );\n\n if (state === \"WEAPP\") {\n return weButton;\n }\n\n return (\n // eslint-disable-next-line react/button-has-type\n <button\n className={classObj}\n disabled={disabled}\n type={htmlType}\n onClick={disabled ? undefined : handleClick}\n style={style}\n >\n {children || text}\n </button>\n );\n};\n\nexport default XhButton;\n"],"names":["XhButton","props","_a","disabled","_b","type","_c","size","_d","shape","children","className","htmlType","formType","text","openType","lang","sessionFrom","sendMessageTitle","sendMessagePath","sendMessageImg","showMessageCard","appParameter","onGetUserInfo","onGetPhoneNumber","onOpenSetting","onError","onContact","onClick","_e","preventTime","style","state","useTaroEnv","_f","__read","useState","preventClick","setPreventClick","timer","useRef","classObj","classNames","handleClick","e","nativeEvent","stopImmediatePropagation","preventDefault","current","setTimeout","clearTimeout","useEffect","weButton","React","Button","createElement","undefined"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Button/index.tsx"],"sourcesContent":["import React, {\n FC,\n MouseEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { Button } from \"@tarojs/components\";\nimport { ButtonProps } from \"@tarojs/components/types/Button\";\nimport {\n ITouchEvent,\n TouchEventFunction,\n} from \"@tarojs/components/types/common\";\n\nimport { useTaroEnv } from \"../../hooks\";\nimport \"./index.scss\";\nimport DotJump from \"./DotJump\";\n\nexport type ButtonType = \"default\" | \"secondary\" | \"primary\" | \"warn\" | \"ghost\";\n\nexport type ButtonShape = \"square\" | \"round\" | \"rectangle\";\n\nexport type ButtonSize = \"default\" | \"mini\" | \"full\";\n\nexport type WechatOpenType =\n | \"contact\"\n /** 触发用户转发,使用前建议先阅读使用指引\n * @see https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html#%E4%BD%BF%E7%94%A8%E6%8C%87%E5%BC%95\n */\n | \"share\"\n /** 获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息\n * @see https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html\n */\n | \"getPhoneNumber\"\n /** 获取用户信息,可以从 bindgetuserinfo 回调中获取到用户信息 */\n | \"getUserInfo\"\n /** 用户实名信息授权,已经弃用 */\n | \"getRealnameAuthInfo\"\n /** 打开APP,可以通过app-parameter属性设定向APP传的参数\n * @see https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.html\n */\n | \"launchApp\"\n /** 打开授权设置页 */\n | \"openSetting\"\n /** 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容 */\n | \"feedback\";\nexport type XhButtonProps = {\n htmlType?: \"button\" | \"submit\" | \"reset\";\n type?: ButtonType;\n size?: ButtonSize;\n shape?: ButtonShape;\n disabled?: boolean;\n className?: string;\n styleName?: string;\n text?: string;\n preventTime?: number;\n onClick?: (e: ITouchEvent | MouseEvent) => void;\n style?: React.CSSProperties;\n loading?: boolean;\n loadingStyle?: React.CSSProperties;\n loadingSpace?: number;\n} & Omit<ButtonProps, \"type\" | \"size\">;\n\nconst XhButton: FC<XhButtonProps> = props => {\n const {\n disabled = false,\n type = \"default\",\n size = \"normal\",\n shape = \"round\",\n children,\n className,\n htmlType,\n formType,\n text,\n openType,\n lang,\n sessionFrom,\n sendMessageTitle,\n sendMessagePath,\n sendMessageImg,\n showMessageCard,\n appParameter,\n onGetUserInfo,\n onGetPhoneNumber,\n onOpenSetting,\n onError,\n onContact,\n onClick,\n preventTime = 2500,\n style,\n loading,\n loadingStyle,\n loadingSpace,\n } = props;\n const state = useTaroEnv();\n const [preventClick, setPreventClick] = useState(false);\n const timer = useRef<NodeJS.Timeout | undefined>();\n const classObj = classNames(\n \"xh-button\",\n {\n \"xh-button-default\": type === \"default\",\n \"xh-button-primary\": type === \"primary\",\n \"xh-button-secondary\": type === \"secondary\",\n \"xh-button-ghost\": type === \"ghost\",\n \"xh-button-warn\": type === \"warn\",\n \"xh-button-square\": shape === \"square\",\n \"xh-button-round\": shape === \"round\",\n \"xh-button-rectangle\": shape === \"rectangle\",\n \"xh-button-normal\": size === \"normal\",\n \"xh-button-small\": size === \"mini\",\n \"xh-button-full\": size === \"full\",\n \"xh-button-disabled\": disabled,\n \"xh-button-webutton\": state === \"WEAPP\",\n },\n className\n );\n\n const handleClick: MouseEventHandler & TouchEventFunction = e => {\n state === \"WEB\" && e.nativeEvent.stopImmediatePropagation();\n e.preventDefault();\n\n if (preventClick && preventTime !== 0) {\n console.log(\"重复点击\");\n return;\n }\n if (preventTime !== 0) {\n timer.current = setTimeout(() => {\n setPreventClick(false);\n clearTimeout(timer.current);\n }, preventTime);\n }\n if (preventTime !== 0) setPreventClick(true);\n console.log(\"正常点击\");\n onClick && onClick(e);\n };\n\n useEffect(() => {\n return () => {\n clearTimeout(timer.current);\n };\n }, []);\n\n const weButton = (\n <Button\n className={classObj}\n formType={formType}\n openType={openType}\n lang={lang}\n type={type as ButtonProps[\"type\"]}\n sessionFrom={sessionFrom}\n sendMessageTitle={sendMessageTitle}\n sendMessagePath={sendMessagePath}\n sendMessageImg={sendMessageImg}\n showMessageCard={showMessageCard}\n appParameter={appParameter}\n onGetUserInfo={onGetUserInfo}\n onGetPhoneNumber={onGetPhoneNumber}\n onOpenSetting={onOpenSetting}\n onError={onError}\n onContact={onContact}\n onClick={handleClick}\n disabled={disabled}\n style={style}\n loading={loading}\n >\n {children}\n </Button>\n );\n\n if (state === \"WEAPP\") {\n return weButton;\n }\n\n return (\n // eslint-disable-next-line react/button-has-type\n <button\n className={classObj}\n disabled={disabled}\n type={htmlType}\n onClick={disabled ? undefined : handleClick}\n style={style}\n >\n {children || text}\n {loading && <DotJump style={loadingStyle} space={loadingSpace} />}\n </button>\n );\n};\n\nexport default XhButton;\n"],"names":["XhButton","props","_a","disabled","_b","type","_c","size","_d","shape","children","className","htmlType","formType","text","openType","lang","sessionFrom","sendMessageTitle","sendMessagePath","sendMessageImg","showMessageCard","appParameter","onGetUserInfo","onGetPhoneNumber","onOpenSetting","onError","onContact","onClick","_e","preventTime","style","loading","loadingStyle","loadingSpace","state","useTaroEnv","_f","__read","useState","preventClick","setPreventClick","timer","useRef","classObj","classNames","handleClick","e","nativeEvent","stopImmediatePropagation","preventDefault","current","setTimeout","clearTimeout","useEffect","weButton","React","Button","createElement","undefined","DotJump","space"],"mappings":"gRAgEM,IAAAA,EAA8B,SAAAC,GAEhC,IAAAC,EA4BED,EAAKE,SA5BPA,cAAgBD,EAChBE,EA2BEH,EA3BcI,KAAhBA,OAAI,IAAAD,EAAG,UAASA,EAChBE,EA0BEL,OA1BFM,OAAO,IAAAD,EAAA,WACPE,EAyBEP,EAAKQ,MAzBPA,OAAK,IAAAD,EAAG,QAAOA,EACfE,EAwBET,EAAKS,SAvBPC,EAuBEV,EAAKU,UAtBPC,EAsBEX,EAAKW,SArBPC,EAqBEZ,EAAKY,SApBPC,EAoBEb,EAAKa,KAnBPC,EAmBEd,EAAKc,SAlBPC,EAkBEf,EAAKe,KAjBPC,EAiBEhB,EAjBSgB,YACXC,EAgBEjB,EAhBciB,iBAChBC,EAeElB,EAfakB,gBACfC,EAcEnB,EAdYmB,eACdC,EAaEpB,EAbaoB,gBACfC,EAYErB,EAZUqB,aACZC,EAWEtB,EAXWsB,cACbC,EAUEvB,EAVcuB,iBAChBC,EASExB,gBARFyB,EAQEzB,EAAKyB,QAPPC,EAOE1B,EAAK0B,UANPC,EAME3B,EAAK2B,QALPC,EAKE5B,EALgB6B,YAAlBA,OAAW,IAAAD,EAAG,KAAIA,EAClBE,EAIE9B,EAJG8B,MACLC,EAGE/B,EAHK+B,QACPC,EAEEhC,EAFUgC,aACZC,EACEjC,eACEkC,EAAQC,IACRC,EAAAC,EAAkCC,GAAS,GAAM,GAAhDC,EAAYH,EAAA,GAAEI,OACfC,EAAQC,IACRC,EAAWC,EACf,YACA,CACE,oBAA8B,YAATxC,EACrB,oBAA8B,YAATA,EACrB,sBAAgC,cAATA,EACvB,kBAA4B,UAATA,EACnB,iBAA2B,SAATA,EAClB,mBAA8B,WAAVI,EACpB,kBAA6B,UAAVA,EACnB,sBAAiC,cAAVA,EACvB,mBAA6B,WAATF,EACpB,kBAA4B,SAATA,EACnB,iBAA2B,SAATA,EAClB,qBAAsBJ,EACtB,qBAAgC,UAAVgC,GAExBxB,GAGImC,EAAsD,SAAAC,GAChD,QAAVZ,GAAmBY,EAAEC,YAAYC,2BACjCF,EAAEG,iBAEEV,GAAgC,IAAhBV,IAIA,IAAhBA,IACFY,EAAMS,QAAUC,YAAW,WACzBX,GAAgB,GAChBY,aAAaX,EAAMS,QACpB,GAAErB,IAEe,IAAhBA,GAAmBW,GAAgB,GAEvCb,GAAWA,EAAQmB,GACrB,EAEAO,GAAU,WACR,OAAO,WACLD,aAAaX,EAAMS,QACrB,CACD,GAAE,IAEH,IAAMI,EACJC,gBAACC,EAAM,CACL9C,UAAWiC,EACX/B,SAAUA,EACVE,SAAUA,EACVC,KAAMA,EACNX,KAAMA,EACNY,YAAaA,EACbC,iBAAkBA,EAClBC,gBAAiBA,EACjBC,eAAgBA,EAChBC,gBAAiBA,EACjBC,aAAcA,EACdC,cAAeA,EACfC,iBAAkBA,EAClBC,cAAeA,EACfC,QAASA,EACTC,UAAWA,EACXC,QAASkB,EACT3C,SAAUA,EACV4B,MAAOA,EACPC,QAASA,GAERtB,GAIL,MAAc,UAAVyB,EACKoB,EAKPC,EACEE,cAAA,SAAA,CAAA/C,UAAWiC,EACXzC,SAAUA,EACVE,KAAMO,EACNgB,QAASzB,OAAWwD,EAAYb,EAChCf,MAAOA,GAENrB,GAAYI,EACZkB,GAAWwB,EAAAE,cAACE,EAAO,CAAC7B,MAAOE,EAAc4B,MAAO3B,IAGvD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__rest as e,__read as o,__assign as r}from"../node_modules/tslib/tslib.es6.js";import l,{useRef as t,useState as n,useMemo as a}from"react";import s from"../List/index.js";import{View as c}from"@tarojs/components";import i from"classnames";var m=function(m){var u=m.summary,p=void 0===u?"":u,d=m.children,h=m.open,f=void 0!==h&&h;m.arrow;var v=m.className,g=m.style,y=m.onToggle,x=e(m,["summary","children","open","arrow","className","style","onToggle"]),N=t(null),b=o(n(f),2),w=b[0],E=b[1],j=a((function(){var e,o,r={height:0};return w&&(r.height="".concat(null===(e=N.current)||void 0===e?void 0:e.scrollHeight,"px")),w&&(null===(o=N.current)||void 0===o||o.scrollIntoView({behavior:"smooth",block:"end",inline:"nearest"})),null==y||y(w),r}),[w]);return l.createElement(c,{className:i("xh-collapse",v),style:g},l.createElement(c,{className:i("xh-collapse-summary",{open:w}),onClick:function(){E((function(e){return!e}))}},p||l.createElement(s,r({},x,{arrow:!0}))),l.createElement(c,{className:i("xh-collapse-detail"),ref:N,style:j},d))};export{m as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Collapse/index.tsx"],"sourcesContent":["import React, { ReactNode, useMemo, useRef, useState } from \"react\";\nimport { XHComponentCommonProps } from \"@/types\";\nimport List, { XHListProps } from \"@/components/List\";\nimport { View } from \"@tarojs/components\";\nimport classNames from \"classnames\";\n\nimport \"./index.scss\";\n\nexport type CollapseProps = {\n summary?: string | ReactNode;\n open?: boolean;\n style?: React.CSSProperties;\n onToggle?: (open: boolean) => void;\n} & XHComponentCommonProps &\n XHListProps;\n\nconst Collapse: React.FC<CollapseProps> = props => {\n const {\n summary = \"\",\n children,\n open = false,\n arrow,\n className,\n style,\n onToggle,\n ...rest\n } = props;\n const detailRef = useRef<HTMLDivElement>(null);\n const [innerOpen, setInneropen] = useState(open);\n const handleOnchange = () => {\n setInneropen(old => !old);\n };\n\n const detailStyle = useMemo(() => {\n const style: React.CSSProperties = { height: 0 };\n if (innerOpen) style.height = `${detailRef!.current?.scrollHeight}px`;\n innerOpen &&\n detailRef.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"end\",\n inline: \"nearest\",\n });\n onToggle?.(innerOpen);\n return style;\n }, [innerOpen]);\n\n return (\n <View className={classNames(\"xh-collapse\", className)} style={style}>\n <View\n className={classNames(\"xh-collapse-summary\", { open: innerOpen })}\n onClick={handleOnchange}\n >\n {summary || <List {...rest} arrow />}\n </View>\n <View\n className={classNames(\"xh-collapse-detail\")}\n ref={detailRef}\n style={detailStyle}\n >\n {children}\n </View>\n </View>\n );\n};\n\nexport default Collapse;\n"],"names":["Collapse","props","_a","summary","children","_b","open","arrow","className","style","onToggle","rest","detailRef","useRef","_c","__read","useState","innerOpen","setInneropen","detailStyle","useMemo","height","concat","current","scrollHeight","scrollIntoView","behavior","block","inline","React","createElement","View","classNames","onClick","old","List","__assign","ref"],"mappings":"uPAgBM,IAAAA,EAAoC,SAAAC,GAEtC,IAAAC,EAQED,EARUE,QAAZA,OAAU,IAAAD,EAAA,GAAEA,EACZE,EAOEH,EAPMG,SACRC,EAMEJ,EAAKK,KANPA,OAAI,IAAAD,GAAQA,EAMVJ,EAAKM,MAJP,IAAAC,EAIEP,EAJOO,UACTC,EAGER,EAAKQ,MAFPC,EAEET,EAAKS,SADJC,IACDV,EATE,CASL,UAAA,WAAA,OAAA,QAAA,YAAA,QAAA,aACKW,EAAYC,EAAuB,MACnCC,EAAAC,EAA4BC,EAASV,GAAK,GAAzCW,EAASH,EAAA,GAAEI,OAKZC,EAAcC,GAAQ,mBACpBX,EAA6B,CAAEY,OAAQ,GAS7C,OARIJ,IAAWR,EAAMY,OAAS,GAAGC,OAAkB,QAAlBpB,EAAAU,EAAWW,eAAO,IAAArB,OAAA,EAAAA,EAAEsB,aAAY,OACjEP,IACmB,QAAjBZ,EAAAO,EAAUW,eAAO,IAAAlB,GAAAA,EAAEoB,eAAe,CAChCC,SAAU,SACVC,MAAO,MACPC,OAAQ,aAEZlB,SAAAA,EAAWO,GACJR,CACT,GAAG,CAACQ,IAEJ,OACEY,EAAAC,cAACC,EAAI,CAACvB,UAAWwB,EAAW,cAAexB,GAAYC,MAAOA,GAC5DoB,EAAAC,cAACC,EAAI,CACHvB,UAAWwB,EAAW,sBAAuB,CAAE1B,KAAMW,IACrDgB,QArBiB,WACrBf,GAAa,SAAAgB,GAAO,OAACA,CAAG,GAC1B,GAqBO/B,GAAW0B,EAAAC,cAACK,EAAIC,EAAA,GAAKzB,EAAI,CAAEJ,OAAK,MAEnCsB,EAACC,cAAAC,GACCvB,UAAWwB,EAAW,sBACtBK,IAAKzB,EACLH,MAAOU,GAENf,GAIT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__rest as e,__read as t,__spreadArray as n,__assign as r}from"../node_modules/tslib/tslib.es6.js";import a,{useState as
|
|
1
|
+
import{__rest as e,__read as t,__spreadArray as n,__assign as r}from"../node_modules/tslib/tslib.es6.js";import a,{useState as o,useRef as i,useEffect as c}from"react";import l from"classnames";import u from"../Popup/index.js";import s from"./PickerSlot.js";import f from"../src/hooks/useRefs.js";var d=a.forwardRef((function(d,p){var m=d.visible,h=void 0!==m&&m,v=d.title,y=d.data,g=void 0===y?[]:y,k=d.defaultValueData,b=d.onConfirm,x=d.onClose;d.onCloseUpdate;var C=d.onChange,E=d.className,j=d.style,N=d.mode,w=d.swipeDuration,D=e(d,["visible","title","data","defaultValueData","onConfirm","onClose","onCloseUpdate","onChange","className","style","mode","swipeDuration"]),P=t(o([]),2),S=P[0],V=P[1],A=t(o(0),2),I=A[0],R=A[1],U=i(null),M=t(f(),2),O=M[0],T=M[1],_=t(o([]),2),q=_[0],z=_[1],B=i(!1);c((function(){if(k&&0!==k.length&&k.toString()!==S.toString()){var e=n([],t(k),!1);V(e),z(K())}}),[k]),c((function(){C&&C(I,S,H()),B.current&&(B.current=!1,b&&b(H(),I))}),[S]),c((function(){W()}),[g]);var F=function(e){e.stopPropagation(),x&&x()},G=function(e){e.stopPropagation();var t=!1;O.forEach((function(e){e.moving&&(t=!0),e.stopMomentum()})),t?B.current=!0:b&&b(H(),I),x&&x(),setTimeout((function(){B.current=!1}),0)},H=function(){var e=[];return q.forEach((function(t,n){var r;return(r=t.filter((function(e){return("object"==typeof e?e.value:e)===S[n]})))[0]?e.push(r[0]):t[0]&&e.push(t[0]),t})),e},J=function(e,r){if(e&&Object.keys(e).length&&S[r]!==("string"==typeof e?e:e.value)){if("cascade"===L()){S[r]="object"==typeof e?e.value:e||"",V(n([],t(S),!1));for(var a=r,o=e;"object"==typeof o&&o&&o.children&&o.children[0];)S[a+1]=o.children[0].value,V(n([],t(S),!1)),a++,o=o.children[0];"object"==typeof o&&o&&o.children&&(S[a+1]="",V(n([],t(S),!1))),z(K())}else V((function(a){var o=n([],t(a),!1);return o[r]=("string"==typeof e?e:e.value)||"",o}));R(r)}},K=function(){switch(L()){case"multiple":return g;case"cascade":return Q(g,S);default:return[g]}},L=function(){var e=g[0];if(e){if(Array.isArray(e))return"multiple";if("object"==typeof e&&"children"in e)return"cascade"}return"single"},Q=function(e,t){for(var n=[],r={text:"",value:"",children:e},a=0,o=function(){var e=r.children,o=t[a],i=e.findIndex((function(e){return e.value===o}));-1===i&&(i=0),r=r.children[i],a++,n.push(e)};r&&r.children;)o();return n},W=function(){var e=[],r=K();z(r),r.length>0&&r.forEach((function(t){var n=t[0];n&&e.push("string"==typeof n?n:n.value)})),k||0!==S.length||V(n([],t(e),!1))};return a.createElement(u,{visible:h},a.createElement("div",r({className:l("xh-picker",E),style:j,ref:p},D),a.createElement("div",{className:"xh-picker-header"},a.createElement("span",{className:"xh-picker-header-button picker-cancel",onClick:F},"取消"),a.createElement("div",{className:"xh-picker-header-title"},v||""),a.createElement("span",{className:"xh-picker-header-button picker-confirm",onClick:G},"确定")),a.createElement("div",{className:"xh-picker-panel",ref:U},null==q?void 0:q.map((function(e,t){return a.createElement(s,{ref:T(t),defaultValue:null==S?void 0:S[t],data:e,mode:N,onConfirm:J,swipeDuration:w,key:t,keyIndex:t})})))))}));export{d as default};
|
|
2
2
|
//# sourceMappingURL=Picker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Picker.js","sources":["../../../src/components/Picker/Picker.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n useRef,\n RefObject,\n ForwardRefRenderFunction,\n ReactNode,\n} from \"react\";\nimport classNames from \"classnames\";\n\nimport Popup from \"../Popup\";\nimport PickerSlot from \"../PickerSlot\";\nimport useRefs from \"../../hooks/useRefs\";\n\nexport interface PickerOption {\n text: string | number;\n value: string | number;\n children?: PickerOption[];\n}\n\nexport type PickerValue = string | PickerOption;\nexport interface PickerProps<T extends PickerValue = PickerValue> {\n visible: boolean;\n title?: ReactNode | string;\n data: (T | T[])[];\n defaultValueData?: (number | string)[];\n className?: string;\n style?: React.CSSProperties;\n mode?: \"normal\" | \"3D\";\n swipeDuration: number | string;\n onConfirm?: (selectedValue: T[], index: number) => void;\n onCancel?: () => void;\n onClose?: () => void;\n onCloseUpdate?: (\n selectedValue: (string | number)[],\n list: PickerOption[],\n pickerRef: RefObject<HTMLDivElement>\n ) => void;\n onChange?: (\n index: number,\n value: (string | number)[],\n selectedOptions: PickerValue[]\n ) => void;\n}\n\nconst InternalPicker: ForwardRefRenderFunction<HTMLDivElement, PickerProps> = (\n props,\n ref\n) => {\n const {\n visible,\n title,\n data = [],\n defaultValueData,\n onConfirm,\n onClose,\n onCloseUpdate,\n onChange,\n className,\n style,\n mode,\n swipeDuration,\n ...rest\n } = props;\n\n const [chooseValueData, setchooseValueData] = useState<\n Array<string | number>\n >([]); // 选择的数据的 value 值, 每一条数据的 value 值\n const [columnIndex, setcolumnIndex] = useState<number>(0); // 选中列\n const pickerRef = useRef<any>(null);\n const [refs, setRefs] = useRefs();\n const [columnsList, setColumnsList] = useState<PickerOption[][]>([]); // 格式化后每一列的数据\n\n const isConfirmEvent = useRef(false);\n\n // 默认值修改\n useEffect(() => {\n if (\n defaultValueData &&\n defaultValueData.length !== 0 &&\n defaultValueData.toString() !== chooseValueData.toString()\n ) {\n const data = [...defaultValueData];\n setchooseValueData(data);\n setColumnsList(normalListData() as PickerOption[][]);\n }\n }, [defaultValueData]);\n\n // 选中值进行修改\n useEffect(() => {\n onChange && onChange(columnIndex, chooseValueData, selectedOptions());\n if (isConfirmEvent.current) {\n isConfirmEvent.current = false;\n onConfirm && onConfirm(selectedOptions(), columnIndex);\n }\n }, [chooseValueData]);\n\n // 列表格式修改\n useEffect(() => {\n init();\n }, [data]);\n\n const closeActionSheet: React.MouseEventHandler<HTMLSpanElement> = e => {\n e.stopPropagation();\n onClose && onClose();\n // onCloseUpdate &&\n // onCloseUpdate(chooseValueData, selectedOptions(), pickerRef);\n };\n // 点击确定\n const confirm: React.MouseEventHandler<HTMLSpanElement> = e => {\n e.stopPropagation();\n let movings = false;\n refs.forEach((_ref: any) => {\n if (_ref.moving) movings = true;\n _ref.stopMomentum();\n });\n\n if (movings) {\n isConfirmEvent.current = true;\n } else {\n onConfirm && onConfirm(selectedOptions(), columnIndex);\n }\n\n onClose && onClose();\n\n setTimeout(() => {\n isConfirmEvent.current = false;\n }, 0);\n };\n\n const selectedOptions = () => {\n const optins: PickerValue[] = [];\n columnsList.map((column: PickerValue[], index: number) => {\n let currOptions: Array<PickerValue> = [];\n currOptions = column.filter(\n item =>\n (typeof item === \"object\" ? item.value : item) ===\n chooseValueData[index]\n );\n if (currOptions[0]) {\n optins.push(currOptions[0]);\n } else {\n column[0] && optins.push(column[0]);\n }\n\n return column;\n });\n\n return optins;\n };\n\n // 选择每一列的数据\n const chooseItem = (option: PickerValue, columnIndex: number) => {\n if (option && Object.keys(option).length) {\n // 移动后是否与之前有差异\n if (\n chooseValueData[columnIndex] !==\n (typeof option === \"string\" ? option : option.value)\n ) {\n if (columnsType() === \"cascade\") {\n chooseValueData[columnIndex] =\n typeof option === \"object\" ? option.value : option || \"\";\n setchooseValueData([...chooseValueData]);\n\n let index = columnIndex;\n let cursor = option;\n while (\n typeof cursor === \"object\" &&\n cursor &&\n cursor.children &&\n cursor.children[0]\n ) {\n chooseValueData[index + 1] = cursor.children[0].value;\n setchooseValueData([...chooseValueData]);\n index++;\n cursor = cursor.children[0];\n }\n // 当前改变列的下一列 children 值为空\n if (typeof cursor === \"object\" && cursor && cursor.children) {\n chooseValueData[index + 1] = \"\";\n setchooseValueData([...chooseValueData]);\n }\n\n setColumnsList(normalListData() as PickerOption[][]);\n } else {\n setchooseValueData(data => {\n const cdata = [...data];\n cdata[columnIndex] =\n (typeof option === \"string\" ? option : option.value) || \"\";\n return cdata;\n });\n }\n setcolumnIndex(columnIndex);\n }\n }\n };\n // 传入的数据格式化\n const normalListData = () => {\n const type = columnsType();\n switch (type) {\n case \"multiple\":\n return data;\n case \"cascade\":\n // 级联数据处理\n return formatCascade(data as PickerOption[], chooseValueData);\n default:\n return [data];\n }\n };\n // 每一列的类型\n const columnsType = () => {\n const firstColumn = data[0];\n if (firstColumn) {\n if (Array.isArray(firstColumn)) {\n return \"multiple\";\n }\n if (typeof firstColumn === \"object\" && \"children\" in firstColumn) {\n return \"cascade\";\n }\n }\n return \"single\";\n };\n\n // 级联数据格式化\n const formatCascade = (\n columns: PickerOption[],\n defaultValues: (number | string)[]\n ) => {\n const formatted: PickerOption[][] = [];\n let cursor: PickerOption = {\n text: \"\",\n value: \"\",\n children: columns,\n };\n\n let columnIndex = 0;\n\n while (cursor && cursor.children) {\n const options: PickerOption[] = cursor.children;\n const value = defaultValues[columnIndex];\n let index = options.findIndex(columnItem => columnItem.value === value);\n if (index === -1) index = 0;\n cursor = cursor.children[index];\n\n columnIndex++;\n formatted.push(options);\n }\n\n return formatted;\n };\n\n const init = () => {\n const data: (string | number)[] = [];\n\n const normalData: PickerOption[][] = normalListData() as PickerOption[][];\n\n setColumnsList(normalData);\n\n normalData.length > 0 &&\n normalData.forEach(item => {\n const perItem = item[0];\n perItem &&\n data.push(typeof perItem === \"string\" ? perItem : perItem.value);\n });\n\n if (!defaultValueData && chooseValueData.length === 0) {\n setchooseValueData([...data]);\n }\n };\n\n const renderToolbar = () => {\n return (\n <div className=\"xh-picker-header\">\n <span\n className=\"xh-picker-header-button picker-cancel\"\n onClick={closeActionSheet}\n >\n 取消\n </span>\n <div className=\"xh-picker-header-title\">{title || \"\"}</div>\n <span\n className=\"xh-picker-header-button picker-confirm\"\n onClick={confirm}\n >\n 确定\n </span>\n </div>\n );\n };\n return (\n <Popup visible={visible}>\n <div\n className={classNames(\"xh-picker\", className)}\n style={style}\n ref={ref}\n {...rest}\n >\n {renderToolbar()}\n <div className=\"xh-picker-panel\" ref={pickerRef}>\n {columnsList?.map((item, index) => {\n return (\n <PickerSlot\n ref={setRefs(index)}\n defaultValue={chooseValueData?.[index]}\n data={item}\n mode={mode}\n onConfirm={chooseItem}\n swipeDuration={swipeDuration}\n key={index}\n keyIndex={index}\n />\n );\n })}\n </div>\n </div>\n </Popup>\n );\n};\n\nconst Picker = React.forwardRef<unknown, Partial<PickerProps>>(InternalPicker);\nexport default Picker;\n"],"names":["Picker","React","forwardRef","props","ref","visible","title","_a","data","defaultValueData","onConfirm","onClose","onCloseUpdate","onChange","className","style","mode","swipeDuration","rest","__rest","_b","__read","useState","chooseValueData","setchooseValueData","_c","columnIndex","setcolumnIndex","pickerRef","useRef","_d","useRefs","refs","setRefs","_e","columnsList","setColumnsList","isConfirmEvent","useEffect","length","toString","data_1","__spreadArray","normalListData","selectedOptions","current","init","closeActionSheet","e","stopPropagation","confirm","movings","forEach","_ref","moving","stopMomentum","setTimeout","optins","map","column","index","currOptions","filter","item","value","push","chooseItem","option","Object","keys","columnsType","cursor","children","cdata","formatCascade","firstColumn","Array","isArray","columns","defaultValues","formatted","text","options","findIndex","columnItem","normalData","perItem","createElement","Popup","__assign","classNames","onClick","PickerSlot","defaultValue","key","keyIndex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Picker.js","sources":["../../../src/components/Picker/Picker.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n useRef,\n RefObject,\n ForwardRefRenderFunction,\n ReactNode,\n} from \"react\";\nimport classNames from \"classnames\";\n\nimport Popup from \"../Popup\";\nimport PickerSlot from \"./PickerSlot\";\nimport useRefs from \"../../hooks/useRefs\";\n\nexport interface PickerOption {\n text: string | number;\n value: string | number;\n children?: PickerOption[];\n}\n\nexport type PickerValue = string | PickerOption;\nexport interface PickerProps<T extends PickerValue = PickerValue> {\n visible?: boolean;\n title?: ReactNode | string;\n data: (T | T[])[];\n defaultValueData?: (string | number)[];\n className?: string;\n style?: React.CSSProperties;\n mode?: \"normal\" | \"3D\";\n swipeDuration?: number | string;\n onConfirm?: (selectedValue: T[], index: number) => void;\n onCancel?: () => void;\n onClose?: () => void;\n onCloseUpdate?: (\n selectedValue: (string | number)[],\n list: PickerOption[],\n pickerRef: RefObject<HTMLDivElement>\n ) => void;\n onChange?: (\n index: number,\n value: (string | number)[],\n selectedOptions: PickerValue[]\n ) => void;\n}\n\nconst InternalPicker: ForwardRefRenderFunction<HTMLDivElement, PickerProps> = (\n props,\n ref\n) => {\n const {\n visible = false,\n title,\n data = [],\n defaultValueData,\n onConfirm,\n onClose,\n onCloseUpdate,\n onChange,\n className,\n style,\n mode,\n swipeDuration,\n ...rest\n } = props;\n\n const [chooseValueData, setchooseValueData] = useState<\n Array<string | number>\n >([]); // 选择的数据的 value 值, 每一条数据的 value 值\n const [columnIndex, setcolumnIndex] = useState<number>(0); // 选中列\n const pickerRef = useRef<any>(null);\n const [refs, setRefs] = useRefs();\n const [columnsList, setColumnsList] = useState<PickerOption[][]>([]); // 格式化后每一列的数据\n\n const isConfirmEvent = useRef(false);\n\n // 默认值修改\n useEffect(() => {\n if (\n defaultValueData &&\n defaultValueData.length !== 0 &&\n defaultValueData.toString() !== chooseValueData.toString()\n ) {\n const data = [...defaultValueData];\n setchooseValueData(data);\n setColumnsList(normalListData() as PickerOption[][]);\n }\n }, [defaultValueData]);\n\n // 选中值进行修改\n useEffect(() => {\n onChange && onChange(columnIndex, chooseValueData, selectedOptions());\n if (isConfirmEvent.current) {\n isConfirmEvent.current = false;\n onConfirm && onConfirm(selectedOptions(), columnIndex);\n }\n }, [chooseValueData]);\n\n // 列表格式修改\n useEffect(() => {\n init();\n }, [data]);\n\n const closeActionSheet: React.MouseEventHandler<HTMLSpanElement> = e => {\n e.stopPropagation();\n onClose && onClose();\n // onCloseUpdate &&\n // onCloseUpdate(chooseValueData, selectedOptions(), pickerRef);\n };\n // 点击确定\n const confirm: React.MouseEventHandler<HTMLSpanElement> = e => {\n e.stopPropagation();\n let movings = false;\n refs.forEach((_ref: any) => {\n if (_ref.moving) movings = true;\n _ref.stopMomentum();\n });\n\n if (movings) {\n isConfirmEvent.current = true;\n } else {\n onConfirm && onConfirm(selectedOptions(), columnIndex);\n }\n\n onClose && onClose();\n\n setTimeout(() => {\n isConfirmEvent.current = false;\n }, 0);\n };\n\n const selectedOptions = () => {\n const optins: PickerValue[] = [];\n columnsList.forEach((column: PickerValue[], index: number) => {\n let currOptions: Array<PickerValue> = [];\n currOptions = column.filter(\n item =>\n (typeof item === \"object\" ? item.value : item) ===\n chooseValueData[index]\n );\n if (currOptions[0]) {\n optins.push(currOptions[0]);\n } else {\n column[0] && optins.push(column[0]);\n }\n\n return column;\n });\n\n return optins;\n };\n\n // 选择每一列的数据\n const chooseItem = (option: PickerValue, columnIndex: number) => {\n if (option && Object.keys(option).length) {\n // 移动后是否与之前有差异\n if (\n chooseValueData[columnIndex] !==\n (typeof option === \"string\" ? option : option.value)\n ) {\n if (columnsType() === \"cascade\") {\n chooseValueData[columnIndex] =\n typeof option === \"object\" ? option.value : option || \"\";\n setchooseValueData([...chooseValueData]);\n\n let index = columnIndex;\n let cursor = option;\n while (\n typeof cursor === \"object\" &&\n cursor &&\n cursor.children &&\n cursor.children[0]\n ) {\n chooseValueData[index + 1] = cursor.children[0].value;\n setchooseValueData([...chooseValueData]);\n index++;\n cursor = cursor.children[0];\n }\n // 当前改变列的下一列 children 值为空\n if (typeof cursor === \"object\" && cursor && cursor.children) {\n chooseValueData[index + 1] = \"\";\n setchooseValueData([...chooseValueData]);\n }\n\n setColumnsList(normalListData() as PickerOption[][]);\n } else {\n setchooseValueData(data => {\n const cdata = [...data];\n cdata[columnIndex] =\n (typeof option === \"string\" ? option : option.value) || \"\";\n return cdata;\n });\n }\n setcolumnIndex(columnIndex);\n }\n }\n };\n // 传入的数据格式化\n const normalListData = () => {\n const type = columnsType();\n switch (type) {\n case \"multiple\":\n return data;\n case \"cascade\":\n // 级联数据处理\n return formatCascade(data as PickerOption[], chooseValueData);\n default:\n return [data];\n }\n };\n // 每一列的类型\n const columnsType = () => {\n const firstColumn = data[0];\n if (firstColumn) {\n if (Array.isArray(firstColumn)) {\n return \"multiple\";\n }\n if (typeof firstColumn === \"object\" && \"children\" in firstColumn) {\n return \"cascade\";\n }\n }\n return \"single\";\n };\n\n // 级联数据格式化\n const formatCascade = (\n columns: PickerOption[],\n defaultValues: (number | string)[]\n ) => {\n const formatted: PickerOption[][] = [];\n let cursor: PickerOption = {\n text: \"\",\n value: \"\",\n children: columns,\n };\n\n let columnIndex = 0;\n\n while (cursor && cursor.children) {\n const options: PickerOption[] = cursor.children;\n const value = defaultValues[columnIndex];\n let index = options.findIndex(columnItem => columnItem.value === value);\n if (index === -1) index = 0;\n cursor = cursor.children[index];\n\n columnIndex++;\n formatted.push(options);\n }\n\n return formatted;\n };\n\n const init = () => {\n const data: (string | number)[] = [];\n\n const normalData: PickerOption[][] = normalListData() as PickerOption[][];\n\n setColumnsList(normalData);\n\n normalData.length > 0 &&\n normalData.forEach(item => {\n const perItem = item[0];\n perItem &&\n data.push(typeof perItem === \"string\" ? perItem : perItem.value);\n });\n\n if (!defaultValueData && chooseValueData.length === 0) {\n setchooseValueData([...data]);\n }\n };\n\n const renderToolbar = () => {\n return (\n <div className=\"xh-picker-header\">\n <span\n className=\"xh-picker-header-button picker-cancel\"\n onClick={closeActionSheet}\n >\n 取消\n </span>\n <div className=\"xh-picker-header-title\">{title || \"\"}</div>\n <span\n className=\"xh-picker-header-button picker-confirm\"\n onClick={confirm}\n >\n 确定\n </span>\n </div>\n );\n };\n return (\n <Popup visible={visible}>\n <div\n className={classNames(\"xh-picker\", className)}\n style={style}\n ref={ref}\n {...rest}\n >\n {renderToolbar()}\n <div className=\"xh-picker-panel\" ref={pickerRef}>\n {columnsList?.map((item, index) => {\n return (\n <PickerSlot\n ref={setRefs(index)}\n defaultValue={chooseValueData?.[index]}\n data={item}\n mode={mode}\n onConfirm={chooseItem}\n swipeDuration={swipeDuration}\n key={index}\n keyIndex={index}\n />\n );\n })}\n </div>\n </div>\n </Popup>\n );\n};\n\nconst Picker = React.forwardRef<unknown, Partial<PickerProps>>(InternalPicker);\nexport default Picker;\n"],"names":["Picker","React","forwardRef","props","ref","_a","visible","title","_b","data","defaultValueData","onConfirm","onClose","onCloseUpdate","onChange","className","style","mode","swipeDuration","rest","__rest","_c","__read","useState","chooseValueData","setchooseValueData","_d","columnIndex","setcolumnIndex","pickerRef","useRef","_e","useRefs","refs","setRefs","_f","columnsList","setColumnsList","isConfirmEvent","useEffect","length","toString","data_1","__spreadArray","normalListData","selectedOptions","current","init","closeActionSheet","e","stopPropagation","confirm","movings","forEach","_ref","moving","stopMomentum","setTimeout","optins","column","index","currOptions","filter","item","value","push","chooseItem","option","Object","keys","columnsType","cursor","children","cdata","formatCascade","firstColumn","Array","isArray","columns","defaultValues","formatted","text","options","findIndex","columnItem","normalData","perItem","createElement","Popup","__assign","classNames","onClick","map","PickerSlot","defaultValue","key","keyIndex"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__read as e,__awaiter as t,__generator as n}from"../node_modules/tslib/tslib.es6.js";import r,{useState as o,useRef as a,useEffect as c,useImperativeHandle as i}from"react";import{View as u}from"@tarojs/components";import{useTouch as l}from"../src/hooks/useTouch.js";var s=r.forwardRef((function(s,f){var m=s.keyIndex,d=void 0===m?0:m,h=s.defaultValue,p=s.data,v=void 0===p?[]:p,b=s.mode,x=void 0===b?"normal":b,g=s.swipeDuration,M=void 0===g?1e3:g,y=s.visible,k=void 0!==y&&y,E=s.onConfirm,j=l(),T=e(o(1),2),D=T[0],N=T[1],w=a(36),Y=e(o(0),2),z=Y[0],F=Y[1],H=e(o("0deg"),2),V=H[0],C=H[1],I=a(!1),P=a(null),R=a(null),S=a(null),_=e(o(0),2),q=_[0],A=_[1],B=e(o(0),2),G=B[0],J=B[1],K=a(0),L=e(o(0),2),O=L[0],Q=L[1],U=function(e){return e>=D+8||e<=D-8},W=function(e,t,n,r){void 0===e&&(e=0),void 0===n&&(n=200);var o=n;"end"!==t&&(o=0),F(o),C(r),Q(e)},X=function(e,t,n){var r=e+K.current;if("end"===t){r>0&&(r=0),r<-(v.length-1)*w.current&&(r=-(v.length-1)*w.current);var o=Math.round(r/w.current)*w.current,a="".concat(20*(Math.abs(Math.round(o/w.current))+1),"deg");W(o,t,n,a),N(Math.abs(Math.round(o/w.current))+1)}else{a=0;var c=20*(-r/w.current+1),i=20*(v.length+1);0<(a=Math.min(Math.max(c,0),i))&&a<i&&(W(r,"",void 0,"".concat(a,"deg")),N(Math.abs(Math.round(r/w.current))+1))}},Z=function(e){var t=Math.round(-e/w.current);E&&E(v[t],d)},$=function(e,t){var n=e;return n=Math.abs(n/t)/.003*(n<0?-1:1)},ee=function(e,t){var n=t||h,r=-1;n?v.forEach((function(e,t){return("object"==typeof e?e.value===n:e===n)&&(r=t,!0)})):v.forEach((function(e,t){("object"==typeof e?e.value===h:e===h)&&(r=t)})),N(-1===r?1:r+1);var o=-1===r?0:r*w.current;e&&Z(-o),X(-o)},te=function(){I.current=!1,F(0),Z(O)},ne=function(e,t){("boolean"!=typeof e.cancelable||e.cancelable)&&e.preventDefault(),t&&e.stopPropagation()};return c((function(){return Q(0),K.current=0,ee(!1),function(){clearTimeout(undefined)}}),[v]),c((function(){k&&setTimeout((function(){t(void 0,void 0,void 0,(function(){return n(this,(function(e){return ee(!0),[2]}))}))}),200)}),[k]),i(f,(function(){return{stopMomentum:te,moving:I.current}})),r.createElement(u,{className:"xh-picker-list",ref:S,onTouchStart:function(e){j.start(e),J(j.deltaY),A(Date.now()),K.current=O},onTouchMove:function(e){j.move(e),j.isVertical()&&(I.current=!0,ne(e,!0));var t=j.deltaY-G;X(t)},onTouchEnd:function(){if(I.current){var e=j.deltaY-G,t=Date.now()-q;if(t<=300&&Math.abs(e)>15){var n=$(e,t);X(n,"end",+M)}else X(e,"end");setTimeout((function(){j.reset()}),0)}}},r.createElement(u,{className:"xh-picker-roller",ref:R,style:"3D"===x?{transition:"transform ".concat(z,"ms cubic-bezier(0.17, 0.89, 0.45, 1)"),transform:"rotate3d(1, 0, 0, ".concat(V,")")}:{transition:"transform ".concat(z,"ms cubic-bezier(0.17, 0.89, 0.45, 1)"),transform:"translate3d(0, ".concat(O,"px, 0)")},onTransitionEnd:te},"3D"===x&&v.map((function(e,t){return r.createElement(u,{className:"xh-picker-roller-item ".concat(U(t+1)&&"nut-picker-roller-item-hidden"),style:{transform:"rotate3d(1, 0, 0, ".concat(-20*(t+1),"deg) translate3d(0px, 0px, 104px)"),height:"".concat(w.current,"px"),lineHeight:"".concat(w.current,"px")},key:"string"==typeof e?t:e.value?e.value:t},r.createElement(r.Fragment,null,"object"==typeof e?e.text:e))})),"normal"===x&&v.map((function(e,t){return r.createElement(u,{className:"xh-picker-roller-item-title",key:"object"==typeof e?e.value:e||t,style:{height:"".concat(w.current,"px"),lineHeight:"".concat(w.current,"px")}},r.createElement(r.Fragment,null,"object"==typeof e?e.text:e))}))),r.createElement(u,{className:"xh-picker-mask"}),r.createElement(u,{className:"xh-picker-indicator",ref:P}))}));export{s as default};
|
|
2
|
+
//# sourceMappingURL=PickerSlot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickerSlot.js","sources":["../../../src/components/Picker/PickerSlot.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n useRef,\n ForwardRefRenderFunction,\n useImperativeHandle,\n MouseEventHandler,\n} from \"react\";\nimport { View } from \"@tarojs/components\";\nimport { useTouch } from \"../../hooks/useTouch\";\nimport \"./index.scss\";\n\ninterface PickerObjectValue {\n text: string | number;\n value: string | number;\n [key: string]: any;\n}\nexport type PickerValue = string | PickerObjectValue;\n\ninterface PickerSlotProps<T extends PickerValue = PickerObjectValue> {\n defaultValue?: string | number;\n data: T[];\n mode?: \"normal\" | \"3D\";\n swipeDuration?: number | string;\n onConfirm?: (value: T, index: number) => void;\n onCancel?: MouseEventHandler;\n onClose?: MouseEventHandler;\n keyIndex: number;\n visible: boolean;\n}\n\nconst InternalPickerSlot: ForwardRefRenderFunction<\n { stopMomentum: () => void; moving: boolean },\n Partial<PickerSlotProps>\n> = (props, ref) => {\n const {\n keyIndex = 0,\n defaultValue,\n data = [],\n mode = \"normal\",\n swipeDuration = 1000,\n visible = false,\n onConfirm,\n } = props;\n\n const touch = useTouch();\n\n const DEFAULT_DURATION = 200;\n // 触发惯性滑动条件:\n // 在手指离开屏幕时,如果和上一次 move 时的间隔小于 `MOMENTUM_TIME` 且 move\n // 距离大于 `MOMENTUM_DISTANCE` 时,执行惯性滑动\n const INERTIA_TIME = 300;\n const INERTIA_DISTANCE = 15;\n const [currIndex, setCurrIndex] = useState(1);\n const lineSpacing = useRef(36);\n\n const [touchTime, setTouchTime] = useState(0);\n const [touchDeg, setTouchDeg] = useState(\"0deg\");\n const rotation = 20;\n const moving = useRef(false);\n let timer: number | undefined;\n\n const listbox = useRef<any>(null);\n const rollerRef = useRef<any>(null);\n const pickerSlotRef = useRef<any>(null);\n\n const [startTime, setStartTime] = useState(0);\n const [startY, setStartY] = useState(0);\n\n const transformY = useRef(0);\n const [scrollDistance, setScrollDistance] = useState(0);\n\n const isHidden = (index: number) => {\n if (index >= currIndex + 8 || index <= currIndex - 8) {\n return true;\n }\n return false;\n };\n\n const setTransform = (\n translateY = 0,\n type: string,\n time = DEFAULT_DURATION,\n deg: string\n ) => {\n let nTime = time;\n if (type !== \"end\") {\n nTime = 0;\n }\n\n setTouchTime(nTime);\n setTouchDeg(deg);\n\n setScrollDistance(translateY);\n };\n\n const setMove = (move: number, type?: string, time?: number) => {\n let updateMove = move + transformY.current;\n if (type === \"end\") {\n // 限定滚动距离\n if (updateMove > 0) {\n updateMove = 0;\n }\n if (updateMove < -(data.length - 1) * lineSpacing.current) {\n updateMove = -(data.length - 1) * lineSpacing.current;\n }\n\n // 设置滚动距离为lineSpacing的倍数值\n const endMove =\n Math.round(updateMove / lineSpacing.current) * lineSpacing.current;\n const deg = `${\n (Math.abs(Math.round(endMove / lineSpacing.current)) + 1) * rotation\n }deg`;\n\n setTransform(endMove, type, time, deg);\n\n setCurrIndex(Math.abs(Math.round(endMove / lineSpacing.current)) + 1);\n } else {\n let deg = 0;\n const currentDeg = (-updateMove / lineSpacing.current + 1) * rotation;\n\n // picker 滚动的最大角度\n const maxDeg = (data.length + 1) * rotation;\n const minDeg = 0;\n\n deg = Math.min(Math.max(currentDeg, minDeg), maxDeg);\n\n if (minDeg < deg && deg < maxDeg) {\n setTransform(updateMove, \"\", undefined, `${deg}deg`);\n setCurrIndex(\n Math.abs(Math.round(updateMove / lineSpacing.current)) + 1\n );\n }\n }\n };\n\n const setChooseValue = (move: number) => {\n const index = Math.round(-move / lineSpacing.current);\n onConfirm && onConfirm(data[index], keyIndex);\n };\n\n // 开始滚动\n const touchStart = event => {\n touch.start(event);\n setStartY(touch.deltaY);\n setStartTime(Date.now());\n transformY.current = scrollDistance;\n };\n\n const touchMove = event => {\n touch.move(event);\n if (touch.isVertical()) {\n moving.current = true;\n preventDefault(event, true);\n }\n const move = touch.deltaY - startY;\n setMove(move);\n };\n\n const touchEnd = () => {\n if (!moving.current) return;\n const move = touch.deltaY - startY;\n const moveTime = Date.now() - startTime;\n // 区分是否为惯性滚动\n if (moveTime <= INERTIA_TIME && Math.abs(move) > INERTIA_DISTANCE) {\n // 惯性滚动\n const distance = momentum(move, moveTime);\n setMove(distance, \"end\", +swipeDuration);\n } else {\n setMove(move, \"end\");\n }\n\n setTimeout(() => {\n touch.reset();\n }, 0);\n };\n\n // 惯性滚动 距离\n const momentum = (distance: number, duration: number) => {\n let nDistance = distance;\n // 惯性滚动的速度\n const speed = Math.abs(nDistance / duration);\n // 惯性滚动的距离\n nDistance = (speed / 0.003) * (nDistance < 0 ? -1 : 1);\n return nDistance;\n };\n\n const modifyStatus = (type?: boolean, val?: string | number) => {\n const value = val || defaultValue;\n let index = -1;\n if (value) {\n data.forEach((item, idx) => {\n if (typeof item === \"object\" ? item.value === value : item === value) {\n index = idx;\n return true;\n }\n return false;\n });\n } else {\n data.forEach((item, i) => {\n if (\n typeof item === \"object\"\n ? item.value === defaultValue\n : item === defaultValue\n ) {\n index = i;\n }\n });\n }\n\n setCurrIndex(index === -1 ? 1 : index + 1);\n const move = index === -1 ? 0 : index * lineSpacing.current;\n type && setChooseValue(-move);\n setMove(-move);\n };\n\n // 惯性滚动结束\n const stopMomentum = () => {\n moving.current = false;\n setTouchTime(0);\n setChooseValue(scrollDistance);\n };\n // 阻止默认事件\n const preventDefault = (\n event: React.TouchEvent<HTMLElement>,\n isStopPropagation?: boolean\n ) => {\n /* istanbul ignore else */\n if (typeof event.cancelable !== \"boolean\" || event.cancelable) {\n event.preventDefault();\n }\n\n if (isStopPropagation) {\n event.stopPropagation();\n }\n };\n\n const getReference = async () => {\n // const refe = await getRectByTaro(listbox?.current)\n // lineSpacing.current = refe.height ? refe.height : 36\n // lineSpacing.current = 36\n modifyStatus(true);\n };\n\n const touchRollerStyle = () => {\n return {\n transition: `transform ${touchTime}ms cubic-bezier(0.17, 0.89, 0.45, 1)`,\n transform: `rotate3d(1, 0, 0, ${touchDeg})`,\n };\n };\n const touchTileStyle = () => {\n return {\n transition: `transform ${touchTime}ms cubic-bezier(0.17, 0.89, 0.45, 1)`,\n transform: `translate3d(0, ${scrollDistance}px, 0)`,\n };\n };\n\n useEffect(() => {\n setScrollDistance(0);\n transformY.current = 0;\n modifyStatus(false);\n return () => {\n clearTimeout(timer);\n };\n }, [data]);\n\n useEffect(() => {\n if (visible) {\n setTimeout(() => {\n getReference();\n }, 200);\n }\n }, [visible]);\n\n useImperativeHandle(ref, () => ({\n stopMomentum,\n moving: moving.current,\n }));\n\n return (\n <View\n className=\"xh-picker-list\"\n ref={pickerSlotRef}\n onTouchStart={touchStart}\n onTouchMove={touchMove}\n onTouchEnd={touchEnd}\n >\n <View\n className=\"xh-picker-roller\"\n ref={rollerRef}\n style={mode === \"3D\" ? touchRollerStyle() : touchTileStyle()}\n onTransitionEnd={stopMomentum}\n >\n {/* 3D 效果 */}\n {mode === \"3D\" &&\n data.map((item, index) => {\n return (\n <View\n className={`xh-picker-roller-item ${\n isHidden(index + 1) && \"nut-picker-roller-item-hidden\"\n }`}\n style={{\n transform: `rotate3d(1, 0, 0, ${\n -rotation * (index + 1)\n }deg) translate3d(0px, 0px, 104px)`,\n height: `${lineSpacing.current}px`,\n lineHeight: `${lineSpacing.current}px`,\n }}\n key={\n typeof item === \"string\"\n ? index\n : item.value\n ? item.value\n : index\n }\n >\n <React.Fragment>\n {typeof item === \"object\" ? item.text : item}\n </React.Fragment>\n </View>\n );\n })}\n {/* 平铺 */}\n {mode === \"normal\" &&\n data.map((item, index) => {\n return (\n <View\n className=\"xh-picker-roller-item-title\"\n key={\n typeof item === \"object\" ? item.value : item ? item : index\n }\n style={{\n height: `${lineSpacing.current}px`,\n lineHeight: `${lineSpacing.current}px`,\n }}\n >\n <React.Fragment>\n {typeof item === \"object\" ? item.text : item}\n </React.Fragment>\n </View>\n );\n })}\n </View>\n\n <View className=\"xh-picker-mask\" />\n <View className=\"xh-picker-indicator\" ref={listbox} />\n </View>\n );\n};\nconst PickerSlot = React.forwardRef<\n { stopMomentum: () => void; moving: boolean },\n Partial<PickerSlotProps>\n>(InternalPickerSlot);\nexport default PickerSlot;\n"],"names":["PickerSlot","React","forwardRef","props","ref","_a","keyIndex","defaultValue","_b","data","_c","mode","_d","swipeDuration","_e","visible","onConfirm","touch","useTouch","_f","__read","useState","currIndex","setCurrIndex","lineSpacing","useRef","_g","touchTime","setTouchTime","_h","touchDeg","setTouchDeg","moving","listbox","rollerRef","pickerSlotRef","_j","startTime","setStartTime","_k","startY","setStartY","transformY","_l","scrollDistance","setScrollDistance","isHidden","index","setTransform","translateY","type","time","deg","nTime","setMove","move","updateMove","current","length","endMove","Math","round","concat","abs","currentDeg","maxDeg","min","max","undefined","setChooseValue","momentum","distance","duration","nDistance","modifyStatus","val","value","forEach","item","idx","i","stopMomentum","preventDefault","event","isStopPropagation","cancelable","stopPropagation","useEffect","clearTimeout","timer","setTimeout","__awaiter","useImperativeHandle","View","className","onTouchStart","start","deltaY","Date","now","onTouchMove","isVertical","onTouchEnd","moveTime","reset","createElement","style","transition","transform","onTransitionEnd","map","height","lineHeight","key","Fragment","text"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__rest as e,__read as
|
|
1
|
+
import{__rest as e,__read as n,__assign as l}from"../node_modules/tslib/tslib.es6.js";import a,{useState as o}from"react";import r from"classnames";import t from"./Picker.js";var c=function(c){var i=c.className,s=c.children,m=c.onCancel,f=e(c,["className","children","onCancel"]),d=n(o(!1),2),u=d[0],p=d[1];function C(){p(!1),null==m||m()}return a.createElement("div",{className:r("xh-picker-field",i),onClick:function(){f.data.length<=0||p(!0)}},s,a.createElement(t,l({visible:u,onCancel:C,onClose:C},f)))};export{c as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Picker/index.tsx"],"sourcesContent":["import React, {\n useState,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport classNames from \"classnames\";\nimport Picker from \"./Picker\";\nimport type { PickerValue } from \"./Picker\";\nimport \"./index.scss\";\n\nexport type
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Picker/index.tsx"],"sourcesContent":["import React, {\n useState,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport classNames from \"classnames\";\nimport Picker from \"./Picker\";\nimport type { PickerValue, PickerProps, PickerOption } from \"./Picker\";\nimport \"./index.scss\";\n\nexport type PickerDataType = PickerValue;\nexport type PickerDataOptionType = PickerOption;\nexport interface PickerFieldProps<T extends PickerValue>\n extends PropsWithChildren<PickerProps> {\n title?: ReactNode | string;\n data: T[] | T[][];\n className?: string;\n onConfirm?: (value: T[], index: number) => void;\n}\n\nconst PickerField = <T extends PickerValue>(\n props: PickerFieldProps<T>\n): ReactElement => {\n const { className, children, onCancel, ...rest } = props;\n const [visible, setVisible] = useState(false);\n\n function handleClick(): void {\n if (rest.data.length <= 0) return;\n setVisible(true);\n }\n\n function handleClose(): void {\n setVisible(false);\n onCancel?.();\n }\n\n return (\n <div\n className={classNames(\"xh-picker-field\", className)}\n onClick={handleClick}\n >\n {children}\n <Picker\n visible={visible}\n onCancel={handleClose}\n onClose={handleClose}\n {...rest}\n />\n </div>\n );\n};\n\nexport default PickerField;\n"],"names":["PickerField","props","className","children","onCancel","rest","_a","__read","useState","visible","setVisible","handleClose","React","createElement","classNames","onClick","data","length","Picker","__assign","onClose"],"mappings":"+KAqBM,IAAAA,EAAc,SAClBC,GAEQ,IAAAC,EAA2CD,EAAKC,UAArCC,EAAgCF,EAAxBE,SAAEC,EAAsBH,WAATI,IAASJ,EAA7C,CAA0C,YAAA,WAAA,aAC1CK,EAAAC,EAAwBC,GAAS,GAAM,GAAtCC,EAAOH,EAAA,GAAEI,OAOhB,SAASC,IACPD,GAAW,GACXN,SAAAA,GACD,CAED,OACEQ,EAAAC,cAAA,MAAA,CACEX,UAAWY,EAAW,kBAAmBZ,GACzCa,QAbJ,WACMV,EAAKW,KAAKC,QAAU,GACxBP,GAAW,EACZ,GAYIP,EACDS,EAAAC,cAACK,EACCC,EAAA,CAAAV,QAASA,EACTL,SAAUO,EACVS,QAAST,GACLN,IAIZ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{default as XHButton}from"../Button/index.js";export{default as XHPage}from"../Page/index.js";export{default as XHLoading}from"../Loading/index.js";export{default as XHBankIcon}from"../BankIcon/index.js";export{default as XHCaptcha}from"../Captcha/index.js";export{default as XHFormInput}from"../FormInput/index.js";export{default as XHList}from"../List/index.js";export{default as XHMask}from"../Mask/index.js";export{default as XHImage}from"../Image/index.js";export{default as XHDialog}from"../Dialog/index.js";export{default as XHNumberKeyboard}from"../NumberKeyboard/index.js";export{default as XHPasswordInput}from"../PasswordInput/index.js";export{default as XHProgress}from"../Progress/index.js";export{default as XHToast}from"../Toast/index.js";export{default as XHDialogRef}from"../DialogRef/index.js";export{default as XHTabbar}from"../Tabbar/index.js";export{default as XHPopup}from"../Popup/index.js";export{default as XHPicker}from"../Picker/index.js";export{default as XHSpace}from"../Space/index.js";export{default as ThemeProvider}from"../ThemeProvider/index.js";export{default as XHCheckbox}from"../Checkbox/index.js";export{default as XHRadio}from"../Radio/index.js";export{default as XHStep}from"../Step/index.js";
|
|
1
|
+
export{default as XHButton}from"../Button/index.js";export{default as XHPage}from"../Page/index.js";export{default as XHLoading}from"../Loading/index.js";export{default as XHBankIcon}from"../BankIcon/index.js";export{default as XHCaptcha}from"../Captcha/index.js";export{default as XHFormInput}from"../FormInput/index.js";export{default as XHList}from"../List/index.js";export{default as XHMask}from"../Mask/index.js";export{default as XHImage}from"../Image/index.js";export{default as XHDialog}from"../Dialog/index.js";export{default as XHNumberKeyboard}from"../NumberKeyboard/index.js";export{default as XHPasswordInput}from"../PasswordInput/index.js";export{default as XHProgress}from"../Progress/index.js";export{default as XHToast}from"../Toast/index.js";export{default as XHDialogRef}from"../DialogRef/index.js";export{default as XHTabbar}from"../Tabbar/index.js";export{default as XHPopup}from"../Popup/index.js";export{default as XHPicker}from"../Picker/index.js";export{default as XHSpace}from"../Space/index.js";export{default as ThemeProvider}from"../ThemeProvider/index.js";export{default as XHCheckbox}from"../Checkbox/index.js";export{default as XHRadio}from"../Radio/index.js";export{default as XHStep}from"../Step/index.js";export{default as XHBadge}from"../Badge/index.js";export{default as XHAmountInput}from"../AmountInput/index.js";export{default as XHAmountKeyboard}from"../AmountKeyboard/index.js";export{default as XHCollapse}from"../Collapse/index.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/utils/index.ts"],"sourcesContent":["/**\n * 禁止输入emoji表情\n * @param {string} val - 输入内容\n * @returns {boolean} - 校验结果 返回 true || false\n */\nimport React from \"react\";\n\nexport const inputRange = (val: string): string => {\n let iconRule1 =\n /[\\uD83C|\\uD83D|\\uD83E][\\uDC00-\\uDFFF][\\u200D|\\uFE0F]|[\\uD83C|\\uD83D|\\uD83E][\\uDC00-\\uDFFF]|[0-9|*|#]\\uFE0F\\u20E3|[0-9|#]\\u20E3|[\\u203C-\\u3299]\\uFE0F\\u200D|[\\u203C-\\u3299]\\uFE0F|[\\u2122-\\u2B55]|\\u303D|[\\A9|\\AE]\\u3030|\\uA9|\\uAE|\\u3030/gi;\n return val.replace(iconRule1, \"\");\n};\n\n// function Handler(fn) {\n// this.handler = fn;\n// this.next = null;\n// }\n\n// Handler.prototype.setNext = function setNext(h) {\n// this.next = h;\n// return h;\n// };\n\n// Handler.prototype.passRequest = function () {\n// const ret = this.handler.apply(this, arguments);\n// // 提前结束\n// if (!ret) {\n// return ret;\n// }\n\n// // 向后传递\n// if (this.next) {\n// return this.next.passRequest.apply(this.next, arguments);\n// }\n// return ret;\n// };\n\n// export class ChainHander {\n// public hander: (s: string) => boolean\n// public next\n// constructor(fn: (str: string) => boolean) {\n// this.hander = fn\n// }\n// public setNext(callback): () => boolean {\n// this.next = callback\n// return callback\n// }\n// public checkPass(...arg) {\n// const result = this.hander.apply(this, arg)\n// if (!result) {\n// return result\n// }\n\n// if (this.next != null) {\n// return this.next.checkPass.apply(this.next, arg)\n// }\n\n// return result\n// }\n// }\n\nexport const throtte = (fn: Function, delay: number = 1500) => {\n let timer: NodeJS.Timer;\n let canCall = true;\n return function (arg) {\n if (canCall) {\n canCall = false;\n fn(arg);\n }\n timer = setTimeout(() => {\n canCall = true;\n clearTimeout(timer);\n }, delay);\n };\n};\n\nexport function pxTransform(size: number, designWidth = 750): string {\n if (!size) return \"\";\n const deviceRatio = {\n 640: 2.34 / 2,\n 750: 1,\n 828: 1.81 / 2,\n };\n if (process.env.TARO_ENV === \"h5\")\n return (\n Math.ceil(\n (((parseInt(`${size}`, 10) / 40) * 640) / designWidth) * 10000\n ) /\n 10000 +\n \"rem\"\n );\n return `${size / deviceRatio[designWidth]}rpx`;\n}\n\nlet flexGapSupported: boolean | undefined;\nexport const detectFlexGapSupported = () => {\n if (flexGapSupported !== undefined) {\n return flexGapSupported;\n }\n\n const flex = document.createElement(\"div\");\n flex.style.display = \"flex\";\n flex.style.flexDirection = \"column\";\n flex.style.rowGap = \"1px\";\n\n flex.appendChild(document.createElement(\"div\"));\n flex.appendChild(document.createElement(\"div\"));\n\n document.body.appendChild(flex);\n flexGapSupported = flex.scrollHeight === 1;\n document.body.removeChild(flex);\n\n return flexGapSupported;\n};\n\nexport interface Option {\n keepEmpty?: boolean;\n}\n\nexport function toArray(\n children: React.ReactNode,\n option: Option = {}\n): React.ReactElement[] {\n let ret: React.ReactElement[] = [];\n\n React.Children.forEach(children, (child: any | any[]) => {\n if ((child === undefined || child === null) && !option.keepEmpty) {\n return;\n }\n\n if (Array.isArray(child)) {\n ret = ret.concat(toArray(child));\n } else if (isFragment(child) && child.props) {\n ret = ret.concat(toArray(child.props.children, option));\n } else {\n ret.push(child);\n }\n });\n\n return ret;\n}\n\nfunction isFragment(object) {\n return (\n object.$$typeof === Symbol.for(\"react.element\") &&\n object.type === Symbol.for(\"react.fragment\")\n );\n}\n"],"names":["flexGapSupported","inputRange","val","replace","pxTransform","size","designWidth","process","env","TARO_ENV","Math","ceil","parseInt","concat","detectFlexGapSupported","undefined","flex","document","createElement","style","display","flexDirection","rowGap","appendChild","body","scrollHeight","removeChild","toArray","children","option","ret","React","Children","forEach","child","object","keepEmpty","Array","isArray","$$typeof","Symbol","for","type","props","push"],"mappings":"qBAOO,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/utils/index.ts"],"sourcesContent":["/**\n * 禁止输入emoji表情\n * @param {string} val - 输入内容\n * @returns {boolean} - 校验结果 返回 true || false\n */\nimport React from \"react\";\n\nexport const inputRange = (val: string): string => {\n let iconRule1 =\n /[\\uD83C|\\uD83D|\\uD83E][\\uDC00-\\uDFFF][\\u200D|\\uFE0F]|[\\uD83C|\\uD83D|\\uD83E][\\uDC00-\\uDFFF]|[0-9|*|#]\\uFE0F\\u20E3|[0-9|#]\\u20E3|[\\u203C-\\u3299]\\uFE0F\\u200D|[\\u203C-\\u3299]\\uFE0F|[\\u2122-\\u2B55]|\\u303D|[\\A9|\\AE]\\u3030|\\uA9|\\uAE|\\u3030/gi;\n return val.replace(iconRule1, \"\");\n};\n\n// function Handler(fn) {\n// this.handler = fn;\n// this.next = null;\n// }\n\n// Handler.prototype.setNext = function setNext(h) {\n// this.next = h;\n// return h;\n// };\n\n// Handler.prototype.passRequest = function () {\n// const ret = this.handler.apply(this, arguments);\n// // 提前结束\n// if (!ret) {\n// return ret;\n// }\n\n// // 向后传递\n// if (this.next) {\n// return this.next.passRequest.apply(this.next, arguments);\n// }\n// return ret;\n// };\n\n// export class ChainHander {\n// public hander: (s: string) => boolean\n// public next\n// constructor(fn: (str: string) => boolean) {\n// this.hander = fn\n// }\n// public setNext(callback): () => boolean {\n// this.next = callback\n// return callback\n// }\n// public checkPass(...arg) {\n// const result = this.hander.apply(this, arg)\n// if (!result) {\n// return result\n// }\n\n// if (this.next != null) {\n// return this.next.checkPass.apply(this.next, arg)\n// }\n\n// return result\n// }\n// }\n\nexport const throtte = (fn: Function, delay: number = 1500) => {\n let timer: NodeJS.Timer;\n let canCall = true;\n return function (arg) {\n if (canCall) {\n canCall = false;\n fn(arg);\n }\n timer = setTimeout(() => {\n canCall = true;\n clearTimeout(timer);\n }, delay);\n };\n};\n\nexport const debounce = (fn: (...arg: any) => any, delay: number = 1500) => {\n let timer: NodeJS.Timeout | null = null;\n return function () {\n const context = this;\n const arg = arguments;\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n fn.apply(context, arg);\n }, delay);\n };\n};\n\nexport function pxTransform(size: number, designWidth = 750): string {\n if (!size) return \"\";\n const deviceRatio = {\n 640: 2.34 / 2,\n 750: 1,\n 828: 1.81 / 2,\n };\n if (process.env.TARO_ENV === \"h5\")\n return (\n Math.ceil(\n (((parseInt(`${size}`, 10) / 40) * 640) / designWidth) * 10000\n ) /\n 10000 +\n \"rem\"\n );\n return `${size / deviceRatio[designWidth]}rpx`;\n}\n\nlet flexGapSupported: boolean | undefined;\nexport const detectFlexGapSupported = () => {\n if (flexGapSupported !== undefined) {\n return flexGapSupported;\n }\n\n const flex = document.createElement(\"div\");\n flex.style.display = \"flex\";\n flex.style.flexDirection = \"column\";\n flex.style.rowGap = \"1px\";\n\n flex.appendChild(document.createElement(\"div\"));\n flex.appendChild(document.createElement(\"div\"));\n\n document.body.appendChild(flex);\n flexGapSupported = flex.scrollHeight === 1;\n document.body.removeChild(flex);\n\n return flexGapSupported;\n};\n\nexport interface Option {\n keepEmpty?: boolean;\n}\n\nexport function toArray(\n children: React.ReactNode,\n option: Option = {}\n): React.ReactElement[] {\n let ret: React.ReactElement[] = [];\n\n React.Children.forEach(children, (child: any | any[]) => {\n if ((child === undefined || child === null) && !option.keepEmpty) {\n return;\n }\n\n if (Array.isArray(child)) {\n ret = ret.concat(toArray(child));\n } else if (isFragment(child) && child.props) {\n ret = ret.concat(toArray(child.props.children, option));\n } else {\n ret.push(child);\n }\n });\n\n return ret;\n}\n\nfunction isFragment(object) {\n return (\n object.$$typeof === Symbol.for(\"react.element\") &&\n object.type === Symbol.for(\"react.fragment\")\n );\n}\n"],"names":["flexGapSupported","inputRange","val","replace","pxTransform","size","designWidth","process","env","TARO_ENV","Math","ceil","parseInt","concat","detectFlexGapSupported","undefined","flex","document","createElement","style","display","flexDirection","rowGap","appendChild","body","scrollHeight","removeChild","toArray","children","option","ret","React","Children","forEach","child","object","keepEmpty","Array","isArray","$$typeof","Symbol","for","type","props","push"],"mappings":"qBAOO,IAmGHA,EAnGSC,EAAa,SAACC,GAGzB,OAAOA,EAAIC,QADT,6OAC4B,GAChC,EA6EgB,SAAAC,EAAYC,EAAcC,GACxC,QADwC,IAAAA,IAAAA,EAAiB,MACpDD,EAAM,MAAO,GAMlB,MAA6B,OAAzBE,QAAQC,IAAIC,SAEZC,KAAKC,KACAC,SAAS,GAAAC,OAAGR,GAAQ,IAAM,GAAM,IAAOC,EAAe,KAEzD,IACF,MAEG,GAAAO,OAAGR,EAbU,CAClB,IAAK,KACL,IAAK,EACL,IAAK,MAUsBC,SAC/B,CAGa,IAAAQ,EAAyB,WACpC,QAAyBC,IAArBf,EACF,OAAOA,EAGT,IAAMgB,EAAOC,SAASC,cAAc,OAYpC,OAXAF,EAAKG,MAAMC,QAAU,OACrBJ,EAAKG,MAAME,cAAgB,SAC3BL,EAAKG,MAAMG,OAAS,MAEpBN,EAAKO,YAAYN,SAASC,cAAc,QACxCF,EAAKO,YAAYN,SAASC,cAAc,QAExCD,SAASO,KAAKD,YAAYP,GAC1BhB,EAAyC,IAAtBgB,EAAKS,aACxBR,SAASO,KAAKE,YAAYV,GAEnBhB,CACT,EAMgB,SAAA2B,EACdC,EACAC,QAAA,IAAAA,IAAAA,EAAmB,CAAA,GAEnB,IAAIC,EAA4B,GAgBhC,OAdAC,EAAMC,SAASC,QAAQL,GAAU,SAACM,GAiBpC,IAAoBC,GAhBZ,MAACD,GAA2CL,EAAOO,aAInDC,MAAMC,QAAQJ,GAChBJ,EAAMA,EAAIjB,OAAOc,EAAQO,KAWXC,EAVMD,GAYfK,WAAaC,OAAOC,IAAI,kBAC/BN,EAAOO,OAASF,OAAOC,IAAI,mBAbKP,EAAMS,MACpCb,EAAMA,EAAIjB,OAAOc,EAAQO,EAAMS,MAAMf,SAAUC,IAE/CC,EAAIc,KAAKV,GAEb,IAEOJ,CACT"}
|