@kitschpatrol/tweakpane-plugin-essentials
Version:
A fork of @tweakpane/plugin-essentials with build optimizations.
2 lines (1 loc) • 36.9 kB
JavaScript
import{TpEvent as e,BladeApi as t,Emitter as i,ButtonController as s,ViewProps as n,ValueMap as r,PlainView as o,BladeController as l,LabelController as a,createPlugin as p,parseRecord as h,TpChangeEvent as c,isEmpty as d,mapRange as u,constrainRange as v,createNumberFormatter as m,ClassName as b,bindValueMap as _,valueToClassName as w,SVG_NS as g,bindValue as f,createValue as C,PointerHandler as x,isArrowKey as P,getStepForKey as y,getHorizontalStepKeys as E,getVerticalStepKeys as k,RangeConstraint as z,PointNdTextController as V,parseNumber as L,Foldable as T,TextController as M,PopupController as j,connectValues as O,bindFoldable as S,forceCast as q,findNextTarget as D,supportsTouch as N,LabeledValueBladeController as B,PointNdConstraint as A,GraphLogController as I,createPushedBuffer as K,initializeBuffer as $,ManualTicker as F,IntervalTicker as U,Constants as R,TpError as H,createNumberTextPropsObject as X,findConstraint as W,DefiniteRangeConstraint as G,createNumberTextInputParamsParser as J,createRangeConstraint as Q,createStepConstraint as Y,CompositeConstraint as Z,writePrimitive as ee,boolFromUnknown as te,numberFromUnknown as ie,stringFromUnknown as se}from"@tweakpane/core";class ne{constructor(e){this.controller_=e}get disabled(){return this.controller_.viewProps.get("disabled")}set disabled(e){this.controller_.viewProps.set("disabled",e)}get title(){var e;return null!==(e=this.controller_.props.get("title"))&&void 0!==e?e:""}set title(e){this.controller_.props.set("title",e)}on(t,i){const s=i.bind(this);return this.controller_.emitter.on(t,(()=>{s(new e(this))})),this}}class re extends e{constructor(e,t,i){super(e),this.cell=t,this.index=i}}class oe extends t{constructor(e){super(e),this.cellToApiMap_=new Map,this.emitter_=new i;const t=this.controller.valueController;t.cellControllers.forEach(((e,i)=>{const s=new ne(e);this.cellToApiMap_.set(e,s),e.emitter.on("click",(()=>{const e=i%t.size[0],n=Math.floor(i/t.size[0]);this.emitter_.emit("click",{event:new re(this,s,[e,n])})}))}))}cell(e,t){const i=this.controller.valueController,s=i.cellControllers[t*i.size[0]+e];return this.cellToApiMap_.get(s)}on(e,t){const i=t.bind(this);return this.emitter_.on(e,(e=>{i(e.event)})),this}}class le{constructor(e,t){this.size=t.size;const[i,l]=this.size,a=[];for(let o=0;o<l;o++)for(let l=0;l<i;l++){const i=new s(e,{props:r.fromObject(Object.assign({},t.cellConfig(l,o))),viewProps:n.create()});a.push(i)}this.cellCs_=a,this.viewProps=n.create(),this.viewProps.handleDispose((()=>{this.cellCs_.forEach((e=>{e.viewProps.set("disposed",!0)}))})),this.view=new o(e,{viewProps:this.viewProps,viewName:"btngrid"}),this.view.element.style.gridTemplateColumns=`repeat(${i}, 1fr)`,this.cellCs_.forEach((e=>{this.view.element.appendChild(e.view.element)}))}get cellControllers(){return this.cellCs_}}class ae extends l{constructor(e,t){const i=t.valueController,s=new a(e,{blade:t.blade,props:t.labelProps,valueController:i});super({blade:t.blade,view:s.view,viewProps:i.viewProps}),this.valueController=i,this.labelController=s}}const pe=p({id:"buttongrid",type:"blade",accept(e){const t=h(e,(e=>({cells:e.required.function,size:e.required.array(e.required.number),view:e.required.constant("buttongrid"),label:e.optional.string})));return t?{params:t}:null},controller:e=>new ae(e.document,{blade:e.blade,labelProps:r.fromObject({label:e.params.label}),valueController:new le(e.document,{cellConfig:e.params.cells,size:e.params.size})}),api:e=>e.controller instanceof ae?new oe(e.controller):null});class he extends t{get label(){return this.controller.labelController.props.get("label")}set label(e){this.controller.labelController.props.set("label",e)}get value(){return this.controller.valueController.value.rawValue}set value(e){this.controller.valueController.value.rawValue=e}on(e,t){const i=t.bind(this);return this.controller.valueController.value.emitter.on(e,(e=>{i(new c(this,e.rawValue,e.options.last))})),this}}function ce(e,t,i){return e*(1-i)+t*i}function de(e,t){let i=.25,s=.5,n=-1;for(let r=0;r<20;r++){const[r,o]=e.curve(s);if(s+=i*(r<t?1:-1),n=o,i*=.5,Math.abs(t-r)<.001)break}return n}class ue{constructor(e=0,t=0,i=1,s=1){this.cache_=[],this.comps_=[e,t,i,s]}get x1(){return this.comps_[0]}get y1(){return this.comps_[1]}get x2(){return this.comps_[2]}get y2(){return this.comps_[3]}static isObject(e){return!d(e)&&(!!Array.isArray(e)&&("number"==typeof e[0]&&"number"==typeof e[1]&&"number"==typeof e[2]&&"number"==typeof e[3]))}static equals(e,t){return e.x1===t.x1&&e.y1===t.y1&&e.x2===t.x2&&e.y2===t.y2}curve(e){const t=ce(0,this.x1,e),i=ce(0,this.y1,e),s=ce(this.x1,this.x2,e),n=ce(this.y1,this.y2,e),r=ce(this.x2,1,e),o=ce(this.y2,1,e),l=ce(t,s,e),a=ce(i,n,e),p=ce(s,r,e),h=ce(n,o,e);return[ce(l,p,e),ce(a,h,e)]}y(e){if(0===this.cache_.length){const e=[];for(let t=0;t<100;t++)e.push(de(this,u(t,0,99,0,1)));this.cache_=e}return this.cache_[Math.round(u(v(e,0,1),0,1,0,99))]}toObject(){return[this.comps_[0],this.comps_[1],this.comps_[2],this.comps_[3]]}}const ve={toComponents:e=>e.toObject(),fromComponents:e=>new ue(...e)};function me(e){const t=m(2);return`cubic-bezier(${e.toObject().map((e=>t(e))).join(", ")})`}const be=[0,.5,.5,1];function _e(e){const t=e.match(/^cubic-bezier\s*\(\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)\s*\)$/);if(!t)return new ue(...be);const i=[t[1],t[2],t[3],t[4]].reduce(((e,t)=>{if(!e)return null;const i=Number(t);return isNaN(i)?null:[...e,i]}),[]);return new ue(...null!=i?i:be)}const we=b("cbz");class ge{constructor(e,t){this.element=e.createElement("div"),this.element.classList.add(we()),t.viewProps.bindClassModifiers(this.element),t.foldable.bindExpandedClass(this.element,we(void 0,"expanded")),_(t.foldable,"completed",w(this.element,we(void 0,"cpl")));const i=e.createElement("div");i.classList.add(we("h")),this.element.appendChild(i);const s=e.createElement("button");s.classList.add(we("b")),t.viewProps.bindDisabled(s);const n=e.createElementNS(g,"svg");n.innerHTML='<path d="M2 13C8 13 8 3 14 3"/>',s.appendChild(n),i.appendChild(s),this.buttonElement=s;const r=e.createElement("div");if(r.classList.add(we("t")),i.appendChild(r),this.textElement=r,"inline"===t.pickerLayout){const t=e.createElement("div");t.classList.add(we("p")),this.element.appendChild(t),this.pickerElement=t}else this.pickerElement=null}}const fe=b("cbzp");class Ce{constructor(e,t){this.element=e.createElement("div"),this.element.classList.add(fe()),t.viewProps.bindClassModifiers(this.element);const i=e.createElement("div");i.classList.add(fe("g")),this.element.appendChild(i),this.graphElement=i;const s=e.createElement("div");s.classList.add(fe("t")),this.element.appendChild(s),this.textElement=s}}function xe(e,t){const i=new MutationObserver((e=>{for(const s of e)"childList"===s.type&&s.addedNodes.forEach((e=>{e.contains(e)&&(t(),i.disconnect())}))})),s=e.ownerDocument;i.observe(s.body,{attributes:!0,childList:!0,subtree:!0})}const Pe=b("cbzg");class ye{constructor(e,t){this.element=e.createElement("div"),this.element.classList.add(Pe()),t.viewProps.bindClassModifiers(this.element),t.viewProps.bindTabIndex(this.element);const i=e.createElement("div");i.classList.add(Pe("p")),this.element.appendChild(i),this.previewElement=i;const s=e.createElementNS(g,"svg");s.classList.add(Pe("g")),this.element.appendChild(s),this.svgElem_=s;const n=e.createElementNS(g,"path");n.classList.add(Pe("u")),this.svgElem_.appendChild(n),this.guideElem_=n;const r=e.createElementNS(g,"polyline");r.classList.add(Pe("l")),this.svgElem_.appendChild(r),this.lineElem_=r,this.handleElems_=[e.createElement("div"),e.createElement("div")],this.handleElems_.forEach((e=>{e.classList.add(Pe("h")),this.element.appendChild(e)})),this.vectorElems_=[e.createElementNS(g,"line"),e.createElementNS(g,"line")],this.vectorElems_.forEach((e=>{e.classList.add(Pe("v")),this.svgElem_.appendChild(e)})),this.value_=t.value,this.value_.emitter.on("change",this.onValueChange_.bind(this)),this.sel_=t.selection,this.handleElems_.forEach(((e,t)=>{var i,s;f(this.sel_,(i=e=>e===t,s=w(e,Pe("h","sel")),e=>s(i(e))))})),xe(this.element,(()=>{this.refresh()}))}getVertMargin_(e){return.25*e}valueToPosition(e,t){const{clientWidth:i,clientHeight:s}=this.element,n=this.getVertMargin_(s);return{x:u(e,0,1,0,i),y:u(t,0,1,s-n,n)}}positionToValue(e,t){const i=this.element.getBoundingClientRect(),s=i.width,n=i.height,r=this.getVertMargin_(n);return{x:v(u(e,0,s,0,1),0,1),y:u(t,n-r,r,0,1)}}refresh(){this.guideElem_.setAttributeNS(null,"d",[0,1].map((e=>{const t=this.valueToPosition(0,e),i=this.valueToPosition(1,e);return[`M ${t.x},${t.y}`,`L ${i.x},${i.y}`].join(" ")})).join(" "));const e=this.value_.rawValue,t=[];let i=0;for(;;){const s=this.valueToPosition(...e.curve(i));if(t.push([s.x,s.y].join(",")),i>=1)break;i=Math.min(i+.05,1)}this.lineElem_.setAttributeNS(null,"points",t.join(" "));const s=e.toObject();[0,1].forEach((e=>{const t=this.valueToPosition(e,e),i=this.valueToPosition(s[2*e],s[2*e+1]),n=this.vectorElems_[e];n.setAttributeNS(null,"x1",String(t.x)),n.setAttributeNS(null,"y1",String(t.y)),n.setAttributeNS(null,"x2",String(i.x)),n.setAttributeNS(null,"y2",String(i.y));const r=this.handleElems_[e];r.style.left=`${i.x}px`,r.style.top=`${i.y}px`}))}onValueChange_(){this.refresh()}}const Ee=b("cbzprv");class ke{constructor(e,t){this.stopped_=!0,this.startTime_=-1,this.requestId_=-1,this.onDispose_=this.onDispose_.bind(this),this.onTimer_=this.onTimer_.bind(this),this.onValueChange_=this.onValueChange_.bind(this),this.element=e.createElement("div"),this.element.classList.add(Ee()),t.viewProps.bindClassModifiers(this.element);const i=e.createElementNS(g,"svg");i.classList.add(Ee("g")),this.element.appendChild(i),this.svgElem_=i;const s=e.createElementNS(g,"path");s.classList.add(Ee("t")),this.svgElem_.appendChild(s),this.ticksElem_=s;const n=e.createElement("div");n.classList.add(Ee("m")),this.element.appendChild(n),this.markerElem_=n,this.value_=t.value,this.value_.emitter.on("change",this.onValueChange_),t.viewProps.handleDispose(this.onDispose_),xe(this.element,(()=>{this.refresh()}))}play(){this.stop(),this.updateMarker_(0),this.markerElem_.classList.add(Ee("m","a")),this.startTime_=(new Date).getTime()+400,this.stopped_=!1,this.requestId_=requestAnimationFrame(this.onTimer_)}stop(){cancelAnimationFrame(this.requestId_),this.stopped_=!0,this.markerElem_.classList.remove(Ee("m","a"))}onDispose_(){this.stop()}updateMarker_(e){const t=this.value_.rawValue.y(v(e,0,1));this.markerElem_.style.left=100*t+"%"}refresh(){const{clientWidth:e,clientHeight:t}=this.svgElem_,i=[],s=this.value_.rawValue;for(let n=0;n<24;n++){const r=u(n,0,23,0,1),o=u(s.y(r),0,1,0,e);i.push(`M ${o},0 v${t}`)}this.ticksElem_.setAttributeNS(null,"d",i.join(" "))}onTimer_(){if(null===this.startTime_)return;const e=(new Date).getTime()-this.startTime_,t=e/1e3;this.updateMarker_(t),e>1400&&this.stop(),this.stopped_||(this.requestId_=requestAnimationFrame(this.onTimer_))}onValueChange_(){this.refresh(),this.play()}}function ze(e,t,i,s){const n=i-e,r=s-t;return Math.sqrt(n*n+r*r)}class Ve{constructor(e,t){this.onKeyDown_=this.onKeyDown_.bind(this),this.onKeyUp_=this.onKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.keyScale_=t.keyScale,this.value=t.value,this.sel_=C(0),this.viewProps=t.viewProps,this.view=new ye(e,{selection:this.sel_,value:this.value,viewProps:this.viewProps}),this.view.element.addEventListener("keydown",this.onKeyDown_),this.view.element.addEventListener("keyup",this.onKeyUp_),this.prevView_=new ke(e,{value:this.value,viewProps:this.viewProps}),this.prevView_.element.addEventListener("mousedown",(e=>{e.stopImmediatePropagation(),e.preventDefault(),this.prevView_.play()})),this.view.previewElement.appendChild(this.prevView_.element);const i=new x(this.view.element);i.emitter.on("down",this.onPointerDown_),i.emitter.on("move",this.onPointerMove_),i.emitter.on("up",this.onPointerUp_)}refresh(){this.view.refresh(),this.prevView_.refresh(),this.prevView_.play()}updateValue_(e,t,i){const s=this.sel_.rawValue,n=this.value.rawValue.toObject(),r=this.view.positionToValue(e.x,e.y),o=t?function(e,t,i,s){const n=ze(e,t,i,s),r=Math.atan2(s-t,i-e),o=Math.round(r/(Math.PI/4))*Math.PI/4;return{x:e+Math.cos(o)*n,y:t+Math.sin(o)*n}}(s,s,r.x,r.y):r;n[2*s]=o.x,n[2*s+1]=o.y,this.value.setRawValue(new ue(...n),i)}onPointerDown_(e){const t=e.data;if(!t.point)return;const i=this.value.rawValue,s=this.view.valueToPosition(i.x1,i.y1),n=ze(t.point.x,t.point.y,s.x,s.y),r=this.view.valueToPosition(i.x2,i.y2),o=ze(t.point.x,t.point.y,r.x,r.y);this.sel_.rawValue=n<=o?0:1,this.updateValue_(t.point,e.shiftKey,{forceEmit:!1,last:!1})}onPointerMove_(e){const t=e.data;t.point&&this.updateValue_(t.point,e.shiftKey,{forceEmit:!1,last:!1})}onPointerUp_(e){const t=e.data;t.point&&this.updateValue_(t.point,e.shiftKey,{forceEmit:!0,last:!0})}onKeyDown_(e){P(e.key)&&e.preventDefault();const t=this.sel_.rawValue,i=this.value.rawValue.toObject(),s=this.keyScale_.rawValue;i[2*t]+=y(s,E(e)),i[2*t+1]+=y(s,k(e)),this.value.setRawValue(new ue(...i),{forceEmit:!1,last:!1})}onKeyUp_(e){P(e.key)&&e.preventDefault();const t=this.keyScale_.rawValue,i=y(t,E(e)),s=y(t,k(e));0===i&&0===s||this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}class Le{constructor(e,t){this.value=t.value,this.viewProps=t.viewProps,this.view=new Ce(e,{viewProps:this.viewProps}),this.gc_=new Ve(e,{keyScale:t.axis.textProps.value("keyScale"),value:this.value,viewProps:this.viewProps}),this.view.graphElement.appendChild(this.gc_.view.element);const i=Object.assign(Object.assign({},t.axis),{constraint:new z({max:1,min:0})}),s=Object.assign(Object.assign({},t.axis),{constraint:void 0});this.tc_=new V(e,{assembly:ve,axes:[i,s,i,s],parser:L,value:this.value,viewProps:this.viewProps}),this.view.textElement.appendChild(this.tc_.view.element)}get allFocusableElements(){return[this.gc_.view.element,...this.tc_.view.textViews.map((e=>e.inputElement))]}refresh(){this.gc_.refresh()}}class Te{constructor(e,t){this.onButtonBlur_=this.onButtonBlur_.bind(this),this.onButtonClick_=this.onButtonClick_.bind(this),this.onPopupChildBlur_=this.onPopupChildBlur_.bind(this),this.onPopupChildKeydown_=this.onPopupChildKeydown_.bind(this),this.value=t.value,this.viewProps=t.viewProps,this.foldable_=T.create(t.expanded),this.view=new ge(e,{foldable:this.foldable_,pickerLayout:t.pickerLayout,viewProps:this.viewProps}),this.view.buttonElement.addEventListener("blur",this.onButtonBlur_),this.view.buttonElement.addEventListener("click",this.onButtonClick_),this.tc_=new M(e,{parser:_e,props:r.fromObject({formatter:me}),value:this.value,viewProps:this.viewProps}),this.view.textElement.appendChild(this.tc_.view.element),this.popC_="popup"===t.pickerLayout?new j(e,{viewProps:this.viewProps}):null;const i=new Le(e,{axis:t.axis,value:this.value,viewProps:this.viewProps});i.allFocusableElements.forEach((e=>{e.addEventListener("blur",this.onPopupChildBlur_),e.addEventListener("keydown",this.onPopupChildKeydown_)})),this.pickerC_=i,this.popC_?(this.view.element.appendChild(this.popC_.view.element),this.popC_.view.element.appendChild(this.pickerC_.view.element),f(this.popC_.shows,(e=>{e&&i.refresh()})),O({primary:this.foldable_.value("expanded"),secondary:this.popC_.shows,forward:e=>e,backward:(e,t)=>t})):this.view.pickerElement&&(this.view.pickerElement.appendChild(this.pickerC_.view.element),S(this.foldable_,this.view.pickerElement))}onButtonBlur_(e){if(!this.popC_)return;const t=q(e.relatedTarget);t&&this.popC_.view.element.contains(t)||(this.popC_.shows.rawValue=!1)}onButtonClick_(){this.foldable_.set("expanded",!this.foldable_.get("expanded")),this.foldable_.get("expanded")&&this.pickerC_.allFocusableElements[0].focus()}onPopupChildBlur_(e){if(!this.popC_)return;const t=this.popC_.view.element,i=D(e);i&&t.contains(i)||i&&i===this.view.buttonElement&&!N(t.ownerDocument)||(this.popC_.shows.rawValue=!1)}onPopupChildKeydown_(e){this.popC_&&"Escape"===e.key&&(this.popC_.shows.rawValue=!1)}}const Me=p({id:"cubicbezier",type:"blade",accept(e){const t=h(e,(e=>({value:e.required.array(e.required.number),view:e.required.constant("cubicbezier"),expanded:e.optional.boolean,label:e.optional.string,picker:e.optional.custom((e=>"inline"===e||"popup"===e?e:void 0))})));return t?{params:t}:null},controller(e){var t,i;const s=new ue(...e.params.value),n=C(s,{constraint:new A({assembly:ve,components:[0,1,2,3].map((e=>e%2==0?new z({min:0,max:1}):void 0))}),equals:ue.equals}),o=new Te(e.document,{axis:{textProps:r.fromObject({keyScale:.1,pointerScale:.01,formatter:m(2)})},expanded:null!==(t=e.params.expanded)&&void 0!==t&&t,pickerLayout:null!==(i=e.params.picker)&&void 0!==i?i:"popup",value:n,viewProps:e.viewProps});return new B(e.document,{blade:e.blade,props:r.fromObject({label:e.params.label}),value:n,valueController:o})},api:e=>e.controller instanceof B&&e.controller.valueController instanceof Te?new he(e.controller):null});class je extends t{get fps(){return this.controller.valueController.fps}get max(){return this.controller.valueController.props.get("max")}set max(e){this.controller.valueController.props.set("max",e)}get min(){return this.controller.valueController.props.get("min")}set min(e){this.controller.valueController.props.set("min",e)}begin(){this.controller.valueController.begin()}end(){this.controller.valueController.end()}on(t,i){const s=i.bind(this);return this.controller.valueController.ticker.emitter.on(t,(()=>{s(new e(this))})),this}}class Oe{constructor(){this.start_=null,this.duration_=0,this.fps_=null,this.frameCount_=0,this.timestamps_=[]}get duration(){return this.duration_}get fps(){return this.fps_}begin(e){this.start_=e.getTime()}calculateFps_(e){if(0===this.timestamps_.length)return null;const t=this.timestamps_[0];return 1e3*(this.frameCount_-t.frameCount)/(e-t.time)}compactTimestamps_(){if(this.timestamps_.length<=20)return;const e=this.timestamps_.length-20;this.timestamps_.splice(0,e);const t=this.timestamps_[0].frameCount;this.timestamps_.forEach((e=>{e.frameCount-=t})),this.frameCount_-=t}end(e){if(null===this.start_)return;const t=e.getTime();this.duration_=t-this.start_,this.start_=null,this.fps_=this.calculateFps_(t),this.timestamps_.push({frameCount:this.frameCount_,time:t}),++this.frameCount_,this.compactTimestamps_()}}const Se=b("fps");class qe{constructor(e,t){this.element=e.createElement("div"),this.element.classList.add(Se()),t.viewProps.bindClassModifiers(this.element),this.graphElement=e.createElement("div"),this.graphElement.classList.add(Se("g")),this.element.appendChild(this.graphElement);const i=e.createElement("div");i.classList.add(Se("l")),this.element.appendChild(i);const s=e.createElement("span");s.classList.add(Se("v")),s.textContent="--",i.appendChild(s),this.valueElement=s;const n=e.createElement("span");n.classList.add(Se("u")),n.textContent="FPS",i.appendChild(n)}}class De{constructor(e,t){this.stopwatch_=new Oe,this.onTick_=this.onTick_.bind(this),this.ticker=t.ticker,this.ticker.emitter.on("tick",this.onTick_),this.props=t.props,this.value_=t.value,this.viewProps=t.viewProps,this.view=new qe(e,{viewProps:this.viewProps}),this.graphC_=new I(e,{formatter:m(0),props:this.props,rows:t.rows,value:this.value_,viewProps:this.viewProps}),this.view.graphElement.appendChild(this.graphC_.view.element),this.viewProps.handleDispose((()=>{this.graphC_.viewProps.set("disposed",!0),this.ticker.dispose()}))}get fps(){return this.stopwatch_.fps}begin(){this.stopwatch_.begin(new Date)}end(){this.stopwatch_.end(new Date)}onTick_(){const e=this.fps;if(null!==e){const t=this.value_.rawValue;this.value_.rawValue=K(t,e),this.view.valueElement.textContent=e.toFixed(0)}}}class Ne extends l{constructor(e,t){const i=t.valueController,s=new a(e,{blade:t.blade,props:t.labelProps,valueController:i});super({blade:t.blade,view:s.view,viewProps:i.viewProps}),this.valueController=i,this.labelController=s}}function Be(e,t){return 0===t?new F:new U(e,null!=t?t:R.monitor.defaultInterval)}const Ae=p({id:"fpsgraph",type:"blade",accept(e){const t=h(e,(e=>({view:e.required.constant("fpsgraph"),interval:e.optional.number,label:e.optional.string,rows:e.optional.number,max:e.optional.number,min:e.optional.number})));return t?{params:t}:null},controller(e){var t,i,s,n;const o=null!==(t=e.params.interval)&&void 0!==t?t:500;return new Ne(e.document,{blade:e.blade,labelProps:r.fromObject({label:e.params.label}),valueController:new De(e.document,{props:r.fromObject({max:null!==(i=e.params.max)&&void 0!==i?i:90,min:null!==(s=e.params.min)&&void 0!==s?s:0}),rows:null!==(n=e.params.rows)&&void 0!==n?n:2,ticker:Be(e.document,o),value:C($(80)),viewProps:e.viewProps})})},api:e=>e.controller instanceof Ne?new je(e.controller):null});class Ie{constructor(e,t){this.min=e,this.max=t}static isObject(e){if("object"!=typeof e||null===e)return!1;const t=e.min,i=e.max;return"number"==typeof t&&"number"==typeof i}static equals(e,t){return e.min===t.min&&e.max===t.max}get length(){return this.max-this.min}toObject(){return{min:this.min,max:this.max}}}const Ke={fromComponents:e=>new Ie(e[0],e[1]),toComponents:e=>[e.min,e.max]};class $e{constructor(e){this.edge=e}constrain(e){var t,i,s,n,r,o,l,a;if(e.min<=e.max)return new Ie(null!==(i=null===(t=this.edge)||void 0===t?void 0:t.constrain(e.min))&&void 0!==i?i:e.min,null!==(n=null===(s=this.edge)||void 0===s?void 0:s.constrain(e.max))&&void 0!==n?n:e.max);const p=(e.min+e.max)/2;return new Ie(null!==(o=null===(r=this.edge)||void 0===r?void 0:r.constrain(p))&&void 0!==o?o:p,null!==(a=null===(l=this.edge)||void 0===l?void 0:l.constrain(p))&&void 0!==a?a:p)}}const Fe=b("rsltxt");class Ue{constructor(e,t){this.sliderView_=t.sliderView,this.textView_=t.textView,this.element=e.createElement("div"),this.element.classList.add(Fe());const i=e.createElement("div");i.classList.add(Fe("s")),i.appendChild(this.sliderView_.element),this.element.appendChild(i);const s=e.createElement("div");s.classList.add(Fe("t")),s.appendChild(this.textView_.element),this.element.appendChild(s)}}const Re=b("rsl");class He{constructor(e,t){this.onSliderPropsChange_=this.onSliderPropsChange_.bind(this),this.onValueChange_=this.onValueChange_.bind(this),this.sliderProps_=t.sliderProps,this.sliderProps_.emitter.on("change",this.onSliderPropsChange_),this.element=e.createElement("div"),this.element.classList.add(Re()),t.viewProps.bindClassModifiers(this.element),this.value_=t.value,this.value_.emitter.on("change",this.onValueChange_);const i=e.createElement("div");i.classList.add(Re("t")),this.element.appendChild(i),this.trackElement=i;const s=e.createElement("div");s.classList.add(Re("b")),i.appendChild(s),this.barElement=s;const n=["min","max"].map((t=>{const s=e.createElement("div");return s.classList.add(Re("k"),Re("k",t)),i.appendChild(s),s}));this.knobElements=[n[0],n[1]],this.update_()}valueToX_(e){const t=this.sliderProps_.get("min"),i=this.sliderProps_.get("max");return 100*v(u(e,t,i,0,1),0,1)}update_(){const e=this.value_.rawValue;0===e.length?this.element.classList.add(Re(void 0,"zero")):this.element.classList.remove(Re(void 0,"zero"));const t=[this.valueToX_(e.min),this.valueToX_(e.max)];this.barElement.style.left=`${t[0]}%`,this.barElement.style.right=100-t[1]+"%",this.knobElements.forEach(((e,i)=>{e.style.left=`${t[i]}%`}))}onSliderPropsChange_(){this.update_()}onValueChange_(){this.update_()}}class Xe{constructor(e,t){this.grabbing_=null,this.grabOffset_=0,this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.sliderProps=t.sliderProps,this.viewProps=t.viewProps,this.value=t.value,this.view=new He(e,{sliderProps:this.sliderProps,value:this.value,viewProps:t.viewProps});const i=new x(this.view.trackElement);i.emitter.on("down",this.onPointerDown_),i.emitter.on("move",this.onPointerMove_),i.emitter.on("up",this.onPointerUp_)}ofs_(){return"min"===this.grabbing_?this.view.knobElements[0].getBoundingClientRect().width/2:"max"===this.grabbing_?-this.view.knobElements[1].getBoundingClientRect().width/2:0}valueFromData_(e){if(!e.point)return null;const t=(e.point.x+this.ofs_())/e.bounds.width,i=this.sliderProps.get("min"),s=this.sliderProps.get("max");return u(t,0,1,i,s)}onPointerDown_(e){if(!e.data.point)return;const t=e.data.point.x/e.data.bounds.width,i=this.value.rawValue,s=this.sliderProps.get("min"),n=this.sliderProps.get("max"),r=u(i.min,s,n,0,1),o=u(i.max,s,n,0,1);Math.abs(o-t)<=.025?this.grabbing_="max":Math.abs(r-t)<=.025?this.grabbing_="min":t>=r&&t<=o?(this.grabbing_="length",this.grabOffset_=u(t-r,0,1,0,n-s)):t<r?(this.grabbing_="min",this.onPointerMove_(e)):t>o&&(this.grabbing_="max",this.onPointerMove_(e))}applyPointToValue_(e,t){const i=this.valueFromData_(e);if(null===i)return;const s=this.sliderProps.get("min"),n=this.sliderProps.get("max");if("min"===this.grabbing_)this.value.setRawValue(new Ie(i,this.value.rawValue.max),t);else if("max"===this.grabbing_)this.value.setRawValue(new Ie(this.value.rawValue.min,i),t);else if("length"===this.grabbing_){const e=this.value.rawValue.length;let r=i-this.grabOffset_,o=r+e;r<s?(r=s,o=s+e):o>n&&(r=n-e,o=n),this.value.setRawValue(new Ie(r,o),t)}}onPointerMove_(e){this.applyPointToValue_(e.data,{forceEmit:!1,last:!1})}onPointerUp_(e){this.applyPointToValue_(e.data,{forceEmit:!0,last:!0}),this.grabbing_=null}}class We{constructor(e,t){this.value=t.value,this.viewProps=t.viewProps,this.sc_=new Xe(e,t);const i={constraint:t.constraint,textProps:t.textProps};this.tc_=new V(e,{assembly:Ke,axes:[i,i],parser:t.parser,value:this.value,viewProps:t.viewProps}),this.view=new Ue(e,{sliderView:this.sc_.view,textView:this.tc_.view})}get textController(){return this.tc_}}function Ge(e){return Ie.isObject(e)?new Ie(e.min,e.max):new Ie(0,0)}function Je(e,t){e.writeProperty("max",t.max),e.writeProperty("min",t.min)}const Qe=p({id:"input-interval",type:"input",accept:(e,t)=>{if(!Ie.isObject(e))return null;const i=h(t,(e=>Object.assign(Object.assign({},J(e)),{readonly:e.optional.constant(!1)})));return i?{initialValue:new Ie(e.min,e.max),params:i}:null},binding:{reader:e=>Ge,constraint:e=>function(e){const t=[],i=Q(e);i&&t.push(i);const s=Y(e);return s&&t.push(s),new $e(new Z(t))}(e.params),equals:Ie.equals,writer:e=>Je},controller(e){const t=e.value,i=e.constraint;if(!(i instanceof $e))throw H.shouldNeverHappen();const s=(t.rawValue.min+t.rawValue.max)/2,n=r.fromObject(X(e.params,s)),o=i.edge&&W(i.edge,G);if(o)return new We(e.document,{constraint:i.edge,parser:L,sliderProps:new r({keyScale:n.value("keyScale"),max:o.values.value("max"),min:o.values.value("min")}),textProps:n,value:t,viewProps:e.viewProps});const l={constraint:i.edge,textProps:n};return new V(e.document,{assembly:Ke,axes:[l,l],parser:L,value:t,viewProps:e.viewProps})}});class Ye{constructor(e){this.controller_=e}get disabled(){return this.controller_.viewProps.get("disabled")}set disabled(e){this.controller_.viewProps.set("disabled",e)}get title(){var e;return null!==(e=this.controller_.props.get("title"))&&void 0!==e?e:""}set title(e){this.controller_.props.set("title",e)}}class Ze extends c{constructor(e,t,i,s,n){super(e,s,n),this.cell=t,this.index=i}}class et extends t{constructor(e){super(e),this.cellToApiMap_=new Map;this.controller.valueController.cellControllers.forEach((e=>{const t=new Ye(e);this.cellToApiMap_.set(e,t)}))}get value(){return this.controller.value}cell(e,t){const i=this.controller.valueController,s=i.cellControllers[t*i.size[0]+e];return this.cellToApiMap_.get(s)}on(e,t){const i=t.bind(this);this.controller.value.emitter.on(e,(e=>{const t=this.controller.valueController,s=t.findCellByValue(e.rawValue);if(!s)return;const n=this.cellToApiMap_.get(s);if(!n)return;const r=t.cellControllers.indexOf(s);i(new Ze(this,n,[r%t.size[0],Math.floor(r/t.size[0])],e.rawValue))}))}}const tt=b("rad");class it{constructor(e,t){this.element=e.createElement("div"),this.element.classList.add(tt()),t.viewProps.bindClassModifiers(this.element);const i=e.createElement("label");i.classList.add(tt("l")),this.element.appendChild(i);const s=e.createElement("input");s.classList.add(tt("i")),s.name=t.name,s.type="radio",t.viewProps.bindDisabled(s),i.appendChild(s),this.inputElement=s;const n=e.createElement("div");n.classList.add(tt("b")),i.appendChild(n);const r=e.createElement("div");r.classList.add(tt("t")),n.appendChild(r),_(t.props,"title",(e=>{r.textContent=e}))}}class st{constructor(e,t){this.props=t.props,this.viewProps=t.viewProps,this.view=new it(e,{name:t.name,props:this.props,viewProps:this.viewProps})}}class nt{constructor(e,t){this.cellCs_=[],this.cellValues_=[],this.onCellInputChange_=this.onCellInputChange_.bind(this),this.size=t.size;const[i,s]=this.size;for(let o=0;o<s;o++)for(let s=0;s<i;s++){const i=new st(e,{name:t.groupName,props:r.fromObject(Object.assign({},t.cellConfig(s,o))),viewProps:n.create()});this.cellCs_.push(i),this.cellValues_.push(t.cellConfig(s,o).value)}this.value=t.value,f(this.value,(e=>{const t=this.findCellByValue(e);t&&(t.view.inputElement.checked=!0)})),this.viewProps=n.create(),this.view=new o(e,{viewProps:this.viewProps,viewName:"radgrid"}),this.view.element.style.gridTemplateColumns=`repeat(${i}, 1fr)`,this.cellCs_.forEach((e=>{e.view.inputElement.addEventListener("change",this.onCellInputChange_),this.view.element.appendChild(e.view.element)}))}get cellControllers(){return this.cellCs_}findCellByValue(e){const t=this.cellValues_.findIndex((t=>t===e));return t<0?null:this.cellCs_[t]}onCellInputChange_(e){const t=e.currentTarget,i=this.cellCs_.findIndex((e=>e.view.inputElement===t));i<0||(this.value.rawValue=this.cellValues_[i])}}const rt=p({id:"radiogrid",type:"blade",accept(e){const t=h(e,(e=>({cells:e.required.function,groupName:e.required.string,size:e.required.array(e.required.number),value:e.required.raw,view:e.required.constant("radiogrid"),label:e.optional.string})));return t?{params:t}:null},controller(e){const t=C(e.params.value);return new B(e.document,{blade:e.blade,props:r.fromObject({label:e.params.label}),value:t,valueController:new nt(e.document,{groupName:e.params.groupName,cellConfig:e.params.cells,size:e.params.size,value:t})})},api:e=>e.controller instanceof B&&e.controller.valueController instanceof nt?new et(e.controller):null});function ot(e){return p({id:"input-radiogrid",type:"input",accept(t,i){if(!e.isType(t))return null;const s=h(i,(e=>({cells:e.required.function,groupName:e.required.string,size:e.required.array(e.required.number),view:e.required.constant("radiogrid")})));return s?{initialValue:t,params:s}:null},binding:e.binding,controller:e=>new nt(e.document,{cellConfig:e.params.cells,groupName:e.params.groupName,size:e.params.size,value:e.value})})}const lt=ot({isType:e=>"number"==typeof e,binding:{reader:e=>ie,writer:e=>ee}}),at=ot({isType:e=>"string"==typeof e,binding:{reader:e=>se,writer:e=>ee}}),pt="essentials",ht='.tp-cbzgv,.tp-radv_b,.tp-rslv_k,.tp-cbzv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:rgba(0,0,0,0);border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0}.tp-radv_b,.tp-rslv_k,.tp-cbzv_b{background-color:var(--btn-bg);border-radius:var(--bld-br);color:var(--btn-fg);cursor:pointer;display:block;font-weight:bold;height:var(--cnt-usz);line-height:var(--cnt-usz);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tp-radv_b:hover,.tp-rslv_k:hover,.tp-cbzv_b:hover{background-color:var(--btn-bg-h)}.tp-radv_b:focus,.tp-rslv_k:focus,.tp-cbzv_b:focus{background-color:var(--btn-bg-f)}.tp-radv_b:active,.tp-rslv_k:active,.tp-cbzv_b:active{background-color:var(--btn-bg-a)}.tp-radv_b:disabled,.tp-rslv_k:disabled,.tp-cbzv_b:disabled{opacity:.5}.tp-cbzgv{background-color:var(--in-bg);border-radius:var(--bld-br);box-sizing:border-box;color:var(--in-fg);font-family:inherit;height:var(--cnt-usz);line-height:var(--cnt-usz);min-width:0;width:100%}.tp-cbzgv:hover{background-color:var(--in-bg-h)}.tp-cbzgv:focus{background-color:var(--in-bg-f)}.tp-cbzgv:active{background-color:var(--in-bg-a)}.tp-cbzgv:disabled{opacity:.5}.tp-btngridv{border-radius:var(--bld-br);display:grid;overflow:hidden;gap:2px}.tp-btngridv.tp-v-disabled{opacity:.5}.tp-btngridv .tp-btnv_b:disabled{opacity:1}.tp-btngridv .tp-btnv_b:disabled .tp-btnv_t{opacity:.5}.tp-btngridv .tp-btnv_b{border-radius:0}.tp-cbzv{position:relative}.tp-cbzv_h{display:flex}.tp-cbzv_b{margin-right:4px;position:relative;width:var(--cnt-usz)}.tp-cbzv_b svg{display:block;height:16px;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%;width:16px}.tp-cbzv_b svg path{stroke:var(--bs-bg);stroke-width:2}.tp-cbzv_t{flex:1}.tp-cbzv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-cbzv.tp-cbzv-expanded .tp-cbzv_p{margin-top:var(--cnt-usp);opacity:1}.tp-cbzv.tp-cbzv-cpl .tp-cbzv_p{overflow:visible}.tp-cbzv .tp-popv{left:calc(-1*var(--cnt-hp));position:absolute;right:calc(-1*var(--cnt-hp));top:var(--cnt-usz)}.tp-cbzpv_t{margin-top:var(--cnt-usp)}.tp-cbzgv{height:auto;overflow:hidden;position:relative}.tp-cbzgv.tp-v-disabled{opacity:.5}.tp-cbzgv_p{left:16px;position:absolute;right:16px;top:0}.tp-cbzgv_g{cursor:pointer;display:block;height:calc(var(--cnt-usz)*5);width:100%}.tp-cbzgv_u{opacity:.1;stroke:var(--in-fg);stroke-dasharray:1}.tp-cbzgv_l{fill:rgba(0,0,0,0);stroke:var(--in-fg)}.tp-cbzgv_v{opacity:.5;stroke:var(--in-fg);stroke-dasharray:1}.tp-cbzgv_h{border:var(--in-fg) solid 1px;border-radius:50%;box-sizing:border-box;height:4px;margin-left:-2px;margin-top:-2px;pointer-events:none;position:absolute;width:4px}.tp-cbzgv:focus .tp-cbzgv_h-sel{background-color:var(--in-fg);border-width:0}.tp-cbzprvv{cursor:pointer;height:4px;padding:4px 0;position:relative}.tp-cbzprvv_g{display:block;height:100%;overflow:visible;width:100%}.tp-cbzprvv_t{opacity:.5;stroke:var(--mo-fg)}.tp-cbzprvv_m{background-color:var(--mo-fg);border-radius:50%;height:4px;margin-left:-2px;margin-top:-2px;opacity:0;position:absolute;top:50%;transition:opacity .2s ease-out;width:4px}.tp-cbzprvv_m.tp-cbzprvv_m-a{opacity:1}.tp-fpsv{position:relative}.tp-fpsv_l{bottom:4px;color:var(--mo-fg);line-height:1;right:4px;pointer-events:none;position:absolute}.tp-fpsv_u{margin-left:.2em;opacity:.7}.tp-rslv{cursor:pointer;padding-left:8px;padding-right:8px}.tp-rslv.tp-v-disabled{opacity:.5}.tp-rslv_t{height:calc(var(--cnt-usz));position:relative}.tp-rslv_t::before{background-color:var(--in-bg);border-radius:1px;content:"";height:2px;margin-top:-1px;position:absolute;top:50%;left:-4px;right:-4px}.tp-rslv_b{bottom:0;top:0;position:absolute}.tp-rslv_b::before{background-color:var(--in-fg);content:"";height:2px;margin-top:-1px;position:absolute;top:50%;left:0;right:0}.tp-rslv_k{height:calc(var(--cnt-usz) - 8px);margin-top:calc((var(--cnt-usz) - 8px)/-2);position:absolute;top:50%;width:8px}.tp-rslv_k.tp-rslv_k-min{margin-left:-8px}.tp-rslv_k.tp-rslv_k-max{margin-left:0}.tp-rslv.tp-rslv-zero .tp-rslv_k.tp-rslv_k-min{border-bottom-right-radius:0;border-top-right-radius:0}.tp-rslv.tp-rslv-zero .tp-rslv_k.tp-rslv_k-max{border-bottom-left-radius:0;border-top-left-radius:0}.tp-rsltxtv{display:flex}.tp-rsltxtv_s{flex:1}.tp-rsltxtv_t{flex:1;margin-left:4px}.tp-radv_l{display:block;position:relative}.tp-radv_i{left:0;opacity:0;position:absolute;top:0}.tp-radv_b{opacity:.5}.tp-radv_i:hover+.tp-radv_b{background-color:var(--btn-bg-h)}.tp-radv_i:focus+.tp-radv_b{background-color:var(--btn-bg-f)}.tp-radv_i:active+.tp-radv_b{background-color:var(--btn-bg-a)}.tp-radv_i:checked+.tp-radv_b{opacity:1}.tp-radv_t{bottom:0;color:inherit;left:0;overflow:hidden;position:absolute;right:0;text-align:center;text-overflow:ellipsis;top:0}.tp-radv_i:disabled+.tp-radv_b>.tp-radv_t{opacity:.5}.tp-radgridv{border-radius:var(--bld-br);display:grid;overflow:hidden;gap:2px}.tp-radgridv.tp-v-disabled{opacity:.5}.tp-radgridv .tp-radv_b{border-radius:0}',ct=[pe,Me,Ae,Qe,rt,ot({isType:e=>"boolean"==typeof e,binding:{reader:e=>te,writer:e=>ee}}),lt,at];export{ne as ButtonCellApi,oe as ButtonGridApi,le as ButtonGridController,ue as CubicBezier,he as CubicBezierApi,ve as CubicBezierAssembly,Te as CubicBezierController,Ve as CubicBezierGraphController,ye as CubicBezierGraphView,Le as CubicBezierPickerController,Ce as CubicBezierPickerView,ke as CubicBezierPreviewView,ge as CubicBezierView,je as FpsGraphBladeApi,De as FpsGraphController,qe as FpsView,Oe as Fpswatch,Ie as Interval,Ke as IntervalAssembly,$e as IntervalConstraint,Ye as RadioCellApi,st as RadioController,et as RadioGridApi,nt as RadioGridController,it as RadioView,Xe as RangeSliderController,We as RangeSliderTextController,Ue as RangeSliderTextView,He as RangeSliderView,Ze as TpRadioGridChangeEvent,ht as css,pt as id,ct as plugins};