UNPKG

dk-plus

Version:
2 lines (1 loc) 5.34 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("vue"),G=require("./index3.js"),J=require("./index4.js"),f=require("./index5.js"),N=i.defineComponent({name:"DkDatePicker",props:G.dkDatePickerProps,emits:J.datePickerEmits,setup(n,{emit:l}){const T=i.ref(),b=i.ref(),C=i.ref(),g=i.computed(()=>String(n.type||"date").includes("range")),E=i.computed(()=>n.type==="daterange"),r=i.reactive({open:!1,text:"",startText:"",endText:"",committed:null,committedRange:[null,null],draft:null,draftRange:[null,null],rangePicking:0});let k=!1;const I=e=>{if(e===""||e===null||e===void 0)return!0;const t=n.emptyValues;return t?Array.isArray(t)&&t.some(a=>Object.is(a,e)):!1},P=e=>{if(I(e))return null;const t=f.coerceToDate(e);if(t)return t;if(typeof e=="string"){const a=n.valueFormat||n.format||"YYYY-MM-DD";return f.parseByPattern(e,a)}return null},L=e=>{if(g.value){const t=Array.isArray(e)?e:[],a=P(t[0]),o=P(t[1]);return{single:null,range:[a,o]}}return{single:P(e),range:[null,null]}},S=e=>e?n.valueFormat?n.valueFormat==="timestamp"?e.getTime():f.formatByPattern(e,n.valueFormat):e:n.valueFormat?"":null,Y=e=>{const[t,a]=e;return!t&&!a?[]:n.valueFormat?n.valueFormat==="timestamp"?[t?t.getTime():"",a?a.getTime():""]:[t?f.formatByPattern(t,n.valueFormat):"",a?f.formatByPattern(a,n.valueFormat):""]:[t,a]},s=e=>e?f.formatByPattern(e,n.format||"YYYY-MM-DD"):"",V=e=>e?f.formatByPattern(e,"YYYY-MM-DD"):"",z=()=>{const e=n.valueOnClear;if(typeof e=="function")try{return e()}catch{return[]}return e!==void 0?e:g.value?[]:n.valueFormat?"":null},w=()=>{if(g.value){const t=Y(r.draftRange);l("update:modelValue",t),l("change",t);return}const e=S(r.draft);l("update:modelValue",e),l("change",e)},B=i.ref({}),v=()=>{if(!n.teleported||!b.value)return;const e=b.value.getBoundingClientRect(),t=parseFloat(String(n.panelWidth||"320"))||320,a=360,o=4,M=[n.placement,...n.fallbackPlacements||[]].filter(Boolean),y=(m,c)=>m>=0&&c>=0&&m+a<=window.innerHeight&&c+t<=window.innerWidth;let x=e.bottom+o,h=e.left;for(const m of M){if(m==="top"){const c=e.top-o-a,u=e.left;if(y(c,u)){x=c,h=u;break}}if(m==="bottom"){const c=e.bottom+o,u=e.left;if(y(c,u)){x=c,h=u;break}}if(m==="right"){const c=e.top,u=e.right+o;if(y(c,u)){x=c,h=u;break}}if(m==="left"){const c=e.top,u=e.left-o-t;if(y(c,u)){x=c,h=u;break}}}B.value={position:"fixed",top:`${Math.max(0,x)}px`,left:`${Math.max(0,h)}px`,width:n.panelWidth,zIndex:2023}},D=e=>{const t=e.target,a=T.value,o=C.value;a&&a.contains(t)||o&&o.contains(t)||(n.showConfirm,d())},F=()=>{n.disabled||r.open||(r.open=!0,l("visible-change",!0),r.draft=r.committed,r.draftRange=[...r.committedRange],r.rangePicking=0,document.addEventListener("click",D),i.nextTick(()=>v()))},d=()=>{!r.open||(r.open=!1,l("visible-change",!1),document.removeEventListener("click",D))},O=e=>{n.automaticDropdown&&F(),l("focus",e)},j=e=>{l("blur",e)},W=e=>{if(n.disabled)return;const t=typeof e.value=="function"?e.value():e.value,a=P(t);!a||(r.draft=a,r.text=s(a),n.showConfirm||(w(),d()))},q=e=>{if(n.disabled)return;const t=f.parseByPattern(e,"YYYY-MM-DD");!t||(r.draft=t,r.text=s(t),n.showConfirm||(w(),d()))},A=e=>{if(n.disabled||!E.value)return;const t=f.parseByPattern(e,"YYYY-MM-DD");if(!t)return;const[a]=r.draftRange;if(r.rangePicking===0)r.draftRange=[t,null],r.rangePicking=1,l("calendar-change",Y([t,null]));else{const o=a;o&&t.getTime()<o.getTime()?r.draftRange=[t,o]:r.draftRange=[o,t],r.rangePicking=0,l("calendar-change",Y(r.draftRange)),r.startText=s(r.draftRange[0]),r.endText=s(r.draftRange[1]),n.showConfirm||(w(),d())}},_=()=>{n.disabled||!n.showConfirm||(w(),d())},R=()=>{if(n.disabled)return;const e=z();l("update:modelValue",e),l("change",e),l("clear"),d()},H=e=>{if(e.key==="Escape"&&d(),e.key==="Enter"){if(n.disabled||!n.editable||n.readonly||g.value)return;const t=f.parseByPattern(r.text,n.format||"YYYY-MM-DD");if(!t)return;r.draft=t,n.showConfirm||w()}},$=i.computed(()=>({"--date-picker-panel-width":n.panelWidth})),K=i.computed(()=>typeof n.clearIcon=="string"?n.clearIcon:void 0),U=i.computed(()=>{if(typeof n.prefixIcon=="string"&&n.prefixIcon)return n.prefixIcon;const e=String(n.type||"date").toLowerCase();return e==="time"||e==="timerange"?"IconClock":"IconCalendar"});return i.watch(()=>n.modelValue,e=>{k=!0;const t=L(e);r.committed=t.single,r.committedRange=t.range,r.draft=t.single,r.draftRange=[...t.range],r.text=s(t.single),r.startText=s(t.range[0]),r.endText=s(t.range[1]),i.nextTick(()=>{k=!1})},{immediate:!0}),i.watch(()=>r.text,(e,t)=>{k||!n.editable||n.readonly||t&&!e&&R()}),i.watch(()=>[r.startText,r.endText],(e,t)=>{if(k||!n.editable||n.readonly||!g.value)return;const[a,o]=e,[M,y]=t;(M||y)&&!a&&!o&&R()}),i.watch(()=>n.disabled,e=>{e&&d()}),i.onMounted(()=>{window.addEventListener("resize",v),window.addEventListener("scroll",v,!0)}),i.onBeforeUnmount(()=>{document.removeEventListener("click",D),window.removeEventListener("resize",v),window.removeEventListener("scroll",v,!0)}),{rootRef:T,triggerRef:b,dropdownRef:C,...i.toRefs(r),isRange:g,rootStyle:$,dropdownStyle:B,resolvedClearIcon:K,resolvedPrefixIcon:U,displayOne:s,toPanelValue:V,openDropdown:F,closeDropdown:d,onFocus:O,onBlur:j,onKeydown:H,applyShortcut:W,onPickSingle:q,onPickRange:A,onConfirm:_,onClear:R,refreshDropdownPosition:v}}});exports.default=N;