@scania/tegel
Version:
Tegel Design System
1 lines • 20.3 kB
JavaScript
import{r as s,c as t,h as i,g as e}from"./p-2049fab2.js";import{g as d}from"./p-11648030.js";const r=class{constructor(i){s(this,i),this.tdsChange=t(this,"tdsChange",6),this.tdsInput=t(this,"tdsInput",6),this.wrapperElement=null,this.thumbElement=null,this.thumbInnerElement=null,this.trackElement=null,this.trackFillElement=null,this.thumbGrabbed=!1,this.thumbLeft=0,this.tickValues=[],this.useControls=!1,this.useInput=!1,this.useSmall=!1,this.useSnapping=!1,this.supposedValueSlot=-1,this.resizeObserverAdded=!1,this.resetEventListenerAdded=!1,this.ariaLiveElement=null,this.announcementDebounceTimeout=null,this.resetToInitialValue=()=>{this.forceValueUpdate(this.initialValue),this.reset()},this.label="",this.value="0",this.min="0",this.max="100",this.ticks="0",this.showTickNumbers=!1,this.tooltip=!1,this.disabled=!1,this.readOnly=!1,this.controls=!1,this.input=!1,this.step="1",this.name="",this.thumbSize="lg",this.snap=!1,this.tdsAriaLabel="",this.sliderId=d(),this.tdsReadOnlyAriaLabel=""}roundToStep(s){const t=parseFloat(this.step);if(!t)return parseFloat(s.toFixed());const i=Math.round(s/t)*t,e=(t.toString().split(".")[1]||"").length;return parseFloat(i.toFixed(e))}async reset(){this.componentWillLoad(),this.componentDidLoad()}handleKeydown(s){switch(s.key){case"ArrowLeft":case"ArrowDown":case"-":this.stepLeft(s),this.announceValueChange();break;case"ArrowRight":case"ArrowUp":case"+":this.stepRight(s),this.announceValueChange();break;case"Home":this.setToMinValue(),this.announceValueChange();break;case"End":this.setToMaxValue(),this.announceValueChange()}}handleRelease(s){this.thumbGrabbed?(this.thumbGrabbed=!1,this.thumbInnerElement.classList.remove("pressed"),this.thumbElement&&this.thumbElement.setAttribute("aria-grabbed","false"),this.updateValue(s),this.trackElement.focus()):(s.target===this.trackElement||s.target===this.trackFillElement)&&(this.thumbCore(s),this.trackElement.focus())}handleMove(s){this.thumbGrabbed&&this.thumbCore(s)}handleValueUpdate(s){this.calculateThumbLeftFromValue(s),this.value=s,this.updateTrack()}setToMinValue(){this.readOnly||this.disabled||this.forceValueUpdate(this.min)}setToMaxValue(){this.readOnly||this.disabled||this.forceValueUpdate(this.max)}updateSupposedValueSlot(s){const t=parseInt(this.ticks),i=this.getTrackWidth(),e=Math.round(i/(t+1)),d=Math.round(s/e)*e;let r=0;return d>=0&&d<=i?r=d:d>i?r=i:d<0&&(r=0),this.supposedValueSlot=Math.round(r/e),d}thumbCore(s){const t=parseInt(this.ticks),i=this.trackElement.getBoundingClientRect();let e=0;"mousemove"===s.type||"mouseup"===s.type?e=s.clientX-i.left:"touchmove"===s.type?e=s.touches[0].clientX-i.left:console.warn("Slider component: Unsupported event!"),this.supposedValueSlot=-1,this.useSnapping&&t>0&&(e=this.updateSupposedValueSlot(e)),this.thumbLeft=this.constrainThumb(e),this.thumbElement.style.left=`${this.thumbLeft}px`,this.updateValue(s)}updateTrack(){const s=this.getTrackWidth();this.trackFillElement&&(this.trackFillElement.style.width=this.thumbLeft/s*100+"%")}announceValueChange(){this.ariaLiveElement&&(clearTimeout(this.announcementDebounceTimeout),this.announcementDebounceTimeout=setTimeout((()=>{this.ariaLiveElement.textContent=`${this.label?this.label+" ":""}${this.value} of ${this.max}`}),50))}updateValue(s){const t=this.getTrackWidth(),i=parseFloat(this.min),e=parseFloat(this.max);if(this.useSnapping&&this.supposedValueSlot>=0){const s=this.tickValues[this.supposedValueSlot];this.value=s.toString(),this.calculateThumbLeftFromValue(s)}else this.value=this.roundToStep(i+this.thumbLeft/t*(e-i)).toString();this.updateTrack(),this.thumbElement&&(this.thumbElement.setAttribute("aria-valuenow",this.value),this.thumbElement.setAttribute("aria-valuetext",`${this.value} of ${this.max}`)),this.tdsInput.emit({value:this.value}),"touchend"!==s.type&&"mouseup"!==s.type||(this.tdsChange.emit({value:this.value}),this.announceValueChange())}forceValueUpdate(s){this.calculateThumbLeftFromValue(s),this.value=s,this.thumbElement&&(this.thumbElement.setAttribute("aria-valuenow",this.value),this.thumbElement.setAttribute("aria-valuetext",`${this.value} of ${this.max}`)),this.tdsChange.emit({value:this.value}),this.updateTrack(),this.announceValueChange()}constrainThumb(s){const t=this.getTrackWidth();return s<0?0:s>t?t:s}getTrackWidth(){if(!this.trackElement)return 0;const s=this.trackElement.getBoundingClientRect();return s.right-s.left}calculateThumbLeftFromValue(s){const t=s,i=this.getTrackWidth(),e=t-parseFloat(this.min),d=parseFloat(this.max)-parseFloat(this.min);this.thumbLeft=e/d*i,this.updateSupposedValueSlot(this.thumbLeft),this.thumbElement&&(this.thumbElement.style.left=`${this.thumbLeft}px`,this.thumbElement.setAttribute("aria-valuenow",this.value))}updateSliderValueOnInputChange(s){let t=parseFloat(s.target.value);if(t===parseFloat(this.value))return;const i=parseFloat(this.min),e=parseFloat(this.max);t<i?t=i:t>e&&(t=e);const d=this.roundToStep(t);this.forceValueUpdate(d.toString())}handleInputFieldEnterPress(s){s.stopPropagation(),"Enter"===s.key&&(this.updateSliderValueOnInputChange(s),s.target.blur())}grabThumb(){this.readOnly||(this.thumbGrabbed=!0,this.thumbInnerElement.classList.add("pressed"),this.thumbElement&&this.thumbElement.setAttribute("aria-grabbed","true"))}calculateInputSizeFromMax(){return this.max.length}controlsStep(s,t){if(this.readOnly||this.disabled)return;const i=parseInt(this.ticks);if(this.useSnapping&&i>0)this.supposedValueSlot+=s>0?1:-1,this.supposedValueSlot<0?this.supposedValueSlot=0:this.supposedValueSlot>i+1&&(this.supposedValueSlot=i+1),this.updateValue(t);else{const t=this.getTrackWidth(),i=this.thumbLeft/t;let e=parseFloat(this.min)+i*(parseFloat(this.max)-parseFloat(this.min));e+=s,e=this.roundToStep(e),e<parseFloat(this.min)?e=parseFloat(this.min):e>parseFloat(this.max)&&(e=parseFloat(this.max)),this.value=`${e}`,this.forceValueUpdate(this.value)}}stepLeft(s){this.controlsStep(-parseFloat(this.step),s)}stepRight(s){this.controlsStep(parseFloat(this.step),s)}componentWillLoad(){const s=parseInt(this.ticks);if(s>0){this.tickValues=[parseFloat(this.min)];const t=(parseFloat(this.max)-parseFloat(this.min))/(s+1),i=(parseFloat(this.step).toString().split(".")[1]||"").length;for(let e=1;e<=s;e++){const s=parseFloat(this.min)+t*e;this.tickValues.push(parseFloat(s.toFixed(i)))}this.tickValues.push(parseFloat(this.max))}this.useInput=!1,this.useControls=!1,this.controls?this.useControls=!0:this.input&&(this.useInput=!0),this.useSmall="sm"===this.thumbSize,this.useSnapping=this.snap,parseFloat(this.min)>parseFloat(this.max)&&(console.warn("min-prop must have a higher value than max-prop for the component to work correctly."),this.disabled=!0)}componentDidLoad(){this.resizeObserverAdded||(this.resizeObserverAdded=!0,new ResizeObserver((()=>{this.calculateThumbLeftFromValue(this.value),this.updateTrack()})).observe(this.wrapperElement)),this.calculateThumbLeftFromValue(this.value),this.updateTrack(),this.initialValue||(this.initialValue=this.value),this.thumbElement&&(this.thumbElement.setAttribute("aria-valuenow",this.value),this.thumbElement.setAttribute("aria-valuetext",`${this.value} of ${this.max}`),this.thumbElement.tabIndex=this.disabled?-1:0)}componentDidRender(){this.resetEventListenerAdded||(this.formElement=this.host.closest("form"),this.formElement&&(this.formElement.addEventListener("reset",this.resetToInitialValue),this.resetEventListenerAdded=!0))}connectedCallback(){this.readOnly&&!this.tdsReadOnlyAriaLabel&&console.warn("tds-slider: tdsAriaLabel is reccomended when readonly is true"),this.resetEventListenerAdded&&this.formElement&&(this.formElement.removeEventListener("reset",this.resetToInitialValue),this.resetEventListenerAdded=!1)}render(){const s=this.readOnly?this.tdsReadOnlyAriaLabel:this.label||this.tdsAriaLabel;return i("div",{key:"b4dd7706df0be052f0028a5f8ba6b6158f403b13",class:{"tds-slider-wrapper":!0,"read-only":this.readOnly}},i("input",{key:"672c2aaa6dfee6489cd5e764ef151728c2af10fc",class:"tds-slider-native-element",type:"range",name:this.name,min:this.min,max:this.max,step:this.step,value:this.value,disabled:this.disabled}),i("div",{key:"8c7200436a9ef6524a3b2d554a2556bda8cc6afd",class:"sr-only","aria-live":"assertive",ref:s=>{this.ariaLiveElement=s}}),i("div",{key:"1ce8e7ddccd19ca15733683768900c8fcde514d3",class:{"tds-slider":!0,disabled:this.disabled,"tds-slider-small":this.useSmall},ref:s=>{this.wrapperElement=s},"aria-disabled":this.disabled?"true":"false"},i("label",{key:"54616f1cb5e4c13541f6f5fa700ddf4b1c4a9493",id:`${this.sliderId}-label`,class:this.showTickNumbers&&"offset"},this.label),this.useInput&&i("div",{key:"f6b8283409e9fb74ebf5fe89af5d88c29fde904d",class:"tds-slider__input-values"},i("div",{key:"30532947c70dc8e0612fea3c01c25a5e86dacfca",class:"tds-slider__input-value min-value"},this.min)),this.useControls&&i("div",{key:"6c001b8caba4a396bb9f4f4f3ba7b9ee6ca36f84",class:"tds-slider__controls"},i("div",{key:"7a5804b789f84a4cd749c21d0ecc4b73bf7bae09",class:"tds-slider__control tds-slider__control-minus",onClick:s=>this.stepLeft(s),role:"button","aria-label":"Decrease value",tabindex:this.disabled||this.readOnly?"-1":"0"},i("tds-icon",{key:"41db4dc1a8fda4972303fd48400078035648ca5c",name:"minus",size:"16px"}))),i("div",{key:"f3cb2039ec4245b1d5c58bb819675381c4490197",class:"tds-slider-inner",tabIndex:-1},this.tickValues.length>0&&i("div",{key:"38bf8ca015894f3a42a0e9e33800cc7f0ff9c8d5",class:"tds-slider__value-dividers-wrapper"},i("div",{key:"6a5aaa5d652d55f23db24b1b531664d125fc2a23",class:"tds-slider__value-dividers"},this.tickValues.map((s=>i("div",{class:"tds-slider__value-divider"},this.showTickNumbers&&i("span",null,s)))))),i("div",{key:"0c99475a8bdb1fdec04358421ec34630111a63b8",class:"tds-slider__track",ref:s=>{this.trackElement=s},tabindex:this.disabled?"-1":"0",role:"presentation",onFocus:()=>{this.thumbElement&&this.thumbElement.focus()}},i("div",{key:"d3ece50db5fbc17e4ebbf4272faa17fcf201dccf",class:"tds-slider__track-fill",ref:s=>{this.trackFillElement=s}}),i("div",{key:"c304176e6a240820418d80aa8bfad35fbbdaf0f4",class:"tds-slider__thumb",ref:s=>{this.thumbElement=s},onMouseDown:()=>this.grabThumb(),onTouchStart:()=>this.grabThumb(),role:"slider","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":this.value,"aria-valuetext":`${this.value} of ${this.max}`,"aria-labelledby":`${this.sliderId}-label`,"aria-grabbed":this.thumbGrabbed?"true":"false","aria-label":s,tabindex:this.disabled?"-1":"0"},this.tooltip&&i("div",{key:"7c46c4f8b3cc3bf3aeae7c841a2f38e7b3d1dfbb",class:"tds-slider__value"},this.value,i("svg",{key:"871a05a8fc1560c8e94071172c57563d63e10f22",width:"18",height:"14",viewBox:"0 0 18 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},i("path",{key:"0c99295a2049b3aac5d0472880e63acc4318fa07",d:"M8.15882 12.6915L0.990487 1.54076C0.562658 0.875246 1.0405 0 1.83167 0H16.1683C16.9595 0 17.4373 0.875246 17.0095 1.54076L9.84118 12.6915C9.44754 13.3038 8.55246 13.3038 8.15882 12.6915Z",fill:"currentColor"}))),i("div",{key:"bf42f5b512d3041a88bd8cc420a5a4aaeb875e49",class:"tds-slider__thumb-inner",ref:s=>{this.thumbInnerElement=s}})))),this.useInput&&i("div",{key:"9a1ed941f13b84e738500921b12aeb21ace2464c",class:"tds-slider__input-values"},i("div",{key:"2bdf5b0fb2687075b2fc12ce931859d2f26a0685",class:"tds-slider__input-value",onClick:s=>this.stepLeft(s)},this.max),i("div",{key:"480825ddccd550527ac18f046c6a8ce26baaba87",class:"tds-slider__input-field-wrapper"},i("input",{key:"94a1446990ea0ae3955e8db9f0119e4a0ec71970",size:this.calculateInputSizeFromMax(),class:"tds-slider__input-field",value:this.value,"aria-label":this.readOnly?this.tdsReadOnlyAriaLabel:void 0,onBlur:s=>this.updateSliderValueOnInputChange(s),onKeyDown:s=>this.handleInputFieldEnterPress(s),type:"number",min:this.min,max:this.max,step:this.step}))),this.useControls&&i("div",{key:"b7415e621df023ffe0eca844d9970454d01c72ce",class:"tds-slider__controls"},i("div",{key:"044a984a7212d56f8c1bcb5709608d90677d7647",class:"tds-slider__control tds-slider__control-plus",onClick:s=>this.stepRight(s),role:"button","aria-label":"Increase value",tabindex:this.disabled||this.readOnly?"-1":"0"},i("tds-icon",{key:"0b6410f7fb4af32681c3f49f29c9696e871bfd5a",name:"plus",size:"16px"})))))}get host(){return e(this)}static get watchers(){return{value:["handleValueUpdate"]}}};r.style='tds-slider{box-sizing:border-box;width:100%}tds-slider *{box-sizing:border-box}tds-slider input[type=range].tds-slider-native-element{display:none}tds-slider .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.tds-slider-wrapper{width:100%}.tds-slider-wrapper.read-only{pointer-events:none}.tds-slider-wrapper:focus-within{outline:2px solid var(--tds-blue-400);outline-offset:2px;border-radius:var(--tds-spacing-element-4)}.tds-slider{width:100%;display:flex;flex-wrap:nowrap;padding-top:65px}.tds-slider .tds-slider-inner{width:100%;height:20px;position:relative}.tds-slider .tds-slider__controls{position:relative;top:-25px}.tds-slider .tds-slider__controls .tds-slider__control{cursor:pointer}.tds-slider .tds-slider__controls .tds-slider__control.tds-slider__control-minus{padding:18px 18px 18px 0}.tds-slider .tds-slider__controls .tds-slider__control.tds-slider__control-plus{padding:18px 0 18px 18px}.tds-slider .tds-slider__input-values{position:relative;top:-25px;display:flex;flex-wrap:nowrap;align-items:center}.tds-slider .tds-slider__input-values .tds-slider__input-value{user-select:none;padding:18px;color:var(--tds-slider-input-value-color);font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls)}.tds-slider .tds-slider__input-values .tds-slider__input-value.min-value{padding-left:0}.tds-slider .tds-slider__input-values .tds-slider__input-field-wrapper{background-color:var(--tds-slider-inputfield-background);display:flex;align-items:center;justify-content:center;border-radius:4px 4px 0 0}.tds-slider .tds-slider__input-values .tds-slider__input-field-wrapper input.tds-slider__input-field{font:var(--tds-detail-02);letter-spacing:var(--tds-detail-02-ls);color:var(--tds-slider-inputfield-number-color);border:0;background-color:transparent;text-align:center;padding:12px;box-shadow:inset 0 -1px 0 var(--tds-slider-inputfield-box-shadow);border-radius:4px 4px 0 0;appearance:textfield}.tds-slider .tds-slider__input-values .tds-slider__input-field-wrapper input.tds-slider__input-field:hover{box-shadow:inset 0 -1px 0 var(--tds-grey-600)}.tds-slider .tds-slider__input-values .tds-slider__input-field-wrapper input.tds-slider__input-field:focus{box-shadow:inset 0 -2px 0 var(--tds-blue-400);outline:0}.tds-slider .tds-slider__input-values .tds-slider__input-field-wrapper input.tds-slider__input-field::-webkit-outer-spin-button,.tds-slider .tds-slider__input-values .tds-slider__input-field-wrapper input.tds-slider__input-field::-webkit-inner-spin-button{appearance:none;margin:0}.tds-slider label{font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);user-select:none;position:absolute;color:var(--tds-slider-label-color);padding-bottom:16px;transform:translateY(-100%)}.tds-slider label.offset{padding-bottom:34px}.tds-slider .tds-slider__value{font:var(--tds-detail-01);letter-spacing:var(--tds-detail-01-ls);user-select:none;border-radius:4px;padding:8px;position:absolute;transform:translate(-50%, -100%);top:-24px;background-color:var(--tds-slider-value-tooltip-background);color:var(--tds-slider-value-tooltip-color)}.tds-slider .tds-slider__value svg{color:var(--tds-slider-value-tooltip-background);position:absolute;left:50%;transform:translateX(-50%);top:34px}.tds-slider .tds-slider__thumb{position:absolute}.tds-slider .tds-slider__thumb .tds-slider__thumb-inner{width:20px;height:20px;border-radius:100%;background-color:var(--tds-slider-thumb-color);position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);cursor:pointer}.tds-slider .tds-slider__thumb .tds-slider__thumb-inner::before{content:" ";display:none;width:48px;height:48px;background-color:var(--tds-slider-thumb-color);position:absolute;border-radius:100%;top:50%;left:50%;transform:translate(-50%, -50%)}.tds-slider .tds-slider__thumb .tds-slider__thumb-inner:hover::before{display:block;opacity:0.08}.tds-slider .tds-slider__thumb .tds-slider__thumb-inner.pressed{width:24px;height:24px}.tds-slider .tds-slider__thumb .tds-slider__thumb-inner.pressed::before{display:block;opacity:0.16 !important}.tds-slider .tds-slider__value-dividers-wrapper{position:relative;width:100%;pointer-events:none}.tds-slider .tds-slider__value-dividers{pointer-events:none;position:absolute;display:flex;justify-content:space-between;width:100%}.tds-slider .tds-slider__value-dividers .tds-slider__value-divider{transform:translateY(-50%);height:16px;background-color:var(--tds-slider-divider-color);color:var(--tds-slider-divider-values-color);width:1px}.tds-slider .tds-slider__value-dividers .tds-slider__value-divider span{display:block;user-select:none;color:var(-tds-grey-700);font:var(--tds-detail-05);letter-spacing:var(--tds-detail-05-ls);position:relative;top:-7px;left:50%;transform:translate(-50%, -100%);width:50px;text-align:center}.tds-slider .tds-slider__track{width:100%;height:2px;border-radius:1px;background-color:var(--tds-slider-track-color);position:relative;cursor:pointer}.tds-slider .tds-slider__track::after{content:"";position:absolute;left:0;right:0;top:-10px;bottom:-10px;cursor:pointer;z-index:0}.tds-slider .tds-slider__track:focus{outline:0}.tds-slider .tds-slider__track:focus .tds-slider__thumb .tds-slider__thumb-inner{width:24px;height:24px}.tds-slider .tds-slider__track:focus .tds-slider__thumb .tds-slider__thumb-inner::before{display:block;opacity:0.08}.tds-slider .tds-slider__track .tds-slider__track-fill{background-color:var(--tds-slider-track-fill-color);border-radius:2px;height:4px;position:absolute;left:0;top:-1px}.tds-slider .tds-slider__track .tds-slider__thumb{z-index:1}.tds-slider.disabled{cursor:not-allowed}.tds-slider.disabled>*{pointer-events:none}.tds-slider.disabled label{color:var(--tds-slider-label-disabled)}.tds-slider.disabled .tds-slider__controls .tds-slider__control{cursor:default}.tds-slider.disabled .tds-slider__input-values .tds-slider__input-value{color:var(--tds-slider-input-value-disabled)}.tds-slider.disabled .tds-slider__input-values .tds-slider__input-field-wrapper{pointer-events:none}.tds-slider.disabled .tds-slider__input-values .tds-slider__input-field-wrapper input.tds-slider__input-field{color:var(--tds-slider-inputfield-number-disabled);box-shadow:none;pointer-events:none;background:var(--tds-slider-inputfield-background-disabled)}.tds-slider.disabled .tds-slider__value{display:none}.tds-slider.disabled .tds-slider__track{cursor:not-allowed;background-color:var(--tds-slider-track-disabled)}.tds-slider.disabled .tds-slider__track .tds-slider__track-fill{background-color:var(--tds-slider-track-disabled)}.tds-slider.disabled .tds-slider__value-dividers .tds-slider__value-divider{background-color:var(--tds-slider-divider-disabled)}.tds-slider.disabled .tds-slider__value-dividers .tds-slider__value-divider span{color:var(--tds-slider-divider-values-disabled)}.tds-slider.disabled .tds-slider__thumb{pointer-events:none}.tds-slider.disabled .tds-slider__thumb .tds-slider__thumb-inner{background-color:var(--tds-slider-thumb-disabled);cursor:default}.tds-slider.tds-slider-small .tds-slider__thumb .tds-slider__thumb-inner{width:16px;height:16px}.tds-slider.tds-slider-small .tds-slider__thumb .tds-slider__thumb-inner::before{width:40px;height:40px}.tds-slider.tds-slider-small .tds-slider__thumb .tds-slider__thumb-inner.pressed{width:20px;height:20px}.tds-slider .tds-slider__controls .tds-slider__control{cursor:default}.tds-slider .tds-slider__controls .tds-slider__control.tds-slider__control-minus tds-icon,.tds-slider .tds-slider__controls .tds-slider__control.tds-slider__control-plus tds-icon{color:var(--tds-slider-controls-color)}.tds-slider.disabled .tds-slider__controls .tds-slider__control{cursor:default}.tds-slider.disabled .tds-slider__controls .tds-slider__control.tds-slider__control-minus tds-icon,.tds-slider.disabled .tds-slider__controls .tds-slider__control.tds-slider__control-plus tds-icon{color:var(--tds-slider-controls-disabled)}';export{r as tds_slider}