angular-three-tweakpane 4.2.0 → 4.2.2

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.
@@ -38,17 +38,17 @@ class TweakpaneAnchor {
38
38
  * Reference to the pane's TweakpaneFolder, set by TweakpanePane when it initializes.
39
39
  * This is used as the parent folder for dynamically created folders.
40
40
  */
41
- this.paneFolder = signal(null, ...(ngDevMode ? [{ debugName: "paneFolder" }] : []));
41
+ this.paneFolder = signal(null, ...(ngDevMode ? [{ debugName: "paneFolder" }] : /* istanbul ignore next */ []));
42
42
  /**
43
43
  * Registry of folder ComponentRefs by folder name.
44
44
  * Used to reuse existing folders when multiple `tweaks()` calls use the same folder name.
45
45
  */
46
46
  this.folders = {};
47
47
  }
48
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneAnchor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
49
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: TweakpaneAnchor, isStandalone: true, selector: "[tweakpaneAnchor]", ngImport: i0 }); }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneAnchor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
49
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: TweakpaneAnchor, isStandalone: true, selector: "[tweakpaneAnchor]", ngImport: i0 }); }
50
50
  }
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneAnchor, decorators: [{
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneAnchor, decorators: [{
52
52
  type: Directive,
53
53
  args: [{ selector: '[tweakpaneAnchor]' }]
54
54
  }] });
@@ -60,10 +60,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
60
60
  * @internal
61
61
  */
62
62
  class TweakpaneAnchorHost {
63
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneAnchorHost, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
64
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.6", type: TweakpaneAnchorHost, isStandalone: true, selector: "tweakpane-anchor-host", ngImport: i0, template: '', isInline: true }); }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneAnchorHost, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
64
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: TweakpaneAnchorHost, isStandalone: true, selector: "tweakpane-anchor-host", ngImport: i0, template: '', isInline: true }); }
65
65
  }
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneAnchorHost, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneAnchorHost, decorators: [{
67
67
  type: Component,
68
68
  args: [{
69
69
  selector: 'tweakpane-anchor-host',
@@ -88,12 +88,12 @@ class TweakpaneBlade {
88
88
  * Whether the blade is hidden.
89
89
  * @default false
90
90
  */
91
- this.hidden = input(false, { ...(ngDevMode ? { debugName: "hidden" } : {}), transform: booleanAttribute });
91
+ this.hidden = input(false, { ...(ngDevMode ? { debugName: "hidden" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
92
92
  /**
93
93
  * Whether the blade is disabled (non-interactive).
94
94
  * @default false
95
95
  */
96
- this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
96
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
97
97
  this.injector = inject(Injector);
98
98
  }
99
99
  /**
@@ -124,10 +124,10 @@ class TweakpaneBlade {
124
124
  _api.disabled = this.disabled();
125
125
  }, { injector: this.injector });
126
126
  }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneBlade, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
128
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneBlade, isStandalone: true, selector: "tweakpane-blade", inputs: { hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneBlade, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
128
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneBlade, isStandalone: true, selector: "tweakpane-blade", inputs: { hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
129
129
  }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneBlade, decorators: [{
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneBlade, decorators: [{
131
131
  type: Directive,
132
132
  args: [{ selector: 'tweakpane-blade' }]
133
133
  }], propDecorators: { hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
@@ -150,7 +150,7 @@ class TweakpaneDebounce {
150
150
  * The debounce delay in milliseconds before emitting value changes.
151
151
  * @default 150
152
152
  */
153
- this.debounce = input(150, { ...(ngDevMode ? { debugName: "debounce" } : {}), transform: numberAttribute });
153
+ this.debounce = input(150, { ...(ngDevMode ? { debugName: "debounce" } : /* istanbul ignore next */ {}), transform: numberAttribute });
154
154
  this.injector = inject(Injector);
155
155
  }
156
156
  /**
@@ -177,10 +177,10 @@ class TweakpaneDebounce {
177
177
  });
178
178
  }, { injector: this.injector });
179
179
  }
180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneDebounce, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
181
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneDebounce, isStandalone: true, inputs: { debounce: { classPropertyName: "debounce", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
180
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneDebounce, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
181
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneDebounce, isStandalone: true, inputs: { debounce: { classPropertyName: "debounce", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
182
182
  }
183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneDebounce, decorators: [{
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneDebounce, decorators: [{
184
184
  type: Directive
185
185
  }], propDecorators: { debounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounce", required: false }] }] } });
186
186
 
@@ -203,7 +203,7 @@ class TweakpaneTitle {
203
203
  * The title text to display.
204
204
  * @default 'TweakPane Title'
205
205
  */
206
- this.title = input('TweakPane Title', ...(ngDevMode ? [{ debugName: "title" }] : []));
206
+ this.title = input('TweakPane Title', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
207
207
  this.injector = inject(Injector);
208
208
  }
209
209
  /**
@@ -230,10 +230,10 @@ class TweakpaneTitle {
230
230
  _api.title = this.title();
231
231
  }, { injector: this.injector });
232
232
  }
233
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
234
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneTitle, isStandalone: true, inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
233
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
234
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneTitle, isStandalone: true, inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
235
235
  }
236
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneTitle, decorators: [{
236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneTitle, decorators: [{
237
237
  type: Directive
238
238
  }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }] } });
239
239
 
@@ -264,7 +264,7 @@ class TweakpaneFolder {
264
264
  * Supports two-way binding with `[(expanded)]`.
265
265
  * @default false
266
266
  */
267
- this.expanded = model(false, ...(ngDevMode ? [{ debugName: "expanded" }] : []));
267
+ this.expanded = model(false, ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
268
268
  this.title = inject(TweakpaneTitle);
269
269
  this.blade = inject(TweakpaneBlade);
270
270
  this.parent = inject(TweakpaneFolder, { skipSelf: true, optional: true });
@@ -272,7 +272,7 @@ class TweakpaneFolder {
272
272
  * Signal containing the parent folder API.
273
273
  * Automatically links to the parent folder in the component hierarchy.
274
274
  */
275
- this.parentFolder = linkedSignal(() => this.parent?.folder(), ...(ngDevMode ? [{ debugName: "parentFolder" }] : []));
275
+ this.parentFolder = linkedSignal(() => this.parent?.folder(), ...(ngDevMode ? [{ debugName: "parentFolder" }] : /* istanbul ignore next */ []));
276
276
  /**
277
277
  * Computed signal containing the Tweakpane FolderApi for this folder.
278
278
  * Returns null if the parent folder is not yet available.
@@ -289,7 +289,7 @@ class TweakpaneFolder {
289
289
  disabled: this.blade.snapshot.disabled,
290
290
  hidden: this.blade.snapshot.hidden,
291
291
  });
292
- }, ...(ngDevMode ? [{ debugName: "folder" }] : []));
292
+ }, ...(ngDevMode ? [{ debugName: "folder" }] : /* istanbul ignore next */ []));
293
293
  /**
294
294
  * Internal flag indicating whether this directive creates its own folder
295
295
  * or reuses the parent folder. Set to `false` by `TweakpanePane`.
@@ -314,10 +314,10 @@ class TweakpaneFolder {
314
314
  this.folder()?.dispose();
315
315
  });
316
316
  }
317
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneFolder, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
318
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneFolder, isStandalone: true, selector: "tweakpane-folder", inputs: { expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, hostDirectives: [{ directive: TweakpaneTitle, inputs: ["title", "title"] }, { directive: TweakpaneBlade, inputs: ["hidden", "hidden", "disabled", "disabled"] }], ngImport: i0 }); }
317
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneFolder, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
318
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneFolder, isStandalone: true, selector: "tweakpane-folder", inputs: { expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, hostDirectives: [{ directive: TweakpaneTitle, inputs: ["title", "title"] }, { directive: TweakpaneBlade, inputs: ["hidden", "hidden", "disabled", "disabled"] }], ngImport: i0 }); }
319
319
  }
320
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneFolder, decorators: [{
320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneFolder, decorators: [{
321
321
  type: Directive,
322
322
  args: [{
323
323
  selector: 'tweakpane-folder',
@@ -345,12 +345,12 @@ class TweakpaneLabel {
345
345
  * The label text displayed next to the control.
346
346
  * @default ''
347
347
  */
348
- this.label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
348
+ this.label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
349
349
  /**
350
350
  * An optional tag displayed alongside the label (e.g., units like "px", "m/s").
351
351
  * @default ''
352
352
  */
353
- this.tag = input('', ...(ngDevMode ? [{ debugName: "tag" }] : []));
353
+ this.tag = input('', ...(ngDevMode ? [{ debugName: "tag" }] : /* istanbul ignore next */ []));
354
354
  this.injector = inject(Injector);
355
355
  }
356
356
  /**
@@ -380,10 +380,10 @@ class TweakpaneLabel {
380
380
  }
381
381
  }, { injector: this.injector });
382
382
  }
383
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
384
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneLabel, isStandalone: true, inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, tag: { classPropertyName: "tag", publicName: "tag", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
383
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
384
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneLabel, isStandalone: true, inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, tag: { classPropertyName: "tag", publicName: "tag", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
385
385
  }
386
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneLabel, decorators: [{
386
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneLabel, decorators: [{
387
387
  type: Directive
388
388
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], tag: [{ type: i0.Input, args: [{ isSignal: true, alias: "tag", required: false }] }] } });
389
389
 
@@ -462,7 +462,7 @@ class TweakpaneBinding {
462
462
  /**
463
463
  * The bound value. Supports two-way binding with `[(value)]`.
464
464
  */
465
- this.value = model.required(...(ngDevMode ? [{ debugName: "value" }] : []));
465
+ this.value = model.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
466
466
  this.debounce = inject(TweakpaneDebounce);
467
467
  this.label = inject(TweakpaneLabel);
468
468
  this.blade = inject(TweakpaneBlade);
@@ -474,15 +474,15 @@ class TweakpaneBinding {
474
474
  tag: this.label.snapshot.tag,
475
475
  disabled: this.blade.disabled(),
476
476
  hidden: this.blade.hidden(),
477
- }), ...(ngDevMode ? [{ debugName: "bindingBaseParams" }] : []));
478
- this.bindingParams = signal({}, ...(ngDevMode ? [{ debugName: "bindingParams" }] : []));
477
+ }), ...(ngDevMode ? [{ debugName: "bindingBaseParams" }] : /* istanbul ignore next */ []));
478
+ this.bindingParams = signal({}, ...(ngDevMode ? [{ debugName: "bindingParams" }] : /* istanbul ignore next */ []));
479
479
  this.bindingApi = computed(() => {
480
480
  const parent = this.parent.folder();
481
481
  if (!parent)
482
482
  return null;
483
483
  const bindingParams = { ...this.bindingBaseParams(), ...this.bindingParams() };
484
484
  return parent.addBinding(this.bindableObject, 'value', bindingParams);
485
- }, ...(ngDevMode ? [{ debugName: "bindingApi" }] : []));
485
+ }, ...(ngDevMode ? [{ debugName: "bindingApi" }] : /* istanbul ignore next */ []));
486
486
  this.blade.sync(this.bindingApi);
487
487
  this.label.sync(this.bindingApi);
488
488
  this.debounce.sync(this.bindingApi, (ev) => {
@@ -518,10 +518,10 @@ class TweakpaneBinding {
518
518
  this.bindingParams.set(params());
519
519
  }, { injector: this.injector });
520
520
  }
521
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneBinding, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
522
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneBinding, isStandalone: true, selector: "tweakpane-binding", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { value: "valueChange" }, hostDirectives: [{ directive: TweakpaneBlade, inputs: ["disabled", "disabled", "hidden", "hidden"] }, { directive: TweakpaneDebounce, inputs: ["debounce", "debounce"] }, { directive: TweakpaneLabel, inputs: ["label", "label", "tag", "tag"] }], ngImport: i0 }); }
521
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneBinding, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
522
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneBinding, isStandalone: true, selector: "tweakpane-binding", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { value: "valueChange" }, hostDirectives: [{ directive: TweakpaneBlade, inputs: ["disabled", "disabled", "hidden", "hidden"] }, { directive: TweakpaneDebounce, inputs: ["debounce", "debounce"] }, { directive: TweakpaneLabel, inputs: ["label", "label", "tag", "tag"] }], ngImport: i0 }); }
523
523
  }
524
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneBinding, decorators: [{
524
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneBinding, decorators: [{
525
525
  type: Directive,
526
526
  args: [{
527
527
  selector: 'tweakpane-binding',
@@ -569,7 +569,7 @@ class TweakpaneButton {
569
569
  disabled: this.blade.snapshot.disabled,
570
570
  label: this.label.snapshot.label,
571
571
  });
572
- }, ...(ngDevMode ? [{ debugName: "buttonApi" }] : []));
572
+ }, ...(ngDevMode ? [{ debugName: "buttonApi" }] : /* istanbul ignore next */ []));
573
573
  effect((onCleanup) => {
574
574
  const buttonApi = this.buttonApi();
575
575
  if (!buttonApi)
@@ -587,10 +587,10 @@ class TweakpaneButton {
587
587
  this.buttonApi()?.dispose();
588
588
  });
589
589
  }
590
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
591
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: TweakpaneButton, isStandalone: true, selector: "tweakpane-button", outputs: { click: "click" }, hostDirectives: [{ directive: TweakpaneTitle, inputs: ["title", "title"] }, { directive: TweakpaneLabel, inputs: ["label", "label"] }, { directive: TweakpaneBlade, inputs: ["hidden", "hidden", "disabled", "disabled"] }], ngImport: i0 }); }
590
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
591
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: TweakpaneButton, isStandalone: true, selector: "tweakpane-button", outputs: { click: "click" }, hostDirectives: [{ directive: TweakpaneTitle, inputs: ["title", "title"] }, { directive: TweakpaneLabel, inputs: ["label", "label"] }, { directive: TweakpaneBlade, inputs: ["hidden", "hidden", "disabled", "disabled"] }], ngImport: i0 }); }
592
592
  }
593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneButton, decorators: [{
593
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneButton, decorators: [{
594
594
  type: Directive,
595
595
  args: [{
596
596
  selector: 'tweakpane-button',
@@ -621,14 +621,14 @@ class TweakpaneCheckbox {
621
621
  * Additional Tweakpane boolean input parameters.
622
622
  * @default {}
623
623
  */
624
- this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : []));
624
+ this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : /* istanbul ignore next */ []));
625
625
  this.binding = inject(TweakpaneBinding);
626
626
  this.binding.syncBindingParams(this.params);
627
627
  }
628
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
629
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneCheckbox, isStandalone: true, selector: "tweakpane-checkbox", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTweakBindingAsHost()], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
628
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
629
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneCheckbox, isStandalone: true, selector: "tweakpane-checkbox", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTweakBindingAsHost()], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
630
630
  }
631
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneCheckbox, decorators: [{
631
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneCheckbox, decorators: [{
632
632
  type: Directive,
633
633
  args: [{
634
634
  selector: 'tweakpane-checkbox',
@@ -658,14 +658,14 @@ class TweakpaneColor {
658
658
  * Can include options like `alpha`, `color.type`, etc.
659
659
  * @default {}
660
660
  */
661
- this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : []));
661
+ this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : /* istanbul ignore next */ []));
662
662
  this.binding = inject(TweakpaneBinding);
663
663
  this.binding.syncBindingParams(this.params);
664
664
  }
665
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneColor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
666
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneColor, isStandalone: true, selector: "tweakpane-color", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTweakBindingAsHost()], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
665
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneColor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
666
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneColor, isStandalone: true, selector: "tweakpane-color", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTweakBindingAsHost()], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
667
667
  }
668
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneColor, decorators: [{
668
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneColor, decorators: [{
669
669
  type: Directive,
670
670
  args: [{
671
671
  selector: 'tweakpane-color',
@@ -706,13 +706,13 @@ class TweakpaneList {
706
706
  /**
707
707
  * The currently selected value. Supports two-way binding with `[(value)]`.
708
708
  */
709
- this.value = model.required(...(ngDevMode ? [{ debugName: "value" }] : []));
709
+ this.value = model.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
710
710
  /**
711
711
  * The list options. Can be:
712
712
  * - An array of values (labels will be stringified values)
713
713
  * - An object mapping display labels to values
714
714
  */
715
- this.options = input.required(...(ngDevMode ? [{ debugName: "options" }] : []));
715
+ this.options = input.required(...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
716
716
  this.blade = inject(TweakpaneBlade);
717
717
  this.debounce = inject(TweakpaneDebounce);
718
718
  this.label = inject(TweakpaneLabel);
@@ -726,7 +726,7 @@ class TweakpaneList {
726
726
  const value = options[key];
727
727
  return { text: key, value };
728
728
  });
729
- }, ...(ngDevMode ? [{ debugName: "listOptions" }] : []));
729
+ }, ...(ngDevMode ? [{ debugName: "listOptions" }] : /* istanbul ignore next */ []));
730
730
  this.listApi = computed(() => {
731
731
  const parent = this.parent.folder();
732
732
  if (!parent)
@@ -737,7 +737,7 @@ class TweakpaneList {
737
737
  value: untracked(this.value),
738
738
  label: this.label.snapshot.label,
739
739
  });
740
- }, ...(ngDevMode ? [{ debugName: "listApi" }] : []));
740
+ }, ...(ngDevMode ? [{ debugName: "listApi" }] : /* istanbul ignore next */ []));
741
741
  this.label.sync(this.listApi);
742
742
  this.blade.sync(this.listApi);
743
743
  this.debounce.sync(this.listApi, (ev) => {
@@ -753,10 +753,10 @@ class TweakpaneList {
753
753
  this.listApi()?.dispose();
754
754
  });
755
755
  }
756
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneList, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
757
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneList, isStandalone: true, selector: "tweakpane-list", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { value: "valueChange" }, hostDirectives: [{ directive: TweakpaneBlade, inputs: ["hidden", "hidden", "disabled", "disabled"] }, { directive: TweakpaneDebounce, inputs: ["debounce", "debounce"] }, { directive: TweakpaneLabel, inputs: ["label", "label"] }], ngImport: i0 }); }
756
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneList, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
757
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneList, isStandalone: true, selector: "tweakpane-list", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { value: "valueChange" }, hostDirectives: [{ directive: TweakpaneBlade, inputs: ["hidden", "hidden", "disabled", "disabled"] }, { directive: TweakpaneDebounce, inputs: ["debounce", "debounce"] }, { directive: TweakpaneLabel, inputs: ["label", "label"] }], ngImport: i0 }); }
758
758
  }
759
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneList, decorators: [{
759
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneList, decorators: [{
760
760
  type: Directive,
761
761
  args: [{
762
762
  selector: 'tweakpane-list',
@@ -804,14 +804,14 @@ class TweakpaneNumber {
804
804
  * Can include `min`, `max`, `step`, `format`, etc.
805
805
  * @default {}
806
806
  */
807
- this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : []));
807
+ this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : /* istanbul ignore next */ []));
808
808
  this.binding = inject(TweakpaneBinding);
809
809
  this.binding.syncBindingParams(this.params);
810
810
  }
811
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneNumber, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
812
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneNumber, isStandalone: true, selector: "tweakpane-number", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTweakBindingAsHost()], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
811
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneNumber, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
812
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneNumber, isStandalone: true, selector: "tweakpane-number", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTweakBindingAsHost()], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
813
813
  }
814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneNumber, decorators: [{
814
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneNumber, decorators: [{
815
815
  type: Directive,
816
816
  args: [{
817
817
  selector: 'tweakpane-number',
@@ -855,38 +855,38 @@ class TweakpanePane {
855
855
  * CSS top position of the pane.
856
856
  * @default '8px'
857
857
  */
858
- this.top = input('8px', ...(ngDevMode ? [{ debugName: "top" }] : []));
858
+ this.top = input('8px', ...(ngDevMode ? [{ debugName: "top" }] : /* istanbul ignore next */ []));
859
859
  /**
860
860
  * CSS right position of the pane.
861
861
  * @default '8px'
862
862
  */
863
- this.right = input('8px', ...(ngDevMode ? [{ debugName: "right" }] : []));
863
+ this.right = input('8px', ...(ngDevMode ? [{ debugName: "right" }] : /* istanbul ignore next */ []));
864
864
  /**
865
865
  * CSS left position of the pane.
866
866
  * @default undefined
867
867
  */
868
- this.left = input(...(ngDevMode ? [undefined, { debugName: "left" }] : []));
868
+ this.left = input(...(ngDevMode ? [undefined, { debugName: "left" }] : /* istanbul ignore next */ []));
869
869
  /**
870
870
  * CSS bottom position of the pane.
871
871
  * @default undefined
872
872
  */
873
- this.bottom = input(...(ngDevMode ? [undefined, { debugName: "bottom" }] : []));
873
+ this.bottom = input(...(ngDevMode ? [undefined, { debugName: "bottom" }] : /* istanbul ignore next */ []));
874
874
  /**
875
875
  * CSS width of the pane.
876
876
  * @default '256px'
877
877
  */
878
- this.width = input('256px', ...(ngDevMode ? [{ debugName: "width" }] : []));
878
+ this.width = input('256px', ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
879
879
  /**
880
880
  * Optional container element to embed the pane into.
881
881
  * If not provided, the pane floats freely in the document.
882
882
  * Can be an HTMLElement or an Angular ElementRef.
883
883
  */
884
- this.container = input(...(ngDevMode ? [undefined, { debugName: "container" }] : []));
884
+ this.container = input(...(ngDevMode ? [undefined, { debugName: "container" }] : /* istanbul ignore next */ []));
885
885
  this.document = inject(DOCUMENT);
886
886
  this.title = inject(TweakpaneTitle, { host: true });
887
887
  this.folder = inject(TweakpaneFolder, { host: true });
888
888
  this.tweakpaneAnchor = inject(TweakpaneAnchor, { optional: true });
889
- this.pane = signal(null, ...(ngDevMode ? [{ debugName: "pane" }] : []));
889
+ this.pane = signal(null, ...(ngDevMode ? [{ debugName: "pane" }] : /* istanbul ignore next */ []));
890
890
  this.folder.isSelf = false;
891
891
  afterNextRender(() => {
892
892
  const container = this.container();
@@ -956,10 +956,10 @@ class TweakpanePane {
956
956
  parentElement.style.setProperty(propertyName, typeof value === 'number' ? value + 'px' : value);
957
957
  pane.refresh();
958
958
  }
959
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpanePane, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
960
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpanePane, isStandalone: true, selector: "tweakpane-pane", inputs: { top: { classPropertyName: "top", publicName: "top", isSignal: true, isRequired: false, transformFunction: null }, right: { classPropertyName: "right", publicName: "right", isSignal: true, isRequired: false, transformFunction: null }, left: { classPropertyName: "left", publicName: "left", isSignal: true, isRequired: false, transformFunction: null }, bottom: { classPropertyName: "bottom", publicName: "bottom", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: TweakpaneFolder, inputs: ["expanded", "expanded"], outputs: ["expandedChange", "expandedChange"] }], ngImport: i0 }); }
959
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpanePane, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
960
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpanePane, isStandalone: true, selector: "tweakpane-pane", inputs: { top: { classPropertyName: "top", publicName: "top", isSignal: true, isRequired: false, transformFunction: null }, right: { classPropertyName: "right", publicName: "right", isSignal: true, isRequired: false, transformFunction: null }, left: { classPropertyName: "left", publicName: "left", isSignal: true, isRequired: false, transformFunction: null }, bottom: { classPropertyName: "bottom", publicName: "bottom", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: TweakpaneFolder, inputs: ["expanded", "expanded"], outputs: ["expandedChange", "expandedChange"] }], ngImport: i0 }); }
961
961
  }
962
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpanePane, decorators: [{
962
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpanePane, decorators: [{
963
963
  type: Directive,
964
964
  args: [{
965
965
  selector: 'tweakpane-pane',
@@ -1005,12 +1005,12 @@ class TweakpanePoint {
1005
1005
  * Can include per-axis configuration like `{ x: { min, max }, y: { min, max } }`.
1006
1006
  * @default {}
1007
1007
  */
1008
- this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : []));
1008
+ this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : /* istanbul ignore next */ []));
1009
1009
  this.binding = inject(TweakpaneBinding);
1010
1010
  this.binding.syncBindingParams(this.params);
1011
1011
  }
1012
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpanePoint, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1013
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpanePoint, isStandalone: true, selector: "tweakpane-point", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
1012
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpanePoint, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1013
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpanePoint, isStandalone: true, selector: "tweakpane-point", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
1014
1014
  provideTweakBindingAsHost({
1015
1015
  in: (value) => {
1016
1016
  if (Array.isArray(value)) {
@@ -1026,7 +1026,7 @@ class TweakpanePoint {
1026
1026
  }),
1027
1027
  ], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
1028
1028
  }
1029
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpanePoint, decorators: [{
1029
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpanePoint, decorators: [{
1030
1030
  type: Directive,
1031
1031
  args: [{
1032
1032
  selector: 'tweakpane-point',
@@ -1068,14 +1068,14 @@ class TweakpaneText {
1068
1068
  * Additional Tweakpane string input parameters.
1069
1069
  * @default {}
1070
1070
  */
1071
- this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : []));
1071
+ this.params = input({}, ...(ngDevMode ? [{ debugName: "params" }] : /* istanbul ignore next */ []));
1072
1072
  this.binding = inject(TweakpaneBinding);
1073
1073
  this.binding.syncBindingParams(this.params);
1074
1074
  }
1075
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneText, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1076
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: TweakpaneText, isStandalone: true, selector: "tweakpane-text", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTweakBindingAsHost()], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
1075
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneText, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1076
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: TweakpaneText, isStandalone: true, selector: "tweakpane-text", inputs: { params: { classPropertyName: "params", publicName: "params", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTweakBindingAsHost()], hostDirectives: [{ directive: TweakpaneBinding, inputs: ["value", "value"], outputs: ["valueChange", "valueChange"] }], ngImport: i0 }); }
1077
1077
  }
1078
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: TweakpaneText, decorators: [{
1078
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TweakpaneText, decorators: [{
1079
1079
  type: Directive,
1080
1080
  args: [{
1081
1081
  selector: 'tweakpane-text',
@@ -1472,7 +1472,7 @@ function processConfig(config, result, parentFolder, vcr, createdComponents, anc
1472
1472
  }
1473
1473
  // Handle primitive values (create new signal)
1474
1474
  if (typeof configValue === 'number') {
1475
- const valueSignal = signal(configValue, ...(ngDevMode ? [{ debugName: "valueSignal" }] : []));
1475
+ const valueSignal = signal(configValue, ...(ngDevMode ? [{ debugName: "valueSignal" }] : /* istanbul ignore next */ []));
1476
1476
  const ref = vcr.createComponent(TweakpaneAnchorHost, {
1477
1477
  injector: folderInjector,
1478
1478
  directives: [
@@ -1487,7 +1487,7 @@ function processConfig(config, result, parentFolder, vcr, createdComponents, anc
1487
1487
  continue;
1488
1488
  }
1489
1489
  if (typeof configValue === 'string') {
1490
- const valueSignal = signal(configValue, ...(ngDevMode ? [{ debugName: "valueSignal" }] : []));
1490
+ const valueSignal = signal(configValue, ...(ngDevMode ? [{ debugName: "valueSignal" }] : /* istanbul ignore next */ []));
1491
1491
  const ref = vcr.createComponent(TweakpaneAnchorHost, {
1492
1492
  injector: folderInjector,
1493
1493
  directives: [
@@ -1502,7 +1502,7 @@ function processConfig(config, result, parentFolder, vcr, createdComponents, anc
1502
1502
  continue;
1503
1503
  }
1504
1504
  if (typeof configValue === 'boolean') {
1505
- const valueSignal = signal(configValue, ...(ngDevMode ? [{ debugName: "valueSignal" }] : []));
1505
+ const valueSignal = signal(configValue, ...(ngDevMode ? [{ debugName: "valueSignal" }] : /* istanbul ignore next */ []));
1506
1506
  const ref = vcr.createComponent(TweakpaneAnchorHost, {
1507
1507
  injector: folderInjector,
1508
1508
  directives: [
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-tweakpane.mjs","sources":["../../../../libs/tweakpane/src/lib/anchor.ts","../../../../libs/tweakpane/src/lib/blade.ts","../../../../libs/tweakpane/src/lib/debounce.ts","../../../../libs/tweakpane/src/lib/title.ts","../../../../libs/tweakpane/src/lib/folder.ts","../../../../libs/tweakpane/src/lib/label.ts","../../../../libs/tweakpane/src/lib/binding.ts","../../../../libs/tweakpane/src/lib/button.ts","../../../../libs/tweakpane/src/lib/checkbox.ts","../../../../libs/tweakpane/src/lib/color.ts","../../../../libs/tweakpane/src/lib/list.ts","../../../../libs/tweakpane/src/lib/number.ts","../../../../libs/tweakpane/src/lib/pane.ts","../../../../libs/tweakpane/src/lib/point.ts","../../../../libs/tweakpane/src/lib/text.ts","../../../../libs/tweakpane/src/lib/tweaks.ts","../../../../libs/tweakpane/src/angular-three-tweakpane.ts"],"sourcesContent":["import { Component, ComponentRef, Directive, inject, signal, ViewContainerRef } from '@angular/core';\nimport { TweakpaneFolder } from './folder';\n\n/**\n * Directive that provides an anchor point for the `tweaks()` function to dynamically create Tweakpane controls.\n *\n * Add this directive to your `ngt-canvas` element to enable the `tweaks()` API:\n *\n * ```html\n * <ngt-canvas tweakpaneAnchor>\n * <ng-template #sceneGraph>\n * <!-- your scene -->\n * </ng-template>\n * </ngt-canvas>\n * ```\n *\n * Then use `tweaks()` in any component within the canvas:\n *\n * ```typescript\n * const controls = tweaks('Physics', {\n * gravity: { value: 9.8, min: 0, max: 20 },\n * debug: this.debugMode, // two-way binding with existing signal\n * });\n * ```\n */\n@Directive({ selector: '[tweakpaneAnchor]' })\nexport class TweakpaneAnchor {\n\t/**\n\t * The ViewContainerRef where dynamic components will be created.\n\t * Injected from the host element.\n\t */\n\tvcr = inject(ViewContainerRef);\n\n\t/**\n\t * Reference to the pane's TweakpaneFolder, set by TweakpanePane when it initializes.\n\t * This is used as the parent folder for dynamically created folders.\n\t */\n\tpaneFolder = signal<TweakpaneFolder | null>(null);\n\n\t/**\n\t * Registry of folder ComponentRefs by folder name.\n\t * Used to reuse existing folders when multiple `tweaks()` calls use the same folder name.\n\t */\n\tfolders: Record<string, ComponentRef<TweakpaneAnchorHost>> = {};\n}\n\n/**\n * A minimal host component used for dynamically creating Tweakpane controls.\n * This component serves as a host for directives like TweakpaneFolder, TweakpaneNumber, etc.\n * when using the `tweaks()` function.\n *\n * @internal\n */\n@Component({\n\tselector: 'tweakpane-anchor-host',\n\ttemplate: '',\n})\nexport class TweakpaneAnchorHost {}\n","import { booleanAttribute, Directive, effect, inject, Injector, input, untracked } from '@angular/core';\nimport { BladeApi } from 'tweakpane';\n\n/**\n * Directive that provides hidden and disabled state management for Tweakpane blades.\n *\n * This is a base directive used by other Tweakpane components to control\n * visibility and interactivity of controls.\n *\n * @example\n * ```html\n * <tweakpane-number [hidden]=\"isHidden\" [disabled]=\"isDisabled\" [(value)]=\"speed\" />\n * ```\n */\n@Directive({ selector: 'tweakpane-blade' })\nexport class TweakpaneBlade {\n\t/**\n\t * Whether the blade is hidden.\n\t * @default false\n\t */\n\thidden = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Whether the blade is disabled (non-interactive).\n\t * @default false\n\t */\n\tdisabled = input(false, { transform: booleanAttribute });\n\n\tprivate injector = inject(Injector);\n\n\t/**\n\t * Gets the current hidden and disabled values without tracking signal dependencies.\n\t * Useful for initial configuration when creating Tweakpane components.\n\t * @returns An object containing the current hidden and disabled states\n\t */\n\tget snapshot() {\n\t\treturn {\n\t\t\thidden: untracked(this.hidden),\n\t\t\tdisabled: untracked(this.disabled),\n\t\t};\n\t}\n\n\t/**\n\t * Synchronizes the hidden and disabled properties with a Tweakpane BladeApi.\n\t * Creates a reactive effect that updates the API's state whenever\n\t * the input values change.\n\t *\n\t * @param api - A function that returns the Tweakpane BladeApi (or null if not ready)\n\t * @returns The created effect reference\n\t */\n\tsync(api: () => BladeApi | null) {\n\t\treturn effect(\n\t\t\t() => {\n\t\t\t\tconst _api = api();\n\t\t\t\tif (!_api) return;\n\n\t\t\t\t_api.hidden = this.hidden();\n\t\t\t\t_api.disabled = this.disabled();\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n}\n","import { Directive, effect, inject, Injector, input, numberAttribute } from '@angular/core';\nimport { debounceTime, fromEventPattern } from 'rxjs';\nimport { TpChangeEvent } from 'tweakpane';\n\n/**\n * Directive that provides debounced change event handling for Tweakpane controls.\n *\n * This is a base directive used by binding-based controls to prevent\n * excessive updates when values change rapidly (e.g., during slider dragging).\n *\n * @example\n * ```html\n * <!-- Debounce value updates by 300ms -->\n * <tweakpane-number [debounce]=\"300\" [(value)]=\"speed\" />\n * ```\n */\n@Directive()\nexport class TweakpaneDebounce {\n\t/**\n\t * The debounce delay in milliseconds before emitting value changes.\n\t * @default 150\n\t */\n\tdebounce = input(150, { transform: numberAttribute });\n\n\tprivate injector = inject(Injector);\n\n\t/**\n\t * Synchronizes debounced change events from a Tweakpane API with a callback.\n\t * Creates a reactive effect that subscribes to change events and debounces them.\n\t *\n\t * @typeParam T - The type of value being tracked\n\t * @param api - A function that returns the Tweakpane API object with on/off methods (or null if not ready)\n\t * @param cb - Callback function invoked with the change event after debounce delay\n\t * @returns The created effect reference\n\t */\n\tsync<T>(\n\t\tapi: () => {\n\t\t\ton: (evName: 'change', cb: (ev: TpChangeEvent<T>) => void) => void;\n\t\t\toff: (evName: 'change', cb: (ev: TpChangeEvent<T>) => void) => void;\n\t\t} | null,\n\t\tcb: (ev: TpChangeEvent<T>) => void,\n\t) {\n\t\treturn effect(\n\t\t\t(onCleanup) => {\n\t\t\t\tconst _api = api();\n\t\t\t\tif (!_api) return;\n\n\t\t\t\tconst sub = fromEventPattern<TpChangeEvent<T>>(\n\t\t\t\t\t(handler) => _api.on('change', handler),\n\t\t\t\t\t(handler) => _api.off('change', handler),\n\t\t\t\t)\n\t\t\t\t\t.pipe(debounceTime(this.debounce()))\n\t\t\t\t\t.subscribe((ev) => {\n\t\t\t\t\t\tcb(ev);\n\t\t\t\t\t});\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tsub.unsubscribe();\n\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n}\n","import { Directive, effect, inject, Injector, input, untracked } from '@angular/core';\n\n/**\n * Directive that provides title functionality for Tweakpane components.\n *\n * This is a base directive used by other Tweakpane components (like `TweakpaneFolder`,\n * `TweakpanePane`, `TweakpaneButton`) to manage their titles reactively.\n *\n * @example\n * ```html\n * <tweakpane-folder title=\"Settings\">\n * <!-- folder contents -->\n * </tweakpane-folder>\n * ```\n */\n@Directive()\nexport class TweakpaneTitle {\n\t/**\n\t * The title text to display.\n\t * @default 'TweakPane Title'\n\t */\n\ttitle = input('TweakPane Title');\n\n\tprivate injector = inject(Injector);\n\n\t/**\n\t * Gets the current title value without tracking signal dependencies.\n\t * Useful for initial configuration when creating Tweakpane components.\n\t * @returns The current title string value\n\t */\n\tget snapshot() {\n\t\treturn untracked(this.title);\n\t}\n\n\t/**\n\t * Synchronizes the title property with a Tweakpane API object.\n\t * Creates a reactive effect that updates the API's title whenever\n\t * the input title changes.\n\t *\n\t * @param api - A function that returns the Tweakpane API object (or null if not ready)\n\t * @returns The created effect reference\n\t */\n\tsync(api: () => { title: string | undefined } | null) {\n\t\treturn effect(\n\t\t\t() => {\n\t\t\t\tconst _api = api();\n\t\t\t\tif (!_api) return;\n\n\t\t\t\t_api.title = this.title();\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n}\n","import { computed, DestroyRef, Directive, effect, inject, linkedSignal, model, Signal, untracked } from '@angular/core';\nimport { TpFoldEvent } from '@tweakpane/core';\nimport { FolderApi } from 'tweakpane';\nimport { TweakpaneBlade } from './blade';\nimport { TweakpaneTitle } from './title';\n\n/**\n * Directive for creating collapsible folders within a Tweakpane.\n *\n * Folders are used to organize controls into logical groups. They can be\n * nested within other folders or directly within a pane.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-folder title=\"Physics\" [expanded]=\"true\">\n * <tweakpane-number label=\"Gravity\" [(value)]=\"gravity\" />\n * <tweakpane-number label=\"Friction\" [(value)]=\"friction\" />\n * </tweakpane-folder>\n *\n * <tweakpane-folder title=\"Appearance\">\n * <tweakpane-color label=\"Color\" [(value)]=\"color\" />\n * </tweakpane-folder>\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-folder',\n\thostDirectives: [\n\t\t{ directive: TweakpaneTitle, inputs: ['title'] },\n\t\t{ directive: TweakpaneBlade, inputs: ['hidden', 'disabled'] },\n\t],\n})\nexport class TweakpaneFolder {\n\t/**\n\t * Whether the folder is expanded (open) or collapsed.\n\t * Supports two-way binding with `[(expanded)]`.\n\t * @default false\n\t */\n\texpanded = model(false);\n\n\tprivate title = inject(TweakpaneTitle);\n\tprivate blade = inject(TweakpaneBlade);\n\tprivate parent = inject(TweakpaneFolder, { skipSelf: true, optional: true });\n\n\t/**\n\t * Signal containing the parent folder API.\n\t * Automatically links to the parent folder in the component hierarchy.\n\t */\n\tparentFolder = linkedSignal(() => this.parent?.folder());\n\n\t/**\n\t * Computed signal containing the Tweakpane FolderApi for this folder.\n\t * Returns null if the parent folder is not yet available.\n\t */\n\tfolder: Signal<FolderApi | null> = computed(() => {\n\t\tconst parent = this.parentFolder();\n\t\tif (!parent) return null;\n\n\t\tif (!this.isSelf) return parent;\n\n\t\treturn parent.addFolder({\n\t\t\ttitle: this.title.snapshot,\n\t\t\texpanded: untracked(this.expanded),\n\t\t\tdisabled: this.blade.snapshot.disabled,\n\t\t\thidden: this.blade.snapshot.hidden,\n\t\t});\n\t});\n\n\t/**\n\t * Internal flag indicating whether this directive creates its own folder\n\t * or reuses the parent folder. Set to `false` by `TweakpanePane`.\n\t * @internal\n\t */\n\tisSelf = true;\n\n\tconstructor() {\n\t\tthis.title.sync(this.folder);\n\t\tthis.blade.sync(this.folder);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst folder = this.folder();\n\t\t\tif (!folder) return;\n\n\t\t\tconst cb = (ev: TpFoldEvent<FolderApi>) => {\n\t\t\t\tthis.expanded.set(ev.expanded);\n\t\t\t};\n\n\t\t\tfolder.on('fold', cb);\n\t\t\tonCleanup(() => {\n\t\t\t\tfolder.off('fold', cb);\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.folder()?.dispose();\n\t\t});\n\t}\n}\n","import { Directive, effect, inject, Injector, input, untracked } from '@angular/core';\n\n/**\n * Directive that provides label and tag functionality for Tweakpane controls.\n *\n * This is a base directive used by binding-based controls (like `TweakpaneNumber`,\n * `TweakpaneText`, `TweakpaneCheckbox`) to manage their labels and optional tags.\n *\n * @example\n * ```html\n * <tweakpane-number label=\"Speed\" tag=\"m/s\" [(value)]=\"speed\" />\n * ```\n */\n@Directive()\nexport class TweakpaneLabel {\n\t/**\n\t * The label text displayed next to the control.\n\t * @default ''\n\t */\n\tlabel = input('');\n\n\t/**\n\t * An optional tag displayed alongside the label (e.g., units like \"px\", \"m/s\").\n\t * @default ''\n\t */\n\ttag = input('');\n\n\tprivate injector = inject(Injector);\n\n\t/**\n\t * Gets the current label and tag values without tracking signal dependencies.\n\t * Useful for initial configuration when creating Tweakpane controls.\n\t * @returns An object containing the current label and tag values\n\t */\n\tget snapshot() {\n\t\treturn { label: untracked(this.label), tag: untracked(this.tag) };\n\t}\n\n\t/**\n\t * Synchronizes the label and tag properties with a Tweakpane API object.\n\t * Creates a reactive effect that updates the API's label and tag\n\t * whenever the input values change.\n\t *\n\t * @param api - A function that returns the Tweakpane API object (or null if not ready)\n\t * @returns The created effect reference\n\t */\n\tsync(api: () => { label?: string | null; tag?: string | null } | null) {\n\t\treturn effect(\n\t\t\t() => {\n\t\t\t\tconst _api = api();\n\t\t\t\tif (!_api) return;\n\n\t\t\t\t_api.label = this.label();\n\t\t\t\tif ('tag' in _api) {\n\t\t\t\t\t_api.tag = this.tag();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n}\n","import {\n\tcomputed,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\tInjectionToken,\n\tInjector,\n\tmodel,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { BindingApi, BindingParams } from '@tweakpane/core';\nimport { TweakpaneBlade } from './blade';\nimport { TweakpaneDebounce } from './debounce';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneLabel } from './label';\n\n/**\n * Injection token used to configure value transformation when TweakpaneBinding\n * is used as a host directive.\n *\n * When set to `true`, values pass through unchanged.\n * When set to an object with `in` and `out` functions, values are transformed:\n * - `in`: Transforms the input value before binding to Tweakpane\n * - `out`: Transforms the Tweakpane value before emitting to the model\n *\n * @internal\n */\nexport const NGT_TWEAK_BINDING_AS_HOST = new InjectionToken<\n\ttrue | { in: (value: unknown) => unknown; out: (value: unknown) => unknown } | null\n>('hostDirective NgtTweakBinding', { factory: () => null });\n\n/**\n * Provides configuration for TweakpaneBinding when used as a host directive.\n *\n * @typeParam TIn - The input value type (from the component)\n * @typeParam TOut - The output value type (for Tweakpane)\n * @param inOut - Optional object containing `in` and `out` transformation functions\n * @returns A provider configuration object\n *\n * @example\n * ```typescript\n * // Simple passthrough (no transformation)\n * providers: [provideTweakBindingAsHost()]\n *\n * // With value transformation (e.g., array to object)\n * providers: [provideTweakBindingAsHost({\n * in: (value) => ({ x: value[0], y: value[1] }),\n * out: (value) => [value.x, value.y]\n * })]\n * ```\n */\nexport function provideTweakBindingAsHost<TIn, TOut>(inOut?: { in: (value: TIn) => TOut; out: (value: TOut) => TIn }) {\n\treturn { provide: NGT_TWEAK_BINDING_AS_HOST, useValue: inOut ?? true };\n}\n\n/**\n * Base directive for creating Tweakpane bindings (two-way data binding controls).\n *\n * This directive provides the core functionality for binding Angular values to\n * Tweakpane controls. It handles:\n * - Creating the binding on the parent folder\n * - Syncing label, blade, and debounce settings\n * - Value transformation when used as a host directive\n * - Automatic cleanup on destroy\n *\n * Most commonly used as a host directive by specific control types like\n * `TweakpaneNumber`, `TweakpaneText`, `TweakpaneCheckbox`, etc.\n *\n * @typeParam TValue - The type of value being bound\n *\n * @example\n * ```html\n * <!-- Direct usage (rarely needed) -->\n * <tweakpane-binding [(value)]=\"myValue\" label=\"My Value\" />\n *\n * <!-- More commonly used via specific controls -->\n * <tweakpane-number [(value)]=\"speed\" label=\"Speed\" />\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-binding',\n\thostDirectives: [\n\t\t{ directive: TweakpaneBlade, inputs: ['disabled', 'hidden'] },\n\t\t{ directive: TweakpaneDebounce, inputs: ['debounce'] },\n\t\t{ directive: TweakpaneLabel, inputs: ['label', 'tag'] },\n\t],\n})\nexport class TweakpaneBinding<TValue> {\n\t/**\n\t * The bound value. Supports two-way binding with `[(value)]`.\n\t */\n\tvalue = model.required<any>();\n\n\tprivate debounce = inject(TweakpaneDebounce);\n\tprivate label = inject(TweakpaneLabel);\n\tprivate blade = inject(TweakpaneBlade);\n\tprivate parent = inject(TweakpaneFolder);\n\tprivate injector = inject(Injector);\n\tprivate asHostDirective = inject(NGT_TWEAK_BINDING_AS_HOST);\n\n\tprivate bindingBaseParams = computed(() => ({\n\t\tlabel: this.label.snapshot.label,\n\t\ttag: this.label.snapshot.tag,\n\t\tdisabled: this.blade.disabled(),\n\t\thidden: this.blade.hidden(),\n\t}));\n\tprivate bindingParams = signal<Record<string, unknown>>({});\n\n\t/**\n\t * Gets the bindable object with optional value transformation.\n\t * @returns An object with a `value` property suitable for Tweakpane binding\n\t */\n\tprivate get bindableObject() {\n\t\tlet value = untracked(this.value);\n\n\t\tif (this.asHostDirective && typeof this.asHostDirective === 'object') {\n\t\t\tvalue = this.asHostDirective.in(value) as TValue;\n\t\t}\n\n\t\treturn { value };\n\t}\n\n\tprivate bindingApi = computed(() => {\n\t\tconst parent = this.parent.folder();\n\t\tif (!parent) return null;\n\n\t\tconst bindingParams = { ...this.bindingBaseParams(), ...this.bindingParams() };\n\t\treturn parent.addBinding(this.bindableObject, 'value', bindingParams) as BindingApi<unknown, TValue>;\n\t});\n\n\tconstructor() {\n\t\tthis.blade.sync(this.bindingApi);\n\t\tthis.label.sync(this.bindingApi);\n\t\tthis.debounce.sync(this.bindingApi, (ev) => {\n\t\t\tif (this.asHostDirective && typeof this.asHostDirective === 'object') {\n\t\t\t\tthis.value.set(this.asHostDirective.out(ev.value) as TValue);\n\t\t\t} else {\n\t\t\t\tthis.value.set(ev.value);\n\t\t\t}\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst bindingApi = this.bindingApi();\n\t\t\tif (!bindingApi) return;\n\t\t\tonCleanup(() => {\n\t\t\t\tbindingApi.dispose();\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.bindingApi()?.dispose();\n\t\t});\n\t}\n\n\t/**\n\t * Synchronizes additional binding parameters with the Tweakpane binding.\n\t * Called by specific control directives to add control-specific parameters\n\t * (e.g., min/max for numbers, options for lists).\n\t *\n\t * @param params - A function that returns the binding parameters\n\t * @returns The created effect reference\n\t */\n\tsyncBindingParams(params: () => BindingParams) {\n\t\treturn effect(\n\t\t\t() => {\n\t\t\t\tthis.bindingParams.set(params());\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n\n\t// createBindingEffect(params: () => BindingParams) {\n\t// \treturn effect(\n\t// \t\t(onCleanup) => {\n\t// \t\t\tconst parent = this.parent.folder();\n\t// \t\t\tif (!parent) return;\n\t//\n\t// \t\t\tconst bindingParams = { ...this.bindingBaseParams(), ...params() };\n\t// \t\t\tconst binding = parent.addBinding(this.bindableObject, 'value', bindingParams);\n\t//\n\t// \t\t\tthis.bindingApi.set(binding);\n\t//\n\t// \t\t\tonCleanup(() => {\n\t// \t\t\t\tbinding.dispose();\n\t// \t\t\t\tthis.bindingApi.set(null);\n\t// \t\t\t});\n\t// \t\t},\n\t// \t\t{ injector: this.injector },\n\t// \t);\n\t// }\n}\n","import { computed, DestroyRef, Directive, effect, inject, output } from '@angular/core';\nimport { TpMouseEvent } from '@tweakpane/core';\nimport { ButtonApi } from 'tweakpane';\nimport { TweakpaneBlade } from './blade';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneLabel } from './label';\nimport { TweakpaneTitle } from './title';\n\n/**\n * Directive for creating a clickable button in Tweakpane.\n *\n * Buttons are used to trigger actions (like reset, randomize, etc.)\n * and emit click events when pressed.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-button title=\"Reset\" (click)=\"onReset()\" />\n * <tweakpane-button title=\"Randomize\" label=\"Action\" (click)=\"onRandomize()\" />\n * <tweakpane-button title=\"Save\" [disabled]=\"!canSave\" (click)=\"onSave()\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-button',\n\thostDirectives: [\n\t\t{ directive: TweakpaneTitle, inputs: ['title'] },\n\t\t{ directive: TweakpaneLabel, inputs: ['label'] },\n\t\t{ directive: TweakpaneBlade, inputs: ['hidden', 'disabled'] },\n\t],\n})\nexport class TweakpaneButton {\n\t/**\n\t * Event emitted when the button is clicked.\n\t * Provides the Tweakpane mouse event with the ButtonApi.\n\t */\n\tclick = output<TpMouseEvent<ButtonApi>>();\n\n\tprivate title = inject(TweakpaneTitle);\n\tprivate label = inject(TweakpaneLabel);\n\tprivate blade = inject(TweakpaneBlade);\n\tprivate parent = inject(TweakpaneFolder);\n\n\tprivate buttonApi = computed(() => {\n\t\tconst parent = this.parent.folder();\n\t\tif (!parent) return null;\n\n\t\treturn parent.addButton({\n\t\t\ttitle: this.title.snapshot,\n\t\t\thidden: this.blade.snapshot.hidden,\n\t\t\tdisabled: this.blade.snapshot.disabled,\n\t\t\tlabel: this.label.snapshot.label,\n\t\t});\n\t});\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst buttonApi = this.buttonApi();\n\t\t\tif (!buttonApi) return;\n\n\t\t\tconst boundEmit = this.click.emit.bind(this.click);\n\t\t\tbuttonApi.on('click', boundEmit);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tbuttonApi.off('click', boundEmit);\n\t\t\t});\n\t\t});\n\n\t\tthis.label.sync(this.buttonApi);\n\t\tthis.title.sync(this.buttonApi);\n\t\tthis.blade.sync(this.buttonApi);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.buttonApi()?.dispose();\n\t\t});\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { BooleanInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Directive for creating a boolean checkbox control in Tweakpane.\n *\n * Provides two-way binding for boolean values with a checkbox UI.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-checkbox label=\"Debug Mode\" [(value)]=\"debugMode\" />\n * <tweakpane-checkbox label=\"Wireframe\" [(value)]=\"showWireframe\" [disabled]=\"!debugMode()\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-checkbox',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [provideTweakBindingAsHost()],\n})\nexport class TweakpaneCheckbox {\n\t/**\n\t * Additional Tweakpane boolean input parameters.\n\t * @default {}\n\t */\n\tparams = input<BooleanInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { ColorInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Directive for creating a color picker control in Tweakpane.\n *\n * Provides two-way binding for color values (as hex strings) with a\n * color picker UI that supports RGB, HSL, and alpha.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-color label=\"Background\" [(value)]=\"backgroundColor\" />\n * <tweakpane-color label=\"Accent\" [(value)]=\"accentColor\" [params]=\"{ alpha: true }\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-color',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [provideTweakBindingAsHost()],\n})\nexport class TweakpaneColor {\n\t/**\n\t * Additional Tweakpane color input parameters.\n\t * Can include options like `alpha`, `color.type`, etc.\n\t * @default {}\n\t */\n\tparams = input<ColorInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import { computed, DestroyRef, Directive, effect, inject, input, model, untracked } from '@angular/core';\nimport { ListItem } from '@tweakpane/core';\nimport { ListBladeApi } from 'tweakpane';\nimport { TweakpaneBlade } from './blade';\nimport { TweakpaneDebounce } from './debounce';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneLabel } from './label';\n\n/**\n * Directive for creating a dropdown list/select control in Tweakpane.\n *\n * Provides two-way binding for selecting from a list of options.\n * Options can be provided as an array or as a key-value object.\n *\n * @typeParam TOptionValue - The type of values in the list\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <!-- Options as array -->\n * <tweakpane-list\n * label=\"Mode\"\n * [(value)]=\"mode\"\n * [options]=\"['normal', 'debug', 'performance']\"\n * />\n *\n * <!-- Options as object (label: value mapping) -->\n * <tweakpane-list\n * label=\"Quality\"\n * [(value)]=\"quality\"\n * [options]=\"{ 'Low': 1, 'Medium': 2, 'High': 3, 'Ultra': 4 }\"\n * />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-list',\n\thostDirectives: [\n\t\t{ directive: TweakpaneBlade, inputs: ['hidden', 'disabled'] },\n\t\t{ directive: TweakpaneDebounce, inputs: ['debounce'] },\n\t\t{ directive: TweakpaneLabel, inputs: ['label'] },\n\t],\n})\nexport class TweakpaneList<TOptionValue> {\n\t/**\n\t * The currently selected value. Supports two-way binding with `[(value)]`.\n\t */\n\tvalue = model.required<TOptionValue>();\n\n\t/**\n\t * The list options. Can be:\n\t * - An array of values (labels will be stringified values)\n\t * - An object mapping display labels to values\n\t */\n\toptions = input.required<Record<string, TOptionValue> | TOptionValue[]>();\n\n\tprivate blade = inject(TweakpaneBlade);\n\tprivate debounce = inject(TweakpaneDebounce);\n\tprivate label = inject(TweakpaneLabel);\n\tprivate parent = inject(TweakpaneFolder);\n\n\tprivate listOptions = computed(() => {\n\t\tconst options = this.options();\n\t\tif (Array.isArray(options)) {\n\t\t\treturn options.map((option) => ({ value: option, text: `${option}` }) as ListItem<TOptionValue>);\n\t\t}\n\n\t\treturn Object.keys(options).map((key) => {\n\t\t\tconst value = options[key];\n\t\t\treturn { text: key, value } as ListItem<TOptionValue>;\n\t\t});\n\t});\n\tprivate listApi = computed(() => {\n\t\tconst parent = this.parent.folder();\n\t\tif (!parent) return null;\n\n\t\treturn parent.addBlade({\n\t\t\tview: 'list',\n\t\t\toptions: this.listOptions(),\n\t\t\tvalue: untracked(this.value),\n\t\t\tlabel: this.label.snapshot.label,\n\t\t}) as ListBladeApi<TOptionValue>;\n\t});\n\n\tconstructor() {\n\t\tthis.label.sync(this.listApi);\n\t\tthis.blade.sync(this.listApi);\n\t\tthis.debounce.sync(this.listApi, (ev) => {\n\t\t\tthis.value.set(ev.value);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst listApi = this.listApi();\n\t\t\tonCleanup(() => {\n\t\t\t\tlistApi?.dispose();\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.listApi()?.dispose();\n\t\t});\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { NumberInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Directive for creating a numeric input control in Tweakpane.\n *\n * Provides two-way binding for number values with optional min/max/step\n * constraints. Displays as a text input with increment buttons, or as\n * a slider if min and max are specified.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <!-- Simple number input -->\n * <tweakpane-number label=\"Count\" [(value)]=\"count\" />\n *\n * <!-- With slider (min/max defined) -->\n * <tweakpane-number\n * label=\"Speed\"\n * [(value)]=\"speed\"\n * [params]=\"{ min: 0, max: 100, step: 0.1 }\"\n * />\n *\n * <!-- With custom format -->\n * <tweakpane-number\n * label=\"Angle\"\n * [(value)]=\"angle\"\n * [params]=\"{ min: 0, max: 360, format: (v) => v.toFixed(0) + '°' }\"\n * />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-number',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [provideTweakBindingAsHost()],\n})\nexport class TweakpaneNumber {\n\t/**\n\t * Additional Tweakpane number input parameters.\n\t * Can include `min`, `max`, `step`, `format`, etc.\n\t * @default {}\n\t */\n\tparams = input<NumberInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import {\n\tafterNextRender,\n\tDestroyRef,\n\tDirective,\n\tDOCUMENT,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tisSignal,\n\tsignal,\n} from '@angular/core';\nimport { ClassName } from '@tweakpane/core';\nimport { Pane } from 'tweakpane';\nimport { PaneConfig } from 'tweakpane/dist/types/pane/pane-config';\nimport { TweakpaneAnchor } from './anchor';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneTitle } from './title';\n\n/**\n * Main Tweakpane container directive that creates the root pane element.\n *\n * This directive creates a floating Tweakpane panel that can be positioned\n * anywhere on the screen. It serves as the root container for all\n * Tweakpane controls (folders, bindings, buttons, etc.).\n *\n * @example\n * ```html\n * <!-- Basic usage with default positioning (top-right) -->\n * <tweakpane-pane title=\"Settings\">\n * <tweakpane-number label=\"Speed\" [(value)]=\"speed\" />\n * <tweakpane-checkbox label=\"Debug\" [(value)]=\"debug\" />\n * </tweakpane-pane>\n *\n * <!-- Custom positioning -->\n * <tweakpane-pane title=\"Controls\" left=\"8px\" bottom=\"8px\" [right]=\"undefined\">\n * <tweakpane-folder title=\"Physics\">\n * <tweakpane-number label=\"Gravity\" [(value)]=\"gravity\" />\n * </tweakpane-folder>\n * </tweakpane-pane>\n *\n * <!-- Embedded in a container element -->\n * <div #container></div>\n * <tweakpane-pane [container]=\"container\">\n * <!-- controls -->\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-pane',\n\thostDirectives: [{ directive: TweakpaneFolder, inputs: ['expanded'], outputs: ['expandedChange'] }],\n})\nexport class TweakpanePane {\n\t/**\n\t * CSS top position of the pane.\n\t * @default '8px'\n\t */\n\ttop = input<string | number>('8px');\n\n\t/**\n\t * CSS right position of the pane.\n\t * @default '8px'\n\t */\n\tright = input<string | number>('8px');\n\n\t/**\n\t * CSS left position of the pane.\n\t * @default undefined\n\t */\n\tleft = input<string | number>();\n\n\t/**\n\t * CSS bottom position of the pane.\n\t * @default undefined\n\t */\n\tbottom = input<string | number>();\n\n\t/**\n\t * CSS width of the pane.\n\t * @default '256px'\n\t */\n\twidth = input<string | number>('256px');\n\n\t/**\n\t * Optional container element to embed the pane into.\n\t * If not provided, the pane floats freely in the document.\n\t * Can be an HTMLElement or an Angular ElementRef.\n\t */\n\tcontainer = input<HTMLElement | ElementRef<HTMLElement | undefined> | undefined>();\n\n\tprivate document = inject(DOCUMENT);\n\tprivate title = inject(TweakpaneTitle, { host: true });\n\tprivate folder = inject(TweakpaneFolder, { host: true });\n\tprivate tweakpaneAnchor = inject(TweakpaneAnchor, { optional: true });\n\tprivate pane = signal<Pane | null>(null);\n\tprivate paneContainer?: HTMLDivElement;\n\n\tconstructor() {\n\t\tthis.folder.isSelf = false;\n\n\t\tafterNextRender(() => {\n\t\t\tconst container = this.container();\n\t\t\tconst paneOptions: PaneConfig = {\n\t\t\t\ttitle: this.title.title(),\n\t\t\t\texpanded: this.folder.expanded(),\n\t\t\t};\n\n\t\t\tif (container) {\n\t\t\t\tconst containerElement = 'nativeElement' in container ? container.nativeElement : container;\n\t\t\t\tif (containerElement) {\n\t\t\t\t\tthis.paneContainer = this.document.createElement('div');\n\t\t\t\t\tthis.paneContainer.classList.add(ClassName('dfw')());\n\t\t\t\t\tcontainerElement.appendChild(this.paneContainer);\n\t\t\t\t\tpaneOptions.container = this.paneContainer;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pane = new Pane(paneOptions);\n\n\t\t\tthis.pane.set(pane);\n\t\t\tthis.folder.parentFolder.set(pane);\n\n\t\t\t// Set the pane's folder for tweaks() to use\n\t\t\tif (this.tweakpaneAnchor) {\n\t\t\t\tthis.tweakpaneAnchor.paneFolder.set(this.folder);\n\t\t\t}\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst pane = this.pane();\n\t\t\tif (!pane) return;\n\n\t\t\tif (this.paneContainer) {\n\t\t\t\tthis.paneContainer.remove();\n\t\t\t}\n\n\t\t\tpane.element.remove();\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('top');\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('right');\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('left');\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('bottom');\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('width');\n\t\t});\n\t}\n\n\t/**\n\t * Updates a CSS style property on the pane's parent element.\n\t * @param propertyName - The name of the style property to update\n\t */\n\tprivate updateStyleEffect(propertyName: Exclude<keyof TweakpanePane, 'pane' | 'title' | 'expanded' | 'container'>) {\n\t\tconst pane = this.pane();\n\t\tif (!pane) return;\n\n\t\tconst parentElement = pane.element.parentElement;\n\t\tif (!parentElement) return;\n\n\t\tconst property = this[propertyName];\n\t\tif (!isSignal(property)) return;\n\n\t\tconst value = property();\n\t\tif (!value) return;\n\n\t\tparentElement.style.setProperty(propertyName, typeof value === 'number' ? value + 'px' : value);\n\t\tpane.refresh();\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { Point2dInputParams, Point3dInputParams, Point4dInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Acceptable value formats for TweakpanePoint.\n * Can be a tuple array `[x, y, z?, w?]` or an object `{ x, y, z?, w? }`.\n */\ntype AcceptableTweakPointValue =\n\t| [x: number, y: number, z?: number, w?: number]\n\t| { x: number; y: number; z?: number; w?: number };\n\n/**\n * Directive for creating a 2D/3D/4D point input control in Tweakpane.\n *\n * Provides two-way binding for point values (as tuple arrays or objects).\n * The control displays input fields for each dimension and optionally\n * shows a 2D picker for x/y values.\n *\n * Values are accepted as arrays `[x, y, z?, w?]` and emitted in the same format.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <!-- 2D point -->\n * <tweakpane-point label=\"Position\" [(value)]=\"position2D\" />\n *\n * <!-- 3D point with custom ranges -->\n * <tweakpane-point\n * label=\"Position\"\n * [(value)]=\"position3D\"\n * [params]=\"{\n * x: { min: -10, max: 10 },\n * y: { min: 0, max: 100 },\n * z: { min: -10, max: 10 }\n * }\"\n * />\n *\n * <!-- 4D point (e.g., quaternion) -->\n * <tweakpane-point label=\"Rotation\" [(value)]=\"quaternion\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-point',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [\n\t\tprovideTweakBindingAsHost<AcceptableTweakPointValue, { x: number; y: number; z?: number; w?: number }>({\n\t\t\tin: (value) => {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tconst [x, y, z, w] = value;\n\t\t\t\t\treturn { x, y, z, w };\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tout: (value) => {\n\t\t\t\tconst { x, y, z, w } = value;\n\t\t\t\treturn [x, y, z, w];\n\t\t\t},\n\t\t}),\n\t],\n})\nexport class TweakpanePoint {\n\t/**\n\t * Additional Tweakpane point input parameters.\n\t * Can include per-axis configuration like `{ x: { min, max }, y: { min, max } }`.\n\t * @default {}\n\t */\n\tparams = input<Point2dInputParams | Point3dInputParams | Point4dInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { StringInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Directive for creating a text input control in Tweakpane.\n *\n * Provides two-way binding for string values with a text input UI.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-text label=\"Name\" [(value)]=\"objectName\" />\n * <tweakpane-text label=\"Description\" [(value)]=\"description\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-text',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [provideTweakBindingAsHost()],\n})\nexport class TweakpaneText {\n\t/**\n\t * Additional Tweakpane string input parameters.\n\t * @default {}\n\t */\n\tparams = input<StringInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import {\n\ttype ComponentRef,\n\tDestroyRef,\n\teffect,\n\tinject,\n\tInjector,\n\tinputBinding,\n\tisSignal,\n\tsignal,\n\ttype Signal,\n\ttwoWayBinding,\n\tuntracked,\n\ttype ViewContainerRef,\n\ttype WritableSignal,\n} from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NumberInputParams, Point2dInputParams, Point3dInputParams, Point4dInputParams } from 'tweakpane';\nimport { TweakpaneAnchor, TweakpaneAnchorHost } from './anchor';\nimport { TweakpaneButton } from './button';\nimport { TweakpaneCheckbox } from './checkbox';\nimport { TweakpaneColor } from './color';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneList } from './list';\nimport { TweakpaneNumber } from './number';\nimport { TweakpanePoint } from './point';\nimport { TweakpaneText } from './text';\n\n// ============================================================================\n// Config Types\n// ============================================================================\n\n/**\n * Configuration for a number input control.\n *\n * @example\n * ```typescript\n * const config = {\n * gravity: { value: 9.8, min: 0, max: 20, step: 0.1 }\n * };\n * ```\n */\nexport interface TweakNumberConfig {\n\t/** The initial value or a writable signal for two-way binding */\n\tvalue: number | WritableSignal<number>;\n\t/** Minimum allowed value (enables slider display) */\n\tmin?: number;\n\t/** Maximum allowed value (enables slider display) */\n\tmax?: number;\n\t/** Step increment for the value */\n\tstep?: number;\n}\n\n/**\n * Configuration for a text input control.\n *\n * @example\n * ```typescript\n * const config = {\n * name: { value: 'Object 1' }\n * };\n * ```\n */\nexport interface TweakTextConfig {\n\t/** The initial value or a writable signal for two-way binding */\n\tvalue: string | WritableSignal<string>;\n}\n\n/**\n * Configuration for a color picker control.\n *\n * @example\n * ```typescript\n * const config = {\n * background: { value: '#ff0000', color: true }\n * };\n * ```\n */\nexport interface TweakColorConfig {\n\t/** The initial color value (as hex string) or a writable signal */\n\tvalue: string | WritableSignal<string>;\n\t/** Marker to identify this as a color input (must be `true`) */\n\tcolor: true;\n}\n\n/**\n * Configuration for a checkbox/boolean control.\n *\n * @example\n * ```typescript\n * const config = {\n * enabled: { value: true }\n * };\n * ```\n */\nexport interface TweakCheckboxConfig {\n\t/** The initial value or a writable signal for two-way binding */\n\tvalue: boolean | WritableSignal<boolean>;\n}\n\n/**\n * Configuration for a dropdown list/select control.\n *\n * @typeParam T - The type of option values\n *\n * @example\n * ```typescript\n * // With array of options\n * const config = {\n * mode: { value: 'normal', options: ['normal', 'debug', 'performance'] }\n * };\n *\n * // With labeled options\n * const config = {\n * quality: { value: 2, options: { 'Low': 1, 'Medium': 2, 'High': 3 } }\n * };\n * ```\n */\nexport interface TweakListConfig<T> {\n\t/** The initial value or a writable signal for two-way binding */\n\tvalue: T | WritableSignal<T>;\n\t/** Array of options or object mapping labels to values */\n\toptions: T[] | Record<string, T>;\n}\n\n/**\n * Configuration for a 2D/3D/4D point input control.\n *\n * @typeParam TVector - The tuple type for the point dimensions\n *\n * @example\n * ```typescript\n * // 2D point\n * const config = {\n * position: { value: [0, 0] as [number, number] }\n * };\n *\n * // 3D point with axis constraints\n * const config = {\n * position: {\n * value: [0, 0, 0] as [number, number, number],\n * x: { min: -10, max: 10 },\n * y: { min: 0, max: 100 },\n * z: { min: -10, max: 10 }\n * }\n * };\n * ```\n */\nexport interface TweakPointConfig<\n\tTVector extends [number, number] | [number, number, number] | [number, number, number, number] =\n\t\t| [number, number]\n\t\t| [number, number, number]\n\t\t| [number, number, number, number],\n> {\n\t/** The initial point value or a writable signal for two-way binding */\n\tvalue: TVector | WritableSignal<TVector>;\n\t/** Configuration for the X axis (min, max, step, etc.) */\n\tx?: Point2dInputParams['x'];\n\t/** Configuration for the Y axis */\n\ty?: Point2dInputParams['y'];\n\t/** Configuration for the Z axis (3D/4D points only) */\n\tz?: Point3dInputParams['z'];\n\t/** Configuration for the W axis (4D points only) */\n\tw?: Point4dInputParams['w'];\n}\n\n/**\n * Configuration for a button/action control.\n *\n * @example\n * ```typescript\n * const config = {\n * reset: { action: () => this.resetSettings(), label: 'Actions' }\n * };\n * ```\n */\nexport interface TweakButtonConfig {\n\t/** The callback function to execute when the button is clicked */\n\taction: () => void;\n\t/** Optional label displayed next to the button */\n\tlabel?: string;\n}\n\n/**\n * Configuration for a nested folder within the tweaks.\n * Created using the `tweaks.folder()` helper function.\n *\n * @typeParam T - The config type for the folder's contents\n *\n * @example\n * ```typescript\n * const config = {\n * advanced: tweaks.folder('Advanced Settings', {\n * iterations: { value: 4, min: 1, max: 10 },\n * tolerance: { value: 0.001, min: 0, max: 1 }\n * })\n * };\n * ```\n */\nexport interface TweakFolderConfig<T extends TweakConfig> {\n\t/** Internal marker to identify folder configs */\n\t__folder: true;\n\t/** The folder title displayed in the UI */\n\tname: string;\n\t/** The configuration object for controls within the folder */\n\tconfig: T;\n\t/** Whether the folder is initially expanded */\n\texpanded?: boolean;\n}\n\n/**\n * Union of all possible configuration value types for `tweaks()`.\n *\n * Includes:\n * - Primitive values (number, string, boolean)\n * - Writable signals for two-way binding\n * - Typed config objects for each control type\n */\nexport type TweakConfigValue =\n\t| number\n\t| string\n\t| boolean\n\t| WritableSignal<number>\n\t| WritableSignal<string>\n\t| WritableSignal<boolean>\n\t| TweakNumberConfig\n\t| TweakTextConfig\n\t| TweakColorConfig\n\t| TweakCheckboxConfig\n\t| TweakListConfig<unknown>\n\t| TweakPointConfig\n\t| TweakButtonConfig\n\t| TweakFolderConfig<TweakConfig>;\n\n/**\n * A configuration object for `tweaks()`.\n * Maps control names to their configuration values.\n */\nexport type TweakConfig = Record<string, TweakConfigValue>;\n\n// ============================================================================\n// Result Types (what tweaks() returns)\n// ============================================================================\n\n/**\n * Infer the signal type from a config value.\n * Always returns Signal<T> (readonly) - never WritableSignal.\n * Users can use their original WritableSignal if they need write access.\n */\ntype InferSignalType<T> =\n\t// Direct WritableSignal - return readonly Signal\n\tT extends WritableSignal<infer U>\n\t\t? Signal<U>\n\t\t: // Primitive number\n\t\t\tT extends number\n\t\t\t? Signal<number>\n\t\t\t: // Primitive string\n\t\t\t\tT extends string\n\t\t\t\t? Signal<string>\n\t\t\t\t: // Primitive boolean\n\t\t\t\t\tT extends boolean\n\t\t\t\t\t? Signal<boolean>\n\t\t\t\t\t: // Number config\n\t\t\t\t\t\tT extends TweakNumberConfig\n\t\t\t\t\t\t? Signal<number>\n\t\t\t\t\t\t: // Text config\n\t\t\t\t\t\t\tT extends TweakTextConfig\n\t\t\t\t\t\t\t? Signal<string>\n\t\t\t\t\t\t\t: // Color config\n\t\t\t\t\t\t\t\tT extends TweakColorConfig\n\t\t\t\t\t\t\t\t? Signal<string>\n\t\t\t\t\t\t\t\t: // Checkbox config\n\t\t\t\t\t\t\t\t\tT extends TweakCheckboxConfig\n\t\t\t\t\t\t\t\t\t? Signal<boolean>\n\t\t\t\t\t\t\t\t\t: // List config\n\t\t\t\t\t\t\t\t\t\tT extends TweakListConfig<infer U>\n\t\t\t\t\t\t\t\t\t\t? Signal<U>\n\t\t\t\t\t\t\t\t\t\t: // Point config\n\t\t\t\t\t\t\t\t\t\t\tT extends TweakPointConfig<infer VectorType>\n\t\t\t\t\t\t\t\t\t\t\t? Signal<VectorType>\n\t\t\t\t\t\t\t\t\t\t\t: // Button - no return value\n\t\t\t\t\t\t\t\t\t\t\t\tT extends TweakButtonConfig\n\t\t\t\t\t\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t\t\t\t\t\t: // Folder - recurse\n\t\t\t\t\t\t\t\t\t\t\t\t\tT extends TweakFolderConfig<infer C>\n\t\t\t\t\t\t\t\t\t\t\t\t\t? TweakResult<C>\n\t\t\t\t\t\t\t\t\t\t\t\t\t: never;\n\n/**\n * The result type returned by `tweaks()` for a given configuration.\n *\n * Maps each config key to a readonly Signal of the appropriate type.\n * Button configs are excluded (they don't return values).\n *\n * @typeParam T - The configuration object type\n */\nexport type TweakResult<T extends TweakConfig> = {\n\t[K in keyof T as T[K] extends TweakButtonConfig ? never : K]: InferSignalType<T[K]>;\n};\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Checks if a config value is a TweakNumberConfig.\n * @internal\n */\nfunction isNumberConfig(config: TweakConfigValue): config is TweakNumberConfig {\n\tif (typeof config !== 'object' || config === null || !('value' in config)) return false;\n\tif ('color' in config || 'options' in config || 'action' in config || '__folder' in config) return false;\n\tif ('x' in config || 'y' in config) return false;\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst value = isSignal(config.value) ? untracked(config.value as Signal<any>) : config.value;\n\treturn typeof value === 'number';\n}\n\n/**\n * Checks if a config value is a TweakTextConfig.\n * @internal\n */\nfunction isTextConfig(config: TweakConfigValue): config is TweakTextConfig {\n\tif (typeof config !== 'object' || config === null || !('value' in config)) return false;\n\tif ('color' in config || 'options' in config || 'action' in config || '__folder' in config) return false;\n\tif ('min' in config || 'max' in config || 'step' in config) return false;\n\tif ('x' in config || 'y' in config) return false;\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst value = isSignal(config.value) ? untracked(config.value as Signal<any>) : config.value;\n\treturn typeof value === 'string';\n}\n\n/**\n * Checks if a config value is a TweakColorConfig.\n * @internal\n */\nfunction isColorConfig(config: TweakConfigValue): config is TweakColorConfig {\n\treturn typeof config === 'object' && config !== null && 'color' in config && config.color === true;\n}\n\n/**\n * Checks if a config value is a TweakCheckboxConfig.\n * @internal\n */\nfunction isCheckboxConfig(config: TweakConfigValue): config is TweakCheckboxConfig {\n\tif (typeof config !== 'object' || config === null || !('value' in config)) return false;\n\tif ('color' in config || 'options' in config || 'action' in config || '__folder' in config) return false;\n\tif ('min' in config || 'max' in config || 'step' in config) return false;\n\tif ('x' in config || 'y' in config) return false;\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst value = isSignal(config.value) ? untracked(config.value as Signal<any>) : config.value;\n\treturn typeof value === 'boolean';\n}\n\n/**\n * Checks if a config value is a TweakListConfig.\n * @internal\n */\nfunction isListConfig(config: TweakConfigValue): config is TweakListConfig<unknown> {\n\treturn typeof config === 'object' && config !== null && 'options' in config;\n}\n\n/**\n * Checks if a config value is a TweakPointConfig.\n * @internal\n */\nfunction isPointConfig(config: TweakConfigValue): config is TweakPointConfig {\n\treturn (\n\t\ttypeof config === 'object' &&\n\t\tconfig !== null &&\n\t\t'value' in config &&\n\t\t(('x' in config && 'y' in config) ||\n\t\t\t(Array.isArray(config.value) && config.value.length >= 2) ||\n\t\t\t(isSignal(config.value) && Array.isArray(untracked(config.value))))\n\t);\n}\n\n/**\n * Checks if a config value is a TweakButtonConfig.\n * @internal\n */\nfunction isButtonConfig(config: TweakConfigValue): config is TweakButtonConfig {\n\treturn typeof config === 'object' && config !== null && 'action' in config && typeof config.action === 'function';\n}\n\n/**\n * Checks if a config value is a TweakFolderConfig.\n * @internal\n */\nfunction isFolderConfig(config: TweakConfigValue): config is TweakFolderConfig<TweakConfig> {\n\treturn typeof config === 'object' && config !== null && '__folder' in config && config.__folder === true;\n}\n\n// ============================================================================\n// Helper to create folder configs\n// ============================================================================\n\n/**\n * Creates a nested folder configuration for use with `tweaks()`.\n *\n * This helper function creates a folder configuration object that can be\n * used as a value in the `tweaks()` config to organize controls into\n * collapsible groups.\n *\n * @typeParam T - The config type for the folder's contents\n * @param name - The display name/title of the folder\n * @param config - The configuration object for controls within the folder\n * @param options - Optional folder settings\n * @param options.expanded - Whether the folder starts expanded\n * @returns A folder configuration object\n *\n * @example\n * ```typescript\n * const controls = tweaks('Settings', {\n * basic: 42,\n * advanced: tweaks.folder('Advanced', {\n * iterations: { value: 4, min: 1, max: 10 },\n * tolerance: { value: 0.001, min: 0, max: 1, step: 0.001 },\n * }),\n * });\n *\n * // Access nested values\n * controls.advanced.iterations(); // Signal<number>\n * ```\n */\nfunction folder<T extends TweakConfig>(\n\tname: string,\n\tconfig: T,\n\toptions?: { expanded?: boolean },\n): TweakFolderConfig<T> {\n\treturn {\n\t\t__folder: true,\n\t\tname,\n\t\tconfig,\n\t\texpanded: options?.expanded,\n\t};\n}\n\n// ============================================================================\n// Folder Options\n// ============================================================================\n\n/**\n * Options for configuring a `tweaks()` folder.\n */\nexport interface TweakFolderOptions {\n\t/**\n\t * Whether the folder is expanded by default.\n\t * @default false\n\t */\n\texpanded?: boolean;\n\t/**\n\t * Optional injector for use outside an injection context.\n\t * Required when calling `tweaks()` from outside a constructor or field initializer.\n\t */\n\tinjector?: Injector;\n}\n\n// ============================================================================\n// Main tweaks() function\n// ============================================================================\n\n/**\n * Creates Tweakpane controls declaratively from any component within an `ngt-canvas`.\n *\n * **Prerequisites:**\n * 1. Add `tweakpaneAnchor` directive to your `ngt-canvas`:\n * ```html\n * <ngt-canvas tweakpaneAnchor>\n * ```\n * 2. Add `<tweakpane-pane>` somewhere in your scene\n *\n * @param folderName - The name of the folder to create/use\n * @param config - Configuration object defining the controls\n * @param options - Optional folder options (expanded, etc.)\n * @returns An object with signals for each control value\n *\n * @example\n * ```typescript\n * // Basic usage with primitives (creates new signals)\n * const controls = tweaks('Physics', {\n * gravity: 9.8,\n * debug: false,\n * name: 'World',\n * });\n *\n * // With config objects for more control\n * const controls = tweaks('Physics', {\n * gravity: { value: 9.8, min: 0, max: 20, step: 0.1 },\n * color: { value: '#ff0000', color: true },\n * mode: { value: 'normal', options: ['normal', 'debug', 'verbose'] },\n * });\n *\n * // Two-way binding with existing signals\n * filteringEnabled = signal(true);\n * const controls = tweaks('Settings', {\n * filteringEnabled: this.filteringEnabled, // two-way binding\n * });\n *\n * // Buttons (actions)\n * const controls = tweaks('Actions', {\n * reset: { action: () => this.reset() },\n * });\n *\n * // Nested folders\n * const controls = tweaks('Settings', {\n * basic: 42,\n * advanced: tweaks.folder('Advanced', {\n * iterations: { value: 4, min: 1, max: 10 },\n * }),\n * });\n * ```\n */\nexport function tweaks<T extends TweakConfig>(\n\tfolderName: string,\n\tconfig: T,\n\t{ injector, ...options }: TweakFolderOptions = {},\n): TweakResult<T> {\n\treturn assertInjector(tweaks, injector, () => {\n\t\tconst maybeAnchor = inject(TweakpaneAnchor, { optional: true });\n\t\tconst assertedInjector = inject(Injector);\n\t\tconst destroyRef = inject(DestroyRef);\n\n\t\tif (!maybeAnchor) {\n\t\t\tthrow new Error(\n\t\t\t\t'[NGT Tweakpane] tweaks() requires TweakpaneAnchor directive. Add `tweakpaneAnchor` to your ngt-canvas element.',\n\t\t\t);\n\t\t}\n\n\t\tconst anchor = maybeAnchor;\n\n\t\tconst result = {} as Record<string, Signal<unknown> | Record<string, Signal<unknown>>>;\n\t\tconst createdComponents: ComponentRef<TweakpaneAnchorHost>[] = [];\n\n\t\t// Process config and create controls when pane folder is ready\n\t\teffect(\n\t\t\t(onCleanup) => {\n\t\t\t\tconst paneFolder = anchor.paneFolder();\n\t\t\t\tif (!paneFolder) return;\n\n\t\t\t\t// Get or create folder for this tweaks() call\n\t\t\t\tlet folderRef = anchor.folders[folderName];\n\t\t\t\tlet folderInstance: TweakpaneFolder;\n\n\t\t\t\tif (!folderRef) {\n\t\t\t\t\t// Create folder using the directives approach\n\t\t\t\t\tfolderRef = anchor.vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\t\tinjector: Injector.create({\n\t\t\t\t\t\t\tproviders: [{ provide: TweakpaneFolder, useValue: paneFolder }],\n\t\t\t\t\t\t\tparent: assertedInjector,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: TweakpaneFolder,\n\t\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\t\tinputBinding('title', () => folderName),\n\t\t\t\t\t\t\t\t\tinputBinding('expanded', () => options?.expanded ?? false),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t});\n\t\t\t\t\tfolderInstance = folderRef.injector.get(TweakpaneFolder);\n\t\t\t\t\tanchor.folders[folderName] = folderRef;\n\t\t\t\t\tcreatedComponents.push(folderRef);\n\t\t\t\t} else {\n\t\t\t\t\tfolderInstance = folderRef.injector.get(TweakpaneFolder);\n\t\t\t\t}\n\n\t\t\t\t// Process each config entry\n\t\t\t\tprocessConfig(config, result, folderInstance, anchor.vcr, createdComponents, anchor, assertedInjector);\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\t// Destroy created components\n\t\t\t\t\tfor (const ref of createdComponents) {\n\t\t\t\t\t\tref.destroy();\n\t\t\t\t\t}\n\t\t\t\t\tcreatedComponents.length = 0;\n\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: assertedInjector },\n\t\t);\n\n\t\t// Cleanup on destroy\n\t\tdestroyRef.onDestroy(() => {\n\t\t\tfor (const ref of createdComponents) {\n\t\t\t\tref.destroy();\n\t\t\t}\n\t\t});\n\n\t\treturn result as TweakResult<T>;\n\t});\n}\n\n/**\n * Attach the folder helper to tweaks for convenient access.\n * Allows usage like `tweaks.folder('Name', config)`.\n */\ntweaks.folder = folder;\n\n// ============================================================================\n// Internal: Process config and create components\n// ============================================================================\n\n/**\n * Processes a configuration object and creates the corresponding Tweakpane controls.\n * This is an internal function called by `tweaks()` to set up the UI.\n *\n * @param config - The configuration object to process\n * @param result - The result object to populate with signals\n * @param parentFolder - The parent folder to add controls to\n * @param vcr - The ViewContainerRef for creating components\n * @param createdComponents - Array to track created component refs for cleanup\n * @param anchor - The TweakpaneAnchor for folder management\n * @param parentInjector - The parent injector for dependency injection\n *\n * @internal\n */\nfunction processConfig(\n\tconfig: TweakConfig,\n\tresult: Record<string, Signal<unknown> | Record<string, Signal<unknown>>>,\n\tparentFolder: TweakpaneFolder,\n\tvcr: ViewContainerRef,\n\tcreatedComponents: ComponentRef<TweakpaneAnchorHost>[],\n\tanchor: TweakpaneAnchor,\n\tparentInjector: Injector,\n): void {\n\tconst keys = Object.keys(config);\n\n\t// Create injector with parent folder provided\n\tconst folderInjector = Injector.create({\n\t\tproviders: [{ provide: TweakpaneFolder, useValue: parentFolder }],\n\t\tparent: parentInjector,\n\t});\n\n\tfor (const key of keys) {\n\t\tconst configValue = config[key];\n\n\t\t// Handle nested folders\n\t\tif (isFolderConfig(configValue)) {\n\t\t\tconst nestedResult = {} as Record<string, Signal<unknown>>;\n\n\t\t\t// Get or create nested folder\n\t\t\tconst nestedFolderName = configValue.name;\n\t\t\tlet nestedFolderRef = anchor.folders[nestedFolderName];\n\t\t\tlet nestedFolderInstance: TweakpaneFolder;\n\n\t\t\tif (!nestedFolderRef) {\n\t\t\t\tnestedFolderRef = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\tinjector: folderInjector,\n\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: TweakpaneFolder,\n\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\tinputBinding('title', () => nestedFolderName),\n\t\t\t\t\t\t\t\tinputBinding('expanded', () => configValue.expanded ?? false),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\tnestedFolderInstance = nestedFolderRef.injector.get(TweakpaneFolder);\n\t\t\t\tanchor.folders[nestedFolderName] = nestedFolderRef;\n\t\t\t\tcreatedComponents.push(nestedFolderRef);\n\t\t\t} else {\n\t\t\t\tnestedFolderInstance = nestedFolderRef.injector.get(TweakpaneFolder);\n\t\t\t}\n\n\t\t\tprocessConfig(\n\t\t\t\tconfigValue.config,\n\t\t\t\tnestedResult,\n\t\t\t\tnestedFolderInstance,\n\t\t\t\tvcr,\n\t\t\t\tcreatedComponents,\n\t\t\t\tanchor,\n\t\t\t\tfolderInjector,\n\t\t\t);\n\t\t\tresult[key] = nestedResult;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle buttons (no result signal)\n\t\tif (isButtonConfig(configValue)) {\n\t\t\tconst buttonRef = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneButton,\n\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\tinputBinding('title', () => key),\n\t\t\t\t\t\t\t...(configValue.label ? [inputBinding('label', () => configValue.label)] : []),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\t// Subscribe to click events\n\t\t\tconst buttonInstance = buttonRef.injector.get(TweakpaneButton);\n\t\t\tbuttonInstance.click.subscribe(() => {\n\t\t\t\tconfigValue.action();\n\t\t\t});\n\t\t\tcreatedComponents.push(buttonRef);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle direct WritableSignal (two-way binding)\n\t\tif (isSignal(configValue)) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst untrackedValue = untracked(configValue as WritableSignal<any>);\n\t\t\tconst valueType = typeof untrackedValue;\n\n\t\t\tif (valueType === 'number') {\n\t\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\tinjector: folderInjector,\n\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: TweakpaneNumber,\n\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\t\ttwoWayBinding('value', configValue as WritableSignal<number>),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\tcreatedComponents.push(ref);\n\t\t\t\tresult[key] = (configValue as WritableSignal<number>).asReadonly();\n\t\t\t} else if (valueType === 'string') {\n\t\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\tinjector: folderInjector,\n\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: TweakpaneText,\n\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\t\ttwoWayBinding('value', configValue as WritableSignal<string>),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\tcreatedComponents.push(ref);\n\t\t\t\tresult[key] = (configValue as WritableSignal<string>).asReadonly();\n\t\t\t} else if (valueType === 'boolean') {\n\t\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\tinjector: folderInjector,\n\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: TweakpaneCheckbox,\n\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\t\ttwoWayBinding('value', configValue as WritableSignal<boolean>),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\tcreatedComponents.push(ref);\n\t\t\t\tresult[key] = (configValue as WritableSignal<boolean>).asReadonly();\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle primitive values (create new signal)\n\t\tif (typeof configValue === 'number') {\n\t\t\tconst valueSignal = signal(configValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneNumber,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof configValue === 'string') {\n\t\t\tconst valueSignal = signal(configValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneText,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof configValue === 'boolean') {\n\t\t\tconst valueSignal = signal(configValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneCheckbox,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle config objects\n\t\tif (isColorConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value)\n\t\t\t\t? untracked(configValue.value)\n\t\t\t\t: (configValue.value as string);\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneColor,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isListConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value) ? untracked(configValue.value) : configValue.value;\n\t\t\tconst valueSignal = isSignal(configValue.value)\n\t\t\t\t? (configValue.value as WritableSignal<unknown>)\n\t\t\t\t: signal(initialValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneList,\n\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\tinputBinding('options', () => configValue.options),\n\t\t\t\t\t\t\ttwoWayBinding('value', valueSignal),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isPointConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value) ? untracked(configValue.value) : configValue.value;\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\t// Build params from x, y, z, w configs\n\t\t\tconst params: Point2dInputParams | Point3dInputParams | Point4dInputParams = {};\n\t\t\tif (configValue.x) (params as Point2dInputParams).x = configValue.x;\n\t\t\tif (configValue.y) (params as Point2dInputParams).y = configValue.y;\n\t\t\tif (configValue.z) (params as Point3dInputParams).z = configValue.z;\n\t\t\tif (configValue.w) (params as Point4dInputParams).w = configValue.w;\n\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpanePoint,\n\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\tinputBinding('params', () => params),\n\t\t\t\t\t\t\ttwoWayBinding(\n\t\t\t\t\t\t\t\t'value',\n\t\t\t\t\t\t\t\tvalueSignal as WritableSignal<\n\t\t\t\t\t\t\t\t\t[number, number] | [number, number, number] | [number, number, number, number]\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isNumberConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value)\n\t\t\t\t? untracked(configValue.value)\n\t\t\t\t: (configValue.value as number);\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\t// Build params\n\t\t\tconst params: NumberInputParams = {};\n\t\t\tif (configValue.min !== undefined) params.min = configValue.min;\n\t\t\tif (configValue.max !== undefined) params.max = configValue.max;\n\t\t\tif (configValue.step !== undefined) params.step = configValue.step;\n\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneNumber,\n\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\tinputBinding('params', () => params),\n\t\t\t\t\t\t\ttwoWayBinding('value', valueSignal),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isCheckboxConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value)\n\t\t\t\t? untracked(configValue.value)\n\t\t\t\t: (configValue.value as boolean);\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneCheckbox,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isTextConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value)\n\t\t\t\t? untracked(configValue.value)\n\t\t\t\t: (configValue.value as string);\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneText,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TweakpaneTitle","i2.TweakpaneBlade","i1.TweakpaneBlade","i2.TweakpaneDebounce","i3.TweakpaneLabel","i2.TweakpaneLabel","i3.TweakpaneBlade","i1.TweakpaneBinding","i1.TweakpaneFolder"],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-tweakpane.mjs","sources":["../../../../libs/tweakpane/src/lib/anchor.ts","../../../../libs/tweakpane/src/lib/blade.ts","../../../../libs/tweakpane/src/lib/debounce.ts","../../../../libs/tweakpane/src/lib/title.ts","../../../../libs/tweakpane/src/lib/folder.ts","../../../../libs/tweakpane/src/lib/label.ts","../../../../libs/tweakpane/src/lib/binding.ts","../../../../libs/tweakpane/src/lib/button.ts","../../../../libs/tweakpane/src/lib/checkbox.ts","../../../../libs/tweakpane/src/lib/color.ts","../../../../libs/tweakpane/src/lib/list.ts","../../../../libs/tweakpane/src/lib/number.ts","../../../../libs/tweakpane/src/lib/pane.ts","../../../../libs/tweakpane/src/lib/point.ts","../../../../libs/tweakpane/src/lib/text.ts","../../../../libs/tweakpane/src/lib/tweaks.ts","../../../../libs/tweakpane/src/angular-three-tweakpane.ts"],"sourcesContent":["import { Component, ComponentRef, Directive, inject, signal, ViewContainerRef } from '@angular/core';\nimport { TweakpaneFolder } from './folder';\n\n/**\n * Directive that provides an anchor point for the `tweaks()` function to dynamically create Tweakpane controls.\n *\n * Add this directive to your `ngt-canvas` element to enable the `tweaks()` API:\n *\n * ```html\n * <ngt-canvas tweakpaneAnchor>\n * <ng-template #sceneGraph>\n * <!-- your scene -->\n * </ng-template>\n * </ngt-canvas>\n * ```\n *\n * Then use `tweaks()` in any component within the canvas:\n *\n * ```typescript\n * const controls = tweaks('Physics', {\n * gravity: { value: 9.8, min: 0, max: 20 },\n * debug: this.debugMode, // two-way binding with existing signal\n * });\n * ```\n */\n@Directive({ selector: '[tweakpaneAnchor]' })\nexport class TweakpaneAnchor {\n\t/**\n\t * The ViewContainerRef where dynamic components will be created.\n\t * Injected from the host element.\n\t */\n\tvcr = inject(ViewContainerRef);\n\n\t/**\n\t * Reference to the pane's TweakpaneFolder, set by TweakpanePane when it initializes.\n\t * This is used as the parent folder for dynamically created folders.\n\t */\n\tpaneFolder = signal<TweakpaneFolder | null>(null);\n\n\t/**\n\t * Registry of folder ComponentRefs by folder name.\n\t * Used to reuse existing folders when multiple `tweaks()` calls use the same folder name.\n\t */\n\tfolders: Record<string, ComponentRef<TweakpaneAnchorHost>> = {};\n}\n\n/**\n * A minimal host component used for dynamically creating Tweakpane controls.\n * This component serves as a host for directives like TweakpaneFolder, TweakpaneNumber, etc.\n * when using the `tweaks()` function.\n *\n * @internal\n */\n@Component({\n\tselector: 'tweakpane-anchor-host',\n\ttemplate: '',\n})\nexport class TweakpaneAnchorHost {}\n","import { booleanAttribute, Directive, effect, inject, Injector, input, untracked } from '@angular/core';\nimport { BladeApi } from 'tweakpane';\n\n/**\n * Directive that provides hidden and disabled state management for Tweakpane blades.\n *\n * This is a base directive used by other Tweakpane components to control\n * visibility and interactivity of controls.\n *\n * @example\n * ```html\n * <tweakpane-number [hidden]=\"isHidden\" [disabled]=\"isDisabled\" [(value)]=\"speed\" />\n * ```\n */\n@Directive({ selector: 'tweakpane-blade' })\nexport class TweakpaneBlade {\n\t/**\n\t * Whether the blade is hidden.\n\t * @default false\n\t */\n\thidden = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Whether the blade is disabled (non-interactive).\n\t * @default false\n\t */\n\tdisabled = input(false, { transform: booleanAttribute });\n\n\tprivate injector = inject(Injector);\n\n\t/**\n\t * Gets the current hidden and disabled values without tracking signal dependencies.\n\t * Useful for initial configuration when creating Tweakpane components.\n\t * @returns An object containing the current hidden and disabled states\n\t */\n\tget snapshot() {\n\t\treturn {\n\t\t\thidden: untracked(this.hidden),\n\t\t\tdisabled: untracked(this.disabled),\n\t\t};\n\t}\n\n\t/**\n\t * Synchronizes the hidden and disabled properties with a Tweakpane BladeApi.\n\t * Creates a reactive effect that updates the API's state whenever\n\t * the input values change.\n\t *\n\t * @param api - A function that returns the Tweakpane BladeApi (or null if not ready)\n\t * @returns The created effect reference\n\t */\n\tsync(api: () => BladeApi | null) {\n\t\treturn effect(\n\t\t\t() => {\n\t\t\t\tconst _api = api();\n\t\t\t\tif (!_api) return;\n\n\t\t\t\t_api.hidden = this.hidden();\n\t\t\t\t_api.disabled = this.disabled();\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n}\n","import { Directive, effect, inject, Injector, input, numberAttribute } from '@angular/core';\nimport { debounceTime, fromEventPattern } from 'rxjs';\nimport { TpChangeEvent } from 'tweakpane';\n\n/**\n * Directive that provides debounced change event handling for Tweakpane controls.\n *\n * This is a base directive used by binding-based controls to prevent\n * excessive updates when values change rapidly (e.g., during slider dragging).\n *\n * @example\n * ```html\n * <!-- Debounce value updates by 300ms -->\n * <tweakpane-number [debounce]=\"300\" [(value)]=\"speed\" />\n * ```\n */\n@Directive()\nexport class TweakpaneDebounce {\n\t/**\n\t * The debounce delay in milliseconds before emitting value changes.\n\t * @default 150\n\t */\n\tdebounce = input(150, { transform: numberAttribute });\n\n\tprivate injector = inject(Injector);\n\n\t/**\n\t * Synchronizes debounced change events from a Tweakpane API with a callback.\n\t * Creates a reactive effect that subscribes to change events and debounces them.\n\t *\n\t * @typeParam T - The type of value being tracked\n\t * @param api - A function that returns the Tweakpane API object with on/off methods (or null if not ready)\n\t * @param cb - Callback function invoked with the change event after debounce delay\n\t * @returns The created effect reference\n\t */\n\tsync<T>(\n\t\tapi: () => {\n\t\t\ton: (evName: 'change', cb: (ev: TpChangeEvent<T>) => void) => void;\n\t\t\toff: (evName: 'change', cb: (ev: TpChangeEvent<T>) => void) => void;\n\t\t} | null,\n\t\tcb: (ev: TpChangeEvent<T>) => void,\n\t) {\n\t\treturn effect(\n\t\t\t(onCleanup) => {\n\t\t\t\tconst _api = api();\n\t\t\t\tif (!_api) return;\n\n\t\t\t\tconst sub = fromEventPattern<TpChangeEvent<T>>(\n\t\t\t\t\t(handler) => _api.on('change', handler),\n\t\t\t\t\t(handler) => _api.off('change', handler),\n\t\t\t\t)\n\t\t\t\t\t.pipe(debounceTime(this.debounce()))\n\t\t\t\t\t.subscribe((ev) => {\n\t\t\t\t\t\tcb(ev);\n\t\t\t\t\t});\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tsub.unsubscribe();\n\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n}\n","import { Directive, effect, inject, Injector, input, untracked } from '@angular/core';\n\n/**\n * Directive that provides title functionality for Tweakpane components.\n *\n * This is a base directive used by other Tweakpane components (like `TweakpaneFolder`,\n * `TweakpanePane`, `TweakpaneButton`) to manage their titles reactively.\n *\n * @example\n * ```html\n * <tweakpane-folder title=\"Settings\">\n * <!-- folder contents -->\n * </tweakpane-folder>\n * ```\n */\n@Directive()\nexport class TweakpaneTitle {\n\t/**\n\t * The title text to display.\n\t * @default 'TweakPane Title'\n\t */\n\ttitle = input('TweakPane Title');\n\n\tprivate injector = inject(Injector);\n\n\t/**\n\t * Gets the current title value without tracking signal dependencies.\n\t * Useful for initial configuration when creating Tweakpane components.\n\t * @returns The current title string value\n\t */\n\tget snapshot() {\n\t\treturn untracked(this.title);\n\t}\n\n\t/**\n\t * Synchronizes the title property with a Tweakpane API object.\n\t * Creates a reactive effect that updates the API's title whenever\n\t * the input title changes.\n\t *\n\t * @param api - A function that returns the Tweakpane API object (or null if not ready)\n\t * @returns The created effect reference\n\t */\n\tsync(api: () => { title: string | undefined } | null) {\n\t\treturn effect(\n\t\t\t() => {\n\t\t\t\tconst _api = api();\n\t\t\t\tif (!_api) return;\n\n\t\t\t\t_api.title = this.title();\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n}\n","import { computed, DestroyRef, Directive, effect, inject, linkedSignal, model, Signal, untracked } from '@angular/core';\nimport { TpFoldEvent } from '@tweakpane/core';\nimport { FolderApi } from 'tweakpane';\nimport { TweakpaneBlade } from './blade';\nimport { TweakpaneTitle } from './title';\n\n/**\n * Directive for creating collapsible folders within a Tweakpane.\n *\n * Folders are used to organize controls into logical groups. They can be\n * nested within other folders or directly within a pane.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-folder title=\"Physics\" [expanded]=\"true\">\n * <tweakpane-number label=\"Gravity\" [(value)]=\"gravity\" />\n * <tweakpane-number label=\"Friction\" [(value)]=\"friction\" />\n * </tweakpane-folder>\n *\n * <tweakpane-folder title=\"Appearance\">\n * <tweakpane-color label=\"Color\" [(value)]=\"color\" />\n * </tweakpane-folder>\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-folder',\n\thostDirectives: [\n\t\t{ directive: TweakpaneTitle, inputs: ['title'] },\n\t\t{ directive: TweakpaneBlade, inputs: ['hidden', 'disabled'] },\n\t],\n})\nexport class TweakpaneFolder {\n\t/**\n\t * Whether the folder is expanded (open) or collapsed.\n\t * Supports two-way binding with `[(expanded)]`.\n\t * @default false\n\t */\n\texpanded = model(false);\n\n\tprivate title = inject(TweakpaneTitle);\n\tprivate blade = inject(TweakpaneBlade);\n\tprivate parent = inject(TweakpaneFolder, { skipSelf: true, optional: true });\n\n\t/**\n\t * Signal containing the parent folder API.\n\t * Automatically links to the parent folder in the component hierarchy.\n\t */\n\tparentFolder = linkedSignal(() => this.parent?.folder());\n\n\t/**\n\t * Computed signal containing the Tweakpane FolderApi for this folder.\n\t * Returns null if the parent folder is not yet available.\n\t */\n\tfolder: Signal<FolderApi | null> = computed(() => {\n\t\tconst parent = this.parentFolder();\n\t\tif (!parent) return null;\n\n\t\tif (!this.isSelf) return parent;\n\n\t\treturn parent.addFolder({\n\t\t\ttitle: this.title.snapshot,\n\t\t\texpanded: untracked(this.expanded),\n\t\t\tdisabled: this.blade.snapshot.disabled,\n\t\t\thidden: this.blade.snapshot.hidden,\n\t\t});\n\t});\n\n\t/**\n\t * Internal flag indicating whether this directive creates its own folder\n\t * or reuses the parent folder. Set to `false` by `TweakpanePane`.\n\t * @internal\n\t */\n\tisSelf = true;\n\n\tconstructor() {\n\t\tthis.title.sync(this.folder);\n\t\tthis.blade.sync(this.folder);\n\n\t\teffect((onCleanup) => {\n\t\t\tconst folder = this.folder();\n\t\t\tif (!folder) return;\n\n\t\t\tconst cb = (ev: TpFoldEvent<FolderApi>) => {\n\t\t\t\tthis.expanded.set(ev.expanded);\n\t\t\t};\n\n\t\t\tfolder.on('fold', cb);\n\t\t\tonCleanup(() => {\n\t\t\t\tfolder.off('fold', cb);\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.folder()?.dispose();\n\t\t});\n\t}\n}\n","import { Directive, effect, inject, Injector, input, untracked } from '@angular/core';\n\n/**\n * Directive that provides label and tag functionality for Tweakpane controls.\n *\n * This is a base directive used by binding-based controls (like `TweakpaneNumber`,\n * `TweakpaneText`, `TweakpaneCheckbox`) to manage their labels and optional tags.\n *\n * @example\n * ```html\n * <tweakpane-number label=\"Speed\" tag=\"m/s\" [(value)]=\"speed\" />\n * ```\n */\n@Directive()\nexport class TweakpaneLabel {\n\t/**\n\t * The label text displayed next to the control.\n\t * @default ''\n\t */\n\tlabel = input('');\n\n\t/**\n\t * An optional tag displayed alongside the label (e.g., units like \"px\", \"m/s\").\n\t * @default ''\n\t */\n\ttag = input('');\n\n\tprivate injector = inject(Injector);\n\n\t/**\n\t * Gets the current label and tag values without tracking signal dependencies.\n\t * Useful for initial configuration when creating Tweakpane controls.\n\t * @returns An object containing the current label and tag values\n\t */\n\tget snapshot() {\n\t\treturn { label: untracked(this.label), tag: untracked(this.tag) };\n\t}\n\n\t/**\n\t * Synchronizes the label and tag properties with a Tweakpane API object.\n\t * Creates a reactive effect that updates the API's label and tag\n\t * whenever the input values change.\n\t *\n\t * @param api - A function that returns the Tweakpane API object (or null if not ready)\n\t * @returns The created effect reference\n\t */\n\tsync(api: () => { label?: string | null; tag?: string | null } | null) {\n\t\treturn effect(\n\t\t\t() => {\n\t\t\t\tconst _api = api();\n\t\t\t\tif (!_api) return;\n\n\t\t\t\t_api.label = this.label();\n\t\t\t\tif ('tag' in _api) {\n\t\t\t\t\t_api.tag = this.tag();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n}\n","import {\n\tcomputed,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\tInjectionToken,\n\tInjector,\n\tmodel,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { BindingApi, BindingParams } from '@tweakpane/core';\nimport { TweakpaneBlade } from './blade';\nimport { TweakpaneDebounce } from './debounce';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneLabel } from './label';\n\n/**\n * Injection token used to configure value transformation when TweakpaneBinding\n * is used as a host directive.\n *\n * When set to `true`, values pass through unchanged.\n * When set to an object with `in` and `out` functions, values are transformed:\n * - `in`: Transforms the input value before binding to Tweakpane\n * - `out`: Transforms the Tweakpane value before emitting to the model\n *\n * @internal\n */\nexport const NGT_TWEAK_BINDING_AS_HOST = new InjectionToken<\n\ttrue | { in: (value: unknown) => unknown; out: (value: unknown) => unknown } | null\n>('hostDirective NgtTweakBinding', { factory: () => null });\n\n/**\n * Provides configuration for TweakpaneBinding when used as a host directive.\n *\n * @typeParam TIn - The input value type (from the component)\n * @typeParam TOut - The output value type (for Tweakpane)\n * @param inOut - Optional object containing `in` and `out` transformation functions\n * @returns A provider configuration object\n *\n * @example\n * ```typescript\n * // Simple passthrough (no transformation)\n * providers: [provideTweakBindingAsHost()]\n *\n * // With value transformation (e.g., array to object)\n * providers: [provideTweakBindingAsHost({\n * in: (value) => ({ x: value[0], y: value[1] }),\n * out: (value) => [value.x, value.y]\n * })]\n * ```\n */\nexport function provideTweakBindingAsHost<TIn, TOut>(inOut?: { in: (value: TIn) => TOut; out: (value: TOut) => TIn }) {\n\treturn { provide: NGT_TWEAK_BINDING_AS_HOST, useValue: inOut ?? true };\n}\n\n/**\n * Base directive for creating Tweakpane bindings (two-way data binding controls).\n *\n * This directive provides the core functionality for binding Angular values to\n * Tweakpane controls. It handles:\n * - Creating the binding on the parent folder\n * - Syncing label, blade, and debounce settings\n * - Value transformation when used as a host directive\n * - Automatic cleanup on destroy\n *\n * Most commonly used as a host directive by specific control types like\n * `TweakpaneNumber`, `TweakpaneText`, `TweakpaneCheckbox`, etc.\n *\n * @typeParam TValue - The type of value being bound\n *\n * @example\n * ```html\n * <!-- Direct usage (rarely needed) -->\n * <tweakpane-binding [(value)]=\"myValue\" label=\"My Value\" />\n *\n * <!-- More commonly used via specific controls -->\n * <tweakpane-number [(value)]=\"speed\" label=\"Speed\" />\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-binding',\n\thostDirectives: [\n\t\t{ directive: TweakpaneBlade, inputs: ['disabled', 'hidden'] },\n\t\t{ directive: TweakpaneDebounce, inputs: ['debounce'] },\n\t\t{ directive: TweakpaneLabel, inputs: ['label', 'tag'] },\n\t],\n})\nexport class TweakpaneBinding<TValue> {\n\t/**\n\t * The bound value. Supports two-way binding with `[(value)]`.\n\t */\n\tvalue = model.required<any>();\n\n\tprivate debounce = inject(TweakpaneDebounce);\n\tprivate label = inject(TweakpaneLabel);\n\tprivate blade = inject(TweakpaneBlade);\n\tprivate parent = inject(TweakpaneFolder);\n\tprivate injector = inject(Injector);\n\tprivate asHostDirective = inject(NGT_TWEAK_BINDING_AS_HOST);\n\n\tprivate bindingBaseParams = computed(() => ({\n\t\tlabel: this.label.snapshot.label,\n\t\ttag: this.label.snapshot.tag,\n\t\tdisabled: this.blade.disabled(),\n\t\thidden: this.blade.hidden(),\n\t}));\n\tprivate bindingParams = signal<Record<string, unknown>>({});\n\n\t/**\n\t * Gets the bindable object with optional value transformation.\n\t * @returns An object with a `value` property suitable for Tweakpane binding\n\t */\n\tprivate get bindableObject() {\n\t\tlet value = untracked(this.value);\n\n\t\tif (this.asHostDirective && typeof this.asHostDirective === 'object') {\n\t\t\tvalue = this.asHostDirective.in(value) as TValue;\n\t\t}\n\n\t\treturn { value };\n\t}\n\n\tprivate bindingApi = computed(() => {\n\t\tconst parent = this.parent.folder();\n\t\tif (!parent) return null;\n\n\t\tconst bindingParams = { ...this.bindingBaseParams(), ...this.bindingParams() };\n\t\treturn parent.addBinding(this.bindableObject, 'value', bindingParams) as BindingApi<unknown, TValue>;\n\t});\n\n\tconstructor() {\n\t\tthis.blade.sync(this.bindingApi);\n\t\tthis.label.sync(this.bindingApi);\n\t\tthis.debounce.sync(this.bindingApi, (ev) => {\n\t\t\tif (this.asHostDirective && typeof this.asHostDirective === 'object') {\n\t\t\t\tthis.value.set(this.asHostDirective.out(ev.value) as TValue);\n\t\t\t} else {\n\t\t\t\tthis.value.set(ev.value);\n\t\t\t}\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst bindingApi = this.bindingApi();\n\t\t\tif (!bindingApi) return;\n\t\t\tonCleanup(() => {\n\t\t\t\tbindingApi.dispose();\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.bindingApi()?.dispose();\n\t\t});\n\t}\n\n\t/**\n\t * Synchronizes additional binding parameters with the Tweakpane binding.\n\t * Called by specific control directives to add control-specific parameters\n\t * (e.g., min/max for numbers, options for lists).\n\t *\n\t * @param params - A function that returns the binding parameters\n\t * @returns The created effect reference\n\t */\n\tsyncBindingParams(params: () => BindingParams) {\n\t\treturn effect(\n\t\t\t() => {\n\t\t\t\tthis.bindingParams.set(params());\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n\n\t// createBindingEffect(params: () => BindingParams) {\n\t// \treturn effect(\n\t// \t\t(onCleanup) => {\n\t// \t\t\tconst parent = this.parent.folder();\n\t// \t\t\tif (!parent) return;\n\t//\n\t// \t\t\tconst bindingParams = { ...this.bindingBaseParams(), ...params() };\n\t// \t\t\tconst binding = parent.addBinding(this.bindableObject, 'value', bindingParams);\n\t//\n\t// \t\t\tthis.bindingApi.set(binding);\n\t//\n\t// \t\t\tonCleanup(() => {\n\t// \t\t\t\tbinding.dispose();\n\t// \t\t\t\tthis.bindingApi.set(null);\n\t// \t\t\t});\n\t// \t\t},\n\t// \t\t{ injector: this.injector },\n\t// \t);\n\t// }\n}\n","import { computed, DestroyRef, Directive, effect, inject, output } from '@angular/core';\nimport { TpMouseEvent } from '@tweakpane/core';\nimport { ButtonApi } from 'tweakpane';\nimport { TweakpaneBlade } from './blade';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneLabel } from './label';\nimport { TweakpaneTitle } from './title';\n\n/**\n * Directive for creating a clickable button in Tweakpane.\n *\n * Buttons are used to trigger actions (like reset, randomize, etc.)\n * and emit click events when pressed.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-button title=\"Reset\" (click)=\"onReset()\" />\n * <tweakpane-button title=\"Randomize\" label=\"Action\" (click)=\"onRandomize()\" />\n * <tweakpane-button title=\"Save\" [disabled]=\"!canSave\" (click)=\"onSave()\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-button',\n\thostDirectives: [\n\t\t{ directive: TweakpaneTitle, inputs: ['title'] },\n\t\t{ directive: TweakpaneLabel, inputs: ['label'] },\n\t\t{ directive: TweakpaneBlade, inputs: ['hidden', 'disabled'] },\n\t],\n})\nexport class TweakpaneButton {\n\t/**\n\t * Event emitted when the button is clicked.\n\t * Provides the Tweakpane mouse event with the ButtonApi.\n\t */\n\tclick = output<TpMouseEvent<ButtonApi>>();\n\n\tprivate title = inject(TweakpaneTitle);\n\tprivate label = inject(TweakpaneLabel);\n\tprivate blade = inject(TweakpaneBlade);\n\tprivate parent = inject(TweakpaneFolder);\n\n\tprivate buttonApi = computed(() => {\n\t\tconst parent = this.parent.folder();\n\t\tif (!parent) return null;\n\n\t\treturn parent.addButton({\n\t\t\ttitle: this.title.snapshot,\n\t\t\thidden: this.blade.snapshot.hidden,\n\t\t\tdisabled: this.blade.snapshot.disabled,\n\t\t\tlabel: this.label.snapshot.label,\n\t\t});\n\t});\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst buttonApi = this.buttonApi();\n\t\t\tif (!buttonApi) return;\n\n\t\t\tconst boundEmit = this.click.emit.bind(this.click);\n\t\t\tbuttonApi.on('click', boundEmit);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tbuttonApi.off('click', boundEmit);\n\t\t\t});\n\t\t});\n\n\t\tthis.label.sync(this.buttonApi);\n\t\tthis.title.sync(this.buttonApi);\n\t\tthis.blade.sync(this.buttonApi);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.buttonApi()?.dispose();\n\t\t});\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { BooleanInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Directive for creating a boolean checkbox control in Tweakpane.\n *\n * Provides two-way binding for boolean values with a checkbox UI.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-checkbox label=\"Debug Mode\" [(value)]=\"debugMode\" />\n * <tweakpane-checkbox label=\"Wireframe\" [(value)]=\"showWireframe\" [disabled]=\"!debugMode()\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-checkbox',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [provideTweakBindingAsHost()],\n})\nexport class TweakpaneCheckbox {\n\t/**\n\t * Additional Tweakpane boolean input parameters.\n\t * @default {}\n\t */\n\tparams = input<BooleanInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { ColorInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Directive for creating a color picker control in Tweakpane.\n *\n * Provides two-way binding for color values (as hex strings) with a\n * color picker UI that supports RGB, HSL, and alpha.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-color label=\"Background\" [(value)]=\"backgroundColor\" />\n * <tweakpane-color label=\"Accent\" [(value)]=\"accentColor\" [params]=\"{ alpha: true }\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-color',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [provideTweakBindingAsHost()],\n})\nexport class TweakpaneColor {\n\t/**\n\t * Additional Tweakpane color input parameters.\n\t * Can include options like `alpha`, `color.type`, etc.\n\t * @default {}\n\t */\n\tparams = input<ColorInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import { computed, DestroyRef, Directive, effect, inject, input, model, untracked } from '@angular/core';\nimport { ListItem } from '@tweakpane/core';\nimport { ListBladeApi } from 'tweakpane';\nimport { TweakpaneBlade } from './blade';\nimport { TweakpaneDebounce } from './debounce';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneLabel } from './label';\n\n/**\n * Directive for creating a dropdown list/select control in Tweakpane.\n *\n * Provides two-way binding for selecting from a list of options.\n * Options can be provided as an array or as a key-value object.\n *\n * @typeParam TOptionValue - The type of values in the list\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <!-- Options as array -->\n * <tweakpane-list\n * label=\"Mode\"\n * [(value)]=\"mode\"\n * [options]=\"['normal', 'debug', 'performance']\"\n * />\n *\n * <!-- Options as object (label: value mapping) -->\n * <tweakpane-list\n * label=\"Quality\"\n * [(value)]=\"quality\"\n * [options]=\"{ 'Low': 1, 'Medium': 2, 'High': 3, 'Ultra': 4 }\"\n * />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-list',\n\thostDirectives: [\n\t\t{ directive: TweakpaneBlade, inputs: ['hidden', 'disabled'] },\n\t\t{ directive: TweakpaneDebounce, inputs: ['debounce'] },\n\t\t{ directive: TweakpaneLabel, inputs: ['label'] },\n\t],\n})\nexport class TweakpaneList<TOptionValue> {\n\t/**\n\t * The currently selected value. Supports two-way binding with `[(value)]`.\n\t */\n\tvalue = model.required<TOptionValue>();\n\n\t/**\n\t * The list options. Can be:\n\t * - An array of values (labels will be stringified values)\n\t * - An object mapping display labels to values\n\t */\n\toptions = input.required<Record<string, TOptionValue> | TOptionValue[]>();\n\n\tprivate blade = inject(TweakpaneBlade);\n\tprivate debounce = inject(TweakpaneDebounce);\n\tprivate label = inject(TweakpaneLabel);\n\tprivate parent = inject(TweakpaneFolder);\n\n\tprivate listOptions = computed(() => {\n\t\tconst options = this.options();\n\t\tif (Array.isArray(options)) {\n\t\t\treturn options.map((option) => ({ value: option, text: `${option}` }) as ListItem<TOptionValue>);\n\t\t}\n\n\t\treturn Object.keys(options).map((key) => {\n\t\t\tconst value = options[key];\n\t\t\treturn { text: key, value } as ListItem<TOptionValue>;\n\t\t});\n\t});\n\tprivate listApi = computed(() => {\n\t\tconst parent = this.parent.folder();\n\t\tif (!parent) return null;\n\n\t\treturn parent.addBlade({\n\t\t\tview: 'list',\n\t\t\toptions: this.listOptions(),\n\t\t\tvalue: untracked(this.value),\n\t\t\tlabel: this.label.snapshot.label,\n\t\t}) as ListBladeApi<TOptionValue>;\n\t});\n\n\tconstructor() {\n\t\tthis.label.sync(this.listApi);\n\t\tthis.blade.sync(this.listApi);\n\t\tthis.debounce.sync(this.listApi, (ev) => {\n\t\t\tthis.value.set(ev.value);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst listApi = this.listApi();\n\t\t\tonCleanup(() => {\n\t\t\t\tlistApi?.dispose();\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.listApi()?.dispose();\n\t\t});\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { NumberInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Directive for creating a numeric input control in Tweakpane.\n *\n * Provides two-way binding for number values with optional min/max/step\n * constraints. Displays as a text input with increment buttons, or as\n * a slider if min and max are specified.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <!-- Simple number input -->\n * <tweakpane-number label=\"Count\" [(value)]=\"count\" />\n *\n * <!-- With slider (min/max defined) -->\n * <tweakpane-number\n * label=\"Speed\"\n * [(value)]=\"speed\"\n * [params]=\"{ min: 0, max: 100, step: 0.1 }\"\n * />\n *\n * <!-- With custom format -->\n * <tweakpane-number\n * label=\"Angle\"\n * [(value)]=\"angle\"\n * [params]=\"{ min: 0, max: 360, format: (v) => v.toFixed(0) + '°' }\"\n * />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-number',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [provideTweakBindingAsHost()],\n})\nexport class TweakpaneNumber {\n\t/**\n\t * Additional Tweakpane number input parameters.\n\t * Can include `min`, `max`, `step`, `format`, etc.\n\t * @default {}\n\t */\n\tparams = input<NumberInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import {\n\tafterNextRender,\n\tDestroyRef,\n\tDirective,\n\tDOCUMENT,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tisSignal,\n\tsignal,\n} from '@angular/core';\nimport { ClassName } from '@tweakpane/core';\nimport { Pane } from 'tweakpane';\nimport { PaneConfig } from 'tweakpane/dist/types/pane/pane-config';\nimport { TweakpaneAnchor } from './anchor';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneTitle } from './title';\n\n/**\n * Main Tweakpane container directive that creates the root pane element.\n *\n * This directive creates a floating Tweakpane panel that can be positioned\n * anywhere on the screen. It serves as the root container for all\n * Tweakpane controls (folders, bindings, buttons, etc.).\n *\n * @example\n * ```html\n * <!-- Basic usage with default positioning (top-right) -->\n * <tweakpane-pane title=\"Settings\">\n * <tweakpane-number label=\"Speed\" [(value)]=\"speed\" />\n * <tweakpane-checkbox label=\"Debug\" [(value)]=\"debug\" />\n * </tweakpane-pane>\n *\n * <!-- Custom positioning -->\n * <tweakpane-pane title=\"Controls\" left=\"8px\" bottom=\"8px\" [right]=\"undefined\">\n * <tweakpane-folder title=\"Physics\">\n * <tweakpane-number label=\"Gravity\" [(value)]=\"gravity\" />\n * </tweakpane-folder>\n * </tweakpane-pane>\n *\n * <!-- Embedded in a container element -->\n * <div #container></div>\n * <tweakpane-pane [container]=\"container\">\n * <!-- controls -->\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-pane',\n\thostDirectives: [{ directive: TweakpaneFolder, inputs: ['expanded'], outputs: ['expandedChange'] }],\n})\nexport class TweakpanePane {\n\t/**\n\t * CSS top position of the pane.\n\t * @default '8px'\n\t */\n\ttop = input<string | number>('8px');\n\n\t/**\n\t * CSS right position of the pane.\n\t * @default '8px'\n\t */\n\tright = input<string | number>('8px');\n\n\t/**\n\t * CSS left position of the pane.\n\t * @default undefined\n\t */\n\tleft = input<string | number>();\n\n\t/**\n\t * CSS bottom position of the pane.\n\t * @default undefined\n\t */\n\tbottom = input<string | number>();\n\n\t/**\n\t * CSS width of the pane.\n\t * @default '256px'\n\t */\n\twidth = input<string | number>('256px');\n\n\t/**\n\t * Optional container element to embed the pane into.\n\t * If not provided, the pane floats freely in the document.\n\t * Can be an HTMLElement or an Angular ElementRef.\n\t */\n\tcontainer = input<HTMLElement | ElementRef<HTMLElement | undefined> | undefined>();\n\n\tprivate document = inject(DOCUMENT);\n\tprivate title = inject(TweakpaneTitle, { host: true });\n\tprivate folder = inject(TweakpaneFolder, { host: true });\n\tprivate tweakpaneAnchor = inject(TweakpaneAnchor, { optional: true });\n\tprivate pane = signal<Pane | null>(null);\n\tprivate paneContainer?: HTMLDivElement;\n\n\tconstructor() {\n\t\tthis.folder.isSelf = false;\n\n\t\tafterNextRender(() => {\n\t\t\tconst container = this.container();\n\t\t\tconst paneOptions: PaneConfig = {\n\t\t\t\ttitle: this.title.title(),\n\t\t\t\texpanded: this.folder.expanded(),\n\t\t\t};\n\n\t\t\tif (container) {\n\t\t\t\tconst containerElement = 'nativeElement' in container ? container.nativeElement : container;\n\t\t\t\tif (containerElement) {\n\t\t\t\t\tthis.paneContainer = this.document.createElement('div');\n\t\t\t\t\tthis.paneContainer.classList.add(ClassName('dfw')());\n\t\t\t\t\tcontainerElement.appendChild(this.paneContainer);\n\t\t\t\t\tpaneOptions.container = this.paneContainer;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pane = new Pane(paneOptions);\n\n\t\t\tthis.pane.set(pane);\n\t\t\tthis.folder.parentFolder.set(pane);\n\n\t\t\t// Set the pane's folder for tweaks() to use\n\t\t\tif (this.tweakpaneAnchor) {\n\t\t\t\tthis.tweakpaneAnchor.paneFolder.set(this.folder);\n\t\t\t}\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst pane = this.pane();\n\t\t\tif (!pane) return;\n\n\t\t\tif (this.paneContainer) {\n\t\t\t\tthis.paneContainer.remove();\n\t\t\t}\n\n\t\t\tpane.element.remove();\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('top');\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('right');\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('left');\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('bottom');\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateStyleEffect('width');\n\t\t});\n\t}\n\n\t/**\n\t * Updates a CSS style property on the pane's parent element.\n\t * @param propertyName - The name of the style property to update\n\t */\n\tprivate updateStyleEffect(propertyName: Exclude<keyof TweakpanePane, 'pane' | 'title' | 'expanded' | 'container'>) {\n\t\tconst pane = this.pane();\n\t\tif (!pane) return;\n\n\t\tconst parentElement = pane.element.parentElement;\n\t\tif (!parentElement) return;\n\n\t\tconst property = this[propertyName];\n\t\tif (!isSignal(property)) return;\n\n\t\tconst value = property();\n\t\tif (!value) return;\n\n\t\tparentElement.style.setProperty(propertyName, typeof value === 'number' ? value + 'px' : value);\n\t\tpane.refresh();\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { Point2dInputParams, Point3dInputParams, Point4dInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Acceptable value formats for TweakpanePoint.\n * Can be a tuple array `[x, y, z?, w?]` or an object `{ x, y, z?, w? }`.\n */\ntype AcceptableTweakPointValue =\n\t| [x: number, y: number, z?: number, w?: number]\n\t| { x: number; y: number; z?: number; w?: number };\n\n/**\n * Directive for creating a 2D/3D/4D point input control in Tweakpane.\n *\n * Provides two-way binding for point values (as tuple arrays or objects).\n * The control displays input fields for each dimension and optionally\n * shows a 2D picker for x/y values.\n *\n * Values are accepted as arrays `[x, y, z?, w?]` and emitted in the same format.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <!-- 2D point -->\n * <tweakpane-point label=\"Position\" [(value)]=\"position2D\" />\n *\n * <!-- 3D point with custom ranges -->\n * <tweakpane-point\n * label=\"Position\"\n * [(value)]=\"position3D\"\n * [params]=\"{\n * x: { min: -10, max: 10 },\n * y: { min: 0, max: 100 },\n * z: { min: -10, max: 10 }\n * }\"\n * />\n *\n * <!-- 4D point (e.g., quaternion) -->\n * <tweakpane-point label=\"Rotation\" [(value)]=\"quaternion\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-point',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [\n\t\tprovideTweakBindingAsHost<AcceptableTweakPointValue, { x: number; y: number; z?: number; w?: number }>({\n\t\t\tin: (value) => {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tconst [x, y, z, w] = value;\n\t\t\t\t\treturn { x, y, z, w };\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tout: (value) => {\n\t\t\t\tconst { x, y, z, w } = value;\n\t\t\t\treturn [x, y, z, w];\n\t\t\t},\n\t\t}),\n\t],\n})\nexport class TweakpanePoint {\n\t/**\n\t * Additional Tweakpane point input parameters.\n\t * Can include per-axis configuration like `{ x: { min, max }, y: { min, max } }`.\n\t * @default {}\n\t */\n\tparams = input<Point2dInputParams | Point3dInputParams | Point4dInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import { Directive, inject, input } from '@angular/core';\nimport { StringInputParams } from 'tweakpane';\nimport { TweakpaneBinding, provideTweakBindingAsHost } from './binding';\n\n/**\n * Directive for creating a text input control in Tweakpane.\n *\n * Provides two-way binding for string values with a text input UI.\n *\n * @example\n * ```html\n * <tweakpane-pane>\n * <tweakpane-text label=\"Name\" [(value)]=\"objectName\" />\n * <tweakpane-text label=\"Description\" [(value)]=\"description\" />\n * </tweakpane-pane>\n * ```\n */\n@Directive({\n\tselector: 'tweakpane-text',\n\thostDirectives: [{ directive: TweakpaneBinding, inputs: ['value'], outputs: ['valueChange'] }],\n\tproviders: [provideTweakBindingAsHost()],\n})\nexport class TweakpaneText {\n\t/**\n\t * Additional Tweakpane string input parameters.\n\t * @default {}\n\t */\n\tparams = input<StringInputParams>({});\n\n\tprivate binding = inject(TweakpaneBinding);\n\n\tconstructor() {\n\t\tthis.binding.syncBindingParams(this.params);\n\t}\n}\n","import {\n\ttype ComponentRef,\n\tDestroyRef,\n\teffect,\n\tinject,\n\tInjector,\n\tinputBinding,\n\tisSignal,\n\tsignal,\n\ttype Signal,\n\ttwoWayBinding,\n\tuntracked,\n\ttype ViewContainerRef,\n\ttype WritableSignal,\n} from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NumberInputParams, Point2dInputParams, Point3dInputParams, Point4dInputParams } from 'tweakpane';\nimport { TweakpaneAnchor, TweakpaneAnchorHost } from './anchor';\nimport { TweakpaneButton } from './button';\nimport { TweakpaneCheckbox } from './checkbox';\nimport { TweakpaneColor } from './color';\nimport { TweakpaneFolder } from './folder';\nimport { TweakpaneList } from './list';\nimport { TweakpaneNumber } from './number';\nimport { TweakpanePoint } from './point';\nimport { TweakpaneText } from './text';\n\n// ============================================================================\n// Config Types\n// ============================================================================\n\n/**\n * Configuration for a number input control.\n *\n * @example\n * ```typescript\n * const config = {\n * gravity: { value: 9.8, min: 0, max: 20, step: 0.1 }\n * };\n * ```\n */\nexport interface TweakNumberConfig {\n\t/** The initial value or a writable signal for two-way binding */\n\tvalue: number | WritableSignal<number>;\n\t/** Minimum allowed value (enables slider display) */\n\tmin?: number;\n\t/** Maximum allowed value (enables slider display) */\n\tmax?: number;\n\t/** Step increment for the value */\n\tstep?: number;\n}\n\n/**\n * Configuration for a text input control.\n *\n * @example\n * ```typescript\n * const config = {\n * name: { value: 'Object 1' }\n * };\n * ```\n */\nexport interface TweakTextConfig {\n\t/** The initial value or a writable signal for two-way binding */\n\tvalue: string | WritableSignal<string>;\n}\n\n/**\n * Configuration for a color picker control.\n *\n * @example\n * ```typescript\n * const config = {\n * background: { value: '#ff0000', color: true }\n * };\n * ```\n */\nexport interface TweakColorConfig {\n\t/** The initial color value (as hex string) or a writable signal */\n\tvalue: string | WritableSignal<string>;\n\t/** Marker to identify this as a color input (must be `true`) */\n\tcolor: true;\n}\n\n/**\n * Configuration for a checkbox/boolean control.\n *\n * @example\n * ```typescript\n * const config = {\n * enabled: { value: true }\n * };\n * ```\n */\nexport interface TweakCheckboxConfig {\n\t/** The initial value or a writable signal for two-way binding */\n\tvalue: boolean | WritableSignal<boolean>;\n}\n\n/**\n * Configuration for a dropdown list/select control.\n *\n * @typeParam T - The type of option values\n *\n * @example\n * ```typescript\n * // With array of options\n * const config = {\n * mode: { value: 'normal', options: ['normal', 'debug', 'performance'] }\n * };\n *\n * // With labeled options\n * const config = {\n * quality: { value: 2, options: { 'Low': 1, 'Medium': 2, 'High': 3 } }\n * };\n * ```\n */\nexport interface TweakListConfig<T> {\n\t/** The initial value or a writable signal for two-way binding */\n\tvalue: T | WritableSignal<T>;\n\t/** Array of options or object mapping labels to values */\n\toptions: T[] | Record<string, T>;\n}\n\n/**\n * Configuration for a 2D/3D/4D point input control.\n *\n * @typeParam TVector - The tuple type for the point dimensions\n *\n * @example\n * ```typescript\n * // 2D point\n * const config = {\n * position: { value: [0, 0] as [number, number] }\n * };\n *\n * // 3D point with axis constraints\n * const config = {\n * position: {\n * value: [0, 0, 0] as [number, number, number],\n * x: { min: -10, max: 10 },\n * y: { min: 0, max: 100 },\n * z: { min: -10, max: 10 }\n * }\n * };\n * ```\n */\nexport interface TweakPointConfig<\n\tTVector extends [number, number] | [number, number, number] | [number, number, number, number] =\n\t\t| [number, number]\n\t\t| [number, number, number]\n\t\t| [number, number, number, number],\n> {\n\t/** The initial point value or a writable signal for two-way binding */\n\tvalue: TVector | WritableSignal<TVector>;\n\t/** Configuration for the X axis (min, max, step, etc.) */\n\tx?: Point2dInputParams['x'];\n\t/** Configuration for the Y axis */\n\ty?: Point2dInputParams['y'];\n\t/** Configuration for the Z axis (3D/4D points only) */\n\tz?: Point3dInputParams['z'];\n\t/** Configuration for the W axis (4D points only) */\n\tw?: Point4dInputParams['w'];\n}\n\n/**\n * Configuration for a button/action control.\n *\n * @example\n * ```typescript\n * const config = {\n * reset: { action: () => this.resetSettings(), label: 'Actions' }\n * };\n * ```\n */\nexport interface TweakButtonConfig {\n\t/** The callback function to execute when the button is clicked */\n\taction: () => void;\n\t/** Optional label displayed next to the button */\n\tlabel?: string;\n}\n\n/**\n * Configuration for a nested folder within the tweaks.\n * Created using the `tweaks.folder()` helper function.\n *\n * @typeParam T - The config type for the folder's contents\n *\n * @example\n * ```typescript\n * const config = {\n * advanced: tweaks.folder('Advanced Settings', {\n * iterations: { value: 4, min: 1, max: 10 },\n * tolerance: { value: 0.001, min: 0, max: 1 }\n * })\n * };\n * ```\n */\nexport interface TweakFolderConfig<T extends TweakConfig> {\n\t/** Internal marker to identify folder configs */\n\t__folder: true;\n\t/** The folder title displayed in the UI */\n\tname: string;\n\t/** The configuration object for controls within the folder */\n\tconfig: T;\n\t/** Whether the folder is initially expanded */\n\texpanded?: boolean;\n}\n\n/**\n * Union of all possible configuration value types for `tweaks()`.\n *\n * Includes:\n * - Primitive values (number, string, boolean)\n * - Writable signals for two-way binding\n * - Typed config objects for each control type\n */\nexport type TweakConfigValue =\n\t| number\n\t| string\n\t| boolean\n\t| WritableSignal<number>\n\t| WritableSignal<string>\n\t| WritableSignal<boolean>\n\t| TweakNumberConfig\n\t| TweakTextConfig\n\t| TweakColorConfig\n\t| TweakCheckboxConfig\n\t| TweakListConfig<unknown>\n\t| TweakPointConfig\n\t| TweakButtonConfig\n\t| TweakFolderConfig<TweakConfig>;\n\n/**\n * A configuration object for `tweaks()`.\n * Maps control names to their configuration values.\n */\nexport type TweakConfig = Record<string, TweakConfigValue>;\n\n// ============================================================================\n// Result Types (what tweaks() returns)\n// ============================================================================\n\n/**\n * Infer the signal type from a config value.\n * Always returns Signal<T> (readonly) - never WritableSignal.\n * Users can use their original WritableSignal if they need write access.\n */\ntype InferSignalType<T> =\n\t// Direct WritableSignal - return readonly Signal\n\tT extends WritableSignal<infer U>\n\t\t? Signal<U>\n\t\t: // Primitive number\n\t\t\tT extends number\n\t\t\t? Signal<number>\n\t\t\t: // Primitive string\n\t\t\t\tT extends string\n\t\t\t\t? Signal<string>\n\t\t\t\t: // Primitive boolean\n\t\t\t\t\tT extends boolean\n\t\t\t\t\t? Signal<boolean>\n\t\t\t\t\t: // Number config\n\t\t\t\t\t\tT extends TweakNumberConfig\n\t\t\t\t\t\t? Signal<number>\n\t\t\t\t\t\t: // Text config\n\t\t\t\t\t\t\tT extends TweakTextConfig\n\t\t\t\t\t\t\t? Signal<string>\n\t\t\t\t\t\t\t: // Color config\n\t\t\t\t\t\t\t\tT extends TweakColorConfig\n\t\t\t\t\t\t\t\t? Signal<string>\n\t\t\t\t\t\t\t\t: // Checkbox config\n\t\t\t\t\t\t\t\t\tT extends TweakCheckboxConfig\n\t\t\t\t\t\t\t\t\t? Signal<boolean>\n\t\t\t\t\t\t\t\t\t: // List config\n\t\t\t\t\t\t\t\t\t\tT extends TweakListConfig<infer U>\n\t\t\t\t\t\t\t\t\t\t? Signal<U>\n\t\t\t\t\t\t\t\t\t\t: // Point config\n\t\t\t\t\t\t\t\t\t\t\tT extends TweakPointConfig<infer VectorType>\n\t\t\t\t\t\t\t\t\t\t\t? Signal<VectorType>\n\t\t\t\t\t\t\t\t\t\t\t: // Button - no return value\n\t\t\t\t\t\t\t\t\t\t\t\tT extends TweakButtonConfig\n\t\t\t\t\t\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t\t\t\t\t\t: // Folder - recurse\n\t\t\t\t\t\t\t\t\t\t\t\t\tT extends TweakFolderConfig<infer C>\n\t\t\t\t\t\t\t\t\t\t\t\t\t? TweakResult<C>\n\t\t\t\t\t\t\t\t\t\t\t\t\t: never;\n\n/**\n * The result type returned by `tweaks()` for a given configuration.\n *\n * Maps each config key to a readonly Signal of the appropriate type.\n * Button configs are excluded (they don't return values).\n *\n * @typeParam T - The configuration object type\n */\nexport type TweakResult<T extends TweakConfig> = {\n\t[K in keyof T as T[K] extends TweakButtonConfig ? never : K]: InferSignalType<T[K]>;\n};\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Checks if a config value is a TweakNumberConfig.\n * @internal\n */\nfunction isNumberConfig(config: TweakConfigValue): config is TweakNumberConfig {\n\tif (typeof config !== 'object' || config === null || !('value' in config)) return false;\n\tif ('color' in config || 'options' in config || 'action' in config || '__folder' in config) return false;\n\tif ('x' in config || 'y' in config) return false;\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst value = isSignal(config.value) ? untracked(config.value as Signal<any>) : config.value;\n\treturn typeof value === 'number';\n}\n\n/**\n * Checks if a config value is a TweakTextConfig.\n * @internal\n */\nfunction isTextConfig(config: TweakConfigValue): config is TweakTextConfig {\n\tif (typeof config !== 'object' || config === null || !('value' in config)) return false;\n\tif ('color' in config || 'options' in config || 'action' in config || '__folder' in config) return false;\n\tif ('min' in config || 'max' in config || 'step' in config) return false;\n\tif ('x' in config || 'y' in config) return false;\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst value = isSignal(config.value) ? untracked(config.value as Signal<any>) : config.value;\n\treturn typeof value === 'string';\n}\n\n/**\n * Checks if a config value is a TweakColorConfig.\n * @internal\n */\nfunction isColorConfig(config: TweakConfigValue): config is TweakColorConfig {\n\treturn typeof config === 'object' && config !== null && 'color' in config && config.color === true;\n}\n\n/**\n * Checks if a config value is a TweakCheckboxConfig.\n * @internal\n */\nfunction isCheckboxConfig(config: TweakConfigValue): config is TweakCheckboxConfig {\n\tif (typeof config !== 'object' || config === null || !('value' in config)) return false;\n\tif ('color' in config || 'options' in config || 'action' in config || '__folder' in config) return false;\n\tif ('min' in config || 'max' in config || 'step' in config) return false;\n\tif ('x' in config || 'y' in config) return false;\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst value = isSignal(config.value) ? untracked(config.value as Signal<any>) : config.value;\n\treturn typeof value === 'boolean';\n}\n\n/**\n * Checks if a config value is a TweakListConfig.\n * @internal\n */\nfunction isListConfig(config: TweakConfigValue): config is TweakListConfig<unknown> {\n\treturn typeof config === 'object' && config !== null && 'options' in config;\n}\n\n/**\n * Checks if a config value is a TweakPointConfig.\n * @internal\n */\nfunction isPointConfig(config: TweakConfigValue): config is TweakPointConfig {\n\treturn (\n\t\ttypeof config === 'object' &&\n\t\tconfig !== null &&\n\t\t'value' in config &&\n\t\t(('x' in config && 'y' in config) ||\n\t\t\t(Array.isArray(config.value) && config.value.length >= 2) ||\n\t\t\t(isSignal(config.value) && Array.isArray(untracked(config.value))))\n\t);\n}\n\n/**\n * Checks if a config value is a TweakButtonConfig.\n * @internal\n */\nfunction isButtonConfig(config: TweakConfigValue): config is TweakButtonConfig {\n\treturn typeof config === 'object' && config !== null && 'action' in config && typeof config.action === 'function';\n}\n\n/**\n * Checks if a config value is a TweakFolderConfig.\n * @internal\n */\nfunction isFolderConfig(config: TweakConfigValue): config is TweakFolderConfig<TweakConfig> {\n\treturn typeof config === 'object' && config !== null && '__folder' in config && config.__folder === true;\n}\n\n// ============================================================================\n// Helper to create folder configs\n// ============================================================================\n\n/**\n * Creates a nested folder configuration for use with `tweaks()`.\n *\n * This helper function creates a folder configuration object that can be\n * used as a value in the `tweaks()` config to organize controls into\n * collapsible groups.\n *\n * @typeParam T - The config type for the folder's contents\n * @param name - The display name/title of the folder\n * @param config - The configuration object for controls within the folder\n * @param options - Optional folder settings\n * @param options.expanded - Whether the folder starts expanded\n * @returns A folder configuration object\n *\n * @example\n * ```typescript\n * const controls = tweaks('Settings', {\n * basic: 42,\n * advanced: tweaks.folder('Advanced', {\n * iterations: { value: 4, min: 1, max: 10 },\n * tolerance: { value: 0.001, min: 0, max: 1, step: 0.001 },\n * }),\n * });\n *\n * // Access nested values\n * controls.advanced.iterations(); // Signal<number>\n * ```\n */\nfunction folder<T extends TweakConfig>(\n\tname: string,\n\tconfig: T,\n\toptions?: { expanded?: boolean },\n): TweakFolderConfig<T> {\n\treturn {\n\t\t__folder: true,\n\t\tname,\n\t\tconfig,\n\t\texpanded: options?.expanded,\n\t};\n}\n\n// ============================================================================\n// Folder Options\n// ============================================================================\n\n/**\n * Options for configuring a `tweaks()` folder.\n */\nexport interface TweakFolderOptions {\n\t/**\n\t * Whether the folder is expanded by default.\n\t * @default false\n\t */\n\texpanded?: boolean;\n\t/**\n\t * Optional injector for use outside an injection context.\n\t * Required when calling `tweaks()` from outside a constructor or field initializer.\n\t */\n\tinjector?: Injector;\n}\n\n// ============================================================================\n// Main tweaks() function\n// ============================================================================\n\n/**\n * Creates Tweakpane controls declaratively from any component within an `ngt-canvas`.\n *\n * **Prerequisites:**\n * 1. Add `tweakpaneAnchor` directive to your `ngt-canvas`:\n * ```html\n * <ngt-canvas tweakpaneAnchor>\n * ```\n * 2. Add `<tweakpane-pane>` somewhere in your scene\n *\n * @param folderName - The name of the folder to create/use\n * @param config - Configuration object defining the controls\n * @param options - Optional folder options (expanded, etc.)\n * @returns An object with signals for each control value\n *\n * @example\n * ```typescript\n * // Basic usage with primitives (creates new signals)\n * const controls = tweaks('Physics', {\n * gravity: 9.8,\n * debug: false,\n * name: 'World',\n * });\n *\n * // With config objects for more control\n * const controls = tweaks('Physics', {\n * gravity: { value: 9.8, min: 0, max: 20, step: 0.1 },\n * color: { value: '#ff0000', color: true },\n * mode: { value: 'normal', options: ['normal', 'debug', 'verbose'] },\n * });\n *\n * // Two-way binding with existing signals\n * filteringEnabled = signal(true);\n * const controls = tweaks('Settings', {\n * filteringEnabled: this.filteringEnabled, // two-way binding\n * });\n *\n * // Buttons (actions)\n * const controls = tweaks('Actions', {\n * reset: { action: () => this.reset() },\n * });\n *\n * // Nested folders\n * const controls = tweaks('Settings', {\n * basic: 42,\n * advanced: tweaks.folder('Advanced', {\n * iterations: { value: 4, min: 1, max: 10 },\n * }),\n * });\n * ```\n */\nexport function tweaks<T extends TweakConfig>(\n\tfolderName: string,\n\tconfig: T,\n\t{ injector, ...options }: TweakFolderOptions = {},\n): TweakResult<T> {\n\treturn assertInjector(tweaks, injector, () => {\n\t\tconst maybeAnchor = inject(TweakpaneAnchor, { optional: true });\n\t\tconst assertedInjector = inject(Injector);\n\t\tconst destroyRef = inject(DestroyRef);\n\n\t\tif (!maybeAnchor) {\n\t\t\tthrow new Error(\n\t\t\t\t'[NGT Tweakpane] tweaks() requires TweakpaneAnchor directive. Add `tweakpaneAnchor` to your ngt-canvas element.',\n\t\t\t);\n\t\t}\n\n\t\tconst anchor = maybeAnchor;\n\n\t\tconst result = {} as Record<string, Signal<unknown> | Record<string, Signal<unknown>>>;\n\t\tconst createdComponents: ComponentRef<TweakpaneAnchorHost>[] = [];\n\n\t\t// Process config and create controls when pane folder is ready\n\t\teffect(\n\t\t\t(onCleanup) => {\n\t\t\t\tconst paneFolder = anchor.paneFolder();\n\t\t\t\tif (!paneFolder) return;\n\n\t\t\t\t// Get or create folder for this tweaks() call\n\t\t\t\tlet folderRef = anchor.folders[folderName];\n\t\t\t\tlet folderInstance: TweakpaneFolder;\n\n\t\t\t\tif (!folderRef) {\n\t\t\t\t\t// Create folder using the directives approach\n\t\t\t\t\tfolderRef = anchor.vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\t\tinjector: Injector.create({\n\t\t\t\t\t\t\tproviders: [{ provide: TweakpaneFolder, useValue: paneFolder }],\n\t\t\t\t\t\t\tparent: assertedInjector,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: TweakpaneFolder,\n\t\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\t\tinputBinding('title', () => folderName),\n\t\t\t\t\t\t\t\t\tinputBinding('expanded', () => options?.expanded ?? false),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t});\n\t\t\t\t\tfolderInstance = folderRef.injector.get(TweakpaneFolder);\n\t\t\t\t\tanchor.folders[folderName] = folderRef;\n\t\t\t\t\tcreatedComponents.push(folderRef);\n\t\t\t\t} else {\n\t\t\t\t\tfolderInstance = folderRef.injector.get(TweakpaneFolder);\n\t\t\t\t}\n\n\t\t\t\t// Process each config entry\n\t\t\t\tprocessConfig(config, result, folderInstance, anchor.vcr, createdComponents, anchor, assertedInjector);\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\t// Destroy created components\n\t\t\t\t\tfor (const ref of createdComponents) {\n\t\t\t\t\t\tref.destroy();\n\t\t\t\t\t}\n\t\t\t\t\tcreatedComponents.length = 0;\n\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: assertedInjector },\n\t\t);\n\n\t\t// Cleanup on destroy\n\t\tdestroyRef.onDestroy(() => {\n\t\t\tfor (const ref of createdComponents) {\n\t\t\t\tref.destroy();\n\t\t\t}\n\t\t});\n\n\t\treturn result as TweakResult<T>;\n\t});\n}\n\n/**\n * Attach the folder helper to tweaks for convenient access.\n * Allows usage like `tweaks.folder('Name', config)`.\n */\ntweaks.folder = folder;\n\n// ============================================================================\n// Internal: Process config and create components\n// ============================================================================\n\n/**\n * Processes a configuration object and creates the corresponding Tweakpane controls.\n * This is an internal function called by `tweaks()` to set up the UI.\n *\n * @param config - The configuration object to process\n * @param result - The result object to populate with signals\n * @param parentFolder - The parent folder to add controls to\n * @param vcr - The ViewContainerRef for creating components\n * @param createdComponents - Array to track created component refs for cleanup\n * @param anchor - The TweakpaneAnchor for folder management\n * @param parentInjector - The parent injector for dependency injection\n *\n * @internal\n */\nfunction processConfig(\n\tconfig: TweakConfig,\n\tresult: Record<string, Signal<unknown> | Record<string, Signal<unknown>>>,\n\tparentFolder: TweakpaneFolder,\n\tvcr: ViewContainerRef,\n\tcreatedComponents: ComponentRef<TweakpaneAnchorHost>[],\n\tanchor: TweakpaneAnchor,\n\tparentInjector: Injector,\n): void {\n\tconst keys = Object.keys(config);\n\n\t// Create injector with parent folder provided\n\tconst folderInjector = Injector.create({\n\t\tproviders: [{ provide: TweakpaneFolder, useValue: parentFolder }],\n\t\tparent: parentInjector,\n\t});\n\n\tfor (const key of keys) {\n\t\tconst configValue = config[key];\n\n\t\t// Handle nested folders\n\t\tif (isFolderConfig(configValue)) {\n\t\t\tconst nestedResult = {} as Record<string, Signal<unknown>>;\n\n\t\t\t// Get or create nested folder\n\t\t\tconst nestedFolderName = configValue.name;\n\t\t\tlet nestedFolderRef = anchor.folders[nestedFolderName];\n\t\t\tlet nestedFolderInstance: TweakpaneFolder;\n\n\t\t\tif (!nestedFolderRef) {\n\t\t\t\tnestedFolderRef = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\tinjector: folderInjector,\n\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: TweakpaneFolder,\n\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\tinputBinding('title', () => nestedFolderName),\n\t\t\t\t\t\t\t\tinputBinding('expanded', () => configValue.expanded ?? false),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\tnestedFolderInstance = nestedFolderRef.injector.get(TweakpaneFolder);\n\t\t\t\tanchor.folders[nestedFolderName] = nestedFolderRef;\n\t\t\t\tcreatedComponents.push(nestedFolderRef);\n\t\t\t} else {\n\t\t\t\tnestedFolderInstance = nestedFolderRef.injector.get(TweakpaneFolder);\n\t\t\t}\n\n\t\t\tprocessConfig(\n\t\t\t\tconfigValue.config,\n\t\t\t\tnestedResult,\n\t\t\t\tnestedFolderInstance,\n\t\t\t\tvcr,\n\t\t\t\tcreatedComponents,\n\t\t\t\tanchor,\n\t\t\t\tfolderInjector,\n\t\t\t);\n\t\t\tresult[key] = nestedResult;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle buttons (no result signal)\n\t\tif (isButtonConfig(configValue)) {\n\t\t\tconst buttonRef = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneButton,\n\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\tinputBinding('title', () => key),\n\t\t\t\t\t\t\t...(configValue.label ? [inputBinding('label', () => configValue.label)] : []),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\t// Subscribe to click events\n\t\t\tconst buttonInstance = buttonRef.injector.get(TweakpaneButton);\n\t\t\tbuttonInstance.click.subscribe(() => {\n\t\t\t\tconfigValue.action();\n\t\t\t});\n\t\t\tcreatedComponents.push(buttonRef);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle direct WritableSignal (two-way binding)\n\t\tif (isSignal(configValue)) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst untrackedValue = untracked(configValue as WritableSignal<any>);\n\t\t\tconst valueType = typeof untrackedValue;\n\n\t\t\tif (valueType === 'number') {\n\t\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\tinjector: folderInjector,\n\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: TweakpaneNumber,\n\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\t\ttwoWayBinding('value', configValue as WritableSignal<number>),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\tcreatedComponents.push(ref);\n\t\t\t\tresult[key] = (configValue as WritableSignal<number>).asReadonly();\n\t\t\t} else if (valueType === 'string') {\n\t\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\tinjector: folderInjector,\n\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: TweakpaneText,\n\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\t\ttwoWayBinding('value', configValue as WritableSignal<string>),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\tcreatedComponents.push(ref);\n\t\t\t\tresult[key] = (configValue as WritableSignal<string>).asReadonly();\n\t\t\t} else if (valueType === 'boolean') {\n\t\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\t\tinjector: folderInjector,\n\t\t\t\t\tdirectives: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: TweakpaneCheckbox,\n\t\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\t\ttwoWayBinding('value', configValue as WritableSignal<boolean>),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t});\n\t\t\t\tcreatedComponents.push(ref);\n\t\t\t\tresult[key] = (configValue as WritableSignal<boolean>).asReadonly();\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle primitive values (create new signal)\n\t\tif (typeof configValue === 'number') {\n\t\t\tconst valueSignal = signal(configValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneNumber,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof configValue === 'string') {\n\t\t\tconst valueSignal = signal(configValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneText,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof configValue === 'boolean') {\n\t\t\tconst valueSignal = signal(configValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneCheckbox,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Handle config objects\n\t\tif (isColorConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value)\n\t\t\t\t? untracked(configValue.value)\n\t\t\t\t: (configValue.value as string);\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneColor,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isListConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value) ? untracked(configValue.value) : configValue.value;\n\t\t\tconst valueSignal = isSignal(configValue.value)\n\t\t\t\t? (configValue.value as WritableSignal<unknown>)\n\t\t\t\t: signal(initialValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneList,\n\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\tinputBinding('options', () => configValue.options),\n\t\t\t\t\t\t\ttwoWayBinding('value', valueSignal),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isPointConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value) ? untracked(configValue.value) : configValue.value;\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\t// Build params from x, y, z, w configs\n\t\t\tconst params: Point2dInputParams | Point3dInputParams | Point4dInputParams = {};\n\t\t\tif (configValue.x) (params as Point2dInputParams).x = configValue.x;\n\t\t\tif (configValue.y) (params as Point2dInputParams).y = configValue.y;\n\t\t\tif (configValue.z) (params as Point3dInputParams).z = configValue.z;\n\t\t\tif (configValue.w) (params as Point4dInputParams).w = configValue.w;\n\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpanePoint,\n\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\tinputBinding('params', () => params),\n\t\t\t\t\t\t\ttwoWayBinding(\n\t\t\t\t\t\t\t\t'value',\n\t\t\t\t\t\t\t\tvalueSignal as WritableSignal<\n\t\t\t\t\t\t\t\t\t[number, number] | [number, number, number] | [number, number, number, number]\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isNumberConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value)\n\t\t\t\t? untracked(configValue.value)\n\t\t\t\t: (configValue.value as number);\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\t// Build params\n\t\t\tconst params: NumberInputParams = {};\n\t\t\tif (configValue.min !== undefined) params.min = configValue.min;\n\t\t\tif (configValue.max !== undefined) params.max = configValue.max;\n\t\t\tif (configValue.step !== undefined) params.step = configValue.step;\n\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneNumber,\n\t\t\t\t\t\tbindings: [\n\t\t\t\t\t\t\tinputBinding('label', () => key),\n\t\t\t\t\t\t\tinputBinding('params', () => params),\n\t\t\t\t\t\t\ttwoWayBinding('value', valueSignal),\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isCheckboxConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value)\n\t\t\t\t? untracked(configValue.value)\n\t\t\t\t: (configValue.value as boolean);\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneCheckbox,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isTextConfig(configValue)) {\n\t\t\tconst initialValue = isSignal(configValue.value)\n\t\t\t\t? untracked(configValue.value)\n\t\t\t\t: (configValue.value as string);\n\t\t\tconst valueSignal = isSignal(configValue.value) ? configValue.value : signal(initialValue);\n\t\t\tconst ref = vcr.createComponent(TweakpaneAnchorHost, {\n\t\t\t\tinjector: folderInjector,\n\t\t\t\tdirectives: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: TweakpaneText,\n\t\t\t\t\t\tbindings: [inputBinding('label', () => key), twoWayBinding('value', valueSignal)],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tcreatedComponents.push(ref);\n\t\t\tresult[key] = valueSignal.asReadonly();\n\t\t\tcontinue;\n\t\t}\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TweakpaneTitle","i2.TweakpaneBlade","i1.TweakpaneBlade","i2.TweakpaneDebounce","i3.TweakpaneLabel","i2.TweakpaneLabel","i3.TweakpaneBlade","i1.TweakpaneBinding","i1.TweakpaneFolder"],"mappings":"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"}
package/package.json CHANGED
@@ -1,46 +1,46 @@
1
1
  {
2
- "name": "angular-three-tweakpane",
3
- "version": "4.2.0",
4
- "publishConfig": {
5
- "access": "public"
6
- },
7
- "type": "module",
8
- "repository": {
9
- "type": "git",
10
- "url": "https://github.com/angular-threejs/angular-three/tree/main/libs/tweakpane"
11
- },
12
- "author": {
13
- "name": "Chau Tran",
14
- "email": "nartc7789@gmail.com",
15
- "url": "https://nartc.me"
16
- },
17
- "description": "Tweakpane UI implementation for Angular Three",
18
- "keywords": [
19
- "angular",
20
- "threejs",
21
- "renderer",
22
- "tweakpane"
23
- ],
24
- "license": "MIT",
25
- "peerDependencies": {
26
- "@angular/common": ">=20.0.0 <22.0.0",
27
- "@angular/core": ">=20.0.0 <22.0.0",
28
- "@tweakpane/core": "^2.0.0",
29
- "tweakpane": "^4.0.0"
30
- },
31
- "dependencies": {
32
- "tslib": "^2.7.0"
33
- },
34
- "module": "fesm2022/angular-three-tweakpane.mjs",
35
- "typings": "types/angular-three-tweakpane.d.ts",
36
- "exports": {
37
- "./package.json": {
38
- "default": "./package.json"
39
- },
40
- ".": {
41
- "types": "./types/angular-three-tweakpane.d.ts",
42
- "default": "./fesm2022/angular-three-tweakpane.mjs"
43
- }
44
- },
45
- "sideEffects": false
2
+ "name": "angular-three-tweakpane",
3
+ "version": "4.2.2",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "type": "module",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/angular-threejs/angular-three/tree/main/libs/tweakpane"
11
+ },
12
+ "author": {
13
+ "name": "Chau Tran",
14
+ "email": "nartc7789@gmail.com",
15
+ "url": "https://nartc.me"
16
+ },
17
+ "description": "Tweakpane UI implementation for Angular Three",
18
+ "keywords": [
19
+ "angular",
20
+ "threejs",
21
+ "renderer",
22
+ "tweakpane"
23
+ ],
24
+ "license": "MIT",
25
+ "peerDependencies": {
26
+ "@angular/common": ">=20.0.0 <22.0.0",
27
+ "@angular/core": ">=20.0.0 <22.0.0",
28
+ "@tweakpane/core": "^2.0.0",
29
+ "tweakpane": "^4.0.0"
30
+ },
31
+ "dependencies": {
32
+ "tslib": "^2.7.0"
33
+ },
34
+ "module": "fesm2022/angular-three-tweakpane.mjs",
35
+ "typings": "types/angular-three-tweakpane.d.ts",
36
+ "exports": {
37
+ "./package.json": {
38
+ "default": "./package.json"
39
+ },
40
+ ".": {
41
+ "types": "./types/angular-three-tweakpane.d.ts",
42
+ "default": "./fesm2022/angular-three-tweakpane.mjs"
43
+ }
44
+ },
45
+ "sideEffects": false
46
46
  }