@uipath/apollo-react 4.10.0 → 4.12.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 (114) hide show
  1. package/dist/canvas/components/AddNodePanel/AddNodePreview.cjs +12 -2
  2. package/dist/canvas/components/AddNodePanel/AddNodePreview.d.ts.map +1 -1
  3. package/dist/canvas/components/AddNodePanel/AddNodePreview.js +13 -3
  4. package/dist/canvas/components/BaseCanvas/CanvasThemeContext.cjs +4 -2
  5. package/dist/canvas/components/BaseCanvas/CanvasThemeContext.d.ts.map +1 -1
  6. package/dist/canvas/components/BaseCanvas/CanvasThemeContext.js +4 -2
  7. package/dist/canvas/components/BaseNode/BaseNode.cjs +7 -7
  8. package/dist/canvas/components/BaseNode/BaseNode.js +7 -7
  9. package/dist/canvas/components/BaseNode/BaseNodeContainer.cjs +1 -1
  10. package/dist/canvas/components/BaseNode/BaseNodeContainer.js +1 -1
  11. package/dist/canvas/components/ButtonHandle/CanvasInlineButton.cjs +56 -0
  12. package/dist/canvas/components/ButtonHandle/CanvasInlineButton.d.ts +8 -0
  13. package/dist/canvas/components/ButtonHandle/CanvasInlineButton.d.ts.map +1 -0
  14. package/dist/canvas/components/ButtonHandle/CanvasInlineButton.js +22 -0
  15. package/dist/canvas/components/ButtonHandle/HandleButton.cjs +3 -11
  16. package/dist/canvas/components/ButtonHandle/HandleButton.d.ts.map +1 -1
  17. package/dist/canvas/components/ButtonHandle/HandleButton.js +3 -11
  18. package/dist/canvas/components/FloatingCanvasPanel/FloatingCanvasPanel.cjs +16 -38
  19. package/dist/canvas/components/FloatingCanvasPanel/FloatingCanvasPanel.d.ts.map +1 -1
  20. package/dist/canvas/components/FloatingCanvasPanel/FloatingCanvasPanel.js +16 -28
  21. package/dist/canvas/components/FloatingCanvasPanel/PanelChrome.cjs +1 -1
  22. package/dist/canvas/components/FloatingCanvasPanel/PanelChrome.js +1 -1
  23. package/dist/canvas/components/StageNode/DraggableTask.cjs +3 -17
  24. package/dist/canvas/components/StageNode/DraggableTask.d.ts.map +1 -1
  25. package/dist/canvas/components/StageNode/DraggableTask.js +3 -17
  26. package/dist/canvas/components/StageNode/EventDrivenTask.cjs +80 -0
  27. package/dist/canvas/components/StageNode/EventDrivenTask.d.ts +13 -0
  28. package/dist/canvas/components/StageNode/EventDrivenTask.d.ts.map +1 -0
  29. package/dist/canvas/components/StageNode/EventDrivenTask.js +46 -0
  30. package/dist/canvas/components/StageNode/StageNode.cjs +29 -581
  31. package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
  32. package/dist/canvas/components/StageNode/StageNode.js +28 -580
  33. package/dist/canvas/components/StageNode/StageNode.styles.cjs +12 -12
  34. package/dist/canvas/components/StageNode/StageNode.styles.d.ts +3 -3
  35. package/dist/canvas/components/StageNode/StageNode.styles.d.ts.map +1 -1
  36. package/dist/canvas/components/StageNode/StageNode.styles.js +4 -4
  37. package/dist/canvas/components/StageNode/StageNode.types.d.ts +11 -0
  38. package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
  39. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.cjs +98 -0
  40. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts +13 -0
  41. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts.map +1 -0
  42. package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.js +64 -0
  43. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.cjs +129 -0
  44. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts +12 -0
  45. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts.map +1 -0
  46. package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.js +95 -0
  47. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.cjs +97 -0
  48. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts +13 -0
  49. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts.map +1 -0
  50. package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.js +63 -0
  51. package/dist/canvas/components/StageNode/StageNodeHandles.cjs +119 -0
  52. package/dist/canvas/components/StageNode/StageNodeHandles.d.ts +8 -0
  53. package/dist/canvas/components/StageNode/StageNodeHandles.d.ts.map +1 -0
  54. package/dist/canvas/components/StageNode/StageNodeHandles.js +85 -0
  55. package/dist/canvas/components/StageNode/StageNodeHeader.cjs +245 -0
  56. package/dist/canvas/components/StageNode/StageNodeHeader.d.ts +9 -0
  57. package/dist/canvas/components/StageNode/StageNodeHeader.d.ts.map +1 -0
  58. package/dist/canvas/components/StageNode/StageNodeHeader.js +211 -0
  59. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.cjs +176 -0
  60. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts +16 -0
  61. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts.map +1 -0
  62. package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.js +142 -0
  63. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.cjs +57 -0
  64. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.d.ts +5 -0
  65. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.d.ts.map +1 -0
  66. package/dist/canvas/components/StageNode/StageTaskEntryConditionIcon.js +23 -0
  67. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.cjs +117 -0
  68. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts +18 -0
  69. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts.map +1 -0
  70. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.js +83 -0
  71. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.cjs +87 -0
  72. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts +22 -0
  73. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts.map +1 -0
  74. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.js +53 -0
  75. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.cjs +13 -17
  76. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.d.ts.map +1 -1
  77. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.js +14 -18
  78. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.types.d.ts +1 -1
  79. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.types.d.ts.map +1 -1
  80. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.cjs +149 -106
  81. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.d.ts.map +1 -1
  82. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.js +151 -108
  83. package/dist/canvas/components/Toolbar/NodeToolbar/useToolbarState.cjs +1 -1
  84. package/dist/canvas/components/Toolbar/NodeToolbar/useToolbarState.d.ts.map +1 -1
  85. package/dist/canvas/components/Toolbar/NodeToolbar/useToolbarState.js +1 -1
  86. package/dist/canvas/components/Toolbar/shared/ToolbarButton.cjs +7 -7
  87. package/dist/canvas/components/Toolbar/shared/ToolbarButton.js +7 -7
  88. package/dist/canvas/components/Toolbar/shared/ToolbarIconButton.cjs +64 -0
  89. package/dist/canvas/components/Toolbar/shared/ToolbarIconButton.d.ts +8 -0
  90. package/dist/canvas/components/Toolbar/shared/ToolbarIconButton.d.ts.map +1 -0
  91. package/dist/canvas/components/Toolbar/shared/ToolbarIconButton.js +30 -0
  92. package/dist/canvas/components/Toolbar/shared/index.cjs +4 -4
  93. package/dist/canvas/components/Toolbar/shared/index.d.ts +1 -1
  94. package/dist/canvas/components/Toolbar/shared/index.d.ts.map +1 -1
  95. package/dist/canvas/components/Toolbar/shared/index.js +1 -1
  96. package/dist/canvas/constants.cjs +1 -1
  97. package/dist/canvas/constants.d.ts +1 -1
  98. package/dist/canvas/constants.js +1 -1
  99. package/dist/canvas/storybook-utils/decorators.d.ts.map +1 -1
  100. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  101. package/dist/canvas/styles/variables.css +16 -0
  102. package/package.json +2 -2
  103. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.styles.cjs +0 -70
  104. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.styles.d.ts +0 -8
  105. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.styles.d.ts.map +0 -1
  106. package/dist/canvas/components/Toolbar/EdgeToolbar/EdgeToolbar.styles.js +0 -23
  107. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.styles.cjs +0 -236
  108. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.styles.d.ts +0 -26
  109. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.styles.d.ts.map +0 -1
  110. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.styles.js +0 -180
  111. package/dist/canvas/components/Toolbar/shared/ToolbarButton.styles.cjs +0 -78
  112. package/dist/canvas/components/Toolbar/shared/ToolbarButton.styles.d.ts +0 -9
  113. package/dist/canvas/components/Toolbar/shared/ToolbarButton.styles.d.ts.map +0 -1
  114. package/dist/canvas/components/Toolbar/shared/ToolbarButton.styles.js +0 -34
@@ -27,14 +27,40 @@ __webpack_require__.d(__webpack_exports__, {
27
27
  NodeToolbar: ()=>NodeToolbar
28
28
  });
29
29
  const jsx_runtime_namespaceObject = require("react/jsx-runtime");
30
+ const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
30
31
  const react_namespaceObject = require("motion/react");
31
32
  const external_react_namespaceObject = require("react");
32
33
  const icon_registry_cjs_namespaceObject = require("../../../utils/icon-registry.cjs");
33
34
  const external_CanvasTooltip_cjs_namespaceObject = require("../../CanvasTooltip.cjs");
34
35
  const index_cjs_namespaceObject = require("../shared/index.cjs");
35
- const external_NodeToolbar_styles_cjs_namespaceObject = require("./NodeToolbar.styles.cjs");
36
36
  const external_NodeToolbar_utils_cjs_namespaceObject = require("./NodeToolbar.utils.cjs");
37
37
  const external_useToolbarState_cjs_namespaceObject = require("./useToolbarState.cjs");
38
+ const POSITIONER_BASE_CLASS = 'absolute flex pointer-events-none z-10';
39
+ const POSITIONER_POSITION_CLASS = {
40
+ top: 'top-[-52px] left-0 right-0 flex-row',
41
+ bottom: 'bottom-[-52px] left-0 right-0 flex-row',
42
+ left: 'left-[-52px] top-0 bottom-0 flex-col',
43
+ right: 'right-[-52px] top-0 bottom-0 flex-col'
44
+ };
45
+ const POSITIONER_ALIGN_CLASS = {
46
+ start: 'justify-start',
47
+ center: 'justify-center',
48
+ end: 'justify-end'
49
+ };
50
+ const CONTAINER_BASE_CLASS = "flex items-center gap-1 p-1 min-h-10 min-w-10 shrink-0 bg-(--canvas-background-raised) border border-(--canvas-background-overlay) rounded-xl shadow-[0_2px_6px_rgba(0,0,0,0.08)] pointer-events-auto";
51
+ const CONTAINER_DIRECTION_CLASS = {
52
+ top: 'flex-row',
53
+ bottom: 'flex-row',
54
+ left: 'flex-col',
55
+ right: 'flex-col'
56
+ };
57
+ const SEPARATOR_BASE_CLASS = 'flex-[0_0_auto] bg-(--canvas-background-overlay) self-center';
58
+ const SEPARATOR_VERTICAL_CLASS = 'w-px h-5';
59
+ const SEPARATOR_HORIZONTAL_CLASS = 'w-full h-px';
60
+ const DROPDOWN_MENU_CLASS = "absolute top-[-2px] left-[calc(100%+4px)] min-w-[180px] bg-(--canvas-background-raised) border border-(--canvas-background-overlay) rounded-md shadow-[0_4px_12px_rgba(0,0,0,0.08),0_2px_4px_rgba(0,0,0,0.04)] p-1 z-[1000] pointer-events-auto";
61
+ const DROPDOWN_ITEM_BASE_CLASS = "flex items-center gap-3 w-full py-2 px-3 bg-transparent border-none rounded-[4px] text-sm text-(--canvas-foreground) text-left [transition:background_0.15s_ease] enabled:hover:bg-(--canvas-background-hover) future:enabled:hover:bg-(--canvas-background-overlay) [&>svg]:shrink-0 [&>svg]:text-(--canvas-foreground)";
62
+ const DROPDOWN_ITEM_DISABLED_CLASS = 'cursor-not-allowed opacity-40 pointer-events-none';
63
+ const DROPDOWN_ITEM_ENABLED_CLASS = 'cursor-pointer opacity-100';
38
64
  const NodeToolbarComponent = ({ nodeId, config, expanded, hidden })=>{
39
65
  const { isDropdownOpen, setIsDropdownOpen, dropdownRef, buttonRef, actionsToDisplay, displayState, shouldShowOverflow, overflowActionsToDisplay, separatorOrientation, toggleDropdown } = (0, external_useToolbarState_cjs_namespaceObject.useToolbarState)({
40
66
  config,
@@ -42,9 +68,21 @@ const NodeToolbarComponent = ({ nodeId, config, expanded, hidden })=>{
42
68
  nodeId,
43
69
  hidden
44
70
  });
71
+ const position = config.position || 'top';
72
+ const align = config.align || 'center';
73
+ const positionerClassName = (0, external_react_namespaceObject.useMemo)(()=>(0, apollo_wind_namespaceObject.cn)(POSITIONER_BASE_CLASS, POSITIONER_POSITION_CLASS[position], POSITIONER_ALIGN_CLASS[align]), [
74
+ position,
75
+ align
76
+ ]);
77
+ const containerClassName = (0, external_react_namespaceObject.useMemo)(()=>(0, apollo_wind_namespaceObject.cn)(CONTAINER_BASE_CLASS, CONTAINER_DIRECTION_CLASS[position]), [
78
+ position
79
+ ]);
80
+ const separatorClassName = (0, external_react_namespaceObject.useMemo)(()=>(0, apollo_wind_namespaceObject.cn)(SEPARATOR_BASE_CLASS, 'horizontal' === separatorOrientation ? SEPARATOR_HORIZONTAL_CLASS : SEPARATOR_VERTICAL_CLASS), [
81
+ separatorOrientation
82
+ ]);
45
83
  const toolbarAnimationVariants = (0, external_react_namespaceObject.useMemo)(()=>{
46
- const offsetAxis = 'top' === config.position || 'bottom' === config.position ? 'y' : 'x';
47
- const offsetAmount = 'top' === config.position || 'left' === config.position ? -10 : 10;
84
+ const offsetAxis = 'top' === position || 'bottom' === position ? 'y' : 'x';
85
+ const offsetAmount = 'top' === position || 'left' === position ? -10 : 10;
48
86
  const offset = 'pinned' !== displayState ? {
49
87
  [offsetAxis]: offsetAmount
50
88
  } : {};
@@ -66,118 +104,123 @@ const NodeToolbarComponent = ({ nodeId, config, expanded, hidden })=>{
66
104
  }
67
105
  };
68
106
  }, [
69
- config.position,
107
+ position,
70
108
  displayState
71
109
  ]);
72
110
  if (0 === config.actions.length && (!config.overflowActions || 0 === config.overflowActions.length)) return null;
73
111
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_namespaceObject.AnimatePresence, {
74
- children: 'hidden' !== displayState && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_NodeToolbar_styles_cjs_namespaceObject.StyledToolbarContainer, {
75
- layout: true,
76
- $position: config.position || 'top',
77
- $align: config.align || 'end',
78
- initial: toolbarAnimationVariants.initial,
79
- animate: toolbarAnimationVariants.animate,
80
- exit: toolbarAnimationVariants.exit,
81
- transition: {
82
- duration: 0.15,
83
- ease: 'easeOut'
84
- },
85
- role: "toolbar",
86
- children: [
87
- actionsToDisplay.map((item, i)=>(0, external_NodeToolbar_utils_cjs_namespaceObject.isSeparator)(item) ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_NodeToolbar_styles_cjs_namespaceObject.StyledToolbarSeparator, {
88
- $orientation: separatorOrientation
89
- }, `separator-${i}`) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.ToolbarButton, {
90
- action: item,
91
- layoutId: item.isPinned ? `toolbar-btn-${nodeId}-${item.id}` : void 0
92
- }, item.id)),
93
- shouldShowOverflow && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment, {
94
- children: [
95
- actionsToDisplay.length > 0 && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_NodeToolbar_styles_cjs_namespaceObject.StyledToolbarSeparator, {
96
- $orientation: separatorOrientation
97
- }),
98
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_NodeToolbar_styles_cjs_namespaceObject.StyledOverflowContainer, {
99
- children: [
100
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.StyledToolbarButton, {
101
- ref: buttonRef,
102
- type: "button",
103
- className: "nodrag nopan",
104
- onClick: toggleDropdown,
105
- "aria-label": "More options",
106
- "aria-expanded": isDropdownOpen,
107
- "aria-haspopup": "menu",
108
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_CanvasTooltip_cjs_namespaceObject.CanvasTooltip, {
109
- content: config.overflowLabel,
112
+ children: 'hidden' !== displayState && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
113
+ className: positionerClassName,
114
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(react_namespaceObject.motion.div, {
115
+ layout: "position",
116
+ className: containerClassName,
117
+ initial: toolbarAnimationVariants.initial,
118
+ animate: toolbarAnimationVariants.animate,
119
+ exit: toolbarAnimationVariants.exit,
120
+ transition: {
121
+ duration: 0.15,
122
+ ease: 'easeOut'
123
+ },
124
+ role: "toolbar",
125
+ children: [
126
+ actionsToDisplay.map((item, i)=>(0, external_NodeToolbar_utils_cjs_namespaceObject.isSeparator)(item) ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
127
+ className: separatorClassName
128
+ }, `separator-${i}`) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.ToolbarButton, {
129
+ action: item,
130
+ layoutId: item.isPinned ? `toolbar-btn-${nodeId}-${item.id}` : void 0
131
+ }, item.id)),
132
+ shouldShowOverflow && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment, {
133
+ children: [
134
+ actionsToDisplay.length > 0 && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
135
+ className: separatorClassName
136
+ }),
137
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
138
+ className: "relative",
139
+ children: [
140
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_CanvasTooltip_cjs_namespaceObject.CanvasTooltip, {
141
+ content: config.overflowLabel ?? 'More options',
110
142
  placement: "top",
111
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(icon_registry_cjs_namespaceObject.CanvasIcon, {
112
- icon: "ellipsis-vertical",
113
- size: 16
143
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.ToolbarIconButton, {
144
+ ref: buttonRef,
145
+ type: "button",
146
+ className: "nodrag nopan",
147
+ onClick: toggleDropdown,
148
+ "aria-label": config.overflowLabel ?? 'More options',
149
+ "aria-expanded": isDropdownOpen,
150
+ "aria-haspopup": "menu",
151
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(icon_registry_cjs_namespaceObject.CanvasIcon, {
152
+ icon: "ellipsis-vertical",
153
+ size: 16
154
+ })
114
155
  })
115
- })
116
- }),
117
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_namespaceObject.AnimatePresence, {
118
- children: isDropdownOpen && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_NodeToolbar_styles_cjs_namespaceObject.StyledDropdownMenu, {
119
- ref: dropdownRef,
120
- initial: {
121
- opacity: 0,
122
- x: -8
123
- },
124
- animate: {
125
- opacity: 1,
126
- x: 0
127
- },
128
- exit: {
129
- opacity: 0,
130
- x: -8
131
- },
132
- transition: {
133
- duration: 0.15
134
- },
135
- role: "menu",
136
- "aria-labelledby": buttonRef.current?.id,
137
- children: overflowActionsToDisplay.map((item, i)=>{
138
- if ((0, external_NodeToolbar_utils_cjs_namespaceObject.isSeparator)(item)) return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_NodeToolbar_styles_cjs_namespaceObject.StyledToolbarSeparator, {
139
- $orientation: "horizontal"
140
- }, `separator-${i}`);
141
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_NodeToolbar_styles_cjs_namespaceObject.StyledDropdownItem, {
142
- type: "button",
143
- className: "nodrag nopan",
144
- onClick: (e)=>{
145
- e.stopPropagation();
146
- e.preventDefault();
147
- if (!item.disabled) {
148
- item.onClick();
149
- setIsDropdownOpen(false);
150
- }
151
- },
152
- "aria-label": item.label,
153
- "aria-disabled": item.disabled,
154
- role: "menuitem",
155
- $disabled: item.disabled,
156
- children: [
157
- item.icon && 'string' == typeof item.icon && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
158
- style: {
159
- flex: 'unset',
160
- display: 'inline-flex'
161
- },
162
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(icon_registry_cjs_namespaceObject.CanvasIcon, {
163
- icon: item.icon,
164
- size: 16
156
+ }),
157
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_namespaceObject.AnimatePresence, {
158
+ children: isDropdownOpen && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_namespaceObject.motion.div, {
159
+ ref: dropdownRef,
160
+ className: DROPDOWN_MENU_CLASS,
161
+ initial: {
162
+ opacity: 0,
163
+ x: -8
164
+ },
165
+ animate: {
166
+ opacity: 1,
167
+ x: 0
168
+ },
169
+ exit: {
170
+ opacity: 0,
171
+ x: -8
172
+ },
173
+ transition: {
174
+ duration: 0.15
175
+ },
176
+ role: "menu",
177
+ "aria-label": config.overflowLabel ?? 'More options',
178
+ children: overflowActionsToDisplay.map((item, i)=>{
179
+ if ((0, external_NodeToolbar_utils_cjs_namespaceObject.isSeparator)(item)) return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
180
+ className: (0, apollo_wind_namespaceObject.cn)(SEPARATOR_BASE_CLASS, SEPARATOR_HORIZONTAL_CLASS)
181
+ }, `separator-${i}`);
182
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("button", {
183
+ type: "button",
184
+ className: (0, apollo_wind_namespaceObject.cn)(DROPDOWN_ITEM_BASE_CLASS, item.disabled ? DROPDOWN_ITEM_DISABLED_CLASS : DROPDOWN_ITEM_ENABLED_CLASS, 'nodrag nopan'),
185
+ onClick: (e)=>{
186
+ e.stopPropagation();
187
+ e.preventDefault();
188
+ if (!item.disabled) {
189
+ item.onClick();
190
+ setIsDropdownOpen(false);
191
+ }
192
+ },
193
+ "aria-label": item.label,
194
+ "aria-disabled": item.disabled,
195
+ disabled: item.disabled,
196
+ role: "menuitem",
197
+ children: [
198
+ item.icon && 'string' == typeof item.icon && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
199
+ style: {
200
+ flex: 'unset',
201
+ display: 'inline-flex'
202
+ },
203
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(icon_registry_cjs_namespaceObject.CanvasIcon, {
204
+ icon: item.icon,
205
+ size: 16
206
+ })
207
+ }),
208
+ item.icon && 'string' != typeof item.icon && item.icon,
209
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
210
+ className: "flex-1 text-(--canvas-foreground)",
211
+ children: item.label
165
212
  })
166
- }),
167
- item.icon && 'string' != typeof item.icon && item.icon,
168
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
169
- children: item.label
170
- })
171
- ]
172
- }, item.id);
213
+ ]
214
+ }, item.id);
215
+ })
173
216
  })
174
217
  })
175
- })
176
- ]
177
- })
178
- ]
179
- })
180
- ]
218
+ ]
219
+ })
220
+ ]
221
+ })
222
+ ]
223
+ })
181
224
  })
182
225
  });
183
226
  };
@@ -1 +1 @@
1
- {"version":3,"file":"NodeToolbar.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/NodeToolbar/NodeToolbar.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA8I5D,eAAO,MAAM,WAAW,6EA1I4C,gBAAgB,oDA0I/B,CAAC"}
1
+ {"version":3,"file":"NodeToolbar.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/NodeToolbar/NodeToolbar.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA+N5D,eAAO,MAAM,WAAW,6EA3K4C,gBAAgB,oDA2K/B,CAAC"}
@@ -1,12 +1,38 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
- import { AnimatePresence } from "motion/react";
2
+ import { cn } from "@uipath/apollo-wind";
3
+ import { AnimatePresence, motion } from "motion/react";
3
4
  import { memo, useMemo } from "react";
4
5
  import { CanvasIcon } from "../../../utils/icon-registry.js";
5
6
  import { CanvasTooltip } from "../../CanvasTooltip.js";
6
- import { StyledToolbarButton, ToolbarButton } from "../shared/index.js";
7
- import { StyledDropdownItem, StyledDropdownMenu, StyledOverflowContainer, StyledToolbarContainer, StyledToolbarSeparator } from "./NodeToolbar.styles.js";
7
+ import { ToolbarButton, ToolbarIconButton } from "../shared/index.js";
8
8
  import { isSeparator } from "./NodeToolbar.utils.js";
9
9
  import { useToolbarState } from "./useToolbarState.js";
10
+ const POSITIONER_BASE_CLASS = 'absolute flex pointer-events-none z-10';
11
+ const POSITIONER_POSITION_CLASS = {
12
+ top: 'top-[-52px] left-0 right-0 flex-row',
13
+ bottom: 'bottom-[-52px] left-0 right-0 flex-row',
14
+ left: 'left-[-52px] top-0 bottom-0 flex-col',
15
+ right: 'right-[-52px] top-0 bottom-0 flex-col'
16
+ };
17
+ const POSITIONER_ALIGN_CLASS = {
18
+ start: 'justify-start',
19
+ center: 'justify-center',
20
+ end: 'justify-end'
21
+ };
22
+ const CONTAINER_BASE_CLASS = "flex items-center gap-1 p-1 min-h-10 min-w-10 shrink-0 bg-(--canvas-background-raised) border border-(--canvas-background-overlay) rounded-xl shadow-[0_2px_6px_rgba(0,0,0,0.08)] pointer-events-auto";
23
+ const CONTAINER_DIRECTION_CLASS = {
24
+ top: 'flex-row',
25
+ bottom: 'flex-row',
26
+ left: 'flex-col',
27
+ right: 'flex-col'
28
+ };
29
+ const SEPARATOR_BASE_CLASS = 'flex-[0_0_auto] bg-(--canvas-background-overlay) self-center';
30
+ const SEPARATOR_VERTICAL_CLASS = 'w-px h-5';
31
+ const SEPARATOR_HORIZONTAL_CLASS = 'w-full h-px';
32
+ const DROPDOWN_MENU_CLASS = "absolute top-[-2px] left-[calc(100%+4px)] min-w-[180px] bg-(--canvas-background-raised) border border-(--canvas-background-overlay) rounded-md shadow-[0_4px_12px_rgba(0,0,0,0.08),0_2px_4px_rgba(0,0,0,0.04)] p-1 z-[1000] pointer-events-auto";
33
+ const DROPDOWN_ITEM_BASE_CLASS = "flex items-center gap-3 w-full py-2 px-3 bg-transparent border-none rounded-[4px] text-sm text-(--canvas-foreground) text-left [transition:background_0.15s_ease] enabled:hover:bg-(--canvas-background-hover) future:enabled:hover:bg-(--canvas-background-overlay) [&>svg]:shrink-0 [&>svg]:text-(--canvas-foreground)";
34
+ const DROPDOWN_ITEM_DISABLED_CLASS = 'cursor-not-allowed opacity-40 pointer-events-none';
35
+ const DROPDOWN_ITEM_ENABLED_CLASS = 'cursor-pointer opacity-100';
10
36
  const NodeToolbarComponent = ({ nodeId, config, expanded, hidden })=>{
11
37
  const { isDropdownOpen, setIsDropdownOpen, dropdownRef, buttonRef, actionsToDisplay, displayState, shouldShowOverflow, overflowActionsToDisplay, separatorOrientation, toggleDropdown } = useToolbarState({
12
38
  config,
@@ -14,9 +40,21 @@ const NodeToolbarComponent = ({ nodeId, config, expanded, hidden })=>{
14
40
  nodeId,
15
41
  hidden
16
42
  });
43
+ const position = config.position || 'top';
44
+ const align = config.align || 'center';
45
+ const positionerClassName = useMemo(()=>cn(POSITIONER_BASE_CLASS, POSITIONER_POSITION_CLASS[position], POSITIONER_ALIGN_CLASS[align]), [
46
+ position,
47
+ align
48
+ ]);
49
+ const containerClassName = useMemo(()=>cn(CONTAINER_BASE_CLASS, CONTAINER_DIRECTION_CLASS[position]), [
50
+ position
51
+ ]);
52
+ const separatorClassName = useMemo(()=>cn(SEPARATOR_BASE_CLASS, 'horizontal' === separatorOrientation ? SEPARATOR_HORIZONTAL_CLASS : SEPARATOR_VERTICAL_CLASS), [
53
+ separatorOrientation
54
+ ]);
17
55
  const toolbarAnimationVariants = useMemo(()=>{
18
- const offsetAxis = 'top' === config.position || 'bottom' === config.position ? 'y' : 'x';
19
- const offsetAmount = 'top' === config.position || 'left' === config.position ? -10 : 10;
56
+ const offsetAxis = 'top' === position || 'bottom' === position ? 'y' : 'x';
57
+ const offsetAmount = 'top' === position || 'left' === position ? -10 : 10;
20
58
  const offset = 'pinned' !== displayState ? {
21
59
  [offsetAxis]: offsetAmount
22
60
  } : {};
@@ -38,118 +76,123 @@ const NodeToolbarComponent = ({ nodeId, config, expanded, hidden })=>{
38
76
  }
39
77
  };
40
78
  }, [
41
- config.position,
79
+ position,
42
80
  displayState
43
81
  ]);
44
82
  if (0 === config.actions.length && (!config.overflowActions || 0 === config.overflowActions.length)) return null;
45
83
  return /*#__PURE__*/ jsx(AnimatePresence, {
46
- children: 'hidden' !== displayState && /*#__PURE__*/ jsxs(StyledToolbarContainer, {
47
- layout: true,
48
- $position: config.position || 'top',
49
- $align: config.align || 'end',
50
- initial: toolbarAnimationVariants.initial,
51
- animate: toolbarAnimationVariants.animate,
52
- exit: toolbarAnimationVariants.exit,
53
- transition: {
54
- duration: 0.15,
55
- ease: 'easeOut'
56
- },
57
- role: "toolbar",
58
- children: [
59
- actionsToDisplay.map((item, i)=>isSeparator(item) ? /*#__PURE__*/ jsx(StyledToolbarSeparator, {
60
- $orientation: separatorOrientation
61
- }, `separator-${i}`) : /*#__PURE__*/ jsx(ToolbarButton, {
62
- action: item,
63
- layoutId: item.isPinned ? `toolbar-btn-${nodeId}-${item.id}` : void 0
64
- }, item.id)),
65
- shouldShowOverflow && /*#__PURE__*/ jsxs(Fragment, {
66
- children: [
67
- actionsToDisplay.length > 0 && /*#__PURE__*/ jsx(StyledToolbarSeparator, {
68
- $orientation: separatorOrientation
69
- }),
70
- /*#__PURE__*/ jsxs(StyledOverflowContainer, {
71
- children: [
72
- /*#__PURE__*/ jsx(StyledToolbarButton, {
73
- ref: buttonRef,
74
- type: "button",
75
- className: "nodrag nopan",
76
- onClick: toggleDropdown,
77
- "aria-label": "More options",
78
- "aria-expanded": isDropdownOpen,
79
- "aria-haspopup": "menu",
80
- children: /*#__PURE__*/ jsx(CanvasTooltip, {
81
- content: config.overflowLabel,
84
+ children: 'hidden' !== displayState && /*#__PURE__*/ jsx("div", {
85
+ className: positionerClassName,
86
+ children: /*#__PURE__*/ jsxs(motion.div, {
87
+ layout: "position",
88
+ className: containerClassName,
89
+ initial: toolbarAnimationVariants.initial,
90
+ animate: toolbarAnimationVariants.animate,
91
+ exit: toolbarAnimationVariants.exit,
92
+ transition: {
93
+ duration: 0.15,
94
+ ease: 'easeOut'
95
+ },
96
+ role: "toolbar",
97
+ children: [
98
+ actionsToDisplay.map((item, i)=>isSeparator(item) ? /*#__PURE__*/ jsx("div", {
99
+ className: separatorClassName
100
+ }, `separator-${i}`) : /*#__PURE__*/ jsx(ToolbarButton, {
101
+ action: item,
102
+ layoutId: item.isPinned ? `toolbar-btn-${nodeId}-${item.id}` : void 0
103
+ }, item.id)),
104
+ shouldShowOverflow && /*#__PURE__*/ jsxs(Fragment, {
105
+ children: [
106
+ actionsToDisplay.length > 0 && /*#__PURE__*/ jsx("div", {
107
+ className: separatorClassName
108
+ }),
109
+ /*#__PURE__*/ jsxs("div", {
110
+ className: "relative",
111
+ children: [
112
+ /*#__PURE__*/ jsx(CanvasTooltip, {
113
+ content: config.overflowLabel ?? 'More options',
82
114
  placement: "top",
83
- children: /*#__PURE__*/ jsx(CanvasIcon, {
84
- icon: "ellipsis-vertical",
85
- size: 16
115
+ children: /*#__PURE__*/ jsx(ToolbarIconButton, {
116
+ ref: buttonRef,
117
+ type: "button",
118
+ className: "nodrag nopan",
119
+ onClick: toggleDropdown,
120
+ "aria-label": config.overflowLabel ?? 'More options',
121
+ "aria-expanded": isDropdownOpen,
122
+ "aria-haspopup": "menu",
123
+ children: /*#__PURE__*/ jsx(CanvasIcon, {
124
+ icon: "ellipsis-vertical",
125
+ size: 16
126
+ })
86
127
  })
87
- })
88
- }),
89
- /*#__PURE__*/ jsx(AnimatePresence, {
90
- children: isDropdownOpen && /*#__PURE__*/ jsx(StyledDropdownMenu, {
91
- ref: dropdownRef,
92
- initial: {
93
- opacity: 0,
94
- x: -8
95
- },
96
- animate: {
97
- opacity: 1,
98
- x: 0
99
- },
100
- exit: {
101
- opacity: 0,
102
- x: -8
103
- },
104
- transition: {
105
- duration: 0.15
106
- },
107
- role: "menu",
108
- "aria-labelledby": buttonRef.current?.id,
109
- children: overflowActionsToDisplay.map((item, i)=>{
110
- if (isSeparator(item)) return /*#__PURE__*/ jsx(StyledToolbarSeparator, {
111
- $orientation: "horizontal"
112
- }, `separator-${i}`);
113
- return /*#__PURE__*/ jsxs(StyledDropdownItem, {
114
- type: "button",
115
- className: "nodrag nopan",
116
- onClick: (e)=>{
117
- e.stopPropagation();
118
- e.preventDefault();
119
- if (!item.disabled) {
120
- item.onClick();
121
- setIsDropdownOpen(false);
122
- }
123
- },
124
- "aria-label": item.label,
125
- "aria-disabled": item.disabled,
126
- role: "menuitem",
127
- $disabled: item.disabled,
128
- children: [
129
- item.icon && 'string' == typeof item.icon && /*#__PURE__*/ jsx("span", {
130
- style: {
131
- flex: 'unset',
132
- display: 'inline-flex'
133
- },
134
- children: /*#__PURE__*/ jsx(CanvasIcon, {
135
- icon: item.icon,
136
- size: 16
128
+ }),
129
+ /*#__PURE__*/ jsx(AnimatePresence, {
130
+ children: isDropdownOpen && /*#__PURE__*/ jsx(motion.div, {
131
+ ref: dropdownRef,
132
+ className: DROPDOWN_MENU_CLASS,
133
+ initial: {
134
+ opacity: 0,
135
+ x: -8
136
+ },
137
+ animate: {
138
+ opacity: 1,
139
+ x: 0
140
+ },
141
+ exit: {
142
+ opacity: 0,
143
+ x: -8
144
+ },
145
+ transition: {
146
+ duration: 0.15
147
+ },
148
+ role: "menu",
149
+ "aria-label": config.overflowLabel ?? 'More options',
150
+ children: overflowActionsToDisplay.map((item, i)=>{
151
+ if (isSeparator(item)) return /*#__PURE__*/ jsx("div", {
152
+ className: cn(SEPARATOR_BASE_CLASS, SEPARATOR_HORIZONTAL_CLASS)
153
+ }, `separator-${i}`);
154
+ return /*#__PURE__*/ jsxs("button", {
155
+ type: "button",
156
+ className: cn(DROPDOWN_ITEM_BASE_CLASS, item.disabled ? DROPDOWN_ITEM_DISABLED_CLASS : DROPDOWN_ITEM_ENABLED_CLASS, 'nodrag nopan'),
157
+ onClick: (e)=>{
158
+ e.stopPropagation();
159
+ e.preventDefault();
160
+ if (!item.disabled) {
161
+ item.onClick();
162
+ setIsDropdownOpen(false);
163
+ }
164
+ },
165
+ "aria-label": item.label,
166
+ "aria-disabled": item.disabled,
167
+ disabled: item.disabled,
168
+ role: "menuitem",
169
+ children: [
170
+ item.icon && 'string' == typeof item.icon && /*#__PURE__*/ jsx("span", {
171
+ style: {
172
+ flex: 'unset',
173
+ display: 'inline-flex'
174
+ },
175
+ children: /*#__PURE__*/ jsx(CanvasIcon, {
176
+ icon: item.icon,
177
+ size: 16
178
+ })
179
+ }),
180
+ item.icon && 'string' != typeof item.icon && item.icon,
181
+ /*#__PURE__*/ jsx("span", {
182
+ className: "flex-1 text-(--canvas-foreground)",
183
+ children: item.label
137
184
  })
138
- }),
139
- item.icon && 'string' != typeof item.icon && item.icon,
140
- /*#__PURE__*/ jsx("span", {
141
- children: item.label
142
- })
143
- ]
144
- }, item.id);
185
+ ]
186
+ }, item.id);
187
+ })
145
188
  })
146
189
  })
147
- })
148
- ]
149
- })
150
- ]
151
- })
152
- ]
190
+ ]
191
+ })
192
+ ]
193
+ })
194
+ ]
195
+ })
153
196
  })
154
197
  });
155
198
  };
@@ -119,7 +119,7 @@ const useToolbarState = ({ config, expanded, nodeId, hidden })=>{
119
119
  displayState,
120
120
  actionsToDisplay,
121
121
  overflowActionsToDisplay: overflowActionsWithState,
122
- separatorOrientation: 'top' === config.position || 'bottom' === config.position ? 'vertical' : 'horizontal',
122
+ separatorOrientation: config.position && 'top' !== config.position && 'bottom' !== config.position ? 'horizontal' : 'vertical',
123
123
  toggleDropdown
124
124
  };
125
125
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useToolbarState.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/NodeToolbar/useToolbarState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACrD,YAAY,EAAE,mBAAmB,CAAC;IAClC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,wBAAwB,EAAE,oBAAoB,EAAE,CAAC;IACjD,oBAAoB,EAAE,YAAY,GAAG,UAAU,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC/C;AAED,eAAO,MAAM,eAAe,GAAI,uCAK7B,oBAAoB,KAAG,qBAsHzB,CAAC"}
1
+ {"version":3,"file":"useToolbarState.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/NodeToolbar/useToolbarState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACrD,YAAY,EAAE,mBAAmB,CAAC;IAClC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,wBAAwB,EAAE,oBAAoB,EAAE,CAAC;IACjD,oBAAoB,EAAE,YAAY,GAAG,UAAU,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC/C;AAED,eAAO,MAAM,eAAe,GAAI,uCAK7B,oBAAoB,KAAG,qBAwHzB,CAAC"}