@signalsandsorcery/plugin-sdk 2.26.1 → 2.28.1

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.
package/dist/index.d.mts CHANGED
@@ -1197,6 +1197,10 @@ interface SceneFamilyTrack {
1197
1197
  name: string;
1198
1198
  /** Musical role if set — used to enforce same-role crossfade pairing. */
1199
1199
  role?: string;
1200
+ /** Generation prompt, when the track was AI-generated. The crossfade picker
1201
+ * shows this as the primary label (users recognise tracks by prompt, not id).
1202
+ * @since SDK 2.27.0 */
1203
+ prompt?: string;
1200
1204
  }
1201
1205
  /**
1202
1206
  * One OTHER scene and its candidate tracks (already type-filtered). Scenes with
@@ -2772,6 +2776,215 @@ interface CrossfadeInpaintInput {
2772
2776
  */
2773
2777
  declare function buildCrossfadeInpaintPrompt(input: CrossfadeInpaintInput): string;
2774
2778
 
2779
+ /**
2780
+ * Fade metadata — family-agnostic types + parsing for transition orphan fades
2781
+ * (synth / drum / instrument panels).
2782
+ *
2783
+ * A fade is a CROSSFADE WITH ONE EMPTY ENDPOINT: a single generated track that
2784
+ * either fades IN (a target-only track entering — `morph(∅ → target)`) or fades
2785
+ * OUT (an origin-only track leaving — `morph(origin → ∅)`) across the transition
2786
+ * loop. It reuses the same generation pipeline (`buildCrossfadeInpaintPrompt`
2787
+ * with one empty endpoint) and the same volume-automation fader as crossfade.
2788
+ *
2789
+ * Stored in scene plugin_data under `track:<dbId>:fade` (ONE entry per track —
2790
+ * unlike crossfade there is no partner / groupId). Kept as a SEPARATE type from
2791
+ * crossfade so the load-bearing "drop a half-broken pair" guard in
2792
+ * `parseCrossfadePairs` stays intact.
2793
+ *
2794
+ * @since SDK 2.28.0
2795
+ */
2796
+
2797
+ /** Which way the lone track fades over the transition. */
2798
+ type FadeDirection = 'in' | 'out';
2799
+ /**
2800
+ * How the fade is shaped:
2801
+ * - `volume` — a one-sided level ramp does the work (DJ-style). Best for
2802
+ * textural/sustained material (pads, atmospheres).
2803
+ * - `build` — the MIDI carries the fade (the inpaint grows sparse→full on the way
2804
+ * in, or dissolves on the way out); the level stays flat. Best for articulated
2805
+ * material (lead, bass, drums, winds, vocals).
2806
+ */
2807
+ type FadeGesture = 'volume' | 'build';
2808
+ /** Per-track fade metadata (one scene-data value per fade track). */
2809
+ interface FadeMeta {
2810
+ direction: FadeDirection;
2811
+ gesture: FadeGesture;
2812
+ /** DB id of the SOURCE track this fade's preset/sample + pattern was seeded from. */
2813
+ sourceTrackDbId: string;
2814
+ /** DB id of the scene the source track lives in (the from/to scene). */
2815
+ sourceSceneId: string;
2816
+ /** Source track display name (shown in the caption). */
2817
+ sourceName: string;
2818
+ /** Copied preset/sample label (shown in the caption). */
2819
+ soundLabel: string;
2820
+ /** Fade position 0..1 — WHERE in time the fade midpoint sits. */
2821
+ sliderPos: number;
2822
+ }
2823
+ /** A fade entry resolved from scene data: the fade track's dbId + its metadata. */
2824
+ interface FadeEntry {
2825
+ dbId: string;
2826
+ meta: FadeMeta;
2827
+ }
2828
+ /** Narrow an unknown scene-data value to FadeMeta (defensive — survives partial blobs). */
2829
+ declare function asFadeMeta(val: unknown): FadeMeta | null;
2830
+ /**
2831
+ * Scan all `track:<dbId>:fade` keys in a scene's plugin_data and return one entry
2832
+ * per valid fade. Unlike crossfade there is no grouping or both-present gate — a
2833
+ * fade is intrinsically a single track.
2834
+ */
2835
+ declare function parseFades(sceneData: Record<string, unknown>): FadeEntry[];
2836
+ /**
2837
+ * Build a ONE-sided volume-automation curve for a fade over `bars` at `bpm`.
2838
+ *
2839
+ * - `gesture === 'build'` → flat at unity (0 dB). The compositional build in the
2840
+ * MIDI carries the fade; layering a volume ramp on top would double-fade.
2841
+ * - `gesture === 'volume'` → an equal-power ramp identical to ONE half of
2842
+ * `buildCrossfadeVolumeCurves`: fade-out ≡ its `origin` curve (unity→floor),
2843
+ * fade-in ≡ its `target` curve (floor→unity). `sliderPos` sets WHERE the −3 dB
2844
+ * midpoint sits in time.
2845
+ *
2846
+ * Points span [0, durationSeconds] so the engine re-reads them each loop. Returns
2847
+ * dB points for `host.setTrackVolumeAutomation`.
2848
+ *
2849
+ * @since SDK 2.28.0
2850
+ */
2851
+ declare function buildFadeVolumeCurve(bars: number, bpm: number, direction: FadeDirection, sliderPos: number, gesture: FadeGesture, steps?: number): VolumeAutomationPoint[];
2852
+ /**
2853
+ * Roles whose fades default to a `volume` (level) ramp — sustained/textural
2854
+ * material that enters/leaves by level in real productions. Everything else
2855
+ * defaults to `build` (the notes carry the fade).
2856
+ *
2857
+ * This is a UI default heuristic over role tokens, NOT the canonical role list
2858
+ * (that lives in the app's instrument-classification + `host.getValidRoles()`).
2859
+ * There is no textural↔articulated axis in the taxonomy, so this small curated
2860
+ * subset lives next to its consumer (the fade modal/panels).
2861
+ *
2862
+ * @since SDK 2.28.0
2863
+ */
2864
+ declare const TEXTURAL_ROLES: ReadonlySet<string>;
2865
+ /** Pick the default fade gesture for a track's role (textural → volume, else build). */
2866
+ declare function defaultFadeGesture(role: string | null | undefined): FadeGesture;
2867
+
2868
+ /**
2869
+ * FadeTrackRow — a transition "fade track": a single locked TrackRow with a
2870
+ * direction badge (Fade in / Fade out) and a one-sided fade slider.
2871
+ *
2872
+ * A fade is a crossfade with one empty endpoint — a lone generated track that
2873
+ * either enters (fade in, for a target-only track) or leaves (fade out, for an
2874
+ * origin-only track) across the transition loop. Like a crossfade layer, the
2875
+ * sound/generation controls are omitted (the SDK TrackRow is "controlled by
2876
+ * omission"): no shuffle / Create / preset-pick / FX / drawer / inner-delete.
2877
+ * What remains: per-track volume/pan/mute/solo and a single delete.
2878
+ *
2879
+ * The slider represents WHERE in the loop the fade sits (earlier ↔ later). Omit
2880
+ * `onSliderChange` to render it read-only.
2881
+ *
2882
+ * @since SDK 2.28.0
2883
+ */
2884
+
2885
+ /** The single (engine track) layer of a fade. */
2886
+ interface FadeLayer {
2887
+ /** Engine track id of this fade's track (also the meter key). */
2888
+ trackId: string;
2889
+ /** Display name of this fade's (newly created) track. */
2890
+ name: string;
2891
+ /** Musical role (drives the auto gesture). */
2892
+ role?: string;
2893
+ /** Name of the SOURCE track this fade was seeded from (origin/target scene). */
2894
+ sourceName?: string;
2895
+ /** Human label of the copied preset/sound, shown in the caption. */
2896
+ soundLabel?: string;
2897
+ /** Playback state for this track. */
2898
+ runtimeState: {
2899
+ muted: boolean;
2900
+ solo: boolean;
2901
+ volume: number;
2902
+ pan: number;
2903
+ };
2904
+ }
2905
+ interface FadeTrackRowProps {
2906
+ /** The lone fade track. */
2907
+ layer: FadeLayer;
2908
+ /** 'in' (enters across the loop) or 'out' (leaves across the loop). */
2909
+ direction: FadeDirection;
2910
+ /** How the fade is shaped — shown read-only (volume = level ramp, build = notes). */
2911
+ gesture: FadeGesture;
2912
+ /** Fade position 0..1 — WHERE in time the fade sits. Defaults centered. */
2913
+ sliderPos?: number;
2914
+ /** Toggle mute. */
2915
+ onMuteToggle: () => void;
2916
+ /** Toggle solo. */
2917
+ onSoloToggle: () => void;
2918
+ /** Change the track's volume. */
2919
+ onVolumeChange: (volume: number) => void;
2920
+ /** Change the track's pan. */
2921
+ onPanChange: (pan: number) => void;
2922
+ /** Delete the fade. */
2923
+ onDelete: () => void;
2924
+ /** Move the fade point. Omit to render the slider read-only. */
2925
+ onSliderChange?: (pos: number) => void;
2926
+ /** Shared meter handle (welds a peak meter to the track). */
2927
+ levels?: TrackLevelsHandle;
2928
+ /** Left-border accent. Defaults to transition purple. */
2929
+ accentColor?: string;
2930
+ }
2931
+ declare function FadeTrackRow({ layer, direction, gesture, sliderPos, onMuteToggle, onSoloToggle, onVolumeChange, onPanChange, onDelete, onSliderChange, levels, accentColor, }: FadeTrackRowProps): React.ReactElement;
2932
+
2933
+ /**
2934
+ * FadeModal — "add a fade" picker for a transition scene.
2935
+ *
2936
+ * Shown only inside a `scene_type='transition'` scene. It self-fetches the FROM
2937
+ * (origin) and TO (target) scenes' family tracks and diffs them by role to find
2938
+ * ORPHANS — tracks with no counterpart on the other side:
2939
+ * - origin-only surplus → "Fade out" candidates (the track leaves)
2940
+ * - target-only surplus → "Fade in" candidates (the track enters)
2941
+ * Tracks whose role is matched on both sides are crossfade territory and are NOT
2942
+ * shown here. A source already used in a crossfade or a fade is hidden (via
2943
+ * excludeSourceDbIds).
2944
+ *
2945
+ * The fade GESTURE (volume vs build) is auto-selected from the track's role and
2946
+ * shown read-only — the user does not choose it. On confirm the modal hands the
2947
+ * selection + direction + gesture to `onCreate`, which the panel implements
2948
+ * (create one track, generate a chord-conforming part, copy the sound, apply a
2949
+ * one-sided volume curve). `onCreate` should reject on failure so the modal can
2950
+ * show it and stay open.
2951
+ *
2952
+ * @since SDK 2.28.0
2953
+ */
2954
+
2955
+ /** A picked orphan track handed to `onCreate`. */
2956
+ interface FadeSelection {
2957
+ /** Source track DB id (selector for getTrackSound + seeding the part). */
2958
+ dbId: string;
2959
+ /** Display name (for the row caption). */
2960
+ name: string;
2961
+ /** Musical role of the source track (drives the auto gesture). */
2962
+ role?: string;
2963
+ }
2964
+ interface FadeModalProps {
2965
+ /** Scoped host — the modal calls listSceneFamilyTracks itself. */
2966
+ host: PluginHost;
2967
+ /** Controls visibility (the panel owns open/closed from its header button). */
2968
+ open: boolean;
2969
+ /** DB id of the transition's FROM (origin) scene. */
2970
+ fromSceneId: string;
2971
+ /** DB id of the transition's TO (target) scene. */
2972
+ toSceneId: string;
2973
+ /** Display name for the origin scene heading (optional). */
2974
+ fromSceneName?: string;
2975
+ /** Display name for the target scene heading (optional). */
2976
+ toSceneName?: string;
2977
+ /** Source-track DB ids already used in a crossfade OR a fade — hidden here. */
2978
+ excludeSourceDbIds?: readonly string[];
2979
+ /** Close handler (Escape, backdrop, Cancel, or after a successful create). */
2980
+ onClose: () => void;
2981
+ /** Build the fade. Should reject on failure so the modal shows it. */
2982
+ onCreate: (selection: FadeSelection, direction: FadeDirection, gesture: FadeGesture) => Promise<void>;
2983
+ /** data-testid prefix. */
2984
+ testIdPrefix?: string;
2985
+ }
2986
+ declare function FadeModal({ host, open, fromSceneId, toSceneId, fromSceneName, toSceneName, excludeSourceDbIds, onClose, onCreate, testIdPrefix, }: FadeModalProps): React.ReactElement | null;
2987
+
2775
2988
  /**
2776
2989
  * ImportTrackModal — "import a track from another scene" picker (SDK component).
2777
2990
  *
@@ -3609,7 +3822,7 @@ declare function useSoundHistory(applySound: (trackId: string, descriptor: unkno
3609
3822
  * Registry checks semver.gte(PLUGIN_SDK_VERSION, manifest.minHostVersion)
3610
3823
  * during activation and marks incompatible plugins accordingly.
3611
3824
  */
3612
- declare const PLUGIN_SDK_VERSION = "2.26.0";
3825
+ declare const PLUGIN_SDK_VERSION = "2.28.0";
3613
3826
 
3614
3827
  /**
3615
3828
  * FX Preset Definitions
@@ -3757,4 +3970,4 @@ interface PickTopKOptions {
3757
3970
  */
3758
3971
  declare function pickTopKWeighted<T>(scored: ReadonlyArray<ScoredCandidate<T>>, options?: PickTopKOptions): T | null;
3759
3972
 
3760
- export { type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CreateTrackOptions, type CrossfadeInpaintInput, type CrossfadeLayer, type CrossfadeMeta, CrossfadeModal, type CrossfadeModalProps, type CrossfadePairMeta, type CrossfadeSelection, type CrossfadeSlot, CrossfadeTrackRow, type CrossfadeTrackRowProps, type CrossfadeVolumeCurves, DB_MAX, DB_MIN, DEFAULT_FX_CATEGORY_DETAIL, DEFAULT_FX_DRY_WET, DRAG_DEAD_ZONE, type DeckBoundaryEvent, type DeckBoundaryListener, DownloadPackButton, type DownloadPackButtonProps, type DownloadPackButtonVariant, type DrawerTab, type DrumKit, EMPTY_FX_DETAIL_STATE, EMPTY_FX_STATE, EQUAL_POWER_GAIN, type ExportMidiBundleOptions, type ExportMidiBundleResult, type ExportedPluginData, FX_CATEGORIES, FX_CHAIN_ORDER, FX_DISPLAY_LABELS, FX_ENGINE_PLUGIN_NAMES, FX_PRESET_CONFIGS, type FxCategory, type FxCategoryDetailState, type FxPreset, type FxPresetConfig, type FxPresetData, type FxPresetDataEntry, FxToggleBar, type FxToggleBarProps, GUTTER_W, type GeneratorPlugin, type GeneratorType, type ImportCandidateScene, type ImportCandidateTrack, ImportTrackModal, type ImportTrackModalProps, type InstrumentDescriptor, TrackDrawer as InstrumentDrawer, type TrackDrawerProps as InstrumentDrawerProps, type InstrumentSampler, type InstrumentZone, type LLMCandidate, type LLMContent, type LLMFunctionDeclaration, type LLMGenerationConfig, type LLMGenerationRequest, type LLMGenerationResult, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PeakAnalysis, PianoRollEditor, type PianoRollEditorProps, type PickTopKOptions, type PluginAppTool, type PluginAppToolInputSchema, type PluginAppToolResult, type PluginAudioTextureRequest, type PluginAudioTextureResult, type PluginCapabilities, type PluginChordSegment, type PluginChordTiming, type PluginConcurrentTrackInfo, type PluginCuePoints, type PluginDownloadOptions, PluginError, type PluginErrorCode, type PluginFileDialogOptions, type PluginFxCategoryDetailState, type PluginGenerationContext, type PluginHost, type PluginHttpRequestOptions, type PluginHttpResponse, type PluginManifest, type PluginMidiNote, type PluginPresetData, type PluginPresetInfo, type PluginRegistration, type PluginSampleFilter, type PluginSampleImportResult, type PluginSampleInfo, type PluginSampleTrackInfo, type PluginSceneContext, type PluginSceneInfo, type PluginSettingsSchema, type PluginSettingsStore, type PluginSkill, type PluginSkillInputSchema, type PluginStatus, type PluginStemSplitResult, type PluginStemTrackInfo, type PluginSynthInfo, type PluginTrackFxDetailState, type PluginTrackHandle, type PluginTrackInfo, type PluginTrackLevel, type PluginTrackRuntimeState, type PluginTransportState, type PluginTrimWindow, type PluginUIProps, type PostProcessOptions, RESIZE_HANDLE_PX, ROW_HEIGHT, type ReadMidiClip, type ReadMidiResult, type RecordingChunkFinalizedEvent, type RecordingTargetInfo, type SDKTrackRowProps, SLIDER_UNITY, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SynthesizeCuePointsOptions, TrackDrawer, type TrackDrawerProps, type TrackFxDetailState, type TrackFxState, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackReorderOptions, type UseTrackReorderResult, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asCrossfadeMeta, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, dbToSlider, drawWaveform, formatConcurrentTracks, moveItem, parseCrossfadePairs, pickTopKWeighted, pitchToName, pxToCell, resizeNoteDuration, scorePromptMatch, sliderToDb, synthesizeCuePoints, tokenizePrompt, transposeNotes, useAnySolo, useSceneState, useSoundHistory, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransportPlaying };
3973
+ export { type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CreateTrackOptions, type CrossfadeInpaintInput, type CrossfadeLayer, type CrossfadeMeta, CrossfadeModal, type CrossfadeModalProps, type CrossfadePairMeta, type CrossfadeSelection, type CrossfadeSlot, CrossfadeTrackRow, type CrossfadeTrackRowProps, type CrossfadeVolumeCurves, DB_MAX, DB_MIN, DEFAULT_FX_CATEGORY_DETAIL, DEFAULT_FX_DRY_WET, DRAG_DEAD_ZONE, type DeckBoundaryEvent, type DeckBoundaryListener, DownloadPackButton, type DownloadPackButtonProps, type DownloadPackButtonVariant, type DrawerTab, type DrumKit, EMPTY_FX_DETAIL_STATE, EMPTY_FX_STATE, EQUAL_POWER_GAIN, type ExportMidiBundleOptions, type ExportMidiBundleResult, type ExportedPluginData, FX_CATEGORIES, FX_CHAIN_ORDER, FX_DISPLAY_LABELS, FX_ENGINE_PLUGIN_NAMES, FX_PRESET_CONFIGS, type FadeDirection, type FadeEntry, type FadeGesture, type FadeLayer, type FadeMeta, FadeModal, type FadeModalProps, type FadeSelection, FadeTrackRow, type FadeTrackRowProps, type FxCategory, type FxCategoryDetailState, type FxPreset, type FxPresetConfig, type FxPresetData, type FxPresetDataEntry, FxToggleBar, type FxToggleBarProps, GUTTER_W, type GeneratorPlugin, type GeneratorType, type ImportCandidateScene, type ImportCandidateTrack, ImportTrackModal, type ImportTrackModalProps, type InstrumentDescriptor, TrackDrawer as InstrumentDrawer, type TrackDrawerProps as InstrumentDrawerProps, type InstrumentSampler, type InstrumentZone, type LLMCandidate, type LLMContent, type LLMFunctionDeclaration, type LLMGenerationConfig, type LLMGenerationRequest, type LLMGenerationResult, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PeakAnalysis, PianoRollEditor, type PianoRollEditorProps, type PickTopKOptions, type PluginAppTool, type PluginAppToolInputSchema, type PluginAppToolResult, type PluginAudioTextureRequest, type PluginAudioTextureResult, type PluginCapabilities, type PluginChordSegment, type PluginChordTiming, type PluginConcurrentTrackInfo, type PluginCuePoints, type PluginDownloadOptions, PluginError, type PluginErrorCode, type PluginFileDialogOptions, type PluginFxCategoryDetailState, type PluginGenerationContext, type PluginHost, type PluginHttpRequestOptions, type PluginHttpResponse, type PluginManifest, type PluginMidiNote, type PluginPresetData, type PluginPresetInfo, type PluginRegistration, type PluginSampleFilter, type PluginSampleImportResult, type PluginSampleInfo, type PluginSampleTrackInfo, type PluginSceneContext, type PluginSceneInfo, type PluginSettingsSchema, type PluginSettingsStore, type PluginSkill, type PluginSkillInputSchema, type PluginStatus, type PluginStemSplitResult, type PluginStemTrackInfo, type PluginSynthInfo, type PluginTrackFxDetailState, type PluginTrackHandle, type PluginTrackInfo, type PluginTrackLevel, type PluginTrackRuntimeState, type PluginTransportState, type PluginTrimWindow, type PluginUIProps, type PostProcessOptions, RESIZE_HANDLE_PX, ROW_HEIGHT, type ReadMidiClip, type ReadMidiResult, type RecordingChunkFinalizedEvent, type RecordingTargetInfo, type SDKTrackRowProps, SLIDER_UNITY, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SynthesizeCuePointsOptions, TEXTURAL_ROLES, TrackDrawer, type TrackDrawerProps, type TrackFxDetailState, type TrackFxState, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackReorderOptions, type UseTrackReorderResult, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asCrossfadeMeta, asFadeMeta, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, buildFadeVolumeCurve, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, dbToSlider, defaultFadeGesture, drawWaveform, formatConcurrentTracks, moveItem, parseCrossfadePairs, parseFades, pickTopKWeighted, pitchToName, pxToCell, resizeNoteDuration, scorePromptMatch, sliderToDb, synthesizeCuePoints, tokenizePrompt, transposeNotes, useAnySolo, useSceneState, useSoundHistory, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransportPlaying };
package/dist/index.d.ts CHANGED
@@ -1197,6 +1197,10 @@ interface SceneFamilyTrack {
1197
1197
  name: string;
1198
1198
  /** Musical role if set — used to enforce same-role crossfade pairing. */
1199
1199
  role?: string;
1200
+ /** Generation prompt, when the track was AI-generated. The crossfade picker
1201
+ * shows this as the primary label (users recognise tracks by prompt, not id).
1202
+ * @since SDK 2.27.0 */
1203
+ prompt?: string;
1200
1204
  }
1201
1205
  /**
1202
1206
  * One OTHER scene and its candidate tracks (already type-filtered). Scenes with
@@ -2772,6 +2776,215 @@ interface CrossfadeInpaintInput {
2772
2776
  */
2773
2777
  declare function buildCrossfadeInpaintPrompt(input: CrossfadeInpaintInput): string;
2774
2778
 
2779
+ /**
2780
+ * Fade metadata — family-agnostic types + parsing for transition orphan fades
2781
+ * (synth / drum / instrument panels).
2782
+ *
2783
+ * A fade is a CROSSFADE WITH ONE EMPTY ENDPOINT: a single generated track that
2784
+ * either fades IN (a target-only track entering — `morph(∅ → target)`) or fades
2785
+ * OUT (an origin-only track leaving — `morph(origin → ∅)`) across the transition
2786
+ * loop. It reuses the same generation pipeline (`buildCrossfadeInpaintPrompt`
2787
+ * with one empty endpoint) and the same volume-automation fader as crossfade.
2788
+ *
2789
+ * Stored in scene plugin_data under `track:<dbId>:fade` (ONE entry per track —
2790
+ * unlike crossfade there is no partner / groupId). Kept as a SEPARATE type from
2791
+ * crossfade so the load-bearing "drop a half-broken pair" guard in
2792
+ * `parseCrossfadePairs` stays intact.
2793
+ *
2794
+ * @since SDK 2.28.0
2795
+ */
2796
+
2797
+ /** Which way the lone track fades over the transition. */
2798
+ type FadeDirection = 'in' | 'out';
2799
+ /**
2800
+ * How the fade is shaped:
2801
+ * - `volume` — a one-sided level ramp does the work (DJ-style). Best for
2802
+ * textural/sustained material (pads, atmospheres).
2803
+ * - `build` — the MIDI carries the fade (the inpaint grows sparse→full on the way
2804
+ * in, or dissolves on the way out); the level stays flat. Best for articulated
2805
+ * material (lead, bass, drums, winds, vocals).
2806
+ */
2807
+ type FadeGesture = 'volume' | 'build';
2808
+ /** Per-track fade metadata (one scene-data value per fade track). */
2809
+ interface FadeMeta {
2810
+ direction: FadeDirection;
2811
+ gesture: FadeGesture;
2812
+ /** DB id of the SOURCE track this fade's preset/sample + pattern was seeded from. */
2813
+ sourceTrackDbId: string;
2814
+ /** DB id of the scene the source track lives in (the from/to scene). */
2815
+ sourceSceneId: string;
2816
+ /** Source track display name (shown in the caption). */
2817
+ sourceName: string;
2818
+ /** Copied preset/sample label (shown in the caption). */
2819
+ soundLabel: string;
2820
+ /** Fade position 0..1 — WHERE in time the fade midpoint sits. */
2821
+ sliderPos: number;
2822
+ }
2823
+ /** A fade entry resolved from scene data: the fade track's dbId + its metadata. */
2824
+ interface FadeEntry {
2825
+ dbId: string;
2826
+ meta: FadeMeta;
2827
+ }
2828
+ /** Narrow an unknown scene-data value to FadeMeta (defensive — survives partial blobs). */
2829
+ declare function asFadeMeta(val: unknown): FadeMeta | null;
2830
+ /**
2831
+ * Scan all `track:<dbId>:fade` keys in a scene's plugin_data and return one entry
2832
+ * per valid fade. Unlike crossfade there is no grouping or both-present gate — a
2833
+ * fade is intrinsically a single track.
2834
+ */
2835
+ declare function parseFades(sceneData: Record<string, unknown>): FadeEntry[];
2836
+ /**
2837
+ * Build a ONE-sided volume-automation curve for a fade over `bars` at `bpm`.
2838
+ *
2839
+ * - `gesture === 'build'` → flat at unity (0 dB). The compositional build in the
2840
+ * MIDI carries the fade; layering a volume ramp on top would double-fade.
2841
+ * - `gesture === 'volume'` → an equal-power ramp identical to ONE half of
2842
+ * `buildCrossfadeVolumeCurves`: fade-out ≡ its `origin` curve (unity→floor),
2843
+ * fade-in ≡ its `target` curve (floor→unity). `sliderPos` sets WHERE the −3 dB
2844
+ * midpoint sits in time.
2845
+ *
2846
+ * Points span [0, durationSeconds] so the engine re-reads them each loop. Returns
2847
+ * dB points for `host.setTrackVolumeAutomation`.
2848
+ *
2849
+ * @since SDK 2.28.0
2850
+ */
2851
+ declare function buildFadeVolumeCurve(bars: number, bpm: number, direction: FadeDirection, sliderPos: number, gesture: FadeGesture, steps?: number): VolumeAutomationPoint[];
2852
+ /**
2853
+ * Roles whose fades default to a `volume` (level) ramp — sustained/textural
2854
+ * material that enters/leaves by level in real productions. Everything else
2855
+ * defaults to `build` (the notes carry the fade).
2856
+ *
2857
+ * This is a UI default heuristic over role tokens, NOT the canonical role list
2858
+ * (that lives in the app's instrument-classification + `host.getValidRoles()`).
2859
+ * There is no textural↔articulated axis in the taxonomy, so this small curated
2860
+ * subset lives next to its consumer (the fade modal/panels).
2861
+ *
2862
+ * @since SDK 2.28.0
2863
+ */
2864
+ declare const TEXTURAL_ROLES: ReadonlySet<string>;
2865
+ /** Pick the default fade gesture for a track's role (textural → volume, else build). */
2866
+ declare function defaultFadeGesture(role: string | null | undefined): FadeGesture;
2867
+
2868
+ /**
2869
+ * FadeTrackRow — a transition "fade track": a single locked TrackRow with a
2870
+ * direction badge (Fade in / Fade out) and a one-sided fade slider.
2871
+ *
2872
+ * A fade is a crossfade with one empty endpoint — a lone generated track that
2873
+ * either enters (fade in, for a target-only track) or leaves (fade out, for an
2874
+ * origin-only track) across the transition loop. Like a crossfade layer, the
2875
+ * sound/generation controls are omitted (the SDK TrackRow is "controlled by
2876
+ * omission"): no shuffle / Create / preset-pick / FX / drawer / inner-delete.
2877
+ * What remains: per-track volume/pan/mute/solo and a single delete.
2878
+ *
2879
+ * The slider represents WHERE in the loop the fade sits (earlier ↔ later). Omit
2880
+ * `onSliderChange` to render it read-only.
2881
+ *
2882
+ * @since SDK 2.28.0
2883
+ */
2884
+
2885
+ /** The single (engine track) layer of a fade. */
2886
+ interface FadeLayer {
2887
+ /** Engine track id of this fade's track (also the meter key). */
2888
+ trackId: string;
2889
+ /** Display name of this fade's (newly created) track. */
2890
+ name: string;
2891
+ /** Musical role (drives the auto gesture). */
2892
+ role?: string;
2893
+ /** Name of the SOURCE track this fade was seeded from (origin/target scene). */
2894
+ sourceName?: string;
2895
+ /** Human label of the copied preset/sound, shown in the caption. */
2896
+ soundLabel?: string;
2897
+ /** Playback state for this track. */
2898
+ runtimeState: {
2899
+ muted: boolean;
2900
+ solo: boolean;
2901
+ volume: number;
2902
+ pan: number;
2903
+ };
2904
+ }
2905
+ interface FadeTrackRowProps {
2906
+ /** The lone fade track. */
2907
+ layer: FadeLayer;
2908
+ /** 'in' (enters across the loop) or 'out' (leaves across the loop). */
2909
+ direction: FadeDirection;
2910
+ /** How the fade is shaped — shown read-only (volume = level ramp, build = notes). */
2911
+ gesture: FadeGesture;
2912
+ /** Fade position 0..1 — WHERE in time the fade sits. Defaults centered. */
2913
+ sliderPos?: number;
2914
+ /** Toggle mute. */
2915
+ onMuteToggle: () => void;
2916
+ /** Toggle solo. */
2917
+ onSoloToggle: () => void;
2918
+ /** Change the track's volume. */
2919
+ onVolumeChange: (volume: number) => void;
2920
+ /** Change the track's pan. */
2921
+ onPanChange: (pan: number) => void;
2922
+ /** Delete the fade. */
2923
+ onDelete: () => void;
2924
+ /** Move the fade point. Omit to render the slider read-only. */
2925
+ onSliderChange?: (pos: number) => void;
2926
+ /** Shared meter handle (welds a peak meter to the track). */
2927
+ levels?: TrackLevelsHandle;
2928
+ /** Left-border accent. Defaults to transition purple. */
2929
+ accentColor?: string;
2930
+ }
2931
+ declare function FadeTrackRow({ layer, direction, gesture, sliderPos, onMuteToggle, onSoloToggle, onVolumeChange, onPanChange, onDelete, onSliderChange, levels, accentColor, }: FadeTrackRowProps): React.ReactElement;
2932
+
2933
+ /**
2934
+ * FadeModal — "add a fade" picker for a transition scene.
2935
+ *
2936
+ * Shown only inside a `scene_type='transition'` scene. It self-fetches the FROM
2937
+ * (origin) and TO (target) scenes' family tracks and diffs them by role to find
2938
+ * ORPHANS — tracks with no counterpart on the other side:
2939
+ * - origin-only surplus → "Fade out" candidates (the track leaves)
2940
+ * - target-only surplus → "Fade in" candidates (the track enters)
2941
+ * Tracks whose role is matched on both sides are crossfade territory and are NOT
2942
+ * shown here. A source already used in a crossfade or a fade is hidden (via
2943
+ * excludeSourceDbIds).
2944
+ *
2945
+ * The fade GESTURE (volume vs build) is auto-selected from the track's role and
2946
+ * shown read-only — the user does not choose it. On confirm the modal hands the
2947
+ * selection + direction + gesture to `onCreate`, which the panel implements
2948
+ * (create one track, generate a chord-conforming part, copy the sound, apply a
2949
+ * one-sided volume curve). `onCreate` should reject on failure so the modal can
2950
+ * show it and stay open.
2951
+ *
2952
+ * @since SDK 2.28.0
2953
+ */
2954
+
2955
+ /** A picked orphan track handed to `onCreate`. */
2956
+ interface FadeSelection {
2957
+ /** Source track DB id (selector for getTrackSound + seeding the part). */
2958
+ dbId: string;
2959
+ /** Display name (for the row caption). */
2960
+ name: string;
2961
+ /** Musical role of the source track (drives the auto gesture). */
2962
+ role?: string;
2963
+ }
2964
+ interface FadeModalProps {
2965
+ /** Scoped host — the modal calls listSceneFamilyTracks itself. */
2966
+ host: PluginHost;
2967
+ /** Controls visibility (the panel owns open/closed from its header button). */
2968
+ open: boolean;
2969
+ /** DB id of the transition's FROM (origin) scene. */
2970
+ fromSceneId: string;
2971
+ /** DB id of the transition's TO (target) scene. */
2972
+ toSceneId: string;
2973
+ /** Display name for the origin scene heading (optional). */
2974
+ fromSceneName?: string;
2975
+ /** Display name for the target scene heading (optional). */
2976
+ toSceneName?: string;
2977
+ /** Source-track DB ids already used in a crossfade OR a fade — hidden here. */
2978
+ excludeSourceDbIds?: readonly string[];
2979
+ /** Close handler (Escape, backdrop, Cancel, or after a successful create). */
2980
+ onClose: () => void;
2981
+ /** Build the fade. Should reject on failure so the modal shows it. */
2982
+ onCreate: (selection: FadeSelection, direction: FadeDirection, gesture: FadeGesture) => Promise<void>;
2983
+ /** data-testid prefix. */
2984
+ testIdPrefix?: string;
2985
+ }
2986
+ declare function FadeModal({ host, open, fromSceneId, toSceneId, fromSceneName, toSceneName, excludeSourceDbIds, onClose, onCreate, testIdPrefix, }: FadeModalProps): React.ReactElement | null;
2987
+
2775
2988
  /**
2776
2989
  * ImportTrackModal — "import a track from another scene" picker (SDK component).
2777
2990
  *
@@ -3609,7 +3822,7 @@ declare function useSoundHistory(applySound: (trackId: string, descriptor: unkno
3609
3822
  * Registry checks semver.gte(PLUGIN_SDK_VERSION, manifest.minHostVersion)
3610
3823
  * during activation and marks incompatible plugins accordingly.
3611
3824
  */
3612
- declare const PLUGIN_SDK_VERSION = "2.26.0";
3825
+ declare const PLUGIN_SDK_VERSION = "2.28.0";
3613
3826
 
3614
3827
  /**
3615
3828
  * FX Preset Definitions
@@ -3757,4 +3970,4 @@ interface PickTopKOptions {
3757
3970
  */
3758
3971
  declare function pickTopKWeighted<T>(scored: ReadonlyArray<ScoredCandidate<T>>, options?: PickTopKOptions): T | null;
3759
3972
 
3760
- export { type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CreateTrackOptions, type CrossfadeInpaintInput, type CrossfadeLayer, type CrossfadeMeta, CrossfadeModal, type CrossfadeModalProps, type CrossfadePairMeta, type CrossfadeSelection, type CrossfadeSlot, CrossfadeTrackRow, type CrossfadeTrackRowProps, type CrossfadeVolumeCurves, DB_MAX, DB_MIN, DEFAULT_FX_CATEGORY_DETAIL, DEFAULT_FX_DRY_WET, DRAG_DEAD_ZONE, type DeckBoundaryEvent, type DeckBoundaryListener, DownloadPackButton, type DownloadPackButtonProps, type DownloadPackButtonVariant, type DrawerTab, type DrumKit, EMPTY_FX_DETAIL_STATE, EMPTY_FX_STATE, EQUAL_POWER_GAIN, type ExportMidiBundleOptions, type ExportMidiBundleResult, type ExportedPluginData, FX_CATEGORIES, FX_CHAIN_ORDER, FX_DISPLAY_LABELS, FX_ENGINE_PLUGIN_NAMES, FX_PRESET_CONFIGS, type FxCategory, type FxCategoryDetailState, type FxPreset, type FxPresetConfig, type FxPresetData, type FxPresetDataEntry, FxToggleBar, type FxToggleBarProps, GUTTER_W, type GeneratorPlugin, type GeneratorType, type ImportCandidateScene, type ImportCandidateTrack, ImportTrackModal, type ImportTrackModalProps, type InstrumentDescriptor, TrackDrawer as InstrumentDrawer, type TrackDrawerProps as InstrumentDrawerProps, type InstrumentSampler, type InstrumentZone, type LLMCandidate, type LLMContent, type LLMFunctionDeclaration, type LLMGenerationConfig, type LLMGenerationRequest, type LLMGenerationResult, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PeakAnalysis, PianoRollEditor, type PianoRollEditorProps, type PickTopKOptions, type PluginAppTool, type PluginAppToolInputSchema, type PluginAppToolResult, type PluginAudioTextureRequest, type PluginAudioTextureResult, type PluginCapabilities, type PluginChordSegment, type PluginChordTiming, type PluginConcurrentTrackInfo, type PluginCuePoints, type PluginDownloadOptions, PluginError, type PluginErrorCode, type PluginFileDialogOptions, type PluginFxCategoryDetailState, type PluginGenerationContext, type PluginHost, type PluginHttpRequestOptions, type PluginHttpResponse, type PluginManifest, type PluginMidiNote, type PluginPresetData, type PluginPresetInfo, type PluginRegistration, type PluginSampleFilter, type PluginSampleImportResult, type PluginSampleInfo, type PluginSampleTrackInfo, type PluginSceneContext, type PluginSceneInfo, type PluginSettingsSchema, type PluginSettingsStore, type PluginSkill, type PluginSkillInputSchema, type PluginStatus, type PluginStemSplitResult, type PluginStemTrackInfo, type PluginSynthInfo, type PluginTrackFxDetailState, type PluginTrackHandle, type PluginTrackInfo, type PluginTrackLevel, type PluginTrackRuntimeState, type PluginTransportState, type PluginTrimWindow, type PluginUIProps, type PostProcessOptions, RESIZE_HANDLE_PX, ROW_HEIGHT, type ReadMidiClip, type ReadMidiResult, type RecordingChunkFinalizedEvent, type RecordingTargetInfo, type SDKTrackRowProps, SLIDER_UNITY, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SynthesizeCuePointsOptions, TrackDrawer, type TrackDrawerProps, type TrackFxDetailState, type TrackFxState, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackReorderOptions, type UseTrackReorderResult, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asCrossfadeMeta, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, dbToSlider, drawWaveform, formatConcurrentTracks, moveItem, parseCrossfadePairs, pickTopKWeighted, pitchToName, pxToCell, resizeNoteDuration, scorePromptMatch, sliderToDb, synthesizeCuePoints, tokenizePrompt, transposeNotes, useAnySolo, useSceneState, useSoundHistory, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransportPlaying };
3973
+ export { type AudioInputDevice, type BulkAddPlaceholderTrack, type ComposeProgressEvent, type ComposeProgressListener, type ComposeSceneOptions, type ComposeSceneResult, ConfirmDialog, type ConfirmDialogProps, type CreateTrackOptions, type CrossfadeInpaintInput, type CrossfadeLayer, type CrossfadeMeta, CrossfadeModal, type CrossfadeModalProps, type CrossfadePairMeta, type CrossfadeSelection, type CrossfadeSlot, CrossfadeTrackRow, type CrossfadeTrackRowProps, type CrossfadeVolumeCurves, DB_MAX, DB_MIN, DEFAULT_FX_CATEGORY_DETAIL, DEFAULT_FX_DRY_WET, DRAG_DEAD_ZONE, type DeckBoundaryEvent, type DeckBoundaryListener, DownloadPackButton, type DownloadPackButtonProps, type DownloadPackButtonVariant, type DrawerTab, type DrumKit, EMPTY_FX_DETAIL_STATE, EMPTY_FX_STATE, EQUAL_POWER_GAIN, type ExportMidiBundleOptions, type ExportMidiBundleResult, type ExportedPluginData, FX_CATEGORIES, FX_CHAIN_ORDER, FX_DISPLAY_LABELS, FX_ENGINE_PLUGIN_NAMES, FX_PRESET_CONFIGS, type FadeDirection, type FadeEntry, type FadeGesture, type FadeLayer, type FadeMeta, FadeModal, type FadeModalProps, type FadeSelection, FadeTrackRow, type FadeTrackRowProps, type FxCategory, type FxCategoryDetailState, type FxPreset, type FxPresetConfig, type FxPresetData, type FxPresetDataEntry, FxToggleBar, type FxToggleBarProps, GUTTER_W, type GeneratorPlugin, type GeneratorType, type ImportCandidateScene, type ImportCandidateTrack, ImportTrackModal, type ImportTrackModalProps, type InstrumentDescriptor, TrackDrawer as InstrumentDrawer, type TrackDrawerProps as InstrumentDrawerProps, type InstrumentSampler, type InstrumentZone, type LLMCandidate, type LLMContent, type LLMFunctionDeclaration, type LLMGenerationConfig, type LLMGenerationRequest, type LLMGenerationResult, type LLMPart, type LLMSystemInstruction, type LLMTool, type LLMToolUseRequest, type LLMToolUseResponse, type LLMUsageMetadata, LevelMeter, type LevelMeterProps, type ListAudioFilesOptions, type ListImportableTracksOptions, type MidiClipData, type MidiWriteResult, type MixInterpolation, Modal, type ModalProps, type MusicalContext, OffsetScrubber, type OffsetScrubberProps, PLUGIN_SDK_VERSION, PX_PER_BEAT, PanSlider, type PeakAnalysis, PianoRollEditor, type PianoRollEditorProps, type PickTopKOptions, type PluginAppTool, type PluginAppToolInputSchema, type PluginAppToolResult, type PluginAudioTextureRequest, type PluginAudioTextureResult, type PluginCapabilities, type PluginChordSegment, type PluginChordTiming, type PluginConcurrentTrackInfo, type PluginCuePoints, type PluginDownloadOptions, PluginError, type PluginErrorCode, type PluginFileDialogOptions, type PluginFxCategoryDetailState, type PluginGenerationContext, type PluginHost, type PluginHttpRequestOptions, type PluginHttpResponse, type PluginManifest, type PluginMidiNote, type PluginPresetData, type PluginPresetInfo, type PluginRegistration, type PluginSampleFilter, type PluginSampleImportResult, type PluginSampleInfo, type PluginSampleTrackInfo, type PluginSceneContext, type PluginSceneInfo, type PluginSettingsSchema, type PluginSettingsStore, type PluginSkill, type PluginSkillInputSchema, type PluginStatus, type PluginStemSplitResult, type PluginStemTrackInfo, type PluginSynthInfo, type PluginTrackFxDetailState, type PluginTrackHandle, type PluginTrackInfo, type PluginTrackLevel, type PluginTrackRuntimeState, type PluginTransportState, type PluginTrimWindow, type PluginUIProps, type PostProcessOptions, RESIZE_HANDLE_PX, ROW_HEIGHT, type ReadMidiClip, type ReadMidiResult, type RecordingChunkFinalizedEvent, type RecordingTargetInfo, type SDKTrackRowProps, SLIDER_UNITY, SamplePackCTACard, type SamplePackCTACardProps, type SamplePackCTACardStatus, type SamplePackCardInfo, type SavePluginPresetOptions, type SceneChangeListener, type SceneFamilyTrack, type ScoredCandidate, ScrollingWaveform, type ScrollingWaveformProps, type SettingDefinition, type ShufflePresetResult, SorceryProgressBar, type SoundHistoryEntry, type StemType, type SynthesizeCuePointsOptions, TEXTURAL_ROLES, TrackDrawer, type TrackDrawerProps, type TrackFxDetailState, type TrackFxState, type TrackLevelsHandle, TrackMeterStrip, type TrackMeterStripProps, type TrackMeterView, TrackRow, type TrackRowDragProps, type TrackSoundHistory, type TrackSoundSnapshot, type TrackStateChangeListener, type TransportEvent, type TransportEventListener, type UnsubscribeFn, type UseSoundHistoryOptions, type UseSoundHistoryResult, type UseTrackReorderOptions, type UseTrackReorderResult, type VolumeAutomationPoint, VolumeSlider, type WaveformPeaks, WaveformView, type WaveformViewProps, analyzeWavPeak, asCrossfadeMeta, asFadeMeta, buildCrossfadeInpaintPrompt, buildCrossfadeVolumeCurves, buildFadeVolumeCurve, calculateTimeBasedTarget, cellToPx, centerScrollTop, computePeaks, dbToSlider, defaultFadeGesture, drawWaveform, formatConcurrentTracks, moveItem, parseCrossfadePairs, parseFades, pickTopKWeighted, pitchToName, pxToCell, resizeNoteDuration, scorePromptMatch, sliderToDb, synthesizeCuePoints, tokenizePrompt, transposeNotes, useAnySolo, useSceneState, useSoundHistory, useTrackLevel, useTrackLevels, useTrackMeter, useTrackReorder, useTransportPlaying };