@interopio/groups-ui-react 2.4.0 → 2.5.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.
Files changed (58) hide show
  1. package/dist/GroupElementCreationWrapper.d.ts +49 -0
  2. package/dist/GroupWrapper.d.ts +9 -0
  3. package/dist/Portal.d.ts +6 -0
  4. package/dist/cjs/defaultComponents/channelSelector/multi/BaseMultiChannelSelector.d.ts +4 -0
  5. package/dist/cjs/defaultComponents/channelSelector/multi/ColorRectangle.d.ts +7 -0
  6. package/dist/cjs/defaultComponents/channelSelector/multi/FlatMultiChannelSelector.d.ts +4 -0
  7. package/dist/cjs/defaultComponents/channelSelector/multi/TabMultiChannelSelector.d.ts +4 -0
  8. package/dist/cjs/defaultComponents/channelSelector/utils.d.ts +4 -0
  9. package/dist/cjs/index.d.ts +3 -1
  10. package/dist/cjs/index.js +112 -15
  11. package/dist/cjs/index.js.map +1 -1
  12. package/dist/cjs/types/api.d.ts +10 -0
  13. package/dist/cjs/types/defaultComponents.d.ts +50 -0
  14. package/dist/cjs/types/internal.d.ts +22 -0
  15. package/dist/defaultComponents/BaseButton.d.ts +4 -0
  16. package/dist/defaultComponents/CloseButton.d.ts +4 -0
  17. package/dist/defaultComponents/ExtractButton.d.ts +4 -0
  18. package/dist/defaultComponents/MaximizeButton.d.ts +4 -0
  19. package/dist/defaultComponents/MinimizeButton.d.ts +4 -0
  20. package/dist/defaultComponents/RestoreButton.d.ts +4 -0
  21. package/dist/defaultComponents/Tab.d.ts +4 -0
  22. package/dist/defaultComponents/TabCaption.d.ts +4 -0
  23. package/dist/defaultComponents/TabCloseButton.d.ts +4 -0
  24. package/dist/defaultComponents/TabHeaderButtons.d.ts +4 -0
  25. package/dist/defaultComponents/channelSelector/BaseChannelSelector.d.ts +4 -0
  26. package/dist/defaultComponents/channelSelector/FrameChannelSelector.d.ts +4 -0
  27. package/dist/defaultComponents/channelSelector/TabChannelSelector.d.ts +4 -0
  28. package/dist/defaultComponents/channelSelector/utils.d.ts +1 -0
  29. package/dist/defaultComponents/frameCaptionBar/FrameButtons.d.ts +4 -0
  30. package/dist/defaultComponents/frameCaptionBar/FrameCaption.d.ts +4 -0
  31. package/dist/defaultComponents/frameCaptionBar/FrameCaptionBar.d.ts +4 -0
  32. package/dist/defaultComponents/frameCaptionBar/FrameMoveArea.d.ts +4 -0
  33. package/dist/defaultComponents/groupCaptionBar/GroupButtons.d.ts +4 -0
  34. package/dist/defaultComponents/groupCaptionBar/GroupCaption.d.ts +4 -0
  35. package/dist/defaultComponents/groupCaptionBar/GroupCaptionBar.d.ts +4 -0
  36. package/dist/defaultComponents/groupCaptionBar/GroupMoveArea.d.ts +4 -0
  37. package/dist/esm/defaultComponents/channelSelector/multi/BaseMultiChannelSelector.d.ts +4 -0
  38. package/dist/esm/defaultComponents/channelSelector/multi/ColorRectangle.d.ts +7 -0
  39. package/dist/esm/defaultComponents/channelSelector/multi/FlatMultiChannelSelector.d.ts +4 -0
  40. package/dist/esm/defaultComponents/channelSelector/multi/TabMultiChannelSelector.d.ts +4 -0
  41. package/dist/esm/defaultComponents/channelSelector/utils.d.ts +4 -0
  42. package/dist/esm/index.d.ts +3 -1
  43. package/dist/esm/index.js +111 -16
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/esm/types/api.d.ts +10 -0
  46. package/dist/esm/types/defaultComponents.d.ts +50 -0
  47. package/dist/esm/types/internal.d.ts +22 -0
  48. package/dist/index.d.ts +27 -0
  49. package/dist/index.js +16 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/styles/fonts.css +2 -0
  52. package/dist/styles/groups.css +75 -10
  53. package/dist/styles/styles.css +574 -0
  54. package/dist/styles/themes.css +155 -0
  55. package/dist/styles/vars.css +22 -5
  56. package/dist/types/internal.d.ts +373 -0
  57. package/dist/webGroupsManager.d.ts +35 -0
  58. package/package.json +1 -1
@@ -0,0 +1,49 @@
1
+ import React from "react";
2
+ import { GroupProps, ElementCreationWrapperState, CreateGroupCaptionBarRequestOptions, CreateFrameCaptionBarRequestOptions, CreateTabRequestOptions, RemoveRequestOptions, UpdateGroupCaptionBarRequestOptions, UpdateFrameCaptionBarRequestOptions, CreateTabHeaderButtonsOptions, UpdateStandardButtonRequestOptions, CreateElementRequestOptions, CreateFrameElementRequestOptions, UpdateFrameRequestionOptions as UpdateFrameRequestOptions } from "./types/internal";
3
+ declare class GroupElementCreationWrapper extends React.Component<GroupProps, ElementCreationWrapperState> {
4
+ constructor(props: GroupProps);
5
+ onCreateGroupCaptionBarRequested: (options: CreateGroupCaptionBarRequestOptions) => void;
6
+ onCreateGroupOverlayRequested: (options: CreateElementRequestOptions) => void;
7
+ onCreateFrameCaptionBarRequested: (options: CreateFrameCaptionBarRequestOptions) => void;
8
+ onCreateFrameWindowOverlayRequested: (options: CreateFrameElementRequestOptions) => void;
9
+ onCreateBelowWindowRequested: (options: CreateFrameElementRequestOptions) => void;
10
+ onCreateAboveTabsComponentRequested: (options: CreateFrameElementRequestOptions) => void;
11
+ onCreateBeforeTabsComponentRequested: (options: CreateFrameElementRequestOptions) => void;
12
+ onCreateTabElementRequested: (options: CreateTabRequestOptions) => void;
13
+ onCreateAfterTabsComponentRequested: (options: CreateFrameElementRequestOptions) => void;
14
+ onCreateTabHeaderButtonsRequested: (options: CreateTabHeaderButtonsOptions) => void;
15
+ onCreateBelowTabsComponentRequested: (options: CreateFrameElementRequestOptions) => void;
16
+ onUpdateGroupCaptionBarRequested: (options: UpdateGroupCaptionBarRequestOptions) => void;
17
+ onUpdateFrameCaptionBarRequested: (options: UpdateFrameCaptionBarRequestOptions) => void;
18
+ onUpdateFrameWindowOverlayRequested: (options: CreateElementRequestOptions) => void;
19
+ onUpdateAboveTabsRequested: (options: CreateElementRequestOptions) => void;
20
+ onUpdateBeforeTabsRequested: (options: CreateElementRequestOptions) => void;
21
+ onUpdateTabElementRequested: (options: CreateTabRequestOptions) => void;
22
+ onUpdateAfterTabsRequested: (options: CreateElementRequestOptions) => void;
23
+ onUpdateTabHeaderButtonsRequested: (options: CreateTabHeaderButtonsOptions) => void;
24
+ onUpdateBelowTabsRequested: (options: CreateElementRequestOptions) => void;
25
+ onUpdateFrame: (options: UpdateFrameRequestOptions) => void;
26
+ onUpdateStandardButton: (options: UpdateStandardButtonRequestOptions) => void;
27
+ renderGroupCaptionBar: () => JSX.Element | undefined;
28
+ renderGroupOverlay: () => JSX.Element | undefined;
29
+ renderFrameCaptionBar: () => (JSX.Element | undefined)[];
30
+ renderFrameWindowOverlay: () => (JSX.Element | undefined)[];
31
+ renderBelowWindow: () => (JSX.Element | undefined)[];
32
+ renderAboveTabs: () => (JSX.Element | undefined)[];
33
+ renderBeforeTabsZones: () => (JSX.Element | undefined)[];
34
+ renderTabElements: () => (JSX.Element | undefined)[];
35
+ renderAfterTabsZones: () => (JSX.Element | undefined)[];
36
+ renderTabHeaderButtons: () => (JSX.Element | undefined)[];
37
+ renderBelowTabs: () => (JSX.Element | undefined)[];
38
+ onRemoveFrameCaptionBarRequested: (options: RemoveRequestOptions) => void;
39
+ onRemoveFrameWindowOverlayRequested: (options: RemoveRequestOptions) => void;
40
+ onRemoveBelowWindowRequested: (options: RemoveRequestOptions) => void;
41
+ onRemoveAboveTabsRequested: (options: RemoveRequestOptions) => void;
42
+ onRemoveBeforeTabsComponentRequested: (options: RemoveRequestOptions) => void;
43
+ onRemoveTabElementRequested: (options: RemoveRequestOptions) => void;
44
+ onRemoveAfterTabsComponentRequested: (options: RemoveRequestOptions) => void;
45
+ onRemoveTabHeaderButtonsRequested: (options: RemoveRequestOptions) => void;
46
+ onRemoveBelowTabsRequested: (options: RemoveRequestOptions) => void;
47
+ render(): JSX.Element;
48
+ }
49
+ export default GroupElementCreationWrapper;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { GroupWrapperProps } from "./types/internal";
3
+ declare class GroupWrapper extends React.Component<GroupWrapperProps> {
4
+ containerRef: HTMLElement | null;
5
+ componentDidMount(): void;
6
+ componentWillUnmount(): void;
7
+ render(): JSX.Element;
8
+ }
9
+ export default GroupWrapper;
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { PortalProps } from "./types/internal";
3
+ declare class Portal extends React.Component<PortalProps> {
4
+ render(): React.ReactPortal;
5
+ }
6
+ export default Portal;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { BaseMultiChannelSelectorProps } from "../../../types/defaultComponents";
3
+ declare const BaseMultiChannelSelector: React.FC<BaseMultiChannelSelectorProps>;
4
+ export default BaseMultiChannelSelector;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface ColorRectangleProps {
3
+ colors: string[];
4
+ onClick: () => void;
5
+ }
6
+ declare const ColorRectangle: React.FC<ColorRectangleProps>;
7
+ export default ColorRectangle;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { FlatMultiChannelSelectorProps } from "../../../types/defaultComponents";
3
+ declare const FlatMultiChannelSelector: React.FC<FlatMultiChannelSelectorProps>;
4
+ export default FlatMultiChannelSelector;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { TabMultiChannelSelectorProps } from "../../../types/defaultComponents";
3
+ declare const TabMultiChannelSelector: React.FC<TabMultiChannelSelectorProps>;
4
+ export default TabMultiChannelSelector;
@@ -1 +1,5 @@
1
1
  export declare function IsBlackReadable(color: string): boolean;
2
+ export declare function getChannelDirection(channelRestrictions: {
3
+ read: boolean;
4
+ write: boolean;
5
+ }): string;
@@ -41,7 +41,9 @@ import useCaptionEditor from "./defaultComponents/captionEditor/useCaptionEditor
41
41
  import FrameLoadingAnimation from "./defaultComponents/loadingAnimation/FrameLoadingAnimation";
42
42
  import HtmlButtons from "./defaultComponents/htmlButtonsBar/buttons";
43
43
  import TabOverflowPopup from "./defaultComponents/popups/TabOverflowPopup";
44
- export { GroupCaptionBar, GroupMoveArea, GroupButtons, GroupCaptionEditor, Tab, TabChannelSelector, TabCaption, TabCloseButton, TabCaptionEditor, FeedbackButton, CloneButton, StickyButton, ExtractButton, LockButton, UnlockButton, MinimizeButton, RestoreButton, MaximizeButton, CustomButton, CloseButton, FlatCaptionBar, FlatChannelSelector, FlatCaption, FlatMoveArea, FlatButtons, FlatCaptionEditor, TabHeaderButtons, FrameLoadingAnimation, HtmlButtons, TabOverflowPopup, OverflowButton, GroupComponentVisibilityState, useIOConnectWindow, useGroupComponentVisibility, waitForWindow, useEditableCaption, useCaptionEditor, useCommitGroupCaptionEditingRequested, useCommitFlatCaptionEditingRequested, useCommitTabCaptionEditingRequested, };
44
+ import TabMultiChannelSelector from "./defaultComponents/channelSelector/multi/TabMultiChannelSelector";
45
+ import FlatMultiChannelSelector from "./defaultComponents/channelSelector/multi/FlatMultiChannelSelector";
46
+ export { GroupCaptionBar, GroupMoveArea, GroupButtons, GroupCaptionEditor, Tab, TabChannelSelector, TabCaption, TabCloseButton, TabCaptionEditor, FeedbackButton, CloneButton, StickyButton, ExtractButton, LockButton, UnlockButton, MinimizeButton, RestoreButton, MaximizeButton, CustomButton, CloseButton, FlatCaptionBar, FlatChannelSelector, FlatCaption, FlatMoveArea, FlatButtons, FlatCaptionEditor, TabHeaderButtons, FrameLoadingAnimation, HtmlButtons, TabOverflowPopup, OverflowButton, GroupComponentVisibilityState, TabMultiChannelSelector, FlatMultiChannelSelector, useIOConnectWindow, useGroupComponentVisibility, waitForWindow, useEditableCaption, useCaptionEditor, useCommitGroupCaptionEditingRequested, useCommitFlatCaptionEditingRequested, useCommitTabCaptionEditingRequested, };
45
47
  export declare const getGroupId: () => string;
46
48
  export declare const requestPageFocus: () => void;
47
49
  export declare const requestFrameFocus: (frameId: string) => void;
package/dist/cjs/index.js CHANGED
@@ -577,10 +577,30 @@
577
577
  console.error("Error while checking readable color for '" + color + "'", error);
578
578
  }
579
579
  return false;
580
+ }
581
+ function getChannelDirection(channelRestrictions) {
582
+ if (!channelRestrictions) {
583
+ return "";
584
+ }
585
+ if (typeof channelRestrictions.read === "boolean" && typeof channelRestrictions.write === "boolean") {
586
+ if (channelRestrictions.read && channelRestrictions.write) {
587
+ return "";
588
+ }
589
+ if (channelRestrictions.read) {
590
+ return "subscribe";
591
+ }
592
+ if (channelRestrictions.write) {
593
+ return "publish";
594
+ }
595
+ return "";
596
+ }
597
+ else {
598
+ return "";
599
+ }
580
600
  }
581
601
 
582
602
  var BaseChannelSelector = function (_a) {
583
- var outsideClass = _a.outsideClass, contentClass = _a.contentClass, showSelector = _a.showSelector, selectedChannel = _a.selectedChannel, selectedChannelColor = _a.selectedChannelColor;
603
+ var outsideClass = _a.outsideClass, contentClass = _a.contentClass, showSelector = _a.showSelector, selectedChannel = _a.selectedChannel, selectedChannelColor = _a.selectedChannelColor, direction = _a.direction, channelLabel = _a.channelLabel;
584
604
  var ref = React.useRef(null);
585
605
  var wrappedOnClick = function () {
586
606
  if (!ref.current) {
@@ -595,10 +615,14 @@
595
615
  });
596
616
  };
597
617
  React.useEffect(function () {
598
- var _a;
599
- (_a = ref.current) === null || _a === void 0 ? void 0 : _a.addEventListener("mousedown", function (e) {
618
+ var handler = function (e) {
600
619
  e.stopPropagation();
601
- });
620
+ };
621
+ var current = ref.current;
622
+ current === null || current === void 0 ? void 0 : current.addEventListener("mousedown", handler);
623
+ return function () {
624
+ current === null || current === void 0 ? void 0 : current.removeEventListener("mousedown", handler);
625
+ };
602
626
  }, [ref]);
603
627
  var className = contentClass;
604
628
  if (selectedChannel && selectedChannelColor) {
@@ -607,13 +631,15 @@
607
631
  var style = {
608
632
  background: selectedChannelColor
609
633
  };
610
- return React__default["default"].createElement("div", { title: selectedChannel !== null && selectedChannel !== void 0 ? selectedChannel : "", ref: ref, style: style, onClick: wrappedOnClick, className: "t42-buttons " + outsideClass },
611
- React__default["default"].createElement("div", { className: className }));
634
+ return React__default["default"].createElement("div", { title: selectedChannel !== null && selectedChannel !== void 0 ? selectedChannel : "", ref: ref, style: style, onClick: wrappedOnClick, className: "t42-buttons " + outsideClass }, channelLabel ?
635
+ React__default["default"].createElement("div", { className: className + " " + (direction ? "icon" : "") },
636
+ channelLabel,
637
+ direction && React__default["default"].createElement("i", { className: "icon-" + direction })) : React__default["default"].createElement("div", { className: className }));
612
638
  };
613
639
 
614
640
  var FlatChannelSelector = function (_a) {
615
- var showSelector = _a.showSelector, selectedChannel = _a.selectedChannel, selectedChannelColor = _a.selectedChannelColor;
616
- return React__default["default"].createElement(BaseChannelSelector, { outsideClass: "t42-frame-caption-bar-element t42-frame-channel-selector", contentClass: "t42-frame-channel-selector-content", showSelector: showSelector, selectedChannel: selectedChannel, selectedChannelColor: selectedChannelColor });
641
+ var showSelector = _a.showSelector, selectedChannel = _a.selectedChannel, selectedChannelColor = _a.selectedChannelColor, channelRestrictions = _a.channelRestrictions, channelLabel = _a.channelLabel;
642
+ return React__default["default"].createElement(BaseChannelSelector, { outsideClass: channelLabel ? "t42-frame-caption-bar-element t42-frame-channel-selector t42-channel-selector-direction" : "t42-frame-caption-bar-element t42-frame-channel-selector", contentClass: !channelLabel ? "t42-frame-channel-selector-content" : "", showSelector: showSelector, selectedChannel: selectedChannel, selectedChannelColor: selectedChannelColor, direction: getChannelDirection(channelRestrictions), channelLabel: channelLabel });
617
643
  };
618
644
 
619
645
  var ExtractButton = function (_a) {
@@ -1768,10 +1794,64 @@
1768
1794
  return React__default["default"].createElement("div", { id: moveAreaId, className: "t42-move-area t42-frame-caption-bar-element" }, children);
1769
1795
  };
1770
1796
 
1797
+ var BaseMultiChannelSelector = function (_a) {
1798
+ var _b, _c, _d;
1799
+ var outsideClass = _a.outsideClass, contentClass = _a.contentClass, showSelector = _a.showSelector, selectedChannels = _a.selectedChannels, channelLabel = _a.channelLabel, channelRestrictions = _a.channelRestrictions;
1800
+ var ref = React.useRef(null);
1801
+ var len = selectedChannels.length;
1802
+ var showBaseChannelSelector = len < 2;
1803
+ var wrappedOnClick = function () {
1804
+ if (!ref.current) {
1805
+ return;
1806
+ }
1807
+ var bounds = ref.current.getBoundingClientRect();
1808
+ showSelector({
1809
+ left: bounds.left,
1810
+ top: bounds.top,
1811
+ width: bounds.width,
1812
+ height: bounds.height,
1813
+ });
1814
+ };
1815
+ React.useEffect(function () {
1816
+ var _a;
1817
+ if (showBaseChannelSelector) {
1818
+ return;
1819
+ }
1820
+ var handler = function (e) {
1821
+ e.stopPropagation();
1822
+ };
1823
+ var current = ref.current;
1824
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.addEventListener("mousedown", handler);
1825
+ return function () {
1826
+ current === null || current === void 0 ? void 0 : current.removeEventListener("mousedown", handler);
1827
+ };
1828
+ }, [ref, showBaseChannelSelector]);
1829
+ if (showBaseChannelSelector) {
1830
+ return React__default["default"].createElement(BaseChannelSelector, { showSelector: showSelector, selectedChannel: (_b = selectedChannels[0]) === null || _b === void 0 ? void 0 : _b.name, selectedChannelColor: (_c = selectedChannels[0]) === null || _c === void 0 ? void 0 : _c.color, outsideClass: outsideClass, contentClass: contentClass, channelLabel: channelLabel, direction: getChannelDirection(channelRestrictions) });
1831
+ }
1832
+ var colors = (_d = selectedChannels.map(function (channel) { return channel.color; })) !== null && _d !== void 0 ? _d : [];
1833
+ var title = colors.join(", ");
1834
+ var lenMax4 = Math.min(len, 4);
1835
+ var cssClass = "t42-multi-channel-selector-content t42-multi-channel-selector-" + lenMax4;
1836
+ var style = {};
1837
+ colors.forEach(function (color, index) {
1838
+ var colorVarName = "--t42-multi-channel-selector-" + lenMax4 + "-color-" + (index + 1);
1839
+ style[colorVarName] = color;
1840
+ });
1841
+ return (React__default["default"].createElement("div", { id: "basem", title: title, ref: ref, onClick: wrappedOnClick, className: "t42-buttons " + outsideClass },
1842
+ React__default["default"].createElement("div", { className: cssClass, style: style })));
1843
+ };
1844
+
1845
+ var FlatMultiChannelSelector = function (_a) {
1846
+ var showSelector = _a.showSelector, selectedChannels = _a.selectedChannels, channelRestrictions = _a.channelRestrictions, channelLabel = _a.channelLabel;
1847
+ return React__default["default"].createElement(BaseMultiChannelSelector, { outsideClass: channelLabel ? "t42-frame-caption-bar-element t42-frame-channel-selector t42-channel-selector-direction" : "t42-frame-caption-bar-element t42-frame-channel-selector", contentClass: !channelLabel ? "t42-frame-channel-selector-content" : "", showSelector: showSelector, selectedChannels: selectedChannels, channelRestrictions: channelRestrictions, channelLabel: channelLabel });
1848
+ };
1849
+
1771
1850
  var FlatCaptionBar = function (_a) {
1772
1851
  var moveAreaId = _a.moveAreaId, caption = _a.caption, channels = _a.channels, captionEditor = _a.captionEditor, notifyCaptionBoundsChanged = _a.notifyCaptionBoundsChanged, rest = __rest(_a, ["moveAreaId", "caption", "channels", "captionEditor", "notifyCaptionBoundsChanged"]);
1773
1852
  return (React__default["default"].createElement("div", { className: "t42-react-caption-bar" },
1774
- (channels === null || channels === void 0 ? void 0 : channels.visible) && React__default["default"].createElement(FlatChannelSelector, { showSelector: channels === null || channels === void 0 ? void 0 : channels.showSelector, selectedChannel: channels === null || channels === void 0 ? void 0 : channels.selectedChannel, selectedChannelColor: channels === null || channels === void 0 ? void 0 : channels.selectedChannelColor }),
1853
+ (channels === null || channels === void 0 ? void 0 : channels.visible) && channels.channelsMode !== "multi" && React__default["default"].createElement(FlatChannelSelector, { showSelector: channels === null || channels === void 0 ? void 0 : channels.showSelector, selectedChannel: channels === null || channels === void 0 ? void 0 : channels.selectedChannel, selectedChannelColor: channels === null || channels === void 0 ? void 0 : channels.selectedChannelColor, channelRestrictions: channels === null || channels === void 0 ? void 0 : channels.channelRestrictions, channelLabel: channels === null || channels === void 0 ? void 0 : channels.channelLabel }),
1854
+ (channels === null || channels === void 0 ? void 0 : channels.visible) && channels.channelsMode === "multi" && React__default["default"].createElement(FlatMultiChannelSelector, { showSelector: channels === null || channels === void 0 ? void 0 : channels.showSelector, selectedChannels: channels === null || channels === void 0 ? void 0 : channels.selectedChannels, channelRestrictions: channels === null || channels === void 0 ? void 0 : channels.channelRestrictions, channelLabel: channels === null || channels === void 0 ? void 0 : channels.channelLabel }),
1775
1855
  React__default["default"].createElement(FlatMoveArea, { moveAreaId: moveAreaId }, captionEditor.show ? React__default["default"].createElement(FlatCaptionEditor, __assign({}, captionEditor, { caption: captionEditor.text, frameId: rest.frameId })) : React__default["default"].createElement(FlatCaption, { notifyBoundsChanged: notifyCaptionBoundsChanged, caption: caption })),
1776
1856
  React__default["default"].createElement(FlatButtons, __assign({}, rest))));
1777
1857
  };
@@ -1812,8 +1892,13 @@
1812
1892
  };
1813
1893
 
1814
1894
  var TabChannelSelector = function (_a) {
1815
- var showSelector = _a.showSelector, selectedChannel = _a.selectedChannel, selectedChannelColor = _a.selectedChannelColor;
1816
- return React__default["default"].createElement(BaseChannelSelector, { outsideClass: "t42-tab-bar-element t42-tab-channel-selector", contentClass: "t42-tab-channel-selector-content", showSelector: showSelector, selectedChannel: selectedChannel, selectedChannelColor: selectedChannelColor });
1895
+ var showSelector = _a.showSelector, selectedChannel = _a.selectedChannel, selectedChannelColor = _a.selectedChannelColor, channelRestrictions = _a.channelRestrictions, channelLabel = _a.channelLabel;
1896
+ return React__default["default"].createElement(BaseChannelSelector, { outsideClass: channelLabel ? "t42-tab-bar-element t42-tab-channel-selector t42-channel-selector-direction" : "t42-tab-bar-element t42-tab-channel-selector", contentClass: !channelLabel ? "t42-tab-channel-selector-content" : "", showSelector: showSelector, selectedChannel: selectedChannel, selectedChannelColor: selectedChannelColor, direction: getChannelDirection(channelRestrictions), channelLabel: channelLabel });
1897
+ };
1898
+
1899
+ var TabMultiChannelSelector = function (_a) {
1900
+ var showSelector = _a.showSelector, selectedChannels = _a.selectedChannels, channelRestrictions = _a.channelRestrictions, channelLabel = _a.channelLabel;
1901
+ return React__default["default"].createElement(BaseMultiChannelSelector, { outsideClass: channelLabel ? "t42-tab-bar-element t42-tab-channel-selector t42-channel-selector-direction" : "t42-tab-bar-element t42-tab-channel-selector", contentClass: !channelLabel ? "t42-tab-channel-selector-content" : "", showSelector: showSelector, selectedChannels: selectedChannels, channelRestrictions: channelRestrictions, channelLabel: channelLabel });
1817
1902
  };
1818
1903
 
1819
1904
  var TabCaption = function (_a) {
@@ -1851,7 +1936,8 @@
1851
1936
  var Tab = function (_a) {
1852
1937
  var caption = _a.caption, selected = _a.selected, close = _a.close, channels = _a.channels, captionEditor = _a.captionEditor, notifyCaptionBoundsChanged = _a.notifyCaptionBoundsChanged, windowId = _a.windowId, pinned = _a.pinned;
1853
1938
  return React__default["default"].createElement("div", { className: "t42-react-tab" },
1854
- channels.visible && React__default["default"].createElement(TabChannelSelector, __assign({}, channels)),
1939
+ channels.visible && channels.channelsMode !== "multi" && React__default["default"].createElement(TabChannelSelector, __assign({}, channels)),
1940
+ channels.visible && channels.channelsMode === "multi" && React__default["default"].createElement(TabMultiChannelSelector, __assign({}, channels)),
1855
1941
  captionEditor.show ?
1856
1942
  React__default["default"].createElement(TabCaptionEditor, __assign({}, captionEditor, { caption: captionEditor.text, selected: selected, windowId: windowId })) :
1857
1943
  React__default["default"].createElement(TabCaption, { notifyBoundsChanged: notifyCaptionBoundsChanged, caption: caption, selected: selected }),
@@ -2968,6 +3054,7 @@
2968
3054
  var _a;
2969
3055
  var FrameCaptionBarCustomElement = (_a = components === null || components === void 0 ? void 0 : components.flat) === null || _a === void 0 ? void 0 : _a.CaptionBar;
2970
3056
  return Object.values(state.frameCaptionBars).map(function (fcb) {
3057
+ var _a;
2971
3058
  if (!FrameCaptionBarCustomElement || !fcb.parentElement) {
2972
3059
  return;
2973
3060
  }
@@ -3023,7 +3110,11 @@
3023
3110
  showSelector: showSelector,
3024
3111
  visible: options.channelSelectorVisible,
3025
3112
  selectedChannel: options.selectedChannel,
3026
- selectedChannelColor: options.selectedChannelColor
3113
+ selectedChannelColor: options.selectedChannelColor,
3114
+ channelRestrictions: options.channelRestrictions,
3115
+ channelLabel: options.channelLabel,
3116
+ channelsMode: (_a = options.channelsMode) !== null && _a !== void 0 ? _a : "single",
3117
+ selectedChannels: options.selectedChannels
3027
3118
  };
3028
3119
  var captionEditor = __assign(__assign({}, options.captionEditor), { commitChanges: function (text) {
3029
3120
  webGroupsManager.commitCaptionEditing(TargetType.Frame, options.targetId, text);
@@ -3126,7 +3217,7 @@
3126
3217
  var _a;
3127
3218
  var TabCustomElement = (_a = components === null || components === void 0 ? void 0 : components.tabs) === null || _a === void 0 ? void 0 : _a.Element;
3128
3219
  return Object.values(state.tabElements).map(function (te) {
3129
- var _a;
3220
+ var _a, _b;
3130
3221
  if (!TabCustomElement || !te.parentElement) {
3131
3222
  return;
3132
3223
  }
@@ -3141,7 +3232,11 @@
3141
3232
  showSelector: showSelector,
3142
3233
  visible: options.channelSelectorVisible,
3143
3234
  selectedChannel: options.selectedChannel,
3144
- selectedChannelColor: (_a = options.selectedChannelColor) !== null && _a !== void 0 ? _a : options.selectedChannel // TODO remove the null check when the variable has been added
3235
+ selectedChannelColor: (_a = options.selectedChannelColor) !== null && _a !== void 0 ? _a : options.selectedChannel,
3236
+ channelRestrictions: options.channelRestrictions,
3237
+ channelLabel: options.channelLabel,
3238
+ channelsMode: (_b = options.channelsMode) !== null && _b !== void 0 ? _b : "single",
3239
+ selectedChannels: options.selectedChannels
3145
3240
  };
3146
3241
  var captionEditor = __assign(__assign({}, options.captionEditor), { commitChanges: function (text) {
3147
3242
  webGroupsManager.commitCaptionEditing(TargetType.Tab, options.targetId, text);
@@ -3449,6 +3544,7 @@
3449
3544
  exports.FlatCaptionEditor = FlatCaptionEditor;
3450
3545
  exports.FlatChannelSelector = FlatChannelSelector;
3451
3546
  exports.FlatMoveArea = FlatMoveArea;
3547
+ exports.FlatMultiChannelSelector = FlatMultiChannelSelector;
3452
3548
  exports.FrameLoadingAnimation = FrameLoadingAnimation;
3453
3549
  exports.GroupButtons = GroupButtons;
3454
3550
  exports.GroupCaption = GroupCaption;
@@ -3468,6 +3564,7 @@
3468
3564
  exports.TabChannelSelector = TabChannelSelector;
3469
3565
  exports.TabCloseButton = TabCloseButton;
3470
3566
  exports.TabHeaderButtons = TabHeaderButtons;
3567
+ exports.TabMultiChannelSelector = TabMultiChannelSelector;
3471
3568
  exports.TabOverflowPopup = TabOverflowPopup;
3472
3569
  exports.UnlockButton = UnlockButton;
3473
3570
  exports["default"] = GroupElementCreationWrapper;