UNPKG

@tarojs/components

Version:
1 lines 18.2 kB
import{__awaiter,__generator,__spreadArray}from"tslib";import{r as registerInstance,c as createEvent,h,H as Host,g as getElement}from"./index-ab3c86da.js";import{c as classnames}from"./index-c3e4004b.js";function getTimeRange(e,t){var i=[];for(var a=e;a<=t;a++){i.push("".concat(a<10?"0":"").concat(a))}return i}var hoursRange=__spreadArray(__spreadArray(["20","21","22","23"],getTimeRange(0,23),true),["00","01","02","03"],false);var minutesRange=__spreadArray(__spreadArray(["56","57","58","59"],getTimeRange(0,59),true),["00","01","02","03"],false);function verifyValue(e,t){if(!isNaN(+e)&&e>=0&&e<t.length)return true;return false}function verifyTime(e){if(!/^\d{1,2}:\d{1,2}$/.test(e))return false;var t=e.split(":").map((function(e){return+e}));if(t[0]<0||t[0]>23)return false;if(t[1]<0||t[1]>59)return false;return true}function compareTime(e,t){var i=e.split(":").map((function(e){return+e}));var a=t.split(":").map((function(e){return+e}));if(i[0]<a[0])return true;if(i[0]===a[0]&&i[1]<=a[1])return true;return false}function verifyDate(e){if(!e)return false;var t=new Date(e.replace(/-/g,"/"));return isNaN(t.getMonth())?false:t}function getMaxDay(e,t){if(t===4||t===6||t===9||t===11)return 30;if(t===2){if(e%4===0&&e%100!==0||e%400===0)return 29;else return 28}return 31}function formatValue(e){var t;if(Array.isArray(e)){t=e.map((function(e){return String(e)}))}else{t=e}return t}function getDateRange(e,t){var i=[];for(var a=e;a<=t;a++){i.push(a)}return i}function getYearRange(e,t){return getDateRange(e,t)}function getMonthRange(e,t,i){var a=1;var r=12;if(e.getFullYear()===i){a=e.getMonth()+1}if(t.getFullYear()===i){r=t.getMonth()+1}return getDateRange(a,r)}function getDayRange(e,t,i,a){var r=1;var n=getMaxDay(i,a);if(e.getFullYear()===i&&e.getMonth()+1===a){r=e.getDate()}if(t.getFullYear()===i&&t.getMonth()+1===a){n=t.getDate()}return getDateRange(r,n)}var TOP=102;var LINE_HEIGHT=34;var MASK_HEIGHT=LINE_HEIGHT*7;var indexCss='.weui-mask{z-index:1000;background:rgba(0,0,0,.6);position:fixed;inset:0}.weui-mask_transparent{z-index:1000;position:fixed;inset:0}@-webkit-keyframes weuiSlideUp{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes weuiSlideUp{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0,0);transform:translate(0,0)}}.weui-animate-slide-up{-webkit-animation:.3s forwards weuiSlideUp;animation:.3s forwards weuiSlideUp}@-webkit-keyframes weuiSlideDown{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes weuiSlideDown{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}.weui-animate-slide-down{-webkit-animation:.3s forwards weuiSlideDown;animation:.3s forwards weuiSlideDown}@-webkit-keyframes weuiFadeIn{0%{opacity:0}to{opacity:1}}@keyframes weuiFadeIn{0%{opacity:0}to{opacity:1}}.weui-animate-fade-in{-webkit-animation:.3s forwards weuiFadeIn;animation:.3s forwards weuiFadeIn}@-webkit-keyframes weuiFadeOut{0%{opacity:1}to{opacity:0}}@keyframes weuiFadeOut{0%{opacity:1}to{opacity:0}}.weui-animate-fade-out{-webkit-animation:.3s forwards weuiFadeOut;animation:.3s forwards weuiFadeOut}.weui-picker{-webkit-box-sizing:border-box;box-sizing:border-box;z-index:5000;background-color:var(--weui-BG-2);padding-left:0;padding-left:constant(safe-area-inset-left);padding-left:env(safe-area-inset-left);padding-right:0;padding-right:constant(safe-area-inset-right);padding-right:env(safe-area-inset-right);-webkit-backface-visibility:hidden;backface-visibility:hidden;width:100%;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;position:fixed;bottom:0;left:0;-webkit-transform:translateY(100%);transform:translateY(100%)}.weui-picker__hd{text-align:center;background-color:#fff;padding:9px 15px;font-size:17px;display:-ms-flexbox;display:flex;position:relative}.weui-picker__hd:after{content:" ";color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;border-bottom:1px solid #e5e5e5;height:1px;position:absolute;bottom:0;left:0;right:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__action{color:#1aad19;-ms-flex:1;flex:1;display:block}.weui-picker__action:first-child{text-align:left;color:#888}.weui-picker__action:last-child{text-align:right}.weui-picker__bd{background-color:#fff;height:238px;display:-ms-flexbox;display:flex;position:relative;overflow:hidden}.weui-picker__group{-ms-flex:1;flex:1;height:100%;position:relative}.weui-picker__mask{z-index:3;background-color:transparent;background-image:-webkit-gradient(linear,left top, left bottom,from(rgba(255,255,255,.95)),to(rgba(255,255,255,.6))),-webkit-gradient(linear,left top, left bottom,from(rgba(255,255,255,.6)),to(rgba(255,255,255,.95)));background-image:linear-gradient(rgba(255,255,255,.95),rgba(255,255,255,.6)),linear-gradient(rgba(255,255,255,.6),rgba(255,255,255,.95));background-position:top,bottom;background-repeat:no-repeat;background-size:100% 102px;background-attachment:scroll,scroll;background-origin:padding-box,padding-box;background-clip:border-box,border-box;width:100%;height:100%;margin:0 auto;position:absolute;top:0;left:0;-webkit-transform:translateZ(0);transform:translateZ(0)}.weui-picker__indicator{z-index:3;width:100%;height:34px;position:absolute;top:102px;left:0}.weui-picker__indicator:before{content:" ";color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;border-top:1px solid #e5e5e5;height:1px;position:absolute;top:0;left:0;right:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__indicator:after{content:" ";color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;border-bottom:1px solid #e5e5e5;height:1px;position:absolute;bottom:0;left:0;right:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui-picker__content{width:100%;position:absolute;top:0;left:0}.weui-picker__item{text-align:center;color:#000;text-overflow:ellipsis;white-space:nowrap;height:34px;padding:0;line-height:34px;overflow:hidden}.weui-picker__item_disabled{color:#999}.weui-picker,.weui-picker__hd{font-size:12px}';var Picker=function(){function e(e){var t=this;registerInstance(this,e);this.onChange=createEvent(this,"change",7);this.onColumnChange=createEvent(this,"columnchange",7);this.onCancel=createEvent(this,"cancel",7);this.index=[];this.showPicker=function(){if(t.disabled)return;t.height=t.getHeightByIndex();t.hidden=false};this.getHeightByIndex=function(){var e=t.index.map((function(e){var i=0;if(t.mode==="time"){i=LINE_HEIGHT*4}return TOP-LINE_HEIGHT*e-i}));return e};this.hidePicker=function(){t.fadeOut=true;setTimeout((function(){t.hidden=true;t.fadeOut=false}),350)};this.handleChange=function(){t.hidePicker();t.index=t.height.map((function(e){return(TOP-e)/LINE_HEIGHT}));var e=t.index.length&&t.mode!=="selector"?t.index:t.index[0];if(t.mode==="time"){var i=[hoursRange.slice(),minutesRange.slice()];var a=t.index.map((function(e,t){return i[t][e]}));t.index=a.map((function(e){return parseInt(e)}));e=a.join(":")}if(t.mode==="date"){var r=t.pickerDate,n=r._start,o=r._end,s=r._updateValue;var u=s[0];var h=s[1];var l=getYearRange(n.getFullYear(),o.getFullYear());var d=getMonthRange(n,o,u);var c=getDayRange(n,o,u,h);var f=l[t.index[0]];var p=d[t.index[1]];var g=c[t.index[2]];if(t.fields==="year"){e=[f]}else if(t.fields==="month"){e=[f,p]}else{e=[f,p,g]}e=e.map((function(e){return e<10?"0".concat(e):e})).join("-")}t.value=e;t.pickerValue=t.value;t.onChange.emit({value:e})};this.handleColumnChange=function(e){var i=e.detail,a=i.columnId,r=i.height;t.onColumnChange.emit({column:Number(a),value:(TOP-r)/LINE_HEIGHT})};this.handleCancel=function(){t.hidePicker();t.onCancel.emit()};this.updateHeight=function(e,i,a){if(a===void 0){a=false}var r=__spreadArray([],t.height,true);r[i]=e;t.height=r;if(a){var n=t,o=n.start,s=n.end;if(!verifyTime(o))o="00:00";if(!verifyTime(s))s="23:59";if(!compareTime(o,s))return;var u=[hoursRange.slice(),minutesRange.slice()];var h=t.height.map((function(e){return(TOP-e)/LINE_HEIGHT}));var l=h.map((function(e,t){return u[t][e]})).join(":");if(!compareTime(o,l)){var d=o.split(":").map((function(e){return TOP-LINE_HEIGHT*(+e+4)}));requestAnimationFrame((function(){return t.height=d}))}else if(!compareTime(l,s)){var c=s.split(":").map((function(e){return TOP-LINE_HEIGHT*(+e+4)}));requestAnimationFrame((function(){return t.height=c}))}}};this.updateDay=function(e,i){var a=t.pickerDate,r=a._start,n=a._end,o=a._updateValue;o[i]=e;var s=o[0];var u=o[1];var h=o[2];if(i===0){var l=getMonthRange(r,n,s);var d=l[l.length-1];var c=l[0];if(u>d)o[1]=d;if(u<c)o[1]=c;var f=l.indexOf(o[1]);var p=TOP-LINE_HEIGHT*f;t.updateDay(o[1],1);t.updateHeight(p,"1")}else if(i===1){var g=getDayRange(r,n,s,u);var d=g[g.length-1];var c=g[0];if(h>d)o[2]=d;if(h<c)o[2]=c;var f=g.indexOf(o[2]);var p=TOP-LINE_HEIGHT*f;t.updateDay(o[2],2);t.updateHeight(p,"2")}};this.getSelector=function(){return h("taro-picker-group",{range:t.range,rangeKey:t.rangeKey,height:t.height[0],updateHeight:t.updateHeight,columnId:"0"})};this.getMultiSelector=function(){return t.range.map((function(e,i){return h("taro-picker-group",{range:e,rangeKey:t.rangeKey,height:t.height[i],updateHeight:t.updateHeight,onColumnChange:t.handleColumnChange,columnId:String(i)})}))};this.getTimeSelector=function(){var e=hoursRange.slice();var i=minutesRange.slice();return[h("taro-picker-group",{mode:"time",range:e,height:t.height[0],updateHeight:t.updateHeight,columnId:"0"}),h("taro-picker-group",{mode:"time",range:i,height:t.height[1],updateHeight:t.updateHeight,columnId:"1"})]};this.getDateSelector=function(){var e=t,i=e.fields,a=e.height;var r=t.pickerDate,n=r._start,o=r._end,s=r._updateValue;var u=s[0];var l=s[1];var d=getYearRange(n.getFullYear(),o.getFullYear()).map((function(e){return"".concat(e,"年")}));var c=getMonthRange(n,o,u).map((function(e){return"".concat(e<10?"0".concat(e):e,"月")}));var f=getDayRange(n,o,u,l).map((function(e){return"".concat(e<10?"0".concat(e):e,"日")}));var p=[h("taro-picker-group",{mode:"date",range:d,height:a[0],updateDay:t.updateDay,updateHeight:t.updateHeight,columnId:"0"})];if(i==="month"||i==="day"){p.push(h("taro-picker-group",{mode:"date",range:c,height:a[1],updateDay:t.updateDay,updateHeight:t.updateHeight,columnId:"1"}))}if(i==="day"){p.push(h("taro-picker-group",{mode:"date",range:f,height:a[2],updateDay:t.updateDay,updateHeight:t.updateHeight,columnId:"2"}))}return p};this.mode="selector";this.disabled=false;this.range=[];this.rangeKey=undefined;this.value=undefined;this.start="";this.end="";this.fields="day";this.name="";this.textProps={};this.pickerValue=[];this.height=[];this.hidden=true;this.fadeOut=false;this.isWillLoadCalled=false}e.prototype.componentWillLoad=function(){this.isWillLoadCalled=true;this.handleProps()};e.prototype.componentDidLoad=function(){if(this.overlay){document.body.appendChild(this.overlay)}};e.prototype.disconnectedCallback=function(){var e;if(this.overlay){(e=this.overlay.parentNode)===null||e===void 0?void 0:e.removeChild(this.overlay)}};e.prototype.onPropsChange=function(){if(!this.isWillLoadCalled)return;this.handleProps()};e.prototype.handleProps=function(){var e=this;var t=this,i=t.mode,a=t.start,r=t.end;if(i==="selector"){var n=this.value;this.index=[verifyValue(n,this.range)?Math.floor(n):0]}else if(i==="multiSelector"){var o=this.value;this.index=[];this.range.forEach((function(t,i){var a=o===null||o===void 0?void 0:o[i];var r=verifyValue(a,t)?Math.floor(a):0;e.index.push(r)}))}else if(i==="time"){var n=this.value;if(!verifyTime(n)){console.warn("time picker value illegal");n="0:0"}var s=n.split(":").map((function(e){return+e}));this.index=s}else if(i==="date"){var n=this.value;var u=verifyDate(n)||new Date((new Date).setHours(0,0,0,0));var h=verifyDate(a)||new Date("1970/01/01");var l=verifyDate(r)||new Date("2999/01/01");if(!(h<=l)){throw new Error("Picker start time must be less than end time.")}if(!(u>=h&&u<=l)){u=h}var d=u.getFullYear();var c=u.getMonth()+1;var f=u.getDate();var p=getYearRange(h.getFullYear(),l.getFullYear());var g=getMonthRange(h,l,d);var m=getDayRange(h,l,d,c);this.index=[p.indexOf(d),g.indexOf(c),m.indexOf(f)];if(!this.pickerDate||this.pickerDate._value.getTime()!==u.getTime()||this.pickerDate._start.getTime()!==h.getTime()||this.pickerDate._end.getTime()!==l.getTime()){this.pickerDate={_value:u,_start:h,_end:l,_updateValue:[d,c,f]}}}else{throw new Error('Picker not support "'.concat(i,'" mode.'))}this.height=this.getHeightByIndex();this.pickerValue=this.value;if(i==="date"){var v=this.pickerValue;if(this.fields==="month"){this.pickerValue=v.split("-").slice(0,2).join("-")}else if(this.fields==="year"){this.pickerValue=v.split("-")[0]}}};e.prototype.render=function(){var e=this;var t,i;var a=this,r=a.name,n=a.mode,o=a.fadeOut,s=a.hidden;var u;switch(n){case"multiSelector":u=this.getMultiSelector();break;case"time":u=this.getTimeSelector();break;case"date":u=this.getDateSelector();break;default:u=this.getSelector()}var l=classnames("weui-mask","weui-animate-fade-in",{"weui-animate-fade-out":o});var d=classnames("weui-picker","weui-animate-slide-up",{"weui-animate-slide-down":o});var c=s?{display:"none"}:{};return h(Host,null,h("div",{onClick:this.showPicker},h("slot",null),h("input",{type:"hidden",name:r,value:formatValue(this.pickerValue)})),h("div",{class:"weui-picker__overlay",style:c,ref:function(t){e.overlay=t}},h("div",{class:l,onClick:this.handleCancel}),h("div",{class:d},h("div",{class:"weui-picker__hd"},h("div",{class:"weui-picker__action",onClick:this.handleCancel},(t=this.textProps.cancelText)!==null&&t!==void 0?t:"取消"),h("div",{class:"weui-picker__action",onClick:this.handleChange},(i=this.textProps.okText)!==null&&i!==void 0?i:"确定")),h("div",{class:"weui-picker__bd"},u),h("input",{type:"hidden",name:r,value:formatValue(this.pickerValue)}))))};Object.defineProperty(e.prototype,"el",{get:function(){return getElement(this)},enumerable:false,configurable:true});Object.defineProperty(e,"watchers",{get:function(){return{mode:["onPropsChange"],value:["onPropsChange"],range:["onPropsChange"],start:["onPropsChange"],end:["onPropsChange"]}},enumerable:false,configurable:true});return e}();Picker.style=indexCss;var TaroPickerGroup=function(){function e(e){registerInstance(this,e);this.onColumnChange=createEvent(this,"columnChange",7);this.mode=undefined;this.range=[];this.rangeKey=undefined;this.height=undefined;this.columnId=undefined;this.updateHeight=undefined;this.updateDay=undefined;this.startY=undefined;this.preY=undefined;this.hadMove=undefined;this.touchEnd=undefined;this.isMove=undefined}e.prototype.getPosition=function(){var e=this.touchEnd?.3:0;var t="translate3d(0, ".concat(this.height,"px, 0)");var i="transform ".concat(e,"s");return{transform:t,"-webkit-transform":t,transition:i,"-webkit-transition":i}};e.prototype.formulaUnlimitedScroll=function(e,t,i){var a=this;var r=this,n=r.height,o=r.updateHeight,s=r.columnId;var u=i==="up"?1:-1;this.touchEnd=false;o(-e*u*LINE_HEIGHT+n,s);requestAnimationFrame((function(){a.touchEnd=true;var i=Math.round(t/-LINE_HEIGHT)+e*u;var r=TOP-LINE_HEIGHT*i;o(r,s,true)}))};e.prototype.handleMoveStart=function(e){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){this.startY=e;this.preY=e;this.hadMove=false;return[2]}))}))};e.prototype.handleMoving=function(e){return __awaiter(this,void 0,void 0,(function(){var t,i,a;return __generator(this,(function(r){t=e;i=t-this.preY;this.preY=t;this.touchEnd=false;if(Math.abs(t-this.startY)>10)this.hadMove=true;a=this.height+i;if(this.mode==="time"){if(this.columnId==="0"){if(a>TOP-LINE_HEIGHT*3){a=TOP-LINE_HEIGHT*27+i}if(a<TOP-LINE_HEIGHT*28){a=TOP-LINE_HEIGHT*4+i}}else if(this.columnId==="1"){if(a>TOP-LINE_HEIGHT*3){a=TOP-LINE_HEIGHT*63+i}if(a<TOP-LINE_HEIGHT*64){a=TOP-LINE_HEIGHT*4+i}}}this.updateHeight(a,this.columnId);return[2]}))}))};e.prototype.handleMoveEnd=function(e){return __awaiter(this,void 0,void 0,(function(){var t,i,a,r,n,o,s,u,h,l,d,c,f,p;return __generator(this,(function(g){t=this,i=t.mode,a=t.range,r=t.height,n=t.updateHeight,o=t.columnId;s=0;u=-LINE_HEIGHT*(a.length-1);h=e;this.touchEnd=true;if(!this.hadMove){d=window.innerHeight;c=d-MASK_HEIGHT/2;l=r-TOP-(h-c);if(i==="time"){if(o==="0"){if(l>-LINE_HEIGHT*2.5){return[2,this.formulaUnlimitedScroll(24,l,"up")]}if(l<-LINE_HEIGHT*28.5){return[2,this.formulaUnlimitedScroll(24,l,"down")]}}else if(o==="1"){if(l>-LINE_HEIGHT*2.5){return[2,this.formulaUnlimitedScroll(60,l,"up")]}if(l<-LINE_HEIGHT*64.5){return[2,this.formulaUnlimitedScroll(60,l,"down")]}}}}else{l=r-TOP}if(l>s)l=0;if(l<u)l=u;f=Math.round(l/-LINE_HEIGHT);p=TOP-LINE_HEIGHT*f;if(this.mode==="date"&&typeof this.updateDay==="function"){if(this.columnId==="0"){this.updateDay(+this.range[f].replace(/[^0-9]/gi,""),0)}if(this.columnId==="1"){this.updateDay(+this.range[f].replace(/[^0-9]/gi,""),1)}if(this.columnId==="2"){this.updateDay(+this.range[f].replace(/[^0-9]/gi,""),2)}}n(p,o,i==="time");this.onColumnChange.emit({columnId:o,height:p});return[2]}))}))};e.prototype.onMouseDown=function(e){this.isMove=true;this.handleMoveStart(e.clientY)};e.prototype.onMouseMove=function(e){if(!this.isMove)return;this.handleMoving(e.clientY)};e.prototype.onMouseMoveEnd=function(e){if(!this.isMove)return;this.isMove=false;this.handleMoveEnd(e.clientY)};e.prototype.onTouchStart=function(e){this.handleMoveStart(e.changedTouches[0].clientY)};e.prototype.onTouchMove=function(e){this.handleMoving(e.changedTouches[0].clientY)};e.prototype.onTouchEnd=function(e){this.handleMoveEnd(e.changedTouches[0].clientY)};e.prototype.render=function(){var e=this,t=e.range,i=e.rangeKey;var a=t.map((function(e){var t=i?e[i]:e;return h("div",{class:"weui-picker__item"},t)}));return h(Host,{class:"weui-picker__group"},h("div",{class:"weui-picker__mask"}),h("div",{class:"weui-picker__indicator"}),h("div",{class:"weui-picker__content",style:this.getPosition()},a))};return e}();export{Picker as taro_picker_core,TaroPickerGroup as taro_picker_group};