This page includes the release notes related directly to Flex UI for versions 1.x.x. You can find release notes for v 2.x.x. here and for updates on other components of Flex Platform visit the Twilio Changelog and select the Flex product.
For detailed description of Flex UI public interfaces with code examples for each Flex UI version, visit our Flex UI API docs.
In Flex UI version 1.33 we introduced updates to some internal operations within Flex UI to no longer rely on data provided by Sync. This included Conference state management as well as Outbound calls and Transfer workflows. All of these now get data from TaskRouter SDK instead of Sync. This was done to reduce the number of dependencies in these workflows for better performance and increased resilience in the event of an incident. Flex UI versions 2.0 and above also include the same changes to Sync usage inside Flex UI.
This change only affects the internal operation of Flex UI and does not introduce any breaking changes that customers should be aware of. However, there are some UI changes that you may see.
Sync only stores data for 30 days since the last change to a status. This affects lists of workers (users) and queues that previously did not include workers or queues that had no change for 30 days. The parts of Flex UI that no longer use Sync can now fetch all workers and queue no matter when the last change was made.
Effect on Flex user experience
Under the hood, Flex UI now receives and displays Conference information from an alternative backend service, Flex Orchestrator, rather than Sync Maps. However, the same information is still published to Sync Maps in order to enable backwards compatibility with Flex UI customizations and plugins. In cases where a Flex customization makes heavy use of Conference data for advanced call use cases, there is the potential for inconsistencies in the UI. So far we have had a report of duplicate 'Left call' participants appearing in the call canvas. This particular issue was reported for a customer plugin based on this Twilio Professional Services plugin that renders participants of a call. The workaround for these inconsistencies is to use the native outbound dialer now built directly into Flex.
Flex UI now fetches workers and queues from an alternative backend service, Task Router, rather than Sync Maps. Workers and queues are soft deleted from Sync Maps after 30 days of inactivity, but this is not true of Task Router. This means more workers and/or queues may appear in the transfer directory than before.
Yes. We have only removed it from the parts of Flex UI mentioned above.
Yes, Sync can still be used for building additional functionality on top of Flex. Flex is still populating Sync with the same data as it did before.
We are currently evaluating other workflows that currently use Sync that could be improved by reducing dependencies.
Please contact Support to report any changes between these versions.
@twilio/flex-ui@1.34.6
release date January 18, 2024
@twilio/flex-ui@1.34.5
release date November 1, 2023
@twilio/flex-ui@1.34.4
release date September 27, 2023
@twilio/flex-ui@1.34.3
release date August 21, 2023
@twilio/flex-ui@1.34.2
release date July 14, 2023
@twilio/flex-ui@1.34.1
release date June 28, 2023
@twilio/flex-ui@1.34.0
release date Apr 20, 2023
@twilio/flex-ui@1.33.3
release date Feb 21, 2023
@twilio/flex-ui@1.31.3
release date Dec 15, 2022
@twilio/flex-ui@1.33.2
release date Dec 14, 2022
@twilio/flex-ui@1.32.3
release date Dec 14, 2022
@twilio/flex-ui@1.33.1
release date Dec 9, 2022
@twilio/flex-ui@1.32.2
release date Dec 8, 2022
@twilio/flex-ui@1.33.0
release date Nov 21, 2022
@twilio/flex-ui@1.32.1
release date Nov 10, 2022
@twilio/flex-ui@1.32.0
release date Sep 29, 2022
@twilio/flex-ui@1.31.2
release date Jun 28, 2022
@twilio/flex-ui@1.31.1
release date Jun 6, 2022
@twilio/flex-ui@1.31.0
release date May 18, 2022
Degraded mode - now Flex UI will initialize with limited capabilities, even if some of the components like SDK's (TaskRouter, Conversations, Voice or Sync) are down. This allows users to login to Flex even during a partial disruption of services and use the unaffected functionality. Learn more about degraded mode in our docs.
@twilio/flex-ui@1.28.2
release date Feb 07, 2022
@twilio/flex-ui@1.29.3
release date Feb 07, 2022
@twilio/flex-ui@1.30.2
release date Feb 03, 2022
@twilio/flex-ui@1.30.1
release date Jan 17, 2022
@twilio/flex-ui.1.30.0
@twilio/flex-ui@1.29.2
release date Jan 19, 2022
This release contains fixes to our pilot or private beta features.
@twilio/flex-ui@1.29.1
release date Dec 01, 2021
isCallTask
handlebar helper function
@twilio/flex-ui@1.29.0
release date Nov 10, 2021
@twilio/flex-ui@1.28.1
release date Oct 19, 2021
@twilio/flex-ui@1.28.0
release date Sep 30, 2021
@twilio/flex-ui@1.27.0
release date Jun 21, 2021
@twilio/flex-ui@1.26.3
release date June 7, 2021
@twilio/flex-ui@1.26.2
release date June 3, 2021
@twilio/flex-ui@1.26.1
release date May 13, 2021
WorkerDirectoryTabs
accepts 2 new default props
hiddenWorkerFilter
and
hiddenQueryFilter
which are filters that are applied to the list together with the filter applied due to user typing in the search string. For example, you can choose to display and search only agents with available status. To learn more about Transfer directory hidden filters, go to
Flex docs
.
ApplyListFilters
and
ResetListFilters
actions are now emitted when the apply or reset button is clicked in TeamsView filters. To learn more about Actions Framework go to our
Flex UI Programmability docs
.
Flex.ErrorManager.processError
and
Flex.ErrorManager.createAndProcessError
WorkerDirectoryTabs
can now be accessed directly and not just through
WorkerDirectory.Tabs
allow="clipboard-write”
)
@twilio/flex-ui@1.26.0
release date May 11, 2021
WorkerDirectoryTabs
accepts 2 new default props
hiddenWorkerFilter
and
hiddenQueryFilter
which are filters that are applied to the list together with the filter applied due to user typing in the search string. For example, you can choose to display and search only agents with available status. To learn more about Transfer directory hidden filters, go to
Flex docs
.
ApplyListFilters
and
ResetListFilters
actions are now emitted when the apply or reset button is clicked in TeamsView filters. To learn more about Actions Framework go to our
Flex UI Programmability docs
.
Flex.ErrorManager.processError
and
Flex.ErrorManager.createAndProcessError
WorkerDirectoryTabs
can now be accessed directly and not just through
WorkerDirectory.Tabs
allow="clipboard-write”
)
@twilio/flex-ui@1.25.4
release date APR 19, 2021
@twilio/flex-ui@1.25.3
release date MAR 31, 2021
@twilio/flex-ui@1.25.2
release date MAR 16, 2021
MaxListenersExceededWarning
in console
@twilio/flex-ui@1.25.1
release date FEB 26, 2021
@twilio/flex-ui@1.25.0
release date FEB 24, 2021
Debugger UI allowing users of Flex UI to get error notifications and download report with full error descriptions and logs. Debugger UI can be enabled for your account via a Pre-release Feature Flag
Flex UI programmable interfaces that provide ability to retrieve errors and logs programmatically and implement customized error monitoring and reporting
_10import { Monitor } from "@twilio/flex-ui";_10_10Monitor.getErrors(); // returns { errors: [Monitor.FlexErrorJSON] }_10Monitor.getLogs(); // returns { logs: 'string' }
To learn more about Flex UI troubleshooting, Debugger UI and programmatic access to errors and logs, visit our Flex docs and Flex UI API Reference.
WorkersDataTable.defaultProps.filters
API. Learn more about advanced filters in
Flex documentation
and
programmability guide
. We encourage you to migrate to the advanced filters that provide greater flexibility for the end users.
@twilio/flex-ui@1.24.3
release date FEB 15, 2021
react-select
and
emotion
) where importing flex-ui in Jest unit tests could sometimes break
@twilio/flex-ui@1.24.2
release date JAN 25, 2021
@twilio/flex-ui@1.23.4
release date JAN 25, 2021
@twilio/flex-ui@1.24.1
release date JAN 14, 2021
@twilio/flex-ui@1.24.0
release date DEC 9, 2020
@twilio/flex-ui@1.23.3
release date DEC 2 2020
@twilio/flex-ui@1.23.2
release date NOV 23 2020
@twilio/flex-ui@1.23.1
release date NOV 16 2020
@twilio/flex-ui@1.23.0
release date NOV 09 2020
enableReduxLogging
flag in AppConfig that will help developers to fine-tune their preferred logging level of redux action
New versions of dependencies can contain changes in internal APIs that we do not document in release notes. If you're using any undocumented apis of upgraded dependencies, please review your code and update your customizations as needed. Any changes in undocumented api's are not considered breaking changes, however, if you are using them, this might break your customizations.
Example: This version of chat-sdk contains changes in internal API. To access channel attributes, channel.attributes
is supported as per https://media.twiliocdn.com/sdk/js/chat/releases/3.4.0/docs/Channel.html and not channel.state.attributes
.
@twilio/flex-ui@1.22.2
release date OCT 27 2020
@twilio/flex-ui@1.22.1
release date OCT 21 2020
@twilio/flex-ui@1.22.0
release date SEP 16, 2020
TaskCanvas
minimum size reduced to allow splitter interaction on small screens. Now, if window height is less than 600px, there will be 20% of space left for
TaskList
http://flex.twilio.com?test=true
.
@twilio/flex-ui@1.21.1
release date SEP 15 2020
@twilio/flex-ui@1.21.0
release date AUG 10, 2020
getState()
from within Redux reducer methods to support custom Redux stores.
@twilio/flex-ui@1.20.1
release date JUL 1, 2020
errorPage
context-independent
@twilio/flex-ui@1.20.0
release date JUN 23, 2020
This version Flex UI API Reference is available here
Image and file sharing for Web Chat channel in Pilot
Hold music
holdMusicUrl
and
holdMusicMethod
for HoldCall/HoldParticipant actions to configure a custom hold music
participantCallSid
property in their payload, which indicates the voice connection sid in the conference for the participant. Flex does not take that payload into account, but customers overriding these actions can use that property to filter out custom participants. For more details on specific actions, go to
Flex UI API reference
Error handling improvement
Flex.errorPage
API to render a user-friendly error message screen for errors during Flex initialization. Users will now see details of the error and they can download a report which will provide technical details for troubleshooting.
FlexError
- a universal error class that provides unified API to work with Flex exceptions. For more details on FlexError class, go to
Flex UI API reference
Notification for signal connectivity issues
FlexEvent.connectionStateChanged
event for both disconnect and reconnect.
@twilio/flex-ui@1.19.0
release date APR 27, 2020
Handlebars Dependency Upgrade: Handlebars provides templating for the strings exposed by Flex UI and Flex WebChat UI. In this release we are upgrading Handlebars to 4.7.3 to fix critical security vulnerabilities exposed in previous versions of Handlebars. This may be a breaking change if you use certain undocumented Handlebars features. You can find more information about this change atthe following link.
defaultSortColumn
prop to
DataTable
to allow for initial sorting of the table.
sortDirection
prop to
DataTable.ColumnDefinition
to specify how the data should be sorted first. The value is either "asc" or "desc".
theme.DataTable.Header
to customize
DataTable
headers. You can specify the
root
and
clickable
properties.
For more information on programmable sorting in Queue Stats View visit Queues View programmability guide
insightsClient
can no longer be broken by incorrect
sdkOptions.insights
configuration.
QueuesStats.QueuesDataTable.sortable
property. The table can be sorted by any of the default columns. Find out more about Queue Stats View customizations
here
.
TeamsView.defaultProps.filtersEnabled
was removed. Custom code still attempting to use it will not work. To toggle Advance Team View Filters on/off, please use the pilot flag on the feature page
https://flex.twilio.com/admin/features
. For more info on Advanced Team View Filters, go
here
.
@twilio/flex-ui@1.18.1
release date APR 16, 2020
@twilio/flex-ui@1.17.3
release date APR 14, 2020
@twilio/flex-ui@1.18.0
release date MAR 24, 2020
Release notes updated on April 16th. Added mention of Outbound Dialing and Native Dialpad Public Beta release and Browser notifications bugfix
@twilio/flex-ui@1.18.0
release date MAR 24, 2020
@twilio/flex-ui@1.17.2
release date MAR 23, 2020
@twilio/flex-ui@1.17.1
release date FEB 24, 2020
initialDeviceCheck
from feature flag config.
initialDeviceCheck
in Flex UI will respect the feature flag value.
@twilio/flex-ui@1.17.0
release date FEB 20, 2020
viewResized
event. This event gets triggered once the window resizes, debounced by 100ms. This will replace
selectedViewChanged
for resize events in the next major release. If you rely on
selectedViewChanged
for detecting resize events, consider adopting
viewResized
.
initialDeviceCheck
can be set to
false
to prevent this issue.
selectedViewChanged
event now gets correctly triggered only once when view changes
selectedViewChanged
event now receives a second argument:
isSameViewResized
. This Boolean describes whether the view has actually changed or the same view has been resized.
isSameViewResized
will be always set to
false
once
selectedViewChanged
is deprecated for resize events.
@twilio/flex-ui@1.16.2
release date JAN 27, 2020
@twilio/flex-ui@1.16.1
release date JAN 14, 2020
@twilio/flex-ui@1.15.3
release date JAN 14, 2020
@twilio/flex-ui@1.16.0
release date DEC 17, 2019
Actions Framework
_10 Actions.invokeAction("SendDTMFDigits", {_10_10 sid: "WRXXXXXXXXXXXXXXXXX",_10_10 digits: "567"_10_10 });
_10Actions.replaceAction("HistoricalReporting:view", async (url, original) => {_10_10 // implement your own handling of URL or call original(url) to use the original handler_10_10})
_10Actions.invokeAction("ReloadWindow")
Flex Insights
SendDTMFDigits`` action
instead of calling Voice SDK directly.
QueuesDataTable
headers are now localizable with:
QueuesStatsHeaderQueueName, QueuesStatsHeaderActiveTasks, QueuesStatsHeaderWaitingTasks, QueuesStatsHeaderLongestWait, QueuesStatsHeaderAgentsActivity.
@twilio/flex-ui@1.15.2
release date DEC 05, 2019
@twilio/flex-ui@1.15.1
release date DEC 01, 2019
@twilio/flex-ui@1.15.0
release date NOV 22, 2019
SetWorkerActivity
, which is invoked when supervisors update a worker's status. Read more about actions here.
_10Actions.invokeAction("SetWorkerActivity", { workerSid: "WKXXXXXXXXXXXXXXXXX", activitySid: "WAXXXXXXXXXXXXXXXXX" })
channel.templates.TaskCanvasTabs.contentTabHeader
for channel specific labels in
TaskCanvasTabs
. Now labels of
TaskCanvasTabs
can be changed like any other labels. Note, that
TaskTabAgentCallLabel
and
TaskTabAgentChatLabel
strings are no longer used. Find out more about Task Channel Definition API here and strings templating here.
@twilio/flex-ui@1.13.2
release date OCT 31, 2019
@twilio/flex-ui@1.14.1
release date OCT 30, 2019
@twilio/flex-ui@1.13.1
release date OCT 08, 2019
@twilio/flex-ui@1.14.0
release date OCT 07, 2019
Notifications
We introduced browser notification capabilities:
Improvements to Notifications Framework:
Browser notifications can be enabled via a feature flag. Go toversioning page in Flex Admin UI to turn browser notifications on or off.
Find out more about these and other capabilities of Flex Notifications Framework here
Customer presence
TaskHeaderWebChatStatusAccepted
and/or
TaskLineWebChatAssigned
. For these templates, you can access the reachability status via
helper.chat.isCustomerOnline
.
Typing indicator improvements
Unread message count and badges
TaskListItem
and SideNav
now has supports for showing Badges.
componentProps.TaskListItem.Badge.children
property. If the content equal to zero or undefined, no badge is going to be shown.
_10myTaskChannelDefinition.componentProps.TaskListItem.Badge.children = (_10 appState: AppState,_10 context: TaskListItemProps & TaskContextProps_10) => {_10 const badgeContent: number = applyCustomLogic(appState, context); // just an example_10 return badgeContent;_10};
SideNav
has 2 new static properties (
AgentDesktop &
Teams
) which represents link components for each view. It can be accessed to change the default
Badge
property.
_10Flex.SideNav.AgentDesktop.defaultProps.Badge = {_10 children: 2_10};
Markdown
As of version 1.14.1 of Flex UI, numbered list support for Markdown has been temporarily suspended
Markdown
Options | Syntax |
---|---|
Bold | **Bold** |
Italic | *Italic* |
Strikethrough | ~Strikethrough~ |
Bullet list | * List * List * List |
Numbered list | 1. One 2. Two 3. Three |
Other
Introduced ChatChannelHelper
class to wrap all Chat Channel specific helper methods. An instance of a task can be obtained from TaskHelper.chat
property. TaskHelper.lastChatMessage
method was deprecated, use ChatChannelHelper.lastMessage
instead. Now a developer can get access to Task last message, customer presence and typers (array of members who are typing in the channel). Available properties for this class:
isCustomerOnline
- Returns true if customer is online, false if not
lastMessage
- Gets helper for last chat message
typers
- Gets all channel members which are currently typing (except you)
withTaskContext
now returns a correctly typed component instead of any. Therefore it may not be used as a class decorator anymore, but it must be called. This change may also result in new TypeScript errors surfacing incorrect prop types or similar issues.
Content of localization strings changed:
TaskHeaderStatusAccepted
- this string is no longer used for WebChat tasks. A new string has been introduced for that
TaskHeaderWebChatStatusAccepted
TaskLineChatAssigned
- this string is no longer used for WebChat tasks. A new string has been introduced for that
TaskLineWebChatAssigned
Improvements to Action Framework error handling:
invokeAction
now returns an Error when the Promise is rejected
ToggleMute
,
HoldCall
,
UnholdCall
and
HangupCall
to throw an Error instance instead of just an error string in case of a failure. This will allow to provide more detailed error description in the future and improves error tracing down the stack and identify which SDK the error came from.
useLocalState
prop of
MessageInput
is enabled by default for performance improvement
@twilio/flex-ui@1.13.0
release date AUG 29, 2019
UI performance improvements
@twilio/flex-ui@1.12.1
release date AUG 15, 2019
@types/uuid
package causing issues with
npm install
command on Windows platform
@twilio/flex-ui@1.12.0
release date AUG 14, 2019
AudioPlayerManager API,
which makes it easier to add sound playback to your custom code when extending Flex UI.
Read about it here
.
ChatOrchestrator
object now supports setting orchestrations based on a task. This will allow you to decide how to handle chat based tasks on per task basis.
_10const orchestrationsCallback = (task: ITask) => {_10 if (task.sid === "WT12345") {_10 return [];_10 }_10};_10Flex.ChatOrchestrator.setOrchestrations("accepted", orchestrationsCallback);
We have added ability to send DTMF tones during a voice call to all parties on the call. This includes:
_10export type DialpadButtonClickCallback = (value: string) => void;_10export interface DialpadProps {_10 onClick: DialpadButtonClickCallback;_10}
2 new actions are introduced:
ToggleDTMFDialpad
to open and closed Dialpad in the CallCanvas.
SetDTMFDialpadDigits
to set digits in the DTMF
Go to Actions Framework page for more details on actions and their payload.
IncomingTaskCanvas
action buttons are now a programmable component
IncomingTaskCanvasActions.
You can now add, replace or remove these using
programmable components content property
or Task Channel Definitions API.
Example: Add an eye-iconed button to the end of the list of incoming task canvas actions using content property
_10Flex.IncomingTaskCanvasActions.Content.add(<IconButton key="hi" icon="Eye" />);
Example: Add an eye-iconed button to the end of the list of incoming task canvas actions using Task Channel Definitions API
_10Flex.DefaultTaskChannels.Call.addedComponents = [{_10 target: "IncomingTaskCanvasActions",_10 component: <IconButton key="hi" icon="Eye" />,_10}];
WorkersDataTable, WorkerListFilterSelect, WorkersDataTable, WorkersDataTableProps and WorkerListFilter
.
Aria props properties to the following components to support accessibility:
MessageInput:
sendButtonAriaProps
• AriaProps • Send button aria props (
{ ariaLabel: "Send Message" }
by default).
textAreaAriaProps
• AriaProps • Text area aria props (
{ ariaLabel: "Enter your message here to get help" }
by default)
MessageList:
listContainerAriaProps
• AriaProps • List container aria props (
{ ariaLive: AriaLive.Off }
by default).
EntryPoint:
collapsedIconAriaProps
• AriaProps • Collapsed icon aria props (
{ariaLabel: "Click here to open Web Chat and get help."}
by default).
openedIconAriaProps
• AriaProps • Opened icon aria props (
{ariaLabel: "Hide Chat"}
by default).
Example on how to set aria attributes:
_10FlexWebChat.MessageInput.defaultProps.sendButtonAriaProps = {_10 ariaLabel: "Send Message",_10 ariaLive: FlexWebChat.AriaLive.Polite_10};_10_10FlexWebChat.MessageInput.defaultProps.textAreaAriaProps = {_10 ariaLabel: "Enter your message here to get help",_10 ariaLive: FlexWebChat.AriaLive.Assertive_10};
theme.Chat.MessageInput.Button
and allows adding text
Example on how to change the icon for a text:
_21appConfig = {_21 <...>_21 colorTheme: {_21 overrides: {_21 Chat: {_21 MessageInput: {_21 Button: {_21 borderRadius: "5px",_21 width: "100px",_21 fontSize: "10px",_21 svg: {_21 display: "none"_21 },_21 ":after": {_21 content: '"Send"'_21 }_21 }_21 }_21 }_21 }_21 <...>
Facebook
WorkersDataTable
will now be correctly sorted and will maintain its proper position
Team View performance improvements
IconButton
now has default hover tone dependent on whether theme is dark or light.
MessageBubble
now displays
MediaMessageError
string on such message.
Notifications.dismissNotificationById
will now dismiss ALL notifications by that ID
release date AUG 6, 2019
The Flex Plugin Builder v3 is now in Beta. This release enables you to build and deploy your plugins directly from the CLI by leveraging the Functions & Assets API. You can integrate the release of your hosted Flex plugins within a CI/CD pipeline.
To opt into the newest version, check our upgrade guide for using the Plugin Builder.
@twilio/flex-ui@1.11.2
release date JULY 4, 2019
@twilio/flex-ui@1.11.1
release date JULY 1, 2019
Twilio.Flex.runDefault()
removing search string from query path.
@twilio/flex-ui@1.11.0
release date JUNE 25, 2019
legacy
property to
ContextProvider
component. This resolves conflicts between multiple
react-redux
versions for self-hosted applications. We suggest not to use multiple
react-redux
versions, but if you need to use multiple versions, pass legacy={true}, then Flex
ContextProvider
instance will be rendered even with custom Redux store.
theme.FormComponents.Select
to
Theme
to customize the
Select input item
useSeparateInputStore
introduced in the payload for action
SetInputText
. Setting it to
true
, will store the message text in separate state and improves performance of typing in Chat/Messaging/SMS dialog when handling a task. From the next major release of Flex, this prop will be defaulted to
true
. This can be changed by setting the new default property
useSeparateInputStore
of
MessageInput.
_10Flex.MessageInput.defaultProps.useSeparateInputStore = true;
tasksA
and
tasksB
arguments to
AgentsDataTable.defaultProps.initialCompareFunction
. This will allow to sort the list of agents based on task attributes rather than worker attributes. For example, you can do initial sort of the agents based on longest duration of the task.
Example:
_10Flex.AgentsDataTable.defaultProps.initialCompareFunction = (a: Flex.IWorker, b: Flex.IWorker, tasksA: Array<Flex.ITask>, tasksB: Array<Flex.ITask>) => {_10return tasksA.length - tasksB.length;_10}
In order to change ParticipantCanvas
when it is in list mode, developer will need to use ParticipantCanvas.ListItem
.
Example: Adding a button to the bottom of the normal participant
_10Flex.ParticipantCanvas.Content.add(<button key="key">Hi</button>);
Example: Adding a button to the end of participant that is shown in a list
_10Flex.ParticipantCanvas.ListItem.Content.add(<button key="key">Hi</button>);
theme.FormComponents.TextArea
now applies to the
textarea
container, not directly to the element itself. This is to enforce consistency between form item.
RootContainer
, thus allowing to change font consistently in whole application:
Example: How to set custom font for the whole Flex application
_10appConfig = {_10 <...>_10 colorTheme: {_10 baseName: "FlexLight",_10 overrides: {_10 RootContainer: {_10 "font-family": "MyCustomFont"_10 }_10 }_10 }
cols
support for text area.
connect
function which did not connect to correct Redux store.
@twilio/flex-ui@1.10.0
release date JUNE 05, 2019
CallCanvasActions
component that is a set of buttons in the call canvas is now programmable. Now you can add, replace or remove buttons from the Call Canvas. This will allow you to add custom actions to live calls or remove actions you don't want users to take on a live call.
You can add and remove buttons using Content object
add and remove methods or using Task Channel Definition API
Example: Add an eye-iconed button using Content object
_10Flex.CallCanvasActions.Content.add(<IconButton key="hi" icon="Eye" />)
Example: Add an eye-iconed button using Task Channel Definition API
_10Flex.DefaultTaskChannels.Call.addedComponents = [{_10 target: "CallCanvasActions",_10 component: <IconButton key="hi" icon="Eye" />,_10}];
Supervisor.TaskCanvas.Header
and
Supervisor.WorkerCanvas.SectionCaption
components were missing keys to override their themes. Now you can style TaskCanvas header and sub section header in WorkerCanvas respectively using
Theme object
Supervisor.WorkerCanvas.SectionCaption
Supervisor.TaskCanvas.Header
@twilio/flex-ui@1.9.2
release date JUNE 03, 2019
@twilio/flex-ui@1.9.1
release date MAY 28, 2019
initialFirstPanelSize
can be set within
Configuration
for the
AgentDesktopView.Panel1
component
@twilio/flex-ui@1.9.0
release date MAY 20, 2019
Setting component state
A new action SetComponentState
has been added. This action alters the current state of the component. Component states is a componentName => key/value pairs
dictionary in Redux store that this action manipulates. Read more about this action in Actions Framework.
Additional reducers
We have added 2 new methods to support adding additional reducers:
flexStoreEnhancer
to support adding additional reducers.
Example:
_10const myReduxStore = createStore(_10 reducers,_10 compose(_10 applyFlexMiddleware(),_10 flexStoreEnhancer // <-- Add enhancer part of compose_10 )_10);
addReducer
api to
manager.store
to add additional reducer.
Example:
_10manager.store.addReducer("new", newReducer);
Chat Orchestration
ChatOrchestrator
object can now be used to disable default chat orchestration.
There are three chat orchestrations that are supported and enabled by default:
AddToChatChannel
- Request agent to be added to the chat channel (by default runs on the
accepted
event from
Reservation
)
DeactivateChatChannel
- Mark chat channel status as
INACTIVE
(by default runs on
WrapupTask
and
CompleteTask
actions and on the
wrapup
and
completed
event from
Reservation
object if it was not done already)
LeaveChatChannel
- Remove agent from the chat channel (by default runs on
CompleteTask
action and on the
completed
event from
Reservation
object if it was not done already)
ChatOrchestrator.clearAllOrchestrations()
.
Orchestrations can be enabled or disabled by Reservation events (accepted
, wrapup
, completed
) which affects corresponding actions as well. For example:
accepted
event:
Flex.ChatOrchestrator.setOrchestrations("accepted", []);
Flex.ChatOrchestrator.setOrchestrations("wrapup", []);
completed
event:
Flex.ChatOrchestrator.setOrchestrations("completed", ["LeaveChatChannel"]);
Setting activity state
Agents can move to an unavailable activity state even if they have pending reservations, and supervisors can set agents with pending reservations to an unavailable state. This capability can be disabled by setting the configuration option rejectPendingReservations
to false or overriding it in the SetActivity
action payload:
_10Actions.addListener("beforeSetActivity", (payload) => {_10 payload.options.rejectPendingReservations = true;_10});
AgentDesktopView.Panel1
got a new default property
splitterOrientation
that determines whether orientation of the content will be vertical, horizontal or automatic (
"auto"
) based on content size.
New localization strings added
TaskTabSupervisorCallLabel
- Call task tab label in Supervisor task canvas.
TaskTabSupervisorChatLabel
- Chat task tab label in Supervisor task canvas.
TaskHeaderStatusPending
- Describes task that is in pending state. It's used in TaskCanvasHeader.
TaskHeaderGroupCallAccepted
- Describes conference call task that is in accepted state. It's used in TaskCanvasHeader.
TaskHeaderStatusAccepted
- Describes task that is in accepted state. It's used in TaskCanvasHeader.
TaskHeaderStatusWrapup
- Describes task that is in wrapup state. It's used in TaskCanvasHeader.
TaskHeaderStatusCompleted
- Describes task that is in completed state. It's used in TaskCanvasHeader.
TaskCanvasHeader
now accepts a new prop
secondLineTemplateCode
. By default it describes the status of the task.
callSid
to Participant object in
Conferences
state.
Chat orchestration failure now can prevent action invocations:
WrapupTask
action will fail.
CompleteTask
action will fail.
wrapup
event (if it did not happen in
WrapupTask
action already)
withTheme
decorators to inject
theme
prop
Following type definitions are changed for consistency:
CallCanvasProps
renamed to
CallCanvasChildrenProps
TaskCanvasProps
renamed to
TaskCanvasChildrenProps
NoTaskCanvasProps
renamed to
NoTaskCanvasChildrenProps
ParticipantsCanvasProps
split in a
ParticipantsCanvasProps
subset and
ParticipantsCanvasChildrenProps
TaskCanvasHeaderProps
split in a
TaskCanvasHeaderProps
subset and
TaskCanvasHeaderChildrenProps
TaskCanvasTabsProps
split in a
TaskCanvasTabsProps
subset and
TaskCanvasTabsChildrenProps
TaskInfoPanelProps
split in a
TaskInfoPanelProps
subset and
TaskInfoPanelChildrenProps
MainHeaderProps
split in a
MainHeaderProps
subset and
MainHeaderChildrenProps
AgentDesktopViewProps
split in a
AgentDesktopViewProps
subset and
AgentDesktopViewChildrenProps
LoginViewProps
split in a
LoginViewProps
subset and
LoginViewChildrenProps
TeamsViewProps
split in a
TeamsViewProps
subset and
TeamsViewChildrenProps
CRMContainerProps
split in a
CRMContainerProps
subset and
CRMContainerChildrenProps
LiveCommsBarProps
renamed in
LiveCommsBarChildrenProps
MainContainerProps
split in a
MainContainerProps
subset and
MainContainerChildrenProps
MuteButtonProps
split in a
MuteButtonProps
subset and
MuteButtonImplProps
RootContainerProps
renamed in
RootContainerChildrenProps
SideNavProps
split in a
SideNavProps
subset and
SideNavImplProps
TaskListButtonsProps
renamed in
TaskListButtonsChildrenProps
ViewCollectionProps
split in a
ViewCollectionProps
subset and
ViewCollectionImplProps
SupervisorTaskCanvas
tabs title changed from "Overview" to "Call" or "Chat" based on the type of task.
@twilio/flex-ui@1.8.2
release date MAY 8, 2019
@twilio/flex-ui@1.8.1
release date MAY 6, 2019
HoldCall
/
UnholdCall
Actions
@twilio/flex-ui@1.8.0
release date APR 26, 2019
TaskListButtons
component that is the set of buttons in a tasklist item is now programmable (buttons can be added/removed). Example that shows a button as the last button for call tasks that have status as "accepted":
_10 const shouldShow = (props) => {_10 return props.task.status == "accepted";_10 };_10_10 Flex.DefaultTaskChannels.Call.addedComponents = [{_10 target: "TaskListButtons",_10 component: <IconButton key="eye_button" icon="Eye" />,_10 options: {if: shouldShow}}];
ToggleSidebar
are introduced with following payload:
_10{_10 open?: boolean; // used to explicitly open or close the sidebar._10}
Twilio
or their direct descendants without any class. The CSS attributes that are meant to be inherited are now under the
Twilio-CommonStyles
class.
@twilio/flex-ui@1.7.4
release date MAY 8, 2019
@twilio/flex-ui@1.7.3
release date MAY 6, 2019
HoldCall
/
UnholdCall
Actions
@twilio/flex-ui@1.7.2
release date APR 26, 2019
@twilio/flex-ui@1.7.1
release date APR 5, 2019
TaskLineTitle
used for default task channel in
IncomingTaskCanvas
@twilio/flex-ui@1.7.0
release date MAR 29, 2019
This release contains several minor fixes, some internal refactoring and foundational work for Warm Transfers
@twilio/flex-ui@1.6.2
release date APR 26, 2019
@twilio/flex-ui@1.6.1
release date MAR 28, 2019
history
package imports (affected the self-hosted builds)
@twilio/flex-ui@1.6.0
release date MAR 12, 2019
@twilio/flex-ui@1.5.0
release date FEB 18, 2019
Twilio.Flex.Wfo.Identity
<meta name="referrer" content="no-referrer">
element to be present in
<head>
section of HTML. If such element does not exists then Flex will issue additional browser redirect in login flow after returning from IdP (and token is present in the URL).
Reserved
and
Assigned
keys in
TaskStatusBasedTypeBase
for task channel definitions. Use new
Accepted
key for reservation accepted state.
serviceConfiguration.attributes.taskrouter_offline_activity_sid
and, if that's not provided, fallback to the name. You can now change the name of the 'Offline' activity and users will still be set that activity on logout, or choose a completely different activity that users should be set to on logout, by changing
serviceConfiguration.attributes.taskrouter_offline_activity_sid
in the Configuration Service
Pending
task based status key from task channel definition if both
Pending
and
Reserved
were defined for
TaskStatusBasedTypeBase
@twilio/flex-ui@1.4.1
release date FEB 6, 2019
available
@twilio/flex-ui@1.4.0
release date JAN 11, 2019
endConferenceOnExit
set to
true
, so when agent ends the call the call will be ended for the customer as well. There is no reason anymore to override the
acceptTask
action to achieve this.
disabledTransfers
config option as it is obsolete due to the fixed know issue with
Transfers call disconnect
@twilio/flex-ui@1.3.3
release date JAN 10, 2019
@twilio/flex-ui@1.3.2
release date JAN 9, 2019
@twilio/flex-ui@1.3.1
release date DEC 20, 2018
@twilio/flex-ui@1.3.0
release date DEC 19, 2018
Voice
Messaging
Plugins
FlexEvents.pluginsLoaded
that fires after all plugins have finished loading.
React
,
ReactDOM
,
Redux
and
ReactRedux
to window object for plugins to depend on.
Actions
MonitorCall
action payload got a new param
extraParams
that is the equally named TR SDK param for
Reservation.monitor
call. It is optional and UI does not set it, but developer can alter it via programmability if need be.
isolate
for
router
configuration section: whenever set to true, Flex will ignore any navigation action (including URL change) except for internal.
beforeSendMessage
action to check if the message exceeds the limit and handle it accordingly.
SendMessage
action got optional
messageAttributes
property to its payload that, if specified, will be used as the equally named property of the Chat SDK
sendMessage
call.
Views and routing
componentProps
by setting
defaultLocation
property for
ViewCollection
.
FLEX_LOCATION_CHANGE
constant. It can be used to listen to Flex navigation actions or do dispatch Flex-specific navigation actions.
Voice
disableBrowserVoice
option for configuration. When specified Twilio Client SDK (for Browser voice capability) will not be initialized. Attempting to accept a task that is voice and with worker's
contact_uri
not pointing to a phone number, the attempt is blocked and warning is shown.
Messaging
Character limit added to messages sent by agent. Character count indicator will be shown below text input when agent exceeds the limit. Character limits per channel:
charLimit
SSO login
config.sso.loginPopup = true
can be set to enable it. To gracefully handle blocked popups, new
LoginFormView
React component or
provideLoginInfo
or
tryLogin
Twilio.Flex API function can be used to launch it. Additionally pop-up window features for
window.open()
function can be set in
config.sso.loginPopupFeatures
configuration variable as string.
Twilio.Flex
interface:
_33/**_33 * Runs Flex with default setup._33 * It will show loader and prompts for login information_33 * if it is not provided in configuration object._33 *_33 * @param [config] configuration object_33 * @param [nodeOrSelector] DOM node or selector string where to render Flex_33 * @returns {Promise<void>}_33 */_33 export function runDefault(config: Config = {}, nodeOrSelector: string | Element = "body"): Promise<void>;_33_33 /**_33 * Tries to log user in to Flex._33 * Can redirect the current browser window to the IdP URL or_33 * open a new window to navigate to IdP URL if config.loginPopup is set._33 *_33 * @param [config] SSO configuration object_33 * @return {Promise<boolean>} true if there is valid token and user can be logged in._33 */_33 function tryLogin(config: SSOConfig = {}): Promise<boolean>;_33_33 /**_33 * Helper function to provide additional account and user info if it is not set._33 * Updates the provided config object._33 *_33 * Renders a LoginFormView component if accountSid is not provided or there are problems with signing user in._33 *_33 * @param [config] configuration object_33 * @param [nodeOrSelector] DOM node or selector string where to render the component_33 * @returns {Promise<void>} if resolved, then Flex instance can be created with_33 * provided config object._33 */_33 function provideLoginInfo(config: Config = {}, nodeOrSelector: string | Element = "body"): Promise<void>;
LoginFormView
React component to be used to provide account / user info with the following props:
_10interface LoginFormViewProps {_10 onSuccess: (determinedConfig: Config) => any;_10 userConfig: Config;_10}
LoginFormView
component:
_14 LoginContinue: "Continue anyway",_14 LoginLaunch: "Launch",_14 LoginTitle: "Twilio Flex",_14 LoginErrorDomain: "Oops! Your runtime domain is incorrect.",_14 LoginErrorDomainDetails: "Find your runtime domain " +_14 "<a href='https://www.twilio.com/console/runtime/overview'>here</a>",_14 LoginErrorSso: "Hmm, Single Sign-On has not been configured.",_14 LoginErrorSsoDetails: "Find out how to configure Single Sign-On " +_14 "<a href='https://www.twilio.com/console/flex/users/single-sign-on'>here</a>",_14 LoginErrorPopupBlocked: "Sorry, pop-ups are blocked.",_14 LoginErrorPopupBlockedDetails: "Find out how to enable pop-ups in your browser",_14 LoginErrorGeneric: "Oops! Well, that didn't work :( Please double check your configuration.",_14 LoginIsAdmin: "Flex Admin?",_14 LoginWithTwilio: "Login with Twilio.",
Views and routing
View
now has multiple route path support. By default
name
prop is taken as string to be added to the path of the specified
View
. One can add alternative routes with
route
prop.
Example:
_10<View key="teams" name="teams" route={{ path: "/supervisor" }}> // both http:/domain/teams and http://domain/supervisor will work_10_10<View key="teams" name="teams" route={{ path: ["/supervisor", "something"] }}> // both http:/domain/teams and http://domain/supervisor and http://domain/something will work
ViewCollection
was not using DynamicComponent properly so all manipulations of it other than
add
via programmability did not work.
Voice
@twilio/flex-ui@1.2.0
release date NOV 22, 2018
baseNames
theme names changed
Deprecated name | New Theme name |
---|---|
DarkTheme | GreyDark |
MediumTheme | GreyLight |
BlueMediumTheme | FlexLight |
BlueDarkTheme | FlexDark |
icon
to
label
in
Tab
label components in agent
TaskCanvasTabs
and supervisor
TaskCanvas
_10export interface Strings<T = string> extends FrameStrings<T> {_10 ..._10 TaskTabAgentIncomingLabel?: T;_10 TaskTabAgentCallLabel?: T;_10 TaskTabAgentChatLabel?: T;_10 TaskTabAgentInfoLabel?: T;_10 TaskTabSupervisorInfoLabel?: T;_10 TaskTabSupervisorOverviewLabel?: T;_10}
Views
of
ViewCollection
got a new prop
mountRule
. If specified,
keepMounted
prop value is ignored. Definition of the prop is as follows:
_10export enum ViewMountRule {_10 Always = "Always", // View is mounted from the start of the application and never unmounted_10 WhenActive = "WhenActive", // Views is mounted when activated and unmounted when deactivated_10 WhenHasBeenActive = "WhenHasBeenActive" // View is mounted when first activated and never umounted_10}
@twilio/flex-ui@1.1.0
release date NOV 6, 2018
TransferTask
was introduced. As with all other Task specific actions, if calling it, either
task
or
sid
must be specified, the other is autofilled then accordingly. When tapping into the action either with events or task replacement, both will be filled at execution time. Payload of the action:
_10{_10 sid?: string; // sid of the ITask to transfer_10 task?: ITask; // ITask object representing the Reservation being transferred_10 targetSid: string; // sid of the Worker or Queue where the task should be transferred to_10 options?: Object // options passed over to TaskRouter SDK transfer call. Refer to TaskRouter SDK documentation on Task.transfer option values._10}
label
property to the
Tab
component. When provided, it will display a label into the
Tab
element. If the value matches a code in language strings array, the contents of the language string is used as template. Otherwise the value is used as just string. If
label
is not provided,
icon
property is considered and used.
alignment
property to
Tabs
. When provided, it will change the tabs alignment. Possible values are
left
or
center
. Default is
center
.
New GA version of Flex UI has been released and are now available on NPM
endConferenceOnExit
set to
false
, meaning that the call will not stop for customer when agent stops the call.
disableTransfers
config options was created. By default
false
, if set to true, the
endConferenceOnExit
will be enabled but transfers to other agents will not be available.
WorkerCanvas
component prop
showSkills
to
false
.
public_identity
from worker attributes gets set to agent's chat user friendly name. If that is not set, then
full_name
attribute is used.
taskSid
in payload will now expect
sid
instead. Potential breaking change!
sourceObject
which will be pointing to the actual SDK object. Reservation in case of TaskRouter, InsightsObject in case of Insights (Supervisor views).
source
is still there but is deprecated.
Some actions got changed payload
SetActivity
can now be called with just
activityName
in the payload.
SelectTaskInSupervisor
now expects/provides object as payload in form of
{task?: ITask, taskSid?: string}
. Providing either will autofill the other also so both will be available for whoever taps into the action via Actions framework.
SelectWorkerInSupervisor
now expects/provides object as payload in form of
{worker?: ITask, workerSid?: string}
. Providing either will autofill the other also so both will be available for whoever taps into the action via Actions framework.
MonitorCall
now expects/provides object as payload in form of
{task?: ITask, taskSid?: string}
. Providing either will autofill the other also so both will be available for whoever taps into the action via Actions framework.
channelType
attribute from task to detect chat channel type.
Changed
Changed
SetActivity
action now has payload in the form of
{activitySid: string; activityName?: string; activityAvailable?: boolean}
. Only
activitySid
is used in default implementation and are required when invoking the action by user, but other two are filled for better context for users who override the action and need more information on what the new activity will be.
task
type changed to
ITask
for task based components. Previously TaskState interface was used which had only
source
and
reservation
properties. Properties
source
and
reservation
stay the same as they used to, but now attributes and other task properties can be accessed from
task
object itself. For example
this.props.task.attributes
can be used where applicable and there should be no need to use
source
sub property anymore which is referring to Task Router SDK object.
Added
_11 export type TaskChannelComponentRemoveRequest = {_11 target: keyof FlexComponents;_11 key: React.Key;_11 options?: RemoveComponentCallOptions;_11 };_11 TaskChannelDefinition.removedComponents?: Array<TaskChannelComponentRemoveRequest>;_11_11 // For example:_11 myOwnChatChannel.removedComponents = [_11 { target: "TaskCanvasTabs", key: "info" }_11 ];
withTaskContext
helper function has been added that creates a HOC which adds the properties to the wrapped component.
_10export interface TaskContextProps {_10 task?: ITask; // Task we are referring to, undefined if there is no task in context_10 call?: PhoneCallState; // Call state that current task if related to, undefined if there is no task in context or there is no call for a task_10 chatChannel?: ChatChannelState.ChannelState; // Chat channel state that current task if related to, undefined if there is no task in context or there is no chat for a task_10 channelDefinition?: TaskChannelDefinition; // Matched task channel definition for a task, undefined if there is no task in context_10}
TaskContext.Consumer
:
_10import { withTaskContext } from "@twilio/flex-ui";_10_10const MyComponent: (props) => {_10 return (_10 <div>{props.task.attributes.someAttribute}</div>_10 );_10}_10_10const MyComponentWithTask = withTaskContext(MyComponent);_10// Register MyComponentWithTask component to Flex instead of MyComponent
withTaskContext
:
_10import { withTaskContext } from "@twilio/flex-ui";_10_10const MyComponent: (props) => {_10 return (_10 <div>{props.task.attributes.someAttribute}</div>_10 );_10}_10_10const MyComponentWithTask = withTaskContext(MyComponent);_10// Register MyComponentWithTask component to Flex instead of MyComponent
Added
Component.Content.remove
to allow removing components from dynamic component children (both native and programmatically added ones).
Syntax:
Component.Content.remove(key: string, options: {if?: (props: any) => boolean})
where
key
- key of the component to be removed
if
- Boolean expression that decides at any given moment whether the removal should be active.
props
parameter is the object of all properties passed by the main component to children.
Example: removes avatar from the canvas that shows "you have no tasks", but only if the user's name is not Bob.
_10Flex.NoTasksCanvas.Content.remove("avatar", {if: props => props.worker.attributes.full_name !== "Bob"});
Changed
Removed
main
field in package.json.
TaskListChatItem
and
TaskListCallItem
- can be customized not using Task Channels API. Or use
TaskListItem
to use them all.
AltContainer
and
IconArea
; and component property
alternateColors
removed from
TaskListItem
component.
colors.channelColors
removed. Channel colors are defined in Task Channel now.
Changed
Added
All task channels that Flex handles are defined and registered by Task Channels API. Flex registers its default Task Channel definitions (see below), but users and plugins can register their own. When Flex task based components are rendered, the first matching channel definition for a given task will be used. If there is more than one channel definition match for a task, then most recently registered definition will be used (so that you can register more specific channel definition).
See below interface TaskChannelDefinition
for what can be set up. All parameters are optional meaning that ones from Default
task channel definition will be used if not specified. The most important property of a task channel definition is isApplicable
callback function. The callback receives a task as argument and must return Boolean true if this definition can be used to handle given task.
In a task channel definition you can specify:
Predefined Task Channels definitions are available via Twilio.Flex.DefaultTaskChannels
objects for reference. Channels that are defined by default:
Twilio.Flex.DefaultTaskChannels.Call
Twilio.Flex.DefaultTaskChannels.Chat
Twilio.Flex.DefaultTaskChannels.ChatSMS
Twilio.Flex.DefaultTaskChannels.ChatLine
Twilio.Flex.DefaultTaskChannels.ChatMessenger
Twilio.Flex.DefaultTaskChannels.ChatWhatsApp
Twilio.Flex.DefaultTaskChannels.Default
It is not recommended to change Twilio.Flex.DefaultTaskChannels
them at runtime. You should create your own definition and register it instead.
Flex has the following helper functions to create channel definitions with default values for chat, call and generic: Chat channel creation with default chat templates:
_10Flex.DefaultTaskChannels.createChatTaskChannel(name: string, isApplicable: TaskChannelApplicableCb,_10 icon: string | React.ReactNode = "Message", iconActive: string | React.ReactNode = "MessageBold", color: string = defaultChannelColors.chat): TaskChannelDefinition
Call channel creation with default templates. Call channel definition uses callbacks to determine the icon and colors (based on call state and destination to render):
_10Flex.DefaultTaskChannels.createCallTaskChannel(name: string, isApplicable: TaskChannelApplicableCb):: TaskChannelDefinition
Default channel creation with default templates.
_10Flex.DefaultTaskChannels.createDefaultTaskChannel(name: string, isApplicable: TaskChannelApplicableCb, icon: string | React.ReactNode = "GenericTask", iconActive: string | React.ReactNode = "GenericTaskBold", color: string = defaultChannelColors.custom): TaskChannelDefinition
To register a task channel definition use Flex.TaskChannels.register(definition: TaskChannelDefinition, mergeWithDefaultChannel = true)
. You must register your channel definitions before Flex starts up.
Example:
_10const myOwnChatChannel = Flex.DefaultTaskChannels.createChatTaskChannel("myChat",_10 (task) => task.taskChannelUniqueName === "chat" && task.attributes.somethingSpecial === "mycCustom");_10// can modify myOwnChatChannel here_10_10Flex.TaskChannels.register(myOwnChatChannel);
Also new the following API exists: Flex.TaskChannels.unregister(myOwnChatChannel);
- to unregister previously registered channel Flex.TaskChannels.getRegistered();
- to get all registered task channelsFlex.TaskChannels.getForTask(task: ITask);
- to get a matching task channel definition for a task
Interface of TaskChannelDefinition
:
_126export enum TaskChannelCapability {_126 Info = "Info", // whether channel has info panel_126 Call = "Call", // whether channel has call canvas capabilities_126 Chat = "Chat", // whether channel has chat canvas capabilities_126 Video = "Video", // whether channel has video calling capabilities_126 Wrapup = "Wrapup" // whether channel needs to go to Wrapup state before can be completed_126}_126_126export type TaskCallbackType<T> = (task: ITask, componentType: React.ComponentType, ...args) => T;_126export type TaskStatusBasedTypeBase<T> = {_126 Reserved: T;_126 Assigned: T;_126 Wrapping: T;_126 Completed: T;_126 Canceled: T;_126 Pending: T;_126};_126export type TaskStatusBasedType<T = string> = T | TaskCallbackType<T> | TaskStatusBasedTypeBase<T>;_126export type TaskChannelApplicableCb = (task: ITask) => boolean;_126_126export type TaskChannelComponentRegistration = {_126 target: keyof FlexComponents;_126 component: React.ReactChild;_126 options?: ContentFragmentProps;_126};_126_126/**_126 * Defines a task channel_126 *_126 * @export_126 * @interface TaskChannelDefinition_126 */_126export interface TaskChannelDefinition {_126_126 name: string;_126_126 /**_126 * Used in TaskList, TaskCard, Canvases_126 */_126 colors?: {_126 main?: TaskStatusBasedType<string>;_126 };_126_126 /**_126 * Returns whether this task channel is applicable for a given task._126 * @param task task instance to evaluate the channel for_126 */_126 isApplicable: TaskChannelApplicableCb;_126_126 /**_126 * Icons to render to the task channel_126 */_126 icons?: {_126 /**_126 * List icon to be used in TaskList and TaskCardList_126 */_126 list?: TaskStatusBasedType<string | React.ReactNode>;_126 /**_126 * Icon to be used in Tab headers if tab is not selected_126 */_126 main?: TaskStatusBasedType<string | React.ReactNode>;_126 /**_126 * Icon to be used in Tab headers if tab is selected and in Task Canvases as the main icon_126 */_126 active?: TaskStatusBasedType<string | React.ReactNode>;_126 };_126_126 /**_126 * Templates for components_126 */_126 templates?: {_126 IncomingTaskCanvas?: {_126 firstLine?: TaskStatusBasedType<string>;_126 secondLine?: TaskStatusBasedType<string>;_126 };_126 CallCanvas?: {_126 firstLine?: TaskStatusBasedType<string>;_126 secondLine?: TaskStatusBasedType<string>;_126 };_126 TaskListItem?: {_126 firstLine?: TaskStatusBasedType<string>;_126 secondLine?: TaskStatusBasedType<string>;_126 extraInfo?: TaskStatusBasedType<string>;_126 };_126 TaskCanvasHeader?: {_126 title?: TaskStatusBasedType<string>;_126 endButton?: TaskStatusBasedType<string>;_126 };_126 TaskCard?: {_126 firstLine?: TaskStatusBasedType<string>;_126 secondLine?: TaskStatusBasedType<string>;_126 };_126 TaskInfoPanel?: {_126 content: TaskStatusBasedType<string>;_126 };_126 Supervisor?: {_126 TaskCanvasHeader?: {_126 title?: TaskStatusBasedType<string>;_126 endButton?: TaskStatusBasedType<string>;