taro-react-uilib 1.1.0 → 1.2.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 +38 -0
- package/dist/components/Checkbox/Group/index.js +2 -0
- package/dist/components/Checkbox/Group/index.js.map +1 -0
- package/dist/components/Checkbox/index.js +2 -0
- package/dist/components/Checkbox/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/index.js +1 -1
- package/dist/components/Picker/index.js.map +1 -1
- package/dist/components/PickerSlot/index.js +2 -0
- package/dist/components/PickerSlot/index.js.map +1 -0
- package/dist/components/Radio/Group/index.js +2 -0
- package/dist/components/Radio/Group/index.js.map +1 -0
- package/dist/components/Radio/index.js +2 -0
- package/dist/components/Radio/index.js.map +1 -0
- package/dist/components/Space/Item.js +2 -0
- package/dist/components/Space/Item.js.map +1 -0
- package/dist/components/Space/config-provider.js +2 -0
- package/dist/components/Space/config-provider.js.map +1 -0
- package/dist/components/Space/index.js +2 -0
- package/dist/components/Space/index.js.map +1 -0
- package/dist/components/Step/Steps/index.js +2 -0
- package/dist/components/Step/Steps/index.js.map +1 -0
- package/dist/components/Step/index.js +2 -0
- package/dist/components/Step/index.js.map +1 -0
- package/dist/components/ThemeProvider/index.js +1 -1
- package/dist/components/ThemeProvider/index.js.map +1 -1
- package/dist/components/node_modules/css-vars-ponyfill/dist/css-vars-ponyfill.esm.js +172 -0
- package/dist/components/node_modules/css-vars-ponyfill/dist/css-vars-ponyfill.esm.js.map +1 -0
- package/dist/components/src/hooks/index.js +1 -1
- package/dist/components/src/hooks/index.js.map +1 -1
- package/dist/components/src/hooks/useFlexGapSupport.js +2 -0
- package/dist/components/src/hooks/useFlexGapSupport.js.map +1 -0
- package/dist/components/src/hooks/useGenerateId.js +2 -0
- package/dist/components/src/hooks/useGenerateId.js.map +1 -0
- package/dist/components/src/hooks/useRefs.js +2 -0
- package/dist/components/src/hooks/useRefs.js.map +1 -0
- package/dist/components/src/hooks/useTouch.js +2 -0
- package/dist/components/src/hooks/useTouch.js.map +1 -0
- package/dist/components/src/index.js +1 -1
- package/dist/components/src/utils/index.js +1 -1
- package/dist/components/src/utils/index.js.map +1 -1
- package/dist/index.js +173 -2
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +173 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/styles/components/checkbox.scss +117 -0
- package/dist/styles/components/dialog.scss +2 -0
- package/dist/styles/components/font/.DS_Store +0 -0
- package/dist/styles/components/index.scss +5 -0
- package/dist/styles/components/numberkeyboard.scss +1 -3
- package/dist/styles/components/picker.scss +7 -112
- package/dist/styles/components/pickerslot.scss +98 -0
- package/dist/styles/components/radio.scss +102 -0
- package/dist/styles/components/space.scss +37 -0
- package/dist/styles/components/step.scss +173 -0
- package/dist/styles/components/themeprovider.scss +3 -0
- package/dist/styles/components/toast.scss +1 -1
- package/dist/styles/index.scss +1 -1
- package/dist/styles/themes/default.scss +13 -13
- package/dist/styles/themes/variable.scss +2 -0
- package/lib/components/Checkbox/Group/index.js +49 -0
- package/lib/components/Checkbox/Group/index.js.map +1 -0
- package/lib/components/Checkbox/index.js +43 -0
- package/lib/components/Checkbox/index.js.map +1 -0
- package/lib/components/Picker/Picker.js +192 -96
- package/lib/components/Picker/Picker.js.map +1 -1
- package/lib/components/Picker/index.js +2 -5
- package/lib/components/Picker/index.js.map +1 -1
- package/lib/components/PickerSlot/index.js +226 -0
- package/lib/components/PickerSlot/index.js.map +1 -0
- package/lib/components/Radio/Group/index.js +56 -0
- package/lib/components/Radio/Group/index.js.map +1 -0
- package/lib/components/Radio/index.js +43 -0
- package/lib/components/Radio/index.js.map +1 -0
- package/lib/components/Space/Item.js +25 -0
- package/lib/components/Space/Item.js.map +1 -0
- package/lib/components/Space/config-provider.js +8 -0
- package/lib/components/Space/config-provider.js.map +1 -0
- package/lib/components/Space/index.js +77 -0
- package/lib/components/Space/index.js.map +1 -0
- package/lib/components/Step/Steps/index.js +31 -0
- package/lib/components/Step/Steps/index.js.map +1 -0
- package/lib/components/Step/index.js +19 -0
- package/lib/components/Step/index.js.map +1 -0
- package/lib/components/ThemeProvider/index.js +4 -0
- package/lib/components/ThemeProvider/index.js.map +1 -1
- package/lib/hooks/index.js +0 -34
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useFlexGapSupport.js +10 -0
- package/lib/hooks/useFlexGapSupport.js.map +1 -0
- package/lib/hooks/useGenerateId.js +12 -0
- package/lib/hooks/useGenerateId.js.map +1 -0
- package/lib/hooks/useRefs.js +13 -0
- package/lib/hooks/useRefs.js.map +1 -0
- package/lib/hooks/useTouch.js +67 -0
- package/lib/hooks/useTouch.js.map +1 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/utils/index.js +39 -2
- package/lib/utils/index.js.map +1 -1
- package/package.json +2 -1
- package/types/components/Checkbox/Group/index.d.ts +23 -0
- package/types/components/Checkbox/index.d.ts +29 -0
- package/types/components/Picker/Picker.d.ts +21 -20
- package/types/components/Picker/index.d.ts +6 -7
- package/types/components/PickerSlot/index.d.ts +24 -0
- package/types/components/Radio/Group/index.d.ts +26 -0
- package/types/components/Radio/index.d.ts +29 -0
- package/types/components/Space/Item.d.ts +11 -0
- package/types/components/Space/config-provider.d.ts +12 -0
- package/types/components/Space/index.d.ts +21 -0
- package/types/components/Step/Steps/index.d.ts +13 -0
- package/types/components/Step/index.d.ts +18 -0
- package/types/hooks/index.d.ts +0 -22
- package/types/hooks/useFlexGapSupport.d.ts +2 -0
- package/types/hooks/useGenerateId.d.ts +1 -0
- package/types/hooks/useRefs.d.ts +1 -0
- package/types/hooks/useTouch.d.ts +18 -0
- package/types/index.d.ts +4 -0
- package/types/utils/index.d.ts +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,41 @@
|
|
|
1
|
+
# [1.2.0](https://code.xhdev.xyz/h5group/taro-uilib/compare/v1.1.1...v1.2.0) (2023-04-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* 小程序touchmove ([fb3ef52](https://code.xhdev.xyz/h5group/taro-uilib/commits/fb3ef526457274ec6acfddf01b66046ed7877392))
|
|
7
|
+
* 新增picker组件以及demo ([7f65ce4](https://code.xhdev.xyz/h5group/taro-uilib/commits/7f65ce483621ead0071ac6374e74659fd1067d7c))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
* eslint ([5760511](https://code.xhdev.xyz/h5group/taro-uilib/commits/5760511e926dc8daca69cfeb1ad104d5167eea37))
|
|
13
|
+
* add checkbox ([26c424f](https://code.xhdev.xyz/h5group/taro-uilib/commits/26c424f79cfe351743d1f2447aba80df50eb338e))
|
|
14
|
+
* add step component ([ed35870](https://code.xhdev.xyz/h5group/taro-uilib/commits/ed35870190f6b7e90f2092f4bcf0174f05db201e))
|
|
15
|
+
* checkbox perf ([c7dceaa](https://code.xhdev.xyz/h5group/taro-uilib/commits/c7dceaa9baf32908fb52813889bcb0e9ebd75661))
|
|
16
|
+
* checkboxzhi支持默认选中 ([d126780](https://code.xhdev.xyz/h5group/taro-uilib/commits/d126780d5e0604ed20a4b42060e558f9c2a611ea))
|
|
17
|
+
* checkbox组件 ([20d66eb](https://code.xhdev.xyz/h5group/taro-uilib/commits/20d66eb7436845f05b672a205ab41145127ea261))
|
|
18
|
+
* radio 组件 ([c7607db](https://code.xhdev.xyz/h5group/taro-uilib/commits/c7607dbfd147009b387c2c1e3fedb782364a1118))
|
|
19
|
+
* 新增space组件 ([e250c56](https://code.xhdev.xyz/h5group/taro-uilib/commits/e250c568dfa60d0faef71625d5d20030c328cba7))
|
|
20
|
+
* 部分组件样式采用变量 ([3587ecf](https://code.xhdev.xyz/h5group/taro-uilib/commits/3587ecf71e12b55ea54645679cc81ba2ac41002b))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Performance Improvements
|
|
24
|
+
|
|
25
|
+
* 优化picker ([f767998](https://code.xhdev.xyz/h5group/taro-uilib/commits/f7679983100cf5ecc4a29f92db59e4b7c80ed082))
|
|
26
|
+
* 兼容抖音 ([d2d2a93](https://code.xhdev.xyz/h5group/taro-uilib/commits/d2d2a93c9163308bdb6119c40e1596928b9d0e90))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## [1.1.1](https://code.xhdev.xyz/h5group/taro-uilib/compare/v1.1.0...v1.1.1) (2023-04-07)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Features
|
|
34
|
+
|
|
35
|
+
* add cssVarpolyfill ([bc7c40a](https://code.xhdev.xyz/h5group/taro-uilib/commits/bc7c40aaccc260b771850a9c9b63b6dc1ed2d582))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
1
39
|
# [1.1.0](https://code.xhdev.xyz/h5group/taro-uilib/compare/v1.0.31...v1.1.0) (2023-04-07)
|
|
2
40
|
|
|
3
41
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__rest as e,__read as n,__assign as t,__spreadArray as r}from"../../node_modules/tslib/tslib.es6.js";import l,{useMemo as o,useState as a}from"react";import c from"classnames";import d from"../index.js";var i=function(i){var u=i.option,s=i.onChange,f=i.defaultChecked,m=i.padding,p=i.border,h=i.style,b=i.checkboxStyle,v=e(i,["option","onChange","defaultChecked","padding","border","style","checkboxStyle"]),k=o((function(){return u.map((function(e){var n="string"==typeof f?[f]:f;return"string"==typeof e?{label:e,value:e,checked:null==n?void 0:n.includes(e)}:((null==n?void 0:n.includes(e.value))&&(e.checked=!0),e)}))}),[u,f]),g=n(a(k),2),y=g[0],x=g[1],C=c("xh-checkbox-group",{padding:m},{border:p});return l.createElement("div",{className:C,style:h},y.map((function(e,o){return l.createElement(d,t({label:e.label,value:e.value,disabled:e.disabled,checked:e.checked,key:o,style:b,onChange:function(e){return function(e,t){var l=r([],n(y),!1);l[t].checked=e,x(l);var o=l.filter((function(e){return e.checked})).map((function(e){return e.value}));null==s||s(o)}(e,o)}},v))})))};export{i as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Checkbox/Group/index.tsx"],"sourcesContent":["import React, { ReactNode, useMemo, useState } from \"react\";\nimport classNames from \"classnames\";\n\nimport CheckBox from \"..\";\n\nexport type CheckBoxItemType = {\n label: string | ReactNode;\n value: string;\n disabled?: boolean;\n checked?: boolean;\n};\nexport type CheckBoxItem = Omit<CheckBoxItemType, \"checked\"> | string;\nexport type CheckboxGroupProps = {\n option: CheckBoxItem[];\n onChange?: (value: string[]) => void;\n defaultChecked?: string[] | string;\n padding?: true;\n border?: boolean;\n style?: React.CSSProperties;\n checkboxStyle?: React.CSSProperties;\n align?: \"center\" | \"end\";\n direction?: \"rtl\";\n justify?: \"around\" | \"between\";\n color?: string;\n};\n\nconst CheckboxGroup: React.FC<CheckboxGroupProps> = props => {\n const {\n option,\n onChange,\n defaultChecked,\n padding,\n border,\n style,\n checkboxStyle,\n ...rest\n } = props;\n\n const getOpions = useMemo(() => {\n return option.map((item: CheckBoxItemType | string) => {\n let checkedItem =\n typeof defaultChecked === \"string\" ? [defaultChecked] : defaultChecked;\n if (typeof item === \"string\") {\n return {\n label: item,\n value: item,\n checked: checkedItem?.includes(item),\n };\n } else {\n if (checkedItem?.includes(item.value)) {\n item.checked = true;\n }\n return item;\n }\n });\n }, [option, defaultChecked]);\n\n const [innerOption, setInnerOption] = useState(getOpions);\n\n const handleChange = (checked, index) => {\n const newoption = [...innerOption];\n newoption[index].checked = checked;\n setInnerOption(newoption);\n const newValue = newoption.filter(k => k.checked).map(item => item.value);\n onChange?.(newValue);\n };\n\n const cls = classNames(\"xh-checkbox-group\", { padding }, { border });\n return (\n <div className={cls} style={style}>\n {innerOption.map((item, index) => {\n return (\n <CheckBox\n label={item.label}\n value={item.value}\n disabled={item.disabled}\n checked={item.checked}\n key={index}\n style={checkboxStyle}\n onChange={checked => handleChange(checked, index)}\n {...rest}\n />\n );\n })}\n </div>\n );\n};\n\nexport default CheckboxGroup;\n"],"names":["CheckboxGroup","props","option","onChange","defaultChecked","padding","border","style","checkboxStyle","rest","__rest","getOpions","useMemo","map","item","checkedItem","label","value","checked","includes","_a","__read","useState","innerOption","setInnerOption","cls","classNames","React","createElement","className","index","CheckBox","__assign","disabled","key","newoption","__spreadArray","newValue","filter","k","handleChange"],"mappings":"kNA0BM,IAAAA,EAA8C,SAAAC,GAEhD,IAAAC,EAQED,SAPFE,EAOEF,EAAKE,SANPC,EAMEH,EAAKG,eALPC,EAKEJ,EALKI,QACPC,EAIEL,EAJIK,OACNC,EAGEN,QAFFO,EAEEP,EAAKO,cADJC,EAAIC,EACLT,EATE,CAAA,SAAA,WAAA,iBAAA,UAAA,SAAA,QAAA,kBAWAU,EAAYC,GAAQ,WACxB,OAAOV,EAAOW,KAAI,SAACC,GACjB,IAAIC,EACwB,iBAAnBX,EAA8B,CAACA,GAAkBA,EAC1D,MAAoB,iBAATU,EACF,CACLE,MAAOF,EACPG,MAAOH,EACPI,QAASH,aAAW,EAAXA,EAAaI,SAASL,MAG7BC,aAAW,EAAXA,EAAaI,SAASL,EAAKG,UAC7BH,EAAKI,SAAU,GAEVJ,EAEX,GACF,GAAG,CAACZ,EAAQE,IAENgB,EAAAC,EAAgCC,EAASX,GAAU,GAAlDY,EAAWH,EAAA,GAAEI,OAUdC,EAAMC,EAAW,oBAAqB,CAAErB,QAAOA,GAAI,CAAEC,OAAMA,IACjE,OACEqB,EAAKC,cAAA,MAAA,CAAAC,UAAWJ,EAAKlB,MAAOA,GACzBgB,EAAYV,KAAI,SAACC,EAAMgB,GACtB,OACEH,EAACC,cAAAG,EACCC,EAAA,CAAAhB,MAAOF,EAAKE,MACZC,MAAOH,EAAKG,MACZgB,SAAUnB,EAAKmB,SACff,QAASJ,EAAKI,QACdgB,IAAKJ,EACLvB,MAAOC,EACPL,SAAU,SAAAe,GAAW,OApBV,SAACA,EAASY,GAC7B,IAAMK,EAASC,EAAA,GAAAf,EAAOE,IAAW,GACjCY,EAAUL,GAAOZ,QAAUA,EAC3BM,EAAeW,GACf,IAAME,EAAWF,EAAUG,QAAO,SAAAC,GAAK,OAAAA,EAAErB,OAAO,IAAEL,KAAI,SAAAC,GAAQ,OAAAA,EAAKG,KAAL,IAC9Dd,SAAAA,EAAWkC,EACb,CAc+BG,CAAatB,EAASY,EAAtB,GACjBrB,GAGT,IAGP"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"react";import a from"classnames";import{CheckboxGroup as c}from"@tarojs/components";import t from"../src/hooks/useGenerateId.js";import l from"./Group/index.js";var s=function(l){var s=l.className,o=l.name,n=l.label,r=l.id,h=l.circle,m=l.onChange,i=l.align,p=l.direction,u=l.justify,x=l.checked,d=l.disabled,b=l.value,k=l.style,v=l.color,E=void 0===v?"#f6ab00":v,N=t(r,"xh-checkbox-id"),f=function(e){var a=x||!1,c="";"h5"===process.env.TARO_ENV?(a=e.target.checked,c=e.target.value):(a=e.detail.value.length>0,c=e.detail.value[0]),m&&m(a,c)},g=a("xh-checkbox",s,i,p,u,{h5:"h5"===process.env.TARO_ENV});return"h5"!==process.env.TARO_ENV?e.createElement(c,{onChange:f},e.createElement("label",{htmlFor:N,className:g,style:k},e.createElement("input",{type:"checkbox",id:N,name:o,className:a("xh-checkbox-input",{tt:"tt"===process.env.TARO_ENV}),onChange:f,disabled:d,value:b,checked:x,color:E}),e.createElement("span",{className:a("xh-checkbox-input-fake",h&&"circle",{tt:"tt"===process.env.TARO_ENV})}),e.createElement("span",{className:"xh-checkbox-label"},n))):e.createElement("label",{htmlFor:N,className:g,style:k},e.createElement("input",{type:"checkbox",id:N,name:o,className:"xh-checkbox-input",onChange:f,value:b,defaultChecked:x}),e.createElement("span",{className:a("xh-checkbox-input-fake",h&&"circle")}),e.createElement("span",{className:"xh-checkbox-label"},n))};s.Group=l;export{s as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Checkbox/index.tsx"],"sourcesContent":["import { XHComponentCommonProps } from \"@/types\";\nimport React, { FC, ReactNode } from \"react\";\nimport classNames from \"classnames\";\nimport { CheckboxGroup } from \"@tarojs/components\";\nimport useGenerateId from \"@/hooks/useGenerateId\";\nimport Group from \"./Group\";\nimport \"./index.scss\";\n\ntype CompoundedComponent = React.ForwardRefExoticComponent<\n XHCheckboxProps & React.RefAttributes<HTMLInputElement>\n> & {\n Group: typeof Group;\n};\n\nexport type XHCheckboxProps = {\n onChange?: (check: boolean, value: string) => void;\n checked?: boolean;\n name?: string;\n label: string | ReactNode;\n size?: number;\n circle?: boolean;\n align?: \"center\" | \"end\";\n direction?: \"rtl\";\n justify?: \"around\" | \"between\";\n value?: string | number;\n id?: string;\n disabled?: boolean;\n style?: React.CSSProperties;\n /**\n * 抖音不支持属性选择器\n * @description 主要为抖音支持颜色\n */\n color?: string;\n} & XHComponentCommonProps;\n\nconst XHCheckbox: FC<XHCheckboxProps> = props => {\n const {\n className,\n name,\n label,\n id,\n circle,\n onChange,\n align,\n direction,\n justify,\n checked,\n disabled,\n value,\n style,\n color = \"#f6ab00\",\n } = props;\n\n const finalId = useGenerateId(id, \"xh-checkbox-id\");\n\n const handleOnchange = e => {\n let finalchecked = checked || false;\n let value = \"\";\n if (process.env.TARO_ENV === \"h5\") {\n finalchecked = e.target.checked;\n value = e.target.value;\n } else {\n finalchecked = e.detail.value.length > 0;\n value = e.detail.value[0];\n }\n onChange && onChange(finalchecked, value);\n };\n\n const cls = classNames(\"xh-checkbox\", className, align, direction, justify, {\n h5: process.env.TARO_ENV === \"h5\",\n });\n if (process.env.TARO_ENV !== \"h5\") {\n return (\n <CheckboxGroup onChange={handleOnchange}>\n <label htmlFor={finalId} className={cls} style={style}>\n <input\n type=\"checkbox\"\n id={finalId}\n name={name}\n className={classNames(\"xh-checkbox-input\", {\n tt: process.env.TARO_ENV === \"tt\",\n })}\n onChange={handleOnchange}\n disabled={disabled}\n value={value}\n checked={checked}\n color={color}\n />\n <span\n className={classNames(\n \"xh-checkbox-input-fake\",\n circle && \"circle\",\n { tt: process.env.TARO_ENV === \"tt\" }\n )}\n ></span>\n <span className=\"xh-checkbox-label\">{label}</span>\n </label>\n </CheckboxGroup>\n );\n }\n\n return (\n <label htmlFor={finalId} className={cls} style={style}>\n <input\n type=\"checkbox\"\n id={finalId}\n name={name}\n className=\"xh-checkbox-input\"\n onChange={handleOnchange}\n value={value}\n defaultChecked={checked}\n />\n <span\n className={classNames(\"xh-checkbox-input-fake\", circle && \"circle\")}\n ></span>\n <span className=\"xh-checkbox-label\">{label}</span>\n </label>\n );\n};\n\nconst CheckBox = XHCheckbox as CompoundedComponent;\nCheckBox.Group = Group;\n\nexport default CheckBox;\n"],"names":["CheckBox","props","className","name","label","id","circle","onChange","align","direction","justify","checked","disabled","value","style","_a","color","finalId","useGenerateId","handleOnchange","e","finalchecked","process","env","TARO_ENV","target","detail","length","cls","classNames","h5","React","createElement","CheckboxGroup","htmlFor","type","tt","defaultChecked","Group"],"mappings":"+KAmCA,IAqFMA,EArFkC,SAAAC,GAEpC,IAAAC,EAcED,EAAKC,UAbPC,EAaEF,EAAKE,KAZPC,EAYEH,EAAKG,MAXPC,EAWEJ,EAAKI,GAVPC,EAUEL,SATFM,EASEN,WARFO,EAQEP,QAPFQ,EAOER,EAPOQ,UACTC,EAMET,EANKS,QACPC,EAKEV,EALKU,QACPC,EAIEX,EAJMW,SACRC,EAGEZ,EAHGY,MACLC,EAEEb,EAFGa,MACLC,EACEd,QADFe,OAAQ,IAAAD,EAAA,YAGJE,EAAUC,EAAcb,EAAI,kBAE5Bc,EAAiB,SAAAC,GACrB,IAAIC,EAAeV,IAAW,EAC1BE,EAAQ,GACiB,OAAzBS,QAAQC,IAAIC,UACdH,EAAeD,EAAEK,OAAOd,QACxBE,EAAQO,EAAEK,OAAOZ,QAEjBQ,EAAeD,EAAEM,OAAOb,MAAMc,OAAS,EACvCd,EAAQO,EAAEM,OAAOb,MAAM,IAEzBN,GAAYA,EAASc,EAAcR,EACrC,EAEMe,EAAMC,EAAW,cAAe3B,EAAWM,EAAOC,EAAWC,EAAS,CAC1EoB,GAA6B,OAAzBR,QAAQC,IAAIC,WAElB,MAA6B,OAAzBF,QAAQC,IAAIC,SAEZO,EAACC,cAAAC,EAAc,CAAA1B,SAAUY,GACvBY,EAAOC,cAAA,QAAA,CAAAE,QAASjB,EAASf,UAAW0B,EAAKd,MAAOA,GAC9CiB,EAAAC,cAAA,QAAA,CACEG,KAAK,WACL9B,GAAIY,EACJd,KAAMA,EACND,UAAW2B,EAAW,oBAAqB,CACzCO,GAA6B,OAAzBd,QAAQC,IAAIC,WAElBjB,SAAUY,EACVP,SAAUA,EACVC,MAAOA,EACPF,QAASA,EACTK,MAAOA,IAETe,EACEC,cAAA,OAAA,CAAA9B,UAAW2B,EACT,yBACAvB,GAAU,SACV,CAAE8B,GAA6B,OAAzBd,QAAQC,IAAIC,aAGtBO,EAAMC,cAAA,OAAA,CAAA9B,UAAU,qBAAqBE,KAO3C2B,EAAAC,cAAA,QAAA,CAAOE,QAASjB,EAASf,UAAW0B,EAAKd,MAAOA,GAC9CiB,EACEC,cAAA,QAAA,CAAAG,KAAK,WACL9B,GAAIY,EACJd,KAAMA,EACND,UAAU,oBACVK,SAAUY,EACVN,MAAOA,EACPwB,eAAgB1B,IAElBoB,EACEC,cAAA,OAAA,CAAA9B,UAAW2B,EAAW,yBAA0BvB,GAAU,YAE5DyB,EAAMC,cAAA,OAAA,CAAA9B,UAAU,qBAAqBE,GAG3C,EAGAJ,EAASsC,MAAQA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
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 i,useRef as o,useEffect as c}from"react";import l from"classnames";import u from"../Popup/index.js";import s from"../PickerSlot/index.js";import f from"../src/hooks/useRefs.js";var p=a.forwardRef((function(p,d){var m=p.visible,h=p.title,v=p.data,y=void 0===v?[]:v,g=p.defaultValueData,k=p.onConfirm,b=p.onClose;p.onCloseUpdate;var x=p.onChange,C=p.className,j=p.style,E=p.mode,N=p.swipeDuration,w=e(p,["visible","title","data","defaultValueData","onConfirm","onClose","onCloseUpdate","onChange","className","style","mode","swipeDuration"]),D=t(i([]),2),P=D[0],S=D[1],V=t(i(0),2),A=V[0],I=V[1],R=o(null),U=t(f(),2),M=U[0],O=U[1],T=t(i([]),2),_=T[0],q=T[1],z=o(!1);c((function(){if(g&&0!==g.length&&g.toString()!==P.toString()){var e=n([],t(g),!1);S(e),q(J())}}),[g]),c((function(){x&&x(A,P,G()),z.current&&(z.current=!1,k&&k(G(),A))}),[P]),c((function(){Q()}),[y]);var B=function(e){e.stopPropagation(),b&&b()},F=function(e){e.stopPropagation();var t=!1;M.forEach((function(e){e.moving&&(t=!0),e.stopMomentum()})),t?z.current=!0:k&&k(G(),A),b&&b(),setTimeout((function(){z.current=!1}),0)},G=function(){var e=[];return _.map((function(t,n){var r;return(r=t.filter((function(e){return("object"==typeof e?e.value:e)===P[n]})))[0]?e.push(r[0]):t[0]&&e.push(t[0]),t})),e},H=function(e,r){if(e&&Object.keys(e).length&&P[r]!==("string"==typeof e?e:e.value)){if("cascade"===K()){P[r]="object"==typeof e?e.value:e||"",S(n([],t(P),!1));for(var a=r,i=e;"object"==typeof i&&i&&i.children&&i.children[0];)P[a+1]=i.children[0].value,S(n([],t(P),!1)),a++,i=i.children[0];"object"==typeof i&&i&&i.children&&(P[a+1]="",S(n([],t(P),!1))),q(J())}else S((function(a){var i=n([],t(a),!1);return i[r]=("string"==typeof e?e:e.value)||"",i}));I(r)}},J=function(){switch(K()){case"multiple":return y;case"cascade":return L(y,P);default:return[y]}},K=function(){var e=y[0];if(e){if(Array.isArray(e))return"multiple";if("object"==typeof e&&"children"in e)return"cascade"}return"single"},L=function(e,t){for(var n=[],r={text:"",value:"",children:e},a=0,i=function(){var e=r.children,i=t[a],o=e.findIndex((function(e){return e.value===i}));-1===o&&(o=0),r=r.children[o],a++,n.push(e)};r&&r.children;)i();return n},Q=function(){var e=[],r=J();q(r),r.length>0&&r.forEach((function(t){var n=t[0];n&&e.push("string"==typeof n?n:n.value)})),g||0!==P.length||S(n([],t(e),!1))};return a.createElement(u,{visible:m},a.createElement("div",r({className:l("xh-picker",C),style:j,ref:d},w),a.createElement("div",{className:"xh-picker-header"},a.createElement("span",{className:"xh-picker-header-button picker-cancel",onClick:B},"取消"),a.createElement("div",{className:"xh-picker-header-title"},h||""),a.createElement("span",{className:"xh-picker-header-button picker-confirm",onClick:F},"确定")),a.createElement("div",{className:"xh-picker-panel",ref:R},null==_?void 0:_.map((function(e,t){return a.createElement(s,{ref:O(t),defaultValue:null==P?void 0:P[t],data:e,mode:E,onConfirm:H,swipeDuration:N,key:t,keyIndex:t})})))))}));export{p 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 PropsWithChildren,\n ReactNode,\n useRef,\n ReactElement,\n useState,\n MouseEventHandler,\n} from \"react\";\nimport { ITouchEvent, View } from \"@tarojs/components\";\nimport classNames from \"classnames\";\nimport Popup from \"../Popup\";\nimport Button from \"../Button\";\nimport { useAsyncEffect, useTouch } from \"../../hooks\";\n\nexport interface PickerProps<T extends PickerValue>\n extends PropsWithChildren<{}> {\n visible: boolean;\n title?: string | ReactNode;\n data: T[];\n ItemComponent?: (props: { data: T }) => ReactNode;\n Footer?: ReactNode;\n onConfirm?: (value: T, index: number) => void;\n onCancel?: MouseEventHandler;\n onClose?: MouseEventHandler;\n cancelText?: string;\n confirmText?: string;\n}\n\ninterface PickerObjectValue {\n text: string;\n value: string | number;\n [key: string]: any;\n}\n\nexport type PickerValue = string | PickerObjectValue;\n\nconst Picker = <T extends PickerValue>(props: PickerProps<T>): ReactElement => {\n const {\n visible,\n title,\n ItemComponent,\n Footer,\n data,\n onCancel,\n onConfirm,\n onClose,\n cancelText = \"取消\",\n confirmText = \"确定\",\n } = props;\n\n const [selectIndex, setSelectIndex] = useState(0);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const threshold = 30; // 可拉超出的最高距离\n const [transformDistance, setTransformDistance] = useState(0); // 滚动区域translateY\n const lastTranslateY = useRef(0);\n const [perItemHeight, setPerItemHeight] = useState(0); // 每个item的高度\n const touch = useTouch();\n\n const renderItem = (): ReactNode => {\n return data.map((item, index) => {\n let text =\n typeof item === \"string\" ? item : (item as PickerObjectValue).text;\n const itemClass = classNames(\"xh-picker-body-view-item\", {\n active: selectIndex === index,\n });\n return (\n <View\n className={itemClass}\n onClick={e => handleSelect(index, e)}\n key={index}\n >\n {ItemComponent ? ItemComponent({ data: item }) : text}\n </View>\n );\n });\n };\n const renderHeader = (): ReactNode => {\n return (\n <React.Fragment>\n <Button\n className=\"xh-picker-header-button picker-cancel\"\n shape=\"square\"\n size=\"mini\"\n type=\"ghost\"\n onClick={handleCancel}\n >\n {cancelText}\n </Button>\n {title && <div className=\"xh-picker-header-title\">{title}</div>}\n <Button\n className=\"xh-picker-header-button picker-confirm\"\n shape=\"square\"\n size=\"mini\"\n type=\"ghost\"\n onClick={handleConfirm}\n >\n {confirmText}\n </Button>\n </React.Fragment>\n );\n };\n\n useAsyncEffect(async () => {\n if (visible) {\n const { height } = await rootRef.current!.getBoundingClientRect();\n const perheight = height / data.length;\n\n setPerItemHeight(perheight);\n }\n }, [visible, data.length]);\n\n function handleSelect(index: number, e: ITouchEvent): void {\n setSelectIndex(index);\n\n handleConfirm(e, index);\n }\n\n function getValue(index: number): T {\n return data[index];\n }\n\n function handleCancel(e): void {\n setSelectIndex(selectIndex);\n\n onCancel && onCancel(e);\n onClose && onClose(e);\n }\n\n function handleConfirm(e, index = selectIndex): void {\n const value = getValue(index);\n onConfirm && onConfirm(value, index);\n onClose && onClose(e);\n }\n\n const handleToucMove = (e: ITouchEvent) => {\n e.preventDefault();\n e.stopPropagation();\n // 试验\n touch.touchmove(e);\n const distanceY = touch.touchMoveDistance.y;\n if (distanceY === 0) return; // 点击事件\n console.log(distanceY);\n console.log(\"distanceY\");\n let finaltrans = distanceY + lastTranslateY.current;\n if (Math.abs(finaltrans) < perItemHeight / 3) return;\n if (finaltrans >= perItemHeight) return;\n if (finaltrans <= -perItemHeight * data.length - threshold) return;\n setTransformDistance(finaltrans);\n };\n\n const handleTouchStart = (e: ITouchEvent) => {\n e.preventDefault();\n lastTranslateY.current = transformDistance; // end的时候记录最后一次transiton\n // shiyan\n touch.touchstart(e);\n };\n\n const handleTouchEnd = (e: ITouchEvent) => {\n touch.touchend(e);\n e.preventDefault();\n const total = perItemHeight * data.length;\n let index =\n data.length -\n Math.round((total - Math.abs(transformDistance)) / perItemHeight);\n\n if (\n index < 0 ||\n (transformDistance > 0 && transformDistance <= perItemHeight) // 如果往上滚动到顶\n )\n index = 0;\n\n if (index > data.length - 1) index = data.length - 1;\n setTransformDistance(-(index * perItemHeight));\n setSelectIndex(index);\n };\n\n return (\n <Popup visible={visible}>\n <View className=\"xh-picker\">\n <View className=\"xh-picker-header\">{renderHeader()}</View>\n <View className=\"xh-picker-body\">\n <View\n className=\"xh-picker-body-view\"\n ref={rootRef}\n onTouchStart={handleTouchStart}\n onTouchMove={handleToucMove}\n onTouchEnd={handleTouchEnd}\n style={{\n transform: `translateY(${transformDistance}px)`,\n }}\n catch-move\n >\n {renderItem()}\n </View>\n <View className=\"xh-picker-body-mask\">\n <View className=\"xh-picker-body-mask-top\"></View>\n <View className=\"xh-picker-body-mask-middle\"></View>\n <View className=\"xh-picker-body-mask-bottom\"></View>\n </View>\n </View>\n <View className=\"xh-picker-footer\">{Footer}</View>\n </View>\n </Popup>\n );\n};\n\nexport default Picker;\n"],"names":["Picker","props","visible","title","ItemComponent","Footer","data","onCancel","onConfirm","onClose","_a","cancelText","_b","confirmText","_c","__read","useState","selectIndex","setSelectIndex","rootRef","useRef","_d","transformDistance","setTransformDistance","lastTranslateY","_e","perItemHeight","setPerItemHeight","touch","useTouch","handleCancel","e","handleConfirm","index","value","getValue","useAsyncEffect","__awaiter","current","getBoundingClientRect","height","sent","perheight","length","React","createElement","Popup","View","className","Fragment","Button","shape","size","type","onClick","ref","onTouchStart","preventDefault","touchstart","onTouchMove","stopPropagation","touchmove","distanceY","touchMoveDistance","y","finaltrans","Math","abs","onTouchEnd","touchend","total","round","style","transform","concat","map","item","text","itemClass","classNames","active","handleSelect","key"],"mappings":"wVAoCM,IAAAA,EAAS,SAAwBC,GAEnC,IAAAC,EAUED,EAVKC,QACPC,EASEF,EAAKE,MARPC,EAQEH,gBAPFI,EAOEJ,EAPII,OACNC,EAMEL,EAAKK,KALPC,EAKEN,WAJFO,EAIEP,EAJOO,UACTC,EAGER,EAAKQ,QAFPC,EAEET,EAAKU,WAFPA,OAAa,IAAAD,EAAA,KAAIA,EACjBE,EACEX,EADgBY,YAAlBA,OAAW,IAAAD,EAAG,KAAIA,EAGdE,EAAAC,EAAgCC,EAAS,GAAE,GAA1CC,EAAWH,EAAA,GAAEI,OAEdC,EAAUC,EAAuB,MAEjCC,EAAAN,EAA4CC,EAAS,GAAE,GAAtDM,OAAmBC,EAAmCF,EAAA,GACvDG,EAAiBJ,EAAO,GACxBK,EAAAV,EAAoCC,EAAS,GAAE,GAA9CU,OAAeC,EAA+BF,EAAA,GAC/CG,EAAQC,IAiEd,SAASC,EAAaC,GACpBb,EAAeD,GAEfV,GAAYA,EAASwB,GACrBtB,GAAWA,EAAQsB,EACpB,CAED,SAASC,EAAcD,EAAGE,QAAA,IAAAA,IAAAA,EAAmBhB,GAC3C,IAAMiB,EAZR,SAAkBD,GAChB,OAAO3B,EAAK2B,EACb,CAUeE,CAASF,GACvBzB,GAAaA,EAAU0B,EAAOD,GAC9BxB,GAAWA,EAAQsB,EACpB,CA9BDK,GAAe,WAAA,OAAAC,OAAA,OAAA,OAAA,GAAA,qEACT,OAAAnC,EACiB,CAAA,EAAMiB,EAAQmB,QAASC,yBADjC,CAAA,EAAA,UACDC,EAAW9B,EAA8C+B,OAAnDD,OACRE,EAAYF,EAASlC,EAAKqC,OAEhChB,EAAiBe,oCAEpB,GAAE,CAACxC,EAASI,EAAKqC,SAmElB,OACEC,EAACC,cAAAC,EAAM,CAAA5C,QAASA,GACd0C,EAAAC,cAACE,EAAI,CAACC,UAAU,aACdJ,EAACC,cAAAE,GAAKC,UAAU,oBArGlBJ,EAAAC,cAACD,EAAMK,SAAQ,KACbL,EAACC,cAAAK,GACCF,UAAU,wCACVG,MAAM,SACNC,KAAK,OACLC,KAAK,QACLC,QAASxB,GAERnB,GAEFR,GAASyC,EAAKC,cAAA,MAAA,CAAAG,UAAU,0BAA0B7C,GACnDyC,EAACC,cAAAK,EACC,CAAAF,UAAU,yCACVG,MAAM,SACNC,KAAK,OACLC,KAAK,QACLC,QAAStB,GAERnB,KAoFH+B,EAAAC,cAACE,EAAI,CAACC,UAAU,kBACdJ,EAACC,cAAAE,GACCC,UAAU,sBACVO,IAAKpC,EACLqC,aAlCe,SAACzB,GACxBA,EAAE0B,iBACFjC,EAAec,QAAUhB,EAEzBM,EAAM8B,WAAW3B,EACnB,EA8BU4B,YAnDa,SAAC5B,GACtBA,EAAE0B,iBACF1B,EAAE6B,kBAEFhC,EAAMiC,UAAU9B,GAChB,IAAM+B,EAAYlC,EAAMmC,kBAAkBC,EAC1C,GAAkB,IAAdF,EAAJ,CAGA,IAAIG,EAAaH,EAAYtC,EAAec,QACxC4B,KAAKC,IAAIF,GAAcvC,EAAgB,GACvCuC,GAAcvC,GACduC,IAAevC,EAAgBpB,EAAKqC,OA9FxB,IA+FhBpB,EAAqB0C,EAPO,CAQ9B,EAsCUG,WA7Ba,SAACrC,GACtBH,EAAMyC,SAAStC,GACfA,EAAE0B,iBACF,IAAMa,EAAQ5C,EAAgBpB,EAAKqC,OAC/BV,EACF3B,EAAKqC,OACLuB,KAAKK,OAAOD,EAAQJ,KAAKC,IAAI7C,IAAsBI,IAGnDO,EAAQ,GACPX,EAAoB,GAAKA,GAAqBI,KAE/CO,EAAQ,GAENA,EAAQ3B,EAAKqC,OAAS,IAAGV,EAAQ3B,EAAKqC,OAAS,GACnDpB,GAAuBU,EAAQP,GAC/BR,EAAee,EACjB,EAaUuC,MAAO,CACLC,UAAW,cAAcC,OAAApD,EAAsB,QAIhD,cAAA,GArIFhB,EAAKqE,KAAI,SAACC,EAAM3C,GACrB,IAAI4C,EACc,iBAATD,EAAoBA,EAAQA,EAA2BC,KAC1DC,EAAYC,EAAW,2BAA4B,CACvDC,OAAQ/D,IAAgBgB,IAE1B,OACEW,gBAACG,EAAI,CACHC,UAAW8B,EACXxB,QAAS,SAAAvB,GAAK,OA2CtB,SAAsBE,EAAeF,GACnCb,EAAee,GAEfD,EAAcD,EAAGE,EAClB,CA/CqBgD,CAAahD,EAAOF,IAClCmD,IAAKjD,GAEJ7B,EAAgBA,EAAc,CAAEE,KAAMsE,IAAUC,EAGvD,KAwHMjC,EAAAC,cAACE,EAAI,CAACC,UAAU,uBACdJ,EAAAC,cAACE,EAAI,CAACC,UAAU,4BAChBJ,EAAAC,cAACE,EAAI,CAACC,UAAU,+BAChBJ,EAAAC,cAACE,EAAK,CAAAC,UAAU,iCAGpBJ,EAACC,cAAAE,EAAK,CAAAC,UAAU,oBAAoB3C,IAI5C"}
|
|
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,2 +1,2 @@
|
|
|
1
|
-
import{__rest as e,__read as r,__assign as t}from"../node_modules/tslib/tslib.es6.js";import
|
|
1
|
+
import{__rest as e,__read as r,__assign as t}from"../node_modules/tslib/tslib.es6.js";import a,{useState as i}from"react";import l from"classnames";import n from"./Picker.js";var o=function(o){var s=o.className,c=o.children,m=e(o,["className","children"]),f=r(i(!1),2),d=f[0],p=f[1];function u(){p(!1)}return a.createElement("div",{className:l("xh-picker-field",s),onClick:function(){m.data.length<=0||p(!0)}},c,a.createElement(n,t({visible:d},m,{onCancel:u,onClose:u})))};export{o 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
|
|
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 PickerData = PickerValue;\nexport interface PickerFieldProps<T extends PickerValue>\n extends PropsWithChildren<{}> {\n title?: ReactNode | string;\n data: T[] | T[][];\n className?: string;\n onConfirm?: (value: T[], index: number) => void;\n onCancel?: () => void;\n mode?: \"normal\" | \"3D\";\n}\n\nconst PickerField = <T extends PickerValue>(\n props: PickerFieldProps<T>\n): ReactElement => {\n const { className, children, ...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 }\n\n return (\n <div\n className={classNames(\"xh-picker-field\", className)}\n onClick={handleClick}\n >\n {children}\n <Picker\n visible={visible}\n {...rest}\n onCancel={handleClose}\n onClose={handleClose}\n />\n </div>\n );\n};\n\nexport default PickerField;\n"],"names":["PickerField","props","className","children","rest","__rest","_a","__read","useState","visible","setVisible","handleClose","React","createElement","classNames","onClick","data","length","Picker","__assign","onCancel","onClose"],"mappings":"+KAsBM,IAAAA,EAAc,SAClBC,GAEQ,IAAAC,EAAiCD,EAAxBC,UAAEC,EAAsBF,EAAdE,SAAKC,EAASC,EAAAJ,EAAnC,CAAA,YAAA,aACAK,EAAAC,EAAwBC,GAAS,GAAM,GAAtCC,EAAOH,EAAA,GAAEI,OAOhB,SAASC,IACPD,GAAW,EACZ,CAED,OACEE,EAAAC,cAAA,MAAA,CACEX,UAAWY,EAAW,kBAAmBZ,GACzCa,QAZJ,WACMX,EAAKY,KAAKC,QAAU,GACxBP,GAAW,EACZ,GAWIP,EACDS,EAAAC,cAACK,EACCC,EAAA,CAAAV,QAASA,GACLL,EACJ,CAAAgB,SAAUT,EACVU,QAASV,KAIjB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__read as t,__awaiter as e,__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,x=s.mode,b=void 0===x?"normal":x,g=s.swipeDuration,M=void 0===g?1e3:g,y=s.visible,k=void 0!==y&&y,E=s.onConfirm,T=l(),j=t(o(1),2),D=j[0],N=j[1],w=a(36),Y=t(o(0),2),z=Y[0],F=Y[1],H=t(o("0deg"),2),V=H[0],C=H[1],I=a(!1),P=a(null),R=a(null),S=a(null),_=t(o(0),2),q=_[0],A=_[1],B=t(o(0),2),G=B[0],J=B[1],K=a(0),L=t(o(0),2),O=L[0],Q=L[1],U=function(t){return t>=D+8||t<=D-8},W=function(t,e,n,r){void 0===t&&(t=0),void 0===n&&(n=200);var o=n;"end"!==e&&(o=0),F(o),C(r),Q(t)},X=function(t,e,n){var r=t+K.current;if("end"===e){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,e,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(t){var e=Math.round(-t/w.current);E&&E(v[e],d)},$=function(t,e){var n=t;return n=Math.abs(n/e)/.003*(n<0?-1:1)},tt=function(t,e){var n=e||h,r=-1;n?v.some((function(t,e){return("string"==typeof t?t===n:t.value===n)&&(r=e,!0)})):v.forEach((function(t,e){("string"==typeof t?t===h:t.value===h)&&(r=e)})),N(-1===r?1:r+1);var o=-1===r?0:r*w.current;t&&Z(-o),X(-o)},et=function(){I.current=!1,F(0),Z(O)},nt=function(t,e){("boolean"!=typeof t.cancelable||t.cancelable)&&t.preventDefault(),e&&t.stopPropagation()};return c((function(){return Q(0),K.current=0,tt(!1),function(){clearTimeout(undefined)}}),[v]),c((function(){k&&setTimeout((function(){e(void 0,void 0,void 0,(function(){return n(this,(function(t){return tt(!0),[2]}))}))}),200)}),[k]),i(f,(function(){return{stopMomentum:et,moving:I.current}})),r.createElement(u,{className:"xh-picker-list",ref:S,onTouchStart:function(t){T.start(t),J(T.deltaY),A(Date.now()),K.current=O},onTouchMove:function(t){T.move(t),T.isVertical()&&(I.current=!0,nt(t,!0));var e=T.deltaY-G;X(e)},onTouchEnd:function(){if(I.current){var t=T.deltaY-G,e=Date.now()-q;if(e<=300&&Math.abs(t)>15){var n=$(t,e);X(n,"end",+M)}else X(t,"end");setTimeout((function(){T.reset()}),0)}}},r.createElement(u,{className:"xh-picker-roller",ref:R,style:"3D"===b?{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:et},"3D"===b&&v.map((function(t,e){return r.createElement(u,{className:"xh-picker-roller-item ".concat(U(e+1)&&"nut-picker-roller-item-hidden"),style:{transform:"rotate3d(1, 0, 0, ".concat(-20*(e+1),"deg) translate3d(0px, 0px, 104px)"),height:"".concat(w.current,"px"),lineHeight:"".concat(w.current,"px")},key:"string"==typeof t?e:t.value?t.value:e},r.createElement(r.Fragment,null,"object"==typeof t?t.text:t))})),"normal"===b&&v.map((function(t,e){return r.createElement(u,{className:"xh-picker-roller-item-title",key:"object"==typeof t?t.value:t||e,style:{height:"".concat(w.current,"px"),lineHeight:"".concat(w.current,"px")}},r.createElement(r.Fragment,null,"object"==typeof t?t.text:t))}))),r.createElement(u,{className:"xh-picker-mask"}),r.createElement(u,{className:"xh-picker-indicator",ref:P}))}));export{s as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/PickerSlot/index.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.some((item, idx) => {\n if (typeof item === \"string\" ? item === value : item.value === value) {\n index = idx;\n return true;\n }\n return false;\n });\n } else {\n data.forEach((item, i) => {\n if (\n typeof item === \"string\"\n ? item === defaultValue\n : item.value === 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","some","item","idx","forEach","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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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__rest as e,__read as a,__assign as n,__spreadArray as r}from"../../node_modules/tslib/tslib.es6.js";import o,{useMemo as t,useState as l}from"react";import d from"classnames";import i from"../index.js";var c=function(c){var u=c.option,m=c.onChange,s=c.name,f=c.padding,p=c.border,h=c.radioStyle,b=c.defaultChecked,g=e(c,["option","onChange","name","padding","border","radioStyle","defaultChecked"]),v=t((function(){return null==u?void 0:u.map((function(e){return"string"==typeof e?{label:e,value:e,checked:b===e}:(b===e.value&&(e.checked=!0),e)}))}),[u,b]),k=a(l(v),2),y=k[0],C=k[1],x=d("xh-radio-group",{padding:f},{border:p});return o.createElement("div",{className:x},y.map((function(e,t){return o.createElement(i,n({label:e.label,value:e.value,disabled:e.disabled,name:s,key:t,className:"xh-radio-group-list",circle:!0,onChange:function(){return function(e){for(var n=r([],a(y),!1),o="",t=0;t<n.length;t++)t===e?(n[t].checked=!0,o=n[t].value):n[t].checked=!1;C(n),null==m||m(o)}(t)},checked:e.checked,style:h},g))})))};export{c as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Radio/Group/index.tsx"],"sourcesContent":["import React, { useMemo, useState, ReactNode } from \"react\";\nimport classNames from \"classnames\";\nimport Radio from \"..\";\n\nexport type RadioItemType = {\n label: string | ReactNode;\n value: string;\n disabled?: boolean;\n checked?: boolean;\n};\nexport type RadioItem = RadioItemType | string;\nexport type RadioGroupProps = {\n option: RadioItem[];\n onChange?: (value: string | number) => void;\n name: string;\n circle?: boolean;\n align?: \"center\" | \"end\";\n direction?: \"rtl\";\n justify?: \"around\" | \"between\";\n id?: string;\n padding?: true;\n border?: boolean;\n style?: React.CSSProperties;\n radioStyle?: React.CSSProperties;\n defaultChecked?: string;\n color?: string;\n};\n\nconst RadioGroup: React.FC<RadioGroupProps> = props => {\n const {\n option,\n onChange,\n name,\n padding,\n border,\n radioStyle,\n defaultChecked,\n ...rest\n } = props;\n\n let getOpions = useMemo(() => {\n return option?.map(item => {\n if (typeof item === \"string\") {\n return {\n label: item,\n value: item,\n checked: defaultChecked === item,\n };\n } else {\n if (defaultChecked === item.value) {\n item.checked = true;\n }\n return item;\n }\n });\n }, [option, defaultChecked]);\n\n const [innerOptions, setInnerOptions] = useState(getOpions);\n\n const handleChange = idx => {\n let newoption = [...innerOptions];\n let newValue = \"\";\n for (let index = 0; index < newoption.length; index++) {\n if (index === idx) {\n newoption[index].checked = true;\n newValue = newoption[index].value;\n } else {\n newoption[index].checked = false;\n }\n }\n setInnerOptions(newoption);\n onChange?.(newValue);\n };\n\n const cls = classNames(\"xh-radio-group\", { padding }, { border });\n\n return (\n <div className={cls}>\n {innerOptions.map((item, index) => {\n return (\n <Radio\n label={item.label}\n value={item.value}\n disabled={item.disabled}\n name={name}\n key={index}\n className=\"xh-radio-group-list\"\n circle\n onChange={() => handleChange(index)}\n checked={item.checked}\n style={radioStyle}\n {...rest}\n />\n );\n })}\n </div>\n );\n};\n\nexport default RadioGroup;\n"],"names":["RadioGroup","props","option","onChange","name","padding","border","radioStyle","defaultChecked","rest","__rest","getOpions","useMemo","map","item","label","value","checked","_a","__read","useState","innerOptions","setInnerOptions","cls","classNames","React","createElement","className","index","Radio","__assign","disabled","key","circle","idx","newoption","__spreadArray","newValue","length","handleChange","style"],"mappings":"kNA4BM,IAAAA,EAAwC,SAAAC,GAE1C,IAAAC,EAQED,SAPFE,EAOEF,EAAKE,SANPC,EAMEH,EAAKG,KALPC,EAKEJ,EALKI,QACPC,EAIEL,EAJIK,OACNC,EAGEN,aAFFO,EAEEP,EAAKO,eADJC,EAAIC,EACLT,EATE,CAAA,SAAA,WAAA,OAAA,UAAA,SAAA,aAAA,mBAWFU,EAAYC,GAAQ,WACtB,OAAOV,aAAM,EAANA,EAAQW,KAAI,SAAAC,GACjB,MAAoB,iBAATA,EACF,CACLC,MAAOD,EACPE,MAAOF,EACPG,QAAST,IAAmBM,IAG1BN,IAAmBM,EAAKE,QAC1BF,EAAKG,SAAU,GAEVH,EAEX,GACF,GAAG,CAACZ,EAAQM,IAENU,EAAAC,EAAkCC,EAAST,GAAU,GAApDU,EAAYH,EAAA,GAAEI,OAiBfC,EAAMC,EAAW,iBAAkB,CAAEnB,QAAOA,GAAI,CAAEC,OAAMA,IAE9D,OACEmB,EAAAC,cAAA,MAAA,CAAKC,UAAWJ,GACbF,EAAaR,KAAI,SAACC,EAAMc,GACvB,OACEH,EAAAC,cAACG,EAAKC,EAAA,CACJf,MAAOD,EAAKC,MACZC,MAAOF,EAAKE,MACZe,SAAUjB,EAAKiB,SACf3B,KAAMA,EACN4B,IAAKJ,EACLD,UAAU,sBACVM,QAAM,EACN9B,SAAU,WAAM,OA7BL,SAAA+B,GAGnB,IAFA,IAAIC,EAASC,EAAA,GAAAjB,EAAOE,IAAY,GAC5BgB,EAAW,GACNT,EAAQ,EAAGA,EAAQO,EAAUG,OAAQV,IACxCA,IAAUM,GACZC,EAAUP,GAAOX,SAAU,EAC3BoB,EAAWF,EAAUP,GAAOZ,OAE5BmB,EAAUP,GAAOX,SAAU,EAG/BK,EAAgBa,GAChBhC,SAAAA,EAAWkC,EACb,CAgB0BE,CAAaX,EAAb,EAChBX,QAASH,EAAKG,QACduB,MAAOjC,GACHE,GAGT,IAGP"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"react";import a from"classnames";import{RadioGroup as t}from"@tarojs/components";import l from"../src/hooks/useGenerateId.js";import r from"./Group/index.js";var s=function(r){var s=r.className,n=r.name,o=r.label,c=r.id,i=r.circle,m=r.onChange,d=r.align,p=r.direction,u=r.justify,h=r.checked,v=r.disabled,f=r.value,E=r.style,N=r.color,x=void 0===N?"#f6ab00":N,b=l(c,"xh-radio-id"),g=function(e){var a=h||!1,t="";"h5"===process.env.TARO_ENV?(a=e.target.checked,t=e.target.value):(a=e.detail.value.length>0,t=e.detail.value),null==m||m(a,t)},k=a("xh-radio",s,d,p,u);return"h5"!==process.env.TARO_ENV?e.createElement(t,{onChange:g},e.createElement("label",{htmlFor:b,className:k,style:E},e.createElement("input",{type:"radio",id:b,name:n,className:a("xh-radio-input",{tt:"tt"===process.env.TARO_ENV}),onChange:g,disabled:v,value:f,checked:h,color:x}),e.createElement("span",{className:a("xh-radio-input-fake",i&&"circle",{tt:"tt"===process.env.TARO_ENV})}),e.createElement("span",{className:"xh-radio-label"},o))):e.createElement("label",{htmlFor:b,className:k,style:E},e.createElement("input",{type:"radio",id:b,name:n,className:"xh-radio-input",onChange:g,value:f,disabled:v,defaultChecked:h}),e.createElement("span",{className:a("xh-radio-input-fake",i&&"circle")}),e.createElement("span",{className:"xh-radio-label"},o))};s.Group=r;export{s as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Radio/index.tsx"],"sourcesContent":["import { XHComponentCommonProps } from \"@/types\";\nimport React, { FC, ReactNode } from \"react\";\nimport classNames from \"classnames\";\nimport { RadioGroup } from \"@tarojs/components\";\nimport useGenerateId from \"@/hooks/useGenerateId\";\n\nimport Group from \"./Group\";\nimport \"./index.scss\";\n\ntype CompoundedComponent = React.ForwardRefExoticComponent<\n XHRadioProps & React.RefAttributes<HTMLInputElement>\n> & {\n Group: typeof Group;\n};\n\nexport type XHRadioProps = {\n onChange?: (check: boolean, value: string) => void;\n checked?: boolean;\n name?: string;\n label: string | ReactNode;\n size?: number;\n circle?: boolean;\n align?: \"center\" | \"end\";\n direction?: \"rtl\";\n justify?: \"around\" | \"between\";\n value?: string | number;\n id?: string;\n disabled?: boolean;\n style?: React.CSSProperties;\n /**\n * 抖音不支持属性选择器\n * @description 主要为抖音支持颜色\n */\n color?: string;\n} & XHComponentCommonProps;\n\nconst XHRadio: FC<XHRadioProps> = props => {\n const {\n className,\n name,\n label,\n id,\n circle,\n onChange,\n align,\n direction,\n justify,\n checked,\n disabled,\n value,\n style,\n color = \"#f6ab00\",\n } = props;\n\n const finalId = useGenerateId(id, \"xh-radio-id\");\n\n const handleOnchange = e => {\n let finalchecked = checked || false;\n let value = \"\";\n if (process.env.TARO_ENV === \"h5\") {\n finalchecked = e.target.checked;\n value = e.target.value;\n } else {\n finalchecked = e.detail.value.length > 0;\n value = e.detail.value;\n }\n onChange?.(finalchecked, value);\n };\n\n const cls = classNames(\"xh-radio\", className, align, direction, justify);\n if (process.env.TARO_ENV !== \"h5\") {\n return (\n <RadioGroup onChange={handleOnchange}>\n <label htmlFor={finalId} className={cls} style={style}>\n <input\n type=\"radio\"\n id={finalId}\n name={name}\n className={classNames(\"xh-radio-input\", {\n tt: process.env.TARO_ENV === \"tt\",\n })}\n onChange={handleOnchange}\n disabled={disabled}\n value={value}\n checked={checked}\n color={color}\n />\n <span\n className={classNames(\"xh-radio-input-fake\", circle && \"circle\", {\n tt: process.env.TARO_ENV === \"tt\",\n })}\n ></span>\n <span className=\"xh-radio-label\">{label}</span>\n </label>\n </RadioGroup>\n );\n }\n\n return (\n <label htmlFor={finalId} className={cls} style={style}>\n <input\n type=\"radio\"\n id={finalId}\n name={name}\n className=\"xh-radio-input\"\n onChange={handleOnchange}\n value={value}\n disabled={disabled}\n defaultChecked={checked}\n />\n <span\n className={classNames(\"xh-radio-input-fake\", circle && \"circle\")}\n ></span>\n <span className=\"xh-radio-label\">{label}</span>\n </label>\n );\n};\n\nconst Radio = XHRadio as CompoundedComponent;\nRadio.Group = Group;\n\nexport default Radio;\n"],"names":["Radio","props","className","name","label","id","circle","onChange","align","direction","justify","checked","disabled","value","style","_a","color","finalId","useGenerateId","handleOnchange","e","finalchecked","process","env","TARO_ENV","target","detail","length","cls","classNames","React","createElement","RadioGroup","htmlFor","type","tt","defaultChecked","Group"],"mappings":"4KAoCA,IAkFMA,EAlF4B,SAAAC,GAE9B,IAAAC,EAcED,EAAKC,UAbPC,EAaEF,EAAKE,KAZPC,EAYEH,EAAKG,MAXPC,EAWEJ,EAAKI,GAVPC,EAUEL,SATFM,EASEN,WARFO,EAQEP,QAPFQ,EAOER,EAPOQ,UACTC,EAMET,EANKS,QACPC,EAKEV,EALKU,QACPC,EAIEX,EAJMW,SACRC,EAGEZ,EAHGY,MACLC,EAEEb,EAFGa,MACLC,EACEd,QADFe,OAAQ,IAAAD,EAAA,YAGJE,EAAUC,EAAcb,EAAI,eAE5Bc,EAAiB,SAAAC,GACrB,IAAIC,EAAeV,IAAW,EAC1BE,EAAQ,GACiB,OAAzBS,QAAQC,IAAIC,UACdH,EAAeD,EAAEK,OAAOd,QACxBE,EAAQO,EAAEK,OAAOZ,QAEjBQ,EAAeD,EAAEM,OAAOb,MAAMc,OAAS,EACvCd,EAAQO,EAAEM,OAAOb,OAEnBN,SAAAA,EAAWc,EAAcR,EAC3B,EAEMe,EAAMC,EAAW,WAAY3B,EAAWM,EAAOC,EAAWC,GAChE,MAA6B,OAAzBY,QAAQC,IAAIC,SAEZM,EAACC,cAAAC,EAAW,CAAAzB,SAAUY,GACpBW,EAAOC,cAAA,QAAA,CAAAE,QAAShB,EAASf,UAAW0B,EAAKd,MAAOA,GAC9CgB,EAAAC,cAAA,QAAA,CACEG,KAAK,QACL7B,GAAIY,EACJd,KAAMA,EACND,UAAW2B,EAAW,iBAAkB,CACtCM,GAA6B,OAAzBb,QAAQC,IAAIC,WAElBjB,SAAUY,EACVP,SAAUA,EACVC,MAAOA,EACPF,QAASA,EACTK,MAAOA,IAETc,EACEC,cAAA,OAAA,CAAA7B,UAAW2B,EAAW,sBAAuBvB,GAAU,SAAU,CAC/D6B,GAA6B,OAAzBb,QAAQC,IAAIC,aAGpBM,EAAMC,cAAA,OAAA,CAAA7B,UAAU,kBAAkBE,KAOxC0B,EAAAC,cAAA,QAAA,CAAOE,QAAShB,EAASf,UAAW0B,EAAKd,MAAOA,GAC9CgB,EAAAC,cAAA,QAAA,CACEG,KAAK,QACL7B,GAAIY,EACJd,KAAMA,EACND,UAAU,iBACVK,SAAUY,EACVN,MAAOA,EACPD,SAAUA,EACVwB,eAAgBzB,IAElBmB,EACEC,cAAA,OAAA,CAAA7B,UAAW2B,EAAW,sBAAuBvB,GAAU,YAEzDwB,EAAMC,cAAA,OAAA,CAAA7B,UAAU,kBAAkBE,GAGxC,EAGAJ,EAAMqC,MAAQA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__assign as e}from"../node_modules/tslib/tslib.es6.js";import*as t from"react";import{SpaceContext as a}from"./index.js";function l(l){var r,i=l.className,n=l.direction,s=l.index,o=l.marginDirection,m=l.children,c=l.split,p=l.wrap,d=t.useContext(a),u=d.horizontalSize,x=d.verticalSize,f=d.latestIndex,g={};return d.supportFlexGap||("vertical"===n?s<f&&(g={marginBottom:u/(c?2:1)}):g=e(e({},s<f&&((r={})[o]=u/(c?2:1),r)),p&&{paddingBottom:x})),null==m?null:t.createElement(t.Fragment,null,t.createElement("div",{className:i,style:g},m),s<f&&c&&t.createElement("span",{className:"".concat(i,"-split"),style:g},c))}export{l as default};
|
|
2
|
+
//# sourceMappingURL=Item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Item.js","sources":["../../../src/components/Space/Item.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SpaceContext } from \".\";\n\nexport interface ItemProps {\n className: string;\n children: React.ReactNode;\n index: number;\n direction?: \"horizontal\" | \"vertical\";\n marginDirection: \"marginLeft\" | \"marginRight\";\n split?: string | React.ReactNode;\n wrap?: boolean;\n}\n\nexport default function Item({\n className,\n direction,\n index,\n marginDirection,\n children,\n split,\n wrap,\n}: ItemProps) {\n const { horizontalSize, verticalSize, latestIndex, supportFlexGap } =\n React.useContext(SpaceContext);\n\n let style: React.CSSProperties = {};\n\n if (!supportFlexGap) {\n if (direction === \"vertical\") {\n if (index < latestIndex) {\n style = { marginBottom: horizontalSize / (split ? 2 : 1) };\n }\n } else {\n style = {\n ...(index < latestIndex && {\n [marginDirection]: horizontalSize / (split ? 2 : 1),\n }),\n ...(wrap && { paddingBottom: verticalSize }),\n };\n }\n }\n\n if (children === null || children === undefined) {\n return null;\n }\n\n return (\n <React.Fragment>\n <div className={className} style={style}>\n {children}\n </div>\n {index < latestIndex && split && (\n <span className={`${className}-split`} style={style}>\n {split}\n </span>\n )}\n </React.Fragment>\n );\n}\n"],"names":["Item","_a","className","direction","index","marginDirection","children","split","wrap","_c","React","useContext","SpaceContext","horizontalSize","verticalSize","latestIndex","style","marginBottom","__assign","_b","paddingBottom","createElement","Fragment","concat"],"mappings":"gIAawB,SAAAA,EAAKC,SAC3BC,cACAC,cACAC,UACAC,EAAeJ,EAAAI,gBACfC,EAAQL,EAAAK,SACRC,EAAKN,EAAAM,MACLC,EAAIP,EAAAO,KAEEC,EACJC,EAAMC,WAAWC,GADXC,mBAAgBC,iBAAcC,gBAGlCC,EAA6B,CAAA,EAiBjC,0BAdoB,aAAdb,EACEC,EAAQW,IACVC,EAAQ,CAAEC,aAAcJ,GAAkBN,EAAQ,EAAI,KAGxDS,EACKE,EAAAA,EAAA,CAAA,EAACd,EAAQW,KAAWI,EAAA,CAAA,GACpBd,GAAkBQ,GAAkBN,EAAQ,EAAI,OAE/CC,GAAQ,CAAEY,cAAeN,KAK/BR,QACK,KAIPI,EAAAW,cAACX,EAAMY,SAAQ,KACbZ,EAAKW,cAAA,MAAA,CAAAnB,UAAWA,EAAWc,MAAOA,GAC/BV,GAEFF,EAAQW,GAAeR,GACtBG,EAAAW,cAAA,OAAA,CAAMnB,UAAW,GAAGqB,OAAArB,YAAmBc,MAAOA,GAC3CT,GAKX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-provider.js","sources":["../../../src/components/Space/config-provider.ts"],"sourcesContent":["import React from \"react\";\n\nexport type DirectionType = \"ltr\" | \"rtl\" | undefined;\n\nexport type SizeType = \"small\" | \"normal\" | \"large\" | undefined;\n\nexport interface ConfigConsumerProps {\n getPrefixCls: (suffixCls?: string) => string;\n direction?: DirectionType;\n space?: {\n size?: SizeType | number;\n };\n}\n\nexport const defaultGetPrefixCls = (suffixCls?: string) => {\n return suffixCls ? `xh-${suffixCls}` : \"xh\";\n};\n\nexport const ConfigContext = React.createContext<ConfigConsumerProps>({\n getPrefixCls: defaultGetPrefixCls,\n});\n"],"names":["defaultGetPrefixCls","suffixCls","concat","ConfigContext","React","createContext","getPrefixCls"],"mappings":"qBAcO,IAAMA,EAAsB,SAACC,GAClC,OAAOA,EAAY,MAAAC,OAAMD,GAAc,IACzC,EAEaE,EAAgBC,EAAMC,cAAmC,CACpEC,aAAcN"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__rest as t,__read as e,__assign as r}from"../node_modules/tslib/tslib.es6.js";import o from"react";import{View as a}from"@tarojs/components";import n from"classnames";import i from"../src/hooks/useFlexGapSupport.js";import{toArray as c}from"../src/utils/index.js";import{ConfigContext as l}from"./config-provider.js";import s from"./Item.js";var m=o.createContext({latestIndex:0,horizontalSize:0,verticalSize:0,supportFlexGap:!1}),p={small:8,normal:16,large:24};var u=function(u){var f,d=o.useContext(l),v=d.getPrefixCls,x=d.space,g=d.direction,z=u.size,h=void 0===z?(null==x?void 0:x.size)||"small":z,y=u.align,j=u.className,w=u.children,G=u.direction,S=void 0===G?"horizontal":G,k=u.split,E=u.style,N=u.wrap,C=void 0!==N&&N,F=t(u,["size","align","className","children","direction","split","style","wrap"]),I=i(),b=e(o.useMemo((function(){return(Array.isArray(h)?h:[h,h]).map((function(t){return function(t){return"string"==typeof t?p[t]:t||0}(t)}))}),[h]),2),A=b[0],M=b[1],P=c(w,{keepEmpty:!0}),B=void 0===y&&"horizontal"===S?"center":y,D=v("space"),L=n(D,"".concat(D,"-").concat(S),((f={})["".concat(D,"-rtl")]="rtl"===g,f["".concat(D,"-align-").concat(B)]=B,f),j),R="".concat(D,"-item"),W="rtl"===g?"marginLeft":"marginRight",_=0,q=P.map((function(t,e){null!=t&&(_=e);var r=t&&t.key||"".concat(R,"-").concat(e);return o.createElement(s,{className:R,key:r,direction:S,index:e,marginDirection:W,split:k,wrap:C},t)})),H=o.useMemo((function(){return{horizontalSize:A,verticalSize:M,latestIndex:_,supportFlexGap:I}}),[A,M,_,I]);if(0===P.length)return null;var J={};return C&&(J.flexWrap="wrap",I||(J.marginBottom="-".concat(M,"px"))),I&&(J.columnGap="".concat(A,"px"),J.rowGap="".concat(M,"px")),o.createElement(a,r({className:L,style:r(r({},J),E)},F),o.createElement(m.Provider,{value:H},q))};export{m as SpaceContext,u as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Space/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { View } from \"@tarojs/components\";\nimport classNames from \"classnames\";\nimport { XHComponentCommonProps } from \"@/types\";\nimport useFlexGapSupport from \"@/hooks/useFlexGapSupport\";\nimport { toArray } from \"@/utils\";\nimport { ConfigContext, SizeType } from \"./config-provider\";\nimport Item from \"./Item\";\n\nimport \"./index.scss\";\n\nexport const SpaceConfigContext = ConfigContext;\nexport type SpaceProps = {\n direction?: \"horizontal\" | \"vertical\";\n align?: \"start\" | \"end\" | \"center\" | \"baseline\";\n size?: SizeType | [SizeType, SizeType];\n style?: React.CSSProperties;\n split?: React.ReactNode;\n wrap?: boolean;\n} & XHComponentCommonProps;\n\nexport const SpaceContext = React.createContext({\n latestIndex: 0,\n horizontalSize: 0,\n verticalSize: 0,\n supportFlexGap: false,\n});\n\nconst spaceSize = {\n small: 8,\n normal: 16,\n large: 24,\n};\n\nfunction getNumberSize(size: SizeType) {\n return typeof size === \"string\" ? spaceSize[size] : size || 0;\n}\n\nconst XHSpace: React.FC<SpaceProps> = props => {\n const {\n getPrefixCls,\n space,\n direction: directionConfig,\n } = React.useContext(ConfigContext);\n\n const {\n size = space?.size || \"small\",\n align,\n className,\n children,\n direction = \"horizontal\",\n split,\n style,\n wrap = false,\n ...otherProps\n } = props;\n\n const supportFlexGap = useFlexGapSupport();\n\n const [horizontalSize, verticalSize] = React.useMemo(\n () =>\n ((Array.isArray(size) ? size : [size, size]) as [SizeType, SizeType]).map(\n item => getNumberSize(item)\n ),\n [size]\n );\n\n const childNodes = toArray(children, { keepEmpty: true });\n\n const mergedAlign =\n align === undefined && direction === \"horizontal\" ? \"center\" : align;\n const prefixCls = getPrefixCls(\"space\");\n const cn = classNames(\n prefixCls,\n `${prefixCls}-${direction}`,\n {\n [`${prefixCls}-rtl`]: directionConfig === \"rtl\",\n [`${prefixCls}-align-${mergedAlign}`]: mergedAlign,\n },\n className\n );\n\n const itemClassName = `${prefixCls}-item`;\n\n const marginDirection =\n directionConfig === \"rtl\" ? \"marginLeft\" : \"marginRight\";\n\n // Calculate latest one\n let latestIndex = 0;\n const nodes = childNodes.map((child: any, i) => {\n if (child !== null && child !== undefined) {\n latestIndex = i;\n }\n\n const key = (child && child.key) || `${itemClassName}-${i}`;\n\n return (\n <Item\n className={itemClassName}\n key={key}\n direction={direction}\n index={i}\n marginDirection={marginDirection}\n split={split}\n wrap={wrap}\n >\n {child}\n </Item>\n );\n });\n\n const spaceContext = React.useMemo(\n () => ({ horizontalSize, verticalSize, latestIndex, supportFlexGap }),\n [horizontalSize, verticalSize, latestIndex, supportFlexGap]\n );\n\n if (childNodes.length === 0) {\n return null;\n }\n\n const gapStyle: React.CSSProperties = {};\n\n if (wrap) {\n gapStyle.flexWrap = \"wrap\";\n\n if (!supportFlexGap) {\n gapStyle.marginBottom = `-${verticalSize}px`;\n }\n }\n\n if (supportFlexGap) {\n gapStyle.columnGap = `${horizontalSize}px`;\n gapStyle.rowGap = `${verticalSize}px`;\n }\n\n return (\n <View\n className={cn}\n style={{\n ...gapStyle,\n ...style,\n }}\n {...otherProps}\n >\n <SpaceContext.Provider value={spaceContext}>\n {nodes}\n </SpaceContext.Provider>\n </View>\n );\n};\n\nexport default XHSpace;\n"],"names":["SpaceContext","React","createContext","latestIndex","horizontalSize","verticalSize","supportFlexGap","spaceSize","small","normal","large","XHSpace","props","_b","useContext","ConfigContext","getPrefixCls","space","directionConfig","_c","size","align","className","children","_d","direction","split","style","_e","wrap","otherProps","__rest","useFlexGapSupport","_f","__read","useMemo","Array","isArray","map","item","getNumberSize","childNodes","toArray","keepEmpty","mergedAlign","undefined","prefixCls","cn","classNames","concat","_a","itemClassName","marginDirection","nodes","child","i","key","createElement","Item","index","spaceContext","length","gapStyle","flexWrap","marginBottom","columnGap","rowGap","View","__assign","Provider","value"],"mappings":"8VAqBa,IAAAA,EAAeC,EAAMC,cAAc,CAC9CC,YAAa,EACbC,eAAgB,EAChBC,aAAc,EACdC,gBAAgB,IAGZC,EAAY,CAChBC,MAAO,EACPC,OAAQ,GACRC,MAAO,IAOH,IAAAC,EAAgC,SAAAC,SAC9BC,EAIFZ,EAAMa,WAAWC,GAHnBC,EAAYH,EAAAG,aACZC,EAAKJ,EAAAI,MACMC,cAIXC,EASEP,EAT2BQ,KAA7BA,OAAI,IAAAD,GAAGF,aAAA,EAAAA,EAAOG,OAAQ,QAAOD,EAC7BE,EAQET,QAPFU,EAOEV,EAPOU,UACTC,EAMEX,EANMW,SACRC,EAKEZ,EALsBa,UAAxBA,OAAS,IAAAD,EAAG,aAAYA,EACxBE,EAIEd,EAAKc,MAHPC,EAGEf,EAAKe,MAFPC,EAEEhB,EAAKiB,KAFPA,cAAYD,EACTE,EACDC,EAAAnB,EAVE,CAAA,OAAA,QAAA,YAAA,WAAA,YAAA,QAAA,QAAA,SAYAN,EAAiB0B,IAEjBC,EAAAC,EAAiCjC,EAAMkC,SAC3C,WACE,OAAEC,MAAMC,QAAQjB,GAAQA,EAAO,CAACA,EAAMA,IAAgCkB,KACpE,SAAAC,GAAQ,OA5BhB,SAAuBnB,GACrB,MAAuB,iBAATA,EAAoBb,EAAUa,GAAQA,GAAQ,CAC9D,CA0BgBoB,CAAcD,EAAK,GAC5B,GACH,CAACnB,IACF,GANMhB,EAAc6B,EAAA,GAAE5B,EAAY4B,EAAA,GAQ7BQ,EAAaC,EAAQnB,EAAU,CAAEoB,WAAW,IAE5CC,OACMC,IAAVxB,GAAqC,eAAdI,EAA6B,SAAWJ,EAC3DyB,EAAY9B,EAAa,SACzB+B,EAAKC,EACTF,EACA,GAAGG,OAAAH,EAAa,KAAAG,OAAAxB,KAAWyB,EAAA,CAAA,GAExB,UAAGJ,EAAS,SAA6B,QAApB5B,EACtBgC,EAAC,UAAGJ,EAAS,WAAAG,OAAUL,IAAgBA,EAEzCM,GAAA5B,GAGI6B,EAAgB,GAAGF,OAAAH,WAEnBM,EACgB,QAApBlC,EAA4B,aAAe,cAGzCf,EAAc,EACZkD,EAAQZ,EAAWH,KAAI,SAACgB,EAAYC,GACpCD,UACFnD,EAAcoD,GAGhB,IAAMC,EAAOF,GAASA,EAAME,KAAQ,GAAGP,OAAAE,EAAiB,KAAAF,OAAAM,GAExD,OACEtD,EAAAwD,cAACC,EAAI,CACHpC,UAAW6B,EACXK,IAAKA,EACL/B,UAAWA,EACXkC,MAAOJ,EACPH,gBAAiBA,EACjB1B,MAAOA,EACPG,KAAMA,GAELyB,EAGP,IAEMM,EAAe3D,EAAMkC,SACzB,WAAM,MAAC,CAAE/B,eAAcA,EAAEC,aAAYA,EAAEF,YAAWA,EAAEG,oBACpD,CAACF,EAAgBC,EAAcF,EAAaG,IAG9C,GAA0B,IAAtBmC,EAAWoB,OACb,OAAO,KAGT,IAAMC,EAAgC,CAAA,EAetC,OAbIjC,IACFiC,EAASC,SAAW,OAEfzD,IACHwD,EAASE,aAAe,IAAIf,OAAA5C,UAI5BC,IACFwD,EAASG,UAAY,GAAGhB,OAAA7C,QACxB0D,EAASI,OAAS,GAAGjB,OAAA5C,SAIrBJ,EAAAwD,cAACU,EAAIC,EAAA,CACH9C,UAAWyB,EACXpB,MACKyC,EAAAA,EAAA,CAAA,EAAAN,GACAnC,IAEDG,GAEJ7B,EAAAwD,cAACzD,EAAaqE,SAAQ,CAACC,MAAOV,GAC3BP,GAIT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import t from"react";import e from"classnames";import{View as s}from"@tarojs/components";var a=t.createElement("span",{className:"".concat("xh-step","-icon-dot")}),r=function(r){var n=r.direction,o=void 0===n?"horizontal":n,c=r.current,i=void 0===c?0:c,l=r.style,m=r.className,p=e("xh-steps","".concat("xh-steps","-").concat(o),m);return t.createElement(s,{className:p,style:l},t.Children.map(r.children,(function(e,s){var r;if(!t.isValidElement(e))return e;var n=e.props,o=n.status||"wait";s<i?o=n.status||"finish":s===i&&(o=n.status||"process");var c=null!==(r=n.icon)&&void 0!==r?r:a;return t.cloneElement(e,{status:o,icon:c})})))};export{r as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Step/Steps/index.tsx"],"sourcesContent":["import React, { FC, ReactElement } from \"react\";\nimport classNames from \"classnames\";\nimport { View } from \"@tarojs/components\";\nimport { XHComponentCommonProps } from \"@/types\";\n\nimport { StepProps } from \"..\";\n\nconst classPrefix = `xh-steps`;\nconst stepClassPrefix = `xh-step`;\n\nconst defaultIcon = <span className={`${stepClassPrefix}-icon-dot`} />;\n\nexport type StepsProps = {\n current?: number;\n direction?: \"horizontal\" | \"vertical\";\n children?: React.ReactNode;\n style?: React.CSSProperties & {\n \"--line-to-next-color\"?: string;\n \"--color-primary\"?: string;\n };\n} & XHComponentCommonProps;\n\nconst Steps: FC<StepsProps> = props => {\n const { direction = \"horizontal\", current = 0, style, className } = props;\n const classString = classNames(\n classPrefix,\n `${classPrefix}-${direction}`,\n className\n );\n\n return (\n <View className={classString} style={style}>\n {React.Children.map(\n props.children,\n (child: ReactElement<StepProps>, index) => {\n if (!React.isValidElement(child)) {\n return child;\n }\n const props = child.props;\n let status = props.status || \"wait\";\n\n if (index < current) {\n status = props.status || \"finish\";\n } else if (index === current) {\n status = props.status || \"process\";\n }\n\n const icon = props.icon ?? defaultIcon;\n\n return React.cloneElement(child, {\n status,\n icon,\n });\n }\n )}\n </View>\n );\n};\n\nexport default Steps;\n"],"names":["defaultIcon","React","createElement","className","concat","Steps","props","_a","direction","_b","current","style","classString","classNames","View","Children","map","children","child","index","isValidElement","status","icon","cloneElement"],"mappings":"yFAOA,IAGMA,EAAcC,EAAMC,cAAA,OAAA,CAAAC,UAAW,GAAGC,OAFhB,UAE0C,eAY5DC,EAAwB,SAAAC,GACpB,IAAAC,EAA4DD,EAAKE,UAAjEA,OAAY,IAAAD,EAAA,aAAYA,EAAEE,EAAkCH,EAAvBI,QAAXA,OAAO,IAAAD,EAAG,EAACA,EAAEE,EAAqBL,EAAhBK,MAAER,EAAcG,EAAKH,UACnES,EAAcC,EAjBF,WAmBhB,GAAAT,OAnBgB,WAmBF,KAAAA,OAAII,GAClBL,GAGF,OACEF,EAACC,cAAAY,EAAK,CAAAX,UAAWS,EAAaD,MAAOA,GAClCV,EAAMc,SAASC,IACdV,EAAMW,UACN,SAACC,EAAgCC,SAC/B,IAAKlB,EAAMmB,eAAeF,GACxB,OAAOA,EAET,IAAMZ,EAAQY,EAAMZ,MAChBe,EAASf,EAAMe,QAAU,OAEzBF,EAAQT,EACVW,EAASf,EAAMe,QAAU,SAChBF,IAAUT,IACnBW,EAASf,EAAMe,QAAU,WAG3B,IAAMC,EAAiB,QAAVf,EAAAD,EAAMgB,YAAI,IAAAf,EAAAA,EAAIP,EAE3B,OAAOC,EAAMsB,aAAaL,EAAO,CAC/BG,OAAMA,EACNC,KAAIA,GAEP,IAIT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import t from"react";import e from"classnames";import{View as a}from"@tarojs/components";import c from"./Steps/index.js";var s=function(c){var s=c.title,n=c.description,o=c.icon,r=c.status,m=void 0===r?"wait":r,i=c.fancy,l=c.style,p=c.className;return t.createElement(a,{className:e("".concat("xh-step"),"".concat("xh-step","-status-").concat(m),p),style:l},t.createElement(a,{className:"".concat("xh-step","-indicator")},t.createElement(a,{className:e("".concat("xh-step","-icon-container"),{fancy:i})},o)),t.createElement(a,{className:"".concat("xh-step","-content")},t.createElement(a,{className:"".concat("xh-step","-title")},s),!!n&&t.createElement(a,{className:"".concat("xh-step","-description")},n)))};s.Steps=c;export{s as default};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Step/index.tsx"],"sourcesContent":["import React, { ReactNode, ForwardRefExoticComponent } from \"react\";\nimport classNames from \"classnames\";\nimport { View } from \"@tarojs/components\";\nimport { XHComponentCommonProps } from \"@/types\";\n\nimport Steps from \"./Steps\";\nimport \"./index.scss\";\n\nexport type StepProps = {\n icon?: string | ReactNode;\n title: string | ReactNode;\n description?: string | ReactNode;\n direction?: \"horizontal\" | \"vertical\";\n status?: \"wait\" | \"process\" | \"finish\" | \"error\";\n fancy?: boolean;\n style?: React.CSSProperties;\n} & XHComponentCommonProps;\n\nconst classPrefix = \"xh-step\";\n\nconst Step: React.FC<StepProps> = props => {\n const {\n title,\n description,\n icon,\n status = \"wait\",\n fancy,\n style,\n className,\n } = props;\n\n return (\n <View\n className={classNames(\n `${classPrefix}`,\n `${classPrefix}-status-${status}`,\n className\n )}\n style={style}\n >\n <View className={`${classPrefix}-indicator`}>\n <View\n className={classNames(`${classPrefix}-icon-container`, { fancy })}\n >\n {icon}\n </View>\n </View>\n <View className={`${classPrefix}-content`}>\n <View className={`${classPrefix}-title`}>{title}</View>\n {!!description && (\n <View className={`${classPrefix}-description`}>{description}</View>\n )}\n </View>\n </View>\n );\n};\n\nexport type HybridComponent = ForwardRefExoticComponent<StepProps> & {\n Steps: typeof Steps;\n};\n\nconst XHStep = Step as HybridComponent;\nXHStep.Steps = Steps;\n\nexport default XHStep;\n"],"names":["XHStep","props","title","description","icon","_a","status","fancy","style","className","React","View","classNames","concat","createElement","Steps"],"mappings":"yHAkBA,IA2CMA,EAzC4B,SAAAC,GAE9B,IAAAC,EAOED,EAPGC,MACLC,EAMEF,EANSE,YACXC,EAKEH,OAJFI,EAIEJ,EAJaK,OAAfA,OAAM,IAAAD,EAAG,OAAMA,EACfE,EAGEN,EAHGM,MACLC,EAEEP,EAFGO,MACLC,EACER,YAEJ,OACES,gBAACC,EAAI,CACHF,UAAWG,EACT,GAAAC,OAhBY,WAiBZ,GAAGA,OAjBS,UAiBa,YAAAA,OAAAP,GACzBG,GAEFD,MAAOA,GAEPE,EAAAI,cAACH,EAAK,CAAAF,UAAW,GAAAI,OAtBH,UAsB6B,eACzCH,EAAAI,cAACH,EACC,CAAAF,UAAWG,EAAW,UAxBZ,UAwB0B,mBAAmB,CAAEL,MAAKA,KAE7DH,IAGLM,EAAAI,cAACH,EAAK,CAAAF,UAAW,GAAAI,OA7BH,UA6B2B,aACvCH,EAACI,cAAAH,GAAKF,UAAW,UA9BL,UA8BmB,WAAWP,KACvCC,GACDO,EAACI,cAAAH,GAAKF,UAAW,UAhCP,UAgCqB,iBAAiBN,IAK1D,EAOAH,EAAOe,MAAQA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__assign as e}from"../node_modules/tslib/tslib.es6.js";import
|
|
1
|
+
import{__assign as e}from"../node_modules/tslib/tslib.es6.js";import r,{createContext as o}from"react";import t from"../node_modules/css-vars-ponyfill/dist/css-vars-ponyfill.esm.js";var s=o(e({},{})),l=function(e){var o=e.children,l=e.value,n=e.scoped,i=o;return void 0!==n&&n?i=r.Children.map(o,(function(e,o){return 0===o?r.cloneElement(e,{style:l}):e})):Object.keys(l).forEach((function(e){document.body.style.setProperty(e,l[e])})),t({variables:l}),r.createElement(s.Provider,{value:l},i)};export{s as ThemeContext,l as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/ThemeProvider/index.tsx"],"sourcesContent":["import React, { createContext } from \"react\";\n\nexport type ThemeValue = {\n \"--color-primary\"?: string;\n \"--color-primary-dark\"?: string;\n \"--color-primary-reverse\"?: string;\n \"--color-disabled\"?: string;\n \"--color-warning\"?: string;\n \"--color-warning-light\"?: string;\n \"--background-color\"?: string;\n \"--body-background-color\"?: string;\n \"--font-color\"?: string;\n \"--font-color-secondary\"?: string;\n \"--font-color-tertiary\"?: string;\n \"--border-color\"?: string;\n \"--btn-color\"?: string;\n \"--btn-shadow-primary\"?: string;\n \"--mask-color\"?: string;\n};\n\nexport type ThemeProviderProps = {\n value: ThemeValue;\n scoped?: boolean;\n};\n\nconst createTheme = (theme: { [key: string]: string }) => {\n return createContext({ ...theme });\n};\n\nexport const ThemeContext = createTheme({});\n\nconst ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n value,\n scoped = false,\n}) => {\n let clonedElement = children;\n if (!scoped) {\n Object.keys(value).forEach(key => {\n document.body.style.setProperty(key, value[key]);\n });\n } else {\n clonedElement = React.Children.map(children, (child, index) => {\n if (index === 0) {\n return React.cloneElement(child as any, {\n style: value,\n });\n } else {\n return child;\n }\n });\n }\n\n return (\n <ThemeContext.Provider value={value}>{clonedElement}</ThemeContext.Provider>\n );\n};\n\nexport default ThemeProvider;\n"],"names":["ThemeContext","createContext","__assign","ThemeProvider","_a","children","value","_b","clonedElement","React","Children","map","child","index","cloneElement","style","Object","keys","forEach","key","document","body","setProperty","createElement","Provider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/ThemeProvider/index.tsx"],"sourcesContent":["import React, { createContext } from \"react\";\nimport cssVars from \"css-vars-ponyfill\";\n\nexport type ThemeValue = {\n \"--color-primary\"?: string;\n \"--color-primary-dark\"?: string;\n \"--color-primary-reverse\"?: string;\n \"--color-disabled\"?: string;\n \"--color-warning\"?: string;\n \"--color-warning-light\"?: string;\n \"--background-color\"?: string;\n \"--body-background-color\"?: string;\n \"--font-color\"?: string;\n \"--font-color-secondary\"?: string;\n \"--font-color-tertiary\"?: string;\n \"--border-color\"?: string;\n \"--btn-color\"?: string;\n \"--btn-shadow-primary\"?: string;\n \"--mask-color\"?: string;\n};\n\nexport type ThemeProviderProps = {\n value: ThemeValue;\n scoped?: boolean;\n};\n\nconst createTheme = (theme: { [key: string]: string }) => {\n return createContext({ ...theme });\n};\n\nexport const ThemeContext = createTheme({});\n\nconst ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n value,\n scoped = false,\n}) => {\n let clonedElement = children;\n if (!scoped) {\n Object.keys(value).forEach(key => {\n document.body.style.setProperty(key, value[key]);\n });\n } else {\n clonedElement = React.Children.map(children, (child, index) => {\n if (index === 0) {\n return React.cloneElement(child as any, {\n style: value,\n });\n } else {\n return child;\n }\n });\n }\n\n cssVars({\n variables: value as { [key: string]: string },\n });\n\n return (\n <ThemeContext.Provider value={value}>{clonedElement}</ThemeContext.Provider>\n );\n};\n\nexport default ThemeProvider;\n"],"names":["ThemeContext","createContext","__assign","ThemeProvider","_a","children","value","_b","clonedElement","React","Children","map","child","index","cloneElement","style","Object","keys","forEach","key","document","body","setProperty","cssVars","variables","createElement","Provider"],"mappings":"sLA0BA,IAIaA,EAHJC,EAAaC,EAAA,GAGkB,KAElCC,EAA8C,SAACC,OACnDC,EAAQD,EAAAC,SACRC,EAAKF,EAAAE,MACLC,WAEIC,EAAgBH,EAqBpB,YAvBS,IAAAE,GAAKA,EAQZC,EAAgBC,EAAMC,SAASC,IAAIN,GAAU,SAACO,EAAOC,GACnD,OAAc,IAAVA,EACKJ,EAAMK,aAAaF,EAAc,CACtCG,MAAOT,IAGFM,CAEX,IAZAI,OAAOC,KAAKX,GAAOY,SAAQ,SAAAC,GACzBC,SAASC,KAAKN,MAAMO,YAAYH,EAAKb,EAAMa,GAC7C,IAaFI,EAAQ,CACNC,UAAWlB,IAIXG,EAAAgB,cAACzB,EAAa0B,SAAQ,CAACpB,MAAOA,GAAQE,EAE1C"}
|