Releases: elyra-ai/canvas
v13.38.0
Minor Release v13.38.0
Build
#2712 Update elyra-canvas to use ESM format instead of commonjs
Elyra Canvas has been converted, where possible, from Common JS modules (CJS) to use ECMAScript modules (ESM).
Common Canvas
#4211 Double-click on link should call clickActionHandler (just like with nodes and comments)
A double-click action on a link now calls the clickActionHandler callback provided the config property enableLinkSelection is not set to “None”. This makes the behavior the same as for nodes and comments.
Common Properties
No changes
Issues Resolved
- #2818 Docs for 'Palette category does not expand when activated via S… by @tomlyn in #2822
- #2823 Double-click on link should call clickActionHandler (just like … by @tomlyn in #2824
- #2820 Upgrade carbon in harness and remove temporary workaround by @nmgokhale in #2821
- #2827 Always show Action button on the next line by @nmgokhale in #2829
- #2712 Update elyra-canvas to use ESM format instead of commonjs by @tomlyn in #2826
- Bump jspdf from 3.0.2 to 4.0.0 in /canvas_modules/harness by @dependabot[bot] in #2834
- #2832 Errors in TypeScript files follwoing conversion to support ESM by @tomlyn in #2833
- #2836 app-tiny.tsx causing hot module replacement problem by @tomlyn in #2837
Full Changelog: v13.37.1...v13.38.0
v13.37.1
Patch Release v13.37.1
Common Canvas
Bug fixes
Common Properties
Bug fixes
Issues Resolved
- #2804 Make all type files declaration files to allow verbatimModuleSyntax by @samueldmeyer in #2803
- #2805 Server side rendering (SSR) support (Remove UUID from overflow … by @tomlyn in #2809
- #2801 d3-node-port-output has widget role violation by @srikant-ch5 in #2802
- #2807 Correct spelling in Elyra Canvas files by @tomlyn in #2808
- #2810 Translation Update 20251114.162121 by @ningzhang-svl in #2811
- #2812 Tooltip arrow causing accessibility checker error by @srikant-ch5 in #2813
- #2814 Fixed - All Expression controls show red caret with error message by @nmgokhale in #2815
- #2816 Unable to scroll for large content when expression editor is disabled state by @veenas1 in #2817
- #2818 Palette category does not expand when activated via Screen Reader by @tomlyn in #2819
Full Changelog: v13.37.0...v13.37.1
v13.37.0
Minor Release v13.37.0
Common Canvas
#2790 Need a case-insensitive parameter so that all occurrences of the text in comments are highlighted, regardless of case sensitivity by @tomlyn
The comment highlighting feature introduced in the previous release has been extended to:
- highlight the search string if there are multiple occurrences of it in the comment
- highlight text based on a case insensitive search
The Elyra Cavnas test harness has also been extended so the API panel can be used to specify a search string to be highlighted in comments in the flow.
#2792 Draggable sample app should specify default action required by @tomlyn
When nodes are displayed using a React object, applications can make the nodes draggable (independent of the in-built drag/drop behavior provided by Common Canvas) by setting the draggable property of the React's <div> to true. If this arrangement is used with keyboard navigation enabled (the config property enableKeyboardNavigation is set to true), a usability problem occurs when the drag begins because the node needs to be clicked before it can be dragged, rather than being dragged in one gesture.
To circumvent this problem, a new boolean node-layout property called onFocusAllowDefaultAction has been added. When set to true, Common Canvas will allow the default action (that is, the drag) to be enacted when the user presses the mouse button over the node and begins to drag. It can be set like this:
config = {
enableNodeLayout: {
onFocusAllowDefaultAction: true
}
};
Common Properties
No changes
Issues Resolved
- #2782 The Elyra Canvas getting started docs should mentioned how to g… by @tomlyn in #2783
- #2784 Allow cc-contents to run in strict mode by @tomlyn in #2785
- #2786 Enabling keyboard navigation prevents drag in React Nodes - Dra… by @tomlyn in #2787
- #2788 Enable Typescript and get app-tiny and documentation up to date… by @tomlyn in #2789
- #2790 Need a case-insensitive parameter so that all occurrences of the… by @tomlyn in #2791
- #2792 Draggable sample app should specify default action required by @tomlyn in #2793
- #2794 Tiny app in docs by @tomlyn in #2795
- #2794 Embed tiny-app in mkdocs (part 2) by @tomlyn in #2796
- #2797 Build better Tiny App by @tomlyn in #2798
- #2799 On Windows, Ctrl + Shift + does not create a link with … by @tomlyn in #2800
Full Changelog: v13.36.0...v13.37.0
v13.36.0
Minor Release v13.36.0
Build
#2741 Support applications moving to React 19 by @caritaou in #2742
React 19 is now supported by Elyra Canvas.
Common Canvas
* #2749 Enable keyboard navigation and movement of ends of a detached link by @tomlyn in #2750
The ends of detached links can now be manipulated using the keyboard during keyboard navigation. To do this the user presses
Option + Tabto enable the highlighting of the link handles at the start and end of the link.- The user can then press
TaborShift Tabto move the focus from one handle to the other. (Note: if there are focusable decorations for on the link these will also be focused in sequence with the handles). - When focus is on a handle, the user can press
Command + <arrow key>to move the end of the link around.
Using these gestures, the keyboard user can duplicate the same actions that can be performed using the mouse, for example to:
- detach the end of link from a node and move it to an arbitrary point on the canvas,
- move the end of a link from the canvas and connect it to to a node
- move the end of a link from one arbitrary point on the canvas to another.
Oct-24-2025.17-54-25.mp4
#2751 Prototype function to drag a node from the flow editor to an external panel by @tomlyn in #2752
A new sample application has been added to the test harness called React nodes - Draggable. This shows how nodes displayed using a React object can be used to enable:
- Dragging from one node to another (without moving link lines)
- Dragging from an external panel to the canvas or to another node
- Dragging a node from the canvas to an external panel
Oct-24-2025.17-49-22.mp4
#2763 Need support to highlight text/word under comment by @tomlyn in #2764
A new API function has been added to the Canvas Controller:
canvasController.setCommentHighlightText(commentIds, highlightText, pipelineId)
This can be called by the application to highlight text in one or more comments, indicated by the array of comment IDs passed in.
If null or undefined is specified as the highlightText the highlighting will be removed.
The highlighting can be applied to all types of comment supported by Common Canvas, that is:
- Regular comments
- Comments with Markdown applied
- WYSIWYG comments
The result looks this like when applied to a comment formatted using markdown:
#2772 EditActionData for 'paste' action is missing by @tomlyn in #2773
New data types have been added to the typescript definitions called EditActionPaste and EditActionPasteContextMenu to support the clipboard support operations.
#2775 Feature request: Need to handle nodes where body is provided by… by @tomlyn in #2776
The React Nodes - Carbon Charts sample application has been extended to demonstrate how React nodes can be resized by the application to accommodate varying sizes of the content provided by the React object. In the screen shot below, the Regular Card Node has been increased in height to display the lengthy text
Common Properties
#2695 Allow custom data types to be filtered in structuretable control by @veenas1 in #2696
In the Field Picker component, users can now add custom data types and set custom Icon and label for the same.
The callback buttonIconHandler with a new type customDataTypeIcon should be used to return the custom icons.
To define the custom label, use the following format in the app’s locale: fieldPicker.<type>.label
Example available in FieldPicker and StructureTable paramdef in Elyra Canvas Test Harness.
Issues Resolved
- #2695 Allow custom data types to be filtered in structuretable control by @veenas1 in #2696
- #2734 Don’t add spacing for hidden control by @nmgokhale in #2735
- #2732 Focus object gets out of sync with document.activeElement by @tomlyn in #2733
- #2737 Refactor link highlight code to prepare for keyboard navigation… by @tomlyn in #2738
- #2739 Keyboard navigation tab groups index is reset incorrectly by @tomlyn in #2740
- #2743 Prepare for keyboard manipulation of detached link by @tomlyn in #2744
- #2745 Use CanvasUtils.stopPropagationAndPreventDefault where appropriate by @tomlyn in #2746
- #2747 Handle onBlur event for flow editor
<div>correctly by @tomlyn in #2748 - #2749 Enable keyboard navigation and movement of ends of a detached link by @tomlyn in #2750
- #2751 Prototype function to drag a node from the flow editor to an ex… by @tomlyn in #2752
- #2741 Support applications moving to React 19 by @caritaou in #2742
- #2761 Change 'draggable' sample app to use nodeMovable by @tomlyn in #2762
- #2759 Cascade menu automatically opens when context menu displayed by @tomlyn in #2760
- #2757 Fix documentation on keyboard shortcut to open a context menu by @tomlyn in #2758
- #2753 Error occurs when context menu only includes disabled items by @tomlyn in #2754
- #2763 Need support to highlight text/word under comment by @tomlyn in #2764
- #2769 Fix elyra/canvas deployment builds using temporary workaround by @nmgokhale in #2770
- #2767 Fix keyboard short cuts docs by @tomlyn in #2771
- #2772 EditActionData for 'paste' action is missing by @tomlyn in #2773
- Inconsistent Spacing when Hiding Fields for Complex Types-fix #2755 by @Jerinjk14 in #2756
- #2775 Feature request: Need to handle nodes where body is provided by… by @tomlyn in #2776
- #2777 Keyboard panning not working when focus is on a link by @tomlyn in #2778
- #2779 Error occurs after clicking a comment link and then using keybo… by @tomlyn in #2780
Full Changelog: v13.35.1...v13.36.0
v13.35.1
Patch Release v13.35.1
Bug fixes.
Issues Resolved
- callbackIcon parameter needs to be fixed-fixing_component-type-to-jsx… by @Jerinjk14 in #2722
- #2718 Title editor UX change for properties panel by @veenas1 in #2719
- #2720 On hover the number input control shows underline even though cell is disabled by @veenas1 in #2721
- #2697 Allow action_info to render an svg so that it can use fill='currentcolor' by @srikant-ch5 in #2723
- #2727 Translation 20250926.104509 by @ningzhang-svl in #2730
- #2724 Allow application to override minumum width for right flyout (T… by @tomlyn in #2729
Full Changelog: v13.35.0...v13.35.1
v13.35.0
Minor Release v13.35.0
Common Canvas
#2724 Allow application to override minimum width for right flyout by @tomlyn
A new Canvas Controller API call has been added called setRightFlyoutMinWidth(wd) where wd is a number of pixels. This allows the application to specify a minimum width that overrides the default minimum width for the right flyout which, by default, is set by the content placed in the right-flyout.
This is necessary for applications that want to simulate the right-flyout closing without using the showRightFlyout boolean prop of <CommonCanvas>. In this case they would set the min width to zero.
#2703 Allow user to move focus to decorations using keyboard navigation by @tomlyn
For keyboard navigation, the user can now navigate the focus highlighting to "focusable" decorations of a node or a link. This is done by the user:
- Moving the focus to the node or link and
- Pressing Option + Tab - this will move the focus to the first found focusable decoration
- Pressing Tab or Shift + Tab to navigate to other decorations. Focus will rotate around the decorations
- Pressing ESC key to move the focus back to the parent node or link
- Pressing space or return key to activate a "hotspot" decoration
A decoration may be made "focusable" by specify the new boolean focusable property of the decoration to true.
Note: If there are also focusable ports of a node, pressing Tab or Shift + Tab will rotate focus around the ports and focusable decorations in the order they are found.
Common Properties
#2701 Support JSON in CodeMirror by @srikant-ch5
Added comprehensive JSON language support to the CodeMirror editor component (expression control). This enhancement enables proper syntax highlighting capabilities for JSON content. The implementation leverages CodeMirror's built-in JSON mode to provide error detection, and structured editing features for JSON content.
Issues Resolved
- #2693 Toggling a column to be visible and hidden will show warning in… by @Jerinjk14 in #2694
- #2698 Add types for Palette, showLeftFlyout, and leftFlyoutContent by @herman-wong-ibm in #2699
- #2703 Allow user to move focus to decorations using keyboard navigation by @tomlyn in #2704
- #2705 Properties panel resize button has no background by @srikant-ch5 in #2706
- #2701 Support JSON in CodeMirror by @srikant-ch5 in #2702
- Bump jspdf from 3.0.1 to 3.0.2 in /canvas_modules/harness by @dependabot[bot] in #2709
- #2707 Dark mode string variables color difficult to see by @srikant-ch5 in #2708
- [SDG] The table when one colum is boolean type the header is not bold… by @Jerinjk14 in #2711
- #2653 Overflow icon in toolbar not displayed in certain browser width… by @Jerinjk14 in #2654
- #2724 Allow application to override minumum width for right flyout by @tomlyn in #2725
New Contributors
- @herman-wong-ibm made their first contribution in #2699
Full Changelog: v13.34.0...v13.35.0
v13.34.0
Minor Release v13.34.0
Common Canvas
No changes
Common Properties
#2687 Add support for 'kind' in custom table toolbar buttons
Custom table toolbar now supports the 'kind' of Carbon button to be rendered. Previously only the default tertiary buttons were used.
Issues Resolved
- #2687 Add support for 'kind' in custom table toolbar buttons by @caritaou in #2688
- #2691 Readonly control within a table does not display the values as is by @caritaou in #2692
- #2689 Remove codemirror package by @nmgokhale in #2690
- #2685 Replace custom table-toolbar with common-canvas toolbar by @veenas1 in #2686
Full Changelog: v13.33.0...v13.34.0
v13.33.0
Minor Release v13.33.0
Build
Notes:
-
Support for React 16 and React 17 is now deprecated in Elyra Canvas. This support will be removed in a future major release.
-
To allow Elyra Canvas components to work correctly with Carbon themes, applications should include
@carbon/reactin their SCSS file and NOT individual files from that package. As documented: https://elyra-ai.github.io/canvas/02-set-up/#styling-using-sass
Common Canvas
#1579 Bi-directional links
In this release the application can customize links to make them bi-directional if needed. That is:
- with an arrow head at the target end of the link (as usual) or
- with an arrow head at the source end of the link or
- with arrow heads at both ends of the link or
- with no arrow heads.
There have been a couple of changes to Common Canvas to support this:
-
The
canvasLayoutproperty calleddataLinkArrowHeadcan now be set explicitly set tofalseto switch off the display of link arrow heads provided by Common Canvas.const config = { enableCanvasLayout: { dataLinkArrowHead: false: } }; -
The arrow heads can then be drawn using decorations. To help with that a new boolean property for decoration specifications has been added called
rotate. This is only applicable for decorations applied to links. If set totrueit will cause the decoration to rotate to an angle the same as the link line -- so the arrow heads will move around in the correct way when the links move.
These changes can be seen in the new Link Types sample application in the Elyra Canvas Test Harness.
Common Properties
#2675 Enhancement: Support for icons in action buttons.
Action buttons now support both icon and text simultaneously using the buttonIconHandler callback with new type actionButtonIcon. Previously, either icon or text was supported.
An example of this can be seen in the action_paramDef.json test file in the Elyra Canvas Test Harness:
Issues Resolved
- #2657 Keyboard accessibility: ports should be focusable (Minor docs c… by @tomlyn in #2670
- #2668 After entering multiline comments, position of the comment box … by @tomlyn in #2671
- #2676 Fixed Bug: Visible condition is not working properly inside subpanel for custom controls by @nmgokhale in #2677
- #2672 Highlighted text is not visible in the node palette when search… by @tomlyn in #2673
- #2674 Enhancement : Support for icons in action buttons-implementing by @Jerinjk14 in #2675
- #2679 Shortcut for titles in Markdown Comments overrides standard sho… by @tomlyn in #2680
- #2681 Dragging a connection in the tables sample app causes a highlig… by @tomlyn in #2682
- #1579 Bi directional links by @tomlyn in #2678
- #2683 Accessibility violation - common context menu by @srikant-ch5 in #2684
Full Changelog: v13.32.0...v13.33.0
v13.32.0
Minor Release v13.32.0
Build
#2659 Import @ibm/plex fonts using @use AND
#2603 Replace @import with @use/@forward in elyra-canvas
In Sass, @import is now deprecated.
https://sass-lang.com/blog/import-is-deprecated/
To get ahead of the curve, Elyra Canvas has been converted to use @use or @forward instead of @import.
Consequently, to prepare for @import being removed from Sass, there is a new recommended way to pull IBM Plex fonts into Elyra Canvas, which is documented here:
https://elyra-ai.github.io/canvas/02-set-up/#loading-fonts
If you want to do a similar conversion on your application's SCSS, this article is very useful to understand how to use @use/@forward
http://mr-alien.medium.com/use-forward-in-sass-70b9cd44218b.
And this is the official documentation on @use and @forward.
Common Canvas
#2657 Keyboard accessibility: ports should be focusable
In this release, the user can navigate focus highlighting to the node's individual elements (sub-objects) such as input ports and output ports. To enable this behavior, the application must set one of these two node layout properties to true in the canvas configuration object.
const config = {
enableNodeLayout: {
inputPortFocusable: false,
outputPortFocusable: true
}
};When enabled, if the user moves focus to a node and then presses Option + Tab the focus will be moved to the first focusable port. The user can then press Tab to move focus around the different ports. This will move the focus in a loop around the ports.
The user can click Shift + Tab to move the focus in the opposite direction. The user can press the Return key if they want to activate a port which is the equivalent of clicking on the port with the mouse/trackpad. The user can press the Esc key to escape from the tabbing behavior of the sub-objects and move the focus back to the node.
#2662 Enable sub-object navigation with an embedded React object (for Prompt sample application)
A number of changes have been made in this release to enable keyboard navigation when the node contents are provided by a React object. An accessibility page has been added to the documentation that explains the steps that need to be implemented in the React object to make keyboard navigation work consistently.
To support this, the following functions have been added to the canvas controller:
// Sets the focus function for the node identified by the node ID passed in.
// The focus function will be function on a React object which is used to
// display the contents of the node. The focus function will be called when the
// user presses shortcuts to move the focus highlighting to the node's sub-objects.
setSubObjectFocusFunction(nodeId, focusFunction, pipelineId);
// Sets focus on the next sub-object in the object provided.
setFocusNextSubObject(parentObj, evt);
// Sets focus on the previous sub-object in the object provided.
setFocusPreviousSubObject(parentObj, evt);
Additionally, the Common Canvas Palette object has been extended to take a new prop called tabOutOfPalette. This is a callback function which the palette will call when the user presses Tab on the bottom-most object in the palette: this can be different depending on whether the user has entered a search string or not into the palette's search field.
These functions are used in the Prompt sample application's prompt-react-node.jsx.
#2636 When comment is moved, move any nodes positioned inside it
A new experimental feature has been added in this release. It can be switched on by setting the enableMoveNodesInComment config property to true. When set to true if a comment is positioned under one or more nodes, when the comment is moved the nodes will move with it. You can play with it in the test harness as shown below. Please provide feedback on this feature. Thanks!
Common Properties
Bug fixes only.
Issues Resolved
- #2636 When comment is moved, move any nodes positioned i… by @tomlyn in #2648
- #2642 Adjust build script to deploy test-harness cloud by @srikant-ch5 in #2643
- #2649 Table toolbar looks odd for Cancel Text - small flyout by @veenas1 in #2650
- #2651 Custom ctrl paramDef fails to open in test harness by @srikant-ch5 in #2652
- #2603 Replace @import with @use/@forward in elyra-canvas by @nmgokhale in #2604
- #2655 Prevent header click while resizing column by @nmgokhale in #2656
- #2659 Import @ibm/plex fonts using @use by @nmgokhale in #2660
- #2657 Keyboard accessibility: ports should be focusable by @tomlyn in #2658
- #2666 Tabbing to a new group of nodes does not call zoomToReveal when… by @tomlyn in #2667
- #2664 Select all in table should not select checkboxes that are hidden or disabled by @caritaou in #2665
- #2668 After entering multiline comments, position of the comment box … by @Jerinjk14 in #2669
- #2662 Enable sub-object navigation with an embedded React object (for… by @tomlyn in #2663
Full Changelog: v13.31.0...v13.32.0
v13.31.0
Minor Release v13.31.0
Common Canvas
#2622 Disable the movement of nodes in the canvas
Nodes can now be prevented from being moved. This can be specified by setting the nodeMovable property of the enableNodeLayout field of the canvas config object to false. The application can specify that all nodes should not be movable like this:
const config = {
enableNodeLayout: {
nodeMovable: false
}
};
…
render{
return (<CommonCanvas … config={config} />);
}
To prevent movement of nodes on a node-by-node basis, the application can return the nodeMovable setting from the layoutHandler, like this:
layoutHandler(node) {
if (node.id === “id81692345XW”) {
return { nodeMovable: false };
}
return {};
}
where “id81692345XW” is the ID of the node to be prevented from moving.
#2640 Animate zoom to fit
The canvasController.ZoomToFit function has been extended in this release to accept an optional parameter called animateTime. When the parameter is provided, the zoom operation will display an animation of the transition that takes the animateTime number of milliseconds.
canvasController.zoomToFit(animateTime);
#2644 getZoomToReveal: calculate scale needed to fit specified nodes in screen
The canvasController.getZoomToReveal(objectIds, xPos, yPos) function behavior has changed slightly in this release. Now, if the objects specified in the objectIds array parameter, at the current scale amount, occupy a space that is bigger than the viewport, Common Canvas will return a zoom object that does the equivalent of a zoom to fit transition on those objects. That is it will move and scale them so they all appear within the viewport regardless of the xPos and yPos settings.
#2636 When comment is moved, move any nodes and comments positioned inside a comment
A prototype feature has been added in this release for assessment by designers. Please provide feedback if you have any thoughts about this feature. This feature is subject to change or removal.
If one or move nodes are positioned over a comment and the comment is moved, the nodes inside the comment will move with it. This feature could be useful for users of applications where comments are often used to highlight a grouping of nodes.
It can be activated by setting the enableMoveNodesInComment config property to true or in the harness by switching the "Enable Move Nodes In Comments" option in the Comments section of the Common Canvas right side flyout.
Common Properties
#2632 Allow specifying a static width for structures in CommonProperties
Previously only a number was allowed as relative widths for each column within a table. Now you can specify a string of the exact pixel width the column should be, for example "40px".
Issues Resolved
- #2618 Staring drag of right-flyout cuases very small reduction in pan… by @tomlyn in #2619
- #2596 Slider track background does not reset on hide/unhide by @srikant-ch5 in #2597
- #2605 Allow searchable oneofselect without treating typed input as selection by @veenas1 in #2606
- #2585 Tearsheet- Pressing ESC closes the modal, but fails to reopen on clicking the btn again by @veenas1 in #2586
- #2620 Refactor panels code for consistency by @tomlyn in #2621
- Build failing with: error TS1205: Re-exporting a type when 'isolatedModules' is enabled requires using 'export type'. by @mariyageorge01 in #2626
- #2624 Double-clicking partially obscured node causes flash but no pro… by @tomlyn in #2625
- #2622 Disable the movement of nodes in the canvas by @tomlyn in #2623
- #2628 Fixed [WARNING]: Control not found for test-tabletoolbar: by @nmgokhale in #2629
- #2630 Auto-create of node should not cause focus to move to canvas by @tomlyn in #2631
- #2634 Dragging width of right flyout sluggish when left flyout under … by @tomlyn in #2635
- #2600 Sub-panel should act as a modal dialog (keyboard accessibility)… by @Jerinjk14 in #2601
- #2632 Allow specifying a static width for structures in common properties by @caritaou in #2633
- #2638 Intermittent link display with displayLinkOnOverlap in canvas l… by @tomlyn in #2639
- #2636 When comment is moved, move any nodes and comments positioned i… by @tomlyn in #2637
- #2640 Animate zoom to fit by @tomlyn in #2641
- #2646 Logging activation using keyboard no longer working by @tomlyn in #2647
- #2644 getZoomToReveal: calculate scale needed to fit specified nodes … by @tomlyn in #2645
Full Changelog: v13.30.0...v13.31.0

