@grame/faustwasm 0.16.3 → 0.16.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://@shren/faust-ui/./node_modules/@shren/typed-event-emitter/dist/index.js","webpack://@shren/faust-ui/./src/FaustUI.ts","webpack://@shren/faust-ui/./src/components/AbstractComponent.ts","webpack://@shren/faust-ui/./src/components/AbstractItem.ts","webpack://@shren/faust-ui/./src/components/Button.ts","webpack://@shren/faust-ui/./src/components/Checkbox.ts","webpack://@shren/faust-ui/./src/components/Group.ts","webpack://@shren/faust-ui/./src/components/HBargraph.ts","webpack://@shren/faust-ui/./src/components/HSlider.ts","webpack://@shren/faust-ui/./src/components/Knob.ts","webpack://@shren/faust-ui/./src/components/Led.ts","webpack://@shren/faust-ui/./src/components/Menu.ts","webpack://@shren/faust-ui/./src/components/Nentry.ts","webpack://@shren/faust-ui/./src/components/Numerical.ts","webpack://@shren/faust-ui/./src/components/Radio.ts","webpack://@shren/faust-ui/./src/components/Soundfile.ts","webpack://@shren/faust-ui/./src/components/VBargraph.ts","webpack://@shren/faust-ui/./src/components/VSlider.ts","webpack://@shren/faust-ui/./src/components/utils.ts","webpack://@shren/faust-ui/./src/instantiate.ts","webpack://@shren/faust-ui/./src/layout/AbstractGroup.ts","webpack://@shren/faust-ui/./src/layout/AbstractInputItem.ts","webpack://@shren/faust-ui/./src/layout/AbstractItem.ts","webpack://@shren/faust-ui/./src/layout/AbstractOutputItem.ts","webpack://@shren/faust-ui/./src/layout/Button.ts","webpack://@shren/faust-ui/./src/layout/Checkbox.ts","webpack://@shren/faust-ui/./src/layout/HBargraph.ts","webpack://@shren/faust-ui/./src/layout/HGroup.ts","webpack://@shren/faust-ui/./src/layout/HSlider.ts","webpack://@shren/faust-ui/./src/layout/Knob.ts","webpack://@shren/faust-ui/./src/layout/Layout.ts","webpack://@shren/faust-ui/./src/layout/Led.ts","webpack://@shren/faust-ui/./src/layout/Menu.ts","webpack://@shren/faust-ui/./src/layout/Nentry.ts","webpack://@shren/faust-ui/./src/layout/Numerical.ts","webpack://@shren/faust-ui/./src/layout/Radio.ts","webpack://@shren/faust-ui/./src/layout/Soundfile.ts","webpack://@shren/faust-ui/./src/layout/TGroup.ts","webpack://@shren/faust-ui/./src/layout/VBargraph.ts","webpack://@shren/faust-ui/./src/layout/VGroup.ts","webpack://@shren/faust-ui/./src/layout/VSlider.ts","webpack://@shren/faust-ui/./src/components/Base.scss?7dde","webpack://@shren/faust-ui/./src/components/Button.scss?0477","webpack://@shren/faust-ui/./src/components/Checkbox.scss?c5fc","webpack://@shren/faust-ui/./src/components/Group.scss?02dc","webpack://@shren/faust-ui/./src/components/HBargraph.scss?1965","webpack://@shren/faust-ui/./src/components/HSlider.scss?9042","webpack://@shren/faust-ui/./src/components/Knob.scss?e43b","webpack://@shren/faust-ui/./src/components/Led.scss?9f37","webpack://@shren/faust-ui/./src/components/Menu.scss?9176","webpack://@shren/faust-ui/./src/components/Nentry.scss?1976","webpack://@shren/faust-ui/./src/components/Numerical.scss?f52f","webpack://@shren/faust-ui/./src/components/Radio.scss?89be","webpack://@shren/faust-ui/./src/components/Soundfile.scss?16d8","webpack://@shren/faust-ui/./src/components/VBargraph.scss?8274","webpack://@shren/faust-ui/./src/components/VSlider.scss?1848","webpack://@shren/faust-ui/./src/index.scss?a5de","webpack://@shren/faust-ui/webpack/bootstrap","webpack://@shren/faust-ui/webpack/runtime/define property getters","webpack://@shren/faust-ui/webpack/runtime/hasOwnProperty shorthand","webpack://@shren/faust-ui/webpack/runtime/make namespace object","webpack://@shren/faust-ui/./src/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TypedEventEmitter = exports.$AnyEventType = void 0;\nexports.$AnyEventType = Symbol(\"__TypedEventListener_AnyEventType\");\nclass TypedEventEmitter {\n constructor() {\n this._listeners = { [exports.$AnyEventType]: [] };\n }\n get listeners() {\n return this._listeners;\n }\n getListeners(eventName) {\n if (!(eventName in this._listeners))\n this._listeners[eventName] = [];\n return this._listeners[eventName];\n }\n on(eventName, listener) {\n if (this.getListeners(eventName).indexOf(listener) === -1)\n this.getListeners(eventName).push(listener);\n }\n once(eventName, listener) {\n const listenerWithOff = (arg, emitter) => {\n const returnValue = listener(arg, emitter);\n this.off(eventName, listenerWithOff);\n return returnValue;\n };\n this.on(eventName, listenerWithOff);\n }\n onAny(listener) {\n this._listeners[exports.$AnyEventType].push(listener);\n }\n off(eventName, listener) {\n const i = this.getListeners(eventName).indexOf(listener);\n if (i !== -1)\n this.getListeners(eventName).splice(i, 1);\n }\n offAny(listener) {\n const i = this._listeners[exports.$AnyEventType].indexOf(listener);\n if (i !== -1)\n this._listeners[exports.$AnyEventType].splice(i, 1);\n }\n async emit(eventName, eventData, options) {\n var _a;\n let listeners = this.getListeners(eventName);\n let anyListeners = (options === null || options === void 0 ? void 0 : options.excludeAny) ? [] : this._listeners[exports.$AnyEventType];\n if (!listeners.length && !anyListeners.length)\n return [];\n if ((_a = options === null || options === void 0 ? void 0 : options.exclude) === null || _a === void 0 ? void 0 : _a.length) {\n const { exclude } = options;\n listeners = listeners.filter(l => exclude.indexOf(l) === -1);\n anyListeners = anyListeners.filter(l => exclude.indexOf(l) === -1);\n }\n return Promise.all([...listeners.map(f => f(eventData, this)), ...anyListeners.map(f => f(eventName, eventData, this))]);\n }\n async emitSerial(eventName, eventData, options) {\n var _a;\n let listeners = this.getListeners(eventName);\n let anyListeners = (options === null || options === void 0 ? void 0 : options.excludeAny) ? [] : this._listeners[exports.$AnyEventType];\n if (!listeners.length && !anyListeners.length)\n return [];\n if ((_a = options === null || options === void 0 ? void 0 : options.exclude) === null || _a === void 0 ? void 0 : _a.length) {\n const { exclude } = options;\n listeners = listeners.filter(l => exclude.indexOf(l) === -1);\n anyListeners = anyListeners.filter(l => exclude.indexOf(l) === -1);\n }\n const returnValues = [];\n for (let i = 0; i < listeners.length; i++) {\n const listener = listeners[i];\n returnValues[i] = await listener(eventData, this);\n }\n for (let i = 0; i < anyListeners.length; i++) {\n const listener = anyListeners[i];\n returnValues[listeners.length + i] = await listener(eventName, eventData, this);\n }\n return returnValues;\n }\n emitSync(eventName, eventData, options) {\n var _a;\n let listeners = this.getListeners(eventName);\n let anyListeners = (options === null || options === void 0 ? void 0 : options.excludeAny) ? [] : this._listeners[exports.$AnyEventType];\n if (!listeners.length && !anyListeners.length)\n return [];\n if ((_a = options === null || options === void 0 ? void 0 : options.exclude) === null || _a === void 0 ? void 0 : _a.length) {\n const { exclude } = options;\n listeners = listeners.filter(l => exclude.indexOf(l) === -1);\n anyListeners = anyListeners.filter(l => exclude.indexOf(l) === -1);\n }\n return [...listeners.map(f => f(eventData, this)), ...anyListeners.map(f => f(eventName, eventData, this))];\n }\n offAll(eventName) {\n if (eventName) {\n this._listeners[eventName] = [];\n }\n else {\n this._listeners = { [exports.$AnyEventType]: [] };\n }\n }\n listenerCount(eventName) {\n const anyListenerCount = this._listeners[exports.$AnyEventType].length;\n if (!(eventName in this._listeners))\n return anyListenerCount;\n return this._listeners[eventName].length + anyListenerCount;\n }\n}\nexports.TypedEventEmitter = TypedEventEmitter;\nexports.default = TypedEventEmitter;\n//# sourceMappingURL=index.js.map","import type { FaustUIDescriptor, FaustUIInputItem, FaustUIItem, FaustUIOutputItem } from \"@grame/faustwasm\";\nimport Layout from \"./layout/Layout\";\nimport AbstractItem from \"./components/AbstractItem\";\nimport Group from \"./components/Group\";\nimport type { FaustUIGroupProps } from \"./components/types\";\nimport type { LayoutProps } from \"./types\";\nimport \"./index.scss\";\n\ninterface IOptions {\n root: HTMLDivElement;\n ui?: FaustUIDescriptor;\n listenWindowResize?: boolean;\n listenWindowMessage?: boolean;\n}\n\n/**\n * The main class of UI constructor,\n * listening to `resize` window event to resize component,\n * listening to `message` window event to change UI or param value.\n * See readme.\n */\nexport default class FaustUI {\n componentMap: { [path: string]: AbstractItem<any>[] } = {};\n DOMroot: HTMLDivElement;\n faustUIRoot: Group;\n hostWindow: Window;\n grid: number;\n private _ui: FaustUIItem[];\n private _layout: LayoutProps;\n /**\n * Calculate incoming UI's layout, bind window events\n */\n constructor(options: IOptions) {\n const { root, ui: uiIn, listenWindowResize, listenWindowMessage } = options;\n this.DOMroot = root;\n this.ui = uiIn || [];\n if (typeof listenWindowResize === \"undefined\" || listenWindowResize === true) {\n window.addEventListener(\"resize\", () => {\n this.resize();\n });\n }\n if (typeof listenWindowMessage === \"undefined\" || listenWindowMessage === true) {\n window.addEventListener(\"message\", (e) => {\n const { data, source } = e;\n if (!data) return;\n const { type } = data;\n if (!type) return;\n this.hostWindow = source as Window;\n if (type === \"ui\") {\n this.ui = data.ui;\n } else if (type === \"param\") {\n const { path, value } = data;\n this.paramChangeByDSP(path, value);\n }\n });\n }\n }\n /**\n * Render the UI to DOM root\n */\n mount() {\n this.componentMap = {};\n this.DOMroot.innerHTML = \"\";\n const props: FaustUIGroupProps = {\n label: \"\",\n type: \"vgroup\",\n items: this.ui,\n style: {\n grid: this.grid,\n width: this.layout.width,\n height: this.layout.height,\n left: this.layout.offsetLeft,\n top: this.layout.offsetTop\n },\n isRoot: true,\n emitter: this\n };\n this.faustUIRoot = new Group(props);\n this.faustUIRoot.componentWillMount();\n this.faustUIRoot.mount();\n this.DOMroot.appendChild(this.faustUIRoot.container);\n this.faustUIRoot.componentDidMount();\n }\n /**\n * This method should be called by components to register itself to map.\n */\n register(path: string, item: AbstractItem<any>) {\n if (this.componentMap[path]) this.componentMap[path].push(item);\n else this.componentMap[path] = [item];\n }\n /**\n * Notify the component to change its value.\n */\n paramChangeByDSP(path: string, value: number) {\n if (this.componentMap[path]) this.componentMap[path].forEach(item => item.setState({ value }));\n }\n /**\n * Can be overriden, called by components when its value is changed by user.\n */\n paramChangeByUI = (path: string, value: number) => {\n if (!this.hostWindow) return;\n this.hostWindow.postMessage({ path, value, type: \"param\" }, \"*\");\n };\n /**\n * Calculate UI layout in grid then calculate grid size.\n */\n calc() {\n const { items, layout } = Layout.calc(this.ui);\n this._ui = items;\n this._layout = layout;\n this.calcGrid();\n }\n /**\n * Calculate grid size by DOM root size and layout size in grids.\n */\n calcGrid() {\n const { width, height } = this.DOMroot.getBoundingClientRect();\n const grid = Math.max(40, Math.min(width / this._layout.width, height / this._layout.height));\n this.grid = grid;\n return grid;\n }\n /**\n * Force recalculate grid size and resize UI\n */\n resize() {\n if (!this.faustUIRoot) return;\n this.calcGrid();\n this.faustUIRoot.setState({ style: { grid: this.grid } });\n }\n /** Filter out items with `hidden` metadata and `soundfile` items */\n filter(ui: FaustUIItem[]) {\n const callback = (items: FaustUIItem[], item: FaustUIItem) => {\n if (item.type === \"soundfile\") return items;\n if (item.type === \"hgroup\" || item.type === \"vgroup\" || item.type === \"tgroup\") {\n items.push({ ...item, items: item.items.reduce(callback, [] as FaustUIItem[]) });\n return items;\n }\n if ((item as FaustUIInputItem | FaustUIOutputItem).meta?.find(m => m.hidden && m.hidden === \"1\")) return items;\n items.push(item);\n return items;\n }\n return ui.reduce(callback, []);\n }\n get ui() {\n return this._ui;\n }\n set ui(uiIn) {\n this._ui = this.filter(uiIn);\n this.calc();\n this.mount();\n }\n get layout() {\n return this._layout;\n }\n get minWidth() {\n return this._layout.width * 40 + 1;\n }\n get minHeight() {\n return this._layout.height * 40 + 1;\n }\n}\n","import TypedEventEmitter from \"@shren/typed-event-emitter\";\n\nexport default abstract class AbstractComponent<T extends { [key: string]: any; }> extends TypedEventEmitter<T> {\n /**\n * The default state of the component.\n */\n static defaultProps: Record<string, any> = {};\n get defaultProps() {\n return (this.constructor as typeof AbstractComponent).defaultProps as T;\n }\n /**\n * Here stores corrent state of component\n * change the state with `setState` method to fire state events\n * then UI parts will get notified and rerender\n */\n state: T;\n /**\n * Frame count in order to reduce frame rate\n */\n private $frame = 0;\n /**\n * Frame reducing factor, 1 = render at every browser rendering tick, 2 will skip one every two ticks.\n */\n frameReduce = 1;\n /**\n * Here stores current `requestAnimationFrame` reference\n * if we have a new state to render, we cancel the old one\n */\n private $raf: number;\n /**\n * `requestAnimationFrame` callback\n */\n private raf = () => {\n this.$frame++;\n if (this.$frame % this.frameReduce !== 0) {\n this.$raf = window.requestAnimationFrame(this.raf);\n return;\n }\n this.$raf = undefined;\n this.tasks.forEach(f => f());\n this.tasks = [];\n };\n /**\n * tasks to execute in next redering tick\n */\n private tasks: (() => any)[] = [];\n /**\n * Initiate default state with incoming state.\n */\n constructor(props?: T) {\n super();\n this.state = { ...this.defaultProps, ...props };\n }\n /**\n * set internal state and fire events for UI parts subscribed\n */\n setState(newState: Partial<T>) {\n let shouldUpdate = false;\n for (const stateKey in newState) {\n const stateValue = newState[stateKey];\n if (stateKey in this.state && this.state[stateKey] !== stateValue) {\n this.state[stateKey] = stateValue;\n shouldUpdate = true;\n } else return;\n if (shouldUpdate) this.emit(stateKey, this.state[stateKey]);\n }\n }\n /**\n * Use this method to request a new rendering\n * schedule what you need to do in next render tick in `raf` callback\n */\n schedule(func: () => any) {\n if (this.tasks.indexOf(func) === -1) this.tasks.push(func);\n if (this.$raf) return;\n this.$raf = window.requestAnimationFrame(this.raf);\n }\n}\n","import AbstractComponent from \"./AbstractComponent\";\nimport { normalize, normExp, normLog } from \"./utils\";\nimport type { FaustUIItemStyle, FaustUIItemProps, PointerDownEvent as MouseOrTouchDownEvent, PointerDragEvent as MouseOrTouchMoveEvent, PointerUpEvent as MouseOrTouchUpEvent } from \"./types\";\nimport \"./Base.scss\";\n\n/**\n * Abstract class that describes a FaustUI Component\n * this is an event emitter that emits every state change to inform UI renderer parts\n * Each UI parts could subscribe to a specific state such as `value`, `min`, `max` or `style`\n * when the event subscribed is fired, this part of ui updated using its own handler without updating the rest of UI parts\n * the types of events is restricted to the same as keys of `state` object:\n * `state` object is a `FaustUIItemProps` with a `style` object that contains `T` defined by child class.\n * Child class can override life cycle methods\n * `componentWillMount` prepare data before DOM get loads to page\n * `mount` get DOMs append to page\n * `componentDidMount` Now draw canvas etc.\n */\nexport default abstract class AbstractItem<T extends FaustUIItemStyle> extends AbstractComponent<FaustUIItemProps<T>> {\n /**\n * The default state of the component.\n */\n static defaultProps: FaustUIItemProps<FaustUIItemStyle> = {\n value: 0,\n active: true,\n focus: false,\n label: \"\",\n address: \"\",\n min: 0,\n max: 1,\n init: 0,\n enums: {},\n type: \"float\",\n unit: \"\",\n scale: \"linear\",\n step: 0.01,\n style: { width: 45, height: 15, left: 0, top: 0, labelcolor: \"rgba(226, 222, 255, 0.5)\" }\n };\n /**\n * DOM Div container of the component\n */\n container: HTMLDivElement;\n /**\n * DOM Div container of label canvas\n */\n label: HTMLDivElement;\n /**\n * Use canvas as label to fit full text in.\n */\n labelCanvas: HTMLCanvasElement;\n labelCtx: CanvasRenderingContext2D;\n /**\n * Override this to get css work\n */\n className: string;\n frameReduce = 3;\n /**\n * Default DOM event listeners, unify mousedown and touchstart events\n * For mouse or touch events, please use `handlePointerDown` `handlePointerUp` `handlePointerDrag` callbacks\n */\n handleKeyDown = (e: KeyboardEvent) => {};\n handleKeyUp = (e: KeyboardEvent) => {};\n handleTouchStart = (e: TouchEvent) => {\n e.preventDefault();\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n let prevX = e.touches[0].clientX;\n let prevY = e.touches[0].clientY;\n const fromX = prevX - rect.left;\n const fromY = prevY - rect.top;\n const prevValue = this.state.value;\n this.handleMouseOrTouchDown({ pointerId: -1, x: fromX, y: fromY, originalEvent: e });\n const handleTouchMove = (e: TouchEvent) => {\n e.preventDefault();\n const clientX = e.changedTouches[0].clientX;\n const clientY = e.changedTouches[0].clientY;\n const movementX = clientX - prevX;\n const movementY = clientY - prevY;\n prevX = clientX;\n prevY = clientY;\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n this.handleMouseOrTouchMove({ pointerId: -1, prevValue, x, y, fromX, fromY, movementX, movementY, originalEvent: e });\n };\n const handleTouchEnd = (e: TouchEvent) => {\n e.preventDefault();\n const x = e.changedTouches[0].clientX - rect.left;\n const y = e.changedTouches[0].clientY - rect.top;\n this.handleMouseOrTouchUp({ pointerId: -1, x, y, originalEvent: e });\n document.removeEventListener(\"touchmove\", handleTouchMove);\n document.removeEventListener(\"touchend\", handleTouchEnd);\n };\n document.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n document.addEventListener(\"touchend\", handleTouchEnd, { passive: false });\n };\n handleWheel = (e: WheelEvent) => {};\n handleClick = (e: MouseEvent) => {};\n /**\n * Handle double-click events to reset the value to its initial state.\n */\n handleDoubleClick = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.setToInitialValue();\n };\n handleMouseDown = (e: MouseEvent) => {\n e.preventDefault();\n (e.currentTarget as HTMLElement).focus();\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const fromX = e.clientX - rect.left;\n const fromY = e.clientY - rect.top;\n const prevValue = this.state.value;\n this.handleMouseOrTouchDown({ pointerId: -1, x: fromX, y: fromY, originalEvent: e });\n const handleMouseMove = (e: MouseEvent) => {\n e.preventDefault();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n this.handleMouseOrTouchMove({ pointerId: -1, prevValue, x, y, fromX, fromY, movementX: e.movementX, movementY: e.movementY, originalEvent: e });\n };\n const handleMouseUp = (e: MouseEvent) => {\n e.preventDefault();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n this.handleMouseOrTouchUp({ pointerId: -1, x, y, originalEvent: e });\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n };\n handleMouseOver = (e: MouseEvent) => {};\n handleMouseOut = (e: MouseEvent) => {};\n handleContextMenu = (e: MouseEvent) => {};\n handlePointerDown = (e: PointerEvent) => {\n e.preventDefault();\n (e.currentTarget as HTMLElement).focus();\n const { pointerId } = e;\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const fromX = e.clientX - rect.left;\n const fromY = e.clientY - rect.top;\n const prevValue = this.state.value;\n this.handleMouseOrTouchDown({ pointerId, x: fromX, y: fromY, originalEvent: e });\n const handlePointerMove = (e: PointerEvent) => {\n if (e.pointerId !== pointerId) return;\n e.preventDefault();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n this.handleMouseOrTouchMove({ pointerId, prevValue, x, y, fromX, fromY, movementX: e.movementX, movementY: e.movementY, originalEvent: e });\n };\n const handlePointerUp = (e: PointerEvent) => {\n if (e.pointerId !== pointerId) return;\n e.preventDefault();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n this.handleMouseOrTouchUp({ pointerId, x, y, originalEvent: e });\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n };\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp);\n \n };\n handleMouseOrTouchDown = (e: MouseOrTouchDownEvent) => {};\n handleMouseOrTouchMove = (e: MouseOrTouchMoveEvent) => {};\n handleMouseOrTouchUp = (e: MouseOrTouchUpEvent) => {};\n handleFocusIn = (e: FocusEvent) => this.setState({ focus: true });\n handleFocusOut = (e: FocusEvent) => this.setState({ focus: false });\n\n /**\n * Initiate default state with incoming state.\n */\n constructor(props?: FaustUIItemProps<T>) {\n super(props);\n this.state.style = { ...this.defaultProps.style, ...props.style };\n if (this.state.emitter) this.state.emitter.register(this.state.address, this);\n }\n /**\n * Get a nearest valid number\n */\n toValidNumber(value: number) {\n const { min, max, step } = this.state;\n if (typeof min !== \"number\" || typeof max !== \"number\") return value;\n const v = Math.min(max, Math.max(min, value));\n if (!step) return v;\n return min + Math.floor((v - min) / step) * step;\n }\n /**\n * Use this method if you want the emitter to send value to DSP\n */\n setValue(valueIn: number) {\n const value = this.toValidNumber(valueIn);\n const changed = this.setState({ value });\n if (changed) this.change(value);\n return changed;\n }\n setToInitialValue() {\n this.setValue(this.state.init);\n }\n /**\n * Send value to DSP\n */\n change(valueIn?: number) {\n if (this.state.emitter) this.state.emitter.paramChangeByUI(this.state.address, typeof valueIn === \"number\" ? valueIn : this.state.value);\n }\n /**\n * set internal state and fire events for UI parts subscribed\n * This will not send anything to DSP\n * @returns is state updated\n */\n setState(newState: { [key in keyof FaustUIItemProps<T>]?: FaustUIItemProps<T>[key] }) {\n let shouldUpdate = false;\n for (const key in newState) {\n const stateKey = key as keyof FaustUIItemProps<T>;\n const stateValue = newState[stateKey];\n if (stateKey === \"style\") {\n for (const styleKey in newState.style) {\n if (styleKey in this.state.style /* Fix hidden -> canvas not rendered bug && this.state.style[styleKey] !== newState.style[styleKey] */) {\n this.state.style[styleKey] = newState.style[styleKey];\n shouldUpdate = true;\n }\n }\n } else if (stateKey in this.state && this.state[stateKey] !== stateValue) {\n (this.state as any)[stateKey] = stateValue;\n shouldUpdate = true;\n } else return false;\n if (shouldUpdate) this.emit(stateKey, this.state[stateKey]);\n }\n return shouldUpdate;\n }\n /**\n * Create container with class name\n * override it with `super.componentWillMount();`\n */\n componentWillMount() {\n this.container = document.createElement(\"div\");\n this.container.className = [\"faust-ui-component\", \"faust-ui-component-\" + this.className].join(\" \");\n this.container.tabIndex = 1;\n this.container.id = this.state.address;\n if (this.state.tooltip) this.container.title = this.state.tooltip;\n this.label = document.createElement(\"div\");\n this.label.className = \"faust-ui-component-label\";\n this.labelCanvas = document.createElement(\"canvas\");\n this.labelCtx = this.labelCanvas.getContext(\"2d\");\n return this;\n }\n /**\n * Here append all child DOM to container\n */\n mount() {\n this.label.appendChild(this.labelCanvas);\n return this;\n }\n paintLabel(align?: CanvasTextAlign) {\n const label = this.state.label;\n const color = this.state.style.labelcolor;\n const ctx = this.labelCtx;\n const canvas = this.labelCanvas;\n const ratio = window.devicePixelRatio || 1;\n let { width, height } = this.label.getBoundingClientRect();\n if (!width || !height) return this;\n width = Math.floor(width);\n height = Math.floor(height);\n const scaledWidth = Math.floor(width * ratio);\n const scaledHeight = Math.floor(height * ratio);\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n // canvas.style.width = width + \"px\";\n // canvas.style.height = height + \"px\";\n ctx.scale(ratio, ratio);\n ctx.clearRect(0, 0, width, height);\n ctx.fillStyle = color;\n ctx.textBaseline = \"middle\";\n ctx.textAlign = align || \"center\";\n ctx.font = `bold ${height * 0.9}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"`;\n ctx.fillText(label, align === \"left\" ? 0 : align === \"right\" ? width : width / 2, height / 2, width);\n return this;\n }\n /**\n * will call this method when mounted\n */\n componentDidMount() {\n const handleResize = () => {\n const { grid, left, top, width, height } = this.state.style;\n this.container.style.width = `${width * grid}px`;\n this.container.style.height = `${height * grid}px`;\n this.container.style.left = `${left * grid}px`;\n this.container.style.top = `${top * grid}px`;\n this.label.style.height = `${grid * 0.25}px`;\n this.paintLabel();\n };\n this.on(\"style\", () => this.schedule(handleResize));\n handleResize();\n return this;\n }\n /**\n * Count steps in range min-max with step\n */\n get stepsCount() {\n const { type, max, min, step, enums } = this.state;\n const maxSteps = type === \"enum\" ? enums.length : type === \"int\" ? max - min : (max - min) / step;\n if (step) {\n if (type === \"enum\") return enums.length;\n if (type === \"int\") return Math.min(Math.floor((max - min) / (Math.round(step) || 1)), maxSteps);\n return Math.floor((max - min) / step);\n }\n return maxSteps;\n }\n /**\n * Normalized value between 0 - 1.\n */\n get distance() {\n const { type, max, min, value, enums, scale } = this.state;\n return AbstractItem.getDistance({ type, max, min, value, enums, scale });\n }\n static getDistance(state: { value: number; min: number; max: number; enums?: { [key: string]: number }; type: \"enum\" | \"int\" | \"float\"; scale: \"linear\" | \"exp\" | \"log\" }) {\n const { type, max, min, value, enums, scale } = state;\n if (type === \"enum\") return value / (enums.length - 1);\n const v = scale === \"exp\" ? normLog(value, min, max) : scale === \"log\" ? normExp(value, min, max) : value;\n return normalize(v, min, max);\n }\n /**\n * Mousemove pixels for each step\n */\n get stepRange() {\n const full = 100;\n const stepsCount = this.stepsCount;\n return full / stepsCount;\n }\n}\n","import AbstractItem from \"./AbstractItem\";\nimport type { FaustUIItemStyle, FaustUIItemProps } from \"./types\";\nimport \"./Button.scss\";\n\nexport interface FaustUIButtonStyle extends FaustUIItemStyle {\n fontname?: string;\n fontsize?: number;\n fontface?: \"normal\" | \"bold\" | \"italic\" | \"bold italic\";\n bgcolor?: string;\n bgoncolor?: string;\n bordercolor?: string;\n borderoncolor?: string;\n textcolor?: string;\n textoncolor?: string;\n}\nexport default class Button extends AbstractItem<FaustUIButtonStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUIButtonStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"normal\",\n bgcolor: \"rgba(40, 40, 40, 1)\",\n bgoncolor: \"rgba(18, 18, 18, 1)\",\n bordercolor: \"rgba(80, 80, 80, 1)\",\n borderoncolor: \"rgba(255, 165, 0, 1)\",\n textcolor: \"rgba(226, 222, 255, 0.5)\",\n textoncolor: \"rgba(255, 165, 0, 1)\"\n }\n };\n }\n className = \"button\";\n\n btn: HTMLDivElement;\n span: HTMLSpanElement;\n componentWillMount() {\n super.componentWillMount();\n this.btn = document.createElement(\"div\");\n this.span = document.createElement(\"span\");\n this.span.innerText = this.state.label;\n this.setStyle();\n return this;\n }\n setStyle = () => {\n const { value, style } = this.state;\n const { height, grid, fontsize, fontname, fontface, textcolor, textoncolor, bgoncolor, bgcolor, bordercolor, borderoncolor } = style;\n this.btn.style.backgroundColor = value ? bgoncolor : bgcolor;\n this.btn.style.borderColor = value ? borderoncolor : bordercolor;\n this.btn.style.color = value ? textoncolor : textcolor;\n this.btn.style.fontSize = `${fontsize || height * grid / 4}px`;\n this.btn.style.fontFamily = `${fontname}, sans-serif`;\n this.btn.style.fontStyle = fontface;\n };\n mount() {\n this.btn.appendChild(this.span);\n this.container.appendChild(this.btn);\n return super.mount();\n }\n componentDidMount() {\n super.componentDidMount();\n this.btn.addEventListener(\"pointerdown\", this.handlePointerDown);\n this.btn.addEventListener(\"contextmenu\", this.handleContextMenu);\n // this.btn.addEventListener(\"mousedown\", this.handleMouseDown);\n // this.btn.addEventListener(\"touchstart\", this.handleTouchStart);\n this.on(\"style\", () => this.schedule(this.setStyle));\n const labelChange = () => this.span.innerText = this.state.label;\n this.on(\"label\", () => this.schedule(labelChange));\n this.on(\"value\", () => this.schedule(this.setStyle));\n return this;\n }\n handleContextMenu = (e: MouseEvent) => {\n e.preventDefault();\n };\n handleMouseOrTouchDown = () => {\n this.setValue(1);\n };\n handleMouseOrTouchUp = () => {\n this.setValue(0);\n };\n}\n","import Button from \"./Button\";\nimport \"./Checkbox.scss\";\n\nexport default class Checkbox extends Button {\n className = \"checkbox\";\n\n handleMouseOrTouchDown = () => {\n this.setValue(1 - this.state.value);\n };\n handleMouseOrTouchUp = () => {\n };\n}\n","import type { FaustUIMeta } from \"@grame/faustwasm\";\nimport AbstractComponent from \"./AbstractComponent\";\nimport AbstractItem from \"./AbstractItem\";\nimport HSlider from \"./HSlider\";\nimport VSlider from \"./VSlider\";\nimport Nentry from \"./Nentry\";\nimport Soundfile from \"./Soundfile\";\nimport Button from \"./Button\";\nimport Checkbox from \"./Checkbox\";\nimport Knob from \"./Knob\";\nimport Menu from \"./Menu\";\nimport Radio from \"./Radio\";\nimport Led from \"./Led\";\nimport Numerical from \"./Numerical\";\nimport HBargraph from \"./HBargraph\";\nimport VBargraph from \"./VBargraph\";\nimport Layout from \"../layout/Layout\";\nimport type FaustUI from \"../FaustUI\";\nimport type LayoutAbstractGroup from \"../layout/AbstractGroup\";\nimport type LayoutAbstractInputItem from \"../layout/AbstractInputItem\";\nimport type LayoutAbstractOutputItem from \"../layout/AbstractOutputItem\";\nimport type { FaustUIItemProps, FaustUIItemStyle, FaustUIGroupProps } from \"./types\";\nimport type { LayoutProps } from \"../types\";\nimport \"./Group.scss\";\n\nexport interface GroupProps extends FaustUIGroupProps {\n items?: (LayoutAbstractGroup | LayoutAbstractInputItem | LayoutAbstractOutputItem)[];\n}\nexport default class Group extends AbstractComponent<FaustUIGroupProps> {\n static parseMeta(metaIn: FaustUIMeta[]): { metaObject: FaustUIMeta; enums?: { [key: string]: number } } {\n const metaObject: FaustUIMeta = {};\n if (!metaIn) return { metaObject };\n metaIn.forEach(m => Object.assign(metaObject, m));\n if (metaObject.style) {\n const enumsRegex = /\\{\\s*(?:['_\\-](.+?)['_\\-]\\s*:\\s*([-+]?[0-9]*\\.?[0-9]+)\\s*;\\s*)+(?:['_\\-](.+?)['_\\-]\\s*:\\s*([-+]?[0-9]*\\.?[0-9]+))\\s*\\}/;\n const matched = metaObject.style.match(enumsRegex);\n if (matched) {\n const itemsRegex = /['_\\-](.+?)['_\\-]\\s*:\\s*([-+]?[0-9]*\\.?[0-9]+)\\s*/g;\n const enums: { [key: string]: number } = {};\n let item;\n // eslint-disable-next-line no-cond-assign\n while ((item = itemsRegex.exec(matched[0]))) {\n enums[item[1]] = +item[2];\n }\n return { metaObject, enums };\n }\n }\n return { metaObject };\n }\n static getComponent(item: LayoutAbstractGroup | LayoutAbstractInputItem | LayoutAbstractOutputItem, emitter: FaustUI, grid: number) {\n const type = Layout.predictType(item);\n if (type.endsWith(\"group\")) {\n const { label, items, type, layout } = item as LayoutAbstractGroup;\n const props: GroupProps = {\n label,\n type,\n items,\n style: {\n grid,\n width: layout.width,\n height: layout.height,\n left: layout.offsetLeft,\n top: layout.offsetTop,\n labelcolor: \"rgba(255, 255, 255, 0.7)\"\n },\n emitter\n };\n return new Group(props);\n }\n const ioItem = item as LayoutAbstractInputItem | LayoutAbstractOutputItem;\n const { metaObject, enums } = this.parseMeta(ioItem.meta);\n const { tooltip, unit, scale } = metaObject;\n const { label, min, max, address, layout } = ioItem;\n const props: FaustUIItemProps<FaustUIItemStyle> = {\n label,\n address,\n tooltip,\n unit,\n scale: scale || \"linear\",\n emitter,\n enums,\n style: {\n grid,\n width: layout.width,\n height: layout.height,\n left: layout.offsetLeft,\n top: layout.offsetTop\n },\n type: \"float\",\n min: isFinite(min) ? min : 0,\n max: isFinite(max) ? max : 1,\n step: \"step\" in item ? +item.step : 1,\n value: \"init\" in item ? +item.init || 0 : 0,\n init: \"init\" in item ? +item.init || 0 : 0\n };\n if (type === \"button\") return new Button(props);\n if (type === \"checkbox\") return new Checkbox(props);\n if (type === \"nentry\") return new Nentry(props);\n if (type === \"soundfile\") return new Soundfile(props);\n if (type === \"knob\") return new Knob(props);\n if (type === \"menu\") return new Menu(props);\n if (type === \"radio\") return new Radio(props);\n if (type === \"hslider\") return new HSlider(props);\n if (type === \"vslider\") return new VSlider(props);\n if (type === \"hbargraph\") return new HBargraph(props);\n if (type === \"vbargraph\") return new VBargraph(props);\n if (type === \"numerical\") return new Numerical(props);\n if (type === \"led\") return new Led(props);\n return null;\n }\n /**\n * DOM Div container of the group\n */\n container: HTMLDivElement;\n /**\n * DOM Div container of label canvas\n */\n label: HTMLDivElement;\n /**\n * Use canvas as label to fit full text in.\n */\n labelCanvas: HTMLCanvasElement;\n labelCtx: CanvasRenderingContext2D;\n tabs: HTMLDivElement;\n children: (AbstractItem<FaustUIItemStyle> | Group)[];\n layout: LayoutProps;\n /**\n * Handle double-click events to reset all children's value to its initial state.\n */\n handleDoubleClick = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.setToInitialValue();\n };\n setToInitialValue() {\n this.children.forEach(item => item.setToInitialValue());\n }\n setState(newState: { [key in keyof FaustUIGroupProps]?: FaustUIGroupProps[key] }) {\n let shouldUpdate = false;\n for (const key in newState) {\n const stateKey = key as keyof FaustUIGroupProps;\n const stateValue = newState[stateKey];\n if (stateKey === \"style\") {\n for (const key in newState.style) {\n const styleKey = key as keyof FaustUIItemStyle;\n if (styleKey in this.state.style /* Fix hidden -> canvas not rendered bug && this.state.style[styleKey] !== newState.style[styleKey] */) {\n (this.state.style as any)[styleKey] = newState.style[styleKey];\n shouldUpdate = true;\n }\n }\n } else if (stateKey in this.state && this.state[stateKey] !== stateValue) {\n (this.state as any)[stateKey] = stateValue;\n shouldUpdate = true;\n } else return;\n if (shouldUpdate) this.emit(stateKey, this.state[stateKey]);\n }\n }\n componentWillMount() {\n this.container = document.createElement(\"div\");\n this.tabs = document.createElement(\"div\");\n this.tabs.className = \"faust-ui-tgroup-tabs\";\n if (!this.state.isRoot) {\n this.label = document.createElement(\"div\");\n this.label.className = \"faust-ui-group-label\";\n this.labelCanvas = document.createElement(\"canvas\");\n this.labelCtx = this.labelCanvas.getContext(\"2d\");\n }\n this.updateUI();\n this.children.forEach(item => item.componentWillMount());\n return this;\n }\n paintLabel() {\n if (this.state.isRoot) return this;\n const label = this.state.label;\n const color = this.state.style.labelcolor;\n const ctx = this.labelCtx;\n const canvas = this.labelCanvas;\n const ratio = window.devicePixelRatio || 1;\n let { width, height } = this.label.getBoundingClientRect();\n if (!width || !height) return this;\n width = Math.floor(width);\n height = Math.floor(height);\n const scaledWidth = Math.floor(width * ratio);\n const scaledHeight = Math.floor(height * ratio);\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n // canvas.style.width = width + \"px\";\n // canvas.style.height = height + \"px\";\n ctx.scale(ratio, ratio);\n ctx.clearRect(0, 0, width, height);\n ctx.fillStyle = color;\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"left\";\n ctx.font = `bold ${height * 0.9}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"`;\n ctx.fillText(label, 0, height / 2, width);\n return this;\n }\n updateUI = () => {\n this.children = [];\n const { style, type, items, emitter, isRoot } = this.state as GroupProps;\n const { grid, left, top, width, height } = style;\n if (!this.state.isRoot) this.label.style.height = `${grid * 0.3}px`;\n this.container.style.left = `${left * grid}px`;\n this.container.style.top = `${top * grid}px`;\n this.container.style.width = `${width * grid}px`;\n this.container.style.height = `${height * grid}px`;\n this.container.className = [\"faust-ui-group\", `faust-ui-${type}`, `${isRoot ? \"faust-ui-root\" : \"\"}`].join(\" \");\n items.forEach((item) => {\n if (item.type.endsWith(\"group\")) {\n const component = Group.getComponent(item, emitter, grid);\n if (component) this.children.push(component);\n } else {\n const ioItem = item as LayoutAbstractInputItem | LayoutAbstractOutputItem;\n const itemComponent = Group.getComponent(ioItem, this.state.emitter, grid);\n if (itemComponent) this.children.push(itemComponent);\n }\n });\n if (type === \"tgroup\") {\n this.tabs.innerHTML = \"\";\n this.tabs.style.height = `${grid}px`;\n this.tabs.style.top = `${0.25 * grid}px`;\n this.state.items.forEach((item, i) => {\n const label = item.label;\n const tab = document.createElement(\"span\");\n tab.innerText = label;\n tab.className = \"faust-ui-tgroup-tab\";\n tab.style.fontSize = `${0.25 * grid}px`;\n tab.style.width = `${2 * grid - 20}px`;\n tab.style.height = `${grid - 20}px`;\n tab.style.lineHeight = `${grid - 20}px`;\n tab.addEventListener(\"click\", () => {\n const groups: HTMLDivElement[] = [];\n for (let j = 0; j < this.container.children.length; j++) {\n const element = this.container.children[j] as HTMLDivElement;\n if (j > 1) groups.push(element);\n }\n for (let j = 0; j < groups.length; j++) {\n const element = groups[j] as HTMLDivElement;\n element.style.visibility = i === j ? \"visible\" : \"hidden\";\n }\n for (let j = 0; j < this.tabs.children.length; j++) {\n const e = this.tabs.children[j];\n if (i !== j) {\n if (e.classList.contains(\"active\")) e.classList.remove(\"active\");\n } else e.classList.add(\"active\");\n }\n });\n this.tabs.appendChild(tab);\n });\n }\n };\n mount() {\n if (!this.state.isRoot) {\n this.label.appendChild(this.labelCanvas);\n this.container.appendChild(this.label);\n }\n if (this.tabs.children.length) this.container.appendChild(this.tabs);\n this.children.forEach((item) => {\n item.mount();\n this.container.appendChild(item.container);\n });\n return this;\n }\n componentDidMount() {\n const handleResize = () => {\n const { grid, left, top, width, height } = this.state.style;\n if (!this.state.isRoot) this.label.style.height = `${grid * 0.3}px`;\n this.container.style.width = `${width * grid}px`;\n this.container.style.height = `${height * grid}px`;\n this.container.style.left = `${left * grid}px`;\n this.container.style.top = `${top * grid}px`;\n if (this.state.type === \"tgroup\") {\n this.tabs.style.height = `${grid}px`;\n this.tabs.style.top = `${0.25 * grid}px`;\n for (let i = 0; i < this.tabs.children.length; i++) {\n const tab = this.tabs.children[i] as HTMLSpanElement;\n tab.style.fontSize = `${0.25 * grid}px`;\n tab.style.width = `${2 * grid - 20}px`;\n tab.style.height = `${grid - 20}px`;\n tab.style.lineHeight = `${grid - 20}px`;\n }\n }\n this.paintLabel();\n this.children.forEach(item => item.setState({ style: { grid } }));\n };\n this.on(\"style\", () => this.schedule(handleResize));\n const itemsChange = () => {\n this.updateUI();\n this.children.forEach(item => item.componentWillMount());\n };\n this.on(\"items\", () => this.schedule(itemsChange));\n const labelChange = () => {\n this.paintLabel();\n this.label.title = this.state.label;\n };\n this.on(\"label\", () => this.schedule(labelChange));\n this.paintLabel();\n this.labelCanvas?.addEventListener(\"dblclick\", this.handleDoubleClick);\n if (this.tabs?.children.length) (this.tabs.children[0] as HTMLSpanElement).click();\n this.children.forEach(item => item.componentDidMount());\n return this;\n }\n}\n","import AbstractItem from \"./AbstractItem\";\nimport VBargraph from \"./VBargraph\";\nimport \"./HBargraph.scss\";\n\nexport default class HBargraph extends VBargraph {\n className = \"hbargraph\";\n\n paintLabel() {\n return super.paintLabel(\"left\");\n }\n setStyle = () => {\n const { height, grid, fontsize, textcolor, bgcolor, bordercolor } = this.state.style;\n this.input.style.fontSize = `${fontsize || height * grid * 0.2}px`;\n this.input.style.color = textcolor;\n this.container.style.backgroundColor = bgcolor;\n this.container.style.borderColor = bordercolor;\n };\n paint = () => {\n const { barwidth, barbgcolor, coldcolor, warmcolor, hotcolor, overloadcolor } = this.state.style;\n const { type, max, min, enums, scale, value } = this.state;\n const ctx = this.ctx;\n const canvas = this.canvas;\n const ratio = window.devicePixelRatio || 1;\n let { width, height } = this.canvasDiv.getBoundingClientRect();\n width = Math.floor(width);\n height = Math.floor(height);\n const scaledWidth = Math.floor(width * ratio);\n const scaledHeight = Math.floor(height * ratio);\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n // canvas.style.width = width + \"px\";\n // canvas.style.height = height + \"px\";\n ctx.scale(ratio, ratio);\n\n const drawWidth = width * 0.9;\n const drawHeight = barwidth || Math.min(height / 3, drawWidth * 0.05);\n const left = width * 0.05;\n const top = (height - drawHeight) * 0.5;\n this.paintValue = value;\n const paintValue = this.paintValue;\n if (paintValue > this.maxValue) {\n this.maxValue = paintValue;\n if (this.maxTimer) window.clearTimeout(this.maxTimer);\n this.maxTimer = window.setTimeout(() => {\n this.maxValue = this.paintValue;\n this.maxTimer = undefined;\n this.schedule(this.paint);\n }, 1000);\n }\n if (paintValue < this.maxValue && typeof this.maxTimer === \"undefined\") {\n this.maxTimer = window.setTimeout(() => {\n this.maxValue = this.paintValue;\n this.maxTimer = undefined;\n this.schedule(this.paint);\n }, 1000);\n }\n const maxValue = this.maxValue;\n const coldStop = (-18 - min) / (max - min);\n const warmStop = (-6 - min) / (max - min);\n const hotStop = (-3 - min) / (max - min);\n const overloadStop = Math.max(0, -min / (max - min));\n const gradient = ctx.createLinearGradient(left, 0, drawWidth, 0);\n if (coldStop <= 1 && coldStop >= 0) gradient.addColorStop(coldStop, coldcolor);\n else if (coldStop > 1) gradient.addColorStop(1, coldcolor);\n if (warmStop <= 1 && warmStop >= 0) gradient.addColorStop(warmStop, warmcolor);\n if (hotStop <= 1 && hotStop >= 0) gradient.addColorStop(hotStop, hotcolor);\n if (overloadStop <= 1 && overloadStop >= 0) gradient.addColorStop(overloadStop, overloadcolor);\n else if (overloadStop < 0) gradient.addColorStop(0, coldcolor);\n\n ctx.fillStyle = barbgcolor;\n if (paintValue < 0) ctx.fillRect(left, top, drawWidth * overloadStop, drawHeight);\n if (paintValue < max) ctx.fillRect(left + drawWidth * overloadStop + 1, top, drawWidth * (1 - overloadStop) - 1, drawHeight);\n ctx.fillStyle = gradient;\n if (paintValue > min) {\n const distance = Math.max(0, AbstractItem.getDistance({ type, max, min, enums, scale, value: Math.min(0, paintValue) }));\n ctx.fillRect(left, top, distance * drawWidth, drawHeight);\n }\n if (paintValue > 0) {\n const distance = Math.max(0, AbstractItem.getDistance({ type, max, min, enums, scale, value: Math.min(max, paintValue) }) - overloadStop);\n ctx.fillRect(left + overloadStop * drawWidth + 1, top, distance * drawWidth - 1, drawHeight);\n }\n if (maxValue > paintValue) {\n if (maxValue <= 0) {\n const distance = Math.max(0, AbstractItem.getDistance({ type, max, min, enums, scale, value: Math.min(0, maxValue) }));\n ctx.fillRect(left + distance * drawWidth - 1, top, 1, drawHeight);\n }\n if (maxValue > 0) {\n const distance = Math.max(0, AbstractItem.getDistance({ type, max, min, enums, scale, value: Math.min(max, maxValue) }) - overloadStop);\n ctx.fillRect(left + Math.min(drawWidth - 1, (overloadStop + distance) * drawWidth), top, 1, drawHeight);\n }\n }\n };\n}\n","import { fillRoundedRect } from \"./utils\";\nimport VSlider from \"./VSlider\";\nimport \"./HSlider.scss\";\n\nexport default class HSlider extends VSlider {\n className = \"hslider\";\n\n paintLabel() {\n return super.paintLabel(\"left\");\n }\n setStyle = () => {\n const { height, grid, fontsize, textcolor, bgcolor, bordercolor } = this.state.style;\n this.input.style.fontSize = `${fontsize || height * grid * 0.2}px`;\n this.input.style.color = textcolor;\n this.container.style.backgroundColor = bgcolor;\n this.container.style.borderColor = bordercolor;\n };\n paint = () => {\n const { sliderwidth, sliderbgcolor, sliderbgoncolor, slidercolor } = this.state.style;\n const ctx = this.ctx;\n const canvas = this.canvas;\n const distance = this.distance;\n const ratio = window.devicePixelRatio || 1;\n let { width, height } = this.canvasDiv.getBoundingClientRect();\n width = Math.floor(width);\n height = Math.floor(height);\n const scaledWidth = Math.floor(width * ratio);\n const scaledHeight = Math.floor(height * ratio);\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n // canvas.style.width = width + \"px\";\n // canvas.style.height = height + \"px\";\n ctx.scale(ratio, ratio);\n\n const drawWidth = width * 0.9;\n const drawHeight = sliderwidth || Math.min(height / 3, drawWidth * 0.05);\n const left = width * 0.05;\n const top = (height - drawHeight) * 0.5;\n const borderRadius = drawHeight * 0.25;\n this.interactionRect = [left, 0, drawWidth, height];\n const grd = ctx.createLinearGradient(left, 0, left + drawWidth, 0);\n grd.addColorStop(Math.max(0, Math.min(1, distance)), sliderbgoncolor);\n grd.addColorStop(Math.max(0, Math.min(1, distance)), sliderbgcolor);\n ctx.fillStyle = grd;\n fillRoundedRect(ctx, left, top, drawWidth, drawHeight, borderRadius);\n // draw slider\n ctx.fillStyle = slidercolor;\n fillRoundedRect(ctx, left + drawWidth * distance - drawHeight, top - drawHeight, drawHeight * 2, drawHeight * 3, borderRadius);\n };\n}\n","import AbstractItem from \"./AbstractItem\";\nimport { toRad, normLog, normExp, denormalize, normalize } from \"./utils\";\nimport type { FaustUIItemProps, PointerDragEvent } from \"./types\";\nimport type { FaustUINentryStyle } from \"./Nentry\";\nimport \"./Knob.scss\";\n\ninterface FaustUIKnobStyle extends FaustUINentryStyle {\n knobwidth?: number;\n knobcolor?: string;\n knoboncolor?: string;\n needlecolor?: string;\n}\nexport default class Knob extends AbstractItem<FaustUIKnobStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUIKnobStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"regular\",\n bgcolor: \"rgba(18, 18, 18, 0)\",\n bordercolor: \"rgba(80, 80, 80, 0)\",\n labelcolor: \"rgba(226, 222, 255, 0.5)\",\n textcolor: \"rgba(18, 18, 18, 1)\",\n knobwidth: undefined,\n knobcolor: \"rgba(18, 18, 18, 1)\",\n knoboncolor: \"rgba(255, 165, 0, 1)\",\n needlecolor: \"rgba(200, 200, 200, 0.75)\"\n }\n };\n }\n className = \"knob\";\n\n canvas: HTMLCanvasElement;\n inputNumber: HTMLInputElement;\n input: HTMLInputElement;\n ctx: CanvasRenderingContext2D;\n componentWillMount() {\n super.componentWillMount();\n this.canvas = document.createElement(\"canvas\");\n this.canvas.width = 10;\n this.canvas.height = 10;\n this.ctx = this.canvas.getContext(\"2d\");\n this.inputNumber = document.createElement(\"input\");\n this.inputNumber.type = \"number\";\n this.inputNumber.value = (+this.state.value.toFixed(3)).toString();\n this.inputNumber.max = this.state.max.toString();\n this.inputNumber.min = this.state.min.toString();\n this.inputNumber.step = this.state.step.toString();\n this.input = document.createElement(\"input\");\n this.input.value = this.inputNumber.value + (this.state.unit || \"\");\n this.input.spellcheck = false;\n this.setStyle();\n return this;\n }\n handleChange = (e: Event) => {\n const value = parseFloat((e.currentTarget as HTMLInputElement).value);\n if (isFinite(value)) {\n const changed = this.setValue(+value);\n if (changed) return;\n }\n this.input.value = this.inputNumber.value + (this.state.unit || \"\");\n };\n setStyle = () => {\n const { fontsize, height, grid, textcolor, bgcolor, bordercolor } = this.state.style;\n this.input.style.fontSize = `${fontsize || height * grid * 0.1}px`;\n this.input.style.color = textcolor;\n this.container.style.backgroundColor = bgcolor;\n this.container.style.borderColor = bordercolor;\n };\n componentDidMount() {\n super.componentDidMount();\n this.input.addEventListener(\"change\", this.handleChange);\n this.canvas.addEventListener(\"pointerdown\", this.handlePointerDown);\n this.canvas.addEventListener(\"dblclick\", this.handleDoubleClick);\n // this.canvas.addEventListener(\"mousedown\", this.handleMouseDown);\n // this.canvas.addEventListener(\"touchstart\", this.handleTouchStart, { passive: false });\n this.on(\"style\", () => {\n this.schedule(this.setStyle);\n this.schedule(this.paint);\n });\n this.on(\"label\", () => this.schedule(this.paintLabel));\n const valueChange = () => {\n this.inputNumber.value = (+this.state.value.toFixed(3)).toString();\n this.input.value = this.inputNumber.value + (this.state.unit || \"\");\n };\n this.on(\"value\", () => {\n this.schedule(valueChange);\n this.schedule(this.paint);\n });\n const maxChange = () => this.inputNumber.max = this.state.max.toString();\n this.on(\"max\", () => {\n this.schedule(maxChange);\n this.schedule(this.paint);\n });\n const minChange = () => this.inputNumber.min = this.state.min.toString();\n this.on(\"min\", () => {\n this.schedule(minChange);\n this.schedule(this.paint);\n });\n const stepChange = () => this.inputNumber.step = this.state.step.toString();\n this.on(\"step\", () => {\n this.schedule(stepChange);\n this.schedule(this.paint);\n });\n this.schedule(this.paint);\n return this;\n }\n mount() {\n this.container.appendChild(this.label);\n this.container.appendChild(this.canvas);\n this.container.appendChild(this.input);\n return super.mount();\n }\n paint = () => {\n const { knobwidth, knobcolor, knoboncolor, needlecolor } = this.state.style;\n const ctx = this.ctx;\n const canvas = this.canvas;\n const distance = this.distance;\n const ratio = window.devicePixelRatio || 1;\n let { width, height } = this.canvas.getBoundingClientRect();\n width = Math.floor(width);\n height = Math.floor(height);\n const scaledWidth = Math.floor(width * ratio);\n const scaledHeight = Math.floor(height * ratio);\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n // canvas.style.width = width + \"px\";\n // canvas.style.height = height + \"px\";\n ctx.scale(ratio, ratio);\n\n const start = 5 / 8 * Math.PI;\n const end = 19 / 8 * Math.PI;\n const valPos = start + toRad(distance * 315);\n const dialHeight = Math.min(width, height) * 0.75;\n const dialRadius = dialHeight * 0.5;\n const dialCenterX = width * 0.5;\n const dialCenterY = height * 0.5;\n // const arcStartX = dialCenterX + (dialHeight * 0.5 * Math.cos(start));\n // const arcStartY = dialCenterY + (dialHeight * 0.5 * Math.sin(start));\n // const arcEndX = dialCenterX + (dialHeight * 0.5 * Math.cos(end));\n // const arcEndY = dialCenterY + (dialHeight * 0.5 * Math.sin(end));\n const valuePosX = dialCenterX + (dialHeight * 0.5 * Math.cos(valPos));\n const valuePosY = dialCenterY + (dialHeight * 0.5 * Math.sin(valPos));\n const lineWidth = knobwidth || dialRadius * 0.2;\n\n ctx.strokeStyle = knobcolor;\n ctx.lineWidth = lineWidth;\n ctx.lineCap = \"round\";\n // draw background arc\n ctx.beginPath();\n ctx.arc(dialCenterX, dialCenterY, dialRadius, valPos, end);\n ctx.stroke();\n // draw value arc\n if (distance) {\n ctx.strokeStyle = knoboncolor;\n ctx.beginPath();\n ctx.arc(dialCenterX, dialCenterY, dialRadius, start, valPos);\n ctx.stroke();\n }\n // draw dial needle\n ctx.strokeStyle = needlecolor;\n ctx.beginPath();\n ctx.moveTo(dialCenterX, dialCenterY);\n ctx.lineTo(valuePosX, valuePosY);\n ctx.stroke();\n };\n getValueFromDelta(e: PointerDragEvent) {\n const { type, min, max, enums, scale } = this.state;\n const step = type === \"enum\" ? 1 : (this.state.step || 1);\n const stepRange = this.stepRange;\n const stepsCount = this.stepsCount;\n const range = 100;\n const prevDistance = AbstractItem.getDistance({ value: e.prevValue, type, min, max, enums, scale }) * range;\n const distance = prevDistance + e.fromY - e.y;\n const denormalized = denormalize(distance / range, min, max);\n const v = scale === \"exp\" ? normExp(denormalized, min, max) : scale === \"log\" ? normLog(denormalized, min, max) : denormalized;\n let steps = Math.round(normalize(v, min, max) * range / stepRange);\n steps = Math.min(stepsCount, Math.max(0, steps));\n if (type === \"enum\") return steps;\n if (type === \"int\") return Math.round(steps * step + min);\n return steps * step + min;\n }\n handleMouseOrTouchMove = (e: PointerDragEvent) => {\n const newValue = this.getValueFromDelta(e);\n if (newValue !== this.state.value) this.setValue(newValue);\n };\n}\n","import AbstractItem from \"./AbstractItem\";\nimport type { FaustUIItemProps } from \"./types\";\nimport type { FaustUINentryStyle } from \"./Nentry\";\nimport \"./Led.scss\";\n\ninterface FaustUILedStyle extends FaustUINentryStyle {\n shape?: \"circle\" | \"square\";\n ledbgcolor?: string;\n coldcolor?: string;\n warmcolor?: string;\n hotcolor?: string;\n overloadcolor?: string;\n}\nexport default class Led extends AbstractItem<FaustUILedStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUILedStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"regular\",\n bgcolor: \"rgba(18, 18, 18, 0)\",\n bordercolor: \"rgba(80, 80, 80, 0)\",\n labelcolor: \"rgba(226, 222, 255, 0.5)\",\n textcolor: \"rgba(18, 18, 18, 1)\",\n shape: \"circle\",\n ledbgcolor: \"rgba(18, 18, 18, 1)\",\n coldcolor: \"rgba(12, 248, 100, 1)\",\n warmcolor: \"rgba(195, 248, 100, 1)\",\n hotcolor: \"rgba(255, 193, 10, 1)\",\n overloadcolor: \"rgba(255, 10, 10, 1)\"\n }\n };\n }\n className = \"led\";\n\n canvasDiv: HTMLDivElement;\n canvas: HTMLCanvasElement;\n tempCanvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n tempCtx: CanvasRenderingContext2D;\n componentWillMount() {\n super.componentWillMount();\n this.canvasDiv = document.createElement(\"div\");\n this.canvasDiv.className = `faust-ui-component-${this.className}-canvasdiv`;\n this.canvas = document.createElement(\"canvas\");\n this.canvas.width = 10;\n this.canvas.height = 10;\n this.ctx = this.canvas.getContext(\"2d\");\n this.tempCanvas = document.createElement(\"canvas\");\n this.tempCtx = this.tempCanvas.getContext(\"2d\");\n this.tempCanvas.width = 128;\n this.tempCanvas.height = 1;\n this.setStyle();\n return this;\n }\n setStyle = () => {\n const { bgcolor, bordercolor } = this.state.style;\n this.container.style.backgroundColor = bgcolor;\n this.container.style.borderColor = bordercolor;\n };\n componentDidMount() {\n super.componentDidMount();\n this.canvas.addEventListener(\"pointerdown\", this.handlePointerDown);\n // this.canvas.addEventListener(\"mousedown\", this.handleMouseDown);\n // this.canvas.addEventListener(\"touchstart\", this.handleTouchStart, { passive: false });\n this.on(\"style\", () => this.schedule(this.setStyle));\n this.on(\"label\", () => this.schedule(this.paintLabel));\n this.on(\"value\", () => this.schedule(this.paint));\n this.on(\"max\", () => this.schedule(this.paint));\n this.on(\"min\", () => this.schedule(this.paint));\n this.on(\"step\", () => this.schedule(this.paint));\n this.schedule(this.paint);\n return this;\n }\n mount() {\n this.canvasDiv.appendChild(this.canvas);\n this.container.appendChild(this.label);\n this.container.appendChild(this.canvasDiv);\n return super.mount();\n }\n paint = () => {\n const { shape, ledbgcolor, coldcolor, warmcolor, hotcolor, overloadcolor } = this.state.style;\n const { min, max } = this.state;\n const { canvas, ctx, tempCanvas, tempCtx, distance } = this;\n const ratio = window.devicePixelRatio || 1;\n let { width, height } = canvas.getBoundingClientRect();\n width = Math.floor(width);\n height = Math.floor(height);\n const scaledWidth = Math.floor(width * ratio);\n const scaledHeight = Math.floor(height * ratio);\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n // canvas.style.width = width + \"px\";\n // canvas.style.height = height + \"px\";\n ctx.scale(ratio, ratio);\n\n const drawHeight = Math.min(height, width) * 0.75;\n const drawWidth = drawHeight;\n const left = (width - drawWidth) * 0.5;\n const top = (height - drawHeight) * 0.5;\n const coldStop = (-18 - min) / (max - min);\n const warmStop = (-6 - min) / (max - min);\n const hotStop = (-3 - min) / (max - min);\n const overloadStop = -min / (max - min);\n const gradient = tempCtx.createLinearGradient(0, 0, tempCanvas.width, 0);\n if (coldStop <= 1 && coldStop >= 0) gradient.addColorStop(coldStop, coldcolor);\n else if (coldStop > 1) gradient.addColorStop(1, coldcolor);\n if (warmStop <= 1 && warmStop >= 0) gradient.addColorStop(warmStop, warmcolor);\n if (hotStop <= 1 && hotStop >= 0) gradient.addColorStop(hotStop, hotcolor);\n if (overloadStop <= 1 && overloadStop >= 0) gradient.addColorStop(overloadStop, overloadcolor);\n else if (overloadStop < 0) gradient.addColorStop(0, coldcolor);\n tempCtx.fillStyle = gradient;\n tempCtx.fillRect(0, 0, tempCanvas.width, 10);\n const d = tempCtx.getImageData(Math.min(tempCanvas.width - 1, distance * tempCanvas.width), 0, 1, 1).data;\n if (distance) ctx.fillStyle = `rgb(${d[0]}, ${d[1]}, ${d[2]})`;\n else ctx.fillStyle = ledbgcolor;\n if (shape === \"circle\") ctx.arc(width / 2, height / 2, width / 2 - left, 0, 2 * Math.PI);\n else ctx.rect(left, top, drawWidth, drawHeight);\n ctx.fill();\n };\n}\n","import AbstractItem from \"./AbstractItem\";\nimport type { FaustUIItemStyle, FaustUIItemProps } from \"./types\";\nimport \"./Menu.scss\";\n\nexport interface FaustUIMenuStyle extends FaustUIItemStyle {\n fontname?: string;\n fontsize?: number;\n fontface?: \"regular\" | \"bold\" | \"italic\" | \"bold italic\";\n bgcolor?: string;\n bordercolor?: string;\n labelcolor?: string;\n textcolor?: string;\n}\nexport default class Menu extends AbstractItem<FaustUIMenuStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUIMenuStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"regular\",\n bgcolor: \"rgba(255, 255, 255, 0.25)\",\n bordercolor: \"rgba(80, 80, 80, 0)\",\n labelcolor: \"rgba(226, 222, 255, 0.5)\",\n textcolor: \"rgba(18, 18, 18, 1)\"\n }\n };\n }\n className = \"menu\";\n\n select: HTMLSelectElement;\n componentWillMount() {\n super.componentWillMount();\n this.select = document.createElement(\"select\");\n this.getOptions();\n this.setStyle();\n return this;\n }\n getOptions() {\n const { enums } = this.state;\n this.select.innerHTML = \"\";\n if (enums) {\n let i = 0;\n for (const key in enums) {\n const option = document.createElement(\"option\");\n option.value = enums[key].toString();\n option.text = key;\n if (i === 0) option.selected = true;\n this.select.appendChild(option);\n i++;\n }\n }\n }\n handleChange = (e: Event) => {\n this.setValue(+(e.currentTarget as HTMLInputElement).value);\n };\n setStyle = () => {\n const { height, grid, fontsize, textcolor, bgcolor, bordercolor } = this.state.style;\n this.select.style.backgroundColor = bgcolor;\n this.select.style.borderColor = bordercolor;\n this.select.style.color = textcolor;\n this.select.style.fontSize = `${fontsize || height * grid / 4}px`;\n };\n componentDidMount() {\n super.componentDidMount();\n this.select.addEventListener(\"change\", this.handleChange);\n this.on(\"style\", () => this.schedule(this.setStyle));\n this.on(\"label\", () => this.schedule(this.paintLabel));\n this.on(\"enums\", () => this.schedule(this.getOptions));\n const valueChange = () => {\n for (let i = this.select.children.length - 1; i >= 0; i--) {\n const option = this.select.children[i] as HTMLOptionElement;\n if (+option.value === this.state.value) this.select.selectedIndex = i;\n }\n };\n this.on(\"value\", () => this.schedule(valueChange));\n valueChange();\n return this;\n }\n mount() {\n this.container.appendChild(this.label);\n this.container.appendChild(this.select);\n return super.mount();\n }\n}\n","import AbstractItem from \"./AbstractItem\";\nimport type { FaustUIItemStyle, FaustUIItemProps } from \"./types\";\nimport \"./Nentry.scss\";\n\nexport interface FaustUINentryStyle extends FaustUIItemStyle {\n fontname?: string;\n fontsize?: number;\n fontface?: \"regular\" | \"bold\" | \"italic\" | \"bold italic\";\n bgcolor?: string;\n bordercolor?: string;\n labelcolor?: string;\n textcolor?: string;\n}\nexport default class Nentry extends AbstractItem<FaustUINentryStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUINentryStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"regular\",\n bgcolor: \"rgba(255, 255, 255, 0.25)\",\n bordercolor: \"rgba(80, 80, 80, 0)\",\n labelcolor: \"rgba(226, 222, 255, 0.5)\",\n textcolor: \"rgba(18, 18, 18, 1)\"\n }\n };\n }\n className = \"nentry\";\n\n input: HTMLInputElement;\n componentWillMount() {\n super.componentWillMount();\n this.input = document.createElement(\"input\");\n this.input.type = \"number\";\n this.input.value = (+this.state.value.toFixed(3)).toString();\n this.input.max = this.state.max.toString();\n this.input.min = this.state.min.toString();\n this.input.step = this.state.step.toString();\n this.setStyle();\n return this;\n }\n handleChange = (e: Event) => {\n this.setValue(+(e.currentTarget as HTMLInputElement).value);\n };\n setStyle = () => {\n const { height, grid, fontsize, textcolor, bgcolor, bordercolor } = this.state.style;\n this.input.style.backgroundColor = bgcolor;\n this.input.style.borderColor = bordercolor;\n this.input.style.color = textcolor;\n this.input.style.fontSize = `${fontsize || height * grid / 4}px`;\n };\n componentDidMount() {\n super.componentDidMount();\n this.input.addEventListener(\"change\", this.handleChange);\n this.on(\"style\", () => this.schedule(this.setStyle));\n this.on(\"label\", () => this.schedule(this.paintLabel));\n const valueChange = () => this.input.value = (+this.state.value.toFixed(3)).toString();\n this.on(\"value\", () => this.schedule(valueChange));\n const maxChange = () => this.input.max = this.state.max.toString();\n this.on(\"max\", () => this.schedule(maxChange));\n const minChange = () => this.input.min = this.state.min.toString();\n this.on(\"min\", () => this.schedule(minChange));\n const stepChange = () => this.input.step = this.state.step.toString();\n this.on(\"step\", () => this.schedule(stepChange));\n return this;\n }\n mount() {\n this.container.appendChild(this.label);\n this.container.appendChild(this.input);\n return super.mount();\n }\n}\n","import AbstractItem from \"./AbstractItem\";\nimport type { FaustUIItemProps } from \"./types\";\nimport type { FaustUINentryStyle } from \"./Nentry\";\nimport \"./Numerical.scss\";\n\nexport default class Numerical extends AbstractItem<FaustUINentryStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUINentryStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"regular\",\n bgcolor: \"rgba(255, 255, 255, 0.25)\",\n bordercolor: \"rgba(80, 80, 80, 0)\",\n labelcolor: \"rgba(226, 222, 255, 0.5)\",\n textcolor: \"rgba(18, 18, 18, 1)\"\n }\n };\n }\n className = \"numerical\";\n\n input: HTMLInputElement;\n componentWillMount() {\n super.componentWillMount();\n this.input = document.createElement(\"input\");\n this.input.disabled = true;\n this.input.value = (+this.state.value.toFixed(3)).toString() + (this.state.unit || \"\");\n this.setStyle();\n return this;\n }\n setStyle = () => {\n const { height, grid, fontsize, textcolor, bgcolor, bordercolor } = this.state.style;\n this.input.style.backgroundColor = bgcolor;\n this.input.style.borderColor = bordercolor;\n this.input.style.color = textcolor;\n this.input.style.fontSize = `${fontsize || height * grid / 4}px`;\n };\n componentDidMount() {\n super.componentDidMount();\n this.on(\"style\", () => this.schedule(this.setStyle));\n this.on(\"label\", () => this.schedule(this.paintLabel));\n const valueChange = () => this.input.value = (+this.state.value.toFixed(3)).toString() + (this.state.unit || \"\");\n this.on(\"value\", () => this.schedule(valueChange));\n return this;\n }\n mount() {\n this.container.appendChild(this.label);\n this.container.appendChild(this.input);\n return super.mount();\n }\n}\n","import AbstractItem from \"./AbstractItem\";\nimport type { FaustUIItemStyle, FaustUIItemProps } from \"./types\";\nimport \"./Radio.scss\";\n\nexport interface FaustUIRadioStyle extends FaustUIItemStyle {\n fontname?: string;\n fontsize?: number;\n fontface?: \"regular\" | \"bold\" | \"italic\" | \"bold italic\";\n bgcolor?: string;\n bordercolor?: string;\n labelcolor?: string;\n textcolor?: string;\n}\nexport default class Radio extends AbstractItem<FaustUIRadioStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUIRadioStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"regular\",\n bgcolor: \"rgba(255, 255, 255, 0.25)\",\n bordercolor: \"rgba(80, 80, 80, 0)\",\n labelcolor: \"rgba(226, 222, 255, 0.5)\",\n textcolor: \"rgba(18, 18, 18, 1)\"\n }\n };\n }\n className = \"radio\";\n\n group: HTMLDivElement;\n componentWillMount() {\n super.componentWillMount();\n this.group = document.createElement(\"div\");\n this.group.className = \"faust-ui-component-radio-group\";\n this.getOptions();\n this.setStyle();\n return this;\n }\n getOptions = () => {\n const { enums, address } = this.state;\n this.group.innerHTML = \"\";\n if (enums) {\n let i = 0;\n for (const key in enums) {\n const input = document.createElement(\"input\");\n const div = document.createElement(\"div\");\n input.value = enums[key].toString();\n input.name = address;\n input.type = \"radio\";\n if (i === 0) input.checked = true;\n input.addEventListener(\"change\", () => {\n if (input.checked) this.setValue(enums[key]);\n });\n div.appendChild(input);\n div.append(key);\n this.group.appendChild(div);\n i++;\n }\n }\n };\n setStyle = () => {\n const { height, width, grid, fontsize, textcolor, bgcolor, bordercolor } = this.state.style;\n const fontSize = Math.min(height * grid * 0.1, width * grid * 0.1);\n this.group.style.backgroundColor = bgcolor;\n this.group.style.borderColor = bordercolor;\n this.group.style.color = textcolor;\n this.group.style.fontSize = `${fontsize || fontSize}px`;\n };\n componentDidMount() {\n super.componentDidMount();\n this.on(\"style\", () => this.schedule(this.setStyle));\n this.on(\"label\", () => this.schedule(this.paintLabel));\n this.on(\"enums\", () => this.schedule(this.getOptions));\n const valueChange = () => {\n for (let i = this.group.children.length - 1; i >= 0; i--) {\n const input = this.group.children[i].querySelector(\"input\");\n if (+input.value === this.state.value) input.checked = true;\n }\n };\n this.on(\"value\", () => this.schedule(valueChange));\n valueChange();\n return this;\n }\n mount() {\n this.container.appendChild(this.label);\n this.container.appendChild(this.group);\n return super.mount();\n }\n}\n","import AbstractItem from \"./AbstractItem\";\nimport type { FaustUIItemStyle, FaustUIItemProps } from \"./types\";\nimport \"./Soundfile.scss\";\n\nexport interface FaustUISoundfileStyle extends FaustUIItemStyle {\n fontname?: string;\n fontsize?: number;\n fontface?: \"normal\" | \"bold\" | \"italic\" | \"bold italic\";\n bgcolor?: string;\n bgoncolor?: string;\n bordercolor?: string;\n borderoncolor?: string;\n textcolor?: string;\n textoncolor?: string;\n}\nexport default class Soundfile extends AbstractItem<FaustUISoundfileStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUISoundfileStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"normal\",\n bgcolor: \"rgba(40, 40, 40, 1)\",\n bgoncolor: \"rgba(18, 18, 18, 1)\",\n bordercolor: \"rgba(80, 80, 80, 1)\",\n borderoncolor: \"rgba(255, 165, 0, 1)\",\n textcolor: \"rgba(226, 222, 255, 0.5)\",\n textoncolor: \"rgba(255, 165, 0, 1)\"\n }\n };\n }\n className = \"soundfile\";\n\n btn: HTMLDivElement;\n span: HTMLSpanElement;\n componentWillMount() {\n super.componentWillMount();\n this.btn = document.createElement(\"div\");\n this.span = document.createElement(\"span\");\n this.span.innerText = this.state.label;\n this.setStyle();\n return this;\n }\n setStyle = () => {\n const { value, style } = this.state;\n const { height, grid, fontsize, fontname, fontface, textcolor, textoncolor, bgoncolor, bgcolor, bordercolor, borderoncolor } = style;\n this.btn.style.backgroundColor = value ? bgoncolor : bgcolor;\n this.btn.style.borderColor = value ? borderoncolor : bordercolor;\n this.btn.style.color = value ? textoncolor : textcolor;\n this.btn.style.fontSize = `${fontsize || height * grid / 4}px`;\n this.btn.style.fontFamily = `${fontname}, sans-serif`;\n this.btn.style.fontStyle = fontface;\n };\n mount() {\n this.btn.appendChild(this.span);\n this.container.appendChild(this.btn);\n return super.mount();\n }\n componentDidMount() {\n super.componentDidMount();\n this.btn.addEventListener(\"pointerdown\", this.handlePointerDown);\n // this.btn.addEventListener(\"mousedown\", this.handleMouseDown);\n // this.btn.addEventListener(\"touchstart\", this.handleTouchStart);\n this.on(\"style\", () => this.schedule(this.setStyle));\n const labelChange = () => this.span.innerText = this.state.label;\n this.on(\"label\", () => this.schedule(labelChange));\n this.on(\"value\", () => this.schedule(this.setStyle));\n return this;\n }\n handleMouseOrTouchDown = () => {\n //this.setValue(1);\n };\n handleMouseOrTouchUp = () => {\n //this.setValue(0);\n };\n}\n","import AbstractItem from \"./AbstractItem\";\nimport type { FaustUIItemProps } from \"./types\";\nimport type { FaustUINentryStyle } from \"./Nentry\";\nimport \"./VBargraph.scss\";\n\ninterface FaustUIBargraphStyle extends FaustUINentryStyle {\n barwidth?: number;\n barbgcolor?: string;\n coldcolor?: string;\n warmcolor?: string;\n hotcolor?: string;\n overloadcolor?: string;\n}\nexport default class VBargraph extends AbstractItem<FaustUIBargraphStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUIBargraphStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"regular\",\n bgcolor: \"rgba(18, 18, 18, 0)\",\n bordercolor: \"rgba(80, 80, 80, 0)\",\n labelcolor: \"rgba(226, 222, 255, 0.5)\",\n textcolor: \"rgba(18, 18, 18, 1)\",\n barwidth: undefined,\n barbgcolor: \"rgba(18, 18, 18, 1)\",\n coldcolor: \"rgba(12, 248, 100, 1)\",\n warmcolor: \"rgba(195, 248, 100, 1)\",\n hotcolor: \"rgba(255, 193, 10, 1)\",\n overloadcolor: \"rgba(255, 10, 10, 1)\"\n }\n };\n }\n className = \"vbargraph\";\n\n canvas: HTMLCanvasElement;\n input: HTMLInputElement;\n flexDiv: HTMLDivElement;\n canvasDiv: HTMLDivElement;\n ctx: CanvasRenderingContext2D;\n componentWillMount() {\n super.componentWillMount();\n this.flexDiv = document.createElement(\"div\");\n this.flexDiv.className = `faust-ui-component-${this.className}-flexdiv`;\n this.canvasDiv = document.createElement(\"div\");\n this.canvasDiv.className = `faust-ui-component-${this.className}-canvasdiv`;\n this.canvas = document.createElement(\"canvas\");\n this.canvas.width = 10;\n this.canvas.height = 10;\n this.ctx = this.canvas.getContext(\"2d\");\n this.input = document.createElement(\"input\");\n this.input.disabled = true;\n this.input.value = (+this.state.value.toFixed(3)).toString() + (this.state.unit || \"\");\n this.setStyle();\n return this;\n }\n setStyle = () => {\n const { height, width, grid, fontsize, textcolor, bgcolor, bordercolor } = this.state.style;\n const fontSize = Math.min(height * grid * 0.05, width * grid * 0.2);\n this.input.style.fontSize = `${fontsize || fontSize}px`;\n this.input.style.color = textcolor;\n this.container.style.backgroundColor = bgcolor;\n this.container.style.borderColor = bordercolor;\n };\n componentDidMount() {\n super.componentDidMount();\n this.canvas.addEventListener(\"pointerdown\", this.handlePointerDown);\n // this.canvas.addEventListener(\"mousedown\", this.handleMouseDown);\n // this.canvas.addEventListener(\"touchstart\", this.handleTouchStart, { passive: false });\n this.on(\"style\", () => {\n this.schedule(this.setStyle);\n this.schedule(this.paint);\n });\n this.on(\"label\", () => this.schedule(this.paintLabel));\n const valueChange = () => this.input.value = (+this.state.value.toFixed(3)).toString() + (this.state.unit || \"\");\n this.on(\"value\", () => {\n this.schedule(valueChange);\n this.schedule(this.paint);\n });\n this.on(\"max\", () => this.schedule(this.paint));\n this.on(\"min\", () => this.schedule(this.paint));\n this.on(\"step\", () => this.schedule(this.paint));\n this.schedule(this.paint);\n return this;\n }\n mount() {\n this.canvasDiv.appendChild(this.canvas);\n this.flexDiv.appendChild(this.canvasDiv);\n this.flexDiv.appendChild(this.input);\n this.container.appendChild(this.label);\n this.container.appendChild(this.flexDiv);\n return super.mount();\n }\n paintValue = 0;\n maxValue = -Infinity;\n maxTimer: number;\n paint = () => {\n const { barwidth, barbgcolor, coldcolor, warmcolor, hotcolor, overloadcolor } = this.state.style;\n const { type, max, min, enums, scale, value } = this.state;\n const ctx = this.ctx;\n const canvas = this.canvas;\n const ratio = window.devicePixelRatio || 1;\n let { width, height } = this.canvasDiv.getBoundingClientRect();\n width = Math.floor(width);\n height = Math.floor(height);\n const scaledWidth = Math.floor(width * ratio);\n const scaledHeight = Math.floor(height * ratio);\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n // canvas.style.width = width + \"px\";\n // canvas.style.height = height + \"px\";\n ctx.scale(ratio, ratio);\n\n const drawHeight = height * 0.9;\n const drawWidth = barwidth || Math.min(width / 3, drawHeight * 0.05);\n const left = (width - drawWidth) * 0.5;\n const top = height * 0.05;\n this.paintValue = value;\n const paintValue = this.paintValue;\n if (paintValue > this.maxValue) {\n this.maxValue = paintValue;\n if (this.maxTimer) window.clearTimeout(this.maxTimer);\n this.maxTimer = window.setTimeout(() => {\n this.maxValue = this.paintValue;\n this.maxTimer = undefined;\n this.schedule(this.paint);\n }, 1000);\n }\n if (paintValue < this.maxValue && typeof this.maxTimer === \"undefined\") {\n this.maxTimer = window.setTimeout(() => {\n this.maxValue = this.paintValue;\n this.maxTimer = undefined;\n this.schedule(this.paint);\n }, 1000);\n }\n const maxValue = this.maxValue;\n const coldStop = (-18 - min) / (max - min);\n const warmStop = (-6 - min) / (max - min);\n const hotStop = (-3 - min) / (max - min);\n const overloadStop = Math.max(0, -min / (max - min));\n const gradient = ctx.createLinearGradient(0, drawHeight, 0, top);\n if (coldStop <= 1 && coldStop >= 0) gradient.addColorStop(coldStop, coldcolor);\n else if (coldStop > 1) gradient.addColorStop(1, coldcolor);\n if (warmStop <= 1 && warmStop >= 0) gradient.addColorStop(warmStop, warmcolor);\n if (hotStop <= 1 && hotStop >= 0) gradient.addColorStop(hotStop, hotcolor);\n if (overloadStop <= 1 && overloadStop >= 0) gradient.addColorStop(overloadStop, overloadcolor);\n else if (overloadStop < 0) gradient.addColorStop(0, coldcolor);\n\n ctx.fillStyle = barbgcolor;\n if (paintValue < 0) ctx.fillRect(left, top + (1 - overloadStop) * drawHeight, drawWidth, drawHeight * overloadStop);\n if (paintValue < max) ctx.fillRect(left, top, drawWidth, (1 - overloadStop) * drawHeight - 1);\n ctx.fillStyle = gradient;\n if (paintValue > min) {\n const distance = Math.max(0, AbstractItem.getDistance({ type, max, min, enums, scale, value: Math.min(0, paintValue) }));\n ctx.fillRect(left, top + (1 - distance) * drawHeight, drawWidth, drawHeight * distance);\n }\n if (paintValue > 0) {\n const distance = Math.max(0, AbstractItem.getDistance({ type, max, min, enums, scale, value: Math.min(max, paintValue) }) - overloadStop);\n ctx.fillRect(left, top + (1 - overloadStop - distance) * drawHeight, drawWidth, drawHeight * distance - 1);\n }\n if (maxValue > paintValue) {\n if (maxValue <= 0) {\n const distance = Math.max(0, AbstractItem.getDistance({ type, max, min, enums, scale, value: Math.min(0, maxValue) }));\n ctx.fillRect(left, top + (1 - distance) * drawHeight, drawWidth, 1);\n }\n if (maxValue > 0) {\n const distance = Math.max(0, AbstractItem.getDistance({ type, max, min, enums, scale, value: Math.min(max, maxValue) }) - overloadStop);\n ctx.fillRect(left, Math.max(top, top + (1 - overloadStop - distance) * drawHeight - 1), drawWidth, 1);\n }\n }\n };\n}\n","import AbstractItem from \"./AbstractItem\";\nimport { fillRoundedRect, normLog, normExp, denormalize, normalize } from \"./utils\";\nimport type { FaustUIItemProps, PointerDownEvent, PointerDragEvent } from \"./types\";\nimport type { FaustUINentryStyle } from \"./Nentry\";\nimport \"./VSlider.scss\";\n\ninterface FaustUISliderStyle extends FaustUINentryStyle {\n sliderwidth?: number;\n sliderbgcolor?: string;\n sliderbgoncolor?: string;\n slidercolor?: string;\n}\nexport default class VSlider extends AbstractItem<FaustUISliderStyle> {\n static get defaultProps(): FaustUIItemProps<FaustUISliderStyle> {\n const inherited = super.defaultProps;\n return {\n ...inherited,\n style: {\n ...inherited.style,\n fontname: \"Arial\",\n fontsize: undefined,\n fontface: \"regular\",\n bgcolor: \"rgba(18, 18, 18, 0)\",\n bordercolor: \"rgba(80, 80, 80, 0)\",\n labelcolor: \"rgba(226, 222, 255, 0.5)\",\n textcolor: \"rgba(18, 18, 18, 1)\",\n sliderwidth: undefined,\n sliderbgcolor: \"rgba(18, 18, 18, 1)\",\n sliderbgoncolor: \"rgba(255, 165, 0, 1)\",\n slidercolor: \"rgba(200, 200, 200, 0.75)\"\n }\n };\n }\n className = \"vslider\";\n\n canvas: HTMLCanvasElement;\n inputNumber: HTMLInputElement;\n input: HTMLInputElement;\n flexDiv: HTMLDivElement;\n canvasDiv: HTMLDivElement;\n ctx: CanvasRenderingContext2D;\n interactionRect: number[] = [0, 0, 0, 0];\n componentWillMount() {\n super.componentWillMount();\n this.flexDiv = document.createElement(\"div\");\n this.flexDiv.className = `faust-ui-component-${this.className}-flexdiv`;\n this.canvasDiv = document.createElement(\"div\");\n this.canvasDiv.className = `faust-ui-component-${this.className}-canvasdiv`;\n this.canvas = document.createElement(\"canvas\");\n this.canvas.width = 10;\n this.canvas.height = 10;\n this.ctx = this.canvas.getContext(\"2d\");\n this.inputNumber = document.createElement(\"input\");\n this.inputNumber.type = \"number\";\n this.inputNumber.value = (+this.state.value.toFixed(3)).toString();\n this.inputNumber.max = this.state.max.toString();\n this.inputNumber.min = this.state.min.toString();\n this.inputNumber.step = this.state.step.toString();\n this.input = document.createElement(\"input\");\n this.input.value = this.inputNumber.value + (this.state.unit || \"\");\n this.input.spellcheck = false;\n this.setStyle();\n return this;\n }\n handleChange = (e: Event) => {\n const value = parseFloat((e.currentTarget as HTMLInputElement).value);\n if (isFinite(value)) {\n const changed = this.setValue(+value);\n if (changed) return;\n }\n this.input.value = this.inputNumber.value + (this.state.unit || \"\");\n };\n setStyle = () => {\n const { height, width, grid, fontsize, textcolor, bgcolor, bordercolor } = this.state.style;\n const fontSize = Math.min(height * grid * 0.05, width * grid * 0.2);\n this.input.style.fontSize = `${fontsize || fontSize}px`;\n this.input.style.color = textcolor;\n this.container.style.backgroundColor = bgcolor;\n this.container.style.borderColor = bordercolor;\n };\n componentDidMount() {\n super.componentDidMount();\n this.input.addEventListener(\"change\", this.handleChange);\n this.canvas.addEventListener(\"pointerdown\", this.handlePointerDown);\n this.canvas.addEventListener(\"dblclick\", this.handleDoubleClick);\n // this.canvas.addEventListener(\"mousedown\", this.handleMouseDown);\n // this.canvas.addEventListener(\"touchstart\", this.handleTouchStart, { passive: false });\n this.on(\"style\", () => {\n this.schedule(this.setStyle);\n this.schedule(this.paint);\n });\n this.on(\"label\", () => this.schedule(this.paintLabel));\n const valueChange = () => {\n this.inputNumber.value = (+this.state.value.toFixed(3)).toString();\n this.input.value = this.inputNumber.value + (this.state.unit || \"\");\n };\n this.on(\"value\", () => {\n this.schedule(valueChange);\n this.schedule(this.paint);\n });\n const maxChange = () => this.inputNumber.max = this.state.max.toString();\n this.on(\"max\", () => {\n this.schedule(maxChange);\n this.schedule(this.paint);\n });\n const minChange = () => this.inputNumber.min = this.state.min.toString();\n this.on(\"min\", () => {\n this.schedule(minChange);\n this.schedule(this.paint);\n });\n const stepChange = () => this.inputNumber.step = this.state.step.toString();\n this.on(\"step\", () => {\n this.schedule(stepChange);\n this.schedule(this.paint);\n });\n this.schedule(this.paint);\n return this;\n }\n mount() {\n this.canvasDiv.appendChild(this.canvas);\n this.flexDiv.appendChild(this.canvasDiv);\n this.flexDiv.appendChild(this.input);\n this.container.appendChild(this.label);\n this.container.appendChild(this.flexDiv);\n return super.mount();\n }\n paint = () => {\n const { sliderwidth, sliderbgcolor, sliderbgoncolor, slidercolor } = this.state.style;\n const ctx = this.ctx;\n const canvas = this.canvas;\n const distance = this.distance;\n const ratio = window.devicePixelRatio || 1;\n let { width, height } = this.canvasDiv.getBoundingClientRect();\n width = Math.floor(width);\n height = Math.floor(height);\n const scaledWidth = Math.floor(width * ratio);\n const scaledHeight = Math.floor(height * ratio);\n canvas.width = scaledWidth;\n canvas.height = scaledHeight;\n // canvas.style.width = width + \"px\";\n // canvas.style.height = height + \"px\";\n ctx.scale(ratio, ratio);\n\n const drawHeight = height * 0.9;\n const drawWidth = sliderwidth || Math.min(width / 3, drawHeight * 0.05);\n const left = (width - drawWidth) * 0.5;\n const top = height * 0.05;\n const borderRadius = drawWidth * 0.25;\n this.interactionRect = [0, top, width, drawHeight];\n const grd = ctx.createLinearGradient(0, top, 0, top + drawHeight);\n grd.addColorStop(Math.max(0, Math.min(1, 1 - distance)), sliderbgcolor);\n grd.addColorStop(Math.max(0, Math.min(1, 1 - distance)), sliderbgoncolor);\n ctx.fillStyle = grd;\n fillRoundedRect(ctx, left, top, drawWidth, drawHeight, borderRadius);\n // draw slider\n ctx.fillStyle = slidercolor;\n fillRoundedRect(ctx, left - drawWidth, top + drawHeight * (1 - distance) - drawWidth, drawWidth * 3, drawWidth * 2, borderRadius);\n };\n get stepsCount() {\n const { type, max, min, step, enums } = this.state;\n const maxSteps = type === \"enum\" ? enums.length : type === \"int\" ? max - min : (max - min) / step;\n if (step) {\n if (type === \"enum\") return enums.length;\n if (type === \"int\") return Math.min(Math.floor((max - min) / (Math.round(step) || 0)), maxSteps);\n return Math.floor((max - min) / step);\n }\n return maxSteps;\n }\n get stepRange() {\n const full = this.interactionRect[this.className === \"vslider\" ? 3 : 2];\n const stepsCount = this.stepsCount;\n return full / stepsCount;\n }\n getValueFromPos(e: { x: number; y: number }) {\n const { type, min, max, scale } = this.state;\n const step = type === \"enum\" ? 1 : (this.state.step || 1);\n const stepRange = this.stepRange;\n const stepsCount = this.stepsCount;\n const distance = (this.className === \"vslider\" ? this.interactionRect[3] - (e.y - this.interactionRect[1]) : e.x - this.interactionRect[0]);\n const range = this.className === \"vslider\" ? this.interactionRect[3] : this.interactionRect[2];\n const denormalized = denormalize(distance / range, min, max);\n const v = scale === \"exp\" ? normExp(denormalized, min, max) : scale === \"log\" ? normLog(denormalized, min, max) : denormalized;\n let steps = Math.round(normalize(v, min, max) * range / stepRange);\n steps = Math.min(stepsCount, Math.max(0, steps));\n if (type === \"enum\") return steps;\n if (type === \"int\") return Math.round(steps * step + min);\n return steps * step + min;\n }\n handleMouseOrTouchDown = (e: PointerDownEvent) => {\n const { value } = this.state;\n if (\n e.x < this.interactionRect[0]\n || e.x > this.interactionRect[0] + this.interactionRect[2]\n || e.y < this.interactionRect[1]\n || e.y > this.interactionRect[1] + this.interactionRect[3]\n ) return;\n const newValue = this.getValueFromPos(e);\n if (newValue !== value) this.setValue(this.getValueFromPos(e));\n };\n handleMouseOrTouchMove = (e: PointerDragEvent) => {\n const newValue = this.getValueFromPos(e);\n if (newValue !== this.state.value) this.setValue(newValue);\n };\n}\n","export const toMIDI = (f: number) => [\"C\", \"C#\", \"D\", \"D#\", \"E\", \"F\", \"F#\", \"G\", \"G#\", \"A\", \"A#\", \"B\"][(f % 12 + 12) % 12] + Math.round(f / 12 - 2);\nexport const toRad = (degrees: number) => degrees * Math.PI / 180;\nexport const atodb = (a: number) => 20 * Math.log10(a);\nexport const dbtoa = (db: number) => 10 ** (db / 20);\nexport const denormalize = (x: number, min: number, max: number) => min + (max - min) * x;\nexport const normalize = (x: number, min: number, max: number) => (x - min) / (max - min) || 0;\nexport const normLog = (x: number, min: number, max: number) => {\n const normalized = normalize(x, min, max);\n const logMin = Math.log(Math.max(Number.EPSILON, min));\n const logMax = Math.log(Math.max(Number.EPSILON, max));\n const vLog = denormalize(normalized, logMin, logMax);\n const v = Math.exp(vLog);\n return Math.max(min, Math.min(max, v));\n};\nexport const iNormLog = (vIn: number, min: number, max: number) => {\n const v = Math.max(min, Math.min(max, vIn));\n const vLog = Math.log(Math.max(Number.EPSILON, v));\n const logMin = Math.log(Math.max(Number.EPSILON, min));\n const logMax = Math.log(Math.max(Number.EPSILON, max));\n const normalized = normalize(vLog, logMin, logMax);\n return denormalize(normalized, min, max);\n};\nexport const normExp = iNormLog;\nexport const iNormExp = normLog;\nexport const roundedRect = (ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number | number[]) => {\n const radii = [0, 0, 0, 0];\n if (typeof radius === \"number\") radii.fill(radius);\n else radius.forEach((v, i) => radii[i] = v);\n ctx.beginPath();\n ctx.moveTo(x + radii[0], y);\n ctx.lineTo(x + width - radii[1], y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radii[1]);\n ctx.lineTo(x + width, y + height - radii[2]);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radii[2], y + height);\n ctx.lineTo(x + radii[3], y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radii[3]);\n ctx.lineTo(x, y + radii[0]);\n ctx.quadraticCurveTo(x, y, x + radii[0], y);\n ctx.closePath();\n ctx.stroke();\n};\nexport const fillRoundedRect = (ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number | number[]) => {\n const radii = [0, 0, 0, 0];\n if (typeof radius === \"number\") radii.fill(radius);\n else radius.forEach((v, i) => radii[i] = v);\n ctx.beginPath();\n ctx.moveTo(x + radii[0], y);\n ctx.lineTo(x + width - radii[1], y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radii[1]);\n ctx.lineTo(x + width, y + height - radii[2]);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radii[2], y + height);\n ctx.lineTo(x + radii[3], y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radii[3]);\n ctx.lineTo(x, y + radii[0]);\n ctx.quadraticCurveTo(x, y, x + radii[0], y);\n ctx.closePath();\n ctx.fill();\n};\n","import FaustUI from \"./FaustUI\";\n\nconst instantiate = () => {\n const faustUI = new FaustUI({\n root: document.getElementById(\"root\") as HTMLDivElement,\n listenWindowResize: true,\n listenWindowMessage: true\n });\n let host: Window;\n window.addEventListener(\"message\", (e) => {\n const { data, source } = e;\n if (!data) return;\n const { type } = data;\n if (!type) return;\n host = source as Window;\n });\n\n window.addEventListener(\"keydown\", (e) => {\n if (host) host.postMessage({ type: \"keydown\", key: e.key }, \"*\");\n });\n window.addEventListener(\"keyup\", (e) => {\n if (host) host.postMessage({ type: \"keyup\", key: e.key }, \"*\");\n });\n (window as any).faustUI = faustUI;\n};\n\nexport default instantiate;\n","import type { FaustUIGroupType } from \"@grame/faustwasm\";\nimport IItem from \"./IItem\";\nimport AbstractItem from \"./AbstractItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default abstract class AbstractGroup implements IItem {\n static padding = 0.2;\n static labelHeight = 0.25;\n static spaceBetween = 0.1;\n isRoot: boolean;\n type: FaustUIGroupType;\n label: string;\n items: (AbstractGroup | AbstractItem)[];\n layout: LayoutProps;\n\n constructor(group: { type: FaustUIGroupType; label: string; items: (AbstractGroup | AbstractItem)[] }, isRoot?: boolean) {\n this.isRoot = !!isRoot;\n Object.assign(this, group);\n const { hasHSizingDesc, hasVSizingDesc } = this;\n const sizing = hasHSizingDesc && hasVSizingDesc ? \"both\" : hasHSizingDesc ? \"horizontal\" : hasVSizingDesc ? \"vertical\" : \"none\";\n this.layout = {\n type: group.type,\n width: AbstractGroup.padding * 2,\n height: AbstractGroup.padding * 2 + (this.isRoot ? 0 : AbstractGroup.labelHeight),\n sizing\n };\n }\n\n /**\n * find recursively if the group has horizontal-sizable item\n */\n get hasHSizingDesc(): boolean {\n return !!this.items.find((item) => {\n if (item instanceof AbstractGroup) return item.hasHSizingDesc;\n return item.layout.sizing === \"horizontal\" || item.layout.sizing === \"both\";\n });\n }\n /**\n * find recursively if the group has vertical-sizable item\n */\n get hasVSizingDesc(): boolean {\n return !!this.items.find((item) => {\n if (item instanceof AbstractGroup) return item.hasVSizingDesc;\n return item.layout.sizing === \"vertical\" || item.layout.sizing === \"both\";\n });\n }\n adjust() {\n return this;\n }\n expand(dX: number, dY: number) {\n return this;\n }\n offset() {\n return this;\n }\n}\n","import type { FaustUIInputItem } from \"@grame/faustwasm\";\nimport AbstractItem from \"./AbstractItem\";\n\nexport default abstract class AbstractInputItem extends AbstractItem {\n init: number;\n step: number;\n constructor(item: FaustUIInputItem) {\n super(item);\n this.init = +item.init || 0;\n this.step = +item.step || 1;\n }\n}\n","import type { FaustUIInputType, FaustUIItem, FaustUIMeta, FaustUIOutputType } from \"@grame/faustwasm\";\nimport type { LayoutProps } from \"../types\";\nimport type IItem from \"./IItem\";\n\nexport default abstract class AbstractItem implements IItem {\n type: FaustUIInputType | FaustUIOutputType;\n label: string;\n address: string;\n url: string;\n index: number;\n init: number;\n min: number;\n max: number;\n meta?: FaustUIMeta[];\n layout: LayoutProps;\n constructor(item: FaustUIItem) {\n Object.assign(this, item);\n this.min = isFinite(+this.min) ? +this.min : 0;\n this.max = isFinite(+this.max) ? +this.max : 1;\n }\n\n adjust(): this {\n return this;\n }\n expand(dX: number, dY: number): this {\n return this;\n }\n offset(): this {\n return this;\n }\n}\n","import AbstractItem from \"./AbstractItem\";\n\nexport default abstract class AbstractOutputItem extends AbstractItem {\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport { LayoutProps } from \"../types\";\n\nexport default class Button extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"button\",\n width: 2,\n height: 1,\n sizing: \"horizontal\"\n };\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport { LayoutProps } from \"../types\";\n\nexport default class Checkbox extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"checkbox\",\n width: 2,\n height: 1,\n sizing: \"horizontal\"\n };\n}\n","import AbstractOutputItem from \"./AbstractOutputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class HBargraph extends AbstractOutputItem {\n layout: LayoutProps = {\n type: \"hbargraph\",\n width: 5,\n height: 1,\n sizing: \"horizontal\"\n };\n}\n","import AbstractGroup from \"./AbstractGroup\";\n\nexport default class HGroup extends AbstractGroup {\n adjust() {\n this.items.forEach((item) => {\n item.adjust();\n this.layout.width += item.layout.width;\n this.layout.height = Math.max(this.layout.height, item.layout.height + 2 * AbstractGroup.padding + (this.isRoot ? 0 : AbstractGroup.labelHeight));\n });\n this.layout.width += AbstractGroup.spaceBetween * (this.items.length - 1);\n if (this.layout.width < 1) this.layout.width += 1;\n return this;\n }\n expand(dX: number) {\n let hExpandItems = 0;\n this.items.forEach((item) => { // Count items that need to expand horizontally\n if (item.layout.sizing === \"both\" || item.layout.sizing === \"horizontal\") hExpandItems++;\n });\n this.items.forEach((item) => {\n let dX$ = 0;\n let dY$ = 0; // Space available to expand for current item\n if (item.layout.sizing === \"both\" || item.layout.sizing === \"horizontal\") {\n dX$ = hExpandItems ? dX / hExpandItems : 0;\n item.layout.width += dX$;\n }\n if (item.layout.sizing === \"both\" || item.layout.sizing === \"vertical\") {\n dY$ = this.layout.height - 2 * AbstractGroup.padding - (this.isRoot ? 0 : AbstractGroup.labelHeight) - item.layout.height;\n item.layout.height += dY$;\n }\n item.expand(dX$, dY$);\n });\n // this.layout.width += dX;\n return this;\n }\n offset() {\n const { labelHeight, padding, spaceBetween } = AbstractGroup;\n let $left = padding;\n const $top = padding + (this.isRoot ? 0 : labelHeight);\n const { height } = this.layout;\n this.items.forEach((item) => {\n item.layout.offsetLeft = $left;\n item.layout.offsetTop = $top;\n // center the item\n item.layout.offsetTop += (height - (this.isRoot ? 0 : labelHeight) - item.layout.height) / 2 - padding;\n item.layout.left = (this.layout.left || 0) + item.layout.offsetLeft;\n item.layout.top = (this.layout.top || 0) + item.layout.offsetTop;\n item.offset();\n $left += item.layout.width + spaceBetween;\n });\n return this;\n }\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class HSlider extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"hslider\",\n width: 5,\n height: 1,\n sizing: \"horizontal\"\n };\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class Knob extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"knob\",\n width: 1,\n height: 1.75,\n sizing: \"none\"\n };\n}\n","import type { FaustUIItem } from \"@grame/faustwasm\";\nimport HSlider from \"./HSlider\";\nimport VSlider from \"./VSlider\";\nimport Nentry from \"./Nentry\";\nimport Soundfile from \"./Soundfile\";\nimport Button from \"./Button\";\nimport Checkbox from \"./Checkbox\";\nimport Knob from \"./Knob\";\nimport Menu from \"./Menu\";\nimport Radio from \"./Radio\";\nimport Led from \"./Led\";\nimport Numerical from \"./Numerical\";\nimport HBargraph from \"./HBargraph\";\nimport VBargraph from \"./VBargraph\";\nimport HGroup from \"./HGroup\";\nimport VGroup from \"./VGroup\";\nimport TGroup from \"./TGroup\";\nimport type AbstractItem from \"./AbstractItem\";\nimport type AbstractGroup from \"./AbstractGroup\";\nimport type { TLayoutType } from \"../types\";\n\nexport default class Layout {\n /**\n * Get the rendering type of an item by parsing its metadata\n */\n static predictType(item: FaustUIItem): TLayoutType {\n if (item.type === \"hbargraph\" || item.type === \"vbargraph\") {\n if (item.meta?.find(meta => meta.style?.startsWith(\"led\"))) return \"led\";\n if (item.meta?.find(meta => meta.style?.startsWith(\"numerical\"))) return \"numerical\";\n return item.type;\n }\n if (item.type === \"hslider\" || item.type === \"nentry\" || item.type === \"vslider\") {\n if (item.meta?.find(meta => meta.style?.startsWith(\"knob\"))) return \"knob\";\n if (item.meta?.find(meta => meta.style?.startsWith(\"menu\"))) return \"menu\";\n if (item.meta?.find(meta => meta.style?.startsWith(\"radio\"))) return \"radio\";\n }\n return item.type;\n }\n /**\n * Get the Layout class constructor of an item\n */\n static getItem(item: FaustUIItem): AbstractItem | AbstractGroup {\n const Ctor = {\n hslider: HSlider,\n vslider: VSlider,\n nentry: Nentry,\n soundfile: Soundfile,\n button: Button,\n checkbox: Checkbox,\n knob: Knob,\n menu: Menu,\n radio: Radio,\n led: Led,\n numerical: Numerical,\n hbargraph: HBargraph,\n vbargraph: VBargraph,\n hgroup: HGroup,\n vgroup: VGroup,\n tgroup: TGroup\n };\n const layoutType = this.predictType(item);\n return new Ctor[layoutType](item as any);\n }\n static getItems(items: FaustUIItem[]) {\n return items.map((item) => {\n if (\"items\" in item) item.items = this.getItems(item.items);\n return this.getItem(item);\n });\n }\n static calc(ui: FaustUIItem[]) {\n const rootGroup = new VGroup({ items: this.getItems(ui), type: \"vgroup\", label: \"\" }, true);\n rootGroup.adjust();\n rootGroup.expand(0, 0);\n rootGroup.offset();\n return rootGroup;\n }\n}\n","import AbstractOutputItem from \"./AbstractOutputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class Led extends AbstractOutputItem {\n layout: LayoutProps = {\n type: \"led\",\n width: 1,\n height: 1,\n sizing: \"none\"\n };\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class Menu extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"menu\",\n width: 2,\n height: 1,\n sizing: \"horizontal\"\n };\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class Nentry extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"nentry\",\n width: 1,\n height: 1,\n sizing: \"none\"\n };\n}\n","import AbstractOutputItem from \"./AbstractOutputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class Numerical extends AbstractOutputItem {\n layout: LayoutProps = {\n type: \"numerical\",\n width: 1,\n height: 1,\n sizing: \"none\"\n };\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class Radio extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"radio\",\n width: 2,\n height: 2, // TODO: vradio and hradio\n sizing: \"both\"\n };\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport { LayoutProps } from \"../types\";\n\nexport default class Soundfile extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"soundfile\",\n width: 2,\n height: 1,\n sizing: \"horizontal\"\n };\n}\n","import AbstractGroup from \"./AbstractGroup\";\n\nexport default class TGroup extends AbstractGroup {\n static tabLayout = {\n width: 2,\n height: 1\n };\n adjust() {\n this.items.forEach((item) => {\n item.adjust();\n this.layout.width = Math.max(this.layout.width, item.layout.width + 2 * AbstractGroup.padding);\n this.layout.height = Math.max(this.layout.height, item.layout.height + 2 * AbstractGroup.padding + TGroup.labelHeight);\n });\n const tabsCount = this.items.length;\n this.layout.width = Math.max(this.layout.width, tabsCount * TGroup.tabLayout.width);\n this.layout.height += TGroup.tabLayout.height;\n if (this.layout.width < 1) this.layout.width += 1;\n return this;\n }\n expand() {\n const tabsCount = this.items.length;\n this.items.forEach((item) => {\n let dY$ = 0; // Space available to expand for current item\n let dX$ = 0;\n if (item.layout.sizing === \"both\" || item.layout.sizing === \"horizontal\") dX$ = this.layout.width - 2 * AbstractGroup.padding - item.layout.width;\n if (item.layout.sizing === \"both\" || item.layout.sizing === \"vertical\") dY$ = this.layout.height - 2 * AbstractGroup.padding - (this.isRoot ? 0 : AbstractGroup.labelHeight) - (tabsCount ? TGroup.tabLayout.height : 0) - item.layout.height;\n item.expand(dX$, dY$);\n });\n return this;\n }\n offset() {\n const { labelHeight, padding } = AbstractGroup;\n const $left = padding;\n const $top = padding + (this.isRoot ? 0 : labelHeight) + TGroup.tabLayout.height;\n this.items.forEach((item) => {\n item.layout.offsetLeft = $left;\n item.layout.offsetTop = $top;\n item.layout.left = (this.layout.left || 0) + item.layout.offsetLeft;\n item.layout.top = (this.layout.top || 0) + item.layout.offsetTop;\n item.offset();\n });\n return this;\n }\n}\n","import AbstractOutputItem from \"./AbstractOutputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class VBargraph extends AbstractOutputItem {\n layout: LayoutProps = {\n type: \"vbargraph\",\n width: 1,\n height: 5,\n sizing: \"vertical\"\n };\n}\n","import AbstractGroup from \"./AbstractGroup\";\n\nexport default class VGroup extends AbstractGroup {\n adjust() {\n this.items.forEach((item) => {\n item.adjust();\n this.layout.width = Math.max(this.layout.width, item.layout.width + 2 * AbstractGroup.padding);\n this.layout.height += item.layout.height;\n });\n this.layout.height += AbstractGroup.spaceBetween * (this.items.length - 1);\n if (this.layout.width < 1) this.layout.width += 1;\n return this;\n }\n expand(dX: number, dY: number) {\n let vExpandItems = 0;\n this.items.forEach((item) => {\n if (item.layout.sizing === \"both\" || item.layout.sizing === \"vertical\") vExpandItems++;\n });\n this.items.forEach((item) => {\n let dX$ = 0;\n let dY$ = 0; // Space available to expand for current item\n if (item.layout.sizing === \"both\" || item.layout.sizing === \"horizontal\") {\n dX$ = this.layout.width - 2 * AbstractGroup.padding - item.layout.width;\n item.layout.width += dX$;\n }\n if (item.layout.sizing === \"both\" || item.layout.sizing === \"vertical\") {\n dY$ = vExpandItems ? dY / vExpandItems : 0;\n item.layout.height += dY$;\n }\n item.expand(dX$, dY$);\n });\n // this.layout.height += dY;\n return this;\n }\n offset() {\n const { labelHeight, padding, spaceBetween } = AbstractGroup;\n const $left = padding;\n let $top = padding + (this.isRoot ? 0 : labelHeight);\n const { width } = this.layout;\n this.items.forEach((item) => {\n item.layout.offsetLeft = $left;\n item.layout.offsetTop = $top;\n // center the item\n item.layout.offsetLeft += (width - item.layout.width) / 2 - padding;\n item.layout.left = (this.layout.left || 0) + item.layout.offsetLeft;\n item.layout.top = (this.layout.top || 0) + item.layout.offsetTop;\n item.offset();\n $top += item.layout.height + spaceBetween;\n });\n return this;\n }\n}\n","import AbstractInputItem from \"./AbstractInputItem\";\nimport type { LayoutProps } from \"../types\";\n\nexport default class VSlider extends AbstractInputItem {\n layout: LayoutProps = {\n type: \"vslider\",\n width: 1,\n height: 5,\n sizing: \"vertical\"\n };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export { default as FaustUI } from \"./FaustUI\";\nexport { default as instantiate } from \"./instantiate\";\n"],"names":["e","label","type","layout","props","key","_a"],"sourceRoot":""}