vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
3 lines (2 loc) • 6.27 kB
JavaScript
;const e=require("vue");require("../renderer/index.cjs");require("./calendar-cell.vue.cjs");const v=require("@vexip-ui/config"),J=require("@vexip-ui/hooks"),f=require("@vexip-ui/utils"),K=require("./props.cjs"),p=require("../renderer/renderer.cjs"),Q=require("./calendar-cell.vue2.cjs"),U=e.defineComponent({name:"CalendarPanel",__name:"calendar-panel",props:K.calendarPanelProps,emits:["update:value"],setup(z,{expose:L,emit:Y}){const P=z,n=v.useProps("calendarBase",P,{locale:null,value:{default:null,static:!0},year:()=>new Date().getFullYear(),month:{default:()=>new Date().getMonth()+1,validator:t=>t>0&&t<=12},weekDays:{default:null,validator:t=>!t||t.length===0||t.length===7},weekStart:{default:0,validator:t=>t>=0&&t<7},today:{default:()=>new Date,validator:t=>!Number.isNaN(+new Date(t))},disabledDate:{default:f.toFalse,isFunc:!0},valueType:{default:"start",validator:t=>t==="start"||t==="end"},min:null,max:null,range:null,selectRow:!1,slots:()=>({})}),I=Y,i=v.useNameHelper("calendar"),s=e.ref(null),o=e.ref(null),c=e.ref([]),d=e.ref(null),{wrapper:D,isHover:O}=J.useHover(),T=v.useLocale("calendar",e.toRef(n,"locale")),h=e.computed(()=>n.min?+f.startOfDay(n.min):-1/0),y=e.computed(()=>n.max?+f.endOfDay(n.max):1/0),W=e.computed(()=>Number.isNaN(h.value)||Number.isNaN(y.value)?!1:h.value>y.value),A=f.debounceMinor(S);C(n.value),S(),e.watch(()=>n.value,C),e.watch([()=>n.year,()=>n.month,()=>n.weekStart],A),e.watch(O,t=>{t||(d.value=null)}),e.watch(d,t=>{v.emitEvent(n.onHover,t)}),L({startValue:s,endValue:o,body:D,isSelected:M,isHovered:V,isPrevMonth:x,isNextMonth:E,isDisabled:g,isToday:_,isInRange:q});function N(t){var a;return((a=n.weekDays)==null?void 0:a[t])||T.value[`week${t||7}`]}function S(){c.value=f.rangeDate(f.startOfWeek(new Date(n.year,n.month-1,1),n.weekStart),42)}function C(t){Array.isArray(t)||(t=[t,t]);for(let a=0;a<2;++a){const r=new Date(t[a]??"");if(a===0?s.value=Number.isNaN(+r)?null:r:o.value=Number.isNaN(+r)?null:r,!n.range)break}}function w(t,a){return n.selectRow&&f.differenceWeeks(t,a)===0}function M(t){return!t||!s.value&&!o.value?!1:!!(s.value&&(!f.differenceDays(t,s.value)||w(t,s.value))||o.value&&(!f.differenceDays(t,o.value)||w(t,o.value)))}function g(t){if(typeof n.disabledDate=="function"&&n.disabledDate(t))return!0;const a=t.getTime();if(W.value){if(a>y.value&&a<h.value)return!0}else if(a<h.value||a>y.value)return!0;return!1}function V(t){return!t||!d.value?!1:!f.differenceDays(t,d.value)||w(t,d.value)}function x(t){const{year:a,month:r}=n,l=t.getFullYear(),u=t.getMonth();return l<a||l===a&&u<r-1}function E(t){const{year:a,month:r}=n,l=t.getFullYear(),u=t.getMonth();return l>a||l===a&&u>r-1}function _(t){return f.differenceDays(t,n.today)===0}function j(t){g(t)||(n.valueType==="start"?s.value=t:o.value=t,v.emitEvent(n.onSelect,t),I("update:value",t))}function G(t){d.value=g(t)?null:t}function q(t){if(!d.value&&!s.value&&!o.value)return!1;let a,r;if(s.value&&o.value){const l=s.value.getTime(),u=o.value.getTime();a=Math.min(l,u),r=Math.max(l,u)}else if(d.value){if(!s.value&&!o.value)return!1;const l=d.value.getTime();if(!s.value||!o.value){const u=(s.value??o.value).getTime();a=Math.min(l,u),r=Math.max(l,u)}else{const u=s.value.getTime(),m=o.value.getTime(),k=Math.min(u,m),b=Math.max(u,m);a=Math.min(l,k),r=Math.max(l,b)}}else return!1;return t.getTime()>=a&&t.getTime()<=r}return(t,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(i).be("panel"),e.unref(i).bs("vars"),e.unref(n).selectRow&&e.unref(i).bem("panel","select-row"),e.unref(n).inherit&&e.unref(i).bem("panel","inherit")]),role:"grid"},[e.renderSlot(t.$slots,"header",{},()=>[e.createVNode(e.unref(p),{renderer:e.unref(n).slots.header},null,8,["renderer"])]),e.createElementVNode("div",{class:e.normalizeClass([e.unref(i).be("row"),e.unref(i).bem("row","week")]),"aria-hidden":""},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(7,r=>e.createElementVNode("div",{key:r,class:e.normalizeClass([e.unref(i).be("cell"),e.unref(i).be("cell-week")])},[e.renderSlot(t.$slots,"week",{label:N((r-1+e.unref(n).weekStart)%7),index:r-1,week:(r-1+e.unref(n).weekStart)%7},()=>[e.createVNode(e.unref(p),{renderer:e.unref(n).slots.week,data:{label:N((r-1+e.unref(n).weekStart)%7),index:r-1,week:(r-1+e.unref(n).weekStart)%7}},{default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(e.unref(i).be("index"))},e.toDisplayString(N((r-1+e.unref(n).weekStart)%7)),3)]),_:2},1032,["renderer","data"])])],2)),64))],2),e.createElementVNode("div",{ref_key:"body",ref:D,class:e.normalizeClass(e.unref(i).be("body"))},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(6,r=>e.createElementVNode("div",{key:r,class:e.normalizeClass(e.unref(i).be("row"))},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(7,l=>e.createVNode(Q,{key:(r-1)*7+l,date:c.value[(r-1)*7+l-1],locale:e.unref(T),selected:M(c.value[(r-1)*7+l-1]),hovered:V(c.value[(r-1)*7+l-1]),"is-prev":x(c.value[(r-1)*7+l-1]),"is-next":E(c.value[(r-1)*7+l-1]),"is-today":_(c.value[(r-1)*7+l-1]),disabled:g(c.value[(r-1)*7+l-1]),"in-range":e.unref(n).range&&q(c.value[(r-1)*7+l-1]),onHover:G,onSelect:j},e.createSlots({_:2},[t.$slots.item||e.unref(n).slots.item?{name:"item",fn:e.withCtx(({date:u,label:m,selected:k,hovered:b,isPrev:B,isNext:F,isToday:R,disabled:$,inRange:H})=>[e.renderSlot(t.$slots,"item",{date:u,label:m,selected:k,hovered:b,isPrev:B,isNext:F,isToday:R,disabled:$,inRange:H},()=>[e.createVNode(e.unref(p),{renderer:e.unref(n).slots.item,data:{date:u,label:m,selected:k,hovered:b,isPrev:B,isNext:F,isToday:R,disabled:$,inRange:H}},null,8,["renderer","data"])])]),key:"0"}:void 0,t.$slots.itemContent||e.unref(n).slots.itemContent?{name:"default",fn:e.withCtx(u=>[e.renderSlot(t.$slots,"itemContent",e.mergeProps({ref_for:!0},u),()=>[e.createVNode(e.unref(p),{renderer:e.unref(n).slots.itemContent,data:u},null,8,["renderer","data"])])]),key:"1"}:void 0]),1032,["date","locale","selected","hovered","is-prev","is-next","is-today","disabled","in-range"])),64))],2)),64))],2),e.renderSlot(t.$slots,"footer",{},()=>[e.createVNode(e.unref(p),{renderer:e.unref(n).slots.footer},null,8,["renderer"])])],2))}});module.exports=U;
//# sourceMappingURL=calendar-panel.vue2.cjs.map