├── .gitignore ├── README.md ├── docs ├── bundle.js ├── demo.js ├── index.html ├── presets.js └── webpack.config.js ├── jsconfig.json ├── package-lock.json ├── package.json └── src └── wafxr.js /.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | node_modules 3 | 4 | 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # wafxr 3 | 4 | > [Live demo](https://fenomas.github.io/wafxr/) 5 | 6 | `wafxr` is a sound effect generator in the tradition of 7 | [as3fxr](http://www.superflashbros.net/as3sfxr/), 8 | [bfxr](http://www.bfxr.net/), 9 | [jfxr](http://jfxr.frozenfractal.com/), and others. 10 | But where such tools normally generate static files, 11 | this one plays sounds dynamically via Web Audio. 12 | 13 | 14 | Supports oscillators, FM synth, tremolo/vibrato, and various other 15 | filters and effects. If you need more complicated sounds 16 | (and you're comfortable building audio graphs), 17 | check out [`wasgen`](https://github.com/fenomas/wasgen) instead. 18 | 19 | 20 | ## Usage 21 | 22 | Open the [demo](https://fenomas.github.io/wafxr/) and 23 | twiddle the UI until you have a sound you like. 24 | Then copy the `playback code` into your project, 25 | add [wasgen](https://github.com/fenomas/wasgen) as a dependency, 26 | and off you go. 27 | 28 | ```shell 29 | npm install --save wasgen 30 | ``` 31 | 32 | ```js 33 | import Gen from 'wasgen' 34 | var gen = new Gen() 35 | gen.play([ 36 | /* .. sound program from the demo page .. */ 37 | ], 440, 1, gen.now(), gen.now() + 0.1) 38 | ``` 39 | 40 |
41 | 42 | ## Note on mobile support 43 | 44 | Dynamic web audio is generally well-supported on mobile, 45 | but it's a bit CPU intensive so with heavy sounds you may hear glitches. 46 | 47 | 48 | ---- 49 | 50 | ## By 51 | 52 | Made with 🍺 by [andy](https://fenomas.com/). 53 | 54 | License is ISC. 55 | -------------------------------------------------------------------------------- /docs/bundle.js: -------------------------------------------------------------------------------- 1 | (()=>{var t={562:t=>{function e(t,e,n){for(var r=0;r1)for(var n=1;n0?t:e[0].value},t}();e.ListConstraint=r},"./src/main/js/constraint/point-2d.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Point2dConstraint=void 0;var r=n("./src/main/js/model/point-2d.ts"),i=function(){function t(t){this.xConstraint=t.x,this.yConstraint=t.y}return t.prototype.constrain=function(t){return new r.Point2d(this.xConstraint?this.xConstraint.constrain(t.x):t.x,this.yConstraint?this.yConstraint.constrain(t.y):t.y)},t}();e.Point2dConstraint=i},"./src/main/js/constraint/range.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RangeConstraint=void 0;var r=n("./src/main/js/misc/type-util.ts"),i=function(){function t(t){this.maxValue=t.max,this.minValue=t.min}return t.prototype.constrain=function(t){var e=t;return r.TypeUtil.isEmpty(this.minValue)||(e=Math.max(e,this.minValue)),r.TypeUtil.isEmpty(this.maxValue)||(e=Math.min(e,this.maxValue)),e},t}();e.RangeConstraint=i},"./src/main/js/constraint/step.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StepConstraint=void 0;var r=function(){function t(t){this.step=t.step}return t.prototype.constrain=function(t){return(t<0?-Math.round(-t/this.step):Math.round(t/this.step))*this.step},t}();e.StepConstraint=r},"./src/main/js/constraint/util.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ConstraintUtil=void 0;var r=n("./src/main/js/constraint/composite.ts");e.ConstraintUtil={findConstraint:function(t,e){if(t instanceof e)return t;if(t instanceof r.CompositeConstraint){var n=t.constraints.reduce((function(t,n){return t||(n instanceof e?n:null)}),null);if(n)return n}return null}}},"./src/main/js/controller/binding-creators/boolean-input.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/binding/input.ts"),i=n("./src/main/js/constraint/composite.ts"),o=n("./src/main/js/constraint/list.ts"),s=n("./src/main/js/constraint/util.ts"),a=n("./src/main/js/converter/boolean.ts"),l=n("./src/main/js/model/disposable.ts"),u=n("./src/main/js/model/input-value.ts"),c=n("./src/main/js/controller/input-binding.ts"),p=n("./src/main/js/controller/input/checkbox.ts"),d=n("./src/main/js/controller/input/list.ts"),m=n("./src/main/js/controller/ui-util.ts");function f(t,e){var n=e.constraint;return n&&s.ConstraintUtil.findConstraint(n,o.ListConstraint)?new d.ListInputController(t,{disposable:new l.Disposable,stringifyValue:a.toString,value:e}):new p.CheckboxInputController(t,{disposable:new l.Disposable,value:e})}e.create=function(t,e,n){if("boolean"!=typeof e.read())return null;var s=new u.InputValue(!1,function(t){var e=[];return t.options&&e.push(new o.ListConstraint({options:m.normalizeInputParamsOptions(t.options,a.fromMixed)})),new i.CompositeConstraint({constraints:e})}(n)),p=new r.InputBinding({reader:a.fromMixed,target:e,value:s,writer:function(t){return t}});return new c.InputBindingController(t,{binding:p,controller:f(t,s),disposable:new l.Disposable,label:n.label||e.key})}},"./src/main/js/controller/binding-creators/boolean-monitor.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/binding/monitor.ts"),i=n("./src/main/js/converter/boolean.ts"),o=n("./src/main/js/formatter/boolean.ts"),s=n("./src/main/js/misc/constants.ts"),a=n("./src/main/js/misc/ticker/interval.ts"),l=n("./src/main/js/misc/type-util.ts"),u=n("./src/main/js/model/disposable.ts"),c=n("./src/main/js/model/monitor-value.ts"),p=n("./src/main/js/controller/monitor-binding.ts"),d=n("./src/main/js/controller/monitor/multi-log.ts"),m=n("./src/main/js/controller/monitor/single-log.ts");e.create=function(t,e,n){if("boolean"!=typeof e.read())return null;var f=new c.MonitorValue(l.TypeUtil.getOrDefault(n.count,1)),h=1===f.totalCount?new m.SingleLogMonitorController(t,{disposable:new u.Disposable,formatter:new o.BooleanFormatter,value:f}):new d.MultiLogMonitorController(t,{disposable:new u.Disposable,formatter:new o.BooleanFormatter,value:f}),v=new a.IntervalTicker(t,l.TypeUtil.getOrDefault(n.interval,s.Constants.monitorDefaultInterval));return new p.MonitorBindingController(t,{binding:new r.MonitorBinding({reader:i.fromMixed,target:e,ticker:v,value:f}),controller:h,disposable:h.disposable,label:n.label||e.key})}},"./src/main/js/controller/binding-creators/color-input.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createWithObject=e.createWithNumber=e.createWithString=void 0;var r=n("./src/main/js/binding/input.ts"),i=n("./src/main/js/converter/color.ts"),o=n("./src/main/js/formatter/color.ts"),s=n("./src/main/js/model/color.ts"),a=n("./src/main/js/model/disposable.ts"),l=n("./src/main/js/model/input-value.ts"),u=n("./src/main/js/parser/number-color.ts"),c=n("./src/main/js/parser/string-color.ts"),p=n("./src/main/js/controller/input-binding.ts"),d=n("./src/main/js/controller/input/color-swatch-text.ts");e.createWithString=function(t,e,n){var s=e.read();if("string"!=typeof s)return null;var u=c.getNotation(s);if(!u)return null;var m=i.fromMixed,f=m(s),h=new a.Disposable,v=new l.InputValue(f),b=i.getStringifier(u);return new p.InputBindingController(t,{disposable:h,binding:new r.InputBinding({reader:m,target:e,value:v,writer:b}),controller:new d.ColorSwatchTextInputController(t,{disposable:h,formatter:new o.ColorFormatter(b),parser:c.CompositeParser,value:v}),label:n.label||e.key})},e.createWithNumber=function(t,e,n){var s=e.read();if("number"!=typeof s)return null;if(!("input"in n))return null;if("color"!==n.input&&"color.rgb"!==n.input)return null;var m=u.NumberColorParser(s);if(!m)return null;var f=new l.InputValue(m),h=new a.Disposable;return new p.InputBindingController(t,{binding:new r.InputBinding({reader:i.fromMixed,target:e,value:f,writer:i.toNumber}),controller:new d.ColorSwatchTextInputController(t,{disposable:h,formatter:new o.ColorFormatter(i.toHexRgbString),parser:c.CompositeParser,value:f}),disposable:h,label:n.label||e.key})},e.createWithObject=function(t,e,n){var u=e.read();if(!s.Color.isRgbColorObject(u))return null;var m=s.Color.fromRgbObject(u),f=new a.Disposable,h=new l.InputValue(m);return new p.InputBindingController(t,{binding:new r.InputBinding({reader:i.fromMixed,target:e,value:h,writer:s.Color.toRgbObject}),controller:new d.ColorSwatchTextInputController(t,{disposable:f,formatter:new o.ColorFormatter(i.toHexRgbString),parser:c.CompositeParser,value:h}),disposable:f,label:n.label||e.key})}},"./src/main/js/controller/binding-creators/input.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/misc/pane-error.ts"),i=n("./src/main/js/misc/type-util.ts"),o=n("./src/main/js/controller/binding-creators/boolean-input.ts"),s=n("./src/main/js/controller/binding-creators/color-input.ts"),a=n("./src/main/js/controller/binding-creators/number-input.ts"),l=n("./src/main/js/controller/binding-creators/point-2d-input.ts"),u=n("./src/main/js/controller/binding-creators/string-input.ts");e.create=function(t,e,n){var c=e.read();if(i.TypeUtil.isEmpty(c))throw new r.PaneError({context:{key:e.key},type:"emptyvalue"});var p=[o.create,s.createWithNumber,s.createWithObject,s.createWithString,a.create,u.create,l.create].reduce((function(r,i){return r||i(t,e,n)}),null);if(p)return p;throw new r.PaneError({context:{key:e.key},type:"nomatchingcontroller"})}},"./src/main/js/controller/binding-creators/monitor.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/misc/pane-error.ts"),i=n("./src/main/js/misc/type-util.ts"),o=n("./src/main/js/controller/binding-creators/boolean-monitor.ts"),s=n("./src/main/js/controller/binding-creators/number-monitor.ts"),a=n("./src/main/js/controller/binding-creators/string-monitor.ts");e.create=function(t,e,n){var l=e.read();if(i.TypeUtil.isEmpty(l))throw new r.PaneError({context:{key:e.key},type:"emptyvalue"});var u=[s.create,a.create,o.create].reduce((function(r,i){return r||i(t,e,n)}),null);if(u)return u;throw new r.PaneError({context:{key:e.key},type:"nomatchingcontroller"})}},"./src/main/js/controller/binding-creators/number-input.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/binding/input.ts"),i=n("./src/main/js/constraint/composite.ts"),o=n("./src/main/js/constraint/list.ts"),s=n("./src/main/js/constraint/range.ts"),a=n("./src/main/js/constraint/step.ts"),l=n("./src/main/js/constraint/util.ts"),u=n("./src/main/js/converter/number.ts"),c=n("./src/main/js/formatter/number.ts"),p=n("./src/main/js/misc/type-util.ts"),d=n("./src/main/js/model/disposable.ts"),m=n("./src/main/js/model/input-value.ts"),f=n("./src/main/js/parser/string-number.ts"),h=n("./src/main/js/controller/input-binding.ts"),v=n("./src/main/js/controller/input/list.ts"),b=n("./src/main/js/controller/input/number-text.ts"),g=n("./src/main/js/controller/input/slider-text.ts"),_=n("./src/main/js/controller/ui-util.ts");e.create=function(t,e,n){if("number"!=typeof e.read())return null;var y=new m.InputValue(0,function(t){var e=[];return"step"in t&&!p.TypeUtil.isEmpty(t.step)&&e.push(new a.StepConstraint({step:t.step})),("max"in t&&!p.TypeUtil.isEmpty(t.max)||"min"in t&&!p.TypeUtil.isEmpty(t.min))&&e.push(new s.RangeConstraint({max:t.max,min:t.min})),t.options&&e.push(new o.ListConstraint({options:_.normalizeInputParamsOptions(t.options,u.fromMixed)})),new i.CompositeConstraint({constraints:e})}(n)),w=new r.InputBinding({reader:u.fromMixed,target:e,value:y,writer:function(t){return t}}),x=function(t,e){var n=e.constraint;return n&&l.ConstraintUtil.findConstraint(n,o.ListConstraint)?new v.ListInputController(t,{disposable:new d.Disposable,stringifyValue:u.toString,value:e}):n&&l.ConstraintUtil.findConstraint(n,s.RangeConstraint)?new g.SliderTextInputController(t,{disposable:new d.Disposable,formatter:new c.NumberFormatter(_.getSuitableDecimalDigits(e.constraint,e.rawValue)),parser:f.StringNumberParser,value:e}):new b.NumberTextInputController(t,{disposable:new d.Disposable,formatter:new c.NumberFormatter(_.getSuitableDecimalDigits(e.constraint,e.rawValue)),parser:f.StringNumberParser,value:e})}(t,y);return new h.InputBindingController(t,{binding:w,controller:x,disposable:x.disposable,label:n.label||e.key})}},"./src/main/js/controller/binding-creators/number-monitor.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/binding/monitor.ts"),i=n("./src/main/js/converter/number.ts"),o=n("./src/main/js/formatter/number.ts"),s=n("./src/main/js/misc/constants.ts"),a=n("./src/main/js/misc/ticker/interval.ts"),l=n("./src/main/js/misc/type-util.ts"),u=n("./src/main/js/model/disposable.ts"),c=n("./src/main/js/model/monitor-value.ts"),p=n("./src/main/js/controller/monitor-binding.ts"),d=n("./src/main/js/controller/monitor/graph.ts"),m=n("./src/main/js/controller/monitor/multi-log.ts"),f=n("./src/main/js/controller/monitor/single-log.ts");function h(){return new o.NumberFormatter(2)}e.create=function(t,e,n){return"number"!=typeof e.read()?null:"view"in n&&"graph"===n.view?function(t,e,n){var o=new c.MonitorValue(l.TypeUtil.getOrDefault(n.count,64)),m=new a.IntervalTicker(t,l.TypeUtil.getOrDefault(n.interval,s.Constants.monitorDefaultInterval)),f=new d.GraphMonitorController(t,{disposable:new u.Disposable,formatter:h(),maxValue:l.TypeUtil.getOrDefault("max"in n?n.max:null,100),minValue:l.TypeUtil.getOrDefault("min"in n?n.min:null,0),value:o});return new p.MonitorBindingController(t,{binding:new r.MonitorBinding({reader:i.fromMixed,target:e,ticker:m,value:o}),controller:f,disposable:f.disposable,label:n.label||e.key})}(t,e,n):function(t,e,n){var o=new c.MonitorValue(l.TypeUtil.getOrDefault(n.count,1)),d=1===o.totalCount?new f.SingleLogMonitorController(t,{disposable:new u.Disposable,formatter:h(),value:o}):new m.MultiLogMonitorController(t,{disposable:new u.Disposable,formatter:h(),value:o}),v=new a.IntervalTicker(t,l.TypeUtil.getOrDefault(n.interval,s.Constants.monitorDefaultInterval));return new p.MonitorBindingController(t,{binding:new r.MonitorBinding({reader:i.fromMixed,target:e,ticker:v,value:o}),controller:d,disposable:d.disposable,label:n.label||e.key})}(t,e,n)}},"./src/main/js/controller/binding-creators/point-2d-input.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/binding/input.ts"),i=n("./src/main/js/constraint/composite.ts"),o=n("./src/main/js/constraint/point-2d.ts"),s=n("./src/main/js/constraint/range.ts"),a=n("./src/main/js/constraint/step.ts"),l=n("./src/main/js/converter/point-2d.ts"),u=n("./src/main/js/formatter/number.ts"),c=n("./src/main/js/misc/pane-error.ts"),p=n("./src/main/js/misc/type-util.ts"),d=n("./src/main/js/model/disposable.ts"),m=n("./src/main/js/model/input-value.ts"),f=n("./src/main/js/parser/any-point-2d.ts"),h=n("./src/main/js/parser/string-number.ts"),v=n("./src/main/js/controller/input-binding.ts"),b=n("./src/main/js/controller/input/point-2d-pad-text.ts"),g=n("./src/main/js/controller/ui-util.ts");function _(t){if(t){var e=[];return p.TypeUtil.isEmpty(t.step)||e.push(new a.StepConstraint({step:t.step})),p.TypeUtil.isEmpty(t.max)&&p.TypeUtil.isEmpty(t.min)||e.push(new s.RangeConstraint({max:t.max,min:t.min})),new i.CompositeConstraint({constraints:e})}}e.create=function(t,e,n){var i=e.read(),s=f.AnyPoint2dParser(i);if(!s)return null;var a=new m.InputValue(s,function(t){return new o.Point2dConstraint({x:_("x"in t?t.x:void 0),y:_("y"in t?t.y:void 0)})}(n)),p=new r.InputBinding({reader:l.fromMixed,target:e,value:a,writer:function(t){return t.toObject()}}),y=function(t,e){var n=e.constraint;if(!(n instanceof o.Point2dConstraint))throw c.PaneError.shouldNeverHappen();return new b.Point2dPadTextInputController(t,{disposable:new d.Disposable,parser:h.StringNumberParser,value:e,xFormatter:new u.NumberFormatter(g.getSuitableDecimalDigits(n.xConstraint,e.rawValue.x)),yFormatter:new u.NumberFormatter(g.getSuitableDecimalDigits(n.yConstraint,e.rawValue.y))})}(t,a);return new v.InputBindingController(t,{binding:p,controller:y,disposable:y.disposable,label:n.label||e.key})}},"./src/main/js/controller/binding-creators/string-input.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/binding/input.ts"),i=n("./src/main/js/constraint/composite.ts"),o=n("./src/main/js/constraint/list.ts"),s=n("./src/main/js/constraint/util.ts"),a=n("./src/main/js/converter/string.ts"),l=n("./src/main/js/formatter/string.ts"),u=n("./src/main/js/model/disposable.ts"),c=n("./src/main/js/model/input-value.ts"),p=n("./src/main/js/controller/input-binding.ts"),d=n("./src/main/js/controller/input/list.ts"),m=n("./src/main/js/controller/input/text.ts"),f=n("./src/main/js/controller/ui-util.ts");e.create=function(t,e,n){if("string"!=typeof e.read())return null;var h=new c.InputValue("",function(t){var e=[];return t.options&&e.push(new o.ListConstraint({options:f.normalizeInputParamsOptions(t.options,a.fromMixed)})),new i.CompositeConstraint({constraints:e})}(n)),v=new r.InputBinding({reader:a.fromMixed,target:e,value:h,writer:function(t){return t}}),b=function(t,e){var n=e.constraint;return n&&s.ConstraintUtil.findConstraint(n,o.ListConstraint)?new d.ListInputController(t,{disposable:new u.Disposable,stringifyValue:a.toString,value:e}):new m.TextInputController(t,{disposable:new u.Disposable,formatter:new l.StringFormatter,parser:a.toString,value:e})}(t,h);return new p.InputBindingController(t,{binding:v,controller:b,disposable:b.disposable,label:n.label||e.key})}},"./src/main/js/controller/binding-creators/string-monitor.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=void 0;var r=n("./src/main/js/binding/monitor.ts"),i=n("./src/main/js/converter/string.ts"),o=n("./src/main/js/formatter/string.ts"),s=n("./src/main/js/misc/constants.ts"),a=n("./src/main/js/misc/ticker/interval.ts"),l=n("./src/main/js/misc/type-util.ts"),u=n("./src/main/js/model/disposable.ts"),c=n("./src/main/js/model/monitor-value.ts"),p=n("./src/main/js/controller/monitor-binding.ts"),d=n("./src/main/js/controller/monitor/multi-log.ts"),m=n("./src/main/js/controller/monitor/single-log.ts");e.create=function(t,e,n){if("string"!=typeof e.read())return null;var f=new c.MonitorValue(l.TypeUtil.getOrDefault(n.count,1)),h=f.totalCount>1||"multiline"in n&&n.multiline?new d.MultiLogMonitorController(t,{disposable:new u.Disposable,formatter:new o.StringFormatter,value:f}):new m.SingleLogMonitorController(t,{disposable:new u.Disposable,formatter:new o.StringFormatter,value:f}),v=new a.IntervalTicker(t,l.TypeUtil.getOrDefault(n.interval,s.Constants.monitorDefaultInterval));return new p.MonitorBindingController(t,{binding:new r.MonitorBinding({reader:i.fromMixed,target:e,ticker:v,value:f}),controller:h,disposable:h.disposable,label:n.label||e.key})}},"./src/main/js/controller/button.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ButtonController=void 0;var r=n("./src/main/js/model/button.ts"),i=n("./src/main/js/view/button.ts"),o=function(){function t(t,e){this.onButtonClick_=this.onButtonClick_.bind(this),this.button=new r.Button(e.title),this.disposable=e.disposable,this.view=new i.ButtonView(t,{button:this.button,disposable:this.disposable}),this.view.buttonElement.addEventListener("click",this.onButtonClick_)}return t.prototype.onButtonClick_=function(){this.button.click()},t}();e.ButtonController=o},"./src/main/js/controller/folder.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FolderController=void 0;var r=n("./src/main/js/misc/dom-util.ts"),i=n("./src/main/js/misc/type-util.ts"),o=n("./src/main/js/model/folder.ts"),s=n("./src/main/js/model/ui-controller-list.ts"),a=n("./src/main/js/view/folder.ts"),l=function(){function t(t,e){this.onTitleClick_=this.onTitleClick_.bind(this),this.onUiControllerListAdd_=this.onUiControllerListAdd_.bind(this),this.onUiControllerListRemove_=this.onUiControllerListRemove_.bind(this),this.disposable=e.disposable,this.folder=new o.Folder(e.title,i.TypeUtil.getOrDefault(e.expanded,!0)),this.ucList_=new s.UiControllerList,this.ucList_.emitter.on("add",this.onUiControllerListAdd_),this.ucList_.emitter.on("remove",this.onUiControllerListRemove_),this.doc_=t,this.view=new a.FolderView(this.doc_,{disposable:this.disposable,folder:this.folder}),this.view.titleElement.addEventListener("click",this.onTitleClick_)}return Object.defineProperty(t.prototype,"document",{get:function(){return this.doc_},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"uiControllerList",{get:function(){return this.ucList_},enumerable:!1,configurable:!0}),t.prototype.computeExpandedHeight_=function(){var t=this,e=this.view.containerElement,n=0;return r.disableTransitionTemporarily(e,(function(){var i=t.folder.expanded;t.folder.expandedHeight=null,t.folder.expanded=!0,r.forceReflow(e),n=e.clientHeight,t.folder.expanded=i,r.forceReflow(e)})),n},t.prototype.onTitleClick_=function(){this.folder.expanded=!this.folder.expanded},t.prototype.onUiControllerListAdd_=function(t){this.view.containerElement.insertBefore(t.uiController.view.element,this.view.containerElement.children[t.index]),this.folder.expandedHeight=this.computeExpandedHeight_()},t.prototype.onUiControllerListRemove_=function(t){this.folder.expandedHeight=this.computeExpandedHeight_()},t}();e.FolderController=l},"./src/main/js/controller/input-binding.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InputBindingController=void 0;var r=n("./src/main/js/view/labeled.ts");e.InputBindingController=function(t,e){this.binding=e.binding,this.controller=e.controller,this.disposable=e.disposable,this.view=new r.LabeledView(t,{disposable:this.disposable,label:e.label,view:this.controller.view})}},"./src/main/js/controller/input/checkbox.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckboxInputController=void 0;var r=n("./src/main/js/misc/type-util.ts"),i=n("./src/main/js/view/input/checkbox.ts"),o=function(){function t(t,e){this.onInputChange_=this.onInputChange_.bind(this),this.value=e.value,this.disposable=e.disposable,this.view=new i.CheckboxInputView(t,{disposable:this.disposable,value:this.value}),this.view.inputElement.addEventListener("change",this.onInputChange_)}return t.prototype.onInputChange_=function(t){var e=r.TypeUtil.forceCast(t.currentTarget);this.value.rawValue=e.checked,this.view.update()},t}();e.CheckboxInputController=o},"./src/main/js/controller/input/color-picker.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorPickerInputController=void 0;var r=n("./src/main/js/formatter/number.ts"),i=n("./src/main/js/misc/type-util.ts"),o=n("./src/main/js/model/foldable.ts"),s=n("./src/main/js/parser/string-number.ts"),a=n("./src/main/js/view/input/color-picker.ts"),l=n("./src/main/js/controller/input/h-palette.ts"),u=n("./src/main/js/controller/input/rgb-text.ts"),c=n("./src/main/js/controller/input/sv-palette.ts"),p=function(){function t(t,e){var n=this;this.onInputBlur_=this.onInputBlur_.bind(this),this.value=e.value,this.foldable=new o.Foldable,this.disposable=e.disposable,this.hPaletteIc_=new l.HPaletteInputController(t,{disposable:this.disposable,value:this.value}),this.svPaletteIc_=new c.SvPaletteInputController(t,{disposable:this.disposable,value:this.value}),this.rgbTextIc_=new u.RgbTextInputController(t,{disposable:this.disposable,formatter:new r.NumberFormatter(0),parser:s.StringNumberParser,value:this.value}),this.view=new a.ColorPickerInputView(t,{disposable:this.disposable,foldable:this.foldable,hPaletteInputView:this.hPaletteIc_.view,rgbTextView:this.rgbTextIc_.view,svPaletteInputView:this.svPaletteIc_.view,value:this.value}),this.view.allFocusableElements.forEach((function(t){t.addEventListener("blur",n.onInputBlur_)}))}return t.prototype.onInputBlur_=function(t){var e=this.view.element,n=i.TypeUtil.forceCast(t.relatedTarget);n&&e.contains(n)||(this.foldable.expanded=!1)},t}();e.ColorPickerInputController=p},"./src/main/js/controller/input/color-swatch-text.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorSwatchTextInputController=void 0;var r=n("./src/main/js/view/input/color-swatch-text.ts"),i=n("./src/main/js/controller/input/color-swatch.ts"),o=n("./src/main/js/controller/input/text.ts");e.ColorSwatchTextInputController=function(t,e){this.value=e.value,this.disposable=e.disposable,this.swatchIc_=new i.ColorSwatchInputController(t,{disposable:this.disposable,value:this.value}),this.disposable=e.disposable,this.textIc_=new o.TextInputController(t,{disposable:this.disposable,formatter:e.formatter,parser:e.parser,value:this.value}),this.disposable=e.disposable,this.view=new r.ColorSwatchTextInputView(t,{disposable:this.disposable,swatchInputView:this.swatchIc_.view,textInputView:this.textIc_.view})}},"./src/main/js/controller/input/color-swatch.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorSwatchInputController=void 0;var r=n("./src/main/js/misc/type-util.ts"),i=n("./src/main/js/view/input/color-swatch.ts"),o=n("./src/main/js/controller/input/color-picker.ts"),s=function(){function t(t,e){this.onButtonBlur_=this.onButtonBlur_.bind(this),this.onButtonClick_=this.onButtonClick_.bind(this),this.value=e.value,this.disposable=e.disposable,this.pickerIc_=new o.ColorPickerInputController(t,{disposable:this.disposable,value:this.value}),this.view=new i.ColorSwatchInputView(t,{disposable:this.disposable,pickerInputView:this.pickerIc_.view,value:this.value}),this.view.buttonElement.addEventListener("blur",this.onButtonBlur_),this.view.buttonElement.addEventListener("click",this.onButtonClick_)}return t.prototype.onButtonBlur_=function(t){var e=this.view.element,n=r.TypeUtil.forceCast(t.relatedTarget);n&&e.contains(n)||(this.pickerIc_.foldable.expanded=!1)},t.prototype.onButtonClick_=function(){this.pickerIc_.foldable.expanded=!this.pickerIc_.foldable.expanded},t}();e.ColorSwatchInputController=s},"./src/main/js/controller/input/h-palette.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HPaletteInputController=void 0;var r=n("./src/main/js/misc/number-util.ts"),i=n("./src/main/js/misc/pointer-handler.ts"),o=n("./src/main/js/model/color.ts"),s=n("./src/main/js/view/input/h-palette.ts"),a=function(){function t(t,e){this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.value=e.value,this.disposable=e.disposable,this.view=new s.HPaletteInputView(t,{disposable:this.disposable,value:this.value}),this.ptHandler_=new i.PointerHandler(t,this.view.canvasElement),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_)}return t.prototype.handlePointerEvent_=function(t){var e=r.NumberUtil.map(t.py,0,1,0,360),n=this.value.rawValue.getComponents("hsv"),i=n[1],s=n[2];this.value.rawValue=new o.Color([e,i,s],"hsv"),this.view.update()},t.prototype.onPointerDown_=function(t){this.handlePointerEvent_(t.data)},t.prototype.onPointerMove_=function(t){this.handlePointerEvent_(t.data)},t.prototype.onPointerUp_=function(t){this.handlePointerEvent_(t.data)},t}();e.HPaletteInputController=a},"./src/main/js/controller/input/list.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ListInputController=void 0;var r=n("./src/main/js/constraint/list.ts"),i=n("./src/main/js/constraint/util.ts"),o=n("./src/main/js/misc/type-util.ts"),s=n("./src/main/js/view/input/list.ts"),a=function(){function t(t,e){var n,o;this.onSelectChange_=this.onSelectChange_.bind(this),this.value_=e.value,this.listItems_=((o=(n=this.value_).constraint?i.ConstraintUtil.findConstraint(n.constraint,r.ListConstraint):null)?o.options:null)||[],this.disposable=e.disposable,this.view_=new s.ListInputView(t,{disposable:this.disposable,options:this.listItems_,stringifyValue:e.stringifyValue,value:this.value_}),this.view_.selectElement.addEventListener("change",this.onSelectChange_)}return Object.defineProperty(t.prototype,"value",{get:function(){return this.value_},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"view",{get:function(){return this.view_},enumerable:!1,configurable:!0}),t.prototype.onSelectChange_=function(t){var e=o.TypeUtil.forceCast(t.currentTarget).selectedOptions.item(0);if(e){var n=Number(e.dataset.index);this.value_.rawValue=this.listItems_[n].value,this.view_.update()}},t}();e.ListInputController=a},"./src/main/js/controller/input/number-text.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.NumberTextInputController=void 0;var o=n("./src/main/js/controller/ui-util.ts"),s=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.onInputKeyDown_=r.onInputKeyDown_.bind(r),r.step_=o.getStepForTextInput(r.value.constraint),r.view.inputElement.addEventListener("keydown",r.onInputKeyDown_),r}return i(e,t),e.prototype.onInputKeyDown_=function(t){var e=o.getStepForKey(this.step_,t);0!==e&&(this.value.rawValue+=e,this.view.update())},e}(n("./src/main/js/controller/input/text.ts").TextInputController);e.NumberTextInputController=s},"./src/main/js/controller/input/point-2d-pad-text.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Point2dPadTextInputController=void 0;var r=n("./src/main/js/view/input/point-2d-pad-text.ts"),i=n("./src/main/js/controller/input/point-2d-pad.ts"),o=n("./src/main/js/controller/input/point-2d-text.ts"),s=function(){function t(t,e){this.onPadButtonBlur_=this.onPadButtonBlur_.bind(this),this.onPadButtonClick_=this.onPadButtonClick_.bind(this),this.value=e.value,this.disposable=e.disposable,this.padIc_=new i.Point2dPadInputController(t,{disposable:this.disposable,value:this.value}),this.textIc_=new o.Point2dTextInputController(t,{disposable:this.disposable,parser:e.parser,value:this.value,xFormatter:e.xFormatter,yFormatter:e.yFormatter}),this.view=new r.Point2dPadTextInputView(t,{disposable:this.disposable,padInputView:this.padIc_.view,textInputView:this.textIc_.view}),this.view.padButtonElement.addEventListener("blur",this.onPadButtonBlur_),this.view.padButtonElement.addEventListener("click",this.onPadButtonClick_)}return t.prototype.onPadButtonBlur_=function(){this.padIc_.foldable.expanded=!1},t.prototype.onPadButtonClick_=function(){this.padIc_.foldable.expanded=!this.padIc_.foldable.expanded},t}();e.Point2dPadTextInputController=s},"./src/main/js/controller/input/point-2d-pad.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Point2dPadInputController=void 0;var r=n("./src/main/js/misc/number-util.ts"),i=n("./src/main/js/misc/pointer-handler.ts"),o=n("./src/main/js/model/foldable.ts"),s=n("./src/main/js/model/point-2d.ts"),a=n("./src/main/js/view/input/point-2d-pad.ts"),l=n("./src/main/js/controller/ui-util.ts"),u=function(){function t(t,e){this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.value=e.value,this.foldable=new o.Foldable,this.maxValue_=l.getSuitableMaxValueForPoint2dPad(this.value.constraint,this.value.rawValue),this.disposable=e.disposable,this.view=new a.Point2dPadInputView(t,{disposable:this.disposable,foldable:this.foldable,maxValue:this.maxValue_,value:this.value}),this.ptHandler_=new i.PointerHandler(t,this.view.padElement),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_)}return t.prototype.handlePointerEvent_=function(t){var e=this.maxValue_;this.value.rawValue=new s.Point2d(r.NumberUtil.map(t.px,0,1,-e,+e),r.NumberUtil.map(t.py,0,1,-e,+e)),this.view.update()},t.prototype.onPointerDown_=function(t){this.handlePointerEvent_(t.data)},t.prototype.onPointerMove_=function(t){this.handlePointerEvent_(t.data)},t.prototype.onPointerUp_=function(t){this.handlePointerEvent_(t.data)},t}();e.Point2dPadInputController=u},"./src/main/js/controller/input/point-2d-text.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Point2dTextInputController=void 0;var r=n("./src/main/js/constraint/point-2d.ts"),i=n("./src/main/js/misc/type-util.ts"),o=n("./src/main/js/model/point-2d.ts"),s=n("./src/main/js/view/input/point-2d-text.ts"),a=n("./src/main/js/controller/ui-util.ts"),l=function(){function t(t,e){var n=this;this.onInputChange_=this.onInputChange_.bind(this),this.onInputKeyDown_=this.onInputKeyDown_.bind(this),this.parser_=e.parser,this.value=e.value;var i=this.value.constraint;this.xStep_=a.getStepForTextInput(i instanceof r.Point2dConstraint?i.xConstraint:void 0),this.yStep_=a.getStepForTextInput(i instanceof r.Point2dConstraint?i.yConstraint:void 0),this.disposable=e.disposable,this.view=new s.Point2dTextInputView(t,{disposable:this.disposable,value:this.value,xFormatter:e.xFormatter,yFormatter:e.yFormatter}),this.view.inputElements.forEach((function(t){t.addEventListener("change",n.onInputChange_),t.addEventListener("keydown",n.onInputKeyDown_)}))}return t.prototype.findIndexOfInputElem_=function(t){for(var e=this.view.inputElements,n=0;n.5?u/(2-l-a):u/(a+l),c=(c=i===a?(o-s)/u:o===a?2+(s-i)/u:4+(i-o)/u)/6+(c<0?1:0)),[360*c,100*p,100*d]},e.hslToRgb=function(t,e,n){var i,o,s,a,l,u,c,p,d,m=(t%360+360)%360,f=r.NumberUtil.constrain(e/100,0,1),h=r.NumberUtil.constrain(n/100,0,1),v=(1-Math.abs(2*h-1))*f,b=v*(1-Math.abs(m/60%2-1)),g=h-v/2;return m>=0&&m<60?(c=(i=[v,b,0])[0],p=i[1],d=i[2]):m>=60&&m<120?(c=(o=[b,v,0])[0],p=o[1],d=o[2]):m>=120&&m<180?(c=(s=[0,v,b])[0],p=s[1],d=s[2]):m>=180&&m<240?(c=(a=[0,b,v])[0],p=a[1],d=a[2]):m>=240&&m<300?(c=(l=[b,0,v])[0],p=l[1],d=l[2]):(c=(u=[v,0,b])[0],p=u[1],d=u[2]),[255*(c+g),255*(p+g),255*(d+g)]},e.rgbToHsv=function(t,e,n){var i=r.NumberUtil.constrain(t/255,0,1),o=r.NumberUtil.constrain(e/255,0,1),s=r.NumberUtil.constrain(n/255,0,1),a=Math.max(i,o,s),l=a-Math.min(i,o,s);return[0===l?0:a===i?((o-s)/l%6+6)%6*60:a===o?60*((s-i)/l+2):60*((i-o)/l+4),100*(0===a?0:l/a),100*a]},e.hsvToRgb=function(t,e,n){var i,o,s,a,l,u,c,p,d,m=r.NumberUtil.loop(t,360),f=r.NumberUtil.constrain(e/100,0,1),h=r.NumberUtil.constrain(n/100,0,1),v=h*f,b=v*(1-Math.abs(m/60%2-1)),g=h-v;return m>=0&&m<60?(c=(i=[v,b,0])[0],p=i[1],d=i[2]):m>=60&&m<120?(c=(o=[b,v,0])[0],p=o[1],d=o[2]):m>=120&&m<180?(c=(s=[0,v,b])[0],p=s[1],d=s[2]):m>=180&&m<240?(c=(a=[0,b,v])[0],p=a[1],d=a[2]):m>=240&&m<300?(c=(l=[b,0,v])[0],p=l[1],d=l[2]):(c=(u=[v,0,b])[0],p=u[1],d=u[2]),[255*(c+g),255*(p+g),255*(d+g)]}},"./src/main/js/misc/constants.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Constants=void 0,e.Constants={monitorDefaultInterval:200}},"./src/main/js/misc/disposing-util.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.disposeElement=void 0,e.disposeElement=function(t){return t&&t.parentElement&&t.parentElement.removeChild(t),null}},"./src/main/js/misc/dom-util.ts":function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0}),e.createSvgIconElement=e.getCanvasContext=e.getWindowDocument=e.supportsTouch=e.disableTransitionTemporarily=e.forceReflow=e.SVG_NS=void 0;var r=n("./src/main/js/misc/type-util.ts");e.SVG_NS="http://www.w3.org/2000/svg",e.forceReflow=function(t){t.offsetHeight},e.disableTransitionTemporarily=function(t,e){var n=t.style.transition;t.style.transition="none",e(),t.style.transition=n},e.supportsTouch=function(t){return void 0!==t.ontouchstart},e.getWindowDocument=function(){return r.TypeUtil.forceCast(new Function("return this")()).document},e.getCanvasContext=function(e){return t.browser?e.getContext("2d"):null};var i={p2dpad:''};e.createSvgIconElement=function(t,n){var r=t.createElementNS(e.SVG_NS,"svg");return r.innerHTML=i[n],r}}).call(this,n("./node_modules/process/browser.js"))},"./src/main/js/misc/emitter.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Emitter=void 0;var r=function(){function t(){this.observers_={}}return t.prototype.on=function(t,e){var n=this.observers_[t];return n||(n=this.observers_[t]=[]),n.push({handler:e}),this},t.prototype.off=function(t,e){var n=this.observers_[t];return n&&(this.observers_[t]=n.filter((function(t){return t.handler!==e}))),this},t.prototype.emit=function(t,e){var n=this.observers_[t];n&&n.forEach((function(t){t.handler(e)}))},t}();e.Emitter=r},"./src/main/js/misc/number-util.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NumberUtil=void 0,e.NumberUtil={map:function(t,e,n,r,i){return r+(t-e)/(n-e)*(i-r)},getDecimalDigits:function(t){return String(t.toFixed(10)).split(".")[1].replace(/0+$/,"").length},constrain:function(t,e,n){return Math.min(Math.max(t,e),n)},loop:function(t,e){return(t%e+e)%e}}},"./src/main/js/misc/pane-error.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PaneError=void 0;var r=function(){function t(t){this.message=function(t){return"alreadydisposed"===t.type?"View has been already disposed":"emptyvalue"===t.type?"Value is empty for "+t.context.key:"invalidparams"===t.type?"Invalid parameters for "+t.context.name:"nomatchingcontroller"===t.type?"No matching controller for "+t.context.key:"shouldneverhappen"===t.type?"This error should never happen":"Unexpected error"}(t),this.name=this.constructor.name,this.stack=new Error(this.message).stack,this.type=t.type}return t.alreadyDisposed=function(){return new t({type:"alreadydisposed"})},t.shouldNeverHappen=function(){return new t({type:"shouldneverhappen"})},t}();e.PaneError=r,r.prototype=Object.create(Error.prototype),r.prototype.constructor=r},"./src/main/js/misc/pointer-handler.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PointerHandler=void 0;var r=n("./src/main/js/misc/dom-util.ts"),i=n("./src/main/js/misc/emitter.ts"),o=function(){function t(t,e){this.onDocumentMouseMove_=this.onDocumentMouseMove_.bind(this),this.onDocumentMouseUp_=this.onDocumentMouseUp_.bind(this),this.onMouseDown_=this.onMouseDown_.bind(this),this.onTouchMove_=this.onTouchMove_.bind(this),this.onTouchStart_=this.onTouchStart_.bind(this),this.document=t,this.element=e,this.emitter=new i.Emitter,this.pressed_=!1,r.supportsTouch(this.document)?(e.addEventListener("touchstart",this.onTouchStart_),e.addEventListener("touchmove",this.onTouchMove_)):(e.addEventListener("mousedown",this.onMouseDown_),this.document.addEventListener("mousemove",this.onDocumentMouseMove_),this.document.addEventListener("mouseup",this.onDocumentMouseUp_))}return t.prototype.computePosition_=function(t,e){var n=this.element.getBoundingClientRect();return{px:t/n.width,py:e/n.height}},t.prototype.onMouseDown_=function(t){t.preventDefault(),this.pressed_=!0,this.emitter.emit("down",{data:this.computePosition_(t.offsetX,t.offsetY),sender:this})},t.prototype.onDocumentMouseMove_=function(t){if(this.pressed_){var e=this.document.defaultView,n=this.element.getBoundingClientRect();this.emitter.emit("move",{data:this.computePosition_(t.pageX-((e&&e.scrollX||0)+n.left),t.pageY-((e&&e.scrollY||0)+n.top)),sender:this})}},t.prototype.onDocumentMouseUp_=function(t){if(this.pressed_){this.pressed_=!1;var e=this.document.defaultView,n=this.element.getBoundingClientRect();this.emitter.emit("up",{data:this.computePosition_(t.pageX-((e&&e.scrollX||0)+n.left),t.pageY-((e&&e.scrollY||0)+n.top)),sender:this})}},t.prototype.onTouchStart_=function(t){t.preventDefault();var e=t.targetTouches[0],n=this.element.getBoundingClientRect();this.emitter.emit("down",{data:this.computePosition_(e.clientX-n.left,e.clientY-n.top),sender:this})},t.prototype.onTouchMove_=function(t){var e=t.targetTouches[0],n=this.element.getBoundingClientRect();this.emitter.emit("move",{data:this.computePosition_(e.clientX-n.left,e.clientY-n.top),sender:this})},t}();e.PointerHandler=o},"./src/main/js/misc/ticker/interval.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IntervalTicker=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(t,e){var n=this;if(this.onTick_=this.onTick_.bind(this),this.onWindowBlur_=this.onWindowBlur_.bind(this),this.onWindowFocus_=this.onWindowFocus_.bind(this),this.active_=!0,this.doc_=t,this.emitter=new r.Emitter,e<=0)this.id_=null;else{var i=this.doc_.defaultView;i&&(this.id_=i.setInterval((function(){n.active_&&n.onTick_()}),e))}}return t.prototype.dispose=function(){if(null!==this.id_){var t=this.doc_.defaultView;t&&t.clearInterval(this.id_)}this.id_=null},t.prototype.onTick_=function(){this.emitter.emit("tick",{sender:this})},t.prototype.onWindowBlur_=function(){this.active_=!1},t.prototype.onWindowFocus_=function(){this.active_=!0},t}();e.IntervalTicker=i},"./src/main/js/misc/type-util.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TypeUtil=void 0,e.TypeUtil={forceCast:function(t){return t},isEmpty:function(t){return null==t},getOrDefault:function(t,n){return e.TypeUtil.isEmpty(t)?n:t}}},"./src/main/js/model/button.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Button=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(t){this.emitter=new r.Emitter,this.title=t}return t.prototype.click=function(){this.emitter.emit("click",{sender:this})},t}();e.Button=i},"./src/main/js/model/color.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Color=void 0;var r=n("./src/main/js/misc/color-model.ts"),i=n("./src/main/js/misc/number-util.ts"),o=n("./src/main/js/misc/type-util.ts"),s={hsv:function(t){return[i.NumberUtil.loop(t[0],360),i.NumberUtil.constrain(t[1],0,100),i.NumberUtil.constrain(t[2],0,100)]},rgb:function(t){return[i.NumberUtil.constrain(t[0],0,255),i.NumberUtil.constrain(t[1],0,255),i.NumberUtil.constrain(t[2],0,255)]}};function a(t,e){return"object"==typeof t&&!o.TypeUtil.isEmpty(t)&&e in t&&"number"==typeof t[e]}var l=function(){function t(t,e){this.mode_=e,this.comps_=s[e](t)}return t.fromRgbObject=function(e){return new t([e.r,e.g,e.b],"rgb")},t.toRgbObject=function(t){return t.toRgbObject()},t.isRgbColorObject=function(t){return a(t,"r")&&a(t,"g")&&a(t,"b")},Object.defineProperty(t.prototype,"mode",{get:function(){return this.mode_},enumerable:!1,configurable:!0}),t.prototype.getComponents=function(t){return"hsv"===this.mode_&&"rgb"===t?r.hsvToRgb.apply(r,this.comps_):"rgb"===this.mode_&&"hsv"===t?r.rgbToHsv.apply(r,this.comps_):this.comps_},t.prototype.toRgbObject=function(){var t=this.getComponents("rgb");return{r:t[0],g:t[1],b:t[2]}},t}();e.Color=l},"./src/main/js/model/disposable.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Disposable=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(){this.emitter=new r.Emitter,this.disposed_=!1}return Object.defineProperty(t.prototype,"disposed",{get:function(){return this.disposed_},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){return!this.disposed_&&(this.disposed_=!0,this.emitter.emit("dispose",{sender:this}),!0)},t}();e.Disposable=i},"./src/main/js/model/foldable.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Foldable=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(){this.emitter=new r.Emitter,this.expanded_=!1}return Object.defineProperty(t.prototype,"expanded",{get:function(){return this.expanded_},set:function(t){this.expanded_!==t&&(this.expanded_=t,this.emitter.emit("change",{sender:this}))},enumerable:!1,configurable:!0}),t}();e.Foldable=i},"./src/main/js/model/folder.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Folder=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(t,e){this.emitter=new r.Emitter,this.expanded_=e,this.expandedHeight_=null,this.title=t}return Object.defineProperty(t.prototype,"expanded",{get:function(){return this.expanded_},set:function(t){this.expanded_!==t&&(this.expanded_=t,this.emitter.emit("change",{sender:this}))},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"expandedHeight",{get:function(){return this.expandedHeight_},set:function(t){this.expandedHeight_!==t&&(this.expandedHeight_=t,this.emitter.emit("change",{sender:this}))},enumerable:!1,configurable:!0}),t}();e.Folder=i},"./src/main/js/model/graph-cursor.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GraphCursor=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(){this.emitter=new r.Emitter,this.index_=-1}return Object.defineProperty(t.prototype,"index",{get:function(){return this.index_},set:function(t){this.index_!==t&&(this.index_=t,this.emitter.emit("change",{index:t,sender:this}))},enumerable:!1,configurable:!0}),t}();e.GraphCursor=i},"./src/main/js/model/input-value.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InputValue=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(t,e){this.constraint_=e,this.emitter=new r.Emitter,this.rawValue_=t}return t.equalsValue=function(t,e){return t===e},Object.defineProperty(t.prototype,"constraint",{get:function(){return this.constraint_},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"rawValue",{get:function(){return this.rawValue_},set:function(e){var n=this.constraint_?this.constraint_.constrain(e):e;!t.equalsValue(this.rawValue_,n)&&(this.rawValue_=n,this.emitter.emit("change",{rawValue:n,sender:this}))},enumerable:!1,configurable:!0}),t}();e.InputValue=i},"./src/main/js/model/list.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.List=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(){this.emitter=new r.Emitter,this.items_=[]}return Object.defineProperty(t.prototype,"items",{get:function(){return this.items_},enumerable:!1,configurable:!0}),t.prototype.add=function(t,e){var n=void 0!==e?e:this.items_.length;this.items_.splice(n,0,t),this.emitter.emit("add",{index:n,item:t,sender:this})},t.prototype.remove=function(t){var e=this.items_.indexOf(t);e<0||(this.items_.splice(e,1),this.emitter.emit("remove",{sender:this}))},t}();e.List=i},"./src/main/js/model/monitor-value.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MonitorValue=void 0;var r=n("./src/main/js/misc/emitter.ts"),i=function(){function t(t){this.emitter=new r.Emitter,this.rawValues_=[],this.totalCount_=t}return Object.defineProperty(t.prototype,"rawValues",{get:function(){return this.rawValues_},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"totalCount",{get:function(){return this.totalCount_},enumerable:!1,configurable:!0}),t.prototype.append=function(t){this.rawValues_.push(t),this.rawValues_.length>this.totalCount_&&this.rawValues_.splice(0,this.rawValues_.length-this.totalCount_),this.emitter.emit("update",{rawValue:t,sender:this})},t}();e.MonitorValue=i},"./src/main/js/model/point-2d.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Point2d=void 0;var r=function(){function t(t,e){void 0===t&&(t=0),void 0===e&&(e=0),this.x=t,this.y=e}return t.prototype.getComponents=function(){return[this.x,this.y]},t.prototype.toObject=function(){return{x:this.x,y:this.y}},t}();e.Point2d=r},"./src/main/js/model/target.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Target=void 0;var r=n("./src/main/js/misc/type-util.ts"),i=function(){function t(t,e,n){this.obj_=t,this.key_=e,this.presetKey_=r.TypeUtil.getOrDefault(n,e)}return Object.defineProperty(t.prototype,"key",{get:function(){return this.key_},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"presetKey",{get:function(){return this.presetKey_},enumerable:!1,configurable:!0}),t.prototype.read=function(){return this.obj_[this.key_]},t.prototype.write=function(t){this.obj_[this.key_]=t},t}();e.Target=i},"./src/main/js/model/ui-controller-list.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UiControllerList=void 0;var r=n("./src/main/js/controller/folder.ts"),i=n("./src/main/js/controller/input-binding.ts"),o=n("./src/main/js/controller/monitor-binding.ts"),s=n("./src/main/js/misc/emitter.ts"),a=n("./src/main/js/model/list.ts"),l=function(){function t(){this.onFolderFold_=this.onFolderFold_.bind(this),this.onFolderInputChange_=this.onFolderInputChange_.bind(this),this.onFolderMonitorUpdate_=this.onFolderMonitorUpdate_.bind(this),this.onInputChange_=this.onInputChange_.bind(this),this.onListAdd_=this.onListAdd_.bind(this),this.onListItemDispose_=this.onListItemDispose_.bind(this),this.onListRemove_=this.onListRemove_.bind(this),this.onMonitorUpdate_=this.onMonitorUpdate_.bind(this),this.ucList_=new a.List,this.emitter=new s.Emitter,this.ucList_.emitter.on("add",this.onListAdd_),this.ucList_.emitter.on("remove",this.onListRemove_)}return Object.defineProperty(t.prototype,"items",{get:function(){return this.ucList_.items},enumerable:!1,configurable:!0}),t.prototype.add=function(t,e){this.ucList_.add(t,e)},t.prototype.onListAdd_=function(t){var e=t.item;if(this.emitter.emit("add",{index:t.index,sender:this,uiController:e}),e.disposable.emitter.on("dispose",this.onListItemDispose_),e instanceof i.InputBindingController)(n=e.binding.emitter).on("change",this.onInputChange_);else if(e instanceof o.MonitorBindingController)(n=e.binding.emitter).on("update",this.onMonitorUpdate_);else if(e instanceof r.FolderController){var n;(n=e.uiControllerList.emitter).on("fold",this.onFolderFold_),n.on("inputchange",this.onFolderInputChange_),n.on("monitorupdate",this.onFolderMonitorUpdate_)}},t.prototype.onListRemove_=function(t){this.emitter.emit("remove",{sender:this})},t.prototype.onListItemDispose_=function(t){var e=this;this.ucList_.items.filter((function(t){return t.disposable.disposed})).forEach((function(t){e.ucList_.remove(t)}))},t.prototype.onInputChange_=function(t){this.emitter.emit("inputchange",{inputBinding:t.sender,sender:this,value:t.rawValue})},t.prototype.onMonitorUpdate_=function(t){this.emitter.emit("monitorupdate",{monitorBinding:t.sender,sender:this,value:t.rawValue})},t.prototype.onFolderInputChange_=function(t){this.emitter.emit("inputchange",{inputBinding:t.inputBinding,sender:this,value:t.value})},t.prototype.onFolderMonitorUpdate_=function(t){this.emitter.emit("monitorupdate",{monitorBinding:t.monitorBinding,sender:this,value:t.value})},t.prototype.onFolderFold_=function(t){this.emitter.emit("fold",{expanded:t.expanded,sender:this})},t}();e.UiControllerList=l},"./src/main/js/parser/any-point-2d.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AnyPoint2dParser=void 0;var r=n("./src/main/js/misc/type-util.ts"),i=n("./src/main/js/model/point-2d.ts");e.AnyPoint2dParser=function(t){if(r.TypeUtil.isEmpty(t))return null;var e=t.x,n=t.y;return"number"!=typeof e||"number"!=typeof n?null:new i.Point2d(e,n)}},"./src/main/js/parser/number-color.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NumberColorParser=void 0;var r=n("./src/main/js/model/color.ts");e.NumberColorParser=function(t){return new r.Color([t>>16&255,t>>8&255,255&t],"rgb")}},"./src/main/js/parser/string-color.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getNotation=e.CompositeParser=void 0;var r=n("./src/main/js/model/color.ts");function i(t,e){var n=t.match(/^(.+)%$/);return n?Math.min(.01*parseFloat(n[1])*e,e):Math.min(parseFloat(t),e)}var o={"func.rgb":function(t){var e=t.match(/^rgb\(\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;var n=[i(e[1],255),i(e[2],255),i(e[3],255)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:new r.Color(n,"rgb")},"hex.rgb":function(t){var e=t.match(/^#?([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);if(e)return new r.Color([parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)],"rgb");var n=t.match(/^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);return n?new r.Color([parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)],"rgb"):null}};e.CompositeParser=function(t){return Object.keys(o).reduce((function(e,n){return e||(0,o[n])(t)}),null)},e.getNotation=function(t){return Object.keys(o).reduce((function(e,n){return e||((0,o[n])(t)?n:null)}),null)}},"./src/main/js/parser/string-number.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StringNumberParser=void 0,e.StringNumberParser=function(t){var e=parseFloat(t);return isNaN(e)?null:e}},"./src/main/js/tweakpane-without-style.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.TweakpaneWithoutStyle=void 0;var o=n("./src/main/js/api/root.ts"),s=n("./src/main/js/controller/root.ts"),a=n("./src/main/js/misc/class-name.ts"),l=n("./src/main/js/misc/dom-util.ts"),u=n("./src/main/js/misc/pane-error.ts"),c=n("./src/main/js/misc/type-util.ts"),p=n("./src/main/js/model/disposable.ts"),d=function(t){function e(e){var n=this,r=e||{},i=c.TypeUtil.getOrDefault(r.document,l.getWindowDocument()),o=new s.RootController(i,{disposable:new p.Disposable,title:r.title});return(n=t.call(this,o)||this).containerElem_=r.container||function(t){var e=t.createElement("div");return e.classList.add(a.ClassName("dfw")()),t.body&&t.body.appendChild(e),e}(i),n.containerElem_.appendChild(n.element),n.doc_=i,n.usesDefaultWrapper_=!r.container,n}return i(e,t),e.prototype.dispose=function(){var e=this.containerElem_;if(!e)throw u.PaneError.alreadyDisposed();if(this.usesDefaultWrapper_){var n=e.parentElement;n&&n.removeChild(e)}this.containerElem_=null,this.doc_=null,t.prototype.dispose.call(this)},Object.defineProperty(e.prototype,"document",{get:function(){if(!this.doc_)throw u.PaneError.alreadyDisposed();return this.doc_},enumerable:!1,configurable:!0}),e}(o.RootApi);e.TweakpaneWithoutStyle=d},"./src/main/js/view/button.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.ButtonView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("btn"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.button=n.button,r.element.classList.add(u());var i=e.createElement("button");return i.classList.add(u("b")),i.textContent=r.button.title,r.element.appendChild(i),r.buttonElem_=i,n.disposable.emitter.on("dispose",(function(){r.buttonElem_=s.disposeElement(r.buttonElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"buttonElement",{get:function(){if(!this.buttonElem_)throw a.PaneError.alreadyDisposed();return this.buttonElem_},enumerable:!1,configurable:!0}),e}(l.View);e.ButtonView=c},"./src/main/js/view/folder.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.FolderView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/misc/type-util.ts"),u=n("./src/main/js/view/view.ts"),c=o.ClassName("fld"),p=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onFolderChange_=r.onFolderChange_.bind(r),r.folder_=n.folder,r.folder_.emitter.on("change",r.onFolderChange_),r.element.classList.add(c());var i=e.createElement("button");i.classList.add(c("t")),i.textContent=r.folder_.title,r.element.appendChild(i),r.titleElem_=i;var o=e.createElement("div");o.classList.add(c("m")),r.titleElem_.appendChild(o);var a=e.createElement("div");return a.classList.add(c("c")),r.element.appendChild(a),r.containerElem_=a,r.applyModel_(),n.disposable.emitter.on("dispose",(function(){r.containerElem_=s.disposeElement(r.containerElem_),r.titleElem_=s.disposeElement(r.titleElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"titleElement",{get:function(){if(!this.titleElem_)throw a.PaneError.alreadyDisposed();return this.titleElem_},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"containerElement",{get:function(){if(!this.containerElem_)throw a.PaneError.alreadyDisposed();return this.containerElem_},enumerable:!1,configurable:!0}),e.prototype.applyModel_=function(){var t=this.containerElem_;if(!t)throw a.PaneError.alreadyDisposed();var e=this.folder_.expanded,n=c(void 0,"expanded");e?this.element.classList.add(n):this.element.classList.remove(n);var r=this.folder_.expandedHeight;if(l.TypeUtil.isEmpty(r))t.style.height=e?"auto":"0px";else{var i=e?r:0;t.style.height=i+"px"}},e.prototype.onFolderChange_=function(){this.applyModel_()},e}(u.View);e.FolderView=p},"./src/main/js/view/input/checkbox.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.CheckboxInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("ckb","input"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueChange_=r.onValueChange_.bind(r),r.element.classList.add(u());var i=e.createElement("label");i.classList.add(u("l")),r.element.appendChild(i);var o=e.createElement("input");o.classList.add(u("i")),o.type="checkbox",i.appendChild(o),r.inputElem_=o;var a=e.createElement("div");return a.classList.add(u("m")),i.appendChild(a),n.value.emitter.on("change",r.onValueChange_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.inputElem_=s.disposeElement(r.inputElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"inputElement",{get:function(){if(!this.inputElem_)throw a.PaneError.alreadyDisposed();return this.inputElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(!this.inputElem_)throw a.PaneError.alreadyDisposed();this.inputElem_.checked=this.value.rawValue},e.prototype.onValueChange_=function(){this.update()},e}(l.View);e.CheckboxInputView=c},"./src/main/js/view/input/color-picker.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.ColorPickerInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/view/view.ts"),a=o.ClassName("clp","input"),l=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onFoldableChange_=r.onFoldableChange_.bind(r),r.onValueChange_=r.onValueChange_.bind(r),r.value=n.value,r.value.emitter.on("change",r.onValueChange_),r.foldable=n.foldable,r.foldable.emitter.on("change",r.onFoldableChange_),r.element.classList.add(a());var i=e.createElement("div");i.classList.add(a("hsv"));var o=e.createElement("div");o.classList.add(a("sv")),r.svPaletteView_=n.svPaletteInputView,o.appendChild(r.svPaletteView_.element),i.appendChild(o);var s=e.createElement("div");s.classList.add(a("h")),r.hPaletteView_=n.hPaletteInputView,s.appendChild(r.hPaletteView_.element),i.appendChild(s),r.element.appendChild(i);var l=e.createElement("div");return l.classList.add(a("rgb")),r.rgbTextView_=n.rgbTextView,l.appendChild(r.rgbTextView_.element),r.element.appendChild(l),r.update(),r}return i(e,t),Object.defineProperty(e.prototype,"allFocusableElements",{get:function(){return[].concat(this.hPaletteView_.canvasElement,this.rgbTextView_.inputElements,this.svPaletteView_.canvasElement)},enumerable:!1,configurable:!0}),e.prototype.update=function(){this.foldable.expanded?this.element.classList.add(a(void 0,"expanded")):this.element.classList.remove(a(void 0,"expanded"))},e.prototype.onValueChange_=function(){this.update()},e.prototype.onFoldableChange_=function(){this.update()},e}(s.View);e.ColorPickerInputView=l},"./src/main/js/view/input/color-swatch-text.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.ColorSwatchTextInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/view/view.ts"),a=o.ClassName("cswtxt","input"),l=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.element.classList.add(a());var i=e.createElement("div");i.classList.add(a("s")),r.swatchInputView_=n.swatchInputView,i.appendChild(r.swatchInputView_.element),r.element.appendChild(i);var o=e.createElement("div");return o.classList.add(a("t")),r.textInputView=n.textInputView,o.appendChild(r.textInputView.element),r.element.appendChild(o),r}return i(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.textInputView.value},enumerable:!1,configurable:!0}),e.prototype.update=function(){this.swatchInputView_.update(),this.textInputView.update()},e}(s.View);e.ColorSwatchTextInputView=l},"./src/main/js/view/input/color-swatch.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.ColorSwatchInputView=void 0;var o=n("./src/main/js/converter/color.ts"),s=n("./src/main/js/misc/class-name.ts"),a=n("./src/main/js/misc/disposing-util.ts"),l=n("./src/main/js/misc/pane-error.ts"),u=n("./src/main/js/view/view.ts"),c=s.ClassName("csw","input"),p=function(t){function e(e,n){var r=t.call(this,e,n)||this;if(null===r.element)throw l.PaneError.alreadyDisposed();r.onValueChange_=r.onValueChange_.bind(r),n.value.emitter.on("change",r.onValueChange_),r.value=n.value,r.element.classList.add(c());var i=e.createElement("div");i.classList.add(c("sw")),r.element.appendChild(i),r.swatchElem_=i;var o=e.createElement("button");o.classList.add(c("b")),r.element.appendChild(o),r.buttonElem_=o;var s=e.createElement("div");return s.classList.add(c("p")),r.pickerView_=n.pickerInputView,s.appendChild(r.pickerView_.element),r.element.appendChild(s),r.update(),n.disposable.emitter.on("dispose",(function(){r.buttonElem_=a.disposeElement(r.buttonElem_),r.swatchElem_=a.disposeElement(r.swatchElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"buttonElement",{get:function(){if(null===this.buttonElem_)throw l.PaneError.alreadyDisposed();return this.buttonElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(!this.swatchElem_)throw l.PaneError.alreadyDisposed();var t=this.value.rawValue;this.swatchElem_.style.backgroundColor=o.toHexRgbString(t)},e.prototype.onValueChange_=function(){this.update()},e}(u.View);e.ColorSwatchInputView=p},"./src/main/js/view/input/h-palette.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.HPaletteInputView=void 0;var o=n("./src/main/js/formatter/color.ts"),s=n("./src/main/js/misc/class-name.ts"),a=n("./src/main/js/misc/color-model.ts"),l=n("./src/main/js/misc/disposing-util.ts"),u=n("./src/main/js/misc/dom-util.ts"),c=n("./src/main/js/misc/number-util.ts"),p=n("./src/main/js/misc/pane-error.ts"),d=n("./src/main/js/view/view.ts"),m=s.ClassName("hpl","input"),f=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueChange_=r.onValueChange_.bind(r),r.value=n.value,r.value.emitter.on("change",r.onValueChange_),r.element.classList.add(m());var i=e.createElement("canvas");i.classList.add(m("c")),i.tabIndex=-1,r.element.appendChild(i),r.canvasElem_=i;var o=e.createElement("div");return o.classList.add(m("m")),r.element.appendChild(o),r.markerElem_=o,r.update(),n.disposable.emitter.on("dispose",(function(){r.canvasElem_=l.disposeElement(r.canvasElem_),r.markerElem_=l.disposeElement(r.markerElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"canvasElement",{get:function(){if(!this.canvasElem_)throw p.PaneError.alreadyDisposed();return this.canvasElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(!this.markerElem_)throw p.PaneError.alreadyDisposed();var t=u.getCanvasContext(this.canvasElement);if(t){for(var e=this.canvasElement.width,n=this.canvasElement.height,r=Math.ceil(n/64),i=0;i<64;i++){var s=c.NumberUtil.map(i,0,63,0,360),l=a.hsvToRgb(s,100,100);t.fillStyle=o.ColorFormatter.rgb.apply(o.ColorFormatter,l);var d=Math.floor(c.NumberUtil.map(i,0,63,0,n-r));t.fillRect(0,d,e,r)}var m=this.value.rawValue.getComponents("hsv"),f=c.NumberUtil.map(m[0],0,360,0,100);this.markerElem_.style.top=f+"%"}},e.prototype.onValueChange_=function(){this.update()},e}(d.View);e.HPaletteInputView=f},"./src/main/js/view/input/list.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.ListInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("lst","input"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueChange_=r.onValueChange_.bind(r),r.element.classList.add(u()),r.stringifyValue_=n.stringifyValue;var i=e.createElement("select");i.classList.add(u("s")),n.options.forEach((function(t,n){var o=e.createElement("option");o.dataset.index=String(n),o.textContent=t.text,o.value=r.stringifyValue_(t.value),i.appendChild(o)})),r.element.appendChild(i),r.selectElem_=i;var o=e.createElement("div");return o.classList.add(u("m")),r.element.appendChild(o),n.value.emitter.on("change",r.onValueChange_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.selectElem_=s.disposeElement(r.selectElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"selectElement",{get:function(){if(!this.selectElem_)throw a.PaneError.alreadyDisposed();return this.selectElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(!this.selectElem_)throw a.PaneError.alreadyDisposed();this.selectElem_.value=this.stringifyValue_(this.value.rawValue)},e.prototype.onValueChange_=function(){this.update()},e}(l.View);e.ListInputView=c},"./src/main/js/view/input/point-2d-pad-text.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Point2dPadTextInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/dom-util.ts"),a=n("./src/main/js/view/view.ts"),l=o.ClassName("p2dpadtxt","input"),u=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.element.classList.add(l());var i=e.createElement("div");i.classList.add(l("w")),r.element.appendChild(i);var o=e.createElement("button");o.classList.add(l("b")),o.appendChild(s.createSvgIconElement(e,"p2dpad")),i.appendChild(o),r.padButtonElem_=o;var a=e.createElement("div");a.classList.add(l("p")),i.appendChild(a),r.padInputView_=n.padInputView,a.appendChild(r.padInputView_.element);var u=e.createElement("div");return u.classList.add(l("t")),r.textInputView_=n.textInputView,u.appendChild(r.textInputView_.element),r.element.appendChild(u),r}return i(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.textInputView_.value},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"padButtonElement",{get:function(){return this.padButtonElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){this.padInputView_.update(),this.textInputView_.update()},e}(a.View);e.Point2dPadTextInputView=u},"./src/main/js/view/input/point-2d-pad.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Point2dPadInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/dom-util.ts"),l=n("./src/main/js/misc/number-util.ts"),u=n("./src/main/js/misc/pane-error.ts"),c=n("./src/main/js/view/view.ts"),p=a.SVG_NS,d=o.ClassName("p2dpad","input"),m=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onFoldableChange_=r.onFoldableChange_.bind(r),r.onValueChange_=r.onValueChange_.bind(r),r.foldable=n.foldable,r.foldable.emitter.on("change",r.onFoldableChange_),r.maxValue_=n.maxValue,r.element.classList.add(d());var i=e.createElement("div");i.classList.add(d("p")),r.element.appendChild(i),r.padElem_=i;var o=e.createElementNS(p,"svg");o.classList.add(d("g")),r.padElem_.appendChild(o),r.svgElem_=o;var a=e.createElementNS(p,"line");a.classList.add(d("ax")),a.setAttributeNS(null,"x1","0"),a.setAttributeNS(null,"y1","50%"),a.setAttributeNS(null,"x2","100%"),a.setAttributeNS(null,"y2","50%"),r.svgElem_.appendChild(a);var l=e.createElementNS(p,"line");l.classList.add(d("ax")),l.setAttributeNS(null,"x1","50%"),l.setAttributeNS(null,"y1","0"),l.setAttributeNS(null,"x2","50%"),l.setAttributeNS(null,"y2","100%"),r.svgElem_.appendChild(l);var u=e.createElementNS(p,"line");u.classList.add(d("l")),u.setAttributeNS(null,"x1","50%"),u.setAttributeNS(null,"y1","50%"),r.svgElem_.appendChild(u),r.lineElem_=u;var c=e.createElementNS(p,"circle");return c.classList.add(d("m")),c.setAttributeNS(null,"r","2px"),r.svgElem_.appendChild(c),r.markerElem_=c,n.value.emitter.on("change",r.onValueChange_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.padElem_=s.disposeElement(r.padElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"padElement",{get:function(){if(!this.padElem_)throw u.PaneError.alreadyDisposed();return this.padElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){this.foldable.expanded?this.element.classList.add(d(void 0,"expanded")):this.element.classList.remove(d(void 0,"expanded"));var t=this.lineElem_,e=this.markerElem_;if(!t||!e)throw u.PaneError.alreadyDisposed();var n=this.value.rawValue.getComponents(),r=n[0],i=n[1],o=this.maxValue_,s=l.NumberUtil.map(r,-o,+o,0,100),a=l.NumberUtil.map(i,-o,+o,0,100);t.setAttributeNS(null,"x2",s+"%"),t.setAttributeNS(null,"y2",a+"%"),e.setAttributeNS(null,"cx",s+"%"),e.setAttributeNS(null,"cy",a+"%")},e.prototype.onValueChange_=function(){this.update()},e.prototype.onFoldableChange_=function(){this.update()},e}(c.View);e.Point2dPadInputView=m},"./src/main/js/view/input/point-2d-text.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.Point2dTextInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=["X","Y"],c=o.ClassName("p2dtxt","input"),p=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueChange_=r.onValueChange_.bind(r),r.formatters_=[n.xFormatter,n.yFormatter],r.element.classList.add(c());var i=u.map((function(){var t=e.createElement("input");return t.classList.add(c("i")),t.type="text",t}));return u.forEach((function(t,n){var o=e.createElement("div");o.classList.add(c("w")),o.appendChild(i[n]),r.element.appendChild(o)})),r.inputElems_=[i[0],i[1]],n.value.emitter.on("change",r.onValueChange_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.inputElems_&&(r.inputElems_.forEach((function(t){s.disposeElement(t)})),r.inputElems_=null)})),r}return i(e,t),Object.defineProperty(e.prototype,"inputElements",{get:function(){if(!this.inputElems_)throw a.PaneError.alreadyDisposed();return this.inputElems_},enumerable:!1,configurable:!0}),e.prototype.update=function(){var t=this,e=this.inputElems_;if(!e)throw a.PaneError.alreadyDisposed();this.value.rawValue.getComponents().forEach((function(n,r){e[r].value=t.formatters_[r].format(n)}))},e.prototype.onValueChange_=function(){this.update()},e}(l.View);e.Point2dTextInputView=p},"./src/main/js/view/input/rgb-text.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.RgbTextInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("rgbtxt","input"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueChange_=r.onValueChange_.bind(r),r.formatter_=n.formatter,r.element.classList.add(u());var i=e.createElement("div");i.classList.add(u("l")),i.textContent="RGB",r.element.appendChild(i);var o=e.createElement("div");o.classList.add(u("w")),r.element.appendChild(o);var a=[0,1,2].map((function(){var t=e.createElement("input");return t.classList.add(u("i")),t.type="text",t}));return a.forEach((function(t){o.appendChild(t)})),r.inputElems_=[a[0],a[1],a[2]],n.value.emitter.on("change",r.onValueChange_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.inputElems_&&(r.inputElems_.forEach((function(t){s.disposeElement(t)})),r.inputElems_=null)})),r}return i(e,t),Object.defineProperty(e.prototype,"inputElements",{get:function(){if(!this.inputElems_)throw a.PaneError.alreadyDisposed();return this.inputElems_},enumerable:!1,configurable:!0}),e.prototype.update=function(){var t=this,e=this.inputElems_;if(!e)throw a.PaneError.alreadyDisposed();this.value.rawValue.getComponents("rgb").forEach((function(n,r){e[r].value=t.formatter_.format(n)}))},e.prototype.onValueChange_=function(){this.update()},e}(l.View);e.RgbTextInputView=c},"./src/main/js/view/input/slider-text.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.SliderTextInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/view/view.ts"),a=o.ClassName("sldtxt","input"),l=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.element.classList.add(a());var i=e.createElement("div");i.classList.add(a("s")),r.sliderInputView_=n.sliderInputView,i.appendChild(r.sliderInputView_.element),r.element.appendChild(i);var o=e.createElement("div");return o.classList.add(a("t")),r.textInputView_=n.textInputView,o.appendChild(r.textInputView_.element),r.element.appendChild(o),r}return i(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.sliderInputView_.value},enumerable:!1,configurable:!0}),e.prototype.update=function(){this.sliderInputView_.update(),this.textInputView_.update()},e}(s.View);e.SliderTextInputView=l},"./src/main/js/view/input/slider.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.SliderInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/number-util.ts"),l=n("./src/main/js/misc/pane-error.ts"),u=n("./src/main/js/view/view.ts"),c=o.ClassName("sld","input"),p=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueChange_=r.onValueChange_.bind(r),r.minValue_=n.minValue,r.maxValue_=n.maxValue,r.element.classList.add(c());var i=e.createElement("div");i.classList.add(c("o")),r.element.appendChild(i),r.outerElem_=i;var o=e.createElement("div");return o.classList.add(c("i")),r.outerElem_.appendChild(o),r.innerElem_=o,n.value.emitter.on("change",r.onValueChange_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.innerElem_=s.disposeElement(r.innerElem_),r.outerElem_=s.disposeElement(r.outerElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"outerElement",{get:function(){if(!this.outerElem_)throw l.PaneError.alreadyDisposed();return this.outerElem_},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"innerElement",{get:function(){if(!this.innerElem_)throw l.PaneError.alreadyDisposed();return this.innerElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(!this.innerElem_)throw l.PaneError.alreadyDisposed();var t=a.NumberUtil.map(this.value.rawValue,this.minValue_,this.maxValue_,0,100);this.innerElem_.style.width=t+"%"},e.prototype.onValueChange_=function(){this.update()},e}(u.View);e.SliderInputView=p},"./src/main/js/view/input/sv-palette.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.SvPaletteInputView=void 0;var o=n("./src/main/js/formatter/color.ts"),s=n("./src/main/js/misc/class-name.ts"),a=n("./src/main/js/misc/color-model.ts"),l=n("./src/main/js/misc/disposing-util.ts"),u=n("./src/main/js/misc/dom-util.ts"),c=n("./src/main/js/misc/number-util.ts"),p=n("./src/main/js/misc/pane-error.ts"),d=n("./src/main/js/view/view.ts"),m=s.ClassName("svp","input"),f=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueChange_=r.onValueChange_.bind(r),r.value=n.value,r.value.emitter.on("change",r.onValueChange_),r.element.classList.add(m());var i=e.createElement("canvas");i.classList.add(m("c")),i.tabIndex=-1,r.element.appendChild(i),r.canvasElem_=i;var o=e.createElement("div");return o.classList.add(m("m")),r.element.appendChild(o),r.markerElem_=o,r.update(),n.disposable.emitter.on("dispose",(function(){r.canvasElem_=l.disposeElement(r.canvasElem_),r.markerElem_=l.disposeElement(r.markerElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"canvasElement",{get:function(){if(!this.canvasElem_)throw p.PaneError.alreadyDisposed();return this.canvasElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(!this.markerElem_)throw p.PaneError.alreadyDisposed();var t=u.getCanvasContext(this.canvasElement);if(t){for(var e=this.value.rawValue.getComponents("hsv"),n=this.canvasElement.width,r=this.canvasElement.height,i=Math.ceil(n/64),s=Math.ceil(r/64),l=0;l<64;l++)for(var d=0;d<64;d++){var m=c.NumberUtil.map(d,0,63,0,100),f=c.NumberUtil.map(l,0,63,100,0),h=a.hsvToRgb(e[0],m,f);t.fillStyle=o.ColorFormatter.rgb.apply(o.ColorFormatter,h);var v=Math.floor(c.NumberUtil.map(d,0,63,0,n-i)),b=Math.floor(c.NumberUtil.map(l,0,63,0,r-s));t.fillRect(v,b,i,s)}var g=c.NumberUtil.map(e[1],0,100,0,100);this.markerElem_.style.left=g+"%";var _=c.NumberUtil.map(e[2],0,100,100,0);this.markerElem_.style.top=_+"%"}},e.prototype.onValueChange_=function(){this.update()},e}(d.View);e.SvPaletteInputView=f},"./src/main/js/view/input/text.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.TextInputView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("txt","input"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueChange_=r.onValueChange_.bind(r),r.formatter_=n.formatter,r.element.classList.add(u());var i=e.createElement("input");return i.classList.add(u("i")),i.type="text",r.element.appendChild(i),r.inputElem_=i,n.value.emitter.on("change",r.onValueChange_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.inputElem_=s.disposeElement(r.inputElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"inputElement",{get:function(){if(!this.inputElem_)throw a.PaneError.alreadyDisposed();return this.inputElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){if(!this.inputElem_)throw a.PaneError.alreadyDisposed();this.inputElem_.value=this.formatter_.format(this.value.rawValue)},e.prototype.onValueChange_=function(){this.update()},e}(l.View);e.TextInputView=c},"./src/main/js/view/labeled.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.LabeledView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/view/view.ts"),a=o.ClassName("lbl"),l=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.label=n.label,r.element.classList.add(a());var i=e.createElement("div");i.classList.add(a("l")),i.textContent=r.label,r.element.appendChild(i);var o=e.createElement("div");return o.classList.add(a("v")),o.appendChild(n.view.element),r.element.appendChild(o),r}return i(e,t),e}(s.View);e.LabeledView=l},"./src/main/js/view/monitor/graph.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.GraphMonitorView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/dom-util.ts"),l=n("./src/main/js/misc/number-util.ts"),u=n("./src/main/js/misc/pane-error.ts"),c=n("./src/main/js/view/view.ts"),p=a.SVG_NS,d=o.ClassName("grp","monitor"),m=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onCursorChange_=r.onCursorChange_.bind(r),r.onValueUpdate_=r.onValueUpdate_.bind(r),r.element.classList.add(d()),r.formatter_=n.formatter,r.minValue_=n.minValue,r.maxValue_=n.maxValue,r.cursor_=n.cursor,r.cursor_.emitter.on("change",r.onCursorChange_);var i=e.createElementNS(p,"svg");i.classList.add(d("g")),r.element.appendChild(i),r.svgElem_=i;var o=e.createElementNS(p,"polyline");r.svgElem_.appendChild(o),r.lineElem_=o;var a=e.createElement("div");return a.classList.add(d("t")),r.element.appendChild(a),r.tooltipElem_=a,n.value.emitter.on("update",r.onValueUpdate_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.lineElem_=s.disposeElement(r.lineElem_),r.svgElem_=s.disposeElement(r.svgElem_),r.tooltipElem_=s.disposeElement(r.tooltipElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"graphElement",{get:function(){if(!this.svgElem_)throw u.PaneError.alreadyDisposed();return this.svgElem_},enumerable:!1,configurable:!0}),e.prototype.update=function(){var t=this.tooltipElem_;if(!this.lineElem_||!this.svgElem_||!t)throw u.PaneError.alreadyDisposed();var e=this.svgElem_.getBoundingClientRect(),n=this.value.totalCount-1,r=this.minValue_,i=this.maxValue_;this.lineElem_.setAttributeNS(null,"points",this.value.rawValues.map((function(t,o){return[l.NumberUtil.map(o,0,n,0,e.width),l.NumberUtil.map(t,r,i,e.height,0)].join(",")})).join(" "));var o=this.value.rawValues[this.cursor_.index];if(void 0!==o){t.classList.add(d("t","valid"));var s=l.NumberUtil.map(this.cursor_.index,0,n,0,e.width),a=l.NumberUtil.map(o,r,i,e.height,0);t.style.left=s+"px",t.style.top=a+"px",t.textContent=""+this.formatter_.format(o)}else t.classList.remove(d("t","valid"))},e.prototype.onValueUpdate_=function(){this.update()},e.prototype.onCursorChange_=function(){this.update()},e}(c.View);e.GraphMonitorView=m},"./src/main/js/view/monitor/multi-log.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.MultiLogMonitorView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("mll","monitor"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueUpdate_=r.onValueUpdate_.bind(r),r.formatter_=n.formatter,r.element.classList.add(u());var i=e.createElement("textarea");return i.classList.add(u("i")),i.readOnly=!0,r.element.appendChild(i),r.textareaElem_=i,n.value.emitter.on("update",r.onValueUpdate_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.textareaElem_=s.disposeElement(r.textareaElem_)})),r}return i(e,t),e.prototype.update=function(){var t=this,e=this.textareaElem_;if(!e)throw a.PaneError.alreadyDisposed();var n=e.scrollTop===e.scrollHeight-e.clientHeight;e.textContent=this.value.rawValues.map((function(e){return t.formatter_.format(e)})).join("\n"),n&&(e.scrollTop=e.scrollHeight)},e.prototype.onValueUpdate_=function(){this.update()},e}(l.View);e.MultiLogMonitorView=c},"./src/main/js/view/monitor/single-log.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.SingleLogMonitorView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("sgl","monitor"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onValueUpdate_=r.onValueUpdate_.bind(r),r.formatter_=n.formatter,r.element.classList.add(u());var i=e.createElement("input");return i.classList.add(u("i")),i.readOnly=!0,i.type="text",r.element.appendChild(i),r.inputElem_=i,n.value.emitter.on("update",r.onValueUpdate_),r.value=n.value,r.update(),n.disposable.emitter.on("dispose",(function(){r.inputElem_=s.disposeElement(r.inputElem_)})),r}return i(e,t),e.prototype.update=function(){if(!this.inputElem_)throw a.PaneError.alreadyDisposed();var t=this.value.rawValues;this.inputElem_.value=t.length>0?this.formatter_.format(t[t.length-1]):""},e.prototype.onValueUpdate_=function(){this.update()},e}(l.View);e.SingleLogMonitorView=c},"./src/main/js/view/root.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.RootView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/misc/disposing-util.ts"),a=n("./src/main/js/misc/pane-error.ts"),l=n("./src/main/js/view/view.ts"),u=o.ClassName("rot"),c=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.onFolderChange_=r.onFolderChange_.bind(r),r.folder_=n.folder,r.folder_&&r.folder_.emitter.on("change",r.onFolderChange_),r.element.classList.add(u());var i=r.folder_;if(i){var o=e.createElement("button");o.classList.add(u("t")),o.textContent=i.title,r.element.appendChild(o);var a=e.createElement("div");a.classList.add(u("m")),o.appendChild(a),r.titleElem_=o}var l=e.createElement("div");return l.classList.add(u("c")),r.element.appendChild(l),r.containerElem_=l,r.applyModel_(),n.disposable.emitter.on("dispose",(function(){r.containerElem_=s.disposeElement(r.containerElem_),r.folder_=null,r.titleElem_=s.disposeElement(r.titleElem_)})),r}return i(e,t),Object.defineProperty(e.prototype,"titleElement",{get:function(){return this.titleElem_},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"containerElement",{get:function(){if(!this.containerElem_)throw a.PaneError.alreadyDisposed();return this.containerElem_},enumerable:!1,configurable:!0}),e.prototype.applyModel_=function(){var t=!this.folder_||this.folder_.expanded,e=u(void 0,"expanded");t?this.element.classList.add(e):this.element.classList.remove(e)},e.prototype.onFolderChange_=function(){this.applyModel_()},e}(l.View);e.RootView=c},"./src/main/js/view/separator.ts":function(t,e,n){"use strict";var r,i=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},r(t,e)},function(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.SeparatorView=void 0;var o=n("./src/main/js/misc/class-name.ts"),s=n("./src/main/js/view/view.ts"),a=o.ClassName("spt"),l=function(t){function e(e,n){var r=t.call(this,e,n)||this;r.element.classList.add(a());var i=e.createElement("hr");return i.classList.add(a("r")),r.element.appendChild(i),r}return i(e,t),e}(s.View);e.SeparatorView=l},"./src/main/js/view/view.ts":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.View=void 0;var r=n("./src/main/js/misc/disposing-util.ts"),i=n("./src/main/js/misc/pane-error.ts"),o=function(){function t(t,e){this.onDispose_=this.onDispose_.bind(this),this.disposable_=e.disposable,this.disposable_.emitter.on("dispose",this.onDispose_),this.doc_=t,this.elem_=this.doc_.createElement("div")}return Object.defineProperty(t.prototype,"document",{get:function(){if(!this.doc_)throw i.PaneError.alreadyDisposed();return this.doc_},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){if(!this.elem_)throw i.PaneError.alreadyDisposed();return this.elem_},enumerable:!1,configurable:!0}),t.prototype.onDispose_=function(){this.doc_=null,this.elem_=r.disposeElement(this.elem_)},t}();e.View=o},"./src/main/sass/bundle.scss":function(t,e,n){(t.exports=n("./node_modules/css-loader/lib/css-base.js")(!1)).push([t.i,".tp-fldv_t,.tp-rotv_t{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--folder-background-color);color:var(--folder-foreground-color);cursor:pointer;display:block;height:24px;line-height:24px;overflow:hidden;padding-left:30px;position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.tp-fldv_t:hover,.tp-rotv_t:hover{background-color:var(--folder-background-color-hover)}.tp-fldv_t:focus,.tp-rotv_t:focus{background-color:var(--folder-background-color-focus)}.tp-fldv_t:active,.tp-rotv_t:active{background-color:var(--folder-background-color-active)}.tp-fldv_m,.tp-rotv_m{background:linear-gradient(to left, var(--folder-foreground-color), var(--folder-foreground-color) 2px, transparent 2px, transparent 4px, var(--folder-foreground-color) 4px);border-radius:2px;bottom:0;content:'';display:block;height:6px;left:12px;margin:auto;position:absolute;top:0;-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-transition:-webkit-transform 0.2s ease-in-out;transition:-webkit-transform 0.2s ease-in-out;transition:transform 0.2s ease-in-out;transition:transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;width:6px}.tp-fldv.tp-fldv-expanded .tp-fldv_m,.tp-rotv.tp-rotv-expanded .tp-rotv_m{-webkit-transform:none;transform:none}.tp-fldv_c>.tp-fldv:first-child,.tp-rotv_c>.tp-fldv:first-child{margin-top:-4px}.tp-fldv_c>.tp-fldv:last-child,.tp-rotv_c>.tp-fldv:last-child{margin-bottom:-4px}.tp-fldv_c>*+*,.tp-rotv_c>*+*{margin-top:4px}.tp-fldv_c>.tp-fldv+.tp-fldv,.tp-rotv_c>.tp-fldv+.tp-fldv{margin-top:0}.tp-fldv_c>.tp-sptv+.tp-sptv,.tp-rotv_c>.tp-sptv+.tp-sptv{margin-top:0}.tp-btnv{padding:0 4px}.tp-btnv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--button-background-color);border-radius:2px;color:var(--button-foreground-color);cursor:pointer;display:block;font-weight:bold;height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.tp-btnv_b:hover{background-color:var(--button-background-color-hover)}.tp-btnv_b:focus{background-color:var(--button-background-color-focus)}.tp-btnv_b:active{background-color:var(--button-background-color-active)}.tp-dfwv{position:absolute;top:8px;right:8px;width:256px}.tp-fldv_t{-webkit-transition:border-radius 0.2s ease-in-out 0.2s;transition:border-radius 0.2s ease-in-out 0.2s}.tp-fldv.tp-fldv-expanded .tp-fldv_t{-webkit-transition:border-radius 0s;transition:border-radius 0s}.tp-fldv_c{border-left:var(--folder-background-color) solid 4px;box-sizing:border-box;height:0;opacity:0;overflow:hidden;padding-bottom:0;padding-top:0;position:relative;-webkit-transition:height 0.2s ease-in-out, opacity 0.2s linear, padding 0.2s ease-in-out;transition:height 0.2s ease-in-out, opacity 0.2s linear, padding 0.2s ease-in-out}.tp-fldv_t:hover+.tp-fldv_c{border-left-color:var(--folder-background-color-hover)}.tp-fldv_t:focus+.tp-fldv_c{border-left-color:var(--folder-background-color-focus)}.tp-fldv_t:active+.tp-fldv_c{border-left-color:var(--folder-background-color-active)}.tp-fldv.tp-fldv-expanded .tp-fldv_c{opacity:1;overflow:visible;padding-bottom:4px;padding-top:4px;-webkit-transform:none;transform:none;-webkit-transition:height 0.2s ease-in-out, opacity 0.2s linear 0.2s, padding 0.2s ease-in-out;transition:height 0.2s ease-in-out, opacity 0.2s linear 0.2s, padding 0.2s ease-in-out}.tp-ckbiv_l{display:block;position:relative}.tp-ckbiv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background:red;left:0;opacity:0;position:absolute;top:0}.tp-ckbiv_m{background-color:var(--input-background-color);border-radius:2px;cursor:pointer;display:block;height:20px;position:relative;width:20px}.tp-ckbiv_m::before{background-color:var(--input-foreground-color);border-radius:2px;bottom:4px;content:'';display:block;left:4px;opacity:0;position:absolute;right:4px;top:4px}.tp-ckbiv_i:hover+.tp-ckbiv_m{background-color:var(--input-background-color-hover)}.tp-ckbiv_i:focus+.tp-ckbiv_m{background-color:var(--input-background-color-focus)}.tp-ckbiv_i:active+.tp-ckbiv_m{background-color:var(--input-background-color-active)}.tp-ckbiv_i:checked+.tp-ckbiv_m::before{opacity:1}.tp-clpiv{background-color:var(--base-background-color);border-radius:6px;box-shadow:0 2px 4px var(--base-shadow-color);display:none;padding:4px;position:relative;visibility:hidden;z-index:1000}.tp-clpiv.tp-clpiv-expanded{display:block;visibility:visible}.tp-clpiv_hsv{display:-webkit-box;display:flex}.tp-clpiv_h{margin-left:4px}.tp-clpiv_rgb{display:-webkit-box;display:flex;margin-top:4px}.tp-hpliv{border-radius:2px;overflow:hidden;position:relative}.tp-hpliv_c{cursor:crosshair;display:block;height:80px;width:20px}.tp-hpliv_m{border-radius:100%;border:rgba(255,255,255,0.75) solid 1px;box-shadow:0 1px 2px rgba(0,0,0,0.1);height:4px;left:50%;margin-left:-3px;margin-top:-3px;pointer-events:none;position:absolute;width:4px}.tp-svpiv{border-radius:2px;overflow:hidden;position:relative}.tp-svpiv_c{cursor:crosshair;display:block;height:80px;width:100%}.tp-svpiv_m{border-radius:100%;border:rgba(255,255,255,0.75) solid 1px;box-shadow:0 1px 2px rgba(0,0,0,0.1);height:4px;margin-left:-3px;margin-top:-3px;pointer-events:none;position:absolute;width:4px}.tp-lstiv{display:block;padding:0;position:relative}.tp-lstiv_s{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--button-background-color);border-radius:2px;color:var(--button-foreground-color);cursor:pointer;display:block;height:20px;line-height:20px;padding:0 4px;width:100%}.tp-lstiv_s:hover{background-color:var(--button-background-color-hover)}.tp-lstiv_s:focus{background-color:var(--button-background-color-focus)}.tp-lstiv_s:active{background-color:var(--button-background-color-active)}.tp-lstiv_m{border-color:var(--button-foreground-color) transparent transparent;border-style:solid;border-width:3px;bottom:0;box-sizing:border-box;height:6px;margin:auto;pointer-events:none;position:absolute;right:6px;top:3px;width:6px}.tp-rgbtxtiv{display:-webkit-box;display:flex}.tp-rgbtxtiv_l{color:var(--label-foreground-color);display:inline;line-height:20px;margin-right:8px}.tp-rgbtxtiv_w{display:-webkit-box;display:flex}.tp-rgbtxtiv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;width:100%;-webkit-box-flex:1;flex:1;padding:0 4px;width:100%}.tp-rgbtxtiv_i:hover{background-color:var(--input-background-color-hover)}.tp-rgbtxtiv_i:focus{background-color:var(--input-background-color-focus)}.tp-rgbtxtiv_i:active{background-color:var(--input-background-color-active)}.tp-rgbtxtiv_i:nth-child(1){border-bottom-right-radius:0;border-top-right-radius:0}.tp-rgbtxtiv_i:nth-child(2){border-radius:0}.tp-rgbtxtiv_i:nth-child(3){border-bottom-left-radius:0;border-top-left-radius:0}.tp-rgbtxtiv_i+.tp-rgbtxtiv_i{margin-left:1px}.tp-p2dpadiv{background-color:var(--base-background-color);border-radius:6px;box-shadow:0 2px 4px var(--base-shadow-color);display:none;padding:4px 4px 4px 28px;position:relative;visibility:hidden;z-index:1000}.tp-p2dpadiv.tp-p2dpadiv-expanded{display:block;visibility:visible}.tp-p2dpadiv_p{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;width:100%;cursor:crosshair;height:0;overflow:hidden;padding-bottom:100%;position:relative}.tp-p2dpadiv_p:hover{background-color:var(--input-background-color-hover)}.tp-p2dpadiv_p:focus{background-color:var(--input-background-color-focus)}.tp-p2dpadiv_p:active{background-color:var(--input-background-color-active)}.tp-p2dpadiv_g{display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.tp-p2dpadiv_ax{stroke:var(--input-guide-color)}.tp-p2dpadiv_l{stroke:var(--input-foreground-color);stroke-linecap:round;stroke-dasharray:1px 3px}.tp-p2dpadiv_m{fill:var(--input-foreground-color)}.tp-p2dpadtxtiv{display:-webkit-box;display:flex;position:relative}.tp-p2dpadtxtiv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--button-background-color);border-radius:2px;color:var(--button-foreground-color);cursor:pointer;display:block;font-weight:bold;height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:20px;position:relative;width:20px}.tp-p2dpadtxtiv_b:hover{background-color:var(--button-background-color-hover)}.tp-p2dpadtxtiv_b:focus{background-color:var(--button-background-color-focus)}.tp-p2dpadtxtiv_b:active{background-color:var(--button-background-color-active)}.tp-p2dpadtxtiv_b svg{display:block;height:16px;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%;width:16px}.tp-p2dpadtxtiv_p{left:-4px;position:absolute;right:-4px;top:20px}.tp-p2dpadtxtiv_t{margin-left:4px}.tp-p2dtxtiv{display:-webkit-box;display:flex}.tp-p2dtxtiv_w{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex}.tp-p2dtxtiv_w:nth-child(1){margin-right:1px}.tp-p2dtxtiv_w:nth-child(2){margin-left:1px}.tp-p2dtxtiv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;width:100%;padding:0 4px;width:100%}.tp-p2dtxtiv_i:hover{background-color:var(--input-background-color-hover)}.tp-p2dtxtiv_i:focus{background-color:var(--input-background-color-focus)}.tp-p2dtxtiv_i:active{background-color:var(--input-background-color-active)}.tp-p2dtxtiv_w:nth-child(1) .tp-p2dtxtiv_i{border-top-right-radius:0;border-bottom-right-radius:0}.tp-p2dtxtiv_w:nth-child(2) .tp-p2dtxtiv_i{border-top-left-radius:0;border-bottom-left-radius:0}.tp-sldiv{display:block;padding:0}.tp-sldiv_o{box-sizing:border-box;cursor:pointer;height:20px;margin:0 6px;position:relative}.tp-sldiv_o::before{background-color:var(--input-background-color);border-radius:1px;bottom:0;content:'';display:block;height:2px;left:0;margin:auto;position:absolute;right:0;top:0}.tp-sldiv_i{height:100%;left:0;position:absolute;top:0}.tp-sldiv_i::before{background-color:var(--button-background-color);border-radius:2px;bottom:0;content:'';display:block;height:12px;margin:auto;position:absolute;right:-6px;top:0;width:12px}.tp-sldiv_o:hover .tp-sldiv_i::before{background-color:var(--button-background-color-hover)}.tp-sldiv_o:focus .tp-sldiv_i::before{background-color:var(--button-background-color-focus)}.tp-sldiv_o:active .tp-sldiv_i::before{background-color:var(--button-background-color-active)}.tp-txtiv{display:block;padding:0}.tp-txtiv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;width:100%;padding:0 4px}.tp-txtiv_i:hover{background-color:var(--input-background-color-hover)}.tp-txtiv_i:focus{background-color:var(--input-background-color-focus)}.tp-txtiv_i:active{background-color:var(--input-background-color-active)}.tp-cswiv_sw{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--input-background-color);border-radius:2px;box-sizing:border-box;color:var(--input-foreground-color);font-family:inherit;height:20px;line-height:20px;width:100%}.tp-cswiv_sw:hover{background-color:var(--input-background-color-hover)}.tp-cswiv_sw:focus{background-color:var(--input-background-color-focus)}.tp-cswiv_sw:active{background-color:var(--input-background-color-active)}.tp-cswiv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;cursor:pointer;display:block;height:20px;left:0;margin:0;outline:none;padding:0;position:absolute;top:0;width:20px}.tp-cswiv_b:focus::after{border:rgba(255,255,255,0.75) solid 2px;border-radius:2px;bottom:0;content:'';display:block;left:0;position:absolute;right:0;top:0}.tp-cswiv_p{left:-4px;position:absolute;right:-4px;top:20px}.tp-cswtxtiv{display:-webkit-box;display:flex;position:relative}.tp-cswtxtiv_s{-webkit-box-flex:0;flex-grow:0;flex-shrink:0;width:20px}.tp-cswtxtiv_t{-webkit-box-flex:1;flex:1;margin-left:4px}.tp-sldtxtiv{display:-webkit-box;display:flex}.tp-sldtxtiv_s{-webkit-box-flex:2;flex:2}.tp-sldtxtiv_t{-webkit-box-flex:1;flex:1;margin-left:4px}.tp-lblv{-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;padding-left:4px;padding-right:4px}.tp-lblv_l{color:var(--label-foreground-color);-webkit-box-flex:1;flex:1;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;padding-left:4px;padding-right:16px}.tp-lblv_v{-webkit-box-flex:0;flex-grow:0;flex-shrink:0;width:160px}.tp-grpmv{display:block;padding:0;position:relative}.tp-grpmv_g{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--monitor-background-color);border-radius:2px;box-sizing:border-box;color:var(--monitor-foreground-color);height:20px;width:100%;display:block;height:60px}.tp-grpmv_g polyline{fill:none;stroke:var(--monitor-foreground-color);stroke-linejoin:round}.tp-grpmv_t{color:var(--monitor-foreground-color);font-size:0.9em;left:0;pointer-events:none;position:absolute;text-indent:4px;top:0;visibility:hidden}.tp-grpmv_t.tp-grpmv_t-valid{visibility:visible}.tp-grpmv_t::before{background-color:var(--monitor-foreground-color);border-radius:100%;content:'';display:block;height:4px;left:-2px;position:absolute;top:-2px;width:4px}.tp-sglmv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--monitor-background-color);border-radius:2px;box-sizing:border-box;color:var(--monitor-foreground-color);height:20px;width:100%;padding:0 4px}.tp-mllmv_i{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--monitor-background-color);border-radius:2px;box-sizing:border-box;color:var(--monitor-foreground-color);height:20px;width:100%;display:block;height:60px;line-height:20px;padding:0 4px;resize:none;white-space:pre}.tp-cswmv_sw{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0;background-color:var(--monitor-background-color);border-radius:2px;box-sizing:border-box;color:var(--monitor-foreground-color);height:20px;width:100%}.tp-rotv{--font-family: var(--tp-font-family, Roboto Mono,Source Code Pro,Menlo,Courier,monospace);--base-background-color: var(--tp-base-background-color, #2f3137);--base-shadow-color: var(--tp-base-shadow-color, rgba(0,0,0,0.2));--button-background-color: var(--tp-button-background-color, #adafb8);--button-background-color-active: var(--tp-button-background-color-active, #d6d7db);--button-background-color-focus: var(--tp-button-background-color-focus, #c8cad0);--button-background-color-hover: var(--tp-button-background-color-hover, #bbbcc4);--button-foreground-color: var(--tp-button-foreground-color, #2f3137);--folder-background-color: var(--tp-folder-background-color, rgba(200,202,208,0.1));--folder-background-color-active: var(--tp-folder-background-color-active, rgba(200,202,208,0.25));--folder-background-color-focus: var(--tp-folder-background-color-focus, rgba(200,202,208,0.2));--folder-background-color-hover: var(--tp-folder-background-color-hover, rgba(200,202,208,0.15));--folder-foreground-color: var(--tp-folder-foreground-color, #c8cad0);--input-background-color: var(--tp-input-background-color, rgba(200,202,208,0.15));--input-background-color-active: var(--tp-input-background-color-active, rgba(200,202,208,0.35));--input-background-color-focus: var(--tp-input-background-color-focus, rgba(200,202,208,0.25));--input-background-color-hover: var(--tp-input-background-color-hover, rgba(200,202,208,0.15));--input-foreground-color: var(--tp-input-foreground-color, #c8cad0);--input-guide-color: var(--tp-input-guide-color, rgba(47,49,55,0.5));--label-foreground-color: var(--tp-label-foreground-color, rgba(200,202,208,0.8));--monitor-background-color: var(--tp-monitor-background-color, rgba(24,24,27,0.5));--monitor-foreground-color: var(--tp-monitor-foreground-color, rgba(200,202,208,0.7));--separator-color: var(--tp-separator-color, rgba(24,24,27,0.3));background-color:var(--base-background-color);border-radius:6px;box-shadow:0 2px 4px var(--base-shadow-color);font-family:var(--font-family);font-size:11px;font-weight:500;text-align:left}.tp-rotv_t{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top-left-radius:6px;border-top-right-radius:6px}.tp-rotv.tp-rotv-expanded .tp-rotv_t{border-bottom-left-radius:0;border-bottom-right-radius:0}.tp-rotv_m{-webkit-transition:none;transition:none}.tp-rotv_c{box-sizing:border-box;height:0;overflow:hidden;padding-bottom:0;padding-top:0}.tp-rotv_c>.tp-fldv:last-child .tp-fldv_c{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.tp-rotv_c>.tp-fldv:last-child:not(.tp-fldv-expanded) .tp-fldv_t{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.tp-rotv_c>.tp-fldv:first-child .tp-fldv_t{border-top-left-radius:6px;border-top-right-radius:6px}.tp-rotv.tp-rotv-expanded .tp-rotv_c{height:auto;overflow:visible;padding-bottom:4px;padding-top:4px}.tp-sptv_r{background-color:var(--separator-color);border-width:0;display:block;height:4px;margin:0;width:100%}\n",""])}}).default},t.exports=e()}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={exports:{}};return t[r].call(o.exports,o,o.exports,n),o.exports}n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var r={};(()=>{"use strict";n.d(r,{TA:()=>ot,q5:()=>nt,KO:()=>rt,f:()=>it});var t=document.querySelector.bind(document);function e(t,e){return t+Math.random()*(e-t)}function i(t,n){return Math.floor(e(t,n))}function o(t,n){return Math.pow(2,e(Math.log2(t),Math.log2(n)))}function s(){return arguments[Math.random()*arguments.length|0]}var a=[];setTimeout((()=>{delete(a=[nt.exportPreset(),rt.exportPreset()])[0].main_velocity,delete a[0].main_frequency}),1);var l=(e,n)=>{t("."+e).addEventListener("click",(t=>function(t){ot.beginEditingParams(),nt.importPreset(a[0]),rt.importPreset(a[1]);var e=t();e.frequency&&(it.main.frequency=e.frequency),function(t=[]){for(var e in it){var n=!1;"main"!==e&&"carrier"!==e||(n=!0),t.includes(e)&&(n=!0),it[e].folder.expanded=n}}(e.folders),ot.finishEditingParams()}(n)))};l("reset",(function(){return{folders:[],frequency:440}})),l("jump",(function(){var t=[],n=o(200,800);return it.carrier.type=s("triangle","w909","w999"),it.carrier.duration=e(.05,.2),it.carrier.sustain=e(.2,.7),it.carrier.release=e(.05,.15),t.push("mods1"),it.mods1.delay=0,it.mods1.sweep=e(1.1,2.5),it.mods1.sweeptime=e(.1,.3),i(0,2)&&(t.push("mods2"),it.mods2.delay=e(.03,.1),it.mods2.jumpmult=1+e(.1,.3)*s(1,-1)),{folders:t,frequency:n}})),l("coin",(function(){var t=[],n=o(120,1600);return it.carrier.type=s("sine","triangle","w909","w999"),it.carrier.duration=e(.05,.1),it.carrier.sustain=e(.1,.5),it.carrier.release=e(.05,.25),i(0,4)&&(t.push("mods1"),it.mods1.delay=e(.02,.1),it.mods1.jumpmult=e(1.1,1.5),i(0,1.7)&&(t.push("mods2"),it.mods2.delay=e(.02,.1),it.mods2.jumpmult=e(1.1,1.5))),{folders:t,frequency:n}})),l("expl",(function(){var t=[],n=o(100,1e3);if(it.carrier.duration=e(.1,.2),it.carrier.sustain=e(.1,.5),it.carrier.release=e(.2,.3),t.push("distort1"),it.distort1.type=s("crush","shape-boost"),it.distort1.argument=i(1,9),i(0,2))it.carrier.type=s("sine","triangle"),t.push("FM"),it.FM.type=s("n0","np","nb"),it.FM.multiplier=e(3,10),it.FM.release=5,t.push("mods1"),it.mods1.sweep=e(.2,.9),it.mods1.sweeptime=it.carrier.release;else{it.carrier.type=s("n0","np","nb"),t.push("effect1"),it.effect1.type=s("bandpass","lowpass");var r=/low/.test(it.effect1.type);it.effect1.freqmult=r?e(3,8):e(1,1.5),it.effect1.sweep=e(.1,.5),it.effect1.sweeptime=o(.01,.2),it.effect1.q=e(.5,5),i(0,2)&&(t.push("tremolo"),it.tremolo.depth=e(.1,.5),it.tremolo.frequency=o(5,60))}return i(0,2)&&(t.push("vibrato"),it.vibrato.depth=e(.05,.2),it.vibrato.frequency=o(5,60)),{folders:t,frequency:n}})),l("laser",(function(){var t=[],n=o(300,1500);return it.carrier.type=s("sine","triangle","sawtooth","p25","p40"),it.carrier.duration=e(.05,.15),it.carrier.sustain=e(.2,.6),it.carrier.release=e(.02,.1),t.push("mods1"),it.mods1.sweep=o(.25,4),it.mods1.sweeptime=e(.02,.08),i(0,2)&&(t.push("vibrato"),it.vibrato.depth=e(.1,.5),it.vibrato.frequency=o(5,80)),{folders:t,frequency:n}})),l("ouch",(function(){var t=[],n=e(400,1e3);return it.carrier.type=s("n0","np","nb"),it.carrier.duration=o(.03,.06),it.carrier.attack=o(.01,.05),it.carrier.sustain=e(.2,.6),it.carrier.release=o(.01,.1),it.carrier.decay=o(.01,.1),i(0,3)&&(t.push("distort1"),it.distort1.type=s("crush","shape-boost"),it.distort1.argument=i(2,7)),t.push("effect1"),it.effect1.type="bandpass",it.effect1.freqmult=e(1,2),it.effect1.sweep=e(.25,.8),it.effect1.sweeptime=o(.01,.05),it.effect1.q=e(.5,3),{folders:t,frequency:n}})),l("power",(function(){var t=[],n=o(400,1e3);return it.carrier.type=s("sine","square","triangle","sawtooth","w909"),it.carrier.duration=e(.05,.1),it.carrier.sustain=e(.2,.6),it.carrier.release=e(.05,.2),t.push("mods1"),i(0,2)?(it.mods1.sweep=e(1,1.7),it.mods1.sweeptime=e(.05,.2)):(it.mods1.sweep=e(.7,.9),it.mods1.sweeptime=e(.05,.2),it.mods1.delay=e(.05,.2),it.mods1.jumpadd=e(50,150),it.mods1.repeat=30),i(0,2)&&(t.push("tremolo"),it.tremolo.type="square",it.tremolo.depth=o(.025,.5),it.tremolo.frequency=o(10,50)),{folders:t,frequency:n}})),l("ui",(function(){var t=[],n=o(150,3e3);return it.carrier.type=s("sine","square","triangle","sawtooth","p25","w909","n0","n1"),it.carrier.duration=e(.01,.05),it.carrier.attack=e(.01,.05),it.carrier.sustain=e(.2,.6),it.carrier.release=e(.01,.05),it.carrier.decay=o(.01,.1),i(0,2)&&(t.push("mods1"),it.mods1.sweep=e(.5,1.5),it.mods1.sweeptime=e(.01,.5)),{folders:t,frequency:n}}));var u=new Map;function c(t){return u.has(t)||u.set(t,{}),u.get(t)}function p(t,e){var n;return"w"===(e=e.toLowerCase())[0]&&(n=function(t,e){var n=t.createOscillator();return e.length<2&&(e+="9"),n.setPeriodicWave(function(t,e){var n=c(t);n.periodicWaves||(n.periodicWaves={});var r=n.periodicWaves;if(!r[e]){for(var i=new Float32Array(e.length),o=new Float32Array(e.length),s=1;sr.start(t),frequency:r.frequency,connect:t=>i.connect(t),disconnect:()=>{i.disconnect(),r.disconnect(),r.stop()},input:r}}(t,e)),"n"===e[0]&&(n=function(t,e){var n=c(t);n.noiseBuffers||(n.noiseBuffers={});var r=n.noiseBuffers,i=t.createBufferSource(),o=f[e]||"n0";return r[o]||(r[o]=function(t,e){var n={n0:1,n1:1.5,nb:1.5,np:1.5}[e]*t.sampleRate|0,r=t.createBuffer(1,n,t.sampleRate),i=r.getChannelData(0);return"n0"===e&&function(t){for(var e=0;e{t[r]/=n}))}(i),"np"===e&&function(t){var e=0,n=0,r=0,i=0,o=0,s=0,a=0,l=0;t.forEach(((u,c)=>{var p=2*Math.random()-1;e=.99886*e+.0555179*p,n=.99332*n+.0750759*p,r=.969*r+.153852*p,i=.8665*i+.3104856*p,o=.55*o+.5329522*p,s=-.7616*s-.016898*p,t[c]=e+n+r+i+o+s+a+.5362*p,a=.115926*p,l=Math.max(l,Math.abs(t[c]))})),t.forEach(((e,n)=>{t[n]/=l}))}(i),"n1"===e&&function(t){for(var e=v(1),n=0,r=0;r<24;r++){e=v(e);var i=h(t,1+r%16,2+10*e,1/4);n=Math.max(n,i)}t.forEach(((e,r)=>{t[r]/=n}))}(i),r}(t,o)),i.buffer=r[o],i.loop=!0,i}(t,e)),n||(n=function(t,e){var n=t.createOscillator();return n.type="t"===e[0]?"triangle":d[e.substr(0,2)]||"sine",n}(t,e)),n}var d={si:"sine",sq:"square",sa:"sawtooth",tr:"triangle"},m={},f={n0:"n0",n1:"n1",np:"np",nb:"nb"},h=(t,e,n,r)=>{for(var i=0,o=2*Math.PI*440/44100,s=2*Math.random()*Math.PI,a=2*Math.random()*Math.PI,l=0;l{for(var t=[],e=512/(2*Math.PI),n=0;n<512;n++)t[n]=Math.sin(n/e);return n=>t[n*e&511]})();function g(t,e){var n=e.split("-"),r=n[1],i=parseFloat(n[2]);isNaN(i)&&(i=5),y[r]||(console.warn("unknown curve type: "+r),r="linear",i=5);var o=r+"-"+i;_[o]||(_[o]=y[r](i));var s=_[o],a=t.createWaveShaper();return a.curve=s,a}var _={},y={};function w(t,e,n,r){return t+(e-t)*Math.pow(n,r)}function x(t,e,n){return en?n:e}y.linear=t=>new Float32Array([-1,1]),y.clip=t=>{var e=t/10;return new Float32Array([-e,-e,0,e,e])},y.tanh=t=>{for(var e=.5*x(1,t,40),n=new Float32Array(255),r=0;r{for(var e=Math.ceil(t/2),n=new Float32Array(2*e+1),r=0;r{var e=t/10;return new Float32Array([0,-e,0,e,0])},y.crush=t=>{for(var e=t=x(1,t,40),n=new Float32Array(255),r=0;r<255;r++){var i=r/254*2-1;n[r]=Math.round(i*(e+.4999))/e,Math.abs(n[r])<.001&&(n[r]=0)}return n},y.thin=t=>{var e=1+t/2;e=x(1.5,e,20);for(var n=new Float32Array(255),r=0;r<255;r++){var i=r/254*2-1;n[r]=i>0?w(0,1,i,e):w(0,-1,-i,e)}return n},y.fat=t=>{var e=1-t/9;e=x(.05,e,.95);for(var n=new Float32Array(255),r=0;r<255;r++){var i=r/254*2-1;n[r]=i>0?w(0,1,i,e):w(0,-1,-i,e)}return n};var j="bit-crusher";function C(t){var e=c(t);e.crush_worklet_state||(e.crush_worklet_state="trying",async function(t,e){if(!t.audioWorklet)return!1;var n=E.toString(),r="BitcrushProcessor";n=(n=n.replace("extends Object","extends AudioWorkletProcessor")).replace(/^class\s*\w* extends/,`class ${r} extends`),n+=`; registerProcessor('bit-crusher', ${r})`;try{t.startRendering||await t.resume();var i=new Blob([n],{type:"application/javascript"}),o=URL.createObjectURL(i);await t.audioWorklet.addModule(o)}catch(t){return!1}return!0}(t).then((t=>{e.crush_worklet_state=t?"ok":"ng"})))}class E extends Object{constructor(){super(),this.phase=0,this.sample=0}static get parameterDescriptors(){return[{name:"depth",defaultValue:5,minValue:1,maxValue:20},{name:"freq",defaultValue:.2,minValue:.01,maxValue:1}]}process(t,e,n){for(var r=t[0],i=e[0],o=n.depth[0],s=n.freq[0],a=o+.4999,l=1/o,u=this.phase,c=this.sample,p=0;p=1&&(u-=1,c=Math.round(d[f]*a)*l),m[f]=c;return this.phase=u,this.sample=c,!0}}var P={pe:"peaking",ba:"bandpass",no:"notch",al:"allpass",lo:"lowpass",hi:"highpass",lowsh:"lowshelf",highs:"highshelf"};function k(t,e){return function(t){return/^crush/i.test(t)}(e)?function(t,e){C(t);var n=e.split("-"),r=parseInt(n[1]),i=parseFloat(n[2])||.2;if(0===r&&(r=1),r||(r=5),"ok"!==c(t).crush_worklet_state)return g(t,`shape-crush-${r}`);var o=new AudioWorkletNode(t,j);return o.parameters.get("depth").value=r,o.parameters.get("freq").value=i,o.isWorklet=!0,o}(t,e):function(t){return/^shape/i.test(t)}(e)?g(t,e):function(t){var e=t.substr(0,2);return!!P[e]}(e)?function(t,e){var n=t.createBiquadFilter(),r=e.substr(0,2),i=e.substr(0,5);return n.type=P[i]||P[r]||"allpass",n}(t,e):null}class V{constructor(t){this.ctx=t,this.zeroRampTarget=.001}initParam(t,e){t.cancelScheduledValues(0),t.__paramEnveloperEvents=[new L(M,e,e,0,0)],t.setValueAtTime(e,0),F("init: param base set to",e,"time 0")}startEnvelope(t,e){var n=this.ctx.currentTime;e>n||(e=n);var r=t.__paramEnveloperEvents,i=r[r.length-1];if(function(t,e){for(;t.length>0&&t[0].t1i.t1){var o=i.v1;return r.push(new L(M,o,o,0,e)),t.setValueAtTime(o,e),void F("start: fresh envelope, value",o," from time",e)}var s=S(r,e);if(!s)throw"event list conformance bug, should not happen!";if(r.length=r.indexOf(s)+1,e===s.t1)return t.cancelScheduledValues(e+1e-4),void F("start: envelope begins: value",i.v1,"from time",e);t.cancelScheduledValues(e);var a=U(s,e);s.v1=a,s.t1=e,F("start: envelope begins: value",a,"from time",e),s.type===M?(t.setValueAtTime(a,e),F("--set value",a,"time",e)):s.type===I?(t.linearRampToValueAtTime(a,e),F("--ramp to",a,"time",e)):s.type===T?(a=a||this.zeroRampTarget,t.exponentialRampToValueAtTime(a,e),F("--exp ramp to",a,"time",e)):s.type===O&&(t.setValueAtTime(a,e),F("--set value",a,"time",e))}addHold(t,e){if(e>0){var n=t.__paramEnveloperEvents,r=n[n.length-1];if(r.t1===1/0){var i=r.t0+e;F("hold: during sweep, start new envelope from time:",i),this.startEnvelope(t,i)}else{var o=r.v1,s=r.t1,a=o,l=s+e;n.push(new L(M,o,a,s,l)),t.setValueAtTime(a,l),F("hold: val",a,"until time",l)}}}addRamp(t,e,n,r){var i=1e-4;e>i||(e=i);var o=t.__paramEnveloperEvents,s=o[o.length-1],a=s.v1,l=s.t1;if(s.t1===1/0)throw"Error - change scheduled after a sweep with infinite duration";var u=n,c=l+e;r?(a=a||this.zeroRampTarget,u=u||this.zeroRampTarget,t.exponentialRampToValueAtTime(u,c)):t.linearRampToValueAtTime(u,c);var p=r?T:I;o.push(new L(p,a,u,l,c)),F("ramp: to val",u,"time",c,r?"exp":"linear")}addSweep(t,e,n,r){var i,o,s=t.__paramEnveloperEvents,a=s[s.length-1],l=a.v1,u=a.t1;if(a.t1===1/0)throw"Error - change scheduled after a sweep with infinite duration";t.setTargetAtTime(n,u,r),e>0?(i=u+e,o=N(e,l,n,r)):(i=1/0,o=n);var c=new L(O,l,o,u,i);c.k=r,c.tgt=n,s.push(c),F("sweep: to target",n,"const",r,"from time",u,"to",i)}getValueAtTime(t,e){var n=t.__paramEnveloperEvents,r=S(n,e);return r?U(r,e):n[n.length-1].v1}}var M=1,O=2,I=3,T=4;function L(t,e,n,r,i){this.type=t,this.v0=+e,this.v1=+n,this.t0=+r,this.t1=+i,this.k=.1,this.tgt=.1}function S(t,e){for(var n=0;nt[n].t1))return t[n];return null}function U(t,e){if(t.type===M)return t.v0;var n=e-t.t0;return t.type===I?function(t,e,n,r){return e+(n-e)*t/r}(n,t.v0,t.v1,t.t1-t.t0):t.type===T?function(t,e,n,r){return e*Math.pow(n/e,t/r)}(n,t.v0,t.v1,t.t1-t.t0):t.type===O?N(n,t.v0,t.tgt,t.k):void 0}function N(t,e,n,r){return n+(e-n)*Math.exp(-t/r)}var F=()=>{},D=1e-4;function A(t,e,n,r,i,o,s,a,l){G("start"),G("PARAM: ",s,"time",i,"needsEnv="+l,"now",t.currentTime);var u=c(t);u.paramEnveloper||(u.paramEnveloper=new V(t));var p=u.paramEnveloper;if("function"==typeof o&&(o=o()),!B(o)||l){var d=Array.isArray(o)?o:[o],m="freq"===s?r:1;"gain"===s&&"freq"===a&&(m=r);var f={enveloper:p,type:s,envStarted:!1,attackRampNeeded:!!l,currValue:m,startTime:i,sweeping:!1,releaseTime:-1,releaseTarget:"freq"===s?-1:0},h=K(t,n,d,r,i,s);if(d.forEach((t=>{"function"==typeof t&&(t=t()),B(t)&&(t="freq"===s?{t:0,f:t}:{t}),"object"==typeof t&&(t.type||q(e,t,f,r))})),f.attackRampNeeded){G("- default attack ramp:");var v={a:W.a};q(e,v,f,r)}if(f.releaseTarget<0&&(f.releaseTarget=f.currValue),f.envStarted||(G("- no schedules, init to:",f.currValue),p.initParam(e,f.currValue)),l&&f.releaseTime<0&&(f.releaseTime=W.r),f.releaseTime>=0&&(n.envelopes.push({param:e,releaseTime:f.releaseTime,releaseTarget:f.releaseTarget,rootEnvelope:!!l}),G("- stored release:",f.releaseTime,"target",f.releaseTarget)),"freq"===s&&("root"===a||"freq"===a)){var b=f.currValue/r;0!==b&&n.bendables.push({param:e,mult:b})}return f=null,G("end"),h}e.setValueAtTime(o,0)}function B(t){return"number"==typeof t&&!isNaN(t)}function R(t,e,n,r){return void 0!==r&&(t=r),"function"==typeof t&&(t=t()),B(t)?n?t:t<0?e:t:e}function q(t,e,n,r){var i=R(e.w,0,!1),o=R(e.a,-1,!1),s=R(e.h,-1,!1),a=R(e.s,1,!1,e.p),l=0|R(e.x,1,!1),u=R(e.k,0,!0);o>=0&&o0||1!==a)&&(o=W.a);var c=n.currValue||1;0!==u&&(c*=Math.pow(r/261.625,u)),0===i&&(l=1),l>1&&o<0&&(1===d&&0===m||(o=D));var p=n.startTime,d=R(e.t,1,!1),m=R(e.f,0,!0),f=R(e.d,-1,!1,e.q),h=R(e.r,-1,!1),v=R(e.z,-1,!1),b=R(e.dr,-1,!0);b>=0&&(f=h=b),f<=0&&(f=W.d);for(var g=Math.max(l,1),_=0;_0&&(z(n,t,c),H(n,t,i),p+=i,G("- wait for",i),(1!==d||0!==m)&&o<0&&(o=0)),o>=0&&z(n,t,c),_>0&&(c=n.enveloper.getValueAtTime(t,p)),c=c*d+m,"freq"===n.type&&c<80&&m<0&&(c=160-c,m=-m),o>=0&&(n.sweeping&&H(n,t,0),n.enveloper.addRamp(t,o,c),n.attackRampNeeded=!1,p+=o||0,G("- linear ramp to",c,"over",o)),s>0&&(z(n,t,c),H(n,t,s),p+=s,G("- wait for",s)),1!==a&&(z(n,t,c),c*=a,n.sweeping&&H(n,t,0),n.enveloper.addSweep(t,-1,c,f),n.sweeping=!0,G("- open sweep to",c,"const",f));n.currValue=c,h>=0&&(n.releaseTime=h),v>=0&&(n.releaseTarget=n.currValue*v)}function H(t,e,n){t.enveloper.addHold(e,n||0),t.sweeping=!1}function z(t,e,n){t.envStarted||(t.attackRampNeeded&&(n=0),t.enveloper.initParam(e,n),t.enveloper.startEnvelope(e,t.startTime),t.envStarted=!0,G("- initted param:",n,"time",t.startTime))}var W={w:0,t:1,f:0,k:0,a:.05,h:0,d:.1,s:1,r:.1,z:-1,x:1},G=()=>{};function K(t,e,n,r,i,o){for(var s=$(n),a=[],l=0;lt.connect(m))),a=[m]):a.push(m)}}if(0===a.length)return null;if(1===a.length)return a.pop();var y=t.createGain();return e.nodes.push(y),a.forEach((t=>t.connect(y))),y}function $(t){return"function"==typeof t&&(t=t()),Array.isArray(t)?t:[t]}function Q(t,e,n,r,i,o,s,a,l){if(n.Q&&r.Q){var u=A(t,n.Q,e,i,o,r.Q,"Q",s,!1);u&&u.connect(n.Q)}if(n.frequency||n.playbackRate){var c=n.frequency||n.playbackRate,p=A(t,c,e,n.playbackRate?i/440:i,o,r.freq||{},"freq",s,!1);p&&p.connect(c)}var d=a?a.gain:n.gain||null;if(d){var m=A(t,d,e,i,o,r.gain,"gain",s,l);m&&m.connect(d)}}function J(t){var e={},n=[],r=new V(t);function i(t){for(;n.length>t;){var r=n.shift();c(e[r]),delete e[r]}}function o(){for(var r=t.currentTime,i=0;i0||t.bendables.forEach((t=>{var i=e*t.mult;t.param.cancelScheduledValues(r),t.param.setTargetAtTime(i,r,n)}))}(o,n,r,i)},this.release=function(t,n){var r=e[t];r&&u(r,n)},this.isPlaying=function(t){return!!e[t]},this.releaseAll=function(t){n.forEach((n=>{u(e[n],t)}))},this.dispose=function(){i(0),e=null,n=null,clearInterval(s)};var s=setInterval(o,800);function a(t){++l>9999&&(l=1),this.id=l,this.time=+t,this.endTime=0,this.nodes=[],this.envelopes=[],this.bendables=[]}var l=0;function u(t,e){t.endTime>0||(t.endTime=e,t.envelopes.forEach(((n,i)=>{var o=n.releaseTime;if(o>=0){var s=n.param;r.startEnvelope(s,e);var a=n.releaseTarget||0;if(r.addSweep(s,-1,a,o),n.rootEnvelope){var l=e+4*o;t.endTime=Math.max(t.endTime,l)}}})))}function c(t){for(;t.nodes.length>0;){var e=t.nodes.pop();e.stop&&e.stop(),e.buffer&&(e.buffer=null),e.gain&&e.gain.cancelScheduledValues(0),e.frequency&&e.frequency.cancelScheduledValues(0),e.playbackRate&&e.playbackRate.cancelScheduledValues(0),e.Q&&e.Q.cancelScheduledValues(0),e.disconnect(),e=null}t.nodes=null,t.envelopes=null,t.bendables=null}}function X(t=null,e=null,n=!1,r=!1){this.version="0.18.2",r||console.log(`wasgen v${this.version}`);var i=t||new(window.AudioContext||window.webkitAudioContext),o=new J(i),s=e||i.destination;i.startRendering&&C(i);var a=()=>i.currentTime+.05;this.play=function(t,e=440,n=1,r=0,l=0,c=null){return i.startRendering||("running"!==i.state&&i.resume(),C(i)),e=e||440,n=n||1,r>0||(r=a()),l=l||0,c=c||u||s,o.play(t,e,n,r,l,c)},this.bend=function(t,e=440,n=.1,r=0){e=e||440,n=n||.1,r=r||a(),o.bend(t,e,n,r)},this.release=function(t,e=0){e=e||a(),o.release(t,e)},this.noteIsPlaying=function(t){return o.isPlaying(t)},this.releaseAll=function(t=0){t=t||a(),o.releaseAll(t)},this.compressor=null,this.now=function(){return i.currentTime},this.maxVoices=function(t=32){return t&&(o.maxVoices=t),o.maxVoices},this.destination=function(t){return t&&(s=t,l()),s},this.audioContext=function(t){return t&&(this.dispose(),o=new J(i=t),s=i.destination,l()),i};var l=()=>{u&&u.disconnect(),n||((u=i.createDynamicsCompressor()).threshold.value=-24,u.knee.value=25,u.ratio.value=20,u.attack.value=.003,u.release.value=.25,u.connect(s),this.compressor=u)},u=null;l(),this.dispose=function(){o.dispose(),o=null,u&&u.disconnect(),u=null,s=null,i=null}}var Y=document.querySelector.bind(document),Z=n(894);Y("#ver").innerHTML="v0.18.2";var tt,et,nt=new Z({container:Y(".settings1")}),rt=new Z({container:Y(".settings2")}),it={},ot={beginEditingParams:mt,finishEditingParams:ft},st={sine:"sine",triangle:"triangle",square:"square",sawtooth:"sawtooth","pulse (10%)":"p10","pulse (25%)":"p25","pulse (40%)":"p40","harmonics(1, 0, 1)":"w909","harmonics(1, 1, 1)":"w999","harmonics(1, 0.6, 0.3)":"w963","white noise":"n0","pink noise":"np","brown noise":"nb","metallic noise":"n1"},at={lowpass:"lowpass",highpass:"highpass",bandpass:"bandpass",notch:"notch"};function lt(t){if(!t.keyPrefix)for(var e in it)it[e]===t&&(t.keyPrefix=e)}function ut(t,e,n,r,i){lt(e);var o=n;n=n.replace(/\s+/g,"").toLowerCase();var s=e.keyPrefix+"_"+n;e[n]=i||r[Object.keys(r)[0]],t.addInput(e,n,{options:r,label:o,presetKey:s})}function ct(t,e,n,r,i,o,s,a){lt(e);var l=n;n=n.replace(/\s+/g,"").toLowerCase();var u=e.keyPrefix+"_"+n;if(s){var c=.001;r{if(!t.metaKey&&"Tab"!==t.key&&"Shift"!==t.key){var e=document.activeElement,n=e&&e.type||"";if(!/text/.test(n)){var r=it.main.frequency;if(" "===t.key)t.preventDefault();else{var i="zxcvbnmasdfghjklqwertyuiop".indexOf(t.key.toLowerCase());if(i<0)return;for(var o=[0,2,4,5,7,9,11],s=55;i>=o.length;)s+=12,i-=o.length;s+=o[i],r=440*Math.pow(2,(s-69)/12)}mt(),it.main.frequency=r,ft()}}};var vt,bt,gt=-1e3;function _t(){if(Y(".hint").style.display="none",!vt){var t=(bt=new(window.AudioContext||window.webkitAudioContext)).createGain();t.connect(bt.destination),vt=new X(bt,t),window.gen=vt,window.ctx=bt,Y("#ver").innerHTML+=` -- wasgen v${vt.version}`}"running"!==bt.state&&bt.resume();var e=it.carrier.duration+it.carrier.attack+it.carrier.hold,n=performance.now();if(!(nxt(t)));var o=wt(it.main.frequency),s=wt(it.main.velocity),a=wt(e),l=vt.now()+.15;vt.play(i,o,s,l,l+a),Ct(i,o,s,a)}}function yt(){var t=[{type:it.carrier.type,freq:[],gain:[{a:it.carrier.attack,h:it.carrier.hold,d:it.carrier.decay,s:it.carrier.sustain,r:it.carrier.release}]}];if(it.distort1.folder.expanded){var e=it.distort1.type,n=it.distort1.argument;t[0].effect=`${e}-${n}`}if(it.mods1.folder.expanded&&t[0].freq.push({w:it.mods1.delay,t:it.mods1.jumpmult,f:it.mods1.jumpadd,a:0,p:it.mods1.sweep,q:it.mods1.sweeptime,x:it.mods1.repeat}),it.mods2.folder.expanded&&t[0].freq.push({w:it.mods2.delay,t:it.mods2.jumpmult,f:it.mods2.jumpadd,a:0,p:it.mods2.sweep,q:it.mods2.sweeptime,x:it.mods2.repeat}),it.tremolo.folder.expanded&&t[0].freq.push({type:it.tremolo.type,freq:it.tremolo.frequency,gain:{t:it.tremolo.depth}}),it.vibrato.folder.expanded&&t[0].gain.push({type:it.vibrato.type,freq:it.vibrato.frequency,gain:{t:it.vibrato.depth,r:it.carrier.release,z:0}}),it.FM.folder.expanded&&t[0].freq.push({type:it.FM.type,freq:{t:it.FM.freqmult,f:it.FM.freqadd},gain:{t:it.FM.gainmult,a:it.FM.attack,d:it.FM.decay,s:it.FM.sustain,r:it.FM.release}}),it.distort2.folder.expanded){var r=it.distort2.type,i=it.distort2.argument;t.push(`${r}-${i}`)}return it.effect1.folder.expanded&&t.push({type:it.effect1.type,freq:{t:it.effect1.freqmult,p:it.effect1.sweep,q:it.effect1.sweeptime},Q:it.effect1.q}),it.effect2.folder.expanded&&t.push({type:it.effect2.type,freq:{t:it.effect2.freqmult,p:it.effect2.sweep,q:it.effect2.sweeptime},Q:it.effect2.q}),t}function wt(t){var e=t<0?-1:1;return(t=Math.abs(t))<.002?0:t>20?e*Math.round(t):t>2?e*Math.round(10*t)/10:t>.2?e*Math.round(100*t)/100:e*Math.round(1e3*t)/1e3}function xt(t){Object.keys(t).forEach((e=>{Array.isArray(t[e])&&1===t[e].length&&(t[e]=t[e][0]),"number"==typeof t[e]&&(t[e]=wt(t[e])),"object"==typeof t[e]&&(0===Object.keys(t[e]).length?delete t[e]:xt(t[e]))}))}var jt=Y(".code");function Ct(t,e,n,r){var i=t.map((t=>function(t){Et(t);var e=JSON.stringify(t);return(e=(e=e.replace(/"([^"]*)":/g,"$1:")).replace(/,gain/g,", gain")).replace(/,freq/g,", freq")}(t)));jt.value="",jt.value+="// import Gen from 'wasgen'\n",jt.value+="// var gen = new Gen()\n",jt.value+="gen.play([\n",i.forEach((t=>{jt.value+=` ${t},\n`})),jt.value+=`], ${e}, ${n}, gen.now(), gen.now() + ${r})\n`}function Et(t){for(var e in t)"object"==typeof t[e]&&Et(t[e]),"number"==typeof t[e]&&(t[e]=Math.round(1e3*t[e])/1e3)}var Pt,kt=Y(".render");kt.onclick=async()=>{if(OfflineAudioContext){var t=it.carrier.duration+it.carrier.attack+it.carrier.hold,e=t+5*it.carrier.release+.01,r=new OfflineAudioContext(2,44100*e|0,44100),i=new X(r,r.destination,!1,!0),o=yt();o.forEach((t=>xt(t)));var s=wt(it.main.frequency),a=wt(it.main.velocity),l=wt(t),u=5/44100;Ct(o,s,a,l),/crush/.test(JSON.stringify(o))&&await(100,new Promise((t=>setTimeout(t,100)))),i.play(o,s,a,u,u+l);var c=await r.startRendering();Pt||(Pt=document.createElement("a"),document.body.appendChild(Pt),Pt.style.display="none");var p=n(562)(c),d=new window.Blob([new DataView(p)],{type:"audio/wav"}),m=window.URL.createObjectURL(d);Pt.href=m,Pt.download="audio.wav",Pt.click(),window.URL.revokeObjectURL(m),i.dispose()}else kt.textContent="Not supported in your browser, sorry!"}})()})(); -------------------------------------------------------------------------------- /docs/demo.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var $ = document.querySelector.bind(document) 4 | var Tweakpane = require('tweakpane') 5 | import './presets' 6 | 7 | import packageData from '../package.json' 8 | var version = packageData.version 9 | $('#ver').innerHTML = `v${version}` 10 | 11 | // @ts-ignore - ?? 12 | export var pane1 = new Tweakpane({ container: $('.settings1') }) 13 | // @ts-ignore - ?? 14 | export var pane2 = new Tweakpane({ container: $('.settings2') }) 15 | export var params = {} 16 | 17 | export var demo = { 18 | beginEditingParams, 19 | finishEditingParams, 20 | } 21 | 22 | 23 | /* 24 | * 25 | * constants 26 | * 27 | */ 28 | 29 | var types = { 30 | sine: 'sine', 31 | triangle: 'triangle', 32 | square: 'square', 33 | sawtooth: 'sawtooth', 34 | 'pulse (10%)': 'p10', 35 | 'pulse (25%)': 'p25', 36 | 'pulse (40%)': 'p40', 37 | 'harmonics(1, 0, 1)': 'w909', 38 | 'harmonics(1, 1, 1)': 'w999', 39 | 'harmonics(1, 0.6, 0.3)': 'w963', 40 | 'white noise': 'n0', 41 | 'pink noise': 'np', 42 | 'brown noise': 'nb', 43 | 'metallic noise': 'n1', 44 | } 45 | 46 | var effectTypes = { 47 | lowpass: 'lowpass', 48 | highpass: 'highpass', 49 | bandpass: 'bandpass', 50 | notch: 'notch', 51 | } 52 | 53 | 54 | 55 | 56 | 57 | /* 58 | * 59 | * 60 | * 61 | * UI setup 62 | * 63 | * 64 | * 65 | */ 66 | 67 | 68 | var f 69 | var o 70 | 71 | o = params.main = {} 72 | f = o.folder = pane1.addFolder({ title: 'MAIN' }) 73 | addNumeric(f, o, 'velocity', 1, 0, 1) 74 | addNumeric(f, o, 'frequency', 440, 100, 8000, true, 1) 75 | 76 | 77 | o = params.carrier = {} 78 | f = o.folder = pane1.addFolder({ title: 'CARRIER SIGNAL' }) 79 | addPulldown(f, o, 'type', types, 'triangle') 80 | addNumeric(f, o, 'attack', 0.1, 0, 5, true) 81 | addNumeric(f, o, 'hold', 0, 0, 5, true) 82 | addNumeric(f, o, 'sustain', 0.8, 0, 1, false) 83 | addNumeric(f, o, 'decay', 0.1, 0, 5, true) 84 | addNumeric(f, o, 'duration', 0.1, 0, 5, true) 85 | addNumeric(f, o, 'release', 0.1, 0, 5, true) 86 | 87 | 88 | o = params.distort1 = {} 89 | f = o.folder = pane1.addFolder({ title: 'carrier distortion' }) 90 | addPulldown(f, o, 'type', { 91 | bitcrush: 'crush', 92 | clip: 'shape-clip', 93 | boost: 'shape-boost', 94 | fold: 'shape-fold', 95 | thin: 'shape-thin', 96 | fat: 'shape-fat', 97 | }) 98 | addNumeric(f, o, 'argument', 5, 1, 20, false, 1) 99 | o.folder.expanded = false 100 | 101 | 102 | 103 | o = params.mods1 = {} 104 | f = o.folder = pane1.addFolder({ title: 'freq mods 1' }) 105 | addNumeric(f, o, 'delay', 0.1, 0.01, 2, true, 0.01) 106 | addNumeric(f, o, 'jump mult', 1, 0.5, 2, true, 0.05) 107 | addNumeric(f, o, 'jump add', 0, -200, 200, false, 10) 108 | addNumeric(f, o, 'sweep', 1, 0.1, 10, true, 0.05) 109 | addNumeric(f, o, 'sweep time', 0.25, 0.01, 2, true, 0.01) 110 | addNumeric(f, o, 'repeat', 1, 1, 20, false, 1) 111 | o.folder.expanded = false 112 | 113 | 114 | 115 | o = params.mods2 = {} 116 | f = o.folder = pane1.addFolder({ title: 'freq mods 2' }) 117 | addNumeric(f, o, 'delay', 0.1, 0.01, 2, true, 0.01) 118 | addNumeric(f, o, 'jump mult', 1, 0.5, 2, true, 0.05) 119 | addNumeric(f, o, 'jump add', 0, -200, 200, false, 10) 120 | addNumeric(f, o, 'sweep', 1, 0.1, 10, true, 0.05) 121 | addNumeric(f, o, 'sweep time', 0.25, 0.01, 2, true, 0.01) 122 | addNumeric(f, o, 'repeat', 1, 1, 20, false, 1) 123 | o.folder.expanded = false 124 | 125 | 126 | 127 | 128 | 129 | 130 | o = params.FM = {} 131 | f = o.folder = pane2.addFolder({ title: 'FM signal' }) 132 | addNumeric(f, o, 'freq mult', 1, 0.1, 10, true) 133 | addNumeric(f, o, 'freq add', 0, -10, 10, false, 0.1) 134 | addPulldown(f, o, 'type', types) 135 | addNumeric(f, o, 'gain mult', 1, 0.1, 10, true) 136 | addNumeric(f, o, 'attack', 0.1, 0, 5, true) 137 | addNumeric(f, o, 'decay', 0.1, 0, 5, true) 138 | addNumeric(f, o, 'sustain', 0.8, 0, 1) 139 | addNumeric(f, o, 'release', 0.1, 0, 5, true) 140 | o.folder.expanded = false 141 | 142 | 143 | 144 | o = params.tremolo = {} 145 | f = o.folder = pane2.addFolder({ title: 'tremolo' }) 146 | addPulldown(f, o, 'type', types) 147 | addNumeric(f, o, 'depth', 0.05, 0.01, 2, true) 148 | addNumeric(f, o, 'frequency', 10, 0.1, 100, true) 149 | o.folder.expanded = false 150 | 151 | 152 | 153 | o = params.vibrato = {} 154 | f = o.folder = pane2.addFolder({ title: 'vibrato' }) 155 | addPulldown(f, o, 'type', types) 156 | addNumeric(f, o, 'depth', 0.2, 0.01, 2, true) 157 | addNumeric(f, o, 'frequency', 10, 0.1, 100, true) 158 | o.folder.expanded = false 159 | 160 | 161 | 162 | 163 | 164 | o = params.effect1 = {} 165 | f = o.folder = pane2.addFolder({ title: 'effect 1' }) 166 | addPulldown(f, o, 'type', effectTypes) 167 | addNumeric(f, o, 'freq mult', 1, 0.1, 10, true) 168 | addNumeric(f, o, 'sweep', 1, 0.1, 10, true) 169 | addNumeric(f, o, 'sweep time', 0.2, 0.01, 2, true) 170 | addNumeric(f, o, 'Q', 1, 0.2, 10, true, 0.1) 171 | o.folder.expanded = false 172 | 173 | 174 | o = params.effect2 = {} 175 | f = o.folder = pane2.addFolder({ title: 'effect 2' }) 176 | addPulldown(f, o, 'type', effectTypes) 177 | addNumeric(f, o, 'freq mult', 1, 0.1, 10, true) 178 | addNumeric(f, o, 'sweep', 1, 0.1, 10, true) 179 | addNumeric(f, o, 'sweep time', 0.2, 0.01, 2, true) 180 | addNumeric(f, o, 'Q', 1, 0.2, 10, true, 0.1) 181 | o.folder.expanded = false 182 | 183 | 184 | 185 | 186 | o = params.distort2 = {} 187 | f = o.folder = pane2.addFolder({ title: 'post distortion' }) 188 | addPulldown(f, o, 'type', { 189 | bitcrush: 'crush', 190 | clip: 'shape-clip', 191 | boost: 'shape-boost', 192 | fold: 'shape-fold', 193 | thin: 'shape-thin', 194 | fat: 'shape-fat', 195 | }) 196 | addNumeric(f, o, 'argument', 5, 1, 20, false, 1) 197 | o.folder.expanded = false 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | /* 223 | * 224 | * helpers to simplify adding params 225 | * 226 | */ 227 | 228 | function setKeyPrefix(obj) { 229 | if (obj.keyPrefix) return 230 | for (var s in params) if (params[s] === obj) obj.keyPrefix = s 231 | } 232 | 233 | function addPulldown(folder, obj, name, options, value) { 234 | setKeyPrefix(obj) 235 | var label = name 236 | name = name.replace(/\s+/g, '').toLowerCase() 237 | var presetKey = obj.keyPrefix + '_' + name 238 | obj[name] = value || options[Object.keys(options)[0]] 239 | folder.addInput(obj, name, { options, label, presetKey }) 240 | } 241 | 242 | function addNumeric(folder, obj, name, val, min, max, logScale, step) { 243 | setKeyPrefix(obj) 244 | var label = name 245 | name = name.replace(/\s+/g, '').toLowerCase() 246 | var presetKey = obj.keyPrefix + '_' + name 247 | 248 | if (logScale) { 249 | var absmin = 0.001 250 | if (val < absmin) val = absmin 251 | if (min < absmin) min = absmin 252 | step = step || min 253 | } else { 254 | step = step || min || 0.01 255 | } 256 | obj[name] = val 257 | 258 | // cache-bust so it updates later 259 | if (logScale) obj[name] = min 260 | 261 | var input = folder.addInput(obj, name, { min, max, step, label, presetKey }) 262 | 263 | if (logScale) { 264 | // deeply deeply hackish 265 | // log-ify the slider view 266 | var controller = input.controller.controller 267 | controller.view_.sliderInputView_.update = function () { 268 | var v = Math.log(this.value.rawValue) 269 | var min = Math.log(this.minValue_) 270 | var max = Math.log(this.maxValue_) 271 | var p = 100 * (v - min) / (max - min) 272 | this.innerElem_.style.width = p + '%' 273 | } 274 | // log-ify the slider inputs 275 | controller.sliderIc_.ptHandler_.computePosition_ = function (x, y) { 276 | var rect = this.element.getBoundingClientRect() 277 | var f = x / rect.width 278 | var val = Math.pow(max, f) * Math.pow(min, 1 - f) 279 | var px = (val - min) / (max - min) 280 | var py = y / rect.height 281 | return { px, py } 282 | } 283 | // rework the number formatting 284 | controller.view_.textInputView_.formatter_.format = function (val) { 285 | return fmt(val) 286 | } 287 | // undo cache-bust 288 | obj[name] = val 289 | } 290 | } 291 | 292 | // update all display-only log scale parameters 293 | function refreshPanes() { 294 | pane1.refresh() 295 | pane2.refresh() 296 | } 297 | 298 | // params are all set up now, so refresh the log values 299 | refreshPanes() 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | /* 309 | * 310 | * this bit is hairy, due to how much 311 | * chrome hates pages that use webaudio 312 | * 313 | */ 314 | 315 | var ignoreParamEvents = false 316 | 317 | function beginEditingParams() { 318 | ignoreParamEvents = true 319 | } 320 | 321 | function finishEditingParams() { 322 | refreshPanes() 323 | playSound() 324 | ignoreParamEvents = false 325 | } 326 | 327 | 328 | // general event for all param changes 329 | function onParamChange() { 330 | if (ignoreParamEvents) return 331 | refreshPanes() 332 | playSound() 333 | } 334 | pane1.on('change', onParamChange) 335 | pane2.on('change', onParamChange) 336 | 337 | 338 | // also play sound on keypresses 339 | window.onkeydown = (ev) => { 340 | if (ev.metaKey) return 341 | if (ev.key === 'Tab') return 342 | if (ev.key === 'Shift') return 343 | var focused = document.activeElement 344 | var focType = (focused && focused['type']) || '' 345 | if (/text/.test(focType)) return 346 | 347 | var freq = params.main.frequency 348 | if (ev.key === ' ') { 349 | // don't scroll on space 350 | ev.preventDefault() 351 | } else { 352 | var chars = 'zxcvbnmasdfghjklqwertyuiop' 353 | var i = chars.indexOf(ev.key.toLowerCase()) 354 | if (i < 0) return 355 | var scale = [0, 2, 4, 5, 7, 9, 11] 356 | var note = 55 357 | while (i >= scale.length) { 358 | note += 12 359 | i -= scale.length 360 | } 361 | note += scale[i] 362 | freq = 440 * Math.pow(2, (note - 69) / 12) 363 | } 364 | 365 | // the following implicitly triggers a sound 366 | beginEditingParams() 367 | params.main.frequency = freq 368 | finishEditingParams() 369 | } 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | /* 385 | * 386 | * 387 | * 388 | * Program creation and sound playback 389 | * 390 | * 391 | * 392 | */ 393 | 394 | 395 | import Generator from '../../wasgen' 396 | // import Generator from 'wasgen' 397 | 398 | var nextSoundCutoff = -1000 399 | var gen, ctx 400 | 401 | function playSound() { 402 | $('.hint').style.display = 'none' 403 | 404 | if (!gen) { 405 | ctx = new (window.AudioContext || window['webkitAudioContext'])() 406 | var dest = ctx.createGain() 407 | dest.connect(ctx.destination) 408 | gen = new Generator(ctx, dest) 409 | window['gen'] = gen // so that playback code will run in console 410 | window['ctx'] = ctx 411 | $('#ver').innerHTML += ` -- wasgen v${gen.version}` 412 | } 413 | if (ctx.state !== 'running') ctx.resume() 414 | 415 | // overall play duration 416 | var duration = params.carrier.duration 417 | + params.carrier.attack 418 | + params.carrier.hold 419 | 420 | // debounce 421 | var t = performance.now() 422 | if (t < nextSoundCutoff) return 423 | var wait = Math.min(Math.max(0.25, duration / 2), 1.5) 424 | nextSoundCutoff = t + wait * 1000 425 | 426 | // build program from params 427 | var program = buildProgram() 428 | program.forEach(prog => formatProgramObject(prog)) 429 | 430 | // play! 431 | var freq = fmt(params.main.frequency) 432 | var vel = fmt(params.main.velocity) 433 | var dur = fmt(duration) 434 | var now = gen.now() + 0.15 435 | gen.play(program, freq, vel, now, now + dur) 436 | writeCode(program, freq, vel, dur) 437 | } 438 | 439 | 440 | function buildProgram() { 441 | 442 | /** @type {*} */ 443 | var program = [{ 444 | type: params.carrier.type, 445 | freq: [], 446 | gain: [{ 447 | a: params.carrier.attack, 448 | h: params.carrier.hold, 449 | d: params.carrier.decay, 450 | s: params.carrier.sustain, 451 | r: params.carrier.release, 452 | }], 453 | }] 454 | 455 | 456 | if (params.distort1.folder.expanded) { 457 | var d1 = params.distort1.type 458 | var d1a = params.distort1.argument 459 | program[0].effect = `${d1}-${d1a}` 460 | } 461 | 462 | 463 | if (params.mods1.folder.expanded) { 464 | program[0].freq.push({ 465 | w: params.mods1.delay, 466 | t: params.mods1.jumpmult, 467 | f: params.mods1.jumpadd, 468 | a: 0, 469 | p: params.mods1.sweep, 470 | q: params.mods1.sweeptime, 471 | x: params.mods1.repeat, 472 | }) 473 | } 474 | 475 | 476 | if (params.mods2.folder.expanded) { 477 | program[0].freq.push({ 478 | w: params.mods2.delay, 479 | t: params.mods2.jumpmult, 480 | f: params.mods2.jumpadd, 481 | a: 0, 482 | p: params.mods2.sweep, 483 | q: params.mods2.sweeptime, 484 | x: params.mods2.repeat, 485 | }) 486 | } 487 | 488 | 489 | 490 | if (params.tremolo.folder.expanded) { 491 | program[0].freq.push({ 492 | type: params.tremolo.type, 493 | freq: params.tremolo.frequency, 494 | gain: { t: params.tremolo.depth }, 495 | }) 496 | } 497 | 498 | if (params.vibrato.folder.expanded) { 499 | program[0].gain.push({ 500 | type: params.vibrato.type, 501 | freq: params.vibrato.frequency, 502 | gain: { 503 | t: params.vibrato.depth, 504 | r: params.carrier.release, 505 | z: 0, 506 | }, 507 | }) 508 | } 509 | 510 | if (params.FM.folder.expanded) { 511 | program[0].freq.push({ 512 | type: params.FM.type, 513 | freq: { 514 | t: params.FM.freqmult, 515 | f: params.FM.freqadd, 516 | }, 517 | gain: { 518 | t: params.FM.gainmult, 519 | a: params.FM.attack, 520 | d: params.FM.decay, 521 | s: params.FM.sustain, 522 | r: params.FM.release, 523 | }, 524 | }) 525 | } 526 | 527 | if (params.distort2.folder.expanded) { 528 | var d2 = params.distort2.type 529 | var d2a = params.distort2.argument 530 | program.push(`${d2}-${d2a}`) 531 | } 532 | 533 | if (params.effect1.folder.expanded) { 534 | program.push({ 535 | type: params.effect1.type, 536 | freq: { 537 | t: params.effect1.freqmult, 538 | p: params.effect1.sweep, 539 | q: params.effect1.sweeptime, 540 | }, 541 | Q: params.effect1.q, 542 | }) 543 | } 544 | if (params.effect2.folder.expanded) { 545 | program.push({ 546 | type: params.effect2.type, 547 | freq: { 548 | t: params.effect2.freqmult, 549 | p: params.effect2.sweep, 550 | q: params.effect2.sweeptime, 551 | }, 552 | Q: params.effect2.q, 553 | }) 554 | } 555 | return program 556 | } 557 | 558 | 559 | function fmt(num) { 560 | var sign = (num < 0) ? -1 : 1 561 | num = Math.abs(num) 562 | if (num < 0.002) return 0 563 | if (num > 20) return sign * Math.round(num) 564 | if (num > 2) return sign * Math.round(num * 10) / 10 565 | if (num > 0.2) return sign * Math.round(num * 100) / 100 566 | return sign * Math.round(num * 1000) / 1000 567 | } 568 | 569 | function formatProgramObject(obj) { 570 | Object.keys(obj).forEach(s => { 571 | if (Array.isArray(obj[s])) { 572 | if (obj[s].length === 1) obj[s] = obj[s][0] 573 | } 574 | if (typeof obj[s] === 'number') { 575 | obj[s] = fmt(obj[s]) 576 | } 577 | if (typeof obj[s] === 'object') { 578 | if (Object.keys(obj[s]).length === 0) { 579 | delete obj[s] 580 | } else { 581 | formatProgramObject(obj[s]) 582 | } 583 | } 584 | }) 585 | } 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | /* 595 | * 596 | * 597 | * 598 | * writing out playback code 599 | * 600 | * 601 | * 602 | */ 603 | 604 | var textfield = $('.code') 605 | 606 | function writeCode(program, freq, vel, dur) { 607 | var progstrs = program.map(o => stringify(o)) 608 | 609 | textfield.value = `` 610 | textfield.value += `// import Gen from 'wasgen'\n` 611 | textfield.value += `// var gen = new Gen()\n` 612 | textfield.value += `gen.play([\n` 613 | progstrs.forEach(str => { textfield.value += ` ${str},\n` }) 614 | textfield.value += `], ${freq}, ${vel}, gen.now(), gen.now() + ${dur})\n` 615 | } 616 | 617 | function stringify(obj) { 618 | roundNums(obj) 619 | var s = JSON.stringify(obj) 620 | s = s.replace(/"([^"]*)":/g, '$1:') 621 | s = s.replace(/,gain/g, ', gain') 622 | s = s.replace(/,freq/g, ', freq') 623 | return s 624 | } 625 | 626 | function roundNums(obj) { 627 | for (var key in obj) { 628 | if (typeof obj[key] === 'object') roundNums(obj[key]) 629 | if (typeof obj[key] === 'number') obj[key] = Math.round(obj[key] * 1000) / 1000 630 | } 631 | } 632 | 633 | 634 | 635 | 636 | 637 | /* 638 | * 639 | * 640 | * 641 | * experimenting with rendering -> offlineContext -> WAV 642 | * 643 | * 644 | * 645 | */ 646 | 647 | var renderBut = $('.render') 648 | var anchor 649 | renderBut.onclick = async () => { 650 | if (!OfflineAudioContext) { 651 | renderBut.textContent = 'Not supported in your browser, sorry!' 652 | return 653 | } 654 | 655 | // play and overall duration 656 | var playDur = params.carrier.duration 657 | + params.carrier.attack 658 | + params.carrier.hold 659 | var totalDur = playDur 660 | + params.carrier.release * 5 // magic number! 661 | + 0.01 // arbitrarily pad the end a tad 662 | var rate = 44100 663 | var samples = (totalDur * rate) | 0 664 | var ctx = new OfflineAudioContext(2, samples, rate) 665 | var gen = new Generator(ctx, ctx.destination, false, true) 666 | 667 | // build program from params 668 | var program = buildProgram() 669 | program.forEach(prog => formatProgramObject(prog)) 670 | 671 | // play args 672 | var freq = fmt(params.main.frequency) 673 | var vel = fmt(params.main.velocity) 674 | var dur = fmt(playDur) 675 | var now = 5 / 44100 676 | writeCode(program, freq, vel, dur) 677 | 678 | // pausing here lets wasgen init bitcrusher audioworklet.. 679 | if (/crush/.test(JSON.stringify(program))) await sleep(100) 680 | 681 | // play logic 682 | gen.play(program, freq, vel, now, now + dur) 683 | var buffer = await ctx.startRendering() 684 | 685 | // yoink: https://github.com/Jam3/audiobuffer-to-wav/blob/master/demo/index.js 686 | if (!anchor) { 687 | anchor = document.createElement('a') 688 | document.body.appendChild(anchor) 689 | anchor.style.display = 'none' 690 | } 691 | 692 | var bufferToWav = require('audiobuffer-to-wav') 693 | var wav = bufferToWav(buffer) 694 | var blob = new window.Blob([new DataView(wav)], { 695 | type: 'audio/wav' 696 | }) 697 | 698 | var url = window.URL.createObjectURL(blob) 699 | anchor.href = url 700 | anchor.download = 'audio.wav' 701 | anchor.click() 702 | window.URL.revokeObjectURL(url) 703 | 704 | gen.dispose() 705 | } 706 | 707 | function sleep(ms) { 708 | return new Promise(resolve => setTimeout(resolve, ms)) 709 | } 710 | 711 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | wafxr 8 | 101 | 102 | 103 | 104 | 105 |
106 |
107 | wafxr. 108 |
109 |
110 | Choose a preset, hit a key, or twiddle a parameter. 111 |
112 |
113 | 114 |
115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 |
124 | 125 |
126 |
127 | 128 | 129 |
130 | Playback code:
131 | 132 | 133 |
134 | 135 | 136 |
137 | 138 | 143 | 144 | 145 | 146 | 147 | -------------------------------------------------------------------------------- /docs/presets.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | import { demo, pane1, pane2, params } from './demo' 4 | var $ = document.querySelector.bind(document) 5 | 6 | function rand(a, b) { return a + (Math.random() * (b - a)) } 7 | function rint(a, b) { return Math.floor(rand(a, b)) } 8 | function rlog(a, b) { return Math.pow(2, rand(Math.log2(a), Math.log2(b))) } 9 | function choose() { return (arguments[(Math.random() * arguments.length) | 0]) } 10 | 11 | 12 | 13 | 14 | 15 | 16 | /* 17 | * 18 | * SETUP AND ABSTRACTIONS 19 | * 20 | */ 21 | 22 | var basePresets = [] 23 | setTimeout(() => { 24 | // do this after main module initializes 25 | basePresets = [pane1.exportPreset(), pane2.exportPreset()] 26 | delete basePresets[0].main_velocity 27 | delete basePresets[0].main_frequency 28 | }, 1) 29 | 30 | 31 | 32 | // expand folders needed for a given preset 33 | function setFolders(args = []) { 34 | for (var s in params) { 35 | var exp = false 36 | if (s === 'main' || s === 'carrier') exp = true 37 | if (args.includes(s)) exp = true 38 | params[s].folder.expanded = exp 39 | } 40 | } 41 | 42 | // abstraction to init/apply/finish a preset 43 | function applyPreset(applyPresetFn) { 44 | demo.beginEditingParams() 45 | // reset everything to defaults, before applying a preset 46 | pane1.importPreset(basePresets[0]) 47 | pane2.importPreset(basePresets[1]) 48 | var result = applyPresetFn() 49 | if (result.frequency) params.main.frequency = result.frequency 50 | setFolders(result.folders) 51 | demo.finishEditingParams() 52 | } 53 | 54 | 55 | // actual handlers 56 | var addHandler = (name, fn) => { 57 | $('.' + name).addEventListener('click', ev => applyPreset(fn)) 58 | } 59 | 60 | addHandler('reset', resetPreset) 61 | addHandler('jump', jumpPreset) 62 | addHandler('coin', coinPreset) 63 | addHandler('expl', explosionPreset) 64 | addHandler('laser', laserPreset) 65 | addHandler('ouch', ouchPreset) 66 | addHandler('power', powerPreset) 67 | addHandler('ui', uiPreset) 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | /* 80 | * 81 | * PRESET IMPLEMENTATIONS 82 | * 83 | */ 84 | 85 | 86 | function resetPreset() { 87 | var folders = [] 88 | var frequency = 440 89 | return { folders, frequency } 90 | } 91 | 92 | 93 | 94 | function jumpPreset() { 95 | var folders = [] 96 | var frequency = rlog(200, 800) 97 | params.carrier.type = choose('triangle', 'w909', 'w999') 98 | params.carrier.duration = rand(0.05, 0.2) 99 | params.carrier.sustain = rand(0.2, 0.7) 100 | params.carrier.release = rand(0.05, 0.15) 101 | // sweeps and jumps and effects 102 | folders.push('mods1') 103 | params.mods1.delay = 0 104 | params.mods1.sweep = rand(1.1, 2.5) 105 | params.mods1.sweeptime = rand(0.1, 0.3) 106 | if (rint(0, 2)) { 107 | folders.push('mods2') 108 | params.mods2.delay = rand(0.03, 0.1) 109 | params.mods2.jumpmult = 1 + rand(0.1, 0.3) * choose(1, -1) 110 | } 111 | return { folders, frequency } 112 | } 113 | 114 | 115 | 116 | 117 | 118 | 119 | function coinPreset() { 120 | var folders = [] 121 | var frequency = rlog(120, 1600) 122 | params.carrier.type = choose('sine', 'triangle', 'w909', 'w999') 123 | params.carrier.duration = rand(0.05, 0.1) 124 | params.carrier.sustain = rand(0.1, 0.5) 125 | params.carrier.release = rand(0.05, 0.25) 126 | // sweeps and jumps and effects 127 | if (rint(0, 4)) { 128 | folders.push('mods1') 129 | params.mods1.delay = rand(0.02, 0.1) 130 | params.mods1.jumpmult = rand(1.1, 1.5) 131 | if (rint(0, 1.7)) { 132 | folders.push('mods2') 133 | params.mods2.delay = rand(0.02, 0.1) 134 | params.mods2.jumpmult = rand(1.1, 1.5) 135 | } 136 | } 137 | return { folders, frequency } 138 | } 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | function explosionPreset() { 147 | var folders = [] 148 | var frequency = rlog(100, 1000) 149 | params.carrier.duration = rand(0.1, 0.2) 150 | params.carrier.sustain = rand(0.1, 0.5) 151 | params.carrier.release = rand(0.2, 0.3) 152 | folders.push('distort1') 153 | params.distort1.type = choose('crush', 'shape-boost') 154 | params.distort1.argument = rint(1, 9) 155 | if (rint(0, 2)) { 156 | params.carrier.type = choose('sine', 'triangle') 157 | folders.push('FM') 158 | params.FM.type = choose('n0', 'np', 'nb') 159 | params.FM.multiplier = rand(3, 10) 160 | params.FM.release = 5 161 | // sweeps and jumps and effects 162 | folders.push('mods1') 163 | params.mods1.sweep = rand(0.2, 0.9) 164 | params.mods1.sweeptime = params.carrier.release 165 | } else { 166 | params.carrier.type = choose('n0', 'np', 'nb') 167 | folders.push('effect1') 168 | params.effect1.type = choose('bandpass', 'lowpass') 169 | var low = /low/.test(params.effect1.type) 170 | params.effect1.freqmult = low ? rand(3, 8) : rand(1, 1.5) 171 | params.effect1.sweep = rand(0.1, 0.5) 172 | params.effect1.sweeptime = rlog(0.01, 0.2) 173 | params.effect1.q = rand(0.5, 5) 174 | if (rint(0, 2)) { 175 | folders.push('tremolo') 176 | params.tremolo.depth = rand(0.1, 0.5) 177 | params.tremolo.frequency = rlog(5, 60) 178 | } 179 | } 180 | if (rint(0, 2)) { 181 | folders.push('vibrato') 182 | params.vibrato.depth = rand(0.05, 0.2) 183 | params.vibrato.frequency = rlog(5, 60) 184 | } 185 | return { folders, frequency } 186 | } 187 | 188 | 189 | 190 | function laserPreset() { 191 | var folders = [] 192 | var frequency = rlog(300, 1500) 193 | params.carrier.type = choose('sine', 'triangle', 'sawtooth', 'p25', 'p40') 194 | params.carrier.duration = rand(0.05, 0.15) 195 | params.carrier.sustain = rand(0.2, 0.6) 196 | params.carrier.release = rand(0.02, 0.1) 197 | // sweeps and jumps and effects 198 | folders.push('mods1') 199 | params.mods1.sweep = rlog(0.25, 4) 200 | params.mods1.sweeptime = rand(0.02, 0.08) 201 | if (rint(0, 2)) { 202 | folders.push('vibrato') 203 | params.vibrato.depth = rand(0.1, 0.5) 204 | params.vibrato.frequency = rlog(5, 80) 205 | } 206 | return { folders, frequency } 207 | } 208 | 209 | 210 | 211 | 212 | 213 | function ouchPreset() { 214 | var folders = [] 215 | var frequency = rand(400, 1000) 216 | params.carrier.type = choose('n0', 'np', 'nb') 217 | params.carrier.duration = rlog(0.03, 0.06) 218 | params.carrier.attack = rlog(0.01, 0.05) 219 | params.carrier.sustain = rand(0.2, 0.6) 220 | params.carrier.release = rlog(0.01, 0.1) 221 | params.carrier.decay = rlog(0.01, 0.1) 222 | if (rint(0, 3)) { 223 | folders.push('distort1') 224 | params.distort1.type = choose('crush', 'shape-boost') 225 | params.distort1.argument = rint(2, 7) 226 | } 227 | folders.push('effect1') 228 | params.effect1.type = 'bandpass' 229 | params.effect1.freqmult = rand(1, 2) 230 | params.effect1.sweep = rand(0.25, 0.8) 231 | params.effect1.sweeptime = rlog(0.01, 0.05) 232 | params.effect1.q = rand(0.5, 3) 233 | return { folders, frequency } 234 | } 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | function powerPreset() { 243 | var folders = [] 244 | var frequency = rlog(400, 1000) 245 | params.carrier.type = choose('sine', 'square', 'triangle', 'sawtooth', 'w909') 246 | params.carrier.duration = rand(0.05, 0.1) 247 | params.carrier.sustain = rand(0.2, 0.6) 248 | params.carrier.release = rand(0.05, 0.2) 249 | // sweeps and jumps and effects 250 | folders.push('mods1') 251 | if (rint(0, 2)) { 252 | params.mods1.sweep = rand(1, 1.7) 253 | params.mods1.sweeptime = rand(0.05, 0.2) 254 | } else { 255 | params.mods1.sweep = rand(0.7, 0.9) 256 | params.mods1.sweeptime = rand(0.05, 0.2) 257 | params.mods1.delay = rand(0.05, 0.2) 258 | params.mods1.jumpadd = rand(50, 150) 259 | params.mods1.repeat = 30 260 | } 261 | if (rint(0, 2)) { 262 | folders.push('tremolo') 263 | params.tremolo.type = 'square' 264 | params.tremolo.depth = rlog(0.025, 0.5) 265 | params.tremolo.frequency = rlog(10, 50) 266 | } 267 | return { folders, frequency } 268 | } 269 | 270 | 271 | 272 | 273 | 274 | function uiPreset() { 275 | var folders = [] 276 | var frequency = rlog(150, 3000) 277 | params.carrier.type = choose('sine', 'square', 'triangle', 'sawtooth', 'p25', 'w909', 'n0', 'n1') 278 | params.carrier.duration = rand(0.01, 0.05) 279 | params.carrier.attack = rand(0.01, 0.05) 280 | params.carrier.sustain = rand(0.2, 0.6) 281 | params.carrier.release = rand(0.01, 0.05) 282 | params.carrier.decay = rlog(0.01, 0.1) 283 | // sweeps and jumps and effects 284 | if (rint(0, 2)) { 285 | folders.push('mods1') 286 | params.mods1.sweep = rand(0.5, 1.5) 287 | params.mods1.sweeptime = rand(0.01, 0.5) 288 | } 289 | return { folders, frequency } 290 | } 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | -------------------------------------------------------------------------------- /docs/webpack.config.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var path = require('path') 4 | var entryPath = path.resolve('.', 'demo.js') 5 | var buildPath = path.resolve('.') 6 | 7 | 8 | module.exports = (env) => ({ 9 | 10 | mode: (() => { 11 | return (env && env.prod) ? 12 | 'production' : 'development' 13 | })(), 14 | 15 | entry: entryPath, 16 | 17 | output: { 18 | path: buildPath, 19 | filename: 'bundle.js', 20 | }, 21 | stats: "minimal", 22 | devServer: { 23 | static: buildPath, 24 | host: "0.0.0.0", 25 | }, 26 | }) 27 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // inputs 3 | "include": [ 4 | "docs/demo.js", 5 | ], 6 | "compilerOptions": { 7 | // output 8 | "outDir": "./dist", 9 | "target": "es5", 10 | "rootDir": ".", 11 | "allowJs": true, 12 | "checkJs": true, 13 | "resolveJsonModule": true, 14 | "esModuleInterop": true, 15 | "lib": [ 16 | "DOM", 17 | "DOM.Iterable", 18 | "ES2018" 19 | ], 20 | }, 21 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wafxr", 3 | "version": "0.18.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "wafxr", 9 | "version": "0.18.2", 10 | "license": "ISC", 11 | "dependencies": { 12 | "wasgen": "^0.18.2" 13 | }, 14 | "devDependencies": { 15 | "audiobuffer-to-wav": "^1.0.0", 16 | "tweakpane": "^1.3.4" 17 | } 18 | }, 19 | "node_modules/audiobuffer-to-wav": { 20 | "version": "1.0.0", 21 | "resolved": "https://registry.npmjs.org/audiobuffer-to-wav/-/audiobuffer-to-wav-1.0.0.tgz", 22 | "integrity": "sha1-1bQyJxRV5/7laxEc0PjWINf54QU=", 23 | "dev": true 24 | }, 25 | "node_modules/param-enveloper": { 26 | "version": "0.3.0", 27 | "resolved": "https://registry.npmjs.org/param-enveloper/-/param-enveloper-0.3.0.tgz", 28 | "integrity": "sha512-m6bijy1QhP5xctlcD4BVM+QCKeu3LaHdnP5fYj56J91s28jtF2Y7c+YExVBFxAyb/LO0sfCK95Ugt69E0ea/5w==" 29 | }, 30 | "node_modules/tweakpane": { 31 | "version": "1.6.1", 32 | "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-1.6.1.tgz", 33 | "integrity": "sha512-uvaD2SSfAInM2Zk/tCh7j2Ri5GYzKVBmQI7hD1cEKe2HVUT7QWflxZfZbIRCeD4C0odK5PLrCvCq90YjrOMFyg==", 34 | "dev": true 35 | }, 36 | "node_modules/wasgen": { 37 | "version": "0.18.2", 38 | "resolved": "https://registry.npmjs.org/wasgen/-/wasgen-0.18.2.tgz", 39 | "integrity": "sha512-xuxm2cSJikciXC9HSJh8C+k5XVxBXGx9EERdafSmg6l+AJG9iNH35fkUO5IJagMRDCChHBJUlhy1/+c6zTmAJA==", 40 | "dependencies": { 41 | "param-enveloper": "^0.3.0" 42 | } 43 | } 44 | }, 45 | "dependencies": { 46 | "audiobuffer-to-wav": { 47 | "version": "1.0.0", 48 | "resolved": "https://registry.npmjs.org/audiobuffer-to-wav/-/audiobuffer-to-wav-1.0.0.tgz", 49 | "integrity": "sha1-1bQyJxRV5/7laxEc0PjWINf54QU=", 50 | "dev": true 51 | }, 52 | "param-enveloper": { 53 | "version": "0.3.0", 54 | "resolved": "https://registry.npmjs.org/param-enveloper/-/param-enveloper-0.3.0.tgz", 55 | "integrity": "sha512-m6bijy1QhP5xctlcD4BVM+QCKeu3LaHdnP5fYj56J91s28jtF2Y7c+YExVBFxAyb/LO0sfCK95Ugt69E0ea/5w==" 56 | }, 57 | "tweakpane": { 58 | "version": "1.6.1", 59 | "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-1.6.1.tgz", 60 | "integrity": "sha512-uvaD2SSfAInM2Zk/tCh7j2Ri5GYzKVBmQI7hD1cEKe2HVUT7QWflxZfZbIRCeD4C0odK5PLrCvCq90YjrOMFyg==", 61 | "dev": true 62 | }, 63 | "wasgen": { 64 | "version": "0.18.2", 65 | "resolved": "https://registry.npmjs.org/wasgen/-/wasgen-0.18.2.tgz", 66 | "integrity": "sha512-xuxm2cSJikciXC9HSJh8C+k5XVxBXGx9EERdafSmg6l+AJG9iNH35fkUO5IJagMRDCChHBJUlhy1/+c6zTmAJA==", 67 | "requires": { 68 | "param-enveloper": "^0.3.0" 69 | } 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wafxr", 3 | "version": "0.18.2", 4 | "description": "webaudio sound effects", 5 | "main": "src/wafxr.js", 6 | "files": [ 7 | "/src" 8 | ], 9 | "scripts": { 10 | "start": "cd docs && webpack-dev-server", 11 | "build": "cd docs && webpack --env prod" 12 | }, 13 | "author": "Andy Hall", 14 | "keywords": [ 15 | "webaudio", 16 | "sound effects", 17 | "js" 18 | ], 19 | "license": "ISC", 20 | "repository": "github:fenomas/wafxr", 21 | "dependencies": { 22 | "wasgen": "^0.18.2" 23 | }, 24 | "devDependencies": { 25 | "audiobuffer-to-wav": "^1.0.0", 26 | "tweakpane": "^1.3.4" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/wafxr.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * 4 | * now generates sounds with `wasgen` library 5 | * export it, as a convenience for any legacy code 6 | * using this lib as a dependency 7 | * 8 | */ 9 | 10 | import { gen } from 'wasgen' 11 | 12 | export default gen 13 | 14 | 15 | --------------------------------------------------------------------------------