@imperosoft/cris-webui-components 1.2.1 → 1.3.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. */
@@ -659,6 +665,57 @@ interface CrisViewDspFullProps {
659
665
  }
660
666
  declare function CrisViewDspFull({ oid, presets, skipShowInput, skipShowOutput, skipCrosspoints, sustainedPresetFeedback, classes, icons, className, initialTab, }: CrisViewDspFullProps): react_jsx_runtime.JSX.Element;
661
667
 
668
+ /**
669
+ * Shared prop shape for the standalone, self-subscribing DSP view pieces
670
+ * (CrisViewDspInputs / Outputs / Mixer / Presets / Channels). Each piece accepts
671
+ * styling overrides identical to CrisViewDspFull and an extra root className.
672
+ */
673
+
674
+ interface DspStylingProps {
675
+ /** Class slot overrides (see CrisViewDspClasses); unset slots use the defaults. */
676
+ classes?: CrisViewDspClasses;
677
+ /** Icon overrides (see CrisViewDspIcons). */
678
+ icons?: CrisViewDspIcons;
679
+ /** Appended to the wrapper root. */
680
+ className?: string;
681
+ }
682
+
683
+ interface CrisViewDspInputsProps extends DspStylingProps {
684
+ /** OID of the DSP custom object. */
685
+ oid: string;
686
+ /** Input channel ids to hide. */
687
+ skip?: number[];
688
+ /** Message shown when there are no inputs. Default 'Sin entradas'. */
689
+ emptyLabel?: string;
690
+ }
691
+ declare function CrisViewDspInputs({ oid, skip, emptyLabel, classes, icons, className, }: CrisViewDspInputsProps): react_jsx_runtime.JSX.Element;
692
+
693
+ interface CrisViewDspOutputsProps extends DspStylingProps {
694
+ /** OID of the DSP custom object. */
695
+ oid: string;
696
+ /** Output channel ids to hide. */
697
+ skip?: number[];
698
+ /** Message shown when there are no outputs. Default 'Sin salidas'. */
699
+ emptyLabel?: string;
700
+ }
701
+ declare function CrisViewDspOutputs({ oid, skip, emptyLabel, classes, icons, className, }: CrisViewDspOutputsProps): react_jsx_runtime.JSX.Element;
702
+
703
+ interface CrisViewDspMixerProps extends DspStylingProps {
704
+ /** OID of the DSP custom object. */
705
+ oid: string;
706
+ }
707
+ declare function CrisViewDspMixer({ oid, classes, icons, className }: CrisViewDspMixerProps): react_jsx_runtime.JSX.Element;
708
+
709
+ interface CrisViewDspPresetsProps extends Pick<DspStylingProps, 'classes' | 'className'> {
710
+ /** OID of the DSP custom object. */
711
+ oid: string;
712
+ /** Presets to show (the backend does not dictate the count). */
713
+ presets: CrisViewDspPreset[];
714
+ /** Keep the active preset highlighted after release. Default true. */
715
+ sustainedPresetFeedback?: boolean;
716
+ }
717
+ declare function CrisViewDspPresets({ oid, presets, sustainedPresetFeedback, classes, className, }: CrisViewDspPresetsProps): react_jsx_runtime.JSX.Element;
718
+
662
719
  /**
663
720
  * DSP custom-object protocol types (the shape exposed by a DSP backend's custom
664
721
  * object, e.g. `DSP1_API` / Dsp.CrisApi.cs). The dynamic DSP view is fed entirely
@@ -693,6 +750,20 @@ interface DspLinks {
693
750
  ip?: DspLinkedGroup[];
694
751
  op?: DspLinkedGroup[];
695
752
  }
753
+ /**
754
+ * Display group (backend `dg`). A higher-level, presentation-only grouping of
755
+ * channels, orthogonal to linked groups (`ln`) and able to overlap them. `id` is
756
+ * the group NAME (e.g. "Mic Diadema"); `ch` its member channel ids. Channels carry
757
+ * a short `lb` ("1", "L", "17") and the group supplies the prefix.
758
+ */
759
+ interface DspDisplayGroup {
760
+ id: string;
761
+ ch: number[];
762
+ }
763
+ interface DspDisplayGroups {
764
+ ip?: DspDisplayGroup[];
765
+ op?: DspDisplayGroup[];
766
+ }
696
767
  /** Active DSP preset. dv = recovered device preset, lc = local preset. */
697
768
  interface DspPreset {
698
769
  dv?: number;
@@ -705,6 +776,8 @@ interface DspStatus {
705
776
  ip: DspIo[];
706
777
  op: DspOut[];
707
778
  ln?: DspLinks;
779
+ /** Display groups (presentation grouping/ordering of channels). */
780
+ dg?: DspDisplayGroups;
708
781
  pr?: DspPreset;
709
782
  ps?: DspPreset;
710
783
  }
@@ -755,6 +828,43 @@ type DspStrip = {
755
828
  declare function collapseStrips(channels: DspIo[], links: DspLinkedGroup[] | undefined): DspStrip[];
756
829
  /** Extracts the linked groups from the status for a given direction. */
757
830
  declare function linksFor(ln: DspLinks | undefined, io: DspIoDir): DspLinkedGroup[] | undefined;
831
+ /** Extracts the display groups from the status for a given direction. */
832
+ declare function groupsFor(dg: DspDisplayGroups | undefined, io: DspIoDir): DspDisplayGroup[] | undefined;
833
+ /** A section of the Inputs/Outputs page: a display group (named) or the trailing ungrouped channels. */
834
+ interface DspSection {
835
+ /** Display-group name (header). Absent for the trailing ungrouped section. */
836
+ groupName?: string;
837
+ strips: DspStrip[];
838
+ }
839
+ /**
840
+ * Builds the ordered, sectioned fader layout. With no `groups`, returns a single
841
+ * header-less section equal to `collapseStrips` (current behavior). Otherwise emits
842
+ * one section per display group (groups in order, channels in group order, linked
843
+ * pairs collapsed), then a trailing header-less section for every channel in no
844
+ * group, in status-array order.
845
+ */
846
+ declare function buildIoSections(channels: DspIo[], links: DspLinkedGroup[] | undefined, groups: DspDisplayGroup[] | undefined): DspSection[];
847
+ /**
848
+ * Mixer axis with up to three tiers per channel: display group (tier 1, dg),
849
+ * linked group (tier 2, ln), channel name (tier 3). Channels are ordered by dg
850
+ * (groups in order, then ungrouped in array order); every channel keeps its own
851
+ * column. `*Start`/`*Span` mark the first cell of a spanning run. With no `groups`,
852
+ * only the link + channel tiers are populated (same labels as `buildMixerAxis`).
853
+ */
854
+ interface MixerAxisItem3 {
855
+ id: number;
856
+ /** Tier 3: own channel name. */
857
+ channelLabel: string;
858
+ /** Tier 2: linked-group label (present on every member of a consecutive run). */
859
+ linkCommon?: string;
860
+ linkStart?: boolean;
861
+ linkSpan?: number;
862
+ /** Tier 1: display-group name (present on every member of the group). */
863
+ groupName?: string;
864
+ groupStart?: boolean;
865
+ groupSpan?: number;
866
+ }
867
+ declare function buildMixerAxisGrouped(channels: DspIo[], links: DspLinkedGroup[] | undefined, groups: DspDisplayGroup[] | undefined): MixerAxisItem3[];
758
868
  /**
759
869
  * Mixer axis (one entry per channel, in order). For linked groups whose channels
760
870
  * are CONSECUTIVE (and therefore adjacent in the grid) it adds the info to paint a
@@ -774,6 +884,22 @@ interface MixerAxisItem {
774
884
  }
775
885
  declare function buildMixerAxis(channels: DspIo[], links: DspLinkedGroup[] | undefined): MixerAxisItem[];
776
886
 
887
+ interface CrisViewDspChannelsProps extends DspStylingProps {
888
+ /** OID of the DSP custom object. */
889
+ oid: string;
890
+ /** Direction: 'in' (inputs) or 'out' (outputs). */
891
+ io: DspIoDir;
892
+ /** Channel ids to show. Omit → all channels of this io. */
893
+ show?: number[];
894
+ /** Wrap in a horizontal-scroll container instead of a plain flex row. Default false. */
895
+ scroll?: boolean;
896
+ /** Show the empty-state message when no channels match. Default false (render nothing). */
897
+ showEmpty?: boolean;
898
+ /** Empty-state message (only when showEmpty). */
899
+ emptyLabel?: string;
900
+ }
901
+ declare function CrisViewDspChannels({ oid, io, show, scroll, showEmpty, emptyLabel, classes, icons, className, }: CrisViewDspChannelsProps): react_jsx_runtime.JSX.Element | null;
902
+
777
903
  /**
778
904
  * Icon configuration and utilities for CRIS components
779
905
  *
@@ -824,4 +950,4 @@ declare function getIconUrl(name: string): string;
824
950
  */
825
951
  declare function getIconFilter(active: boolean): string | undefined;
826
952
 
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 };
953
+ 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 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. */
@@ -659,6 +665,57 @@ interface CrisViewDspFullProps {
659
665
  }
660
666
  declare function CrisViewDspFull({ oid, presets, skipShowInput, skipShowOutput, skipCrosspoints, sustainedPresetFeedback, classes, icons, className, initialTab, }: CrisViewDspFullProps): react_jsx_runtime.JSX.Element;
661
667
 
668
+ /**
669
+ * Shared prop shape for the standalone, self-subscribing DSP view pieces
670
+ * (CrisViewDspInputs / Outputs / Mixer / Presets / Channels). Each piece accepts
671
+ * styling overrides identical to CrisViewDspFull and an extra root className.
672
+ */
673
+
674
+ interface DspStylingProps {
675
+ /** Class slot overrides (see CrisViewDspClasses); unset slots use the defaults. */
676
+ classes?: CrisViewDspClasses;
677
+ /** Icon overrides (see CrisViewDspIcons). */
678
+ icons?: CrisViewDspIcons;
679
+ /** Appended to the wrapper root. */
680
+ className?: string;
681
+ }
682
+
683
+ interface CrisViewDspInputsProps extends DspStylingProps {
684
+ /** OID of the DSP custom object. */
685
+ oid: string;
686
+ /** Input channel ids to hide. */
687
+ skip?: number[];
688
+ /** Message shown when there are no inputs. Default 'Sin entradas'. */
689
+ emptyLabel?: string;
690
+ }
691
+ declare function CrisViewDspInputs({ oid, skip, emptyLabel, classes, icons, className, }: CrisViewDspInputsProps): react_jsx_runtime.JSX.Element;
692
+
693
+ interface CrisViewDspOutputsProps extends DspStylingProps {
694
+ /** OID of the DSP custom object. */
695
+ oid: string;
696
+ /** Output channel ids to hide. */
697
+ skip?: number[];
698
+ /** Message shown when there are no outputs. Default 'Sin salidas'. */
699
+ emptyLabel?: string;
700
+ }
701
+ declare function CrisViewDspOutputs({ oid, skip, emptyLabel, classes, icons, className, }: CrisViewDspOutputsProps): react_jsx_runtime.JSX.Element;
702
+
703
+ interface CrisViewDspMixerProps extends DspStylingProps {
704
+ /** OID of the DSP custom object. */
705
+ oid: string;
706
+ }
707
+ declare function CrisViewDspMixer({ oid, classes, icons, className }: CrisViewDspMixerProps): react_jsx_runtime.JSX.Element;
708
+
709
+ interface CrisViewDspPresetsProps extends Pick<DspStylingProps, 'classes' | 'className'> {
710
+ /** OID of the DSP custom object. */
711
+ oid: string;
712
+ /** Presets to show (the backend does not dictate the count). */
713
+ presets: CrisViewDspPreset[];
714
+ /** Keep the active preset highlighted after release. Default true. */
715
+ sustainedPresetFeedback?: boolean;
716
+ }
717
+ declare function CrisViewDspPresets({ oid, presets, sustainedPresetFeedback, classes, className, }: CrisViewDspPresetsProps): react_jsx_runtime.JSX.Element;
718
+
662
719
  /**
663
720
  * DSP custom-object protocol types (the shape exposed by a DSP backend's custom
664
721
  * object, e.g. `DSP1_API` / Dsp.CrisApi.cs). The dynamic DSP view is fed entirely
@@ -693,6 +750,20 @@ interface DspLinks {
693
750
  ip?: DspLinkedGroup[];
694
751
  op?: DspLinkedGroup[];
695
752
  }
753
+ /**
754
+ * Display group (backend `dg`). A higher-level, presentation-only grouping of
755
+ * channels, orthogonal to linked groups (`ln`) and able to overlap them. `id` is
756
+ * the group NAME (e.g. "Mic Diadema"); `ch` its member channel ids. Channels carry
757
+ * a short `lb` ("1", "L", "17") and the group supplies the prefix.
758
+ */
759
+ interface DspDisplayGroup {
760
+ id: string;
761
+ ch: number[];
762
+ }
763
+ interface DspDisplayGroups {
764
+ ip?: DspDisplayGroup[];
765
+ op?: DspDisplayGroup[];
766
+ }
696
767
  /** Active DSP preset. dv = recovered device preset, lc = local preset. */
697
768
  interface DspPreset {
698
769
  dv?: number;
@@ -705,6 +776,8 @@ interface DspStatus {
705
776
  ip: DspIo[];
706
777
  op: DspOut[];
707
778
  ln?: DspLinks;
779
+ /** Display groups (presentation grouping/ordering of channels). */
780
+ dg?: DspDisplayGroups;
708
781
  pr?: DspPreset;
709
782
  ps?: DspPreset;
710
783
  }
@@ -755,6 +828,43 @@ type DspStrip = {
755
828
  declare function collapseStrips(channels: DspIo[], links: DspLinkedGroup[] | undefined): DspStrip[];
756
829
  /** Extracts the linked groups from the status for a given direction. */
757
830
  declare function linksFor(ln: DspLinks | undefined, io: DspIoDir): DspLinkedGroup[] | undefined;
831
+ /** Extracts the display groups from the status for a given direction. */
832
+ declare function groupsFor(dg: DspDisplayGroups | undefined, io: DspIoDir): DspDisplayGroup[] | undefined;
833
+ /** A section of the Inputs/Outputs page: a display group (named) or the trailing ungrouped channels. */
834
+ interface DspSection {
835
+ /** Display-group name (header). Absent for the trailing ungrouped section. */
836
+ groupName?: string;
837
+ strips: DspStrip[];
838
+ }
839
+ /**
840
+ * Builds the ordered, sectioned fader layout. With no `groups`, returns a single
841
+ * header-less section equal to `collapseStrips` (current behavior). Otherwise emits
842
+ * one section per display group (groups in order, channels in group order, linked
843
+ * pairs collapsed), then a trailing header-less section for every channel in no
844
+ * group, in status-array order.
845
+ */
846
+ declare function buildIoSections(channels: DspIo[], links: DspLinkedGroup[] | undefined, groups: DspDisplayGroup[] | undefined): DspSection[];
847
+ /**
848
+ * Mixer axis with up to three tiers per channel: display group (tier 1, dg),
849
+ * linked group (tier 2, ln), channel name (tier 3). Channels are ordered by dg
850
+ * (groups in order, then ungrouped in array order); every channel keeps its own
851
+ * column. `*Start`/`*Span` mark the first cell of a spanning run. With no `groups`,
852
+ * only the link + channel tiers are populated (same labels as `buildMixerAxis`).
853
+ */
854
+ interface MixerAxisItem3 {
855
+ id: number;
856
+ /** Tier 3: own channel name. */
857
+ channelLabel: string;
858
+ /** Tier 2: linked-group label (present on every member of a consecutive run). */
859
+ linkCommon?: string;
860
+ linkStart?: boolean;
861
+ linkSpan?: number;
862
+ /** Tier 1: display-group name (present on every member of the group). */
863
+ groupName?: string;
864
+ groupStart?: boolean;
865
+ groupSpan?: number;
866
+ }
867
+ declare function buildMixerAxisGrouped(channels: DspIo[], links: DspLinkedGroup[] | undefined, groups: DspDisplayGroup[] | undefined): MixerAxisItem3[];
758
868
  /**
759
869
  * Mixer axis (one entry per channel, in order). For linked groups whose channels
760
870
  * are CONSECUTIVE (and therefore adjacent in the grid) it adds the info to paint a
@@ -774,6 +884,22 @@ interface MixerAxisItem {
774
884
  }
775
885
  declare function buildMixerAxis(channels: DspIo[], links: DspLinkedGroup[] | undefined): MixerAxisItem[];
776
886
 
887
+ interface CrisViewDspChannelsProps extends DspStylingProps {
888
+ /** OID of the DSP custom object. */
889
+ oid: string;
890
+ /** Direction: 'in' (inputs) or 'out' (outputs). */
891
+ io: DspIoDir;
892
+ /** Channel ids to show. Omit → all channels of this io. */
893
+ show?: number[];
894
+ /** Wrap in a horizontal-scroll container instead of a plain flex row. Default false. */
895
+ scroll?: boolean;
896
+ /** Show the empty-state message when no channels match. Default false (render nothing). */
897
+ showEmpty?: boolean;
898
+ /** Empty-state message (only when showEmpty). */
899
+ emptyLabel?: string;
900
+ }
901
+ declare function CrisViewDspChannels({ oid, io, show, scroll, showEmpty, emptyLabel, classes, icons, className, }: CrisViewDspChannelsProps): react_jsx_runtime.JSX.Element | null;
902
+
777
903
  /**
778
904
  * Icon configuration and utilities for CRIS components
779
905
  *
@@ -824,4 +950,4 @@ declare function getIconUrl(name: string): string;
824
950
  */
825
951
  declare function getIconFilter(active: boolean): string | undefined;
826
952
 
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 };
953
+ 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 SpinnerSpeed, buildIoSections, buildMixerAxis, buildMixerAxisGrouped, clampLevel, collapseStrips, commIndicators, configureIcons, getIconConfig, getIconFilter, getIconUrl, groupsFor, levelToPercent, linksFor, normalizeLinked };