UNPKG

@progress/kendo-vue-dateinputs

Version:
9 lines (8 loc) 5.68 kB
/** * @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 n=require("vue"),c=require("@progress/kendo-date-math"),o=require("@progress/kendo-vue-common"),m=require("@progress/kendo-vue-intl"),f=require("../virtualization/Virtualization.js"),l=require("./models/TimePart.js"),v=require("./services/DayPeriodService.js"),g=require("./services/DOMService.js"),$=require("./services/HoursService.js"),S=require("./services/MinutesService.js"),T=require("./services/SecondsService.js"),u=require("../utils.js");function y(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!n.isVNode(e)}const x=2,d=.05,I=0,b={[o.Keys.end]:(e,t)=>e[e.length-1],[o.Keys.home]:(e,t)=>e[0],[o.Keys.up]:(e,t)=>e[t-1],[o.Keys.down]:(e,t)=>e[t+1]},p={[l.TIME_PART.dayperiod]:v.DayPeriodService,[l.TIME_PART.hour]:$.HoursService,[l.TIME_PART.minute]:S.MinutesService,[l.TIME_PART.second]:T.SecondsService},O=n.defineComponent({name:"KendoTimeList",emits:{change:e=>!0,focus:e=>!0,blur:e=>!0},props:{id:Number,boundRange:{type:Boolean,default:!1},max:{type:Date,default:function(){return u.MAX_TIME}},min:{type:Date,default:function(){return u.MIDNIGHT_DATE}},part:Object,step:{type:Number,default:1},value:Date,smoothScroll:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},inject:{kendoIntlService:{default:null}},data(){return{animateToIndex:!1}},created(){this.topOffset=void 0,this.dom=new g.DOMService},computed:{animate(){return!!(this.$props.smoothScroll&&this.animateToIndex)}},mounted(){this.virtualization=this.$refs.virtualization,Promise.resolve().then(()=>{this.$el&&(this.dom.calculateHeights(this.$el),this.$forceUpdate())})},updated(){if(!this.$refs.virtualization)return;this.virtualization=this.$refs.virtualization;const e=this.service.selectedIndex(this.$props.value);this.virtualization[this.animate?"animateToIndex":"scrollToIndex"](e),this.animateToIndex=!0},setup(){return{kendoIntlService:n.inject("kendoIntlService",{})}},render(){let e;if(!this.$props.part.type||!p[this.$props.part.type])return;this.calculateHeights(),this.intl=m.provideIntlService(this),this.service=new p[this.$props.part.type](this.intl),this.configureServices();const t=this.service.data(this.$props.value),i="translateY("+this.topOffset+"px)",s=this.service.total(this.$props.value),r=function(){return n.createVNode("ul",{style:{transform:i,msTransform:i},class:"k-reset"},[t.map(function(a,h){return n.createVNode("li",{key:h,class:"k-item",onClick:()=>{this.handleChange(a)}},[n.createVNode("span",null,[a.text])])},this)])};return n.createVNode("div",{class:"k-time-list",id:String(this.$props.id||""),tabindex:this.$props.disabled?-1:0,onKeydown:this.handleKeyDown,onFocusin:this.handleFocus,onFocusout:this.handleBlur,onMouseover:this.handleMouseOver},[this.dom.didCalculate?n.createVNode(f.Virtualization,{bottomOffset:this.bottomOffset,class:"k-time-container",itemHeight:this.itemHeight,maxScrollDifference:this.listHeight,onScrollaction:this.handleScrollAction,ref:"virtualization",role:"presentation",skip:I,tabIndex:-1,take:s,topOffset:this.topOffset,total:s},y(e=r.call(this))?e:{default:()=>[e]}):n.createVNode("div",{class:"k-time-container"},[r.call(this)])])},methods:{focus(e){Promise.resolve().then(()=>{this.$el&&this.$el.focus(e)})},itemOffset(e){if(!this.virtualization)return-1;const t=this.service.selectedIndex(this.$props.value),i=this.virtualization.activeIndex(),s=this.virtualization.itemOffset(i),r=Math.abs(Math.ceil(e)-s);if(t===i&&r<x)return s;const a=t>i;return a&&r>=this.bottomThreshold||!a&&r>this.topThreshold?this.virtualization.itemOffset(i+1):s},calculateHeights(){this.dom.didCalculate&&(this.itemHeight=this.dom.itemHeight,this.listHeight=this.dom.timeListHeight,this.topOffset=(this.listHeight-this.itemHeight)/2,this.bottomOffset=this.listHeight-this.itemHeight,this.topThreshold=this.itemHeight*d,this.bottomThreshold=this.itemHeight*(1-d))},configureServices(e){let{min:t,max:i,value:s}=e||this.$props;const[r,a]=this.service.limitRange(t||this.$props.min,i||this.$props.max,s||this.$props.value);this.service.configure(this.serviceSettings({min:r,max:a}))},serviceSettings(e){const t={boundRange:this.$props.boundRange,insertUndividedMax:!1,min:c.cloneDate(this.$props.min),max:c.cloneDate(this.$props.max),part:this.$props.part,step:this.$props.step},i=Object.assign({},t,e);return i.boundRange=i.part.type!=="hour"||this.$props.boundRange,i},handleScrollAction({target:e,animationInProgress:t}){if(this.virtualization&&e&&!t){this.animateToIndex=!1;const i=this.virtualization.itemIndex(this.itemOffset(e.scrollTop)),s=this.service.data(this.$props.value)[i];this.handleChange(s)}},handleFocus(e){this.$emit("focus",e)},handleBlur(e){this.$emit("blur",e)},handleMouseOver(){this.$el&&o.canUseDOM&&document.activeElement!==this.$el&&this.$el.focus({preventScroll:!0})},handleKeyDown(e){const{keyCode:t}=e;(t===o.Keys.down||t===o.Keys.up||t===o.Keys.end||t===o.Keys.home)&&e.preventDefault();const s=(b[e.keyCode]||o.noop)(this.service.data(this.$props.value),this.service.selectedIndex(this.$props.value));s&&this.handleChange(s)},handleChange(e){const t=this.service.apply(this.$props.value,e.value);this.$props.value.getTime()!==t.getTime()&&(this.currentValue=t,this.$emit("change",t))}}});exports.TimeList=O;