@grame/faustwasm 0.4.4 → 0.4.6

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.
Files changed (38) hide show
  1. package/COPYING.txt +520 -0
  2. package/README.md +3 -0
  3. package/assets/standalone/faust-ui/index.css +8 -0
  4. package/assets/standalone/faust-ui/index.css.map +1 -1
  5. package/assets/standalone/faust-ui/index.js +56 -30
  6. package/assets/standalone/faust-ui/index.js.map +1 -1
  7. package/assets/standalone/faustwasm/index.d.ts +18 -10
  8. package/assets/standalone/faustwasm/index.js +69 -24
  9. package/assets/standalone/faustwasm/index.js.map +2 -2
  10. package/dist/cjs/index.d.ts +18 -10
  11. package/dist/cjs/index.js +69 -24
  12. package/dist/cjs/index.js.map +2 -2
  13. package/dist/cjs-bundle/index.d.ts +18 -10
  14. package/dist/cjs-bundle/index.js +72 -27
  15. package/dist/cjs-bundle/index.js.map +2 -2
  16. package/dist/esm/index.d.ts +18 -10
  17. package/dist/esm/index.js +69 -24
  18. package/dist/esm/index.js.map +2 -2
  19. package/dist/esm-bundle/index.d.ts +18 -10
  20. package/dist/esm-bundle/index.js +72 -27
  21. package/dist/esm-bundle/index.js.map +2 -2
  22. package/libfaust-wasm/libfaust-wasm.data +0 -0
  23. package/libfaust-wasm/libfaust-wasm.js +1 -1
  24. package/libfaust-wasm/libfaust-wasm.wasm +0 -0
  25. package/node +0 -0
  26. package/package.json +4 -2
  27. package/src/FaustAudioWorkletNode.ts +13 -24
  28. package/src/FaustAudioWorkletProcessor.ts +28 -1
  29. package/src/FaustDspGenerator.ts +18 -9
  30. package/src/FaustFFTAudioWorkletProcessor.ts +27 -0
  31. package/src/instantiateFaustModule.js +82 -0
  32. package/test/faustlive-wasm/faust-ui/index.css +8 -0
  33. package/test/faustlive-wasm/faust-ui/index.css.map +1 -1
  34. package/test/faustlive-wasm/faust-ui/index.js +56 -30
  35. package/test/faustlive-wasm/faust-ui/index.js.map +1 -1
  36. package/test/faustlive-wasm/faustwasm/index.d.ts +18 -10
  37. package/test/faustlive-wasm/faustwasm/index.js +69 -24
  38. package/test/faustlive-wasm/faustwasm/index.js.map +2 -2
Binary file
package/node ADDED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grame/faustwasm",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "WebAssembly version of Faust Compiler",
5
5
  "main": "dist/cjs/index.js",
6
6
  "types": "dist/esm/index.d.ts",
@@ -39,9 +39,11 @@
39
39
  "homepage": "https://github.com/grame-cncm/faustwasm#readme",
40
40
  "devDependencies": {
41
41
  "@aws-crypto/sha256-js": "^5.2.0",
42
- "@shren/faust-ui": "^1.1.11",
42
+ "@shren/faust-ui": "^1.1.12",
43
43
  "@types/node": "^20.12.7",
44
44
  "@types/webmidi": "^2.0.10",
45
+ "@webaudiomodules/api": "^2.0.0-alpha.6",
46
+ "@webaudiomodules/sdk-parammgr": "^0.0.13",
45
47
  "dts-bundle-generator": "^9.5.1",
46
48
  "esbuild": "^0.20.2",
47
49
  "typescript": "^5.4.5"
@@ -18,7 +18,7 @@ export class FaustAudioWorkletNode<Poly extends boolean = false> extends (global
18
18
  #hasAccInput = false;
19
19
  #hasGyrInput = false;
20
20
 
21
- constructor(context: BaseAudioContext, name: string, factory: LooseFaustDspFactory, options: FaustAudioWorkletNodeOptions<Poly>["processorOptions"], nodeOptions: Partial<FaustAudioWorkletNodeOptions> = {}) {
21
+ constructor(context: BaseAudioContext, name: string, factory: LooseFaustDspFactory, options: Partial<FaustAudioWorkletNodeOptions<Poly>> = {}) {
22
22
 
23
23
  // Create JSON object
24
24
  const JSONObj: FaustDspMeta = JSON.parse(factory.json);
@@ -31,8 +31,8 @@ export class FaustAudioWorkletNode<Poly extends boolean = false> extends (global
31
31
  outputChannelCount: [JSONObj.outputs],
32
32
  channelCountMode: "explicit",
33
33
  channelInterpretation: "speakers",
34
- processorOptions: options,
35
- ...nodeOptions
34
+ processorOptions: options.processorOptions,
35
+ ...options
36
36
  });
37
37
 
38
38
  this.fJSONDsp = JSONObj;
@@ -156,6 +156,9 @@ export class FaustAudioWorkletNode<Poly extends boolean = false> extends (global
156
156
  getPlotHandler(): PlotHandler | null {
157
157
  return this.fPlotHandler;
158
158
  }
159
+ setupWamEventHandler() {
160
+ this.port.postMessage({ type: "setupWamEventHandler" });
161
+ }
159
162
 
160
163
  getNumInputs() {
161
164
  return this.fJSONDsp.inputs;
@@ -252,8 +255,8 @@ export class FaustMonoAudioWorkletNode extends FaustAudioWorkletNode<false> impl
252
255
  throw e;
253
256
  }
254
257
 
255
- constructor(context: BaseAudioContext, name: string, factory: LooseFaustDspFactory, sampleSize: number, nodeOptions: Partial<FaustAudioWorkletNodeOptions> = {}) {
256
- super(context, name, factory, { name, factory, sampleSize }, nodeOptions);
258
+ constructor(context: BaseAudioContext, options: Partial<FaustAudioWorkletNodeOptions<false>> & Pick<FaustAudioWorkletNodeOptions<false>, "processorOptions">) {
259
+ super(context, options.processorOptions.name, options.processorOptions.factory, options);
257
260
  }
258
261
  }
259
262
 
@@ -269,30 +272,16 @@ export class FaustPolyAudioWorkletNode extends FaustAudioWorkletNode<true> imple
269
272
  throw e;
270
273
  }
271
274
 
272
- constructor(context: BaseAudioContext,
273
- name: string,
274
- voiceFactory: LooseFaustDspFactory,
275
- mixerModule: WebAssembly.Module,
276
- voices: number,
277
- sampleSize: number,
278
- effectFactory?: LooseFaustDspFactory, nodeOptions: Partial<FaustAudioWorkletNodeOptions> = {}) {
275
+ constructor(context: BaseAudioContext, options: Partial<FaustAudioWorkletNodeOptions<true>> & Pick<FaustAudioWorkletNodeOptions<true>, "processorOptions">) {
279
276
 
280
277
  super(
281
278
  context,
282
- name,
283
- voiceFactory,
284
- {
285
- name,
286
- voiceFactory,
287
- mixerModule,
288
- voices,
289
- sampleSize,
290
- effectFactory
291
- },
292
- nodeOptions
279
+ options.processorOptions.name,
280
+ options.processorOptions.voiceFactory,
281
+ options
293
282
  );
294
283
 
295
- this.fJSONEffect = effectFactory ? JSON.parse(effectFactory.json) : null;
284
+ this.fJSONEffect = options.processorOptions.effectFactory ? JSON.parse(options.processorOptions.effectFactory.json) : null;
296
285
 
297
286
  if (this.fJSONEffect) {
298
287
  FaustBaseWebAudioDsp.parseUI(this.fJSONEffect.ui, this.fUICallback);
@@ -1,6 +1,7 @@
1
1
  import type FaustWasmInstantiator from "./FaustWasmInstantiator";
2
2
  import type { FaustBaseWebAudioDsp, FaustWebAudioDspVoice, FaustMonoWebAudioDsp, FaustPolyWebAudioDsp } from "./FaustWebAudioDsp";
3
- import type { AudioParamDescriptor, AudioWorkletGlobalScope, LooseFaustDspFactory, FaustDspMeta, FaustUIItem, AudioWorkletProcessor } from "./types";
3
+ import type { AudioParamDescriptor, AudioWorkletGlobalScope, LooseFaustDspFactory, FaustDspMeta, FaustUIItem } from "./types";
4
+ import type { AudioWorkletGlobalScope as WamAudioWorkletGlobalScope, WamParamMgrSDKBaseModuleScope } from "@webaudiomodules/sdk-parammgr";
4
5
 
5
6
  /**
6
7
  * Injected in the string to be compiled on AudioWorkletProcessor side
@@ -31,6 +32,9 @@ export interface FaustPolyAudioWorkletNodeOptions extends AudioWorkletNodeOption
31
32
  export interface FaustAudioWorkletProcessorOptions {
32
33
  name: string;
33
34
  sampleSize: number;
35
+ // for WAMs
36
+ moduleId?: string;
37
+ instanceId?: string;
34
38
  }
35
39
  export interface FaustMonoAudioWorkletProcessorOptions extends FaustAudioWorkletProcessorOptions {
36
40
  factory: LooseFaustDspFactory;
@@ -82,6 +86,8 @@ const getFaustAudioWorkletProcessor = <Poly extends boolean = false>(dependencie
82
86
 
83
87
  protected paramValuesCache: Record<string, number> = {};
84
88
 
89
+ protected wamInfo?: { moduleId: string; instanceId: string };
90
+
85
91
  constructor(options: FaustAudioWorkletNodeOptions<Poly>) {
86
92
  super(options);
87
93
 
@@ -92,6 +98,10 @@ const getFaustAudioWorkletProcessor = <Poly extends boolean = false>(dependencie
92
98
  parameterDescriptors.forEach((pd) => {
93
99
  this.paramValuesCache[pd.name] = pd.defaultValue || 0;
94
100
  })
101
+
102
+ const { moduleId, instanceId } = options.processorOptions;
103
+ if (!moduleId || !instanceId) return;
104
+ this.wamInfo = { moduleId, instanceId };
95
105
  }
96
106
 
97
107
  static get parameterDescriptors() {
@@ -107,6 +117,19 @@ const getFaustAudioWorkletProcessor = <Poly extends boolean = false>(dependencie
107
117
  return params;
108
118
  }
109
119
 
120
+ setupWamEventHandler() {
121
+ if (!this.wamInfo) return;
122
+ const { moduleId, instanceId } = this.wamInfo;
123
+ const { webAudioModules } = (globalThis as unknown as WamAudioWorkletGlobalScope);
124
+ const ModuleScope = webAudioModules.getModuleScope(moduleId) as WamParamMgrSDKBaseModuleScope;
125
+ const paramMgrProcessor = ModuleScope?.paramMgrProcessors?.[instanceId];
126
+ if (!paramMgrProcessor) return;
127
+ if (paramMgrProcessor.handleEvent) return;
128
+ paramMgrProcessor.handleEvent = (event) => {
129
+ if (event.type === "wam-midi") this.midiMessage(event.data.bytes);
130
+ };
131
+ }
132
+
110
133
  process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: { [key: string]: Float32Array }) {
111
134
 
112
135
  // Update controls (possibly needed for sample accurate control)
@@ -162,6 +185,10 @@ const getFaustAudioWorkletProcessor = <Poly extends boolean = false>(dependencie
162
185
  }
163
186
  break;
164
187
  }
188
+ case "setupWamEventHandler": {
189
+ this.setupWamEventHandler();
190
+ break;
191
+ }
165
192
  case "start": {
166
193
  this.fDSPCode.start();
167
194
  break;
@@ -52,6 +52,7 @@ export interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {
52
52
  * @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode
53
53
  * @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames
54
54
  * @param processorName - AudioWorklet Processor name
55
+ * @param processorOptions - Additional AudioWorklet Processor options
55
56
  * @returns the compiled WebAudio node or 'null' if failure
56
57
  */
57
58
  createNode(
@@ -60,7 +61,8 @@ export interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {
60
61
  factory?: LooseFaustDspFactory,
61
62
  sp?: boolean,
62
63
  bufferSize?: number,
63
- processorName?: string
64
+ processorName?: string,
65
+ processorOptions?: Record<string, any>
64
66
  ): Promise<IFaustMonoWebAudioNode | null>;
65
67
 
66
68
  /**
@@ -72,6 +74,7 @@ export interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {
72
74
  * @param factory - default is the compiled factory
73
75
  * @param fftOptions - initial FFT options
74
76
  * @param processorName - AudioWorklet Processor name
77
+ * @param processorOptions - Additional AudioWorklet Processor options
75
78
  * @returns the compiled WebAudio node or 'null' if failure
76
79
  */
77
80
  createFFTNode(
@@ -80,7 +83,8 @@ export interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {
80
83
  name?: string,
81
84
  factory?: LooseFaustDspFactory,
82
85
  fftOptions?: Partial<FaustFFTOptionsData>,
83
- processorName?: string
86
+ processorName?: string,
87
+ processorOptions?: Record<string, any>
84
88
  ): Promise<FaustMonoAudioWorkletNode | null>;
85
89
 
86
90
  /**
@@ -148,6 +152,7 @@ export interface IFaustPolyDspGenerator extends GeneratorSupportingSoundfiles {
148
152
  * @param effectFactory - the Faust factory for the effect, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)
149
153
  * @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode
150
154
  * @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames
155
+ * @param processorOptions - Additional AudioWorklet Processor options
151
156
  * @returns the compiled WebAudio node or 'null' if failure
152
157
  */
153
158
  createNode(
@@ -159,7 +164,8 @@ export interface IFaustPolyDspGenerator extends GeneratorSupportingSoundfiles {
159
164
  effectFactory?: LooseFaustDspFactory | null,
160
165
  sp?: boolean,
161
166
  bufferSize?: number,
162
- processorName?: string
167
+ processorName?: string,
168
+ processorOptions?: Record<string, any>
163
169
  ): Promise<IFaustPolyWebAudioNode | null>;
164
170
 
165
171
  /**
@@ -244,7 +250,8 @@ export class FaustMonoDspGenerator implements IFaustMonoDspGenerator {
244
250
  factory = this.factory as LooseFaustDspFactory,
245
251
  sp = false as SP,
246
252
  bufferSize = 1024,
247
- processorName = factory?.shaKey || name
253
+ processorName = factory?.shaKey || name,
254
+ processorOptions: Record<string, any> = {}
248
255
  ): Promise<SP extends true ? FaustMonoScriptProcessorNode | null : FaustMonoAudioWorkletNode | null> {
249
256
  if (!factory) throw new Error("Code is not compiled, please define the factory or call `await this.compile()` first.");
250
257
 
@@ -307,7 +314,7 @@ const dependencies = {
307
314
  }
308
315
  }
309
316
  // Create the AWN
310
- const node = new FaustMonoAudioWorkletNode(context, processorName, factory, sampleSize);
317
+ const node = new FaustMonoAudioWorkletNode(context, { processorOptions: { name: processorName, factory, sampleSize, ...processorOptions } });
311
318
 
312
319
  return node as SP extends true ? FaustMonoScriptProcessorNode : FaustMonoAudioWorkletNode;
313
320
  }
@@ -319,7 +326,8 @@ const dependencies = {
319
326
  name = this.name,
320
327
  factory = this.factory as LooseFaustDspFactory,
321
328
  fftOptions: Partial<FaustFFTOptionsData> = {},
322
- processorName = factory?.shaKey ? `${factory.shaKey}_fft` : name
329
+ processorName = factory?.shaKey ? `${factory.shaKey}_fft` : name,
330
+ processorOptions: Record<string, any> = {}
323
331
  ): Promise<FaustMonoAudioWorkletNode | null> {
324
332
  if (!factory) throw new Error("Code is not compiled, please define the factory or call `await this.compile()` first.");
325
333
 
@@ -375,7 +383,7 @@ const dependencies = {
375
383
  }
376
384
  }
377
385
  // Create the AWN
378
- const node = new FaustMonoAudioWorkletNode(context, processorName, factory, sampleSize, { channelCount: Math.max(1, Math.ceil(meta.inputs / 3)), outputChannelCount: [Math.ceil(meta.outputs / 2)] });
386
+ const node = new FaustMonoAudioWorkletNode(context, { channelCount: Math.max(1, Math.ceil(meta.inputs / 3)), outputChannelCount: [Math.ceil(meta.outputs / 2)], processorOptions: { name: processorName, factory, sampleSize, ...processorOptions } });
379
387
  if (fftOptions.fftSize) {
380
388
  const param = node.parameters.get("fftSize");
381
389
  if (param) param.value = fftOptions.fftSize;
@@ -573,7 +581,8 @@ process = adaptorIns(dsp_code.process) : dsp_code.effect : adaptorOuts;
573
581
  effectFactory = this.effectFactory as LooseFaustDspFactory | null,
574
582
  sp = false as SP,
575
583
  bufferSize = 1024,
576
- processorName = ((voiceFactory?.shaKey || "") + (effectFactory?.shaKey || "")) || `${name}_poly`
584
+ processorName = ((voiceFactory?.shaKey || "") + (effectFactory?.shaKey || "")) || `${name}_poly`,
585
+ processorOptions = {}
577
586
  ): Promise<SP extends true ? FaustPolyScriptProcessorNode | null : FaustPolyAudioWorkletNode | null> {
578
587
  if (!voiceFactory) throw new Error("Code is not compiled, please define the factory or call `await this.compile()` first.");
579
588
 
@@ -642,7 +651,7 @@ const dependencies = {
642
651
  }
643
652
  }
644
653
  // Create the AWN
645
- const node = new FaustPolyAudioWorkletNode(context, processorName, voiceFactory, mixerModule, voices, sampleSize, effectFactory || undefined);
654
+ const node = new FaustPolyAudioWorkletNode(context, { processorOptions: { name: processorName, voiceFactory, mixerModule, voices, sampleSize, effectFactory: effectFactory || undefined, ...processorOptions } });
646
655
 
647
656
  return node as SP extends true ? FaustPolyScriptProcessorNode : FaustPolyAudioWorkletNode;
648
657
  }
@@ -2,6 +2,7 @@ import type { FaustMonoDspInstance } from "./FaustDspInstance";
2
2
  import type FaustWasmInstantiator from "./FaustWasmInstantiator";
3
3
  import type { FaustBaseWebAudioDsp, FaustMonoWebAudioDsp, PlotHandler } from "./FaustWebAudioDsp";
4
4
  import type { AudioParamDescriptor, AudioWorkletGlobalScope, LooseFaustDspFactory, FaustDspMeta, FaustUIItem, InterfaceFFT, TWindowFunction, Writeable, TypedArray, FFTUtils } from "./types";
5
+ import type { AudioWorkletGlobalScope as WamAudioWorkletGlobalScope, WamParamMgrSDKBaseModuleScope } from "@webaudiomodules/sdk-parammgr";
5
6
 
6
7
  export interface FaustFFTOptionsData {
7
8
  fftSize: number;
@@ -33,6 +34,9 @@ export interface FaustFFTAudioWorkletProcessorOptions {
33
34
  name: string;
34
35
  sampleSize: number;
35
36
  factory: LooseFaustDspFactory;
37
+ // for WAMs
38
+ moduleId?: string;
39
+ instanceId?: string;
36
40
  }
37
41
 
38
42
 
@@ -122,6 +126,8 @@ const getFaustFFTAudioWorkletProcessor = (dependencies: FaustFFTAudioWorkletProc
122
126
 
123
127
  protected paramValuesCache: Record<string, number> = {};
124
128
 
129
+ protected wamInfo?: { moduleId: string; instanceId: string };
130
+
125
131
  private dspInstance!: FaustMonoDspInstance;
126
132
  private sampleSize!: number;
127
133
 
@@ -187,6 +193,10 @@ const getFaustFFTAudioWorkletProcessor = (dependencies: FaustFFTAudioWorkletProc
187
193
 
188
194
  // Init the FFT constructor and the Faust FFT Processor
189
195
  this.initFFT();
196
+
197
+ const { moduleId, instanceId } = options.processorOptions;
198
+ if (!moduleId || !instanceId) return;
199
+ this.wamInfo = { moduleId, instanceId };
190
200
  }
191
201
 
192
202
  async initFFT(): Promise<true> {
@@ -232,6 +242,19 @@ const getFaustFFTAudioWorkletProcessor = (dependencies: FaustFFTAudioWorkletProc
232
242
  ];
233
243
  }
234
244
 
245
+ setupWamEventHandler() {
246
+ if (!this.wamInfo) return;
247
+ const { moduleId, instanceId } = this.wamInfo;
248
+ const { webAudioModules } = (globalThis as unknown as WamAudioWorkletGlobalScope);
249
+ const ModuleScope = webAudioModules.getModuleScope(moduleId) as WamParamMgrSDKBaseModuleScope;
250
+ const paramMgrProcessor = ModuleScope?.paramMgrProcessors?.[instanceId];
251
+ if (!paramMgrProcessor) return;
252
+ if (paramMgrProcessor.handleEvent) return;
253
+ paramMgrProcessor.handleEvent = (event) => {
254
+ if (event.type === "wam-midi") this.midiMessage(event.data.bytes);
255
+ };
256
+ }
257
+
235
258
  processFFT() {
236
259
  // Get the number of samples that need to proceed, from the input r/w pointers
237
260
  let samplesForFFT = mod(this.$inputWrite - this.$inputRead, this.fftBufferSize) || this.fftBufferSize;
@@ -400,6 +423,10 @@ const getFaustFFTAudioWorkletProcessor = (dependencies: FaustFFTAudioWorkletProc
400
423
  this.fDSPCode?.setPlotHandler(this.fPlotHandler);
401
424
  break;
402
425
  }
426
+ case "setupWamEventHandler": {
427
+ this.setupWamEventHandler();
428
+ break;
429
+ }
403
430
  case "start": {
404
431
  this.fDSPCode?.start();
405
432
  break;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ exports.__esModule = true;
39
+ exports.FaustModuleFactoryData = exports.FaustModuleFactoryWasm = exports.FaustModuleFactoryFn = void 0;
40
+ var libfaust_wasm_cjs_1 = require("../libfaust-wasm/libfaust-wasm.cjs");
41
+ var libfaust_wasm_wasm_1 = require("../libfaust-wasm/libfaust-wasm.wasm");
42
+ var libfaust_wasm_data_1 = require("../libfaust-wasm/libfaust-wasm.data");
43
+ exports.FaustModuleFactoryFn = libfaust_wasm_cjs_1["default"];
44
+ exports.FaustModuleFactoryWasm = libfaust_wasm_wasm_1["default"];
45
+ exports.FaustModuleFactoryData = libfaust_wasm_data_1["default"];
46
+ /**
47
+ * Instantiate `FaustModule` using bundled binaries. Module constructor and files can be overriden.
48
+ */
49
+ var instantiateFaustModule = function (FaustModuleFactoryIn, dataBinaryIn, wasmBinaryIn) {
50
+ if (FaustModuleFactoryIn === void 0) { FaustModuleFactoryIn = libfaust_wasm_cjs_1["default"]; }
51
+ if (dataBinaryIn === void 0) { dataBinaryIn = libfaust_wasm_data_1["default"]; }
52
+ if (wasmBinaryIn === void 0) { wasmBinaryIn = libfaust_wasm_wasm_1["default"]; }
53
+ return __awaiter(void 0, void 0, void 0, function () {
54
+ var g, faustModule;
55
+ return __generator(this, function (_a) {
56
+ switch (_a.label) {
57
+ case 0:
58
+ g = globalThis;
59
+ if (g.AudioWorkletGlobalScope) {
60
+ g.importScripts = function () { };
61
+ g.self = { location: { href: "" } };
62
+ }
63
+ return [4 /*yield*/, FaustModuleFactoryIn({
64
+ wasmBinary: wasmBinaryIn,
65
+ getPreloadedPackage: function (remotePackageName, remotePackageSize) {
66
+ if (remotePackageName === "libfaust-wasm.data")
67
+ return dataBinaryIn.buffer;
68
+ return new ArrayBuffer(0);
69
+ }
70
+ })];
71
+ case 1:
72
+ faustModule = _a.sent();
73
+ if (g.AudioWorkletGlobalScope) {
74
+ delete g.importScripts;
75
+ delete g.self;
76
+ }
77
+ return [2 /*return*/, faustModule];
78
+ }
79
+ });
80
+ });
81
+ };
82
+ exports["default"] = instantiateFaustModule;
@@ -53,6 +53,7 @@
53
53
  display: block;
54
54
  height: 100%;
55
55
  width: 100%;
56
+ touch-action: none;
56
57
  }
57
58
  .faust-ui-component.faust-ui-component-vslider > .faust-ui-component-vslider-flexdiv input {
58
59
  position: relative;
@@ -98,6 +99,7 @@
98
99
  display: block;
99
100
  height: 100%;
100
101
  width: 100%;
102
+ touch-action: none;
101
103
  }
102
104
  .faust-ui-component.faust-ui-component-hslider > .faust-ui-component-hslider-flexdiv > input {
103
105
  position: relative;
@@ -162,6 +164,7 @@
162
164
  border-radius: 4px;
163
165
  flex: 1 0 auto;
164
166
  border-style: solid;
167
+ touch-action: none;
165
168
  }
166
169
  .faust-ui-component.faust-ui-component-button > div > span {
167
170
  user-select: none;
@@ -179,6 +182,7 @@
179
182
  border-radius: 1px;
180
183
  flex: 1 0 auto;
181
184
  border-style: solid;
185
+ touch-action: none;
182
186
  }
183
187
  .faust-ui-component.faust-ui-component-checkbox > div > span {
184
188
  margin: auto;
@@ -196,6 +200,7 @@
196
200
  flex: 1 1 auto;
197
201
  min-height: 50%;
198
202
  width: 100%;
203
+ touch-action: none;
199
204
  }
200
205
  .faust-ui-component.faust-ui-component-knob > input {
201
206
  position: relative;
@@ -271,6 +276,7 @@
271
276
  display: block;
272
277
  height: 100%;
273
278
  width: 100%;
279
+ touch-action: none;
274
280
  }
275
281
  /*!************************************************************************************************************************!*\
276
282
  !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/Numerical.scss ***!
@@ -318,6 +324,7 @@
318
324
  display: block;
319
325
  height: 100%;
320
326
  width: 100%;
327
+ touch-action: none;
321
328
  }
322
329
  .faust-ui-component.faust-ui-component-vbargraph > .faust-ui-component-vbargraph-flexdiv > input {
323
330
  position: relative;
@@ -358,6 +365,7 @@
358
365
  display: block;
359
366
  height: 100%;
360
367
  width: 100%;
368
+ touch-action: none;
361
369
  }
362
370
  .faust-ui-component.faust-ui-component-hbargraph > .faust-ui-component-hbargraph-flexdiv > input {
363
371
  position: relative;
@@ -1 +1 @@
1
- {"version":3,"file":"index.css","mappings":";;;AAAA;EACI;EACA;EACA;EACA;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAAI;EACI;AAER,C;;;;ACvBA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAFY;EACI;EACA;EACA;EACA;AAIhB;AADQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGZ;AAFY;EAEI;EACA;AAGhB,C;;;;AC1CI;EACI;AAAR;AAEI;EACI;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;EACA;EACA;EACA;AACZ;AAAY;EACI;EACA;EACA;EACA;AAEhB;AACQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACZ;AAAY;EAEI;EACA;AAChB,C;;;;ACxCA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EAEI;AAEZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACbA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EAEI;EACA;AAEZ,C;;;;AC1BA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER,C;;;;ACVA;EACI;AACJ;AAAI;EACI;EACA;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;AAGZ,C;;;;ACnBA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ,C;;;;ACjBA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAER,C;;;;ACdA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAFY;EACI;EACA;EACA;EACA;AAIhB;AADQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGZ,C;;;;ACrCI;EACI;AAAR;AAEI;EACI;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;EACA;EACA;EACA;AACZ;AAAY;EACI;EACA;EACA;EACA;AAEhB;AACQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACZ,C;;;;AClCA;EACI;EACA;EACA;EACA;EACA;AAAJ;AACI;EACI;EACA;EACA;EACA;AACR;AAAQ;EACI;EACA;EACA;EACA;AAEZ;AACI;EACI;EACA;EACA;EACA;AACR;AAAQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEZ;AADY;EACI;AAGhB;AADY;EACI;EACA;AAGhB,C;;;;AC3CA;EACI;EACA;EACA;EACA;EACA;EACA;AACJ,C","sources":["webpack://@shren/faust-ui/./src/components/Base.scss","webpack://@shren/faust-ui/./src/components/VSlider.scss","webpack://@shren/faust-ui/./src/components/HSlider.scss","webpack://@shren/faust-ui/./src/components/Nentry.scss","webpack://@shren/faust-ui/./src/components/Soundfile.scss","webpack://@shren/faust-ui/./src/components/Button.scss","webpack://@shren/faust-ui/./src/components/Checkbox.scss","webpack://@shren/faust-ui/./src/components/Knob.scss","webpack://@shren/faust-ui/./src/components/Menu.scss","webpack://@shren/faust-ui/./src/components/Radio.scss","webpack://@shren/faust-ui/./src/components/Led.scss","webpack://@shren/faust-ui/./src/components/Numerical.scss","webpack://@shren/faust-ui/./src/components/VBargraph.scss","webpack://@shren/faust-ui/./src/components/HBargraph.scss","webpack://@shren/faust-ui/./src/components/Group.scss","webpack://@shren/faust-ui/./src/index.scss"],"sourcesContent":[".faust-ui-component {\n display: flex;\n position: absolute;\n flex-direction: column;\n overflow: hidden;\n &:focus {\n outline: none;\n }\n & > .faust-ui-component-label {\n position: relative;\n margin-top: 4px;\n width: 100%;\n user-select: none;\n & > canvas {\n position: relative;\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n }\n & input {\n box-shadow: none;\n }\n}",".faust-ui-component.faust-ui-component-vslider {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-vslider-flexdiv {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-vslider-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n & input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 5px auto auto auto;\n border-width: 0px;\n border-radius: 4px;\n height: 5%;\n max-width: calc(100% - 8px);\n padding: 2px 4px;\n -moz-appearance:textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n }\n}",".faust-ui-component.faust-ui-component-hslider {\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-hslider-flexdiv {\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-hslider-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n height: 100%;\n margin: auto;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto 5px auto auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(20% - 13px);\n padding: 2px 4px;\n -moz-appearance:textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n }\n}\n",".faust-ui-component.faust-ui-component-nentry {\n align-items: center;\n & input {\n margin: 0px;\n text-align: center;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n opacity: 1;\n }\n }\n}",".faust-ui-component.faust-ui-component-soundfile {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 4px;\n flex: 1 0 auto;\n border-style: solid;\n & > span {\n user-select: none;\n margin: auto;\n }\n }\n}",".faust-ui-component.faust-ui-component-button {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 4px;\n flex: 1 0 auto;\n border-style: solid;\n & > span {\n user-select: none;\n margin: auto;\n }\n }\n}",".faust-ui-component.faust-ui-component-checkbox {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 1px;\n flex: 1 0 auto;\n border-style: solid;\n & > span {\n margin: auto;\n user-select: none;\n }\n }\n}",".faust-ui-component.faust-ui-component-knob {\n align-items: center;\n & > canvas {\n position: relative;\n display: block;\n flex: 1 1 auto;\n min-height: 50%;\n width: 100%;\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 0px;\n border-width: 0px;\n border-radius: 4px;\n max-width: calc(100% - 8px);\n padding: 2px 4px;\n -moz-appearance:textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n}",".faust-ui-component.faust-ui-component-menu {\n align-items: center;\n & > select {\n margin: 0px;\n text-align: center;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n }\n}",".faust-ui-component.faust-ui-component-radio {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n margin-top: auto;\n }\n & > .faust-ui-component-radio-group {\n flex: 0 0 auto;\n margin-bottom: auto;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n & > div {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n }\n}",".faust-ui-component.faust-ui-component-led {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-led-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n}\n",".faust-ui-component.faust-ui-component-numerical {\n align-items: center;\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(100% - 8px);\n padding: 2px 4px;\n }\n}",".faust-ui-component.faust-ui-component-vbargraph {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-vbargraph-flexdiv {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n height: inherit;\n & > .faust-ui-component-vbargraph-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 5px auto auto auto;\n border-width: 0px;\n border-radius: 4px;\n height: 5%;\n width: calc(100% - 8px);\n padding: 2px 4px;\n }\n }\n}\n",".faust-ui-component.faust-ui-component-hbargraph {\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-hbargraph-flexdiv {\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-hbargraph-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n height: 100%;\n margin: auto;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto 5px auto auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(20% - 13px);\n padding: 2px 4px;\n }\n }\n}","\n.faust-ui-group {\n position: absolute;\n display: block;\n background-color: rgba(80, 80, 80, 0.75);\n border-radius: 4px;\n border: 1px rgba(255, 255, 255, 0.25) solid;\n & > .faust-ui-group-label {\n position: relative;\n margin: 4px;\n width: calc(100% - 8px);\n user-select: none;\n & > canvas {\n position: relative;\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n }\n & .faust-ui-tgroup-tabs {\n position: absolute;\n display: inline-block;\n white-space: nowrap;\n left: 0px;\n & .faust-ui-tgroup-tab {\n position: relative;\n display: inline-block;\n border-radius: 5px;\n cursor: pointer;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n margin: 10px;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.5);\n &:hover {\n background-color: rgba(255, 255, 255, 1);\n }\n &.active {\n background-color: rgba(40, 40, 40, 1);\n color: white;\n }\n }\n }\n}",".faust-ui-root {\n margin: 0px auto;\n flex: 1 0 auto;\n position: relative !important;\n background-color: transparent !important;\n border: none !important;\n font-family: -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}"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"index.css","mappings":";;;AAAA;EACI;EACA;EACA;EACA;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAAI;EACI;AAER,C;;;;ACvBA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAFY;EACI;EACA;EACA;EACA;EACA;AAIhB;AADQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGZ;AAFY;EAEI;EACA;AAGhB,C;;;;AC3CI;EACI;AAAR;AAEI;EACI;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;EACA;EACA;EACA;AACZ;AAAY;EACI;EACA;EACA;EACA;EACA;AAEhB;AACQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACZ;AAAY;EAEI;EACA;AAChB,C;;;;ACzCA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EAEI;AAEZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACbI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACdA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EAEI;EACA;AAEZ,C;;;;AC3BA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER,C;;;;ACVA;EACI;AACJ;AAAI;EACI;EACA;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;AAGZ,C;;;;ACnBA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;EACA;AAGZ,C;;;;AClBA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAER,C;;;;ACdA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAFY;EACI;EACA;EACA;EACA;EACA;AAIhB;AADQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGZ,C;;;;ACtCI;EACI;AAAR;AAEI;EACI;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;EACA;EACA;EACA;AACZ;AAAY;EACI;EACA;EACA;EACA;EACA;AAEhB;AACQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACZ,C;;;;ACnCA;EACI;EACA;EACA;EACA;EACA;AAAJ;AACI;EACI;EACA;EACA;EACA;AACR;AAAQ;EACI;EACA;EACA;EACA;AAEZ;AACI;EACI;EACA;EACA;EACA;AACR;AAAQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEZ;AADY;EACI;AAGhB;AADY;EACI;EACA;AAGhB,C;;;;AC3CA;EACI;EACA;EACA;EACA;EACA;EACA;AACJ,C","sources":["webpack://@shren/faust-ui/./src/components/Base.scss","webpack://@shren/faust-ui/./src/components/VSlider.scss","webpack://@shren/faust-ui/./src/components/HSlider.scss","webpack://@shren/faust-ui/./src/components/Nentry.scss","webpack://@shren/faust-ui/./src/components/Soundfile.scss","webpack://@shren/faust-ui/./src/components/Button.scss","webpack://@shren/faust-ui/./src/components/Checkbox.scss","webpack://@shren/faust-ui/./src/components/Knob.scss","webpack://@shren/faust-ui/./src/components/Menu.scss","webpack://@shren/faust-ui/./src/components/Radio.scss","webpack://@shren/faust-ui/./src/components/Led.scss","webpack://@shren/faust-ui/./src/components/Numerical.scss","webpack://@shren/faust-ui/./src/components/VBargraph.scss","webpack://@shren/faust-ui/./src/components/HBargraph.scss","webpack://@shren/faust-ui/./src/components/Group.scss","webpack://@shren/faust-ui/./src/index.scss"],"sourcesContent":[".faust-ui-component {\n display: flex;\n position: absolute;\n flex-direction: column;\n overflow: hidden;\n &:focus {\n outline: none;\n }\n & > .faust-ui-component-label {\n position: relative;\n margin-top: 4px;\n width: 100%;\n user-select: none;\n & > canvas {\n position: relative;\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n }\n & input {\n box-shadow: none;\n }\n}",".faust-ui-component.faust-ui-component-vslider {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-vslider-flexdiv {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-vslider-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n & input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 5px auto auto auto;\n border-width: 0px;\n border-radius: 4px;\n height: 5%;\n max-width: calc(100% - 8px);\n padding: 2px 4px;\n -moz-appearance:textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n }\n}",".faust-ui-component.faust-ui-component-hslider {\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-hslider-flexdiv {\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-hslider-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n height: 100%;\n margin: auto;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto 5px auto auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(20% - 13px);\n padding: 2px 4px;\n -moz-appearance: textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n }\n}\n",".faust-ui-component.faust-ui-component-nentry {\n align-items: center;\n & input {\n margin: 0px;\n text-align: center;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n opacity: 1;\n }\n }\n}",".faust-ui-component.faust-ui-component-soundfile {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 4px;\n flex: 1 0 auto;\n border-style: solid;\n & > span {\n user-select: none;\n margin: auto;\n }\n }\n}",".faust-ui-component.faust-ui-component-button {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 4px;\n flex: 1 0 auto;\n border-style: solid;\n touch-action: none;\n & > span {\n user-select: none;\n margin: auto;\n }\n }\n}",".faust-ui-component.faust-ui-component-checkbox {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 1px;\n flex: 1 0 auto;\n border-style: solid;\n touch-action: none;\n & > span {\n margin: auto;\n user-select: none;\n }\n }\n}",".faust-ui-component.faust-ui-component-knob {\n align-items: center;\n & > canvas {\n position: relative;\n display: block;\n flex: 1 1 auto;\n min-height: 50%;\n width: 100%;\n touch-action: none;\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 0px;\n border-width: 0px;\n border-radius: 4px;\n max-width: calc(100% - 8px);\n padding: 2px 4px;\n -moz-appearance: textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n}",".faust-ui-component.faust-ui-component-menu {\n align-items: center;\n & > select {\n margin: 0px;\n text-align: center;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n }\n}",".faust-ui-component.faust-ui-component-radio {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n margin-top: auto;\n }\n & > .faust-ui-component-radio-group {\n flex: 0 0 auto;\n margin-bottom: auto;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n & > div {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n }\n}",".faust-ui-component.faust-ui-component-led {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-led-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n}\n",".faust-ui-component.faust-ui-component-numerical {\n align-items: center;\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(100% - 8px);\n padding: 2px 4px;\n }\n}",".faust-ui-component.faust-ui-component-vbargraph {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-vbargraph-flexdiv {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n height: inherit;\n & > .faust-ui-component-vbargraph-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 5px auto auto auto;\n border-width: 0px;\n border-radius: 4px;\n height: 5%;\n width: calc(100% - 8px);\n padding: 2px 4px;\n }\n }\n}\n",".faust-ui-component.faust-ui-component-hbargraph {\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-hbargraph-flexdiv {\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-hbargraph-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n height: 100%;\n margin: auto;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto 5px auto auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(20% - 13px);\n padding: 2px 4px;\n }\n }\n}","\n.faust-ui-group {\n position: absolute;\n display: block;\n background-color: rgba(80, 80, 80, 0.75);\n border-radius: 4px;\n border: 1px rgba(255, 255, 255, 0.25) solid;\n & > .faust-ui-group-label {\n position: relative;\n margin: 4px;\n width: calc(100% - 8px);\n user-select: none;\n & > canvas {\n position: relative;\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n }\n & .faust-ui-tgroup-tabs {\n position: absolute;\n display: inline-block;\n white-space: nowrap;\n left: 0px;\n & .faust-ui-tgroup-tab {\n position: relative;\n display: inline-block;\n border-radius: 5px;\n cursor: pointer;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n margin: 10px;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.5);\n &:hover {\n background-color: rgba(255, 255, 255, 1);\n }\n &.active {\n background-color: rgba(40, 40, 40, 1);\n color: white;\n }\n }\n }\n}",".faust-ui-root {\n margin: 0px auto;\n flex: 1 0 auto;\n position: relative !important;\n background-color: transparent !important;\n border: none !important;\n font-family: -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}"],"names":[],"sourceRoot":""}