@imperosoft/cris-webui-components 1.2.1 → 1.4.0

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
@@ -583,6 +583,12 @@ interface CrisViewDspClasses {
583
583
  presetPressed?: string;
584
584
  /** "Saved" flash overlay. */
585
585
  savedFlash?: string;
586
+ /** Group-name header above a section of faders. */
587
+ groupHeader?: string;
588
+ /** Mixer display-group chrome (top input tier). */
589
+ mixerGroup?: string;
590
+ /** Mixer display-group chrome (left output tier; rendered with vertical text). */
591
+ mixerGroupV?: string;
586
592
  /** Strip column. */
587
593
  strip?: string;
588
594
  /** Strip label. */
@@ -599,6 +605,8 @@ interface CrisViewDspClasses {
599
605
  mute?: string;
600
606
  /** Added to the mute button when muted. */
601
607
  muteActive?: string;
608
+ /** Opaque backplate behind the sticky header/label bands (seam guard during drag). */
609
+ mixerBackplate?: string;
602
610
  /** Mixer fixed corner. */
603
611
  mixerCorner?: string;
604
612
  /** Mixer sticky header/label chrome. */
@@ -659,6 +667,41 @@ interface CrisViewDspFullProps {
659
667
  }
660
668
  declare function CrisViewDspFull({ oid, presets, skipShowInput, skipShowOutput, skipCrosspoints, sustainedPresetFeedback, classes, icons, className, initialTab, }: CrisViewDspFullProps): react_jsx_runtime.JSX.Element;
661
669
 
670
+ /**
671
+ * Shared prop shape for the standalone, self-subscribing DSP view pieces
672
+ * (CrisViewDspInputs / Outputs / Mixer / Presets / Channels). Each piece accepts
673
+ * styling overrides identical to CrisViewDspFull and an extra root className.
674
+ */
675
+
676
+ interface DspStylingProps {
677
+ /** Class slot overrides (see CrisViewDspClasses); unset slots use the defaults. */
678
+ classes?: CrisViewDspClasses;
679
+ /** Icon overrides (see CrisViewDspIcons). */
680
+ icons?: CrisViewDspIcons;
681
+ /** Appended to the wrapper root. */
682
+ className?: string;
683
+ }
684
+
685
+ interface CrisViewDspInputsProps extends DspStylingProps {
686
+ /** OID of the DSP custom object. */
687
+ oid: string;
688
+ /** Input channel ids to hide. */
689
+ skip?: number[];
690
+ /** Message shown when there are no inputs. Default 'Sin entradas'. */
691
+ emptyLabel?: string;
692
+ }
693
+ declare function CrisViewDspInputs({ oid, skip, emptyLabel, classes, icons, className, }: CrisViewDspInputsProps): react_jsx_runtime.JSX.Element;
694
+
695
+ interface CrisViewDspOutputsProps extends DspStylingProps {
696
+ /** OID of the DSP custom object. */
697
+ oid: string;
698
+ /** Output channel ids to hide. */
699
+ skip?: number[];
700
+ /** Message shown when there are no outputs. Default 'Sin salidas'. */
701
+ emptyLabel?: string;
702
+ }
703
+ declare function CrisViewDspOutputs({ oid, skip, emptyLabel, classes, icons, className, }: CrisViewDspOutputsProps): react_jsx_runtime.JSX.Element;
704
+
662
705
  /**
663
706
  * DSP custom-object protocol types (the shape exposed by a DSP backend's custom
664
707
  * object, e.g. `DSP1_API` / Dsp.CrisApi.cs). The dynamic DSP view is fed entirely
@@ -693,6 +736,20 @@ interface DspLinks {
693
736
  ip?: DspLinkedGroup[];
694
737
  op?: DspLinkedGroup[];
695
738
  }
739
+ /**
740
+ * Display group (backend `dg`). A higher-level, presentation-only grouping of
741
+ * channels, orthogonal to linked groups (`ln`) and able to overlap them. `id` is
742
+ * the group NAME (e.g. "Mic Diadema"); `ch` its member channel ids. Channels carry
743
+ * a short `lb` ("1", "L", "17") and the group supplies the prefix.
744
+ */
745
+ interface DspDisplayGroup {
746
+ id: string;
747
+ ch: number[];
748
+ }
749
+ interface DspDisplayGroups {
750
+ ip?: DspDisplayGroup[];
751
+ op?: DspDisplayGroup[];
752
+ }
696
753
  /** Active DSP preset. dv = recovered device preset, lc = local preset. */
697
754
  interface DspPreset {
698
755
  dv?: number;
@@ -705,6 +762,8 @@ interface DspStatus {
705
762
  ip: DspIo[];
706
763
  op: DspOut[];
707
764
  ln?: DspLinks;
765
+ /** Display groups (presentation grouping/ordering of channels). */
766
+ dg?: DspDisplayGroups;
708
767
  pr?: DspPreset;
709
768
  ps?: DspPreset;
710
769
  }
@@ -755,6 +814,43 @@ type DspStrip = {
755
814
  declare function collapseStrips(channels: DspIo[], links: DspLinkedGroup[] | undefined): DspStrip[];
756
815
  /** Extracts the linked groups from the status for a given direction. */
757
816
  declare function linksFor(ln: DspLinks | undefined, io: DspIoDir): DspLinkedGroup[] | undefined;
817
+ /** Extracts the display groups from the status for a given direction. */
818
+ declare function groupsFor(dg: DspDisplayGroups | undefined, io: DspIoDir): DspDisplayGroup[] | undefined;
819
+ /** A section of the Inputs/Outputs page: a display group (named) or the trailing ungrouped channels. */
820
+ interface DspSection {
821
+ /** Display-group name (header). Absent for the trailing ungrouped section. */
822
+ groupName?: string;
823
+ strips: DspStrip[];
824
+ }
825
+ /**
826
+ * Builds the ordered, sectioned fader layout. With no `groups`, returns a single
827
+ * header-less section equal to `collapseStrips` (current behavior). Otherwise emits
828
+ * one section per display group (groups in order, channels in group order, linked
829
+ * pairs collapsed), then a trailing header-less section for every channel in no
830
+ * group, in status-array order.
831
+ */
832
+ declare function buildIoSections(channels: DspIo[], links: DspLinkedGroup[] | undefined, groups: DspDisplayGroup[] | undefined): DspSection[];
833
+ /**
834
+ * Mixer axis with up to three tiers per channel: display group (tier 1, dg),
835
+ * linked group (tier 2, ln), channel name (tier 3). Channels are ordered by dg
836
+ * (groups in order, then ungrouped in array order); every channel keeps its own
837
+ * column. `*Start`/`*Span` mark the first cell of a spanning run. With no `groups`,
838
+ * only the link + channel tiers are populated (same labels as `buildMixerAxis`).
839
+ */
840
+ interface MixerAxisItem3 {
841
+ id: number;
842
+ /** Tier 3: own channel name. */
843
+ channelLabel: string;
844
+ /** Tier 2: linked-group label (present on every member of a consecutive run). */
845
+ linkCommon?: string;
846
+ linkStart?: boolean;
847
+ linkSpan?: number;
848
+ /** Tier 1: display-group name (present on every member of the group). */
849
+ groupName?: string;
850
+ groupStart?: boolean;
851
+ groupSpan?: number;
852
+ }
853
+ declare function buildMixerAxisGrouped(channels: DspIo[], links: DspLinkedGroup[] | undefined, groups: DspDisplayGroup[] | undefined): MixerAxisItem3[];
758
854
  /**
759
855
  * Mixer axis (one entry per channel, in order). For linked groups whose channels
760
856
  * are CONSECUTIVE (and therefore adjacent in the grid) it adds the info to paint a
@@ -774,6 +870,88 @@ interface MixerAxisItem {
774
870
  }
775
871
  declare function buildMixerAxis(channels: DspIo[], links: DspLinkedGroup[] | undefined): MixerAxisItem[];
776
872
 
873
+ /** Track sizes + derived sticky offsets / z-order of the mixer grid. Passed to the
874
+ * header render-props so a custom header lands on the same tracks as the cells. */
875
+ interface MixerGeometry {
876
+ /** Output display-group column width (left, vertical text). */
877
+ groupW: string;
878
+ /** Output linked-group column width. */
879
+ commonW: string;
880
+ /** Output channel-name column width. groupW+commonW+chanW = label-band width. */
881
+ chanW: string;
882
+ /** Input display-group header row height (top). */
883
+ groupH: string;
884
+ /** Input linked-group header row height. */
885
+ commonH: string;
886
+ /** Input channel-name header row height (toward cells). */
887
+ chanH: string;
888
+ /** Crosspoint cell width. */
889
+ cellW: string;
890
+ /** Output row height. */
891
+ rowH: string;
892
+ /** Sticky `top` of the input link tier (row 2). */
893
+ topLink: string;
894
+ /** Sticky `top` of the input channel tier (row 3). */
895
+ topChan: string;
896
+ /** Sticky `left` of the output link tier (col 2). */
897
+ leftLink: string;
898
+ /** Sticky `left` of the output channel tier (col 3). */
899
+ leftChan: string;
900
+ /** z-order: corner > group > link > chan > cells. */
901
+ z: {
902
+ corner: number;
903
+ group: number;
904
+ link: number;
905
+ chan: number;
906
+ };
907
+ /** Column count = inputs.length; first input column is grid column 4. */
908
+ inputCount: number;
909
+ /** Row count = outputs.length; first output row is grid row 4. */
910
+ outputCount: number;
911
+ }
912
+ /** Caller overrides for the eight grid track sizes (derived offsets are recomputed). */
913
+ type MixerGeometryOverrides = Partial<Pick<MixerGeometry, 'groupW' | 'commonW' | 'chanW' | 'groupH' | 'commonH' | 'chanH' | 'cellW' | 'rowH'>>;
914
+
915
+ interface CrisViewDspMixerProps extends DspStylingProps {
916
+ /** OID of the DSP custom object. */
917
+ oid: string;
918
+ /** Track-size overrides; the rest of the geometry keeps the em defaults. */
919
+ geometry?: MixerGeometryOverrides;
920
+ /** Custom top band (rows 1–3 over the input columns). Default: text tiers. */
921
+ renderInputHeader?: (inAxis: MixerAxisItem3[], geom: MixerGeometry) => ReactNode;
922
+ /** Custom left band (cols 1–3 over the output rows). Default: text tiers. */
923
+ renderOutputHeader?: (outAxis: MixerAxisItem3[], geom: MixerGeometry) => ReactNode;
924
+ /** Custom fixed-corner content. Default: "OUT \ IN". */
925
+ renderCorner?: (geom: MixerGeometry) => ReactNode;
926
+ }
927
+ declare function CrisViewDspMixer({ oid, classes, icons, className, geometry, renderInputHeader, renderOutputHeader, renderCorner, }: CrisViewDspMixerProps): react_jsx_runtime.JSX.Element;
928
+
929
+ interface CrisViewDspPresetsProps extends Pick<DspStylingProps, 'classes' | 'className'> {
930
+ /** OID of the DSP custom object. */
931
+ oid: string;
932
+ /** Presets to show (the backend does not dictate the count). */
933
+ presets: CrisViewDspPreset[];
934
+ /** Keep the active preset highlighted after release. Default true. */
935
+ sustainedPresetFeedback?: boolean;
936
+ }
937
+ declare function CrisViewDspPresets({ oid, presets, sustainedPresetFeedback, classes, className, }: CrisViewDspPresetsProps): react_jsx_runtime.JSX.Element;
938
+
939
+ interface CrisViewDspChannelsProps extends DspStylingProps {
940
+ /** OID of the DSP custom object. */
941
+ oid: string;
942
+ /** Direction: 'in' (inputs) or 'out' (outputs). */
943
+ io: DspIoDir;
944
+ /** Channel ids to show. Omit → all channels of this io. */
945
+ show?: number[];
946
+ /** Wrap in a horizontal-scroll container instead of a plain flex row. Default false. */
947
+ scroll?: boolean;
948
+ /** Show the empty-state message when no channels match. Default false (render nothing). */
949
+ showEmpty?: boolean;
950
+ /** Empty-state message (only when showEmpty). */
951
+ emptyLabel?: string;
952
+ }
953
+ declare function CrisViewDspChannels({ oid, io, show, scroll, showEmpty, emptyLabel, classes, icons, className, }: CrisViewDspChannelsProps): react_jsx_runtime.JSX.Element | null;
954
+
777
955
  /**
778
956
  * Icon configuration and utilities for CRIS components
779
957
  *
@@ -824,4 +1002,4 @@ declare function getIconUrl(name: string): string;
824
1002
  */
825
1003
  declare function getIconFilter(active: boolean): string | undefined;
826
1004
 
827
- export { type CommIndicatorState, type CommKind, CrisButton, type CrisButtonProps, CrisCoDebug, type CrisCoDebugProps, CrisCoList, type CrisCoListProps, CrisCoMatrixListsTie, type CrisCoMatrixListsTieProps, CrisGauge, type CrisGaugeProps, CrisOfflinePage, type CrisOfflinePageProps, CrisSlider, type CrisSliderProps, CrisSpinner, type CrisSpinnerProps, CrisText, CrisTextInput, type CrisTextInputProps, type CrisTextProps, CrisViewComm, type CrisViewCommClasses, type CrisViewCommIcons, type CrisViewCommProps, type CrisViewDspClasses, CrisViewDspFull, type CrisViewDspFullProps, type CrisViewDspIcons, type CrisViewDspPreset, type DebugModule, type DeviceComm, type DspIo, type DspIoDir, type DspLinkedGroup, type DspLinks, type DspOut, type DspPreset, type DspStatus, type DspStrip, type IconConfig, type ListItem, type ListStatus, type MatrixItem, type MatrixStatus, type MixerAxisItem, type SpinnerSpeed, buildMixerAxis, clampLevel, collapseStrips, commIndicators, configureIcons, getIconConfig, getIconFilter, getIconUrl, levelToPercent, linksFor, normalizeLinked };
1005
+ export { type CommIndicatorState, type CommKind, CrisButton, type CrisButtonProps, CrisCoDebug, type CrisCoDebugProps, CrisCoList, type CrisCoListProps, CrisCoMatrixListsTie, type CrisCoMatrixListsTieProps, CrisGauge, type CrisGaugeProps, CrisOfflinePage, type CrisOfflinePageProps, CrisSlider, type CrisSliderProps, CrisSpinner, type CrisSpinnerProps, CrisText, CrisTextInput, type CrisTextInputProps, type CrisTextProps, CrisViewComm, type CrisViewCommClasses, type CrisViewCommIcons, type CrisViewCommProps, CrisViewDspChannels, type CrisViewDspChannelsProps, type CrisViewDspClasses, CrisViewDspFull, type CrisViewDspFullProps, type CrisViewDspIcons, CrisViewDspInputs, type CrisViewDspInputsProps, CrisViewDspMixer, type CrisViewDspMixerProps, CrisViewDspOutputs, type CrisViewDspOutputsProps, type CrisViewDspPreset, CrisViewDspPresets, type CrisViewDspPresetsProps, type DebugModule, type DeviceComm, type DspDisplayGroup, type DspDisplayGroups, type DspIo, type DspIoDir, type DspLinkedGroup, type DspLinks, type DspOut, type DspPreset, type DspSection, type DspStatus, type DspStrip, type DspStylingProps, type IconConfig, type ListItem, type ListStatus, type MatrixItem, type MatrixStatus, type MixerAxisItem, type MixerAxisItem3, type MixerGeometry, type MixerGeometryOverrides, type SpinnerSpeed, buildIoSections, buildMixerAxis, buildMixerAxisGrouped, clampLevel, collapseStrips, commIndicators, configureIcons, getIconConfig, getIconFilter, getIconUrl, groupsFor, levelToPercent, linksFor, normalizeLinked };
package/dist/index.d.ts CHANGED
@@ -583,6 +583,12 @@ interface CrisViewDspClasses {
583
583
  presetPressed?: string;
584
584
  /** "Saved" flash overlay. */
585
585
  savedFlash?: string;
586
+ /** Group-name header above a section of faders. */
587
+ groupHeader?: string;
588
+ /** Mixer display-group chrome (top input tier). */
589
+ mixerGroup?: string;
590
+ /** Mixer display-group chrome (left output tier; rendered with vertical text). */
591
+ mixerGroupV?: string;
586
592
  /** Strip column. */
587
593
  strip?: string;
588
594
  /** Strip label. */
@@ -599,6 +605,8 @@ interface CrisViewDspClasses {
599
605
  mute?: string;
600
606
  /** Added to the mute button when muted. */
601
607
  muteActive?: string;
608
+ /** Opaque backplate behind the sticky header/label bands (seam guard during drag). */
609
+ mixerBackplate?: string;
602
610
  /** Mixer fixed corner. */
603
611
  mixerCorner?: string;
604
612
  /** Mixer sticky header/label chrome. */
@@ -659,6 +667,41 @@ interface CrisViewDspFullProps {
659
667
  }
660
668
  declare function CrisViewDspFull({ oid, presets, skipShowInput, skipShowOutput, skipCrosspoints, sustainedPresetFeedback, classes, icons, className, initialTab, }: CrisViewDspFullProps): react_jsx_runtime.JSX.Element;
661
669
 
670
+ /**
671
+ * Shared prop shape for the standalone, self-subscribing DSP view pieces
672
+ * (CrisViewDspInputs / Outputs / Mixer / Presets / Channels). Each piece accepts
673
+ * styling overrides identical to CrisViewDspFull and an extra root className.
674
+ */
675
+
676
+ interface DspStylingProps {
677
+ /** Class slot overrides (see CrisViewDspClasses); unset slots use the defaults. */
678
+ classes?: CrisViewDspClasses;
679
+ /** Icon overrides (see CrisViewDspIcons). */
680
+ icons?: CrisViewDspIcons;
681
+ /** Appended to the wrapper root. */
682
+ className?: string;
683
+ }
684
+
685
+ interface CrisViewDspInputsProps extends DspStylingProps {
686
+ /** OID of the DSP custom object. */
687
+ oid: string;
688
+ /** Input channel ids to hide. */
689
+ skip?: number[];
690
+ /** Message shown when there are no inputs. Default 'Sin entradas'. */
691
+ emptyLabel?: string;
692
+ }
693
+ declare function CrisViewDspInputs({ oid, skip, emptyLabel, classes, icons, className, }: CrisViewDspInputsProps): react_jsx_runtime.JSX.Element;
694
+
695
+ interface CrisViewDspOutputsProps extends DspStylingProps {
696
+ /** OID of the DSP custom object. */
697
+ oid: string;
698
+ /** Output channel ids to hide. */
699
+ skip?: number[];
700
+ /** Message shown when there are no outputs. Default 'Sin salidas'. */
701
+ emptyLabel?: string;
702
+ }
703
+ declare function CrisViewDspOutputs({ oid, skip, emptyLabel, classes, icons, className, }: CrisViewDspOutputsProps): react_jsx_runtime.JSX.Element;
704
+
662
705
  /**
663
706
  * DSP custom-object protocol types (the shape exposed by a DSP backend's custom
664
707
  * object, e.g. `DSP1_API` / Dsp.CrisApi.cs). The dynamic DSP view is fed entirely
@@ -693,6 +736,20 @@ interface DspLinks {
693
736
  ip?: DspLinkedGroup[];
694
737
  op?: DspLinkedGroup[];
695
738
  }
739
+ /**
740
+ * Display group (backend `dg`). A higher-level, presentation-only grouping of
741
+ * channels, orthogonal to linked groups (`ln`) and able to overlap them. `id` is
742
+ * the group NAME (e.g. "Mic Diadema"); `ch` its member channel ids. Channels carry
743
+ * a short `lb` ("1", "L", "17") and the group supplies the prefix.
744
+ */
745
+ interface DspDisplayGroup {
746
+ id: string;
747
+ ch: number[];
748
+ }
749
+ interface DspDisplayGroups {
750
+ ip?: DspDisplayGroup[];
751
+ op?: DspDisplayGroup[];
752
+ }
696
753
  /** Active DSP preset. dv = recovered device preset, lc = local preset. */
697
754
  interface DspPreset {
698
755
  dv?: number;
@@ -705,6 +762,8 @@ interface DspStatus {
705
762
  ip: DspIo[];
706
763
  op: DspOut[];
707
764
  ln?: DspLinks;
765
+ /** Display groups (presentation grouping/ordering of channels). */
766
+ dg?: DspDisplayGroups;
708
767
  pr?: DspPreset;
709
768
  ps?: DspPreset;
710
769
  }
@@ -755,6 +814,43 @@ type DspStrip = {
755
814
  declare function collapseStrips(channels: DspIo[], links: DspLinkedGroup[] | undefined): DspStrip[];
756
815
  /** Extracts the linked groups from the status for a given direction. */
757
816
  declare function linksFor(ln: DspLinks | undefined, io: DspIoDir): DspLinkedGroup[] | undefined;
817
+ /** Extracts the display groups from the status for a given direction. */
818
+ declare function groupsFor(dg: DspDisplayGroups | undefined, io: DspIoDir): DspDisplayGroup[] | undefined;
819
+ /** A section of the Inputs/Outputs page: a display group (named) or the trailing ungrouped channels. */
820
+ interface DspSection {
821
+ /** Display-group name (header). Absent for the trailing ungrouped section. */
822
+ groupName?: string;
823
+ strips: DspStrip[];
824
+ }
825
+ /**
826
+ * Builds the ordered, sectioned fader layout. With no `groups`, returns a single
827
+ * header-less section equal to `collapseStrips` (current behavior). Otherwise emits
828
+ * one section per display group (groups in order, channels in group order, linked
829
+ * pairs collapsed), then a trailing header-less section for every channel in no
830
+ * group, in status-array order.
831
+ */
832
+ declare function buildIoSections(channels: DspIo[], links: DspLinkedGroup[] | undefined, groups: DspDisplayGroup[] | undefined): DspSection[];
833
+ /**
834
+ * Mixer axis with up to three tiers per channel: display group (tier 1, dg),
835
+ * linked group (tier 2, ln), channel name (tier 3). Channels are ordered by dg
836
+ * (groups in order, then ungrouped in array order); every channel keeps its own
837
+ * column. `*Start`/`*Span` mark the first cell of a spanning run. With no `groups`,
838
+ * only the link + channel tiers are populated (same labels as `buildMixerAxis`).
839
+ */
840
+ interface MixerAxisItem3 {
841
+ id: number;
842
+ /** Tier 3: own channel name. */
843
+ channelLabel: string;
844
+ /** Tier 2: linked-group label (present on every member of a consecutive run). */
845
+ linkCommon?: string;
846
+ linkStart?: boolean;
847
+ linkSpan?: number;
848
+ /** Tier 1: display-group name (present on every member of the group). */
849
+ groupName?: string;
850
+ groupStart?: boolean;
851
+ groupSpan?: number;
852
+ }
853
+ declare function buildMixerAxisGrouped(channels: DspIo[], links: DspLinkedGroup[] | undefined, groups: DspDisplayGroup[] | undefined): MixerAxisItem3[];
758
854
  /**
759
855
  * Mixer axis (one entry per channel, in order). For linked groups whose channels
760
856
  * are CONSECUTIVE (and therefore adjacent in the grid) it adds the info to paint a
@@ -774,6 +870,88 @@ interface MixerAxisItem {
774
870
  }
775
871
  declare function buildMixerAxis(channels: DspIo[], links: DspLinkedGroup[] | undefined): MixerAxisItem[];
776
872
 
873
+ /** Track sizes + derived sticky offsets / z-order of the mixer grid. Passed to the
874
+ * header render-props so a custom header lands on the same tracks as the cells. */
875
+ interface MixerGeometry {
876
+ /** Output display-group column width (left, vertical text). */
877
+ groupW: string;
878
+ /** Output linked-group column width. */
879
+ commonW: string;
880
+ /** Output channel-name column width. groupW+commonW+chanW = label-band width. */
881
+ chanW: string;
882
+ /** Input display-group header row height (top). */
883
+ groupH: string;
884
+ /** Input linked-group header row height. */
885
+ commonH: string;
886
+ /** Input channel-name header row height (toward cells). */
887
+ chanH: string;
888
+ /** Crosspoint cell width. */
889
+ cellW: string;
890
+ /** Output row height. */
891
+ rowH: string;
892
+ /** Sticky `top` of the input link tier (row 2). */
893
+ topLink: string;
894
+ /** Sticky `top` of the input channel tier (row 3). */
895
+ topChan: string;
896
+ /** Sticky `left` of the output link tier (col 2). */
897
+ leftLink: string;
898
+ /** Sticky `left` of the output channel tier (col 3). */
899
+ leftChan: string;
900
+ /** z-order: corner > group > link > chan > cells. */
901
+ z: {
902
+ corner: number;
903
+ group: number;
904
+ link: number;
905
+ chan: number;
906
+ };
907
+ /** Column count = inputs.length; first input column is grid column 4. */
908
+ inputCount: number;
909
+ /** Row count = outputs.length; first output row is grid row 4. */
910
+ outputCount: number;
911
+ }
912
+ /** Caller overrides for the eight grid track sizes (derived offsets are recomputed). */
913
+ type MixerGeometryOverrides = Partial<Pick<MixerGeometry, 'groupW' | 'commonW' | 'chanW' | 'groupH' | 'commonH' | 'chanH' | 'cellW' | 'rowH'>>;
914
+
915
+ interface CrisViewDspMixerProps extends DspStylingProps {
916
+ /** OID of the DSP custom object. */
917
+ oid: string;
918
+ /** Track-size overrides; the rest of the geometry keeps the em defaults. */
919
+ geometry?: MixerGeometryOverrides;
920
+ /** Custom top band (rows 1–3 over the input columns). Default: text tiers. */
921
+ renderInputHeader?: (inAxis: MixerAxisItem3[], geom: MixerGeometry) => ReactNode;
922
+ /** Custom left band (cols 1–3 over the output rows). Default: text tiers. */
923
+ renderOutputHeader?: (outAxis: MixerAxisItem3[], geom: MixerGeometry) => ReactNode;
924
+ /** Custom fixed-corner content. Default: "OUT \ IN". */
925
+ renderCorner?: (geom: MixerGeometry) => ReactNode;
926
+ }
927
+ declare function CrisViewDspMixer({ oid, classes, icons, className, geometry, renderInputHeader, renderOutputHeader, renderCorner, }: CrisViewDspMixerProps): react_jsx_runtime.JSX.Element;
928
+
929
+ interface CrisViewDspPresetsProps extends Pick<DspStylingProps, 'classes' | 'className'> {
930
+ /** OID of the DSP custom object. */
931
+ oid: string;
932
+ /** Presets to show (the backend does not dictate the count). */
933
+ presets: CrisViewDspPreset[];
934
+ /** Keep the active preset highlighted after release. Default true. */
935
+ sustainedPresetFeedback?: boolean;
936
+ }
937
+ declare function CrisViewDspPresets({ oid, presets, sustainedPresetFeedback, classes, className, }: CrisViewDspPresetsProps): react_jsx_runtime.JSX.Element;
938
+
939
+ interface CrisViewDspChannelsProps extends DspStylingProps {
940
+ /** OID of the DSP custom object. */
941
+ oid: string;
942
+ /** Direction: 'in' (inputs) or 'out' (outputs). */
943
+ io: DspIoDir;
944
+ /** Channel ids to show. Omit → all channels of this io. */
945
+ show?: number[];
946
+ /** Wrap in a horizontal-scroll container instead of a plain flex row. Default false. */
947
+ scroll?: boolean;
948
+ /** Show the empty-state message when no channels match. Default false (render nothing). */
949
+ showEmpty?: boolean;
950
+ /** Empty-state message (only when showEmpty). */
951
+ emptyLabel?: string;
952
+ }
953
+ declare function CrisViewDspChannels({ oid, io, show, scroll, showEmpty, emptyLabel, classes, icons, className, }: CrisViewDspChannelsProps): react_jsx_runtime.JSX.Element | null;
954
+
777
955
  /**
778
956
  * Icon configuration and utilities for CRIS components
779
957
  *
@@ -824,4 +1002,4 @@ declare function getIconUrl(name: string): string;
824
1002
  */
825
1003
  declare function getIconFilter(active: boolean): string | undefined;
826
1004
 
827
- export { type CommIndicatorState, type CommKind, CrisButton, type CrisButtonProps, CrisCoDebug, type CrisCoDebugProps, CrisCoList, type CrisCoListProps, CrisCoMatrixListsTie, type CrisCoMatrixListsTieProps, CrisGauge, type CrisGaugeProps, CrisOfflinePage, type CrisOfflinePageProps, CrisSlider, type CrisSliderProps, CrisSpinner, type CrisSpinnerProps, CrisText, CrisTextInput, type CrisTextInputProps, type CrisTextProps, CrisViewComm, type CrisViewCommClasses, type CrisViewCommIcons, type CrisViewCommProps, type CrisViewDspClasses, CrisViewDspFull, type CrisViewDspFullProps, type CrisViewDspIcons, type CrisViewDspPreset, type DebugModule, type DeviceComm, type DspIo, type DspIoDir, type DspLinkedGroup, type DspLinks, type DspOut, type DspPreset, type DspStatus, type DspStrip, type IconConfig, type ListItem, type ListStatus, type MatrixItem, type MatrixStatus, type MixerAxisItem, type SpinnerSpeed, buildMixerAxis, clampLevel, collapseStrips, commIndicators, configureIcons, getIconConfig, getIconFilter, getIconUrl, levelToPercent, linksFor, normalizeLinked };
1005
+ export { type CommIndicatorState, type CommKind, CrisButton, type CrisButtonProps, CrisCoDebug, type CrisCoDebugProps, CrisCoList, type CrisCoListProps, CrisCoMatrixListsTie, type CrisCoMatrixListsTieProps, CrisGauge, type CrisGaugeProps, CrisOfflinePage, type CrisOfflinePageProps, CrisSlider, type CrisSliderProps, CrisSpinner, type CrisSpinnerProps, CrisText, CrisTextInput, type CrisTextInputProps, type CrisTextProps, CrisViewComm, type CrisViewCommClasses, type CrisViewCommIcons, type CrisViewCommProps, CrisViewDspChannels, type CrisViewDspChannelsProps, type CrisViewDspClasses, CrisViewDspFull, type CrisViewDspFullProps, type CrisViewDspIcons, CrisViewDspInputs, type CrisViewDspInputsProps, CrisViewDspMixer, type CrisViewDspMixerProps, CrisViewDspOutputs, type CrisViewDspOutputsProps, type CrisViewDspPreset, CrisViewDspPresets, type CrisViewDspPresetsProps, type DebugModule, type DeviceComm, type DspDisplayGroup, type DspDisplayGroups, type DspIo, type DspIoDir, type DspLinkedGroup, type DspLinks, type DspOut, type DspPreset, type DspSection, type DspStatus, type DspStrip, type DspStylingProps, type IconConfig, type ListItem, type ListStatus, type MatrixItem, type MatrixStatus, type MixerAxisItem, type MixerAxisItem3, type MixerGeometry, type MixerGeometryOverrides, type SpinnerSpeed, buildIoSections, buildMixerAxis, buildMixerAxisGrouped, clampLevel, collapseStrips, commIndicators, configureIcons, getIconConfig, getIconFilter, getIconUrl, groupsFor, levelToPercent, linksFor, normalizeLinked };