UNPKG

vue-amazing-ui

Version:

An Amazing Vue3 UI Components Library, Using TypeScript.

6 lines (5 loc) 9.35 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),a=require("date-fns"),O=require("../select/index.cjs"),Z=require("../radio/index.cjs"),C=require("../utils/index.cjs"),x={class:"calendar-header-wrap"},I={key:0,class:"calendar-header-content"},ee={class:"calendar-header-actions"},te={tabindex:"0",class:"calendar-display-wrap"},ae={key:0,class:"calendar-date-panel"},le={class:"calendar-body"},oe={class:"calendar-table"},ne=["title","onClick"],re={class:"date-cell-inner"},se={class:"date-value"},ue={class:"date-content"},de={key:1,class:"calendar-month-panel"},ce={class:"calendar-body"},ie={class:"calendar-table"},me=["title","onClick"],ve={class:"date-cell-inner"},pe={class:"date-value"},fe={class:"date-content"},he=e.defineComponent({__name:"Calendar",props:{display:{default:"panel"},mode:{default:"month"},header:{default:void 0},yearSelectProps:{default:()=>({})},monthSelectProps:{default:()=>({})},modeRadioProps:{default:()=>({})},startDayOfWeek:{default:0},dateStrip:{type:Boolean,default:!0},dateFormat:{type:Function,default:void 0},weekFormat:{type:Function,default:void 0},monthFormat:{type:Function,default:void 0},disabledDate:{type:Function,default:void 0},valueFormat:{default:void 0},value:{default:void 0}},emits:["update:value","change","panelChange","select"],setup(E,{emit:B}){const n=E,M=e.ref(Date.now()),V=e.ref([]),N=e.ref(j()),w=e.ref([{label:"月",value:"month"},{label:"年",value:"year"}]),c=e.ref(a.getYear(M.value)),i=e.ref(a.getMonth(M.value)+1),m=e.ref(n.mode),g=e.ref([]),u=e.ref(),F=e.ref([]),{colorPalettes:y}=C.useInject("Calendar"),p=B,_=C.useSlotsExist(["header"]),T=e.computed(()=>{const t=["一","二","三","四","五","六","日"],l=[];l.push(t[n.startDayOfWeek]);let r=(n.startDayOfWeek+1)%7;for(;r!==n.startDayOfWeek;)l.push(t[r]),r=(r+1)%7;return l}),v=e.computed(()=>{if(u.value)return typeof u.value=="string"?a.parse(u.value,n.valueFormat,new Date).getTime():u.value}),b=e.computed(()=>new Date(c.value,i.value-1,1).getTime()),$=e.computed(()=>_.header||n.header);e.watch(v,t=>{t&&(c.value=a.getYear(t),i.value=a.getMonth(t)+1)},{immediate:!0}),e.watch(()=>n.mode,t=>{m.value=t}),e.watch(()=>[n.startDayOfWeek,n.dateStrip,i.value,c.value],()=>{g.value=Y()},{immediate:!0,deep:!0}),e.watch(c,()=>{V.value=P(),F.value=q()},{immediate:!0}),e.watch(()=>[n.valueFormat,n.value],()=>{n.value&&(n.valueFormat===void 0||n.valueFormat==="T"?u.value=Number(a.format(a.startOfDay(n.value).getTime(),n.valueFormat||"T")):u.value=a.format(a.startOfDay(n.value).getTime(),n.valueFormat))},{deep:!0,immediate:!0});function P(){const t=[],l=c.value-10,r=c.value+10;for(let s=l;s<r;s++)t.push({label:`${s}年`,value:s});return t}function j(){const t=[];for(let l=1;l<=12;l++)t.push({label:`${l}月`,value:l});return t}function k(t,l,r){return{type:"date",dateObject:{date:a.getDate(t),month:a.getMonth(t),year:a.getYear(t)},timestamp:a.getTime(t),inCurrentMonth:a.isSameMonth(t,l),isCurrentDate:a.isSameDay(r,t)}}function z(t,l,r,s=!1){const o=a.getMonth(t);let d=a.getTime(a.startOfMonth(t)),h=a.getTime(a.addDays(d,-1));const f=[];let S=!s;for(;a.getDay(h)!==r||S;)f.unshift(k(h,t,l)),h=a.getTime(a.addDays(h,-1)),S=!1;for(;a.getMonth(d)===o;)f.push(k(d,t,l)),d=a.getTime(a.addDays(d,1));const X=s?f.length<=28?28:f.length<=35?35:42:42;for(;f.length<X;)f.push(k(d,t,l)),d=a.getTime(a.addDays(d,1));return f}function Y(){const t=z(b.value,Date.now(),n.startDayOfWeek,n.dateStrip),l=7,r=t.length/l,s=[];for(let o=0;o<r;o++)s.push(t.slice(o*l,(o+1)*l));return s}function L(t,l){return{type:"month",monthObject:{month:a.getMonth(t),year:a.getYear(t)},timestamp:a.getTime(t),isCurrent:a.isSameMonth(l,t)}}function W(t,l){const r=[],s=a.startOfYear(t);for(let o=0;o<12;o++)r.push(L(a.getTime(a.addMonths(s,o)),l));return r}function q(){const t=W(b.value,Date.now()),l=3,r=t.length/l,s=[];for(let o=0;o<r;o++)s.push(t.slice(o*l,(o+1)*l));return s}function U(t){return a.format(t.timestamp,"yyyy-MM-dd")}function R(t){return a.format(t.timestamp,"yyyy-MM")}function H(t,l){return n.dateFormat===void 0?`${t}`:n.dateFormat(t,l)}function A(t,l,r){return n.weekFormat===void 0?t:n.weekFormat(t,l,r)}function G(t,l){return n.monthFormat===void 0?`${t}月`:n.monthFormat(t,l)}function J(t){v.value!==t.timestamp&&(t.dateObject.month+1!==i.value&&(i.value=t.dateObject.month+1),n.valueFormat===void 0||n.valueFormat==="T"?u.value=t.timestamp:u.value=a.format(t.timestamp,n.valueFormat),p("update:value",u.value),p("select",u.value,"date"),p("change",u.value,t.dateObject))}function K(){if(u.value){if(typeof u.value=="string"){const t=a.parse(u.value,n.valueFormat,new Date).getTime();return a.startOfMonth(t).getTime()}return a.startOfMonth(u.value).getTime()}}function Q(t){if(K()!==t.timestamp){if(i.value=t.monthObject.month+1,u.value){const l=t.monthObject.year-a.getYear(v.value),r=t.monthObject.month-a.getMonth(v.value),s=a.addMonths(a.addYears(v.value,l),r);n.valueFormat===void 0||n.valueFormat==="T"?u.value=Number(a.format(s,n.valueFormat||"T")):u.value=a.format(s,n.valueFormat)}p("update:value",u.value),p("select",u.value,"month"),p("change",u.value,t.monthObject)}}function D(){m.value==="month"?p("panelChange",u.value,{year:c.value,month:i.value},m.value):p("panelChange",u.value,{year:c.value},m.value)}return(t,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["m-calendar",`calendar-${t.display}`]),style:e.normalizeStyle(` --calendar-primary-color: ${e.unref(y)[5]}; --calendar-panel-primary-bg-color: ${e.unref(y)[0]}; --calendar-card-primary-bg-color: ${e.unref(y)[5]}; `)},[e.createElementVNode("div",x,[$.value?(e.openBlock(),e.createElementBlock("div",I,[e.renderSlot(t.$slots,"header",{},()=>[e.createTextVNode(e.toDisplayString(t.header),1)],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",ee,[e.createVNode(e.unref(O.default),e.mergeProps({class:"calendar-year-select",size:t.display==="card"?"small":"middle",options:V.value,"max-display":8,modelValue:c.value,"onUpdate:modelValue":l[0]||(l[0]=r=>c.value=r),onChange:D},t.yearSelectProps),null,16,["size","options","modelValue"]),m.value==="month"?(e.openBlock(),e.createBlock(e.unref(O.default),e.mergeProps({key:0,class:"calendar-month-select",size:t.display==="card"?"small":"middle",options:N.value,"max-display":8,modelValue:i.value,"onUpdate:modelValue":l[1]||(l[1]=r=>i.value=r),onChange:D},t.monthSelectProps),null,16,["size","options","modelValue"])):e.createCommentVNode("",!0),e.createVNode(e.unref(Z.default),e.mergeProps({class:"calendar-mode-radio","button-size":t.display==="card"?"small":"middle",options:w.value,value:m.value,"onUpdate:value":l[2]||(l[2]=r=>m.value=r),button:"",onChange:D},t.modeRadioProps),null,16,["button-size","options","value"])])]),e.createElementVNode("div",te,[m.value==="month"?(e.openBlock(),e.createElementBlock("div",ae,[e.createElementVNode("div",le,[e.createElementVNode("table",oe,[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,(r,s)=>(e.openBlock(),e.createElementBlock("th",{key:s},[e.renderSlot(t.$slots,"week",{defaultWeek:r,week:s,timestamp:g.value[0][s].timestamp},()=>[e.createTextVNode(e.toDisplayString(A(r,s,g.value[0][s].timestamp)),1)],!0)]))),128))])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,(r,s)=>(e.openBlock(),e.createElementBlock("tr",{key:s},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r,(o,d)=>(e.openBlock(),e.createElementBlock("td",{class:e.normalizeClass(["calendar-date-cell",{"date-cell-disabled":t.disabledDate&&t.disabledDate(o.timestamp),"date-cell-in-view":o.inCurrentMonth,"date-cell-today":o.isCurrentDate,"date-cell-selected":v.value&&v.value===o.timestamp}]),key:d,title:U(o),onClick:h=>J(o)},[e.createElementVNode("div",re,[e.createElementVNode("div",se,[e.renderSlot(t.$slots,"dateValue",e.mergeProps({ref_for:!0},o),()=>[e.createTextVNode(e.toDisplayString(H(o.dateObject.date,o.timestamp)),1)],!0)]),e.createElementVNode("div",ue,[e.renderSlot(t.$slots,"dateContent",e.mergeProps({ref_for:!0},o),void 0,!0)])])],10,ne))),128))]))),128))])])])])):e.createCommentVNode("",!0),m.value==="year"?(e.openBlock(),e.createElementBlock("div",de,[e.createElementVNode("div",ce,[e.createElementVNode("table",ie,[e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(F.value,(r,s)=>(e.openBlock(),e.createElementBlock("tr",{key:s},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r,(o,d)=>(e.openBlock(),e.createElementBlock("td",{class:e.normalizeClass(["calendar-date-cell date-cell-in-view",{"date-cell-today":o.isCurrent,"date-cell-selected":v.value&&e.unref(a.startOfMonth)(v.value).getTime()===o.timestamp}]),key:d,title:R(o),onClick:h=>Q(o)},[e.createElementVNode("div",ve,[e.createElementVNode("div",pe,[e.renderSlot(t.$slots,"monthValue",e.mergeProps({ref_for:!0},o),()=>[e.createTextVNode(e.toDisplayString(G(o.monthObject.month+1,o.timestamp)),1)],!0)]),e.createElementVNode("div",fe,[e.renderSlot(t.$slots,"monthContent",e.mergeProps({ref_for:!0},o),void 0,!0)])])],10,me))),128))]))),128))])])])])):e.createCommentVNode("",!0)])],6))}});exports.default=he;