v13.41.0
Minor Release v13.41.0
Common Canvas
#2929 Display context menu/toolbar for port with keyboard shortcut
Note: During testing, I discovered that the shortcut Alt/Option + Tab which was used to move focus from a node to one of its "sub-objects" is used in Windows to switch between applications, which seems like a pretty useful shortcut and shouldn't be replicated in Common Canvas, so I chose Shift + Alt/Option + Down Arrow instead.
Once the focus is on a sub-object the user can continue to press that shortcut to cycle through the focusable sub-objects or use Shift + Alt/Option + Up Arrow to cycle backwards through them or press Esc to return focus to the parent object. Pressing Tab or Shift + Tab will also cycle the focus forwards and backwards through the set of sub-objects.
With focus on a focusable port, the user can now open a context menu (or context toolbar) for that port using the standard Command + <comma> shortcut
#2920 Link specific ports via keyboard
The user can now create a port-to-port data link in numerous ways:
-
Using just the keyboard with shortcuts
(a) The user moves the focus to a focusable output port on a source node and pressesShift + Command + <L key>and a little arrow appears. The arrow will not appear if the output port is already maxed out in terms of its cardinality.
(b) The user moves focus to a focusable input port on the target node and presses the same shortcut to complete the link. The link will not be created if there is no output port marked for connection or if the input port is already maxed out in terms of its cardinality. -
Using just the keyboard with context menu / context toolbar:
(a) The user moves the focus to a focusable output port on a source node and pressesCommand + <comma>and a context menu appears for the port containing aConnect fromoption. The option is disabled if the output port is already maxed out in terms of its cardinality. After clicking the option a small arrow appears.
(b) The user moves focus to a focusable input port on the target node and pressesCommand + <comma>and a context menu appears for the port containing aConnect tooption. After clicking the option the link is created. The option will be disabled if there is no output port marked for connection or if the input port is already maxed out in terms of its cardinality. -
Using single-clicks with the mouse/trackpad (no dragging needed)
(a) The user right-clicks on an output port and a context menu appears containing aConnect fromoption. The option is disabled if the output port is already maxed out in terms of its cardinality. After clicking the option a small arrow appears.
(b) The user right-clicks an input port and a context menu appears for the port containing aConnect tooption. After clicking the option the link is created. The option will be disabled if there is no output port marked for connection or if the input port is already maxed out in terms of its cardinality. -
Using drag from output port and drop on input port (previously implemented)
Three new Canvas Controller methods have been added to allow the application manage this if needed:
setPortConnectFrom(nodeId, portId, pipelineId)
getConnectFromInfo(pipelineId)
clearConnectFromStatus(pipelineId)
#2947 Allow Elyra Canvas to be wrapped with a <main> element
Changes to the aria roles and landmarks for accessibility in Common Canvas mean that the application should now wrap Common Canvas in a element that is intrinsically a landmark or with a <div> with a landmark role. This avoids errors being detected by the Accessibility Checker. For example:
<main>
<CommonCanvas ... />
</main>
Here is what Bob created for me to summarize the current roles/landmark situation:
ARIA Landmarks and Roles Analysis - Organized by Component
Test Harness Infrastructure
| Notes | File | Element | Role | aria-label |
|---|---|---|---|---|
| Main content area | App.js | main | main (implicit) | "Test harness" |
| Test harness banner | App.js | div | banner | "Test harness" |
| Side panel landmark | sidepanel.jsx | div | region | "Right Side Panel" |
Common Canvas
| Notes | File | Element | Role | aria-label |
|---|---|---|---|---|
| Main canvas application | cc-contents.jsx | div | application | "Flow Editor" |
| Palette navigation region | palette-flyout.jsx | div | region | "Flyout Palette" |
| Palette item button | palette-content-list-item.jsx | div | button | - |
| Palette dialog region | palette-dialog-under.jsx | div | region | "Dialog Palette" |
| Notification panel container | notification-panel.jsx | div | region | Notification header + subtitle |
| Container for notification messages | notification-panel.jsx | div | list | - |
| Individual notification items | notification-panel.jsx | div | listitem | - |
| Close message button | notification-panel.jsx | div | button | - |
| Toolbar container | toolbar.jsx | div | toolbar | Title passed in from wrapper object |
| Context menu container | common-context-menu.jsx | div | menu | - |
| Individual menu items | common-context-menu.jsx | div | menuitem | - |
| Disabled menu items | common-context-menu.jsx | div | menuitem | - |
| Tooltip trigger (when showToolTipOnClick=true) | tooltip.jsx | div | button | - |
| Tooltip content container | tooltip.jsx | div | tooltip | - |
Common Properties
| Notes | File | Element | Role | aria-label |
|---|---|---|---|---|
| Properties wrapper (right flyout) | common-properties.jsx | aside | complementary (implicit) | "{label} Properties" |
| Properties wrapper (custom container) | common-properties.jsx | aside | complementary (implicit) | "{label} Properties" |
| Main properties container | properties-main.jsx | aside | complementary (implicit) | "{label} Properties" |
| Properties wrapper (right flyout) with region | common-properties.jsx | aside | region | "{label} Properties" |
| Properties wrapper (custom container) with region | common-properties.jsx | aside | region | "{label} Properties" |
| Main properties container with region | properties-main.jsx | aside | region | "{label} Properties" |
| Container for notification messages | notification-panel.jsx | div | list | - |
| Individual notification items | notification-panel.jsx | div | listitem | - |
| Batch summary (aria-roledescription="text") | table-toolbar.jsx | div | button | - |
| properties-header-row (data attribute) | virtualized-grid.jsx | tr | (data-role) | - |
| properties-data-row (data attribute) | virtualized-grid.jsx | tr | (data-role) | - |
| Column resize handle | virtualized-grid.jsx | div | button | "Resize column" |
| Header checkbox for selection | virtualized-grid.jsx | div | checkbox | - |
| Table row | virtualized-table.jsx | div | row | - |
| Loading row | virtualized-table.jsx | div | row | - |
| Data row | virtualized-table.jsx | div | row | - |
| Table cell | virtualized-table.jsx | div | gridcell | - |
| Column resize handle | virtualized-table.jsx | div | button | "Resize column" |
| Fixes a11y violation (no headers) | structureeditor.jsx | table | presentation | - |
| Fixes a11y violation (no headers) | summary.jsx | table | presentation | - |
#2963 Canvas Controller should accept instance ID as a parameter of the constructor instead of being specified via setInstanceId()
The canvas controller’s constructor now takes an optional instanceId parameter. This can be used to specify an instance identifier, as a string or number, that is used by Common Canvas to generate unique <div> IDs etc. If the parameter is not provided Canvas Controller generates its own unique ID.
The setInstanceId() method of the Canvas Controller, which is unsafe to use unless it is called immediately after the canvas controller is created, is now deprecated and will be removed in a future major release.
#2959 For context toolbar, display tooltips for icons when using keyboard operation
Tooltips are now automatically displayed when the user moves focus with the keyboard on these different toolbars:
- The main flow editor toolbar
- Context toolbars (displayed over nodes, comments, ports, links and on the flow editor background)
- Text toolbars that are opened whenever markdown or WYSIWYG comments are edited.
- The test harness main toolbar.
Common Properties
#2939 Support JSX from paramDefs in TwistyPanel
A new callback called panelTitleHandler() has been added to allow applications to customize the title display of panels. This callback is currently only called when rendering a twisty panel and allows you to replace the default panel title with custom content. The callback should return a string, object, or null to use the default label defined in the parameter definition.
Issues Resolved
- Add TypeScript definition for Action by @samueldmeyer in #2909
- #2905 foreignObject containing React output can be added to the DOM a… by @tomlyn in #2906
- #2910 React Nodes - Carbon Charts - sample app - ports hidden incorre… by @tomlyn in #2913
- #2911 Document -1 value for maxLengthForMultiLineControls and maxLengthForSingleLineControls by @caritaou in #2912
- #2897 Small and large toolbar behavior not consitent with medium size… by @tomlyn in #2914
- #2915 Focus stuck on foreignObject port by @tomlyn in #2916
- #2917 Focus lost creating new node in Prompt sample app by @tomlyn in #2918
- Bump jspdf from 4.1.0 to 4.2.0 in /canvas_modules/harness by @dependabot[bot] in #2919
- #2920 Link specific ports via keyboard by @tomlyn in #2921
- #2920 Link specific ports via keyboard (Part 2) by @tomlyn in #2926
- #2925 Fixes alerts tab icon sizing by @matthoward366 in #2932
- #2929 Display context menu/toolbar for port with keyboard shortcut by @tomlyn in #2930
- #2927 Miscellaneous doc changes by @tomlyn in #2928
- #2933 Python comments are illegible in dark mode by @caritaou in #2934
- #2935 Focus does not go to context toolbar when all buttons are disab… by @tomlyn in #2936
- #2941 Update translation files 2026-03 by @ningzhang-svl in #2942
- #2939 Support JSX from paramDefs in TwistyPanel by @caritaou in #2940
- #2943 Test harness structuring by @tomlyn in #2944
- Bump rollup from 2.79.2 to 2.80.0 in /canvas_modules/common-canvas by @dependabot[bot] in #2949
- #2947 Allow Elyra Canvas to be wrapped with a element by @tomlyn in #2948
- #2953 Accessibility: Entering search text with narrow palette doesn't… by @tomlyn in #2954
- #2955 Size palette search field to fit correctly when palette has nar… by @tomlyn in #2956
- #2950 Notifications accessibility by @tomlyn in #2952
- #2961 Tooltip shown for label-only toolbar button by @tomlyn in #2962
- #2959 For context toolbar, display tooltips for icons when using keyb… by @tomlyn in #2960
- #2923 Test harness toolbar size selection is not working also the too… by @tomlyn in #2965
- #2963 Canvas Controller should accept instance ID as a parameter of t… by @tomlyn in #2964
- #2966 Test in ports.cy.js takes a long time - speed it up by @tomlyn in #2967
- #2968 Migrate API-only Cypress tests to Jest by @tomlyn in #2969
Full Changelog: v13.40.1...v13.41.0