@progress/kendo-vue-dateinputs
Version:
9 lines (8 loc) • 2.42 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const M=require("@progress/kendo-date-math");require("@progress/kendo-vue-intl");const p=require("../../utils.js"),r=require("../utils.js"),a=60,x=n=>t=>t%n,d=x(a),l=(n,t)=>i=>d(n+i*t),c=(n,t)=>d(a+n-t),m=n=>(t,i)=>!i||t.getHours()===i.getHours()?t:r.setMinutes(t,n),I=m(0),f=m(a-1);class L{constructor(t){this.intl=t,this.insertUndividedMax=!1}apply(t,i){return r.setMinutes(t,i.getMinutes())}configure(t){const{insertUndividedMax:i=this.insertUndividedMax,min:s=this.min,max:h=this.max,part:e,step:o=this.step}=t;this.insertUndividedMax=i,this.toListItem=g=>{const u=r.setMinutes(p.MIDNIGHT_DATE,g);return{text:this.intl.formatDate(u,e.pattern),value:u}},this.min=s,this.max=h,this.step=o}data(t){const[i]=this.range(t),s=l(i,this.step),h=o=>this.toListItem(s(o)),e=r.range(0,this.countFromMin(t)).map(h);return this.addLast(e),t&&this.addMissing(e,t),e}isRangeChanged(t,i){return!M.isEqual(this.min,t)||!M.isEqual(this.max,i)}limitRange(t,i,s){return[I(t,s),f(i,s)]}total(t){const i=this.insertUndividedMax&&this.isLastMissing(t)?1:0,s=this.isMissing(t)?1:0;return this.countFromMin(t)+s+i}selectedIndex(t){return Math.ceil(this.divideByStep(t))}valueInList(t){return t?this.insertUndividedMax&&this.lastMinute(t)===t.getMinutes()||!this.isMissing(t):!0}addLast(t,i){return this.insertUndividedMax&&this.isLastMissing(i)&&t.push(this.toListItem(this.lastMinute(i))),t}addMissing(t,i){if(this.valueInList(i))return t;const s=this.toListItem(i.getMinutes());return t.splice(this.selectedIndex(i),0,s),t}countFromMin(t){const[i,s]=this.range(t);return Math.floor(c(s,i)/this.step)+1}isMissing(t){return t?this.selectedIndex(t)!==this.divideByStep(t):!1}isLastMissing(t){return this.isMissing(r.setMinutes(this.max,this.lastMinute(t)))}divideByStep(t){return c(t.getMinutes(),this.min.getMinutes())/this.step}lastMinute(t){return this.range(t)[1]}range(t){const[i,s]=this.limitRange(this.min,this.max,t);return[i.getMinutes(),s.getMinutes()]}}exports.MinutesService=L;